commit adad8c0787b478b16c5aeac21229274d076f5cf1 Author: Robert MacGregor Date: Mon Jul 17 22:51:48 2017 -0400 v21570: Initial Tribes 2 release. diff --git a/AMDW2KCardProfiles.cs b/AMDW2KCardProfiles.cs new file mode 100644 index 0000000..59baa01 --- /dev/null +++ b/AMDW2KCardProfiles.cs @@ -0,0 +1,10 @@ +// Explicit card profiles for Windows 2K on AMD architectures +// +// Vendor Renderer AllowOpenGL AllowD3D PreferOpenGL +//---------------------------------------------------------------------------------- +addOSCardProfile( "Matrox", "G400", false, true, false); +addOSCardProfile( "Matrox", "G450", false, true, false); +addOSCardProfile( "3Dfx", "Voodoo4", true, false, true); +addOSCardProfile( "3Dfx", "Voodoo5", true, false, true); +addOSCardProfile( "3Dlabs", "GLINT R3 PT", false, true, false); +addOSCardProfile( "NVIDIA", "GeForce2", true, false, true); diff --git a/AMDW98CardProfiles.cs b/AMDW98CardProfiles.cs new file mode 100644 index 0000000..0503b0c --- /dev/null +++ b/AMDW98CardProfiles.cs @@ -0,0 +1,16 @@ +// Explicit card profiles for Windows 98 on AMD architectures +// +// Vendor Renderer AllowOpenGL AllowD3D PreferOpenGL +//---------------------------------------------------------------------------------------------------------------------------------------- +addOSCardProfile( "Matrox", "G400", false, true, false); +addOSCardProfile( "Matrox", "G450", false, true, false); +addOSCardProfile( "3Dfx", "Banshee", true, false, true); +addOSCardProfile( "3Dfx", "3Dfx/Voodoo3 (tm)/2 TMUs/16 MB SDRAM/3DNow!/ICD (Nov 2 2000)", false, true, false); // Voodoo3 +addOSCardProfile( "3Dfx", "3Dfx/Voodoo3 (tm)/2 TMUs/16 MB SDRAM/3DNow!/ICD (Jan 17 2000)", true, false, true); // Voodoo3 3500 TV +addOSCardProfile( "3Dfx", "Voodoo4", false, true, false); +addOSCardProfile( "3Dfx", "Voodoo5", true, true, false); +addOSCardProfile( "ATI", "RAGE 128", true, false, true); +addOSCardProfile( "ATI", "Radeon", true, true, false); +addOSCardProfile( "S3", "Savage2000", true, false, true); +addOSCardProfile( "Imagination", "PowerVR KYRO", true, true, false); +addOSCardProfile( "3Dlabs", "GLINT R3 PT", true, true, false); diff --git a/AMDW98SECardProfiles.cs b/AMDW98SECardProfiles.cs new file mode 100644 index 0000000..9dd29a9 --- /dev/null +++ b/AMDW98SECardProfiles.cs @@ -0,0 +1,16 @@ +// Explicit card profiles for Windows 98SE on AMD architectures +// +// Vendor Renderer AllowOpenGL AllowD3D PreferOpenGL +//---------------------------------------------------------------------------------------------------------------------------------------- +addOSCardProfile( "Matrox", "G400", false, true, false); +addOSCardProfile( "Matrox", "G450", false, true, false); +addOSCardProfile( "3Dfx", "Banshee", true, false, true); +addOSCardProfile( "3Dfx", "3Dfx/Voodoo3 (tm)/2 TMUs/16 MB SDRAM/3DNow!/ICD (Nov 2 2000)", false, true, false); // Voodoo3 +addOSCardProfile( "3Dfx", "3Dfx/Voodoo3 (tm)/2 TMUs/16 MB SDRAM/3DNow!/ICD (Jan 17 2000)", true, false, true); // Voodoo3 3500 TV +addOSCardProfile( "3Dfx", "Voodoo4", false, true, false); +addOSCardProfile( "3Dfx", "Voodoo5", true, true, false); +addOSCardProfile( "ATI", "RAGE 128", true, false, true); +addOSCardProfile( "ATI", "Radeon", true, true, false); +addOSCardProfile( "S3", "Savage2000", true, false, true); +addOSCardProfile( "Imagination", "PowerVR KYRO", true, true, false); +addOSCardProfile( "3Dlabs", "GLINT R3 PT", true, true, false); diff --git a/AMDWMECardProfiles.cs b/AMDWMECardProfiles.cs new file mode 100644 index 0000000..2a6d3b1 --- /dev/null +++ b/AMDWMECardProfiles.cs @@ -0,0 +1,16 @@ +// Explicit card profiles for Windows ME on AMD architectures +// +// Vendor Renderer AllowOpenGL AllowD3D PreferOpenGL +//---------------------------------------------------------------------------------------------------------------------------------------- +addOSCardProfile( "Matrox", "G400", false, true, false); +addOSCardProfile( "Matrox", "G450", false, true, false); +addOSCardProfile( "3Dfx", "Banshee", true, false, true); +addOSCardProfile( "3Dfx", "3Dfx/Voodoo3 (tm)/2 TMUs/16 MB SDRAM/3DNow!/ICD (Nov 2 2000)", false, true, false); // Voodoo3 +addOSCardProfile( "3Dfx", "3Dfx/Voodoo3 (tm)/2 TMUs/16 MB SDRAM/3DNow!/ICD (Jan 17 2000)", true, false, true); // Voodoo3 3500 TV +addOSCardProfile( "3Dfx", "Voodoo4", false, true, false); +addOSCardProfile( "3Dfx", "Voodoo5", true, true, false); +addOSCardProfile( "ATI", "RAGE 128", true, false, true); +addOSCardProfile( "ATI", "Radeon", true, true, false); +addOSCardProfile( "S3", "Savage2000", true, false, true); +addOSCardProfile( "Imagination", "PowerVR KYRO", true, true, false); +addOSCardProfile( "3Dlabs", "GLINT R3 PT", true, true, false); diff --git a/CardProfiles.cs b/CardProfiles.cs new file mode 100644 index 0000000..2c27a59 --- /dev/null +++ b/CardProfiles.cs @@ -0,0 +1,35 @@ +// Explicit card profiles +// +// SafeMode -- forces destruction of rendering context before resolution change +// LockArray -- inhibits compiled vertex arrays if available +// SubImage -- inhibits glTexSubImage* +// FogTexture -- require bound texture for combine extension +// NoEnvColor -- card doesn't support texture environment color +// ClipHigh -- clip off high resolutions (> 1152x864) +// DeleteContext -- delete rendering context (ignored for all OSs except W2K) +// TexCompress -- inhibits texture compression if available +// InteriorLock -- lock arrays rendering Interiors +// SkipFirstFog -- skip first two-pass fog (dumb 3Dfx hack) +// Only16 -- inhibit the 32-bit resolutions +// NoArraysAlpha -- don't use glDrawArrays with a GL_ALPHA texture +// ProFile -- explicit file of graphic settings +// +// Vendor Renderer SafeMode LockArray SubImage FogTexture NoEnvColor ClipHigh DeleteContext TexCompress InteriorLock SkipFirstFog Only16 NoArraysAlpha ProFile +//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +addCardProfile("3Dfx", "Banshee", true, true, true, true, true, false, false, true, true, true, false, true, "Voodoo3"); +addCardProfile("3Dfx", "Voodoo3", true, true, true, true, true, false, true, true, true, true, false, true, "Voodoo3"); +addCardProfile("3Dfx", "Voodoo4", true, false, true, false, true, false, false, true, true, false, false, false, "Voodoo5"); +addCardProfile("3Dfx", "Voodoo5", true, false, true, false, true, false, false, true, true, false, false, false, "Voodoo5"); +addCardProfile("ATI", "RAGE 128 Pro Dual", true, true, true, true, true, false, true, true, true, false, true, false, "Rage128"); +addCardProfile("ATI", "RAGE 128", true, true, true, true, true, false, true, true, true, false, false, false, "Rage128"); +addCardProfile("NVIDIA", "RIVA TNT/", true, true, true, false, false, true, true, true, false, false, false, false, "TNT"); +addCardProfile("NVIDIA", "RIVA TNT2/", true, true, true, false, false, false, true, true, false, false, false, false, "TNT"); +addCardProfile("NVIDIA", "*", true, true, true, false, false, false, true, true, true, false, false, false, "GeForce"); +addCardProfile("Matrox", "G200", true, false, false, false, true, false, true, true, true, false, false, false, "Matrox"); +addCardProfile("Matrox", "G400", true, true, false, false, true, false, true, true, true, false, false, false, "Matrox"); +addCardProfile("Matrox", "*", true, true, false, false, true, false, true, true, true, false, false, false, "Matrox"); +addCardProfile("S3", "Savage2000", true, false, true, false, true, false, true, true, true, false, false, false, "Viper"); +addCardProfile("ATI", "Radeon DDR x86/MMX/3DNow!", true, true, true, false, false, false, true, false, false, false, false, false, "Radeon"); +addCardProfile("ATI", "Radeon", true, true, true, false, false, false, true, false, true, false, false, false, "Radeon"); +addCardProfile("3Dlabs", "GLINT R3 PT", true, true, true, false, false, false, true, true, true, false, false, false, "Permedia3"); +addCardProfile("Imagination", "PowerVR KYRO", true, true, true, false, false, false, true, true, true, false, false, false, "Kyro"); \ No newline at end of file diff --git a/DRI-Matrox.cs b/DRI-Matrox.cs new file mode 100644 index 0000000..08def1b --- /dev/null +++ b/DRI-Matrox.cs @@ -0,0 +1,23 @@ +$pref::Audio::provider = "Miles Fast 2D Positional Audio"; +$pref::Video::fullScreen = 1; +$pref::Video::resolution = "640 480 16"; +$pref::OpenGL::mipReduction = 1; +$pref::shadows = 0.1; +$pref::Terrain::enableDetails = 1; +$pref::environmentMaps = 0; +$pref::Interior::DynamicLights = 0; +$pref::Interior::ShowEnvironmentMaps = 0; +$pref::precipitationOn = 0; +$pref::decalsOn = 0; +$pref::Terrain::screenError = 20; +$pref::TS::detailAdjust = "0.675439"; +$pref::numCloudLayers = 0; +$pref::OpenGL::disableEXTCompiledVertexArray = "1"; +$pref::OpenGL::interiorMipReduction = 2; +$pref::OpenGL::skyMipReduction = 2; +$pref::Terrain::texDetail = "5"; +$pref::Interior::VertexLighting = "1"; +$pref::Player::renderMyItems = "1"; +$pref::Player::renderMyPlayer = "0"; +$pref::TS::screenError = "8"; +$pref::Terrain::dynamicLights = "1"; diff --git a/DRI-Radeon.cs b/DRI-Radeon.cs new file mode 100644 index 0000000..3b8e8c4 --- /dev/null +++ b/DRI-Radeon.cs @@ -0,0 +1,23 @@ +$pref::Audio::provider = "Miles Fast 2D Positional Audio"; +$pref::Video::fullScreen = 1; +$pref::Video::resolution = "800 600 32"; +$pref::OpenGL::mipReduction = 0; +$pref::shadows = 0.5; +$pref::Terrain::enableDetails = 1; +$pref::environmentMaps = 1; +$pref::Interior::DynamicLights = 1; +$pref::Interior::ShowEnvironmentMaps = 1; +$pref::precipitationOn = 1; +$pref::decalsOn = 1; +$pref::Terrain::screenError = 8; +$pref::TS::detailAdjust = "0.833333"; +$pref::numCloudLayers = 1; +$pref::OpenGL::disableEXTCompiledVertexArray = "1"; +$pref::OpenGL::interiorMipReduction = 1; +$pref::OpenGL::skyMipReduction = 1; +$pref::Terrain::texDetail = "1"; +$pref::Interior::VertexLighting = "0"; +$pref::Player::renderMyItems = "1"; +$pref::Player::renderMyPlayer = "0"; +$pref::TS::screenError = "5"; +$pref::Terrain::dynamicLights = "1"; diff --git a/DRI-Rage128.cs b/DRI-Rage128.cs new file mode 100644 index 0000000..f398982 --- /dev/null +++ b/DRI-Rage128.cs @@ -0,0 +1,23 @@ +$pref::Audio::provider = "Miles Fast 2D Positional Audio"; +$pref::Video::fullScreen = 1; +$pref::Video::resolution = "800 600 16"; +$pref::OpenGL::mipReduction = 1; +$pref::shadows = 0.1; +$pref::Terrain::enableDetails = 1; +$pref::environmentMaps = 1; +$pref::Interior::DynamicLights = 1; +$pref::Interior::ShowEnvironmentMaps = 1; +$pref::precipitationOn = 1; +$pref::decalsOn = 1; +$pref::Terrain::screenError = 20; +$pref::TS::detailAdjust = "0.675439"; +$pref::numCloudLayers = 0; +$pref::OpenGL::disableEXTCompiledVertexArray = "1"; +$pref::OpenGL::interiorMipReduction = 1; +$pref::OpenGL::skyMipReduction = 1; +$pref::Terrain::texDetail = "3"; +$pref::Interior::VertexLighting = "1"; +$pref::Player::renderMyItems = "1"; +$pref::Player::renderMyPlayer = "0"; +$pref::TS::screenError = "8"; +$pref::Terrain::dynamicLights = "1"; diff --git a/DRI-Voodoo3.cs b/DRI-Voodoo3.cs new file mode 100644 index 0000000..f516c5d --- /dev/null +++ b/DRI-Voodoo3.cs @@ -0,0 +1,23 @@ +$pref::Audio::provider = "Miles Fast 2D Positional Audio"; +$pref::Video::fullScreen = 1; +$pref::Video::resolution = "640 480 16"; +$pref::OpenGL::mipReduction = 1; +$pref::shadows = 0.1; +$pref::Terrain::enableDetails = 1; +$pref::environmentMaps = 0; +$pref::Interior::DynamicLights = 0; +$pref::Interior::ShowEnvironmentMaps = 0; +$pref::precipitationOn = 0; +$pref::decalsOn = 0; +$pref::Terrain::screenError = 20; +$pref::TS::detailAdjust = "0.675439"; +$pref::numCloudLayers = 0; +$pref::OpenGL::disableEXTCompiledVertexArray = "1"; +$pref::OpenGL::interiorMipReduction = 2; +$pref::OpenGL::skyMipReduction = 2; +$pref::Terrain::texDetail = "0"; // lower number is actually faster here (go figure) +$pref::Interior::VertexLighting = "1"; +$pref::Player::renderMyItems = "1"; +$pref::Player::renderMyPlayer = "0"; +$pref::TS::screenError = "8"; +$pref::Terrain::dynamicLights = "1"; diff --git a/DRI-Voodoo5.cs b/DRI-Voodoo5.cs new file mode 100644 index 0000000..5e4cd09 --- /dev/null +++ b/DRI-Voodoo5.cs @@ -0,0 +1,23 @@ +$pref::Audio::provider = "Miles Fast 2D Positional Audio"; +$pref::Video::fullScreen = 1; +$pref::Video::resolution = "800 600 16"; +$pref::OpenGL::mipReduction = 0; +$pref::shadows = 0.5; +$pref::Terrain::enableDetails = 1; +$pref::environmentMaps = 1; +$pref::Interior::DynamicLights = 0; +$pref::Interior::ShowEnvironmentMaps = 0; +$pref::precipitationOn = 1; +$pref::decalsOn = 1; +$pref::Terrain::screenError = 20; +$pref::TS::detailAdjust = "0.675439"; +$pref::numCloudLayers = 1; +$pref::OpenGL::disableEXTCompiledVertexArray = "1"; +$pref::OpenGL::interiorMipReduction = 1; +$pref::OpenGL::skyMipReduction = 1; +$pref::Terrain::texDetail = "0"; // lower number is actually faster here (go figure) +$pref::Interior::VertexLighting = "1"; +$pref::Player::renderMyItems = "1"; +$pref::Player::renderMyPlayer = "0"; +$pref::TS::screenError = "8"; +$pref::Terrain::dynamicLights = "1"; diff --git a/GeForce.cs b/GeForce.cs new file mode 100644 index 0000000..dc4643a --- /dev/null +++ b/GeForce.cs @@ -0,0 +1,22 @@ +$pref::Audio::provider = "Miles Fast 2D Positional Audio"; +$pref::Video::fullScreen = 1; +$pref::Video::resolution = "800 600 32"; +$pref::OpenGL::mipReduction = 0; +$pref::shadows = 0.5; +$pref::Terrain::enableDetails = 1; +$pref::environmentMaps = 1; +$pref::Interior::DynamicLights = 1; +$pref::Interior::ShowEnvironmentMaps = 1; +$pref::precipitationOn = 1; +$pref::decalsOn = 1; +$pref::Terrain::screenError = 8; +$pref::TS::detailAdjust = "0.833333"; +$pref::numCloudLayers = 1; +$pref::OpenGL::interiorMipReduction = 1; +$pref::OpenGL::skyMipReduction = 1; +$pref::Terrain::texDetail = "1"; +$pref::Interior::VertexLighting = "0"; +$pref::Player::renderMyItems = "1"; +$pref::Player::renderMyPlayer = "0"; +$pref::TS::screenError = "5"; +$pref::Terrain::dynamicLights = "1"; \ No newline at end of file diff --git a/HighProfile.cs b/HighProfile.cs new file mode 100644 index 0000000..dc4643a --- /dev/null +++ b/HighProfile.cs @@ -0,0 +1,22 @@ +$pref::Audio::provider = "Miles Fast 2D Positional Audio"; +$pref::Video::fullScreen = 1; +$pref::Video::resolution = "800 600 32"; +$pref::OpenGL::mipReduction = 0; +$pref::shadows = 0.5; +$pref::Terrain::enableDetails = 1; +$pref::environmentMaps = 1; +$pref::Interior::DynamicLights = 1; +$pref::Interior::ShowEnvironmentMaps = 1; +$pref::precipitationOn = 1; +$pref::decalsOn = 1; +$pref::Terrain::screenError = 8; +$pref::TS::detailAdjust = "0.833333"; +$pref::numCloudLayers = 1; +$pref::OpenGL::interiorMipReduction = 1; +$pref::OpenGL::skyMipReduction = 1; +$pref::Terrain::texDetail = "1"; +$pref::Interior::VertexLighting = "0"; +$pref::Player::renderMyItems = "1"; +$pref::Player::renderMyPlayer = "0"; +$pref::TS::screenError = "5"; +$pref::Terrain::dynamicLights = "1"; \ No newline at end of file diff --git a/IntelW2KCardProfiles.cs b/IntelW2KCardProfiles.cs new file mode 100644 index 0000000..9bed388 --- /dev/null +++ b/IntelW2KCardProfiles.cs @@ -0,0 +1,10 @@ +// Explicit card profiles for Windows 2K on Intel architectures +// +// Vendor Renderer AllowOpenGL AllowD3D PreferOpenGL +//---------------------------------------------------------------------------------------- +addOSCardProfile( "3Dfx", "Voodoo4", true, false, true); +addOSCardProfile( "3Dfx", "Voodoo5", true, false, true); +addOSCardProfile( "S3", "Savage2000", true, false, true); +addOSCardProfile( "Imagination", "PowerVR KYRO", false, true, false); +addOSCardProfile( "3Dlabs", "GLINT R3 PT", false, true, false); +addOSCardProfile( "NVIDIA", "GeForce2", true, false, true); \ No newline at end of file diff --git a/IntelW95CardProfiles.cs b/IntelW95CardProfiles.cs new file mode 100644 index 0000000..0de007f --- /dev/null +++ b/IntelW95CardProfiles.cs @@ -0,0 +1,14 @@ +// Explicit card profiles for Windows 95B on Intel architectures +// +// Vendor Renderer AllowOpenGL AllowD3D PreferOpenGL +//---------------------------------------------------------------------------------------------------------------------------------- +addOSCardProfile( "ATI", "RAGE 128", true, false, true); +addOSCardProfile( "Matrox", "G450", false, true, false); +addOSCardProfile( "3Dfx", "Banshee", true, false, true); +addOSCardProfile( "3Dfx", "3Dfx/Voodoo3 (tm)/2 TMUs/16 MB SDRAM/ICD (Nov 2 2000)", false, true, false); // Voodoo3 +addOSCardProfile( "3Dfx", "3Dfx/Voodoo3 (tm)/2 TMUs/16 MB SDRAM/ICD (Jan 17 2000)", true, false, true); // Voodoo3 3500 TV +addOSCardProfile( "3Dfx", "Voodoo4", true, false, true); +addOSCardProfile( "3Dfx", "Voodoo5", true, true, false); +addOSCardProfile( "S3", "Savage2000", true, false, true); +addOSCardProfile( "Imagination", "PowerVR KYRO", false, true, false); +addOSCardProfile( "NVIDIA", "GeForce2", true, false, true); diff --git a/IntelW98CardProfiles.cs b/IntelW98CardProfiles.cs new file mode 100644 index 0000000..c2206a2 --- /dev/null +++ b/IntelW98CardProfiles.cs @@ -0,0 +1,12 @@ +// Explicit card profiles for Windows 98 on Intel architectures +// +// Vendor Renderer AllowOpenGL AllowD3D PreferOpenGL +//---------------------------------------------------------------------------------------------------------------------------------- +addOSCardProfile( "3Dfx", "Banshee", true, false, true); +addOSCardProfile( "3Dfx", "3Dfx/Voodoo3 (tm)/2 TMUs/16 MB SDRAM/ICD (Nov 2 2000)", false, true, false); // Voodoo3 +addOSCardProfile( "3Dfx", "3Dfx/Voodoo3 (tm)/2 TMUs/16 MB SDRAM/ICD (Jan 17 2000)", true, false, true); // Voodoo3 3500 TV +addOSCardProfile( "3Dfx", "Voodoo4", false, true, false); +addOSCardProfile( "3Dfx", "Voodoo5", true, true, false); +addOSCardProfile( "S3", "Savage2000", true, false, true); +addOSCardProfile( "Imagination", "PowerVR KYRO", false, true, false); +addOSCardProfile( "3Dlabs", "GLINT R3 PT", false, true, false); \ No newline at end of file diff --git a/IntelW98SECardProfiles.cs b/IntelW98SECardProfiles.cs new file mode 100644 index 0000000..5f97b9f --- /dev/null +++ b/IntelW98SECardProfiles.cs @@ -0,0 +1,12 @@ +// Explicit card profiles for Windows 98SE on Intel architectures +// +// Vendor Renderer AllowOpenGL AllowD3D PreferOpenGL +//---------------------------------------------------------------------------------------------------------------------------------- +addOSCardProfile( "3Dfx", "Banshee", true, false, true); +addOSCardProfile( "3Dfx", "3Dfx/Voodoo3 (tm)/2 TMUs/16 MB SDRAM/ICD (Nov 2 2000)", false, true, false); // Voodoo3 +addOSCardProfile( "3Dfx", "3Dfx/Voodoo3 (tm)/2 TMUs/16 MB SDRAM/ICD (Jan 17 2000)", true, false, true); // Voodoo3 3500 TV +addOSCardProfile( "3Dfx", "Voodoo4", false, true, false); +addOSCardProfile( "3Dfx", "Voodoo5", true, true, false); +addOSCardProfile( "S3", "Savage2000", true, false, true); +addOSCardProfile( "Imagination", "PowerVR KYRO", false, true, false); +addOSCardProfile( "3Dlabs", "GLINT R3 PT", false, true, false); \ No newline at end of file diff --git a/IntelWMECardProfiles.cs b/IntelWMECardProfiles.cs new file mode 100644 index 0000000..29fb9f2 --- /dev/null +++ b/IntelWMECardProfiles.cs @@ -0,0 +1,12 @@ +// Explicit card profiles for Windows ME on Intel architectures +// +// Vendor Renderer AllowOpenGL AllowD3D PreferOpenGL +//---------------------------------------------------------------------------------------------------------------------------------- +addOSCardProfile( "3Dfx", "Banshee", true, false, true); +addOSCardProfile( "3Dfx", "3Dfx/Voodoo3 (tm)/2 TMUs/16 MB SDRAM/ICD (Nov 2 2000)", false, true, false); // Voodoo3 +addOSCardProfile( "3Dfx", "3Dfx/Voodoo3 (tm)/2 TMUs/16 MB SDRAM/ICD (Jan 17 2000)", true, false, true); // Voodoo3 3500 TV +addOSCardProfile( "3Dfx", "Voodoo4", false, true, false); +addOSCardProfile( "3Dfx", "Voodoo5", true, true, false); +addOSCardProfile( "S3", "Savage2000", true, false, true); +addOSCardProfile( "Imagination", "PowerVR KYRO", false, true, false); +addOSCardProfile( "3Dlabs", "GLINT R3 PT", false, true, false); \ No newline at end of file diff --git a/Kyro.cs b/Kyro.cs new file mode 100644 index 0000000..8ba3e1c --- /dev/null +++ b/Kyro.cs @@ -0,0 +1,22 @@ +$pref::Audio::provider = "Miles Fast 2D Positional Audio"; +$pref::Video::fullScreen = 1; +$pref::Video::resolution = "640 480 16"; +$pref::OpenGL::mipReduction = 1; +$pref::shadows = 0.1; +$pref::Terrain::enableDetails = 1; +$pref::environmentMaps = 0; +$pref::Interior::DynamicLights = 0; +$pref::Interior::ShowEnvironmentMaps = 0; +$pref::precipitationOn = 0; +$pref::decalsOn = 0; +$pref::Terrain::screenError = 25; +$pref::TS::detailAdjust = "0.45614"; +$pref::numCloudLayers = 0; +$pref::OpenGL::interiorMipReduction = 2; +$pref::OpenGL::skyMipReduction = 2; +$pref::Terrain::texDetail = "6"; +$pref::Interior::VertexLighting = "1"; +$pref::Player::renderMyItems = "1"; +$pref::Player::renderMyPlayer = "0"; +$pref::TS::screenError = "12"; +$pref::Terrain::dynamicLights = "1"; \ No newline at end of file diff --git a/LinuxCardProfiles.cs b/LinuxCardProfiles.cs new file mode 100644 index 0000000..94e0de8 --- /dev/null +++ b/LinuxCardProfiles.cs @@ -0,0 +1,26 @@ +// Explicit card profiles +// +// SafeMode -- forces destruction of rendering context before resolution change +// LockArray -- inhibits compiled vertex arrays if available +// SubImage -- inhibits glTexSubImage* +// FogTexture -- require bound texture for combine extension +// NoEnvColor -- card doesn't support texture environment color +// ClipHigh -- clip off high resolutions (> 1152x864) +// DeleteContext -- delete rendering context (ignored for all OSs except W2K) +// TexCompress -- inhibits texture compression if available +// InteriorLock -- lock arrays rendering Interiors +// SkipFirstFog -- skip first two-pass fog (dumb 3Dfx hack) +// Only16 -- inhibit the 32-bit resolutions +// NoArraysAlpha -- don't use glDrawArrays with a GL_ALPHA texture +// ProFile -- explicit file of graphic settings +// +// Vendor Renderer SafeMode LockArray SubImage FogTexture NoEnvColor ClipHigh DeleteContext TexCompress InteriorLock SkipFirstFog Only16 NoArraysAlpha ProFile +//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +addCardProfile("VA Linux Systems, Inc.", "Banshee", true, true, true, true, true, false, false, true, true, true, false, true, "Voodoo3"); +addCardProfile("VA Linux Systems, Inc.", "Voodoo3", true, true, true, true, true, false, true, true, true, true, false, true, "Voodoo3"); +addCardProfile("VA Linux Systems, Inc.", "Voodoo4", true, false, true, false, true, false, false, true, true, false, false, false, "Voodoo5"); +addCardProfile("VA Linux Systems, Inc.", "Voodoo5", true, false, true, false, true, false, false, true, true, false, false, false, "Voodoo5"); +addCardProfile("VA Linux Systems, Inc.", "Rage128", true, true, true, true, true, false, true, true, true, false, false, false, "Rage128"); +addCardProfile("VA Linux Systems, Inc.", "Radeon", true, true, true, false, false, false, true, false, true, false, false, false, "Radeon"); +addCardProfile("VA Linux Systems, Inc.", "G400", true, true, false, false, true, false, true, true, true, false, false, false, "Matrox"); +addCardProfile("VA Linux Systems, Inc.", "G450", true, true, false, false, true, false, true, true, true, false, false, false, "Matrox"); diff --git a/LowProfile.cs b/LowProfile.cs new file mode 100644 index 0000000..8ba3e1c --- /dev/null +++ b/LowProfile.cs @@ -0,0 +1,22 @@ +$pref::Audio::provider = "Miles Fast 2D Positional Audio"; +$pref::Video::fullScreen = 1; +$pref::Video::resolution = "640 480 16"; +$pref::OpenGL::mipReduction = 1; +$pref::shadows = 0.1; +$pref::Terrain::enableDetails = 1; +$pref::environmentMaps = 0; +$pref::Interior::DynamicLights = 0; +$pref::Interior::ShowEnvironmentMaps = 0; +$pref::precipitationOn = 0; +$pref::decalsOn = 0; +$pref::Terrain::screenError = 25; +$pref::TS::detailAdjust = "0.45614"; +$pref::numCloudLayers = 0; +$pref::OpenGL::interiorMipReduction = 2; +$pref::OpenGL::skyMipReduction = 2; +$pref::Terrain::texDetail = "6"; +$pref::Interior::VertexLighting = "1"; +$pref::Player::renderMyItems = "1"; +$pref::Player::renderMyPlayer = "0"; +$pref::TS::screenError = "12"; +$pref::Terrain::dynamicLights = "1"; \ No newline at end of file diff --git a/Matrox.cs b/Matrox.cs new file mode 100644 index 0000000..2e7e1f1 --- /dev/null +++ b/Matrox.cs @@ -0,0 +1,22 @@ +$pref::Audio::provider = "Miles Fast 2D Positional Audio"; +$pref::Video::fullScreen = 1; +$pref::Video::resolution = "640 480 16"; +$pref::OpenGL::mipReduction = 1; +$pref::shadows = 0.1; +$pref::Terrain::enableDetails = 1; +$pref::environmentMaps = 0; +$pref::Interior::DynamicLights = 0; +$pref::Interior::ShowEnvironmentMaps = 0; +$pref::precipitationOn = 0; +$pref::decalsOn = 0; +$pref::Terrain::screenError = 20; +$pref::TS::detailAdjust = "0.675439"; +$pref::numCloudLayers = 0; +$pref::OpenGL::interiorMipReduction = 2; +$pref::OpenGL::skyMipReduction = 2; +$pref::Terrain::texDetail = "5"; +$pref::Interior::VertexLighting = "1"; +$pref::Player::renderMyItems = "1"; +$pref::Player::renderMyPlayer = "0"; +$pref::TS::screenError = "8"; +$pref::Terrain::dynamicLights = "1"; \ No newline at end of file diff --git a/MediumProfile.cs b/MediumProfile.cs new file mode 100644 index 0000000..0dcedc2 --- /dev/null +++ b/MediumProfile.cs @@ -0,0 +1,22 @@ +$pref::Audio::provider = "Miles Fast 2D Positional Audio"; +$pref::Video::fullScreen = 1; +$pref::Video::resolution = "800 600 16"; +$pref::OpenGL::mipReduction = 1; +$pref::shadows = 0.1; +$pref::Terrain::enableDetails = 1; +$pref::environmentMaps = 0; +$pref::Interior::DynamicLights = 0; +$pref::Interior::ShowEnvironmentMaps = 0; +$pref::precipitationOn = 0; +$pref::decalsOn = 0; +$pref::Terrain::screenError = 20; +$pref::TS::detailAdjust = "0.675439"; +$pref::numCloudLayers = 0; +$pref::OpenGL::interiorMipReduction = 2; +$pref::OpenGL::skyMipReduction = 2; +$pref::Terrain::texDetail = "3"; +$pref::Interior::VertexLighting = "1"; +$pref::Player::renderMyItems = "1"; +$pref::Player::renderMyPlayer = "0"; +$pref::TS::screenError = "8"; +$pref::Terrain::dynamicLights = "1"; \ No newline at end of file diff --git a/Mssds3dh.m3d b/Mssds3dh.m3d new file mode 100644 index 0000000..e3e243c Binary files /dev/null and b/Mssds3dh.m3d differ diff --git a/Msseax.m3d b/Msseax.m3d new file mode 100644 index 0000000..82440e8 Binary files /dev/null and b/Msseax.m3d differ diff --git a/Msseax2.m3d b/Msseax2.m3d new file mode 100644 index 0000000..316a55b Binary files /dev/null and b/Msseax2.m3d differ diff --git a/Mssfast.m3d b/Mssfast.m3d new file mode 100644 index 0000000..ad8d638 Binary files /dev/null and b/Mssfast.m3d differ diff --git a/Permedia3.cs b/Permedia3.cs new file mode 100644 index 0000000..8ba3e1c --- /dev/null +++ b/Permedia3.cs @@ -0,0 +1,22 @@ +$pref::Audio::provider = "Miles Fast 2D Positional Audio"; +$pref::Video::fullScreen = 1; +$pref::Video::resolution = "640 480 16"; +$pref::OpenGL::mipReduction = 1; +$pref::shadows = 0.1; +$pref::Terrain::enableDetails = 1; +$pref::environmentMaps = 0; +$pref::Interior::DynamicLights = 0; +$pref::Interior::ShowEnvironmentMaps = 0; +$pref::precipitationOn = 0; +$pref::decalsOn = 0; +$pref::Terrain::screenError = 25; +$pref::TS::detailAdjust = "0.45614"; +$pref::numCloudLayers = 0; +$pref::OpenGL::interiorMipReduction = 2; +$pref::OpenGL::skyMipReduction = 2; +$pref::Terrain::texDetail = "6"; +$pref::Interior::VertexLighting = "1"; +$pref::Player::renderMyItems = "1"; +$pref::Player::renderMyPlayer = "0"; +$pref::TS::screenError = "12"; +$pref::Terrain::dynamicLights = "1"; \ No newline at end of file diff --git a/Radeon.cs b/Radeon.cs new file mode 100644 index 0000000..dc4643a --- /dev/null +++ b/Radeon.cs @@ -0,0 +1,22 @@ +$pref::Audio::provider = "Miles Fast 2D Positional Audio"; +$pref::Video::fullScreen = 1; +$pref::Video::resolution = "800 600 32"; +$pref::OpenGL::mipReduction = 0; +$pref::shadows = 0.5; +$pref::Terrain::enableDetails = 1; +$pref::environmentMaps = 1; +$pref::Interior::DynamicLights = 1; +$pref::Interior::ShowEnvironmentMaps = 1; +$pref::precipitationOn = 1; +$pref::decalsOn = 1; +$pref::Terrain::screenError = 8; +$pref::TS::detailAdjust = "0.833333"; +$pref::numCloudLayers = 1; +$pref::OpenGL::interiorMipReduction = 1; +$pref::OpenGL::skyMipReduction = 1; +$pref::Terrain::texDetail = "1"; +$pref::Interior::VertexLighting = "0"; +$pref::Player::renderMyItems = "1"; +$pref::Player::renderMyPlayer = "0"; +$pref::TS::screenError = "5"; +$pref::Terrain::dynamicLights = "1"; \ No newline at end of file diff --git a/Rage128.cs b/Rage128.cs new file mode 100644 index 0000000..916d991 --- /dev/null +++ b/Rage128.cs @@ -0,0 +1,22 @@ +$pref::Audio::provider = "Miles Fast 2D Positional Audio"; +$pref::Video::fullScreen = 1; +$pref::Video::resolution = "800 600 16"; +$pref::OpenGL::mipReduction = 1; +$pref::shadows = 0.1; +$pref::Terrain::enableDetails = 1; +$pref::environmentMaps = 1; +$pref::Interior::DynamicLights = 1; +$pref::Interior::ShowEnvironmentMaps = 1; +$pref::precipitationOn = 1; +$pref::decalsOn = 1; +$pref::Terrain::screenError = 20; +$pref::TS::detailAdjust = "0.675439"; +$pref::numCloudLayers = 0; +$pref::OpenGL::interiorMipReduction = 1; +$pref::OpenGL::skyMipReduction = 1; +$pref::Terrain::texDetail = "3"; +$pref::Interior::VertexLighting = "1"; +$pref::Player::renderMyItems = "1"; +$pref::Player::renderMyPlayer = "0"; +$pref::TS::screenError = "8"; +$pref::Terrain::dynamicLights = "1"; \ No newline at end of file diff --git a/Reverb3.flt b/Reverb3.flt new file mode 100644 index 0000000..ee6194a Binary files /dev/null and b/Reverb3.flt differ diff --git a/SierraUp.cfg b/SierraUp.cfg new file mode 100644 index 0000000..93a57e0 --- /dev/null +++ b/SierraUp.cfg @@ -0,0 +1,17 @@ +ProductName "Tribes2" +DisplayName "Tribes 2" +PatchFolder .\patch +CurrentVersion 0.21570.0.0 +AutoStart +MonitorPatch +LaunchExe "tribes2.exe" +VersionExe "tribes2.exe" +MotdTimeout 30000 +VersionTimeout 45000 +PatchTimeout 45000 +ValidateVersionFile ".\zz.ini" +ResourceDllFile "Tribes2Res.dll" +DirectoryServer "tribes2.west.won.net:15104" +DirectoryServer "tribes2.east.won.net:15104" +DirectoryServer "tribes2.central.won.net:15104" +LaunchParams "-online" diff --git a/TNT.cs b/TNT.cs new file mode 100644 index 0000000..daa20e1 --- /dev/null +++ b/TNT.cs @@ -0,0 +1,22 @@ +$pref::Audio::provider = "Miles Fast 2D Positional Audio"; +$pref::Video::fullScreen = 1; +$pref::Video::resolution = "640 480 16"; +$pref::OpenGL::mipReduction = 1; +$pref::shadows = 0.1; +$pref::Terrain::enableDetails = 1; +$pref::environmentMaps = 1; +$pref::Interior::DynamicLights = 1; +$pref::Interior::ShowEnvironmentMaps = 1; +$pref::precipitationOn = 1; +$pref::decalsOn = 1; +$pref::Terrain::screenError = 20; +$pref::TS::detailAdjust = "0.675439"; +$pref::numCloudLayers = 0; +$pref::OpenGL::interiorMipReduction = 2; +$pref::OpenGL::skyMipReduction = 2; +$pref::Terrain::texDetail = "3"; +$pref::Interior::VertexLighting = "1"; +$pref::Player::renderMyItems = "1"; +$pref::Player::renderMyPlayer = "0"; +$pref::TS::screenError = "8"; +$pref::Terrain::dynamicLights = "1"; \ No newline at end of file diff --git a/Tribes2.exe.local b/Tribes2.exe.local new file mode 100644 index 0000000..0519ecb --- /dev/null +++ b/Tribes2.exe.local @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/V2Profile.cs b/V2Profile.cs new file mode 100644 index 0000000..8ba3e1c --- /dev/null +++ b/V2Profile.cs @@ -0,0 +1,22 @@ +$pref::Audio::provider = "Miles Fast 2D Positional Audio"; +$pref::Video::fullScreen = 1; +$pref::Video::resolution = "640 480 16"; +$pref::OpenGL::mipReduction = 1; +$pref::shadows = 0.1; +$pref::Terrain::enableDetails = 1; +$pref::environmentMaps = 0; +$pref::Interior::DynamicLights = 0; +$pref::Interior::ShowEnvironmentMaps = 0; +$pref::precipitationOn = 0; +$pref::decalsOn = 0; +$pref::Terrain::screenError = 25; +$pref::TS::detailAdjust = "0.45614"; +$pref::numCloudLayers = 0; +$pref::OpenGL::interiorMipReduction = 2; +$pref::OpenGL::skyMipReduction = 2; +$pref::Terrain::texDetail = "6"; +$pref::Interior::VertexLighting = "1"; +$pref::Player::renderMyItems = "1"; +$pref::Player::renderMyPlayer = "0"; +$pref::TS::screenError = "12"; +$pref::Terrain::dynamicLights = "1"; \ No newline at end of file diff --git a/Viper.cs b/Viper.cs new file mode 100644 index 0000000..ed1d6c8 --- /dev/null +++ b/Viper.cs @@ -0,0 +1,22 @@ +$pref::Audio::provider = "Miles Fast 2D Positional Audio"; +$pref::Video::fullScreen = 1; +$pref::Video::resolution = "800 600 16"; +$pref::OpenGL::mipReduction = 1; +$pref::shadows = 0.5; +$pref::Terrain::enableDetails = 1; +$pref::environmentMaps = 1; +$pref::Interior::DynamicLights = 1; +$pref::Interior::ShowEnvironmentMaps = 1; +$pref::precipitationOn = 1; +$pref::decalsOn = 1; +$pref::Terrain::screenError = 8; +$pref::TS::detailAdjust = "0.833333"; +$pref::numCloudLayers = 1; +$pref::OpenGL::interiorMipReduction = 1; +$pref::OpenGL::skyMipReduction = 1; +$pref::Terrain::texDetail = "3"; +$pref::Interior::VertexLighting = "1"; +$pref::Player::renderMyItems = "1"; +$pref::Player::renderMyPlayer = "0"; +$pref::TS::screenError = "5"; +$pref::Terrain::dynamicLights = "1"; \ No newline at end of file diff --git a/Voodoo3.cs b/Voodoo3.cs new file mode 100644 index 0000000..e575bcf --- /dev/null +++ b/Voodoo3.cs @@ -0,0 +1,22 @@ +$pref::Audio::provider = "Miles Fast 2D Positional Audio"; +$pref::Video::fullScreen = 1; +$pref::Video::resolution = "640 480 16"; +$pref::OpenGL::mipReduction = 1; +$pref::shadows = 0.1; +$pref::Terrain::enableDetails = 1; +$pref::environmentMaps = 0; +$pref::Interior::DynamicLights = 0; +$pref::Interior::ShowEnvironmentMaps = 0; +$pref::precipitationOn = 0; +$pref::decalsOn = 0; +$pref::Terrain::screenError = 20; +$pref::TS::detailAdjust = "0.675439"; +$pref::numCloudLayers = 0; +$pref::OpenGL::interiorMipReduction = 2; +$pref::OpenGL::skyMipReduction = 2; +$pref::Terrain::texDetail = "0"; // lower number is actually faster here (go figure) +$pref::Interior::VertexLighting = "1"; +$pref::Player::renderMyItems = "1"; +$pref::Player::renderMyPlayer = "0"; +$pref::TS::screenError = "8"; +$pref::Terrain::dynamicLights = "1"; \ No newline at end of file diff --git a/Voodoo5.cs b/Voodoo5.cs new file mode 100644 index 0000000..bb11a6f --- /dev/null +++ b/Voodoo5.cs @@ -0,0 +1,22 @@ +$pref::Audio::provider = "Miles Fast 2D Positional Audio"; +$pref::Video::fullScreen = 1; +$pref::Video::resolution = "800 600 16"; +$pref::OpenGL::mipReduction = 0; +$pref::shadows = 0.5; +$pref::Terrain::enableDetails = 1; +$pref::environmentMaps = 1; +$pref::Interior::DynamicLights = 0; +$pref::Interior::ShowEnvironmentMaps = 0; +$pref::precipitationOn = 1; +$pref::decalsOn = 1; +$pref::Terrain::screenError = 20; +$pref::TS::detailAdjust = "0.675439"; +$pref::numCloudLayers = 1; +$pref::OpenGL::interiorMipReduction = 1; +$pref::OpenGL::skyMipReduction = 1; +$pref::Terrain::texDetail = "0"; // lower number is actually faster here (go figure) +$pref::Interior::VertexLighting = "1"; +$pref::Player::renderMyItems = "1"; +$pref::Player::renderMyPlayer = "0"; +$pref::TS::screenError = "8"; +$pref::Terrain::dynamicLights = "1"; \ No newline at end of file diff --git a/base/audio/fx/weapons/spinfusor_reload.sfk b/base/audio/fx/weapons/spinfusor_reload.sfk new file mode 100644 index 0000000..a4ea783 Binary files /dev/null and b/base/audio/fx/weapons/spinfusor_reload.sfk differ diff --git a/base/console_end.cs b/base/console_end.cs new file mode 100644 index 0000000..a232a4a --- /dev/null +++ b/base/console_end.cs @@ -0,0 +1,604 @@ +if ( $pref::Shell::lastBackground > 4 ) + $pref::Shell::lastBackground = 0; +else + $pref::Shell::lastBackground++; + +// load default controls: +exec("scripts/controlDefaults.cs"); + +// override with control settings +if ( $pref::Input::ActiveConfig !$= "" ) + exec( "prefs/" @ $pref::Input::ActiveConfig @ ".cs", false, true ); + +//exec any user created .cs files found in scripts/autoexec (order is that returned by the OS) +function loadCustomScripts() +{ + %path = "scripts/autoexec/*.cs"; + for( %file = findFirstFile( %path ); %file !$= ""; %file = findNextFile( %path ) ) + exec( %file ); +} +loadCustomScripts(); + +// override settings from autoexec.cs +exec("autoexec.cs"); +$LoginName = ""; +$LoginPassword = ""; + +//TINMAN hack to add a command line option for starting a bot match... +if ($CmdLineBotCount !$= "") +{ + $Host::BotCount = $CmdLineBotCount; +} + +// message.cs is loaded so autoexec can add new message callbacks + +exec("scripts/message.cs"); + +function repaintCanvas() +{ + if ( isObject( Canvas ) ) + Canvas.repaint(); +} + +function resetCanvas() +{ + if ( isObject( Canvas ) ) + Canvas.reset(); +} + +//function to be called when the game exits +function onExit() +{ + IRCClient::quit(); + + echo("exporting pref::* to ClientPrefs.cs"); + export("$pref::*", "prefs/ClientPrefs.cs", False); + BanList::Export("prefs/banlist.cs"); +} + + +//-------------------------------------------------------------------------- + +exec("scripts/LaunchLanGui.cs"); +exec("scripts/GameGui.cs"); +exec("scripts/ChooseFilterDlg.cs"); +exec("scripts/ChatGui.cs"); +exec("scripts/TrainingGui.cs"); +exec("scripts/webstuff.cs"); +exec("scripts/webforums.cs"); +exec("scripts/webemail.cs"); +exec("scripts/webbrowser.cs"); +exec("scripts/webtest.cs"); +exec("scripts/webnews.cs"); +exec("scripts/weblinks.cs"); +exec("scripts/OptionsDlg.cs"); +exec("scripts/EditChatMenuGui.cs"); +exec("scripts/scoreList.cs"); +exec("scripts/LobbyGui.cs"); +exec("scripts/DebriefGui.cs"); +exec("scripts/commonDialogs.cs"); +exec("scripts/client.cs"); +exec("scripts/server.cs"); +exec("scripts/hud.cs"); +exec("scripts/objectiveHud.cs"); +exec("scripts/vehicles/clientVehicleHud.cs"); +exec("scripts/inventoryHud.cs"); +exec("scripts/chatMenuHud.cs"); +exec("scripts/scoreScreen.cs"); +exec("scripts/loadingGui.cs"); +exec("scripts/helpGuiText.cs"); +exec("scripts/voiceChat.cs"); +exec("scripts/clientTasks.cs"); +exec("scripts/targetManager.cs"); +exec("scripts/gameCanvas.cs"); +exec("scripts/centerPrint.cs"); +exec("scripts/CreditsGui.cs"); + +// see if the mission and type are valid +// if they are they will be assigned into $Host::Map and $Host::MissionType +if($mission !$= "" && $missionType !$= "") + validateMissionAndType($mission, $missionType); + +if($LaunchMode $= "DedicatedServer") +{ + enableWinConsole(true); + $Host::Dedicated = true; + $HostGameType = "Online"; + $ServerName = $Host::GameName; + $HostGameBotCount = $Host::BotCount; + setNetPort($Host::Port); + CreateServer($Host::Map, $Host::MissionType); + return; +} +else if($LaunchMode $= "Console") +{ + enableWinConsole(true); + $Host::Dedicated = true; + return; +} +else if($LaunchMode $= "NavBuild") +{ + enableWinConsole(true); + $Host::Dedicated = true; + $ServerName = $Host::GameName; + $Host::MissionType = $missionType; + $Host::Map = $Mission; + setNetPort($Host::Port); + CreateServer($Mission, $missionType); + return; +} +else if($LaunchMode $= "SpnBuild") +{ + enableWinConsole(true); + $Host::Dedicated = true; + $ServerName = $Host::GameName; + $Host::MissionType = $missionType; + $Host::Map = $Mission; + setNetPort($Host::Port); + CreateServer($Mission, $missionType); + return; +} + +function recordMovie(%movieName, %fps) +{ + $timeAdvance = 1000 / %fps; + $screenGrabThread = schedule("movieGrabScreen(" @ %movieName @ ", 0);", $timeAdvance); +} + +function movieGrabScreen(%movieName, %frameNumber) +{ + if(%frameNumber < 10) + %frameNumber = "0" @ %frameNumber; + if(%frameNumber < 100) + %frameNumber = "0" @ %frameNumber; + if(%frameNumber < 1000) + %frameNumber = "0" @ %frameNumber; + if(%frameNumber < 10000) + %frameNumber = "0" @ %frameNumber; + screenshot(%movieName @ %frameNumber @ ".png"); + $screenGrabThread = schedule("movieGrabScreen(" @ %movieName @ "," @ %frameNumber + 1 @ ");", $timeAdvance); +} + +function stopMovie() +{ + cancel($screenGrabThread); +} + +function loadGui(%gui) +{ + exec("gui/" @ %gui @ ".gui"); +} + +exec("scripts/clientAudio.cs"); +exec("gui/guiProfiles.cs"); +exec("scripts/recordings.cs"); + +// tool guis +loadGui("GuiEditorGui"); +loadGui("consoleDlg"); +loadGui("InspectDlg"); +loadGui("CommonLoadDlg"); +loadGui("CommonSaveDlg"); +loadGui("FrameOverlayGui"); +loadGui("TribeAdminMemberDlg"); +loadGui("TribeAttribDlg"); +loadGui("TSShowGui"); +loadGui("TSShowLoadDlg"); +loadGui("TSShowMiscDlg"); +loadGui("TSShowThreadControlDlg"); +loadGui("TSShowEditScale"); +loadGui("TSShowLightDlg"); +loadGui("TSShowTransitionDlg"); +loadGui("TSShowTranDurEditDlg"); +loadGui("TSShowDetailControlDlg"); + +// debugger GUI's +function Debugger() +{ + if(!$DebuggerLoaded) + { + loadGui("debuggerGui"); + loadGui("DebuggerBreakConditionDlg"); + loadGui("DebuggerConnectDlg"); + loadGui("DebuggerEditWatchDlg"); + loadGui("DebuggerWatchDlg"); + loadGui("DebuggerFindDlg"); + exec("scripts/debuggerGui.cs"); + $DebuggerLoaded = true; + } + Canvas.setContent(DebuggerGui); +} + +// test GUIs +loadGui("GuiTestGui"); + +// common shell dialogs: +loadGui("MessageBoxDlg"); +loadGui("MessagePopupDlg"); +loadGui("ShellLoadFileDlg"); +loadGui("ShellSaveFileDlg"); + +// menus +loadGui("AddressDlg"); +loadGui("GenDialog"); +loadGui("CreateWarriorDlg"); +loadGui("LaunchGui"); +loadGui("LaunchToolbarDlg"); +loadGui("GameGui"); +loadGui("ChooseFilterDlg"); +loadGui("ServerInfoDlg"); +loadGui("AdvancedHostDlg"); +loadGui("NewWarriorDlg"); +loadGui("JoinChatDlg"); +loadGui("ChannelKeyDlg"); +loadGui("ChannelOptionsDlg"); +loadGui("ChannelBanDlg"); +loadGui("FilterEditDlg"); +loadGui("PasswordDlg"); +loadGui("OptionsDlg"); +loadGui("DriverInfoDlg"); +loadGui("RemapDlg"); +loadGui("MouseConfigDlg"); +loadGui("JoystickConfigDlg"); +loadGui("EditChatMenuGui"); +loadGui("EditChatMenuDlg"); +loadGui("EditChatCommandDlg"); +loadGui("ChatGui"); +loadGui("EmailGui"); +loadGui("NewsGui"); +loadGui("NewsPostDlg"); +loadGui("NewsEditMOTDDlg"); +loadGui("EmailBlockDlg"); +loadGui("EmailComposeDlg"); +loadGui("ForumsGui"); +loadGui("ForumsComposeDlg"); +loadGui("TribeAndWarriorBrowserGui"); +loadGui("TribePropertiesDlg"); +loadGui("WarriorPropertiesDlg"); +loadGui("BrowserSearchDlg"); +loadGui("BrowserEditInfoDlg"); +loadGui("CreateTribeDlg"); +loadGui("RecordingsDlg"); +loadGui("TrainingGui"); +loadGui("SinglePlayerEscapeDlg"); +loadGui("LobbyGui"); +loadGui("DebriefGui"); +loadGui("CreditsGui"); + +loadGui("NewMissionGui"); +loadGui("ChatDlg"); +loadGui("PlayGui"); +loadGui("PanoramaGui"); +loadGui("LoadingGui"); +loadGui("TestGui"); +loadGui("BriefingGui"); + +// HUD GUI's: +loadGui("HUDDlgs"); + +// terraformer GUI's +loadGui("TerraformerGui"); +loadGui("TerraformerTextureGui"); +loadGui("TerraformerHeightfieldGui"); +loadGui("TerraformerFullScreenGui"); +loadGui("helpTextGui"); +// +loadGui("InteriorPreviewGui"); +loadGui("InteriorDebug"); +loadGui("EditorGui"); +loadGui("SceneLightingGui"); +loadGui("InspectAddFieldDlg"); + +loadGui("PickTeamDlg"); + +loadGui("DetailSetDlg"); + +loadGui("IHVTest"); + +// Load material properties +echo("Load Material Properties:"); +exec("textures/badlands/badlandsPropMap.cs"); +exec("textures/desert/desertPropMap.cs"); +exec("textures/ice/icePropMap.cs"); +exec("textures/lava/lavaPropMap.cs"); +exec("textures/lush/lushPropMap.cs"); + +// commander map +exec("scripts/commanderProfiles.cs"); +exec("scripts/commanderMap.cs"); +exec("scripts/commanderMapHelpText.cs"); + +loadGui(CommanderMapGui); +loadGui(cmdMapHelpText); +loadGui(TaskHudDlg); + + +function frameCounter() +{ + return " FPS: " @ $fps::real @ + " mspf: " @ 1000 / $fps::real; +} + +function terrMetrics() +{ + return frameCounter() @ + " L0: " @ $T2::levelZeroCount @ + " FMC: " @ $T2::fullMipCount @ + " DTC: " @ $T2::dynamicTextureCount @ + " UNU: " @ $T2::unusedTextureCount @ + " STC: " @ $T2::staticTextureCount @ + " DTSU: " @ $T2::textureSpaceUsed @ + " STSU: " @ $T2::staticTSU @ + " FRB: " @ $T2::FogRejections; +} + +function triMetrics() +{ + return frameCounter() @ + " TC: " @ $OpenGL::triCount0 + $OpenGL::triCount1 + $OpenGL::triCount2 + $OpenGL::triCount3 @ + " PC: " @ $OpenGL::primCount0 + $OpenGL::primCount1 + $OpenGL::primCount2 + $OpenGL::primCount3 @ + " T_T: " @ $OpenGL::triCount1 @ + " T_P: " @ $OpenGL::primCount1 @ + " I_T: " @ $OpenGL::triCount2 @ + " I_P: " @ $OpenGL::primCount2 @ + " TS_T: " @ $OpenGL::triCount3 @ + " TS_P: " @ $OpenGL::primCount3 @ + " ?_T: " @ $OpenGL::triCount0 @ + " ?_P: " @ $OpenGL::primCount0; +} + +function interiorMetrics() +{ + return frameCounter() @ + " NTL: " @ $Video::numTexelsLoaded @ + " TRP: " @ $Video::texResidentPercentage @ + " INP: " @ $Metrics::Interior::numPrimitives @ + " INT: " @ $Matrics::Interior::numTexturesUsed @ + " INO: " @ $Metrics::Interior::numInteriors; +} + +function textureMetrics() +{ + return frameCounter() @ + " NTL: " @ $Video::numTexelsLoaded @ + " TRP: " @ $Video::texResidentPercentage @ + " TCM: " @ $Video::textureCacheMisses; +} + +function waterMetrics() +{ + return frameCounter() @ + " Tri#: " @ $T2::waterTriCount @ + " Pnt#: " @ $T2::waterPointCount @ + " Hz#: " @ $T2::waterHazePointCount; +} + +function timeMetrics() +{ + return frameCounter() @ " Time: " @ getSimTime() @ " Mod: " @ getSimTime() % 32; +} + +function vehicleMetrics() +{ + return frameCounter() @ + " R: " @ $Vehicle::retryCount @ + " C: " @ $Vehicle::searchCount @ + " P: " @ $Vehicle::polyCount @ + " V: " @ $Vehicle::vertexCount; +} + +function audioMetrics() +{ + return frameCounter() @ + " OH: " @ $Audio::numOpenHandles @ + " OLH: " @ $Audio::numOpenLoopingHandles @ + " OVH: " @ $Audio::numOpenVoiceHandles @ + " AS: " @ $Audio::numActiveStreams @ + " NAS: " @ $Audio::numNullActiveStreams @ + " LAS: " @ $Audio::numActiveLoopingStreams @ + " VAS: " @ $Audio::numActiveVoiceStreams @ + " LS: " @ $Audio::numLoopingStreams @ + " ILS: " @ $Audio::numInactiveLoopingStreams @ + " CLS: " @ $Audio::numCulledLoopingStreams @ + " MEM: " @ $Audio::memUsage @ + " DYN: " @ $Audio::dynamicMemUsage @ + " / " @ $Audio::dynamicMemSize @ + " CNT: " @ $Audio::dynamicBufferCount @ + " / " @ $Audio::bufferCount; +} + +function DebugMetrics() +{ + return frameCounter() @ + " NTL: " @ $Video::numTexelsLoaded @ + " TRP: " @ $Video::texResidentPercentage @ + " NP: " @ $Metrics::numPrimitives @ + " NT: " @ $Metrics::numTexturesUsed @ + " NO: " @ $Metrics::numObjectsRendered; +} + + +function showTerr() +{ + show("terrMetrics()"); +} + +function showTri() +{ + GLEnableMetrics(true); + show("triMetrics()"); +} + +function showTime() +{ + show("timeMetrics()"); +} + +function showWater() +{ + show("waterMetrics()"); +} + +function showTexture() +{ + show("textureMetrics()"); +} + +function showInterior() +{ + $fps::virtual = 0; + $Interior::numPolys = 0; + $Interior::numTextures = 0; + $Interior::numTexels = 0; + $Interior::numLightmaps = 0; + $Interior::numLumels = 0; + show("interiorMetrics()"); +} + +function showVehicle() +{ + show("vehicleMetrics()"); +} + +function showAudio() +{ + show("audioMetrics()"); +} + +function showDebug() +{ + show("DebugMetrics()"); +} + + +function show(%expr) +{ + if(%expr $= "") + { + GLEnableMetrics(false); + Canvas.popDialog(FrameOverlayGui); + } + else + { + Canvas.pushDialog(FrameOverlayGui, 1000); + TextOverlayControl.setValue(%expr); + } +} +//showInterior(); + +// check the launch mode: + +Canvas.setCursor("DefaultCursor"); + +function dumpFile(%fileName) +{ + %file = new FileObject(); + if(%file.openForRead(%fileName)) + { + while(!%file.isEOF()) + echo(%file.readLine()); + } + %file.delete(); +} + +function doScreenShot(%val) +{ + $pref::interior::showdetailmaps = false; + if(!%val) + screenShot("screen" @ $screenshotnum++ @ ".png"); +} + +// set up the movement action map +GlobalActionMap.bind(keyboard, "print", doScreenShot); +GlobalActionMap.bindCmd(keyboard, "alt enter", "", "toggleFullScreen();"); + +// Get the joystick binding functions: +exec( "scripts/joystickBind.cs" ); + +function clientCMDgetManagerID(%client) +{ + $client = %client; +} +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- // + +function abs(%val) +{ + if (%val < 0) + return %val * -1; + else + return %val; +} + +//############################################################################## +//CreateServer(testmission); +//LocalConnect(UberBob); +//############################################################################## + +function ServerConnectionAccepted() +{ + Canvas.setContent("LoadingGui"); +} + +function LocalConnectionAccepted() +{ + Canvas.setContent("LoadingGui"); +} + +function DispatchLaunchMode() +{ + switch$($LaunchMode) + { + case "InteriorView": + if ( isFile( "missions/interiorTest.mis" ) ) + { + $InteriorArgument = $TestObjectFileName; + $extension = fileExt( $TestObjectFileName ); + if ( stricmp( $extension, ".dif\"" ) == 0 ) + { + // Have to adjust for quotes: + $TestObjectFileName = getSubStr( $TestObjectFileName, + 1, strlen( $TestObjectFileName ) - 2 ); + } + + if ( getSubStr( $TestObjectFileName, strlen( $TestObjectFileName ) - 6, 1 ) $= "_" ) + { + // Strip the detail part off... + $TestObjectFileName = getSubStr( $TestObjectFileName, 0, strlen( $TestObjectFileName ) - 6 ) @ ".dif"; + } + + echo( $TestObjectFileName @ " is the file loaded" ); + + $ServerName = $Host::GameName; + $Host::TimeLimit = 60; + CreateServer( "interiorTest", "InteriorTest" ); + localConnect( "TestGuy" ); + } + else + MessageBoxOK( "FILE NOT FOUND", "You do not have the interior test mission in your mission folder.\nTalk to Brad or Tom to get it.", "quit();" ); + case "Connect": + setNetPort(0); + JoinSelectedGame(); + case "HostGame": + $ServerName = $Host::GameName; + $Host::MissionType = $MissionType; + $Host::Map = $Mission; + CreateServer($Mission, $MissionType); + localConnect(); + case "Normal": + OnlineLogIn(); + case "Offline": + PlayOffline(); + case "TSShow": + startShow(); + case "SceneLight": + CreateServer($Mission); + localConnect(); + case "Demo": + LoopDemos(); + } +} + +if(WONGetAuthInfo() $= "" && $LaunchMode !$= "Demo") + VerifyCDCheck(DispatchLaunchMode); +else + DispatchLaunchMode(); diff --git a/base/gui/AIEButtonBarDlg.gui b/base/gui/AIEButtonBarDlg.gui new file mode 100644 index 0000000..510f783 --- /dev/null +++ b/base/gui/AIEButtonBarDlg.gui @@ -0,0 +1,517 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(AIEButtonBarDlg) { + profile = "GuiModelessDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiChunkedBitmapCtrl() { + profile = "EditorContentProfile"; + horizSizing = "right"; + vertSizing = "height"; + position = "0 30"; + extent = "120 420"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiCheckBoxCtrl(ExteriorCheckBox) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "11 23"; + extent = "100 22"; + minExtent = "8 8"; + visible = "1"; + command = "ExteriorCheckBox.updateCheckBox();"; + helpTag = "0"; + text = "Draw Ext"; + }; + new GuiCheckBoxCtrl(InteriorCheckBox) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "11 47"; + extent = "100 22"; + minExtent = "8 8"; + visible = "1"; + command = "InteriorCheckBox.updateCheckBox();"; + helpTag = "0"; + text = "Draw Int"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "11 6"; + extent = "73 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Visual Options:"; + }; + new GuiCheckBoxCtrl(JetConnectionsCheckBox) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "11 73"; + extent = "100 22"; + minExtent = "8 8"; + visible = "1"; + command = "JetConnectionsCheckBox.updateCheckBox();"; + helpTag = "0"; + text = "Draw Jet"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 201"; + extent = "100 29"; + minExtent = "8 8"; + visible = "1"; + command = "makeJettableGraph(Nav);"; + helpTag = "0"; + text = "Bot Graph"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 169"; + extent = "100 29"; + minExtent = "8 8"; + visible = "1"; + command = "makeJettableGraph(Spawn);"; + helpTag = "0"; + text = "Spawn Graph"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 233"; + extent = "100 29"; + minExtent = "8 8"; + visible = "1"; + command = "AIEButtonBarDlg.createLOSXref();"; + helpTag = "0"; + text = "Build LOS"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 265"; + extent = "100 29"; + minExtent = "8 8"; + visible = "1"; + command = "navGraph.saveGraph();"; + helpTag = "0"; + text = "Save"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "11 151"; + extent = "56 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Graph Build"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "11 315"; + extent = "64 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "AI Objectives"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 331"; + extent = "100 29"; + minExtent = "8 8"; + visible = "1"; + command = "AICreateObjectives();"; + helpTag = "0"; + text = "Build Objectives"; + }; + new GuiPopUpMenuCtrl(ObjectiveList) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 368"; + extent = "101 20"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "New Objective"; + maxPopupHeight = "200"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 395"; + extent = "100 29"; + minExtent = "8 8"; + visible = "1"; + command = "AISaveMissionObjectives();"; + helpTag = "0"; + text = "Save"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 102"; + extent = "73 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Camera speed:"; + }; + new GuiSliderCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 121"; + extent = "80 20"; + minExtent = "80 20"; + visible = "1"; + variable = "value"; + command = "$Camera::movementSpeed = $ThisControl.getValue();"; + helpTag = "0"; + range = "0.000000 200.000000"; + ticks = "10"; + value = "20"; + }; + }; +}; +//--- OBJECT WRITE END --- + +//------------------------------------------------------------------------------ +// Functions +//------------------------------------------------------------------------------ + +function makeUnbridgedGraph() +{ + GraphCurrentOperation.setValue("Generating interior nodes..."); + Canvas.repaint(); + navGraph::generateInterior(); + dataProgress(); + + GraphCurrentOperation.setValue("Remaking graph..."); + Canvas.repaint(); + remakeTheGraph(); + dataProgress(); +} + +function makeJettableGraph(%NAVorSPAWN) +{ + AIworking(true); + + $NavGraph::operations = 7; + $NavGraph::operationsDone = 0; + + navGraph.setGenMode(%NAVorSPAWN); + navGraph::exteriorInspect(); + dataProgress(); + makeUnbridgedGraph(); + + GraphCurrentOperation.setValue("Beginning slow bridge finding pass"); + Canvas.repaint(); + + navGraph.assemble(); + + navGraph.cullIslands(); + remakeTheGraph(); + navGraph.pushBridges(); + navGraph.makeTables(); + dataProgress(); + + AIworking(false); +} + +//------------------------------------------------------------------------------ + +function AIEButtonBarDlg::getPrefs(%this) +{ +} + +//------------------------------------------------------------------------------ + +function AIEbuttonBarDlg::setPrefs(%this) +{ +} + +//------------------------------------------------------------------------------ + +function AIEButtonBarDlg::init(%this) +{ + InteriorCheckBox.setValue($pref::NavGraph::drawIndoor); + ExteriorCheckBox.setValue($pref::NavGraph::drawOutdoor); + + if(!$pref::NavGraph::drawIndoor) + JetConnectionsCheckBox.visible = false; + + JetConnectionsCheckBox.setValue($pref::NavGraph::drawJetEdges); + + ObjectiveList.clear(); + ObjectiveList.setText("New Objective"); + ObjectiveList.add("Deploy Outdoor Turret", 1); + ObjectiveList.add("Deploy Indoor Turret", 2); + ObjectiveList.add("Deploy Inventory", 3); + ObjectiveList.add("Touch FlipFlop", 4); + ObjectiveList.add("Mortar Target", 5); + ObjectiveList.add("Repair Equipment", 6); + ObjectiveList.add("Attack Target", 7); + ObjectiveList.add("Defend Location", 8); + objectiveList.add("New Group", 9); + + //ObjectivesList.sort(); +} + +//------------------------------------------------------------------------------ + +function AIEButtonBarDlg::onSleep(%this) +{ +} + +//------------------------------------------------------------------------------ + +function AIEButtonBarDlg::onWake(%this) +{ +} + +//------------------------------------------------------------------------------ + +function dataProgress() +{ + $NavGraph::operationsDone++; + %percent = $NavGraph::operationsDone / $NavGraph::operations; + GraphBuildProgress.setValue(%percent); + Canvas.repaint(); +} + +//------------------------------------------------------------------------------ + +function remakeTheGraph() +{ + GraphCurrentOperation.setValue("making graph..."); + Canvas.repaint(); + navGraph.makeGraph(); + dataProgress(); +} + +//------------------------------------------------------------------------------ + +function AIEButtonBarDlg::createLOSXref() +{ + AIworking(true); + GraphCurrentOperation.setValue("Making LOS CrossRef Table..."); + GraphBuildProgress.setValue(0); + + if(2.player) + navGraph.prepLOS(2.player.getTransform()); + else + navGraph.prepLOS("0 0 0"); + + while(navGraph.makeLOS()) + { + GraphBuildProgress.setValue($graphProcessPercent); + Canvas.repaint(); + } + GraphBuildProgress.setValue(100); + Canvas.repaint(); + AIworking(false); +} + +function ExteriorCheckBox::updateCheckBox() +{ + $pref::NavGraph::drawOutdoor = !$pref::NavGraph::drawOutdoor; +} + +function InteriorCheckBox::updateCheckBox() +{ + $pref::NavGraph::drawIndoor = !$pref::NavGraph::drawIndoor; + + if(!$pref::NavGraph::drawIndoor) + JetConnectionsCheckBox.visible = false; + else + jetConnectionsCheckBox.visible = true; +} + +function JetConnectionsCheckBox::updateCheckBox() +{ + $pref::NavGraph::drawJetEdges = !$pref::NavGraph::drawJetEdges; +} + +function AISaveMissionObjectives() +{ + // once we have created all objecitves, save out the mis file + if(!isObject(MissionGroup)) + { + error("No mission exists!"); + return; + } + + // check for read-only + %file = "base/missions/" @ $MissionName; + if(!isWriteableFileName(%file)) + { + error("Mission file '" @ %file @ "' is not writeable."); + return; + } + + // ok, were good to save. + missionGroup.save("missions/" @ $MissionName); +} + +function AIObjectivesLock(%lock) +{ + %numTeams = nameToId("MissionGroup/Teams").getCount(); + + for(%j = 0; %j < %numTeams; %j++) + { + %objGroup = nameToId("MissionGroup/Teams/team" @ %j @ "/AIObjectives"); + if(%objGroup == -1) + continue; + + %objCount = %objGroup.getCount(); + + for(%i = 0; %i < %objCount; %i++) + { + %obj = %objGroup.getObject(%i); + %obj.locked = %lock; + } + } + + // save + AISaveMissionObjectives(); +} + +function addNewObjective(%type) +{ + if($AIEditor::inspectTeam == 1) + %team = 1; + else if($AIEditor::inspectTeam == 2) + %team = 2; + else + %team = 1; + + %tGroup = nameToId("MissionGroup/Teams/team" @ %team @ "/AIObjectives"); + + if(%tGroup < 1) + return; + + if($InstantGroup $= "MissionGroup") + $InstantGroup = %tGroup; + + switch$(%type) + { + case "Defend Location": + %objective = new AIObjective(AIODefendLocation) + { + dataBlock = "AIObjectiveMarker"; + }; + case "Repair Equipment": + %objective = new AIObjective(AIORepairObject) + { + dataBlock = "AIObjectiveMarker"; + }; + case "Deploy Outdoor Turret": + %Objective = new AIObjective(AIODeployEquipment) + { + dataBlock = "AIObjectiveMarker"; + weightLevel1 = 4100; + weightLevel2 = 0; + description = "Deploy outdoor Turret"; + offense = false; + defense = true; + targetObjectId = -1; + targetObject = -1; + targetClientId = -1; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + }; + case "Deploy Indoor Turret": + %Objective = new AIObjective(AIODeployEquipment) + { + dataBlock = "AIObjectiveMarker"; + weightLevel1 = 4100; + weightLevel2 = 0; + description = "Deploy indoor Turret"; + offense = false; + defense = true; + targetObjectId = -1; + targetObject = -1; + targetClientId = -1; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + }; + case "Attack Target": + %objective = new AIObjective(AIOAttackObject) + { + dataBlock = "AIObjectiveMarker"; + }; + case "Touch FlipFlop": + %objective = new AIObjective(AIOTouchObject) + { + dataBlock = "AIObjectiveMarker"; + }; + case "Mortar Target": + %objective = new AIObjective(AIOMortarObject) + { + dataBlock = "AIObjectiveMarker"; + }; + case "Deploy Inventory": + %Objective = new AIObjective(AIODeployEquipment) + { + dataBlock = "AIObjectiveMarker"; + weightLevel1 = 4100; + weightLevel2 = 0; + description = "Deploy Inventory Station"; + offense = false; + defense = true; + targetObjectId = -1; + targetObject = -1; + targetClientId = -1; + equipment = "InventoryDeployable"; + buyEquipmentSet = "MediumInventorySet"; + }; + case "New Group": + %set = new SimGroup("ObjectiveSet"); + %tGroup.add(%set); + return; + default: + error("no defined type."); + return; + } + + $InstantGroup.add(%objective); + aiEdit.clearSelection(); + aiEdit.selectObject(%objective); + aiEdit.dropSelection(); + %objective.location = %objective.getWorldBoxCenter(); + Inspector.inspect(%objective); + InspectorNameEdit.setValue(%objective.getName()); +} + +function ObjectiveList::onSelect(%this, %id, %text) +{ + addNewObjective(%text); + ObjectiveList.setText("New Objective"); +} diff --git a/base/gui/AIEFrameSetDlg.gui b/base/gui/AIEFrameSetDlg.gui new file mode 100644 index 0000000..160435f --- /dev/null +++ b/base/gui/AIEFrameSetDlg.gui @@ -0,0 +1,162 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(AIEFrameSetDlg) { + profile = "GuiModelessDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + activeToolCount = "0"; + + new GuiFrameSetCtrl(AIEFrameSet) { + profile = "EditorContentProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "120 30"; + extent = "520 420"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + columns = "0"; + rows = "0"; + borderWidth = "4"; + borderColor = "206 206 206 206"; + borderEnable = "dynamic"; + borderMovable = "dynamic"; + autoBalance = "0"; + + new GuiControl(AIEFrame) { + profile = "EditTSControlProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "520 420"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + borderWidth = "2"; + + }; + new GuiFrameSetCtrl(AIEToolFrameSet) { + profile = "EditorContentProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "520 420"; + extent = "20 20"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + columns = "0"; + borderWidth = "3"; + borderColor = "206 206 206 206"; + borderEnable = "dynamic"; + borderMovable = "dynamic"; + autoBalance = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- + +//------------------------------------------------------------------------------ +// Functions +//------------------------------------------------------------------------------ + +function AIEFrameSetDlg::getPrefs(%this) +{ +} + +function AIEFrameSetDlg::setPrefs(%this) +{ +} + +function AIEFrameSetDlg::onWake(%this) +{ + $AIEdit = true; + AIEditorMap.push(); + aiEdit.clearIgnoreList(); + aiEdit.ignoreObjClass(AIObjective); + aiEdit.toggleIgnoreList = true; + aiEdit.renderNav = true; +} + +function AIEFrameSetDlg::onSleep(%this) +{ + $AIEdit = false; + AIEditorMap.pop(); + EditorTree.open("MissionGroup"); +} + +function AIEFrameSetDlg::init(%this) +{ + AIEFrame.add(aiEdit); + %this.resetFrames(); +} + +function AIEFrameSetDlg::update(%this) +{ + // check the frame to see if it is visible + if(AIEToolFrameSet.getCount()) + { + %res = getResolution(); + + //90 = width of button bar + %width = getWord(%res, 0) - 90; + + if(AIEFrameSet.getColumnOffset(1) > %width - editor.minToolFrameWidth) + AIEFrameSet.setColumnOffset(1, %width - editor.minToolFrameWidth); + } +} + +function AIEFrameSetDlg::resetFrames(%this) +{ + %tools = AIEToolFrameSet; + while(%tools.getRowCount() > %tools.getCount()) + %tools.removeRow(); + while(%tools.getRowCount() < %tools.getCount()) + %tools.addRow(); + + %offset = 400; + + // update the frame view + %frameSet = AIEFrameSet; + if(!%tools.getCount() && (%frameSet.getColumnCount() > 1)) + { + %Offset = %frameSet.getColumnOffset(1); + %frameSet.removeColumn(); + } + if(%tools.getCount() && (%frameSet.getColumnCount() == 1)) + { + %frameSet.addColumn(); + %frameSet.setColumnOffset(1, %offset); + } + + //if(%tools.getCount()) + //%this.toolPaneOffset = AIEFrameSet.getColumnOffset(1); + %this.activeToolCount = %tools.getCount(); +} + +function AIEFrameSetDlg::addTool(%this, %tool) +{ + %group = nameToId("MissionGroup/Teams/team" @ $AIEditor::inspectTeam @ "/AIObjectives"); + + if(%group == -1) + return false; + + if($AIEditor::inspectTeam == 1) + EditorTree.open("MissionGroup/Teams/team1/AIObjectives"); + else + EditorTree.open("MissionGroup/Teams/team2/AIObjectives"); + + AIEToolFrameSet.add(%tool); + %this.resetFrames(); + return true; +} + +function AIEFrameSetDlg::removeTool(%this, %tool) +{ + AIEToolFrameSet.remove(%tool); + %this.resetFrames(); +} + diff --git a/base/gui/AIEStatusbarDlg.gui b/base/gui/AIEStatusbarDlg.gui new file mode 100644 index 0000000..b3d420d --- /dev/null +++ b/base/gui/AIEStatusbarDlg.gui @@ -0,0 +1,83 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(AIEStatusBarDlg) { + profile = "GuiModelessDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "0"; + helpTag = "0"; + + new GuiControl() { + profile = "EditorContentProfile"; + horizSizing = "width"; + vertSizing = "top"; + position = "0 450"; + extent = "640 30"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 8"; + extent = "39 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Mission:"; + }; + new GuiControl() { + profile = "GuiContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "49 6"; + extent = "188 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiTextCtrl(AIEMissionNameText) { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "3 2"; + extent = "8 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + }; + }; + }; +}; +//--- OBJECT WRITE END --- + +//------------------------------------------------------------------------------ +// Functions +//------------------------------------------------------------------------------ + +function AIEStatusBarDlg::init(%this) +{ + %this.update(); +} + +function AIEStatusBarDlg::update(%this) +{ + if($MissionName $= "") + AIEMissionNameText.setValue(""); + else + AIEMissionNameText.setValue($MissionName); +} diff --git a/base/gui/AIEWorkingDlg.gui b/base/gui/AIEWorkingDlg.gui new file mode 100644 index 0000000..a936383 --- /dev/null +++ b/base/gui/AIEWorkingDlg.gui @@ -0,0 +1,66 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(AIEWorkingDlg) { + profile = "GuiModelessDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "0"; + helpTag = "0"; + + new GuiChunkedBitmapCtrl() { + profile = "GuiContentProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "234 5"; + extent = "400 130"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "ShellLargeLabelProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "16 10"; + extent = "378 40"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Building Graph ..."; + }; + new GuiProgressCtrl(GraphBuildProgress) { + profile = "ShellProgressBarProfile"; + horizSizing = "center"; + vertSizing = "top"; + position = "29 50"; + extent = "342 31"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + setValue = "0"; + }; + new GuiTextCtrl(GraphCurrentOperation) { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "35 96"; + extent = "8 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/AIEditorGui.gui b/base/gui/AIEditorGui.gui new file mode 100644 index 0000000..5d1222b --- /dev/null +++ b/base/gui/AIEditorGui.gui @@ -0,0 +1,46 @@ + +new WorldEditor(aiEdit) +{ + profile = ""; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "520 420"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; +}; + +//------------------------------------------------------------------------------ + +function AIworking(%working) +{ + if(%working) + { + Canvas.pushDialog(AIEWorkingDlg); + GraphBuildProgress.setValue(0.0); + } + else + Canvas.popDialog(AIEWorkingDlg); + + Canvas.repaint(); +} + +new ActionMap(AIEditorMap); +//AIEditorMap.bindCmd(keyboard, "space", "aiEdit.nextMode();", ""); + +AIEditorMap.bindCmd(keyboard, "ctrl c", "aiEdit.copySelection();", ""); +AIEditorMap.bindCmd(keyboard, "ctrl x", "aiEdit.copySelection();aiEdit.deleteSelection();", ""); +AIEditorMap.bindCmd(keyboard, "delete", "aiEdit.copySelection();aiEdit.deleteSelection();", ""); +AIEditorMap.bindCmd(keyboard, "ctrl v", "aiEdit.pasteSelection();", ""); +AIEditorMap.bindCmd(keyboard, "ctrl h", "aiEdit.hideSelection(true);", ""); +AIEditorMap.bindCmd(keyboard, "alt h", "aiEdit.hideSelection(false);", ""); +AIEditorMap.bindCmd(keyboard, "i", "Canvas.pushDialog(interiorDebugDialog);", ""); +AIEditorMap.bindCmd(keyboard, "ctrl d", "aiEdit.dropSelection();", ""); +AIEditorMap.bindCmd(keyboard, "ctrl q", "aiEdit.dropCameraToSelection();", ""); +AIEditorMap.bindCmd(keyboard, "ctrl m", "aiEdit.moveSelectionInPlace();", ""); +AIEditorMap.bindCmd(keyboard, "ctrl r", "aiEdit.resetTransforms();", ""); +AIEditorMap.bindCmd(keyboard, "space", "aiEdit.nextMode();", ""); + + diff --git a/base/gui/AIEditorToolBar.gui b/base/gui/AIEditorToolBar.gui new file mode 100644 index 0000000..facfbb6 --- /dev/null +++ b/base/gui/AIEditorToolBar.gui @@ -0,0 +1,90 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(AIEditorToolBar) { + profile = "GuiModelessDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiControl() { + profile = "EditorContentProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 30"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiCheckBoxCtrl(AIEditorObjectivesTree1CheckBox) { + profile = "GuiRadioProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "290 5"; + extent = "114 20"; + minExtent = "8 8"; + visible = "1"; + command = "AIEditorObjectivesTree1CheckBox.setTreeGui(1);"; + helpTag = "0"; + text = "Objectives Team 1"; + }; + new GuiCheckBoxCtrl(AIEditorObjectivesTree2CheckBox) { + profile = "GuiRadioProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "405 5"; + extent = "114 20"; + minExtent = "8 8"; + visible = "1"; + command = "AIEditorObjectivesTree2CheckBox.setTreeGui(2);"; + helpTag = "0"; + text = "Objectives Team 2"; + }; + new GuiCheckBoxCtrl(AIEditorObjectivesInspectorCheckBox) { + profile = "GuiRadioProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "520 5"; + extent = "114 20"; + minExtent = "8 8"; + visible = "1"; + command = "if($ThisControl.getValue()) AIEFrameSetDlg.addTool(EditorToolInspectorGui); else AIEFrameSetDlg.removeTool(EditorToolInspectorGui);"; + helpTag = "0"; + text = "Objectives Inspector"; + }; + }; +}; +//--- OBJECT WRITE END --- + +function AIEditorToolBar::init(%this) +{ +} + +function AIEditorObjectivesTree1CheckBox::setTreeGui(%this, %team) +{ + $AIEditor::inspectTeam = %team; + AIEditorObjectivesTree2CheckBox.setValue(false); + + if($ThisControl.getValue()) + %isSet = AIEFrameSetDlg.addTool(EditorToolTreeViewGui); + else + %isSet = AIEFrameSetDlg.removeTool(EditorToolTreeViewGui); + + $ThisControl.setValue(%isSet); +} + +function AIEditorObjectivesTree2CheckBox::setTreeGui(%this, %team) +{ + $AIEditor::inspectTeam = %team; + AIEditorObjectivesTree1CheckBox.setValue(false); + + if($ThisControl.getValue()) + %isSet = AIEFrameSetDlg.addTool(EditorToolTreeViewGui); + else + %isSet = AIEFrameSetDlg.removeTool(EditorToolTreeViewGui); + + $ThisControl.setValue(%isSet); +} diff --git a/base/gui/AddressDlg.gui b/base/gui/AddressDlg.gui new file mode 100644 index 0000000..c6b5631 --- /dev/null +++ b/base/gui/AddressDlg.gui @@ -0,0 +1,338 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(AddressDlg) { + profile = "DlgBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lbstate = "buddylist"; + msg = "Request Processed"; + lbline = "6"; + DestList = "1"; + key = "28"; + state = "noprocess"; + lbcount = "6"; + blstate = "DONE"; + useVariable = "0"; + doRefresh = "1"; + SrcList = "2"; + err = "0"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "79 68"; + extent = "481 344"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "LIST CONTROL"; + noTitleBar = "0"; + + new ShellBitmapButton(LC_CCListBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "219 178"; + extent = "75 38"; + minExtent = "32 38"; + visible = "1"; + command = "AddressDlg.AddCC();"; + helpTag = "0"; + text = "DEL"; + simpleStyle = "0"; + direction = "1"; + }; + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "30 115"; + extent = "183 178"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "0 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 7"; + extent = "159 164"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellTextList(LC_BigList) { + profile = "ShellTextArrayProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "159 8"; + minExtent = "8 8"; + visible = "1"; + variable = "$LCBigList"; + command = "AddressDlg.onClick(\"BIGLIST\");"; + altCommand = "AddressDlg.onDblClick(0);"; + helpTag = "0"; + enumerate = "1"; + resizeCell = "1"; + columns = "0"; + fitParentWidth = "1"; + clipColumnText = "0"; + }; + }; + }; + new ShellBitmapButton(LC_ToListBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "219 38"; + extent = "75 38"; + minExtent = "32 38"; + visible = "1"; + command = "AddressDlg.AddTo();"; + helpTag = "0"; + text = "DEL"; + simpleStyle = "0"; + direction = "1"; + }; + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "284 40"; + extent = "168 119"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "0 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 7"; + extent = "144 105"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellTextList(LC_ToList) { + profile = "ShellTextArrayProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "144 8"; + minExtent = "8 8"; + visible = "1"; + variable = "$LCToList"; + command = "AddressDlg.onClick(\"TOLIST\");"; + altCommand = "AddressDlg.onDblClick(1);"; + helpTag = "0"; + enumerate = "1"; + resizeCell = "1"; + columns = "0"; + fitParentWidth = "1"; + clipColumnText = "0"; + direction = "1"; + }; + }; + }; + new ShellBitmapButton(LC_BuddyListBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "24 288"; + extent = "194 38"; + minExtent = "32 38"; + visible = "1"; + command = "AddressDlg.AddBuddyList();"; + helpTag = "0"; + text = "ADD TO BUDDYLIST"; + simpleStyle = "0"; + direction = "0"; + }; + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "284 175"; + extent = "168 118"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "0 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 7"; + extent = "144 104"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellTextList(LC_CCList) { + profile = "ShellTextArrayProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "144 8"; + minExtent = "8 8"; + visible = "1"; + variable = "$LCCCList"; + command = "AddressDlg.OnClick(\"CCLIST\");"; + altCommand = "AddressDlg.onDblClick(2);"; + helpTag = "0"; + enumerate = "1"; + resizeCell = "1"; + columns = "0"; + fitParentWidth = "1"; + clipColumnText = "0"; + }; + }; + }; + new ShellBitmapButton(LC_OKBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "368 288"; + extent = "89 38"; + minExtent = "32 38"; + visible = "1"; + command = "AddressDlg.OK();"; + helpTag = "0"; + text = "OK"; + simpleStyle = "0"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "288 29"; + extent = "40 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "TO List:"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "288 163"; + extent = "41 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "CC List:"; + }; + new ShellBitmapButton(LC_CancelBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "278 288"; + extent = "89 38"; + minExtent = "32 38"; + visible = "1"; + command = "AddressDlg.Cancel();"; + accelerator = "escape"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + new ShellPopupMenu(LC_ListBox) { + profile = "ShellPopupProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "27 76"; + extent = "193 36"; + minExtent = "49 36"; + visible = "1"; + command = "AddressDlg.onClick(\"LISTBOX\");"; + helpTag = "0"; + maxPopupHeight = "200"; + buttonBitmap = "gui/shll_pulldown"; + rolloverBarBitmap = "gui/shll_pulldownbar_rol"; + selectedBarBitmap = "gui/shll_pulldownbar_act"; + noButtonStyle = "0"; + }; + new ShellTextEditCtrl(LC_Search) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "25 38"; + extent = "158 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$LCSearch"; + command = "AddressDlg.onClick(\"SEARCHBOX\");"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + password = "0"; + glowOffset = "9 9"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "37 29"; + extent = "38 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Search:"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "37 68"; + extent = "22 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "List:"; + }; + new ShellBitmapButton(LC_GoSearchBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "167 38"; + extent = "53 38"; + minExtent = "32 38"; + visible = "1"; + command = "AddressDlg.GoSearch();"; + helpTag = "0"; + text = "GO"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/AdvancedHostDlg.gui b/base/gui/AdvancedHostDlg.gui new file mode 100644 index 0000000..4e6b231 --- /dev/null +++ b/base/gui/AdvancedHostDlg.gui @@ -0,0 +1,406 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(AdvancedHostDlg) { + profile = "DlgBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "70 30"; + extent = "500 420"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "ADVANCED HOST OPTIONS"; + maxLength = "255"; + noTitleBar = "0"; + + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "88 40"; + extent = "40 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Port:"; + maxLength = "255"; + }; + new ShellTextEditCtrl(AH_HostPort) { + profile = "NewTextEditNumericProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "124 32"; + extent = "98 38"; + minExtent = "32 38"; + visible = "1"; + helpTag = "0"; + maxLength = "8"; + historySize = "0"; + password = "0"; + glowOffset = "9 9"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "223 40"; + extent = "64 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Time Limit:"; + maxLength = "255"; + }; + new ShellTextEditCtrl(AH_TimeLimit) { + profile = "NewTextEditNumericProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "283 32"; + extent = "68 38"; + minExtent = "32 38"; + visible = "1"; + helpTag = "0"; + maxLength = "3"; + historySize = "0"; + password = "0"; + glowOffset = "9 9"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "349 40"; + extent = "41 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Minutes"; + maxLength = "255"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "97 70"; + extent = "110 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Admin Password:"; + maxLength = "255"; + }; + new ShellTextEditCtrl(AH_AdminPassword) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "203 62"; + extent = "180 38"; + minExtent = "32 38"; + visible = "1"; + helpTag = "0"; + maxLength = "16"; + historySize = "0"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellToggleButton(AH_DedicatedTgl) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "82 106"; + extent = "150 30"; + minExtent = "26 27"; + visible = "1"; + helpTag = "0"; + text = "DEDICATED"; + maxLength = "255"; + }; + new ShellToggleButton(AH_AdminVoteTgl) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "268 106"; + extent = "150 30"; + minExtent = "26 27"; + visible = "1"; + helpTag = "0"; + text = "ALLOW ADMIN VOTES"; + maxLength = "255"; + }; + new ShellToggleButton(AH_TournamentTgl) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "82 136"; + extent = "150 30"; + minExtent = "26 27"; + visible = "1"; + helpTag = "0"; + text = "TOURNAMENT MODE"; + maxLength = "255"; + }; + new ShellToggleButton(AH_AllowSmurfTgl) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "268 136"; + extent = "150 30"; + minExtent = "26 27"; + visible = "1"; + helpTag = "0"; + text = "ALLOW ALIASES"; + maxLength = "255"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "62 174"; + extent = "114 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Vote Pass Percentage:"; + maxLength = "255"; + }; + new GuiTextCtrl(AH_VotePassText) { + profile = "ShellAltTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "181 175"; + extent = "29 20"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "60%"; + maxLength = "255"; + }; + new ShellSliderCtrl(AH_VotePassSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "72 189"; + extent = "170 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + altCommand = "AH_VotePassText.update();"; + helpTag = "0"; + range = "50.000000 100.000000"; + ticks = "51"; + value = "70"; + usePlusMinus = "1"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "62 214"; + extent = "54 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Vote Time:"; + maxLength = "255"; + }; + new GuiTextCtrl(AH_VoteTimeText) { + profile = "ShellAltTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "121 215"; + extent = "69 20"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "20 seconds"; + maxLength = "255"; + }; + new ShellSliderCtrl(AH_VoteTimeSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "72 229"; + extent = "170 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + altCommand = "AH_VoteTimeText.update();"; + helpTag = "0"; + range = "10.000000 60.000000"; + ticks = "51"; + value = "20"; + usePlusMinus = "1"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "260 175"; + extent = "93 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Observer Timeout:"; + maxLength = "255"; + }; + new GuiTextCtrl(AH_RespawnText) { + profile = "ShellAltTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "358 176"; + extent = "69 20"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "30 seconds"; + maxLength = "255"; + }; + new ShellSliderCtrl(AH_RespawnSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "270 190"; + extent = "170 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + altCommand = "AH_RespawnText.update();"; + helpTag = "0"; + range = "10.000000 60.000000"; + ticks = "51"; + value = "45"; + usePlusMinus = "1"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "260 215"; + extent = "72 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Warmup Time:"; + maxLength = "255"; + }; + new GuiTextCtrl(AH_WarmupText) { + profile = "ShellAltTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "337 216"; + extent = "69 20"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "30 seconds"; + maxLength = "255"; + }; + new ShellSliderCtrl(AH_WarmupSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "270 230"; + extent = "170 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + altCommand = "AH_WarmupText.update();"; + helpTag = "0"; + range = "0.000000 30.000000"; + ticks = "31"; + value = "20"; + usePlusMinus = "1"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "123 262"; + extent = "58 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Server Info:"; + maxLength = "255"; + }; + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "120 275"; + extent = "260 85"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "3 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "7 7"; + extent = "230 71"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextEditCtrl(AH_ServerInfo) { + profile = "ShellMessageTextProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "230 71"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + allowColorChars = "0"; + maxChars = "-1"; + }; + }; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "74 365"; + extent = "140 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.popDialog( AdvancedHostDlg );"; + accelerator = "escape"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "287 365"; + extent = "140 38"; + minExtent = "32 38"; + visible = "1"; + command = "AdvancedHostDlg.Accept();"; + helpTag = "0"; + text = "SAVE"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/BrowserEditInfoDlg.gui b/base/gui/BrowserEditInfoDlg.gui new file mode 100644 index 0000000..f716cc6 --- /dev/null +++ b/base/gui/BrowserEditInfoDlg.gui @@ -0,0 +1,96 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(BrowserEditInfoDlg) { + profile = "DlgBackProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "70 80"; + extent = "500 320"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "EDIT DESCRIPTION"; + maxLength = "255"; + noTitleBar = "0"; + + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "81 265"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "TribePropertiesDlg.pendingChanges = \"\";Canvas.popDialog(BrowserEditInfoDlg);"; + accelerator = "escape"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "right"; + vertSizing = "height"; + position = "25 34"; + extent = "449 233"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "3 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "7 7"; + extent = "419 219"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextEditCtrl(EditDescriptionText) { + profile = "ShellMessageTextProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "419 219"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + allowColorChars = "1"; + maxChars = "3600"; + }; + }; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "291 265"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "EditDescriptionApply();"; + helpTag = "0"; + text = "APPLY"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/BrowserSearchDlg.gui b/base/gui/BrowserSearchDlg.gui new file mode 100644 index 0000000..d2c1117 --- /dev/null +++ b/base/gui/BrowserSearchDlg.gui @@ -0,0 +1,147 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(BrowserSearchDlg) { + profile = "DlgBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl(BrowserSearchPane) { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "120 61"; + extent = "399 358"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + noTitleBar = "0"; + + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "97 46"; + extent = "44 16"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Search:"; + }; + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "84 93"; + extent = "226 187"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "0 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 7"; + extent = "202 173"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellTextList(BrowserSearchMatchList) { + profile = "ShellTextArrayProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "202 8"; + minExtent = "8 8"; + visible = "1"; + altCommand = "BrowserSearchDone();"; + helpTag = "0"; + enumerate = "0"; + resizeCell = "1"; + columns = "0"; + fitParentWidth = "1"; + }; + }; + }; + new ShellBitmapButton(BSearchOKBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "201 288"; + extent = "115 38"; + minExtent = "32 38"; + visible = "1"; + command = "BrowserSearchDone();"; + helpTag = "0"; + text = "OK"; + simpleStyle = "0"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "172 80"; + extent = "47 16"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Matches:"; + }; + new ShellTextEditCtrl(Search_EditField) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "139 33"; + extent = "133 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$BrowserSearchField"; + altCommand = "BrowserStartSearch();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "80 288"; + extent = "116 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.popDialog(BrowserSearchDlg);"; + accelerator = "escape"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "262 33"; + extent = "51 38"; + minExtent = "32 38"; + visible = "1"; + command = "BrowserStartSearch();"; + helpTag = "0"; + text = "GO"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/CenterPrint.gui b/base/gui/CenterPrint.gui new file mode 100644 index 0000000..f94046e --- /dev/null +++ b/base/gui/CenterPrint.gui @@ -0,0 +1,26 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(CenterPrintDlg) { + profile = "GuiModelessDialogProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "638 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextCtrl(CenterPrintText) { + profile = "ShellProgressBarTextProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "300 240"; + extent = "640 128"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "6"; + }; +}; + + +//--- OBJECT WRITE END --- diff --git a/base/gui/ChannelBanDlg.gui b/base/gui/ChannelBanDlg.gui new file mode 100644 index 0000000..b0e7bd1 --- /dev/null +++ b/base/gui/ChannelBanDlg.gui @@ -0,0 +1,107 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(ChannelBanDlg) { + profile = "DlgBackProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl(ChannelBanPane) { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "154 65"; + extent = "332 346"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "EDIT BAN LIST"; + noTitleBar = "0"; + + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "27 28"; + extent = "72 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Warrior Name:"; + }; + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "right"; + vertSizing = "height"; + position = "22 42"; + extent = "287 248"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "dynamic"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "0 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 7"; + extent = "279 234"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellChatMemberList(ChannelBanList) { + profile = "ShellChatMemberListProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "263 8"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + enumerate = "0"; + resizeCell = "1"; + columns = "0 169"; + fitParentWidth = "1"; + clipColumnText = "0"; + }; + }; + }; + new ShellBitmapButton(ChannelBanRemoveBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "32 291"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "ChannelRemoveBan();"; + helpTag = "0"; + text = "REMOVE BAN"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "169 291"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.popDialog(ChannelBanDlg);"; + helpTag = "0"; + text = "DONE"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/ChannelKeyDlg.gui b/base/gui/ChannelKeyDlg.gui new file mode 100644 index 0000000..1caf8ae --- /dev/null +++ b/base/gui/ChannelKeyDlg.gui @@ -0,0 +1,110 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(ChannelKeyDlg) { + profile = "DlgBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "120 160"; + extent = "400 159"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "CHANNEL PASSWORD"; + noTitleBar = "0"; + + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "34 40"; + extent = "80 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Channel:"; + }; + new ShellFieldCtrl() { + profile = "ShellFieldProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "119 38"; + extent = "221 24"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new GuiTextCtrl(KeyChannelName) { + profile = "ShellStaticTextProfile"; + horizSizing = "center"; + vertSizing = "bottom"; + position = "8 3"; + extent = "205 20"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + }; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "34 70"; + extent = "80 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Password:"; + }; + new ShellTextEditCtrl(EditChannelKey) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "110 62"; + extent = "238 38"; + minExtent = "32 38"; + visible = "1"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + password = "1"; + glowOffset = "9 9"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "48 104"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.popDialog(ChannelKeyDlg);"; + accelerator = "escape"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "224 104"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "KeyChannelJoin();"; + helpTag = "0"; + text = "JOIN"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/ChannelOptionsDlg.gui b/base/gui/ChannelOptionsDlg.gui new file mode 100644 index 0000000..de0f678 --- /dev/null +++ b/base/gui/ChannelOptionsDlg.gui @@ -0,0 +1,224 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(ChannelOptionsDlg) { + profile = "DlgBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "75 102"; + extent = "490 276"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "CHANNEL OPTIONS"; + noTitleBar = "0"; + + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "25 38"; + extent = "60 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Channel:"; + }; + new ShellFieldCtrl() { + profile = "ShellFieldProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "91 36"; + extent = "218 24"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new GuiTextCtrl(EditChannelName) { + profile = "ShellStaticTextProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "8 3"; + extent = "202 20"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + }; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "25 68"; + extent = "60 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Topic:"; + }; + new ShellTextEditCtrl(EditChannelTopic) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "81 60"; + extent = "362 38"; + minExtent = "32 38"; + visible = "1"; + helpTag = "0"; + historySize = "0"; + maxLength = "64"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellToggleButton(ButtonChannelInvite) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "63 106"; + extent = "150 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$EditChannelInvite"; + command = "ToggleChannelInvite();"; + helpTag = "0"; + text = "INVITE ONLY"; + }; + new ShellToggleButton(ButtonChannelModerate) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "277 106"; + extent = "150 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$EditChannelModerate"; + helpTag = "0"; + text = "MODERATE"; + }; + new ShellToggleButton(ButtonChannelLimit) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "45 148"; + extent = "150 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$EditChannelLimit"; + command = "ToggleChannelLimit();"; + helpTag = "0"; + text = "LIMIT MEMBERS"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "201 151"; + extent = "60 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Max:"; + }; + new ShellTextEditCtrl(EditChannelMaxMembers) { + profile = "NewTextEditNumericProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "256 143"; + extent = "99 38"; + minExtent = "32 38"; + visible = "1"; + helpTag = "0"; + historySize = "0"; + maxLength = "5"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellToggleButton(ButtonChannelKey) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "45 178"; + extent = "150 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$EditChannelKey"; + command = "ToggleChannelKey();"; + helpTag = "0"; + text = "REQUIRE PASSWORD"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "201 181"; + extent = "60 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Password:"; + }; + new ShellTextEditCtrl(EditChannelPassword) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "256 173"; + extent = "198 38"; + minExtent = "32 38"; + visible = "1"; + helpTag = "0"; + historySize = "0"; + maxLength = "16"; + password = "1"; + glowOffset = "9 9"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "315 30"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.pushDialog(ChannelBanDlg);"; + helpTag = "0"; + text = "BAN LIST"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "78 221"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "CancelChannelOptions();"; + accelerator = "escape"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + new ShellBitmapButton(ButtonChannelAccept) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "284 221"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "AcceptChannelOptions();"; + helpTag = "0"; + text = "ACCEPT"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/ChatDlg.gui b/base/gui/ChatDlg.gui new file mode 100644 index 0000000..2b8454b --- /dev/null +++ b/base/gui/ChatDlg.gui @@ -0,0 +1,125 @@ +new GuiControl(MainChatHud) { + profile = "GuiModelessDialogProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + modal = "1"; + setFirstResponder = "0"; + + new GuiNoMouseCtrl() { + profile = "defaultGuiProfile"; + horizSizing = "relative"; + vertSizing = "bottom"; + position = "0 0"; + extent = "400 300"; + minExtent = "8 8"; + visible = "1"; + + new HudHorzCtrl(mainVoteHud) { + profile = "HudVoteBackProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "8 75"; + extent = "256 5"; + minExtent = "2 2"; + visible = "0"; + + new GuiVoteCtrl(voteHud) { + profile = "ShellProgressBarProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "6 2"; + extent = "244 3"; + minExtent = "2 2"; + visible = "0"; + }; + }; + + new ShellFieldCtrl(OuterChatHud) + { + profile = "GuiChatBackProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "8 8"; + extent = "256 72"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + + new GuiBitmapCtrl(chatPageDown) + { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "250 50"; + extent = "13 13"; + minExtent = "8 8"; + visible = "0"; + bitmap = "gui/hud_chatPageDown.png"; + }; + + new GuiScrollCtrl(ChatScrollHud) + { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "4 4"; + extent = "252 64"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOff"; + constantThumbHeight = "0"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "4 4"; + extent = "252 64"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiMessageVectorCtrl(ChatHud) + { + profile = "GuiChatHudProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 4"; + extent = "252 64"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + lineSpacing = "0"; + lineContinuedIndex = "10"; + allowedMatches[0] = "http"; + allowedMatches[1] = "t2server"; + matchColors[0] = "0 0 255 255"; + matchColors[1] = "255 0 0 255"; + matchColors[2] = "0 0 255 255"; + matchColors[3] = "0 0 255 255"; + matchColors[4] = "0 0 255 255"; + matchColors[5] = "0 0 255 255"; + matchColors[6] = "0 0 255 255"; + matchColors[7] = "0 0 255 255"; + matchColors[8] = "0 0 255 255"; + matchColors[9] = "0 0 255 255"; + matchColors[10] = "0 0 255 255"; + matchColors[11] = "0 0 255 255"; + matchColors[12] = "0 0 255 255"; + matchColors[13] = "0 0 255 255"; + matchColors[14] = "0 0 255 255"; + matchColors[15] = "0 0 255 255"; + maxColorIndex = 5; + }; + }; + }; + }; + }; +}; diff --git a/base/gui/ChatGui.gui b/base/gui/ChatGui.gui new file mode 100644 index 0000000..0b3e00c --- /dev/null +++ b/base/gui/ChatGui.gui @@ -0,0 +1,220 @@ +//--- OBJECT WRITE BEGIN --- +new GuiChunkedBitmapCtrl(ChatGui) { + profile = "GuiContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + variable = "$ShellBackground"; + helpTag = "0"; + useVariable = "1"; + + new ShellPaneCtrl(ChatChannelPane) { + profile = "ShellPaneProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "12 46"; + extent = "620 390"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "CHAT"; + noTitleBar = "0"; + + new ShellTabFrame(ChatTabFrame) { + profile = "ShellHorzTabFrameProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "22 54"; + extent = "576 254"; + minExtent = "26 254"; + visible = "1"; + helpTag = "0"; + isVertical = "0"; + useCloseButton = "0"; + edgeInset = "0"; + }; + new ShellTabGroupCtrl(ChatTabView) { + profile = "TabGroupProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "30 25"; + extent = "560 29"; + minExtent = "38 29"; + visible = "1"; + helpTag = "0"; + glowOffset = "7"; + tabSpacing = "2"; + maxTabWidth = "150"; + stretchToFit = "0"; + }; + new ShellScrollCtrl(ChatGuiScroll) { + profile = "NewScrollCtrlProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "33 91"; + extent = "381 251"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "2 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "6 7"; + extent = "353 237"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiChannelVectorCtrl(ChatGuiMessageVector) { + profile = "GuiChannelVectorProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "357 19"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "0"; + lineContinuedIndex = "5"; + allowedMatches[0] = "http"; + matchColor = "0 0 255 255"; + }; + }; + }; + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "left"; + vertSizing = "height"; + position = "412 62"; + extent = "175 308"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "0 2"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 6"; + extent = "151 296"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellChatMemberList(ChatRoomMemberList) { + profile = "ShellChatMemberListProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "149 8"; + minExtent = "8 8"; + visible = "1"; + altCommand = "ChatPrivate();"; + helpTag = "0"; + enumerate = "1"; + resizeCell = "1"; + columns = "0"; + fitParentWidth = "1"; + clipColumnText = "0"; + }; + }; + }; + new ShellTextEditCtrl(ChatMessageEntry) { + profile = "NewTextEditProfile"; + horizSizing = "width"; + vertSizing = "top"; + position = "27 337"; + extent = "392 38"; + minExtent = "32 38"; + visible = "1"; + altCommand = "ChatSendText();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + password = "0"; + glowOffset = "9 9"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "34 69"; + extent = "38 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "TOPIC:"; + }; + new GuiBubbleTextCtrl(ChatChannelTopic) { + profile = "ShellTopicTextProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "78 69"; + extent = "207 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "This is a sample chat topic"; + }; + new ShellBitmapButton(ChatOpenPaneBtn) { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "285 60"; + extent = "100 38"; + minExtent = "32 38"; + visible = "1"; + command = "ChatTabView.openNewPane();"; + helpTag = "0"; + text = "CHANNELS"; + simpleStyle = "0"; + }; + new ShellBitmapButton(ChatClosePaneBtn) { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "377 60"; + extent = "43 38"; + minExtent = "32 38"; + visible = "1"; + command = "ChatTabView.closeCurrentPane();"; + accelerator = "x"; + helpTag = "0"; + text = "X"; + simpleStyle = "0"; + }; + new ShellBitmapButton(ChatEditChannelBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "15 -5"; + extent = "128 38"; + minExtent = "32 38"; + visible = "0"; + command = "EditChannelOptions();"; + helpTag = "0"; + text = "CHANNEL OPTIONS"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/ChooseFilterDlg.gui b/base/gui/ChooseFilterDlg.gui new file mode 100644 index 0000000..aa4b6eb --- /dev/null +++ b/base/gui/ChooseFilterDlg.gui @@ -0,0 +1,148 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(ChooseFilterDlg) { + profile = "DlgBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "95 78"; + extent = "450 324"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "CHANGE FILTER"; + noTitleBar = "0"; + + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "44 32"; + extent = "98 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "CHOOSE A FILTER:"; + }; + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "39 49"; + extent = "218 220"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "3 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "7 7"; + extent = "188 206"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellTextList(CF_FilterList) { + profile = "ShellTextArrayProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "188 8"; + minExtent = "8 8"; + visible = "1"; + altCommand = "ChooseFilterDlg.editFilter();"; + helpTag = "0"; + enumerate = "0"; + resizeCell = "1"; + columns = "0"; + fitParentWidth = "1"; + clipColumnText = "0"; + }; + }; + }; + new ShellBitmapButton(CF_NewFilterBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "280 46"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "ChooseFilterDlg.newFilter();"; + helpTag = "0"; + text = "NEW FILTER"; + simpleStyle = "0"; + }; + new ShellBitmapButton(CF_EditFilterBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "280 76"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "ChooseFilterDlg.editFilter();"; + helpTag = "0"; + text = "EDIT FILTER"; + simpleStyle = "0"; + }; + new ShellBitmapButton(CF_DeleteFilterBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "280 106"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "ChooseFilterDlg.deleteFilter();"; + helpTag = "0"; + text = "DELETE FILTER"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "65 269"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.popDialog(ChooseFilterDlg);"; + accelerator = "escape"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + new ShellBitmapButton(CF_GoBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "257 269"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "ChooseFilterDlg.go();"; + helpTag = "0"; + text = "GO!"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/CommanderChatDlg.gui b/base/gui/CommanderChatDlg.gui new file mode 100644 index 0000000..27ad40d --- /dev/null +++ b/base/gui/CommanderChatDlg.gui @@ -0,0 +1,81 @@ +//--- OBJECT WRITE BEGIN --- +new GuiCommanderNoFocusCtrl(CommanderChatDlg) +{ + profile = "GuiModelessDialogProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "0"; + helpTag = "0"; + + new HudFancyCtrl() + { + profile = "GuiChatBackProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "60 0"; + extent = "330 80"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "0"; + helpTag = "0"; + + new GuiScrollCtrl() + { + profile = "GuiModelessDialogProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "7 4"; + extent = "320 70"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "0"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOff"; + constantThumbHeight = "0"; + + new GuiMessageVectorCtrl(CommanderChatHud) + { + profile = "GuiChatHudProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "7 4"; + extent = "320 70"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "0"; + helpTag = "0"; + lineSpacing = "0"; + lineContinuedIndex = "5"; + allowedMatches[0] = "http"; + allowedMatches[1] = "t2server"; + matchColors[0] = "0 0 255 255"; + matchColors[1] = "255 0 0 255"; + matchColors[2] = "0 0 255 255"; + matchColors[3] = "0 0 255 255"; + matchColors[4] = "0 0 255 255"; + matchColors[5] = "0 0 255 255"; + matchColors[6] = "0 0 255 255"; + matchColors[7] = "0 0 255 255"; + matchColors[8] = "0 0 255 255"; + matchColors[9] = "0 0 255 255"; + matchColors[10] = "0 0 255 255"; + matchColors[11] = "0 0 255 255"; + matchColors[12] = "0 0 255 255"; + matchColors[13] = "0 0 255 255"; + matchColors[14] = "0 0 255 255"; + matchColors[15] = "0 0 255 255"; + }; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/CommanderMapGui.gui b/base/gui/CommanderMapGui.gui new file mode 100644 index 0000000..3b0a4fa --- /dev/null +++ b/base/gui/CommanderMapGui.gui @@ -0,0 +1,284 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(CommanderMapGui) +{ + profile = "CommanderGuiProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + visible = "1"; + + new GuiCommanderMap(CommanderMap) + { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "475 480"; + + // field data + defaultCursor = DefaultCursor; + arrowCursor = CMDCursorArrow; + handCursor = CMDCursorHandOpen; + moveCursor = CMDCursorHandClosed; + zoomCursor = CMDCursorZoom; + addCursor = CMDCursorSelectAdd; + removeCursor = CMDCursorSelectRemove; + mouseSelectRectColor = "255 255 0 255"; + cameraOffset = 10; + cameraVelocity = 500; + defaultIconName = CMDDefaultIcon; + waypintIconName = CMDWaypointIcon; + assignedTaskIconName = CMDAssignedTaskIcon; + potentialTaskIconName = CMDPotentialTaskIcon; + sensorSphereFrameAlpha = 75; + sensorSphereFillAlpha = 30; + renderMissionArea = true; + missionAreaFillColor = "60 60 60 80"; + missionAreaFrameColor = "128 0 0 255"; + renderText = true; + textOffset = 2; + hilightedObjectColor = "234 154 4 200"; + selectedObjectColor = "2 247 248 200"; + playerMarkerAngle = 30; + playerMarkerOffset = 8; + playerMarkerLen = 8; + playerMarkerColor = "0 255 0 200"; + minIconSize = 20; + maxIconSize = 64; + iconProjLen = "20.0"; + minDistanceScale = "0.02"; + maxDistanceScale = "0.05"; + enableEdgeMarkers = true; + edgeMarkerSize = 32; + renderSensors = false; + }; + + new ShellScrollCtrl(CommanderTreeContainer) + { + profile = "NewScrollCtrlProfile"; + horizSizing = "left"; + vertSizing = "height"; + vScrollBar = "alwaysOn"; + hScrollBar = "alwaysOff"; + position = "471 -4"; + extent = "173 458"; + + new GuiScrollContentCtrl() + { + profile = "CommanderScrollContentProfile"; + horizSizing = "left"; + vertSizing = "height"; + + new GuiCommanderTree(CommanderTree) + { + profile = "CommanderTreeProfile"; + position = "0 0"; + extent = "150 459"; + horizSizing = "left"; + vertSizing = "height"; + visible = "true"; + + // field data + backdropBitmapName = "commander/gui/cmd_gradient"; + headerFontType = "Arial Bold"; + entryFontType = "Arial"; + clientNoneFontType = "Arial"; + headerFontSize = 14; + entryFontSize = 13; + clientNoneFontSize = 13; + entryIconOffset = "2 1"; + entryTextOffset = "20 3"; + headerBitmapName = "commander/gui/cmd_columnheadbar"; + headerTextOffset = "10 4"; + clientNoneText = "None Selected"; + headerHeight = 20; + entryHeight = 20; + entryHilightColor = "44 168 219 100"; + entrySelectColor = "255 0 0 100"; + categoryOpenTime = 250; + damageColors = "0 255 0 20 255 255 0 70 255 0 0 100"; + objectControlRect = "128 2 16 16"; + objectControlBitmapName = "commander/gui/cmd_control_checkbox"; + }; + }; + }; + + // boob-tube + new GuiCommanderTV(CommanderTV) + { + profile = "CommanderButtonBackdropProfile"; + position = "475 300"; + extent = "165 150"; + visible = "false"; + vertSizing = "top"; + horizSizing = "left"; + frameBitmap = "commander/gui/cmd_tv_frame"; + staticBitmap = "commander/gui/cmd_tv_static"; + open = false; + target = -1; + + new GuiMouseEventCtrl(CommanderTVScreen) + { + profile = "DefaultProfile"; + position = "0 0"; + extent = "165 150"; + vertSizing = "top"; + horizSizing = "left"; + visible = "true"; + }; + }; + + // return to game + new GuiControl() + { + profile = "CommanderButtonBackdropProfile"; + position = "475 450"; + extent = "165 31"; + horizSizing = "left"; + vertSizing = "top"; + + new ShellBitmapButton() + { + profile = "CommanderButtonProfile"; + opaque = "true"; + horizSizing = "left"; + vertSizing = "top"; + visible = "1"; + position = "-6 -2"; + extent = "177 31"; + command = "CommanderMapGui.close();"; + text = "RETURN TO GAME"; + + }; + }; + + // top button bar + new GuiControl() + { + profile = "DefaultProfile"; + position = "437 -4"; + extent = "44 228"; + horizSizing = "left"; + vertSizing = "bottom"; + visible = "true"; + + new GuiCommanderMapCheckbox(CMDPlayersButton) + { + profile = "CommanderButtonProfile"; + position = "0 0"; + extent = "44 44"; + bitmap = "commander/gui/cmd_icon_players"; + mouseRegion = "7 7 31 31"; + }; + new GuiCommanderMapCheckbox(CMDTacticalButton) + { + profile = "CommanderButtonProfile"; + position = "0 31"; + extent = "44 44"; + bitmap = "commander/gui/cmd_icon_tactical"; + mouseRegion = "7 7 31 31"; + }; + new GuiCommanderMapCheckbox(CMDDeployedTacticalButton) + { + profile = "CommanderButtonProfile"; + position = "0 62"; + extent = "44 44"; + bitmap = "commander/gui/cmd_icon_tactical_D"; + mouseRegion = "7 7 31 31"; + }; + new GuiCommanderMapCheckbox(CMDMiscButton) + { + profile = "CommanderButtonProfile"; + position = "0 93"; + extent = "44 44"; + bitmap = "commander/gui/cmd_icon_misc"; + mouseRegion = "7 7 31 31"; + }; + new GuiCommanderMapCheckbox(CMDDeployedMiscButton) + { + profile = "CommanderButtonProfile"; + position = "0 124"; + extent = "44 44"; + bitmap = "commander/gui/cmd_icon_misc_D"; + mouseRegion = "7 7 31 31"; + }; + new GuiCommanderMapCheckbox(CMDWaypointsButton) + { + profile = "CommanderButtonProfile"; + position = "0 155"; + extent = "44 44"; + bitmap = "commander/gui/cmd_icon_waypoints"; + mouseRegion = "7 7 31 31"; + }; + new GuiCommanderMapCheckbox(CMDObjectivesButton) + { + profile = "CommanderButtonProfile"; + position = "0 186"; + extent = "44 44"; + bitmap = "commander/gui/cmd_icon_objectives"; + mouseRegion = "7 7 31 31"; + }; + }; + + // bottom button bar + new GuiControl() + { + profile = "DefaultProfile"; + position = "437 286"; + extent = "44 199"; + horizSizing = "left"; + vertSizing = "top"; + visible = "true"; + + new GuiCommanderMapCheckbox(CMDShowSensorsButton) + { + profile = "CommanderButtonProfile"; + position = "0 0"; + extent = "44 44"; + bitmap = "commander/gui/cmd_icon_sensor"; + mouseRegion = "7 7 31 31"; + }; + new GuiCommanderMapCheckbox(CMDMoveSelectButton) + { + profile = "CommanderButtonProfile"; + position = "0 31"; + extent = "44 44"; + bitmap = "commander/gui/cmd_icon_moveselect"; + mouseRegion = "7 7 31 31"; + }; + new GuiCommanderMapCheckbox(CMDZoomButton) + { + profile = "CommanderButtonProfile"; + position = "0 62"; + extent = "44 44"; + bitmap = "commander/gui/cmd_icon_zoom"; + mouseRegion = "7 7 31 31"; + }; + new GuiCommanderMapButton(CMDCenterButton) + { + profile = "CommanderButtonProfile"; + position = "0 93"; + extent = "44 44"; + bitmap = "commander/gui/cmd_icon_center"; + mouseRegion = "7 7 31 31"; + }; + new GuiCommanderMapCheckbox(CMDTextButton) + { + profile = "CommanderButtonProfile"; + position = "0 124"; + extent = "44 44"; + bitmap = "commander/gui/cmd_icon_text"; + mouseRegion = "7 7 31 31"; + }; + new GuiCommanderMapCheckbox(CMDCameraButton) + { + profile = "CommanderButtonProfile"; + position = "0 155"; + extent = "44 44"; + bitmap = "commander/gui/cmd_icon_camera"; + mouseRegion = "7 7 31 31"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/CommonLoadDlg.gui b/base/gui/CommonLoadDlg.gui new file mode 100644 index 0000000..69e0e2b --- /dev/null +++ b/base/gui/CommonLoadDlg.gui @@ -0,0 +1,133 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(loadFileDialog) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + helpTag = "0"; + + new GuiWindowCtrl() { + profile = "GuiWindowProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "205 148"; + extent = "260 242"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "LOAD FILE"; + resizeWidth = "True"; + resizeHeight = "True"; + canMove = "True"; + canClose = "True"; + canMinimize = "True"; + canMaximize = "True"; + minSize = "50 50"; + closeCommand = "Canvas.popDialog(loadFileDialog);"; + + new GuiScrollCtrl() { + profile = "GuiScrollCtrlProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 24"; + extent = "181 212"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + willFirstRespond = "True"; + hScrollBar = "dynamic"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "False"; + + new GuiScrollContentCtrl() { + profile = "GuiScrollContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "1 1"; + extent = "161 210"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiTextListCtrl(loadFileList) { + profile = "GuiTextArrayProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "64 64"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + altCommand = "eval($loadFileCommand); Canvas.popDialog(loadFileDialog);"; + helpTag = "0"; + enumerate = "False"; + resizeCell = "True"; + columns = "0"; + noDuplicates = "false"; + }; + }; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "191 181"; + extent = "60 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "eval($loadFileCommand); Canvas.popDialog(loadFileDialog);"; + helpTag = "0"; + text = "LOAD"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "191 205"; + extent = "60 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "Canvas.popDialog(loadFileDialog);"; + helpTag = "0"; + text = "CANCEL"; + }; + }; +}; +//--- OBJECT WRITE END --- + + +function fillFileList(%filespec, %ctrl) +{ + %ctrl.clear(); + %i = 0; + for(%file = findFirstFile(%filespec); %file !$= ""; %file = findNextFile(%filespec)) + %ctrl.addRow(%i++, fileBase(%file) @ fileExt(%file)); +} + +//------------------------------------------------------------------------------ +// ex: getLoadFilename("stuff\*.*", loadStuff); +// -- calls 'loadStuff(%filename)' on dblclick or ok +//------------------------------------------------------------------------------ +function getLoadFilename(%filespec, %callback) +{ + $loadFileCommand = "if(loadFileList.getSelectedId() >= 0)" @ %callback @ "(loadFileList.getValue());"; + Canvas.pushDialog(loadFileDialog, 99); + fillFileList(%filespec, loadFileList); +} + diff --git a/base/gui/CommonSaveDlg.gui b/base/gui/CommonSaveDlg.gui new file mode 100644 index 0000000..465887b --- /dev/null +++ b/base/gui/CommonSaveDlg.gui @@ -0,0 +1,143 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(saveFileDialog) { + profile = "GuiDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiWindowCtrl() { + profile = "GuiWindowProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "217 140"; + extent = "280 264"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + helpTag = "0"; + text = "SAVE FILE"; + resizeWidth = "True"; + resizeHeight = "True"; + canMove = "True"; + canClose = "True"; + canMinimize = "True"; + canMaximize = "True"; + minSize = "50 50"; + closeCommand = "Canvas.popDialog(saveFileDialog);"; + + new GuiScrollCtrl() { + profile = "GuiScrollCtrlProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 24"; + extent = "196 212"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + willFirstRespond = "True"; + hScrollBar = "dynamic"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "False"; + + new GuiScrollContentCtrl() { + profile = "GuiScrollContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "1 1"; + extent = "176 210"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiTextListCtrl(saveFileList) { + profile = "GuiTextArrayProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "64 64"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + altCommand = "eval($saveFileCommand); Canvas.popDialog(saveFileDialog);"; + helpTag = "0"; + enumerate = "False"; + resizeCell = "True"; + columns = "0"; + noDuplicates = "false"; + }; + }; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "209 181"; + extent = "60 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "eval($saveFileCommand); Canvas.popDialog(saveFileDialog);"; + helpTag = "0"; + text = "SAVE"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "209 205"; + extent = "60 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "Canvas.popDialog(saveFileDialog);"; + helpTag = "0"; + text = "CANCEL"; + }; + new GuiTextEditCtrl(saveNameEdit) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 240"; + extent = "196 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + historySize = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- + + +function saveFileList::onSelect(%this, %id) +{ + saveNameEdit.setValue(%this.getValue()); +} + +//------------------------------------------------------------------------------ +// ex: getSaveFilename("stuff\*.*", saveStuff); +// -- calls 'saveStuff(%filename)' on dblclick or ok +//------------------------------------------------------------------------------ +function getSaveFilename(%filespec, %callback, %currentFile) +{ + saveNameEdit.setValue(%currentFile); + $saveFileCommand = "if(saveNameEdit.getValue() !$= \"\")" @ %callback @ "(saveNameEdit.getValue());"; + Canvas.pushDialog(saveFileDialog, 99); + fillFileList(%filespec, saveFileList); +} diff --git a/base/gui/CompTestGui.gui b/base/gui/CompTestGui.gui new file mode 100644 index 0000000..56e9061 --- /dev/null +++ b/base/gui/CompTestGui.gui @@ -0,0 +1,211 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(CompTestGui) { + profile = "GuiContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiScrollCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 10"; + extent = "620 460"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + willFirstRespond = "True"; + hScrollBar = "alwaysOn"; + vScrollBar = "alwaysOff"; + constantThumbHeight = "False"; + + new GuiScrollContentCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "1 1"; + extent = "618 440"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new CompTest(compObj) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "65536 460"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + }; + }; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 20"; + extent = "100 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "Canvas.setContent(MainMenuGui);"; + helpTag = "0"; + text = "Main Menu"; + }; + new GuiButtonCtrl(histoToggle) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 40"; + extent = "100 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "toggleHisto();"; + helpTag = "0"; + text = "Normal"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "124 20"; + extent = "100 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "compTestOpenFile();"; + helpTag = "0"; + text = "Open File"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "124 40"; + extent = "100 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "compTestSaveFile();"; + helpTag = "0"; + text = "Save File"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "244 20"; + extent = "100 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "compObj.buildRep(baseline);$CompTestType = baseline;"; + helpTag = "0"; + text = "Baseline"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "348 20"; + extent = "100 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "compObj.buildRep(hilbert);$CompTestType = hilbert;"; + helpTag = "0"; + text = "Hilbert"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "452 20"; + extent = "100 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "compObj.buildRep(delta);$CompTestType = delta;"; + helpTag = "0"; + text = "Delta"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "452 40"; + extent = "100 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "compObj.buildRep(delta2);$CompTestType = delta2;"; + helpTag = "0"; + text = "Delta2"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "452 60"; + extent = "100 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "compObj.buildRep(delta3);$CompTestType = delta3;"; + helpTag = "0"; + text = "Delta3"; + }; +}; +//--- OBJECT WRITE END --- + +function compTest() +{ + $CompTestShift = 0; + $CompTestHisto = 0; + $CompTestSaveHiLo = 0; + $CompTestFile = "heights.out"; + $CompTestType = "baseline"; + Canvas.setContent(CompTestGui); + compObj.buildRep($CompTestType); +} + + +function toggleHisto() +{ + if($CompTestHisto) + { + histoToggle.setValue(Normal); + $CompTestHisto = 0; + } + else + { + histoToggle.setValue(Histo); + $CompTestHisto = 1; + } + compObj.buildRep($CompTestType); +} + diff --git a/base/gui/ConsoleDlg.gui b/base/gui/ConsoleDlg.gui new file mode 100644 index 0000000..652459a --- /dev/null +++ b/base/gui/ConsoleDlg.gui @@ -0,0 +1,80 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(ConsoleDlg) { + profile = "GuiDefaultProfile"; + + new GuiWindowCtrl() + { + profile = "GuiWindowProfile"; + position = "0 0"; + extent = "640 370"; + text = "Console"; + + new GuiScrollCtrl() + { + profile = "GuiButtonProfile"; + position = "0 0"; + extent = "640 350"; + hScrollBar = "alwaysOn"; + vScrollBar = "alwaysOn"; + horizSizing = "width"; + vertSizing = "height"; + + new GuiScrollContentCtrl("testScrollContentCtrl") + { + profile = "GuiButtonProfile"; + + new GuiConsole("testArrayCtrl") + { + profile = "GuiConsoleProfile"; + position = "0 0"; + }; + }; + }; + + new GuiConsoleEditCtrl("ConsoleEntry") + { + profile = "GuiTextEditProfile"; + position = "0 350"; + extent = "640 20"; + historySize = 20; + altCommand = "ConsoleEntry::eval();"; + horizSizing = "width"; + vertSizing = "top"; + }; + }; +}; +//--- OBJECT WRITE END --- + +$ConsoleActive = false; + +function ConsoleEntry::eval() +{ + %text = ConsoleEntry.getValue(); + echo("==>" @ %text); + eval(%text); + ConsoleEntry.setValue(""); +} + +function ToggleConsole(%make) +{ + if (%make) + { + if ($ConsoleActive) + { + Canvas.popDialog(ConsoleDlg); + $ConsoleActive = false; + if(!ConsoleDlg.mouseOn) + CursorOff(); + } + else + { + Canvas.pushDialog(ConsoleDlg, 99); + ConsoleDlg.mouseOn = Canvas.isCursorOn(); + $ConsoleActive = true; + if(!ConsoleDlg.mouseOn) + CursorOn(); + } + } +} + + diff --git a/base/gui/CreateAccountDlg.gui b/base/gui/CreateAccountDlg.gui new file mode 100644 index 0000000..9b9907a --- /dev/null +++ b/base/gui/CreateAccountDlg.gui @@ -0,0 +1,316 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(CreateAccountDlg) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + open = "0"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "70 36"; + extent = "500 408"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "ACCOUNT INFORMATION"; + noTitleBar = "0"; + + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "35 35"; + extent = "100 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Login Name:"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "35 110"; + extent = "100 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Password:"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "35 140"; + extent = "100 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Confirm Password:"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "35 170"; + extent = "100 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "CD Key:"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "35 218"; + extent = "100 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Email:"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "174 289"; + extent = "134 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "We are COPPA compliant."; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "73 305"; + extent = "351 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "If you are under 13, you are not allowed to create a Tribes 2 account."; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "35 64"; + extent = "100 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Warrior Name:"; + }; + new ShellTextEditCtrl() { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "131 27"; + extent = "180 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$CreateAccountLoginName"; + helpTag = "0"; + historySize = "0"; + maxLength = "16"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellTextEditCtrl() { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "131 56"; + extent = "180 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$CreateAccountWarriorName"; + helpTag = "0"; + historySize = "0"; + maxLength = "16"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellTextEditCtrl() { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "131 102"; + extent = "180 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$CreateAccountPassword"; + helpTag = "0"; + historySize = "0"; + maxLength = "16"; + password = "1"; + glowOffset = "9 9"; + }; + new ShellTextEditCtrl() { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "131 132"; + extent = "180 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$CreateAccountConfirmPassword"; + helpTag = "0"; + historySize = "0"; + maxLength = "16"; + password = "1"; + glowOffset = "9 9"; + }; + new ShellTextEditCtrl(CreateAccountCDKey1) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "131 162"; + extent = "72 38"; + minExtent = "32 38"; + visible = "1"; + command = "CreateAccountCDKey1.process();"; + helpTag = "0"; + historySize = "0"; + maxLength = "4"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellTextEditCtrl(CreateAccountCDKey2) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "191 162"; + extent = "72 38"; + minExtent = "32 38"; + visible = "1"; + command = "CreateAccountCDKey2.process();"; + helpTag = "0"; + historySize = "0"; + maxLength = "4"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellTextEditCtrl(CreateAccountCDKey3) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "251 162"; + extent = "72 38"; + minExtent = "32 38"; + visible = "1"; + command = "CreateAccountCDKey3.process();"; + helpTag = "0"; + historySize = "0"; + maxLength = "4"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellTextEditCtrl(CreateAccountCDKey4) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "311 162"; + extent = "72 38"; + minExtent = "32 38"; + visible = "1"; + command = "CreateAccountCDKey4.process();"; + helpTag = "0"; + historySize = "0"; + maxLength = "4"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellTextEditCtrl(CreateAccountCDKey5) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "371 162"; + extent = "72 38"; + minExtent = "32 38"; + visible = "1"; + command = "CreateAccountCDKey5.process();"; + helpTag = "0"; + historySize = "0"; + maxLength = "4"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellTextEditCtrl() { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "131 209"; + extent = "269 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$CreateAccountEmail"; + helpTag = "0"; + historySize = "0"; + maxLength = "128"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellToggleButton() { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "63 244"; + extent = "366 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$CreateAccountSendInfo"; + helpTag = "0"; + text = "SEND ME INFORMATION ABOUT TRIBES 2 AND OTHER PRODUCTS"; + }; + new ShellToggleButton() { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "148 325"; + extent = "201 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$CreateAccountAgeGood"; + helpTag = "0"; + text = "I AM AT LEAST 13 YEARS OF AGE"; + }; + new ShellBitmapButton(CreateAccountSubmitBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "282 351"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "CreateAccountDlg.onSubmit();"; + helpTag = "0"; + text = "SUBMIT"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "72 351"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "CreateAccountDlg.onCancel();"; + accelerator = "escape"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/CreateTribeDlg.gui b/base/gui/CreateTribeDlg.gui new file mode 100644 index 0000000..30a3c06 --- /dev/null +++ b/base/gui/CreateTribeDlg.gui @@ -0,0 +1,224 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(CreateTribeDlg) { + profile = "DlgBackProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "70 36"; + extent = "500 408"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "CREATE TRIBE"; + maxLength = "255"; + noTitleBar = "0"; + + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "18 38"; + extent = "70 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Tribe Name:"; + maxLength = "255"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "18 68"; + extent = "70 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Tribe Tag:"; + maxLength = "255"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "18 128"; + extent = "70 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Description:"; + maxLength = "255"; + }; + new ShellTextEditCtrl() { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "84 30"; + extent = "260 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$CreateTribeName"; + helpTag = "0"; + maxLength = "24"; + historySize = "0"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellTextEditCtrl(CT_TagText) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "84 60"; + extent = "107 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$CreateTribeTag"; + command = "updateTribeTagPreview();"; + helpTag = "0"; + maxLength = "8"; + historySize = "0"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellToggleButton(rbAppendTag) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "189 64"; + extent = "146 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$CreateTribeAppend"; + command = "updateTribeTagPreview();"; + helpTag = "0"; + text = "APPEND TRIBE TAG"; + maxLength = "255"; + }; + new ShellToggleButton(rbRecruiting) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "308 95"; + extent = "162 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$CreateTribeRecruiting"; + helpTag = "0"; + text = "RECRUITING"; + maxLength = "255"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "18 98"; + extent = "70 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Preview:"; + maxLength = "255"; + }; + new ShellFieldCtrl() { + profile = "ShellFieldProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "93 97"; + extent = "192 22"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new GuiTextCtrl(CT_PreviewText) { + profile = "ShellAltTextCenterProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "3 2"; + extent = "186 20"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + maxLength = "255"; + }; + }; + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "right"; + vertSizing = "height"; + position = "26 143"; + extent = "448 208"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "3 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "7 7"; + extent = "418 194"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextEditCtrl(CreateTribeDescription) { + profile = "ShellMessageTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "418 194"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + allowColorChars = "0"; + maxChars = "3600"; + }; + }; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "81 354"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "CreateTribeDlg.Cancel();"; + accelerator = "escape"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + new ShellBitmapButton(CreateTribeBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "291 354"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "CreateTribeDlg.CreateTribe();"; + helpTag = "0"; + text = "CREATE"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/CreateWarriorDlg.gui b/base/gui/CreateWarriorDlg.gui new file mode 100644 index 0000000..b085fe9 --- /dev/null +++ b/base/gui/CreateWarriorDlg.gui @@ -0,0 +1,93 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(CreateWarriorDlg) { + profile = "DlgBackProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "130 123"; + extent = "380 233"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "CREATE WARRIOR"; + noTitleBar = "0"; + + new GuiMLTextCtrl(CreateWarriorText) { + profile = "ShellMediumTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "37 37"; + extent = "306 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + allowColorChars = "0"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "48 142"; + extent = "92 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Warrior Name:"; + }; + new ShellTextEditCtrl(CreateWarriorNameEdit) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "136 134"; + extent = "182 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$CreateAccountWarriorName"; + command = "CreateWarriorNameEdit.checkValidPlayerName();"; + altCommand = "LoginCreateWarrior();"; + helpTag = "0"; + historySize = "0"; + maxLength = "16"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellBitmapButton(CreateWarriorBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "211 178"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "LoginCreateWarrior();"; + helpTag = "0"; + text = "DONE"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "41 178"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "quit();"; + accelerator = "escape"; + helpTag = "0"; + text = "QUIT"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/CreditsGui.gui b/base/gui/CreditsGui.gui new file mode 100644 index 0000000..1fd3e2d --- /dev/null +++ b/base/gui/CreditsGui.gui @@ -0,0 +1,74 @@ +//--- OBJECT WRITE BEGIN --- +new GuiChunkedBitmapCtrl(CreditsGui) { + profile = "GuiContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + variable = "$ShellBackground"; + helpTag = "0"; + useVariable = "1"; + qLineCount = "0"; + + new ShellPaneCtrl() { + profile = "ShellPaneProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "28 13"; + extent = "584 459"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + noTitleBar = "1"; + + new GuiControl() { + profile = "GuiDefaultProfile"; + horizSizing = "relative"; + vertSizing = "height"; + position = "26 34"; + extent = "312 402"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextCtrl(CREDITS_Text) { + profile = "ShellLoadTextProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "0 0"; + extent = "312 1"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + allowColorChars = "0"; + }; + }; + new GuiControl() { + profile = "ShellLoadFrameProfile"; + horizSizing = "relative"; + vertSizing = "relative"; + position = "349 8"; + extent = "212 428"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiChunkedBitmapCtrl(CREDITS_Pic) { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "1 1"; + extent = "210 426"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + bitmap = "gui/loading.png"; + useVariable = "0"; + }; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/DebriefGui.gui b/base/gui/DebriefGui.gui new file mode 100644 index 0000000..74c0d91 --- /dev/null +++ b/base/gui/DebriefGui.gui @@ -0,0 +1,253 @@ +//--- OBJECT WRITE BEGIN --- +new GuiChunkedBitmapCtrl(DebriefGui) { + profile = "GuiContentProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + variable = "$ShellBackground"; + helpTag = "0"; + useVariable = "1"; + + new ShellPaneCtrl(DB_Pane) { + profile = "ShellPaneProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "28 13"; + extent = "584 459"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + noTitleBar = "1"; + }; + new GuiProgressCtrl(DB_LoadingProgress) { + profile = "ShellProgressBarProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "67 423"; + extent = "300 25"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiTextCtrl(DB_LoadingProgressTxt) { + profile = "ShellProgressBarTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 3"; + extent = "300 19"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "LOADING MISSION..."; + }; + }; + new GuiControl() { + profile = "GuiDefaultProfile"; + horizSizing = "relative"; + vertSizing = "relative"; + position = "0 0"; + extent = "300 236"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellScrollCtrl(DB_ChatScroll) { + profile = "NewScrollCtrlProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "50 18"; + extent = "251 184"; + minExtent = "24 24"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "3 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "7 7"; + extent = "221 170"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiMessageVectorCtrl(DB_ChatVector) { + profile = "GuiChatHudProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "221 170"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "0"; + lineContinuedIndex = "10"; + allowedMatches[0] = "http"; + allowedMatches[1] = "t2server"; + matchColor = "0 0 255 255"; + maxColorIndex = "5"; + matchColors1 = "255 0 0 255"; + matchColors0 = "0 0 255 255"; + }; + }; + }; + }; + new GuiControl() { + profile = "GuiDefaultProfile"; + horizSizing = "relative"; + vertSizing = "height"; + position = "300 15"; + extent = "340 405"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellFieldCtrl(DB_ResultPane) { + profile = "ShellFieldProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "5 7"; + extent = "280 392"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextCtrl(DebriefResultText) { + profile = "DebriefHeadlineTextProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "4 3"; + extent = "272 28"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + allowColorChars = "0"; + }; + new ShellScrollCtrl(DB_ResultScroll) { + profile = "NewScrollCtrlProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "2 58"; + extent = "276 332"; + minExtent = "24 24"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "dynamic"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "3 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "7 7"; + extent = "262 318"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextCtrl(DebriefText) { + profile = "DebriefTextProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "262 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + allowColorChars = "1"; + }; + }; + }; + }; + }; + new ShellBitmapButton() { + profile = "ShellButtonNoTabProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "372 417"; + extent = "115 38"; + minExtent = "32 38"; + visible = "1"; + setFirstResponder = "0"; + command = "debriefDisconnect();"; + helpTag = "0"; + text = "DISCONNECT"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonNoTabProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "478 417"; + extent = "115 38"; + minExtent = "32 38"; + visible = "1"; + setFirstResponder = "0"; + command = "debriefContinue();"; + accelerator = "escape"; + helpTag = "0"; + text = "CONTINUE"; + simpleStyle = "0"; + }; +}; +//--- OBJECT WRITE END --- + +//--- OBJECT WRITE BEGIN --- +new GuiControl(DB_ChatDlg) { + profile = "GuiModelessDialogProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiControl() { + profile = "GuiDefaultProfile"; + horizSizing = "relative"; + vertSizing = "relative"; + position = "0 0"; + extent = "300 236"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellTextEditCtrl(DB_ChatEntry) { + profile = "NewTextEditProfile"; + horizSizing = "width"; + vertSizing = "top"; + position = "45 197"; + extent = "261 38"; + minExtent = "32 38"; + visible = "1"; + setFirstResponder = "0"; + altCommand = "DB_ChatEntry.sendChat();"; + escapeCommand = "DB_ChatEntry.onEscape();"; + helpTag = "0"; + historySize = "0"; + maxLength = "120"; + password = "0"; + glowOffset = "9 9"; + }; + }; +}; +//--- OBJECT WRITE END --- + diff --git a/base/gui/DebuggerBreakConditionDlg.gui b/base/gui/DebuggerBreakConditionDlg.gui new file mode 100644 index 0000000..85ae1d2 --- /dev/null +++ b/base/gui/DebuggerBreakConditionDlg.gui @@ -0,0 +1,145 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(DebuggerBreakConditionDlg) { + profile = "GuiDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiWindowCtrl() { + profile = "GuiWindowProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "220 146"; + extent = "200 188"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Set the break condition"; + resizeWidth = "True"; + resizeHeight = "True"; + canMove = "False"; + canClose = "False"; + canMinimize = "False"; + canMaximize = "False"; + minSize = "50 50"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 28"; + extent = "121 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Enter the break condition:"; + }; + new GuiTextEditCtrl(BreakCondition) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 44"; + extent = "160 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + altCommand = "DbgBreakConditionSet();"; + helpTag = "0"; + historySize = "0"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 68"; + extent = "57 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Pass Count:"; + }; + new GuiTextEditCtrl(BreakPassCount) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 84"; + extent = "160 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + historySize = "0"; + returnTab = "true"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 108"; + extent = "27 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Clear:"; + }; + new GuiTextEditCtrl(BreakClear) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 124"; + extent = "160 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + historySize = "0"; + returnTab = "true"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "56 156"; + extent = "40 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "DbgBreakConditionSet();"; + helpTag = "0"; + text = "Set"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "104 156"; + extent = "40 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "Canvas.popDialog(DebuggerBreakConditionDlg);"; + helpTag = "0"; + text = "Cancel"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/DebuggerConnectDlg.gui b/base/gui/DebuggerConnectDlg.gui new file mode 100644 index 0000000..c3e1a8d --- /dev/null +++ b/base/gui/DebuggerConnectDlg.gui @@ -0,0 +1,148 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(DebuggerConnectDlg) { + profile = "GuiDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiWindowCtrl() { + profile = "GuiWindowProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "220 146"; + extent = "200 188"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Connect to server:"; + resizeWidth = "True"; + resizeHeight = "True"; + canMove = "False"; + canClose = "False"; + canMinimize = "False"; + canMaximize = "False"; + minSize = "50 50"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 28"; + extent = "55 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "IP Address:"; + }; + new GuiTextEditCtrl(DebuggerConnectAddress) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 44"; + extent = "160 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + variable = "$pref::DBGConnectAddress"; + helpTag = "0"; + historySize = "0"; + returnTab = "true"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 68"; + extent = "21 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Port:"; + }; + new GuiTextEditCtrl(DebuggerConnectPort) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 84"; + extent = "160 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + variable = "$pref::DBGConnectPort"; + helpTag = "0"; + historySize = "0"; + returnTab = "true"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 108"; + extent = "52 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Password:"; + }; + new GuiTextEditCtrl(DebuggerConnectPassword) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 124"; + extent = "160 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + variable = "$pref::DBGConnectPassword"; + helpTag = "0"; + historySize = "0"; + returnTab = "true"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "56 156"; + extent = "40 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "DbgConnect();"; + helpTag = "0"; + text = "Open"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "104 156"; + extent = "40 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "Canvas.popDialog(DebuggerConnectDlg);"; + helpTag = "0"; + text = "Cancel"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/DebuggerEditWatchDlg.gui b/base/gui/DebuggerEditWatchDlg.gui new file mode 100644 index 0000000..ab348ff --- /dev/null +++ b/base/gui/DebuggerEditWatchDlg.gui @@ -0,0 +1,93 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(DebuggerEditWatchDlg) { + profile = "GuiDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiWindowCtrl() { + profile = "GuiWindowProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "220 180"; + extent = "200 108"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Edit a Variable"; + resizeWidth = "True"; + resizeHeight = "True"; + canMove = "False"; + canClose = "False"; + canMinimize = "False"; + canMaximize = "False"; + minSize = "50 50"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 28"; + extent = "99 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Enter the new value:"; + }; + new GuiTextEditCtrl(EditWatchDialogValue) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 44"; + extent = "160 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + altCommand = "DbgWatchDialogEdit();"; + helpTag = "0"; + historySize = "0"; + fontHL = "14 253 Arial"; + font = "14 244 Arial"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "56 80"; + extent = "40 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "DbgWatchDialogEdit();"; + helpTag = "0"; + text = "Edit"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "104 80"; + extent = "40 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "Canvas.popDialog(DebuggerEditWatchDlg);"; + helpTag = "0"; + text = "Cancel"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/DebuggerFindDlg.gui b/base/gui/DebuggerFindDlg.gui new file mode 100644 index 0000000..fafd221 --- /dev/null +++ b/base/gui/DebuggerFindDlg.gui @@ -0,0 +1,93 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(DebuggerFindDlg) { + profile = "GuiDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiWindowCtrl() { + profile = "GuiWindowProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "220 180"; + extent = "200 108"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "File Search"; + resizeWidth = "True"; + resizeHeight = "True"; + canMove = "False"; + canClose = "False"; + canMinimize = "False"; + canMaximize = "False"; + minSize = "50 50"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 28"; + extent = "99 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Search for:"; + }; + new GuiTextEditCtrl(DebuggerFindStringText) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 44"; + extent = "160 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + altCommand = "DbgFileViewFind();"; + helpTag = "0"; + historySize = "0"; + fontHL = "14 253 Arial"; + font = "14 244 Arial"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "56 80"; + extent = "40 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "DbgFileViewFind();"; + helpTag = "0"; + text = "Find"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "104 80"; + extent = "40 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "Canvas.popDialog(DebuggerFindDlg);"; + helpTag = "0"; + text = "Cancel"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/DebuggerGui.gui b/base/gui/DebuggerGui.gui new file mode 100644 index 0000000..f7cbfa7 --- /dev/null +++ b/base/gui/DebuggerGui.gui @@ -0,0 +1,641 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(DebuggerGui) { + profile = "GuiWindowProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "8 4"; + extent = "56 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "Canvas.pushDialog(DebuggerConnectDlg, 80);"; + helpTag = "0"; + text = "Connect"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "72 4"; + extent = "56 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "Canvas.pushDialog(OpenFileDialog, 80);"; + helpTag = "0"; + text = "File"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "72 4"; + extent = "56 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "dbgStepIn();"; + accelerator = "f7"; + helpTag = "0"; + text = "Step In"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "136 4"; + extent = "56 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "dbgStepOver();"; + accelerator = "f8"; + helpTag = "0"; + text = "Step Over"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "200 4"; + extent = "56 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "dbgStepOut();"; + accelerator = "f6"; + helpTag = "0"; + text = "Step Out"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "264 4"; + extent = "56 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "dbgContinue();"; + accelerator = "f9"; + helpTag = "0"; + text = "Run"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "328 4"; + extent = "56 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "Canvas.pushDialog(DebuggerFindDlg, 80);"; + helpTag = "0"; + text = "Find"; + }; + new GuiTextCtrl(DebuggerCursorWatch) { + profile = "GuiTextProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "398 4"; + extent = "126 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = ""; + justify = "left"; + }; + new GuiTextCtrl(DebuggerStatus) { + profile = "GuiTextProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "532 4"; + extent = "60 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "NOT CONNECTED"; + justify = "right"; + }; + new GuiFrameSetCtrl(DebuggerRootFrame) { + profile = "GuiButtonProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 24"; + extent = "640 456"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + columns = "0 486"; + rows = "0"; + borderWidth = "4"; + borderColor = "0.000000, 0.000000, 0.000000, 0.000000"; + borderEnable = "dynamic"; + borderMovable = "dynamic"; + + new GuiFrameSetCtrl(DebuggerLeftFrame) { + profile = "GuiButtonProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "482 456"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + columns = "0"; + rows = "0 350"; + borderWidth = "4"; + borderColor = "0.000000, 0.000000, 0.000000, 0.000000"; + borderEnable = "dynamic"; + borderMovable = "dynamic"; + + new GuiControl() { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "482 346"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "8 4"; + extent = "47 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Open File:"; + }; + new GuiPopUpMenuCtrl(DebuggerFilePopup) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "64 4"; + extent = "160 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + helpTag = "0"; + maxPopupHeight = "200"; + }; + new GuiScrollCtrl() { + profile = "GuiScrollCtrlProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 24"; + extent = "482 321"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + willFirstRespond = "True"; + hScrollBar = "dynamic"; + vScrollBar = "dynamic"; + constantThumbHeight = "False"; + + new GuiScrollContentCtrl() { + profile = "GuiScrollContentProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "1 1"; + extent = "462 301"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new DbgFileView(DebuggerFileView) { + profile = "GuiTextArrayProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 -433"; + extent = "509 3904"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + }; + }; + }; + }; + new GuiControl() { + profile = "GuiWindowProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 350"; + extent = "482 106"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "8 4"; + extent = "56 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "Canvas.pushDialog(DebuggerWatchDlg, 80);"; + helpTag = "0"; + text = "Add"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "72 4"; + extent = "56 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "Canvas.pushDialog(DebuggerEditWatchDlg, 80);"; + helpTag = "0"; + text = "Edit"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "136 4"; + extent = "56 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "DbgDeleteSelectedWatch();"; + helpTag = "0"; + text = "Delete"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "200 4"; + extent = "56 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "DebuggerWatchView.clear();"; + helpTag = "0"; + text = "Clear"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "264 4"; + extent = "56 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "DbgRefreshWatches();"; + helpTag = "0"; + text = "Refresh"; + }; + new GuiScrollCtrl() { + profile = "GuiScrollCtrlProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 24"; + extent = "481 80"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + willFirstRespond = "True"; + hScrollBar = "dynamic"; + vScrollBar = "dynamic"; + constantThumbHeight = "False"; + + new GuiScrollContentCtrl() { + profile = "GuiScrollContentProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "1 1"; + extent = "479 60"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiTextListCtrl(DebuggerWatchView) { + profile = "GuiTextArrayProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 8"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + enumerate = "False"; + resizeCell = "True"; + columns = "0 200"; + }; + }; + }; + }; + }; + new GuiFrameSetCtrl(DebuggerRightFrame) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "486 0"; + extent = "154 456"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + columns = "0"; + rows = "0 150 350"; + borderWidth = "4"; + borderColor = "0.000000, 0.000000, 0.000000, 0.000000"; + borderEnable = "dynamic"; + borderMovable = "dynamic"; + + new GuiScrollCtrl() { + profile = "GuiScrollCtrlProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "154 146"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + willFirstRespond = "True"; + hScrollBar = "dynamic"; + vScrollBar = "dynamic"; + constantThumbHeight = "False"; + + new GuiScrollContentCtrl() { + profile = "GuiScrollContentProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "1 1"; + extent = "152 126"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiTextListCtrl(DebuggerCallStack) { + profile = "GuiTextArrayProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 8"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + enumerate = "False"; + resizeCell = "True"; + columns = "-1 -1 0"; + }; + }; + }; + new GuiControl() { + profile = "GuiWindowProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 150"; + extent = "154 196"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 4"; + extent = "56 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "Canvas.pushDialog(DebuggerBreakConditionDlg, 80);"; + helpTag = "0"; + text = "Condition"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "68 4"; + extent = "56 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "DbgDeleteSelectedBreak();"; + helpTag = "0"; + text = "Delete"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "132 4"; + extent = "56 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "DebuggerBreakPoints.clearBreaks();"; + helpTag = "0"; + text = "Clear"; + }; + new GuiScrollCtrl() { + profile = "GuiScrollCtrlProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 24"; + extent = "153 171"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + willFirstRespond = "True"; + hScrollBar = "dynamic"; + vScrollBar = "dynamic"; + constantThumbHeight = "False"; + + new GuiScrollContentCtrl() { + profile = "GuiScrollContentProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "1 1"; + extent = "151 151"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiTextListCtrl(DebuggerBreakPoints) { + profile = "GuiTextArrayProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "182 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + enumerate = "False"; + resizeCell = "True"; + columns = "16 56 156"; + }; + }; + }; + }; + new GuiControl() { + profile = "GuiWindowProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 350"; + extent = "154 106"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiScrollCtrl() { + profile = "GuiScrollCtrlProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "153 80"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + willFirstRespond = "True"; + hScrollBar = "dynamic"; + vScrollBar = "dynamic"; + constantThumbHeight = "False"; + + new GuiScrollContentCtrl() { + profile = "GuiScrollContentProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "1 1"; + extent = "151 78"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiTextListCtrl(DebuggerConsoleView) { + profile = "GuiTextArrayProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "62 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + enumerate = "False"; + resizeCell = "True"; + columns = "0"; + }; + }; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "15 83"; + extent = "9 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "%"; + }; + new GuiTextEditCtrl(DbgConsoleEntry) { + profile = "GuiTextEditProfile"; + horizSizing = "width"; + vertSizing = "top"; + position = "29 83"; + extent = "120 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + altCommand = "DbgConsoleEntryReturn();"; + helpTag = "0"; + historySize = "32"; + }; + }; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/DebuggerWatchDlg.gui b/base/gui/DebuggerWatchDlg.gui new file mode 100644 index 0000000..4ade007 --- /dev/null +++ b/base/gui/DebuggerWatchDlg.gui @@ -0,0 +1,92 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(DebuggerWatchDlg) { + profile = "GuiDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiWindowCtrl() { + profile = "GuiWindowProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "220 180"; + extent = "200 108"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Add a Watch Expression:"; + resizeWidth = "True"; + resizeHeight = "True"; + canMove = "False"; + canClose = "False"; + canMinimize = "False"; + canMaximize = "False"; + minSize = "50 50"; + opaque = "true"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 28"; + extent = "88 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Enter the Variable:"; + }; + new GuiTextEditCtrl(WatchDialogExpression) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 44"; + extent = "160 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + altCommand = "DbgWatchDialogAdd();"; + helpTag = "0"; + historySize = "0"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "56 80"; + extent = "40 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "DbgWatchDialogAdd();"; + helpTag = "0"; + text = "Add"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "104 80"; + extent = "40 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "Canvas.popDialog(DebuggerWatchDlg);"; + helpTag = "0"; + text = "Cancel"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/DetailSetDlg.gui b/base/gui/DetailSetDlg.gui new file mode 100644 index 0000000..0d7fe79 --- /dev/null +++ b/base/gui/DetailSetDlg.gui @@ -0,0 +1,868 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(DetailSetDlg) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiWindowCtrl() { + profile = "GuiWindowProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 -1"; + extent = "129 281"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Detail Settings"; + resizeWidth = "True"; + resizeHeight = "True"; + canMove = "True"; + canClose = "True"; + canMinimize = "True"; + canMaximize = "True"; + minSize = "50 50"; + closeCommand = "DetailSetDgl::onCleanup(true);"; + + new GuiPopUpMenuCtrl(DetailMenu) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "5 21"; + extent = "91 21"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Detail Options"; + maxPopupHeight = "200"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "8 197"; + extent = "32 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "DetailAdjustTabs(Low);"; + helpTag = "0"; + text = "Low"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "47 197"; + extent = "30 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "DetailAdjustTabs(Medium);"; + helpTag = "0"; + text = "Med"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "84 198"; + extent = "35 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "DetailAdjustTabs(High);"; + helpTag = "0"; + text = "High"; + }; + new GuiScrollCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "7 43"; + extent = "112 151"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + helpTag = "0"; + willFirstRespond = "True"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOff"; + constantThumbHeight = "True"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "1 1"; + extent = "110 149"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiControl(Sky_Tab) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "112 151"; + minExtent = "8 8"; + visible = "False"; + setFirstResponder = "True"; + modal = "True"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "2 5"; + extent = "84 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + helpTag = "0"; + text = "Sky Settings:"; + }; + new GuiTextEditSliderCtrl(Sky_Slider) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "31 38"; + extent = "74 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + command = "Sky::DetailSliders(\"Sky_Slider\");"; + helpTag = "0"; + text = "1"; + historySize = "0"; + format = "%1.0f"; + range = "1 99"; + increment = "1"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "24 23"; + extent = "37 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Sphere:"; + }; + new GuiTextEditSliderCtrl(Cloud_Slider) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "31 75"; + extent = "74 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + helpTag = "0"; + text = "3"; + historySize = "0"; + format = "%1.0f"; + range = "0 3"; + increment = "1"; + command = "Sky::DetailSliders(\"Cloud_Slider\");"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "24 60"; + extent = "29 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Cloud Layers:"; + }; + }; + new GuiControl(Texture_Tab) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "112 151"; + minExtent = "8 8"; + visible = "False"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 5"; + extent = "99 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + helpTag = "0"; + text = "Texture Settings"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "24 23"; + extent = "39 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Texture:"; + }; + new GuiTextEditSliderCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "31 38"; + extent = "74 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + helpTag = "0"; + text = "0"; + historySize = "0"; + format = "%1.0f"; + range = "0 1"; + increment = "1"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "24 60"; + extent = "75 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Interior Texture:"; + }; + new GuiTextEditSliderCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "31 75"; + extent = "74 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + helpTag = "0"; + text = "0"; + historySize = "0"; + format = "%1.0f"; + range = "0 1"; + increment = "1"; + }; + }; + new GuiControl(Terrain_Tab) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "112 151"; + minExtent = "8 8"; + visible = "False"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "3 5"; + extent = "97 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + helpTag = "0"; + text = "Terrain Settings"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "24 23"; + extent = "36 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Terrain:"; + }; + new GuiTextEditSliderCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "31 38"; + extent = "74 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + helpTag = "0"; + text = "0"; + historySize = "0"; + format = "%1.0f"; + range = "0 1"; + increment = "1"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "24 60"; + extent = "64 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Screen Error:"; + }; + new GuiTextEditSliderCtrl(DetailScreenError) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "31 75"; + extent = "74 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + command = "$screenerror = DetailScreenError.getValue();"; + helpTag = "0"; + text = "3"; + historySize = "0"; + format = "%1.0f"; + range = "0 10"; + increment = "1"; + }; + }; + new GuiControl(Shape_Tab) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "112 151"; + minExtent = "8 8"; + visible = "False"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "2 5"; + extent = "89 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + helpTag = "0"; + text = "Shape Settings"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "24 23"; + extent = "63 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Static Shape:"; + }; + new GuiTextEditSliderCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "31 38"; + extent = "74 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + helpTag = "0"; + text = "0"; + historySize = "0"; + format = "%1.0f"; + range = "0 1"; + increment = "1"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "24 60"; + extent = "66 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Player Shape:"; + }; + new GuiTextEditSliderCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "31 75"; + extent = "74 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + helpTag = "0"; + text = "0"; + historySize = "0"; + format = "%1.0f"; + range = "0 1"; + increment = "1"; + }; + }; + new GuiControl(Damage_Tab) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "-1 0"; + extent = "112 151"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "2 7"; + extent = "103 66"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + helpTag = "0"; + text = "Damage Settings"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "23 26"; + extent = "70 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Damage Detail:"; + }; + new GuiTextEditSliderCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "31 41"; + extent = "74 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + helpTag = "0"; + text = "0"; + historySize = "0"; + format = "%1.0f"; + range = "0 1"; + increment = "1"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "23 63"; + extent = "64 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Damage Skin:"; + }; + new GuiTextEditSliderCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "31 78"; + extent = "74 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + helpTag = "0"; + text = "0"; + historySize = "0"; + format = "%1.0f"; + range = "0 1"; + increment = "1"; + }; + }; + new GuiControl(Decal_Tab) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "112 151"; + minExtent = "8 8"; + visible = "False"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "3 6"; + extent = "84 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + helpTag = "0"; + text = "Decal Settings"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "24 23"; + extent = "29 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Decal:"; + }; + new GuiTextEditSliderCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "31 38"; + extent = "74 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + helpTag = "0"; + text = "0"; + historySize = "0"; + format = "%1.0f"; + range = "0 1"; + increment = "1"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "24 60"; + extent = "57 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Smoke Trail:"; + }; + new GuiTextEditSliderCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "31 75"; + extent = "74 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + helpTag = "0"; + text = "0"; + historySize = "0"; + format = "%1.0f"; + range = "0 1"; + increment = "1"; + }; + }; + new GuiControl(Lighting_Tab) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "112 151"; + minExtent = "8 8"; + visible = "False"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "2 4"; + extent = "101 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + helpTag = "0"; + text = "Lighting Settings"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "24 23"; + extent = "57 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Interior light:"; + }; + new GuiTextEditSliderCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "31 38"; + extent = "74 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + helpTag = "0"; + text = "0"; + historySize = "0"; + format = "%1.0f"; + range = "0 1"; + increment = "1"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "24 60"; + extent = "69 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Dynamic Light:"; + }; + new GuiTextEditSliderCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "31 75"; + extent = "74 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + helpTag = "0"; + text = "0"; + historySize = "0"; + format = "%1.0f"; + range = "0 1"; + increment = "1"; + }; + }; + }; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "5 255"; + extent = "63 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "DetailSetDgl::onCleanup(true);"; + helpTag = "0"; + text = "Close"; + }; + new GuiRadioCtrl(RadioOutline) { + profile = "GuiRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "9 217"; + extent = "55 19"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "displayMode(True);"; + helpTag = "0"; + text = "OutLine"; + groupNum = "1"; + }; + new GuiRadioCtrl(RadioTexture) { + profile = "GuiRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "66 216"; + extent = "55 19"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "displayMode(False);"; + helpTag = "0"; + text = "Texture"; + groupNum = "1"; + }; + }; +}; +//--- OBJECT WRITE END --- + +function DetailSetDialog() +{ + showTabs(); + $currentTab = ""; + $currentSelected = ""; + DetailMenu.clear(); + DetailMenu.add("Sky",0); + DetailMenu.add("Texture",1); + DetailMenu.add("Terrain",2); + DetailMenu.add("Lighting",3); + DetailMenu.add("Decal",4); + DetailMenu.add("Shape",5); + DetailMenu.add("Damage",6); + DetailMenu.setText("Detail Options"); + RadioTexture.setValue(true); + Canvas.pushDialog(DetailSetDlg,99); +} + +function DetailMenu::onSelect(%this, %row) +{ + %label = %this.getValue(); + $currentTab = %label; + %this.setText("Detail Options"); + DetailSetDgl::onCleanup(); + showTabs(%label); +} + +function showTabs(%tab) +{ + %tab = %tab @ "_Tab"; + GameCtrl.setvisible(false); + Sky_Tab.setvisible(false); + Texture_Tab.setvisible(false); + Terrain_Tab.setvisible(false); + Shape_Tab.setvisible(false); + Damage_Tab.setvisible(false); + Decal_Tab.setvisible(false); + Lighting_Tab.setvisible(false); + %tab.setvisible(true); +} + +function displayMode(%bool) +{ + echo("CurrentTab: ",$currentTab); + echo("CurrentSelected: ",$currentSelected); + echo("BOOL: ",%bool); + if($currentTab $= "Sky") + { + if($currentSelected $= "Sky") + { + echo("went in here: ",%bool); + $pref::SkyOutline = %bool; + } + else + { + $pref::CloudOutline = %bool; + } + } + else if ($currentTab $= "Terrain") + DetailScreenError.setValue($screenerror); +} + +function DetailSetDgl::onCleanup(%close) +{ + $pref::SkyOutline = false; + $pref::CloudOutline = false; + $pref::CloudsOn = true; + RadioTexture.setValue(true); + if(%close == true) + Canvas.popDialog(DetailSetDlg); +} + +function Sky::detailSliders(%slider) +{ + if(%slider $= "Sky_Slider") + { + $pref::sphereDetail = %slider.getValue(); + $pref::CloudsOn = false; + $currentSelected = "Sky"; + if($pref::SkyOutline) + RadioOutline.setValue(true); + else + RadioTexture.setValue(true); + } + else if(%slider $= "Cloud_Slider") + { + $pref::NumCloudLayers = %slider.getValue(); + $pref::CloudsOn = true; + $currentSelected = "Cloud"; + if($pref::CloudOutline) + RadioOutline.setValue(true); + else + RadioTexture.setValue(true); + } +} \ No newline at end of file diff --git a/base/gui/DriverInfoDlg.gui b/base/gui/DriverInfoDlg.gui new file mode 100644 index 0000000..38f1c52 --- /dev/null +++ b/base/gui/DriverInfoDlg.gui @@ -0,0 +1,77 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(DriverInfoDlg) { + profile = "DlgBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "120 90"; + extent = "400 300"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "DRIVER INFO"; + + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "center"; + vertSizing = "bottom"; + position = "27 35"; + extent = "346 209"; + minExtent = "24 52"; + childMargin = "4 2"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 4"; + extent = "322 201"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextCtrl(DriverInfoText) { + profile = "ShellAltTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "313 420"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + }; + }; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "center"; + vertSizing = "bottom"; + position = "136 245"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.popDialog(DriverInfoDlg);"; + accelerator = "space"; + helpTag = "0"; + text = "OK"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/EULADlg.gui b/base/gui/EULADlg.gui new file mode 100644 index 0000000..79f34e0 --- /dev/null +++ b/base/gui/EULADlg.gui @@ -0,0 +1,2 @@ +//--- OBJECT WRITE BEGIN --- +//--- OBJECT WRITE END --- diff --git a/base/gui/EditChatCommandDlg.gui b/base/gui/EditChatCommandDlg.gui new file mode 100644 index 0000000..1cc2905 --- /dev/null +++ b/base/gui/EditChatCommandDlg.gui @@ -0,0 +1,177 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(EditChatCommandDlg) { + profile = "DlgBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "150 110"; + extent = "340 260"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "EDIT ITEM"; + noTitleBar = "0"; + + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "21 42"; + extent = "80 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Key:"; + }; + new ShellTextEditCtrl() { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "97 34"; + extent = "49 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$ECI::key"; + helpTag = "0"; + historySize = "0"; + maxLength = "1"; + password = "0"; + glowOffset = "9 9"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "21 80"; + extent = "80 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Menu text:"; + }; + new ShellTextEditCtrl() { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "97 72"; + extent = "208 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$ECI::text"; + helpTag = "0"; + historySize = "0"; + maxLength = "25"; + password = "0"; + glowOffset = "9 9"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "21 119"; + extent = "80 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Command:"; + }; + new ShellPopupMenu(EditChatCommandList) { + profile = "ShellPopupProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "97 110"; + extent = "209 36"; + minExtent = "49 36"; + visible = "1"; + helpTag = "0"; + maxPopupHeight = "200"; + buttonBitmap = "gui/shll_pulldown"; + rolloverBarBitmap = "gui/shll_pulldownbar_rol"; + selectedBarBitmap = "gui/shll_pulldownbar_act"; + noButtonStyle = "0"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "21 158"; + extent = "80 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Message:"; + }; + new ShellFieldCtrl() { + profile = "ShellFieldProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "106 159"; + extent = "191 36"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextCtrl(EditChatCommandMessage) { + profile = "ShellAltTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "5 1"; + extent = "187 16"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + allowColorChars = "0"; + }; + }; + new ShellBitmapButton(ChatCommandTestBtn) { + profile = "SoundTestButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "80 175"; + extent = "24 24"; + minExtent = "24 24"; + visible = "1"; + command = "testChatCommand($ECI::command);"; + helpTag = "0"; + simpleStyle = "1"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "180 205"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "eval($ECI::OKCommand);"; + helpTag = "0"; + text = "OK"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "32 205"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.popDialog( EditChatCommandDlg );"; + accelerator = "escape"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/EditChatMenuDlg.gui b/base/gui/EditChatMenuDlg.gui new file mode 100644 index 0000000..310efff --- /dev/null +++ b/base/gui/EditChatMenuDlg.gui @@ -0,0 +1,106 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(EditChatMenuDlg) { + profile = "DlgBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "150 156"; + extent = "340 167"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "EDIT MENU"; + noTitleBar = "0"; + + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "21 42"; + extent = "80 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Key:"; + }; + new ShellTextEditCtrl() { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "97 34"; + extent = "50 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$ECI::key"; + helpTag = "0"; + historySize = "0"; + maxLength = "1"; + password = "0"; + glowOffset = "9 9"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "21 80"; + extent = "80 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Menu text:"; + }; + new ShellTextEditCtrl() { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "97 72"; + extent = "208 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$ECI::text"; + helpTag = "0"; + historySize = "0"; + maxLength = "25"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "180 112"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "eval($ECI::OKCommand);"; + helpTag = "0"; + text = "OK"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "32 112"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.popDialog( EditChatMenuDlg );"; + accelerator = "escape"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- + diff --git a/base/gui/EditChatMenuGui.gui b/base/gui/EditChatMenuGui.gui new file mode 100644 index 0000000..cc900e4 --- /dev/null +++ b/base/gui/EditChatMenuGui.gui @@ -0,0 +1,159 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(EditChatMenuGui) { + profile = "DlgBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "20 55"; + extent = "600 370"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "EDIT CHAT MENU"; + noTitleBar = "0"; + + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "25 32"; + extent = "408 315"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "0 0"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 4"; + extent = "384 307"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiChatMenuTreeCtrl(chatMenuGuiTree) { + profile = "ShellTreeViewProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "431 372"; + minExtent = "8 8"; + visible = "1"; + altCommand = "editSelectedChatMenuItem();"; + helpTag = "0"; + tabSize = "16"; + imagesBitmap = "gui/shll_treeView.png"; + numImages = "13"; + textOffset = "2"; + fullRowSelect = "0"; + itemHeight = "15"; + altFontColor = "6 215 245 255"; + altFontColorHL = "6 215 245 255"; + altFontColorSE = "25 56 68 255"; + dirty = "0"; + }; + }; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "445 29"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "newChatMenu();"; + helpTag = "0"; + text = "CLEAR"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "445 67"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "resetChatMenu();"; + helpTag = "0"; + text = "RESET"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "445 105"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "saveChatMenu();"; + helpTag = "0"; + text = "SAVE"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "445 315"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "leaveChatMenuEditor();"; + helpTag = "0"; + text = "DONE"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- + +//--- OBJECT WRITE BEGIN --- +new GuiControl(ChatMenuItemActionDlg) { + profile = "GuiModelessDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new ShellPopupMenu(ChatMenuItemActionPopup) { + profile = "ShellPopupProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "0 0"; + minExtent = "0 0"; + visible = "1"; + command = "ChatMenuItemActionPopup.reset();"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + maxPopupHeight = "200"; + noButtonStyle = "1"; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/EditorGui.gui b/base/gui/EditorGui.gui new file mode 100644 index 0000000..51fbcac --- /dev/null +++ b/base/gui/EditorGui.gui @@ -0,0 +1,320 @@ +//--- OBJECT WRITE BEGIN --- + +new EditManager(Editor) +{ + profile = "GuiContentProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + open = false; +}; + +//--- OBJECT WRITE END --- + +//------------------------------------------------------------------------------ +// Editor Cursors +//------------------------------------------------------------------------------ + +new GuiCursor(Editor_HandCursor) +{ + hotSpot = "5 1"; + bitmapName = "gui/CUR_Hand.png"; +}; + +new GuiCursor(Editor_RotateCursor) +{ + hotSpot = "11 18"; + bitmapName = "gui/CUR_Rotate.png"; +}; + +new GuiCursor(Editor_MoveCursor) +{ + hotSpot = "9 13"; + bitmapName = "gui/CUR_Grab.png"; +}; + +new GuiCursor(Editor_ArrowCursor) +{ + hotSpot = "0 0"; + bitmapName = "gui/CUR_3dArrow.png"; +}; + +new GuiControl(EmptyControl) +{ + profile = "GuiButtonProfile"; +}; + + +//------------------------------------------------------------------------------ +// Functions +//------------------------------------------------------------------------------ + +function getPrefSetting(%pref, %default) +{ + // + if(%pref $= "") + return(%default); + else + return(%pref); +} + +//------------------------------------------------------------------------------ + +function Editor::getPrefs(%this) +{ + %this.currentEditor = getPrefSetting($pref::Editor::currentEditor, "WorldEditor"); + %this.resolution = getPrefSetting($pref::Editor::screenResolution, getResolution()); + %this.minToolFrameWidth = getPrefSetting($pref::Editor::minToolFrameWidth, 80); +} + +function Editor::setPrefs(%this) +{ + $pref::Editor::currentEditor = %this.currentEditor; + $pref::Editor::screenResolution = getResolution(); + $pref::Editor::minToolFrameWidth = %this.minToolFrameWidth; +} + +function Editor::init(%this) +{ + if(%this.initialized) + return; + + %this.initialized = true; + + loadGui(EditorToolbarDlg); + + // load in the editors + loadGui(WorldEditorGui); + loadGui(WorldEditorToolbarDlg); + loadGui(WorldEditorStatusbarDlg); + loadGui(WorldEditorButtonbarDlg); + loadGui(WorldEditorFrameSetDlg); + loadGui(WorldEditorSettingsDlg); + + loadGui(TerrainEditorGui); + loadGui(TerrainEditorToolbarDlg); + loadGui(TerrainEditorExtraToolbarDlg); + loadGui(TerrainEditorStatusbarDlg); + loadGui(TerrainEditorButtonbarDlg); + loadGui(TerrainEditorFrameSetDlg); + loadGui(TerrainEditorTextureSelectGui); + loadGui(TerrainEditorValuesSettingsGui); + + loadGui(AIEditorGui); + loadGui(AIEditorToolBar); + loadGui(AIEButtonBarDlg); + loadGui(AIEFrameSetDlg); + loadGui(AIEWorkingDlg); + + // + loadGui(EditorSaveMissionDlg); + + // tools + loadGui(EditorToolCreatorGui); + loadGui(EditorToolInspectorGui); + loadGui(EditorToolMissionAreaGui); + loadGui(EditorToolTreeViewGui); + loadGui(ObjectBuilderGui); + + // do gui initialization... + wEditor.init(); + tEditor.init(); + TerraformerGui.init(); + aiEdit.init(); + + // + Creator.init(); + Inspector.init(); + AreaEditor.init(); + EditorTree.init(); + ObjectBuilderGui.init(); + + // + WorldEditorFrameSetDlg.init(); + WorldEditorStatusbarDlg.init(); + WorldEditorButtonbarDlg.init(); + WorldEditorToolbarDlg.init(); + WorldEditorSettingsDlg.init(); + + // + TerrainEditorFrameSetDlg.init(); + TerrainEditorStatusbarDlg.init(); + TerrainEditorButtonbarDlg.init(); + TerrainEditorToolbarDlg.init(); + TerrainEditorExtraToolbarDlg.init(); + + AIEFrameSetDlg.init(); + AIEButtonBarDlg.init(); + AIEditorToolBar.init(); + + // + exec("scripts/editorRender.cs"); +} + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + +function Editor::pushDialog(%this, %name) +{ + %this.pushedDialogs[%this.numPushedDialogs] = %name; + %this.numPushedDialogs++; + Canvas.pushDialog(%name); +} + +function Editor::popDialogs(%this) +{ + // remove current dialogs + for(%i = 0; %i < %this.numPushedDialogs; %i++) + Canvas.popDialog(%this.pushedDialogs[%i]); + %this.numPushedDialogs = 0; +} + +//------------------------------------------------------------------------------ + +function Editor::open(%this) +{ + if(%this.open) + return; + + // get the defaults + %this.getPrefs(); + + %this.prevResolution = getResolution(); + %this.prevContent = Canvas.getContent(); + + %this.init(); + + GlobalActionMap.bind(keyboard, "f11", toggleEditor); + GlobalActionMap.bind(keyboard, "f12", GuiEdit); + + //jff: hangs when switching resolutions + // setResolution(getWord(%this.resolution, 0), getWord(%this.resolution, 1)); + Canvas.setContent(Editor); +} + +function Editor::close(%this) +{ + if(!%this.open) + return; + + if(%this.prevResolution $= "") + %this.prevResolution = getResolution(); + if(%this.prevContent == -1 || %this.prevContent == "") + %this.prevContent = "PlayGui"; + + Canvas.setContent(%this.prevContent); + + //jff: hangs when switching resolutions + // setResolution(getWord(%this.prevResolution, 0), getWord(%this.prevResolution, 1)); + closeMessageHud(); +} + +//------------------------------------------------------------------------------ + +function Editor::setEditor(%this, %editor) +{ + // + %this.currentEditor = %editor; + %this.popDialogs(); + + switch$(%this.currentEditor) + { + case "WorldEditor": + %this.pushDialog(WorldEditorToolbarDlg); + %this.pushDialog(WorldEditorStatusbarDlg); + %this.pushDialog(WorldEditorButtonbarDlg); + %this.pushDialog(WorldEditorFrameSetDlg); + + case "TerrainEditor": + %this.pushDialog(TerrainEditorToolbarDlg); + %this.pushDialog(TerrainEditorExtraToolbarDlg); + %this.pushDialog(TerrainEditorStatusbarDlg); + %this.pushDialog(TerrainEditorButtonbarDlg); + %this.pushDialog(TerrainEditorFrameSetDlg); + + case "Terraformer": + %this.pushDialog(TerraformerGui); + + case "AIEditor": + %this.pushDialog(AIEditorToolBar); + %this.pushDialog(WorldEditorStatusbarDlg); + %this.pushDialog(AIEButtonBarDlg); + %this.pushDialog(AIEFrameSetDlg); + + default: + error("Editor::setEditor: attempting to set unknown editor '" @ %editor @ "'."); + return; + } + + %this.pushDialog(EditorToolbarDlg); +} + +//------------------------------------------------------------------------------ + +function toggleMouse() +{ + if(Canvas.isCursorOn()) + CursorOff(); + else + CursorOn(); +} + +function Editor::onWake(%this) +{ + %this.open = true; + + MoveMap.push(); + EditorMap.push(); + GlobalActionMap.bindcmd(keyboard, "tab", "", "toggleMouse();"); + %this.setEditor(%this.currentEditor); +} + +function Editor::onSleep(%this) +{ + %this.open = false; + + EditorMap.pop(); + MoveMap.pop(); + GlobalActionMap.unbind(keyboard, "tab"); + lockMouse(false); + CursorOn(); + + %this.popDialogs(); + + %this.setPrefs(); + + // only canvas level content gets onWake and onSleep calls.. + wEditor.setPrefs(); + tEditor.setPrefs(); + aiEdit.setPrefs(); +} + +//------------------------------------------------------------------------------ +// keys +new ActionMap(EditorMap); + +EditorMap.bindCmd(keyboard, "f2", "editor.setEditor(WorldEditor);", ""); +EditorMap.bindCmd(keyboard, "f3", "editor.setEditor(TerrainEditor);", ""); +EditorMap.bindCmd(keyboard, "f4", "editor.setEditor(Terraformer);", ""); +EditorMap.bindCmd(keyboard, "f5", "editor.setEditor(AIEditor);", ""); + +EditorMap.bindCmd(keyboard, "alt s", "Canvas.pushDialog(EditorSaveMissionDlg);", ""); +EditorMap.bindCmd(keyboard, "alt r", "lightScene(\"\", forceAlways);", ""); +EditorMap.bindCmd(keyboard, "escape", "editor.close();", ""); + +// Bookmarks +//------------------------------------------------------------------------------ + +// alt-#: set bookmark +for(%i = 0; %i < 9; %i++) + EditorMap.bindCmd(keyboard, "alt " @ %i, "editor.setBookmark(" @ %i @ ");", ""); + +// ctrl-#: goto bookmark +for(%i = 0; %i < 9; %i++) + EditorMap.bindCmd(keyboard, "ctrl " @ %i, "editor.gotoBookmark(" @ %i @ ");", ""); diff --git a/base/gui/EditorSaveMissionDlg.gui b/base/gui/EditorSaveMissionDlg.gui new file mode 100644 index 0000000..d281b27 --- /dev/null +++ b/base/gui/EditorSaveMissionDlg.gui @@ -0,0 +1,336 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(EditorSaveMissionDlg) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiWindowCtrl() { + profile = "GuiWindowProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "168 81"; + extent = "333 313"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Save Mission..."; + resizeWidth = "1"; + resizeHeight = "1"; + canMove = "1"; + canClose = "1"; + canMinimize = "1"; + canMaximize = "1"; + minSize = "50 50"; + + new GuiControl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "8 50"; + extent = "317 226"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiMediumBoldTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 6"; + extent = "249 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Select the files which you wish to save:"; + }; + new GuiCheckBoxCtrl(SaveMissionCheckBox) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 32"; + extent = "132 22"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Mission File"; + }; + new GuiTextCtrl(SaveMissionText) { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "22 56"; + extent = "64 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + }; + new GuiTextCtrl(SaveTerrainText) { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "22 102"; + extent = "56 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + }; + new GuiCheckBoxCtrl(SaveTerrainCheckBox) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 77"; + extent = "132 22"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Terrain"; + }; + new GuiCheckBoxCtrl(SaveHeightFieldScriptCheckBox) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 122"; + extent = "132 22"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Heightfield Script"; + }; + new GuiTextCtrl(SaveHeightFieldScriptText) { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "22 148"; + extent = "162 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + }; + new GuiTextCtrl(SaveTextureScriptText) { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "22 194"; + extent = "132 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + }; + new GuiCheckBoxCtrl(SaveTerrainScriptCheckBox) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 167"; + extent = "132 22"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Texture Script"; + }; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "158 284"; + extent = "72 22"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "EditorSaveMissionDlg.doSave();Canvas.popDialog(EditorSaveMissionDlg);"; + helpTag = "0"; + text = "OK"; + }; + new GuiTextEditCtrl(MissionNameTextEdit) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "87 26"; + extent = "238 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + altCommand = "EditorSaveMissionDlg.missionName = $ThisControl.getValue();EditorSaveMissionDlg.updateTextFields();"; + helpTag = "0"; + historySize = "0"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "241 284"; + extent = "72 22"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Canvas.popDialog(EditorSaveMissionDlg);"; + helpTag = "0"; + text = "Cancel"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "13 28"; + extent = "66 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Mission Name"; + }; + }; +}; +//--- OBJECT WRITE END --- + +//------------------------------------------------------------------------------ +// Functions +//------------------------------------------------------------------------------ + +function EditorSaveMissionDlg::updateTextFields(%this) +{ + SaveMissionText.setValue("missions/" @ %this.missionName @ ".mis"); + SaveTerrainText.setValue("terrains/" @ %this.missionName @ ".ter"); + SaveTextureScriptText.setValue("terrains/texture/" @ %this.missionName @ "_texture.cs"); + SaveHeightFieldScriptText.setValue("terrains/heightfield/" @ %this.missionName @ "_heightfield.cs"); +} + +function EditorSaveMissionDlg::onWake(%this) +{ + %this.missionName = fileBase($MissionName); + + // + MissionNameTextEdit.setValue(%this.missionName); + %this.updateTextFields(); + + // set all to be saved + if(%this.initialized != true) + { + SaveMissionCheckBox.setValue(1); + SaveTerrainCheckBox.setValue(1); + SaveTerrainScriptCheckBox.setValue(1); + SaveHeightFieldScriptCheckBox.setValue(1); + + %this.initialized = true; + } +} + +function EditorSaveMissionDlg::doSave(%this) +{ + // + if(!isObject(MissionGroup)) + { + error("No mission exists to save!"); + return; + } + + // check the files for write access + //--------------------------------- + if(SaveMissionCheckBox.getValue()) + { + %file = "base/missions/" @ %this.missionName @ ".mis"; + if(!isWriteableFileName(%file)) + { + error("Mission file '" @ %file @ "' is not writeable."); + return; + } + } + + if(SaveTerrainCheckBox.getValue()) + { + %file = "base/terrains/" @ %this.missionName @ ".ter"; + if(!isWriteableFileName(%file)) + { + error("Terrain file '" @ %file @ "' is not writeable."); + return; + } + } + + if(SaveTerrainScriptCheckBox.getValue()) + { + %file = "base/terrains/texture/" @ %this.missionName @ "_texture.cs"; + if(!isWriteableFileName(%file)) + { + error("Terrain texture script file '" @ %file @ "' is not writeable."); + return; + } + } + + if(SaveHeightFieldScriptCheckBox.getValue()) + { + %file = "base/terrains/heightfield/" @ %this.missionName @ "_heightfield.cs"; + if(!isWriteableFileName(%file)) + { + error("Terrain heightfield script file '" @ %file @ "' is not writeable."); + return; + } + } + + // Now, save out the files... + //--------------------------------- + if(SaveMissionCheckBox.getValue()) + { + // rename the terrainFile field in the TerrainBlock obj + if(SaveTerrainCheckBox.getValue()) + if(isObject(terrain)) + terrain.terrainFile = %this.missionName @ ".ter"; + + // + missionGroup.save("missions/" @ %this.missionName @ ".mis"); + $MissionName = %this.missionName @ ".mis"; + } + + // requires that the terrain object be named 'terrain' + if(SaveTerrainCheckBox.getValue()) + if(isObject(terrain)) + terrain.save(%this.missionName @ ".ter"); + else + warn(" Failed to save TerrainObject (no object exists)"); + + // + if(SaveTerrainScriptCheckBox.getValue()) + if(Texture_material.rowCount()) + Texture::save(%this.missionName @ "_texture.cs"); + else + warn(" Failed to save Terrain Script file. Nothing to save."); + + // + if(SaveHeightFieldScriptCheckBox.getValue()) + if(Heightfield_operation.rowCount()) + HeightField::doSaveHeightfield(%this.missionName @ "_heightfield.cs"); + else + warn(" Failed to save HeightField Script file. Nothing to save."); +} diff --git a/base/gui/EditorToolBarGui.gui b/base/gui/EditorToolBarGui.gui new file mode 100644 index 0000000..1f20db4 --- /dev/null +++ b/base/gui/EditorToolBarGui.gui @@ -0,0 +1,71 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(EditorToolBarGui) { + profile = "GuiWindowProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "2 2"; + extent = "80 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "Editor.close();"; + helpTag = "0"; + text = "Back"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "452 2"; + extent = "80 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "Canvas.setContent(TerraformerGui);"; + helpTag = "0"; + text = "Terraformer"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "370 2"; + extent = "80 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "Editor.setView(TerrainEditorView);"; + helpTag = "0"; + text = "Terrain Editor"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "288 2"; + extent = "80 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "Editor.setView(WorldEditorView);"; + helpTag = "0"; + text = "World Editor"; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/EditorToolCreatorGui.gui b/base/gui/EditorToolCreatorGui.gui new file mode 100644 index 0000000..98893f1 --- /dev/null +++ b/base/gui/EditorToolCreatorGui.gui @@ -0,0 +1,322 @@ +//--- OBJECT WRITE BEGIN --- + +new GuiScrollCtrl(EditorToolCreatorGui) +{ + profile = "GuiScrollCtrlProfile"; + horizSizing = "width"; + vertSizing = "height"; + vScrollBar = "allwaysOn"; + hScrollBar = "dynamic"; + + new GuiScrollContentCtrl() + { + profile = "GuiScrollContentProfile"; + + new CreatorTree(Creator) + { + profile = "GuiTreeViewProfile"; + }; + }; +}; + +//--- OBJECT WRITE END --- + +//------------------------------------------------------------------------------ +// Functions +//------------------------------------------------------------------------------ + +function Creator::init(%this) +{ + %this.clear(); + +// %this.currentSel = -1; +// %this.currentRoot = -1; +// %this.currentObj = -1; + + $InstantGroup = "MissionGroup"; + + // *** INTERIORS + %base = %this.addGroup(0, "Interiors"); + %misc = %this.addGroup(%base, "Misc."); + + // + %shapeGroup[0] = "Blood Eagle - Lush"; + %shapeGroup[1] = "Diamond Sword - Volcanic"; + %shapeGroup[2] = "Star Wolf - Ice"; + %shapeGroup[3] = "Children of the Phoenix - Desert"; + %shapeGroup[4] = "Bioderm - Badlands"; + + %groupShort[0] = "b"; + %groupShort[1] = "d"; + %groupShort[2] = "s"; + %groupShort[3] = "p"; + %groupShort[4] = "x"; + + // + %shapeType[0] = "Towers"; + %shapeType[1] = "Bunkers"; + %shapeType[2] = "Base"; + %shapeType[3] = "Platform"; + %shapeType[4] = "Bridge"; + %shapeType[5] = "Wall"; + %shapeType[6] = "Unique"; + %shapeType[7] = "Power"; + %shapeType[8] = "Misc."; + %shapeType[9] = "Vehicle"; + %shapeType[10] = "Rocks"; + + %typeShort[0] = "towr"; + %typeShort[1] = "bunk"; + %typeShort[2] = "base"; + %typeShort[3] = "plat"; + %typeShort[4] = "brdg"; + %typeShort[5] = "wall"; + %typeShort[6] = "uniq"; + %typeShort[7] = "powr"; + %typeShort[8] = "misc"; + %typeShort[9] = "vbay"; + %typeShort[10] = "rock"; + + // create the groups + %grpCount = 0; + for(%i = 0; %shapeGroup[%i] !$= ""; %i++) + { + %parent = Creator.addGroup(%base, %shapeGroup[%i]); + for(%j = 0; %shapeType[%j] !$= ""; %j++) + { + %group[%grpCount] = %this.addGroup(%parent, %shapeType[%j]); + %grpCount++; + } + } + + // walk all the interiors and add them to the correct group + %file = findFirstFile("interiors/*.dif"); + while(%file !$= "") + { + %file = fileBase(%file); + + %grpCount = 0; + %added = false; + for(%i = 0; !%added && %shapeGroup[%i] !$= ""; %i++) + { + for(%j = 0; %shapeType[%j] !$= ""; %j++) + { + if(%this.fileNameMatch(%groupShort[%i], %typeShort[%j], %file)) + { + %this.addItem(%group[%grpCount], %file, "createInterior(" @ "\"" @ %file @ ".dif\"" @ ");"); + %added = true; + } + %grpCount++; + } + } + + // throw it in the 'misc' directory + if(!%added) + %this.addItem(%misc, %file, "createInterior(" @ "\"" @ %file @ ".dif\"" @ ");"); + + %file = findNextFile("interiors/*.dif"); + } + + // *** SHAPES - add in all the shapes now... + %base = %this.addGroup(0, "Shapes"); + %dataGroup = "DataBlockGroup"; + + for(%i = 0; %i < %dataGroup.getCount(); %i++) + { + %obj = %dataGroup.getObject(%i); + if(%obj.catagory !$= "" || %obj.catagory != 0) + { + %grp = %this.addGroup(%base, %obj.catagory); + %this.addItem(%grp, %obj.getName(), %obj.getClassName() @ "::create(" @ %obj.getName() @ ");"); + } + } + + // Statics + %staticBase = %this.addGroup(0, "Static Objects"); + for (%i = 0; %i < $NumStaticTSObjects; %i++) { + echo("This: " SPC $StaticTSObjects[%i]); + echo(getWord($StaticTSObjects[%i], 2)); + + %grp = %this.addGroup(%staticBase, getWord($StaticTSObjects[%i], 0)); + echo("TSStatic::create(" @ getWord($StaticTSObjects[%i], 2) @");"); + %this.addItem(%grp, getWord($StaticTSObjects[%i], 1), "TSStatic::create(\"" @ getWord($StaticTSObjects[%i], 2) @"\");"); + } + + + // *** OBJECTS - do the objects now... + %objGroup[0] = "Environment"; + %objGroup[1] = "Mission"; + %objGroup[2] = "System"; + %objGroup[3] = "AI"; + + %Environment_Item[0] = "Sky"; + %Environment_Item[1] = "Sun"; + %Environment_Item[2] = "Lightning"; + %Environment_Item[3] = "Water"; + %Environment_Item[4] = "Terrain"; + %Environment_Item[5] = "AudioEmitter"; + %Environment_Item[6] = "Precipitation"; + %Environment_Item[7] = "ParticleEmitter"; + + %Mission_Item[0] = "MissionArea"; + %Mission_Item[1] = "GameType"; + %Mission_Item[2] = "Marker"; + %Mission_Item[3] = "Forcefield"; + %Mission_Item[4] = "Trigger"; + %Mission_Item[5] = "PhysicalZone"; + %Mission_Item[6] = "Camera"; + + %System_Item[0] = "SimGroup"; + + %AI_Item[0] = "Objective"; + //%AI_Item[1] = "NavigationGraph"; + + // objects group + %base = %this.addGroup(0, "Objects"); + + // create 'em + for(%i = 0; %objGroup[%i] !$= ""; %i++) + { + %grp = %this.addGroup(%base, %objGroup[%i]); + + %groupTag = "%" @ %objGroup[%i] @ "_Item"; + + %done = false; + for(%j = 0; !%done; %j++) + { + eval("%itemTag = " @ %groupTag @ %j @ ";"); + if(%itemTag $= "") + %done = true; + else + %this.addItem(%grp, %itemTag, "ObjectBuilderGui.build" @ %itemTag @ "();"); + } + } +} + +function createInterior(%name) +{ + %obj = new InteriorInstance() + { + position = "0 0 0"; + rotation = "0 0 0"; + interiorFile = %name; + }; + + return(%obj); +} + +function Creator::onAction(%this) +{ +// %this.currentSel = -1; +// %this.currentRoot = -1; +// %this.currentObj = -1; + + %sel = %this.getSelected(); + if(%sel == -1 || %this.isGroup(%sel) || !$MissionRunning) + return; + + // the value is the callback function.. + if(%this.getValue(%sel) $= "") + return; + + %this.currentSel = %sel; + %this.currentRoot = %this.getRootGroup(%sel); + + %this.create(%sel); +} + +function Creator::create(%this, %sel) +{ + // create the obj and add to the instant group + %obj = eval(%this.getValue(%sel)); + + if(%obj == -1 || %obj == 0) + return; + +// %this.currentObj = %obj; + + $InstantGroup.add(%obj); + + // drop it from the editor - only SceneObjects can be selected... + wEditor.clearSelection(); + wEditor.selectObject(%obj); + wEditor.dropSelection(); +} + +//function Creator::getRootGroup(%sel) +//{ +// if(%sel == -1 || %sel == 0) +// return(-1); +// +// %parent = %this.getParent(%sel); +// while(%parent != 0 || %parent != -1) +// { +// %sel = %parent; +// %parent = %this.getParent(%sel); +// } +// +// return(%sel); +//} +// +//function Creator::getLastItem(%rootGroup) +//{ +// %traverse = %rootGroup + 1; +// while(%this.getRootGroup(%traverse) == %rootGroup) +// %traverse++; +// return(%traverse - 1); +//} +// +//function Creator::createNext(%this) +//{ +// if(%this.currentSel == -1 || %this.currentRoot == -1 || %this.currentObj == -1) +// return; +// +// %sel = %this.currentSel; +// %this.currentSel++; +// +// while(%this.currentSel != %sel) +// { +// if(%this.getRootGroup(%this.currentSel) != %this.currentRoot) +// %this.currentSel = %this.currentRoot + 1; +// +// if(%this.isGroup(%this.currentSel)) +// %this.currentSel++; +// else +// %sel = %this.currentSel; +// } +// +// // +// %this.currentObj.delete(); +// %this.create(%sel); +//} +// +//function Creator::createPrevious(%this) +//{ +// if(%this.currentSel == -1 || %this.currentGroup == -1 || %this.currentObj == -1) +// return; +// +// %sel = %this.currentSel; +// %this.currentSel--; +// +// while(%this.currentSel != %sel) +// { +// if(%this.getRootGroup(%this.currentSel) != %this.currentRoot) +// %this.currentSel = getLastItem(%this.currentRoot); +// +// if(%this.isGroup(%this.currentSel)) +// %this.currentSel--; +// else +// %sel = %this.currentSel; +// } +// +// // +// %this.currentObj.delete(); +// %this.create(%sel); +//} + + + + + + + diff --git a/base/gui/EditorToolInspectorGui.gui b/base/gui/EditorToolInspectorGui.gui new file mode 100644 index 0000000..d1abd03 --- /dev/null +++ b/base/gui/EditorToolInspectorGui.gui @@ -0,0 +1,59 @@ +//--- OBJECT WRITE BEGIN --- + +new GuiControl(EditorToolInspectorGui) +{ + profile = "GuiButtonProfile"; + position = "0 0"; + extent = "200 200"; + horizSizing = "width"; + vertSizing = "height"; + + new GuiButtonCtrl() + { + profile = "GuiButtonProfile"; + position = "2 2"; + extent = "40 20"; + text = "Apply"; + command = "inspector.apply(InspectorNameEdit.getValue());"; + }; + + new GuiTextEditCtrl(InspectorNameEdit) + { + profile = "GuiTextEditProfile"; + position = "44 2"; + extent = "160 20"; + text = ""; + horizSizing = "width"; + vertSizing = "bottom"; + }; + + new GuiScrollCtrl() + { + profile = "GuiScrollCtrlProfile"; + vScrollBar = "alwaysOn"; + hScrollBar = "dynamic"; + vertSizing = "height"; + horizSizing = "width"; + position = "0 24"; + + new GuiScrollContentCtrl() + { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + + new GuiInspector(Inspector) + { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + }; + }; + }; +}; + +//--- OBJECT WRITE END --- + +function Inspector::init() +{ +} \ No newline at end of file diff --git a/base/gui/EditorToolMissionAreaGui.gui b/base/gui/EditorToolMissionAreaGui.gui new file mode 100644 index 0000000..482328b --- /dev/null +++ b/base/gui/EditorToolMissionAreaGui.gui @@ -0,0 +1,195 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(editortoolmissionareagui) { + profile = "EditorContentProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiControl(AE_MainBar) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiCheckBoxCtrl() { + profile = "GuiRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "2 2"; + extent = "60 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + variable = "AreaEditor.enableEditing"; + command = "AreaEditor.enableEditing = $ThisControl.getValue();"; + helpTag = "0"; + text = "Edit Area"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "63 2"; + extent = "60 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "AreaEditor.centerWorld();"; + helpTag = "0"; + text = "Center"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "125 2"; + extent = "60 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "AreaEditor.enableMirroring = true;AE_MainBar.setVisible(0);AE_MirrorBar.setVisible(1);"; + helpTag = "0"; + text = "Mirror"; + }; + }; + new GuiControl(AE_MirrorBar) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 20"; + minExtent = "8 8"; + visible = "0"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 1"; + extent = "30 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "if(AreaEditor.mirrorIndex == 0) AreaEditor.mirrorIndex = 7; else AreaEditor.mirrorIndex--;"; + helpTag = "0"; + text = "<--"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "37 1"; + extent = "30 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "if(AreaEditor.mirrorIndex == 7) AreaEditor.mirrorIndex = 0; else AreaEditor.mirrorIndex++;"; + helpTag = "0"; + text = "-->"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "78 1"; + extent = "60 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "AreaEditor.enableMirroring = false;tEditor.mirrorTerrain(AreaEditor.mirrorIndex);AreaEditor.updateTerrain();AE_MirrorBar.setVisible(0);AE_MainBar.setVisible(1);"; + helpTag = "0"; + text = "Apply"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "141 1"; + extent = "60 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "AreaEditor.enableMirroring = false;AE_MirrorBar.setVisible(0);AE_MainBar.setVisible(1);"; + helpTag = "0"; + text = "Cancel"; + }; + }; + new MissionAreaEditor(AreaEditor) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 20"; + extent = "640 440"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + wrap = "0"; + squareBitmap = "1"; + enableEditing = "0"; + renderCamera = "1"; + handleFrameColor = "255 255 255 255"; + handleFillColor = "0 0 0 255"; + defaultObjectColor = "0 255 0 100"; + waterObjectColor = "0 0 255 100"; + missionBoundsColor = "255 0 0 255"; + cameraColor = "255 0 0 255"; + enableMirroring = "0"; + mirrorIndex = "0"; + mirrorLineColor = "255 0 255 255"; + mirrorArrowColor = "255 0 255 128"; + }; + new GuiTextCtrl(AreaEditingText) { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "5 460"; + extent = "640 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + }; +}; +//--- OBJECT WRITE END --- + +//------------------------------------------------------------------------------ +// Functions +//------------------------------------------------------------------------------ + +function AreaEditor::init(%this) +{ +} + +function AreaEditor::onUpdate(%this, %area) +{ + AreaEditingText.setValue( "X: " @ getWord(%area,0) @ " Y: " @ getWord(%area,1) @ " W: " @ getWord(%area,2) @ " H: " @ getWord(%area,3)); +} + +function AreaEditor::onWorldOffset(%this, %offset) +{ +} diff --git a/base/gui/EditorToolThumbnailGui.gui b/base/gui/EditorToolThumbnailGui.gui new file mode 100644 index 0000000..a8ca443 --- /dev/null +++ b/base/gui/EditorToolThumbnailGui.gui @@ -0,0 +1,30 @@ +//--- OBJECT WRITE BEGIN --- + +new GuiScrollCtrl(ThumbnailView) +{ + profile = "GuiScrollCtrlProfile"; + horizSizing = "width"; + vertSizing = "height"; + vScrollBar = "allwaysOn"; + hScrollBar = "dynamic"; + + new GuiScrollContentCtrl() + { + profile = "GuiScrollContentProfile"; + + new GuiBitmapCtrl(ThumbnailPreview) + { + profile = "GuiScrollContentProfile"; + }; + }; +}; + +//--- OBJECT WRITE END --- + +//------------------------------------------------------------------------------ +// Functions +//------------------------------------------------------------------------------ + +function ThumbnailPreview::init(%this) +{ +} \ No newline at end of file diff --git a/base/gui/EditorToolTreeViewGui.gui b/base/gui/EditorToolTreeViewGui.gui new file mode 100644 index 0000000..e7a6cc6 --- /dev/null +++ b/base/gui/EditorToolTreeViewGui.gui @@ -0,0 +1,108 @@ +//--- OBJECT WRITE BEGIN --- + +new GuiScrollCtrl(EditorToolTreeViewGui) +{ + profile = "GuiScrollCtrlProfile"; + horizSizing = "width"; + vertSizing = "height"; + vScrollBar = "alwaysOn"; + hScrollBar = "dynamic"; + position = "0 0"; + extent = "200 400"; + + new GuiScrollContentCtrl() + { + profile = "GuiScrollContentProfile"; + +// new GuiTreeViewCtrl(EditorTree) + new GuiTreeView(EditorTree) + { + profile = "GuiTreeViewProfile"; + position = "0 0"; + extent = "300 300"; + horizSizing = "width"; + allowMultipleSelections = "true"; + recurseSets = "true"; + }; + }; +}; + +//--- OBJECT WRITE END --- + +//------------------------------------------------------------------------------ +// Functions +//------------------------------------------------------------------------------ + +function EditorTree::init(%this) +{ + %this.open(MissionGroup); + + // context menu + new GuiControl(ETContextPopupDlg) + { + profile = "GuiModelessDialogProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + + new GuiPopUpMenuCtrl(ETContextPopup) + { + profile = "GuiButtonProfile"; + position = "0 0"; + extent = "0 0"; + minExtent = "0 0"; + maxPopupHeight = "200"; + command = "canvas.popDialog(ETContextPopupDlg);"; + }; + }; + ETContextPopup.setVisible(false); +} + +function EditorTree::onInspect(%this, %obj) +{ + Inspector.inspect(%obj); + InspectorNameEdit.setValue(%obj.getName()); +} + +function EditorTree::onSelect(%this, %obj) +{ + if($AIEdit) + aiEdit.selectObject(%obj); + else + wEditor.selectObject(%obj); + +} + +function EditorTree::onUnselect(%this, %obj) +{ + if($AIEdit) + aiEdit.unselectObject(%obj); + else + wEditor.unselectObject(%obj); +} + +function EditorTree::onContextMenu(%this, %mousePos, %obj) +{ + ETContextPopup.position = %mousePos; + ETContextPopup.clear(); + ETContextPopup.add("Delete", 0); + + canvas.pushDialog(ETContextPopupDlg); + ETContextPopup.forceOnAction(); + + %this.contextObj = %obj; +} + +function ETContextPopup::onSelect(%this, %index, %value) +{ + switch(%index) + { + case 0: + EditorTree.contextObj.delete(); + } +} \ No newline at end of file diff --git a/base/gui/EditorToolbarDlg.gui b/base/gui/EditorToolbarDlg.gui new file mode 100644 index 0000000..aa1777f --- /dev/null +++ b/base/gui/EditorToolbarDlg.gui @@ -0,0 +1,85 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(EditorToolbarDlg) { + profile = "GuiModelessDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "0"; + helpTag = "0"; + + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 4"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "editor.close();"; + helpTag = "0"; + text = "Back"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "123 4"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Editor.setEditor(WorldEditor);"; + helpTag = "0"; + text = "World Editor"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "207 4"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Editor.setEditor(TerrainEditor);"; + helpTag = "0"; + text = "Terrain Editor"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "291 4"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Editor.setEditor(Terraformer);"; + helpTag = "0"; + text = "Terraformer"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "375 4"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Editor.setEditor(AIEditor);"; + helpTag = "0"; + text = "AI Editor"; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/EmailBlockDlg.gui b/base/gui/EmailBlockDlg.gui new file mode 100644 index 0000000..8ad48ed --- /dev/null +++ b/base/gui/EmailBlockDlg.gui @@ -0,0 +1,118 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(EmailBlockDlg) { + profile = "DlgBackProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "154 64"; + extent = "332 320"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "EDIT BLOCK LIST"; + noTitleBar = "0"; + + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "32 265"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "EmailBlockRemove();"; + helpTag = "0"; + text = "REMOVE BLOCK"; + simpleStyle = "0"; + }; + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "right"; + vertSizing = "height"; + position = "22 42"; + extent = "287 222"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "dynamic"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "0 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 7"; + extent = "279 208"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellTextList(EmailBlockList) { + profile = "ShellTextArrayProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "263 8"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + enumerate = "0"; + resizeCell = "1"; + columns = "0 169"; + fitParentWidth = "1"; + clipColumnText = "0"; + }; + }; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 28"; + extent = "45 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Sender:"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "169 265"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.popDialog(EmailBlockDlg);"; + helpTag = "0"; + text = "DONE"; + simpleStyle = "0"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "179 28"; + extent = "103 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "# Blocked Emails:"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/EmailComposeDlg.gui b/base/gui/EmailComposeDlg.gui new file mode 100644 index 0000000..16f0498 --- /dev/null +++ b/base/gui/EmailComposeDlg.gui @@ -0,0 +1,183 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(EMailComposeDlg) { + profile = "DlgBackProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + key = "76"; + state = "replyMail"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "70 36"; + extent = "500 408"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "COMPOSE EMAIL"; + maxLength = "255"; + noTitleBar = "0"; + + new ShellTextEditCtrl(Email_ToEdit) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "72 22"; + extent = "408 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$EmailToAddress"; + helpTag = "0"; + text = "BigDevDawg,Symlink,Diamondback,Todesritter"; + maxLength = "2000"; + historySize = "0"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellTextEditCtrl(EMail_CCEdit) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "72 48"; + extent = "408 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$EmailCCAddress"; + helpTag = "0"; + text = "brunhilda,jett,DrAwkward,Rated z"; + maxLength = "2000"; + historySize = "0"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellTextEditCtrl(Email_Subject) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "72 74"; + extent = "408 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$EmailSubject"; + helpTag = "0"; + maxLength = "48"; + historySize = "0"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "right"; + vertSizing = "height"; + position = "27 109"; + extent = "447 244"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "3 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "7 7"; + extent = "417 230"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextEditCtrl(EmailBodyText) { + profile = "ShellMessageTextProfile"; + horizSizing = "right"; + vertSizing = "height"; + position = "0 0"; + extent = "417 230"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + allowColorChars = "0"; + maxChars = "3600"; + }; + }; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "81 353"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "EmailComposeDlg.Cancel();"; + accelerator = "escape"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "291 353"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "EMailComposeDlg.SendMail();"; + helpTag = "0"; + text = "SEND"; + simpleStyle = "0"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "28 84"; + extent = "47 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Subject:"; + maxLength = "255"; + }; + new ShellBitmapButton(ToButton) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "38 22"; + extent = "50 38"; + minExtent = "32 38"; + visible = "1"; + command = "LaunchAddressDlg();"; + helpTag = "0"; + text = "TO:"; + simpleStyle = "0"; + }; + new ShellBitmapButton(CCButton) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "38 48"; + extent = "50 38"; + minExtent = "32 38"; + visible = "1"; + command = "LaunchAddressDlg();"; + helpTag = "0"; + text = "CC:"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/EmailGui.gui b/base/gui/EmailGui.gui new file mode 100644 index 0000000..8c2447d --- /dev/null +++ b/base/gui/EmailGui.gui @@ -0,0 +1,354 @@ +//--- OBJECT WRITE BEGIN --- +new GuiChunkedBitmapCtrl(EmailGui) { + profile = "GuiContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + variable = "$ShellBackground"; + helpTag = "0"; + useVariable = "1"; + key = "2"; + messageCount = "1"; + state = "done"; + cacheLoaded = "1"; + soundPlayed = "0"; + eid = "593"; + checkingEMail = "1"; + checkSchedule = "596"; + btnClicked = "0"; + STATUS = "error"; + + new ShellPaneCtrl() { + profile = "ShellPaneProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "12 46"; + extent = "620 390"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "EMAIL"; + maxLength = "255"; + noTitleBar = "0"; + + new ShellBitmapButton(EM_BlockEditBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "324 42"; + extent = "90 38"; + minExtent = "32 38"; + visible = "1"; + command = "EmailEditBlocks();"; + helpTag = "0"; + text = "BLOCK LIST"; + simpleStyle = "0"; + }; + new ShellBitmapButton(EM_AddBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "427 29"; + extent = "93 38"; + minExtent = "32 38"; + visible = "0"; + command = "EmailBlockSender();"; + helpTag = "0"; + text = "TRACK SENDER"; + simpleStyle = "0"; + }; + new ShellBitmapButton(EM_DeleteBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "275 42"; + extent = "65 38"; + minExtent = "32 38"; + visible = "1"; + command = "EmailMessageDelete();"; + accelerator = "delete"; + helpTag = "0"; + text = "DELETE"; + simpleStyle = "0"; + }; + new ShellBitmapButton(EM_ForwardBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "216 42"; + extent = "75 38"; + minExtent = "32 38"; + visible = "1"; + command = "EmailMessageForward();"; + helpTag = "0"; + text = "FORWARD"; + simpleStyle = "0"; + }; + new ShellBitmapButton(EM_ReplyToAllBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "152 42"; + extent = "80 38"; + minExtent = "32 38"; + visible = "1"; + command = "EmailMessageReplyAll();"; + helpTag = "0"; + text = "REPLY ALL"; + simpleStyle = "0"; + }; + new ShellBitmapButton(EM_ReplyBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "108 42"; + extent = "60 38"; + minExtent = "32 38"; + visible = "1"; + command = "EmailMessageReply();"; + helpTag = "0"; + text = "REPLY"; + simpleStyle = "0"; + }; + new ShellBitmapButton(em_NewMailbtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "71 42"; + extent = "53 38"; + minExtent = "32 38"; + visible = "1"; + command = "EmailMessageNew();"; + helpTag = "0"; + text = "NEW"; + simpleStyle = "0"; + }; + new GuiFrameSetCtrl(EM_Frame) { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "18 70"; + extent = "583 301"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + columns = "0"; + rows = "0 146"; + borderWidth = "4"; + borderColor = "5 199 145 255"; + borderEnable = "dynamic"; + borderMovable = "dynamic"; + autoBalance = "0"; + fudgeFactor = "4"; + + new ShellFancyArrayScrollCtrl(EM_BrowserPane) { + profile = "ShellServerBrowserProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "583 142"; + minExtent = "8 72"; + visible = "1"; + helpTag = "0"; + fixedHorizontal = "1"; + vertSpacerBitmap = "gui/shll_vertspacer"; + horzSpacerBitmap = "gui/shll_horzspacer"; + + new VirtualScrollCtrl() { + profile = "ShellServerBrowserProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 16"; + extent = "583 126"; + minExtent = "8 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "0"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "0 0"; + + new VirtualScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 4"; + extent = "559 118"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiControl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "8 8"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + }; + }; + }; + new GuiEmailBrowser(EM_Browser) { + profile = "ShellServerBrowserProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "563 138"; + minExtent = "8 20"; + visible = "1"; + helpTag = "0"; + startScrollRegion = "4 0"; + headerBitmap = "gui/server_tabs"; + sortArrowBitmap = "gui/shll_sortarrow"; + fieldBase = "gui/shll_field"; + barBase = "gui/shll_bar"; + glowOffset = "4"; + rowHeight = "19"; + headerFontType = "Univers Condensed"; + headerFontSize = "16"; + headerFontColor = "8 19 6 255"; + headerFontColorHL = "25 68 56 255"; + separatorColor = "192 192 192 255"; + drawSeparators = "0"; + headerSort = "1"; + allowReposition = "1"; + iconBase = "gui/email"; + unreadFontType = "Univers Bold"; + unreadFontSize = "16"; + unreadFontColor = "6 245 215 255"; + headerGlowOffset = "4"; + }; + }; + new ShellScrollCtrl(EM_MessagePane) { + profile = "NewScrollCtrlProfile"; + horizSizing = "left"; + vertSizing = "height"; + position = "0 146"; + extent = "583 155"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "3 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "7 7"; + extent = "553 141"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextCtrl(EMailInboxBodyText) { + profile = "ShellMessageTextProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "0 0"; + extent = "551 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + allowColorChars = "0"; + maxChars = "-1"; + }; + }; + }; + }; + new ShellBitmapButton(EM_BuddyEditBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "504 29"; + extent = "100 38"; + minExtent = "32 38"; + visible = "0"; + command = "EmailEditBuddys();"; + helpTag = "0"; + text = "TRACKING LIST"; + simpleStyle = "0"; + }; + new ShellBitmapButton(EM_BlockBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "398 42"; + extent = "105 38"; + minExtent = "32 38"; + visible = "1"; + command = "EmailBlockSender();"; + helpTag = "0"; + text = "BLOCK SENDER"; + simpleStyle = "0"; + }; + new ShellBitmapButton(em_GetMailBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "12 42"; + extent = "75 38"; + minExtent = "32 38"; + visible = "1"; + command = "GetEmailBtnClick();"; + helpTag = "0"; + text = "GET MAIL"; + simpleStyle = "0"; + }; + new ShellRadioButton(rbInbox) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "15 24"; + extent = "101 30"; + minExtent = "26 27"; + visible = "1"; + command = "EMailGui.ButtonClick(0);"; + helpTag = "0"; + text = "INBOX"; + maxLength = "255"; + groupNum = "0"; + }; + new ShellRadioButton(rbSendItems) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "222 24"; + extent = "110 30"; + minExtent = "26 27"; + visible = "0"; + helpTag = "0"; + text = "SENT MAIL"; + maxLength = "255"; + groupNum = "0"; + }; + new ShellRadioButton(rbDeleted) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "113 24"; + extent = "112 30"; + minExtent = "26 27"; + visible = "1"; + command = "EmailGui.buttonClick(1);"; + helpTag = "0"; + text = "DELETED MAIL"; + maxLength = "255"; + groupNum = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/FilterEditDlg.gui b/base/gui/FilterEditDlg.gui new file mode 100644 index 0000000..f23e5ae --- /dev/null +++ b/base/gui/FilterEditDlg.gui @@ -0,0 +1,297 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(FilterEditDlg) { + profile = "DlgBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "20 55"; + extent = "600 370"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "EDIT GAME FILTER"; + noTitleBar = "0"; + + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "48 40"; + extent = "80 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Filter Name:"; + }; + new ShellTextEditCtrl(FilterEditName) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "124 32"; + extent = "180 38"; + minExtent = "32 38"; + visible = "1"; + helpTag = "0"; + text = "New Filter"; + historySize = "0"; + maxLength = "16"; + password = "0"; + glowOffset = "9 9"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "53 78"; + extent = "100 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Rules Set:"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "53 108"; + extent = "100 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Game Type:"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "326 78"; + extent = "106 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Min Player Count:"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "326 108"; + extent = "106 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Max Player Count:"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "111 197"; + extent = "82 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Server Location:"; + }; + new ShellPopupMenu(FilterEditGameType) { + profile = "ShellPopupProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "150 69"; + extent = "150 36"; + minExtent = "49 36"; + visible = "1"; + helpTag = "0"; + text = "Any"; + maxPopupHeight = "200"; + buttonBitmap = "gui/shll_pulldown"; + rolloverBarBitmap = "gui/shll_pulldownbar_rol"; + selectedBarBitmap = "gui/shll_pulldownbar_act"; + noButtonStyle = "0"; + }; + new ShellTextEditCtrl(FilterEditMinPlayers) { + profile = "NewTextEditNumericProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "428 70"; + extent = "80 38"; + minExtent = "32 38"; + visible = "1"; + helpTag = "0"; + text = "0"; + validate = "FilterEditDlg.setMinPlayers();"; + historySize = "0"; + maxLength = "3"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellPopupMenu(FilterEditMissionType) { + profile = "ShellPopupProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "150 99"; + extent = "150 36"; + minExtent = "49 36"; + visible = "1"; + helpTag = "0"; + text = "Any"; + maxPopupHeight = "200"; + buttonBitmap = "gui/shll_pulldown"; + rolloverBarBitmap = "gui/shll_pulldownbar_rol"; + selectedBarBitmap = "gui/shll_pulldownbar_act"; + noButtonStyle = "0"; + }; + new ShellTextEditCtrl(FilterEditMaxPlayers) { + profile = "NewTextEditNumericProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "428 100"; + extent = "80 38"; + minExtent = "32 38"; + visible = "1"; + helpTag = "0"; + text = "255"; + validate = "FilterEditDlg.setMaxPlayers();"; + historySize = "0"; + maxLength = "3"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellToggleButton(FilterEditUsePingTgl) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "108 155"; + extent = "165 27"; + minExtent = "26 27"; + visible = "1"; + helpTag = "0"; + text = "FILTER BY MAX PING"; + }; + new ShellTextEditCtrl(FilterEditMaxPing) { + profile = "NewTextEditNumericProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "277 150"; + extent = "80 38"; + minExtent = "32 38"; + visible = "1"; + helpTag = "0"; + text = "0"; + validate = "FilterEditDlg.setMaxPing();"; + historySize = "0"; + maxLength = "3"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellToggleButton(FilterEditLocMask0) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "108 219"; + extent = "165 27"; + minExtent = "26 27"; + visible = "1"; + command = "FilterEditDlg.checkRegionMasks( 0 );"; + helpTag = "0"; + text = "NORTH AMERICA EAST"; + }; + new ShellToggleButton(FilterEditLocMask3) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "322 219"; + extent = "165 27"; + minExtent = "26 27"; + visible = "1"; + command = "FilterEditDlg.checkRegionMasks( 3 );"; + helpTag = "0"; + text = "AUSTRALIA"; + }; + new ShellToggleButton(FilterEditLocMask1) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "108 247"; + extent = "165 27"; + minExtent = "26 27"; + visible = "1"; + command = "FilterEditDlg.checkRegionMasks( 1 );"; + helpTag = "0"; + text = "NORTH AMERICA WEST"; + }; + new ShellToggleButton(FilterEditLocMask4) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "322 247"; + extent = "165 27"; + minExtent = "26 27"; + visible = "1"; + command = "FilterEditDlg.checkRegionMasks( 4 );"; + helpTag = "0"; + text = "ASIA"; + }; + new ShellToggleButton(FilterEditLocMask2) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "108 275"; + extent = "165 27"; + minExtent = "26 27"; + visible = "1"; + command = "FilterEditDlg.checkRegionMasks( 2 );"; + helpTag = "0"; + text = "SOUTH AMERICA"; + }; + new ShellToggleButton(FilterEditLocMask5) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "322 275"; + extent = "165 27"; + minExtent = "26 27"; + visible = "1"; + command = "FilterEditDlg.checkRegionMasks( 5 );"; + helpTag = "0"; + text = "EUROPE"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "83 315"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.popDialog(FilterEditDlg);"; + accelerator = "escape"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "396 315"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "ChooseFilterDlg.saveFilter();"; + helpTag = "0"; + text = "SAVE"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/ForumsComposeDlg.gui b/base/gui/ForumsComposeDlg.gui new file mode 100644 index 0000000..e5ee5d8 --- /dev/null +++ b/base/gui/ForumsComposeDlg.gui @@ -0,0 +1,140 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(ForumsComposeDlg) { + profile = "DlgBackProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + action = "Reply"; + parentPost = "18598"; + forum = "58"; + post = "12846"; + topic = "3822"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "70 36"; + extent = "500 408"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "FORUMS POST"; + maxLength = "255"; + noTitleBar = "0"; + + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "22 37"; + extent = "47 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Subject:"; + maxLength = "255"; + }; + new ShellTextEditCtrl(FP_SubjectEdit) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "65 29"; + extent = "360 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$ForumsSubject"; + helpTag = "0"; + maxLength = "255"; + historySize = "0"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "27 63"; + extent = "448 298"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "3 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "7 7"; + extent = "418 284"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextEditCtrl(ForumsBodyText) { + profile = "ShellMessageTextProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 -130"; + extent = "418 414"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + allowColorChars = "1"; + maxChars = "3600"; + }; + }; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "239 358"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.popDialog(ForumsComposeDlg);"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "351 358"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "ForumsPost();"; + helpTag = "0"; + text = "POST"; + simpleStyle = "0"; + }; + new ShellBitmapButton(QuoteBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "22 357"; + extent = "172 38"; + minExtent = "32 38"; + visible = "1"; + command = "GetQuotedText();"; + helpTag = "0"; + text = "INCLUDE TOPIC POST TEXT"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/ForumsGui.gui b/base/gui/ForumsGui.gui new file mode 100644 index 0000000..36d97d7 --- /dev/null +++ b/base/gui/ForumsGui.gui @@ -0,0 +1,534 @@ +//--- OBJECT WRITE BEGIN --- +new GuiChunkedBitmapCtrl(ForumsGui) { + profile = "GuiContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + variable = "$ShellBackground"; + helpTag = "0"; + useVariable = "1"; + eid = "979"; + key = "93"; + state = "done"; + ebstat = "1"; + initialized = "1"; + refreshTarget = "1"; + TextCheck = "0"; + refreshFlag = "0"; + forumCount = "-1"; + bflag = "4"; + + new ShellPaneCtrl(ForumShell) { + profile = "ShellPaneProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "13 46"; + extent = "620 390"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "FORUMS"; + maxLength = "255"; + noTitleBar = "0"; + + new GuiControl(ForumsThreadPane) { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "19 26"; + extent = "582 350"; + minExtent = "8 8"; + visible = "0"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "8 3"; + extent = "36 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "TOPIC:"; + maxLength = "255"; + }; + new GuiTextCtrl(FO_TopicText) { + profile = "ShellTopicTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "50 3"; + extent = "522 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Actual Topic Will Go Here"; + maxLength = "255"; + }; + new GuiFrameSetCtrl(FO_Frame) { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "2 18"; + extent = "578 292"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + columns = "0"; + rows = "0 158"; + borderWidth = "4"; + borderColor = "5 199 145 255"; + borderEnable = "dynamic"; + borderMovable = "dynamic"; + autoBalance = "0"; + fudgeFactor = "4"; + + new ShellFancyArrayScrollCtrl(FO_MessagePane) { + profile = "ShellServerBrowserProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "578 154"; + minExtent = "24 72"; + visible = "1"; + helpTag = "0"; + fixedHorizontal = "1"; + vertSpacerBitmap = "gui/shll_vertspacer"; + horzSpacerBitmap = "gui/shll_horzspacer"; + + new VirtualScrollCtrl() { + profile = "ShellServerBrowserProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 16"; + extent = "578 138"; + minExtent = "8 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "0"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "0 0"; + + new VirtualScrollContentCtrl() { + profile = "ShellTextArrayProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 4"; + extent = "554 130"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiControl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "8 21"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + }; + }; + }; + new ShellFancyTextList(ForumsMessageList) { + profile = "ShellServerBrowserProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "558 150"; + minExtent = "8 20"; + visible = "1"; + altCommand = "LinkBrowser(getField(ForumsMessageList.getRowTextById(ForumsMessageList.getSelectedID()),6),\"Warrior\");"; + helpTag = "0"; + startScrollRegion = "3 0"; + headerBitmap = "gui/server_tabs"; + sortArrowBitmap = "gui/shll_sortarrow"; + fieldBase = "gui/shll_field"; + barBase = "gui/shll_bar"; + glowOffset = "4"; + rowHeight = "19"; + headerFontType = "Univers Condensed"; + headerFontSize = "16"; + headerFontColor = "8 19 6 255"; + headerFontColorHL = "25 68 56 255"; + separatorColor = "192 192 192 255"; + drawSeparators = "0"; + headerSort = "0"; + allowReposition = "0"; + updateCount = "0"; + key = "71"; + state = "replyPost"; + lastId = "16480"; + highestUpdate = "16480"; + bflag = "1"; + }; + }; + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 158"; + extent = "578 134"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "3 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "7 7"; + extent = "548 120"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextCtrl(ForumsText) { + profile = "ShellMessageTextProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "532 180"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + allowColorChars = "0"; + }; + }; + }; + }; + new ShellBitmapButton(FO_EditBtn) { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "38 309"; + extent = "80 38"; + minExtent = "32 38"; + visible = "0"; + command = "ForumsEditPost();"; + helpTag = "0"; + text = "EDIT"; + simpleStyle = "0"; + }; + new ShellBitmapButton(FO_AcceptBtn) { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "110 309"; + extent = "80 38"; + minExtent = "32 38"; + visible = "0"; + command = "ForumsAcceptPost();"; + accelerator = "alt a"; + helpTag = "0"; + text = "ACCEPT"; + simpleStyle = "0"; + }; + new ShellBitmapButton(FO_RejectBtn) { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "182 309"; + extent = "80 38"; + minExtent = "32 38"; + visible = "0"; + command = "ForumsRejectPost();"; + accelerator = "delete"; + helpTag = "0"; + text = "DELETE"; + simpleStyle = "0"; + }; + new ShellBitmapButton(FO_ReplyBtn) { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "275 309"; + extent = "80 38"; + minExtent = "32 38"; + visible = "1"; + command = "ForumsReply();"; + accelerator = "alt r"; + helpTag = "0"; + text = "REPLY"; + simpleStyle = "0"; + }; + new ShellBitmapButton(FO_NextBtn) { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "405 309"; + extent = "80 38"; + minExtent = "32 38"; + visible = "1"; + command = "ForumsNext();"; + accelerator = "s"; + helpTag = "0"; + text = "NEXT"; + simpleStyle = "0"; + }; + new ShellBitmapButton(FO_PreviousBtn) { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "340 309"; + extent = "80 38"; + minExtent = "32 38"; + visible = "1"; + command = "ForumsPrevious();"; + accelerator = "w"; + helpTag = "0"; + text = "PREVIOUS"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "470 309"; + extent = "115 38"; + minExtent = "32 38"; + visible = "1"; + command = "ForumsGoTopics();"; + accelerator = "backspace"; + helpTag = "0"; + text = "BACK TO TOPICS"; + simpleStyle = "0"; + }; + }; + new GuiControl(ForumsTopicsPane) { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "15 26"; + extent = "580 349"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "right"; + vertSizing = "height"; + position = "7 16"; + extent = "161 291"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "0 2"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 6"; + extent = "137 279"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellTextList(ForumsList) { + profile = "ShellTextArrayProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "137 1908"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + enumerate = "1"; + resizeCell = "1"; + columns = "0"; + fitParentWidth = "1"; + clipColumnText = "0"; + forum = "58"; + }; + }; + }; + new ShellFancyArrayScrollCtrl() { + profile = "ShellServerBrowserProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "166 1"; + extent = "418 306"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + fixedHorizontal = "1"; + vertSpacerBitmap = "gui/shll_vertspacer"; + horzSpacerBitmap = "gui/shll_horzspacer"; + + new VirtualScrollCtrl() { + profile = "ShellServerBrowserProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "344 16"; + extent = "74 290"; + minExtent = "8 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "0"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "0 3"; + + new VirtualScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 7"; + extent = "50 276"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiControl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "52 1161"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + }; + }; + }; + new ShellFancyTextList(ForumsTopicsList) { + profile = "ShellServerBrowserProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "398 302"; + minExtent = "8 20"; + visible = "1"; + altCommand = "ForumsOpenThread();"; + helpTag = "0"; + startScrollRegion = "3 0"; + headerBitmap = "gui/server_tabs"; + sortArrowBitmap = "gui/shll_sortarrow"; + fieldBase = "gui/shll_field"; + barBase = "gui/shll_bar"; + glowOffset = "4"; + rowHeight = "19"; + headerFontType = "Univers Condensed"; + headerFontSize = "16"; + headerFontColor = "8 19 6 255"; + headerFontColorHL = "25 68 56 255"; + separatorColor = "192 192 192 255"; + drawSeparators = "0"; + headerSort = "1"; + allowReposition = "0"; + key = "43"; + state = "lines"; + selId = "0"; + count = "0"; + refreshFlag = "0"; + forum = "0"; + autoSelect = "1"; + FirstCount = "0"; + }; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 3"; + extent = "47 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "FORUMS"; + maxLength = "255"; + }; + new ShellBitmapButton(FM_NewTopic) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "160 300"; + extent = "90 38"; + minExtent = "32 38"; + visible = "1"; + command = "ForumsNewTopic();"; + helpTag = "0"; + text = "NEW TOPIC"; + simpleStyle = "0"; + }; + new ShellBitmapButton(FM_TopThreads) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "234 300"; + extent = "117 38"; + minExtent = "32 38"; + visible = "1"; + command = "ForumsRefreshTopics();"; + helpTag = "0"; + text = "REFRESH TOPICS"; + simpleStyle = "0"; + }; + new ShellBitmapButton(FM_NextThreads) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "406 309"; + extent = "90 38"; + minExtent = "32 38"; + visible = "0"; + command = "ForumsGoTopics(1);"; + helpTag = "0"; + text = "NEXT TOPICS"; + simpleStyle = "0"; + }; + new ShellBitmapButton(FM_PrevThreads) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "324 309"; + extent = "90 38"; + minExtent = "32 38"; + visible = "0"; + command = "ForumsGoTopics(2);"; + helpTag = "0"; + text = "PREV TOPICS"; + simpleStyle = "0"; + }; + new ShellBitmapButton(RForumsBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "1 300"; + extent = "118 38"; + minExtent = "32 38"; + visible = "1"; + command = "GetForumsList();"; + helpTag = "0"; + text = "REFRESH FORUMS"; + simpleStyle = "0"; + }; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/FrameOverlayGui.gui b/base/gui/FrameOverlayGui.gui new file mode 100644 index 0000000..7cb0feb --- /dev/null +++ b/base/gui/FrameOverlayGui.gui @@ -0,0 +1,28 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(FrameOverlayGui) { + profile = "GuiModelessDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "false"; + helpTag = "0"; + + new GuiConsoleTextCtrl(TextOverlayControl) { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "5 5"; + extent = "15 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + helpTag = "0"; + expression = "10"; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/GameGui.gui b/base/gui/GameGui.gui new file mode 100644 index 0000000..bc15aca --- /dev/null +++ b/base/gui/GameGui.gui @@ -0,0 +1,872 @@ +//--- OBJECT WRITE BEGIN --- +new GuiChunkedBitmapCtrl(GameGui) { + profile = "GuiContentProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + variable = "$ShellBackground"; + helpTag = "0"; + useVariable = "1"; + + new ShellPaneCtrl(GM_Frame) { + profile = "ShellPaneProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "12 46"; + extent = "620 390"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "GAME"; + noTitleBar = "0"; + + new ShellTabFrame(GM_TabFrame) { + profile = "ShellHorzTabFrameProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "22 54"; + extent = "576 254"; + minExtent = "26 254"; + visible = "1"; + helpTag = "0"; + isVertical = "0"; + useCloseButton = "0"; + edgeInset = "0"; + }; + new ShellTabGroupCtrl(GM_TabView) { + profile = "TabGroupProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "30 25"; + extent = "560 29"; + minExtent = "38 29"; + visible = "1"; + helpTag = "0"; + glowOffset = "7"; + tabSpacing = "2"; + maxTabWidth = "150"; + stretchToFit = "0"; + }; + new GuiControl(GM_JoinPane) { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "31 62"; + extent = "558 312"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "BrowserFilterLabelProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "5 2"; + extent = "39 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "FILTER:"; + }; + new GuiControl() { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "48 2"; + extent = "104 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiTextCtrl(GMJ_FilterText) { + profile = "BrowserFilterTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "8 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + }; + }; + new GuiTextCtrl(GMJ_StatusText) { + profile = "BrowserStatusTextProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "157 2"; + extent = "190 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Status Text..."; + }; + new GuiProgressCtrl(GMJ_ProgressBar) { + profile = "BrowserProgressProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "354 4"; + extent = "200 14"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + }; + new ShellFancyArrayScrollCtrl() { + profile = "ShellServerBrowserProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 18"; + extent = "558 260"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + fixedHorizontal = "0"; + vertSpacerBitmap = "gui/shll_vertspacer"; + horzSpacerBitmap = "gui/shll_horzspacer"; + + new VirtualScrollCtrl() { + profile = "ShellServerBrowserProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "195 16"; + extent = "363 244"; + minExtent = "8 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "0"; + hScrollBar = "alwaysOn"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "0 0"; + + new VirtualScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 4"; + extent = "339 220"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiControl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "769 8"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + }; + }; + }; + new GuiServerBrowser(GMJ_Browser) { + profile = "ShellServerBrowserProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "538 239"; + minExtent = "8 20"; + visible = "1"; + altCommand = "Canvas.pushDialog(ServerInfoDlg);"; + helpTag = "0"; + startScrollRegion = "1 0"; + headerBitmap = "gui/server_tabs"; + sortArrowBitmap = "gui/shll_sortarrow"; + barBase = "gui/shll_bar"; + glowOffset = "4"; + rowHeight = "19"; + headerFontType = "Univers Condensed"; + headerFontSize = "16"; + headerFontColor = "8 19 6 255"; + headerFontColorHL = "25 68 56 255"; + separatorColor = "192 192 192 255"; + drawSeparators = "0"; + headerSort = "1"; + allowReposition = "1"; + iconBase = "gui/shll_icon"; + }; + }; + new ShellBitmapButton(GMJ_FilterBtn) { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "38 273"; + extent = "110 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.pushDialog(ChooseFilterDlg);"; + helpTag = "0"; + text = "CHANGE FILTER"; + simpleStyle = "0"; + }; + new ShellBitmapButton(GMJ_RefreshListBtn) { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "140 273"; + extent = "110 38"; + minExtent = "32 38"; + visible = "1"; + command = "GMJ_Browser.runQuery();"; + helpTag = "0"; + text = "REFRESH LIST"; + simpleStyle = "0"; + }; + new ShellBitmapButton(GMJ_RefreshServerBtn) { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "242 273"; + extent = "110 38"; + minExtent = "32 38"; + visible = "1"; + command = "GMJ_Browser.refreshSelectedServer();"; + helpTag = "0"; + text = "REFRESH SERVER"; + simpleStyle = "0"; + }; + new ShellBitmapButton(GMJ_InfoBtn) { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "344 273"; + extent = "110 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.pushDialog(ServerInfoDlg);"; + helpTag = "0"; + text = "SERVER INFO"; + simpleStyle = "0"; + }; + new ShellBitmapButton(GMJ_JoinBtn) { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "446 273"; + extent = "110 38"; + minExtent = "32 38"; + visible = "1"; + command = "JoinSelectedGame();"; + helpTag = "0"; + text = "JOIN GAME"; + simpleStyle = "0"; + }; + }; + new GuiControl(GM_HostPane) { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "31 62"; + extent = "558 312"; + minExtent = "8 8"; + visible = "0"; + helpTag = "0"; + + new GuiControl() { + profile = "GuiDefaultProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "0 0"; + extent = "558 312"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "34 13"; + extent = "60 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Game Type:"; + }; + new ShellPopupMenu(GMH_MissionType) { + profile = "ShellPopupProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "90 4"; + extent = "165 36"; + minExtent = "49 36"; + visible = "1"; + helpTag = "0"; + text = "GAME TYPE"; + maxPopupHeight = "200"; + buttonBitmap = "gui/shll_pulldown"; + rolloverBarBitmap = "gui/shll_pulldownbar_rol"; + selectedBarBitmap = "gui/shll_pulldownbar_act"; + noButtonStyle = "0"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "35 40"; + extent = "75 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Mission Name:"; + }; + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "right"; + vertSizing = "height"; + position = "31 54"; + extent = "218 251"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "dynamic"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "0 2"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 6"; + extent = "210 239"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellTextList(GMH_MissionList) { + profile = "ShellTextArrayProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "210 8"; + minExtent = "8 8"; + visible = "1"; + altCommand = "tryToStartHostedGame();"; + helpTag = "0"; + enumerate = "1"; + resizeCell = "1"; + columns = "0"; + fitParentWidth = "1"; + clipColumnText = "0"; + }; + }; + }; + new GuiControl() { + profile = "GuiDefaultProfile"; + horizSizing = "relative"; + vertSizing = "bottom"; + position = "266 4"; + extent = "270 268"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "8 8"; + extent = "80 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Server Name:"; + }; + new ShellTextEditCtrl() { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "84 0"; + extent = "180 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$Host::GameName"; + helpTag = "0"; + historySize = "0"; + maxLength = "24"; + password = "0"; + glowOffset = "9 9"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "8 38"; + extent = "80 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Password:"; + }; + new ShellTextEditCtrl() { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "84 30"; + extent = "180 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$Host::Password"; + helpTag = "0"; + historySize = "0"; + maxLength = "16"; + password = "0"; + glowOffset = "9 9"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "8 68"; + extent = "80 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Max Players:"; + }; + new ShellTextEditCtrl(GMH_MaxPlayersTE) { + profile = "NewTextEditNumericProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "84 60"; + extent = "180 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$Host::MaxPlayers"; + helpTag = "0"; + validate = "validateMaxPlayers();"; + historySize = "0"; + maxLength = "3"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellBitmapButton(GMH_AdvancedBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "84 96"; + extent = "180 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.pushDialog(AdvancedHostDlg);"; + helpTag = "0"; + text = "ADVANCED OPTIONS"; + simpleStyle = "0"; + }; + new ShellToggleButton(GMH_BotsEnabledTgl) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "88 132"; + extent = "167 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$Host::BotsEnabled"; + helpTag = "0"; + text = "ENABLE BOTS"; + }; + new GuiControl(GMH_EnableBotsGroup) { + profile = "GuiDefaultProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "1 157"; + extent = "270 105"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "11 5"; + extent = "90 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Number of Bots:"; + }; + new GuiTextCtrl(GMH_BotCountText) { + profile = "ShellAltTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "107 6"; + extent = "16 20"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "(0)"; + }; + new ShellSliderCtrl(GMH_MinCombatantSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "79 20"; + extent = "185 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + altCommand = "setMinCombatants();"; + helpTag = "0"; + range = "0.000000 1.000000"; + ticks = "15"; + value = "0.333333"; + usePlusMinus = "1"; + }; + new GuiTextCtrl(GMH_BotDiffText) { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "11 45"; + extent = "90 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Bot Difficulty:"; + }; + new GuiTextCtrl(GMH_BotMinText) { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "31 63"; + extent = "42 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Min:"; + }; + new ShellSliderCtrl(GMH_BotMinSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "79 60"; + extent = "185 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + altCommand = "updateMinBotDifficulty();"; + helpTag = "0"; + range = "0.000000 0.990000"; + ticks = "1000"; + value = "0.99"; + usePlusMinus = "1"; + }; + new GuiTextCtrl(GMH_BotMaxText) { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "31 86"; + extent = "42 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Max:"; + }; + new ShellSliderCtrl(GMH_BotMaxSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "79 83"; + extent = "185 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + altCommand = "updateMaxBotDifficulty();"; + helpTag = "0"; + range = "0.000000 0.990000"; + ticks = "1000"; + value = "0.99"; + usePlusMinus = "1"; + }; + }; + }; + new ShellBitmapButton(GMH_StartGameBtn) { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "350 273"; + extent = "180 38"; + minExtent = "32 38"; + visible = "1"; + command = "StartHostedGame();"; + helpTag = "0"; + text = "START GAME"; + simpleStyle = "0"; + }; + }; + }; + new GuiControl(GM_WarriorPane) { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "31 62"; + extent = "558 312"; + minExtent = "8 8"; + visible = "0"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "9 12"; + extent = "74 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Warrior:"; + }; + new ShellPopupMenu(GMW_WarriorPopup) { + profile = "ShellPopupProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "80 3"; + extent = "200 38"; + minExtent = "49 36"; + visible = "1"; + helpTag = "0"; + text = "Select Warrior"; + maxPopupHeight = "200"; + buttonBitmap = "gui/shll_pulldown"; + rolloverBarBitmap = "gui/shll_pulldownbar_rol"; + selectedBarBitmap = "gui/shll_pulldownbar_act"; + noButtonStyle = "0"; + }; + new GuiControl() { + profile = "GuiDefaultProfile"; + horizSizing = "left"; + vertSizing = "center"; + position = "290 6"; + extent = "257 300"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellBitmapButton(GMW_PlayerPageBtn) { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "94 12"; + extent = "152 38"; + minExtent = "32 38"; + visible = "1"; + command = "GM_WarriorPane.gotoPlayerPage();"; + helpTag = "0"; + text = "JUMP TO PLAYER PAGE"; + simpleStyle = "0"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "18 63"; + extent = "80 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Race/Gender:"; + }; + new ShellPopupMenu(GMW_RaceGenderPopup) { + profile = "ShellPopupProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "95 54"; + extent = "152 38"; + minExtent = "49 36"; + visible = "1"; + helpTag = "0"; + text = "Select Race/Gender"; + maxPopupHeight = "200"; + buttonBitmap = "gui/shll_pulldown"; + rolloverBarBitmap = "gui/shll_pulldownbar_rol"; + selectedBarBitmap = "gui/shll_pulldownbar_act"; + noButtonStyle = "0"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "18 99"; + extent = "80 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Skin:"; + }; + new ShellPopupMenu(GMW_SkinPopup) { + profile = "ShellPopupProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "95 90"; + extent = "152 38"; + minExtent = "49 36"; + visible = "1"; + helpTag = "0"; + text = "Select Skin"; + maxPopupHeight = "200"; + buttonBitmap = "gui/shll_pulldown"; + rolloverBarBitmap = "gui/shll_pulldownbar_rol"; + selectedBarBitmap = "gui/shll_pulldownbar_act"; + noButtonStyle = "0"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "18 136"; + extent = "80 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Voice:"; + }; + new ShellPopupMenu(GMW_VoicePopup) { + profile = "ShellPopupProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "95 127"; + extent = "152 38"; + minExtent = "49 36"; + visible = "1"; + helpTag = "0"; + text = "Select Voice"; + maxPopupHeight = "200"; + buttonBitmap = "gui/shll_pulldown"; + rolloverBarBitmap = "gui/shll_pulldownbar_rol"; + selectedBarBitmap = "gui/shll_pulldownbar_act"; + noButtonStyle = "0"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "114 168"; + extent = "100 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Test Voice:"; + }; + new ShellBitmapButton(GMW_VoiceTestBtn) { + profile = "SoundTestButtonProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "214 165"; + extent = "24 24"; + minExtent = "24 24"; + visible = "1"; + command = "GMW_VoicePopup.test();"; + helpTag = "0"; + simpleStyle = "1"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "94 206"; + extent = "152 38"; + minExtent = "32 38"; + visible = "1"; + command = "GM_WarriorPane.createNewAlias();"; + helpTag = "0"; + text = "NEW ALIAS"; + simpleStyle = "0"; + }; + new ShellBitmapButton(GMW_DeleteWarriorBtn) { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "94 243"; + extent = "152 38"; + minExtent = "32 38"; + visible = "1"; + command = "GM_WarriorPane.deleteWarrior();"; + helpTag = "0"; + text = "DELETE ALIAS"; + simpleStyle = "0"; + }; + }; + new ShellFieldCtrl() { + profile = "ShellFieldProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "25 41"; + extent = "261 263"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new GuiPlayerView(GMW_PlayerModel) { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "1 1"; + extent = "259 261"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + }; + new ShellRadioButton(GMW_LightRdo) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "0 176"; + extent = "80 30"; + minExtent = "26 27"; + visible = "1"; + command = "GMW_PlayerModel.update();"; + helpTag = "0"; + text = "LIGHT"; + groupNum = "1"; + }; + new ShellRadioButton(GMW_MediumRdo) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "0 206"; + extent = "80 30"; + minExtent = "26 27"; + visible = "1"; + command = "GMW_PlayerModel.update();"; + helpTag = "0"; + text = "MEDIUM"; + groupNum = "1"; + }; + new ShellRadioButton(GMW_HeavyRdo) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "0 236"; + extent = "80 30"; + minExtent = "26 27"; + visible = "1"; + command = "GMW_PlayerModel.update();"; + helpTag = "0"; + text = "HEAVY"; + groupNum = "1"; + }; + }; + }; + new GuiTextCtrl(GM_VersionText) { + profile = "VersionTextProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "396 4"; + extent = "160 20"; + minExtent = "8 8"; + visible = "0"; + helpTag = "0"; + text = ""; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/GenDialog.gui b/base/gui/GenDialog.gui new file mode 100644 index 0000000..546910c --- /dev/null +++ b/base/gui/GenDialog.gui @@ -0,0 +1,111 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(GenDialog) { + profile = "ShellWindowProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellDlgFrame() { + profile = "ShellDlgProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "185 93"; + extent = "317 271"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "EDITOR"; + + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "169 229"; + extent = "79 38"; + minExtent = "32 38"; + visible = "1"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "233 229"; + extent = "79 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.PopDIalog(\"GenDialog\");"; + helpTag = "0"; + text = "OK"; + simpleStyle = "0"; + }; + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "9 53"; + extent = "298 180"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 4"; + extent = "274 172"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellFancyTextList() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "289 26"; + minExtent = "8 20"; + visible = "1"; + helpTag = "0"; + startScrollRegion = "0 0"; + headerBitmap = "gui/server_tabs"; + sortArrowBitmap = "gui/shll_sortarrow"; + barBase = "gui/shll_bar"; + glowOffset = "4"; + rowHeight = "17"; + headerFontColor = "8 19 6 255"; + headerFontColorHL = "25 68 56 255"; + separatorColor = "192 192 192 255"; + drawSeparators = "0"; + headerSort = "1"; + allowReposition = "0"; + }; + }; + }; + new GuiTextCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "16 40"; + extent = "286 17"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "TRIBE"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/GuiEditorGui.gui b/base/gui/GuiEditorGui.gui new file mode 100644 index 0000000..1ed3898 --- /dev/null +++ b/base/gui/GuiEditorGui.gui @@ -0,0 +1,434 @@ +//---------------------------------------------------------------- + +new GuiControlProfile (HotPinkProfile) +{ + opaque = true; + fillColor = "255 128 128"; + border = true; + borderColor = "255 128 128"; + fontType = "Arial"; + fontSize = 12; + fontColor = "0 0 0"; + fontColorHL = "32 100 100"; + fixedExtent = true; + justify = "center"; +}; + +new GuiControl(GuiEditorGui) { + profile = GuiDefaultProfile; + position = "0 0"; + extent = "800 600"; + + new GuiControl() // pink background + { + profile = HotPinkProfile; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + }; + new GuiControl(GuiEditorContent) + { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + }; + new GuiEditCtrl(GuiEditor) + { + profile = "GuiTextEditProfile"; // so it's tabable + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + }; + new GuiFrameSetCtrl() + { + position = "640 0"; + extent = "160 600"; + profile = "GuiButtonProfile"; + horizSizing = "width"; + vertSizing = "height"; + columns = "0"; + rows = "0 300"; + + new GuiScrollCtrl() // tree view + { + profile = "GuiScrollCtrlProfile"; + position = "0 0"; + extent = "160 300"; + horizSizing = "width"; + vertSizing = "height"; + vScrollBar = "alwaysOn"; + hScrollBar = "dynamic"; + + new GuiScrollContentCtrl() + { + profile = "GuiScrollContentProfile"; + + new GuiTreeView (GuiEditorTreeView) + { + profile = "GuiTreeViewProfile"; + position = "0 0"; + horizSizing = "width"; + }; + }; + }; + new GuiControl() { // inspector + profile = "GuiButtonProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "160 300"; + + new GuiButtonCtrl () { + profile = "GuiButtonProfile"; + position = "4, 4"; + extent = "40 16"; + font = "12 252 Arial"; + fontHL = "12 253 Arial"; + text = "APPLY"; + command = "GuiEditorInspectApply();"; + fillColor = "249"; + borderColor = "249"; + selectBorderColor = "255"; + }; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + position = "52 4"; + extent = "30 16"; + font = "12 244 Arial"; + text = "Name:"; + }; + + new GuiTextEditCtrl (GuiEditorInspectName) { + profile = "GuiTextEditProfile"; + position = "84 3"; + extent = "72 18"; + text = ""; + horizSizing = "width"; + vertSizing = "bottom"; + }; + + new GuiScrollCtrl() { + profile = "GuiScrollCtrlProfile"; + position = "0 24"; + extent = "160 276"; + horizSizing = "width"; + vertSizing = "height"; + vScrollBar = "alwaysOn"; + hScrollBar = "alwaysOff"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + extent = "140 274"; + horizSizing = "width"; + vertSizing = "height"; + + new GuiInspector (GuiEditorInspectFields) { + profile = "GuiDefaultProfile"; + position = "0 0"; + extent = "140 0"; + horizSizing = "width"; + vertSizing = "bottom"; + }; + }; + }; + }; + }; + // toolbar + new GuiControl() { + profile = "GuiWindowProfile"; + horizSizing = "right"; + vertSizing = "height"; + position = "0 480"; + extent = "640 120"; + + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + position = "4 24"; + extent = "70 16"; + text = "Align Left"; + command = "GuiEditor.Justify(0);"; + }; + + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + position = "80 24"; + extent = "70 16"; + text = "Align Right"; + command = "GuiEditor.Justify(2);"; + }; + + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + position = "156 24"; + extent = "70 16"; + text = "Center Horiz"; + command = "GuiEditor.Justify(1);"; + }; + + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + position = "232 24"; + extent = "70 16"; + text = "Align Top"; + command = "GuiEditor.Justify(3);"; + }; + + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + position = "308 24"; + extent = "70 16"; + text = "Align Bottom"; + command = "GuiEditor.Justify(4);"; + }; + new GuiControlListPopup(GuiEditorClassPopup) + { + profile = "GuiButtonProfile"; + position = "382 24"; + extent = "180 16"; + }; + new GuiPopUpMenuCtrl(GuiEditorContentList) + { + profile = "GuiButtonProfile"; + position = "382 44"; + extent = "180 16"; + }; + new GuiButtonCtrl () { + profile = "GuiButtonProfile"; + position = "570 24"; + extent = "60 16"; + text = "New..."; + command = "GuiEditorStartCreate();"; + }; + new GuiButtonCtrl () { + profile = "GuiButtonProfile"; + position = "570 44"; + extent = "60 16"; + text = "Save"; + command = "GuiEditorSaveGui();"; + }; + new GuiButtonCtrl ("GuiEditorButtonToggle") { + profile = "GuiButtonProfile"; + position = "4 44"; + extent = "70 16"; + text = "Stop Edit"; + command = "GuiEdit();"; + }; + + new GuiButtonCtrl () { + profile = "GuiButtonProfile"; + position = "80 44"; + extent = "70 16"; + text = "Space Vert"; + command = "GuiEditor.Justify(5);"; + }; + + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + position = "156 44"; + extent = "70 16"; + text = "Space Horiz"; + command = "GuiEditor.Justify(6);"; + }; + + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + position = "232 44"; + extent = "70 16"; + text = "Bring Front"; + command = "GuiEditor.BringToFront();"; + }; + + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + position = "308 44"; + extent = "70 16"; + text = "Send Back"; + command = "GuiEditor.PushToBack();"; + }; + }; +}; + +new GuiControl(NewGuiDialog) +{ + profile = "GuiDialogProfile"; + position = "0 0"; + extent = "640 480"; + + new GuiWindowCtrl() + { + profile = "GuiWindowProfile"; + position = "220 146"; + extent = "200 188"; + text = "Create new GUI"; + canMove = "false"; + canClose = "false"; + canMinimize = "false"; + canMaximize = "false"; + horizSizing = "center"; + vertSizing = "center"; + + new GuiTextCtrl() + { + profile = "GuiTextProfile"; + position = "20 28"; + text = "GUI Name:"; + }; + new GuiTextEditCtrl(NewGuiDialogName) + { + profile = "GuiTextEditProfile"; + position = "20 44"; + extent = "160 20"; + }; + new GuiTextCtrl() + { + profile = "GuiTextProfile"; + position = "20 68"; + text = "Class:"; + }; + new GuiControlListPopup(NewGuiDialogClass) + { + profile = "GuiTextEditProfile"; + position = "20 84"; + extent = "160 20"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + position = "56 156"; + extent = "40 16"; + text = "Create"; + command = "GuiEditorCreate();"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + position = "104 156"; + extent = "40 16"; + text = "Cancel"; + command = "Canvas.popDialog(NewGuiDialog);"; + }; + }; +}; + +function GuiEditorStartCreate() +{ + NewGuiDialogClass.setText("GuiControl"); + NewGuiDialogClass.sort(); + NewGuiDialogName.setValue("NewGui"); + Canvas.pushDialog(NewGuiDialog); +} + +function GuiEditorCreate() +{ + %name = NewGuiDialogName.getValue(); + %class = NewGuiDialogClass.getText(); + Canvas.popDialog(NewGuiDialog); + %obj = eval("return new " @ %class @ "(" @ %name @ ");"); + GuiEditorOpen(%obj); +} + +function GuiEditorSaveGui() +{ + %obj = GuiEditorContent.getObject(0); + if(%obj == -1 || %obj.getName() $= "") + return; + %obj.save("gui/" @ %obj.getName() @ ".gui"); +} + +function GuiEdit(%val) +{ + if(%val != 0) + return; + + %content = Canvas.getContent(); + + if(%content == GuiEditorGui.getId()) + { + //GlobalActionMap.bind(mouse, button1, mouselook); + + %obj = GuiEditorContent.getObject(0); + if(%obj != -1) + { + GuiGroup.add(%obj); + Canvas.setContent(%obj); + } + } + else + { + //GlobalActionMap.unbind(mouse, button1); + GuiEditorOpen(%content); + } +} + +function GuiEditorOpen(%content) +{ + Canvas.setContent(GuiEditorGui); + while((%obj = GuiEditorContent.getObject(0)) != -1) + GuiGroup.add(%obj); // get rid of anything being edited + + %i = 0; + GuiEditorContentList.clear(); + while((%obj = GuiGroup.getObject(%i)) != -1) + { + if(%obj.getName() !$= Canvas) + { + if(%obj.getName() $= "") + %name = "(unnamed) - " @ %obj; + else + %name = %obj.getName() @ " - " @ %obj; + + GuiEditorContentList.add(%name, %obj); + } + %i++; + } + GuiEditorContent.add(%content); + GuiEditorContentList.sort(); + GuiEditorClassPopup.sort(); + + if(%content.getName() $= "") + %name = "(unnamed) - " @ %content; + else + %name = %content.getName() @ " - " @ %content; + + GuiEditorContentList.setText(%name); + GuiEditorClassPopup.setText("New Control"); + GuiEditor.setRoot(%content); + %content.resize(0,0,640,480); + GuiEditorTreeView.open(%content); +} + +function GuiEditorContentList::onSelect(%this, %id) +{ + GuiEditorOpen(%id); +} + +function GuiEditorClassPopup::onSelect(%this, %id) +{ + %class = %this.getText(); + %obj = eval("return new " @ %class @ "();"); + GuiEditor.addNewCtrl(%obj); + GuiEditorClassPopup.setText("New Control"); +} + +function GuiEditorTreeView::onSelect(%this, %obj) +{ + GuiEditorInspectFields.inspect(%obj); + GuiEditorInspectName.setValue(%obj.getName()); + GuiEditor.select(%obj); +} + +function GuiEditorInspectApply() +{ + GuiEditorInspectFields.apply(GuiEditorInspectName.getValue()); +} + +function GuiEditor::onSelect(%this, %ctrl) +{ + GuiEditorInspectFields.inspect(%ctrl); + GuiEditorInspectName.setValue(%ctrl.getName()); +} + +GlobalActionMap.bind(keyboard, "alt f1", GuiEdit); diff --git a/base/gui/GuiTestGui.gui b/base/gui/GuiTestGui.gui new file mode 100644 index 0000000..6744c3d --- /dev/null +++ b/base/gui/GuiTestGui.gui @@ -0,0 +1,496 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(GuiTestGui) { + profile = "GuiContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 440"; + extent = "100 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "canvas.setContent(TestGui);"; + helpTag = "0"; + text = "BACK"; + }; + new GuiWindowCtrl() { + profile = "GuiWindowProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 7"; + extent = "622 430"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "GuiWindowCtrl test"; + resizeWidth = "1"; + resizeHeight = "1"; + canMove = "1"; + canClose = "1"; + canMinimize = "1"; + canMaximize = "1"; + minSize = "50 50"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 40"; + extent = "74 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "GuiTextCtrl test"; + }; + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 80"; + extent = "200 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "GuiTextEditCtrl test"; + historySize = "5"; + maxLength = "255"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 120"; + extent = "120 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "GuiButtonCtrl test"; + }; + new GuiRadioCtrl() { + profile = "GuiRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "230 160"; + extent = "125 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "$TestRadio = 1;"; + helpTag = "0"; + text = "GuiRadioCtrl1 test"; + groupNum = "1"; + }; + new GuiRadioCtrl() { + profile = "GuiRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "230 190"; + extent = "125 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "$TestRadio = 2;"; + helpTag = "0"; + text = "GuiRadioCtrl2 test"; + groupNum = "1"; + }; + new GuiRadioCtrl() { + profile = "GuiRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "230 220"; + extent = "125 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "$TestRadio = 3;"; + helpTag = "0"; + text = "GuiRadioCtrl3 test"; + groupNum = "1"; + }; + new GuiCheckBoxCtrl() { + profile = "GuiRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "230 270"; + extent = "125 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "CheckBoxCtrl1 test"; + }; + new GuiCheckBoxCtrl() { + profile = "GuiRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "230 300"; + extent = "125 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "CheckBoxCtrl2 test"; + }; + new GuiCheckBoxCtrl() { + profile = "GuiRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "230 330"; + extent = "125 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "CheckBoxCtrl3 test"; + }; + new GuiPopUpMenuCtrl(Menu1) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "230 35"; + extent = "125 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Menu1"; + maxPopupHeight = "200"; + }; + new GuiPopUpMenuCtrl(Menu2) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "360 35"; + extent = "125 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Menu2"; + maxPopupHeight = "200"; + }; + new GuiPopUpMenuCtrl(Menu3) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "230 375"; + extent = "125 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Menu3"; + maxPopupHeight = "200"; + }; + new GuiTextEditSliderCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "166 133"; + extent = "104 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "50"; + historySize = "0"; + maxLength = "255"; + format = "%3.2f"; + range = "0 100"; + increment = "1"; + }; + new GuiScrollCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 160"; + extent = "200 200"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOn"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + + new GuiScrollContentCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "1 1"; + extent = "180 180"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiArrayCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "400 400"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + }; + }; + }; + new GuiScrollCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "371 252"; + extent = "238 170"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "dynamic"; + vScrollBar = "dynamic"; + constantThumbHeight = "0"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "1 1"; + extent = "236 168"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiMLTextEditCtrl() { + profile = "GuiBigTextProfileWhite"; + horizSizing = "width"; + vertSizing = "top"; + position = "0 0"; + extent = "208 23"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + lineSpacing = "0"; + }; + }; + }; + new GuiScrollCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "376 61"; + extent = "239 188"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "dynamic"; + constantThumbHeight = "0"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "1 1"; + extent = "237 186"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiMessageVectorCtrl(GMVControl) { + profile = "GuiBigTextProfileWhite"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "215 35"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + lineSpacing = "0"; + lineContinuedIndex = "5"; + allowedMatches[0] = "http"; + allowedMatches[1] = "t2server"; + matchColor = "0 0 1 1"; + textColors1 = "1 0 0 1"; + textColors5 = "1 0 1 1"; + textColors9 = "0 0.5 0 1"; + textColors2 = "0 1 0 1"; + textColors6 = "0 1 1 1"; + textColors3 = "0 0 1 1"; + textColors7 = "1 1 1 1"; + textColors0 = "0 0 0 1"; + textColors4 = "1 1 0 1"; + textColors8 = "0.5 0 0 1"; + }; + }; + }; + }; +}; +//--- OBJECT WRITE END --- +Menu1.add(TestData0, 0); +Menu1.add(TestData1, 1); +Menu1.add(TestData2, 2); +Menu1.add(TestData3, 3); +Menu1.add(TestData4, 4); +Menu1.add(TestData5, 5); +Menu1.add(TestData6, 6); +Menu1.add(TestData7, 7); +Menu1.add(TestData8, 8); +Menu1.add(TestData9, 9); +Menu1.add(TestData10,10); +Menu1.add(TestData11,11); +Menu1.add(TestData12,12); +Menu1.add(TestData13,13); +Menu1.add(TestData14,14); +Menu1.add(TestData15,15); +Menu1.add(TestData16,16); +Menu1.add(TestData17,17); +Menu1.add(TestData18,18); +Menu1.add(TestData19,19); +Menu1.add(TestData20,20); +Menu1.add(TestData21,21); +Menu1.add(TestData22,22); +Menu1.add(TestData23,23); +Menu1.add(TestData24,24); +Menu1.add(TestData25,25); +Menu1.add(TestData26,26); +Menu1.add(TestData27,27); +Menu1.add(TestData28,28); +Menu1.add(TestData29,29); +Menu1.add(TestData30,30); +Menu1.add(TestData31,31); +Menu1.add(TestData32,32); +Menu1.add(TestData33,33); +Menu1.add(TestData34,34); +Menu1.add(TestData35,35); +Menu1.add(TestData36,36); +Menu1.add(TestData37,37); +Menu1.add(TestData38,38); +Menu1.add(TestData39,39); +Menu1.add(TestData40,40); +Menu1.add(TestData41,41); +Menu1.add(TestData42,42); +Menu1.add(TestData43,43); +Menu1.add(TestData44,44); +Menu1.add(TestData45,45); + +Menu2.add(TestData1, 0); +Menu2.add(TestData2, 1); +Menu2.add(TestData3, 2); +Menu2.add(TestData4, 3); +Menu2.add(TestData5, 4); +Menu2.add(TestData6, 5); +Menu2.add(TestData7, 6); + +Menu3.add(TestData0, 0); +Menu3.add(TestData1, 1); +Menu3.add(TestData2, 2); +Menu3.add(TestData3, 3); +Menu3.add(TestData4, 4); +Menu3.add(TestData5, 5); +Menu3.add(TestData6, 6); +Menu3.add(TestData7, 7); +Menu3.add(TestData8, 8); +Menu3.add(TestData9, 9); +Menu3.add(TestData10,10); +Menu3.add(TestData11,11); +Menu3.add(TestData12,12); +Menu3.add(TestData13,13); +Menu3.add(TestData14,14); +Menu3.add(TestData15,15); +Menu3.add(TestData16,16); +Menu3.add(TestData17,17); +Menu3.add(TestData18,18); +Menu3.add(TestData19,19); +Menu3.add(TestData20,20); +Menu3.add(TestData21,21); +Menu3.add(TestData22,22); +Menu3.add(TestData23,23); +Menu3.add(TestData24,24); +Menu3.add(TestData25,25); +Menu3.add(TestData26,26); +Menu3.add(TestData27,27); +Menu3.add(TestData28,28); +Menu3.add(TestData29,29); +Menu3.add(TestData30,30); +Menu3.add(TestData31,31); +Menu3.add(TestData32,32); +Menu3.add(TestData33,33); +Menu3.add(TestData34,34); +Menu3.add(TestData35,35); +Menu3.add(TestData36,36); +Menu3.add(TestData37,37); +Menu3.add(TestData38,38); +Menu3.add(TestData39,39); +Menu3.add(TestData40,40); +Menu3.add(TestData41,41); +Menu3.add(TestData42,42); +Menu3.add(TestData43,43); +Menu3.add(TestData44,44); +Menu3.add(TestData45,45); + +$mvid1 = new MessageVector(); +$mvid1.pushBackLine("a URL: http://www.test.com/other not part of the url", 0); +$mvid1.pushBackLine("a server: t2server://5assedmonkey.com:8080/", 0); +$mvid1.pushBackLine("a server: http://t2server://malformed/", 0); +$mvid1.pushBackLine("a http://small server", 0); + +$mvid2 = new MessageVector(); +$mvid2.pushBackLine(" This is a completely separate text vector", 0); +$mvid2.pushBackLine("It contains no URLS, only two servers, t2server://5assedmonkey.com:28000/ and t2server://5assedmonkey.com:28001/", 0); +$mvid2.pushBackLine("It does contain a malformed URL: http://t2server://malformed/", 0); +$mvid2.pushBackLine("That URL should show up in http blue. The tribes server url should be in tribes server red.", 0); + +function GMVControl::urlClickCallback(%this, %url) +{ + echo("Overridden click callback"); + Parent::urlClickCallback(%this, %url); +} diff --git a/base/gui/HUDDlgs.gui b/base/gui/HUDDlgs.gui new file mode 100644 index 0000000..4b53457 --- /dev/null +++ b/base/gui/HUDDlgs.gui @@ -0,0 +1,367 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(InventoryScreen) { + profile = "GuiDialogProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl() { + profile = "ShellPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "45 12"; + extent = "550 443"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "INVENTORY"; + noTitleBar = "0"; + + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "center"; + vertSizing = "top"; + position = "205 388"; + extent = "140 38"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + command = "InventoryScreen.onDone();"; + text = "DONE"; + }; + new ShellFieldCtrl(INV_Root) { + profile = "GuiChatBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "29 36"; + extent = "492 351"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new ShellTabFrame() { + profile = "ShellTabFrameProfile"; + horizSizing = "left"; + vertSizing = "height"; + position = "207 9"; + extent = "254 333"; + minExtent = "254 26"; + visible = "1"; + helpTag = "0"; + isVertical = "1"; + useCloseButton = "0"; + edgeInset = "0"; + }; + }; + }; +}; +//--- OBJECT WRITE END --- + +//--- OBJECT WRITE BEGIN --- +new GuiControl(vehicleHud) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl() { + profile = "ShellPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "53 67"; + extent = "542 328"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "VEHICLE STATION"; + noTitleBar = "0"; + + new ShellFieldCtrl(VIN_Root) { + profile = "GuiChatBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "29 36"; + extent = "484 236"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new ShellTabFrame() { + profile = "ShellTabFrameProfile"; + horizSizing = "right"; + vertSizing = "height"; + position = "206 9"; + extent = "254 217"; + minExtent = "254 26"; + visible = "1"; + helpTag = "0"; + isVertical = "1"; + useCloseButton = "0"; + edgeInset = "0"; + }; + new HudBitmapCtrl(VIN_Picture) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "215 19"; + extent = "256 158"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + fillColor = "0.250000 0.250000 0.250000 1.000000"; + frameColor = "0.000000 1.000000 0.000000 1.000000"; + opacity = "1"; + autoCenter = "0"; + autoResize = "1"; + flipVertical = "0"; + flipHorizontal = "0"; + }; + new ShellFieldCtrl() { + profile = "GuiChatBackProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "220 183"; + extent = "133 29"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new GuiTextCtrl(VIN_RemainingText) { + profile = "ShellMediumTextCenterProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "8 5"; + extent = "117 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "3 Remaining"; + }; + }; + new ShellBitmapButton(VIN_BuyBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "356 180"; + extent = "124 38"; + minExtent = "32 38"; + visible = "1"; + command = "VehicleHud.onBuy();"; + helpTag = "0"; + text = "BUY"; + simpleStyle = "0"; + }; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "center"; + vertSizing = "top"; + position = "201 273"; + extent = "140 38"; + minExtent = "32 38"; + visible = "1"; + command = "VehicleHud.onCancel();"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- + +//--- OBJECT WRITE BEGIN --- +new GuiControl(ScoreScreen) { + profile = "GuiDialogProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl(ScoreParent) { + profile = "ShellPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "0 0"; + extent = "640 480"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "SCORE"; + noTitleBar = "0"; + + new ShellFieldCtrl(ScoreHeaderField) { + profile = "GuiChatBackProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "23 32"; + extent = "594 36"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextCtrl(ScoreHeaderText) { + profile = "ScoreHeaderTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 4"; + extent = "586 28"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + allowColorChars = "0"; + }; + }; + new ShellFieldCtrl(ScoreField) { + profile = "GuiChatBackProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "23 72"; + extent = "594 386"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextCtrl(ScoreSubheaderText) { + profile = "ScoreSubheaderTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 4"; + extent = "586 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + allowColorChars = "0"; + }; + new ShellScrollCtrl(ScoreScroll) { + profile = "NewScrollCtrlProfile"; + horizSizing = "right"; + vertSizing = "height"; + position = "1 26"; + extent = "592 358"; + minExtent = "24 24"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "dynamic"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "3 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "7 7"; + extent = "578 344"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiControl(ScoreContent) { + profile = "GuiScrollContentProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "586 8"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + }; + }; + }; + }; + }; +}; +//--- OBJECT WRITE END --- + +//--- OBJECT WRITE BEGIN --- +new GuiControl(MessageHud) +{ + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "0"; + + new ShellFieldCtrl(MessageHud_Frame) + { + profile = "GuiChatBackProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "120 375"; + extent = "400 24"; + minExtent = "8 8"; + visible = "1"; + + new GuiTextCtrl(MessageHud_Text) + { + profile = "GuiMessageEditHudTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 5"; + extent = "10 22"; + minExtent = "8 8"; + visible = "1"; + }; + + new GuiTextEditCtrl(MessageHud_Edit) + { + profile = "GuiMessageEditHudProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 5"; + extent = "10 22"; + minExtent = "8 8"; + visible = "1"; + altCommand = "$ThisControl.eval();"; + escapeCommand = "MessageHud_Edit.onEscape();"; + historySize = "5"; + maxLength = "120"; + }; + }; +}; +//--- OBJECT WRITE END --- + +//--- OBJECT WRITE BEGIN --- +new GuiControl(ChatMenuHudDlg) +{ + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "0"; + + new ShellFieldCtrl(ChatMenuHud) + { + profile = "GuiVMenuProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "8 209"; + extent = "143 0"; + minExtent = "8 8"; + visible = "1"; + }; +}; +//--- OBJECT WRITE END --- + diff --git a/base/gui/IHVTest.gui b/base/gui/IHVTest.gui new file mode 100644 index 0000000..b26825d --- /dev/null +++ b/base/gui/IHVTest.gui @@ -0,0 +1,259 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(IHVTest) { + profile = "GuiContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiScrollCtrl() { + profile = "GuiScrollCtrlProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "34 52"; + extent = "209 318"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "1"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "1 1"; + extent = "189 316"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiTextListCtrl(RecordingsList) { + profile = "GuiTextArrayProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "52 80"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + enumerate = "1"; + resizeCell = "1"; + columns = "0"; + }; + }; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "34 379"; + extent = "100 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "quit();"; + helpTag = "0"; + text = "Exit"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "143 379"; + extent = "100 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "IHVStartSelectedDemo();"; + helpTag = "0"; + text = "Start Demo"; + }; + new GuiTextCtrl() { + profile = "GuiBigTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "5 5"; + extent = "268 40"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "IHV Test Recordings"; + }; + new GuiCheckBoxCtrl(ArbMultitexture) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "290 52"; + extent = "235 24"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + variable = "$pref::OpenGL::disableARBMultitexture"; + helpTag = "0"; + text = "Disable ARB_multitexture"; + }; + new GuiCheckBoxCtrl(FogCoord) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "290 80"; + extent = "235 24"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + variable = "$pref::OpenGL::disableEXTFogCoord"; + helpTag = "0"; + text = "Disable EXT_fog_coord"; + }; + new GuiCheckBoxCtrl(TexEnvCombine) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "290 108"; + extent = "235 24"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + variable = "$pref::OpenGL::disableEXTTexEnvCombine"; + helpTag = "0"; + text = "Disable EXT_texture_env_combine"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "290 211"; + extent = "235 24"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "toggleFullscreen();"; + helpTag = "0"; + text = "Toggle Fullscreen"; + }; + new GuiCheckBoxCtrl(CVArray) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "290 136"; + extent = "235 24"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + variable = "$pref::OpenGL::disableEXTCompiledVertexArray"; + helpTag = "0"; + text = "Disable EXT_compiled_vertex_array"; + }; + new GuiCheckBoxCtrl(timedemo) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "290 239"; + extent = "235 24"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Timedemo style playback"; + }; + new GuiTextCtrl(DemoStats) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "245 286"; + extent = "325 24"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Last Demo: None"; + }; +}; +//--- OBJECT WRITE END --- + +function IHVTest::onWake(%gui) +{ + RecordingsList.clear(); + %search = "recordings/*.rec"; + %ct = 0; + for(%file = findFirstFile(%search); %file !$= ""; %file = findNextFile(%search)) + { + %fileName = fileBase(%file); + RecordingsList.addRow(%ct++, %fileName); + } + RecordingsList.sort(0); +} + +function IHVStartSelectedDemo() +{ + %sel = RecordingsList.getSelectedId(); + %file = RecordingsList.getRowTextById(%sel); + Canvas.setContent(PlayGui); + $TSControl::FrameCount = 0; + + playDemo("recordings/" @ %file @ ".rec"); +} + +function TexEnvCombine::onAction() +{ + $pref::OpenGL::disableEXTTexEnvCombine = !$pref::OpenGL::disableEXTTexEnvCombine; +} + +function FogCoord::onAction() +{ + $pref::OpenGL::disableEXTFogCoord = !$pref::OpenGL::disableEXTFogCoord; +} + +function CVArray::onAction() +{ + $pref::OpenGL::disableEXTCompiledVertexArray = !$pref::OpenGL::disableEXTCompiledVertexArray; +} + +function ARBMultitexture::onAction() +{ + $pref::OpenGL::disableARBMultitexture = !$pref::OpenGL::disableARBMultitexture; +} + +function timedemo::onAction() +{ + echo("here"); + + if ($timeAdvance == 0) { + $timeAdvance = 30; + } else { + $timeAdvance = 0; + } +} + +function resetDemoStats() +{ + %mspf = $Demo::playbackTime / $TSControl::frameCount; + %fps = 1000 / %mspf; + + DemoStats.setValue("Last Demo: " @ $TSControl::frameCount @ " frames, " @ %fps @ " fps (" @ %mspf @ " mspf)"); +} diff --git a/base/gui/ImmSplashDlg.gui b/base/gui/ImmSplashDlg.gui new file mode 100644 index 0000000..82fa116 --- /dev/null +++ b/base/gui/ImmSplashDlg.gui @@ -0,0 +1,36 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(ImmSplashDlg) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiControl() { + profile = "GuiModelessDialogProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "40 150"; + extent = "540 168"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiBitmapCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "540 168"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + bitmap = "gui/ImmersionLogo.png"; + wrap = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/InspectAddFieldDlg.gui b/base/gui/InspectAddFieldDlg.gui new file mode 100644 index 0000000..64b61c9 --- /dev/null +++ b/base/gui/InspectAddFieldDlg.gui @@ -0,0 +1,103 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(InspectAddFieldDlg) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiWindowCtrl() { + profile = "GuiWindowProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "209 177"; + extent = "221 125"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Add dynamic field..."; + resizeWidth = "1"; + resizeHeight = "1"; + canMove = "1"; + canClose = "1"; + canMinimize = "1"; + canMaximize = "1"; + minSize = "50 50"; + closeCommand = "Canvas.popDialog(InspectAddFieldDlg);"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "22 32"; + extent = "30 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Name:"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "21 58"; + extent = "31 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Value:"; + }; + new GuiTextEditCtrl(InspectAddFieldValue) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "62 58"; + extent = "146 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + }; + new GuiTextEditCtrl(InspectAddFieldName) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "62 32"; + extent = "146 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "25 88"; + extent = "73 20"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "OK"; + command = "canvas.popDialog(InspectAddFieldDlg);InspectAddFieldDlg.doAction();"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "125 88"; + extent = "73 20"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "CANCEL"; + command = "canvas.popDialog(InspectAddFieldDlg);"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/InspectDlg.gui b/base/gui/InspectDlg.gui new file mode 100644 index 0000000..42da1dc --- /dev/null +++ b/base/gui/InspectDlg.gui @@ -0,0 +1,238 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(InspectDlg) { + profile = "GuiDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "False"; + helpTag = "0"; + + new GuiWindowCtrl(InspectTitle) { + profile = "GuiWindowProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 20"; + extent = "200 400"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + resizeWidth = "True"; + resizeHeight = "True"; + canMove = "True"; + canClose = "True"; + canMinimize = "True"; + canMaximize = "True"; + minSize = "50 50"; + closeCommand = "Canvas.popDialog(InspectDlg);"; + font = "12 244 Arial"; + selectfillColor = "253"; + fillColor = "250"; + opaque = "true"; + + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "8 24"; + extent = "40 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "InspectApply();"; + helpTag = "0"; + text = "APPLY"; + selectBorderColor = "255"; + borderColor = "249"; + fillColor = "249"; + fontHL = "12 253 Arial"; + font = "12 252 Arial"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "56 24"; + extent = "29 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Name:"; + font = "12 244 Arial"; + }; + new GuiTextEditCtrl(InspectObjectName) { + profile = "GuiTextEditProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "98 23"; + extent = "72 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + historySize = "0"; + }; + new GuiScrollCtrl() { + profile = "GuiScrollCtrlProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "8 44"; + extent = "184 348"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + willFirstRespond = "True"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "False"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "1 1"; + extent = "164 346"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiInspector(InspectFields) { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "0 0"; + extent = "184 8"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + }; + }; + }; + }; + new GuiWindowCtrl(InspectTreeTitle) { + profile = "GuiWindowProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "232 20"; + extent = "200 400"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "TREE VIEW"; + resizeWidth = "True"; + resizeHeight = "True"; + canMove = "True"; + canClose = "True"; + canMinimize = "True"; + canMaximize = "True"; + minSize = "50 50"; + closeCommand = "Canvas.popDialog(InspectDlg);"; + + new GuiScrollCtrl() { + profile = "GuiScrollCtrlProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "8 24"; + extent = "184 368"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + willFirstRespond = "True"; + hScrollBar = "dynamic"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "False"; + + new GuiScrollContentCtrl() { + profile = "GuiScrollContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "1 1"; + extent = "164 366"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiTreeView(InspectTreeView) { + profile = "GuiTreeViewProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "0 0"; + extent = "64 64"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + }; + }; + }; + }; +}; +//--- OBJECT WRITE END --- + +function Inspect(%obj) +{ + Canvas.popDialog("InspectDlg"); + Canvas.pushDialog("InspectDlg", 30); + + InspectFields.inspect(%obj); + InspectObjectName.setValue(%obj.getName()); + InspectTitle.setValue(%obj.getId() @ ": " @ %obj.getName()); +} + +function InspectApply() +{ + InspectFields.apply(InspectObjectName.getValue()); +} + +function InspectTreeView::onSelect(%this, %obj) +{ + Inspect(%obj); +} + +function Tree(%obj) +{ + Canvas.popDialog("InspectDlg"); + Canvas.pushDialog("InspectDlg", 20); + InspectTreeView.open(%obj); +} + +function GuiInspector::addDynamicField(%this, %obj) +{ + InspectAddFieldDlg.object = %obj; + InspectAddFieldDlg.inspector = %this; + InspectAddFieldName.setValue(""); + InspectAddFieldValue.setValue(""); + Canvas.pushDialog(InspectAddFieldDlg, 99); +} + +function InspectAddFieldDlg::doAction(%this) +{ + if(InspectAddFieldName.getValue() $= "" || InspectAddFieldValue.getValue() $= "") + return; + eval(%this.object @ "." @ firstWord(InspectAddFieldName.getValue()) @ " = " @ InspectAddFieldValue.getValue() @ ";"); + %this.inspector.inspect(%this.object); +} + + diff --git a/base/gui/InteriorDebug.gui b/base/gui/InteriorDebug.gui new file mode 100644 index 0000000..20968ee --- /dev/null +++ b/base/gui/InteriorDebug.gui @@ -0,0 +1,160 @@ +new GuiControl(interiorDebugDialog) { + + profile = "GuiDialogProfile"; + + new GuiWindowCtrl() + { + profile = GuiWindowProfile; + position = "25 25"; + extent = "240 200"; + text = "Interior Debug Options"; + closeCommand = "Canvas.popDialog(interiorDebugDialog);"; + + + new GuiTextCtrl() { + profile = "GuiCenterTextProfile"; + position = "20 25"; + extent = "200 20"; + text = "Render Mode:"; + }; + new GuiPopUpMenuCtrl(InteriorRenderMode) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 45"; + extent = "200 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Options"; + maxPopupHeight = "200"; + setText = "false"; + }; + + new GuiTextCtrl() { + profile = "GuiCenterTextProfile"; + position = "20 73"; + extent = "200 20"; + text = "Options:"; + }; + new GuiButtonCtrl(InteriorAlarmMode) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "45 93"; + extent = "150 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "false"; + modal = "True"; + helpTag = "0"; + text = "Toggle Alarm Mode"; + }; + + new GuiCheckBoxCtrl(InteriorFocusDebugModes) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "45 115"; + extent = "150 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "false"; + modal = "True"; + helpTag = "0"; + text = "Focus Debug Modes"; + }; + + new GuiCheckBoxCtrl(InteriorDontRestrict) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "45 137"; + extent = "150 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "false"; + modal = "True"; + helpTag = "0"; + text = "Don't Restrict outside"; + }; + }; +}; + +$InteriorRenderModes[0] = "Normal"; +$InteriorRenderModes[1] = "Render as Lines"; +$InteriorRenderModes[2] = "Show Detail Polys"; +$InteriorRenderModes[3] = "Show Ambiguous Polys"; +$InteriorRenderModes[4] = "Show Orphaned Polys"; +$InteriorRenderModes[5] = "Show Lightmap"; +$InteriorRenderModes[6] = "Show Only Textures"; +$InteriorRenderModes[7] = "Show Portal Zones"; +$InteriorRenderModes[8] = "Show Ambient lit Surfaces"; +$InteriorRenderModes[9] = "[* Show Collision Fans *]"; +$InteriorRenderModes[10] = "[* Show Triangle Strips *]"; +$InteriorRenderModes[11] = "[* Show Null Surfaces *]"; +$InteriorRenderModes[12] = "[* Show Large Textures *]"; +$InteriorRenderModes[13] = "[* Show Hull Surfaces *]"; +$InteriorRenderModes[14] = "[* Show Vehicle Hull Surfaces *]"; +$InteriorRenderModes[15] = "[* Show vertex colors *]"; +$InteriorRenderModes[16] = "[* Show detail level *]"; +$NumInteriorRenderModes = 17; + +for ($i = 0; $i < $NumInteriorRenderModes; $i++) { + InteriorRenderMode.add($InteriorRenderModes[$i], $i); +} +InteriorRenderMode.setText($InteriorRenderModes[0]); + +function InteriorRenderMode::onSelect(%object, %idNum) +{ + %name = %object.getValue(); + + %renderMode = 0; + for (%i = 0; %i < $NumInteriorRenderModes; %i++) { + if (%name $= $InteriorRenderModes[%i]) { + %renderMode = %i; + break; + } + } + setInteriorRenderMode(%renderMode); + if(%renderMode == 1) // line mode + $T2::renderoutline = true; + else + $T2::renderoutline = false; +} + +$InteriorPreviewGuiAlarmMode = "off"; +function InteriorAlarmMode::onAction() +{ + if ($InteriorPreviewGuiAlarmMode $= "on") + $InteriorPreviewGuiAlarmMode = "off"; + else + $InteriorPreviewGuiAlarmMode = "on"; + + TestObject.setAlarmMode($InteriorPreviewGuiAlarmMode); +} + +function InteriorFocusDebugModes::onAction() +{ + setInteriorFocusedDebug(InteriorFocusDebugModes.getValue()); +} + +function InteriorDontRestrict::onAction() +{ + $Interior::DontRestrictOutside = InteriorDontRestrict.getValue(); +} + +function interiorDebugDialog::onWake( %this ) +{ + %this.cursor = isCursorOn(); + if ( !%this.cursor ) + CursorOn(); +} + +function interiorDebugDialog::onSleep( %this ) +{ + if ( !%this.cursor ) + CursorOff(); +} diff --git a/base/gui/InteriorPreviewGui.gui b/base/gui/InteriorPreviewGui.gui new file mode 100644 index 0000000..d7e7dd7 --- /dev/null +++ b/base/gui/InteriorPreviewGui.gui @@ -0,0 +1,109 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(interiorPreviewGui) { + profile = "GuiContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GameTSCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + beaconBaseTextureName = "gui/beacon_base"; + beaconTargetTextureName = "gui/crosshairs"; + beaconTargetPeriod = "4000"; + beaconsVisible = "1"; + enemyBeaconLineBeginColor = "0.000000 1.000000 0.000000 0.200000"; + enemyBeaconLineEndColor = "0.000000 1.000000 0.000000 0.800000"; + vehicleBeaconLineBeginColor = "1.000000 0.000000 0.000000 0.200000"; + vehicleBeaconLineEndColor = "1.000000 0.000000 0.000000 0.800000"; + friendBeaconLineBeginColor = "1.000000 1.000000 0.000000 0.200000"; + friendBeaconLineEndColor = "1.000000 1.000000 0.000000 0.800000"; + beaconLineWidth = "2.5"; + beaconTextYOffset = "14"; + showAlternateTarget = "0"; + + new GameOverlayCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + }; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "22 438"; + extent = "100 20"; + minExtent = "8 8"; + visible = "1"; + command = "quit();"; + helpTag = "0"; + text = "Exit"; + }; +}; +//--- OBJECT WRITE END --- + +function toggleMouse() +{ + if(Canvas.isCursorOn()) + CursorOff(); + else + CursorOn(); +} + +function interiorDebug(%val) +{ + if ( !%val ) + Canvas.pushDialog( interiorDebugDialog ); +} + +function InteriorPreviewGui::onWake(%this) +{ + GlobalActionMap.bindcmd( keyboard, "tab", "", "toggleMouse();" ); + GlobalActionMap.bindcmd( keyboard, "f9", "", "interiorDebug();" ); + GlobalActionMap.bindcmd( keyboard, escape, "", "quit();" ); + + if ( isObject( previewMap ) ) + { + previewMap.pop(); + previewMap.delete(); + } + new ActionMap( previewMap ); + previewMap.bind( keyboard, w, moveforward ); + previewMap.bind( keyboard, s, movebackward ); + previewMap.bind( keyboard, a, moveleft ); + previewMap.bind( keyboard, d, moveright ); + previewMap.bind( keyboard, e, moveup ); + previewMap.bind( keyboard, c, movedown ); + previewMap.bindCmd( keyboard, k, "cycleDebugRenderMode();", "" ); + previewMap.copyBind( moveMap, yaw ); + previewMap.copyBind( moveMap, pitch ); + previewMap.push(); +} + +function InteriorPreviewGui::onSleep(%this) +{ + previewMap.pop(); + previewMap.delete(); + + GlobalActionMap.unbind(keyboard, "tab"); + GlobalActionMap.unbind(keyboard, "f9"); + lockMouse(false); + CursorOn(); +} + diff --git a/base/gui/JoinChatDlg.gui b/base/gui/JoinChatDlg.gui new file mode 100644 index 0000000..dc5c702 --- /dev/null +++ b/base/gui/JoinChatDlg.gui @@ -0,0 +1,133 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(JoinChatDlg) { + profile = "DlgBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl(JoinChatPane) { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "117 47"; + extent = "400 360"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "CHOOSE CHAT CHANNEL"; + noTitleBar = "0"; + + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "center"; + vertSizing = "height"; + position = "91 36"; + extent = "218 232"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "0 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 7"; + extent = "194 218"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellTextList(JoinChatList) { + profile = "ShellTextArrayProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "194 8"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + enumerate = "1"; + resizeCell = "1"; + columns = "0"; + fitParentWidth = "1"; + clipColumnText = "0"; + }; + }; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "48 305"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.popDialog(JoinChatDlg); LaunchTabView.viewTab(\"Chat\",ChatGui,0);"; + accelerator = "escape"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + new GuiControl() { + profile = "GuiDefaultProfile"; + horizSizing = "center"; + vertSizing = "top"; + position = "86 269"; + extent = "228 36"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellTextEditCtrl(JoinChatName) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "48 0"; + extent = "180 38"; + minExtent = "32 38"; + visible = "1"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + password = "0"; + glowOffset = "9 9"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "8 8"; + extent = "44 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Channel:"; + }; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "228 305"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "JoinChatDlg.join();"; + helpTag = "0"; + text = "JOIN CHAT"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/JoystickConfigDlg.gui b/base/gui/JoystickConfigDlg.gui new file mode 100644 index 0000000..026e3bf --- /dev/null +++ b/base/gui/JoystickConfigDlg.gui @@ -0,0 +1,177 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(JoystickConfigDlg) { + profile = "DlgBackProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + pane = "0"; + + new ShellPaneCtrl(JoystickConfigFrame) { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "95 50"; + extent = "450 380"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "CONFIGURE JOYSTICK"; + noTitleBar = "0"; + + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "center"; + vertSizing = "top"; + position = "155 325"; + extent = "140 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.popDialog(JoystickConfigDlg);"; + helpTag = "0"; + text = "DONE"; + simpleStyle = "0"; + }; + new ShellTabFrame() { + profile = "ShellTabFrameProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "129 37"; + extent = "254 283"; + minExtent = "254 26"; + visible = "1"; + helpTag = "0"; + isVertical = "1"; + useCloseButton = "0"; + edgeInset = "0"; + }; + new ShellFieldCtrl() { + profile = "ShellFieldProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "140 47"; + extent = "278 263"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "26 50"; + extent = "60 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Action:"; + }; + new ShellPopupMenu(JoyAxisActionMenu) { + profile = "ShellPopupProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "83 41"; + extent = "140 36"; + minExtent = "49 36"; + visible = "1"; + helpTag = "0"; + maxPopupHeight = "200"; + buttonBitmap = "gui/shll_pulldown"; + rolloverBarBitmap = "gui/shll_pulldownbar_rol"; + selectedBarBitmap = "gui/shll_pulldownbar_act"; + noButtonStyle = "0"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "47 82"; + extent = "57 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Sensitivity:"; + }; + new GuiTextCtrl(JoySensText) { + profile = "ShellAltTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "109 82"; + extent = "28 20"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "(0.5)"; + }; + new ShellSliderCtrl(JoyAxisSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "57 97"; + extent = "170 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + altCommand = "JoySensText.update();"; + helpTag = "0"; + range = "0.000000 1.000000"; + ticks = "1000"; + value = "0.5"; + usePlusMinus = "1"; + }; + new ShellToggleButton(InvertJoyAxisTgl) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "75 169"; + extent = "127 30"; + minExtent = "26 27"; + visible = "1"; + helpTag = "0"; + text = "INVERT"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "47 122"; + extent = "57 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Dead Zone:"; + }; + new GuiTextCtrl(DeadZoneText) { + profile = "ShellAltTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "109 122"; + extent = "28 20"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "(0.5)"; + }; + new ShellSliderCtrl(DeadZoneSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "57 137"; + extent = "170 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + altCommand = "DeadZoneText.update();"; + helpTag = "0"; + range = "0.000000 1.000000"; + ticks = "100"; + value = "0.5"; + usePlusMinus = "1"; + }; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/LaunchGui.gui b/base/gui/LaunchGui.gui new file mode 100644 index 0000000..ee22640 --- /dev/null +++ b/base/gui/LaunchGui.gui @@ -0,0 +1,14 @@ +//--- OBJECT WRITE BEGIN --- +new GuiChunkedBitmapCtrl(LaunchGui) { + profile = "GuiContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + variable = "$ShellBackground"; + helpTag = "0"; + useVariable = "1"; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/LaunchToolbarDlg.gui b/base/gui/LaunchToolbarDlg.gui new file mode 100644 index 0000000..18b704d --- /dev/null +++ b/base/gui/LaunchToolbarDlg.gui @@ -0,0 +1,76 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(LaunchToolbarDlg) { + profile = "GuiModelessDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "0"; + helpTag = "0"; + ctrlCount = "0"; + + new GuiControl(LaunchToolbarPane) { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "top"; + position = "-2 436"; + extent = "644 44"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new ShellLaunchMenu(LaunchToolbarMenu) { + profile = "LaunchMenuProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "3 0"; + extent = "115 56"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "LAUNCH"; + maxPopupHeight = "200"; + buttonFontType = "Sui Generis"; + buttonFontSize = "14"; + }; + + new ShellTabGroupCtrl(LaunchTabView) { + profile = "LaunchTabProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "120 11"; + extent = "520 29"; + minExtent = "38 29"; + visible = "1"; + helpTag = "0"; + glowOffset = "0"; + tabSpacing = "1"; + maxTabWidth = "160"; + stretchToFit = "0"; + }; + }; + new ShellBitmapButton(LaunchToolbarCloseButton) { + profile = "CloseButtonProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "583 46"; + extent = "33 26"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + command = "LaunchTabView.closeCurrentTab();"; + text = ""; + simpleStyle = "1"; + }; +}; +//--- OBJECT WRITE END --- + diff --git a/base/gui/LoadingGui.gui b/base/gui/LoadingGui.gui new file mode 100644 index 0000000..72f46b2 --- /dev/null +++ b/base/gui/LoadingGui.gui @@ -0,0 +1,161 @@ +//--- OBJECT WRITE BEGIN --- +new GuiChunkedBitmapCtrl(LoadingGui) { + profile = "GuiContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + variable = "$ShellBackground"; + helpTag = "0"; + useVariable = "1"; + qLineCount = "0"; + + new ShellPaneCtrl() { + profile = "ShellPaneProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "28 13"; + extent = "584 459"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + maxLength = "255"; + noTitleBar = "1"; + + new GuiProgressCtrl(LoadingProgress) { + profile = "ShellProgressBarProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "81 410"; + extent = "262 25"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiTextCtrl(LoadingProgressTxt) { + profile = "ShellProgressBarTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 3"; + extent = "262 19"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "LOADING MISSION"; + maxLength = "255"; + }; + }; + new GuiTextCtrl(LOAD_MapName) { + profile = "ShellSubHeaderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "24 6"; + extent = "90 32"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Map Name"; + maxLength = "255"; + }; + new GuiControl() { + profile = "GuiDefaultProfile"; + horizSizing = "relative"; + vertSizing = "bottom"; + position = "26 34"; + extent = "312 165"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextCtrl(LOAD_MapText) { + profile = "ShellLoadTextProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "0 0"; + extent = "312 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + allowColorChars = "0"; + maxChars = "-1"; + }; + }; + new GuiTextCtrl(LOAD_MissionType) { + profile = "ShellSubHeaderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "24 207"; + extent = "115 32"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Mission Type"; + maxLength = "255"; + }; + new GuiControl() { + profile = "GuiDefaultProfile"; + horizSizing = "relative"; + vertSizing = "bottom"; + position = "26 235"; + extent = "312 165"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextCtrl(LOAD_GameText) { + profile = "ShellLoadTextProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "0 0"; + extent = "312 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + allowColorChars = "0"; + maxChars = "-1"; + }; + }; + new GuiControl() { + profile = "ShellLoadFrameProfile"; + horizSizing = "relative"; + vertSizing = "relative"; + position = "349 8"; + extent = "212 428"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiChunkedBitmapCtrl(LOAD_MapPic) { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "1 1"; + extent = "210 426"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + bitmap = "gui/loading.png"; + useVariable = "0"; + }; + }; + new ShellBitmapButton() { + profile = "ShellButtonNoTabProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "14 404"; + extent = "70 38"; + minExtent = "32 38"; + visible = "1"; + command = "Disconnect();"; + accelerator = "escape"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/LobbyGui.gui b/base/gui/LobbyGui.gui new file mode 100644 index 0000000..5e6cf44 --- /dev/null +++ b/base/gui/LobbyGui.gui @@ -0,0 +1,346 @@ +//--- OBJECT WRITE BEGIN --- +new GuiChunkedBitmapCtrl(LobbyGui) { + profile = "GuiContentProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + variable = "$ShellBackground"; + helpTag = "0"; + useVariable = "1"; + + new ShellPaneCtrl() { + profile = "ShellPaneProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "20 20"; + extent = "600 440"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "LOBBY"; + noTitleBar = "0"; + + new GuiControl() { + profile = "GuiDefaultProfile"; + horizSizing = "relative"; + vertSizing = "bottom"; + position = "23 36"; + extent = "276 140"; + minExtent = "16 18"; + visible = "1"; + + new ShellFieldCtrl() { + profile = "ShellFieldProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "4 0"; + extent = "268 27"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new GuiTextCtrl(LobbyServerName) { + profile = "ShellLargeLabelProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "3 2"; + extent = "262 26"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = ""; + }; + }; + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "0 28"; + extent = "276 111"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "dynamic"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "3 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "7 7"; + extent = "262 97"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextCtrl(LobbyStatusText) { + profile = "ShellTextArrayProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "242 16"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + allowColorChars = "0"; + }; + }; + }; + }; + new ShellFancyArrayScrollCtrl() { + profile = "ShellServerBrowserProfile"; + horizSizing = "relative"; + vertSizing = "height"; + position = "23 175"; + extent = "275 209"; + minExtent = "24 72"; + visible = "1"; + helpTag = "0"; + fixedHorizontal = "0"; + vertSpacerBitmap = "gui/shll_vertspacer"; + horzSpacerBitmap = "gui/shll_horzspacer"; + + new VirtualScrollCtrl() { + profile = "ShellServerBrowserProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 16"; + extent = "275 193"; + minExtent = "8 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "0"; + hScrollBar = "alwaysOn"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "0 0"; + + new VirtualScrollContentCtrl() { + profile = "ShellTextArrayProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 4"; + extent = "251 169"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiControl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "8 8"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + }; + }; + }; + new ShellFancyTextList(LobbyPlayerList) { + profile = "LobbyPlayerListProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "255 188"; + minExtent = "8 20"; + visible = "1"; + helpTag = "0"; + startScrollRegion = "2 0"; + headerBitmap = "gui/server_tabs"; + sortArrowBitmap = "gui/shll_sortarrow"; + fieldBase = "gui/shll_field"; + barBase = "gui/shll_bar"; + glowOffset = "4"; + rowHeight = "19"; + headerFontType = "Univers Condensed"; + headerFontSize = "16"; + headerFontColor = "8 19 6 255"; + headerFontColorHL = "25 68 56 255"; + separatorColor = "192 192 192 255"; + drawSeparators = "0"; + headerSort = "1"; + allowReposition = "0"; + }; + }; + new GuiControl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "relative"; + vertSizing = "bottom"; + position = "298 32"; + extent = "275 143"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "0 0"; + extent = "275 143"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "dynamic"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "3 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "7 7"; + extent = "261 129"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellTextList(LobbyVoteMenu) { + profile = "ShellTextArrayProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "261 8"; + minExtent = "8 8"; + visible = "1"; + altCommand = "lobbyVote();"; + helpTag = "0"; + enumerate = "0"; + resizeCell = "1"; + columns = "0"; + fitParentWidth = "1"; + clipColumnText = "0"; + }; + }; + }; + new ShellBitmapButton(LobbyCancelBtn) { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "178 1"; + extent = "80 38"; + minExtent = "32 38"; + visible = "0"; + command = "LobbyVoteMenu.reset();"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + }; + new ShellScrollCtrl(LobbyMessageScroll) { + profile = "NewScrollCtrlProfile"; + horizSizing = "relative"; + vertSizing = "height"; + position = "298 174"; + extent = "275 178"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "3 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "7 7"; + extent = "245 164"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiMessageVectorCtrl(LobbyMessageVector) { + profile = "GuiChatHudProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "0 0"; + extent = "245 12"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "0"; + lineContinuedIndex = "10"; + matchColor = "0 0 255 255"; + maxColorIndex = 5; + }; + }; + }; + new ShellTextEditCtrl(LobbyChatEnter) { + profile = "NewTextEditProfile"; + horizSizing = "relative"; + vertSizing = "top"; + position = "293 350"; + extent = "285 38"; + minExtent = "32 38"; + visible = "1"; + altCommand = "LobbyChatEnter.send();"; + escapeCommand = "LobbyChatEnter.onEscape();"; + helpTag = "0"; + historySize = "0"; + maxLength = "120"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "195 385"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.pushDialog(OptionsDlg);"; + helpTag = "0"; + text = "SETTINGS"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "315 385"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "lobbyDisconnect();"; + helpTag = "0"; + text = "LEAVE GAME"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "435 385"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "lobbyReturnToGame();"; + accelerator = "escape"; + helpTag = "0"; + text = "RETURN TO GAME"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/LoginDlg.gui b/base/gui/LoginDlg.gui new file mode 100644 index 0000000..9a40ccf --- /dev/null +++ b/base/gui/LoginDlg.gui @@ -0,0 +1,144 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(LoginDlg) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "90 156"; + extent = "460 167"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "LOGIN"; + noTitleBar = "0"; + + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "30 47"; + extent = "85 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Account Name:"; + }; + new ShellTextEditCtrl(LoginEditBox) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "111 39"; + extent = "180 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$LoginName"; + altCommand = "LoginProcess();"; + helpTag = "0"; + historySize = "0"; + maxLength = "16"; + password = "0"; + glowOffset = "9 9"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "30 77"; + extent = "85 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Password:"; + }; + new GuiLoginPasswordCtrl(LoginPasswordBox) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "111 68"; + extent = "180 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$LoginPassword"; + altCommand = "LoginProcess();"; + helpTag = "0"; + historySize = "0"; + maxLength = "16"; + password = "1"; + glowOffset = "9 9"; + }; + new ShellToggleButton() { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "118 106"; + extent = "160 27"; + minExtent = "26 27"; + visible = "1"; + variable = "$pref::RememberPassword"; + helpTag = "0"; + text = "REMEMBER PASSWORD"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "291 39"; + extent = "144 38"; + minExtent = "32 38"; + visible = "1"; + command = "LoginProcess();"; + helpTag = "0"; + text = "LOG IN"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "291 70"; + extent = "144 38"; + minExtent = "32 38"; + visible = "1"; + command = "CreateAccount();"; + helpTag = "0"; + text = "CREATE NEW ACCOUNT"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "290 102"; + extent = "144 38"; + minExtent = "32 38"; + visible = "1"; + command = "EditAccount();"; + helpTag = "0"; + text = "EDIT ACCOUNT"; + simpleStyle = "0"; + }; + new ShellBitmapButton(LaunchToolbarCloseButton) { + profile = "CloseButtonProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "411 0"; + extent = "33 26"; + minExtent = "33 26"; + visible = "1"; + command = "quit();"; + accelerator = "escape"; + helpTag = "0"; + simpleStyle = "1"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/LoginMessageBoxDlg.gui b/base/gui/LoginMessageBoxDlg.gui new file mode 100644 index 0000000..215cd70 --- /dev/null +++ b/base/gui/LoginMessageBoxDlg.gui @@ -0,0 +1,48 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(LoginMessageBoxDlg) { + profile = "DlgBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl(LoginMessageBoxFrame) { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "170 137"; + extent = "300 206"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextCtrl(LoginMessageBoxText) { + profile = "ShellMediumTextProfile"; + horizSizing = "center"; + vertSizing = "bottom"; + position = "32 39"; + extent = "236 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + }; + new ShellBitmapButton(LoginMessageBoxButton) { + profile = "ShellButtonProfile"; + horizSizing = "center"; + vertSizing = "bottom"; + position = "70 140"; + extent = "120 38"; + minExtent = "32 38"; + visible = "1"; + command = "LoginMessageBoxButtonProcess();"; + helpTag = "0"; + text = "OK"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/MessageBoxDlg.gui b/base/gui/MessageBoxDlg.gui new file mode 100644 index 0000000..f3a3ffc --- /dev/null +++ b/base/gui/MessageBoxDlg.gui @@ -0,0 +1,177 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(MessageBoxOKDlg) { + profile = "DlgBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl(MBOKFrame) { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "170 137"; + extent = "300 206"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextCtrl(MBOKText) { + profile = "ShellMediumTextProfile"; + horizSizing = "center"; + vertSizing = "bottom"; + position = "32 39"; + extent = "236 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "center"; + vertSizing = "bottom"; + position = "90 151"; + extent = "120 38"; + minExtent = "32 38"; + visible = "1"; + command = "eval(MessageBoxOKDlg.callback); Canvas.popDialog(MessageBoxOKDlg);"; + accelerator = "return"; + helpTag = "0"; + text = "OK"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- + +//--- OBJECT WRITE BEGIN --- +new GuiControl(MessageBoxYesNoDlg) { + profile = "DlgBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl(MBYesNoFrame) { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "170 137"; + extent = "300 206"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextCtrl(MBYesNoText) { + profile = "ShellMediumTextProfile"; + horizSizing = "center"; + vertSizing = "bottom"; + position = "32 39"; + extent = "236 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "26 151"; + extent = "120 38"; + minExtent = "32 38"; + visible = "1"; + command = "eval(MessageBoxYesNoDlg.yesCallback); Canvas.popDialog(MessageBoxYesNoDlg);"; + accelerator = "enter"; + helpTag = "0"; + text = "YES"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "154 151"; + extent = "120 38"; + minExtent = "32 38"; + visible = "1"; + command = "eval(MessageBoxYesNoDlg.noCallback); Canvas.popDialog(MessageBoxYesNoDlg);"; + accelerator = "escape"; + helpTag = "0"; + text = "NO"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- + +//--- OBJECT WRITE BEGIN --- +new GuiControl(MessageBoxOKCancelDlg) { + profile = "DlgBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl(MBOKCancelFrame) { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "170 137"; + extent = "300 206"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextCtrl(MBOKCancelText) { + profile = "ShellMediumTextProfile"; + horizSizing = "center"; + vertSizing = "bottom"; + position = "32 39"; + extent = "236 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "154 151"; + extent = "120 38"; + minExtent = "32 38"; + visible = "1"; + command = "eval(MessageBoxOKCancelDlg.callback); Canvas.popDialog(MessageBoxOKCancelDlg);"; + accelerator = "return"; + helpTag = "0"; + text = "OK"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "26 151"; + extent = "120 38"; + minExtent = "32 38"; + visible = "1"; + command = "eval(MessageBoxOKCancelDlg.cancelCallback); Canvas.popDialog(MessageBoxOKCancelDlg);"; + accelerator = "escape"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/MessagePopupDlg.gui b/base/gui/MessagePopupDlg.gui new file mode 100644 index 0000000..401d2be --- /dev/null +++ b/base/gui/MessagePopupDlg.gui @@ -0,0 +1,35 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(MessagePopupDlg) { + profile = "DlgBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl(MessagePopFrame) { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "165 194"; + extent = "310 108"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextCtrl(MessagePopText) { + profile = "ShellMediumTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "32 40"; + extent = "247 32"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/MouseConfigDlg.gui b/base/gui/MouseConfigDlg.gui new file mode 100644 index 0000000..41f1149 --- /dev/null +++ b/base/gui/MouseConfigDlg.gui @@ -0,0 +1,178 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(MouseConfigDlg) { + profile = "DlgBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "125 104"; + extent = "390 271"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "CONFIGURE MOUSE"; + noTitleBar = "0"; + + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "50 216"; + extent = "120 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.popDialog(MouseConfigDlg);"; + accelerator = "escape"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "220 216"; + extent = "120 38"; + minExtent = "32 38"; + visible = "1"; + command = "MouseConfigDlg::onOK();"; + helpTag = "0"; + text = "OK"; + simpleStyle = "0"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "86 36"; + extent = "94 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "X-Axis Sensitivity:"; + }; + new GuiTextCtrl(MouseXText) { + profile = "ShellAltTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "185 36"; + extent = "28 20"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "(0.5)"; + }; + new ShellSliderCtrl(MouseXSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "96 51"; + extent = "170 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + altCommand = "MouseXSlider.sync();"; + helpTag = "0"; + range = "0.000000 1.000000"; + ticks = "1000"; + value = "0.480769"; + usePlusMinus = "1"; + }; + new ShellToggleButton() { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "247 73"; + extent = "71 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$pref::Input::LinkMouseSensitivity"; + helpTag = "0"; + text = "LINK"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "86 85"; + extent = "93 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Y-Axis Sensitivity:"; + }; + new GuiTextCtrl(MouseYText) { + profile = "ShellAltTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "184 85"; + extent = "28 20"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "(0.5)"; + }; + new ShellSliderCtrl(MouseYSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "96 100"; + extent = "170 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + altCommand = "MouseYSlider.sync();"; + helpTag = "0"; + range = "0.000000 1.000000"; + ticks = "1000"; + value = "0.480769"; + usePlusMinus = "1"; + }; + new ShellToggleButton(InvertMouseTgl) { + profile = "ShellRadioProfile"; + horizSizing = "center"; + vertSizing = "bottom"; + position = "125 138"; + extent = "140 30"; + minExtent = "26 27"; + visible = "1"; + helpTag = "0"; + text = "INVERT Y-AXIS"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "47 183"; + extent = "100 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Mouse Wheel:"; + }; + new ShellPopupMenu(MouseZActionMenu) { + profile = "ShellPopupProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "144 174"; + extent = "180 36"; + minExtent = "49 36"; + visible = "1"; + helpTag = "0"; + maxPopupHeight = "200"; + buttonBitmap = "gui/shll_pulldown"; + rolloverBarBitmap = "gui/shll_pulldownbar_rol"; + selectedBarBitmap = "gui/shll_pulldownbar_act"; + noButtonStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/NewMissionGui.gui b/base/gui/NewMissionGui.gui new file mode 100644 index 0000000..ac6196a --- /dev/null +++ b/base/gui/NewMissionGui.gui @@ -0,0 +1,290 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(NewMissionGui) { + profile = "GuiDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiWindowCtrl() { + profile = "GuiWindowProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "236 83"; + extent = "228 276"; + minExtent = "100 100"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "CREATE NEW MISSION"; + resizeWidth = "False"; + resizeHeight = "False"; + canMove = "True"; + canClose = "True"; + canMinimize = "False"; + canMaximize = "False"; + minSize = "50 50"; + closeCommand = "Canvas.popDialog(NewMissionGui);"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "11 30"; + extent = "68 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Mission Name:"; + }; + new GuiTextEditCtrl(MissionNameEdit) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "82 30"; + extent = "120 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + historySize = "0"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "27 239"; + extent = "80 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "CreateMission();Canvas.popDialog(NewMissionGui);"; + helpTag = "0"; + text = "OK"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "121 239"; + extent = "80 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "Canvas.popDialog(NewMissionGui);"; + helpTag = "0"; + text = "CANCEL"; + }; + new GuiControl() { + profile = "GuiScrollCtrlProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "15 110"; + extent = "198 114"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 40"; + extent = "145 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "MISSION TYPE OPTIONS HERE"; + }; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "15 55"; + extent = "64 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Base Terrain:"; + }; + new GuiPopUpMenuCtrl(TerrainFileMenu) { + profile = "GuiRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "82 55"; + extent = "120 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + maxPopupHeight = "200"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "27 88"; + extent = "26 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Type:"; + }; + new GuiPopUpMenuCtrl(MissionTypeMenu) { + profile = "GuiRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "59 86"; + extent = "120 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + maxPopupHeight = "200"; + }; + }; +}; +//--- OBJECT WRITE END --- + +function CreateMission() +{ + if($MissionRunning) + return; + + %missionName = MissionNameEdit.getValue() @ ".mis"; + if(%missionName $= "") + return; + + echo("--- Creating mission: " @ %missionName); + + // do the terrain + %terrainName = MissionNameEdit.getValue() @ ".ter"; + %baseTerrain = TerrainFileMenu.getValue() @ ".ter"; + %graphName = MissionNameEdit.getValue() @ ".nav"; + + %obj = new TerrainBlock(BaseTerrain) + { + position = "0 0 0 1"; + rotation = "0 0 0 0"; + scale = "1 1 1"; + terrainFile = %baseTerrain; + squareSize = "8"; + visibleDistance = "1200"; + hazeDistance = "250"; + emptySquares = "250"; + }; + + if(%obj == -1) + { + echo("!!! Failed to create base terrain: " @ %baseTerrain); + return; + } + + BaseTerrain.save(%terrainName); + BaseTerrain.delete(); + + rebuildModPaths(); + + // create a mission... + new SimGroup(MissionGroup) + { + new MissionArea(MissionArea) + { + area = "512 512 1024 1024"; + }; + + new Sun() + { + position = "0 0 0 1"; + rotation = "0 0 0 0"; + scale = "1 1 1"; + direction = "0.5 0.5 -0.5"; + ambient = "0.2 0.2 0.2 1.0"; + color = "0.6 0.6 0.6 1.0"; + }; + + new TerrainBlock(Terrain) + { + position = "0 0 0 1"; + rotation = "0 0 0 0"; + scale = "1 1 1"; + terrainFile = %terrainName; + squareSize = "8"; + visibleDistance = "1200"; + hazeDistance = "250"; + emptySquares = "250"; + }; + + new NavigationGraph(NavGraph) + { + position = "0 0 0 1"; + rotation = "0 0 0 0"; + scale = "1 1 1"; + GraphFile = %graphName; + }; + }; + + MissionGroup.save("missions/" @ %missionName); + MissionGroup.delete(); + + // create a server and connect + setNetPort($Host::Port); + $ServerName = $Host::GameName; + CreateServer(%missionName); + localConnect(); + Canvas.setContent(PlayGui); +} + +function NewMissionGui::onWake(%this) +{ + // + $NewMissionName = "NewMission"; + + MissionNameEdit.setValue("NewMission"); + + // fill the terrain list... + TerrainFileMenu.clear(); + + %spec = "terrains/*.ter"; + %count = 0; + + for(%file = findFirstFile(%spec); %file !$= ""; %file = findNextFile(%spec)) + { + TerrainFileMenu.add(fileBase(%file), %count); + %count++; + } + TerrainFileMenu.setSelected(0); + + // fill the mission types.. bunk for now + MissionTypeMenu.clear(); + MissionTypeMenu.add("Capture the Flag", 0); + MissionTypeMenu.add("Defend and Destroy", 1); + MissionTypeMenu.add("Find and Retrieve", 2); + MissionTypeMenu.add("Death Match", 3); + MissionTypeMenu.add("Rabbit", 4); + MissionTypeMenu.add("Football", 5); + MissionTypeMenu.add("Flag Hunters", 6); + MissionTypeMenu.setSelected(0); +} diff --git a/base/gui/NewWarriorDlg.gui b/base/gui/NewWarriorDlg.gui new file mode 100644 index 0000000..d29d827 --- /dev/null +++ b/base/gui/NewWarriorDlg.gui @@ -0,0 +1,80 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(NewWarriorDlg) { + profile = "DlgBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "155 167"; + extent = "330 145"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "NEW WARRIOR"; + noTitleBar = "0"; + + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 52"; + extent = "81 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Name:"; + }; + new ShellTextEditCtrl(NW_NameEdit) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "97 44"; + extent = "180 38"; + minExtent = "32 38"; + visible = "1"; + command = "NW_NameEdit.checkValidPlayerName();"; + altCommand = "NW_NameEdit.processEnter();"; + helpTag = "0"; + historySize = "0"; + maxLength = "16"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellBitmapButton(NW_DoneBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "182 90"; + extent = "108 38"; + minExtent = "32 38"; + visible = "1"; + command = "NewWarriorDlg.createPlayer();"; + helpTag = "0"; + text = "DONE"; + simpleStyle = "0"; + }; + new ShellBitmapButton(NW_CancelBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "40 90"; + extent = "108 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.popDialog(NewWarriorDlg);"; + accelerator = "escape"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/NewsEditMOTDDlg.gui b/base/gui/NewsEditMOTDDlg.gui new file mode 100644 index 0000000..d0c10dc --- /dev/null +++ b/base/gui/NewsEditMOTDDlg.gui @@ -0,0 +1,96 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(NewsEditMOTDDlg) { + profile = "DlgBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "125 163"; + extent = "390 153"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "EDIT MOTD"; + maxLength = "255"; + noTitleBar = "0"; + + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "center"; + vertSizing = "bottom"; + position = "25 35"; + extent = "340 54"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOff"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "4 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "8 7"; + extent = "324 40"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextEditCtrl(NewsEditMOTDText) { + profile = "ShellEditMOTDTextProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "319 40"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + allowColorChars = "0"; + maxChars = "120"; + }; + }; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "217 98"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "NewsUpdateMOTD(); Canvas.popDialog(NewsEditMOTDDlg);"; + helpTag = "0"; + text = "UPDATE"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "45 98"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.popDialog(NewsEditMOTDDlg);"; + accelerator = "escape"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/NewsGui.gui b/base/gui/NewsGui.gui new file mode 100644 index 0000000..b87c933 --- /dev/null +++ b/base/gui/NewsGui.gui @@ -0,0 +1,238 @@ +//--- OBJECT WRITE BEGIN --- +new GuiChunkedBitmapCtrl(NewsGui) { + profile = "GuiContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + variable = "$ShellBackground"; + helpTag = "0"; + useVariable = "1"; + + new ShellPaneCtrl() { + profile = "ShellPaneProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "12 46"; + extent = "620 390"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "NEWS"; + noTitleBar = "0"; + + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "52 335"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "PostNews();"; + helpTag = "0"; + text = "SUBMIT NEWS"; + simpleStyle = "0"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "369 34"; + extent = "55 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Web Links:"; + }; + new ShellPopupMenu(WebLinksMenu) { + profile = "ShellPopupProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "361 45"; + extent = "200 36"; + minExtent = "49 36"; + visible = "1"; + helpTag = "0"; + maxPopupHeight = "200"; + buttonBitmap = "gui/shll_pulldown"; + rolloverBarBitmap = "gui/shll_pulldownbar_rol"; + selectedBarBitmap = "gui/shll_pulldownbar_act"; + noButtonStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "549 45"; + extent = "53 38"; + minExtent = "32 38"; + visible = "1"; + command = "WebLinksMenu.launchWebBrowser();"; + helpTag = "0"; + text = "GO"; + simpleStyle = "0"; + }; + new ShellFieldCtrl() { + profile = "ShellFieldProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "24 34"; + extent = "332 45"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextCtrl(NewsMOTDText) { + profile = "ShellAltTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 4"; + extent = "310 16"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + allowColorChars = "0"; + }; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "25 79"; + extent = "60 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "HEADLINES"; + }; + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "right"; + vertSizing = "height"; + position = "21 91"; + extent = "190 220"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "dynamic"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "0 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 7"; + extent = "182 206"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellTextList(NewsHeadlines) { + profile = "ShellTextArrayProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "182 8"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + enumerate = "0"; + resizeCell = "1"; + columns = "0"; + fitParentWidth = "1"; + clipColumnText = "0"; + }; + }; + }; + new ShellBitmapButton(NewsPrevBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "28 307"; + extent = "85 38"; + minExtent = "32 38"; + visible = "1"; + command = "NewsGui.getPreviousNewsItems();"; + helpTag = "0"; + text = "PREV"; + simpleStyle = "0"; + }; + new ShellBitmapButton(NewsNextBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "119 307"; + extent = "85 38"; + minExtent = "32 38"; + visible = "1"; + command = "NewsGui.getNextNewsItems();"; + helpTag = "0"; + text = "NEXT"; + simpleStyle = "0"; + }; + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "211 91"; + extent = "385 275"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "0 2"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 6"; + extent = "361 263"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextCtrl(NewsText) { + profile = "NewTextEditProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "0 0"; + extent = "387 16"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + allowColorChars = "0"; + }; + }; + }; + new ShellBitmapButton(NewsEditMOTDBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "15 -4"; + extent = "100 38"; + minExtent = "32 38"; + visible = "0"; + command = "NewsEditMOTD();"; + helpTag = "0"; + text = "EDIT MOTD"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/NewsPostDlg.gui b/base/gui/NewsPostDlg.gui new file mode 100644 index 0000000..c8c4714 --- /dev/null +++ b/base/gui/NewsPostDlg.gui @@ -0,0 +1,151 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(NewsPostDlg) { + profile = "DlgBackProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "90 36"; + extent = "460 408"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "POST NEWS"; + maxLength = "255"; + noTitleBar = "0"; + + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "24 40"; + extent = "60 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Category:"; + maxLength = "255"; + }; + new ShellPopupMenu(NewsCategoryMenu) { + profile = "ShellPopupProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "81 31"; + extent = "175 36"; + minExtent = "49 36"; + visible = "1"; + helpTag = "0"; + maxLength = "255"; + maxPopupHeight = "200"; + buttonBitmap = "gui/shll_pulldown"; + rolloverBarBitmap = "gui/shll_pulldownbar_rol"; + selectedBarBitmap = "gui/shll_pulldownbar_act"; + noButtonStyle = "0"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "24 70"; + extent = "60 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Title:"; + maxLength = "255"; + }; + new ShellTextEditCtrl() { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "80 62"; + extent = "359 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$NewsTitle"; + helpTag = "0"; + maxLength = "48"; + historySize = "0"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "27 97"; + extent = "407 254"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "3 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "7 7"; + extent = "377 240"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextEditCtrl(NewsPostBodyText) { + profile = "ShellMessageTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "377 240"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + allowColorChars = "0"; + maxChars = "3600"; + }; + }; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "68 354"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.popDialog(NewsPostDlg);"; + accelerator = "escape"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "264 354"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "PostNewsProcess();"; + helpTag = "0"; + text = "POST"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/OptionsDlg.gui b/base/gui/OptionsDlg.gui new file mode 100644 index 0000000..466c4a4 --- /dev/null +++ b/base/gui/OptionsDlg.gui @@ -0,0 +1,1727 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(OptionsDlg) { + profile = "DlgBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + pane = "Video"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "20 45"; + extent = "600 390"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "SETTINGS"; + maxLength = "255"; + noTitleBar = "0"; + + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "34 332"; + extent = "82 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.popDialog(OptionsDlg);"; + helpTag = "0"; + text = "DONE"; + simpleStyle = "0"; + }; + new ShellTabButton(OP_VideoTab) { + profile = "ShellTabProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "19 46"; + extent = "108 38"; + minExtent = "48 38"; + visible = "1"; + command = "OptionsDlg.setPane(Video);"; + helpTag = "0"; + text = "VIDEO"; + maxLength = "255"; + simpleStyle = "0"; + }; + new ShellTabButton(OP_GraphicsTab) { + profile = "ShellTabProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "19 76"; + extent = "108 38"; + minExtent = "48 38"; + visible = "1"; + command = "OptionsDlg.setPane(Graphics);"; + helpTag = "0"; + text = "GRAPHICS"; + maxLength = "255"; + simpleStyle = "0"; + }; + new ShellTabButton(OP_TexturesTab) { + profile = "ShellTabProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "19 106"; + extent = "108 38"; + minExtent = "48 38"; + visible = "1"; + command = "OptionsDlg.setPane(Textures);"; + helpTag = "0"; + text = "TEXTURES"; + maxLength = "255"; + simpleStyle = "0"; + }; + new ShellTabButton(OP_SoundTab) { + profile = "ShellTabProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "19 136"; + extent = "108 38"; + minExtent = "48 38"; + visible = "1"; + command = "OptionsDlg.setPane(Sound);"; + helpTag = "0"; + text = "SOUND"; + maxLength = "255"; + simpleStyle = "0"; + }; + new ShellTabButton(OP_ControlsTab) { + profile = "ShellTabProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "19 166"; + extent = "108 38"; + minExtent = "48 38"; + visible = "1"; + command = "OptionsDlg.setPane(Controls);"; + helpTag = "0"; + text = "CONTROLS"; + maxLength = "255"; + simpleStyle = "0"; + }; + new ShellTabButton(OP_NetworkTab) { + profile = "ShellTabProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "19 196"; + extent = "108 38"; + minExtent = "48 38"; + visible = "1"; + command = "OptionsDlg.setPane(Network);"; + helpTag = "0"; + text = "NETWORK"; + maxLength = "255"; + simpleStyle = "0"; + }; + new ShellTabButton(OP_GameTab) { + profile = "ShellTabProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "19 226"; + extent = "108 38"; + minExtent = "48 38"; + visible = "1"; + command = "OptionsDlg.setPane(Game);"; + helpTag = "0"; + text = "GAME"; + maxLength = "255"; + simpleStyle = "0"; + }; + new ShellTabFrame() { + profile = "ShellTabFrameProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "127 31"; + extent = "254 338"; + minExtent = "254 26"; + visible = "1"; + helpTag = "0"; + isVertical = "1"; + useCloseButton = "0"; + edgeInset = "0"; + }; + new ShellFieldCtrl(OP_VideoPane) { + profile = "ShellFieldProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "138 42"; + extent = "437 316"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "2 16"; + extent = "100 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Video Driver:"; + maxLength = "255"; + }; + new ShellPopupMenu(OP_VideoDriverMenu) { + profile = "ShellPopupProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "99 7"; + extent = "140 36"; + minExtent = "49 36"; + visible = "1"; + helpTag = "0"; + text = "Select Driver"; + maxLength = "255"; + maxPopupHeight = "200"; + buttonBitmap = "gui/shll_pulldown"; + rolloverBarBitmap = "gui/shll_pulldownbar_rol"; + selectedBarBitmap = "gui/shll_pulldownbar_act"; + noButtonStyle = "0"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "2 54"; + extent = "100 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Resolution:"; + maxLength = "255"; + }; + new ShellPopupMenu(OP_ResMenu) { + profile = "ShellPopupProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "99 45"; + extent = "140 36"; + minExtent = "49 36"; + visible = "1"; + helpTag = "0"; + text = "Select Resolution"; + maxLength = "255"; + maxPopupHeight = "200"; + buttonBitmap = "gui/shll_pulldown"; + rolloverBarBitmap = "gui/shll_pulldownbar_rol"; + selectedBarBitmap = "gui/shll_pulldownbar_act"; + noButtonStyle = "0"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "2 92"; + extent = "100 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Bit Depth:"; + maxLength = "255"; + }; + new ShellPopupMenu(OP_BPPMenu) { + profile = "ShellPopupProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "99 83"; + extent = "140 36"; + minExtent = "49 36"; + visible = "1"; + helpTag = "0"; + text = "Default"; + maxLength = "255"; + maxPopupHeight = "200"; + buttonBitmap = "gui/shll_pulldown"; + rolloverBarBitmap = "gui/shll_pulldownbar_rol"; + selectedBarBitmap = "gui/shll_pulldownbar_act"; + noButtonStyle = "0"; + }; + new ShellToggleButton(OP_FullScreenTgl) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "102 125"; + extent = "127 30"; + minExtent = "26 27"; + visible = "1"; + helpTag = "0"; + text = "FULL SCREEN"; + maxLength = "255"; + }; + new ShellBitmapButton(OP_ApplyBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "275 176"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "OptionsDlg.applyGraphicChanges();"; + helpTag = "0"; + text = "APPLY CHANGES"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "275 8"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.pushDialog(DriverInfoDlg);"; + helpTag = "0"; + text = "DRIVER INFO"; + simpleStyle = "0"; + }; + new ShellToggleButton(OP_VSyncTgl) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "133 243"; + extent = "170 30"; + minExtent = "26 27"; + visible = "1"; + helpTag = "0"; + text = "DISABLE VERTICAL SYNC"; + maxLength = "255"; + }; + }; + new ShellFieldCtrl(OP_GraphicsPane) { + profile = "ShellFieldProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "138 42"; + extent = "437 316"; + minExtent = "16 18"; + visible = "0"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "231 8"; + extent = "97 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Gamma Correction:"; + maxLength = "255"; + }; + new ShellSliderCtrl(OP_GammaSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "241 23"; + extent = "170 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + altCommand = "updateGammaCorrection();"; + helpTag = "0"; + range = "0.000000 1.000000"; + ticks = "1000"; + value = "0.5"; + usePlusMinus = "1"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "26 8"; + extent = "72 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Terrain Detail:"; + maxLength = "255"; + }; + new ShellSliderCtrl(OP_TerrainSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "36 23"; + extent = "170 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + command = "updateTerrainDetail();"; + helpTag = "0"; + range = "0.000000 25.000000"; + ticks = "26"; + value = "17"; + usePlusMinus = "1"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "231 48"; + extent = "67 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Shape Detail:"; + maxLength = "255"; + }; + new ShellSliderCtrl(OP_ShapeSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "241 63"; + extent = "170 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + helpTag = "0"; + range = "0.000000 1.000000"; + ticks = "19"; + value = "0.5"; + usePlusMinus = "1"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "27 48"; + extent = "77 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Shadow Detail:"; + maxLength = "255"; + }; + new ShellSliderCtrl(OP_ShadowSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "37 63"; + extent = "170 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + helpTag = "0"; + range = "0.000000 1.000000"; + ticks = "1000"; + value = "0"; + usePlusMinus = "1"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "79 100"; + extent = "70 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Sky Detail:"; + maxLength = "255"; + }; + new ShellPopupMenu(OP_SkyDetailMenu) { + profile = "ShellPopupProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "146 91"; + extent = "200 36"; + minExtent = "49 36"; + visible = "1"; + helpTag = "0"; + text = "Default"; + maxLength = "255"; + maxPopupHeight = "200"; + buttonBitmap = "gui/shll_pulldown"; + rolloverBarBitmap = "gui/shll_pulldownbar_rol"; + selectedBarBitmap = "gui/shll_pulldownbar_act"; + noButtonStyle = "0"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "35 130"; + extent = "114 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "First Person Draw:"; + maxLength = "255"; + }; + new ShellPopupMenu(OP_PlayerRenderMenu) { + profile = "ShellPopupProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "146 121"; + extent = "200 36"; + minExtent = "49 36"; + visible = "1"; + helpTag = "0"; + text = "Default"; + maxLength = "255"; + maxPopupHeight = "200"; + buttonBitmap = "gui/shll_pulldown"; + rolloverBarBitmap = "gui/shll_pulldownbar_rol"; + selectedBarBitmap = "gui/shll_pulldownbar_act"; + noButtonStyle = "0"; + }; + new ShellToggleButton() { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "31 165"; + extent = "170 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$pref::precipitationOn"; + helpTag = "0"; + text = "PRECIPITATION"; + maxLength = "255"; + }; + new ShellToggleButton() { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "236 165"; + extent = "170 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$pref::Interior::DynamicLights"; + helpTag = "0"; + text = "DYNAMIC INTERIOR LIGHTS"; + maxLength = "255"; + }; + new ShellToggleButton() { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "31 195"; + extent = "170 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$pref::decalsOn"; + helpTag = "0"; + text = "DECALS"; + maxLength = "255"; + }; + new ShellToggleButton() { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "236 195"; + extent = "170 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$pref::Terrain::dynamicLights"; + helpTag = "0"; + text = "DYNAMIC TERRAIN LIGHTS"; + maxLength = "255"; + }; + new ShellToggleButton() { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "31 225"; + extent = "170 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$pref::Terrain::enableDetails"; + helpTag = "0"; + text = "TERRAIN DETAILS"; + maxLength = "255"; + }; + new ShellToggleButton(OP_IntTexturedFogTgl) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "236 225"; + extent = "170 30"; + minExtent = "26 27"; + visible = "1"; + helpTag = "0"; + text = "INTERIOR TEXTURED FOG"; + maxLength = "255"; + }; + new ShellToggleButton(OP_VertexLightTgl) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "31 255"; + extent = "170 30"; + minExtent = "26 27"; + visible = "1"; + helpTag = "0"; + text = "VERTEX LIGHTING"; + maxLength = "255"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "231 262"; + extent = "85 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Visible Distance:"; + maxLength = "255"; + }; + new ShellSliderCtrl(OP_VisibleDistanceSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "241 277"; + extent = "170 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + helpTag = "0"; + range = "0.600000 1.000000"; + ticks = "400"; + value = "1"; + usePlusMinus = "1"; + }; + }; + new ShellFieldCtrl(OP_TexturesPane) { + profile = "ShellFieldProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "138 42"; + extent = "437 316"; + minExtent = "16 18"; + visible = "0"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "37 16"; + extent = "100 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Texture Quality:"; + maxLength = "255"; + }; + new ShellPopupMenu(OP_TexQualityMenu) { + profile = "ShellPopupProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "134 7"; + extent = "140 36"; + minExtent = "49 36"; + visible = "1"; + helpTag = "0"; + text = "Default"; + maxLength = "255"; + maxPopupHeight = "200"; + buttonBitmap = "gui/shll_pulldown"; + rolloverBarBitmap = "gui/shll_pulldownbar_rol"; + selectedBarBitmap = "gui/shll_pulldownbar_act"; + noButtonStyle = "0"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "26 85"; + extent = "114 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Terrain Texture Detail:"; + maxLength = "255"; + }; + new ShellSliderCtrl(OP_TerrainTexSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "36 100"; + extent = "170 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + helpTag = "0"; + range = "0.000000 6.000000"; + ticks = "7"; + value = "6"; + usePlusMinus = "1"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "231 85"; + extent = "109 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Shape Texture Detail:"; + maxLength = "255"; + }; + new ShellSliderCtrl(OP_ShapeTexSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "241 100"; + extent = "170 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + helpTag = "0"; + range = "0.000000 5.000000"; + ticks = "6"; + value = "4"; + usePlusMinus = "1"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "26 125"; + extent = "119 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Building Texture Detail:"; + maxLength = "255"; + }; + new ShellSliderCtrl(OP_BuildingTexSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "36 140"; + extent = "170 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + helpTag = "0"; + range = "0.000000 5.000000"; + ticks = "6"; + value = "4"; + usePlusMinus = "1"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "231 125"; + extent = "97 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Sky Texture Detail:"; + maxLength = "255"; + }; + new ShellSliderCtrl(OP_SkyTexSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "241 140"; + extent = "170 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + helpTag = "0"; + range = "0.000000 5.000000"; + ticks = "6"; + value = "4"; + usePlusMinus = "1"; + }; + new GuiTextCtrl(OP_CompressLabel) { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "17 46"; + extent = "120 22"; + minExtent = "8 8"; + visible = "0"; + helpTag = "0"; + text = "Texture Compression:"; + maxLength = "255"; + }; + new GuiTextCtrl(OP_CompressLabel_Disabled) { + profile = "DisabledTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 46"; + extent = "135 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Texture Compression:"; + maxLength = "255"; + }; + new ShellPopupMenu(OP_CompressMenu) { + profile = "ShellPopupProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "134 37"; + extent = "140 36"; + minExtent = "49 36"; + visible = "1"; + helpTag = "0"; + text = "None"; + maxLength = "255"; + maxPopupHeight = "200"; + buttonBitmap = "gui/shll_pulldown"; + rolloverBarBitmap = "gui/shll_pulldownbar_rol"; + selectedBarBitmap = "gui/shll_pulldownbar_act"; + noButtonStyle = "0"; + }; + new GuiTextCtrl(OP_AnisotropyLabel) { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "26 179"; + extent = "58 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Anisotropy:"; + maxLength = "255"; + }; + new GuiTextCtrl(OP_AnisotropyLabel_Disabled) { + profile = "DisabledTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "26 179"; + extent = "58 22"; + minExtent = "8 8"; + visible = "0"; + helpTag = "0"; + text = "Anisotropy:"; + maxLength = "255"; + }; + new ShellSliderCtrl(OP_AnisotropySlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "37 194"; + extent = "170 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + helpTag = "0"; + range = "0.000000 1.000000"; + ticks = "1000"; + value = "0"; + usePlusMinus = "1"; + }; + new ShellToggleButton(OP_EnvMapTgl) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "236 180"; + extent = "170 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$pref::environmentMaps"; + helpTag = "0"; + text = "ENVIRONMENT MAPS"; + maxLength = "255"; + }; + new ShellToggleButton(OP_IntEnvMapTgl) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "236 210"; + extent = "170 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$pref::Interior::ShowEnvironmentMaps"; + helpTag = "0"; + text = "INTERIOR ENV. MAPS"; + maxLength = "255"; + }; + }; + new ShellFieldCtrl(OP_SoundPane) { + profile = "ShellFieldProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "138 42"; + extent = "437 316"; + minExtent = "16 18"; + visible = "0"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 16"; + extent = "72 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "3D Provider:"; + maxLength = "255"; + }; + new ShellPopupMenu(OP_AudioProviderMenu) { + profile = "ShellPopupProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "79 7"; + extent = "268 36"; + minExtent = "49 36"; + visible = "1"; + helpTag = "0"; + text = "Select Provider"; + maxLength = "255"; + maxPopupHeight = "200"; + buttonBitmap = "gui/shll_pulldown"; + rolloverBarBitmap = "gui/shll_pulldownbar_rol"; + selectedBarBitmap = "gui/shll_pulldownbar_act"; + noButtonStyle = "0"; + }; + new ShellBitmapButton(OP_AudioResetProvider) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "339 7"; + extent = "79 38"; + minExtent = "32 38"; + visible = "1"; + helpTag = "0"; + text = "RESET"; + simpleStyle = "0"; + }; + new ShellToggleButton(OP_AudioEnvironmentTgl) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "252 43"; + extent = "152 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$pref::Audio::environmentEnabled"; + helpTag = "0"; + text = "ENVIRONMENT ENABLED"; + maxLength = "255"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 47"; + extent = "72 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Speakers:"; + maxLength = "255"; + }; + new ShellPopupMenu(OP_AudioSpeakerMenu) { + profile = "ShellPopupProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "79 38"; + extent = "169 36"; + minExtent = "49 36"; + visible = "1"; + helpTag = "0"; + text = "Select Speaker"; + maxLength = "255"; + maxPopupHeight = "200"; + buttonBitmap = "gui/shll_pulldown"; + rolloverBarBitmap = "gui/shll_pulldownbar_rol"; + selectedBarBitmap = "gui/shll_pulldownbar_act"; + noButtonStyle = "0"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "26 89"; + extent = "79 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Master Volume:"; + maxLength = "255"; + }; + new ShellSliderCtrl(OP_MasterVolumeSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "36 104"; + extent = "170 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + altCommand = "updateMasterVolume();"; + helpTag = "0"; + range = "0.000000 1.000000"; + ticks = "1000"; + value = "0.8"; + usePlusMinus = "1"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "231 89"; + extent = "79 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Effects Volume:"; + maxLength = "255"; + }; + new ShellSliderCtrl(OP_EffectsVolumeSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "241 104"; + extent = "170 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + helpTag = "0"; + range = "0.000000 1.000000"; + ticks = "1000"; + value = "1"; + usePlusMinus = "1"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "26 129"; + extent = "60 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Gui Volume:"; + maxLength = "255"; + }; + new ShellSliderCtrl(OP_GuiVolumeSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "36 144"; + extent = "170 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + altCommand = "updateGuiVolume();"; + helpTag = "0"; + range = "0.000000 1.000000"; + ticks = "1000"; + value = "0.8"; + usePlusMinus = "1"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "231 129"; + extent = "97 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Voice Bind Volume:"; + maxLength = "255"; + }; + new ShellSliderCtrl(OP_VoiceBindVolumeSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "241 144"; + extent = "170 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + helpTag = "0"; + range = "0.000000 1.000000"; + ticks = "1000"; + value = "0.8"; + usePlusMinus = "1"; + }; + new ShellToggleButton(OP_MusicTgl) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "31 179"; + extent = "170 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$pref::Audio::musicEnabled"; + helpTag = "0"; + text = "MP3 MUSIC"; + maxLength = "255"; + }; + new GuiTextCtrl(OP_MusicVolumeLabel) { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "231 169"; + extent = "74 22"; + minExtent = "8 8"; + visible = "0"; + helpTag = "0"; + text = "Music Volume:"; + maxLength = "255"; + }; + new GuiTextCtrl(OP_MusicVolumeLabel_Disabled) { + profile = "DisabledTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "231 169"; + extent = "74 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Music Volume:"; + maxLength = "255"; + }; + new ShellSliderCtrl(OP_MusicVolumeSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "241 184"; + extent = "170 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + altCommand = "updateMusicVolume();"; + helpTag = "0"; + range = "0.000000 1.000000"; + ticks = "1000"; + value = "0.8"; + usePlusMinus = "1"; + }; + new ShellToggleButton(OP_MicrophoneEnabledTgl) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "31 231"; + extent = "170 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$pref::Audio::microphoneEnabled"; + helpTag = "0"; + text = "MICROPHONE ENABLED"; + maxLength = "255"; + }; + new ShellBitmapButton(OP_RecordTestBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "232 226"; + extent = "173 38"; + minExtent = "32 38"; + visible = "1"; + command = "alxCaptureStart(true);"; + helpTag = "0"; + text = "TEST RECORD"; + simpleStyle = "0"; + }; + new GuiTextCtrl(OP_MicVolumeLabel) { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "28 261"; + extent = "102 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Microphone Volume:"; + maxLength = "255"; + }; + new GuiTextCtrl(OP_MicVolumeLabel_Disabled) { + profile = "DisabledTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "28 261"; + extent = "102 22"; + minExtent = "8 8"; + visible = "0"; + helpTag = "0"; + text = "Microphone Volume:"; + maxLength = "255"; + }; + new ShellSliderCtrl(OP_MicrophoneVolumeSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "38 276"; + extent = "170 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + helpTag = "0"; + range = "0.000000 1.000000"; + ticks = "1000"; + value = "1"; + usePlusMinus = "1"; + }; + new GuiTextCtrl(OP_InputBoostLabel) { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "231 261"; + extent = "123 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Microphone Input Boost:"; + maxLength = "255"; + }; + new GuiTextCtrl(OP_InputBoostLabel_Disabled) { + profile = "DisabledTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "231 261"; + extent = "123 22"; + minExtent = "8 8"; + visible = "0"; + helpTag = "0"; + text = "Microphone Input Boost:"; + maxLength = "255"; + }; + new GuiTextCtrl(OP_InputBoostPercentTxt) { + profile = "ShellTextCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "271 279"; + extent = "110 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "100%"; + maxLength = "255"; + }; + new ShellSliderCtrl(OP_InputBoostSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "241 276"; + extent = "170 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + altCommand = "updateInputBoost();"; + helpTag = "0"; + range = "1.000000 5.000000"; + ticks = "5000"; + value = "4.78947"; + usePlusMinus = "1"; + }; + }; + new ShellFieldCtrl(OP_ControlsPane) { + profile = "ShellFieldProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "138 42"; + extent = "437 316"; + minExtent = "16 18"; + visible = "0"; + helpTag = "0"; + + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "2 2"; + extent = "290 282"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "0 2"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 6"; + extent = "266 270"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellTextList(OP_RemapList) { + profile = "ShellTextArrayProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "266 8"; + minExtent = "8 8"; + visible = "1"; + altCommand = "OP_RemapList.doRemap();"; + helpTag = "0"; + enumerate = "0"; + resizeCell = "1"; + columns = "2 150"; + fitParentWidth = "1"; + clipColumnText = "0"; + }; + }; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "292 8"; + extent = "140 38"; + minExtent = "32 38"; + visible = "1"; + command = "restoreDefaultMappings();"; + helpTag = "0"; + text = "RESTORE DEFAULTS"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "292 46"; + extent = "140 38"; + minExtent = "32 38"; + visible = "1"; + command = "ShellGetLoadFilename( \"LOAD CONTROL CONFIG\", \"prefs/*.cs\", \"isMapFile\", \"loadMapFile\" );"; + helpTag = "0"; + text = "LOAD"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "292 84"; + extent = "140 38"; + minExtent = "32 38"; + visible = "1"; + command = "ShellGetSaveFilename( \"SAVE CONTROL CONFIG\", \"prefs/*.cs\", \"isMapFile\", \"saveMapFile\", $pref::Input::ActiveConfig );"; + helpTag = "0"; + text = "SAVE AS"; + simpleStyle = "0"; + }; + new ShellBitmapButton(OP_ConfigureMouseBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "292 155"; + extent = "140 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.pushDialog(MouseConfigDlg);"; + helpTag = "0"; + text = "CONFIGURE MOUSE"; + simpleStyle = "0"; + }; + new ShellBitmapButton(OP_ConfigureJoystickBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "292 231"; + extent = "140 38"; + minExtent = "32 38"; + visible = "0"; + command = "Canvas.pushDialog(JoystickConfigDlg);"; + helpTag = "0"; + text = "CONFIGURE JOYSTICK"; + simpleStyle = "0"; + }; + new ShellToggleButton(OP_JoystickTgl) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "296 197"; + extent = "126 30"; + minExtent = "26 27"; + visible = "0"; + variable = "pref::Input::JoystickEnabled"; + helpTag = "0"; + text = "ENABLE JOYSTICK"; + maxLength = "255"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "32 287"; + extent = "124 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Toggle Console Key:"; + maxLength = "255"; + }; + new ShellFieldCtrl() { + profile = "ShellFieldProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "161 286"; + extent = "128 23"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new GuiButtonCtrl(OP_ConsoleKeyBtn) { + profile = "ShellActiveTextProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "3 3"; + extent = "122 17"; + minExtent = "8 8"; + visible = "1"; + command = "OP_ConsoleKeyBtn.doRemap();"; + helpTag = "0"; + text = "grave"; + }; + }; + }; + new ShellFieldCtrl(OP_NetworkPane) { + profile = "ShellFieldProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "138 42"; + extent = "437 316"; + minExtent = "16 18"; + visible = "0"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "26 8"; + extent = "65 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Packet Rate:"; + maxLength = "255"; + }; + new ShellSliderCtrl(OP_PacketRateSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "36 23"; + extent = "170 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + helpTag = "0"; + range = "2.000000 32.000000"; + ticks = "31"; + value = "10"; + usePlusMinus = "1"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "231 8"; + extent = "62 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Packet Size:"; + maxLength = "255"; + }; + new ShellSliderCtrl(OP_PacketSizeSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "241 23"; + extent = "170 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + helpTag = "0"; + range = "100.000000 450.000000"; + ticks = "36"; + value = "200"; + usePlusMinus = "1"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "26 48"; + extent = "99 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Client Update Rate:"; + maxLength = "255"; + }; + new ShellSliderCtrl(OP_UpdateRateSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "36 63"; + extent = "170 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + helpTag = "0"; + range = "8.000000 32.000000"; + ticks = "25"; + value = "32"; + usePlusMinus = "1"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "11 119"; + extent = "200 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Display on Master Server:"; + maxLength = "255"; + }; + new ShellPopupMenu(OP_MasterServerMenu) { + profile = "ShellPopupProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "208 110"; + extent = "180 36"; + minExtent = "49 36"; + visible = "1"; + helpTag = "0"; + text = "Select Display Option"; + maxLength = "255"; + maxPopupHeight = "200"; + buttonBitmap = "gui/shll_pulldown"; + rolloverBarBitmap = "gui/shll_pulldownbar_rol"; + selectedBarBitmap = "gui/shll_pulldownbar_act"; + noButtonStyle = "0"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "67 157"; + extent = "144 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Server Location:"; + maxLength = "255"; + }; + new ShellPopupMenu(OP_RegionMenu) { + profile = "ShellPopupProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "208 148"; + extent = "180 36"; + minExtent = "49 36"; + visible = "1"; + helpTag = "0"; + text = "Select Region"; + maxLength = "255"; + maxPopupHeight = "200"; + buttonBitmap = "gui/shll_pulldown"; + rolloverBarBitmap = "gui/shll_pulldownbar_rol"; + selectedBarBitmap = "gui/shll_pulldownbar_act"; + noButtonStyle = "0"; + }; + new ShellToggleButton() { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "123 208"; + extent = "190 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$pref::Net::CheckEmail"; + helpTag = "0"; + text = "CHECK EMAIL WHILE PLAYING"; + maxLength = "255"; + }; + new ShellToggleButton() { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "123 236"; + extent = "190 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$pref::Net::DisconnectChat"; + helpTag = "0"; + text = "DISCONNECT FROM CHAT"; + maxLength = "255"; + }; + }; + new ShellFieldCtrl(OP_GamePane) { + profile = "ShellFieldProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "138 42"; + extent = "437 316"; + minExtent = "16 18"; + visible = "0"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "26 8"; + extent = "65 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Zoom Speed:"; + maxLength = "255"; + }; + new ShellSliderCtrl(OP_ZoomSpeedSlider) { + profile = "ShellSliderProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "36 23"; + extent = "170 24"; + minExtent = "12 24"; + visible = "1"; + variable = "value"; + helpTag = "0"; + range = "0.000000 500.000000"; + ticks = "501"; + value = "500"; + usePlusMinus = "1"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "237 11"; + extent = "173 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.popDialog( OptionsDlg ); Canvas.pushDialog(EditChatMenuGui);"; + helpTag = "0"; + text = "EDIT CHAT MENU"; + simpleStyle = "0"; + }; + new ShellToggleButton() { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "31 64"; + extent = "170 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$pref::toggleVehicleView"; + helpTag = "0"; + text = "3RD PERSON VEHICLE"; + maxLength = "255"; + }; + new ShellToggleButton() { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "236 64"; + extent = "170 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$pref::SkipIntro"; + helpTag = "0"; + text = "SKIP INTRO"; + maxLength = "255"; + }; + new ShellToggleButton() { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "31 94"; + extent = "170 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$pref::Vehicle::InvertYAxis"; + helpTag = "0"; + text = "INVERT VEHICLE Y-AXIS"; + maxLength = "255"; + }; + new ShellToggleButton(OP_ForceFeedbackTgl) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "236 94"; + extent = "170 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$Pref::useImmersion"; + command = "toggleImmersion();"; + helpTag = "0"; + text = "ENABLE FORCE FEEDBACK"; + maxLength = "255"; + }; + new ShellToggleButton() { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "31 124"; + extent = "170 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$pref::enableBadWordFilter"; + helpTag = "0"; + text = "ENABLE BAD WORD FILTER"; + maxLength = "255"; + }; + new ShellToggleButton() { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "236 124"; + extent = "170 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$pref::usePrefSkins"; + helpTag = "0"; + text = "SHOW PERSONAL SKINS"; + maxLength = "255"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "79 173"; + extent = "100 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Launch Screen:"; + maxLength = "255"; + }; + new ShellPopupMenu(OP_LaunchScreenMenu) { + profile = "ShellPopupProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "176 164"; + extent = "180 36"; + minExtent = "49 36"; + visible = "1"; + helpTag = "0"; + text = "Select Screen"; + maxLength = "255"; + maxPopupHeight = "200"; + buttonBitmap = "gui/shll_pulldown"; + rolloverBarBitmap = "gui/shll_pulldownbar_rol"; + selectedBarBitmap = "gui/shll_pulldownbar_act"; + noButtonStyle = "0"; + }; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/PanoramaGui.gui b/base/gui/PanoramaGui.gui new file mode 100644 index 0000000..a3c883b --- /dev/null +++ b/base/gui/PanoramaGui.gui @@ -0,0 +1,15 @@ +//--- OBJECT WRITE BEGIN --- +new GameTSCtrl(PanoramaGui) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/PasswordDlg.gui b/base/gui/PasswordDlg.gui new file mode 100644 index 0000000..2bfa4f7 --- /dev/null +++ b/base/gui/PasswordDlg.gui @@ -0,0 +1,80 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(PasswordDlg) { + profile = "DlgBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "147 142"; + extent = "345 172"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "PASSWORD"; + noTitleBar = "0"; + + new GuiTextCtrl() { + profile = "ShellMediumTextProfile"; + horizSizing = "center"; + vertSizing = "bottom"; + position = "54 42"; + extent = "236 20"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "This server requires a password."; + }; + new ShellTextEditCtrl() { + profile = "NewTextEditProfile"; + horizSizing = "center"; + vertSizing = "bottom"; + position = "78 68"; + extent = "180 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$JoinGamePassword"; + altCommand = "PasswordDlg.accept();"; + helpTag = "0"; + historySize = "0"; + maxLength = "16"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "35 117"; + extent = "120 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.popDialog(PasswordDlg);"; + accelerator = "escape"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "190 117"; + extent = "120 38"; + minExtent = "32 38"; + visible = "1"; + command = "PasswordDlg.accept();"; + helpTag = "0"; + text = "OK"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/PickTeamDlg.gui b/base/gui/PickTeamDlg.gui new file mode 100644 index 0000000..b7300ce --- /dev/null +++ b/base/gui/PickTeamDlg.gui @@ -0,0 +1,74 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(PickTeamDlg) { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + mouseOn = "1"; + + new ShellPaneCtrl(PickTeamFrame) { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "220 115"; + extent = "250 250"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + noTitleBar = "0"; + + new ShellBitmapButton("PickTeamAButton") { + profile = "ShellButtonProfile"; + horizSizing = "center"; + vertSizing = "top"; + position = "158 60"; + extent = "120 60"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = ""; + command = "clientCmdprocessPickTeam(1);"; + }; + new ShellBitmapButton("PickTeamBButton") { + profile = "ShellButtonProfile"; + horizSizing = "center"; + vertSizing = "top"; + position = "158 95"; + extent = "120 60"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = ""; + command = "clientCmdprocessPickTeam(2);"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "center"; + vertSizing = "top"; + position = "158 130"; + extent = "120 60"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Observer"; + command = "clientCmdprocessPickTeam(4);"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "center"; + vertSizing = "top"; + position = "158 165"; + extent = "120 60"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Automatic"; + command = "clientCmdprocessPickTeam(3);"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/PlayGui.gui b/base/gui/PlayGui.gui new file mode 100644 index 0000000..6b6a0fc --- /dev/null +++ b/base/gui/PlayGui.gui @@ -0,0 +1,535 @@ +//--- OBJECT WRITE BEGIN --- +new GameTSCtrl(PlayGui) { + profile = "GuiContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + beaconBaseTextureName = "gui/beacon_base"; + beaconTargetTextureName = "gui/crosshairs"; + beaconTargetPeriod = 4000; + beaconsVisible = true; + enemyBeaconLineBeginColor = "0 1 0 0.2"; + enemyBeaconLineEndColor = "0 1 0 0.8"; + vehicleBeaconLineBeginColor = "1 0 0 0.2"; + vehicleBeaconLineEndColor = "1 0 0 0.8"; + friendBeaconLineBeginColor = "1 1 0 0.2"; + frinedBeaconLineEndColor = "1 1 0 0.8"; + beaconLineWidth = "2.5"; + beaconTextYOffset = 14; + + new HudScoreCtrl(objectiveHud) { + profile = "HudScoreProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "8 437"; + extent = "245 35"; + minExtent = "8 8"; + visible = "0"; + }; + + new HudBitmapCtrl(hudClusterBack) { + + profile = "GuiButtonProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "444 8"; + extent = "188 81"; + minExtent = "8 8"; + visible = "1"; + frameColor = "0 1 0 1"; + opacity = "0.9"; + bitmap = "gui/hud_new_cog.png"; + + new HudBitmapCtrl(hudCompassBack) { + + profile = "GuiButtonProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "109 2"; + extent = "77 77"; + minExtent = "8 8"; + visible = "1"; + frameColor = "0 1 0 1"; + opacity = "0.9"; + bitmap = "gui/hud_new_compass.png"; + }; + + new GuiControl( compassHud ) { + + profile = "GuiDefaultProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "107 2"; + extent = "81 77"; + minExtent = "8 8"; + visible = "1"; + opacity = "1.0"; + + new HudCompass( compass ) { + + profile = "clockProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "0 0"; + extent = "100 100"; + minExtent = "8 8"; + visible = "1"; + opacity = "1.0"; + textColor = "0 255 0"; + }; + }; + + new HudPulsingBitmap( sensorHudBack ) + { + profile = "GuiButtonProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "134 26"; + extent = "27 29"; + minExtent = "8 8"; + visible = "1"; + frameColor = "0 1 0 1"; + opacity = "0.9"; + bitmap = "gui/hud_new_ping.png"; + pulse = false; + color = "3 255 110"; + }; + + new HudPulsingBitmap( sensorHud ) { + + profile = "GuiDefaultProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "134 26"; + extent = "27 29"; + minExtent = "8 8"; + visible = "1"; + opacity = "0.9"; + bitmap = "gui/hud_new_ping.png"; + pulse = true; + pulseRate = 1000; + visible = false; + + pingColor = "255 22 22"; + jamColor = "253 255 2"; + }; + + new HudEnergy( energyHud ) { + + profile = "GuiDefaultProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "8 23"; + extent = "92 5"; + minExtent = "92 5"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + fillColor = "0.353000 0.373000 0.933000 0.800000"; + frameColor = "0.000000 1.000000 0.000000 1.000000"; + opacity = "0.8"; + subRegion = "0 0 92 10"; + pulseRate = "500"; + pulseThreshold = "0.3"; + }; + + new HudDamage( damageHud ) { + + profile = "GuiDefaultProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "8 5"; + extent = "92 8"; + minExtent = "92 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + fillColor = "0.000 1.000 0.000 0.800000"; + frameColor = "0.000000 1.000000 0.000000 0.000000"; + opacity = "0.8"; + subRegion = "0 0 92 10"; + pulseRate = "500"; + pulseThreshold = "0.3"; + }; + + new HudHeat(HeatHud) { + + profile = "GuiDefaultProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "8 30"; + extent = "92 3"; + minExtent = "92 3"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + fillColor = "1.000 0.000 0.000 0.800000"; + opacity = "0.8"; + subRegion = "0 0 100 10"; + pulseRate = "500"; + pulseThreshold = "0.3"; + heatWarning = 0.7; //When does the heat bar flash on the player? + }; + }; + + new HudClock( clockHud ) { + profile = "clockProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "559 38"; + extent = "65 15"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + opacity = "0.9"; + bitmap = "gui/hud_mistimer.png"; + autoCenter = "0"; + autoResize = "0"; + subRegion = "0 2 65 15"; + }; + + + new HudBitmapCtrl(lagHudIndicator) { + profile = "GuiButtonProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "570 38"; + extent = "35 32"; + visible = "0"; + frameColor = "0 1 0 1"; + opacity = "0.8"; + bitmap = "gui/hud_disconnect.png"; + }; + + new GuiControl(retCenterHud) { + profile = "GuiDefaultProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "192 112"; + extent = "256 256"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + wrap = "0"; + + new HudCrosshair(reticleHud) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "256 256"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + fillColor = "0.250000 0.250000 0.250000 0.250000"; + frameColor = "0.000000 1.000000 0.000000 1.000000"; + opacity = "0.5"; + bitmap = "gui/ret_blaster.png"; + autoCenter = "1"; + autoResize = "1"; + }; + + new GuiTextCtrl(ammoHud) { + profile = "GuiAmmoHudProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "75 150"; + extent = "80 30"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + }; + + new HudPulsingBitmap(deploySensor) + { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "94 94"; + extent = "67 67"; + minExtent = "8 8"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + fillColor = "0.250000 0.250000 0.250000 0.250000"; + frameColor = "0.000000 1.000000 0.000000 1.000000"; + opacity = "0.5"; + bitmap = "gui/hud_ping.png"; + autoCenter = "1"; + autoResize = "1"; + pulse = "false"; + pulseRate = "1000"; + visible = false; + color = "0 0 0 0"; + }; + new HudCrosshair(reticleFrameHud) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "94 94"; + extent = "67 67"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + fillColor = "0.250000 0.250000 0.250000 0.250000"; + frameColor = "0.000000 1.000000 0.000000 1.000000"; + opacity = "0.5"; + bitmap = "gui/hud_retrng.png"; + autoCenter = "1"; + autoResize = "1"; + }; + }; + new HudInventory(inventoryHud) { + profile = "GuiHudCounterProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "486 434"; + extent = "115 39"; + minExtent = "8 8"; + visible = "1"; + fillColor = "0.250000 0.250000 0.250000 0.250000"; + frameColor = "0.000000 1.000000 0.000000 1.000000"; + opacity = "0.9"; + ammoOffset = "6 24"; + backGroundOffset = "0 0"; + highLightOffset = "0 0"; + iconOffset = "1 1"; + backGroundSpace = "2"; + }; + + new GuiBitmapCtrl(backpackFrame) { + profile = "GuiDefaultProfile"; + horizSizing = "left"; + vertSizing = "top"; + bitmap = "gui/hud_new_panel.png"; + position = "457 434"; + extent = "27 38"; + minExtent = "8 8"; + visible = "0"; + + new GuiBitmapCtrl(backpackIcon) { + profile = "GuiDefaultProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "0 3"; + extent = "25 25"; + minExtent = "8 8"; + visible = "1"; + }; + + new GuiTextCtrl(backpackText) { + profile = "GuiPackTextProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "1 24"; + extent = "25 15"; + minExtent = "8 8"; + visible = "0"; + }; + }; + + new HudWeapons(weaponsHud) { + profile = "GuiHudCounterProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "604 194"; + extent = "27 244"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + fillColor = "0.250000 0.250000 0.250000 0.250000"; + frameColor = "0.000000 1.000000 0.000000 1.000000"; + opacity = "0.9"; + ammoOffset = "6 24"; + backGroundOffset = "0 0"; + highLightOffset = "0 0"; + iconOffset = "1 1"; + backGroundSpace = "2"; + }; + + new HudNavDisplay(navHud) { + profile = "GuiHudNavProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + fillColor = "0.250000 0.250000 0.250000 0.250000"; + frameColor = "0.000000 1.000000 0.000000 1.000000"; + opacity = "0.5"; + autoCenter = "0"; + autoResize = "0"; + renderEdgeMarkers = "1"; + renderXYProjection = "0"; + markerHitRadius = "2"; + markerAngle = "30"; + markerLen = "20"; + defaultMarkerColor = "0 255 220 220"; + acquireScreenRadius = "75"; + playerEyeZOffset = "0.4"; + damageRectSize = "50 12"; + infoOffset = "24 24"; + acquireBoxCheckDistance = "50"; + damageFrameColor = "255 255 255 255"; + protectedStatics = false; + minMarkerScale = "0.5"; + markerScaleDistance = "1000"; + imageOffset = "2"; + markerImageNames[0] = "small_triangle"; // mission waypoint + markerImageNames[1] = "small_square"; // potential task + markerImageNames[2] = "small_diamond"; // assigned task + markerImageNames[3] = "small_cross"; // client waypoint + markerImageNames[4] = "small_circle"; // target + }; + + new GuiControl(dashboardHud) { + profile = "GuiDefaultProfile"; + horizSizing = "center"; + vertSizing = "top"; + position = "0 360"; + extent = "640 120"; + minExtent = "8 8"; + visible = "0"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + wrap = "0"; + new HudVehicleWeapon(vWeaponsBox) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + //position = "225 30"; + position = "180 25"; + extent = "70 40"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + fillColor = "0.250000 0.250000 0.250000 0.250000"; + frameColor = "0.000000 1.000000 0.000000 1.000000"; + opacity = "0.8"; + ammoOffset = "10 30"; + backGroundOffset = "5 4"; + highLightOffset = "0 0"; + iconOffset = "7 4"; + backGroundSpace = "8"; + }; + }; + + new ShellFieldCtrl(voiceCommHud) + { + profile = "GuiChatBackProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "8 110"; + extent = "160 70"; + minExtent = "8 8"; + visible = "0"; + + new GuiTextCtrl(vcRecordingHud) + { + profile = "GuiRecordingHudProfile"; + position = "0 0"; + extent = "160 16"; + text = "Recording"; + visible = false; + horizSizing = "center"; + vertSizing = "top"; + }; + }; + + new GuiTextCtrl(controlObjectText) + { + profile = "ShellBigTextProfile"; + position = "0 440"; + extent = "640 40"; + text = "Press '\c2Escape\cr' to return to game."; + visible = false; + horizSizing = "center"; + vertSizing = "top"; + }; + + new ShellFieldCtrl(CenterPrintDlg) + { + profile = "GuiChatBackProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "45 200"; + extent = "550 20"; + minExtent = "8 8"; + visible = "0"; + setFirstResponder = "0"; + + new GuiMLTextCtrl(CenterPrintText) { + profile = "CenterPrintTextProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "0 0"; + extent = "546 20"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + }; + }; + + new ShellFieldCtrl(BottomPrintDlg) + { + profile = "GuiChatBackProfile"; + horizSizing = "center"; + vertSizing = "top"; + position = "45 375"; + extent = "550 20"; + minExtent = "8 8"; + visible = "0"; + setFirstResponder = "0"; + + new GuiMLTextCtrl(BottomPrintText) { + profile = "CenterPrintTextProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "0 0"; + extent = "546 20"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + }; + }; + + new HudZoom(ZoomHud) + { + profile = "ZoomHudProfile"; + bitmap = ""; + position = "0 0"; + extent = "0 0"; + minExtent = "8 8"; + visible = "0"; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/RecordingsDlg.gui b/base/gui/RecordingsDlg.gui new file mode 100644 index 0000000..4b0cb97 --- /dev/null +++ b/base/gui/RecordingsDlg.gui @@ -0,0 +1,98 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(RecordingsDlg) { + profile = "DlgBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "120 60"; + extent = "400 360"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "SELECT RECORDING"; + noTitleBar = "0"; + + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "center"; + vertSizing = "height"; + position = "91 36"; + extent = "218 266"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "dynamic"; + constantThumbHeight = "1"; + defaultLineHeight = "15"; + childMargin = "0 0"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 4"; + extent = "210 258"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellTextList(RecordingsDlgList) { + profile = "ShellTextArrayProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "210 8"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + enumerate = "1"; + resizeCell = "1"; + columns = "0"; + fitParentWidth = "1"; + clipColumnText = "0"; + }; + }; + }; + new ShellBitmapButton(PR_CancelBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "48 305"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.popDialog(RecordingsDlg);"; + accelerator = "escape"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + new ShellBitmapButton(PR_StartDemoBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "224 305"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "StartSelectedDemo();"; + helpTag = "0"; + text = "START DEMO"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- + diff --git a/base/gui/RemapDlg.gui b/base/gui/RemapDlg.gui new file mode 100644 index 0000000..c0010cc --- /dev/null +++ b/base/gui/RemapDlg.gui @@ -0,0 +1,46 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(RemapDlg) { + profile = "DlgBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl(RemapFrame) { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "71 172"; + extent = "498 126"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "REMAP"; + + new GuiMLTextCtrl(RemapText) { + profile = "ShellMediumTextProfile"; + horizSizing = "center"; + vertSizing = "bottom"; + position = "49 47"; + extent = "400 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + }; + new GuiInputCtrl(RemapInputCtrl) { + profile = "GuiInputCtrlProfile"; + horizSizing = "center"; + vertSizing = "bottom"; + position = "0 0"; + extent = "64 64"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/ServerInfoDlg.gui b/base/gui/ServerInfoDlg.gui new file mode 100644 index 0000000..f9b42e1 --- /dev/null +++ b/base/gui/ServerInfoDlg.gui @@ -0,0 +1,146 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(ServerInfoDlg) { + profile = "GuiModelessDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellWindowCtrl(SI_Window) { + profile = "ShellWindowProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "145 105"; + extent = "350 270"; + minExtent = "200 200"; + visible = "1"; + helpTag = "0"; + text = "INFO"; + frameBase = "gui/window"; + borderWidth = "2"; + resizeWidth = "1"; + resizeHeight = "1"; + canMove = "1"; + canClose = "1"; + closeCommand = "Canvas.popDialog(ServerInfoDlg);"; + + new GuiFrameSetCtrl(SI_Frame) { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "7 32"; + extent = "336 202"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + columns = "0"; + rows = "0 130"; + borderWidth = "4"; + borderColor = "25 68 56 206"; + borderEnable = "dynamic"; + borderMovable = "dynamic"; + autoBalance = "0"; + fudgeFactor = "4"; + + new ShellScrollCtrl(SI_InfoScroll) { + profile = "NewScrollCtrlProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "0 0"; + extent = "336 96"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "dynamic"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "3 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "7 7"; + extent = "306 88"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextCtrl(SI_InfoWindow) { + profile = "ShellAltTextProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "0 0"; + extent = "306 52"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + allowColorChars = "0"; + }; + }; + }; + new ShellScrollCtrl(SI_ContentScroll) { + profile = "NewScrollCtrlProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 100"; + extent = "336 162"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "dynamic"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "3 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "7 7"; + extent = "322 174"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextCtrl(SI_ContentWindow) { + profile = "InfoWindowProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "271 52"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + allowColorChars = "1"; + }; + }; + }; + }; + new ShellBitmapButton(SI_RefreshBtn) { + profile = "ShellButtonProfile"; + horizSizing = "center"; + vertSizing = "top"; + position = "105 230"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "SI_RefreshBtn.setActive(false); GMJ_Browser.refreshSelectedServer();"; + helpTag = "0"; + text = "REFRESH"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/ShellLoadFileDlg.gui b/base/gui/ShellLoadFileDlg.gui new file mode 100644 index 0000000..4dd5627 --- /dev/null +++ b/base/gui/ShellLoadFileDlg.gui @@ -0,0 +1,98 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(ShellLoadFileDlg) { + profile = "DlgBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl(LOAD_Title) { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "135 95"; + extent = "370 290"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "LOAD FILE"; + noTitleBar = "0"; + + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "center"; + vertSizing = "bottom"; + position = "47 33"; + extent = "276 200"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "dynamic"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "3 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "7 7"; + extent = "262 186"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellTextList(LOAD_FileList) { + profile = "ShellTextArrayProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "268 8"; + minExtent = "8 8"; + visible = "1"; + altCommand = "eval($loadFileCommand); Canvas.popDialog(ShellLoadFileDlg);"; + helpTag = "0"; + enumerate = "0"; + resizeCell = "1"; + columns = "0 275"; + fitParentWidth = "1"; + clipColumnText = "0"; + }; + }; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "38 235"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.popDialog(ShellLoadFileDlg);"; + accelerator = "escape"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + new ShellBitmapButton(LOAD_LoadBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "204 235"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "eval($loadFileCommand); Canvas.popDialog(ShellLoadFileDlg);"; + helpTag = "0"; + text = "LOAD"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/ShellSaveFileDlg.gui b/base/gui/ShellSaveFileDlg.gui new file mode 100644 index 0000000..4d53647 --- /dev/null +++ b/base/gui/ShellSaveFileDlg.gui @@ -0,0 +1,125 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(ShellSaveFileDlg) { + profile = "DlgBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl(SAVE_Title) { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "135 95"; + extent = "370 290"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "SAVE FILE"; + noTitleBar = "0"; + + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "61 208"; + extent = "60 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "File Name:"; + }; + new ShellTextEditCtrl(SAVE_FileName) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "117 200"; + extent = "184 38"; + minExtent = "32 38"; + visible = "1"; + command = "SAVE_FileName.checkValid();"; + altCommand = "eval($saveFileCommand); Canvas.popDialog(ShellSaveFileDlg);"; + helpTag = "0"; + historySize = "0"; + maxLength = "32"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "38 235"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.popDialog(ShellSaveFileDlg);"; + accelerator = "escape"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + new ShellBitmapButton(SAVE_SaveBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "204 235"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "eval($saveFileCommand); Canvas.popDialog(ShellSaveFileDlg);"; + helpTag = "0"; + text = "SAVE"; + simpleStyle = "0"; + }; + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "center"; + vertSizing = "bottom"; + position = "47 33"; + extent = "276 169"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "dynamic"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "3 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "7 7"; + extent = "262 155"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellTextList(SAVE_FileList) { + profile = "ShellTextArrayProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "268 8"; + minExtent = "8 8"; + visible = "1"; + altCommand = "SAVE_FileList.onDoubleClick();"; + helpTag = "0"; + enumerate = "0"; + resizeCell = "1"; + columns = "0 275"; + fitParentWidth = "1"; + clipColumnText = "0"; + }; + }; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/SinglePlayerEscapeDlg.gui b/base/gui/SinglePlayerEscapeDlg.gui new file mode 100644 index 0000000..4eb3252 --- /dev/null +++ b/base/gui/SinglePlayerEscapeDlg.gui @@ -0,0 +1,66 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(SinglePlayerEscapeDlg) { + profile = "DlgBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "226 151"; + extent = "188 178"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "PAUSE"; + noTitleBar = "0"; + + new ShellBitmapButton(SinglePlayerEscLeaveBtn) { + profile = "ShellButtonProfile"; + horizSizing = "center"; + vertSizing = "bottom"; + position = "30 31"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "SinglePlayerEscapeDlg.leaveGame();"; + helpTag = "0"; + text = "LEAVE GAME"; + simpleStyle = "0"; + }; + new ShellBitmapButton(SinglePlayerEscSettingsBtn) { + profile = "ShellButtonProfile"; + horizSizing = "center"; + vertSizing = "bottom"; + position = "30 66"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "SinglePlayerEscapeDlg.gotoSettings();"; + helpTag = "0"; + text = "SETTINGS"; + simpleStyle = "0"; + }; + new ShellBitmapButton(SinglePlayerEscReturnBtn) { + profile = "ShellButtonProfile"; + horizSizing = "center"; + vertSizing = "top"; + position = "30 123"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "SinglePlayerEscapeDlg.returnToGame();"; + accelerator = "escape"; + helpTag = "0"; + text = "RESUME GAME"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/TSShowDetailControlDlg.gui b/base/gui/TSShowDetailControlDlg.gui new file mode 100644 index 0000000..353ee59 --- /dev/null +++ b/base/gui/TSShowDetailControlDlg.gui @@ -0,0 +1,133 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(TSShowDetailControlDlg) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "False"; + helpTag = "0"; + + new GuiWindowCtrl() { + profile = "GuiWindowProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "195 259"; + extent = "220 140"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Detail Control"; + resizeWidth = "True"; + resizeHeight = "True"; + canMove = "True"; + canClose = "True"; + canMinimize = "True"; + canMaximize = "True"; + minSize = "50 50"; + closeCommand = "Canvas.popDialog(TSShowDetailControlDlg);"; + + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "13 28"; + extent = "27 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + command = "showToggleDetail();"; + helpTag = "0"; + text = "==>"; + }; + new GuiTextCtrl(showDetailInfoText1) { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "16 89"; + extent = "184 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Slider Sets Detail"; + FONT = "12 244 Arial"; + justify = "center"; + }; + new GuiTextCtrl(showDetailInfoText2) { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "16 112"; + extent = "184 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Slider Sets Detail"; + FONT = "12 244 Arial"; + justify = "center"; + }; + new GuiTextCtrl(showDetailText) { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "46 30"; + extent = "80 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Slider Sets Detail"; + FONT = "12 244 Arial"; + justify = "center"; + }; + new GuiSliderCtrl(showDetailSlider) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "16 57"; + extent = "153 23"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + variable = "value"; + helpTag = "0"; + range = "0.000000 1.000000"; + ticks = "5"; + value = "0"; + tab = "true"; + }; + }; +}; +//--- OBJECT WRITE END --- + +$showAutoDetail = false; + +function showToggleDetail() +{ + if ($showAutoDetail) + { + showDetailText.setValue("Slider Sets Detail Level"); + showSetDetailSlider(); + $showAutoDetail = false; + } + else + { + showDetailText.setValue("Auto Detail Using Distance"); + $showAutoDetail = true; + } + +} + + diff --git a/base/gui/TSShowEditScale.gui b/base/gui/TSShowEditScale.gui new file mode 100644 index 0000000..8695ee7 --- /dev/null +++ b/base/gui/TSShowEditScale.gui @@ -0,0 +1,40 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(TSShowEditScale) +{ + profile = "GuiDefaultProfile"; + + new GuiWindowCtrl() + { + profile = "GuiWindowProfile"; + position = "100 100"; + extent = "180 100"; + text = "Edit Scale"; + + new GuiTextEditCtrl(showScale) + { + profile = "GuiTextEditProfile"; + position = "80 20"; + extent = "50 20"; + altCommand = "showSetScale(threadList.getValue(),showScale.getValue()); Canvas.popDialog(TSShowEditScale);"; + }; + + new GuiButtonCtrl () + { + profile = "GuiButtonProfile"; + position = "20 50"; + extent = "60 20"; + text = "Ok"; + command = "showSetScale(threadList.getValue(),showScale.getValue()); Canvas.popDialog(TSShowEditScale);"; + }; + + new GuiButtonCtrl () + { + profile = "GuiButtonProfile"; + position = "110 50"; + extent = "60 20"; + text = "Cancel"; + command = "Canvas.popDialog(TSShowEditScale);"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/TSShowGui.gui b/base/gui/TSShowGui.gui new file mode 100644 index 0000000..50da4e1 --- /dev/null +++ b/base/gui/TSShowGui.gui @@ -0,0 +1,253 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(TSShowGui) { + profile = "GuiDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new ShowTSCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "800 600"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 271"; + extent = "100 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "showSetFileList(\"base/shapes\",\"dts\",\"showShapeLoad(showFileList.getValue());\"); Canvas.pushDialog(TSShowLoadDlg,99);"; + helpTag = "0"; + text = "Load Shape"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 301"; + extent = "100 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "showSetFileList(\"base/shapes\",\"dsq\",\"showSequenceLoad(showFileList.getValue());\"); Canvas.pushDialog(TSShowLoadDlg,99);"; + helpTag = "0"; + text = "Load Sequence"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 361"; + extent = "100 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Canvas.pushDialog(TSShowDetailControlDlg,99);"; + helpTag = "0"; + text = "Detail Control"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 390"; + extent = "100 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Canvas.pushDialog(TSShowLightDlg,99);"; + helpTag = "0"; + text = "Lighting"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 420"; + extent = "100 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Canvas.pushDialog(TSShowMiscDlg,99);"; + helpTag = "0"; + text = "Misc"; + }; + new GuiButtonCtrl(showExitButton) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 450"; + extent = "100 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "showPopAll(); showMoveMap.pop(); quit();"; + helpTag = "0"; + text = "Quit"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 331"; + extent = "100 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Canvas.pushDialog(TSShowThreadControlDlg,99); showUpdateThreadControl();"; + helpTag = "0"; + text = "Thread control"; + }; +}; +//--- OBJECT WRITE END --- + +$showMission = "emptyMission"; + +function showPopAll() +{ + Canvas.popDialog(TSShowThreadControlDlg); + Canvas.popDialog(TSShowTransitionDlg); + Canvas.popDialog(TSShowLoadDialog); + Canvas.popDialog(TSShowLightDlg); + Canvas.popDialog(TSShowMiscDialog); + Canvas.popDialog(TShowEditScale); + Canvas.popDialog(TSShowDetailControlDlg); +} + +function startShow() +{ + + $ServerName = "show"; + CreateServer("emptyMission", "ctf"); + localConnect(); + Canvas.setContent(TSShowGui); + +// if (!$missionRunning) +// { +// DestroyServer(); +// $missionSequence = 0; +// new SimGroup( ServerGroup); +// loadMission($showMission, true); +// localConnect(); +// } +// +// allowConnections(false); +} + +function showSetSpeed(%speed) +{ + if(%speed) + $showMovementSpeed = %speed; +} + +function showMoveleft(%val) +{ + $showLeftAction = %val; +} + +function showMoveright(%val) +{ + $showRightAction = %val; +} + +function showMoveforward(%val) +{ + $showForwardAction = %val; +} + +function showMovebackward(%val) +{ + $showBackwardAction = %val; +} + +function showMoveup(%val) +{ + $showUpAction = %val; +} + +function showMovedown(%val) +{ + $showDownAction = %val; +} + +function showYaw(%val) +{ + $showYaw += %val * 0.01; +} + +function showPitch(%val) +{ + $showPitch += %val * 0.01; +} + +function toggleMouse() +{ + if(Canvas.isCursorOn()) + CursorOff(); + else + CursorOn(); +} + +function TSShowGui::onWake(%this) +{ + if ( !Canvas.isCursorOn() ) + CursorOn(); + GlobalActionMap.bindcmd(keyboard, "tab", "", "toggleMouse();"); + showMoveMap.push(); +} + +function TSShowGui::onSleep(%this) +{ + GlobalActionMap.unbind(keyboard, "tab"); + showMoveMap.pop(); + lockMouse(false); + CursorOn(); +} + +new ActionMap(showMoveMap); +showMoveMap.bind(keyboard, a, showMoveleft); +showMoveMap.bind(keyboard, d, showMoveright); +showMoveMap.bind(keyboard, w, showMoveforward); +showMoveMap.bind(keyboard, s, showMovebackward); +showMoveMap.bind(keyboard, e, showMoveup); +showMoveMap.bind(keyboard, c, showMovedown); +showMoveMap.bind(keyboard, z, showTurnLeft); +showMoveMap.bind(keyboard, x, showTurnRight); + +showMoveMap.bind(keyboard, 1, S, 0.10, showSetSpeed); +showMoveMap.bind(keyboard, 2, S, 0.25, showSetSpeed); +showMoveMap.bind(keyboard, 3, S, 0.50, showSetSpeed); +showMoveMap.bind(keyboard, 4, S, 1.00, showSetSpeed); +showMoveMap.bind(keyboard, 5, S, 1.50, showSetSpeed); +showMoveMap.bind(keyboard, 6, S, 2.00, showSetSpeed); +showMoveMap.bind(keyboard, 7, S, 3.00, showSetSpeed); +showMoveMap.bind(keyboard, 8, S, 5.00, showSetSpeed); +showMoveMap.bind(keyboard, 9, S, 10.00, showSetSpeed); +showMoveMap.bind(keyboard, 0, S, 20.00, showSetSpeed); + +showMoveMap.bind(mouse, xaxis, showYaw); +showMoveMap.bind(mouse, yaxis, showPitch); + diff --git a/base/gui/TSShowLightDlg.gui b/base/gui/TSShowLightDlg.gui new file mode 100644 index 0000000..db80b5d --- /dev/null +++ b/base/gui/TSShowLightDlg.gui @@ -0,0 +1,181 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl (TSShowLightDlg) +{ + profile = "DialogProfile"; + modal = false; + + new GuiWindowCtrl() + { + profile = "GuiWindowProfile"; + closeCommand = "Canvas.popDialog(TSShowLightDlg);"; + position = "20 20"; + extent = "150 400"; + text = "Light Control"; + + new GuiTextCtrl() + { + profile = "GuiTextProfile"; + position = "20 30"; + extent = "50 16"; + font = "12 244 Arial"; + justify = "center"; + text = "Environment mapping:"; + }; + + new GuiSliderCtrl( "emapAlpha") + { + profile = "GuiSliderProfile"; + position = "20 50"; + extent = "100 20"; + tab = "true"; + range = "0.0 1.0"; + value = 0.0; + ticks = 5; + }; + + new GuiTextCtrl() + { + profile = "GuiTextProfile"; + position = "20 70"; + extent = "50 16"; + font = "12 244 Arial"; + justify = "center"; + text = "Ambient Red:"; + }; + + new GuiSliderCtrl( "ambR") + { + profile = "GuiSliderProfile"; + position = "20 90"; + extent = "100 20"; + tab = "true"; + range = "0.0 1.0"; + value = 0.5; + ticks = 5; + }; + + new GuiTextCtrl() + { + profile = "GuiTextProfile"; + position = "20 110"; + extent = "50 16"; + font = "12 244 Arial"; + justify = "center"; + text = "Ambient Green:"; + }; + + new GuiSliderCtrl( "ambG") + { + profile = "GuiSliderProfile"; + position = "20 130"; + extent = "100 20"; + tab = "true"; + range = "0.0 1.0"; + value = 0.5; + ticks = 5; + }; + + new GuiTextCtrl() + { + profile = "GuiTextProfile"; + position = "20 150"; + extent = "50 16"; + font = "12 244 Arial"; + justify = "center"; + text = "Ambient Blue:"; + }; + + new GuiSliderCtrl( "ambB") + { + profile = "GuiSliderProfile"; + position = "20 170"; + extent = "100 20"; + tab = "true"; + range = "0.0 1.0"; + value = 0.5; + ticks = 5; + }; + + new GuiTextCtrl() + { + profile = "GuiTextProfile"; + position = "20 190"; + extent = "50 16"; + font = "12 244 Arial"; + justify = "center"; + text = "Directional Red:"; + }; + + new GuiSliderCtrl( "diffR") + { + profile = "GuiSliderProfile"; + position = "20 210"; + extent = "100 20"; + tab = "true"; + range = "0.0 1.0"; + value = 0.5; + ticks = 5; + }; + + new GuiTextCtrl() + { + profile = "GuiTextProfile"; + position = "20 230"; + extent = "50 16"; + font = "12 244 Arial"; + justify = "center"; + text = "Directional Green:"; + }; + + new GuiSliderCtrl( "diffG") + { + profile = "GuiSliderProfile"; + position = "20 250"; + extent = "100 20"; + tab = "true"; + range = "0.0 1.0"; + value = 0.5; + ticks = 5; + }; + + new GuiTextCtrl() + { + profile = "GuiTextProfile"; + position = "20 270"; + extent = "50 16"; + font = "12 244 Arial"; + justify = "center"; + text = "Directional Blue:"; + }; + + new GuiSliderCtrl( "diffB") + { + profile = "GuiSliderProfile"; + position = "20 290"; + extent = "100 20"; + tab = "true"; + range = "0.0 1.0"; + value = 0.5; + ticks = 5; + }; + + new GuiButtonCtrl () + { + profile = "GuiButtonProfile"; + position = "40 330"; + extent = "60 20"; + text = "Set Direction"; + command = "showSetLightDirection();"; + }; + + new GuiButtonCtrl () + { + profile = "GuiButtonProfile"; + position = "40 360"; + extent = "60 20"; + text = "OK"; + command = "Canvas.popDialog(TSShowLightDlg);"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/TSShowLoadDlg.gui b/base/gui/TSShowLoadDlg.gui new file mode 100644 index 0000000..b043448 --- /dev/null +++ b/base/gui/TSShowLoadDlg.gui @@ -0,0 +1,112 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(TSShowLoadDlg) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiWindowCtrl() { + profile = "GuiWindowProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "100 100"; + extent = "180 240"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Load"; + resizeWidth = "True"; + resizeHeight = "True"; + canMove = "True"; + canClose = "True"; + canMinimize = "True"; + canMaximize = "True"; + minSize = "50 50"; + closeCommand = "Canvas.popDialog(TSShowLoadDlg);"; + + new GuiScrollCtrl() { + profile = "GuiScrollCtrlProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 35"; + extent = "140 160"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + willFirstRespond = "True"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "False"; + + new GuiScrollContentCtrl() { + profile = "GuiScrollContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "1 1"; + extent = "120 158"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiTextListCtrl(showFileList) { + profile = "GuiTextArrayProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "64 64"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + altCommand = "eval($showFileCommand); Canvas.popDialog(TSShowLoadDlg);"; + helpTag = "0"; + enumerate = "False"; + resizeCell = "True"; + columns = "0"; + noDuplicates = "false"; + }; + }; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 205"; + extent = "60 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "eval($showFileCommand); Canvas.popDialog(TSShowLoadDlg);"; + helpTag = "0"; + text = "Load"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "100 205"; + extent = "60 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "Canvas.popDialog(TSShowLoadDlg);"; + helpTag = "0"; + text = "Cancel"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/TSShowMiscDlg.gui b/base/gui/TSShowMiscDlg.gui new file mode 100644 index 0000000..36a7416 --- /dev/null +++ b/base/gui/TSShowMiscDlg.gui @@ -0,0 +1,121 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(TSShowMiscDlg) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "False"; + helpTag = "0"; + + new GuiWindowCtrl() { + profile = "GuiWindowProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "140 220"; + extent = "190 240"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Misc"; + resizeWidth = "True"; + resizeHeight = "True"; + canMove = "True"; + canClose = "True"; + canMinimize = "True"; + canMaximize = "True"; + minSize = "50 50"; + closeCommand = "Canvas.popDialog(TSShowMiscDlg);"; + + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 30"; + extent = "150 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "showToggleRoot();"; + helpTag = "0"; + text = "Toggle Animate Ground"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 65"; + extent = "150 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "showToggleStick();"; + helpTag = "0"; + text = "Toggle Stick To Ground"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 100"; + extent = "150 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "showSetKeyboard(true); showSetCamera(true);"; + helpTag = "0"; + text = "Keyboard Controls Shape"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 135"; + extent = "150 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "showSetKeyboard(false);"; + helpTag = "0"; + text = "Keyboard Controls Camera"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 170"; + extent = "150 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "showSetCamera(true); showSetKeyboard(false);"; + helpTag = "0"; + text = "Camera Orbits Shape"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 205"; + extent = "150 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "showSetCamera(false); showSetKeyboard(false);"; + helpTag = "0"; + text = "Camera Moves Freely"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/TSShowThreadControlDlg.gui b/base/gui/TSShowThreadControlDlg.gui new file mode 100644 index 0000000..c779ece --- /dev/null +++ b/base/gui/TSShowThreadControlDlg.gui @@ -0,0 +1,288 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(TSShowThreadControlDlg) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "False"; + helpTag = "0"; + + new GuiWindowCtrl() { + profile = "GuiWindowProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "451 403"; + extent = "327 187"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Thread Control"; + resizeWidth = "True"; + resizeHeight = "True"; + canMove = "True"; + canClose = "True"; + canMinimize = "True"; + canMaximize = "True"; + minSize = "50 50"; + closeCommand = "Canvas.popDialog(TSShowThreadControlDlg);"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "5 30"; + extent = "42 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Threads:"; + FONT = "12 244 Arial"; + justify = "center"; + }; + new GuiScrollCtrl() { + profile = "GuiScrollCtrlProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "5 50"; + extent = "50 100"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + willFirstRespond = "True"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "False"; + + new GuiScrollContentCtrl() { + profile = "GuiScrollContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "1 1"; + extent = "30 98"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiTextListCtrl(threadList) { + profile = "GuiTextArrayProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "50 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "showUpdateThreadControl();"; + helpTag = "0"; + enumerate = "False"; + resizeCell = "True"; + columns = "0"; + noDuplicates = "false"; + }; + }; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "90 30"; + extent = "57 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Sequences:"; + FONT = "12 244 Arial"; + }; + new GuiScrollCtrl() { + profile = "GuiScrollCtrlProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "60 50"; + extent = "150 100"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + willFirstRespond = "True"; + hScrollBar = "dynamic"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "False"; + text = "Sequences:"; + + new GuiScrollContentCtrl() { + profile = "GuiScrollContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "1 1"; + extent = "130 80"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiTextListCtrl(sequenceList) { + profile = "GuiTextArrayProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "150 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "showSelectSequence();"; + altCommand = "showSelectSequence();"; + helpTag = "0"; + enumerate = "False"; + resizeCell = "True"; + columns = "0"; + noDuplicates = "false"; + }; + }; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "230 27"; + extent = "84 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "showPlay(threadList.getValue());"; + helpTag = "0"; + text = "Play"; + }; + new GuiTextCtrl(showScaleValue) { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "133 162"; + extent = "8 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + FONT = "12 244 Arial"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "230 47"; + extent = "84 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "showStop(threadList.getValue());"; + helpTag = "0"; + text = "Stop"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "230 79"; + extent = "84 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + command = "Canvas.pushDialog(TSShowTransitionDlg,199);"; + helpTag = "0"; + text = "Transition..."; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "230 110"; + extent = "84 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "showNewThread();"; + helpTag = "0"; + text = "New Thread"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "230 129"; + extent = "84 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "showDeleteThread(threadList.getValue());"; + helpTag = "0"; + text = "Delete Thread"; + }; + new GuiSliderCtrl(threadPosition) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "27 160"; + extent = "100 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + variable = "value"; + helpTag = "0"; + range = "0.000000 1.000000"; + ticks = "5"; + value = "0"; + tab = "true"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "230 161"; + extent = "84 16"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "showScale.setText(\"\"); Canvas.pushDialog(TSShowEditScale,199);"; + helpTag = "0"; + text = "Edit Scale"; + }; + new GuiTextCtrl(transitionSignal) { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 162"; + extent = "8 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + helpTag = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/TSShowTranDurEditDlg.gui b/base/gui/TSShowTranDurEditDlg.gui new file mode 100644 index 0000000..135373f --- /dev/null +++ b/base/gui/TSShowTranDurEditDlg.gui @@ -0,0 +1,78 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(TSShowTranDurEditDlg) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + + new GuiWindowCtrl() { + profile = "GuiWindowProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "260 425"; + extent = "181 87"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Edit Transition Duration"; + resizeWidth = "True"; + resizeHeight = "True"; + canMove = "True"; + canClose = "True"; + canMinimize = "True"; + canMaximize = "True"; + minSize = "50 50"; + + new GuiTextEditCtrl(showTransitionDuration) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "24 25"; + extent = "50 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + altCommand = "$showTransitionDuration = showTransitionDuration.getValue(); transitionDurationText.setValue($showTransitionDuration); Canvas.popDialog(TSShowTranDurEditDlg);"; + helpTag = "0"; + historySize = "0"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "100 27"; + extent = "60 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "$showTransitionDuration = showTransitionDuration.getValue(); transitionDurationText.setValue($showTransitionDuration); Canvas.popDialog(TSShowTranDurEditDlg);"; + helpTag = "0"; + text = "Ok"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "100 54"; + extent = "60 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + command = "Canvas.popDialog(TSShowTranDurEditDlg);"; + helpTag = "0"; + text = "Cancel"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/TSShowTransitionDlg.gui b/base/gui/TSShowTransitionDlg.gui new file mode 100644 index 0000000..dfcbeef --- /dev/null +++ b/base/gui/TSShowTransitionDlg.gui @@ -0,0 +1,228 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(TSShowTransitionDlg) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "False"; + helpTag = "0"; + + new GuiWindowCtrl() { + profile = "GuiWindowProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 378"; + extent = "249 195"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Transition Control"; + resizeWidth = "True"; + resizeHeight = "True"; + canMove = "True"; + canClose = "True"; + canMinimize = "True"; + canMaximize = "True"; + minSize = "50 50"; + closeCommand = "Canvas.popDialog(TSShowTransitionDlg);"; + + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "13 28"; + extent = "27 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + command = "showToggleTransition();"; + helpTag = "0"; + text = "==>"; + }; + new GuiTextCtrl(showTransitionToText) { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "46 30"; + extent = "67 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Set Sequence"; + justify = "center"; + FONT = "12 244 Arial"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "13 56"; + extent = "27 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + command = "showToggleTransitionPos();"; + helpTag = "0"; + text = "==>"; + }; + new GuiTextCtrl(showTransitionPosText) { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "46 58"; + extent = "147 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Transition To Synched Position"; + justify = "center"; + FONT = "12 244 Arial"; + }; + new GuiSliderCtrl(transitionPosition) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "47 125"; + extent = "100 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + variable = "value"; + helpTag = "0"; + range = "0.000000 1.000000"; + ticks = "5"; + value = "0"; + tab = "true"; + }; + new GuiTextCtrl(transitionDurationText) { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "132 170"; + extent = "14 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "0.2"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "15 159"; + extent = "85 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + command = "Canvas.pushDialog(TSShowTranDurEditDlg);"; + helpTag = "0"; + text = "Edit Duration"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "119 152"; + extent = "42 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + helpTag = "0"; + text = "Duration:"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "13 87"; + extent = "27 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + command = "showToggleTransitionTargetPlay();"; + helpTag = "0"; + text = "==>"; + }; + new GuiTextCtrl(showTransitionTargetPlayText) { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "46 89"; + extent = "190 18"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + modal = "True"; + helpTag = "0"; + text = "Target sequence plays during transition"; + FONT = "12 244 Arial"; + justify = "center"; + }; + }; +}; +//--- OBJECT WRITE END --- + +$showTransition = false; +$showTransitionSynched = true; +$showTransitionDuration = 0.2; +$showTransitionTargetPlay = true; + +function showToggleTransitionTargetPlay() +{ + if ($showTransitionTargetPlay) + { + showTransitionTargetPlayText.setValue("Target sequence pauses during transition"); + $showTransitionTargetPlay = false; + } + else + { + showTransitionTargetPlayText.setValue("Target sequence plays during transition"); + $showTransitionTargetPlay = true; + } +} + +function showToggleTransition() +{ + if ($showTransition) + { + showTransitionToText.setValue("Set Sequence"); + $showTransition=false; + } + else + { + showTransitionToText.setValue("Transition To Sequence"); + $showTransition=true; + } +} + +function showToggleTransitionPos() +{ + if ($showTransitionSynched) + { + showTransitionPosText.setValue("Transition to Slider Position"); + $showTransitionSynched=false; + } + else + { + showTransitionPosText.setValue("Transition To Synched Position"); + $showTransitionSynched=true; + } +} diff --git a/base/gui/TaskHudDlg.gui b/base/gui/TaskHudDlg.gui new file mode 100644 index 0000000..c97ee12 --- /dev/null +++ b/base/gui/TaskHudDlg.gui @@ -0,0 +1,83 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(TaskHudDlg) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "0"; + helpTag = "0"; + + new ShellFieldCtrl() { + profile = "GuiChatBackProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "8 230"; + extent = "380 204"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiControl() { + profile = "TaskHudBox"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "1 1"; + extent = "378 19"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + }; + + new GuiTextCtrl() { + profile = "TaskHudTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 2"; + extent = "60 16"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Issued By"; + }; + + new GuiTextCtrl() { + profile = "TaskHudTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "164 2"; + extent = "80 16"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Description"; + }; + + new GuiControl() + { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "2 20"; + extent = "377 200"; + + new GuiTextListCtrl(TaskList) { + profile = "TaskHudProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "377 8"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + enumerate = "0"; + resizeCell = "1"; + columns = "2 160"; + fitParentWidth = "1"; + clipColumnText = "1"; + }; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/TerraformerFullScreenGui.gui b/base/gui/TerraformerFullScreenGui.gui new file mode 100644 index 0000000..74308ac --- /dev/null +++ b/base/gui/TerraformerFullScreenGui.gui @@ -0,0 +1,29 @@ +//--- OBJECT WRITE BEGIN --- +new GameTSCtrl(TerraformerFullscreenGui) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "19 541"; + extent = "100 20"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + command = "quit();"; + helpTag = "0"; + text = "Exit"; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/TerraformerGui.gui b/base/gui/TerraformerGui.gui new file mode 100644 index 0000000..c3b7ee9 --- /dev/null +++ b/base/gui/TerraformerGui.gui @@ -0,0 +1,95 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(TerraformerGui) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + modal = "True"; + helpTag = "0"; +}; + +new GuiControl(TerraformerToolbarBackgroundGui) { + profile = "EditorContentProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 30"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "0"; + helpTag = "0"; +}; + +//--- OBJECT WRITE END --- + +function TerraformerGui::getPrefs(%this) +{ + %this.currentView = getPrefSetting($pref::Terraformer::currentView, "HeightfieldView"); +} + +function TerraformerGui::setPrefs(%this) +{ + $pref::Terraformer::currentView = %this.currentView; +} + +function TerraformerGui::init(%this) +{ + %this.getPrefs(); + + // + if(!isObject("terraformer")) + { + echo("making a terraformer"); + new Terraformer("terraformer"); + $SelectedOperation = -1; + $NextOperationId = 1; + $HeightfieldDirtyRow = -1; + } + + TerraformerHeightfieldGui.init(); + TerraformerTextureGui.init(); +} + +function TerraformerGui::onWake(%this) +{ + if(!isObject("editor")) + %this.init(); + + %this.setView(%this.currentView); +} + +function TerraformerGui::onSleep(%this) +{ + %this.setPrefs(); +} + +function TerraformerGui::setView(%this, %view) +{ + // clear + while(%this.getCount()) + %this.remove(%this.getObject(0)); + + // + switch$(%view) + { + case "HeightfieldView": + %this.add(TerraformerHeightfieldGui); + TerraformerHeightfieldGui.refresh(); + + case "TextureView": + %this.add(TerraformerTextureGui); + TerraformerTextureGui.refresh(); + + default: + error("TerraformerGui::setView: invalid view '" @ %view @ "'"); + return; + } + + %this.add(TerraformerToolbarBackgroundGui); + %this.currentView = %view; +} diff --git a/base/gui/TerraformerHeightfieldGui.gui b/base/gui/TerraformerHeightfieldGui.gui new file mode 100644 index 0000000..0a6d825 --- /dev/null +++ b/base/gui/TerraformerHeightfieldGui.gui @@ -0,0 +1,2815 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(TerraformerHeightfieldGui) { + profile = "GuiModelessDialogProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiFrameSetCtrl(HeightfieldhRootFrame) { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 30"; + extent = "640 450"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + columns = "0 279 374"; + rows = "0"; + borderWidth = "4"; + borderColor = "0 76 248 255"; + borderEnable = "alwaysOff"; + borderMovable = "alwaysOff"; + autoBalance = "0"; + + new GuiFrameSetCtrl(HeightfieldLeftFrame) { + profile = "GuiDefaultProfile"; + horizSizing = "left"; + vertSizing = "height"; + position = "0 0"; + extent = "275 450"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + columns = "0"; + rows = "0 250"; + borderWidth = "4"; + borderColor = "0 4 248 255"; + borderEnable = "alwaysOff"; + borderMovable = "alwaysOff"; + autoBalance = "0"; + + new GuiControl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "275 246"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiBigTextProfile"; + horizSizing = "center"; + vertSizing = "bottom"; + position = "21 -2"; + extent = "232 40"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Heightfield Editor"; + }; + new GuiScrollCtrl(HeightfieldTabParent) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 35"; + extent = "266 205"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOff"; + constantThumbHeight = "1"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "1 1"; + extent = "264 203"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiControl(tab_fBm) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "261 198"; + minExtent = "8 8"; + visible = "0"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 6"; + extent = "100 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "fBm Fractal Settings:"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "86 35"; + extent = "71 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Hill Frequency:"; + }; + new GuiTextEditSliderCtrl(fbm_interval) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "166 35"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + historySize = "0"; + format = "%1.0f"; + range = "1 24"; + increment = "1"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "99 60"; + extent = "58 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Roughness:"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "166 136"; + extent = "77 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "fBm_seed.setValue(terraFormer.generateSeed());Heightfield::saveTab();Heightfield::preview($selectedOperation);"; + helpTag = "0"; + text = "New Seed"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "87 110"; + extent = "70 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Random Seed:"; + }; + new GuiTextEditCtrl(fBm_seed) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "166 110"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "0"; + historySize = "5"; + }; + new GuiTextEditSliderCtrl(fbm_rough) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "166 60"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + historySize = "0"; + format = "%0.3f"; + range = "0 1"; + increment = "0.001"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "128 85"; + extent = "29 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Detail:"; + }; + new GuiPopUpMenuCtrl(fbm_detail) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "166 85"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Heightfield::saveTab();Heightfield::preview($selectedOperation);"; + helpTag = "0"; + maxPopupHeight = "200"; + }; + }; + new GuiControl(tab_RMF) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "261 198"; + minExtent = "8 8"; + visible = "0"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 6"; + extent = "125 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Rigid MultiFractal Settings:"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "87 35"; + extent = "71 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Hill Frequency:"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "168 137"; + extent = "73 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "rmf_seed.setValue(terraFormer.generateSeed());Heightfield::saveTab();Heightfield::preview($selectedOperation);"; + helpTag = "0"; + text = "New Seed"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "101 60"; + extent = "58 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Roughness:"; + }; + new GuiTextEditSliderCtrl(rmf_interval) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "166 35"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + historySize = "0"; + format = "%1.0f"; + range = "1 16"; + increment = "1"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "90 111"; + extent = "67 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Random Seed"; + }; + new GuiTextEditCtrl(rmf_seed) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "166 110"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "0"; + historySize = "5"; + }; + new GuiTextEditSliderCtrl(rmf_rough) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "166 60"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + historySize = "0"; + format = "%0.3f"; + range = "0 1"; + increment = "0.001"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "128 85"; + extent = "29 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Detail:"; + }; + new GuiPopUpMenuCtrl(rmf_detail) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "166 85"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Heightfield::saveTab();Heightfield::preview($selectedOperation);"; + helpTag = "0"; + maxPopupHeight = "200"; + }; + }; + new GuiControl(tab_Canyon) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "261 198"; + minExtent = "8 8"; + visible = "0"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 6"; + extent = "118 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Canyon Fractal Settings:"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "124 61"; + extent = "34 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Chaos:"; + }; + new GuiTextEditSliderCtrl(canyon_freq) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "166 35"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + historySize = "0"; + format = "%1.0f"; + range = "4 10"; + increment = "1"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "63 35"; + extent = "95 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Canyon Frequency:"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "168 114"; + extent = "73 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "canyon_seed.setValue(terraFormer.generateSeed());Heightfield::saveTab();Heightfield::preview($selectedOperation);"; + helpTag = "0"; + text = "New Seed"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "88 89"; + extent = "70 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Random Seed:"; + }; + new GuiTextEditCtrl(canyon_seed) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "166 89"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "0"; + historySize = "5"; + }; + new GuiTextEditSliderCtrl(canyon_factor) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "166 62"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + historySize = "0"; + format = "%0.3f"; + range = "0 1"; + increment = "0.001"; + }; + }; + new GuiControl(tab_Smooth) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "261 198"; + minExtent = "8 8"; + visible = "0"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 6"; + extent = "95 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Smoothing Settings:"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "79 64"; + extent = "77 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Agressiveness:"; + }; + new GuiTextEditSliderCtrl(smooth_iter) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "166 35"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Heightfield::saveTab($selectedOperation);Heightfield::preview($selectedOperation);"; + helpTag = "0"; + historySize = "0"; + format = "%1.0f"; + range = "0 40"; + increment = "1"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "109 36"; + extent = "47 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Iterations:"; + }; + new GuiTextEditSliderCtrl(smooth_factor) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "166 63"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + historySize = "0"; + format = "%0.3f"; + range = "0 1"; + increment = "0.001"; + }; + }; + new GuiControl(tab_SmoothWater) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "261 198"; + minExtent = "8 8"; + visible = "0"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 6"; + extent = "154 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Water Area Smoothing Settings:"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "79 64"; + extent = "77 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Agressiveness:"; + }; + new GuiTextEditSliderCtrl(watersmooth_iter) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "166 35"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Heightfield::saveTab($selectedOperation);Heightfield::preview($selectedOperation);"; + helpTag = "0"; + historySize = "0"; + format = "%1.0f"; + range = "0 40"; + increment = "1"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "109 36"; + extent = "47 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Iterations:"; + }; + new GuiTextEditSliderCtrl(watersmooth_factor) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "166 63"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + historySize = "0"; + format = "%0.3f"; + range = "0 1"; + increment = "0.001"; + }; + }; + new GuiControl(tab_SmoothRidge) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "261 198"; + minExtent = "8 8"; + visible = "0"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 6"; + extent = "152 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Ridge Area Smoothing Settings:"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "79 64"; + extent = "77 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Agressiveness:"; + }; + new GuiTextEditSliderCtrl(Ridgesmooth_iter) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "166 35"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Heightfield::saveTab($selectedOperation);Heightfield::preview($selectedOperation);"; + helpTag = "0"; + historySize = "0"; + format = "%1.0f"; + range = "0 40"; + increment = "1"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "109 36"; + extent = "47 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Iterations:"; + }; + new GuiTextEditSliderCtrl(Ridgesmooth_factor) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "166 63"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + historySize = "0"; + format = "%0.3f"; + range = "0 1"; + increment = "0.001"; + }; + }; + new GuiControl(tab_Filter) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "261 198"; + minExtent = "8 8"; + visible = "0"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 6"; + extent = "101 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Height Filter Settings:"; + }; + new GuiFilterCtrl(filter) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "16 29"; + extent = "130 130"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Heightfield::saveTab($selectedOperation);Heightfield::preview($selectedOperation);"; + helpTag = "0"; + controlPoints = "7"; + filter = "0.000000 0.166667 0.333333 0.500000 0.666667 0.833333 1.000000"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "154 84"; + extent = "30 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Result"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "68 167"; + extent = "23 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Input"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "16 160"; + extent = "16 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "min"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "127 160"; + extent = "20 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "max"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "150 142"; + extent = "16 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "min"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "150 28"; + extent = "20 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "max"; + }; + new GuiTextEditSliderCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "189 139"; + extent = "61 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + variable = "filter.controlPoints"; + command = "filter.controlPoints = $ThisControl.getValue();Heightfield::saveTab($selectedOperation);Heightfield::preview($selectedOperation);"; + helpTag = "0"; + historySize = "0"; + format = "%3.0f"; + range = "2 20"; + increment = "1"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "187 118"; + extent = "66 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Control Points"; + }; + }; + new GuiControl(tab_Turbulence) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "261 198"; + minExtent = "8 8"; + visible = "0"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 6"; + extent = "99 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Turbulence Settings:"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "65 34"; + extent = "91 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Turbulence Factor:"; + }; + new GuiTextEditSliderCtrl(turbulence_factor) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "166 35"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + historySize = "0"; + format = "%0.3f"; + range = "0 1"; + increment = "0.001"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "75 61"; + extent = "81 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Radius of Effect:"; + }; + new GuiTextEditSliderCtrl(turbulence_radius) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "166 61"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + historySize = "0"; + format = "%1.0f"; + range = "1 40"; + increment = "1"; + }; + }; + new GuiControl(tab_Thermal) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "261 198"; + minExtent = "8 8"; + visible = "0"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 6"; + extent = "122 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Thermal Erosion Settings:"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "112 36"; + extent = "47 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Iterations:"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "79 91"; + extent = "80 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Material Loss %:"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 63"; + extent = "139 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Min Erosion Slope (degrees):"; + }; + new GuiTextEditSliderCtrl(thermal_iter) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "166 36"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + historySize = "0"; + format = "%1.0f"; + range = "0 50"; + increment = "1"; + }; + new GuiTextEditSliderCtrl(thermal_slope) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "166 63"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + historySize = "0"; + format = "%2.1f"; + range = "0 89"; + increment = "0.1"; + }; + new GuiTextEditSliderCtrl(thermal_cons) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "166 90"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + historySize = "0"; + format = "%2.1f"; + range = "0 100"; + increment = "0.1"; + }; + }; + new GuiControl(tab_Hydraulic) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "259 198"; + minExtent = "8 8"; + visible = "0"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 6"; + extent = "129 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Hydraulic Erosion Settings:"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "112 34"; + extent = "47 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Iterations:"; + }; + new GuiFilterCtrl(hydraulic_filter) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "16 57"; + extent = "130 130"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Heightfield::saveTab();Heightfield::preview($selectedOperation);"; + helpTag = "0"; + controlPoints = "7"; + filter = "0.000000 0.166667 0.333333 0.500000 0.666667 0.833333 1.000000"; + }; + new GuiTextEditSliderCtrl(hydraulic_iter) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "166 35"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + historySize = "0"; + format = "%1.0f"; + range = "0 50"; + increment = "1"; + }; + new GuiTextEditSliderCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "165 161"; + extent = "64 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + variable = "hydraulic_filter.controlPoints"; + command = "hydraulic_filter.controlPoints = $ThisControl.getValue();Heightfield::saveTab();Heightfield::preview($selectedOperation);"; + helpTag = "0"; + historySize = "0"; + format = "%3.0f"; + range = "2 20"; + increment = "1"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "165 141"; + extent = "69 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Control Points:"; + }; + }; + new GuiControl(tab_Sinus) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "259 199"; + minExtent = "8 8"; + visible = "0"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 6"; + extent = "72 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Sinus Settings:"; + }; + new GuiFilterCtrl(sinus_filter) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "36 64"; + extent = "130 130"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Heightfield::saveTab();Heightfield::preview($selectedOperation);"; + helpTag = "0"; + controlPoints = "7"; + filter = "0.176920 0.833330 0.876920 0.238460 0.215380 0.166660 0.000000"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "100 32"; + extent = "70 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Random Seed:"; + }; + new GuiTextEditCtrl(sinus_seed) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "174 32"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "0"; + historySize = "5"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "177 66"; + extent = "73 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "sinus_seed.setValue(terraFormer.generateSeed());Heightfield::saveTab();Heightfield::preview($selectedOperation);"; + helpTag = "0"; + text = "New Seed"; + }; + new GuiTextEditSliderCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "178 171"; + extent = "64 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + variable = "sinus_filter.controlPoints"; + command = "sinus_filter.controlPoints = $ThisControl.getValue();Heightfield::saveTab();Heightfield::preview($selectedOperation);"; + helpTag = "0"; + historySize = "0"; + format = "%3.0f"; + range = "2 20"; + increment = "1"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "179 150"; + extent = "69 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Control Points:"; + }; + }; + new GuiControl(tab_terrainFile) { + profile = "EditorContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "261 198"; + minExtent = "8 8"; + visible = "0"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 2"; + extent = "53 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "TerrainFile:"; + }; + new GuiScrollCtrl() { + profile = "GuiScrollCtrlProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 20"; + extent = "262 180"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "dynamic"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + + new GuiScrollContentCtrl() { + profile = "GuiScrollContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "1 1"; + extent = "242 178"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiTextListCtrl(terrainFile_textList) { + profile = "GuiTextArrayProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "64 64"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "terrainFile_terrFileText.setValue(\"terrains/\" @ terrainFile_textList.getRowTextById(terrainFile_textList.getSelectedId()));Heightfield::saveTab();Heightfield::preview($selectedOperation);"; + helpTag = "0"; + enumerate = "0"; + resizeCell = "1"; + columns = "0"; + }; + }; + }; + new GuiTextCtrl(terrainFile_terrFileText) { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "64 2"; + extent = "8 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + }; + }; + new GuiControl(tab_General) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "261 198"; + minExtent = "8 8"; + visible = "0"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 6"; + extent = "83 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "General Settings:"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "8 53"; + extent = "67 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Height Range:"; + }; + new GuiTextEditSliderCtrl(general_scale) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "108 52"; + extent = "64 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + historySize = "0"; + format = "%1.0f"; + range = "5 500"; + increment = "1"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "177 53"; + extent = "33 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "meters"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "29 93"; + extent = "74 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Water Level %:"; + }; + new GuiSliderCtrl(general_water) { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "22 113"; + extent = "200 30"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + variable = "value"; + command = "general_water_meters.setValue(general_water.getValue()*general_scale.getValue()+general_min_height.getValue() @ \" meters\");Heightfield::saveTab();Heightfield::preview();"; + helpTag = "0"; + range = "0.000000 1.000000"; + ticks = "5"; + value = "0"; + }; + new GuiTextCtrl(general_water_meters) { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "109 93"; + extent = "42 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "0 meters"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "64 158"; + extent = "135 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Heightfield::center();"; + helpTag = "0"; + text = "Center on Camera"; + }; + new GuiTextCtrl(general_centerx) { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 6"; + extent = "8 18"; + minExtent = "8 8"; + visible = "0"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "0"; + }; + new GuiTextCtrl(general_centery) { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 6"; + extent = "8 18"; + minExtent = "8 8"; + visible = "0"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "0"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "8 28"; + extent = "89 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Min Terrain Height:"; + }; + new GuiTextEditSliderCtrl(general_min_height) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "108 27"; + extent = "64 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + historySize = "0"; + format = "%1.0f"; + range = "0 500"; + increment = "1"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "177 28"; + extent = "33 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "meters"; + }; + }; + new GuiControl(tab_Bitmap) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "261 198"; + minExtent = "8 8"; + visible = "0"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 6"; + extent = "76 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Bitmap settings:"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 43"; + extent = "45 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Filename:"; + }; + new GuiTextCtrl(bitmap_name) { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "64 43"; + extent = "8 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + }; + new GuiButtonCtrl(bitmap_choose) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 65"; + extent = "73 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Heightfield::setBitmap();"; + helpTag = "0"; + text = "Choose..."; + }; + }; + new GuiControl(tab_Blend) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "261 198"; + minExtent = "8 8"; + visible = "0"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiPopUpMenuCtrl(blend_option) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "64 118"; + extent = "82 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Heightfield::saveTab();Heightfield::preview($selectedOperation);"; + helpTag = "0"; + text = "Add"; + maxPopupHeight = "200"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 6"; + extent = "71 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Blend settings:"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 31"; + extent = "34 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Factor:"; + }; + new GuiSliderCtrl(blend_factor) { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "49 29"; + extent = "200 30"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + variable = "value"; + command = "Heightfield::saveTab();Heightfield::preview($selectedOperation);"; + helpTag = "0"; + range = "0.000000 1.000000"; + ticks = "5"; + value = "0.4"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 64"; + extent = "49 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Source A:"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "23 156"; + extent = "205 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "result = (A*factor) operation (B*(1-factor))"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "7 91"; + extent = "48 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Source B:"; + }; + new GuiTextEditCtrl(blend_srcB) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "64 89"; + extent = "33 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "1"; + historySize = "5"; + }; + new GuiTextCtrl(blend_srcA) { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "64 65"; + extent = "92 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Previous Operation"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "5 118"; + extent = "50 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Operation:"; + }; + }; + }; + }; + }; + new GuiControl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 250"; + extent = "275 200"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiPopUpMenuCtrl(Heightfield_options) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 3"; + extent = "199 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Options"; + maxPopupHeight = "200"; + setText = "false"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "205 3"; + extent = "53 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Heightfield::onDelete();"; + helpTag = "0"; + text = "Delete"; + }; + new GuiScrollCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "5 27"; + extent = "266 166"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "dynamic"; + constantThumbHeight = "1"; + + new GuiScrollContentCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "1 1"; + extent = "264 164"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiTextListCtrl(Heightfield_operation) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "12 16"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + enumerate = "0"; + resizeCell = "1"; + columns = "1"; + }; + }; + }; + }; + }; + new GuiFrameSetCtrl(HeightfieldCenterFrame) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "height"; + position = "279 0"; + extent = "91 450"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + columns = "0"; + rows = "0"; + borderWidth = "4"; + borderColor = "0 4 248 255"; + borderEnable = "alwaysOff"; + borderMovable = "alwaysOff"; + autoBalance = "0"; + + new GuiControl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "91 450"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiControl() { + profile = "GuiDefaultProfile"; + horizSizing = "center"; + vertSizing = "bottom"; + position = "4 2"; + extent = "82 445"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 27"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Heightfield::load(Lush);"; + helpTag = "0"; + text = "Lush"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 52"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Heightfield::load(Swamp);"; + helpTag = "0"; + text = "Swamp"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 77"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Heightfield::load(BadLands);"; + helpTag = "0"; + text = "BadLands"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 102"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Heightfield::load(Ice);"; + helpTag = "0"; + text = "Ice"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 127"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Heightfield::load(Desert);"; + helpTag = "0"; + text = "Desert"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 152"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Heightfield::load(Lava);"; + helpTag = "0"; + text = "Lava"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 400"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Heightfield::saveTab();TerraformerGui.setView(TextureView);"; + helpTag = "0"; + text = "Texture"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 275"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Heightfield::apply();"; + helpTag = "0"; + text = "Apply"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 332"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Heightfield::save();"; + helpTag = "0"; + text = "Save"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 309"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Heightfield::load();"; + helpTag = "0"; + text = "Load"; + }; + new GuiButtonCtrl(ExportHeightfield) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 355"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Export"; + }; + }; + }; + }; + new GuiFrameSetCtrl(HeightfieldRightFrame) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "height"; + position = "374 0"; + extent = "266 450"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + columns = "0"; + rows = "0 266"; + borderWidth = "2"; + borderColor = "0 4 248 255"; + borderEnable = "alwaysOff"; + borderMovable = "alwaysOff"; + autoBalance = "0"; + + new GuiControl() { + profile = "GuiContentProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "266 264"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiTerrPreviewCtrl(HeightfieldPreview) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 4"; + extent = "256 256"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + }; + }; + new GuiControl() { + profile = "GuiContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 266"; + extent = "266 184"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GameTSCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 4"; + extent = "255 174"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + }; + }; + }; + }; +}; +//--- OBJECT WRITE END --- + +function tab_Blend::reset(%this) +{ + blend_option.clear(); + blend_option.add("Add", 0); + blend_option.add("Subtract", 1); + blend_option.add("Max", 2); + blend_option.add("Min", 3); + blend_option.add("Multiply", 4); +} + +function tab_fBm::reset(%this) +{ + fBm_detail.clear(); + fBm_detail.add("Very Low", 0); + fBm_detail.add("Low", 1); + fBm_detail.add("Normal", 2); + fBm_detail.add("High", 3); + fBm_detail.add("Very High", 4); +} + +function tab_RMF::reset(%this) +{ + rmf_detail.clear(); + rmf_detail.add("Very Low", 0); + rmf_detail.add("Low", 1); + rmf_detail.add("Normal", 2); + rmf_detail.add("High", 3); + rmf_detail.add("Very High", 4); +} + +function tab_terrainFile::reset(%this) +{ + // update tab controls.. + terrainFile_textList.clear(); + + %filespec = "terrains/*.ter"; + for(%file = findFirstFile(%filespec); %file !$= ""; %file = findNextFile(%filespec)) + terrainFile_textList.addRow(%i++, fileBase(%file) @ fileExt(%file)); +} + +//-------------------------------------- + +function Heightfield::resetTabs() +{ + tab_terrainFile.reset(); + tab_fbm.reset(); + tab_rmf.reset(); + tab_canyon.reset(); + tab_smooth.reset(); + tab_smoothWater.reset(); + tab_smoothRidge.reset(); + tab_filter.reset(); + tab_turbulence.reset(); + tab_thermal.reset(); + tab_hydraulic.reset(); + tab_general.reset(); + tab_bitmap.reset(); + tab_blend.reset(); + tab_sinus.reset(); +} + +//-------------------------------------- +function TerraformerHeightfieldGui::init(%this) +{ + Heightfield_options.clear(); + Heightfield_options.setText("Operation"); + Heightfield_options.add("fBm Fractal",0); + Heightfield_options.add("Rigid MultiFractal",1); + Heightfield_options.add("Canyon Fractal",2); + Heightfield_options.add("Sinus",3); + Heightfield_options.add("Bitmap",4); + Heightfield_options.add("Turbulence",5); + Heightfield_options.add("Smoothing",6); + Heightfield_options.add("Smooth Water",7); + Heightfield_options.add("Smooth Ridges/Valleys", 8); + Heightfield_options.add("Filter",9); + Heightfield_options.add("Thermal Erosion",10); + Heightfield_options.add("Hydraulic Erosion",11); + Heightfield_options.add("Blend",12); + Heightfield_options.add("Terrain File",13); + + Heightfield::resetTabs(); + %this.refresh(); +} + +function TerraformerHeightfieldGui::refresh(%this) +{ + if (Heightfield_operation.rowCount() == 0) + { + Heightfield_operation.clear(); + %id1 = Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t300\tgeneral_water\t0.000\tgeneral_centerx\t0\tgeneral_centery\t0"); + Heightfield_operation.setSelectedById(%id1); + } + + Heightfield::resetTabs(); + Heightfield::preview(); +} + +//-------------------------------------- +function Heightfield_options::onSelect(%this, %_id, %text) +{ + Heightfield_options.setText("Operation"); + %id = -1; + + %rowCount = Heightfield_operation.rowCount(); + + // FORMAT + // item name + // tab name + // control name + // control value + switch$(%text) + { + case "Terrain File": + %id = HeightField::add("Terrain File\ttab_terrainFile\tterrainFile_terrFileText\tterrains/terr1.ter\tterrainFile_textList\tterr1.ter"); + + case "fBm Fractal": + %id = Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t9\tfbm_rough\t0.000\tfBm_detail\tNormal\tfBm_seed\t" @ terraformer.generateSeed()); + + case "Rigid MultiFractal": + %id = Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t4\trmf_rough\t0.000\trmf_detail\tNormal\trmf_seed\t" @ terraformer.generateSeed()); + + case "Canyon Fractal": + %id = Heightfield::add("Canyon Fractal\ttab_Canyon\tcanyon_freq\t5\tcanyon_factor\t0.500\tcanyon_seed\t" @ terraformer.generateSeed()); + + case "Sinus": + %id = Heightfield::add("Sinus\ttab_Sinus\tsinus_filter\t1 0.83333 0.6666 0.5 0.33333 0.16666 0\tsinus_seed\t" @ terraformer.generateSeed()); + + case "Bitmap": + %id = Heightfield::add("Bitmap\ttab_Bitmap\tbitmap_name\t"); + Heightfield::setBitmap(); + } + + + if (Heightfield_operation.rowCount() >= 1) + { + switch$(%text) + { + case "Smoothing": + %id = Heightfield::add("Smoothing\ttab_Smooth\tsmooth_factor\t0.500\tsmooth_iter\t0"); + + case "Smooth Water": + %id = Heightfield::add("Smooth Water\ttab_SmoothWater\twatersmooth_factor\t0.500\twatersmooth_iter\t0"); + + case "Smooth Ridges/Valleys": + %id = Heightfield::add("Smooth Ridges/Valleys\ttab_SmoothRidge\tridgesmooth_factor\t0.8500\tridgesmooth_iter\t1"); + + case "Filter": + %id = Heightfield::add("Filter\ttab_Filter\tfilter\t0 0.16666667 0.3333333 0.5 0.6666667 0.8333333 1"); + + case "Turbulence": + %id = Heightfield::add("Turbulence\ttab_Turbulence\tturbulence_factor\t0.250\tturbulence_radius\t10"); + + case "Thermal Erosion": + %id = Heightfield::add("Thermal Erosion\ttab_Thermal\tthermal_slope\t30\tthermal_cons\t80.0\tthermal_iter\t0"); + + case "Hydraulic Erosion": + %id = Heightfield::add("Hydraulic Erosion\ttab_Hydraulic\thydraulic_iter\t0\thydraulic_filter\t0 0.16666667 0.3333333 0.5 0.6666667 0.8333333 1"); + } + } + + if (Heightfield_operation.rowCount() >= 2) + { + if("Blend" $= %text) + %id = Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.500\tblend_srcB\t" @ %rowCount-2 @"\tblend_option\tadd"); + } + + + // select it + if (%id != -1) + Heightfield_operation.setSelectedById(%id); +} + + +//-------------------------------------- +function Heightfield::eval(%id) +{ + if (%id == -1) + return; + + %data = restWords(Heightfield_operation.getRowTextById(%id)); + %label = getField(%data,0); + %row = Heightfield_operation.getRowNumById(%id); + + echo("Heightfield::eval:" @ %row @ " " @ %label ); + + switch$(%label) + { + case "General": + if (Terrain.squareSize>0) %size = Terrain.squareSize; + else %size = 8; + terraformer.setTerrainInfo( 256, %size, getField(%data,3), getField(%data,5), getField(%data,7) ); + terraformer.setShift( getField(%data,9), getField(%data,11) ); + terraformer.terrainData(%row); + + case "Terrain File": + terraformer.terrainFile(%row, getField(%data,3)); + + case "fBm Fractal": + terraformer.fBm( %row, getField(%data,3), getField(%data,5), getField(%data,7), getField(%data,9) ); + + case "Sinus": + terraformer.sinus( %row, getField(%data,3), getField(%data,5) ); + + case "Rigid MultiFractal": + terraformer.rigidMultiFractal( %row, getField(%data,3), getField(%data,5), getField(%data,7), getField(%data,9) ); + + case "Canyon Fractal": + terraformer.canyon( %row, getField(%data,3), getField(%data,5), getField(%data,7) ); + + case "Smoothing": + terraformer.smooth( %row-1, %row, getField(%data,3), getField(%data,5) ); + + case "Smooth Water": + terraformer.smoothWater( %row-1, %row, getField(%data,3), getField(%data,5) ); + + case "Smooth Ridges/Valleys": + terraformer.smoothRidges( %row-1, %row, getField(%data,3), getField(%data,5) ); + + case "Filter": + terraformer.filter( %row-1, %row, getField(%data,3) ); + + case "Turbulence": + terraformer.turbulence( %row-1, %row, getField(%data,3), getField(%data,5) ); + + case "Thermal Erosion": + terraformer.erodeThermal( %row-1, %row, getField(%data,3), getField(%data,5),getField(%data,7) ); + + case "Hydraulic Erosion": + terraformer.erodeHydraulic( %row-1, %row, getField(%data,3), getField(%data,5) ); + + case "Bitmap": + terraformer.loadGreyscale(%row, getField(%data,3)); + + case "Blend": + %rowCount = Heightfield_operation.rowCount(); + if(%rowCount > 2) + { + %a = Heightfield_operation.getRowNumById(%id)-1; + %b = getField(%data, 5); + echo("Blend: " @ %data); + echo("Blend: " @ getField(%data,3) @ " " @ getField(%data,7)); + if(%a < %rowCount || %a > 0 || %b < %rowCount || %b > 0 ) + terraformer.blend(%a, %b, %row, getField(%data,3), getField(%data,7) ); + else + echo("Heightfield Editor: Blend parameters out of range."); + } + } + +} + +//-------------------------------------- +function Heightfield::add(%entry) +{ + Heightfield::saveTab(); + Heightfield::hideTab(); + + %id = $NextOperationId++; + if ($selectedOperation != -1) + { + %row = Heightfield_operation.getRowNumById($selectedOperation) + 1; + %entry = %row @ " " @ %entry; + Heightfield_operation.addRow(%id, %entry, %row); // insert + + // adjust row numbers + for(%i = %row+1; %i < Heightfield_operation.rowCount(); %i++) + { + %id = Heightfield_operation.getRowId(%i); + %text = Heightfield_operation.getRowTextById(%id); + %text = setWord(%text, 0, %i); + Heightfield_operation.setRowById(%id, %text); + } + } + else + { + %entry = Heightfield_operation.rowCount() @ " " @ %entry; + Heightfield_operation.addRow(%id, %entry); // add to end + } + + %row = Heightfield_operation.getRowNumById(%id); + if (%row <= $HeightfieldDirtyRow) + $HeightfieldDirtyRow = %row; + return %id; +} + + +//-------------------------------------- +function Heightfield::onDelete(%id) +{ + if (%id $= "") + %id = $selectedOperation; + + %row = Heightfield_operation.getRowNumById(%id); + + // don't delete the first entry + if (%row == 0) + return; + + Heightfield_operation.removeRow(%row); + + // adjust row numbers + for(%i = %row; %i < Heightfield_operation.rowCount(); %i++) + { + %id2 = Heightfield_operation.getRowId(%i); + %text = Heightfield_operation.getRowTextById(%id2); + %text = setWord(%text, 0, %i); + Heightfield_operation.setRowById(%id2, %text); + } + + // adjust the Dirty Row position + if ($HeightfieldDirtyRow >= %row) + $HeightfieldDirtyRow = %row; + + // find the next row to select + %rowCount = Heightfield_operation.rowCount()-1; + if (%row > %rowCount) + %row = %rowCount; + + if (%id == $selectedOperation) + $selectedOperation = -1; + + %id = Heightfield_operation.getRowId(%row); + Heightfield_operation.setSelectedById(%id); +} + + +//-------------------------------------- +function Heightfield_operation::onSelect(%this, %id, %text) +{ + Heightfield::saveTab(); + Heightfield::hideTab(); + + $selectedOperation = %id; + Heightfield::restoreTab($selectedOperation); + Heightfield::showTab($selectedOperation); + Heightfield::preview($selectedOperation); +} + + +//-------------------------------------- +function Heightfield::restoreTab(%id) +{ + if (%id == -1) + return; + + Heightfield::hideTab(); + + %data = restWords(Heightfield_operation.getRowTextById(%id)); + + %fieldCount = getFieldCount(%data); + for (%field=2; %field<%fieldCount; %field += 2) + { + %obj = getField(%data, %field); + %obj.setValue( getField(%data, %field+1) ); + } +} + + +//-------------------------------------- +function Heightfield::saveTab() +{ + if ($selectedOperation == -1) + return; + + %data = Heightfield_operation.getRowTextById($selectedOperation); + + %rowNum = getWord(%data, 0); + %data = restWords(%data); + %newdata = getField(%data,0) @ "\t" @ getField(%data,1); + + %fieldCount = getFieldCount(%data); + for (%field=2; %field < %fieldCount; %field += 2) + { + %obj = getField(%data, %field); + %newdata = %newdata @ "\t" @ %obj @ "\t" @ %obj.getValue(); + } + // keep track of the top-most dirty operation + // so we know who to evaluate later + if (%data !$= %newdata) + { + %row = Heightfield_operation.getRowNumById($selectedOperation); + if (%row <= $HeightfieldDirtyRow && %row > 0) + $HeightfieldDirtyRow = %row; + } + + Heightfield_operation.setRowById($selectedOperation, %rowNum @ " " @ %newdata); +} + + +//-------------------------------------- +function Heightfield::preview(%id) +{ + %rowCount = Heightfield_operation.rowCount(); + if (%id $= "") + %id = Heightfield_operation.getRowId(%rowCount-1); + + %row = Heightfield_operation.getRowNumById(%id); + + Heightfield::refresh(%row); + terraformer.previewScaled(HeightfieldPreview, %row); +} + + +//-------------------------------------- +function Heightfield::refresh(%last) +{ + if (%last $= "") + %last = Heightfield_operation.rowCount()-1; + + // always update the general info + Heightfield::eval(Heightfield_operation.getRowId(0)); + + for( 0; $HeightfieldDirtyRow<=%last; $HeightfieldDirtyRow++) + { + %id = Heightfield_operation.getRowId($HeightfieldDirtyRow); + Heightfield::eval(%id); + } +} + + +//-------------------------------------- +function Heightfield::apply(%id) +{ + %rowCount = Heightfield_operation.rowCount(); + if (%rowCount < 1) + return; + if (%id $= "") + %id = Heightfield_operation.getRowId(%rowCount-1); + + %row = Heightfield_operation.getRowNumById(%id); + + HeightfieldPreview.setRoot(); + Heightfield::refresh(%row); + terraformer.setTerrain(%row); + + terraformer.setCameraPosition(0,0,0); +} + +//-------------------------------------- +$TerraformerSaveRegister = 0; +function Heightfield::saveBitmap(%name) +{ + if(%name $= "") + getSaveFilename("terrains/heightfield/*png", "Heightfield::doSaveBitmap"); + else + Heightfield::doSaveBitmap(%name); +} + +function Heightfield::doSaveBitmap(%name) +{ + terraformer.saveGreyscale($TerraformerSaveRegister, %name); +} + +//-------------------------------------- +function Heightfield::save(%name) +{ + Heightfield::saveTab(); + if(%name $= "") + getSaveFilename("terrains/heightfield/*cs", "Heightfield::doSaveHeightfield"); + else + Heightfield::doSaveHeightfield(%name); +} + + +//-------------------------------------- +function Heightfield::doSaveHeightfield(%name) +{ + %name = fileBase(%name); + if (%name $= "") + return; + + new fileObject("saveFile"); + saveFile.openForWrite("terrains/heightfield/" @ %name @ ".cs"); + + // loop through each operation and save it to disk + %rowCount = Heightfield_operation.rowCount(); + for(%row = 0; %row < %rowCount; %row++) + { + %data = restWords(Heightfield_operation.getRowText(%row)); + %data = "Heightfield::add(\"" @ expandEscape(%data) @ "\");"; + saveFile.writeLine(%data); + } + saveFile.close(); + saveFile.delete(); +} + + +//-------------------------------------- +function Heightfield::load(%name) +{ + if(%name $= "") + getLoadFilename("terrains/heightfield/*.cs", "Heightfield::doLoadHeightfield"); + else + Heightfield::doLoadHeightfield(%name); +} + + +//-------------------------------------- +function Heightfield::doLoadHeightfield(%name) +{ + %name = fileBase(%name); + if (%name $= "") + return; + + %name = "terrains/heightfield/" @ %name @ ".cs"; + Heightfield_operation.clear(); + $selectedOperation = -1; + $HeightfieldDirtyRow = -1; + + // zero out all shifting + terraformer.setCameraPosition(0,0); + HeightfieldPreview.reset(); + + exec(%name); + if (Heightfield_operation.rowCount() == 0) + { + // if there was a problem executing the script restore + // the operations list to a known state + Heightfield_operation.clear(); + Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t300\tgeneral_water\t0.000\tgeneral_centerx\t0\tgeneral_centery\t0"); + } + %data = restWords(Heightfield_operation.getRowText(0)); + %x = getField(%data,7); + %y = getField(%data,9); + HeightfieldPreview.setOrigin(%x, %y); + Heightfield_operation.setSelectedById(Heightfield_operation.getRowId(0)); + terraformer.setCameraPosition(%x,%y); +} + + +//-------------------------------------- +function Heightfield::setBitmap() +{ + getLoadFilename("terrains/heightfield/*.png", "Heightfield::doSetBitmap"); +} + +//-------------------------------------- +function Heightfield::doSetBitmap(%name) +{ + %name = fileBase(%name); + if (%name !$= "") + %name = "terrains/heightfield/" @ %name @ ".png"; + bitmap_name.setValue(%name); + Heightfield::saveTab(); + Heightfield::preview($selectedOperation); +} + + +//-------------------------------------- +function Heightfield::hideTab() +{ + tab_terrainFile.setVisible(false); + tab_fbm.setvisible(false); + tab_rmf.setvisible(false); + tab_canyon.setvisible(false); + tab_smooth.setvisible(false); + tab_smoothWater.setvisible(false); + tab_smoothRidge.setvisible(false); + tab_filter.setvisible(false); + tab_turbulence.setvisible(false); + tab_thermal.setvisible(false); + tab_hydraulic.setvisible(false); + tab_general.setvisible(false); + tab_bitmap.setvisible(false); + tab_blend.setvisible(false); + tab_sinus.setvisible(false); +} + + +//-------------------------------------- +function Heightfield::showTab(%id) +{ + Heightfield::hideTab(); + %data = restWords(Heightfield_operation.getRowTextById(%id)); + %tab = getField(%data,1); + echo("Tab data: " @ %data @ " tab: " @ %tab); + %tab.setVisible(true); +} + + +//-------------------------------------- +function Heightfield::center() +{ + %camera = terraformer.getCameraPosition(); + %x = getWord(%camera, 0); + %y = getWord(%camera, 1); + + HeightfieldPreview.setOrigin(%x, %y); + + %origin = HeightfieldPreview.getOrigin(); + %x = getWord(%origin, 0); + %y = getWord(%origin, 1); + + %root = HeightfieldPreview.getRoot(); + %x += getWord(%root, 0); + %y += getWord(%root, 1); + + general_centerx.setValue(%x); + general_centery.setValue(%y); + Heightfield::saveTab(); +} + +function ExportHeightfield::onAction() +{ + error("Time to export the heightfield..."); + if (Heightfield_operation.getSelectedId() != -1) { + $TerraformerSaveRegister = getWord(Heightfield_operation.getValue(), 0); + Heightfield::saveBitmap(""); + } +} diff --git a/base/gui/TerraformerTextureGui.gui b/base/gui/TerraformerTextureGui.gui new file mode 100644 index 0000000..229b941 --- /dev/null +++ b/base/gui/TerraformerTextureGui.gui @@ -0,0 +1,1778 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(TerraformerTextureGui) { + profile = "GuiModelessDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiFrameSetCtrl(TextureRootFrame) { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 30"; + extent = "640 450"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + columns = "0 279 374"; + rows = "0"; + borderWidth = "4"; + borderColor = "0 52 56 255"; + borderEnable = "alwaysOff"; + borderMovable = "alwaysOff"; + autoBalance = "0"; + + new GuiFrameSetCtrl(TextureLeftFrame) { + profile = "GuiDefaultProfile"; + horizSizing = "left"; + vertSizing = "height"; + position = "0 0"; + extent = "275 450"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + columns = "0"; + rows = "0 250 350"; + borderWidth = "4"; + borderColor = "0 52 56 255"; + borderEnable = "alwaysOff"; + borderMovable = "alwaysOff"; + autoBalance = "0"; + + new GuiControl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "275 246"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiBigTextProfile"; + horizSizing = "center"; + vertSizing = "bottom"; + position = "44 -2"; + extent = "186 40"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Texture Editor"; + }; + new GuiScrollCtrl(TextureTabParent) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 35"; + extent = "266 205"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "dynamic"; + constantThumbHeight = "1"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "1 1"; + extent = "264 203"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiControl(tab_DistortMask) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "261 202"; + minExtent = "8 8"; + visible = "0"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 1"; + extent = "126 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Fractal Distortion Settings:"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "166 97"; + extent = "77 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "dmask_seed.setValue(terraFormer.generateSeed());Texture::saveOperation();Texture::previewOperation();"; + helpTag = "0"; + text = "New Seed"; + }; + new GuiTextEditCtrl(dmask_seed) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "166 71"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "0"; + historySize = "5"; + maxLength = "255"; + }; + new GuiTextEditSliderCtrl(dmask_rough) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "166 47"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + format = "%0.3f"; + range = "0 1"; + increment = "0.001"; + }; + new GuiTextEditSliderCtrl(dmask_interval) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "166 23"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + format = "%1.0f"; + range = "3 36"; + increment = "1"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "90 23"; + extent = "71 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Hill Frequency:"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "103 47"; + extent = "58 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Roughness:"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "91 71"; + extent = "70 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Random Seed:"; + }; + new GuiFilterCtrl(dmask_filter) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "12 96"; + extent = "143 93"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Texture::saveOperation();Texture::previewOperation();"; + helpTag = "0"; + controlPoints = "7"; + filter = "0.000000 0.166667 0.333333 0.500000 0.666667 0.833333 1.000000"; + }; + new GuiTextEditSliderCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "173 165"; + extent = "64 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + variable = "dmask_filter.controlPoints"; + command = "dmask_filter.controlPoints = $ThisControl.getValue();Texture::saveOperation();Texture::previewOperation();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + format = "%3.0f"; + range = "2 20"; + increment = "1"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "173 147"; + extent = "69 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Control Points:"; + }; + }; + new GuiControl(tab_FractalMask) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "261 202"; + minExtent = "8 8"; + visible = "0"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 1"; + extent = "106 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Fractal Mask Settings:"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "168 96"; + extent = "77 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "fBmmask_seed.setValue(terraFormer.generateSeed());Texture::saveOperation();Texture::previewOperation();"; + helpTag = "0"; + text = "New Seed"; + }; + new GuiTextEditCtrl(fBmmask_seed) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "168 70"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "0"; + historySize = "5"; + maxLength = "255"; + }; + new GuiTextEditSliderCtrl(fbmmask_rough) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "168 46"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + format = "%0.3f"; + range = "0 1"; + increment = "0.001"; + }; + new GuiTextEditSliderCtrl(fbmmask_interval) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "168 22"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + format = "%1.0f"; + range = "3 36"; + increment = "1"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "92 22"; + extent = "71 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Hill Frequency:"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "105 46"; + extent = "58 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Roughness:"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "93 70"; + extent = "70 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Random Seed:"; + }; + new GuiFilterCtrl(fBmmask_filter) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "9 94"; + extent = "147 98"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Texture::saveOperation();Texture::previewOperation();"; + helpTag = "0"; + controlPoints = "7"; + filter = "0.000000 0.166670 0.333330 0.500000 0.666670 0.833330 1.000000"; + }; + new GuiCheckBoxCtrl(fBmDistort) { + profile = "GuiCheckBoxProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "166 122"; + extent = "82 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Texture::saveOperation();Texture::previewOperation();"; + helpTag = "0"; + text = "Use Distortion"; + }; + new GuiTextEditSliderCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "168 174"; + extent = "64 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + variable = "fBmmask_filter.controlPoints"; + command = "fBmmask_filter.controlPoints = $ThisControl.getValue();Texture::saveOperation();Texture::previewOperation();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + format = "%3.0f"; + range = "2 20"; + increment = "1"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "168 155"; + extent = "69 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Control Points:"; + }; + }; + new GuiControl(tab_HeightMask) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "261 200"; + minExtent = "8 8"; + visible = "0"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 1"; + extent = "103 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Height Mask Settings:"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 26"; + extent = "26 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Filter:"; + }; + new GuiFilterCtrl(TextureHeightFilter) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "46 26"; + extent = "130 130"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Texture::saveOperation();Texture::previewOperation();"; + helpTag = "0"; + controlPoints = "6"; + filter = "0.000000 0.200000 0.400000 0.600000 0.800000 1.000000"; + }; + new GuiCheckBoxCtrl(heightDistort) { + profile = "GuiCheckBoxProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "45 165"; + extent = "129 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Texture::saveOperation();Texture::previewOperation();"; + helpTag = "0"; + text = "Use Fractal Distortion"; + }; + new GuiTextEditSliderCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "185 134"; + extent = "64 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + variable = "TextureHeightFilter.controlPoints"; + command = "TextureHeightFilter.controlPoints = $ThisControl.getValue();Texture::saveOperation();Texture::previewOperation();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + format = "%3.0f"; + range = "2 20"; + increment = "1"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "185 115"; + extent = "69 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Control Points:"; + }; + }; + new GuiControl(tab_SlopeMask) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "261 200"; + minExtent = "8 8"; + visible = "0"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 1"; + extent = "100 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Slope Mask Settings:"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 26"; + extent = "26 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Filter:"; + }; + new GuiFilterCtrl(TextureSlopeFilter) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "45 27"; + extent = "130 130"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Texture::saveOperation();Texture::previewOperation();"; + helpTag = "0"; + controlPoints = "7"; + filter = "0.000000 0.166667 0.333333 0.500000 0.666667 0.833333 1.000000"; + }; + new GuiCheckBoxCtrl(slopeDistort) { + profile = "GuiCheckBoxProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "44 166"; + extent = "129 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Texture::saveOperation();Texture::previewOperation();"; + helpTag = "0"; + text = "Use Fractal Distortion"; + }; + new GuiTextEditSliderCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "185 134"; + extent = "64 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + variable = "TextureSlopeFilter.controlPoints"; + command = "TextureSlopeFilter.controlPoints = $ThisControl.getValue();Texture::saveOperation();Texture::previewOperation();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + format = "%3.0f"; + range = "2 20"; + increment = "1"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "185 115"; + extent = "69 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Control Points:"; + }; + }; + new GuiControl(tab_WaterMask) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "261 200"; + minExtent = "8 8"; + visible = "0"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 1"; + extent = "131 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Water Level Mask Settings:"; + }; + new GuiCheckBoxCtrl(waterDistort) { + profile = "GuiCheckBoxProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "63 165"; + extent = "129 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Texture::saveOperation();Texture::previewOperation();"; + helpTag = "0"; + text = "Use Fractal Distortion"; + }; + }; + }; + }; + }; + new GuiControl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 250"; + extent = "275 96"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiPopUpMenuCtrl(Texture_material_menu) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 3"; + extent = "199 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Options"; + maxPopupHeight = "200"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "205 3"; + extent = "53 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Texture::deleteMaterial();"; + helpTag = "0"; + text = "Delete"; + }; + new GuiScrollCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "5 27"; + extent = "266 65"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "dynamic"; + constantThumbHeight = "1"; + + new GuiScrollContentCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "1 1"; + extent = "264 63"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiTextListCtrl(Texture_material) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "9 8"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + enumerate = "0"; + resizeCell = "1"; + columns = "1"; + }; + }; + }; + }; + new GuiControl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 350"; + extent = "275 100"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiPopUpMenuCtrl(Texture_operation_menu) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 3"; + extent = "199 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Options"; + maxPopupHeight = "200"; + setText = "false"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "205 3"; + extent = "53 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Texture::deleteOperation();"; + helpTag = "0"; + text = "Delete"; + }; + new GuiScrollCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "5 27"; + extent = "266 65"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "dynamic"; + constantThumbHeight = "1"; + + new GuiScrollContentCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "1 1"; + extent = "264 63"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiTextListCtrl(Texture_operation) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 1"; + extent = "9 8"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + enumerate = "0"; + resizeCell = "1"; + columns = "1"; + }; + }; + }; + }; + }; + new GuiFrameSetCtrl(TextureCenterFrame) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "height"; + position = "279 0"; + extent = "91 450"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + columns = "0"; + rows = "0"; + borderWidth = "4"; + borderColor = "0 52 56 255"; + borderEnable = "alwaysOff"; + borderMovable = "alwaysOff"; + autoBalance = "0"; + + new GuiControl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "91 450"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiControl() { + profile = "GuiCheckBoxProfile"; + horizSizing = "center"; + vertSizing = "bottom"; + position = "4 2"; + extent = "82 445"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 27"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Texture::load(Lush);"; + helpTag = "0"; + text = "Lush"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 52"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Texture::load(Swamp);"; + helpTag = "0"; + text = "Swamp"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 77"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Texture::load(BadLands);"; + helpTag = "0"; + text = "BadLands"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 102"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Texture::load(Ice);"; + helpTag = "0"; + text = "Ice"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 127"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Texture::load(Desert);"; + helpTag = "0"; + text = "Desert"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 152"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Texture::load(Lava);"; + helpTag = "0"; + text = "Lava"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 400"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "TerraformerGui.setView(HeightfieldView);"; + helpTag = "0"; + text = "Heightfield"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 275"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Texture::applyMaterials();"; + helpTag = "0"; + text = "Apply"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 332"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Texture::save();"; + helpTag = "0"; + text = "Save"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 309"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Texture::load();"; + helpTag = "0"; + text = "Load"; + }; + new GuiCheckBoxCtrl(doTestBmp) { + profile = "GuiCheckBoxProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 216"; + extent = "74 21"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "test bmp"; + command = "$terrainTestBmp = $ThisControl.getValue();"; + }; + }; + }; + }; + new GuiFrameSetCtrl(TextureRightFrame) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "height"; + position = "374 0"; + extent = "266 450"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + columns = "0"; + rows = "0 266"; + borderWidth = "2"; + borderColor = "0 52 56 255"; + borderEnable = "alwaysOff"; + borderMovable = "alwaysOff"; + autoBalance = "0"; + + new GuiControl() { + profile = "GuiContentProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "266 264"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiTerrPreviewCtrl(TexturePreview) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 4"; + extent = "256 256"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + }; + }; + new GuiControl() { + profile = "GuiContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 266"; + extent = "266 184"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GameTSCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 4"; + extent = "255 204"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + }; + }; + }; + }; +}; +//--- OBJECT WRITE END --- + +$nextTextureId = 1; +$nextTextureRegister = 1000; +$selectedMaterial = -1; +$selectedTextureOperation = -1; + + +//-------------------------------------- +function TerraformerTextureGui::init(%this) +{ + Texture_material_menu.clear(); + Texture_material_menu.setText("Materials"); + %index = 0; + %search = "textures/terrain/*.png"; + for(%file = findFirstFile(%search); %file !$= ""; %file = findNextFile(%search)) + { + %file = fileBase(%file); + Texture_material_menu.add(%file, %index++); + } + Texture_material_menu.sort(); + + Texture_operation_menu.clear(); + Texture_operation_menu.setText("Placement Operations"); + Texture_operation_menu.add("Place by Fractal", 1); + Texture_operation_menu.add("Place by Height", 2); + Texture_operation_menu.add("Place by Slope", 3); + Texture_operation_menu.add("Place by Water Level", 4); + + %this.refresh(); +} + +function TerraformerTextureGui::refresh(%this) +{ + $HeightfieldSrcRegister = Heightfield_operation.rowCount()-1; + + // sync up the preview windows + TexturePreview.setValue(HeightfieldPreview.getValue()); + + if (Texture_material.rowCount() == 0) + { + Texture_operation.clear(); + $nextTextureRegister = 1000; + } + else + { + // it's difficult to tell if the heightfield was modified so + // just in case flag all dependent operations as dirty. + %rowCount = Texture_material.rowCount(); + for (%row = 0; %row < %rowCount; %row++) + { + %data = Texture_material.getRowText(%row); + %entry= getRecord(%data,0); + %reg = getField(%entry,1); + $dirtyTexture[ %reg ] = true; + + %opCount = getRecordCount(%data); + for (%op = 2; %op < %opCount; %op++) + { + %entry= getRecord(%data,%op); + %label= getField(%entry,0); + if (%label !$= "Place by Fractal" && %label !$= "Fractal Distortion") + { + %reg = getField(%entry,2); + $dirtyTexture[ %reg ] = true; + } + } + } + Texture::previewMaterial(); + } +} + + +//-------------------------------------- +function Texture_material_menu::onSelect(%this, %id, %text) +{ + %this.setText("Materials"); + + // FORMAT + // material name + // register + // operation + // name + // tab name + // register + // distortion register + // {field,value}, ... + // operation + // ... + Texture::saveMaterial(); + Texture::hideTab(); + %id = Texture::addMaterial(%text @ "\t" @ $nextTextureRegister++); + + if (%id != -1) + { + Texture_material.setSelectedById(%id); + Texture::addOperation("Fractal Distortion\ttab_DistortMask\t" @ $nextTextureRegister++ @ "\t0\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t" @ terraFormer.generateSeed() @ "\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000"); + } +} + + +//-------------------------------------- +function Texture_material::onSelect(%this, %id, %text) +{ + Texture::saveMaterial(); + if (%id != $selectedMaterial) + { + $selectedTextureOperation = -1; + Texture_operation.clear(); + + Texture::hideTab(); + Texture::restoreMaterial(%id); + } + + Texture::previewMaterial(%id); + $selectedMaterial = %id; + $selectedTextureOperation = -1; + Texture_operation.clearSelection(); +} + + +//-------------------------------------- +function Texture_operation_menu::onSelect(%this, %id, %text) +{ + %this.setText("Placement Operations"); + %id = -1; + + if ($selectedMaterial == -1) + return; + + %dreg = getField(Texture_operation.getRowText(0),2); + + switch$ (%text) + { + case "Place by Fractal": + %id = Texture::addOperation("Place by Fractal\ttab_FractalMask\t" @ $nextTextureRegister++ @ "\t" @ %dreg @ "\tfbmmask_interval\t16\tfbmmask_rough\t0.000\tfbmmask_seed\t" @ terraFormer.generateSeed() @ "\tfbmmask_filter\t0.000000 0.166667 0.333333 0.500000 0.666667 0.833333 1.000000\tfBmDistort\ttrue"); + + case "Place by Height": + %id = Texture::addOperation("Place by Height\ttab_HeightMask\t" @ $nextTextureRegister++ @ "\t" @ %dreg @ "\ttextureHeightFilter\t0 0.2 0.4 0.6 0.8 1.0\theightDistort\ttrue"); + + case "Place by Slope": + %id = Texture::addOperation("Place by Slope\ttab_SlopeMask\t" @ $nextTextureRegister++ @ "\t" @ %dreg @ "\ttextureSlopeFilter\t0 0.2 0.4 0.6 0.8 1.0\tslopeDistort\ttrue"); + + case "Place by Water Level": + %id = Texture::addOperation("Place by Water Level\ttab_WaterMask\t" @ $nextTextureRegister++ @ "\t" @ %dreg @ "\twaterDistort\ttrue"); + } + + // select it + Texture::hideTab(); + if (%id != -1) + Texture_operation.setSelectedById(%id); +} + + +//-------------------------------------- +function Texture_operation::onSelect(%this, %id, %text) +{ + Texture::saveOperation(); + if (%id !$= $selectedTextureOperation) + { + Texture::hideTab(); + Texture::restoreOperation(%id); + Texture::showTab(%id); + } + + Texture::previewOperation(%id); + $selectedTextureOperation = %id; +} + + +//-------------------------------------- +function Texture::deleteMaterial(%id) +{ + if (%id $= "") + %id = $selectedMaterial; + if (%id == -1) + return; + + %row = Texture_material.getRowNumById(%id); + + Texture_material.removeRow(%row); + + // find the next row to select + %rowCount = Texture_material.rowCount()-1; + if (%row > %rowCount) + %row = %rowCount; + + if (%id == $selectedMaterial) + $selectedMaterial = -1; + + Texture_operation.clear(); + %id = Texture_material.getRowId(%row); + Texture_material.setSelectedById(%id); +} + + +//-------------------------------------- +function Texture::deleteOperation(%id) +{ + if (%id $= "") + %id = $selectedTextureOperation; + if (%id == -1) + return; + + %row = Texture_operation.getRowNumById(%id); + + // don't delete the first entry + if (%row == 0) + return; + + Texture_operation.removeRow(%row); + + // find the next row to select + %rowCount = Texture_operation.rowCount()-1; + if (%row > %rowCount) + %row = %rowCount; + + if (%id == $selectedTextureOperation) + $selectedTextureOperation = -1; + + %id = Texture_operation.getRowId(%row); + Texture_operation.setSelectedById(%id); +} + + +//-------------------------------------- +function Texture::applyMaterials() +{ + Texture::saveMaterial(); + %count = Texture_material.rowCount(); + if (%count > 0) + { + %data = getRecord(Texture_material.getRowText(0),0); + %mat_list = getField( %data, 0); + %reg_list = getField( %data, 1); + Texture::evalMaterial(Texture_material.getRowId(0)); + + for (%i=1; %i<%count; %i++) + { + Texture::evalMaterial(Texture_material.getRowId(%i)); + %data = getRecord(Texture_material.getRowText(%i),0); + %mat_list = %mat_list @ " " @ getField( %data, 0); + %reg_list = %reg_list @ " " @ getField( %data, 1); + } + terraformer.setMaterials(%reg_list, %mat_list); + } +} + + +//-------------------------------------- +function Texture::previewMaterial(%id) +{ + if (%id $= "") + %id = $selectedMaterial; + if (%id == -1) + return; + + %data = Texture_material.getRowTextById(%id); + %row = Texture_material.getRowNumById(%id); + %reg = getField(getRecord(%data,0),1); + + Texture::evalMaterial(%id); + + terraformer.preview(TexturePreview, %reg); +} + + +//-------------------------------------- +function Texture::evalMaterial(%id) +{ + if (%id $= "") + %id = $selectedMaterial; + if (%id == -1) + return; + + %data = Texture_material.getRowTextbyId(%id); + %reg = getField(getRecord(%data,0), 1); + + // make sure all operation on this material are up to date + // and accumulate register data for each + %opCount = getRecordCount(%data); + if (%opCount >= 2) // record0=material record1=fractal + { + %entry = getRecord(%data, 1); + Texture::evalOperationData(%entry, 1); + for (%op=2; %op<%opCount; %op++) + { + %entry = getRecord(%data, %op); + %reg_list = %reg_list @ getField(%entry, 2) @ " "; + Texture::evalOperationData(%entry, %op); + } + // merge the masks in to the dst reg + terraformer.mergeMasks(%reg_list, %reg); + } +} + + +//-------------------------------------- +function Texture::evalOperation(%id) +{ + if (%id $= "") + %id = $selectedTextureOperation; + if (%id == -1) + return; + + %data = Texture_operation.getRowTextById(%id); + %row = Texture_operation.getRowNumById(%id); + + if (%row != 0) + Texture::evalOperation( Texture_operation.getRowId(0) ); + + Texture::evalOperationData(%data, %row); +} + + +//-------------------------------------- +function Texture::evalOperationData(%data, %row) +{ + %label = getField(%data, 0); + %reg = getField(%data, 2); + %dreg = getField(%data, 3); + %id = Texture_material.getRowId(%row); + + if ( $dirtyTexture[%reg] == false ) + { + return; + } + + myecho("label = " @ %label); + switch$ (%label) + { + case "Fractal Distortion": + terraformer.maskFBm( %reg, getField(%data,5), getField(%data,7), getField(%data,9), getField(%data,11), false, 0 ); + + case "Place by Fractal": + terraformer.maskFBm( %reg, getField(%data,5), getField(%data,7), getField(%data,9), getField(%data,11), getField(%data,13), %dreg ); + + case "Place by Height": + terraformer.maskHeight( $HeightfieldSrcRegister, %reg, getField(%data,5), getField(%data,7), %dreg ); + + case "Place by Slope": + terraformer.maskSlope( $HeightfieldSrcRegister, %reg, getField(%data,5), getField(%data,7), %dreg ); + + case "Place by Water Level": + terraformer.maskWater( $HeightfieldSrcRegister, %reg, getField(%data,5), %dreg ); + } + + + $dirtyTexture[%reg] = false; +} + + + +//-------------------------------------- +function Texture::previewOperation(%id) +{ + if (%id $= "") + %id = $selectedTextureOperation; + if (%id == -1) + return; + + %row = Texture_operation.getRowNumById(%id); + %data = Texture_operation.getRowText(%row); + %reg = getField(%data,2); + + Texture::evalOperation(%id); + terraformer.preview(TexturePreview, %reg); +} + + + +//-------------------------------------- +function Texture::restoreMaterial(%id) +{ + if (%id == -1) + return; + + %data = Texture_material.getRowTextById(%id); + + Texture_operation.clear(); + %recordCount = getRecordCount(%data); + for (%record=1; %record<%recordCount; %record++) + { + %entry = getRecord(%data, %record); + Texture_operation.addRow($nextTextureId++, %entry); + } +} + + +//-------------------------------------- +function Texture::saveMaterial() +{ + %id = $selectedMaterial; + if (%id == -1) + return; + + Texture::SaveOperation(); + %data = Texture_Material.getRowTextById(%id); + %newData = getRecord(%data,0); + + %rowCount = Texture_Operation.rowCount(); + for (%row=0; %row<%rowCount; %row++) + %newdata = %newdata @ "\n" @ Texture_Operation.getRowText(%row); + + Texture_Material.setRowById(%id, %newdata); +} + + +//-------------------------------------- +function Texture::restoreOperation(%id) +{ + if (%id == -1) + return; + + %data = Texture_operation.getRowTextById(%id); + + %fieldCount = getFieldCount(%data); + for (%field=4; %field<%fieldCount; %field += 2) + { + %obj = getField(%data, %field); + %obj.setValue( getField(%data, %field+1) ); + } +} + + +//-------------------------------------- +function Texture::saveOperation() +{ + %id = $selectedTextureOperation; + if (%id == -1) + return; + + %data = Texture_operation.getRowTextById(%id); + %newData = getField(%data,0) @ "\t" @ getField(%data,1) @ "\t" @ getField(%data,2) @ "\t" @ getField(%data,3); + + // go through each object and update its value + %fieldCount = getFieldCount(%data); + for (%field=4; %field<%fieldCount; %field += 2) + { + %obj = getField(%data, %field); + %newdata = %newdata @ "\t" @ %obj @ "\t" @ %obj.getValue(); + } + + %dirty = (%data !$= %newdata); + %reg = getField(%data, 2); + $dirtyTexture[%reg] = %dirty; + + Texture_operation.setRowById(%id, %newdata); + + // mark the material register as dirty too + if (%dirty == true) + { + %data = Texture_Material.getRowTextById($selectedMaterial); + %reg = getField(getRecord(%data,0), 1); + $dirtyTexture[ %reg ] = true; + } + + // if row is zero the fractal mask was modified + // mark everything else in the list as dirty + %row = Texture_material.getRowNumById(%id); + if (%row == 0) + { + %rowCount = Texture_operation.rowCount(); + for (%r=1; %r<%rowCount; %r++) + { + %data = Texture_operation.getRowText(%r); + $dirtyTexture[ getField(%data,2) ] = true; + } + } +} + + +//-------------------------------------- +function Texture::addMaterial(%entry) +{ + %id = $nextTextureId++; + Texture_material.addRow(%id, %entry); + + %reg = getField(%entry, 1); + $dirtyTexture[%reg] = true; + + return %id; +} + +//-------------------------------------- +function Texture::addOperation(%entry) +{ + // Assumes: operation is being added to selected material + + %id = $nextTextureId++; + Texture_operation.addRow(%id, %entry); + + %reg = getField(%entry, 2); + $dirtyTexture[%reg] = true; + + return %id; +} + + +//-------------------------------------- +function Texture::save(%name) +{ + Texture::saveMaterial(); + if(%name $= "") + getSaveFilename("terrains/texture/*cs", "Texture::doSaveTexture"); + else + Texture::doSaveTexture(%name); +} + + +//-------------------------------------- +function Texture::doSaveTexture(%name) +{ + %name = fileBase(%name); + if (%name $= "") + return; + + new fileObject("saveFile"); + saveFile.openForWrite("terrains/texture/" @ %name @ ".cs"); + + // loop through each operation and save it to disk + %rowCount = Texture_material.rowCount(); + for(%row = 0; %row < %rowCount; %row++) + { + %data = Texture_material.getRowText(%row); + %data = "Texture::addMaterial(\"" @ expandEscape(%data) @ "\");"; + saveFile.writeLine(%data); + } + saveFile.close(); + saveFile.delete(); +} + + +//-------------------------------------- +function Texture::load(%name) +{ + if(%name $= "") + getLoadFilename("terrains/texture/*cs", "Texture::doLoadTexture"); + else + Texture::doLoadTexture(%name); +} + +//-------------------------------------- +function Texture::doLoadTexture(%name) +{ + %name = fileBase(%name); + if (%name $= "") + return; + + %name = "terrains/texture/" @ %name @ ".cs"; + Texture_material.clear(); + Texture_operation.clear(); + $selectedMaterial = -1; + $selectedTextureOperation = -1; + if ( !exec(%name) ) + { + // if there was a problem executing the script restore + // the operations list to a known state + Texture_material.clear(); + Texture_operation.clear(); + } + else + { + // initialize dirty register array + // patch up register usage + // ...and deterime what the next register should be. + $nextTextureRegister = 1000; + %rowCount = Texture_material.rowCount(); + for (%row = 0; %row < %rowCount; %row++) + { + $dirtyTexture[ $nextTextureRegister ] = true; + %data = Texture_material.getRowText(%row); + %rec = getRecord(%data, 0); + %rec = setField(%rec, 1, $nextTextureRegister); + %data = setRecord(%data, 0, %rec); + $nextTextureRegister++; + + %opCount = getRecordCount(%data); + for (%op = 1; %op < %opCount; %op++) + { + if (%op == 1) + %frac_reg = $nextTextureRegister; + $dirtyTexture[ $nextTextureRegister ] = true; + %rec = getRecord(%data,%op); + %rec = setField(%rec, 2, $nextTextureRegister); + %rec = setField(%rec, 3, %frac_reg); + %data = setRecord(%data, %op, %rec); + $nextTextureRegister++; + } + %id = Texture_material.getRowId(%row); + Texture_material.setRowById(%id, %data); + } + + $selectedMaterial = -1; + Texture_material.setSelectedById(Texture_material.getRowId(0)); + } +} + + + +//-------------------------------------- +function Texture::hideTab() +{ + tab_DistortMask.setVisible(false); + tab_FractalMask.setVisible(false); + tab_HeightMask.setVisible(false); + tab_SlopeMask.setVisible(false); + tab_waterMask.setVisible(false); +} + + +//-------------------------------------- +function Texture::showTab(%id) +{ + Texture::hideTab(); + %data = Texture_operation.getRowTextById(%id); + %tab = getField(%data,1); + %tab.setVisible(true); +} + + diff --git a/base/gui/TerrainEditorButtonbarDlg.gui b/base/gui/TerrainEditorButtonbarDlg.gui new file mode 100644 index 0000000..dc0a86e --- /dev/null +++ b/base/gui/TerrainEditorButtonbarDlg.gui @@ -0,0 +1,438 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(terraineditorbuttonbardlg) { + profile = "GuiModelessDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "0"; + helpTag = "0"; + + new GuiChunkedBitmapCtrl() { + profile = "EditorContentProfile"; + horizSizing = "right"; + vertSizing = "height"; + position = "0 30"; + extent = "90 449"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiControl() { + profile = "EditorContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "3 4"; + extent = "84 119"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "8 38"; + extent = "32 32"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "tEditor.undo();"; + helpTag = "0"; + text = "Undo"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "8 3"; + extent = "32 32"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Canvas.pushDialog(EditorSaveMissionDlg);"; + helpTag = "0"; + text = "Save"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "43 38"; + extent = "32 32"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "tEditor.redo();"; + helpTag = "0"; + text = "Redo"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "11 94"; + extent = "60 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "tEditor.resetSelWeights(true);"; + helpTag = "0"; + text = "Reset Sel"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "11 72"; + extent = "60 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "tEditor.clearSelection();"; + helpTag = "0"; + text = "Clear Sel"; + }; + new GuiButtonCtrl(TELoadTerrainButton) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "43 3"; + extent = "32 32"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Load"; + }; + }; + new GuiControl() { + profile = "EditorContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "3 125"; + extent = "84 185"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiRadioCtrl(TELowerHeightActionRadio) { + profile = "GuiRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "2 22"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "tEditor.processActionRadio(lowerHeight);"; + helpTag = "0"; + text = "Lower"; + groupNum = "0"; + }; + new GuiRadioCtrl(TERaiseHeightActionRadio) { + profile = "GuiRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "2 2"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "tEditor.processActionRadio(raiseHeight);"; + helpTag = "0"; + text = "Raise"; + groupNum = "0"; + }; + new GuiRadioCtrl(TESetHeightActionRadio) { + profile = "GuiRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "2 42"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "tEditor.processActionRadio(setHeight);"; + helpTag = "0"; + text = "Set Height"; + groupNum = "0"; + }; + new GuiRadioCtrl(TESetEmptyActionRadio) { + profile = "GuiRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "2 62"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "tEditor.processActionRadio(setEmpty);"; + helpTag = "0"; + text = "Set Empty"; + groupNum = "0"; + }; + new GuiRadioCtrl(TEClearEmptyActionRadio) { + profile = "GuiRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "2 82"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "tEditor.processActionRadio(clearEmpty);"; + helpTag = "0"; + text = "Clear Empty"; + groupNum = "0"; + }; + new GuiRadioCtrl(TEFlattenHeightActionRadio) { + profile = "GuiRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "2 102"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "tEditor.processActionRadio(flattenHeight);"; + helpTag = "0"; + text = "Flatten"; + groupNum = "0"; + }; + new GuiRadioCtrl(TESmoothHeightActionRadio) { + profile = "GuiRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "2 122"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "tEditor.processActionRadio(smoothHeight);"; + helpTag = "0"; + text = "Smooth"; + groupNum = "0"; + }; + new GuiRadioCtrl(TESetMaterialActionRadio) { + profile = "GuiRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "2 142"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "tEditor.processActionRadio(setMaterialGroup);"; + helpTag = "0"; + text = "Set Material"; + groupNum = "0"; + }; + new GuiRadioCtrl(TEAdjustHeightActionRadio) { + profile = "GuiRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "2 162"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "tEditor.processActionRadio(brushAdjustHeight);"; + helpTag = "0"; + text = "Adjust Height"; + groupNum = "0"; + }; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "8 312"; + extent = "75 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Canvas.pushDialog(TerrainEditorValuesSettingsGui, 99);"; + helpTag = "0"; + text = "Settings..."; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "8 334"; + extent = "75 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Canvas.pushDialog(TerrainEditorTextureSelectGui, 99);"; + helpTag = "0"; + text = "Material..."; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "8 356"; + extent = "75 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "tEditor.clearModifiedFlags();"; + helpTag = "0"; + text = "Clear Modified"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "8 405"; + extent = "73 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Camera speed:"; + }; + new GuiSliderCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "5 420"; + extent = "80 20"; + minExtent = "80 20"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + variable = "value"; + command = "$Camera::movementSpeed = $ThisControl.getValue();"; + helpTag = "0"; + range = "5.000000 200.000000"; + ticks = "10"; + value = "149.857"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "8 378"; + extent = "75 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "tEditor.swapInLoneMaterial(\"terrain.outline\");"; + helpTag = "0"; + text = "Swap Outline"; + }; + }; +}; +//--- OBJECT WRITE END --- + +//------------------------------------------------------------------------------ +// Functions +//------------------------------------------------------------------------------ + +function TerrainEditorButtonBarDlg::init(%this) +{ + // set the default + TerrainActionsMenu.setText(tEditor.getActionName(0)); + for(%i = 0; %i < tEditor.getNumActions(); %i++) + TerrainActionsMenu.add(tEditor.getActionName(%i), %i); +} + +//------------------------------------------------------------------------------ + +function TerrainEditor::processActionRadio(%this, %name) +{ + %this.currentAction = %name; + + switch$(%this.currentMode) + { + case "select": + %this.processAction(%name); + case "paint": + %this.setAction(%name); + if(%this.processUsesBrush) + %this.processAction(%name); + case "adjust": + %this.processAction(%name); + } + + // + switch$(%this.currentAction) + { + case "setEmpty": + %this.renderVertexSelection = false; + case "clearEmpty": + %this.renderVertexSelection = false; + case "setMaterialGroup": + %this.renderVertexSelection = false; + default: + %this.renderVertexSelection = true; + } +} + +//------------------------------------------------------------------------------ + +function TELoadTerrainButton::onAction(%this) +{ + getLoadFilename("terrains/*.ter", %this @ ".gotFileName"); +} + +function TELoadTerrainButton::gotFileName(%this, %name) +{ + // + %pos = "0 0 0"; + %squareSize = "8"; + %visibleDistance = "1200"; + + // delete current + if(isObject(terrain)) + { + %pos = terrain.position; + %squareSize = terrain.squareSize; + %visibleDistance = terrain.visibleDistance; + + terrain.delete(); + } + + // create new + new TerrainBlock(terrain) + { + position = %pos; + terrainFile = %name; + squareSize = %squareSize; + visibleDistance = %visibleDistance; + }; + + tEditor.attachTerrain(); +} diff --git a/base/gui/TerrainEditorExtraToolbarDlg.gui b/base/gui/TerrainEditorExtraToolbarDlg.gui new file mode 100644 index 0000000..859f725 --- /dev/null +++ b/base/gui/TerrainEditorExtraToolbarDlg.gui @@ -0,0 +1,232 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(TerrainEditorExtraToolbarDlg) { + profile = "GuiModelessDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiControl() { + profile = "EditorContentProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "90 30"; + extent = "550 420"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiControl() { + profile = "EditorContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 3"; + extent = "249 24"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiRadioCtrl(TEPaintModeRadio) { + profile = "GuiRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "84 2"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Paint"; + groupNum = "0"; + }; + new GuiRadioCtrl(TESelectModeRadio) { + profile = "GuiRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "3 2"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Select"; + groupNum = "0"; + }; + new GuiRadioCtrl(TEAdjustModeRadio) { + profile = "GuiRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "165 2"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Adjust Sel"; + groupNum = "0"; + }; + }; + new GuiPopUpMenuCtrl(TEBrushSizeMenu) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "424 6"; + extent = "80 20"; + minExtent = "80 20"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Brush Size"; + maxPopupHeight = "200"; + }; + new GuiPopUpMenuCtrl(TEBrushTypeMenu) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "341 6"; + extent = "80 20"; + minExtent = "80 20"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Brush Type"; + maxPopupHeight = "200"; + }; + new GuiCheckBoxCtrl() { + profile = "GuiRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "255 5"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Soft Brush"; + variable = "tEditor.enableSoftBrushes"; + command = "tEditor.enableSoftBrushes = $ThisControl.getValue();"; + }; + }; +}; +//--- OBJECT WRITE END --- + +function TerrainEditorExtraToolbarDlg::init(%this) +{ + %this.updateCurrentMode(); + %this.updateCurrentAction(); + + %this.initMenus(); +} + +function TerrainEditorExtraToolbarDlg::initMenus(%this) +{ + // + TEBrushTypeMenu.clear(); + TEBrushTypeMenu.add("Box Brush", 0); + TEBrushTypeMenu.add("Circle Brush", 1); + TEBrushTypeMenu.setText("Brush Type"); + + // + TEBrushSizeMenu.clear(); + TEBrushSizeMenu.setText("Brush Size"); + for(%i = 0; %i < 6; %i++) + TEBrushSizeMenu.add("Level " @ %i, %i); +} + +//------------------------------------------------------------------------------ + +function TEBrushSizeMenu::onSelect(%this, %id, %text) +{ + %this.setText("Brush Size"); + tEditor.setBrushSize(1 << %id, 1 << %id); +} + +function TEBrushTypeMenu::onSelect(%this, %id, %text) +{ + %this.setText("Brush Type"); + switch(%id) + { + case 0: + tEditor.setBrushType(box); + case 1: + tEditor.setBrushType(ellipse); + } +} + +//------------------------------------------------------------------------------ + +function TESelectModeRadio::onAction(%this) +{ + tEditor.currentMode = "select"; + tEditor.selectionHidden = false; + tEditor.setAction("select"); +} + +function TEAdjustModeRadio::onAction(%this) +{ + tEditor.currentMode = "adjust"; + tEditor.selectionHidden = false; + tEditor.setAction("adjustHeight"); +} + +function TEPaintModeRadio::onAction(%this) +{ + tEditor.currentMode = "paint"; + tEditor.selectionHidden = true; + tEditor.setAction(tEditor.currentAction); +} + +//------------------------------------------------------------------------------ + +function TerrainEditorExtraToolbarDlg::updateCurrentMode(%this) +{ + switch$(tEditor.currentMode) + { + case "select": + TESelectModeRadio.setValue(1); + case "adjust": + TEAdjustModeRadio.setValue(1); + case "paint": + TEPaintModeRadio.setValue(1); + } +} + +function TerrainEditorExtraToolbarDlg::updateCurrentAction(%this) +{ + switch$(tEditor.currentAction) + { + case "raiseHeight": + TERaiseHeightActionRadio.setValue(1); + case "lowerHeight": + TELowerHeightActionRadio.setValue(1); + case "setHeight": + TESetHeightActionRadio.setValue(1); + case "setEmpty": + TESetEmptyActionRadio.setValue(1); + case "clearEmpty": + TEClearEmptyActionRadio.setValue(1); + case "flattenHeight": + TEFlattenHeightActionRadio.setValue(1); + case "smoothHeight": + TESmoothHeightActionRadio.setValue(1); + case "setMaterialGroup": + TESetMaterialActionRadio.setValue(1); + case "brushAdjustHeight": + TEAdjustHeightActionRadio.setValue(1); + } +} \ No newline at end of file diff --git a/base/gui/TerrainEditorFramesetDlg.gui b/base/gui/TerrainEditorFramesetDlg.gui new file mode 100644 index 0000000..f664fa7 --- /dev/null +++ b/base/gui/TerrainEditorFramesetDlg.gui @@ -0,0 +1,187 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(TerrainEditorFrameSetDlg) { + profile = "GuiModelessDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "0"; + helpTag = "0"; + + new GuiFrameSetCtrl(TerrainEditorFrameSet) { + profile = "EditorContentProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "90 60"; + extent = "550 390"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + columns = "0 420"; + rows = "0"; + borderWidth = "4"; + borderColor = "206 206 206 206"; + borderEnable = "dynamic"; + borderMovable = "dynamic"; + autoBalance = "0"; + + new GuiControl(TerrainEditorFrame) { + profile = "EditTSControlProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "420 390"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + borderWidth = "2"; + }; + new GuiFrameSetCtrl(TerrainEditorToolFrameSet) { + profile = "EditorContentProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "420 0"; + extent = "130 390"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + columns = "0"; + rows = "0"; + borderWidth = "2"; + borderColor = "206 206 206 206"; + borderEnable = "dynamic"; + borderMovable = "dynamic"; + autoBalance = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- + +//------------------------------------------------------------------------------ +// Functions +//------------------------------------------------------------------------------ + +function TerrainEditorFrameSetDlg::getPrefs(%this) +{ + %toolPaneOffset = getPrefSetting($Pref::TerrainEditor::toolPaneOffset, 420); + %toolCount = getPrefSetting($Pref::TerrainEditor::activeToolCount, 0); + + // set the tools + for(%i = 0; %i < %toolCount; %i++) + { + if($pref::TerrainEditor::activeTool[%i] $= "") + return; + + %this.addTool(getWord($pref::TerrainEditor::activeTool[%i], 0)); + %offsets[%i] = getWord($pref::TerrainEditor::activeTool[%i], 1); + } + + for(%i = 0; %i < %toolCount; %i++) + TerrainEditorToolFrameSet.setRowOffset(%i, %offsets[%i]); + + if(%toolCount) + TerrainEditorFrameSet.setColumnOffset(1, %toolPaneOffset); +} + +function TerrainEditorFrameSetDlg::setPrefs(%this) +{ + // + if(TerrainEditorFrameSet.getColumnCount() > 1) + $pref::TerrainEditor::toolPaneOffset = TerrainEditorFrameSet.getColumnOffset(1); + else + $pref::TerrainEditor::toolPaneOffset = %this.toolPaneOffset; + $pref::TerrainEditor::activeToolCount = %this.activeToolCount; + + %tools = TerrainEditorToolFrameSet; + + for(%i = 0; %i < %this.activeToolCount; %i++) + { + %obj = %tools.getObject(%i); + %offset = %tools.getRowOffset(%i); + %val = %obj.getName() @ " " @ %offset; + + $pref::TerrainEditor::activeTool[%i] = %val; + } +} + +function TerrainEditorFrameSetDlg::init(%this) +{ + TerrainEditorFrame.add(tEditor); + %this.resetFrames(); + %this.getPrefs(); +} + +function TerrainEditorFrameSetDlg::onWake(%this) +{ + TerrainEditorMap.push(); + %this.getPrefs(); +} + +function TerrainEditorFrameSetDlg::onSleep(%this) +{ + TerrainEditorMap.pop(); + %this.setPrefs(); +} + +function TerrainEditorFrameSetDlg::resetFrames(%this) +{ + // update the tool pane + %tools = TerrainEditorToolFrameSet; + while(%tools.getRowCount() > %tools.getCount()) + %tools.removeRow(); + while(%tools.getRowCount() < %tools.getCount()) + %tools.addRow(); + + // update the frame view + %frameSet = TerrainEditorFrameSet; + if(!%tools.getCount() && (%frameSet.getColumnCount() > 1)) + { + %frameSet.toolPaneOffset = %frameSet.getColumnOffset(1); + %frameSet.removeColumn(); + } + if(%tools.getCount() && (%frameSet.getColumnCount() == 1)) + { + %frameSet.addColumn(); + %frameSet.setColumnOffset(1, %frameSet.toolPaneOffset); + } + + if(%tools.getCount()) + %this.toolPaneOffset = TerrainEditorFrameSet.getColumnOffset(1); + %this.activeToolCount = %tools.getCount(); +} + +function TerrainEditorFrameSetDlg::addTool(%this, %tool) +{ + TerrainEditorToolFrameSet.add(%tool); + %this.resetFrames(); +} + +function TerrainEditorFrameSetDlg::removeTool(%this, %tool) +{ + TerrainEditorToolFrameSet.remove(%tool); + %this.resetFrames(); +} + +function TerrainEditorFrameSetDlg::update(%this) +{ + // check the frame to see if it is visible + if(TerrainEditorToolFrameSet.getCount()) + { + %res = getResolution(); + + // 90 = width of button bar + %width = getWord(%res, 0) - 90; + + if(TerrainEditorFrameSet.getColumnOffset(1) > %width - editor.minToolFrameWidth) + TerrainEditorFrameSet.setColumnOffset(1, %width - editor.minToolFrameWidth); + } +} diff --git a/base/gui/TerrainEditorGui.gui b/base/gui/TerrainEditorGui.gui new file mode 100644 index 0000000..71d4544 --- /dev/null +++ b/base/gui/TerrainEditorGui.gui @@ -0,0 +1,110 @@ +//--- OBJECT WRITE BEGIN --- + +new TerrainEditor(tEditor) +{ + profile = ""; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "420 420"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; +}; + +//--- OBJECT WRITE END --- + +//------------------------------------------------------------------------------ +// Functions +//------------------------------------------------------------------------------ + +function TerrainEditor::getPrefs(%this) +{ + // persist these... + %this.softSelecting = 1; + %this.currentAction = "raiseHeight"; + %this.currentMode = "select"; +} + +function TerrainEditor::setPrefs(%this) +{ +} + +function TerrainEditor::init(%this) +{ + %this.getPrefs(); + tEditor.attachTerrain(); +} + +function TerrainEditor::onGuiUpdate(%this, %text) +{ + TerrainEditorStatusBarDlg.update(%text); + TerrainEditorFrameSetDlg.update(); +} + +function TerrainEditor::offsetBrush(%this, %x, %y) +{ + %curPos = %this.getBrushPos(); + %this.setBrushPos(getWord(%curPos, 0) + %x, getWord(%curPos, 1) + %y); +} + +function TerrainEditor::swapInLoneMaterial(%this, %name) +{ + // swapped? + if(%this.baseMaterialsSwapped $= "true") + { + %this.baseMaterialsSwapped = "false"; + tEditor.popBaseMaterialInfo(); + } + else + { + %this.baseMaterialsSwapped = "true"; + %this.pushBaseMaterialInfo(); + %this.setLoneBaseMaterial(%name); + } + + // + flushTextureCache(); +} + +//------------------------------------------------------------------------------ +// keys +new ActionMap(TerrainEditorMap); + +TerrainEditorMap.bindCmd(keyboard, "ctrl z", "tEditor.undo();", ""); +TerrainEditorMap.bindCmd(keyboard, "ctrl y", "tEditor.redo();", ""); + +TerrainEditorMap.bindCmd(keyboard, "left", "tEditor.offsetBrush(-1, 0);", ""); +TerrainEditorMap.bindCmd(keyboard, "right", "tEditor.offsetBrush(1, 0);", ""); +TerrainEditorMap.bindCmd(keyboard, "up", "tEditor.offsetBrush(0, 1);", ""); +TerrainEditorMap.bindCmd(keyboard, "down", "tEditor.offsetBrush(0, -1);", ""); + +TerrainEditorMap.bindCmd(keyboard, "1", "TERaiseHeightActionRadio.setValue(1);", ""); +TerrainEditorMap.bindCmd(keyboard, "2", "TELowerHeightActionRadio.setValue(1);", ""); +TerrainEditorMap.bindCmd(keyboard, "3", "TESetHeightActionRadio.setValue(1);", ""); +TerrainEditorMap.bindCmd(keyboard, "4", "TESetEmptyActionRadio.setValue(1);", ""); +TerrainEditorMap.bindCmd(keyboard, "5", "TEClearEmptyActionRadio.setValue(1);", ""); +TerrainEditorMap.bindCmd(keyboard, "6", "TEFlattenHeightActionRadio.setValue(1);", ""); +TerrainEditorMap.bindCmd(keyboard, "7", "TESmoothHeightActionRadio.setValue(1);", ""); +TerrainEditorMap.bindCmd(keyboard, "8", "TESetMaterialActionRadio.setValue(1);", ""); +TerrainEditorMap.bindCmd(keyboard, "9", "TEAdjustHeightActionRadio.setValue(1);", ""); + +TerrainEditorMap.bindCmd(keyboard, "shift 1", "tEditor.processUsesBrush = true;TERaiseHeightActionRadio.setValue(1);tEditor.processUsesBrush = false;", ""); +TerrainEditorMap.bindCmd(keyboard, "shift 2", "tEditor.processUsesBrush = true;TELowerHeightActionRadio.setValue(1);tEditor.processUsesBrush = false;", ""); +TerrainEditorMap.bindCmd(keyboard, "shift 3", "tEditor.processUsesBrush = true;TESetHeightActionRadio.setValue(1);tEditor.processUsesBrush = false;", ""); +TerrainEditorMap.bindCmd(keyboard, "shift 4", "tEditor.processUsesBrush = true;TESetEmptyActionRadio.setValue(1);tEditor.processUsesBrush = false;", ""); +TerrainEditorMap.bindCmd(keyboard, "shift 5", "tEditor.processUsesBrush = true;TEClearEmptyActionRadio.setValue(1);tEditor.processUsesBrush = false;", ""); +TerrainEditorMap.bindCmd(keyboard, "shift 6", "tEditor.processUsesBrush = true;TEFlattenHeightActionRadio.setValue(1);tEditor.processUsesBrush = false;", ""); +TerrainEditorMap.bindCmd(keyboard, "shift 7", "tEditor.processUsesBrush = true;TESmoothHeightActionRadio.setValue(1);tEditor.processUsesBrush = false;", ""); +TerrainEditorMap.bindCmd(keyboard, "shift 8", "tEditor.processUsesBrush = true;TESetMaterialActionRadio.setValue(1);tEditor.processUsesBrush = false;", ""); +TerrainEditorMap.bindCmd(keyboard, "shift 9", "tEditor.processUsesBrush = true;TEAdjustHeightActionRadio.setValue(1);tEditor.processUsesBrush = false;", ""); + +TerrainEditorMap.bindCmd(keyboard, "h", "TESelectModeRadio.setValue(1);", ""); +TerrainEditorMap.bindCmd(keyboard, "j", "TEPaintModeRadio.setValue(1);", ""); +TerrainEditorMap.bindCmd(keyboard, "k", "TEAdjustModeRadio.setValue(1);", ""); + +TerrainEditorMap.bindCmd(keyboard, "o", "Canvas.pushDialog(TerrainEditorValuesSettingsGui, 99);", ""); +TerrainEditorMap.bindCmd(keyboard, "m", "Canvas.pushDialog(TerrainEditorTextureSelectGui, 99);", ""); + +TerrainEditorMap.bindCmd(keyboard, "backspace", "tEditor.clearSelection();", ""); diff --git a/base/gui/TerrainEditorStatusbarDlg.gui b/base/gui/TerrainEditorStatusbarDlg.gui new file mode 100644 index 0000000..e769bd9 --- /dev/null +++ b/base/gui/TerrainEditorStatusbarDlg.gui @@ -0,0 +1,68 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(TerrainEditorStatusbarDlg) { + profile = "GuiModelessDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "0"; + helpTag = "0"; + + new GuiControl() { + profile = "EditorContentProfile"; + horizSizing = "width"; + vertSizing = "top"; + position = "0 450"; + extent = "640 30"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiTextCtrl(TEMouseBrushInfo) { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "3 6"; + extent = "85 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + }; + new GuiTextCtrl(TESelectionInfo) { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "209 7"; + extent = "65 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- + +//------------------------------------------------------------------------------ +// Functions +//------------------------------------------------------------------------------ + +function TerrainEditorStatusbarDlg::init(%this) +{ + MouseBrushInfo.setValue("Mouse Brush Info"); + SelectionInfo.setValue("Selection Info"); +} + +function TerrainEditorStatusbarDlg::update(%this, %info) +{ + TEMouseBrushInfo.setValue(" (Mouse Brush) #: " @ getWord(%info, 0) @ " avg: " @ getWord(%info, 1)); + TESelectionInfo.setValue(" (Selection) #: " @ getWord(%info, 2) @ " avg: " @ getWord(%info, 3)); +} diff --git a/base/gui/TerrainEditorTextureSelectGui.gui b/base/gui/TerrainEditorTextureSelectGui.gui new file mode 100644 index 0000000..a848788 --- /dev/null +++ b/base/gui/TerrainEditorTextureSelectGui.gui @@ -0,0 +1,157 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(TerrainEditorTextureSelectGui) { + profile = "GuiDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiWindowCtrl() { + profile = "GuiWindowProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "134 84"; + extent = "217 286"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Texture group selection"; + resizeWidth = "0"; + resizeHeight = "0"; + canMove = "1"; + canClose = "1"; + canMinimize = "0"; + canMaximize = "0"; + minSize = "50 50"; + closeCommand = "Canvas.popDialog(TerrainEditorTextureSelectGui);"; + + new GuiControl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "8 50"; + extent = "200 200"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiBitmapCtrl(TerrainTextureBitmapCtrl) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "200 200"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + wrap = "0"; + }; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "113 257"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "setGroupIndex(TextureSelectionSlider.getValue());Canvas.popDialog(TerrainEditorTextureSelectGui);"; + helpTag = "0"; + text = "Ok"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "23 257"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Canvas.popDialog(TerrainEditorTextureSelectGui);"; + helpTag = "0"; + text = "Cancel"; + }; + new GuiSliderCtrl(TextureSelectionSlider) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "8 24"; + extent = "200 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + variable = "value"; + command = "setTextureBitmap($ThisControl.getValue());"; + helpTag = "0"; + range = "0.000000 1.000000"; + ticks = "0"; + value = "0"; + tab = "true"; + }; + }; +}; +//--- OBJECT WRITE END --- + +function TerrainTextureBitmapCtrl::onAction(%this) +{ + // dummy to remove console spam +} + +function TerrainEditorTextureSelectGui::onWake(%this) +{ + %numTextures = tEditor.getNumTextures(); + if(%numTextures == 0) + return; + + if(tEditor.materialGroup < 0 || tEditor.materialGroup > %numTextures) + tEditor.materialGroup = 0; + + TextureSelectionSlider.ticks = %numTextures - 1; + TextureSelectionSlider.range = "0 " @ %numTextures; + TextureSelectionSlider.setValue(tEditor.materialGroup + 0.5); + + TerrainTextureBitmapCtrl.setBitmap(tEditor.getTextureName(tEditor.materialGroup)); +} + +function setGroupIndex(%val) +{ + %numTextures = tEditor.getNumTextures(); + if(%val < 0 || (%val > %numTextures)) + return; + + %group = mFloor(%val); + if(%group == %numTextures) + %group--; + + tEditor.materialGroup = %group; +} + +function setTextureBitmap(%val) +{ + %numTextures = tEditor.getNumTextures(); + if(%val < 0 || (%val > %numTextures)) + return; + + %idx = mFloor(%val); + if(%idx == %numTextures) + %idx--; + + TerrainTextureBitmapCtrl.setBitmap(tEditor.getTextureName(%idx)); +} + diff --git a/base/gui/TerrainEditorToolbarDlg.gui b/base/gui/TerrainEditorToolbarDlg.gui new file mode 100644 index 0000000..2a410a5 --- /dev/null +++ b/base/gui/TerrainEditorToolbarDlg.gui @@ -0,0 +1,47 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(TerrainEditorToolbarDlg) { + profile = "GuiModelessDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "0"; + helpTag = "0"; + + new GuiControl() { + profile = "EditorContentProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 30"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "0"; + helpTag = "0"; + + new GuiCheckBoxCtrl(TerrainEditorMissionAreaCheckBox) { + profile = "GuiRadioProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "541 4"; + extent = "93 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "if($ThisControl.getValue()) TerrainEditorFrameSetDlg.addTool(EditorToolMissionAreaGui); else TerrainEditorFrameSetDlg.removeTool(EditorToolMissionAreaGui);"; + helpTag = "0"; + text = "Mission Area"; + }; + }; +}; +//--- OBJECT WRITE END --- + +function TerrainEditorToolbarDlg::init(%this) +{ + TerrainEditorMissionAreaCheckBox.setValue(TerrainEditorToolFrameSet.isMember(EditorToolMissionAreaGui)); +} diff --git a/base/gui/TerrainEditorValuesSettingsGui.gui b/base/gui/TerrainEditorValuesSettingsGui.gui new file mode 100644 index 0000000..d809b25 --- /dev/null +++ b/base/gui/TerrainEditorValuesSettingsGui.gui @@ -0,0 +1,300 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(TerrainEditorValuesSettingsGui) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiWindowCtrl() { + profile = "GuiWindowProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "117 113"; + extent = "408 247"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Terrain Action Values"; + resizeWidth = "0"; + resizeHeight = "0"; + canMove = "1"; + canClose = "1"; + canMinimize = "0"; + canMaximize = "0"; + minSize = "50 50"; + closeCommand = "Canvas.popDIalog(TerrainEditorValuesSettingsGui);"; + + new GuiControl() { + profile = "EditorContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "197 25"; + extent = "203 115"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "86 12"; + extent = "107 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + variable = "tEditor.adjustHeightVal"; + command = "tEditor.adjustHeightVal = $ThisControl.getValue();"; + helpTag = "0"; + historySize = "0"; + }; + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "86 37"; + extent = "107 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + variable = "tEditor.setHeightVal"; + command = "tEditor.setHeightVal = $ThisControl.getValue();"; + helpTag = "0"; + historySize = "0"; + }; + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "86 62"; + extent = "107 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + variable = "tEditor.scaleVal"; + command = "tEditor.scaleVal = $ThisControl.getValue();"; + helpTag = "0"; + historySize = "0"; + }; + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "86 87"; + extent = "107 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + variable = "tEditor.smoothFactor"; + command = "tEditor.smoothFactor = $ThisControl.getValue();"; + helpTag = "0"; + historySize = "0"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "11 12"; + extent = "64 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Adjust Height"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "11 37"; + extent = "49 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Set Height"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "11 62"; + extent = "60 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Scale Height"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 87"; + extent = "70 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Smooth Factor"; + }; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "218 205"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Canvas.popDIalog(TerrainEditorValuesSettingsGui);"; + helpTag = "0"; + text = "OK"; + }; + new GuiControl() { + profile = "EditorContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "7 25"; + extent = "188 212"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiFilterCtrl(TESoftSelectFilter) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 22"; + extent = "155 162"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + controlPoints = "7"; + filter = "1.000000 0.833333 0.666667 0.500000 0.333333 0.166667 0.000000"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 4"; + extent = "67 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Soft Selection"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "12 189"; + extent = "8 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "0"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "12 26"; + extent = "8 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "1"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "60 190"; + extent = "45 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = ""; + }; + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "125 187"; + extent = "50 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + variable = "tEditor.softSelectRadius"; + command = "tEditor.softSelectRadius = $ThisControl.getValue();"; + helpTag = "0"; + historySize = "0"; + }; + }; + new GuiButtonCtrl(TESettingsApplyButton) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "307 205"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Apply"; + }; + }; +}; +//--- OBJECT WRITE END --- + +function TerrainEditorSettingsGui::onWake(%this) +{ + TESoftSelectFilter.setValue(tEditor.softSelectFilter); +} + +function TerrainEditorSettingsGui::onSleep(%this) +{ + tEditor.softSelectFilter = TESoftSelectFilter.getValue(); +} + +function TESettingsApplyButton::onAction(%this) +{ + tEditor.softSelectFilter = TESoftSelectFilter.getValue(); + tEditor.resetSelWeights(true); + tEditor.processAction("softSelect"); +} \ No newline at end of file diff --git a/base/gui/TestGui.gui b/base/gui/TestGui.gui new file mode 100644 index 0000000..67052ba --- /dev/null +++ b/base/gui/TestGui.gui @@ -0,0 +1,111 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(TestGui) { + profile = "GuiContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiControl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "86 239"; + extent = "171 194"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiBigTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "14 13"; + extent = "53 40"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + text = "Test"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "84 85"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Canvas.setContent(GuiTestGui);"; + helpTag = "0"; + text = "GUI Test"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "84 59"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "startShow();"; + helpTag = "0"; + text = "TS Show"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "70 7"; + extent = "94 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "1"; + modal = "1"; + command = "Canvas.setContent(LaunchGui);"; + helpTag = "0"; + text = "Back to Launch"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "32 163"; + extent = "100 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Canvas.pushDialog(NewMissionGui, 99);"; + helpTag = "0"; + text = "Create Mission"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "32 137"; + extent = "100 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Canvas.setContent(EditChatMenuGui);"; + helpTag = "0"; + text = "Edit Chat Menu"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/TrainingGui.gui b/base/gui/TrainingGui.gui new file mode 100644 index 0000000..d1c1043 --- /dev/null +++ b/base/gui/TrainingGui.gui @@ -0,0 +1,220 @@ +//--- OBJECT WRITE BEGIN --- +new GuiChunkedBitmapCtrl(TrainingGui) { + profile = "GuiContentProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + variable = "$ShellBackground"; + helpTag = "0"; + useVariable = "1"; + + new ShellPaneCtrl() { + profile = "ShellPaneProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "12 46"; + extent = "620 390"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "TRAINING"; + noTitleBar = "0"; + + new ShellFieldCtrl(TrainingPicFrame) { + profile = "ShellFieldProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "30 186"; + extent = "175 175"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new GuiBitmapCtrl(TrainingPic) { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "2 3"; + extent = "169 169"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + wrap = "0"; + }; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "236 344"; + extent = "74 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Difficulty:"; + }; + new ShellPopupMenu(TrainingDifficultyMenu) { + profile = "ShellPopupProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "307 335"; + extent = "137 36"; + minExtent = "49 36"; + visible = "1"; + helpTag = "0"; + maxPopupHeight = "200"; + buttonBitmap = "gui/shll_pulldown"; + rolloverBarBitmap = "gui/shll_pulldownbar_rol"; + selectedBarBitmap = "gui/shll_pulldownbar_act"; + noButtonStyle = "0"; + }; + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "26 31"; + extent = "183 146"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "dynamic"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "3 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "7 7"; + extent = "169 132"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellTextList(TrainingMissionList) { + profile = "ShellTextArrayProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "169 8"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + enumerate = "1"; + resizeCell = "1"; + columns = "0 200"; + fitParentWidth = "1"; + clipColumnText = "0"; + }; + }; + }; + new ShellToggleButton(TrainingPlayTgl) { + profile = "ShellRadioProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "448 27"; + extent = "140 30"; + minExtent = "26 27"; + visible = "0"; + variable = "$pref::TrainingPlayBriefing"; + helpTag = "0"; + text = "Play Briefing"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "444 31"; + extent = "122 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Play Briefing:"; + }; + new ShellBitmapButton(TrainingPlayBtn) { + profile = "SoundTestButtonProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "568 28"; + extent = "24 24"; + minExtent = "24 24"; + visible = "1"; + command = "TrainingGui.toggleBriefing();"; + helpTag = "0"; + simpleStyle = "1"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "219 31"; + extent = "99 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "MISSION BRIEFING"; + }; + new ShellScrollCtrl(TrainingBriefingScroll) { + profile = "NewScrollCtrlProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "214 50"; + extent = "378 285"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "3 3"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "7 7"; + extent = "348 271"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextCtrl(TrainingBriefingText) { + profile = "ShellLoadTextProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "0 0"; + extent = "348 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + allowColorChars = "0"; + }; + }; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "469 335"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "TrainingGui.startTraining();"; + helpTag = "0"; + text = "START"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/TribeAdminMemberDlg.gui b/base/gui/TribeAdminMemberDlg.gui new file mode 100644 index 0000000..abe2f15 --- /dev/null +++ b/base/gui/TribeAdminMemberDlg.gui @@ -0,0 +1,153 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(TribeAdminMemberDlg) { + profile = "DlgBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + vTribe = "T2 ADMINISTRATION"; + vPerm = "4"; + vPlayer = "QIX"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "167 110"; + extent = "306 260"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "MEMBER PROFILE"; + maxLength = "255"; + noTitleBar = "0"; + + new ShellTextEditCtrl(E_Title) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "42 45"; + extent = "221 38"; + minExtent = "32 38"; + visible = "1"; + helpTag = "0"; + maxLength = "16"; + historySize = "0"; + password = "0"; + glowOffset = "9 9"; + }; + new GuiTextCtrl(t_whois) { + profile = "ShellTopicTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "53 34"; + extent = "197 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "WARRIOR TITLE"; + maxLength = "255"; + }; + new ShellRadioButton(tb_sysAdmin) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "47 83"; + extent = "205 30"; + minExtent = "26 27"; + visible = "1"; + command = "TAM_onAction(4);"; + helpTag = "0"; + text = " RANK 4: Tribe Admin 1"; + maxLength = "255"; + groupNum = "1"; + }; + new ShellRadioButton(tb_tribeController) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "47 103"; + extent = "205 30"; + minExtent = "26 27"; + visible = "1"; + command = "TAM_onAction(3);"; + helpTag = "0"; + text = " RANK 3: Tribe Admin 2"; + maxLength = "255"; + groupNum = "1"; + }; + new ShellRadioButton(tb_tribeAdmin) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "47 123"; + extent = "205 30"; + minExtent = "26 27"; + visible = "1"; + command = "TAM_onAction(2);"; + helpTag = "0"; + text = " RANK 2: Tribe Admin 3"; + maxLength = "255"; + groupNum = "1"; + }; + new ShellRadioButton(tb_tribeMember) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "47 143"; + extent = "205 30"; + minExtent = "26 27"; + visible = "1"; + command = "TAM_onAction(1);"; + helpTag = "0"; + text = " RANK 1: Tribe Member"; + maxLength = "255"; + groupNum = "1"; + }; + new ShellRadioButton(tb_onProbation) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "47 163"; + extent = "205 30"; + minExtent = "26 27"; + visible = "1"; + command = "TAM_onAction(0);"; + helpTag = "0"; + text = "RANK 0: On Probation"; + maxLength = "255"; + groupNum = "1"; + }; + new ShellBitmapButton(b_Cancel) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "43 195"; + extent = "115 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.popDialog(TribeAdminMemberDlg);"; + accelerator = "escape"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + new ShellBitmapButton(b_Update) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "141 195"; + extent = "121 38"; + minExtent = "32 38"; + visible = "1"; + command = "SetMemberProfile();"; + helpTag = "0"; + text = "UPDATE"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/TribeAndWarriorBrowserGui.gui b/base/gui/TribeAndWarriorBrowserGui.gui new file mode 100644 index 0000000..2c1748a --- /dev/null +++ b/base/gui/TribeAndWarriorBrowserGui.gui @@ -0,0 +1,605 @@ +//--- OBJECT WRITE BEGIN --- +new GuiChunkedBitmapCtrl(TribeAndWarriorBrowserGui) { + profile = "GuiContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + variable = "$ShellBackground"; + helpTag = "0"; + useVariable = "1"; + + new ShellPaneCtrl() { + profile = "ShellPaneProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "12 46"; + extent = "620 390"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "COMMUNITY BROWSER"; + maxLength = "255"; + noTitleBar = "0"; + + new ShellTabFrame(TWBTabFrame) { + profile = "ShellHorzTabFrameProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "28 63"; + extent = "564 270"; + minExtent = "26 254"; + visible = "1"; + helpTag = "0"; + isVertical = "0"; + useCloseButton = "0"; + edgeInset = "0"; + }; + new ShellTabGroupCtrl(TWBTabView) { + profile = "TabGroupProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "38 34"; + extent = "546 29"; + minExtent = "38 29"; + visible = "1"; + helpTag = "0"; + glowOffset = "7"; + tabSpacing = "2"; + maxTabWidth = "150"; + stretchToFit = "0"; + }; + new ShellFieldCtrl() { + profile = "ShellFieldProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "39 71"; + extent = "543 262"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new ShellFieldCtrl(TribePane) { + profile = "ShellFieldProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "3 27"; + extent = "537 231"; + minExtent = "16 18"; + visible = "0"; + helpTag = "0"; + + new ShellFieldCtrl() { + profile = "ShellFieldProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "237 20"; + extent = "297 209"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new ShellScrollCtrl(TWBScroll) { + profile = "NewScrollCtrlProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "2 6"; + extent = "293 201"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "dynamic"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "5 5"; + fieldBase = " "; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "9 9"; + extent = "275 183"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextCtrl(TWBText) { + profile = "NewTextEditProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "259 16"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + allowColorChars = "1"; + maxChars = "-1"; + }; + }; + }; + }; + new ShellFieldCtrl() { + profile = "ShellPaneProfile"; + horizSizing = "right"; + vertSizing = "height"; + position = "3 3"; + extent = "234 226"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new GuiChunkedBitmapCtrl(TeamPix) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "3 2"; + extent = "228 150"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + bitmap = "texticons/twb_Lineup.jpg"; + useVariable = "0"; + wrap = "0"; + }; + new ShellFancyArrayScrollCtrl(ML1) { + profile = "clockProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "-2 151"; + extent = "237 77"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + fixedHorizontal = "1"; + vertSpacerBitmap = "gui/shll_vertspacer"; + horzSpacerBitmap = "gui/shll_horzspacer"; + + new VirtualScrollCtrl(ML2) { + profile = "ShellServerBrowserProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 16"; + extent = "237 61"; + minExtent = "8 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "0"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "0 3"; + + new VirtualScrollContentCtrl(ML3) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 7"; + extent = "213 47"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiControl(ML4) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "8 8"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + }; + }; + }; + new ShellFancyTextList(MemberList) { + profile = "clockProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "217 73"; + minExtent = "8 20"; + visible = "1"; + altCommand = "TribePane.RosterDblClick();"; + helpTag = "0"; + startScrollRegion = "2 0"; + headerBitmap = "gui/server_tabs"; + sortArrowBitmap = "gui/shll_sortarrow"; + fieldBase = "gui/shll_field"; + barBase = "gui/shll_bar"; + glowOffset = "4"; + rowHeight = "15"; + headerFontType = "Univers Condensed"; + headerFontSize = "16"; + headerFontColor = "8 19 6 255"; + headerFontColorHL = "25 68 56 255"; + separatorColor = "192 192 192 255"; + drawSeparators = "0"; + headerSort = "1"; + allowReposition = "1"; + }; + }; + }; + new ShellRadioButton(TW_Admin) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "477 -2"; + extent = "64 30"; + minExtent = "26 27"; + visible = "1"; + command = "TribePane.ButtonClick(4);"; + helpTag = "0"; + text = "ADMIN"; + maxLength = "255"; + groupNum = "4"; + }; + new ShellRadioButton(TL_Invites) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "414 -2"; + extent = "66 27"; + minExtent = "26 27"; + visible = "1"; + command = "TribePane.ButtonClick(3);"; + helpTag = "0"; + text = "INVITES"; + maxLength = "255"; + groupNum = "5"; + }; + new ShellRadioButton(TL_Profile) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "233 -2"; + extent = "65 27"; + minExtent = "26 27"; + visible = "1"; + command = "TribePane.ButtonClick(0);"; + helpTag = "0"; + text = "PROFILE"; + maxLength = "255"; + groupNum = "4"; + }; + new ShellRadioButton(TL_Roster) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "295 -2"; + extent = "65 27"; + minExtent = "26 27"; + visible = "1"; + command = "TribePane.ButtonClick(1);"; + helpTag = "0"; + text = "ROSTER"; + maxLength = "255"; + groupNum = "5"; + }; + new ShellRadioButton(TL_News) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "357 -2"; + extent = "60 27"; + minExtent = "26 27"; + visible = "1"; + command = "TribePane.ButtonClick(2);"; + helpTag = "0"; + text = "NEWS"; + maxLength = "255"; + groupNum = "4"; + }; + }; + new ShellFieldCtrl(PlayerPane) { + profile = "ShellFieldProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "3 27"; + extent = "537 231"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new ShellFieldCtrl() { + profile = "ShellFieldProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "237 20"; + extent = "297 209"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new ShellScrollCtrl(W_Scroll) { + profile = "NewScrollCtrlProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "2 2"; + extent = "293 205"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "dynamic"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "0 0"; + fieldBase = " "; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "4 4"; + extent = "269 197"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextCtrl(W_Text) { + profile = "NewTextEditProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "0 0"; + extent = "273 204"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + allowColorChars = "0"; + maxChars = "-1"; + }; + }; + }; + }; + new ShellFieldCtrl() { + profile = "ShellFieldProfile"; + horizSizing = "right"; + vertSizing = "height"; + position = "3 3"; + extent = "234 226"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new GuiChunkedBitmapCtrl(PlayerPix) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "3 3"; + extent = "228 150"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + bitmap = "texticons/twb_soclose.jpg"; + useVariable = "0"; + wrap = "0"; + }; + new ShellFancyArrayScrollCtrl(W_ML1) { + profile = "ShellServerBrowserProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "-2 151"; + extent = "237 75"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + fixedHorizontal = "1"; + vertSpacerBitmap = "gui/shll_vertspacer"; + horzSpacerBitmap = "gui/shll_horzspacer"; + + new VirtualScrollCtrl(W_ML2) { + profile = "ShellServerBrowserProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 16"; + extent = "237 59"; + minExtent = "8 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "0"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "0 3"; + + new VirtualScrollContentCtrl(W_ML3) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 7"; + extent = "213 45"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiControl(W_ML4) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "8 47"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + }; + }; + }; + new ShellFancyTextList(W_MemberList) { + profile = "clockProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "217 71"; + minExtent = "8 20"; + visible = "1"; + altCommand = "PlayerPane.DblClick();"; + helpTag = "0"; + startScrollRegion = "3 0"; + headerBitmap = "gui/server_tabs"; + sortArrowBitmap = "gui/shll_sortarrow"; + fieldBase = "gui/shll_field"; + barBase = "gui/shll_bar"; + glowOffset = "4"; + rowHeight = "15"; + headerFontSize = "0"; + headerFontColor = "8 19 6 255"; + headerFontColorHL = "25 68 56 255"; + separatorColor = "192 192 192 255"; + drawSeparators = "0"; + headerSort = "1"; + allowReposition = "0"; + }; + }; + }; + new ShellRadioButton(W_Admin) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "495 -2"; + extent = "64 30"; + minExtent = "26 27"; + visible = "1"; + command = "PlayerPane.ButtonClick(5);"; + helpTag = "0"; + text = "ADMIN"; + maxLength = "255"; + groupNum = "4"; + }; + new ShellRadioButton(W_BuddyList) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "420 -2"; + extent = "78 27"; + minExtent = "26 27"; + visible = "1"; + command = "PlayerPane.ButtonClick(3);"; + helpTag = "0"; + text = "BUDDYLIST"; + maxLength = "255"; + groupNum = "5"; + }; + new ShellRadioButton(W_Profile) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "233 -2"; + extent = "67 27"; + minExtent = "26 27"; + visible = "1"; + command = "PlayerPane.ButtonClick(0);"; + helpTag = "0"; + text = "PROFILE"; + maxLength = "255"; + groupNum = "4"; + }; + new ShellRadioButton(W_History) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "296 -2"; + extent = "69 27"; + minExtent = "26 27"; + visible = "1"; + command = "PlayerPane.ButtonClick(1);"; + helpTag = "0"; + text = "HISTORY"; + maxLength = "255"; + groupNum = "4"; + }; + new ShellRadioButton(W_Tribes) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "361 -2"; + extent = "62 27"; + minExtent = "26 27"; + visible = "1"; + command = "PlayerPane.ButtonClick(2);"; + helpTag = "0"; + text = "TRIBES"; + maxLength = "255"; + groupNum = "5"; + }; + }; + new GuiTextCtrl(twbTitle) { + profile = "ShellBigTextProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "7 5"; + extent = "8 26"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "EAST [DEV]"; + maxLength = "255"; + name = "EAST"; + OldText = "EAST"; + }; + new ShellBitmapButton(TWBClosePaneBtn) { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "506 -3"; + extent = "43 38"; + minExtent = "32 38"; + visible = "0"; + command = "TWBTabView.closeCurrentPane();"; + accelerator = "escape"; + helpTag = "0"; + text = "X"; + simpleStyle = "0"; + }; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "303 330"; + extent = "104 38"; + minExtent = "32 38"; + visible = "1"; + command = "CreateTribe();"; + helpTag = "0"; + text = "CREATE TRIBE"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "390 330"; + extent = "102 38"; + minExtent = "32 38"; + visible = "1"; + command = "SearchTribes();"; + helpTag = "0"; + text = "TRIBE SEARCH"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "475 330"; + extent = "114 38"; + minExtent = "32 38"; + visible = "1"; + command = "SearchWarriors();"; + helpTag = "0"; + text = "WARRIOR SEARCH"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/TribeAttribDlg.gui b/base/gui/TribeAttribDlg.gui new file mode 100644 index 0000000..bdbdf2f --- /dev/null +++ b/base/gui/TribeAttribDlg.gui @@ -0,0 +1,151 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(TribeAttribDlg) { + profile = "DlgBackProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + variable = "$NewTagAppend"; + helpTag = "0"; + tribename = "DEV Team"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "155 145"; + extent = "330 190"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "CHANGE TRIBE TAG"; + noTitleBar = "0"; + + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "65 41"; + extent = "80 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Current:"; + }; + new ShellFieldCtrl() { + profile = "ShellFieldProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "151 39"; + extent = "130 22"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new GuiTextCtrl(TAD_CurrentTag) { + profile = "ShellAltTextCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "1 3"; + extent = "124 20"; + minExtent = "8 8"; + visible = "1"; + variable = "$CurrentTribeTag"; + helpTag = "0"; + text = "TAG"; + }; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "65 71"; + extent = "80 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "New:"; + }; + new ShellTextEditCtrl(TAD_NewTag) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "141 63"; + extent = "148 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$NewTribeTag"; + command = "updateNewTagPreview();"; + helpTag = "0"; + historySize = "0"; + maxLength = "8"; + password = "0"; + glowOffset = "9 9"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "29 101"; + extent = "65 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Preview:"; + }; + new ShellFieldCtrl() { + profile = "ShellFieldProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "100 101"; + extent = "180 22"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new GuiTextCtrl(TAD_PreviewTag) { + profile = "ShellAltTextCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 3"; + extent = "180 20"; + minExtent = "8 8"; + visible = "1"; + variable = "$NewTagPreview"; + helpTag = "0"; + text = "PREVIEW"; + }; + }; + new ShellBitmapButton(TAD_OKBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "187 135"; + extent = "100 38"; + minExtent = "32 38"; + visible = "1"; + command = "TribeAttribDlg.ChangeTribeTag();"; + accelerator = "Enter"; + helpTag = "0"; + text = "OK"; + simpleStyle = "0"; + }; + new ShellBitmapButton(TAD_CancelBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "43 135"; + extent = "100 38"; + minExtent = "32 38"; + visible = "1"; + command = "Canvas.popDialog(TribeAttribDlg);"; + accelerator = "escape"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/TribePropertiesDlg.gui b/base/gui/TribePropertiesDlg.gui new file mode 100644 index 0000000..b3b7277 --- /dev/null +++ b/base/gui/TribePropertiesDlg.gui @@ -0,0 +1,757 @@ +//--- OBJECT WRITE BEGIN --- +new GuiChunkedBitmapCtrl(TribePropertiesDlg) { + profile = "DlgBackProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + useVariable = "0"; + + new ShellDlgFrame() { + profile = "ShellDlgProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "113 2"; + extent = "408 354"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "TRIBE PROPERTIES"; + + new ShellFieldCtrl() { + profile = "ShellFieldProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 35"; + extent = "385 25"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new ShellBitmapButton(TP_ProfileBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "-7 -6"; + extent = "79 38"; + minExtent = "32 38"; + visible = "1"; + command = "GraphicsControl.setVisible(0);SecurityControl.setVisible(0);ProfileControl.setVisible(1);"; + helpTag = "0"; + text = "PROFILE"; + simpleStyle = "0"; + }; + new ShellBitmapButton(TP_GraphicsBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "56 -6"; + extent = "81 38"; + minExtent = "32 38"; + visible = "1"; + command = "ProfileControl.setVisible(0);SecurityControl.setVisible(0);GraphicsControl.setVisible(1);TribePropertiesDlg.LoadGfxPane();"; + helpTag = "0"; + text = "GFX"; + simpleStyle = "0"; + }; + new ShellBitmapButton(TP_SecurityBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "119 -6"; + extent = "81 38"; + minExtent = "32 38"; + visible = "0"; + command = "GraphicsControl.setVisible(0);ProfileControl.setVisible(0);SecurityControl.setVisible(1);"; + helpTag = "0"; + text = "SECURITY"; + simpleStyle = "0"; + }; + }; + new ShellFieldCtrl(SecurityControl) { + profile = "ShellFieldProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 63"; + extent = "385 235"; + minExtent = "16 18"; + visible = "0"; + helpTag = "0"; + + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "3 16"; + extent = "248 216"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "0 0"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 4"; + extent = "224 208"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellTextList(TP_ActionsList) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "224 8"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + enumerate = "0"; + resizeCell = "1"; + columns = "0"; + fitParentWidth = "1"; + clipColumnText = "0"; + }; + }; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "9 4"; + extent = "58 20"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "ACTIONS"; + }; + new ShellRadioButton() { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "246 27"; + extent = "132 30"; + minExtent = "26 27"; + visible = "1"; + helpTag = "0"; + text = "Admin 3 [4]"; + groupNum = "7"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "252 18"; + extent = "135 20"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Required Access Level"; + }; + new ShellRadioButton() { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "246 44"; + extent = "132 30"; + minExtent = "26 27"; + visible = "1"; + helpTag = "0"; + text = "Admin 2 [3]"; + groupNum = "7"; + }; + new ShellRadioButton() { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "246 61"; + extent = "132 30"; + minExtent = "26 27"; + visible = "1"; + helpTag = "0"; + text = "Admin 1 [2]"; + groupNum = "7"; + }; + new ShellRadioButton() { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "246 78"; + extent = "132 30"; + minExtent = "26 27"; + visible = "1"; + helpTag = "0"; + text = "Member [1]"; + groupNum = "7"; + }; + new ShellRadioButton() { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "246 95"; + extent = "132 30"; + minExtent = "26 27"; + visible = "1"; + helpTag = "0"; + text = "Public [0] "; + groupNum = "7"; + }; + new ShellBitmapButton(TP_UpdateSecurityBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "241 115"; + extent = "146 38"; + minExtent = "32 38"; + visible = "1"; + command = "TribePropertiesDlg.ClearDescription();"; + helpTag = "0"; + text = "UPDATE"; + simpleStyle = "0"; + }; + }; + new ShellBitmapButton(TP_OKBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "308 310"; + extent = "91 38"; + minExtent = "32 38"; + visible = "1"; + command = "TribePropertiesDlg.Close();"; + helpTag = "0"; + text = "CLOSE"; + simpleStyle = "0"; + }; + new ShellFieldCtrl(ProfileControl) { + profile = "ShellFieldProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 63"; + extent = "385 249"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new ShellBitmapButton(TP_DisbandTribeBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "-1 70"; + extent = "103 38"; + minExtent = "32 38"; + visible = "1"; + command = "TribePropertiesDlg.DisbandTribe();"; + helpTag = "0"; + text = "AUTHORIZE"; + simpleStyle = "0"; + }; + new ShellFieldCtrl() { + profile = "ShellFieldProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 120"; + extent = "373 123"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 3"; + extent = "73 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "DESCRIPTION"; + }; + new ShellBitmapButton(TP_EditDescBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "-2 17"; + extent = "94 38"; + minExtent = "32 38"; + visible = "1"; + command = "TribePropertiesDlg.EditDescription();"; + helpTag = "0"; + text = "EDIT"; + simpleStyle = "0"; + }; + new ShellBitmapButton(TP_ClearDescBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "-2 41"; + extent = "94 38"; + minExtent = "32 38"; + visible = "1"; + command = "TribePropertiesDlg.ClearDescription();"; + helpTag = "0"; + text = "CLEAR"; + simpleStyle = "0"; + }; + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "87 1"; + extent = "284 119"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "10 5"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "height"; + position = "14 9"; + extent = "240 101"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextCtrl(TP_TribeDescription) { + profile = "GuiDefaultProfile"; + horizSizing = "left"; + vertSizing = "relative"; + position = "0 0"; + extent = "249 14"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + allowColorChars = "1"; + }; + }; + }; + }; + new ShellFieldCtrl() { + profile = "ShellFieldProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "97 7"; + extent = "282 110"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new ShellFieldCtrl() { + profile = "ShellFieldProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "7 11"; + extent = "100 67"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "23 3"; + extent = "58 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "TRIBE TAG"; + }; + new ShellRadioButton(TP_PrePendFlagBtn) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "1 19"; + extent = "94 30"; + minExtent = "26 27"; + visible = "1"; + command = "TribePropertiesDlg.ToggleAppending();"; + helpTag = "0"; + text = "PREPEND TAG"; + groupNum = "8"; + }; + new ShellRadioButton(TP_AppendFlagBtn) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "1 39"; + extent = "94 30"; + minExtent = "26 27"; + visible = "1"; + command = "TribePropertiesDlg.ToggleAppending();"; + helpTag = "0"; + text = "APPEND TAG"; + groupNum = "8"; + }; + }; + new ShellTextEditCtrl(TP_NewTag) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "167 24"; + extent = "115 38"; + minExtent = "32 38"; + visible = "1"; + command = "TribePropertiesDlg.RefreshTag();"; + helpTag = "0"; + historySize = "0"; + maxLength = "9"; + password = "0"; + glowOffset = "9 9"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "116 9"; + extent = "56 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "CURRENT:"; + }; + new GuiTextCtrl(TP_CurrentTag) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "179 11"; + extent = "99 14"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "TAG"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "119 32"; + extent = "53 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "NEW TAG:"; + }; + new GuiTextCtrl(TP_PreviewTag) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "179 59"; + extent = "101 15"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "TAG"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "122 56"; + extent = "50 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "PREVIEW:"; + }; + new ShellBitmapButton(TP_TribeTagBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "-2 75"; + extent = "285 38"; + minExtent = "32 38"; + visible = "1"; + command = "TribePropertiesDlg.ChangeTag();"; + helpTag = "0"; + text = "UPDATE TAG TEXT"; + simpleStyle = "0"; + }; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "8 58"; + extent = "85 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "DISBAND TRIBE"; + }; + new GuiTextCtrl(TP_RecruitingLabel) { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "16 8"; + extent = "67 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "RECRUITING"; + }; + new ShellRadioButton(TP_RecruitFlagBtn) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 24"; + extent = "45 30"; + minExtent = "26 27"; + visible = "1"; + command = "TribePropertiesDlg.ChangeRecruiting();"; + helpTag = "0"; + text = "YES"; + groupNum = "7"; + }; + new ShellRadioButton(TP_RecruitFlagNoBtn) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "49 24"; + extent = "40 30"; + minExtent = "26 27"; + visible = "1"; + command = "TribePropertiesDlg.ChangeRecruiting();"; + helpTag = "0"; + text = "NO"; + groupNum = "7"; + }; + }; + new ShellFieldCtrl(GraphicsControl) { + profile = "ShellFieldProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 65"; + extent = "385 246"; + minExtent = "16 18"; + visible = "0"; + helpTag = "0"; + + new ShellBitmapButton(TP_SubmitGraphicBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "229 198"; + extent = "158 38"; + minExtent = "32 38"; + visible = "0"; + helpTag = "0"; + text = "FIND NEW GRAPHIC"; + simpleStyle = "0"; + }; + new GuiTextCtrl() { + profile = "BrowserProgressProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "9 8"; + extent = "125 17"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Current Tribe Graphic:"; + }; + new ShellBitmapButton(TP_SubmitGraphicBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "229 173"; + extent = "158 38"; + minExtent = "32 38"; + visible = "1"; + command = "TribePropertiesDlg.SetTribeGraphic();"; + helpTag = "0"; + text = "USE SELECTED GRAPHIC"; + simpleStyle = "0"; + }; + new GuiBitmapCtrl(TribeGraphic) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 24"; + extent = "228 150"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + bitmap = "texticons/twb_Lineup.jpg"; + wrap = "0"; + }; + new ShellFancyArrayScrollCtrl(ML1) { + profile = "clockProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "233 21"; + extent = "149 156"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + fixedHorizontal = "1"; + vertSpacerBitmap = "gui/shll_vertspacer"; + horzSpacerBitmap = "gui/shll_horzspacer"; + + new VirtualScrollCtrl(ML2) { + profile = "ShellServerBrowserProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 16"; + extent = "149 140"; + minExtent = "8 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "0"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "0 3"; + + new VirtualScrollContentCtrl(ML3) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 7"; + extent = "125 126"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiControl(ML4) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 -195"; + extent = "8 1307"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + }; + }; + }; + new ShellFancyTextList(TribeGraphicsList) { + profile = "clockProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "129 152"; + minExtent = "8 20"; + visible = "1"; + command = "TribeGraphicsList.onSelect();"; + helpTag = "0"; + startScrollRegion = "1 0"; + headerBitmap = "gui/server_tabs"; + sortArrowBitmap = "gui/shll_sortarrow"; + fieldBase = "gui/shll_field"; + barBase = "gui/shll_bar"; + glowOffset = "4"; + rowHeight = "15"; + headerFontType = "Univers Condensed"; + headerFontSize = "16"; + headerFontColor = "8 19 6 255"; + headerFontColorHL = "25 68 56 255"; + separatorColor = "192 192 192 255"; + drawSeparators = "0"; + headerSort = "1"; + allowReposition = "1"; + CID = "0"; + }; + }; + new GuiTextCtrl() { + profile = "BrowserProgressProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 177"; + extent = "230 19"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "-------------- Graphic Requirements --------------"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "21 190"; + extent = "102 20"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Max Dimensions:"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "65 203"; + extent = "58 20"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Max Size:"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "77 216"; + extent = "46 20"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Format:"; + }; + new GuiTextCtrl() { + profile = "BrowserFilterTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "131 203"; + extent = "26 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "28k"; + }; + new GuiTextCtrl() { + profile = "BrowserFilterTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "131 216"; + extent = "36 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "JPEG"; + }; + new GuiTextCtrl() { + profile = "BrowserFilterTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "131 190"; + extent = "93 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "228w x 150h"; + }; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/WarriorPropertiesDlg.gui b/base/gui/WarriorPropertiesDlg.gui new file mode 100644 index 0000000..c6669d7 --- /dev/null +++ b/base/gui/WarriorPropertiesDlg.gui @@ -0,0 +1,352 @@ +//--- OBJECT WRITE BEGIN --- +new GuiChunkedBitmapCtrl(WarriorPropertiesDlg) { + profile = "DlgBackProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + useVariable = "0"; + + new ShellDlgFrame(WarriorPropertiesMain) { + profile = "ShellDlgProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "116 50"; + extent = "408 380"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "WARRIOR PROPERTIES"; + maxLength = "255"; + + new ShellFieldCtrl() { + profile = "ShellFieldProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 34"; + extent = "385 28"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new ShellBitmapButton(WP_ProfileBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "-6 -5"; + extent = "105 38"; + minExtent = "32 38"; + visible = "1"; + helpTag = "0"; + text = "PROFILE"; + simpleStyle = "0"; + }; + }; + new ShellBitmapButton(W_OKBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "312 337"; + extent = "91 38"; + minExtent = "32 38"; + visible = "1"; + command = "WarriorPropertiesDlg.Close();"; + helpTag = "0"; + text = "CLOSE"; + simpleStyle = "0"; + }; + new ShellFieldCtrl(W_ProfilePane) { + profile = "ShellFieldProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 63"; + extent = "385 277"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new ShellFancyArrayScrollCtrl(WGL) { + profile = "clockProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "233 101"; + extent = "152 148"; + minExtent = "24 52"; + visible = "1"; + helpTag = "0"; + fixedHorizontal = "1"; + vertSpacerBitmap = "gui/shll_vertspacer"; + horzSpacerBitmap = "gui/shll_horzspacer"; + + new VirtualScrollCtrl(WL2) { + profile = "ShellServerBrowserProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 16"; + extent = "152 132"; + minExtent = "8 52"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "0"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "0 3"; + + new VirtualScrollContentCtrl(ML3) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 7"; + extent = "128 118"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiControl(ML4) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "8 8"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + }; + }; + }; + new ShellFancyTextList(WarriorGraphicsList) { + profile = "clockProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "132 144"; + minExtent = "8 20"; + visible = "1"; + command = "WarriorGraphicsList.onSelect();"; + helpTag = "0"; + startScrollRegion = "1 0"; + headerBitmap = "gui/server_tabs"; + sortArrowBitmap = "gui/shll_sortarrow"; + fieldBase = "gui/shll_field"; + barBase = "gui/shll_bar"; + glowOffset = "4"; + rowHeight = "15"; + headerFontType = "Univers Condensed"; + headerFontSize = "16"; + headerFontColor = "8 19 6 255"; + headerFontColorHL = "25 68 56 255"; + separatorColor = "192 192 192 255"; + drawSeparators = "0"; + headerSort = "1"; + allowReposition = "1"; + }; + }; + new ShellBitmapButton(WP_SubmitGraphicBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "229 242"; + extent = "160 38"; + minExtent = "32 38"; + visible = "1"; + command = "WarriorPropertiesDlg.SetPlayerGraphic();"; + helpTag = "0"; + text = "USE SELECTED GRAPHIC"; + simpleStyle = "0"; + }; + new GuiTextCtrl() { + profile = "BrowserProgressProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "9 104"; + extent = "125 17"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Current Graphic"; + maxLength = "255"; + }; + new GuiBitmapCtrl(PlayerGraphic) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 121"; + extent = "228 150"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + bitmap = "texticons/twb/twb_Laserrifle.jpg"; + wrap = "0"; + }; + new ShellFieldCtrl() { + profile = "ShellFieldProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "3 3"; + extent = "175 99"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "11 11"; + extent = "35 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "NAME:"; + maxLength = "255"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "18 38"; + extent = "27 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "NEW:"; + maxLength = "255"; + }; + new ShellBitmapButton(WP_ChangeNameBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "-2 65"; + extent = "179 38"; + minExtent = "32 38"; + visible = "1"; + command = "WarriorPropertiesDlg.ChangePlayerName();"; + helpTag = "0"; + text = "CHANGE NAME"; + simpleStyle = "0"; + }; + new ShellTextEditCtrl(NewNameEdit) { + profile = "NewTextEditProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "39 30"; + extent = "138 38"; + minExtent = "32 38"; + visible = "1"; + helpTag = "0"; + maxLength = "16"; + historySize = "0"; + password = "0"; + glowOffset = "9 9"; + }; + new GuiTextCtrl(WP_CurrentName) { + profile = "BrowserProgressProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "51 13"; + extent = "113 17"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "EAST"; + maxLength = "20"; + }; + }; + new ShellFieldCtrl() { + profile = "ShellFieldProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "180 37"; + extent = "201 65"; + minExtent = "16 18"; + visible = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "8 9"; + extent = "25 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "URL:"; + maxLength = "255"; + }; + new ShellTextEditCtrl(UrlEdit) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "28 1"; + extent = "178 38"; + minExtent = "32 38"; + visible = "1"; + helpTag = "0"; + text = "www.tribes2.com"; + maxLength = "255"; + historySize = "0"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellBitmapButton(WP_ChangeUrl) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "-2 30"; + extent = "206 38"; + minExtent = "32 38"; + visible = "1"; + command = "WarriorPropertiesDlg.UpdateUrl();"; + helpTag = "0"; + text = "CHANGE HOME ADDRESS"; + simpleStyle = "0"; + }; + }; + new ShellBitmapButton(WP_EditDescriptionBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "317 0"; + extent = "73 38"; + minExtent = "32 38"; + visible = "1"; + command = "WarriorPropertiesDlg.editDescription();"; + helpTag = "0"; + text = "EDIT"; + simpleStyle = "0"; + }; + new ShellBitmapButton(WP_ClearDescriptionBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "260 0"; + extent = "72 38"; + minExtent = "32 38"; + visible = "1"; + command = "WarriorPropertiesDlg.clearDescription();"; + helpTag = "0"; + text = "CLEAR"; + simpleStyle = "0"; + }; + new GuiTextCtrl() { + profile = "ShellTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "186 8"; + extent = "76 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "DESCRIPTION:"; + maxLength = "255"; + }; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/gui/WorldEditorButtonbarDlg.gui b/base/gui/WorldEditorButtonbarDlg.gui new file mode 100644 index 0000000..c97f8ae --- /dev/null +++ b/base/gui/WorldEditorButtonbarDlg.gui @@ -0,0 +1,299 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(WorldEditorButtonbarDlg) { + profile = "GuiModelessDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "0"; + helpTag = "0"; + + new GuiChunkedBitmapCtrl() { + profile = "EditorContentProfile"; + horizSizing = "right"; + vertSizing = "height"; + position = "0 30"; + extent = "90 420"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 97"; + extent = "32 32"; + minExtent = "32 32"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "wEditor.copySelection();"; + helpTag = "0"; + text = "Copy"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "45 97"; + extent = "32 32"; + minExtent = "32 32"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "wEditor.pasteSelection();"; + helpTag = "0"; + text = "Paste"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 132"; + extent = "32 32"; + minExtent = "32 32"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "wEditor.copySelection();wEditor.deleteSelection();"; + helpTag = "0"; + text = "Cut"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "45 132"; + extent = "32 32"; + minExtent = "32 32"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "wEditor.deleteSelection();"; + helpTag = "0"; + text = "Delete"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 167"; + extent = "32 32"; + minExtent = "32 32"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "wEditor.undo();"; + helpTag = "0"; + text = "Undo"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "45 167"; + extent = "32 32"; + minExtent = "32 32"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "wEditor.redo();"; + helpTag = "0"; + text = "Redo"; + }; + new GuiTextCtrl() { + profile = "GuiMediumBoldTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 8"; + extent = "80 20"; + minExtent = "80 20"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "File / Edit"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 61"; + extent = "32 32"; + minExtent = "32 32"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "wEditor.import();"; + helpTag = "0"; + text = "Import"; + }; + new GuiPopUpMenuCtrl(DropTypeMenu) { + profile = "GuiPopUpMenuProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "5 250"; + extent = "80 24"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + maxPopupHeight = "200"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 27"; + extent = "32 32"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Canvas.pushDialog(EditorSaveMissionDlg);"; + helpTag = "0"; + text = "Save"; + }; + new GuiSliderCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 392"; + extent = "80 20"; + minExtent = "80 20"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + variable = "value"; + command = "$Camera::movementSpeed = $ThisControl.getValue();"; + helpTag = "0"; + range = "5.000000 200.000000"; + ticks = "10"; + value = "57.9286"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 323"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Canvas.pushDialog(WorldEditorSettingsDlg);"; + helpTag = "0"; + text = "Settings..."; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "45 62"; + extent = "32 32"; + minExtent = "32 32"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "wEditor.export();"; + helpTag = "0"; + text = "Export"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "9 231"; + extent = "26 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Drop:"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "9 377"; + extent = "73 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Camera speed:"; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 299"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "lightScene(\"\", forceAlways);"; + helpTag = "0"; + text = "Relight"; + }; + new GuiCheckBoxCtrl() { + profile = "GuiCheckBoxProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 204"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + variable = "wEditor.selectionLocked"; + command = "wEditor.selectionLocked = $ThisControl.getValue();"; + helpTag = "0"; + text = "Selection Lock"; + }; + }; +}; +//--- OBJECT WRITE END --- + +//------------------------------------------------------------------------------ +// Functions +//------------------------------------------------------------------------------ + +function WorldEditorButtonBarDlg::getPrefs(%this) +{ + wEditor.dropType = getPrefSetting($Pref::WorldEditor::dropType, "atCamera"); +} + +function WorldEditorbuttonBarDlg::setPrefs(%this) +{ + $Pref::WorldEditor::dropType = wEditor.dropType; +} + +function WorldEditorButtonBarDlg::init(%this) +{ + DropTypeMenu.setEnumContent(WorldEditor, dropType); + %this.getPrefs(); + DropTypeMenu.setText(wEditor.dropType); +} + +function WorldEditorButtonBarDlg::onSleep(%this) +{ + %this.setPrefs(); +} + +//------------------------------------------------------------------------------ + +function DropTypeMenu::onSelect(%this, %id, %text) +{ + wEditor.dropType = %text; +} diff --git a/base/gui/WorldEditorFramesetDlg.gui b/base/gui/WorldEditorFramesetDlg.gui new file mode 100644 index 0000000..22b9986 --- /dev/null +++ b/base/gui/WorldEditorFramesetDlg.gui @@ -0,0 +1,188 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(WorldEditorFrameSetDlg) { + profile = "GuiModelessDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "0"; + helpTag = "0"; + + new GuiFrameSetCtrl(WorldEditorFrameSet) { + profile = "EditorContentProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "90 30"; + extent = "550 420"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + rows = "0"; + columns = "0 420"; + borderWidth = "4"; + borderColor = "206 206 206 206"; + borderEnable = "dynamic"; + borderMovable = "dynamic"; + autoBalance = "0"; + + new GuiControl(WorldEditorFrame) { + profile = "EditTSControlProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "420 420"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + borderWidth = "2"; + }; + new GuiFrameSetCtrl(WorldEditorToolFrameSet) { + profile = "EditorContentProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "420 0"; + extent = "130 420"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + columns = "0"; + rows = "0"; + borderWidth = "3"; + borderColor = "206 206 206 206"; + borderEnable = "dynamic"; + borderMovable = "dynamic"; + autoBalance = "0"; + }; + }; +}; +//--- OBJECT WRITE END --- + +//------------------------------------------------------------------------------ +// Functions +//------------------------------------------------------------------------------ + +function WorldEditorFrameSetDlg::getPrefs(%this) +{ + %toolPaneOffset = getPrefSetting($Pref::WorldEditor::toolPaneOffset, 420); + %toolCount = getPrefSetting($Pref::WorldEditor::activeToolCount, 0); + + // set the tools + for(%i = 0; %i < %toolCount; %i++) + { + if($pref::WorldEditor::activeTool[%i] $= "") + return; + + %this.addTool(getWord($pref::WorldEditor::activeTool[%i], 0)); + %offsets[%i] = getWord($pref::WorldEditor::activeTool[%i], 1); + } + + for(%i = 0; %i < %toolCount; %i++) + WorldEditorToolFrameSet.setRowOffset(%i, %offsets[%i]); + + if(%toolCount) + WorldEditorFrameSet.setColumnOffset(1, %toolPaneOffset); +} + +function WorldEditorFrameSetDlg::setPrefs(%this) +{ + if(WorldEditorFrameSet.getColumnCount() > 1) + $pref::WorldEditor::toolPaneOffset = WorldEditorFrameSet.getColumnOffset(1); + else + $pref::WorldEditor::toolPaneOffset = %this.toolPaneOffset; + $pref::WorldEditor::activeToolCount = %this.activeToolCount; + + %tools = WorldEditorToolFrameSet; + + for(%i = 0; %i < %this.activeToolCount; %i++) + { + %obj = %tools.getObject(%i); + %offset = %tools.getRowOffset(%i); + %val = %obj.getName() @ " " @ %offset; + + $pref::WorldEditor::activeTool[%i] = %val; + } +} + +function WorldEditorFrameSetDlg::init(%this) +{ + WorldEditorFrame.add(wEditor); + %this.resetFrames(); + %this.getPrefs(); +} + +function WorldEditorFrameSetDlg::onWake(%this) +{ + WorldEditorMap.push(); + %this.getPrefs(); +} + +function WorldEditorFrameSetDlg::onSleep(%this) +{ + WorldEditorMap.pop(); + + // + %this.setPrefs(); +} + +function WorldEditorFrameSetDlg::update(%this) +{ + // check the frame to see if it is visible + if(WorldEditorToolFrameSet.getCount()) + { + %res = getResolution(); + + // 90 = width of button bar + %width = getWord(%res, 0) - 90; + + if(WorldEditorFrameSet.getColumnOffset(1) > %width - editor.minToolFrameWidth) + WorldEditorFrameSet.setColumnOffset(1, %width - editor.minToolFrameWidth); + } +} + +function WorldEditorFrameSetDlg::resetFrames(%this) +{ + // update the tool pane + %tools = WorldEditorToolFrameSet; + while(%tools.getRowCount() > %tools.getCount()) + %tools.removeRow(); + while(%tools.getRowCount() < %tools.getCount()) + %tools.addRow(); + + // update the frame view + %frameSet = WorldEditorFrameSet; + if(!%tools.getCount() && (%frameSet.getColumnCount() > 1)) + { + %frameSet.toolPaneOffset = %frameSet.getColumnOffset(1); + %frameSet.removeColumn(); + } + if(%tools.getCount() && (%frameSet.getColumnCount() == 1)) + { + %frameSet.addColumn(); + %frameSet.setColumnOffset(1, %frameSet.toolPaneOffset); + } + + if(%tools.getCount()) + %this.toolPaneOffset = WorldEditorFrameSet.getColumnOffset(1); + %this.activeToolCount = %tools.getCount(); +} + +function WorldEditorFrameSetDlg::addTool(%this, %tool) +{ + WorldEditorToolFrameSet.add(%tool); + %this.resetFrames(); +} + +function WorldEditorFrameSetDlg::removeTool(%this, %tool) +{ + WorldEditorToolFrameSet.remove(%tool); + %this.resetFrames(); +} diff --git a/base/gui/WorldEditorGui.gui b/base/gui/WorldEditorGui.gui new file mode 100644 index 0000000..6b8d5c3 --- /dev/null +++ b/base/gui/WorldEditorGui.gui @@ -0,0 +1,409 @@ +//--- OBJECT WRITE BEGIN --- + +new WorldEditor(wEditor) +{ + profile = ""; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "420 420"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; +}; + +//--- OBJECT WRITE END --- + +//------------------------------------------------------------------------------ +// Functions +//------------------------------------------------------------------------------ + +function WorldEditor::getPrefs(%this) +{ + // same defaults as WorldEditor ctor + %this.planarMovement = getPrefSetting($pref::WorldEditor::planarMovement, true); + %this.undoLimit = getPrefSetting($pref::WorldEditor::undoLimit, 40); + %this.dropType = getPrefSetting($pref::WorldEditor::dropType, "screenCenter"); + %this.projectDistance = getPrefSetting($pref::WorldEditor::projectDistance, 2000); + %this.boundingBoxCollision = getPrefSetting($pref::WorldEditor::boundingBoxCollision, true); + %this.renderPlane = getPrefSetting($pref::WorldEditor::renderPlane, true); + %this.renderPlaneHashes = getPrefSetting($pref::WorldEditor::renderPlaneHashes, true); + %this.gridColor = getPrefSetting($pref::WorldEditor::gridColor, "255 255 255 20"); + %this.planeDim = getPrefSetting($pref::WorldEditor::planeDim, 500); + %this.gridSize = getPrefSetting($pref::WorldEditor::gridSize, "10 10 10"); + %this.renderPopupBackground = getPrefSetting($pref::WorldEditor::renderPopupBackground, true); + %this.popupBackgroundColor = getPrefSetting($pref::WorldEditor::popupBackgroundColor, "100 100 100"); + %this.popupTextColor = getPrefSetting($pref::WorldEditor::popupTextColor, "255 255 0"); + %this.selectHandle = getPrefSetting($pref::WorldEditor::selectHandle, "gui/Editor_SelectHandle.png"); + %this.defaultHandle = getPrefSetting($pref::WorldEditor::defaultHandle, "gui/Editor_DefaultHandle.png"); + %this.lockedHandle = getPrefSetting($pref::WorldEditor::lockedHandle, "gui/Editor_LockedHandle.png"); + %this.objectTextColor = getPrefSetting($pref::WorldEditor::objectTextColor, "255 255 255"); + %this.objectsUseBoxCenter = getPrefSetting($pref::WorldEditor::objectsUseBoxCenter, true); + %this.axisGizmoMaxScreenLen = getPrefSetting($pref::WorldEditor::axisGizmoMaxScreenLen, 200); + %this.axisGizmoActive = getPrefSetting($pref::WorldEditor::axisGizmoActive, true); + %this.mouseMoveScale = getPrefSetting($pref::WorldEditor::mouseMoveScale, 0.2); + %this.mouseRotateScale = getPrefSetting($pref::WorldEditor::mouseRotateScale, 0.01); + %this.mouseScaleScale = getPrefSetting($pref::WorldEditor::mouseScaleScale, 0.01); + %this.minScaleFactor = getPrefSetting($pref::WorldEditor::minScaleFactor, 0.1); + %this.maxScaleFactor = getPrefSetting($pref::WorldEditor::maxScaleFactor, 4000); + %this.objSelectColor = getPrefSetting($pref::WorldEditor::objSelectColor, "255 0 0"); + %this.objMouseOverSelectColor = getPrefSetting($pref::WorldEditor::objMouseOverSelectColor, "0 0 255"); + %this.objMouseOverColor = getPrefSetting($pref::WorldEditor::objMouseOverColor, "0 255 0"); + %this.showMousePopupInfo = getPrefSetting($pref::WorldEditor::showMousePopupInfo, true); + %this.dragRectColor = getPrefSetting($pref::WorldEditor::dragRectColor, "255 255 0"); + %this.renderObjText = getPrefSetting($pref::WorldEditor::renderObjText, true); + %this.renderObjHandle = getPrefSetting($pref::WorldEditor::renderObjHandle, true); + %this.faceSelectColor = getPrefSetting($pref::WorldEditor::faceSelectColor, "0 0 100 100"); + %this.renderSelectionBox = getPrefSetting($pref::WorldEditor::renderSelectionBox, true); + %this.selectionBoxColor = getPrefSetting($pref::WorldEditor::selectionBoxColor, "255 255 0"); + %this.snapToGrid = getPrefSetting($pref::WorldEditor::snapToGrid, false); + %this.snapRotations = getPrefSetting($pref::WorldEditor::snapRotations, false); + %this.rotationSnap = getPrefSetting($pref::WorldEditor::rotationSnap, "15"); + + // + %this.currentMode = "move"; +} + +function WorldEditor::setPrefs(%this) +{ + $pref::WorldEditor::planarMovement = %this.planarMovement; + $pref::WorldEditor::undoLimit = %this.undoLimit; + $pref::WorldEditor::dropType = %this.dropType; + $pref::WorldEditor::projectDistance = %this.projectDistance; + $pref::WorldEditor::boundingBoxCollision = %this.boundingBoxCollision; + $pref::WorldEditor::renderPlane = %this.renderPlane; + $pref::WorldEditor::renderPlaneHashes = %this.renderPlaneHashes; + $pref::WorldEditor::gridColor = %this.GridColor; + $pref::WorldEditor::planeDim = %this.planeDim; + $pref::WorldEditor::gridSize = %this.GridSize; + $pref::WorldEditor::renderPopupBackground = %this.renderPopupBackground; + $pref::WorldEditor::popupBackgroundColor = %this.PopupBackgroundColor; + $pref::WorldEditor::popupTextColor = %this.PopupTextColor; + $pref::WorldEditor::selectHandle = %this.selectHandle; + $pref::WorldEditor::defaultHandle = %this.defaultHandle; + $pref::WorldEditor::lockedHandle = %this.lockedHandle; + $pref::WorldEditor::objectTextColor = %this.ObjectTextColor; + $pref::WorldEditor::objectsUseBoxCenter = %this.objectsUseBoxCenter; + $pref::WorldEditor::axisGizmoMaxScreenLen = %this.axisGizmoMaxScreenLen; + $pref::WorldEditor::axisGizmoActive = %this.axisGizmoActive; + $pref::WorldEditor::mouseMoveScale = %this.mouseMoveScale; + $pref::WorldEditor::mouseRotateScale = %this.mouseRotateScale; + $pref::WorldEditor::mouseScaleScale = %this.mouseScaleScale; + $pref::WorldEditor::minScaleFactor = %this.minScaleFactor; + $pref::WorldEditor::maxScaleFactor = %this.maxScaleFactor; + $pref::WorldEditor::objSelectColor = %this.objSelectColor; + $pref::WorldEditor::objMouseOverSelectColor = %this.objMouseOverSelectColor; + $pref::WorldEditor::objMouseOverColor = %this.objMouseOverColor; + $pref::WorldEditor::showMousePopupInfo = %this.showMousePopupInfo; + $pref::WorldEditor::dragRectColor = %this.dragRectColor; + $pref::WorldEditor::renderObjText = %this.renderObjText; + $pref::WorldEditor::renderObjHandle = %this.renderObjHandle; + $pref::WorldEditor::raceSelectColor = %this.faceSelectColor; + $pref::WorldEditor::renderSelectionBox = %this.renderSelectionBox; + $pref::WorldEditor::selectionBoxColor = %this.selectionBoxColor; + $pref::WorldEditor::snapToGrid = %this.snapToGrid; + $pref::WorldEditor::snapRotations = %this.snapRotations; + $pref::WorldEditor::rotationSnap = %this.rotationSnap; +} + +function WorldEditor::init(%this) +{ + %this.getPrefs(); + + // add objclasses which we do not want to collide with + %this.ignoreObjClass(TerrainBlock, Sky, AIObjective); + + // editing modes + %this.numEditModes = 3; + %this.editMode[0] = "move"; + %this.editMode[1] = "rotate"; + %this.editMode[2] = "scale"; + + %this.setMode(%this.currentMode); + + // context menu + new GuiControl(WEContextPopupDlg) + { + profile = "GuiModelessDialogProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + + new GuiPopUpMenuCtrl(WEContextPopup) + { + profile = "GuiButtonProfile"; + position = "0 0"; + extent = "0 0"; + minExtent = "0 0"; + maxPopupHeight = "200"; + command = "canvas.popDialog(WEContextPopupDlg);"; + }; + }; + WEContextPopup.setVisible(false); +} + +//------------------------------------------------------------------------------ + +function WorldEditor::onDblClick(%this, %obj) +{ + Inspector.inspect(%obj); + InspectorNameEdit.setValue(%obj.getName()); +} + +//------------------------------------------------------------------------------ + +function WorldEditor::doExport(%this, %file) +{ + missionGroup.save("editor/" @ %file, true); +} + +function WorldEditor::export(%this) +{ + getSaveFilename("editor/*.mac", %this @ ".doExport", "selection.mac"); +} + +function WorldEditor::doImport(%this, %file) +{ + exec("editor/" @ %file); +} + +function WorldEditor::import(%this) +{ + getLoadFilename("editor/*.mac", %this @ ".doImport"); +} + +//------------------------------------------------------------------------------ +// modes + +function WorldEditor::getModeIndex(%this) +{ + %mode = %this.getMode(); + for(%i = 0; %i < %this.numEditModes; %i++) + if(%mode $= %this.editMode[%i]) + return %i; + + return 0; +} + +function WorldEditor::nextMode(%this) +{ + %idx = %this.getModeIndex(); + + // + %idx++; + if(%idx == %this.numEditModes) + %idx = 0; + + %this.setMode(%this.editMode[%idx]); +} + +function WorldEditor::previousMode(%this) +{ + %idx = %this.getModeIndex(); + + // + if(%idx == 0) + %idx = %this.numEditModes - 1; + else + %idx--; + + %this.setMode(%this.editMode[%idx]); +} + +function WorldEditor::export(%this) +{ + getSaveFilename("editor/*.mac", %this @ ".doExport", "selection.mac"); +} + +function WorldEditor::doExport(%this, %file) +{ + missionGroup.save("editor/" @ %file, true); +} + +function WorldEditor::import(%this) +{ + getLoadFilename("editor/*.mac", %this @ ".doImport"); +} + +function WorldEditor::doImport(%this, %file) +{ + exec("editor/" @ %file); +} + +function WorldEditor::onGuiUpdate(%this, %text) +{ + WorldEditorFrameSetDlg.update(); + AIEFrameSetDlg.update(); + WorldEditorStatusbarDlg.update(); +} + +function WorldEditor::anyObjectLocked(%this) +{ + for(%i = 0; %i < %this.getSelectionSize(); %i++) + { + %obj = %this.getSelectedObject(%i); + if(%obj.locked $= "true") + return 1; + } + return 0; +} + +function WorldEditor::anyObjectHidden(%this) +{ + for(%i = 0; %i < %this.getSelectionSize(); %i++) + { + %obj = %this.getSelectedObject(%i); + if(%obj.hidden $= "true") + return 1; + } + return 0; +} + +function WorldEditor::onContextMenu(%this, %mousePos) +{ + if(!$missionRunning) + return; + + WEContextPopup.position = %mousePos; + + WEContextPopup.clear(); + + if(%this.getSelectionSize() == 0) + { + if(%this.canPasteSelection()) + WEContextPopup.add("Paste", 1); + else + return; + } + else + { + WEContextPopup.add("Copy", 0); + + if(%this.canPasteSelection()) + WEContextPopup.add("Paste", 1); + + WEContextPopup.add("Cut", 2); + + if(%this.anyObjectLocked()) + WEContextPopup.add("Unlock", 3); + else + WEContextPopup.add("Lock", 3); + + if(%this.anyObjectHidden()) + WEContextPopup.add("Unhide", 4); + else + WEContextPopup.add("Hide", 4); + } + + canvas.pushDialog(WEContextPopupDlg); + WEContextPopup.forceOnAction(); +} + +function WEContextPopup::onSelect(%this, %index, %value) +{ + switch(%index) + { + case 0: + if($AIedit) + aiEdit.copySelection(); + else + wEditor.copySelection(); + case 1: + if($AIedit) + aiEdit.pasteSelection(); + else + wEditor.pasteSelection(); + case 2: + if($AIedit) + { + aiEdit.copySelection(); + aiEdit.deleteSelection(); + } + else + { + wEditor.copySelection(); + wEditor.deleteSelection(); + } + case 3: + wEditor.lockSelection(!wEditor.anyObjectLocked()); + case 4: + wEditor.hideSelection(!wEditor.anyObjectHidden()); + } +} + +function WorldEditor::dropCameraToSelection(%this) +{ + if(%this.getSelectionSize() == 0) + return; + + %pos = %this.getSelectionCentroid(); + %cam = 2.camera.getTransform(); + + // set the pnt + %cam = setWord(%cam, 0, getWord(%pos, 0)); + %cam = setWord(%cam, 1, getWord(%pos, 1)); + %cam = setWord(%cam, 2, getWord(%pos, 2)); + + 2.camera.setTransform(%cam); +} + +// * pastes the selection at the same place (used to move obj from a group to another) +function WorldEditor::moveSelectionInPlace(%this) +{ + %saveDropType = %this.dropType; + %this.dropType = "atCentroid"; + %this.copySelection(); + %this.deleteSelection(); + %this.pasteSelection(); + %this.dropType = %saveDropType; +} + +// resets the scale and rotation on the selection set +function WorldEditor::resetTransforms(%this) +{ + %this.addUndoState(); + + for(%i = 0; %i < %this.getSelectionSize(); %i++) + { + %obj = %this.getSelectedObject(%i); + %transform = %obj.getTransform(); + + %transform = setWord(%transform, 3, "0"); + %transform = setWord(%transform, 4, "0"); + %transform = setWord(%transform, 5, "1"); + %transform = setWord(%transform, 6, "0"); + + // + %obj.setTransform(%transform); + %obj.setScale("1 1 1"); + } +} + +//------------------------------------------------------------------------------ +// keys + +new ActionMap(WorldEditorMap); +WorldEditorMap.bindCmd(keyboard, "space", "wEditor.nextMode();", ""); + +WorldEditorMap.bindCmd(keyboard, "ctrl c", "wEditor.copySelection();", ""); +WorldEditorMap.bindCmd(keyboard, "ctrl x", "wEditor.copySelection();wEditor.deleteSelection();", ""); +WorldEditorMap.bindCmd(keyboard, "delete", "wEditor.copySelection();wEditor.deleteSelection();", ""); +WorldEditorMap.bindCmd(keyboard, "ctrl v", "wEditor.pasteSelection();", ""); + +WorldEditorMap.bindCmd(keyboard, "ctrl z", "wEditor.undo();", ""); +WorldEditorMap.bindCmd(keyboard, "ctrl y", "wEditor.redo();", ""); + +WorldEditorMap.bindCmd(keyboard, "ctrl h", "wEditor.hideSelection(true);", ""); +WorldEditorMap.bindCmd(keyboard, "alt h", "wEditor.hideSelection(false);", ""); +WorldEditorMap.bindCmd(keyboard, "i", "Canvas.pushDialog(interiorDebugDialog);", ""); +WorldEditorMap.bindCmd(keyboard, "o", "Canvas.pushDialog(WorldEditorSettingsDlg);", ""); +WorldEditorMap.bindCmd(keyboard, "ctrl d", "wEditor.dropSelection();", ""); +WorldEditorMap.bindCmd(keyboard, "ctrl q", "wEditor.dropCameraToSelection();", ""); +WorldEditorMap.bindCmd(keyboard, "ctrl m", "wEditor.moveSelectionInPlace();", ""); +WorldEditorMap.bindCmd(keyboard, "ctrl r", "wEditor.resetTransforms();", ""); diff --git a/base/gui/WorldEditorSettingsDlg.gui b/base/gui/WorldEditorSettingsDlg.gui new file mode 100644 index 0000000..c039869 --- /dev/null +++ b/base/gui/WorldEditorSettingsDlg.gui @@ -0,0 +1,967 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(WorldEditorSettingsDlg) { + profile = "GuiModelessDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiWindowCtrl() { + profile = "GuiWindowProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "210 93"; + extent = "233 295"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "WorldEditor Settings"; + resizeWidth = "1"; + resizeHeight = "1"; + canMove = "1"; + canClose = "1"; + canMinimize = "0"; + canMaximize = "0"; + minSize = "50 50"; + closeCommand = "Canvas.popDialog(WorldEditorSettingsDlg);"; + + new GuiPopUpMenuCtrl(WESettingsCatagoryPopup) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 26"; + extent = "106 23"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + maxPopupHeight = "200"; + }; + new GuiControl(WESettingsGeneralTab) { + profile = "EditorContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 52"; + extent = "220 210"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiCheckBoxCtrl() { + profile = "GuiCheckBoxProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 10"; + extent = "200 24"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.planarMovement"; + command = "wEditor.planarMovement = $ThisControl.getValue();"; + helpTag = "0"; + text = "Planar Movement"; + }; + new GuiCheckBoxCtrl() { + profile = "GuiCheckBoxProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 36"; + extent = "200 24"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.boundingBoxCollision"; + command = "wEditor.boundingBoxCollision = $ThisControl.getValue();"; + helpTag = "0"; + text = "Collide With Object\'s Bounding Box"; + }; + new GuiCheckBoxCtrl() { + profile = "GuiCheckBoxProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 88"; + extent = "200 24"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.axisGizmoActive"; + command = "wEditor.axisGizmoActive = $ThisControl.getValue();"; + helpTag = "0"; + text = "Axis Gizmo Active"; + }; + new GuiCheckBoxCtrl() { + profile = "GuiCheckBoxProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 62"; + extent = "200 24"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.objectsUseBoxCenter"; + command = "wEditor.objectsUseBoxCenter = $ThisControl.getValue();"; + helpTag = "0"; + text = "Objects Use Box Center"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "13 123"; + extent = "83 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Min Scale Factor:"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "13 146"; + extent = "83 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Min Scale Factor:"; + }; + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "104 123"; + extent = "107 18"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.minScaleFactor"; + command = "wEditor.minScaleFactor = $ThisControl.getValue();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + password = "0"; + }; + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "104 146"; + extent = "107 18"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.maxScaleFactor"; + command = "wEditor.maxScaleFactor = $ThisControl.getValue();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + password = "0"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "13 178"; + extent = "80 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Visible Distance:"; + }; + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "104 178"; + extent = "107 18"; + minExtent = "8 8"; + visible = "1"; + variable = "pref::Editor::visibleDistance"; + command = "$pref::Editor::visibleDistance = $ThisControl.getValue();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + password = "0"; + }; + }; + new GuiControl(WESettingsDisplayTab) { + profile = "EditorContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 52"; + extent = "220 210"; + minExtent = "8 8"; + visible = "0"; + helpTag = "0"; + + new GuiCheckBoxCtrl() { + profile = "GuiCheckBoxProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 10"; + extent = "200 24"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.renderPlane"; + command = "wEditor.renderPlane = $ThisControl.getValue();"; + helpTag = "0"; + text = "Render Plane"; + }; + new GuiCheckBoxCtrl() { + profile = "GuiCheckBoxProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 37"; + extent = "200 24"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.renderPlaneHashes"; + command = "wEditor.renderPlaneHashes = $ThisControl.getValue();"; + helpTag = "0"; + text = "Render Plane Hashes"; + }; + new GuiCheckBoxCtrl() { + profile = "GuiCheckBoxProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 64"; + extent = "200 24"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.renderObjText"; + command = "wEditor.renderObjText = $ThisControl.getValue();"; + helpTag = "0"; + text = "Render Object Text"; + }; + new GuiCheckBoxCtrl() { + profile = "GuiCheckBoxProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 119"; + extent = "200 24"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.renderSelectionBox"; + command = "wEditor.renderSelectionBox = $ThisControl.getValue();"; + helpTag = "0"; + text = "Render Selection Box"; + }; + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "93 151"; + extent = "107 18"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.planeDim"; + command = "wEditor.planeDim = $ThisControl.getValue();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + password = "0"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "18 151"; + extent = "59 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Plane Extent"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "18 175"; + extent = "44 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Grid Size"; + }; + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "93 175"; + extent = "107 18"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.gridSize"; + command = "wEditor.gridSize = $ThisControl.getValue();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + password = "0"; + }; + new GuiCheckBoxCtrl() { + profile = "GuiCheckBoxProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 90"; + extent = "200 24"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.renderObjHandle"; + command = "wEditor.renderObjHandle = $ThisControl.getValue();"; + helpTag = "0"; + text = "Render Object Handle"; + }; + }; + new GuiControl(WESettingsColorsTab) { + profile = "EditorContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 52"; + extent = "220 210"; + minExtent = "8 8"; + visible = "0"; + helpTag = "0"; + + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "98 31"; + extent = "107 18"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.objectTextColor"; + command = "wEditor.objectTextColor = $ThisControl.getValue();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + password = "0"; + }; + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "98 56"; + extent = "107 18"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.objSelectColor"; + command = "wEditor.objSelectColor = $ThisControl.getValue();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + password = "0"; + }; + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "98 81"; + extent = "107 18"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.objMouseOverSelectColor"; + command = "wEditor.objMouseOverSelectColor = $ThisControl.getValue();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + password = "0"; + }; + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "98 106"; + extent = "107 18"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.objMouseOverColor"; + command = "wEditor.objMouseOverColor = $ThisControl.getValue();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + password = "0"; + }; + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "98 131"; + extent = "107 18"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.dragRectColor"; + command = "wEditor.dragRectColor = $ThisControl.getValue();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + password = "0"; + }; + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "98 156"; + extent = "107 18"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.faceSelectColor"; + command = "wEditor.faceSelectColor = $ThisControl.getValue();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + password = "0"; + }; + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "98 181"; + extent = "107 18"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.selectionBoxColor"; + command = "wEditor.selectionBoxColor = $ThisControl.getValue();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + password = "0"; + }; + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "98 6"; + extent = "107 18"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.gridColor"; + command = "wEditor.gridColor = $ThisControl.getValue();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + password = "0"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "13 6"; + extent = "20 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Grid"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "13 31"; + extent = "55 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Object Text"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "13 56"; + extent = "64 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Object Select"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "13 81"; + extent = "77 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Mouse Over Sel"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "13 106"; + extent = "59 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Mouse Over"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "13 131"; + extent = "48 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Drag Rect"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "13 156"; + extent = "57 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Face Select"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "13 181"; + extent = "66 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Selection Box"; + }; + }; + new GuiControl(WESettingsMouseTab) { + profile = "EditorContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 52"; + extent = "220 210"; + minExtent = "8 8"; + visible = "0"; + helpTag = "0"; + + new GuiCheckBoxCtrl() { + profile = "GuiCheckBoxProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 10"; + extent = "200 24"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.showMousePopupInfo"; + command = "wEditor.showMousePopupInfo = $ThisControl.getValue();"; + helpTag = "0"; + text = "Show Mouse Popup Info"; + }; + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "101 54"; + extent = "107 18"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.mouseMoveScale"; + command = "wEditor.mouseMoveScale = $ThisControl.getValue();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + password = "0"; + }; + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "101 79"; + extent = "107 18"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.mouseRotateScale"; + command = "wEditor.mouseRotateScale = $ThisControl.getValue();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + password = "0"; + }; + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "101 104"; + extent = "107 18"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.mouseScaleScale"; + command = "wEditor.mouseScaleScale = $ThisControl.getValue();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + password = "0"; + }; + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "101 129"; + extent = "107 18"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.popupBackgroundColor"; + command = "wEditor.popupBackgroundColor = $ThisControl.getValue();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + password = "0"; + }; + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "101 154"; + extent = "107 18"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.popupTextColor"; + command = "wEditor.popupTextColor = $ThisControl.getValue();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + password = "0"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "12 54"; + extent = "56 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Move Scale"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "12 79"; + extent = "61 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Rotate Scale"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "12 104"; + extent = "57 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Scale Scale"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "12 129"; + extent = "81 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Popup Bkgnd Col"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "12 154"; + extent = "72 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Popup Text Col"; + }; + }; + new GuiControl(WESettingsMiscTab) { + profile = "EditorContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 52"; + extent = "220 210"; + minExtent = "8 8"; + visible = "0"; + helpTag = "0"; + + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "101 11"; + extent = "107 18"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.selectHandle"; + command = "wEditor.selectHandle = $ThisControl.getValue();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + password = "0"; + }; + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "101 37"; + extent = "107 18"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.defaultHandle"; + command = "wEditor.defaultHandle = $ThisControl.getValue();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + password = "0"; + }; + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "101 63"; + extent = "107 18"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.lockedHandle"; + command = "wEditor.lockedHandle = $ThisControl.getValue();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + password = "0"; + }; + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "101 89"; + extent = "107 18"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.axisGizmoMaxScreenLen"; + command = "wEditor.axisGizmoMaxScreenLen = $ThisControl.getValue();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + password = "0"; + }; + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "101 115"; + extent = "107 18"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.projectDistance"; + command = "wEditor.projectDistance = $ThisControl.getValue();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + password = "0"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "9 11"; + extent = "66 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Select Handle"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "9 37"; + extent = "70 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Default Handle"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "9 63"; + extent = "71 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Locked Handle"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "9 89"; + extent = "89 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Gizmo Screen Len"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "9 115"; + extent = "78 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Project Distance"; + }; + }; + new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "133 267"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + command = "Canvas.popDialog(WorldEditorSettingsDlg);"; + helpTag = "0"; + text = "OK"; + }; + new GuiControl(WESettingsSnapTab) { + profile = "EditorContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 52"; + extent = "220 210"; + minExtent = "8 8"; + visible = "0"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "22 39"; + extent = "44 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Grid Size"; + }; + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "97 39"; + extent = "107 18"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.gridSize"; + command = "wEditor.gridSize = $ThisControl.getValue();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + password = "0"; + }; + new GuiCheckBoxCtrl() { + profile = "GuiCheckBoxProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 10"; + extent = "200 24"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.snapToGrid"; + command = "wEditor.snapToGrid = $ThisControl.getValue();"; + helpTag = "0"; + text = "Snap To Grid"; + }; + new GuiCheckBoxCtrl() { + profile = "GuiCheckBoxProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "12 66"; + extent = "200 24"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.snapRotations"; + command = "wEditor.snapRotations = $ThisControl.getValue();"; + helpTag = "0"; + text = "Snap Rotations"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "22 95"; + extent = "56 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Snap Angle"; + }; + new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "97 95"; + extent = "107 18"; + minExtent = "8 8"; + visible = "1"; + variable = "wEditor.rotationSnap"; + command = "wEditor.rotationSnap = $ThisControl.getValue();"; + helpTag = "0"; + historySize = "0"; + maxLength = "255"; + password = "0"; + }; + }; + }; +}; +//--- OBJECT WRITE END --- + +//------------------------------------------------------------------------------ +// Functions +//------------------------------------------------------------------------------ + +function WorldEditorSettingsDlg::init(%this) +{ + WESettingsCatagoryPopup.clear(); + + // + WESettingsCatagoryPopup.add(General, 0); + WESettingsCatagoryPopup.add(Display, 1); + WESettingsCatagoryPopup.add(Snap, 2); + WESettingsCatagoryPopup.add(Colors, 3); + WESettingsCatagoryPopup.add(Mouse, 4); + WESettingsCatagoryPopup.add(Misc, 5); + + %this.showTab(General); +} + +function WESettingsCatagoryPopup::onSelect(%this, %item) +{ + WorldEditorSettingsDlg.showTab(%this.getValue()); +} + +function WorldEditorSettingsDlg::showTab(%this, %tab) +{ + WESettingsGeneralTab.setVisible(false); + WESettingsDisplayTab.setVisible(false); + WESettingsSnapTab.setVisible(false); + WESettingsColorsTab.setVisible(false); + WESettingsMouseTab.setVisible(false); + WESettingsMiscTab.setVisible(false); + + WESettingsCatagoryPopup.setText(%tab); + + %tab = "WESettings" @ %tab @ "Tab"; + %tab.setVisible(true); +} diff --git a/base/gui/WorldEditorStatusbarDlg.gui b/base/gui/WorldEditorStatusbarDlg.gui new file mode 100644 index 0000000..236f9f8 --- /dev/null +++ b/base/gui/WorldEditorStatusbarDlg.gui @@ -0,0 +1,135 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(WorldEditorStatusbarDlg) { + profile = "GuiModelessDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "0"; + helpTag = "0"; + + new GuiControl() { + profile = "EditorContentProfile"; + horizSizing = "width"; + vertSizing = "top"; + position = "0 450"; + extent = "640 30"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "6 8"; + extent = "39 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Mission:"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "244 8"; + extent = "29 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Mode:"; + }; + new GuiControl() { + profile = "GuiContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "274 6"; + extent = "58 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiButtonCtrl(WEModeText) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "58 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + command = "nextMode();"; + }; + }; + new GuiControl() { + profile = "GuiContentProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "49 6"; + extent = "188 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiTextCtrl(WEMissionNameText) { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "3 2"; + extent = "8 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + }; + }; + }; +}; +//--- OBJECT WRITE END --- + +//------------------------------------------------------------------------------ +// Functions +//------------------------------------------------------------------------------ + +function WorldEditorStatusbarDlg::init(%this) +{ + %this.update(); +} + +function WorldEditorStatusBarDlg::update(%this) +{ + if($MissionName $= "") + WEMissionNameText.setValue(""); + else + WEMissionNameText.setValue($MissionName); + + if($aiEdit) + WEModeText.setValue(aiEdit.getMode()); + else + WEModeText.setValue(wEditor.getMode()); +} + +function nextMode() +{ + if($aiEdit) + aiEdit.nextMode(); + else + wEditor.nextMode(); +} \ No newline at end of file diff --git a/base/gui/WorldEditorToolbarDlg.gui b/base/gui/WorldEditorToolbarDlg.gui new file mode 100644 index 0000000..d675b12 --- /dev/null +++ b/base/gui/WorldEditorToolbarDlg.gui @@ -0,0 +1,92 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(WorldEditorToolbarDlg) { + profile = "GuiModelessDialogProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "0"; + helpTag = "0"; + + new GuiControl() { + profile = "EditorContentProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 30"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "0"; + helpTag = "0"; + + new GuiCheckBoxCtrl(WorldEditorCreatorCheckBox) { + profile = "GuiRadioProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "381 5"; + extent = "63 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "if($ThisControl.getValue()) WorldEditorFrameSetDlg.addTool(EditorToolCreatorGui); else WorldEditorFrameSetDlg.removeTool(EditorToolCreatorGui);"; + helpTag = "0"; + text = "Creator"; + }; + new GuiCheckBoxCtrl(WorldEditorTreeCheckBox) { + profile = "GuiRadioProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "444 5"; + extent = "63 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "if($ThisControl.getValue()) WorldEditorFrameSetDlg.addTool(EditorToolTreeViewGui); else WorldEditorFrameSetDlg.removeTool(EditorToolTreeViewGui);"; + helpTag = "0"; + text = "Tree"; + }; + new GuiCheckBoxCtrl(WorldEditorMissionAreaCheckBox) { + profile = "GuiRadioProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "507 5"; + extent = "63 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "if($ThisControl.getValue()) WorldEditorFrameSetDlg.addTool(EditorToolMissionAreaGui); else WorldEditorFrameSetDlg.removeTool(EditorToolMissionAreaGui);"; + helpTag = "0"; + text = "Mission"; + }; + new GuiCheckBoxCtrl(WorldEditorInspectorCheckBox) { + profile = "GuiRadioProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "570 5"; + extent = "63 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "if($ThisControl.getValue()) WorldEditorFrameSetDlg.addTool(EditorToolInspectorGui); else WorldEditorFrameSetDlg.removeTool(EditorToolInspectorGui);"; + helpTag = "0"; + text = "Inspector"; + }; + }; +}; +//--- OBJECT WRITE END --- + +function WorldEditorToolbarDlg::init(%this) +{ + WorldEditorInspectorCheckBox.setValue(WorldEditorToolFrameSet.isMember("EditorToolInspectorGui")); + WorldEditorMissionAreaCheckBox.setValue(WorldEditorToolFrameSet.isMember("EditorToolMissionAreaGui")); + WorldEditorTreeCheckBox.setValue(WorldEditorToolFrameSet.isMember("EditorToolTreeViewGui")); + WorldEditorCreatorCheckBox.setValue(WorldEditorToolFrameSet.isMember("EditorToolCreatorGui")); +} diff --git a/base/gui/cmdMapHelpText.gui b/base/gui/cmdMapHelpText.gui new file mode 100644 index 0000000..ba585dc --- /dev/null +++ b/base/gui/cmdMapHelpText.gui @@ -0,0 +1,436 @@ +new GuiControl(CmdMapHelpTextGui) { + profile = "GuiContentProfileNoClear"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "0"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new GuiControl(teamButtonBox) { + profile = "GuiHelpBoxProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "280 5"; + extent = "160 50"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiTextCtrl(teamButtonHeader) { + profile = "GuiHelpHeaderProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 1"; + extent = "150 15"; + minExtent = "8 8"; + visible = "1"; + text = "TEAMMATES"; + }; + new GuiMLTextCtrl(teamButtonText) { + profile = "GuiHelpTextProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 15"; + extent = "150 35"; + minExtent = "8 8"; + visible = "1"; + lineSpacing = "1"; + }; + }; + new HudHelpTag(teamButtonLine) { + profile = "GuiHelpLineProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "435 8"; + extent = "20 5"; + flip = "0"; + visible = "1"; + }; + + new GuiControl(tacticalButtonBox) { + profile = "GuiHelpBoxProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "270 57"; + extent = "170 80"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiTextCtrl(tacticalButtonHeader) { + profile = "GuiHelpHeaderProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 1"; + extent = "170 15"; + minExtent = "8 8"; + visible = "1"; + text = "TACTICAL ASSETS"; + }; + new GuiMLTextCtrl(tacticalButtonText) { + profile = "GuiHelpTextProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 15"; + extent = "170 65"; + minExtent = "8 8"; + visible = "1"; + lineSpacing = "1"; + }; + }; + new HudHelpTag(tacticalButtonLine) { + profile = "GuiHelpLineProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "430 60"; + extent = "20 5"; + flip = "0"; + visible = "1"; + }; + + new GuiControl(supportButtonBox) { + profile = "GuiHelpBoxProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "280 139"; + extent = "160 65"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiTextCtrl(supportButtonHeader) { + profile = "GuiHelpHeaderProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 1"; + extent = "150 15"; + minExtent = "8 8"; + visible = "1"; + text = "SUPPORT ASSETS"; + }; + new GuiMLTextCtrl(supportButtonText) { + profile = "GuiHelpTextProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 15"; + extent = "150 50"; + minExtent = "8 8"; + visible = "1"; + lineSpacing = "1"; + }; + }; + + new GuiControl(waypointButtonBox) { + profile = "GuiHelpBoxProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "160 110"; + extent = "100 35"; + minExtent = "8 8"; + visible = "1"; + lineSpacing = "1"; + + new GuiTextCtrl(waypointButtonHeader) { + profile = "GuiHelpHeaderProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 1"; + extent = "90 15"; + minExtent = "8 8"; + visible = "1"; + text = "WAYPOINTS"; + }; + new GuiMLTextCtrl(waypointButtonText) { + profile = "GuiHelpTextProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 15"; + extent = "90 15"; + minExtent = "8 8"; + visible = "1"; + lineSpacing = "1"; + }; + }; + + new GuiControl(objectiveButtonBox) { + profile = "GuiHelpBoxProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "125 150"; + extent = "150 35"; + minExtent = "8 8"; + visible = "1"; + lineSpacing = "1"; + + new GuiTextCtrl(objectiveButtonHeader) { + profile = "GuiHelpHeaderProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 1"; + extent = "140 15"; + minExtent = "8 8"; + visible = "1"; + text = "OBJECTIVES"; + }; + new GuiMLTextCtrl(objectiveButtonText) { + profile = "GuiHelpTextProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 15"; + extent = "140 20"; + minExtent = "8 8"; + visible = "1"; + lineSpacing = "1"; + }; + }; + + new GuiControl(sensorToolBox) { + profile = "GuiHelpBoxProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "160 208"; + extent = "280 50"; + minExtent = "8 8"; + visible = "1"; + + new GuiTextCtrl(sensorToolHeader) { + profile = "GuiHelpHeaderProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 1"; + extent = "270 15"; + minExtent = "8 8"; + visible = "1"; + text = "SENSOR"; + }; + new GuiMLTextCtrl(sensorToolText) { + profile = "GuiHelpTextProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 15"; + extent = "270 35"; + minExtent = "8 8"; + visible = "1"; + lineSpacing = "1"; + }; + }; + + new GuiControl(handToolBox) { + profile = "GuiHelpBoxProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "200 260"; + extent = "240 65"; + minExtent = "8 8"; + visible = "1"; + lineSpacing = "1"; + + new GuiTextCtrl(handToolHeader) { + profile = "GuiHelpHeaderProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 1"; + extent = "250 15"; + minExtent = "8 8"; + visible = "1"; + text = "HAND/POINTER"; + }; + new GuiMLTextCtrl(handToolText) { + profile = "GuiHelpTextProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 15"; + extent = "250 50"; + minExtent = "8 8"; + visible = "1"; + lineSpacing = "1"; + }; + }; + new HudHelpTag(handToolLine) { + profile = "GuiHelpLineProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "435 323"; + extent = "20 5"; + flip = "0"; + visible = "1"; + }; + + new GuiControl(zoomToolBox) { + profile = "GuiHelpBoxProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "200 327"; + extent = "240 50"; + minExtent = "8 8"; + visible = "1"; + + new GuiTextCtrl(zoomToolHeader) { + profile = "GuiHelpHeaderProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 1"; + extent = "235 15"; + minExtent = "8 8"; + visible = "1"; + text = "ZOOM"; + }; + new GuiMLTextCtrl(zoomToolText) { + profile = "GuiHelpTextProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 15"; + extent = "230 35"; + minExtent = "8 8"; + visible = "1"; + lineSpacing = "1"; + }; + }; + new HudHelpTag(zoomToolLine) { + profile = "GuiHelpLineProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "435 365"; + extent = "20 5"; + flip = "0"; + visible = "1"; + }; + + new GuiControl(centerToolBox) { + profile = "GuiHelpBoxProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "200 379"; + extent = "240 65"; + minExtent = "8 8"; + visible = "1"; + + new GuiTextCtrl(centerToolHeader) { + profile = "GuiHelpHeaderProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 1"; + extent = "230 15"; + minExtent = "8 8"; + visible = "1"; + text = "CENTER MAP"; + }; + new GuiMLTextCtrl(centerToolText) { + profile = "GuiHelpTextProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 15"; + extent = "230 50"; + minExtent = "8 8"; + visible = "1"; + lineSpacing = "1"; + }; + }; + new HudHelpTag(centerToolLine) { + profile = "GuiHelpLineProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "435 400"; + extent = "20 5"; + flip = "0"; + visible = "1"; + }; + + new GuiControl(textToolBox) { + profile = "GuiHelpBoxProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "220 446"; + extent = "220 35"; + minExtent = "8 8"; + visible = "1"; + + new GuiTextCtrl(textToolHeader) { + profile = "GuiHelpHeaderProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 1"; + extent = "210 15"; + minExtent = "8 8"; + visible = "1"; + text = "TEXT ON/OFF"; + }; + new GuiMLTextCtrl(textToolText) { + profile = "GuiHelpTextProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 15"; + extent = "210 20"; + minExtent = "8 8"; + visible = "1"; + lineSpacing = "1"; + }; + }; + + new GuiControl(cameraToolBox) { + profile = "GuiHelpBoxProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "2 380"; + extent = "190 95"; + minExtent = "8 8"; + visible = "1"; + + new GuiTextCtrl(cameraToolHeader) { + profile = "GuiHelpHeaderProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 1"; + extent = "180 15"; + minExtent = "8 8"; + visible = "1"; + text = "CAMERA"; + }; + new GuiMLTextCtrl(cameraToolText) { + profile = "GuiHelpTextProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 15"; + extent = "180 80"; + minExtent = "8 8"; + visible = "1"; + lineSpacing = "1"; + }; + }; + new GuiControl(generalHelpBox) { + profile = "GuiHelpBoxProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "2 140"; + extent = "120 235"; + minExtent = "8 8"; + visible = "1"; + + new GuiTextCtrl(generalHelpHeader) { + profile = "GuiHelpHeaderProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 1"; + extent = "110 15"; + minExtent = "8 8"; + visible = "1"; + text = "COMMAND MAP"; + }; + new GuiMLTextCtrl(generalHelpText) { + profile = "GuiHelpTextProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 15"; + extent = "110 225"; + minExtent = "8 8"; + visible = "1"; + lineSpacing = "1"; + }; + }; +}; + +commanderMapGui.add(CmdMapHelpTextGui); \ No newline at end of file diff --git a/base/gui/guiProfiles.cs b/base/gui/guiProfiles.cs new file mode 100644 index 0000000..def5c12 --- /dev/null +++ b/base/gui/guiProfiles.cs @@ -0,0 +1,1632 @@ + +//-------------------------------------------------------------------------- +//-------------------------------------- Cursors +// +new GuiCursor(DefaultCursor) +{ + hotSpot = "1 1"; + bitmapName = "gui/CUR_3darrow"; +}; + +new GuiCursor(ArrowNoCursor) +{ + hotSpot = "1 1"; + bitmapName = "gui/CUR_3darrowno"; +}; + +new GuiCursor(ArrowWaitCursor) +{ + hotSpot = "1 1"; + bitmapName = "gui/CUR_3darrowwait"; +}; + +new GuiCursor(ArrowHelpCursor) +{ + hotSpot = "1 1"; + bitmapName = "gui/CUR_3darrowhelp"; +}; + +new GuiCursor(MoveCursor) +{ + hotSpot = "11 11"; + bitmapName = "gui/CUR_3dmove"; +}; + +new GuiCursor(UpDownCursor) +{ + hotSpot = "5 10"; + bitmapName = "gui/CUR_3dupdown"; +}; + +new GuiCursor(LeftRightCursor) +{ + hotSpot = "9 5"; + bitmapName = "gui/CUR_3dleftright"; +}; + +new GuiCursor(DiagRightCursor) +{ + hotSpot = "8 8"; + bitmapName = "gui/CUR_3ddiagright"; +}; + +new GuiCursor(DiagLeftCursor) +{ + hotSpot = "8 8"; + bitmapName = "gui/CUR_3ddiagleft"; +}; + +new GuiCursor(RotateCursor) +{ + hotSpot = "11 14"; + bitmapName = "gui/CUR_rotate"; +}; + +new GuiCursor(ResizeDownCursor) +{ + hotSpot = "4 8"; + bitmapName = "gui/CUR_3dresizeright"; +}; + +new GuiCursor(GrabCursor) +{ + hotSpot = "9 13"; + bitmapName = "gui/CUR_Grab.png"; +}; + +//-------------------------------------------------------------------------- +//-------------------------------------- Profiles +// +new GuiControlProfile("GuiDialogProfile"); + +new GuiControlProfile("GuiModelessDialogProfile") +{ + modal = false; +}; + +new GuiControlProfile ("GuiContentProfile") +{ + opaque = true; + fillColor = "255 255 255"; +}; + +new GuiControlProfile ("memberListProfile") +{ + fontType = "Univers Condensed"; + fontSize = 12; + fontColor = "255 222 0"; +}; + +new GuiControlProfile ("clockProfile") +{ + fontType = "Univers Condensed"; + fontSize = 12; + fontColor = "0 255 0"; +}; + +new GuiControlProfile ("browserListProfile") +{ + fontType = "Univers Condensed"; + fontSize = 14; + fontColor = "0 255 0"; +}; + +new GuiControlProfile ("GuiContentProfileNoClear") +{ + opaque = false; + fillColor = "255 255 255"; +}; + +//-------------------------------------------------------------------------- +// Base font definitions: +//-------------------------------------------------------------------------- +$ShellFont = "Univers"; +$ShellFontSize = 16; +$ShellMediumFontSize = 18; +$ShellHeaderFont = "Sui Generis"; +$ShellHeaderFontSize = 22; +$ShellButtonFont = "Univers Condensed"; +$ShellButtonFontSize = 16; +$ShellLabelFont = "Univers Condensed"; +$ShellLabelFontSize = 18; +$ShellBoldFont = "Univers Bold"; + +$ShellColorBright = "173 255 250"; +$ShellColorDark = "130 190 185"; +$ShellColorVeryDark = "0 117 133"; + +// Color coding system for Player names in the game: +$PlayerNameColor = "200 200 200"; +$TribeTagColor = "220 220 20"; +$SmurfNameColor = "150 150 250"; +$BotNameColor = "60 220 150"; + +//-------------------------------------------------------------------------- +// Beginning of the "New Shell" section: +new GuiControlProfile ("ShellButtonProfile") +{ + fontType = $ShellButtonFont; + fontSize = $ShellButtonFontSize; + fontColor = "8 19 6"; + fontColorHL = "25 68 56"; + fontColorNA = "5 5 5"; + fontColorSEL = "25 68 56"; + fixedExtent = true; + justify = "center"; + bitmap = "gui/shll_button"; + textOffset = "0 10"; + soundButtonDown = sButtonDown; + soundButtonOver = sButtonOver; + tab = true; + canKeyFocus = true; +}; + +new GuiControlProfile ("ShellButtonNoTabProfile") +{ + fontType = $ShellButtonFont; + fontSize = $ShellButtonFontSize; + fontColor = "8 19 6"; + fontColorHL = "25 68 56"; + fontColorNA = "5 5 5"; + fontColorSEL = "25 68 56"; + fixedExtent = true; + justify = "center"; + bitmap = "gui/shll_button"; + textOffset = "0 10"; + soundButtonDown = sButtonDown; + soundButtonOver = sButtonOver; + tab = false; + canKeyFocus = true; +}; + +new GuiControlProfile ("ShellRadioProfile") +{ + fontType = $ShellButtonFont; + fontSize = $ShellButtonFontSize; + fontColor = "8 19 6"; + fontColorHL = "25 68 56"; + fontColorNA = "5 5 5"; + fixedExtent = true; + justify = "center"; + bitmap = "gui/shll_radio"; + soundButtonDown = sButtonDown; + soundButtonOver = sButtonOver; + tab = true; + canKeyFocus = true; +}; + +new GuiControlProfile ("ShellTabProfile") +{ + fontType = $ShellButtonFont; + fontSize = $ShellButtonFontSize; + fontColor = "8 19 6"; + fontColorHL = "25 68 56"; + fontColorNA = "5 5 5"; + fontColorSEL = "8 19 6"; + fixedExtent = true; + justify = "center"; + bitmap = "gui/shll_tabbutton"; + soundButtonDown = sButtonDown; + soundButtonOver = sButtonOver; + tab = true; + canKeyFocus = true; +}; + +new GuiControlProfile ("TabGroupProfile") +{ + fontType = $ShellButtonFont; + fontSize = $ShellButtonFontSize; + fontColor = "8 19 6"; + fontColorHL = "25 68 56"; + fontColorNA = "5 5 5"; + fontColorSEL = "8 19 6"; + fixedExtent = true; + bitmapBase = "gui/shll_horztabbutton"; + justify = "center"; + textOffset = "8 0"; + soundButtonDown = sButtonDown; + soundButtonOver = sButtonOver; + tab = true; + canKeyFocus = true; +}; + +new GuiControlProfile ("LaunchTabProfile") +{ + fontType = $ShellButtonFont; + fontSize = $ShellButtonFontSize; + fontColor = "60 140 140"; + fontColorHL = "6 245 215"; + fontColorNA = "5 5 5"; + fontColorSEL = "6 245 215"; + fixedExtent = true; + bitmapBase = "gui/lnch_tab"; + justify = "center"; + textOffset = "8 0"; + soundButtonDown = sButtonDown; + soundButtonOver = sButtonOver; + tab = true; + canKeyFocus = true; +}; + +new GuiControlProfile ("ShellTabFrameProfile") +{ + bitmapBase = "gui/shll_tabframe"; +}; + +new GuiControlProfile ("ShellHorzTabFrameProfile") +{ + bitmapBase = "gui/shll_horztabframe"; +}; + +new GuiControlProfile ("ShellPopupProfile") +{ + fontType = $ShellFont; + fontSize = $ShellFontSize; + fontColor = "8 19 6"; + fontColorHL = "25 68 56"; + fontColorNA = "5 5 5"; + fontColorSEL = "8 19 6"; + fixedExtent = true; + justify = "center"; + soundButtonDown = sButtonDown; + soundButtonOver = sButtonOver; + bitmapBase = "gui/shll_scroll"; + tab = true; + canKeyFocus = true; +}; + +new GuiControlProfile ("NewTextEditProfile") +{ + fillColorHL = $ShellColorDark; + fontType = $ShellFont; + fontSize = $ShellFontSize; + fontColor = "60 140 140"; + fontColorHL = "25 68 56"; + fontColorNA = "128 128 128"; + cursorColor = $ShellColorBright; + bitmap = "gui/shll_entryfield"; + textOffset = "14 0"; + autoSizeWidth = false; + autoSizeHeight = false; + tab = true; + canKeyFocus = true; +}; + +new GuiControlProfile ("NewTextEditNumericProfile") +{ + fillColorHL = $ShellColorDark; + fontType = $ShellFont; + fontSize = $ShellFontSize; + fontColor = "60 140 140"; + fontColorHL = "25 68 56"; + fontColorNA = "128 128 128"; + cursorColor = $ShellColorBright; + bitmap = "gui/shll_entryfield"; + justify = "center"; + textOffset = "14 0"; + autoSizeWidth = false; + autoSizeHeight = false; + numbersOnly = true; + tab = true; + canKeyFocus = true; +}; + +new GuiControlProfile ("NewTextEditCenterProfile") +{ + fillColorHL = $ShellColorDark; + fontType = $ShellFont; + fontSize = $ShellFontSize; + fontColor = "60 140 140"; + fontColorHL = "25 68 56"; + fontColorNA = "128 128 128"; + cursorColor = $ShellColorBright; + bitmap = "gui/shll_entryfield"; + justify = "center"; + autoSizeWidth = false; + autoSizeHeight = false; + tab = true; + canKeyFocus = true; +}; + +new GuiControlProfile ("NewScrollCtrlProfile") +{ + bitmapBase = "gui/shll_scroll"; + soundButtonDown = sButtonDown; + soundButtonOver = sButtonOver; +}; + +new GuiControlProfile ("ShellFieldProfile") +{ + bitmapBase = "gui/shll_field"; +}; + +new GuiControlProfile ("ShellSliderProfile") +{ + fontType = $ShellLabelFont; + fontSize = $ShellFontSize; + fontColor = "60 180 180"; + fontColorNA = "128 128 128"; + bitmapBase = "gui/shll_scroll"; + canKeyFocus = true; + soundButtonOver = sButtonOver; +}; + +new GuiControlProfile ("ShellTextArrayProfile") +{ + fontType = $ShellFont; + fontSize = $ShellFontSize; + fontColor = "60 180 180"; + fontColorHL = "6 245 215"; + fontColorNA = "108 108 108"; + fontColorSEL = "25 68 56"; + bitmapBase = "gui/shll_bar"; + tab = true; + canKeyFocus = true; +}; + +new GuiControlProfile ("ShellActiveTextProfile") +{ + fontType = $ShellFont; + fontSize = $ShellFontSize; + fontColor = "60 180 180"; + fontColorHL = "6 245 215"; + fontColorNA = "128 128 128"; + fontColorSEL = "25 68 56"; + justify = "center"; +}; + +new GuiControlProfile ("ShellPaneProfile") +{ + fontType = $ShellHeaderFont; + fontSize = $ShellHeaderFontSize; + fontColor = "5 5 5"; + autoSizeWidth = false; + autoSizeHeight = false; + bitmapBase = "gui/shll"; +}; + +new GuiControlProfile ("ShellDlgPaneProfile") +{ + fontType = $ShellHeaderFont; + fontSize = $ShellHeaderFontSize; + fontColor = "5 5 5"; + autoSizeWidth = false; + autoSizeHeight = false; + bitmapBase = "gui/dlg"; +}; + +new GuiControlProfile ("ShellWindowProfile") +{ + borderColor = "3 124 134"; + fontType = $ShellHeaderFont; + fontSize = $ShellHeaderFontSize; + fontColor = "5 5 5"; + autoSizeWidth = false; + autoSizeHeight = false; + bitmapBase = "gui/dlg"; + soundButtonDown = sButtonDown; + soundButtonOver = sButtonOver; +}; + +new GuiControlProfile ("ShellDlgProfile") +{ + fontType = $ShellHeaderFont; + fontSize = $ShellHeaderFontSize; + fontColor = "5 5 5"; + bitmap = "gui/dlg_box"; + autoSizeWidth = false; + autoSizeHeight = false; +}; + +new GuiControlProfile ("BrowserH1Profile") +{ + fontType = "Univers Condensed Bold"; + fontSize = 28; + fontColor = "40 247 113"; // green + autoSizeWidth = false; + autoSizeHeight = true; + bitmapBase = "gui/shll"; +}; + +new GuiControlProfile ("CloseButtonProfile") +{ + bitmap = "gui/shll_menuclose"; + soundButtonDown = sButtonDown; + soundButtonOver = sButtonOver; + tab = true; + canKeyFocus = true; +}; + +new GuiControlProfile ("SoundTestButtonProfile") +{ + bitmap = "gui/shll_soundbutton"; + soundButtonOver = sButtonOver; + tab = true; + canKeyFocus = true; +}; + +new GuiControlProfile ("LaunchMenuProfile") +{ + fontType = $ShellFont; + fontSize = $ShellFontSize; + fontColor = "6 245 215"; + fontColorHL = "74 251 228"; + fontColorSEL = "4 41 45"; + borderColor = "84 121 125 200"; + fixedExtent = true; + justify = "center"; + bitmapBase = "gui/launch_btn"; + textOffset = "0 19"; + soundButtonDown = sLaunchMenuOpen; + soundButtonOver = sLaunchMenuOver; + tab = true; + canKeyFocus = true; +}; + +new GuiControlProfile ("LaunchBtnTopProfile") +{ + fixedExtent = true; + bitmapBase = "gui/launchtop_btn"; +}; + +new GuiControlProfile ("ShellServerBrowserProfile") +{ + fontType = $ShellFont; + fontSize = $ShellFontSize; + fontColor = "60 180 180"; + fontColorHL = "6 245 215"; + fontColorNA = "128 128 128"; + fontColorSEL = "25 68 56"; + fontColors[4] = "20 227 93"; // Mod base color + fontColors[5] = "40 247 113"; // Mod rollover color + fontColors[6] = "5 80 30"; // Mod selected color + fontColors[7] = "108 108 108"; // Differing build base color + fontColors[8] = "168 168 168"; // Differing build rollover color + fontColors[9] = "58 58 58"; // Differing build selected color + bitmapBase = "gui/shll_scroll"; + soundButtonDown = sButtonDown; + soundButtonOver = sButtonOver; + tab = true; + canKeyFocus = true; +}; + +new GuiControlProfile ("LobbyPlayerListProfile") +{ + fontType = $ShellFont; + fontSize = $ShellFontSize; + fontColor = "60 180 180"; + fontColorHL = "6 245 215"; + fontColorNA = "128 128 128"; + fontColorSEL = "25 68 56"; + fontColors[6] = $PlayerNameColor; + fontColors[7] = $TribeTagColor; + fontColors[8] = $SmurfNameColor; + fontColors[9] = $BotNameColor; + bitmapBase = "gui/shll_scroll"; + soundButtonDown = sButtonDown; + soundButtonOver = sButtonOver; + tab = true; + canKeyFocus = true; +}; + +new GuiControlProfile ("ShellBrowserTitleProfile") +{ + fontType = "Sui Generis"; + fontSize = 32; + fontColor = "173 255 250"; + autoSizeWidth = true; + autoSizeHeight = true; + tab = false; + canKeyFocus = false; +}; +//-------------------------------------------------------------------------- +// End of "New Shell" section. + +new GuiControlProfile ("ShellHoloButtonProfile") +{ + opaque = true; + fillColor = $ShellColorVeryDark; + fillColorNA = "128 128 128"; + border = true; + borderColor = $ShellColorBright; + borderColorHL = "127 127 127"; + borderColorNA = "192 192 192"; + fontType = "Univers"; + fontSize = 14; + fontColor = $ShellColorBright; + fontColorHL = $ShellColorDark; + fontColorNA = "192 192 192"; + fixedExtent = true; + justify = "center"; + soundButtonDown = sButtonDown; + soundButtonOver = sButtonOver; + tab = true; + canKeyFocus = true; +}; + +new GuiControlProfile ("GameHoloButtonProfile") +{ + opaque = true; + fillColor = "0 64 0 80"; + border = true; + borderColor = "0 255 0"; + borderColorHL = "127 127 127"; + fontType = "Univers"; + fontSize = 14; + fontColor = "0 255 0"; + fontColorHL = "0 128 0"; + fixedExtent = true; + justify = "center"; + soundButtonDown = sButtonDown; + soundButtonOver = sButtonOver; + tab = true; +}; + +new GuiControlProfile ("ShellHoloBox") +{ + opaque = true; + fillColor = "72 72 72 128"; + border = true; + borderColor = $ShellColorBright; +}; + +new GuiControlProfile ("TaskHudBox") +{ + opaque = true; + fillColor = "72 72 72 128"; + border = true; + borderColor = "30 59 56 80"; +}; + +new GuiControlProfile ("ShellOpaqueBox") +{ + opaque = true; + fillColor = $ShellColorVeryDark; + border = true; + borderColor = $ShellColorBright; +}; + +new GuiControlProfile ("ShellScrollCtrlProfile") +{ + border = true; + borderColor = $ShellColorBright; + bitmap = "gui/shellScroll"; +}; + +new GuiControlProfile ("ShellTextProfile") +{ + fontType = $ShellLabelFont; + fontSize = $ShellLabelFontSize; + fontColor = "66 229 244"; + autoSizeWidth = true; + autoSizeHeight = true; +}; + +new GuiControlProfile ("ShellTextRightProfile") +{ + fontType = $ShellLabelFont; + fontSize = $ShellLabelFontSize; + fontColor = "66 229 244"; + justify = "right"; + autoSizeWidth = false; + autoSizeHeight = true; +}; + +new GuiControlProfile ("ShellTextCenterProfile") +{ + fontType = $ShellLabelFont; + fontSize = $ShellLabelFontSize; + fontColor = "66 229 244"; + justify = "center"; + autoSizeWidth = false; + autoSizeHeight = true; +}; + +new GuiControlProfile ("DisabledTextProfile") +{ + fontType = $ShellLabelFont; + fontSize = $ShellLabelFontSize; + fontColor = "128 128 128"; + autoSizeWidth = true; + autoSizeHeight = true; +}; + +new GuiControlProfile ("DisabledTextRightProfile") +{ + fontType = $ShellLabelFont; + fontSize = $ShellLabelFontSize; + fontColor = "128 128 128"; + justify = "right"; + autoSizeWidth = false; + autoSizeHeight = true; +}; + +new GuiControlProfile ("ShellAltTextProfile") +{ + fontType = $ShellFont; + fontSize = $ShellFontSize; + fontColor = "66 219 234"; + autoSizeWidth = true; + autoSizeHeight = true; +}; + +new GuiControlProfile ("ShellAltTextRightProfile") +{ + fontType = $ShellFont; + fontSize = $ShellFontSize; + fontColor = "66 219 234"; + justify = "right"; + autoSizeWidth = false; + autoSizeHeight = true; +}; + +new GuiControlProfile ("ShellAltTextCenterProfile") +{ + fontType = $ShellFont; + fontSize = $ShellFontSize; + fontColor = "66 219 234"; + justify = "center"; + autoSizeWidth = false; + autoSizeHeight = true; +}; + +new GuiControlProfile ("ShellStaticTextProfile") +{ + fontType = $ShellFont; + fontSize = $ShellFontSize; + fontColor = "66 219 234"; + autoSizeWidth = false; + autoSizeHeight = true; +}; + +new GuiControlProfile ("VersionTextProfile") +{ + fontType = "Univers Bold"; + fontSize = $ShellMediumFontSize; + fontColor = "0 0 0"; + justify = "right"; + autoSizeWidth = false; + autoSizeHeight = true; +}; + +new GuiControlProfile ("CenterPrintTextProfile") +{ + fontType = $ShellFont; + fontSize = $ShellMediumFontSize; + fontColor = $ShellColorBright; + autoSizeWidth = false; + autoSizeHeight = true; +}; + + +new GuiControlProfile ("ShellEditMOTDTextProfile") +{ + fontType = $ShellFont; + fontSize = $ShellFontSize; + fontColor = "66 219 234"; + fontColorHL = "25 68 56"; + fillColorHL = "50 233 206"; + cursorColor = "200 240 240"; + autoSizeWidth = false; + autoSizeHeight = false; + tab = true; + canKeyFocus = true; +}; + +new GuiControlProfile ("ShellTopicTextProfile") +{ + fontType = $ShellFont; + fontSize = $ShellMediumFontSize; + fontColor = "100 200 200"; + autoSizeWidth = false; + autoSizeHeight = true; +}; + +new GuiControlProfile ("BrowserFilterLabelProfile") +{ + fontType = $ShellLabelFont; + fontSize = $ShellMediumFontSize; + fontColor = "0 220 0"; + justify = "left"; + autoSizeWidth = true; + autoSizeHeight = true; +}; + +new GuiControlProfile ("BrowserFilterTextProfile") +{ + fontType = $ShellLabelFont; + fontSize = $ShellMediumFontSize; + fontColor = "66 219 234"; + justify = "left"; + autoSizeWidth = true; + autoSizeHeight = true; +}; + +new GuiControlProfile ("BrowserStatusTextProfile") +{ + fontType = $ShellLabelFont; + fontSize = $ShellMediumFontSize; + fontColor = "66 219 234"; + justify = "right"; + autoSizeWidth = false; + autoSizeHeight = true; +}; + +new GuiControlProfile ("BrowserProgressProfile") +{ + opaque = false; + fillColor = "79 253 181 180"; + border = true; + borderColor = "3 124 134"; +}; + +new GuiControlProfile ("InfoWindowProfile") +{ + fontType = $ShellFont; + fontSize = $ShellFontSize; + fontColor = "66 219 234"; + fontColors[6] = $PlayerNameColor; + fontColors[7] = $TribeTagColor; + fontColors[8] = $SmurfNameColor; + fontColors[9] = $BotNameColor; + autoSizeWidth = true; + autoSizeHeight = true; +}; + +new GuiControlProfile ("ShellMessageTextProfile") +{ + fontType = $ShellFont; + fontSize = $ShellMediumFontSize; + fontColor = "66 219 234"; + fontColorHL = "25 68 56"; + fillColorHL = "50 233 206"; + cursorColor = "200 240 240"; + autoSizeWidth = false; + autoSizeHeight = false; + tab = true; + canKeyFocus = true; +}; + +new GuiControlProfile ("ShellLoadTextProfile") +{ + fontType = $ShellFont; + fontSize = $ShellMediumFontSize; + fontColor = "66 219 234"; + autoSizeWidth = true; + autoSizeHeight = true; +}; + +new GuiControlProfile ("ShellLargeLabelProfile" ) +{ + fontType = $ShellLabelFont; + fontSize = 22; + fontColor = "60 180 180"; + autoSizeWidth = false; + autoSizeHeight = true; +}; + +new GuiControlProfile ("ShellMediumTextProfile") +{ + fontType = $ShellFont; + fontSize = $ShellMediumFontSize; + fontColor = $ShellColorBright; + autoSizeWidth = true; + autoSizeHeight = true; +}; + +new GuiControlProfile ("ShellMediumTextCenterProfile") +{ + fontType = $ShellFont; + fontSize = $ShellMediumFontSize; + fontColor = $ShellColorBright; + autoSizeWidth = false; + autoSizeHeight = true; + justify = "center"; +}; + +new GuiControlProfile ("DebriefHeadlineTextProfile") +{ + fontType = $ShellLabelFont; + fontSize = 28; + fontColor = $ShellColorBright; + autoSizeWidth = false; + autoSizeHeight = true; + tab = false; + canKeyFocus = false; +}; + +new GuiControlProfile ("DebriefTextProfile") +{ + fontType = $ShellFont; + fontSize = $ShellMediumFontSize; + fontColor = "60 180 180"; + fontColors[6] = $PlayerNameColor; + fontColors[7] = $TribeTagColor; + fontColors[8] = $SmurfNameColor; + fontColors[9] = $BotNameColor; + autoSizeWidth = false; + autoSizeHeight = false; + tab = false; + canKeyFocus = false; +}; + +new GuiControlProfile ("ScoreHeaderTextProfile") +{ + fontType = $ShellLabelFont; + fontSize = 28; + fontColor = "0 255 255"; + autoSizeWidth = false; + autoSizeHeight = true; + tab = false; + canKeyFocus = false; +}; + +new GuiControlProfile ("ScoreSubheaderTextProfile") +{ + fontType = $ShellLabelFont; + fontSize = 22; + fontColor = "0 255 255"; + autoSizeWidth = false; + autoSizeHeight = true; + tab = false; + canKeyFocus = false; +}; + +new GuiControlProfile ("ScoreTextProfile") +{ + fontType = $ShellFont; + fontSize = $ShellMediumFontSize; + fontColor = "0 220 220"; + autoSizeWidth = false; + autoSizeHeight = false; + tab = false; + canKeyFocus = false; +}; + +new GuiControlProfile ("ShellTreeViewProfile") +{ + fontType = $ShellFont; + fontSize = $ShellFontSize; + fontColor = "6 245 215"; + fontColorHL = "6 245 215"; + fontColorSEL = "25 68 56"; + bitmapBase = "gui/shll_bar"; + tab = true; + canKeyFocus = true; +}; + +new GuiControlProfile ("ShellBigTextProfile") +{ + fontType = $ShellHeaderFont; + fontSize = $ShellHeaderFontSize; + fontColor = $ShellColorBright; + autoSizeWidth = true; + autoSizeHeight = true; +}; + +new GuiControlProfile ("HudScoreListProfile") +{ + fontType = $ShellFont; + fontSize = $ShellMediumFontSize; + fontColor = "60 180 180"; +}; + +new GuiControlProfile ("GuiHelpBoxProfile") +{ + border = false; + //borderColor = "3 144 156"; + opaque = true; + fillColor = "3 144 156 86"; +}; + +new GuiControlProfile ("GuiHelpTextProfile") +{ + fontType = $ShellFont; + fontSize = $ShellFontSize; + fontColor = "169 215 250"; + autoSizeWidth = false; + autoSizeHeight = false; + justify = "left"; +}; + +new GuiControlProfile ("GuiHelpHeaderProfile") +{ + fontType = $ShellLabelFont; + fontSize = $ShellLabelFontSize; + fontColor = "169 215 250"; + autoSizeWidth = true; + autoSizeHeight = true; + justify = "left"; +}; + +new GuiControlProfile ("GuiVoiceRedProfile") +{ + fontType = $ShellFont; + fontSize = $ShellFontSize; + fontColor = "180 0 0"; + justify = "left"; +}; + +new GuiControlProfile ("GuiVoiceGreenProfile") +{ + fontType = $ShellFont; + fontSize = $ShellFontSize; + fontColor = "0 180 0"; + justify = "left"; +}; + +new GuiControlProfile( "GuiDeathMsgHudProfile" ) +{ + opaque = false; + border = false; + //borderColor = "255 255 0 128"; +}; + +new GuiControlProfile ("GuiTextProfile") +{ + fontType = "Univers"; + fontSize = 16; + fontColor = "0 0 0"; + autoSizeWidth = true; + autoSizeHeight = true; +}; + +new GuiControlProfile ("GuiCenterTextProfile") +{ + fontType = "Univers"; + fontSize = 16; + fontColor = "0 0 0"; + fixedExtent = true; + justify = "center"; +}; + +new GuiControlProfile ("GuiBigTextProfile") +{ + fontType = "Times"; + fontSize = 36; + fontColor = "0 0 0"; + autoSizeWidth = true; + autoSizeHeight = true; +}; + +new GuiControlProfile ("GuiBigTextProfileWhite") +{ + fontType = "Times"; + fontSize = 24; + + fontColor = " 0 0 0"; + fillColor = "255 255 255"; + + fontColorHL = "255 255 255"; + fillColorHL = "0 0 0"; + + autoSizeWidth = true; + autoSizeHeight = true; + + opaque = true; +}; + +new GuiControlProfile("GuiBorderProfile") +{ + border = "true"; + borderColor = "40 205 170"; + opaque = true; + fillColor = "0 64 100 80"; +}; + +new GuiControlProfile("ZoomHudProfile") +{ + border = "true"; + borderColor = "40 205 170"; + opaque = false; + fillColor = "0 64 100 80"; +}; + +new GuiControlProfile("GuiDashBoxProfile") +{ + border = "false"; + opaque = false; +}; + +new GuiControlProfile("GuiDashTextProfile") +{ + fontType = "Univers Condensed"; + fontSize = 16; + fontColor = "154 208 253"; + justify = "center"; +}; + +new GuiControlProfile ("GuiTextBGLeftProfile") +{ + fontType = "Univers Condensed"; + fontSize = 20; + fontColor = "70 235 200"; + justify = "center"; +}; + +new GuiControlProfile ("GuiTextBGCenterProfile") +{ + fontType = "Univers"; + fontSize = 16; + fontColor = "70 235 200"; + justify = "center"; +}; + +new GuiControlProfile ("GuiTextBGRightProfile") +{ + fontType = "Univers"; + fontSize = 16; + fontColor = "70 235 200"; + justify = "right"; +}; + +new GuiControlProfile ("GuiTextBGWhiteRightProfile") +{ + fontType = "Univers Condensed"; + fontSize = 16; + fontColor = "90 255 220"; + justify = "right"; +}; + +new GuiControlProfile ("GuiHelpLineProfile") +{ + borderColor = "231 101 26"; + bitmap = "gui/hud_dot.png"; +}; + +new GuiControlProfile ("GuiTextObjHudCenterProfile") +{ + fontType = "Univers Condensed"; + fontSize = 16; + fontColor = "169 215 250"; + fontColors[6] = $PlayerNameColor; + fontColors[7] = $TribeTagColor; + fontColors[8] = $SmurfNameColor; + fontColors[9] = $BotNameColor; + justify = "center"; +}; + +new GuiControlProfile ("GuiTextObjHudLeftProfile") +{ + fontType = "Univers Condensed"; + fontSize = 16; + fontColor = "169 215 250"; + fontColors[6] = $PlayerNameColor; + fontColors[7] = $TribeTagColor; + fontColors[8] = $SmurfNameColor; + fontColors[9] = $BotNameColor; + justify = "left"; +}; + +new GuiControlProfile ("GuiTextObjGreenLeftProfile") +{ + fontType = "Univers Condensed"; + fontSize = 16; + fontColor = "23 236 67"; + fontColors[6] = $PlayerNameColor; + fontColors[7] = $TribeTagColor; + fontColors[8] = $SmurfNameColor; + fontColors[9] = $BotNameColor; + justify = "left"; +}; + +new GuiControlProfile ("GuiTextObjGreenCenterProfile") +{ + fontType = "Univers Condensed"; + fontSize = 16; + fontColor = "23 236 67"; + fontColors[6] = $PlayerNameColor; + fontColors[7] = $TribeTagColor; + fontColors[8] = $SmurfNameColor; + fontColors[9] = $BotNameColor; + justify = "center"; +}; + +new GuiControlProfile ("DeathMsgTextProfile") +{ + fontType = "Univers"; + fontSize = 14; + fontColor = "40 247 113"; // green + justify = "left"; +}; + +new GuiControlProfile("DebuggerWindowProfile") { + border = "true"; + borderColor = "255 255 255"; + opaque = "true"; + fillColor = "0 0 0"; +}; + +new GuiControlProfile ("GuiTextEditProfile") +{ + opaque = true; + fillColor = "255 255 255"; + fillColorHL = "128 128 128"; + border = true; + borderColor = "0 0 0"; + fontType = "Lucida Console"; + fontSize = 12; + fontColor = "0 0 0"; + fontColorHL = "255 255 255"; + fontColorNA = "128 128 128"; + textOffset = "0 2"; + autoSizeWidth = false; + autoSizeHeight = true; + tab = true; + canKeyFocus = true; +}; + +new GuiControlProfile ("GuiInspectorTextEditProfile") +{ + opaque = true; + fillColor = "255 255 255"; + fillColorHL = "128 128 128"; + border = true; + borderColor = "0 0 0"; + fontType = "Univers"; + fontSize = 16; + fontColor = "0 0 0"; + fontColorHL = "255 255 255"; + autoSizeWidth = false; + autoSizeHeight = true; + tab = false; + canKeyFocus = true; +}; + +new GuiControlProfile ("GuiMessageEditHudProfile") +{ + fontType = "verdana"; + fontSize = 14; + fontColor = "255 255 0"; + cursorColor = "255 205 0"; + autoSizeWidth = false; + autoSizeHeight = true; + tab = false; + canKeyFocus = true; +}; + +new GuiControlProfile ("GuiMessageEditHudTextProfile") +{ + fontType = "verdana"; + fontSize = 14; + fontColor = "255 255 255"; + autoSizeWidth = true; + autoSizeHeight = true; + tab = false; +}; + +new GuiControlProfile("GuiAmmoHudProfile") +{ + fontType = "Univers Condensed"; + fontSize = 16; + fontColor = "169 215 250"; + autoSizeWidth = false; + autoSizeHeight = true; +}; + +new GuiControlProfile("GuiPackTextProfile") +{ + fontType = "Univers"; + fontSize = 12; + fontColor = "169 215 250"; + justify = "center"; + autoSizeWidth = false; + autoSizeHeight = true; +}; + +new GuiControlProfile("GuiTempSpeedProfile") +{ + fontType = "Univers Condensed"; + fontSize = 16; + fontColor = "240 0 240"; + autoSizeWidth = false; + autoSizeHeight = true; +}; + +new GuiControlProfile("GuiRecordingHudProfile") +{ + fontType = "Univers Condensed"; + fontSize = 16; + fontColor = "255 0 0"; + justify = "center"; + autoSizeWidth = false; + autoSizeHeight = true; +}; + +new GuiControlProfile ("GuiChatBackProfile") +{ + bitmapbase = "gui/hud_new_window"; +}; + +new GuiControlProfile ("HudScoreProfile") +{ + bitmap = "gui/hud_new_scorewindow"; + borderColor = "30 59 56"; +}; + +new GuiControlProfile ("HudHelpTagProfile") +{ + borderColor = "231 101 26"; + bitmap = "gui/hud_dot"; +}; + +new GuiControlProfile ("HudVoteBackProfile") +{ + bitmapBase = "gui/hud_new_window_B"; +}; + +new GuiControlProfile ("GuiVMenuProfile") +{ + bitmapBase = "gui/hud_new_window"; + fontType = $ShellFont; + fontSize = $ShellMediumFontSize; +}; + +new GuiControlProfile ("GuiChatHudProfile") +{ + fontType = $ShellFont; + fontSize = $ShellFontSize; + fontColor = "44 172 181"; // default color (death msgs, scoring, inventory) + fontColors[1] = "4 235 105"; // client join/drop, tournament mode + fontColors[2] = "219 200 128"; // gameplay, admin/voting, pack/deployable + fontColors[3] = "77 253 95"; // team chat, spam protection message, client tasks + fontColors[4] = "40 231 240"; // global chat + fontColors[5] = "200 200 50 200"; // used in single player game + // WARNING! Colors 6-9 are reserved for name coloring + autoSizeWidth = true; + autoSizeHeight = true; +}; + +new GuiControlProfile ("GuiHudNavProfile") +{ +// fontType = "Univers Condensed"; +// fontSize = 16; +// fontColor = "255 255 255"; +// autoSizeWidth = false; +// autoSizeHeight = true; + fontColors[6] = $PlayerNameColor; + fontColors[7] = $TribeTagColor; + fontColors[8] = $SmurfNameColor; + fontColors[9] = $BotNameColor; +}; + +new GuiControlProfile ( "GuiHudVoiceMenuProfile" ) +{ + fontType = $ShellFont; + fontSize = $ShellFontSize; + fontColor = "70 235 200"; + justify = "left"; + autoSizeWidth = false; + autoSizeHeight = true; +}; + +new GuiControlProfile ( "GuiHudVoiceCommandProfile" ) +{ + fontType = $ShellFont; + fontSize = $ShellFontSize; + fontColor = "40 205 210"; + justify = "left"; + autoSizeWidth = false; + autoSizeHeight = true; +}; + + +new GuiControlProfile ("GuiCommandMsgHudProfile") +{ + fontType = "Univers Condensed"; + fontSize = 16; + fontColor = "253 221 0"; + autoSizeWidth = false; + autoSizeHeight = true; + tab = false; +}; + +new GuiControlProfile ("GuiButtonProfile") +{ + opaque = true; + fillColor = "232 232 232"; + border = true; + borderColor = "0 0 0"; + borderColorHL = "127 127 127"; + fontType = "Univers Condensed"; + fontSize = 16; + fontColor = "0 0 0"; + fontColorHL = "32 100 100"; + fixedExtent = true; + justify = "center"; + soundButtonDown = sButtonDown; + soundButtonOver = sButtonOver; + canKeyFocus = false; +}; + +new GuiControlProfile ("GuiHudCounterProfile") +{ + opaque = true; + fillColor = "232 232 232"; + border = false; + borderColor = "0 0 0"; + borderColorHL = "127 127 127"; + fontType = $ShellFont; + fontSize = 12; + fontColor = "0 0 0"; + fontColorHL = "32 100 100"; + fixedExtent = true; + justify = "center"; +}; + +new GuiControlProfile ("GuiRadioProfile") +{ + opaque = false; + fillColor = "232 232 232"; + border = false; + borderColor = "0 0 0"; + fontType = "Univers"; + fontSize = 14; + fontColor = "0 0 0"; + fontColorHL = "32 100 100"; + fixedExtent = true; + justify = "center"; +}; + +new GuiControlProfile ("GuiCheckBoxProfile") +{ + opaque = false; + fillColor = "232 232 232"; + border = false; + borderColor = "0 0 0"; + fontType = "Univers"; + fontSize = 14; + fontColor = "0 0 0"; + fontColorHL = "32 100 100"; + fixedExtent = true; + justify = "center"; +}; + +new GuiControlProfile ("GuiPopUpMenuProfile") +{ + opaque = true; + fillColor = "232 232 232"; + border = true; + borderColor = "0 0 0"; + fontType = "Univers"; + fontSize = 14; + fontColor = "0 0 0"; + fontColorHL = "32 100 100"; + fontColorSEL = "32 100 100"; + fixedExtent = true; + justify = "center"; +}; + +new GuiControlProfile ("GuiWindowProfile") +{ + opaque = true; + fillColor = "200 200 200"; + fillColorHL = "64 150 150"; + fillColorNA = "150 150 150"; + fontType = "Univers"; + fontSize = 16; + fontColor = "0 0 0"; + fontColorHL = "0 0 0"; + text = "GuiWindowCtrl test"; + bitmap = "gui/darkWindow"; +}; + +new GuiControlProfile ("GuiScrollCtrlProfile") +{ + border = true; + borderColor = "0 0 0"; + bitmap = "gui/darkScroll"; +}; + +new GuiControlProfile ("GuiScrollContentProfile") +{ + opaque = false; + autoSizeWidth = true; + autoSizeHeight = true; + border = false; + +}; + +new GuiControlProfile ("GuiTreeViewProfile") +{ + fontType = "Lucida Console"; + fontSize = 12; + fontColor = "0 0 0"; + fontColorHL = "64 150 150"; + bitmap = "gui/treeView"; +}; + +new GuiControlProfile ("GuiTextArrayProfile") +{ + fontType = "Univers"; + fontSize = 16; + fontColor = "0 0 0"; + fontColorHL = "32 100 100"; + fillColorHL = "200 200 200"; +}; + +new GuiControlProfile ("GuiConsoleProfile") +{ + fontType = "Lucida Console"; + fontSize = 12; + fontColor = "0 0 0"; + fontColorHL = "130 130 130"; + fontColorNA = "255 0 0"; + fontColors[6] = "50 50 50"; + fontColors[7] = "50 50 0"; + fontColors[8] = "0 0 50"; + fontColors[9] = "0 50 0"; +}; + +new GuiControlProfile ("GuiConsoleTextProfile") +{ + fontType = "Lucida Console"; + fontSize = 12; + fontColor = "0 0 0"; + autoSizeWidth = false; + autoSizeHeight = true; +}; + +new GuiControlProfile("GuiMediumBoldTextProfile") +{ + fontType = "Univers Condensed"; + fontSize = 16; + fontColor = "0 0 0"; + autoSizeWidth = true; + autoSizeHeight = true; +}; + +new GuiControlProfile("EditTSControlProfile") +{ + fontType = "Univers"; + fontSize = 16; + fontColor = "200 200 200"; + autoSizeWidth = true; + autoSizeHeight = true; + fillColor = "255 255 0"; + opaque = "true"; +}; + +new GuiControlProfile("EditorContentProfile") +{ + fontType = "Univers"; + fontSize = 16; + fontColor = "200 200 200"; + autoSizeWidth = true; + autoSizeHeight = true; + fillColor = "220 220 220"; + opaque = "true"; + border = true; + borderColor = "180 180 180"; +}; + +new GuiControlProfile ("ShellProgressBarProfile") +{ + opaque = false; + fillColor = "44 152 162 100"; + border = true; + borderColor = "78 88 120"; +}; + +new GuiControlProfile ("ShellProgressBarTextProfile") +{ + fontType = $ShellLabelFont; + fontSize = $ShellLabelFontSize; + fontColor = "169 215 250"; + justify = "center"; +}; + +new GuiControlProfile ("ShellLoadFrameProfile" ) +{ + border = true; + borderColor = "78 88 120"; +}; + +new GuiControlProfile ("ShellSubHeaderProfile" ) +{ + fontType = "Univers Condensed Bold"; + fontSize = 28; + fontColor = "66 219 234"; + justify = "left"; + autoSizeWidth = true; + autoSizeHeight = true; +}; + +new GuiControlProfile( "DlgBackProfile" ) +{ + opaque = true; + fillColor = "0 0 0 160"; +}; + +new GuiControlProfile( "GuiInputCtrlProfile" ) +{ + tab = true; + canKeyFocus = true; +}; + +new GuiControlProfile( "TesterProfile" ) +{ + border = true; + borderColor = "255 255 0"; +}; + +new GuiControlProfile ("TaskHudProfile") +{ + fontType = $ShellFont; + fontSize = $ShellFontSize; + fontColor = "66 229 244"; + autoSizeWidth = true; + autoSizeHeight = true; + fontColors[1] = "0 200 0 200"; + fontColors[2] = "200 0 0 200"; + fontColors[3] = "0 0 200 200"; + fontColors[6] = $PlayerNameColor; + fontColors[7] = $TribeTagColor; + fontColors[8] = $SmurfNameColor; + fontColors[9] = $BotNameColor; +}; + +new GuiControlProfile ("TaskHudTextProfile") +{ + fontType = $ShellLabelFont; + fontSize = $ShellFontSize; + fontColor = "66 229 244"; + autoSizeWidth = true; + autoSizeHeight = true; +}; + +new GuiControlProfile ("ShellChatMemberListProfile") +{ + fontType = $ShellFont; + fontSize = $ShellFontSize; + fontColor = "60 180 180"; + fontColorHL = "6 245 215"; + fontColorNA = "128 128 128"; + fontColorSEL = "25 68 56"; + fontColors[4] = "255 255 255"; // nick font color + fontColors[5] = "200 255 255"; // nick highlighted color + fontColors[6] = "0 0 0"; // nick selected color + fontColors[7] = "255 255 0"; // tribe font color + fontColors[8] = "200 255 0"; // tribe highlighted color + fontColors[9] = "0 0 255"; // tribe selected color + bitmapBase = "gui/shll_bar"; + tab = true; + canKeyFocus = true; +}; + +new GuiControlProfile ("GuiChannelVectorProfile") +{ + fontType = $ShellFont; + fontSize = $ShellFontSize; + fontColor = "249 250 194"; // default font color + fontColors[1] = "255 255 255"; // nick font color + fontColors[2] = "255 255 0"; // tribe font color + fontColors[3] = "0 200 0"; // server font color + autoSizeWidth = false; + autoSizeHeight = true; +}; + +new GuiControlProfile ("GuiTempHeatProfile") +{ + fontType = $ShellButtonFont; + fontSize = $ShellFontSize; + fontColor = "230 40 230"; + justify = "center"; +}; + +new GuiControlProfile ("GuiBubblePopupProfile") +{ + border = false; + opaque = true; + fillColor = "3 144 156 200"; +}; + +new GuiControlProfile ("GuiBubbleTextProfile") +{ + fontType = $ShellFont; + fontSize = $ShellMediumFontSize; + fontColor = "100 200 200"; + autoSizeWidth = false; + autoSizeHeight = true; +}; + diff --git a/base/gui/helpTextGui.gui b/base/gui/helpTextGui.gui new file mode 100644 index 0000000..7c6545f --- /dev/null +++ b/base/gui/helpTextGui.gui @@ -0,0 +1,347 @@ +new GuiControl(HelpTextGui) { + profile = "GuiContentProfileNoClear"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "0"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + + new ShellFieldCtrl(objHudBox) + { + profile = "GuiChatBackProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "40 365"; + extent = "140 65"; + minExtent = "8 8"; + visible = "1"; + + new GuiTextCtrl(objHudHeader) { + profile = "GuiHelpHeaderProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 1"; + extent = "130 14"; + minExtent = "8 8"; + visible = "1"; + text = "OBJECTIVES"; + }; + new GuiMLTextCtrl(objHudText) { + profile = "GuiHelpTextProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 15"; + extent = "130 45"; + minExtent = "8 8"; + visible = "1"; + lineSpacing = "1"; + }; + }; + new HudHelpTag(objHudLine) { + profile = "GuiHelpLineProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "160 425"; + extent = "5 20"; + flip = "0"; + visible = "1"; + }; + + new ShellFieldCtrl(chatHudBox) { + profile = "GuiChatBackProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "14 85"; + extent = "140 70"; + minExtent = "8 8"; + visible = "1"; + + new GuiTextCtrl(chatHudHeader) { + profile = "GuiHelpHeaderProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 1"; + extent = "130 14"; + minExtent = "8 8"; + visible = "1"; + text = "CHAT"; + }; + new GuiMLTextCtrl(chatHudText) { + profile = "GuiHelpTextProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 15"; + extent = "130 55"; + minExtent = "8 8"; + visible = "1"; + lineSpacing = "1"; + }; + }; + new HudHelpTag(chatHudLine) { + profile = "GuiHelpLineProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "145 75"; + extent = "5 20"; + flip = "1"; + visible = "1"; + }; + + new ShellFieldCtrl(energyHudBox) { + profile = "GuiChatBackProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "320 75"; + extent = "145 85"; + minExtent = "8 8"; + visible = "1"; + + new GuiTextCtrl(energyHudHeader) { + profile = "GuiHelpHeaderProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 1"; + extent = "135 14"; + minExtent = "8 8"; + visible = "1"; + text = "ENERGY"; + }; + new GuiMLTextCtrl(energyHudText) { + profile = "GuiHelpTextProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 15"; + extent = "135 70"; + minExtent = "8 8"; + visible = "1"; + lineSpacing = "1"; + }; + }; + new HudHelpTag(energyHudLine) { + profile = "GuiHelpLineProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "450 35"; + extent = "5 45"; + flip = "1"; + visible = "1"; + }; + + new ShellFieldCtrl(compassHudBox) { + profile = "GuiChatBackProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "480 90"; + extent = "150 100"; + minExtent = "8 8"; + visible = "1"; + lineSpacing = "1"; + + new GuiTextCtrl(compassHudHeader) { + profile = "GuiHelpHeaderProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 1"; + extent = "140 14"; + minExtent = "8 8"; + visible = "1"; + text = "COMPASS"; + }; + new GuiMLTextCtrl(compassHudText) { + profile = "GuiHelpTextProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 15"; + extent = "140 85"; + minExtent = "8 8"; + visible = "1"; + lineSpacing = "1"; + }; + }; + new HudHelpTag(compassHudLine) { + profile = "GuiHelpLineProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "595 80"; + extent = "5 25"; + flip = "1"; + visible = "1"; + }; + + new ShellFieldCtrl(damageHudBox) { + profile = "GuiChatBackProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "280 10"; + extent = "150 50"; + minExtent = "8 8"; + visible = "1"; + lineSpacing = "1"; + + new GuiTextCtrl(damageHudHeader) { + profile = "GuiHelpHeaderProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 1"; + extent = "140 14"; + minExtent = "8 8"; + visible = "1"; + text = "DAMAGE"; + }; + new GuiMLTextCtrl(damageHudText) { + profile = "GuiHelpTextProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 15"; + extent = "140 35"; + minExtent = "8 8"; + visible = "1"; + lineSpacing = "1"; + }; + }; + new HudHelpTag(damageHudLine) { + profile = "GuiHelpLineProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "425 15"; + extent = "25 5"; + flip = "0"; + visible = "1"; + }; + + new GuiControl(reticleTextFrame) { + profile = "GuiHelpTextProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "120 90"; + extent = "400 300"; + visible = "1"; + + new ShellFieldCtrl(reticleHudBox) { + profile = "GuiChatBackProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "20 140"; + extent = "140 70"; + minExtent = "8 8"; + visible = "1"; + lineSpacing = "1"; + + new GuiTextCtrl(reticleHudHeader) { + profile = "GuiHelpHeaderProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 1"; + extent = "130 14"; + minExtent = "8 8"; + visible = "1"; + text = "RETICLE"; + }; + new GuiMLTextCtrl(reticleHudText) { + profile = "GuiHelpTextProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 15"; + extent = "130 55"; + minExtent = "8 8"; + visible = "1"; + lineSpacing = "1"; + }; + }; + new HudHelpTag(reticleHudLine) { + profile = "GuiHelpLineProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "155 145"; + extent = "25 5"; + flip = "0"; + visible = "1"; + }; + }; + + new ShellFieldCtrl(inventoryHudBox) { + profile = "GuiChatBackProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "420 340"; + extent = "140 85"; + minExtent = "8 8"; + visible = "1"; + + new GuiTextCtrl(inventoryHudHeader) { + profile = "GuiHelpHeaderProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 1"; + extent = "130 14"; + minExtent = "8 8"; + visible = "1"; + text = "INVENTORY"; + }; + new GuiMLTextCtrl(inventoryHudText) { + profile = "GuiHelpTextProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 15"; + extent = "130 70"; + minExtent = "8 8"; + visible = "1"; + lineSpacing = "1"; + }; + }; + new HudHelpTag(inventoryHudLine) { + profile = "GuiHelpLineProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "490 420"; + extent = "5 20"; + flip = "0"; + visible = "1"; + }; + + new ShellFieldCtrl(weaponsHudBox) { + profile = "GuiChatBackProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "460 240"; + extent = "140 70"; + minExtent = "8 8"; + visible = "1"; + + new GuiTextCtrl(weaponsHudHeader) { + profile = "GuiHelpHeaderProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 1"; + extent = "130 14"; + minExtent = "8 8"; + visible = "1"; + text = "WEAPONS"; + }; + new GuiMLTextCtrl(weaponsHudText) { + profile = "GuiHelpTextProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 15"; + extent = "135 60"; + minExtent = "8 8"; + visible = "1"; + lineSpacing = "1"; + }; + }; + new HudHelpTag(weaponsHudLine) { + profile = "GuiHelpLineProfile"; + horizSizing = "left"; + vertSizing = "top"; + position = "590 300"; + extent = "20 5"; + flip = "0"; + visible = "1"; + }; +}; + +PlayGui.add(helpTextGui); \ No newline at end of file diff --git a/base/gui/objectBuilderGui.gui b/base/gui/objectBuilderGui.gui new file mode 100644 index 0000000..975f345 --- /dev/null +++ b/base/gui/objectBuilderGui.gui @@ -0,0 +1,645 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(ObjectBuilderGui) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiWindowCtrl(OBTargetWindow) { + profile = "GuiWindowProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "217 74"; + extent = "256 282"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + resizeWidth = "1"; + resizeHeight = "1"; + canMove = "1"; + canClose = "0"; + canMinimize = "0"; + canMaximize = "0"; + minSize = "50 50"; + + new GuiTextCtrl() { + profile = "GuiCenterTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "13 31"; + extent = "84 25"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Object Name:"; + }; + new GuiTextEditCtrl(OBObjectName) { + profile = "GuiTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "105 31"; + extent = "143 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + historySize = "0"; + }; + new GuiControl(OBContentWindow) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "8 56"; + extent = "240 193"; + minExtent = "0 0"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + }; + new GuiButtonCtrl(OBOKButton) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "70 254"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "ObjectBuilderGui.onOK();"; + helpTag = "0"; + text = "OK"; + }; + new GuiButtonCtrl(OBCancelButton) { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "156 254"; + extent = "80 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "ObjectBuilderGui.onCancel();"; + helpTag = "0"; + text = "Cancel"; + }; + }; +}; +//--- OBJECT WRITE END --- + +function ObjectBuilderGui::init(%this) +{ + %this.baseOffsetX = 9; + %this.baseOffsetY = 10; + %this.scriptFile = "editor/newObject.cs"; + %this.defaultObjectName = ""; + %this.defaultFieldStep = 26; + %this.columnOffset = 95; + + %this.fieldNameExtent = "132 18"; + %this.textEditExtent = "127 18"; + %this.checkBoxExtent = "18 18"; + %this.popupMenuExtent = "127 18"; + %this.fileButtonExtent = "127 18"; + + // + %this.numControls = 0; + + %this.reset(); +} + +function ObjectBuilderGui::reset(%this) +{ + %this.curXPos = %this.baseOffsetX; + %this.curYPos = %this.baseOffsetY; + %this.createCallback = ""; + %this.currentControl = 0; + + // + OBObjectName.setValue(%this.defaultObjectName); + + // + %this.newObject = 0; + %this.className = ""; + %this.numFields = 0; + + // + for(%i = 0; %i < %this.numControls; %i++) + { + %this.textControls[%i].delete(); + %this.conrols[%i].delete(); + } + %this.numControls = 0; +} + +//------------------------------------------------------------------------------ + +function ObjectBuilderGui::createFileType(%this, %index) +{ + if(%index >= %this.numFields || %this.field[%index, name] $= "") + { + error("ObjectBuilderGui::createFileType: invalid field"); + return; + } + + // + if(%this.field[%index, text] $= "") + %name = %this.field[%index, name]; + else + %name = %this.field[%index, text]; + + // + %this.textControls[%this.numControls] = new GuiTextCtrl() { + profile = "GuiTextProfile"; + text = %name; + extent = %this.fieldNameExtent; + position = %this.curXPos @ " " @ %this.curYPos; + modal = "1"; + }; + + // + %this.controls[%this.numControls] = new GuiButtonCtrl() { + profile = "GuiButtonProfile"; + extent = %this.fileButtonExtent; + position = %this.curXPos + %this.columnOffset @ " " @ %this.curYPos; + modal = "1"; + command = %this @ ".getFileName(" @ %index @ ");"; + }; + + %val = %this.field[%index, value]; + %this.controls[%this.numControls].setValue(fileBase(%val) @ fileExt(%val)); + + %this.numControls++; + %this.curYPos += %this.defaultFieldStep; +} + +function ObjectBuilderGui::getFileName(%this, %index) +{ + if(%index >= %this.numFields || %this.field[%index, name] $= "") + { + error("ObjectBuilderGui::getFileName: invalid field"); + return; + } + + %val = %this.field[%index, value]; + + %path = filePath(%val); + %ext = fileExt(%val); + + %this.currentControl = %index; + getLoadFilename(%path @ "*" @ %ext, %this @ ".gotFileName"); +} + +function ObjectBuilderGui::gotFileName(%this, %name) +{ + %this.controls[%this.currentControl].setValue(%name); +} + +//------------------------------------------------------------------------------ + +function ObjectBuilderGui::createDataBlockType(%this, %index) +{ + if(%index >= %this.numFields || %this.field[%index, name] $= "") + { + error("ObjectBuilderGui::createDataBlockType: invalid field"); + return; + } + + // + if(%this.field[%index, text] $= "") + %name = %this.field[%index, name]; + else + %name = %this.field[%index, text]; + + // + %this.textControls[%this.numControls] = new GuiTextCtrl() { + profile = "GuiTextProfile"; + text = %name; + extent = %this.fieldNameExtent; + position = %this.curXPos @ " " @ %this.curYPos; + modal = "1"; + }; + + // + %this.controls[%this.numControls] = new GuiPopupMenuCtrl() { + profile = "GuiButtonProfile"; + extent = %this.popupMenuExtent; + position = %this.curXPos + %this.columnOffset @ " " @ %this.curYPos; + modal = "1"; + maxPopupHeight = "200"; + }; + + %classname = getWord(%this.field[%index, value], 0); + + %this.controls[%this.numControls].add("", -1); + + // add the datablocks + for(%i = 0; %i < DataBlockGroup.getCount(); %i++) + { + %obj = DataBlockGroup.getObject(%i); + if(%obj.getClassName() $= %classname) + %this.controls[%this.numControls].add(%obj.getName(), %i); + } + + %this.controls[%this.numControls].setValue(getWord(%this.field[%index, value], 1)); + + %this.numControls++; + %this.curYPos += %this.defaultFieldStep; +} + +function ObjectBuilderGui::createBoolType(%this, %index) +{ + if(%index >= %this.numFields || %this.field[%index, name] $= "") + { + error("ObjectBuilderGui::createBoolType: invalid field"); + return; + } + + // + if(%this.field[%index, value] $= "") + %value = 0; + else + %value = %this.field[%index, value]; + + // + if(%this.field[%index, text] $= "") + %name = %this.field[%index, name]; + else + %name = %this.field[%index, text]; + + // + %this.textControls[%this.numControls] = new GuiTextCtrl() { + profile = "GuiTextProfile"; + text = %name; + extent = %this.fieldNameExtent; + position = %this.curXPos @ " " @ %this.curYPos; + modal = "1"; + }; + + // + %this.controls[%this.numControls] = new GuiCheckBoxCtrl() { + profile = "GuiCheckBoxProfile"; + extent = %this.checkBoxExtent; + position = %this.curXPos + %this.columnOffset @ " " @ %this.curYPos; + modal = "1"; + }; + + %this.controls[%this.numControls].setValue(%value); + + %this.numControls++; + %this.curYPos += %this.defaultFieldStep; +} + +function ObjectBuilderGui::createStringType(%this, %index) +{ + if(%index >= %this.numFields || %this.field[%index, name] $= "") + { + error("ObjectBuilderGui::createStringType: invalid field"); + return; + } + + // + if(%this.field[%index, text] $= "") + %name = %this.field[%index, name]; + else + %name = %this.field[%index, text]; + + // + %this.textControls[%this.numControls] = new GuiTextCtrl() { + profile = "GuiTextProfile"; + text = %name; + extent = %this.fieldNameExtent; + position = %this.curXPos @ " " @ %this.curYPos; + modal = "1"; + }; + + // + %this.controls[%this.numControls] = new GuiTextEditCtrl() { + profile = "GuiTextEditProfile"; + extent = %this.textEditExtent; + text = %this.field[%index, value]; + position = %this.curXPos + %this.columnOffset @ " " @ %this.curYPos; + modal = "1"; + }; + + %this.numControls++; + %this.curYPos += %this.defaultFieldStep; +} + +//------------------------------------------------------------------------------ + +function ObjectBuilderGui::adjustSizes(%this) +{ + if(%this.numControls == 0) + %this.curYPos = 0; + + OBTargetWindow.extent = "256 " @ %this.curYPos + 88; + OBContentWindow.extent = "240 " @ %this.curYPos; + OBOKButton.position = "70 " @ %this.curYPos + 62; + OBCancelButton.position = "156 " @ %this.curYPos + 62; +} + +function ObjectBuilderGui::process(%this) +{ + if(%this.className $= "") + { + error("ObjectBuilderGui::process: classname is not specified"); + return; + } + + OBTargetWindow.setValue("Building Object: " @ %this.className); + + // + for(%i = 0; %i < %this.numFields; %i++) + { + switch$(%this.field[%i, type]) + { + case "TypeBool": + %this.createBoolType(%i); + + case "TypeDataBlock": + %this.createDataBlockType(%i); + + case "TypeFile": + %this.createFileType(%i); + + default: + %this.createStringType(%i); + } + } + + // add the controls + for(%i = 0; %i < %this.numControls; %i++) + { + OBContentWindow.add(%this.textControls[%i]); + OBContentWindow.add(%this.controls[%i]); + } + + // + %this.adjustSizes(); + + // + Canvas.pushDialog(%this); +} + +function ObjectBuilderGui::processNewObject(%this, %obj) +{ + if(%this.createCallback !$= "") + eval(%this.createCallback); + + if(!isObject(wEditor)) + return; + + $InstantGroup.add(%obj); + wEditor.clearSelection(); + wEditor.selectObject(%obj); + wEditor.dropSelection(); +} + +function ObjectBuilderGui::onOK(%this) +{ + // get current values + for(%i = 0; %i < %this.numControls; %i++) + %this.field[%i, value] = %this.controls[%i].getValue(); + + // + %file = new FileObject(); + + %file.openForWrite(%this.scriptFile); + + %file.writeLine(%this @ ".newObject = new " @ %this.className @ "(" @ OBObjectName.getValue() @ ") {"); + + for(%i = 0; %i < %this.numFields; %i++) + %file.writeLine(" " @ %this.field[%i, name] @ " = \"" @ %this.field[%i, value] @ "\";"); + + %file.writeLine("};"); + + %file.close(); + %file.delete(); + + // + exec(%this.scriptFile); + if(%this.newObject != 0) + %this.processNewObject(%this.newObject); + + %this.reset(); + Canvas.popDialog(%this); +} + +function ObjectBuilderGui::onCancel(%this) +{ + %this.reset(); + Canvas.popDialog(%this); +} + +function ObjectBuilderGui::addField(%this, %name, %type, %text, %value) +{ + %this.field[%this.numFields, name] = %name; + %this.field[%this.numFields, type] = %type; + %this.field[%this.numFields, text] = %text; + %this.field[%this.numFields, value] = %value; + + %this.numFields++; +} + +//------------------------------------------------------------------------------ +// Environment +//------------------------------------------------------------------------------ + +function ObjectBuilderGui::buildSky(%this) +{ + %this.className = "Sky"; + + %this.addField("materialList", "TypeFile", "Material list", "Lush_l4.dml"); + %this.addField("cloudSpeed[0]", "TypePoint2", "Cloud0 Speed", "0.0000003 0.0000003"); + %this.addField("cloudSpeed[1]", "TypePoint2", "Cloud1 Speed", "0.0000006 0.0000006"); + %this.addField("cloudSpeed[2]", "TypePoint2", "Cloud2 Speed", "0.0000009 0.0000009"); + %this.addField("cloudHeightPer[0]", "TypeFloat", "Cloud0 Height", "0.349971"); + %this.addField("cloudHeightPer[1]", "TypeFloat", "Cloud1 Height", "0.25"); + %this.addField("cloudHeightPer[2]", "TypeFloat", "Cloud2 Height", "0.199973"); + %this.addField("visibleDistance", "TypeFloat", "Visible distance", "900"); + %this.addField("fogDistance", "TypeFloat", "Fog distance", "600"); + %this.addField("fogColor", "TypeColor", "Fog color", "0.5 0.5 0.5"); + %this.addField("fogVolume1", "TypePoint3", "Fog volume", "120 0 100"); + %this.addField("fogVolume2", "TypePoint3", "Fog volume", "0 0 0"); + %this.addField("fogVolume3", "TypePoint3", "Fog volume", "0 0 0"); + + %this.process(); +} + +function ObjectBuilderGui::buildSun(%this) +{ + %this.className = "Sun"; + + %this.addField("direction", "TypeVector", "Direction", "1 1 -1"); + %this.addField("color", "TypeColor", "Sun color", "0.8 0.8 0.8"); + %this.addField("ambient", "TypeColor", "Ambient color", "0.2 0.2 0.2"); + + %this.process(); +} + +function ObjectBuilderGui::buildLightning(%this) +{ + %this.className = "Lightning"; + + %this.addField("dataBlock", "TypeDataBlock", "Data block", "LightningData DefaultStorm"); + + %this.process(); +} + +function ObjectBuilderGui::buildWater(%this) +{ + %this.className = "WaterBlock"; + + // jff: this object needs some work!! + %this.addField("extent", "TypePoint3", "Extent", "100 100 10"); + %this.addField("textureSize", "TypePoint2", "Texture size", "32 32"); + %this.addField("params[0]", "TypePoint4", "Wave Param0", "0.32 -0.67 0.066 0.5"); + %this.addField("params[1]", "TypePoint4", "Wave Param1", "0.63 -2.41 0.33 0.21"); + %this.addField("params[2]", "TypePoint4", "Wave Param2", "0.39 0.39 0.2 0.133"); + %this.addField("params[3]", "TypePoint4", "Wave Param3", "1.21 -0.61 0.13 -0.33"); + %this.addField("floodFill", "TypeBool", "Flood fill?", "true"); + %this.addField("seedPoints", "TypeString", "Seed points", "0 0 1 0 1 1 0 1"); + + %this.process(); +} + +function ObjectBuilderGui::buildTerrain(%this) +{ + %this.className = "TerrainBlock"; + %this.createCallback = "tEditor.attachTerrain();"; + + %this.addField("terrainFile", "TypeFile", "Terrain file", "terrains/terr1.ter"); + %this.addField("squareSize", "TypeInt", "Square size", "8"); + + %this.process(); +} + +function ObjectBuilderGui::buildAudioEmitter(%this) +{ + %this.className = "AudioEmitter"; + %this.addField("profile", "TypeDataBlock", "Sound Profile", "AudioProfile"); + %this.addField("description", "TypeDataBlock", "Sound Description", "AudioDescription"); + %this.addField("fileName", "TypeFile", "Audio file", ""); + %this.addField("useProfileDescription", "TypeBool", "Use profile's desc?", "false"); + %this.addFIeld("volume", "TypeFloat", "Volume", "1.0"); + %this.addField("isLooping", "TypeBool", "Looping?", "true"); + %this.addField("is3D", "TypeBool", "Is 3D sound?", "true"); + %this.addField("minDistance", "TypeFloat", "Min distance", "20.0"); + %this.addField("maxDistance", "TypeFloat", "Max distance", "100.0"); + %this.addField("coneInsideAngle", "TypeInt", "Cone inside angle", "360"); + %this.addField("coneOutsideAngle", "TypeInt", "Cone outside angle", "360"); + %this.addField("coneOutsideVolume", "TypeFloat", "Cone outside volume", "1.0"); + %this.addField("coneVector", "TypePoint3", "Cone Vector", "0 0 1"); + %this.addField("loopCount", "TypeInt", "Loop count", "-1"); + %this.addField("minLoopGap", "TypeInt", "Min loop gap (ms)", "0"); + %this.addField("maxLoopGap", "TypeInt", "Max loop gap (ms)", "0"); + %this.addField("type", "TypeEnum", "Audio type", "EffectAudioType"); + %this.process(); +} + +function ObjectBuilderGui::buildPrecipitation(%this) +{ + %this.className = "Precipitation"; + %this.addField("nameTag", "TypeString", "Name", ""); + %this.addField("dataBlock", "TypeDataBlock", "Precipitation data", "PrecipitationData"); + %this.process(); +} + +function ObjectBuilderGui::buildParticleEmitter(%this) +{ + %this.className = "ParticleEmissionDummy"; + %this.addField("dataBlock", "TypeDataBlock", "datablock", "ParticleEmissionDummyData"); + %this.addField("emitter", "TypeDataBlock", "Particle data", "ParticleEmitterData"); + %this.process(); +} + +//------------------------------------------------------------------------------ +// Mission +//------------------------------------------------------------------------------ + +function ObjectBuilderGui::buildMissionArea(%this) +{ + %this.className = "MissionArea"; + %this.addField("area", "TypeRect", "Bounding area", "0 0 1024 1024"); + %this.process(); +} + +function ObjectBuilderGui::buildMarker(%this) +{ + %this.className = "Marker"; + %this.process(); +} + +function ObjectBuilderGui::buildForcefield(%this) +{ + %this.className = "ForcefieldBare"; + %this.addField("dataBlock", "TypeDataBlock", "Data Block", "ForceFieldBareData defaultForceFieldBare"); + %this.process(); +} + +function ObjectBuilderGui::buildTrigger(%this) +{ + %this.className = "Trigger"; + %this.addField("dataBlock", "TypeDataBlock", "Data Block", "TriggerData defaultTrigger"); + %this.addField("polyhedron", "TypeTriggerPolyhedron", "Polyhedron", "0 0 0 1 0 0 0 -1 0 0 0 1"); + %this.process(); +} + +function ObjectBuilderGui::buildPhysicalZone(%this) +{ + %this.className = "PhysicalZone"; + %this.addField("polyhedron", "TypeTriggerPolyhedron", "Polyhedron", "0 0 0 1 0 0 0 -1 0 0 0 1"); + %this.process(); +} + +function ObjectBuilderGui::buildCamera(%this) +{ + %this.className = "Camera"; + + %this.addField("position", "TypePoint3", "Position", "0 0 0"); + %this.addField("rotation", "TypePoint4", "Rotation", "1 0 0 0"); + %this.addField("dataBlock", "TypeDataBlock", "Data block", "CameraData Observer"); + %this.addField("team", "TypeInt", "Team", "0"); + + %this.process(); +} + +//------------------------------------------------------------------------------ +// System +//------------------------------------------------------------------------------ + +function ObjectBuilderGui::buildSimGroup(%this) +{ + %this.className = "SimGroup"; + %this.process(); +} + +//------------------------------------------------------------------------------ +// AI +//------------------------------------------------------------------------------ + +function ObjectBuilderGui::buildObjective(%this) +{ + %this.className = "AIObjective"; + %this.process(); +} + +function ObjectBuilderGui::buildNavigationGraph(%this) +{ + %this.className = "NavigationGraph"; + %this.process(); +} diff --git a/base/gui/sceneLightingGui.gui b/base/gui/sceneLightingGui.gui new file mode 100644 index 0000000..3e22b62 --- /dev/null +++ b/base/gui/sceneLightingGui.gui @@ -0,0 +1,63 @@ +//--- OBJECT WRITE BEGIN --- +new GuiControl(SceneLightingGui) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiWindowCtrl() { + profile = "GuiWindowProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "180 180"; + extent = "280 88"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Please wait..."; + resizeWidth = "0"; + resizeHeight = "0"; + canMove = "0"; + canClose = "0"; + canMinimize = "0"; + canMaximize = "0"; + minSize = "50 50"; + + new GuiProgressCtrl() { + profile = "GuiButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "21 51"; + extent = "245 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + variable = "$SceneLighting::lightingProgress"; + value = "0.f"; + modal = "1"; + helpTag = "0"; + }; + new GuiTextCtrl() { + profile = "GuiTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "28 31"; + extent = "231 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "The mission is currently being relit. Please wait."; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Abominable.mis b/base/missions/Abominable.mis new file mode 100644 index 0000000..7bd06eb --- /dev/null +++ b/base/missions/Abominable.mis @@ -0,0 +1,2181 @@ +// MissionTypes = CnH + +//--- MISSION QUOTE BEGIN --- +//I returned, and saw under the sun that the race is not to the swift, nor the battle to the strong. +// -- Ecclesiastes 9:11 +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[CnH]5 towers, each with a control switch +//[CnH]Inventory stations available only in SW, NE and Center strongholds +//[CnH]No vehicle stations +//[CnH]6000 points to win +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + powerCount = "0"; + musicTrack = "ice"; + CnH_timeLimit = "25"; + cdTrack = "5"; + + new MissionArea(MissionArea) { + area = "-600 -808 992 1632"; + flightCeiling = "2000"; + flightCeilingRange = "50"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.600000 0.600000 0.600000 1.000000"; + ambient = "0.200000 0.200000 0.200000 1.000000"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + locked = "true"; + position = "-800 -1272 0"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/snowdet2"; + terrainFile = "Abominable.ter"; + squareSize = "8"; + emptySquares = "272205 337997 338253 338509 338765 379020 379276 379532 379788 380044"; + visibleDistance = "1200"; + hazeDistance = "250"; + locked = "true"; + position = "-1024 -1024 0"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "55"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + coverage = "0"; + rotation = "0 0 0 0"; + XDimOverSize = "0"; + scale = "1 1 1"; + YDimOverSize = "0"; + locked = "true"; + conjoinBowlDev = "20"; + GraphFile = "Abominable.nav"; + position = "0 0 0 1"; + }; + new Sky(Sky) { + position = "-7 5 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "350"; + useSkyTextures = "1"; + SkySolidColor = "0.000000 0.000000 0.000000 0.000000"; + fogDistance = "60"; + fogColor = "0.300000 0.300000 0.300000 1.000000"; + fogVolume1 = "0 0 0"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "sky_ice_starrynight.dml"; + windVelocity = "0.2 0.3 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 0.000000"; + cloudSpeed0 = "0.000000 0.000000"; + locked = "true"; + }; + new Precipitation(Precipitation) { + position = "-7 5 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Snow"; + percentage = "1"; + color1 = "1.000000 1.000000 1.000000 1.000000"; + color2 = "-1.000000 0.000000 0.000000 1.000000"; + color3 = "-1.000000 0.000000 0.000000 1.000000"; + offsetSpeed = "0.25"; + minVelocity = "0.25"; + maxVelocity = "1.5"; + maxNumDrops = "2000"; + maxRadius = "125"; + locked = "true"; + }; + new SimGroup(ObserverDropPoints) { + powerCount = "0"; + + new Camera() { + position = "-250.532 -28.1269 324.446"; + rotation = "0 0 1 91.6732"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-390.444 355.562 282.257"; + rotation = "0 0 1 127.77"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "27.4937 -414.298 259.053"; + rotation = "0 0 -1 29.2208"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "110.969 622.584 76.7643"; + rotation = "0 0 1 169.023"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-348.818 -661.477 227.675"; + rotation = "-0.0687343 -0.207967 0.975718 215.747"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + powerCount = "0"; + + new SimGroup(Team1) { + powerCount = "0"; + + new SimGroup(spawnspheres) { + powerCount = "0"; + + new SpawnSphere() { + position = "-218.097 -655.998 181.778"; + rotation = "0 0 -1 80.2141"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new SimGroup(AIObjectives) { + powerCount = "0"; + + new SimGroup(Tower5) { + powerCount = "0"; + + new AIObjective(AIOTouchObject) { + position = "-391.639 -689.494 211.654"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0flipflop5"; + mode = "TouchFlipFlop"; + targetObject = "Team0flipflop5"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-391.639 -689.494 211.654"; + weightLevel1 = "5000"; + weightLevel2 = "3000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "Light EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3289"; + team = "1"; + isInvalid = "0"; + }; + new AIObjective(AIODefendLocation) { + position = "-391.639 -689.494 211.654"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the FlipFlop"; + targetObject = "Team0flipflop5"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-391.639 -689.494 211.654"; + weightLevel1 = "4900"; + weightLevel2 = "2900"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "MediumShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3289"; + team = "1"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-389.162 -685.697 203.984"; + rotation = "0 0 -1 89.3814"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-389.162 -685.697 203.984"; + weightLevel1 = "4950"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3289"; + team = "1"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-393.239 -700.595 209.593"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-393.239 -700.595 209.593"; + weightLevel1 = "4949"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3289"; + team = "1"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-390.81 -704.636 186.451"; + rotation = "0 0 1 87.0896"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-390.81 -704.636 186.451"; + weightLevel1 = "4951"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3289"; + team = "1"; + isInvalid = "0"; + }; + }; + new SimGroup(Tower3) { + powerCount = "0"; + + new AIObjective(AIODefendLocation) { + position = "-161.64 -23.2113 296.991"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the FlipFlop"; + targetObject = "Team0flipflop3"; + targetClientId = "-1"; + targetObjectId = "3344"; + location = "-161.64 -23.2113 296.991"; + weightLevel1 = "4750"; + weightLevel2 = "2750"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "MediumShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3295"; + team = "1"; + isInvalid = "0"; + }; + new AIObjective(AIOTouchObject) { + position = "-161.64 -23.2113 296.991"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0flipflop3"; + mode = "TouchFlipFlop"; + targetObject = "Team0flipflop3"; + targetClientId = "-1"; + targetObjectId = "3344"; + location = "-161.64 -23.2113 296.991"; + weightLevel1 = "4800"; + weightLevel2 = "2800"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "Light EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3295"; + team = "1"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-170.462 -13.963 295.049"; + rotation = "0 0 -1 45.8366"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-170.462 -13.963 295.049"; + weightLevel1 = "4790"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3295"; + team = "1"; + isInvalid = "0"; + }; + }; + new AIObjective(AIORepairObject) { + position = "-400.782 -678.349 202.8"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3384"; + location = "-400.782 -678.349 202.8"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "-400.786 -743.235 177.141"; + rotation = "0.934206 0.0373881 -0.354769 12.8727"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3382"; + location = "-400.786 -743.235 177.141"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "-213.61 40.0348 274.617"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3348"; + location = "-213.61 40.0348 274.617"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "-181.193 -45.5791 277.315"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3351"; + location = "-181.193 -45.5791 277.315"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "-377.992 -689.852 207.84"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SentryTurret"; + targetObject = "Team0SentryTurret3"; + targetClientId = "-1"; + targetObjectId = "3380"; + location = "-377.992 -689.852 207.84"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "-158.359 -20.7588 315.022"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SensorMediumPulse"; + targetObject = "Team0SensorMediumPulse1"; + targetClientId = "-1"; + targetObjectId = "3353"; + location = "-158.359 -20.7588 315.022"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + isInvalid = "0"; + }; + new AIObjective(AIOTouchObject) { + position = "120.531 595.532 61.3005"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0flipflop1"; + mode = "TouchFlipFlop"; + targetObject = "Team0flipflop1"; + targetClientId = "-1"; + targetObjectId = "3357"; + location = "120.531 595.532 61.3005"; + weightLevel1 = "4000"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "Light EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "107.036 595.662 57.4869"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SentryTurret"; + targetObject = "Team0SentryTurret2"; + targetClientId = "-1"; + targetObjectId = "3358"; + location = "107.036 595.662 57.4869"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + isInvalid = "0"; + }; + new AIObjective(AIOTouchObject) { + position = "23.5983 -395.053 240.566"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0flipflop4"; + mode = "TouchFlipFlop"; + targetObject = "Team0flipflop4"; + targetClientId = "-1"; + targetObjectId = "3373"; + location = "23.5983 -395.053 240.566"; + weightLevel1 = "4900"; + weightLevel2 = "2900"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "Light EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "130.099 589.492 36.2003"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the GeneratorLarge"; + targetObject = "Team0generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3359"; + location = "130.099 589.492 36.2003"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "130.102 648.963 26.1874"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3360"; + location = "130.102 648.963 26.1874"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + isInvalid = "0"; + }; + new AIObjective(AIOTouchObject) { + position = "-366.433 349.044 279.604"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0flipflop2"; + mode = "TouchFlipFlop"; + targetObject = "Team0flipflop2"; + targetClientId = "-1"; + targetObjectId = "3368"; + location = "-366.433 349.044 279.604"; + weightLevel1 = "4500"; + weightLevel2 = "2500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "Light EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "129.399 584.373 52.4464"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3362"; + location = "129.399 584.373 52.4464"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + isInvalid = "0"; + }; + }; + }; + new SimGroup(Team2) { + powerCount = "0"; + + new SimGroup(spawnspheres) { + powerCount = "0"; + + new SpawnSphere() { + position = "141.736 342.935 94.4046"; + rotation = "0 0 1 89.3814"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new SimGroup(AIObjectives) { + powerCount = "0"; + + new SimGroup(Tower3) { + powerCount = "0"; + + new AIObjective(AIODefendLocation) { + position = "-161.64 -23.2113 296.991"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the FlipFlop"; + targetObject = "Team0flipflop3"; + targetClientId = "-1"; + targetObjectId = "3344"; + location = "-161.64 -23.2113 296.991"; + weightLevel1 = "4750"; + weightLevel2 = "2750"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "MediumShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3316"; + team = "2"; + isInvalid = "0"; + }; + new AIObjective(AIOTouchObject) { + position = "-161.64 -23.2113 296.991"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0flipflop3"; + mode = "TouchFlipFlop"; + targetObject = "Team0flipflop3"; + targetClientId = "-1"; + targetObjectId = "3344"; + location = "-161.64 -23.2113 296.991"; + weightLevel1 = "4800"; + weightLevel2 = "2800"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "Light EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3316"; + team = "2"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-154.08 -29.4053 295.085"; + rotation = "0 0 1 132.353"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-154.08 -29.4053 295.085"; + weightLevel1 = "4790"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3316"; + team = "2"; + isInvalid = "0"; + }; + }; + new AIObjective(AIOTouchObject) { + position = "-391.639 -689.494 211.654"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0flipflop5"; + mode = "TouchFlipFlop"; + targetObject = "Team0flipflop5"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-391.639 -689.494 211.654"; + weightLevel1 = "4000"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "Light EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "-400.786 -743.235 177.141"; + rotation = "0.934206 0.0373881 -0.354769 12.8727"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3382"; + location = "-400.786 -743.235 177.141"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "-213.61 40.0348 274.617"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3348"; + location = "-213.61 40.0348 274.617"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + isInvalid = "0"; + }; + new SimGroup(Tower1) { + powerCount = "0"; + + new AIObjective(AIODefendLocation) { + position = "120.531 595.532 61.3005"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the FlipFlop"; + targetObject = "Team0flipflop1"; + targetClientId = "-1"; + targetObjectId = "3357"; + location = "120.531 595.532 61.3005"; + weightLevel1 = "5000"; + weightLevel2 = "3000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "MediumShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3323"; + team = "2"; + isInvalid = "0"; + }; + new AIObjective(AIOTouchObject) { + position = "120.531 595.532 61.3005"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0flipflop1"; + mode = "TouchFlipFlop"; + targetObject = "Team0flipflop1"; + targetClientId = "-1"; + targetObjectId = "3357"; + location = "120.531 595.532 61.3005"; + weightLevel1 = "4950"; + weightLevel2 = "2950"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "Light EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3323"; + team = "2"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "118.059 590.475 53.3606"; + rotation = "0 0 1 89.3814"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "118.059 590.475 53.3606"; + weightLevel1 = "4951"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3323"; + team = "2"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "123.533 584.182 59.2442"; + rotation = "0 0 1 179.336"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "123.533 584.182 59.2442"; + weightLevel1 = "4950"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3323"; + team = "2"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "124.983 610.647 36.895"; + rotation = "0 0 1 90.5273"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "124.983 610.647 36.895"; + weightLevel1 = "4949"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3323"; + team = "2"; + isInvalid = "0"; + }; + }; + new AIObjective(AIORepairObject) { + position = "107.036 595.662 57.4869"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SentryTurret"; + targetObject = "Team0SentryTurret2"; + targetClientId = "-1"; + targetObjectId = "3358"; + location = "107.036 595.662 57.4869"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "130.099 589.492 36.2003"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the GeneratorLarge"; + targetObject = "Team0generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3359"; + location = "130.099 589.492 36.2003"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + isInvalid = "0"; + }; + new AIObjective(AIOTouchObject) { + position = "23.5983 -395.053 240.566"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0flipflop4"; + mode = "TouchFlipFlop"; + targetObject = "Team0flipflop4"; + targetClientId = "-1"; + targetObjectId = "3373"; + location = "23.5983 -395.053 240.566"; + weightLevel1 = "4500"; + weightLevel2 = "2500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "Light EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "130.102 648.963 26.1874"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3360"; + location = "130.102 648.963 26.1874"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + isInvalid = "0"; + }; + new AIObjective(AIOTouchObject) { + position = "-366.433 349.044 279.604"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0flipflop2"; + mode = "TouchFlipFlop"; + targetObject = "Team0flipflop2"; + targetClientId = "-1"; + targetObjectId = "3368"; + location = "-366.433 349.044 279.604"; + weightLevel1 = "4900"; + weightLevel2 = "2900"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "Light EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "129.399 584.373 52.4464"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3362"; + location = "129.399 584.373 52.4464"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "-181.193 -45.5791 277.315"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3351"; + location = "-181.193 -45.5791 277.315"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "-401.019 -683.641 186.553"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the GeneratorLarge"; + targetObject = "Team0generatorLarge3"; + targetClientId = "-1"; + targetObjectId = "3381"; + location = "-401.019 -683.641 186.553"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "-400.782 -678.349 202.8"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3384"; + location = "-400.782 -678.349 202.8"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "-377.992 -689.852 207.84"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SentryTurret"; + targetObject = "Team0SentryTurret3"; + targetClientId = "-1"; + targetObjectId = "3380"; + location = "-377.992 -689.852 207.84"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "-158.359 -20.7588 315.022"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SensorMediumPulse"; + targetObject = "Team0SensorMediumPulse1"; + targetClientId = "-1"; + targetObjectId = "3353"; + location = "-158.359 -20.7588 315.022"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + isInvalid = "0"; + }; + }; + }; + new SimGroup(Team0) { + powerCount = "0"; + + new SimGroup(Towers) { + powerCount = "0"; + + new SimGroup(CentralTower) { + powerCount = "1"; + + new InteriorInstance() { + position = "-162.978 -21.8106 241.224"; + rotation = "0 0 1 45"; + scale = "1 1 1"; + interiorFile = "stowr6.dif"; + showTerrainInside = "0"; + team = "0"; + locked = "true"; + }; + new StaticShape(Team0flipflop3) { + position = "-161.64 -23.2113 294.724"; + rotation = "0 0 1 47.5555"; + scale = "1 1 1"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + Target = "33"; + name = "Center Tower"; + team = "0"; + locked = "true"; + Projector = "3349"; + }; + new StaticShape(Team0StationInventory1) { + position = "-163.264 -21.4939 304.23"; + rotation = "0 0 -1 45.2636"; + scale = "1 1 1"; + nameTag = "Ctr. Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "34"; + team = "0"; + locked = "true"; + Trigger = "3346"; + }; + new InteriorInstance() { + position = "-208.975 36.6553 261.907"; + rotation = "0 0 -1 51.5662"; + scale = "1 1 1"; + interiorFile = "smisc1.dif"; + showTerrainInside = "0"; + team = "0"; + locked = "true"; + }; + new Turret(Team0TurretBaseLarge1) { + position = "-212.918 39.7529 272.913"; + rotation = "0 0 -1 50.4203"; + scale = "1 1 1"; + nameTag = "Center Tower"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + Target = "35"; + lastProjectile = "3951"; + team = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-164.566 -26.1453 312.696"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + team = "0"; + holo = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-181.348 -45.1196 272.111"; + rotation = "0 0 1 17.1887"; + scale = "1 1 2.28969"; + interiorFile = "smisc3.dif"; + showTerrainInside = "0"; + team = "0"; + locked = "true"; + }; + new Turret(Team0TurretBaseLarge2) { + position = "-181.202 -44.8315 275.611"; + rotation = "0 0 1 196.707"; + scale = "1 1 1"; + nameTag = "Center Tower"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + Target = "36"; + lastProjectile = "3921"; + team = "0"; + damageTimeMS = "770705"; + locked = "true"; + }; + new StaticShape(Team0generatorLarge1) { + position = "-169.883 -31.5901 -296.777"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Ctr. Tower"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + Target = "37"; + team = "0"; + locked = "true"; + }; + new StaticShape(Team0SensorMediumPulse1) { + position = "-158.359 -20.7588 312.502"; + rotation = "0 0 -1 45.2637"; + scale = "1 1 1"; + nameTag = "Ctr. Tower"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + Target = "38"; + team = "0"; + locked = "true"; + }; + new WayPoint() { + position = "-161.6 -23.2 294.7"; + rotation = "1 0 0 0"; + scale = "0.1 0.1 0.1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Center Tower"; + team = "0"; + locked = "true"; + }; + }; + new SimGroup(NETower) { + powerCount = "1"; + + new InteriorInstance() { + position = "118.473 643.445 47.8483"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "sbunk9.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_Pulse_2"; + team = "0"; + locked = "true"; + }; + new StaticShape(Team0flipflop1) { + position = "120.531 595.532 58.8337"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + Target = "39"; + name = "NE Holdfast"; + team = "0"; + locked = "true"; + Projector = "3365"; + }; + new Turret(Team0SentryTurret2) { + position = "107.066 595.662 57.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "NE Sentry"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + Target = "40"; + team = "0"; + locked = "false"; + }; + new StaticShape(Team0generatorLarge2) { + position = "129.834 591.431 34.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "NE Holdfast"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + Target = "41"; + team = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory2) { + position = "130.462 649.096 25.825"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "NE Holdfast"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "42"; + team = "0"; + locked = "false"; + Trigger = "3361"; + }; + new StaticShape(Team0StationInventory3) { + position = "129.399 584.373 50.8806"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "NE Holdfast"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "43"; + team = "0"; + locked = "true"; + Trigger = "3363"; + }; + new WayPoint() { + position = "120.936 595.731 59.6705"; + rotation = "1 0 0 0"; + scale = "0.1 0.1 0.1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "NE Holdfast"; + team = "0"; + locked = "true"; + }; + new StaticShape() { + position = "116.463 595.156 67.84"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + team = "0"; + holo = "0"; + locked = "true"; + }; + }; + new SimGroup(NWTower) { + powerCount = "0"; + + new InteriorInstance() { + position = "-366.454 349.007 286.226"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "stowr1.dif"; + showTerrainInside = "0"; + team = "0"; + locked = "true"; + }; + new StaticShape(Team0flipflop2) { + position = "-366.433 349.044 277.2"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + Target = "44"; + name = "NW Outpost"; + team = "0"; + locked = "true"; + Projector = "3371"; + }; + new WayPoint() { + position = "-366.485 348.997 277.3"; + rotation = "1 0 0 0"; + scale = "0.1 0.1 0.1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "NW Outpost"; + team = "0"; + locked = "true"; + }; + new Item() { + position = "-369.308 346.147 277.649"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + team = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-366.51 344.833 295.149"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + team = "0"; + holo = "0"; + locked = "true"; + }; + }; + new SimGroup(SETower) { + powerCount = "0"; + + new StaticShape(Team0flipflop4) { + position = "23.5917 -395.062 238.18"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + Target = "45"; + name = "SE Outpost"; + team = "0"; + locked = "false"; + Projector = "3376"; + }; + new WayPoint() { + position = "23.0428 -395.374 238.543"; + rotation = "1 0 0 0"; + scale = "0.1 0.1 0.1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "SE Outpost"; + team = "0"; + locked = "true"; + }; + new Item() { + position = "20.6751 -397.497 239.254"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + team = "0"; + locked = "true"; + }; + new StaticShape() { + position = "23.6405 -390.683 256.234"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + team = "0"; + holo = "0"; + locked = "true"; + }; + }; + new SimGroup(SWTower) { + powerCount = "1"; + + new InteriorInstance() { + position = "-389.505 -737.616 198.201"; + rotation = "0 0 1 180.091"; + scale = "1 1 1"; + interiorFile = "sbunk9.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_Pulse_2"; + team = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-387.637 -689.558 218.178"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + team = "0"; + holo = "0"; + locked = "true"; + }; + new Turret(Team0SentryTurret3) { + position = "-378.082 -689.873 208.25"; + rotation = "0 0 1 180.091"; + scale = "1 1 1"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + Target = "46"; + name = "SW Sentry"; + team = "0"; + locked = "true"; + }; + new StaticShape(Team0generatorLarge3) { + position = "-400.723 -685.512 185.17"; + rotation = "0 0 1 180.091"; + scale = "1 1 1"; + nameTag = "SW Holdfast"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + Target = "47"; + team = "0"; + locked = "false"; + }; + new StaticShape(Team0StationInventory4) { + position = "-401.372 -743.023 176.18"; + rotation = "0 0 1 180.091"; + scale = "1 1 1"; + nameTag = "SW Holdfast"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "48"; + team = "0"; + locked = "false"; + Trigger = "3383"; + }; + new StaticShape(Team0StationInventory5) { + position = "-400.782 -678.349 201.234"; + rotation = "0 0 -1 89.9546"; + scale = "1 1 1"; + nameTag = "SW Holdfast"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "49"; + team = "0"; + locked = "true"; + Trigger = "3385"; + }; + new WayPoint() { + position = "-391.892 -689.898 210.023"; + rotation = "0 0 1 180.091"; + scale = "0.1 0.1 0.1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "SW Holdfast"; + team = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "23.5804 -395.084 247.252"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "stowr1.dif"; + showTerrainInside = "0"; + team = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-391.658 -689.443 209.2"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + Target = "50"; + name = "SW Holdfast"; + team = "0"; + locked = "true"; + Projector = "3379"; + }; + }; + }; + new SimGroup(AIObjectives) { + powerCount = "0"; + }; + }; + }; + new SimGroup(Ambiance) { + powerCount = "0"; + + new AudioEmitter() { + position = "-373.953 249.267 289.156"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/yeti_howl2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "35"; + maxDistance = "320"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "15000"; + maxLoopGap = "50000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "144.789 -205.873 223.555"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/yeti_howl1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "50"; + maxDistance = "320"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "20000"; + maxLoopGap = "90000"; + type = "EffectAudioType"; + locked = "true"; + }; + new TSStatic() { + position = "-400.245 -700.86 209.15"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-398.046 -701.039 209.15"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-395.778 -701.012 209.15"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-402.194 -702.324 185.16"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable2m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-399.394 -711.816 178.2"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "127.939 584.318 58.83"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "false"; + }; + new TSStatic() { + position = "131.917 608.565 36.2812"; + rotation = "0 1 0 89.9544"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "114.064 618.356 27.8"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new AudioEmitter() { + position = "-172.226 1.5731 214.415"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/snowfall1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "2"; + maxDistance = "128"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "30000"; + maxLoopGap = "90000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-382.503 294.96 230.758"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/snowfall2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "2"; + maxDistance = "128"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "40000"; + maxLoopGap = "70000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-243.602 418.998 208.977"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/snowfall2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "2"; + maxDistance = "128"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "40000"; + maxLoopGap = "60000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-4.0336 398.055 173.337"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/snowfall3.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "2"; + maxDistance = "128"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "50000"; + maxLoopGap = "100000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "147.112 -175.402 196.443"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/snowfall4.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "2"; + maxDistance = "128"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "30000"; + maxLoopGap = "80000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-53.5541 -648.86 189.947"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/snowfall2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "2"; + maxDistance = "128"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "30000"; + maxLoopGap = "70000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-430.373 -487.692 220.858"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/snowfall1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "2"; + maxDistance = "128"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "40000"; + maxLoopGap = "60000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-176.563 -130.659 182.02"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/snowstorm2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new InteriorInstance() { + position = "-181.248 -40.0703 275.725"; + rotation = "1 0 0 0"; + scale = "1.86326 1.99497 1.3283"; + interiorFile = "srock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-175.444 -42.2114 275.164"; + rotation = "0 0 -1 6.8755"; + scale = "1.38638 1.22864 1.49185"; + interiorFile = "srock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/AgentsOfFortune.mis b/base/missions/AgentsOfFortune.mis new file mode 100644 index 0000000..fd45b42 --- /dev/null +++ b/base/missions/AgentsOfFortune.mis @@ -0,0 +1,989 @@ +// DisplayName = Agents of Fortune +// MissionTypes = DM Hunters TeamHunters + +//--- MISSION QUOTE BEGIN --- +//Don't fear the Reaper. Fear me. +// -- Gir Draxon, Leader of the Hordes, 3941 CE +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[Hunters TeamHunters]Nexus located atop central tower +//Three satellite towers around central tower +//Inventory stations in all towers +//Ideal for combined indoor/outdoor combat tactics +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + powerCount = "0"; + DM_timeLimit = "25"; + Hunters_timeLimit = "25"; + Team_Hunters_timeLimit = "25"; + musicTrack = "badlands"; + DM_scoreLimit = "25"; + cdTrack = "4"; + + new MissionArea(MissionArea) { + area = "-160 -88 512 512"; + flightCeiling = "2000"; + flightCeilingRange = "50"; + locked = "true"; + }; + new Sky(Sky) { + position = "0 0 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "600"; + useSkyTextures = "1"; + renderBottomTexture = "0"; + SkySolidColor = "0.390000 0.390000 0.390000 0.000000"; + fogDistance = "200"; + fogColor = "0.500000 0.500000 0.500000 1.000000"; + fogVolume1 = "0 0 0"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "Badlands_l4.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 nan"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 148120713330651839000000000000000000000.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 nan"; + locked = "true"; + cloudSpeed0 = "0.000000 0.000000"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.600000 0.600000 0.600000 1.000000"; + ambient = "0.600000 0.600000 0.600000 1.000000"; + position = "0 0 0"; + locked = "true"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/baddet2"; + terrainFile = "AgentsOfFortune.ter"; + squareSize = "8"; + emptySquares = "227741 227997 228253 167567 233359 102521 233615 233847 234103 173209 239000 239256"; + position = "-1024 -1024 0"; + locked = "true"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "45"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + position = "0 0 0 1"; + XDimOverSize = "0"; + locked = "true"; + rotation = "0 0 0 0"; + conjoinBowlDev = "20"; + scale = "1 1 1"; + coverage = "0"; + YDimOverSize = "0"; + GraphFile = "AgentsOfFortune.nav"; + }; + new SimGroup(ObserverDropPoints) { + powerCount = "0"; + + new Camera() { + position = "170.145 354.633 306.299"; + rotation = "0 0 1 163.866"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-67.104 229.883 260.502"; + rotation = "0 0 1 131.78"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "291.408 -23.0707 255.214"; + rotation = "0 0 -1 49.2744"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + powerCount = "0"; + + new SimGroup(Team1) { + powerCount = "0"; + + new SimGroup(spawnspheres) { + powerCount = "0"; + + new SpawnSphere() { + position = "120.543 125.555 178.74"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "225"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + missionTypesList = "Hunters TeamHunters DM"; + }; + }; + new SimGroup(AIObjectives) { + powerCount = "0"; + + new AIObjective(AIORepairObject) { + position = "206.155 290.506 238.077"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team1StationInventory1"; + targetClientId = "-1"; + targetObjectId = "5763"; + location = "206.155 290.506 238.077"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + gameType = "all"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIORepairObject) { + position = "199.076 306.979 274.076"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team1StationInventory2"; + targetClientId = "-1"; + targetObjectId = "5765"; + location = "199.076 306.979 274.076"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + gameType = "all"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-54.5328 142.977 234.564"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team1StationInventory3"; + targetClientId = "-1"; + targetObjectId = "5767"; + location = "-54.5328 142.977 234.564"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + gameType = "all"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-61.6912 133.365 198.742"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team1StationInventory4"; + targetClientId = "-1"; + targetObjectId = "5769"; + location = "-61.6912 133.365 198.742"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + gameType = "all"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIORepairObject) { + position = "132.621 170.206 141.512"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team1StationInventory5"; + targetClientId = "-1"; + targetObjectId = "5771"; + location = "132.621 170.206 141.512"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + gameType = "all"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIORepairObject) { + position = "242.229 -55.9849 184.697"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team1StationInventory6"; + targetClientId = "-1"; + targetObjectId = "5773"; + location = "242.229 -55.9849 184.697"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + gameType = "all"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIORepairObject) { + position = "132.35 81.4307 123.601"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team1StationInventory7"; + targetClientId = "-1"; + targetObjectId = "5775"; + location = "132.35 81.4307 123.601"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + gameType = "all"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIORepairObject) { + position = "249.2 -47.0356 220.655"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team1StationInventory8"; + targetClientId = "-1"; + targetObjectId = "5777"; + location = "249.2 -47.0356 220.655"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + gameType = "all"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIORepairObject) { + position = "132.247 133.472 42.4322"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team1StationInventory9"; + targetClientId = "-1"; + targetObjectId = "5779"; + location = "132.247 133.472 42.4322"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + gameType = "all"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIORepairObject) { + position = "132.537 114.232 42.4282"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team1StationInventory10"; + targetClientId = "-1"; + targetObjectId = "5781"; + location = "132.537 114.232 42.4282"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + gameType = "all"; + isInvalid = "0"; + team = "1"; + }; + }; + }; + new SimGroup(Team2) { + powerCount = "0"; + + new SimGroup(spawnspheres) { + powerCount = "0"; + + new SpawnSphere() { + position = "120.543 125.555 178.74"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "225"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + missionTypesList = "TeamHunters"; + }; + }; + }; + new SimGroup(team0) { + powerCount = "0"; + + new SimGroup(base) { + powerCount = "1"; + providesPower = "1"; + + new InteriorInstance() { + position = "131.064 125.94 99.8275"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "xtowr7.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_Pulse_1"; + locked = "true"; + team = "0"; + }; + new InteriorInstance() { + position = "-61.9873 145.333 208.013"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "xtowr3.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_Pulse_1"; + locked = "true"; + team = "0"; + }; + new InteriorInstance() { + position = "203.206 303.487 247.408"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "xtowr3.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_Pulse_1"; + locked = "true"; + team = "0"; + }; + new StaticShape(Team1StationInventory1) { + position = "203.105 290.287 236.41"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "NE Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "33"; + Trigger = "3361"; + team = "0"; + }; + new StaticShape(Team1StationInventory2) { + position = "196.076 306.979 272.41"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "NE Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "34"; + Trigger = "3363"; + team = "0"; + }; + new StaticShape(Team1StationInventory3) { + position = "-54.7328 141.777 233.01"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "West Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "35"; + Trigger = "3365"; + team = "0"; + }; + new StaticShape(Team1StationInventory4) { + position = "-61.8912 132.165 197.01"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "West Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "36"; + Trigger = "3367"; + team = "0"; + }; + new StaticShape(Team1StationInventory5) { + position = "131.421 170.206 139.83"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Tower Pod"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "37"; + Trigger = "3369"; + team = "0"; + }; + new StaticShape(Team1StationInventory6) { + position = "242.042 -53.8823 182.9"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "SE Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "38"; + Trigger = "3371"; + team = "0"; + }; + new StaticShape(Team1StationInventory7) { + position = "131.15 81.4307 121.83"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "Tower Pod"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "39"; + Trigger = "3373"; + team = "0"; + }; + new StaticShape(Team1StationInventory8) { + position = "249.4 -44.2356 218.9"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "SE Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "40"; + Trigger = "3375"; + team = "0"; + }; + new StaticShape(Team1StationInventory9) { + position = "131.047 133.472 40.825"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "Center Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "41"; + Trigger = "3377"; + team = "0"; + }; + new StaticShape(Team1StationInventory10) { + position = "131.293 114.234 40.825"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Center Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "42"; + Trigger = "3379"; + team = "0"; + }; + new InteriorInstance() { + position = "242.199 -41.2332 193.901"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "xtowr3.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_Pulse_1"; + locked = "true"; + team = "0"; + }; + }; + }; + }; + new Item(Nexus) { + position = "130.989 125.937 160.988"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Nexus"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + missionTypesList = "Hunters TeamHunters"; + Target = "43"; + flashThreadDir = "1"; + }; + new StaticShape() { + position = "130.989 125.937 168.77"; + rotation = "1 0 0 0"; + scale = "0.7 0.7 1"; + dataBlock = "NexusCap"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + missionTypesList = "Hunters TeamHunters"; + Target = "-1"; + }; + new StaticShape() { + position = "130.989 125.937 162.77"; + rotation = "1 0 0 0"; + scale = "0.7 0.7 1"; + dataBlock = "NexusBase"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + missionTypesList = "Hunters TeamHunters"; + Target = "-1"; + }; + new WayPoint() { + position = "130.623 125.532 162.74"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Nexus"; + team = "0"; + locked = "true"; + missionTypesList = "Hunters TeamHunters"; + }; + new WayPoint() { + position = "130.623 125.532 163.74"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Tower"; + team = "0"; + locked = "true"; + missionTypesList = "DM"; + }; + new Trigger(NexusTrigger) { + position = "116.023 141.332 149.54"; + rotation = "1 0 0 0"; + scale = "30 30 27.2131"; + dataBlock = "gameTrigger"; + polyhedron = "0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000 -0.0000000 -0.0000000 1.0000000 -0.0000000 -1.0000000 -0.0000000"; + locked = "true"; + missionTypesList = "Hunters TeamHunters"; + }; + new SimGroup(RandomOrganics) { + powerCount = "0"; + + new SimGroup(Addition5BiodermPlant5) { + powerCount = "0"; + + new TSStatic() { + position = "269.5 -33.5 187.748"; + rotation = "0 0 -1 117"; + scale = "0.8 0.8 0.8"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-66.7 98.3 237.568"; + rotation = "0 0 1 74"; + scale = "1.2 1.2 1.2"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "127.3 48.5 104.318"; + rotation = "0 0 1 33"; + scale = "1.1 1.1 1.1"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "217.5 -76.5 185.248"; + rotation = "0 0 1 109"; + scale = "0.7 0.7 0.7"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "171.5 36.5 100.758"; + rotation = "0 0 1 87"; + scale = "0.7 0.7 0.7"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "91.5 255.5 144.691"; + rotation = "0 0 -1 14"; + scale = "0.7 0.7 0.7"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "15.5 331.5 164.602"; + rotation = "0 0 1 40"; + scale = "1.4 1.4 1.4"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-84.5 302.5 166.824"; + rotation = "0 0 1 161"; + scale = "1.1 1.1 1.1"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + }; + }; + new SimGroup(ambient) { + powerCount = "0"; + + new TSStatic() { + position = "210.085 300.266 272.4"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-49.4168 127.762 206.625"; + rotation = "0 0 -1 22.3453"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "211.16 307.578 235.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "211.231 305.472 235.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "211.22 306.873 237.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-69.6678 140.759 233.01"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable5l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "240.722 -35.9278 218.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "244.634 -36.3998 219.808"; + rotation = "0 -1 0 26.929"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "false"; + }; + new TSStatic() { + position = "126.808 126.436 39.78"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "138.379 123.541 39.78"; + rotation = "0 0 1 90.5273"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new AudioEmitter() { + position = "193.42 301.247 223.69"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/rockslide1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "2"; + maxDistance = "128"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "20000"; + maxLoopGap = "60000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-26.7892 123.893 171.066"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/rockslide1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "2"; + maxDistance = "128"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "30000"; + maxLoopGap = "60000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "135.696 -116.796 193.816"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/rockslide2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "2"; + maxDistance = "128"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "35000"; + maxLoopGap = "70000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "115.988 73.94 124.209"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/rumblingthunder.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new TSStatic() { + position = "144.27 135.398 91.4467"; + rotation = "0 0 1 67.609"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "120.09 112.324 92.418"; + rotation = "0 0 1 114.019"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "147.149 57.6019 101.492"; + rotation = "0 0 1 33"; + scale = "1.1 1.1 1.1"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "123.13 112.087 92.7805"; + rotation = "0 0 1 21.7724"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "191.714 295.494 247.235"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + }; + new TSStatic() { + position = "85.2228 126.233 56.31"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + }; + new TSStatic() { + position = "176.956 125.898 56.3"; + rotation = "0 0 1 16.0428"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Alcatraz.mis b/base/missions/Alcatraz.mis new file mode 100644 index 0000000..91bd478 --- /dev/null +++ b/base/missions/Alcatraz.mis @@ -0,0 +1,4442 @@ +// MissionTypes = Siege + +//--- MISSION QUOTE BEGIN --- +//Cattle die, kindred die, +//Every man is mortal. +//But I know one thing that never dies, +//The glory of the great deed. +// -- The Havamal +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[Siege]Capture the fortified island base by touching the control switch located at its heart +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + powerCount = "0"; + cdTrack = "6"; + musicTrack = "desert"; + + new MissionArea(MissionArea) { + area = "-568 -672 1120 1120"; + flightCeiling = "600"; + flightCeilingRange = "20"; + locked = "true"; + }; + new Sky(Sky) { + position = "936 -456 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "450"; + useSkyTextures = "1"; + SkySolidColor = "0.365000 0.390000 0.420000 0.000000"; + fogDistance = "200"; + fogColor = "0.450000 0.500000 0.500000 1.000000"; + fogVolume1 = "50 0 245"; + fogVolume2 = "75 245 258"; + fogVolume3 = "0 0 0"; + materialList = "sky_lush_blue.dml"; + windVelocity = "0 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 0.000000"; + locked = "true"; + cloudSpeed0 = "0.000150 0.000050"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.800000 0.800000 0.800000 1.000000"; + ambient = "0.450000 0.450000 0.450000 1.000000"; + position = "0 0 0"; + locked = "true"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/desertdet1"; + terrainFile = "Alcatraz.ter"; + squareSize = "8"; + emptySquares = "93307 93309 93536 93563 93565 97673"; + position = "-1024 -1024 0"; + locked = "true"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "65"; + cullDensity = "0.1"; + customArea = "0 0 0 0"; + coverage = "0"; + position = "0 0 0 1"; + locked = "true"; + GraphFile = "Alcatraz.nav"; + rotation = "0 0 0 0"; + conjoinBowlDev = "20"; + scale = "1 1 1"; + }; + new WaterBlock() { + position = "-1016 -1024 7.51567"; + rotation = "1 0 0 0"; + scale = "2048 2048 250"; + liquidType = "RiverWater"; + density = "1"; + viscosity = "5"; + waveMagnitude = "1"; + surfaceTexture = "LiquidTiles/IslandWater02"; + surfaceOpacity = "0.9"; + envMapTexture = "lush/skies/lush_day_emap"; + envMapIntensity = "0.15"; + removeWetEdges = "0"; + locked = "true"; + }; + new AudioEmitter() { + position = "788.243 -120.742 93.2821"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/drywind2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.3"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "149.231 -327.319 298.101"; + rotation = "0 0 -1 49.2744"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "166.195 79.4023 296.271"; + rotation = "0 0 1 229.939"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-248.275 -8.03743 364.746"; + rotation = "0.00480495 -0.0199984 0.999788 152.985"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "363.733 -542.571 297.504"; + rotation = "-0.0130689 -0.257059 0.966307 185.625"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "366.306 -659.199 281.463"; + rotation = "0 0 -1 6.8755"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + + new SimGroup(Team0) { + }; + new SimGroup(Team1) { + + new SimGroup(SpawnSpheres) { + + new SpawnSphere() { + position = "349.552 -587.696 268.264"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new FlyingVehicle() { + position = "454.673 -633.206 265.521"; + rotation = "0 0 -1 55.0039"; + scale = "1 1 1"; + dataBlock = "hapcFlyer"; + lockCount = "0"; + homingCount = "0"; + disableMove = "0"; + mountable = "1"; + locked = "true"; + selfPower = "1"; + respawn = "1"; + respawnTime = 10000; + resetPos = "1"; + }; + new ParticleEmissionDummy() { + position = "404.845 -630.947 260.67"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "defaultEmissionDummy"; + emitter = "SmallHeavyDamageSmoke"; + velocity = "1"; + locked = "true"; + }; + new Item() { + position = "344.816 -579.786 263.365"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new StaticShape() { + position = "383.201 -584.245 262.513"; + rotation = "0 0 -1 114.683"; + scale = "1 1 1"; + nameTag = "Staging Area"; + dataBlock = "SolarPanel"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new TSStatic() { + position = "343.927 -585.625 259.412"; + rotation = "1 0 0 0"; + scale = "1.46976 1.81219 1"; + shapeName = "bmiscf.dts"; + locked = "true"; + }; + new StaticShape() { + position = "343.922 -585.564 259.897"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Staging Area"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new WheeledVehicle() { + position = "326.489 -574.186 261.78"; + rotation = "0.0337659 0.0559541 -0.997862 14.8516"; + scale = "1 1 1"; + dataBlock = "mobileBaseVehicle"; + lockCount = "0"; + homingCount = "0"; + disableMove = "1"; + Marker = "3867"; + mountable = "0"; + resetPos = "1"; + locked = "true"; + selfPower = "1"; + deployed = "1"; + Turret = "3879"; + immobilized = "1"; + }; + new WheeledVehicle() { + position = "349.355 -568.108 261.61"; + rotation = "-0.0238953 -0.016121 -0.999584 49.6413"; + scale = "1 1 1"; + dataBlock = "mobileBaseVehicle"; + lockCount = "0"; + homingCount = "0"; + disableMove = "1"; + Marker = "3866"; + mountable = "0"; + resetPos = "1"; + locked = "true"; + selfPower = "1"; + deployed = "1"; + Turret = "3876"; + immobilized = "1"; + }; + new TSStatic() { + position = "338.722 -580.918 259.503"; + rotation = "0 0 -1 22.9183"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "344.488 -580.842 259.293"; + rotation = "0 0 1 5.72956"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "345.111 -578.479 259.293"; + rotation = "0 0 -1 11.4591"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "344.827 -579.839 261.293"; + rotation = "0 0 1 53.858"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new InteriorInstance() { + position = "383.436 -584.135 254.463"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bmisc4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new TSStatic() { + position = "404.232 -632.478 256.071"; + rotation = "-0.848432 -0.187958 -0.494808 61.6042"; + scale = "1 1 1"; + shapeName = "vehicle_land_assault_wreck.dts"; + locked = "true"; + }; + }; + new SimGroup(Team2) { + + new SimGroup(SpawnSpheres) { + + new SpawnSphere() { + position = "59.4014 -115.417 280.16"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "15"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "0"; + locked = "true"; + }; + new SpawnSphere() { + position = "38.5879 -146.386 283.588"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "10"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "0"; + locked = "true"; + }; + new SpawnSphere() { + position = "-18.9036 -59.74 324.664"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + new SpawnSphere() { + position = "-58.4719 -254.701 288.492"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "25"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new SimGroup(IslandBase) { + + new WayPoint() { + position = "40.0495 -103.975 291.518"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Control Switch"; + team = "0"; + locked = "true"; + }; + new StaticShape() { + position = "40.0495 -103.975 291.518"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "40 -104 277.557"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + interiorFile = "bbase9.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape() { + position = "-251.651 -147.796 296.153"; + rotation = "0 0 -1 120"; + scale = "1 1 1"; + nameTag = "Lakeside"; + dataBlock = "SolarPanel"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-255.381 -147.696 296.15"; + rotation = "0 0 -1 120"; + scale = "1 1 1"; + nameTag = "Lakeside"; + dataBlock = "SolarPanel"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "54.8393 -98.2081 269.568"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Base"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "54.715 -110.291 269.551"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Base"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new SimGroup(OutdoorTurrets) { + + new InteriorInstance() { + position = "59.5768 -44.1561 343.731"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + interiorFile = "bmisc3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Turret() { + position = "58.9339 -44.1643 345.785"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "East"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + originalBarrel = "PlasmaBarrelLarge"; + }; + new InteriorInstance() { + position = "-163.125 -155.59 332.082"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + interiorFile = "bmisc3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Turret() { + position = "-162.429 -155.581 333.901"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "West"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + originalBarrel = "PlasmaBarrelLarge"; + }; + }; + new SimGroup(ForceFields) { + + new ForceFieldBare() { + position = "35.5007 -109.255 281.814"; + rotation = "1 0 0 0"; + scale = "9 0.5 0.5"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + }; + new ForceFieldBare() { + position = "35.5007 -109.265 282.822"; + rotation = "1 0 0 0"; + scale = "9 0.5 0.5"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + }; + new ForceFieldBare() { + position = "35.4969 -99.2443 281.814"; + rotation = "1 0 0 0"; + scale = "9 0.5 0.5"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + }; + new ForceFieldBare() { + position = "35.4969 -99.2543 282.822"; + rotation = "1 0 0 0"; + scale = "9 0.5 0.5"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + }; + new ForceFieldBare() { + position = "35.2456 -108.499 281.801"; + rotation = "0 0 -1 90"; + scale = "9 0.5 0.5"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + }; + new ForceFieldBare() { + position = "35.2556 -108.499 282.809"; + rotation = "0 0 -1 90"; + scale = "9 0.5 0.5"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + }; + new ForceFieldBare() { + position = "44.7699 -99.497 281.792"; + rotation = "0 0 1 90"; + scale = "9 0.5 0.5"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + }; + new ForceFieldBare() { + position = "44.7599 -99.497 282.8"; + rotation = "0 0 1 90"; + scale = "9 0.5 0.5"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + }; + new ForceFieldBare() { + position = "12.963 -108.133 277.45"; + rotation = "1 0 0 0"; + scale = "0.25 8.25 6.25"; + dataBlock = "defaultForceFieldBare"; + locked = "true"; + }; + new ForceFieldBare() { + position = "70.5441 -71.5 287.531"; + rotation = "1 0 0 0"; + scale = "1 1 6.25"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + }; + new ForceFieldBare() { + position = "70.5441 -69.5 287.531"; + rotation = "1 0 0 0"; + scale = "1 1 6.25"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + }; + new ForceFieldBare() { + position = "70.546 -67.4763 287.531"; + rotation = "1 0 0 0"; + scale = "1 1 6.25"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + }; + new ForceFieldBare() { + position = "70.546 -65.4836 287.531"; + rotation = "1 0 0 0"; + scale = "1 1 6.25"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + }; + }; + new SimGroup(equipment) { + + new StaticShape() { + position = "66.0121 -96.3675 279.568"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Switch Room"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "64.8147 -66.3488 296.069"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Switch Room"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "52.4417 -137.636 262.563"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Arch Room"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "52.5893 -119.354 262.567"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Arch Room"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "39.8723 -142.359 287.566"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Split Room"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Turret() { + position = "39.9025 -140.001 293.029"; + rotation = "0.57735 -0.57735 -0.57735 120"; + scale = "1 1 1"; + nameTag = "Split Room"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + }; + new Turret() { + position = "36.0018 -135.192 283.92"; + rotation = "0 -1 0 90"; + scale = "1 1 1"; + nameTag = "Hallway"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + }; + new Turret() { + position = "43.9628 -135.192 283.92"; + rotation = "0.707107 -3.09086e-08 -0.707107 180"; + scale = "1 1 1"; + nameTag = "Hallway"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + }; + new Item() { + position = "-251.985 -147.959 290.18"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "54.0053 -128.993 263.219"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + }; + new SimGroup(ForestStructures) { + + new InteriorInstance() { + position = "-254 -148 287.64"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + interiorFile = "bbunkd.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "6.49918 -214.356 288.578"; + rotation = "-0 0 -1 71.0468"; + scale = "1 1 1"; + interiorFile = "bwall4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-85.5753 -252.647 276"; + rotation = "-0 0 -1 26.3561"; + scale = "1 1 1"; + interiorFile = "bwall1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-73.1529 -279.972 276"; + rotation = "0 0 -1 116.356"; + scale = "1 1 1"; + interiorFile = "bwall2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-80.2479 -263.399 276"; + rotation = "0 0 -1 116.356"; + scale = "1 1 1"; + interiorFile = "bwall4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-57.0239 -271.981 276"; + rotation = "0 0 -1 116.356"; + scale = "1 1 1"; + interiorFile = "bwall4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-12.1128 -207.955 288.578"; + rotation = "-0 0 -1 71.0468"; + scale = "1 1 1"; + interiorFile = "bwall3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-30.3864 -201.689 288.578"; + rotation = "-0 0 -1 71.0468"; + scale = "1 1 1"; + interiorFile = "bwall4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "87.2278 89.1079 269.882"; + rotation = "-0 0 -1 71.0468"; + scale = "1 1 1"; + interiorFile = "bwall4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "68.6158 95.5089 269.882"; + rotation = "-0 0 -1 71.0468"; + scale = "1 1 1"; + interiorFile = "bwall3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "50.3422 101.775 269.882"; + rotation = "-0 0 -1 71.0468"; + scale = "1 1 1"; + interiorFile = "bwall4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + }; + new Item() { + position = "7.71477 -104.164 285.647"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new TSStatic() { + position = "66.0336 -62.8706 290.539"; + rotation = "-1 0 0 90"; + scale = "2.03887 2.02471 1"; + shapeName = "bmiscf.dts"; + locked = "true"; + }; + }; + }; + new SimGroup(RandomOrganics) { + + new SimGroup(Addition1belgtree16) { + + new TSStatic() { + position = "-716 -196 261.766"; + rotation = "0 0 1 212"; + scale = "2.1 2.1 2.1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-788 -148 264.813"; + rotation = "0 0 1 219"; + scale = "2.1 2.1 2.1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-684 500 252.156"; + rotation = "0 0 1 58.9998"; + scale = "1.6 1.6 1.6"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-636 -92 263.016"; + rotation = "0 0 -1 90.0002"; + scale = "2.2 2.2 2.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "268 -788 263.312"; + rotation = "0 0 -1 106"; + scale = "2.2 2.2 2.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "756 380 258.266"; + rotation = "0 0 1 170"; + scale = "1.7 1.7 1.7"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-484 84 261.516"; + rotation = "0 0 -1 10.9999"; + scale = "1.7 1.7 1.7"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-612 -468 252.859"; + rotation = "0 0 -1 58.0005"; + scale = "2.2 2.2 2.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "796 -788 282.312"; + rotation = "0 0 -1 35"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-580 636 258.188"; + rotation = "0 0 1 122"; + scale = "2.4 2.4 2.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-620 724 260.797"; + rotation = "0 0 1 17"; + scale = "1.8 1.8 1.8"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-564 -132 254.609"; + rotation = "0 0 1 199"; + scale = "1.9 1.9 1.9"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "476 -300 262.359"; + rotation = "0 0 1 134"; + scale = "1.5 1.5 1.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "428 340 276.875"; + rotation = "0 0 1 162"; + scale = "1.5 1.5 1.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-644 324 259.781"; + rotation = "0 0 -1 19.9999"; + scale = "1.9 1.9 1.9"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "788 388 255.109"; + rotation = "0 0 1 124"; + scale = "2.3 2.3 2.3"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "764 12 254.484"; + rotation = "0 0 1 1.9999"; + scale = "2.1 2.1 2.1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "500 -500 287.609"; + rotation = "0 0 1 224"; + scale = "2.1 2.1 2.1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-596 660 267.484"; + rotation = "0 0 1 48"; + scale = "1.5 1.5 1.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "620 -396 278.375"; + rotation = "0 0 -1 76"; + scale = "2.5 2.5 2.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "636 -636 268.687"; + rotation = "0 0 1 238"; + scale = "1.8 1.8 1.8"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "708 436 253.078"; + rotation = "1 0 0 0"; + scale = "1.9 1.9 1.9"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "332 -796 275.203"; + rotation = "0 0 -1 76"; + scale = "1.5 1.5 1.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-748 316 270.469"; + rotation = "0 0 -1 35.9998"; + scale = "2.1 2.1 2.1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "36 -204 290.516"; + rotation = "0 0 1 35"; + scale = "2.4 2.4 2.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "324 -388 275.375"; + rotation = "0 0 1 234"; + scale = "2.4 2.4 2.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "772 12 254.578"; + rotation = "0 0 1 190"; + scale = "2.5 2.5 2.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "796 404 257.391"; + rotation = "0 0 -1 5.99979"; + scale = "1.6 1.6 1.6"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "108 -604 252.062"; + rotation = "0 0 -1 102"; + scale = "1.5 1.5 1.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-412 -748 270.844"; + rotation = "0 0 1 151"; + scale = "1.6 1.6 1.6"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-516 -20 252.734"; + rotation = "0 0 1 225"; + scale = "1.9 1.9 1.9"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-60 -716 253.125"; + rotation = "0 0 -1 32.9998"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-660 -164 259.766"; + rotation = "0 0 1 13"; + scale = "2.5 2.5 2.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "52 124 268.234"; + rotation = "0 0 1 149"; + scale = "1.5 1.5 1.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-756 444 269.266"; + rotation = "0 0 -1 67.0005"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-540 -684 259.078"; + rotation = "0 0 1 191"; + scale = "1.8 1.8 1.8"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "692 460 256.937"; + rotation = "0 0 1 168"; + scale = "2.1 2.1 2.1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-660 -732 259.344"; + rotation = "0 0 1 78.0002"; + scale = "2.3 2.3 2.3"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "460 -308 264.625"; + rotation = "0 0 1 213"; + scale = "1.6 1.6 1.6"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "124 620 259.25"; + rotation = "0 0 1 73.9998"; + scale = "1.8 1.8 1.8"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-140 84 283.875"; + rotation = "0 0 1 55"; + scale = "2.1 2.1 2.1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-468 348 272.047"; + rotation = "0 0 1 128"; + scale = "2.2 2.2 2.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-452 268 272.937"; + rotation = "0 0 1 58.9998"; + scale = "1.7 1.7 1.7"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-140 -308 254.375"; + rotation = "0 0 1 182"; + scale = "2.3 2.3 2.3"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "748 396 259.891"; + rotation = "0 0 -1 19.9999"; + scale = "2.2 2.2 2.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "804 460 257.063"; + rotation = "0 0 1 206"; + scale = "2.3 2.3 2.3"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-492 28 262.906"; + rotation = "0 0 1 160"; + scale = "1.9 1.9 1.9"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-764 -20 255.578"; + rotation = "0 0 1 222"; + scale = "1.8 1.8 1.8"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "556 252 265.75"; + rotation = "0 0 1 168"; + scale = "2.5 2.5 2.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "740 -484 260.656"; + rotation = "0 0 1 136"; + scale = "2.5 2.5 2.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-44 -724 253.453"; + rotation = "0 0 1 72.0002"; + scale = "1.8 1.8 1.8"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "484 -796 272.828"; + rotation = "0 0 -1 2.9997"; + scale = "1.9 1.9 1.9"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "700 108 266.078"; + rotation = "0 0 1 64.9998"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-660 -524 258.656"; + rotation = "0 0 -1 105"; + scale = "2.4 2.4 2.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-796 772 256.437"; + rotation = "0 0 1 44"; + scale = "1.7 1.7 1.7"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "100 -788 252.125"; + rotation = "0 0 1 25"; + scale = "2.2 2.2 2.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "476 -20 253.922"; + rotation = "0 0 1 73.9998"; + scale = "1.6 1.6 1.6"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "348 748 267.156"; + rotation = "0 0 1 73"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "92 684 253.844"; + rotation = "0 0 1 13"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "420 -148 256.078"; + rotation = "0 0 1 141"; + scale = "1.6 1.6 1.6"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-244 -572 277.016"; + rotation = "0 0 1 235"; + scale = "2.4 2.4 2.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-772 -780 268.391"; + rotation = "0 0 1 203"; + scale = "2.5 2.5 2.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-652 -764 261.578"; + rotation = "0 0 -1 86.0004"; + scale = "1.7 1.7 1.7"; + shapeName = "borg16.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition2belgtree18) { + + new TSStatic() { + position = "132 -644 256.891"; + rotation = "0 0 -1 64.0005"; + scale = "2.1 2.1 2.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "252 516 260.359"; + rotation = "0 0 1 137"; + scale = "2.1 2.1 2.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-340 -772 282.25"; + rotation = "0 0 1 231"; + scale = "2.5 2.5 2.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-404 668 254.938"; + rotation = "0 0 -1 37.0002"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-740 -372 264.547"; + rotation = "0 0 1 103"; + scale = "1.9 1.9 1.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-604 -452 255.828"; + rotation = "0 0 1 60.0001"; + scale = "2.2 2.2 2.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-716 388 271.969"; + rotation = "0 0 1 73"; + scale = "1.8 1.8 1.8"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "356 540 276.594"; + rotation = "0 0 1 130"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "532 -164 263.687"; + rotation = "0 0 -1 49.0002"; + scale = "2.1 2.1 2.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "380 -124 262.828"; + rotation = "0 0 1 132"; + scale = "1.9 1.9 1.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "156 620 253.641"; + rotation = "0 0 1 24"; + scale = "2.1 2.1 2.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-772 84 259.328"; + rotation = "0 0 1 229"; + scale = "1.7 1.7 1.7"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-676 -252 252.172"; + rotation = "0 0 1 105"; + scale = "2.2 2.2 2.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "764 588 255.875"; + rotation = "0 0 1 235"; + scale = "1.9 1.9 1.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "620 -404 278.609"; + rotation = "0 0 -1 87.0002"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "316 -684 257.422"; + rotation = "0 0 -1 44.9999"; + scale = "2.2 2.2 2.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-484 628 269.484"; + rotation = "0 0 -1 1.9999"; + scale = "2.1 2.1 2.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "484 -20 254.672"; + rotation = "0 0 -1 53.9998"; + scale = "2.4 2.4 2.4"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-636 -500 252.828"; + rotation = "0 0 1 226"; + scale = "1.7 1.7 1.7"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-780 -164 264.438"; + rotation = "0 0 -1 1.9999"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "724 308 278.766"; + rotation = "0 0 -1 44.9999"; + scale = "1.9 1.9 1.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-556 284 261.609"; + rotation = "0 0 1 12"; + scale = "2.5 2.5 2.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "788 -420 265.203"; + rotation = "0 0 1 195"; + scale = "1.8 1.8 1.8"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-676 172 260.594"; + rotation = "0 0 1 195"; + scale = "2.5 2.5 2.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-372 740 274.438"; + rotation = "0 0 -1 50.9998"; + scale = "1.6 1.6 1.6"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-180 -612 269.891"; + rotation = "0 0 -1 64.0005"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-684 -676 255.219"; + rotation = "0 0 1 234"; + scale = "2.3 2.3 2.3"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "268 -692 257.25"; + rotation = "0 0 1 129"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "404 -492 278.719"; + rotation = "0 0 -1 23.9998"; + scale = "1.8 1.8 1.8"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "348 -124 265.422"; + rotation = "0 0 1 232"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "188 52 258.109"; + rotation = "0 0 1 110"; + scale = "1.9 1.9 1.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "276 556 268.391"; + rotation = "0 0 1 186"; + scale = "2.3 2.3 2.3"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-732 -684 263.812"; + rotation = "0 0 -1 96.0002"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "540 92 259.047"; + rotation = "0 0 1 201"; + scale = "1.7 1.7 1.7"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "548 -772 274"; + rotation = "0 0 -1 65.0004"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "148 492 262.641"; + rotation = "0 0 -1 28.0002"; + scale = "1.8 1.8 1.8"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "732 268 274"; + rotation = "0 0 1 11"; + scale = "1.9 1.9 1.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "20 668 265.203"; + rotation = "0 0 1 227"; + scale = "2.5 2.5 2.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "548 -252 257.25"; + rotation = "0 0 1 51"; + scale = "2.4 2.4 2.4"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "700 164 254.828"; + rotation = "0 0 -1 22.9999"; + scale = "1.7 1.7 1.7"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-148 -732 256.547"; + rotation = "0 0 1 56"; + scale = "2.1 2.1 2.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "748 -676 269.266"; + rotation = "0 0 1 85"; + scale = "1.9 1.9 1.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "380 -148 260.875"; + rotation = "0 0 1 146"; + scale = "1.9 1.9 1.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "188 -540 270.656"; + rotation = "0 0 1 67"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "668 -716 278.328"; + rotation = "0 0 1 55"; + scale = "2.1 2.1 2.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "740 -596 267.047"; + rotation = "0 0 1 154"; + scale = "1.9 1.9 1.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-564 -284 260.875"; + rotation = "0 0 1 121"; + scale = "1.6 1.6 1.6"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "716 92 266.625"; + rotation = "0 0 1 200"; + scale = "1.8 1.8 1.8"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "284 -380 265.172"; + rotation = "0 0 1 93.0002"; + scale = "2.3 2.3 2.3"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "228 668 254.547"; + rotation = "0 0 -1 35.9998"; + scale = "1.9 1.9 1.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "540 -716 257.75"; + rotation = "0 0 -1 80.0004"; + scale = "2.3 2.3 2.3"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "612 -372 272.875"; + rotation = "0 0 1 177"; + scale = "2.4 2.4 2.4"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "28 -276 269.625"; + rotation = "0 0 -1 100"; + scale = "2.1 2.1 2.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "412 324 273.766"; + rotation = "0 0 1 122"; + scale = "1.9 1.9 1.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "4 -260 271.734"; + rotation = "0 0 1 21"; + scale = "2.2 2.2 2.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-76 788 254.375"; + rotation = "0 0 1 58.9998"; + scale = "1.8 1.8 1.8"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "580 -108 270.516"; + rotation = "0 0 1 112"; + scale = "2.1 2.1 2.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-660 92 261.422"; + rotation = "0 0 -1 1.00014"; + scale = "2.4 2.4 2.4"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-436 180 267.719"; + rotation = "0 0 1 49"; + scale = "2.3 2.3 2.3"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "756 -356 261.578"; + rotation = "0 0 1 51"; + scale = "1.8 1.8 1.8"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "788 -28 253.438"; + rotation = "0 0 -1 112"; + scale = "2.2 2.2 2.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition3belgtree19) { + + new TSStatic() { + position = "700 340 266.891"; + rotation = "0 0 1 184"; + scale = "2.2 2.2 2.2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "268 548 268.875"; + rotation = "0 0 1 27"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-724 -4 259.734"; + rotation = "0 0 -1 35.9998"; + scale = "1.6 1.6 1.6"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "404 -68 254.312"; + rotation = "0 0 1 128"; + scale = "2.3 2.3 2.3"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "692 -364 264.391"; + rotation = "0 0 1 100"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "724 -572 261.578"; + rotation = "0 0 1 93.0002"; + scale = "1.8 1.8 1.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "148 -780 263.531"; + rotation = "0 0 -1 101"; + scale = "1.9 1.9 1.9"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "436 -244 258.781"; + rotation = "0 0 1 223"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-12 -284 267.516"; + rotation = "0 0 1 72.0002"; + scale = "1.8 1.8 1.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-684 -388 266.656"; + rotation = "0 0 1 45"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "244 628 257.531"; + rotation = "0 0 1 34"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-300 -788 284.859"; + rotation = "0 0 -1 73.0006"; + scale = "1.9 1.9 1.9"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "548 -244 256.609"; + rotation = "0 0 -1 102"; + scale = "2.1 2.1 2.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "732 236 273.359"; + rotation = "0 0 1 102"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "780 452 254.109"; + rotation = "0 0 1 53"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "156 340 306.5"; + rotation = "0 0 1 75.0002"; + scale = "2.1 2.1 2.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-732 -12 259.484"; + rotation = "0 0 1 230"; + scale = "1.9 1.9 1.9"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "92 468 268.797"; + rotation = "0 0 1 117"; + scale = "2.2 2.2 2.2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-796 476 262.438"; + rotation = "0 0 1 70"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-580 220 256.062"; + rotation = "1 0 0 0"; + scale = "1.8 1.8 1.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-204 -596 275.25"; + rotation = "0 0 1 149"; + scale = "1.7 1.7 1.7"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-452 292 276.75"; + rotation = "0 0 -1 120"; + scale = "2.4 2.4 2.4"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-484 372 267.344"; + rotation = "0 0 -1 108.999"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "724 -212 255.797"; + rotation = "0 0 1 119"; + scale = "1.9 1.9 1.9"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "644 380 259.5"; + rotation = "0 0 -1 68.0003"; + scale = "2.3 2.3 2.3"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "500 524 266.719"; + rotation = "0 0 1 204"; + scale = "1.6 1.6 1.6"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-740 724 276.406"; + rotation = "0 0 1 53"; + scale = "1.7 1.7 1.7"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-692 -188 259.797"; + rotation = "0 0 1 171"; + scale = "2.2 2.2 2.2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "724 -452 258.25"; + rotation = "0 0 1 27"; + scale = "1.9 1.9 1.9"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-524 4 253.547"; + rotation = "0 0 1 117"; + scale = "1.9 1.9 1.9"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "436 -124 254.375"; + rotation = "0 0 -1 22.0002"; + scale = "2.1 2.1 2.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "476 268 265.812"; + rotation = "0 0 -1 75.0002"; + scale = "1.6 1.6 1.6"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-444 716 264.203"; + rotation = "0 0 -1 26"; + scale = "1.8 1.8 1.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "452 -564 273.594"; + rotation = "0 0 1 188"; + scale = "2.1 2.1 2.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "484 20 258.531"; + rotation = "0 0 1 204"; + scale = "1.9 1.9 1.9"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "668 -260 264.859"; + rotation = "0 0 -1 108"; + scale = "2.2 2.2 2.2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-36 -748 260.672"; + rotation = "0 0 1 20"; + scale = "2.3 2.3 2.3"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-508 380 265.359"; + rotation = "0 0 1 33"; + scale = "2.4 2.4 2.4"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "516 452 285.5"; + rotation = "0 0 1 123"; + scale = "2.3 2.3 2.3"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "804 492 259.266"; + rotation = "0 0 1 56"; + scale = "1.7 1.7 1.7"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "468 308 273.75"; + rotation = "0 0 -1 88"; + scale = "2.4 2.4 2.4"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "516 -244 262.422"; + rotation = "0 0 1 200"; + scale = "1.9 1.9 1.9"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "468 -380 281.188"; + rotation = "0 0 1 58.9998"; + scale = "1.6 1.6 1.6"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-644 716 261"; + rotation = "0 0 -1 53.9998"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-460 124 263.328"; + rotation = "0 0 1 205"; + scale = "2.1 2.1 2.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-732 524 253.125"; + rotation = "0 0 1 33"; + scale = "2.2 2.2 2.2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-724 -740 270.797"; + rotation = "0 0 -1 7.00012"; + scale = "2.1 2.1 2.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-612 396 265.828"; + rotation = "0 0 1 131"; + scale = "2.5 2.5 2.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "692 764 287.328"; + rotation = "0 0 -1 62.0003"; + scale = "1.8 1.8 1.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "452 284 270.625"; + rotation = "0 0 -1 29.9998"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "28 644 264.531"; + rotation = "0 0 1 19"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "28 -772 260.422"; + rotation = "0 0 -1 41"; + scale = "2.5 2.5 2.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "324 -388 275.375"; + rotation = "0 0 -1 4.99997"; + scale = "1.8 1.8 1.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-60 452 265.188"; + rotation = "0 0 1 96.0002"; + scale = "1.8 1.8 1.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "564 -444 296.703"; + rotation = "0 0 -1 56.9999"; + scale = "2.2 2.2 2.2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "756 -340 259.094"; + rotation = "0 0 -1 19.0001"; + scale = "1.9 1.9 1.9"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "588 676 305.266"; + rotation = "0 0 1 179"; + scale = "1.7 1.7 1.7"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "532 -148 265.234"; + rotation = "0 0 1 228"; + scale = "2.1 2.1 2.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-92 -292 268"; + rotation = "0 0 1 122"; + scale = "1.8 1.8 1.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-756 588 273.375"; + rotation = "0 0 1 179"; + scale = "1.8 1.8 1.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "500 -284 263.281"; + rotation = "0 0 1 212"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-636 -556 258.453"; + rotation = "0 0 1 156"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition4belgtree16) { + + new TSStatic() { + position = "116 100 278.688"; + rotation = "0 0 1 67.9998"; + scale = "2.2 2.2 2.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "52 -100 326.312"; + rotation = "0 0 1 221"; + scale = "1.7 1.7 1.7"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-52 12 301.453"; + rotation = "0 0 1 82"; + scale = "1.7 1.7 1.7"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "116 68 278.078"; + rotation = "0 0 -1 76"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-100 -12 306.125"; + rotation = "0 0 -1 16.9999"; + scale = "1.8 1.8 1.8"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-20 -92 308.219"; + rotation = "0 0 -1 120"; + scale = "2.3 2.3 2.3"; + shapeName = "borg16.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition5belgtree18) { + + new TSStatic() { + position = "116 124 273.391"; + rotation = "0 0 1 174"; + scale = "2.1 2.1 2.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-84 -84 323.109"; + rotation = "0 0 -1 58.0005"; + scale = "1.8 1.8 1.8"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-12 -20 299.312"; + rotation = "0 0 1 29"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-116 -12 304.953"; + rotation = "0 0 -1 114"; + scale = "1.9 1.9 1.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "28 68 268.344"; + rotation = "0 0 1 87.0002"; + scale = "2.5 2.5 2.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition6belgtree19) { + + new TSStatic() { + position = "-60 -92 330.687"; + rotation = "0 0 -1 55.0003"; + scale = "2.2 2.2 2.2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "124 84 278.984"; + rotation = "0 0 1 181"; + scale = "2.4 2.4 2.4"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "44 68 268.781"; + rotation = "0 0 1 130"; + scale = "2.5 2.5 2.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-68 92 278.703"; + rotation = "0 0 1 78.0002"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-108 -116 334.781"; + rotation = "0 0 1 19"; + scale = "1.7 1.7 1.7"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "76 108 270.031"; + rotation = "0 0 1 136"; + scale = "2.3 2.3 2.3"; + shapeName = "borg19.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition7belgtree16) { + + new TSStatic() { + position = "-124 92 285.625"; + rotation = "0 0 1 93.0002"; + scale = "1.7 1.7 1.7"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-4 -124 311.75"; + rotation = "0 0 1 29"; + scale = "1.5 1.5 1.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-140 -148 326.328"; + rotation = "0 0 1 107"; + scale = "1.5 1.5 1.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "28 -76 333.266"; + rotation = "0 0 1 94.9998"; + scale = "1.7 1.7 1.7"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "108 148 267.844"; + rotation = "0 0 -1 31.0002"; + scale = "1.8 1.8 1.8"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "84 60 270.734"; + rotation = "0 0 1 180"; + scale = "2.1 2.1 2.1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-116 76 287.641"; + rotation = "0 0 1 193"; + scale = "1.9 1.9 1.9"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-20 60 272.812"; + rotation = "0 0 1 64.9998"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "44 84 269.703"; + rotation = "0 0 1 78.0002"; + scale = "2.5 2.5 2.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition8belgtree18) { + + new TSStatic() { + position = "92 76 271.984"; + rotation = "0 0 -1 1.9999"; + scale = "1.9 1.9 1.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "36 108 271.156"; + rotation = "0 0 1 194"; + scale = "1.6 1.6 1.6"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-124 -60 321.187"; + rotation = "0 0 -1 26.9998"; + scale = "1.8 1.8 1.8"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "36 92 270.672"; + rotation = "0 0 1 225"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "100 92 277.594"; + rotation = "0 0 1 45"; + scale = "2.4 2.4 2.4"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "140 44 282.109"; + rotation = "0 0 -1 59.0003"; + scale = "2.5 2.5 2.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-140 -148 326.328"; + rotation = "0 0 -1 107"; + scale = "2.1 2.1 2.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition9belgtree19) { + + new TSStatic() { + position = "-100 -60 323.297"; + rotation = "0 0 1 44"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-92 76 287.391"; + rotation = "0 0 -1 71.0004"; + scale = "1.7 1.7 1.7"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "100 108 276.438"; + rotation = "0 0 -1 19.0001"; + scale = "1.9 1.9 1.9"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-76 52 288.266"; + rotation = "0 0 1 96.0002"; + scale = "1.6 1.6 1.6"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-116 -132 329.953"; + rotation = "0 0 1 159"; + scale = "2.4 2.4 2.4"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "148 100 273.266"; + rotation = "0 0 1 188"; + scale = "2.2 2.2 2.2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "116 84 279.281"; + rotation = "0 0 1 233"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "76 124 268.656"; + rotation = "0 0 -1 86.0004"; + scale = "2.4 2.4 2.4"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-20 52 274.859"; + rotation = "0 0 1 104"; + scale = "1.9 1.9 1.9"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-20 60 272.812"; + rotation = "0 0 1 38"; + scale = "2.4 2.4 2.4"; + shapeName = "borg19.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition10belgtree16) { + + new TSStatic() { + position = "676 452 256.391"; + rotation = "0 0 1 91"; + scale = "2.2 2.2 2.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "708 20 270.109"; + rotation = "0 0 1 207"; + scale = "1.8 1.8 1.8"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-68 460 264.703"; + rotation = "0 0 1 210"; + scale = "2.3 2.3 2.3"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-724 -172 263.766"; + rotation = "0 0 1 1.9999"; + scale = "1.6 1.6 1.6"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "164 -620 253.984"; + rotation = "0 0 1 199"; + scale = "2.3 2.3 2.3"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-452 -684 264.938"; + rotation = "0 0 1 76.9998"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "244 636 256.484"; + rotation = "0 0 1 81.0002"; + scale = "2.1 2.1 2.1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-524 -212 263.703"; + rotation = "0 0 -1 35"; + scale = "2.2 2.2 2.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-780 52 262.125"; + rotation = "0 0 1 94"; + scale = "2.4 2.4 2.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "364 372 271.688"; + rotation = "1 0 0 0"; + scale = "2.5 2.5 2.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "428 -180 257"; + rotation = "0 0 1 54"; + scale = "1.7 1.7 1.7"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "708 -52 279.25"; + rotation = "0 0 1 108"; + scale = "2.5 2.5 2.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "364 -148 261.703"; + rotation = "0 0 -1 117"; + scale = "2.3 2.3 2.3"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "572 -148 270.906"; + rotation = "0 0 -1 116"; + scale = "1.8 1.8 1.8"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-604 -44 254.344"; + rotation = "0 0 -1 38"; + scale = "2.3 2.3 2.3"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-636 316 261.062"; + rotation = "0 0 1 162"; + scale = "2.4 2.4 2.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition11belgtree18) { + + new TSStatic() { + position = "-460 580 270.422"; + rotation = "0 0 1 226"; + scale = "2.1 2.1 2.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "292 548 268.359"; + rotation = "0 0 1 99.0002"; + scale = "2.1 2.1 2.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-468 124 264.547"; + rotation = "0 0 1 153"; + scale = "1.9 1.9 1.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-468 -684 262.172"; + rotation = "0 0 1 61.9998"; + scale = "2.1 2.1 2.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-460 180 265.844"; + rotation = "0 0 -1 53.9998"; + scale = "2.1 2.1 2.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-604 -636 256.406"; + rotation = "0 0 1 123"; + scale = "1.8 1.8 1.8"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "644 -580 281.219"; + rotation = "0 0 1 202"; + scale = "1.9 1.9 1.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "580 492 264.203"; + rotation = "0 0 -1 115"; + scale = "1.6 1.6 1.6"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "308 372 285.844"; + rotation = "0 0 -1 82"; + scale = "1.9 1.9 1.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "596 188 264.672"; + rotation = "0 0 1 225"; + scale = "2.4 2.4 2.4"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "612 692 304.422"; + rotation = "0 0 1 104"; + scale = "2.1 2.1 2.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "332 732 264.609"; + rotation = "0 0 -1 66.0002"; + scale = "1.8 1.8 1.8"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "596 220 263.547"; + rotation = "0 0 1 195"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-676 -204 259.203"; + rotation = "0 0 -1 10.9999"; + scale = "2.3 2.3 2.3"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "516 -364 273.953"; + rotation = "0 0 1 146"; + scale = "2.2 2.2 2.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition12belgtree19) { + + new TSStatic() { + position = "-788 532 252.625"; + rotation = "0 0 -1 47"; + scale = "2.1 2.1 2.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "156 388 313.656"; + rotation = "0 0 -1 100"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-732 -84 260.516"; + rotation = "0 0 1 135"; + scale = "2.1 2.1 2.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "644 -524 278.781"; + rotation = "0 0 1 24"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-660 -740 260.594"; + rotation = "0 0 -1 26"; + scale = "1.6 1.6 1.6"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "652 -220 262.219"; + rotation = "0 0 1 212"; + scale = "1.6 1.6 1.6"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "268 -596 260.594"; + rotation = "0 0 1 218"; + scale = "2.5 2.5 2.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "372 -740 264.609"; + rotation = "0 0 1 73"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-428 164 265.281"; + rotation = "0 0 1 88.9998"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "324 -268 273.203"; + rotation = "0 0 -1 114"; + scale = "2.4 2.4 2.4"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-644 -196 258.922"; + rotation = "0 0 1 28"; + scale = "1.8 1.8 1.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "444 164 294.5"; + rotation = "0 0 -1 1.00014"; + scale = "1.8 1.8 1.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "652 636 285.797"; + rotation = "0 0 -1 4.00015"; + scale = "1.6 1.6 1.6"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "788 60 253.422"; + rotation = "0 0 -1 72.0002"; + scale = "2.5 2.5 2.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "444 -308 262.031"; + rotation = "0 0 -1 23.9998"; + scale = "2.1 2.1 2.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-596 -140 258.828"; + rotation = "0 0 1 204"; + scale = "1.7 1.7 1.7"; + shapeName = "borg19.dts"; + locked = "true"; + }; + }; + new TSStatic() { + position = "128.657 11.5492 282.349"; + rotation = "0 0 -1 63.0001"; + scale = "2.4 2.4 2.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "65.2755 70.8226 270.578"; + rotation = "0 0 -1 63.0001"; + scale = "2.4 2.4 2.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-28.7873 85.2657 269.369"; + rotation = "0 0 -1 63.0001"; + scale = "2.4 2.4 2.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "167.523 -30.6645 266.869"; + rotation = "0 0 -1 11.4339"; + scale = "2.4 2.4 2.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "232.058 -440.612 271.503"; + rotation = "0 0 1 119.733"; + scale = "1.6 1.6 1.6"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "217.559 -473.221 261.636"; + rotation = "0 0 1 2.85806"; + scale = "2.4 2.4 2.4"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "236.914 -464.547 261.535"; + rotation = "0 0 -1 22.3453"; + scale = "2 2 2"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "295.002 -542.511 265.429"; + rotation = "0.235899 -0.942758 -0.235711 93.3298"; + scale = "2.5 2.5 2.5"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new SimGroup(Addition1BEPlant5) { + }; + new SimGroup(Addition2BEPlant5) { + }; + new SimGroup(Addition3BEPlant5) { + }; + new SimGroup(Addition4BEPlant5) { + }; + new SimGroup(Addition5BEPlant5) { + }; + new SimGroup(Addition1BEPlant5) { + + new TSStatic() { + position = "-76 364 219.063"; + rotation = "-0.584241 0.395508 0.708686 38.7655"; + scale = "2.1 2.1 2.1"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-316 12 201.578"; + rotation = "-0.254288 0.58055 0.773498 20.5961"; + scale = "1.8 1.8 1.8"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "92 252 226.766"; + rotation = "0.0778622 -0.0819657 -0.993589 68.3424"; + scale = "2.2 2.2 2.2"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-124 -540 218.937"; + rotation = "0.291422 0.14819 0.945046 68.9915"; + scale = "2.5 2.5 2.5"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "124 -524 245.922"; + rotation = "-0.143826 0.184679 0.972218 132.207"; + scale = "1.9 1.9 1.9"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "228 84 226.844"; + rotation = "0.141645 0.070786 0.987383 114.663"; + scale = "2.5 2.5 2.5"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-404 -236 210.953"; + rotation = "0.141386 0.0478506 0.988797 156.261"; + scale = "1.7 1.7 1.7"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-12 -532 204.828"; + rotation = "0.307318 0.348346 0.885557 67.2613"; + scale = "2.1 2.1 2.1"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "188 -204 217.688"; + rotation = "0 0 -1 38"; + scale = "1.3 1.3 1.3"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-196 -316 247.812"; + rotation = "-0.108982 -0.148946 0.982821 134.71"; + scale = "2.2 2.2 2.2"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "276 140 207.25"; + rotation = "0.03768 0.258884 -0.965173 53.6181"; + scale = "1.3 1.3 1.3"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "132 -252 236.156"; + rotation = "0.106106 -0.196668 0.974712 183.899"; + scale = "2.2 2.2 2.2"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-404 -236 210.953"; + rotation = "0.120382 0.0833504 0.989222 187.914"; + scale = "2.4 2.4 2.4"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "212 212 228.203"; + rotation = "-0.134147 -0.190994 0.972382 132.2"; + scale = "1.3 1.3 1.3"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "20 -412 190.75"; + rotation = "-0.0872222 0.133133 -0.987253 78.7198"; + scale = "1.4 1.4 1.4"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-172 220 216.906"; + rotation = "-0.631038 -0.519974 -0.575689 42.1231"; + scale = "2.5 2.5 2.5"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-268 108 211.062"; + rotation = "0.190521 0.402838 -0.895223 33.3257"; + scale = "1.5 1.5 1.5"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-332 36 203.031"; + rotation = "-0.0772806 0.0699369 -0.994553 81.309"; + scale = "2.3 2.3 2.3"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "28 -484 196.406"; + rotation = "0.14893 0.280656 0.948184 86.0343"; + scale = "1.1 1.1 1.1"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "348 28 223.781"; + rotation = "0.227629 0.0697244 -0.971248 74.6054"; + scale = "1.3 1.3 1.3"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-332 -364 190.859"; + rotation = "-0.026595 -0.0669404 0.997402 221.9"; + scale = "1.5 1.5 1.5"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-60 228 215.719"; + rotation = "0.987098 0.160118 0 27.4558"; + scale = "1.7 1.7 1.7"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-316 -324 202.953"; + rotation = "-0.0525722 -0.182607 0.981779 224.26"; + scale = "2.1 2.1 2.1"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "220 -268 231.172"; + rotation = "-0.198697 -0.110621 0.973798 193.637"; + scale = "1.9 1.9 1.9"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "292 -484 249.828"; + rotation = "-0.257172 0.0226856 0.966099 166.471"; + scale = "2.1 2.1 2.1"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-308 -436 210.609"; + rotation = "0.0253827 0.225634 0.973881 201.439"; + scale = "1.1 1.1 1.1"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-44 364 227.125"; + rotation = "-0.186972 -0.156535 0.969814 137.207"; + scale = "1 1 1"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "44 -524 213.047"; + rotation = "-0.194518 0.134192 0.971677 217.975"; + scale = "2.2 2.2 2.2"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-36 260 208.969"; + rotation = "0.0741516 0.367435 0.927088 50.254"; + scale = "2.4 2.4 2.4"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-196 -556 245.125"; + rotation = "0.0698953 0.170846 0.982816 221.34"; + scale = "1.2 1.2 1.2"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "316 -60 242.609"; + rotation = "-0.0145151 0.262002 0.964958 70.9201"; + scale = "1.5 1.5 1.5"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-444 -276 228.047"; + rotation = "0.144893 -0.0965901 0.984721 131.662"; + scale = "1.1 1.1 1.1"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "172 -308 205.047"; + rotation = "-0.213094 -0.266228 0.94006 216.824"; + scale = "1.7 1.7 1.7"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "132 276 239.578"; + rotation = "-0.325251 -0.128833 0.93681 127.043"; + scale = "2.2 2.2 2.2"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-396 -228 207.984"; + rotation = "0.245741 -0.407383 -0.879574 21.5442"; + scale = "2.5 2.5 2.5"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-140 -524 216.562"; + rotation = "0.262044 -0.0836397 0.961425 60.9513"; + scale = "2.1 2.1 2.1"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-4 -572 224.313"; + rotation = "0.0936699 0.265267 0.959614 119.085"; + scale = "1.5 1.5 1.5"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "268 -76 226.266"; + rotation = "0.158648 0.183103 -0.970208 26.77"; + scale = "1.5 1.5 1.5"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "100 -396 189.234"; + rotation = "0.630666 0.65408 0.41766 28.2505"; + scale = "1.4 1.4 1.4"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-316 188 229.266"; + rotation = "-0.20871 -0.206804 0.955862 77.5126"; + scale = "2.4 2.4 2.4"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "236 76 227.75"; + rotation = "0.20183 0.0402051 0.978595 100.222"; + scale = "1.2 1.2 1.2"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-316 -356 194.469"; + rotation = "-0.653889 0.739934 0.157883 24.944"; + scale = "1.8 1.8 1.8"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "164 244 231.891"; + rotation = "-0.0808264 -0.218534 0.972476 199.46"; + scale = "2.2 2.2 2.2"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-268 -316 220.484"; + rotation = "-0.574159 0.349585 -0.740359 58.452"; + scale = "1 1 1"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-452 -68 228.75"; + rotation = "0.101979 -0.134466 0.985657 130.632"; + scale = "2.2 2.2 2.2"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "52 276 226.656"; + rotation = "0.0416861 0.106306 -0.993459 115.34"; + scale = "1.5 1.5 1.5"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-4 -460 185.922"; + rotation = "-0.0942968 0.0958073 0.990923 149.268"; + scale = "2.5 2.5 2.5"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-340 -380 191"; + rotation = "0.0901365 0.0108824 0.99587 116.213"; + scale = "1.3 1.3 1.3"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "92 -428 195.844"; + rotation = "-0.282075 0.147021 0.94806 230.599"; + scale = "2.1 2.1 2.1"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-20 -452 182.437"; + rotation = "-0.280494 0.358169 0.890527 20.1697"; + scale = "1.2 1.2 1.2"; + shapeName = "borg5.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition3belgtree19) { + + new TSStatic() { + position = "-44 -260 277.797"; + rotation = "0 0 1 143"; + scale = "2.3 2.3 2.3"; + shapeName = "borg19.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition1belgtree16) { + + new TSStatic() { + position = "-116 -100 331.969"; + rotation = "0 0 1 240"; + scale = "1.8 1.8 1.8"; + shapeName = "borg16.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition2belgtree18) { + }; + }; + new SimGroup(BrokenBridge) { + + new InteriorInstance() { + position = "-219.516 -219.062 267.48"; + rotation = "0 0 1 9.74027"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-222.223 -234.832 267.48"; + rotation = "0 0 1 9.74027"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-224.93 -250.601 267.48"; + rotation = "0 0 1 9.74027"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-275.28 -543.92 279.828"; + rotation = "0 0 1 9.74027"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-272.573 -528.151 279.828"; + rotation = "0 0 1 9.74027"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-269.866 -512.381 279.828"; + rotation = "0 0 1 9.74027"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-268.225 -490.815 248.206"; + rotation = "0.881489 -0.442872 0.163836 38.4401"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-267.949 -477.602 239.186"; + rotation = "0.881489 -0.442872 0.163836 38.4401"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-267.674 -464.39 230.166"; + rotation = "0.881489 -0.442872 0.163836 38.4401"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-228.055 -415.366 204.847"; + rotation = "-0.070018 0.994586 0.0767802 159.677"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-229.861 -399.713 207.63"; + rotation = "-0.0650487 0.994992 0.0758883 159.634"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-231.445 -384.022 210.333"; + rotation = "-0.0650487 0.994992 0.0758883 159.634"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-228.807 -358.871 214.764"; + rotation = "-0.175468 0.982798 -0.0576163 44.2908"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-230.235 -343.026 216.467"; + rotation = "-0.175468 0.982798 -0.0576163 44.2908"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-231.663 -327.181 218.17"; + rotation = "-0.175468 0.982798 -0.0576163 44.2908"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-231.146 -307.336 245.867"; + rotation = "-0.568953 0.81974 -0.0657195 16.0415"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-231.737 -291.547 248.389"; + rotation = "-0.568953 0.81974 -0.0657195 16.0415"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-232.318 -275.751 250.871"; + rotation = "-0.568953 0.81974 -0.0657195 16.0415"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-255.303 -432.326 211.876"; + rotation = "1 0 0 34.3775"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-255.388 -450.375 220.58"; + rotation = "0.905039 -0.36844 0.212502 21.1703"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-285.97 -546.97 276.292"; + rotation = "0 0 -1 81.36"; + scale = "1 1 1"; + interiorFile = "bmisc8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-266.802 -550.925 276.292"; + rotation = "0 0 -1 81.36"; + scale = "1 1 1"; + interiorFile = "bmisc8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-228.678 -212.179 265.453"; + rotation = "0 0 -1 81.36"; + scale = "1 1 1"; + interiorFile = "bmisc8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-209.51 -216.134 265.453"; + rotation = "0 0 -1 81.36"; + scale = "1 1 1"; + interiorFile = "bmisc8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(Rocks) { + + new InteriorInstance() { + position = "-149.575 -1.59528 306.639"; + rotation = "0 1 0 189.649"; + scale = "1 1 1"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-257.659 -187.417 284.342"; + rotation = "1 0 0 108.289"; + scale = "2 2 2"; + interiorFile = "brock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "162.834 -4.09692 267.369"; + rotation = "-0.128609 -0.455819 0.880732 35.5264"; + scale = "1 1 1"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-142.589 3.30827 307.033"; + rotation = "0.526044 0.777227 0.345247 125.948"; + scale = "5 5 5"; + interiorFile = "brock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-95.1264 120.591 281.28"; + rotation = "-0.914865 -0.382624 0.128924 40.4378"; + scale = "2 1 2"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new TSStatic() { + position = "322.942 -617.276 253.475"; + rotation = "0 0 1 221"; + scale = "2.4 2.4 2.4"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new InteriorInstance() { + position = "294.082 -550.15 269.956"; + rotation = "0 -1 0 21.1994"; + scale = "1 1 1"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(Bridge2) { + + new InteriorInstance() { + position = "449.612 -703.738 260.153"; + rotation = "-0 0 -1 32.6586"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "440.978 -690.267 260.153"; + rotation = "-0 0 -1 32.6586"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "432.462 -676.982 258.382"; + rotation = "0.350878 0.102799 -0.930762 34.9449"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "424.036 -663.836 254.891"; + rotation = "0.350878 0.102799 -0.930762 34.9449"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "415.61 -650.69 251.399"; + rotation = "0.350878 0.102799 -0.930762 34.9449"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "407.301 -637.727 251.242"; + rotation = "-0.336828 -0.0986828 -0.936381 34.7479"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "398.207 -623.539 259.836"; + rotation = "-0 0 -1 32.6586"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(WaterContents) { + + new InteriorInstance() { + position = "273.853 -55.6765 265.887"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bplat3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "174.365 -273.544 219.674"; + rotation = "0 0 1 215.042"; + scale = "1 1 1"; + interiorFile = "bspir4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "177.727 -406.903 225.724"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "31.0689 -383.308 198.447"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-47.119 -503.749 190.483"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-60.3946 -450.437 186.385"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "231.35 -86.0575 221.949"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir5.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-250.825 -365.396 203.645"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-269.305 -360.283 202.086"; + rotation = "0 0 1 91.6732"; + scale = "1 1 1"; + interiorFile = "bspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-336.1 -445.993 216.56"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-399.025 -397.772 200.12"; + rotation = "0 0 1 81.933"; + scale = "1 1 1"; + interiorFile = "bspir3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-379.172 -290.013 205.57"; + rotation = "0 0 -1 64.7442"; + scale = "1 1 1"; + interiorFile = "bspir1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-354.292 -262.179 204.821"; + rotation = "0 0 1 44.6907"; + scale = "1 1 1"; + interiorFile = "bspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-417.304 -249.43 216.325"; + rotation = "0 0 -1 60.1606"; + scale = "1 1 1"; + interiorFile = "bspir4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-388.6 -150.142 204.804"; + rotation = "0 0 1 109.435"; + scale = "1 1 1"; + interiorFile = "bspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-439.764 -106.827 214.647"; + rotation = "0 0 -1 14.3239"; + scale = "1 1 1"; + interiorFile = "bspir3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-373.657 -48.6897 196.657"; + rotation = "0 0 1 107.143"; + scale = "1 1 1"; + interiorFile = "bspir4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-302.29 2.71976 201.069"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-317.085 79.2965 200.241"; + rotation = "0 0 1 107.716"; + scale = "1 1 1"; + interiorFile = "bspir4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-212.911 143.3 223.022"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-120.908 281.172 196.115"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-106.481 267.853 196.695"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "18.9722 288.983 218.34"; + rotation = "0 0 1 27.502"; + scale = "1 1 1"; + interiorFile = "bspir5.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "201.641 143.726 218.886"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "309.48 71.0828 206.015"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "254.114 20.4043 229.49"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(WaterSounds) { + + new AudioEmitter() { + position = "231.44 -325.633 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "201.971 -422.632 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "115.871 -511.306 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "84.8745 -603.836 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-20.9008 -686.76 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-85.1647 -612.693 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-191.403 -542.97 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-334.453 -480.642 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-496.348 -452.204 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-478.977 -271.207 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-459.884 -130.357 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-398.473 61.6097 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-358.988 202.107 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-217.235 234.927 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-175.189 366.753 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-146.077 524.117 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-25.1115 372.458 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "134.257 271.034 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "119.627 195.697 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "207.561 94.9201 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "235.095 -24.2143 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "186.309 -115.834 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "135.067 -236.408 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "46.8996 -326.224 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-80.8344 -332.597 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-199.054 -287.005 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-309.705 -216.972 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-275.188 -53.7313 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-201.857 78.5232 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-125.689 178.607 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "5.70642 159.753 258.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + locked = "true"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Archipelago.mis b/base/missions/Archipelago.mis new file mode 100644 index 0000000..500e0e5 --- /dev/null +++ b/base/missions/Archipelago.mis @@ -0,0 +1,1631 @@ +// MissionTypes = CTF +// DisplayName = Archipelago + +//--- MISSION QUOTE BEGIN --- +//Take the high ground. Burn the valleys. Scatter your enemies' ashes across the waters afterwards. +// -- attributed to Great Eagle Alexandre Konovalev, 3925 CE +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[CTF]5 flag captures to win +//Four structures per side: main base, flag tower, two sensor towers +//Low visibility; skiing near impossible +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + powerCount = "0"; + CTF_timeLimit = "25"; + cdTrack = "2"; + CTF_scoreLimit = "5"; + musicTrack = "lush"; + + new MissionArea(MissionArea) { + area = "-520 -792 1040 1600"; + flightCeiling = "300"; + flightCeilingRange = "20"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.700000 0.700000 0.700000 1.000000"; + ambient = "0.300000 0.300000 0.300000 1.000000"; + rotation = "1 0 0 0"; + locked = "true"; + scale = "1 1 1"; + position = "-536 -1240 0"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/lushdet1"; + terrainFile = "Archipelago.ter"; + squareSize = "8"; + emptySquares = "403592 600455 535175 142216 142219 76686 76937 76941 142729 142733 339594 87934 96876 100765 109437 315497 577895 578151 578407"; + locked = "true"; + visibleDistance = "500"; + hazeDistance = "250"; + position = "-1024 -1024 0"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "70"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + rotation = "0 0 0 0"; + GraphFile = "Archipelago.nav"; + locked = "true"; + XDimOverSize = "0"; + scale = "1 1 1"; + conjoinBowlDev = "20"; + position = "0 0 0 1"; + coverage = "0"; + YDimOverSize = "0"; + }; + new WaterBlock() { + position = "-1024 -1024 -39.8"; + rotation = "1 0 0 0"; + scale = "2048 2048 200"; + liquidType = "OceanWater"; + density = "1"; + viscosity = "5"; + waveMagnitude = "4"; + surfaceTexture = "LiquidTiles/BlueWater"; + surfaceOpacity = "0.4"; + envMapTexture = "lush/skies/lushcloud1"; + envMapIntensity = "0.2"; + removeWetEdges = "0"; + locked = "true"; + }; + new Sky(Sky) { + position = "-536 -1240 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "500"; + useSkyTextures = "1"; + SkySolidColor = "0.390000 0.390000 0.390000 1.000000"; + fogDistance = "250"; + fogColor = "0.600000 0.600000 0.600000 1.000000"; + fogVolume1 = "50 0 160"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "Lush_l4.dml"; + windVelocity = "0 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "0.08230 0.235200 0.549000 1.0"; + cloudSpeed0 = "0.000500 0.000500"; + locked = "true"; + }; + new SimGroup(Teams) { + + new SimGroup(Team1) { + + new SimGroup(Objects) { + + new SimGroup(OneMain) { + + new StaticShape() { + position = "-141.479 662.59 218.64"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + Target = "33"; + locked = "true"; + }; + new StaticShape() { + position = "-297.688 583.514 168.1"; + rotation = "0 0 1 9.99997"; + scale = "1 1 1"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + locked = "true"; + mobileBaseVehicle = "Removed"; + }; + new StaticShape() { + position = "-19.153 349.516 233.041"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Forward"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "35"; + locked = "true"; + }; + new StaticShape() { + position = "-157.301 652.342 253.59"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "36"; + locked = "true"; + }; + new StaticShape() { + position = "-177.195 652.642 253.59"; + rotation = "0 0 1 89.3814"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "37"; + locked = "true"; + }; + new InteriorInstance() { + position = "71.9497 419.117 163.6"; + rotation = "0 0 1 217.724"; + scale = "1 1 1"; + interiorFile = "bbrdga.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "81.4297 431.39 163.6"; + rotation = "0 0 1 217.724"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "91.2088 444.025 163.6"; + rotation = "0 0 1 217.724"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-19.14 346.9 232.13"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bbunkd.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-167.159 659.969 217.61"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bbase7.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape() { + position = "-193.171 662.696 218.64"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + Target = "38"; + locked = "true"; + }; + new StaticShape() { + position = "-54.0086 637.324 197.93"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "Flag Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "39"; + locked = "true"; + }; + new InteriorInstance() { + position = "-66.588 630.79 204.432"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bbunk2.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new Item() { + position = "-66.4878 624.459 228.436"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + Target = "40"; + locked = "true"; + }; + new InteriorInstance() { + position = "-297.751 577.366 168.4"; + rotation = "0 0 1 190"; + scale = "1 0.755516 1"; + interiorFile = "bvpad.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Turret() { + position = "-19.3771 345.613 240.702"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "Forward"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "AABarrelLarge"; + Target = "41"; + locked = "true"; + }; + }; + new SimGroup(OneWest) { + providesPower = "1"; + + new StaticShape() { + position = "-445.835 542.294 215.15"; + rotation = "0 0 1 136.937"; + scale = "1 1 1"; + nameTag = "West Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "42"; + locked = "true"; + }; + new InteriorInstance() { + position = "-447.172 543.329 199.14"; + rotation = "0 0 -1 43.5448"; + scale = "1 1 1"; + interiorFile = "btowr8.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape() { + position = "-448.098 544.367 232.716"; + rotation = "0 0 1 136.937"; + scale = "1 1 1"; + nameTag = "West Tower"; + dataBlock = "SensorLargePulse"; + lockCount = "0"; + homingCount = "0"; + Target = "43"; + locked = "true"; + }; + }; + new SimGroup(OneEast) { + providesPower = "1"; + + new StaticShape() { + position = "278.747 613.8 224.151"; + rotation = "0 0 1 34.9504"; + scale = "1 1 1"; + nameTag = "East Tower"; + dataBlock = "SensorLargePulse"; + lockCount = "0"; + homingCount = "0"; + Target = "44"; + locked = "true"; + }; + new InteriorInstance() { + position = "283.964 619.197 190.45"; + rotation = "0 0 -1 54.431"; + scale = "1 1 1"; + interiorFile = "btowr8.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new Item() { + position = "287.049 623.05 196.942"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new StaticShape() { + position = "285.011 618.023 206.45"; + rotation = "0 0 1 126.051"; + scale = "1 1 1"; + nameTag = "East Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "45"; + locked = "true"; + }; + }; + }; + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-165.475 639.521 257.763"; + rotation = "0 0 1 89.3814"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "70"; + sphereWeight = "60"; + indoorWeight = "40"; + outdoorWeight = "60"; + locked = "true"; + }; + new SpawnSphere() { + position = "-428.833 534.025 207.187"; + rotation = "0 0 1 27.5019"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "40"; + sphereWeight = "20"; + indoorWeight = "70"; + outdoorWeight = "30"; + locked = "true"; + }; + new SpawnSphere() { + position = "284.44 614.618 210.439"; + rotation = "0 0 1 189.259"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "40"; + sphereWeight = "20"; + indoorWeight = "60"; + outdoorWeight = "40"; + locked = "true"; + }; + }; + new StaticShape() { + position = "-66.5359 624.467 228.276"; + rotation = "0 0 -1 66.4631"; + scale = "1 1 1"; + dataBlock = "ExteriorFlagStand"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + locked = "true"; + }; + new SimGroup(Crates) { + + new TSStatic() { + position = "-182.041 670.482 230.61"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable5l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-153.29 671.133 230.61"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-61.2452 638.383 214.434"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable2s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-170.301 672.621 218.61"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-165.303 672.686 218.61"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-170.301 672.671 220.61"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "107.788 -697.586 250.02"; + rotation = "0 0 1 180.482"; + scale = "1 1 1"; + shapeName = "stackable5l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "79.0895 -697.887 250.02"; + rotation = "0 0 1 180.482"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "23.0473 -535.847 211.44"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable2s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "13.1609 -535.331 211.426"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable2m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "91.0325 -699.649 238.02"; + rotation = "0 0 1 180.482"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "96.1204 -699.709 240.02"; + rotation = "0 0 1 180.482"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + }; + }; + new SimGroup(Team2) { + + new SimGroup(Stuff) { + + new SimGroup(TwoWest) { + providesPower = "1"; + + new InteriorInstance() { + position = "-286.31 -451.03 227.38"; + rotation = "0 0 1 158.71"; + scale = "1 1 1"; + interiorFile = "btowr8.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape() { + position = "-278.446 -448.882 260.269"; + rotation = "0 0 1 68.182"; + scale = "1 1 1"; + nameTag = "West Tower"; + dataBlock = "SensorLargePulse"; + lockCount = "0"; + homingCount = "0"; + Target = "46"; + locked = "true"; + }; + new StaticShape() { + position = "-285.022 -454.327 243.4"; + rotation = "0 0 1 159.282"; + scale = "1 1 1"; + nameTag = "West Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "47"; + locked = "true"; + }; + new Item() { + position = "-283.324 -447.687 234.937"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + }; + new SimGroup(TwoEast) { + providesPower = "1"; + + new InteriorInstance() { + position = "348.69 -411.4 241.31"; + rotation = "0 0 1 93.3922"; + scale = "1 1 1"; + interiorFile = "btowr8.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape() { + position = "352.306 -411.627 257.31"; + rotation = "0 0 1 93.9651"; + scale = "1 1 1"; + nameTag = "East Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "48"; + locked = "true"; + }; + new StaticShape() { + position = "349.651 -412.018 274.857"; + rotation = "0 0 1 1.14602"; + scale = "1 1 1"; + nameTag = "East Tower"; + dataBlock = "SensorLargePulse"; + lockCount = "0"; + homingCount = "0"; + Target = "49"; + locked = "true"; + }; + new Item() { + position = "346.872 -415.327 248.304"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new Item() { + position = "-443.288 544.979 205.465"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + }; + new SimGroup(TwoMain) { + + new InteriorInstance() { + position = "92.88 -687.47 237.02"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + interiorFile = "bbase7.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new InteriorInstance() { + position = "-12 -323 203.12"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + interiorFile = "bbunkd.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Turret() { + position = "-11.886 -321.84 211.383"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Forward"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "AABarrelLarge"; + Target = "50"; + locked = "true"; + }; + new StaticShape() { + position = "-12.0407 -326.018 204.1"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "Forward"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "51"; + locked = "true"; + }; + new StaticShape() { + position = "118.821 -686.543 238.04"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + Target = "52"; + locked = "true"; + }; + new StaticShape() { + position = "66.7621 -686.399 238.04"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + Target = "53"; + locked = "true"; + }; + new StaticShape() { + position = "6.23562 -534.537 194.95"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Flag Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "54"; + locked = "true"; + }; + new InteriorInstance() { + position = "17.768 -528.009 201.444"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + interiorFile = "bbunk2.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape() { + position = "152.547 -458.643 164.3"; + rotation = "0 0 1 180.091"; + scale = "1 1 1"; + nameTag = "Vehicle Pad"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + locked = "true"; + mobileBaseVehicle = "Removed"; + }; + new StaticShape() { + position = "82.7444 -680.048 273.02"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "56"; + locked = "true"; + }; + new StaticShape() { + position = "102.891 -679.832 273.02"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "57"; + locked = "true"; + }; + new InteriorInstance() { + position = "152.595 -452.351 164.6"; + rotation = "1 0 0 0"; + scale = "1 0.755516 1"; + interiorFile = "bvpad.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-10.2898 -450.283 165.343"; + rotation = "-0 0 -1 12.605"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-6.78883 -465.88 165.343"; + rotation = "-0 0 -1 12.605"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new Item() { + position = "17.8433 -521.698 225.457"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + Target = "58"; + locked = "true"; + }; + }; + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "99.6132 -669.518 256.483"; + rotation = "0 0 -1 91.6732"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "60"; + indoorWeight = "40"; + outdoorWeight = "60"; + locked = "true"; + }; + new SpawnSphere() { + position = "-271.241 -432.981 250.672"; + rotation = "0 0 1 6.8755"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "40"; + sphereWeight = "20"; + indoorWeight = "70"; + outdoorWeight = "30"; + locked = "true"; + }; + new SpawnSphere() { + position = "356.944 -404.645 262.174"; + rotation = "0 0 1 189.259"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "40"; + sphereWeight = "20"; + indoorWeight = "60"; + outdoorWeight = "40"; + locked = "true"; + }; + }; + new StaticShape() { + position = "17.823 -521.729 225.417"; + rotation = "0 0 1 22.3453"; + scale = "1 1 1"; + dataBlock = "ExteriorFlagStand"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + locked = "true"; + }; + }; + new SimGroup(team0) { + }; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "-164.639 652.11 276.245"; + rotation = "0 0 1 174.179"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "355.392 -374.108 289.319"; + rotation = "0 0 1 211.031"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "213.255 488.603 221.244"; + rotation = "0 0 1 33.2315"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-6.6665 -303.04 232.248"; + rotation = "0 0 1 203.4"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Environmental) { + + new InteriorInstance() { + position = "-154.891 -43.33 249.141"; + rotation = "0 0 -1 88.8085"; + scale = "1 1 1"; + interiorFile = "bbunkd.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Item() { + position = "-155.184 -45.05 250.503"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Grenade"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new Item() { + position = "-155.111 -41.5 250.135"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new InteriorInstance() { + position = "234.97 76.62 193.192"; + rotation = "0 0 1 90.0456"; + scale = "1 1 1"; + interiorFile = "bbunkd.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new TSStatic() { + position = "380.967 165.71 163.458"; + rotation = "0 0 1 67.609"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new Item() { + position = "235.069 78.41 194.22"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Grenade"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new Item() { + position = "235.068 74.79 194.21"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new InteriorInstance() { + position = "2.553 -4.01 220.982"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bbunk5.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Item() { + position = "-2.549 -4.18 223.707"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "EnergyPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new Item() { + position = "7.402 -4.0601 223.672"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ShieldPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new Item() { + position = "2.528 -9.3 223.658"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new Item() { + position = "2.597 1.58 223.618"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AmmoPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new InteriorInstance() { + position = "101.015 456.685 163.6"; + rotation = "0 0 1 217.724"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new TSStatic() { + position = "209.559 -139.91 235.286"; + rotation = "0 0 -1 53.2851"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-200.754 9.8101 228.326"; + rotation = "0 0 -1 49.2744"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new InteriorInstance() { + position = "-13.7762 -434.665 165.343"; + rotation = "-0 0 -1 12.605"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-17.2722 -419.049 165.343"; + rotation = "-0 0 -1 12.605"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-20.7592 -403.437 165.343"; + rotation = "-0 0 -1 12.605"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-24.1442 -388.309 165.343"; + rotation = "-0 0 -1 12.605"; + scale = "1 1 1"; + interiorFile = "bbrdga.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new TSStatic() { + position = "-140.017 -23.5572 213.03"; + rotation = "-0.063568 0.205498 -0.976591 35.1513"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-22.602 -14.47 220.572"; + rotation = "0 0 1 217.334"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "45.749 -3.91 204.804"; + rotation = "0 0 1 123.186"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "227.556 528.52 176.57"; + rotation = "0 0 1 19.4805"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-138.409 610.36 212.881"; + rotation = "0 0 1 50.4203"; + scale = "1 1 0.9603"; + shapeName = "borg18.dts"; + locked = "true"; + }; + }; + new SimGroup(RandomOrganics) { + + new SimGroup(Addition1BEPlant1) { + + new TSStatic() { + position = "-241 -199 193.283"; + rotation = "-0.0542544 -0.199028 0.978491 115.134"; + scale = "1 1 1"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "215 329 183.724"; + rotation = "-0.147643 0.0594824 0.98725 186.911"; + scale = "1.2 1.2 1.2"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "7 249 166.521"; + rotation = "-0.203036 -0.167768 0.964692 118.82"; + scale = "0.7 0.7 0.7"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-9 345 233.795"; + rotation = "-0.109097 0.0226797 -0.993772 116.321"; + scale = "1.7 1.7 1.7"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "126 -495 109.163"; + rotation = "-0.0549627 -0.07482 0.995681 155.105"; + scale = "1.7 1.7 1.7"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-265 -351 157.033"; + rotation = "0.770858 0.586973 0.247468 35.2843"; + scale = "1.4 1.4 1.4"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-264.8 -31 181.068"; + rotation = "-0.219107 -0.118027 0.968536 177.094"; + scale = "1.2 1.2 1.2"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "287 -135 204.658"; + rotation = "0.0976782 -0.152117 -0.983524 97.9437"; + scale = "1.4 1.4 1.4"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "495 -255 196.775"; + rotation = "0.436955 0.670805 0.599242 39.0601"; + scale = "0.8 0.8 0.8"; + shapeName = "borg1.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition2BEPlant5) { + + new TSStatic() { + position = "407.219 -455.165 212.409"; + rotation = "-0.203065 -0.129817 0.970522 154.742"; + scale = "1.1 1.1 1.1"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "239.219 -63.1649 255.714"; + rotation = "0.653417 0.640918 -0.402828 29.2462"; + scale = "1.3 1.3 1.3"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-296.781 -271.165 201.042"; + rotation = "-0.0500304 -0.261748 0.963839 181.928"; + scale = "1 1 1"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-264.781 272.835 157.003"; + rotation = "0.561034 -0.0497987 -0.826293 44.0897"; + scale = "1.4 1.4 1.4"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "199.219 320.835 179.48"; + rotation = "0.0803559 -0.176469 0.981021 223.243"; + scale = "1.2 1.2 1.2"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "311.219 -183.165 173.249"; + rotation = "-0.995943 -0.0840936 -0.032034 30.4815"; + scale = "1.5 1.5 1.5"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-32.7809 -495.165 170.671"; + rotation = "-0.084007 0.357062 0.930295 102.075"; + scale = "1.4 1.4 1.4"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "495.219 -351.165 218.281"; + rotation = "0.255359 0.120499 0.959308 137.629"; + scale = "1.4 1.4 1.4"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "255.219 -191.165 221.46"; + rotation = "0.253789 -0.918787 0.302361 19.6667"; + scale = "1.2 1.2 1.2"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-64.7809 -463.165 153.499"; + rotation = "0.0142854 -0.167181 0.985823 231.358"; + scale = "1 1 1"; + shapeName = "borg5.dts"; + locked = "true"; + }; + }; + }; + new SimGroup(AmbientSounds) { + + new AudioEmitter() { + position = "82.4799 485.372 184.481"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/frog1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "20000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "61.6892 13.9721 224.812"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo5.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "20000"; + maxLoopGap = "40000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-120.093 -5.3815 280.551"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "40"; + maxDistance = "2560"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "50000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "57.1165 -236.008 170.457"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/frog2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "20000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "211.971 -138.511 249.566"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo3.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "30000"; + maxLoopGap = "60000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "136.054 348.542 168.935"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/frog2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "20000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-400.221 592.224 167.564"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/frog1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "20000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-259.283 -106.685 161.016"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/frog1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "20000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-60.1574 -272.541 242.677"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo4.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "10"; + maxDistance = "640"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "20000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "255.111 577.416 163.925"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/frog2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "15000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "382.261 176.691 172.744"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "50000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-248.668 -417.85 179.707"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/frog1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "20000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "305.116 -375.013 190.418"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo3.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "20000"; + maxLoopGap = "70000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-21.4999 620.747 216.535"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "20000"; + maxLoopGap = "60000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "1.0622 -445.354 168.76"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/frog2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "20000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "140.348 -630.719 234.072"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo4.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "20000"; + maxLoopGap = "40000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-241.067 269.031 194.095"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/frog2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "50"; + maxDistance = "3200"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "5000"; + maxLoopGap = "10000"; + type = "EffectAudioType"; + locked = "true"; + }; + }; + new TSStatic() { + position = "96.107 -699.669 238.02"; + rotation = "0 0 1 180.482"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "603.313 961.995 178.019"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "statue_base.dts"; + locked = "true"; + }; + new TSStatic() { + position = "603.253 961.559 181.33"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + shapeName = "statue_lmale.dts"; + locked = "true"; + }; +}; + +//--- OBJECT WRITE END --- diff --git a/base/missions/AshesToAshes.mis b/base/missions/AshesToAshes.mis new file mode 100644 index 0000000..fb6cdf9 --- /dev/null +++ b/base/missions/AshesToAshes.mis @@ -0,0 +1,1029 @@ +// DisplayName = Ashes to Ashes +// MissionTypes = CnH + +//--- MISSION QUOTE BEGIN --- +//The Hordes come straight at you and give no quarter. Fine. We like that. +// -- Lykaios Jade, Leut-Prime of the Blood Eagle +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[CnH]Five towers, each with a control switch +//[CnH]Vehicle stations at NW and SE towers +//[CnH]Poor visibility; skiing very difficult +//[CnH]6000 points needed to win +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + CnH_timeLimit = "25"; + powerCount = "0"; + cdTrack = "4"; + musicTrack = "badlands"; + + new MissionArea(MissionArea) { + area = "-472 -840 1152 1152"; + flightCeiling = "2000"; + flightCeilingRange = "50"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.600000 0.600000 0.600000 1.000000"; + ambient = "0.200000 0.200000 0.200000 1.000000"; + position = "-1024 -1024 0"; + locked = "true"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/baddet1"; + terrainFile = "AshesToAshes.ter"; + squareSize = "8"; + emptySquares = "250"; + position = "-1024 -1024 0"; + locked = "true"; + hazeDistance = "250"; + visibleDistance = "1200"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "60"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + position = "0 0 0 1"; + GraphFile = "AshesToAshes.nav"; + locked = "true"; + coverage = "0"; + YDimOverSize = "0"; + rotation = "0 0 0 0"; + scale = "1 1 1"; + XDimOverSize = "0"; + conjoinBowlDev = "20"; + }; + new Sky(Sky) { + position = "-1024 -1024 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "650"; + useSkyTextures = "0"; + SkySolidColor = "0.700000 0.700000 0.700000 1.000000"; + fogDistance = "290"; + fogColor = "0.540000 0.340000 0.150000 1.000000"; + fogVolume1 = "0 0 0"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "sky_badlands_cloudy.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 0.000000"; + locked = "true"; + cloudSpeed0 = "0.000500 0.005000"; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "142.26 -133.251 391.776"; + rotation = "0.00375349 -0.104806 0.994486 175.92"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-120.566 124.78 182.645"; + rotation = "0 0 1 167.877"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "586.7 212.94 207.692"; + rotation = "0 0 1 146.677"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "405.34 -583.41 206.67"; + rotation = "0 0 1 100.841"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-366.632 -679.139 249.169"; + rotation = "0 0 -1 50.9932"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + + new SimGroup(Team1) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "511.32 175.87 177.02"; + rotation = "0 0 1 182.774"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "30"; + outdoorWeight = "70"; + locked = "true"; + }; + }; + }; + new SimGroup(Team2) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-347.364 -678.07 150.443"; + rotation = "0 0 -1 46.4096"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "10"; + outdoorWeight = "90"; + locked = "true"; + }; + }; + }; + new SimGroup(Team0) { + + new SimGroup(Towers) { + + new SimGroup(Tower1) { + + new InteriorInstance() { + position = "486.83 199.12 171.421"; + rotation = "0 0 -1 115.347"; + scale = "1 1 1"; + interiorFile = "xbunk9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "545.25 141.2 139.201"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "xbunk6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "545.03 141.07 162.058"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "NE Tower"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + Target = "33"; + locked = "true"; + Projector = "3309"; + name = "NE Tower"; + }; + new Item() { + position = "545.09 141.25 141.577"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new StaticShape() { + position = "473.05 197.93 173.42"; + rotation = "0 0 -1 68.182"; + scale = "1 1 1"; + nameTag = "NE Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "34"; + locked = "true"; + }; + new StaticShape() { + position = "477.33 189.12 173.42"; + rotation = "0 0 1 198.999"; + scale = "1 1 1"; + nameTag = "NE Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "35"; + locked = "true"; + }; + new StaticShape() { + position = "504.94 206.34 -178.578"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "NE Tower"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + Target = "36"; + locked = "true"; + }; + new WayPoint() { + position = "544.32 141.57 154.752"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "NE Tower"; + team = "0"; + locked = "true"; + }; + new StaticShape() { + position = "542.04 142.91 168.842"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + locked = "true"; + holo = "0"; + }; + }; + new SimGroup(Tower2) { + + new InteriorInstance() { + position = "394.99 -660.411 142.682"; + rotation = "0 0 -1 61.8794"; + scale = "1 1 1"; + interiorFile = "xtowr1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_1"; + locked = "true"; + }; + new StaticShape() { + position = "394.92 -660.453 183.097"; + rotation = "0 0 1 24.0642"; + scale = "1 1 1"; + nameTag = "SE Tower"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + Target = "37"; + locked = "true"; + Projector = "3317"; + name = "SE Tower"; + }; + new StaticShape() { + position = "405.399 -641.917 210.055"; + rotation = "0 0 -1 20.6265"; + scale = "1 1 1"; + nameTag = "SE Tower"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + Target = "38"; + locked = "true"; + }; + new Item() { + position = "404.07 -665.679 160.151"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new StaticShape() { + position = "405.97 -664.669 135.73"; + rotation = "0 0 1 26.929"; + scale = "1 1 1"; + nameTag = "SE Tower"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + Target = "39"; + locked = "true"; + }; + new WayPoint() { + position = "394.17 -659.811 176.185"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "SE Tower"; + team = "0"; + locked = "true"; + }; + new StaticShape() { + position = "412.45 -627.79 207.62"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + locked = "true"; + holo = "0"; + }; + new StaticShape() { + position = "389.47 -671.308 135.68"; + rotation = "0 0 1 208.739"; + scale = "1 1 1"; + nameTag = "SE Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "40"; + locked = "true"; + }; + new SimGroup(Spawns) { + + new SpawnSphere() { + position = "460.52 -653.29 146.212"; + rotation = "0 0 1 236.059"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "75"; + sphereWeight = "100"; + indoorWeight = "30"; + outdoorWeight = "70"; + locked = "true"; + }; + }; + new StaticShape() { + position = "536.53 -606.269 135.745"; + rotation = "0 0 1 159.855"; + scale = "1 1 1"; + nameTag = "Vehicle Pad"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + mobileBaseVehicle = "Removed"; + Target = "-1"; + locked = "true"; + AssaultVehicle = "Removed"; + scoutVehicle = "Removed"; + }; + }; + new SimGroup(Tower3) { + + new InteriorInstance() { + position = "128.78 -257.206 257.604"; + rotation = "0 0 -1 48.7014"; + scale = "1 1 1"; + interiorFile = "xtowr4.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_1"; + locked = "true"; + }; + new StaticShape() { + position = "129.01 -257.276 246.325"; + rotation = "0 0 1 35.5234"; + scale = "1 1 1"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + tHoldThread = "763"; + Target = "42"; + locked = "true"; + tCapThread = "722"; + Projector = "3336"; + pCapThread = "721"; + name = "Center Tower"; + }; + new StaticShape() { + position = "107.37 -274.354 383.839"; + rotation = "0 0 1 220.589"; + scale = "1 1 1"; + nameTag = "Center Tower"; + dataBlock = "SensorLargePulse"; + lockCount = "0"; + homingCount = "0"; + Target = "43"; + locked = "true"; + }; + new StaticShape() { + position = "151.88 -238.686 383.979"; + rotation = "0 0 1 43.5448"; + scale = "1 1 1"; + nameTag = "Center Tower"; + dataBlock = "SensorLargePulse"; + lockCount = "0"; + homingCount = "0"; + Target = "44"; + locked = "true"; + }; + new Turret() { + position = "111.34 -233.865 384.548"; + rotation = "0 0 -1 48.7014"; + scale = "1 1 1"; + nameTag = "Center Tower"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "MissileBarrelLarge"; + Target = "45"; + locked = "true"; + }; + new Turret() { + position = "146.24 -280.521 384.444"; + rotation = "0 0 1 132.926"; + scale = "1 1 1"; + nameTag = "Center Tower"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "MissileBarrelLarge"; + Target = "46"; + locked = "true"; + }; + new WayPoint() { + position = "127.995 -256.781 246.416"; + rotation = "1 0 0 0"; + scale = "0.1 0.1 0.1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Center Tower"; + team = "0"; + locked = "true"; + }; + new StaticShape() { + position = "153.42 -267.387 262.175"; + rotation = "0 0 1 41.253"; + scale = "1 1 1"; + nameTag = "Center Tower"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + Target = "47"; + locked = "true"; + }; + new Item() { + position = "140.8 -282.345 305.721"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new StaticShape() { + position = "106.05 -244.939 249.65"; + rotation = "0 0 1 41.253"; + scale = "1 1 1"; + nameTag = "Center Tower"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + Target = "48"; + locked = "true"; + }; + new StaticShape() { + position = "156.93 -272.21 384.48"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + locked = "true"; + holo = "0"; + }; + }; + new SimGroup(Tower4) { + + new InteriorInstance() { + position = "-198.924 103.03 139.199"; + rotation = "0 0 -1 53.2851"; + scale = "1 1 1"; + interiorFile = "xtowr1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_1"; + locked = "true"; + }; + new StaticShape() { + position = "-198.981 103.15 179.64"; + rotation = "0 0 1 30.9397"; + scale = "1 1 1"; + nameTag = "NW Tower"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + Target = "49"; + locked = "true"; + Projector = "3350"; + name = "NW Tower"; + }; + new StaticShape() { + position = "-187.745 96.81 132.244"; + rotation = "0 0 1 37.8152"; + scale = "1 1 1"; + nameTag = "NW Tower"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + Target = "50"; + locked = "true"; + }; + new StaticShape() { + position = "-191.508 112.65 132.189"; + rotation = "0 0 1 36.0963"; + scale = "1 1 1"; + nameTag = "NW Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "51"; + locked = "true"; + }; + new WayPoint() { + position = "-197.816 101.65 171.819"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "NW Tower"; + team = "0"; + locked = "true"; + }; + new SimGroup(Spawns) { + + new SpawnSphere() { + position = "-206.562 186.76 149.844"; + rotation = "0 0 1 67.4269"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "75"; + sphereWeight = "100"; + indoorWeight = "30"; + outdoorWeight = "0"; + locked = "true"; + }; + }; + new StaticShape() { + position = "-186.116 120.402 206.37"; + rotation = "0 0 -1 12.6051"; + scale = "1 1 1"; + nameTag = "NW Tower"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + Target = "52"; + locked = "true"; + }; + new StaticShape() { + position = "-202.771 250.203 136.231"; + rotation = "-0 0 -1 1.14602"; + scale = "1 1 1"; + nameTag = "Vehicle Pad"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + mobileBaseVehicle = "Removed"; + Target = "-1"; + locked = "true"; + AssaultVehicle = "Removed"; + scoutVehicle = "Removed"; + }; + new StaticShape() { + position = "-220.559 74.11 204.098"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + locked = "true"; + holo = "0"; + }; + new Item() { + position = "-206.601 109.067 132.776"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + }; + new SimGroup(Tower5) { + + new InteriorInstance() { + position = "-340.505 -626.031 140.232"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "xbunk6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Item() { + position = "-340.696 -626.27 142.363"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new StaticShape() { + position = "-340.55 -625.974 163.15"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "SW Tower"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + Target = "54"; + locked = "true"; + Projector = "3363"; + name = "SW Tower"; + }; + new InteriorInstance() { + position = "-383.118 -550.636 224.872"; + rotation = "0 0 1 40.107"; + scale = "1 1 1"; + interiorFile = "xbunk9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-378.34 -537.606 226.87"; + rotation = "0 0 -1 5.72956"; + scale = "1 1 1"; + nameTag = "SW Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "55"; + locked = "true"; + }; + new StaticShape() { + position = "-371.029 -543.879 226.87"; + rotation = "0 0 1 84.7977"; + scale = "1 1 1"; + nameTag = "SW Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "56"; + locked = "true"; + }; + new StaticShape() { + position = "-383.347 -553.735 -227.612"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "SW Tower"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + Target = "57"; + locked = "true"; + }; + new WayPoint() { + position = "-340.588 -626.405 156.209"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "SW Tower"; + team = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-343.586 -624.252 169.889"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + locked = "true"; + holo = "0"; + }; + }; + }; + }; + }; + new SimGroup(Ambiance) { + + new TSStatic() { + position = "117.58 -238.795 249.6"; + rotation = "0 0 -1 48.7014"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "148.04 -245.973 224.6"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable2m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "141.45 -277.382 306.013"; + rotation = "0 0 -1 46.4096"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "141.52 -277.394 307.984"; + rotation = "0 0 -1 46.4096"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + new InteriorInstance() { + position = "557.93 -627.444 139.56"; + rotation = "0 0 -1 8.59438"; + scale = "1 1 1"; + interiorFile = "xrock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "510.898 -613.494 134.406"; + rotation = "0 0 -1 30.3667"; + scale = "1 1 1"; + interiorFile = "xrock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new TSStatic() { + position = "165.84 -110.591 213.492"; + rotation = "-0.039176 -0.0465394 0.998148 188.826"; + scale = "1 1 1"; + shapeName = "vehicle_air_scout_wreck.dts"; + locked = "true"; + }; + new AudioEmitter() { + position = "160.85 -111.776 224.048"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/fly_swarm.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-17.81 179.42 42.6608"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/fog.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-124.418 -348.042 86.4691"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/fog.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "325.55 -505.906 82.0727"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/fog.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "437.89 -144.478 72.6345"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/fog.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "495.83 -21.6 49.6312"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/fog.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new TSStatic() { + position = "-36.6284 0.267834 135.713"; + rotation = "-0.20964 -0.0268453 0.97741 93.3165"; + scale = "1 1 1"; + shapeName = "vehicle_land_assault_wreck.dts"; + locked = "true"; + }; + new AudioEmitter() { + position = "133.16 -184.515 222.61"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/rumblingthunder.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new ParticleEmissionDummy() { + position = "165.701 -112.93 217.19"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "halftimeEmissionDummy"; + emitter = "MissileLauncherExhaustEmitter"; + velocity = "1"; + locked = "true"; + }; + new ParticleEmissionDummy() { + position = "164.827 -107.653 217.668"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "halftimeEmissionDummy"; + emitter = "MissileLauncherExhaustEmitter"; + velocity = "1"; + locked = "true"; + }; + new ParticleEmissionDummy() { + position = "-39.1257 1.28316 137.843"; + rotation = "0.140141 0.802486 0.57998 5.07797"; + scale = "1 1 1"; + dataBlock = "halftimeEmissionDummy"; + emitter = "MissileLauncherExhaustEmitter"; + velocity = "1"; + locked = "true"; + }; + new InteriorInstance() { + position = "-214.647 237.04 136.521"; + rotation = "0 0 1 116.883"; + scale = "1 1 1"; + interiorFile = "xrock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-210.888 229.245 139.026"; + rotation = "-0.214083 0.149626 0.965288 228.967"; + scale = "1 1 1"; + interiorFile = "xrock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-182.088 276.252 136.165"; + rotation = "0 0 -1 37.8152"; + scale = "1 1 1"; + interiorFile = "xrock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/BeggarsRun.mis b/base/missions/BeggarsRun.mis new file mode 100644 index 0000000..a7187b5 --- /dev/null +++ b/base/missions/BeggarsRun.mis @@ -0,0 +1,3369 @@ +// DisplayName = Beggar's Run +// MissionTypes = CTF + +//--- MISSION QUOTE BEGIN --- +//My name is Ozymandias, king of kings: Look on my works, ye Mighty, and despair! +// -- Percy Bysshe Shelley +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[CTF]8 flag captures needed to win +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + musicTrack = "desert"; + CTF_scoreLimit = "8"; + cdTrack = "6"; + powerCount = "0"; + + new MissionArea(MissionArea) { + area = "-184 -512 880 1024"; + flightCeiling = "2000"; + flightCeilingRange = "50"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.600000 0.600000 0.600000 1.000000"; + ambient = "0.800000 0.800000 0.800000 1.000000"; + scale = "3 3 3"; + position = "-1024 -1024 1"; + rotation = "1 0 0 0"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/desertdet2"; + terrainFile = "BeggarsRun.ter"; + squareSize = "8"; + emptySquares = "87960 88216 88472 107946 108202 108458"; + position = "-1024 -1024 0"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "45"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + conjoinBowlDev = "20"; + scale = "1 1 1"; + coverage = "0"; + GraphFile = "BeggarsRun.nav"; + position = "0 0 0 1"; + XDimOverSize = "0"; + YDimOverSize = "0"; + rotation = "0 0 0 0"; + }; + new Sky(Sky) { + position = "-1024 -1024 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "275"; + useSkyTextures = "1"; + renderBottomTexture = "0"; + SkySolidColor = "0.365000 0.330000 0.310000 0.000000"; + fogDistance = "225"; + fogColor = "0.257800 0.125000 0.097700 1.000000"; + fogVolume1 = "500 1 300"; + fogVolume2 = "1000 301 500"; + fogVolume3 = "17000 501 1000"; + materialList = "sky_desert_brown.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 0.000000"; + cloudSpeed0 = "0.000500 0.000500"; + }; + new SimGroup(Teams) { + powerCount = "0"; + + new SimGroup(Team1) { + powerCount = "0"; + + new SimGroup(equipment) { + powerCount = "0"; + team = "1"; + + new InteriorInstance() { + position = "268.63 322.34 109.277"; + rotation = "0 0 1 178.945"; + scale = "1 1 1"; + interiorFile = "pplat2.dif"; + showTerrainInside = "0"; + team = "1"; + }; + new InteriorInstance() { + position = "410.24 326.77 109.277"; + rotation = "-0 0 -1 1.71869"; + scale = "1 1 1"; + interiorFile = "pplat2.dif"; + showTerrainInside = "0"; + team = "1"; + }; + new SimGroup(Bridge) { + powerCount = "0"; + team = "1"; + + new InteriorInstance() { + position = "289.83 322.82 110.526"; + rotation = "-0 0 -1 1.71915"; + scale = "1 1 1"; + interiorFile = "pbrdg1.dif"; + showTerrainInside = "0"; + team = "1"; + }; + new InteriorInstance() { + position = "314.29 323.45 110.53"; + rotation = "-0 0 -1 1.14602"; + scale = "1 1 1"; + interiorFile = "pbrdg4.dif"; + showTerrainInside = "0"; + team = "1"; + }; + new InteriorInstance() { + position = "314.55 315.45 127.216"; + rotation = "-0 0 -1 3.43793"; + scale = "1 1 1"; + interiorFile = "pbrdg3.dif"; + showTerrainInside = "0"; + team = "1"; + }; + new InteriorInstance() { + position = "314.02 331.62 127.509"; + rotation = "0 0 1 178.372"; + scale = "1 1 1"; + interiorFile = "pbrdg3.dif"; + showTerrainInside = "0"; + team = "1"; + }; + }; + new InteriorInstance() { + position = "339.32 326.74 83.2754"; + rotation = "0 0 -1 92.2462"; + scale = "1 1 1"; + interiorFile = "pbunk1.dif"; + showTerrainInside = "0"; + team = "1"; + }; + new InteriorInstance() { + position = "364.62 325.1 110.527"; + rotation = "0 0 1 178.19"; + scale = "1 1 1"; + interiorFile = "pbrdg4.dif"; + showTerrainInside = "0"; + team = "1"; + }; + new InteriorInstance() { + position = "389.06 326 110.526"; + rotation = "0 0 1 177.617"; + scale = "1 1 1"; + interiorFile = "pbrdg1.dif"; + showTerrainInside = "0"; + team = "1"; + }; + new InteriorInstance() { + position = "364.98 316.94 127.506"; + rotation = "-0 0 -1 2.86462"; + scale = "1 1 1"; + interiorFile = "pbrdg3.dif"; + showTerrainInside = "0"; + team = "1"; + }; + new InteriorInstance() { + position = "364.25 333.11 127.213"; + rotation = "0 0 1 175.898"; + scale = "1 1 1"; + interiorFile = "pbrdg3.dif"; + showTerrainInside = "0"; + team = "1"; + }; + new Item() { + position = "339.32 324.37 98.5526"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + team = "1"; + Target = "-1"; + }; + new Item() { + position = "195.25 -333.991 90.8401"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + lastDamagedBy = "2"; + team = "1"; + Target = "-1"; + }; + new InteriorInstance() { + position = "265.57 -336.254 101.669"; + rotation = "0 0 1 1.71915"; + scale = "1 1 1"; + interiorFile = "pplat2.dif"; + showTerrainInside = "0"; + team = "1"; + Hidden = "false"; + }; + new InteriorInstance() { + position = "220.2 -326.713 119.796"; + rotation = "0 0 1 180.482"; + scale = "1 1 1"; + interiorFile = "pbrdg3.dif"; + showTerrainInside = "0"; + team = "1"; + Hidden = "false"; + }; + new InteriorInstance() { + position = "244.37 -335.59 102.923"; + rotation = "0 0 1 181.628"; + scale = "1 1 1"; + interiorFile = "pbrdg1.dif"; + showTerrainInside = "0"; + team = "1"; + Hidden = "false"; + }; + new InteriorInstance() { + position = "220 -334.892 102.935"; + rotation = "0 0 1 181.628"; + scale = "1 1 1"; + interiorFile = "pbrdg4.dif"; + showTerrainInside = "0"; + team = "1"; + Hidden = "false"; + }; + new InteriorInstance() { + position = "124.6 -331.831 101.674"; + rotation = "0 0 1 186.212"; + scale = "1 1 1"; + interiorFile = "pplat2.dif"; + showTerrainInside = "0"; + team = "1"; + locked = "true"; + Hidden = "false"; + }; + new InteriorInstance() { + position = "219.75 -343.089 119.877"; + rotation = "0 0 1 2.29172"; + scale = "1 1 1"; + interiorFile = "pbrdg3.dif"; + showTerrainInside = "0"; + team = "1"; + Hidden = "false"; + }; + new InteriorInstance() { + position = "145.23 -332.323 102.937"; + rotation = "0 0 1 2.10924"; + scale = "1 1 1"; + interiorFile = "pbrdg1.dif"; + showTerrainInside = "0"; + team = "1"; + Hidden = "false"; + }; + new InteriorInstance() { + position = "169.69 -333.211 102.954"; + rotation = "0 0 1 2.10924"; + scale = "1 1 1"; + interiorFile = "pbrdg4.dif"; + showTerrainInside = "0"; + team = "1"; + Hidden = "false"; + }; + new InteriorInstance() { + position = "169.49 -341.22 119.634"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pbrdg3.dif"; + showTerrainInside = "0"; + team = "1"; + Hidden = "false"; + }; + new InteriorInstance() { + position = "169.87 -325.042 119.934"; + rotation = "0 0 1 181.055"; + scale = "1 1 1"; + interiorFile = "pbrdg3.dif"; + showTerrainInside = "0"; + team = "1"; + Hidden = "false"; + }; + new InteriorInstance() { + position = "194.79 -336.553 75.6822"; + rotation = "0 0 1 91.6735"; + scale = "1 1 1"; + interiorFile = "pbunk1.dif"; + showTerrainInside = "0"; + team = "1"; + Hidden = "false"; + }; + }; + new SimGroup(spawnspheres) { + powerCount = "0"; + team = "1"; + + new SpawnSphere() { + position = "339.35 324.16 115.384"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "85"; + sphereWeight = "100"; + indoorWeight = "20"; + outdoorWeight = "80"; + team = "1"; + }; + }; + new SimGroup(Powered) { + powerCount = "1"; + providesPower = "1"; + + new StaticShape(Team1StationInventory1) { + position = "340.33 300.505 84.7428"; + rotation = "0 0 1 178.19"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Trigger = "3361"; + lastDamagedBy = "2"; + notReady = "1"; + inUse = "Down"; + team = "1"; + Target = "33"; + }; + new StaticShape(Team1StationInventory2) { + position = "334.64 322.11 73.2452"; + rotation = "0 0 1 175.325"; + scale = "1 1 1"; + nameTag = "Basement"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Trigger = "3363"; + lastDamagedBy = "3262"; + lastDamagedByTeam = "2"; + notReady = "1"; + inUse = "Down"; + team = "1"; + Target = "34"; + damageTimeMS = "609939"; + }; + new Turret(Team1SentryTurret1) { + position = "339.6 319.13 91.82"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Sentry"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + lastProjectile = "4341"; + team = "1"; + Target = "35"; + }; + new StaticShape(Team1SensorLargePulse1) { + position = "268.52 321.93 126.471"; + rotation = "0 0 1 178.763"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "SensorLargePulse"; + lockCount = "0"; + homingCount = "0"; + team = "1"; + Target = "36"; + }; + new Turret(Team1TurretBaseLarge1) { + position = "410.08 326.93 127.09"; + rotation = "0 0 1 179.518"; + scale = "1 1 1"; + nameTag = "Deck"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + lastDamagedBy = "2"; + team = "1"; + beingRepaired = "0"; + Target = "37"; + }; + new StaticShape(Team1StationInventory3) { + position = "344.43 322.1 73.2412"; + rotation = "0 0 1 177.799"; + scale = "1 1 1"; + nameTag = "Basement"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Trigger = "3368"; + lastDamagedBy = "3262"; + lastDamagedByTeam = "2"; + notReady = "1"; + inUse = "Down"; + team = "1"; + Target = "38"; + damageTimeMS = "609939"; + }; + }; + new StaticShape() { + position = "339.421 324.26 111.533"; + rotation = "0 0 1 111.154"; + scale = "1.2 1.2 1"; + dataBlock = "ExteriorFlagStand"; + lockCount = "0"; + homingCount = "0"; + Flag = "3402"; + team = "1"; + Target = "-1"; + }; + new SimGroup(AIObjectives) { + powerCount = "0"; + + new SimGroup(ObjectiveSet) { + powerCount = "0"; + + new AIObjective(AIORepairObject) { + position = "340.28 300.51 86.3095"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3360"; + location = "340.28 302.91 86.3095"; + weightLevel1 = "3200"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "1"; + group = "3372"; + }; + new AIObjective(AIORepairObject) { + position = "344.43 322.1 74.807"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3367"; + location = "344.43 322.1 74.807"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "1"; + group = "3372"; + }; + new AIObjective(AIORepairObject) { + position = "268.52 321.912 130.746"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SensorLargePulse"; + targetObject = "Team1SensorLargePulse1"; + targetClientId = "-1"; + targetObjectId = "3365"; + location = "268.52 321.912 130.746"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "1"; + group = "3372"; + }; + new AIObjective(AIORepairObject) { + position = "410.086 326.269 128.842"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team1TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3366"; + location = "410.086 326.269 128.842"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "1"; + group = "3372"; + }; + new AIObjective(AIORepairObject) { + position = "339.37 319.13 91.4889"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SentryTurret"; + targetObject = "Team1SentryTurret1"; + targetClientId = "-1"; + targetObjectId = "3364"; + location = "339.37 319.13 91.4889"; + weightLevel1 = "3150"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "1"; + group = "3372"; + }; + }; + new SimGroup(ObjectiveSet) { + powerCount = "0"; + + new AIObjective(AIOAttackObject) { + position = "195.15 -328.842 83.9189"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the SentryTurret"; + targetObject = "Team2SentryTurret1"; + targetClientId = "-1"; + targetObjectId = "3413"; + location = "195.15 -328.842 83.9189"; + weightLevel1 = "3000"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + desiredEquipment = "HEAVY"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "1"; + group = "3378"; + }; + new AIObjective(AIOAttackObject) { + position = "190 -331.557 67.181"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3416"; + location = "190 -331.557 67.181"; + weightLevel1 = "2800"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "HEAVY"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "1"; + group = "3378"; + }; + new AIObjective(AIOAttackObject) { + position = "195.34 -310.655 78.5924"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3409"; + location = "195.34 -312.655 78.7924"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "HEAVY"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "1"; + group = "3378"; + }; + new AIObjective(AIOAttackObject) { + position = "199.86 -331.839 67.2367"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3411"; + location = "199.86 -331.839 67.2367"; + weightLevel1 = "2800"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "HEAVY"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "1"; + group = "3378"; + }; + }; + new AIObjective(AIOTouchObject) { + position = "194.794 -334.071 105.684"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the enemy flag"; + mode = "FlagGrab"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3418"; + location = "194.794 -334.071 105.684"; + weightLevel1 = "5000"; + weightLevel2 = "4000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Light EnergyPack"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + gameType = "all"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIOTouchObject) { + position = "339.32 324.31 113.367"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Return our flag"; + mode = "FlagDropped"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3402"; + location = "339.32 324.31 113.367"; + weightLevel1 = "5500"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + gameType = "all"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIOTouchObject) { + position = "194.794 -334.071 105.684"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the flag!"; + mode = "FlagCapture"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3418"; + location = "194.794 -334.071 105.684"; + weightLevel1 = "5000"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + gameType = "all"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIOTouchObject) { + position = "194.794 -334.071 105.684"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the dropped enemy flag"; + mode = "FlagDropped"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3418"; + location = "194.794 -334.071 105.684"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + gameType = "all"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIODefendLocation) { + position = "339.32 324.31 113.367"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend our flag"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3402"; + location = "339.32 324.31 113.367"; + weightLevel1 = "4500"; + weightLevel2 = "2900"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + chat = "ChatSelfDefendFlag DefendBase"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + gameType = "all"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIOAttackPlayer) { + position = "339.32 324.31 113.367"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Kill the enemy flag carrier"; + mode = "FlagCarrier"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3402"; + location = "339.32 324.31 113.367"; + weightLevel1 = "5000"; + weightLevel2 = "4900"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Light EnergyPack"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergySniper"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + gameType = "all"; + isInvalid = "0"; + team = "1"; + }; + new SimGroup(ObjectiveSet) { + powerCount = "0"; + + new AIObjective(AIOMortarObject) { + position = "124.623 -331.855 121.329"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3415"; + location = "124.623 -331.855 121.329"; + weightLevel1 = "1400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "1"; + group = "3389"; + }; + new AIObjective(AIOMortarObject) { + position = "265.71 -336.46 122.84"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the SensorLargePulse"; + targetObject = "Team2SensorLargePulse1"; + targetClientId = "-1"; + targetObjectId = "3414"; + location = "265.71 -336.46 122.84"; + weightLevel1 = "1400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "1"; + group = "3389"; + }; + new AIObjective(AIOMortarObject) { + position = "195.194 -328.642 83.8323"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the SentryTurret"; + targetObject = "Team2SentryTurret1"; + targetClientId = "-1"; + targetObjectId = "3413"; + location = "195.194 -328.642 83.8323"; + weightLevel1 = "1400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "1"; + group = "3389"; + }; + }; + new SimGroup(ObjectiveSet) { + powerCount = "0"; + + new AIObjective(AIODeployEquipment) { + position = "339.125 327.176 84.8452"; + rotation = "0.999861 -0.0158799 -0.00499935 34.955"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "339.125 327.176 84.8452"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "1"; + group = "3393"; + }; + new AIObjective(AIODeployEquipment) { + position = "312.932 319.991 83.346"; + rotation = "0.157346 0.186506 -0.969772 101.423"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "312.932 319.991 83.346"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "1"; + group = "3393"; + }; + new AIObjective(AIODeployEquipment) { + position = "382.59 312.615 76.5718"; + rotation = "0.136985 -0.25944 0.955995 126.434"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "382.59 312.615 76.5718"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "1"; + group = "3393"; + }; + new AIObjective(AIODeployEquipment) { + position = "404.4 322.359 116.744"; + rotation = "0.000923478 0.159318 0.987227 180.656"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "404.4 322.359 116.744"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "1"; + group = "3393"; + }; + new AIObjective(AIODeployEquipment) { + position = "275.416 318.113 117.877"; + rotation = "-0.0016297 0.281157 0.95966 179.363"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "275.416 318.113 117.877"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "1"; + group = "3393"; + }; + new AIObjective(AIODeployEquipment) { + position = "344.874 272.482 87.7901"; + rotation = "-0.00126231 -0.300293 0.953846 180.459"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "344.874 272.482 87.7901"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "1"; + group = "3393"; + }; + new AIObjective(AIODeployEquipment) { + position = "339.472 327.612 112.317"; + rotation = "1 -3.12854e-09 1.39905e-08 25.2101"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "339.472 327.612 112.317"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "1"; + group = "3393"; + }; + }; + }; + new TSStatic() { + position = "339.415 324.192 111.509"; + rotation = "-0.00018806 -0.0100025 0.99995 178.19"; + scale = "1.34259 1.43114 0.25"; + shapeName = "pmiscf.dts"; + lockCount = "0"; + team = "1"; + homingCount = "0"; + }; + new Item(Team1flag1) { + position = "339.398 324.266 112.124"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + originalPosition = "339.342 324.298 112.124 0 0 1 1.57"; + stand = "3370"; + isHome = "1"; + team = "1"; + Target = "39"; + }; + }; + new SimGroup(Team2) { + powerCount = "0"; + + new SimGroup(equipment) { + powerCount = "0"; + team = "2"; + + new TSStatic() { + position = "194.826 -334.303 104.002"; + rotation = "0 0 1 1.71915"; + scale = "1.34858 1.54002 0.25"; + shapeName = "pmiscf.dts"; + lockCount = "0"; + team = "2"; + homingCount = "0"; + }; + new SimGroup() { + powerCount = "0"; + }; + }; + new StaticShape() { + position = "194.811 -334.054 103.85"; + rotation = "0 0 1 24.6372"; + scale = "1.2 1.2 1"; + dataBlock = "ExteriorFlagStand"; + lockCount = "0"; + homingCount = "0"; + lastDamagedBy = "3262"; + lastDamagedByTeam = "2"; + Flag = "3418"; + team = "2"; + Target = "-1"; + damageTimeMS = "132041"; + }; + new SimGroup(Powered) { + powerCount = "1"; + providesPower = "1"; + + new StaticShape(Team2StationInventory1) { + position = "195.341 -310.005 77.1266"; + rotation = "-0 0 -1 3.43793"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Trigger = "3410"; + lastDamagedBy = "2"; + notReady = "1"; + inUse = "Down"; + team = "2"; + Target = "40"; + }; + new StaticShape(Team2StationInventory2) { + position = "199.86 -331.839 65.6709"; + rotation = "0 0 -1 1.14602"; + scale = "1 1 1"; + nameTag = "Basement"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Trigger = "3412"; + lastDamagedBy = "2"; + notReady = "1"; + inUse = "Down"; + team = "2"; + Target = "41"; + }; + new Turret(Team2SentryTurret1) { + position = "195.12 -328.842 84.25"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Sentry"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + team = "2"; + Target = "42"; + }; + new StaticShape(Team2SensorLargePulse1) { + position = "265.71 -336.478 118.565"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "SensorLargePulse"; + lockCount = "0"; + homingCount = "0"; + lastDamagedBy = "4"; + team = "2"; + Target = "43"; + }; + new Turret(Team2TurretBaseLarge1) { + position = "124.55 -332.512 119.577"; + rotation = "0 0 1 6.30264"; + scale = "1 1 1"; + nameTag = "Deck"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + lastDamagedBy = "2"; + team = "2"; + beingRepaired = "0"; + Target = "44"; + lastDamageLevel = "0.00600256"; + }; + new StaticShape(Team2StationInventory3) { + position = "190 -331.557 65.6152"; + rotation = "0 0 -1 4.01031"; + scale = "1 1 1"; + nameTag = "Basement"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Trigger = "3417"; + notReady = "1"; + inUse = "Down"; + team = "2"; + Target = "45"; + }; + }; + new Item(Team2flag1) { + position = "194.885 -334.116 104.455"; + rotation = "0 0 1 90.5273"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + lastDamagedBy = "2"; + originalPosition = "194.821 -334.084 104.458 0 0 1 1.58"; + stand = "3407"; + isHome = "1"; + team = "2"; + Target = "46"; + }; + new SimGroup(spawnspheres) { + powerCount = "0"; + team = "2"; + + new SpawnSphere() { + position = "196.1 -334.008 108.651"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "85"; + sphereWeight = "100"; + indoorWeight = "20"; + outdoorWeight = "80"; + team = "2"; + }; + }; + new SimGroup(AIObjectives) { + powerCount = "0"; + + new SimGroup(ObjectiveSet) { + powerCount = "0"; + + new AIObjective(AIORepairObject) { + position = "190 -331.557 67.181"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3416"; + location = "190 -331.557 67.181"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "2"; + group = "3423"; + }; + new AIObjective(AIORepairObject) { + position = "124.623 -331.855 121.329"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3415"; + location = "124.623 -331.855 121.329"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "2"; + group = "3423"; + }; + new AIObjective(AIORepairObject) { + position = "265.71 -336.46 122.84"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SensorLargePulse"; + targetObject = "Team2SensorLargePulse1"; + targetClientId = "-1"; + targetObjectId = "3414"; + location = "265.71 -336.46 122.84"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "2"; + group = "3423"; + }; + new AIObjective(AIORepairObject) { + position = "195.15 -328.842 83.9189"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SentryTurret"; + targetObject = "Team2SentryTurret1"; + targetClientId = "-1"; + targetObjectId = "3413"; + location = "195.15 -328.842 83.9189"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "2"; + group = "3423"; + }; + new AIObjective(AIORepairObject) { + position = "199.86 -331.839 67.2367"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3411"; + location = "199.86 -331.839 67.2367"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "2"; + group = "3423"; + }; + new AIObjective(AIORepairObject) { + position = "195.34 -310.655 78.5924"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3409"; + location = "195.34 -312.655 78.7924"; + weightLevel1 = "3200"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "2"; + group = "3423"; + }; + new AIObjective(AIORepairObject) { + position = "190.012 -331.49 66.8865"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3416"; + location = "190.012 -331.49 66.8865"; + weightLevel1 = "2900"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "2"; + group = "3423"; + }; + }; + new AIObjective(AIODefendLocation) { + position = "194.794 -334.071 105.684"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend our flag"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3418"; + location = "194.794 -334.071 105.684"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + chat = "ChatSelfDefendFlag DefendBase"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + gameType = "all"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIOTouchObject) { + position = "194.794 -334.071 105.684"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Return our flag"; + mode = "FlagDropped"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3418"; + location = "194.794 -334.071 105.684"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + gameType = "all"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIOAttackPlayer) { + position = "194.794 -334.071 105.684"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Kill the enemy flag carrier"; + mode = "FlagCarrier"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3418"; + location = "194.794 -334.071 105.684"; + weightLevel1 = "4800"; + weightLevel2 = "3000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Light EnergyPack"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergySniper"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + gameType = "all"; + isInvalid = "0"; + team = "2"; + }; + new SimGroup(ObjectiveSet) { + powerCount = "0"; + + new AIObjective(AIOMortarObject) { + position = "410.086 326.269 128.842"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team1TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3366"; + location = "410.086 326.269 128.842"; + weightLevel1 = "1400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "2"; + group = "3434"; + }; + new AIObjective(AIOMortarObject) { + position = "268.52 321.912 130.746"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the SensorLargePulse"; + targetObject = "Team1SensorLargePulse1"; + targetClientId = "-1"; + targetObjectId = "3365"; + location = "268.52 321.912 130.746"; + weightLevel1 = "1400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "2"; + group = "3434"; + }; + new AIObjective(AIOMortarObject) { + position = "339.29 318.907 90.7533"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the SentryTurret"; + targetObject = "Team1SentryTurret1"; + targetClientId = "-1"; + targetObjectId = "3364"; + location = "339.29 318.907 90.7533"; + weightLevel1 = "1400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "2"; + group = "3434"; + }; + }; + new SimGroup(ObjectiveSet) { + powerCount = "0"; + + new AIObjective(AIOAttackObject) { + position = "344.43 322.1 74.807"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3367"; + location = "344.43 322.1 74.807"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "HEAVY"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "2"; + group = "3438"; + }; + new AIObjective(AIOAttackObject) { + position = "334.64 322.11 74.811"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3362"; + location = "334.64 322.11 74.811"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "HEAVY"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "2"; + group = "3438"; + }; + new AIObjective(AIOAttackObject) { + position = "340.28 300.51 86.3095"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3360"; + location = "340.28 302.91 86.3095"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "HEAVY"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "2"; + group = "3438"; + }; + }; + new AIObjective(AIOTouchObject) { + position = "339.32 324.31 113.367"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the enemy flag"; + mode = "FlagGrab"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3402"; + location = "339.32 324.31 113.367"; + weightLevel1 = "3850"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Light EnergyPack"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + gameType = "all"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIOTouchObject) { + position = "339.32 324.31 113.367"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the flag!"; + mode = "FlagCapture"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3402"; + location = "339.32 324.31 113.367"; + weightLevel1 = "5000"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + gameType = "all"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIOTouchObject) { + position = "339.32 324.31 113.367"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the dropped enemy flag"; + mode = "FlagDropped"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3402"; + location = "339.32 324.31 113.367"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + gameType = "all"; + isInvalid = "0"; + team = "2"; + }; + new SimGroup(ObjectiveSet) { + powerCount = "0"; + + new AIObjective(AIODeployEquipment) { + position = "131.273 -328.176 110.396"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "131.273 -328.176 110.396"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "2"; + group = "3445"; + }; + new AIObjective(AIODeployEquipment) { + position = "259.215 -331.478 110.575"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "259.215 -331.478 110.575"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "2"; + group = "3445"; + }; + new AIObjective(AIODeployEquipment) { + position = "194.806 -337.372 77.1364"; + rotation = "-0.0151665 -0.342858 0.939265 184.758"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "194.806 -337.372 77.1364"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "2"; + group = "3445"; + }; + new AIObjective(AIODeployEquipment) { + position = "161.114 -340.921 79.7848"; + rotation = "0 0 -1 92.2462"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "161.114 -340.921 79.7848"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "2"; + group = "3445"; + }; + new AIObjective(AIODeployEquipment) { + position = "241.63 -320.782 76.3423"; + rotation = "-0.0147104 0.0144228 0.999788 93.4046"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "241.63 -320.782 76.3423"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "2"; + group = "3445"; + }; + new AIObjective(AIODeployEquipment) { + position = "194.855 -337.922 72.7187"; + rotation = "-0.00180948 -0.430457 0.902609 180.435"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "194.855 -337.922 72.7187"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "2"; + group = "3445"; + }; + }; + }; + }; + new SimGroup(team0) { + powerCount = "0"; + + new SimGroup(AIObjectives) { + powerCount = "0"; + }; + }; + }; + new SimGroup(ObserverDropPoints) { + powerCount = "0"; + + new Camera() { + position = "270.74 276.82 138.275"; + rotation = "0.374592 -0.14314 0.916074 45.285"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + team = "1"; + }; + new Camera() { + position = "275.06 -288.464 123.053"; + rotation = "-0.044781 -0.0848124 0.99539 235.45"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + team = "1"; + }; + }; + new SimGroup(RandomOrganics) { + powerCount = "0"; + + new SimGroup(Addition2PhoenixPlant1) { + powerCount = "0"; + + new TSStatic() { + position = "400.5 488.5 147.262"; + rotation = "0 0 -1 53"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "402.5 69.5 125.879"; + rotation = "0 0 1 109"; + scale = "1.6 1.6 1.6"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "38.5 87.5 94.3496"; + rotation = "0 0 1 228"; + scale = "0.9 0.9 0.9"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "406.5 71.5 126.098"; + rotation = "0 0 1 79"; + scale = "1.3 1.3 1.3"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "647.41 -335.728 142.572"; + rotation = "0 0 1 164"; + scale = "1.4 1.4 1.4"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "569.5 -159.5 103.869"; + rotation = "0 0 1 104"; + scale = "1.4 1.4 1.4"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "175.5 -341.5 78.0371"; + rotation = "0 0 -1 60"; + scale = "0.7 0.7 0.7"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "122.5 -313.5 101.609"; + rotation = "0 0 -1 110"; + scale = "0.7 0.7 0.7"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "16.5 129.5 114.414"; + rotation = "0 0 1 126"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "435.5 483.5 140.602"; + rotation = "0 0 -1 39"; + scale = "1.6 1.6 1.6"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "251.5 446.5 168.342"; + rotation = "0 0 1 143"; + scale = "0.9 0.9 0.9"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "52.5 230.5 122.166"; + rotation = "0 0 1 32"; + scale = "0.7 0.7 0.7"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "81.5 147.5 106.621"; + rotation = "0 0 1 43"; + scale = "1.5 1.5 1.5"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "219.5 308.5 112.314"; + rotation = "0 0 1 185"; + scale = "0.8 0.8 0.8"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "-32.5 56.5 125.018"; + rotation = "0 0 -1 84"; + scale = "1.4 1.4 1.4"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "374.5 -496.5 143.848"; + rotation = "0 0 1 194"; + scale = "1.4 1.4 1.4"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "328.5 -83.5 100.981"; + rotation = "0 0 1 178"; + scale = "0.9 0.9 0.9"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "371.5 -223.5 137.453"; + rotation = "0 0 1 187"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "303.5 -99.5 104.674"; + rotation = "0 0 -1 84"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "320.5 -143.5 104.434"; + rotation = "0 0 -1 118"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "398.5 -222.5 134.643"; + rotation = "0 0 1 104"; + scale = "1.6 1.6 1.6"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "2.5 -203.5 168.082"; + rotation = "0 0 1 134"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "582.5 297.5 82.7734"; + rotation = "0 0 1 148"; + scale = "1.5 1.5 1.5"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "-11.5 154.5 103.125"; + rotation = "0 0 -1 117"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "125.5 35.5 131.393"; + rotation = "0 0 -1 14"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "45.5 -365.5 100.994"; + rotation = "0 0 1 199"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "613.5 291.5 86.0333"; + rotation = "0 0 -1 96"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "425.5 372.5 129.787"; + rotation = "0 0 1 120"; + scale = "0.8 0.8 0.8"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "475.5 505.5 140.721"; + rotation = "0 0 1 160"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "323.5 -149.5 104.781"; + rotation = "0 0 1 107"; + scale = "0.7 0.7 0.7"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "562.5 -191.5 110.494"; + rotation = "0 0 1 199"; + scale = "1.4 1.4 1.4"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "472.5 195.5 68.4883"; + rotation = "0 0 1 164"; + scale = "1.5 1.5 1.5"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "238.5 468.5 167.092"; + rotation = "1 0 0 0"; + scale = "0.9 0.9 0.9"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "102.5 -478.5 158.01"; + rotation = "0 0 1 204"; + scale = "0.7 0.7 0.7"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "321.5 296.5 82.1738"; + rotation = "0 0 1 228"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "466.5 190.5 68.2911"; + rotation = "0 0 -1 64"; + scale = "0.9 0.9 0.9"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "408.5 -220.5 134.916"; + rotation = "0 0 1 149"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "395.5 67.5 125.393"; + rotation = "0 0 -1 43"; + scale = "0.8 0.8 0.8"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "182.5 -185.5 126.816"; + rotation = "0 0 -1 52"; + scale = "0.8 0.8 0.8"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "494.5 20.5 57.7872"; + rotation = "0 0 1 161"; + scale = "0.9 0.9 0.9"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "426.5 107.5 133.625"; + rotation = "0 0 1 110"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "367.5 88.5 117.498"; + rotation = "0 0 1 42"; + scale = "0.9 0.9 0.9"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "496.5 321.5 104.441"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "575.5 -102.5 109.787"; + rotation = "0 0 1 31"; + scale = "1.6 1.6 1.6"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "389.5 462.5 156.109"; + rotation = "0 0 1 161"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "95.5 -10.5 127.059"; + rotation = "0 0 1 19"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "465.5 -76.5 55.6347"; + rotation = "0 0 -1 102"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "192.5 0.5 94.8281"; + rotation = "0 0 1 75"; + scale = "0.9 0.9 0.9"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "386.5 -502.5 146.123"; + rotation = "0 0 -1 49"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "-90.5 -473.5 147.154"; + rotation = "0 0 -1 102"; + scale = "0.9 0.9 0.9"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "-4.5 236.5 88.502"; + rotation = "0 0 1 232"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "387.18 -211.987 133.232"; + rotation = "0 0 -1 47"; + scale = "1.6 1.6 1.6"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "343.5 70.5 129.768"; + rotation = "0 0 1 82"; + scale = "0.7 0.7 0.7"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "-74.5 320.5 135.129"; + rotation = "0 0 1 61"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "127.5 50.5 132.502"; + rotation = "0 0 -1 49"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "366.5 -210.5 137.406"; + rotation = "0 0 1 212"; + scale = "0.9 0.9 0.9"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "1.5 -318.5 102.857"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "425.5 -193.5 143.537"; + rotation = "0 0 -1 16"; + scale = "1.6 1.6 1.6"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "284.5 -150.5 117.463"; + rotation = "0 0 -1 55"; + scale = "1.4 1.4 1.4"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "485.5 324.5 103.363"; + rotation = "0 0 1 212"; + scale = "0.7 0.7 0.7"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "-153.5 -371.5 125.875"; + rotation = "0 0 -1 57"; + scale = "1.6 1.6 1.6"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "611.5 -12.5 55.2383"; + rotation = "0 0 1 155"; + scale = "0.7 0.7 0.7"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "216.5 96.5 159.334"; + rotation = "0 0 1 69"; + scale = "0.8 0.8 0.8"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "26.5 -340.5 105.83"; + rotation = "0 0 1 137"; + scale = "0.8 0.8 0.8"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "88.5 143.5 105.146"; + rotation = "0 0 -1 16"; + scale = "0.9 0.9 0.9"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "-154.5 260.5 120.029"; + rotation = "0 0 -1 39"; + scale = "1.5 1.5 1.5"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "137.28 434.04 160.932"; + rotation = "0 0 1 86"; + scale = "0.9 0.9 0.9"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "174.5 447.5 167.24"; + rotation = "0 0 -1 103"; + scale = "1.3 1.3 1.3"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "533.5 55.5 33.3339"; + rotation = "0 0 1 12"; + scale = "0.7 0.7 0.7"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "63.5 139.5 108.059"; + rotation = "0 0 -1 27"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "-1.5 206.5 86.5"; + rotation = "0 0 -1 26"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "471.93 -342.311 77.7402"; + rotation = "0 0 1 41"; + scale = "1.5 1.5 1.5"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "199.5 414.5 150.123"; + rotation = "0 0 1 162"; + scale = "1.6 1.6 1.6"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "-4.5 -305.5 101.287"; + rotation = "0 0 -1 108"; + scale = "1.6 1.6 1.6"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "-17.5 441.5 104.076"; + rotation = "0 0 -1 64"; + scale = "1.5 1.5 1.5"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "334.5 19.5 113.311"; + rotation = "0 0 -1 106"; + scale = "1.4 1.4 1.4"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "133.5 -215.5 151.924"; + rotation = "0 0 1 195"; + scale = "0.8 0.8 0.8"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "420.5 -167.5 144.531"; + rotation = "0 0 -1 62"; + scale = "0.9 0.9 0.9"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "396.5 490.5 147.318"; + rotation = "0 0 -1 77"; + scale = "0.7 0.7 0.7"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "224.5 -66.5 82.8828"; + rotation = "0 0 1 196"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "471.5 189.5 68.8652"; + rotation = "0 0 1 110"; + scale = "0.9 0.9 0.9"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "-115.5 433.5 123.51"; + rotation = "0 0 1 159"; + scale = "0.8 0.8 0.8"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "456.5 188.5 66.7773"; + rotation = "0 0 1 114"; + scale = "1.3 1.3 1.3"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "-157.5 -282.5 82.293"; + rotation = "0 0 1 134"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "-80.5 333.5 134.096"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "77.5 -9.5 127.111"; + rotation = "0 0 1 147"; + scale = "1.3 1.3 1.3"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "131.07 251.2 87.1906"; + rotation = "0 0 -1 41"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "286.5 445.5 165.945"; + rotation = "0 0 1 177"; + scale = "1.6 1.6 1.6"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "364.5 -201.5 136.44"; + rotation = "0 0 1 180"; + scale = "0.8 0.8 0.8"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "-32.5 53.5 125.258"; + rotation = "0 0 1 37"; + scale = "1.5 1.5 1.5"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "256.79 30.26 128.86"; + rotation = "0 0 -1 96"; + scale = "1.5 1.5 1.5"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "-67.5 200.5 126.871"; + rotation = "0 0 1 48"; + scale = "1.3 1.3 1.3"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "87.5 -14.5 127.633"; + rotation = "0 0 1 29"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "504.5 429.5 151.924"; + rotation = "0 0 -1 118"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "-98.5 306.5 138.477"; + rotation = "0 0 1 224"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "-172.5 342.5 94.252"; + rotation = "0 0 1 234"; + scale = "0.9 0.9 0.9"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "226.5 -315.5 71.4258"; + rotation = "0 0 1 160"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "129.5 -32.5 121.859"; + rotation = "0 0 1 231"; + scale = "0.7 0.7 0.7"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "479.5 238.5 65.4942"; + rotation = "0 0 1 54"; + scale = "1.3 1.3 1.3"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "368.5 290.5 86.3985"; + rotation = "0 0 1 188"; + scale = "1.5 1.5 1.5"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "381.5 -407.5 118.047"; + rotation = "0 0 -1 2.99997"; + scale = "1.4 1.4 1.4"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "97.5 -483.5 157.568"; + rotation = "0 0 -1 105"; + scale = "0.9 0.9 0.9"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "-151.5 -409.5 119.32"; + rotation = "0 0 1 37"; + scale = "0.8 0.8 0.8"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "463.5 -0.5 63.3809"; + rotation = "0 0 1 230"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "-110.5 394.5 133.219"; + rotation = "0 0 1 236"; + scale = "1.4 1.4 1.4"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "424.5 -55.5 62.2324"; + rotation = "0 0 -1 14"; + scale = "1.5 1.5 1.5"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "418.98 -228.643 135.615"; + rotation = "0 0 1 54"; + scale = "0.8 0.8 0.8"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "553.5 -245.5 110.973"; + rotation = "0 0 1 126"; + scale = "1.3 1.3 1.3"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "582.5 -179.5 112.295"; + rotation = "0 0 -1 22"; + scale = "0.7 0.7 0.7"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "370.5 155.5 158.994"; + rotation = "0 0 1 13"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "236.5 456.5 166.736"; + rotation = "0 0 1 191"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "108.5 207.5 96.4922"; + rotation = "0 0 1 21"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "563.5 -92.5 104.072"; + rotation = "0 0 1 146"; + scale = "1.4 1.4 1.4"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "445.5 506.5 136.215"; + rotation = "1 0 0 0"; + scale = "1.5 1.5 1.5"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "507.5 434.5 151.754"; + rotation = "0 0 -1 91"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "177.5 -181.5 126.498"; + rotation = "0 0 1 13"; + scale = "0.9 0.9 0.9"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "93.5 -14.5 127.402"; + rotation = "0 0 -1 40"; + scale = "0.7 0.7 0.7"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "281.5 323.5 99.7754"; + rotation = "0 0 1 122"; + scale = "1.5 1.5 1.5"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "331.5 -121.5 111.656"; + rotation = "0 0 1 138"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "43.5 188.5 100.904"; + rotation = "0 0 -1 99"; + scale = "0.8 0.8 0.8"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "434.5 456.5 131.643"; + rotation = "0 0 1 58"; + scale = "1.3 1.3 1.3"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "-3.5 -61.5 121.941"; + rotation = "0 0 1 63"; + scale = "0.7 0.7 0.7"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "156.5 442.5 169.703"; + rotation = "0 0 -1 52"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "569.5 299.5 84.2247"; + rotation = "0 0 1 161"; + scale = "0.9 0.9 0.9"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "295.5 440.5 164.758"; + rotation = "0 0 1 25"; + scale = "1.5 1.5 1.5"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "117.5 425.5 168.217"; + rotation = "0 0 -1 101"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "195.5 412.5 150.771"; + rotation = "0 0 1 63"; + scale = "1.6 1.6 1.6"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "429.5 368.5 129.24"; + rotation = "0 0 -1 2.99997"; + scale = "0.7 0.7 0.7"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "10.5 133.5 113.729"; + rotation = "0 0 1 107"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "469.5 193.5 68.379"; + rotation = "0 0 1 123"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "579.5 56.5 21.2148"; + rotation = "0 0 1 115"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "588.5 -147.5 96.9434"; + rotation = "0 0 1 144"; + scale = "1.4 1.4 1.4"; + shapeName = "porg1.dts"; + }; + new TSStatic() { + position = "-6.5 -384.5 126.117"; + rotation = "0 0 1 178"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + }; + }; + new SimGroup(Addition4PhoenixPlant3) { + powerCount = "0"; + + new TSStatic() { + position = "375.5 -224.5 137.5"; + rotation = "0 0 -1 77"; + scale = "0.8 0.8 0.8"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "622.5 290.5 86.4785"; + rotation = "0 0 1 219"; + scale = "1.6 1.6 1.6"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "86.5 -11.5 127.398"; + rotation = "0 0 -1 86"; + scale = "0.7 0.7 0.7"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "397.5 492.5 146.986"; + rotation = "0 0 -1 28"; + scale = "1.6 1.6 1.6"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "560.5 -261.5 110.32"; + rotation = "0 0 -1 41"; + scale = "1.2 1.2 1.2"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "374.5 -264.5 138.41"; + rotation = "0 0 1 173"; + scale = "1.3 1.3 1.3"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "75.5 -9.5 127.244"; + rotation = "0 0 -1 89"; + scale = "0.8 0.8 0.8"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "121.5 -507.5 158.111"; + rotation = "0 0 -1 72"; + scale = "1.5 1.5 1.5"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "124.5 340.5 64.2754"; + rotation = "0 0 1 72"; + scale = "1.3 1.3 1.3"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "412.5 295.5 102.605"; + rotation = "0 0 1 208"; + scale = "1.4 1.4 1.4"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "94.5 146.5 105.236"; + rotation = "0 0 -1 57"; + scale = "1 1 1"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "-13.5 -72.5 121.023"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "-13.5 492.5 113.106"; + rotation = "0 0 -1 115"; + scale = "1.1 1.1 1.1"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "81.5 -13.5 127.453"; + rotation = "0 0 -1 108"; + scale = "1.5 1.5 1.5"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "238.5 466.5 166.998"; + rotation = "0 0 1 15"; + scale = "1.6 1.6 1.6"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "65.5 171.5 94.6719"; + rotation = "0 0 -1 42"; + scale = "1 1 1"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "101.5 -250.5 136.619"; + rotation = "0 0 1 155"; + scale = "1.2 1.2 1.2"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "-32.5 -484.5 133.072"; + rotation = "0 0 1 157"; + scale = "1.6 1.6 1.6"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "102.5 432.5 171.107"; + rotation = "0 0 1 66"; + scale = "1.1 1.1 1.1"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "109.5 209.5 96.5391"; + rotation = "0 0 1 33"; + scale = "0.9 0.9 0.9"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "-157.5 454.5 113.834"; + rotation = "0 0 -1 31"; + scale = "1.5 1.5 1.5"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "427.5 -454.5 151.539"; + rotation = "0 0 1 191"; + scale = "1.1 1.1 1.1"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "-38.5 175.5 108.867"; + rotation = "0 0 -1 83"; + scale = "0.9 0.9 0.9"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "104.5 210.5 96.914"; + rotation = "0 0 1 100"; + scale = "1.1 1.1 1.1"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "336.5 -115.5 112.166"; + rotation = "0 0 1 160"; + scale = "1.2 1.2 1.2"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "-22.5 367.5 106.81"; + rotation = "0 0 -1 56"; + scale = "1.5 1.5 1.5"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "394.5 -497.5 147.014"; + rotation = "0 0 1 78"; + scale = "1.2 1.2 1.2"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "29.5 -431.5 101.533"; + rotation = "0 0 -1 109"; + scale = "0.8 0.8 0.8"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "189.5 366.5 138.084"; + rotation = "0 0 -1 63"; + scale = "0.7 0.7 0.7"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "332.5 27.5 112.646"; + rotation = "0 0 -1 114"; + scale = "0.9 0.9 0.9"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "472.5 1.5 61.9219"; + rotation = "0 0 1 142"; + scale = "1.5 1.5 1.5"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "23.5 250.5 108.855"; + rotation = "0 0 1 9.00004"; + scale = "0.8 0.8 0.8"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "559.5 -42.5 93.9122"; + rotation = "0 0 -1 42"; + scale = "1.4 1.4 1.4"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "-101.5 -138.5 132.178"; + rotation = "0 0 1 9.00004"; + scale = "0.9 0.9 0.9"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "670.5 -292.5 135.41"; + rotation = "0 0 -1 79"; + scale = "1.1 1.1 1.1"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "415.5 379.5 130.818"; + rotation = "0 0 -1 2.99997"; + scale = "0.9 0.9 0.9"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "47.5 236.5 120.93"; + rotation = "0 0 1 50"; + scale = "0.9 0.9 0.9"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "-18.5 -74.5 120.953"; + rotation = "0 0 -1 29"; + scale = "1.1 1.1 1.1"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "458.5 186.5 66.7773"; + rotation = "0 0 1 105"; + scale = "1 1 1"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "112.5 -38.5 123.404"; + rotation = "0 0 1 46"; + scale = "0.9 0.9 0.9"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "-10.5 205.5 86.0429"; + rotation = "0 0 1 67"; + scale = "1.3 1.3 1.3"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "381.5 503.5 143.854"; + rotation = "0 0 1 240"; + scale = "1 1 1"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "-155.5 183.5 145.895"; + rotation = "0 0 1 99"; + scale = "0.7 0.7 0.7"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "261.5 43.5 127.596"; + rotation = "0 0 -1 58"; + scale = "1.6 1.6 1.6"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "20.5 -314.5 104.186"; + rotation = "0 0 1 26"; + scale = "0.9 0.9 0.9"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "467.5 257.5 65.8886"; + rotation = "0 0 1 70"; + scale = "1.2 1.2 1.2"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "-26.5 364.5 107.238"; + rotation = "0 0 1 198"; + scale = "1.4 1.4 1.4"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "453.83 -209.087 137.638"; + rotation = "0 0 1 134"; + scale = "1.1 1.1 1.1"; + shapeName = "porg3.dts"; + }; + new TSStatic() { + position = "480.5 323.5 103.883"; + rotation = "0 0 1 150"; + scale = "1.4 1.4 1.4"; + shapeName = "porg3.dts"; + }; + }; + }; + new SimGroup(Sounds) { + powerCount = "0"; + + new AudioEmitter() { + position = "296.26 434.72 167.827"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "AudioDefaultLooping3d"; + fileName = "fx/environment/crickets_drygrass.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "50"; + maxDistance = "3200"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "5000"; + type = "EffectAudioType"; + }; + new AudioEmitter() { + position = "-137.773 44.11 63.767"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "AudioDefault3d"; + fileName = "fx/environment/cicadas.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + }; + new AudioEmitter() { + position = "126.6 328.39 64.5848"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "AudioDefaultLooping3d"; + fileName = "fx/environment/fly_swarm.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.2"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "100"; + maxLoopGap = "2000"; + type = "EffectAudioType"; + }; + new AudioEmitter() { + position = "583.6 -390.751 67.7803"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "AudioDefaultLooping3d"; + fileName = "fx/environment/fly_swarm.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.2"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "200"; + maxLoopGap = "2000"; + type = "EffectAudioType"; + }; + new AudioEmitter() { + position = "221.91 -429.571 189.39"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "AudioDefaultLooping3d"; + fileName = "fx/environment/crickets_drygrass.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "50"; + maxDistance = "3200"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "5000"; + type = "EffectAudioType"; + }; + new AudioEmitter() { + position = "298.69 -26.351 135.198"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "AudioDefaultLooping3d"; + fileName = "fx/environment/desertowl.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.25"; + isLooping = "1"; + is3D = "1"; + minDistance = "25"; + maxDistance = "1600"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "2500"; + maxLoopGap = "12000"; + type = "EffectAudioType"; + }; + new AudioEmitter() { + position = "476.52 192.85 75.4055"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "AudioDefault3d"; + fileName = "fx/environment/fly_swarm.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.25"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "200"; + maxLoopGap = "2000"; + type = "EffectAudioType"; + }; + }; + new TSStatic() { + position = "340.476 297.748 84.2971"; + rotation = "0 0 1 176.471"; + scale = "1.29395 0.456635 1"; + shapeName = "stackable3l.dts"; + }; + new TSStatic() { + position = "195.624 -307.069 76.7961"; + rotation = "1 0 0 0"; + scale = "1.28967 0.5 1"; + shapeName = "stackable3l.dts"; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Caldera.mis b/base/missions/Caldera.mis new file mode 100644 index 0000000..83a31c7 --- /dev/null +++ b/base/missions/Caldera.mis @@ -0,0 +1,650 @@ +// MissionTypes = Siege + +//--- MISSION QUOTE BEGIN --- +//Ride your horse along the edge of a sword; hide yourself in the middle of flames. +// -- Diamond Sword saying +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[Siege]Attackers must destroy both generators on floating base +//[Siege]Vehicle station available to attackers +//[Siege]Multiple entrances to base +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + cdTrack = "3"; + powerCount = "0"; + musicTrack = "volcanic"; + + new MissionArea(MissionArea) { + area = "-400 -336 1008 720"; + flightCeiling = "300"; + flightCeilingRange = "20"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.600000 0.600000 0.600000 1.000000"; + ambient = "0.200000 0.200000 0.200000 1.000000"; + position = "-1024 -1024 0"; + rotation = "1 0 0 0"; + locked = "true"; + scale = "1 1 1"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/lavadet1"; + terrainFile = "Caldera.ter"; + squareSize = "8"; + emptySquares = "250"; + position = "-1024 -1024 0"; + hazeDistance = "250"; + locked = "true"; + visibleDistance = "1200"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "45"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + position = "0 0 0 1"; + XDimOverSize = "0"; + YDimOverSize = "0"; + rotation = "0 0 0 0"; + locked = "true"; + conjoinBowlDev = "20"; + scale = "1 1 1"; + GraphFile = "Caldera.nav"; + coverage = "0"; + }; + new WaterBlock() { + position = "112 -96 63.1568"; + rotation = "1 0 0 0"; + scale = "256 192 57.0092"; + liquidType = "CrustyLava"; + density = "1"; + viscosity = "15"; + waveMagnitude = "0"; + surfaceTexture = "LiquidTiles/Lava"; + surfaceOpacity = "1"; + envMapTexture = "desert/skies/d_n_move1"; + envMapIntensity = "0.5"; + submergeTexture[0] = "special/lavadeath_1"; + submergeTexture[1] = "special/lavadeath_2"; + removeWetEdges = "1"; + locked = "true"; + }; + new Sky(Sky) { + position = "-1024 -1024 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "550"; + useSkyTextures = "1"; + SkySolidColor = "0.106000 0.125000 0.235000 0.000000"; + fogDistance = "222"; + fogColor = "0.850000 0.380000 0.100000 1.000000"; + fogVolume1 = "0 0 0"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "lava_dark.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 -0.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 -0.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 -0.000000"; + cloudSpeed0 = "0.001000 0.001000"; + locked = "true"; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "-15.8675 5.46975 176.772"; + rotation = "0 0 1 77.9223"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "204.902 -49.1799 234.709"; + rotation = "0.575524 -0.0490377 0.816313 11.9177"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "251.494 -22.4737 293.284"; + rotation = "0.582189 0.145561 -0.799917 34.7144"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + + new SimGroup(Team1) { + + new SimGroup(WBase) { + + new StaticShape() { + position = "-49.2609 -145.916 234.061"; + rotation = "0 0 1 63.5986"; + scale = "1 1 1"; + nameTag = "West Tower"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + Target = "33"; + locked = "true"; + }; + new Item() { + position = "-50.2487 -152.88 193.418"; + rotation = "0 0 -1 25.2101"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new StaticShape() { + position = "-57.2069 -143.475 180.313"; + rotation = "-0 0 -1 58.0514"; + scale = "1 1 1"; + nameTag = "West Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + damageTimeMS = "783957"; + Target = "34"; + locked = "true"; + }; + new StaticShape() { + position = "-50.5461 -154.429 180.337"; + rotation = "0 0 1 182.201"; + scale = "1 1 1"; + nameTag = "West Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + damageTimeMS = "782064"; + Target = "35"; + locked = "true"; + }; + new StaticShape() { + position = "-215.474 -235.369 148.1"; + rotation = "0 0 -1 117.456"; + scale = "1 1 1"; + nameTag = "Vehicle Pad"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + mobileBaseVehicle = "Removed"; + damageTimeMS = "219608"; + Target = "-1"; + scoutVehicle = "Removed"; + locked = "true"; + AssaultVehicle = "Removed"; + }; + new InteriorInstance() { + position = "-45.7829 -144.124 180.354"; + rotation = "0 0 1 59.4055"; + scale = "1 1 1"; + interiorFile = "dtowr1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_Pulse_2"; + locked = "true"; + }; + new StaticShape() { + position = "67.61 -48.218 -207.508"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + Target = "37"; + locked = "true"; + }; + new InteriorInstance() { + position = "-216.271 -235.459 148.4"; + rotation = "0 0 1 63.0253"; + scale = "1 0.972192 1"; + interiorFile = "dvpad1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new ForceFieldBare() { + position = "-58.6739 -145.962 203.227"; + rotation = "-0 0 -1 29.7938"; + scale = "5.1479 4.14776 0.526289"; + dataBlock = "defaultTeamSlowFieldBare"; + Target = "38"; + locked = "true"; + }; + new ForceFieldBare() { + position = "-51.5789 -158.087 203.288"; + rotation = "-0 0 -1 29.7938"; + scale = "5.1479 4.14776 0.526289"; + dataBlock = "defaultTeamSlowFieldBare"; + Target = "39"; + locked = "true"; + }; + new ForceFieldBare() { + position = "-58.5844 -146.798 180.335"; + rotation = "0 0 1 149.152"; + scale = "1.60793 8.34049 7.7216"; + dataBlock = "defaultTeamSlowFieldBare"; + Target = "40"; + locked = "true"; + }; + new Turret() { + position = "-36.5039 -139.108 204.247"; + rotation = "0 0 1 60.1606"; + scale = "1 1 1"; + nameTag = "Base"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + Target = "41"; + locked = "true"; + originalBarrel = "PlasmaBarrelLarge"; + }; + new WayPoint() { + position = "-211.497 -233.586 151.337"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Vehicle Pad"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Vehicle Pad"; + team = "0"; + locked = "true"; + }; + }; + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-38.551 -142.676 186.637"; + rotation = "-0 0 -1 56.9052"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + }; + new SimGroup(Team2) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "212.69 21.44 235.853"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "70"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "0"; + locked = "true"; + }; + }; + new SimGroup(defense) { + + new SimGroup(FFDefGens) { + + new StaticShape() { + position = "210.92 24.27 295.821"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Defense"; + dataBlock = "SensorLargePulse"; + lockCount = "0"; + homingCount = "0"; + Target = "42"; + locked = "true"; + }; + new ForceFieldBare() { + position = "264.56 8.06406 219.686"; + rotation = "1 0 0 0"; + scale = "1 22.9263 8.12996"; + dataBlock = "defaultTeamSlowFieldBare"; + Target = "43"; + locked = "true"; + color = "0.500000 0.500000 1.000000 1.000000"; + triggerCount = "0"; + }; + new Item() { + position = "211.16 42.98 252.866"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new Turret() { + position = "211 20.6 255.3"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Upper Entrance"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + Target = "44"; + locked = "true"; + }; + new Turret() { + position = "210.96 -39.23 219.656"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "Entrance"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + Target = "45"; + locked = "true"; + originalBarrel = "PlasmaBarrelLarge"; + }; + new StaticShape() { + position = "174.821 19.469 219.67"; + rotation = "0 0 1 90.5273"; + scale = "1 1 1"; + nameTag = "Tactical"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + Target = "46"; + locked = "true"; + name = "Tactical Generator"; + scoreValue = "5"; + }; + new WayPoint() { + position = "172.84 20.1 219.825"; + rotation = "1 0 0 0"; + scale = "0.1 0.1 0.1"; + nameTag = "Tactical Generator"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Tactical Generator"; + team = "0"; + locked = "true"; + }; + }; + new SimGroup(Stations) { + + new StaticShape() { + position = "239.01 -4.57 219.7"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "Defense"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "47"; + locked = "true"; + scoreValue = "5"; + }; + new StaticShape() { + position = "237.588 19.7132 219.686"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Control Point"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + Target = "48"; + locked = "true"; + }; + new InteriorInstance() { + position = "210.961 -2.7616 219.719"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dbase3.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_Pulse_1"; + locked = "true"; + }; + new StaticShape() { + position = "268.399 9.43564 219.67"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Primary"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + Target = "49"; + locked = "true"; + name = "Primary Generator"; + scoreValue = "5"; + }; + new WayPoint() { + position = "268.3 20 219.8"; + rotation = "1 0 0 0"; + scale = "0.1 0.1 0.1"; + nameTag = "Primary Generator"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Primary Generator"; + team = "0"; + locked = "true"; + }; + new StaticShape() { + position = "182.86 -5.01 219.7"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "Defense"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "50"; + locked = "true"; + }; + new StaticShape() { + position = "201.306 6.13267 219.7"; + rotation = "0 0 1 135.791"; + scale = "1 1 1"; + nameTag = "Defense"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "51"; + locked = "true"; + }; + new StaticShape() { + position = "220.719 6.00303 219.7"; + rotation = "0 0 1 228.037"; + scale = "1 1 1"; + nameTag = "Defense"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "52"; + locked = "true"; + }; + new ForceFieldBare() { + position = "240.127 10.7499 219.625"; + rotation = "1 0 0 0"; + scale = "1 17.0756 8.19376"; + dataBlock = "defaultForceFieldBare"; + Target = "53"; + locked = "true"; + }; + }; + }; + }; + new SimGroup(team0) { + }; + }; + new AudioEmitter() { + position = "206.17 3.7 104.499"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "85"; + maxDistance = "5440"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new SimGroup(Ambients) { + + new AudioEmitter() { + position = "334.4 -0.33 148.5"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahiss.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "5"; + maxDistance = "320"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new ParticleEmissionDummy() { + position = "334.414 -0.337833 148.474"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "doubleTimeEmissionDummy"; + emitter = "LightDamageSmoke"; + velocity = "1"; + locked = "true"; + }; + new TSStatic() { + position = "216.5 17.85 273.68"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "206.72 20.32 273.68"; + rotation = "0 0 1 67.036"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "210.73 7.55 249.67"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + new InteriorInstance() { + position = "334.291 -0.588567 147.974"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dvent.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new TSStatic() { + position = "242.23 36.81 230.27"; + rotation = "0.578959 0.573655 0.57942 120.279"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "242.12 35.7 230.27"; + rotation = "0.578959 0.573655 0.57942 120.279"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "242.21 34.57 230.27"; + rotation = "0.578959 0.573655 0.57942 120.279"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "179.92 19.1 228.7"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "180.2 16.8967 228.71"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable4m.dts"; + locked = "true"; + }; + new ParticleEmissionDummy() { + position = "265.95 17.2597 204.298"; + rotation = "1 0 0 180.091"; + scale = "1.97494 1.80987 1"; + dataBlock = "doubleTimeEmissionDummy"; + emitter = "PlasmaExplosionEmitter"; + velocity = "1"; + locked = "true"; + }; + new ParticleEmissionDummy() { + position = "156.059 17.1336 204.271"; + rotation = "0 1 0 180.664"; + scale = "1 1 1"; + dataBlock = "doubleTimeEmissionDummy"; + emitter = "PlasmaExplosionEmitter"; + velocity = "1"; + locked = "true"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Casern_Cavite.mis b/base/missions/Casern_Cavite.mis new file mode 100644 index 0000000..6a3b693 --- /dev/null +++ b/base/missions/Casern_Cavite.mis @@ -0,0 +1,1378 @@ +// DisplayName = Casern Cavite +// MissionTypes = Hunters Bounty DM + +//--- MISSION QUOTE BEGIN --- +//Fly down, Death, call me: I have become a lost name. +// -- Muriel Rukeyser +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[Hunters TeamHunters]Nexus located in heart of massive central building +//[DM Bounty]Mission follows standard Rules of Engagement +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + musicTrack = "badlands"; + powerCount = "0"; + cdTrack = "4"; + + new MissionArea(MissionArea) { + area = "-320 -256 624 688"; + flightCeiling = "300"; + flightCeilingRange = "20"; + locked = "true"; + }; + new Sky(Sky) { + position = "40 -768 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "500"; + useSkyTextures = "1"; + SkySolidColor = "0.39 0.39 0.39 0.000000"; + fogDistance = "200"; + fogColor = "0.330000 0.320000 0.300000 1.000000"; + fogVolume1 = "700 200 250"; + fogVolume2 = "600 250 300"; + fogVolume3 = "0 0 0"; + materialList = "Badlands_l4.dml"; + windVelocity = "1 -0.5 0"; + windEffectPrecipitation = "1"; + locked = "true"; + cloudSpeed0 = "0.000600 0.000100"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.600000 0.600000 0.600000 1.000000"; + ambient = "0.500000 0.500000 0.500000 1.000000"; + locked = "true"; + position = "40 -768 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/baddet1"; + terrainFile = "Casern_Cavite.ter"; + squareSize = "8"; + locked = "true"; + position = "-1024 -1024 0"; + }; + new Precipitation(Precipitation) { + position = "-1 1 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Rain"; + percentage = "1"; + color1 = "0.420000 0.450000 0.480000 1.000000"; + color2 = "-1.000000 0.000000 0.000000 1.000000"; + color3 = "-1.000000 0.000000 0.000000 1.000000"; + offsetSpeed = "0.25"; + minVelocity = "1.25"; + maxVelocity = "4"; + maxNumDrops = "2000"; + maxRadius = "80"; + locked = "true"; + }; + new Lightning() { + position = "-8 88 250"; + rotation = "1 0 0 0"; + scale = "624 688 500"; + dataBlock = "DefaultStorm"; + strikesPerMinute = "5"; + strikeWidth = "2.5"; + chanceToHitTarget = "100"; + strikeRadius = "50"; + boltStartRadius = "20"; + color = "1.000000 1.000000 1.000000 1.000000"; + fadeColor = "0.100000 0.100000 1.000000 1.000000"; + useFog = "1"; + locked = "true"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "45"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + locked = "true"; + YDimOverSize = "0"; + position = "0 0 0 1"; + conjoinBowlDev = "20"; + rotation = "0 0 0 0"; + coverage = "0"; + XDimOverSize = "0"; + GraphFile = "Casern_Cavite.nav"; + scale = "1 1 1"; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "-136.183 131.119 61.0027"; + rotation = "0.0199945 -0.0349859 0.999188 120.544"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "60.5796 210.778 160.73"; + rotation = "-0.0117436 -0.0499757 0.998681 206.414"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "1.4164 82.645 152.147"; + rotation = "-0.15909 -0.35701 0.920453 224.604"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + + new SimGroup(Team1) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-160.141 156.11 64.6322"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + new SpawnSphere() { + position = "-6.804 270.34 58.185"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "75"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + new SpawnSphere() { + position = "182.59 57.592 99.3112"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "100"; + indoorWeight = "15"; + outdoorWeight = "100"; + locked = "true"; + }; + new SpawnSphere() { + position = "1.4374 -36.218 44.2737"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "40"; + sphereWeight = "50"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + new SpawnSphere() { + position = "-17.3725 63.961 200.964"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "15"; + indoorWeight = "100"; + outdoorWeight = "0"; + locked = "true"; + }; + new SpawnSphere() { + position = "117.927 -3.57393 79.9199"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "75"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new SimGroup(AIObjectives) { + + new AIObjective(AIORepairObject) { + position = "9.6277 89.221 154.03"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory1"; + targetClientId = "-1"; + targetObjectId = "5523"; + location = "9.6277 89.221 154.03"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "9.6277 89.221 154.03"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory1"; + targetClientId = "-1"; + targetObjectId = "5523"; + location = "9.6277 89.221 154.03"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "26.3559 64.063 154.05"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory2"; + targetClientId = "-1"; + targetObjectId = "5525"; + location = "26.3559 64.063 154.05"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "26.3559 64.063 154.05"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory2"; + targetClientId = "-1"; + targetObjectId = "5525"; + location = "26.3559 64.063 154.05"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-15.0121 107.359 154.054"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory3"; + targetClientId = "-1"; + targetObjectId = "5527"; + location = "-15.0121 107.359 154.054"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-15.0121 107.359 154.054"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory3"; + targetClientId = "-1"; + targetObjectId = "5527"; + location = "-15.0121 107.359 154.054"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-42.2812 92.164 60.0488"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory4"; + targetClientId = "-1"; + targetObjectId = "5530"; + location = "-42.2812 92.164 60.0488"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-42.2812 92.164 60.0488"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory4"; + targetClientId = "-1"; + targetObjectId = "5530"; + location = "-42.2812 92.164 60.0488"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "9.514 38.666 87.5445"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory5"; + targetClientId = "-1"; + targetObjectId = "5533"; + location = "9.514 38.666 87.5445"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "9.514 38.666 87.5445"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory5"; + targetClientId = "-1"; + targetObjectId = "5533"; + location = "9.514 38.666 87.5445"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-40.7326 38.868 154.072"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory6"; + targetClientId = "-1"; + targetObjectId = "5547"; + location = "-40.7326 38.868 154.072"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-40.7326 38.868 154.072"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory6"; + targetClientId = "-1"; + targetObjectId = "5547"; + location = "-40.7326 38.868 154.072"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "178.133 50.3628 86.7958"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory7"; + targetClientId = "-1"; + targetObjectId = "5551"; + location = "178.133 50.3628 86.7958"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "178.133 50.3628 86.7958"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory7"; + targetClientId = "-1"; + targetObjectId = "5551"; + location = "178.133 50.3628 86.7958"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + }; + }; + new SimGroup(team0) { + providesPower = "1"; + + new Item() { + position = "-50.825 93.755 59.49"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-15.853 63.799 91.4854"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + interiorFile = "xtowr4.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new InteriorInstance() { + position = "-104 96 52.7925"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "xbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-104 111.5 52.7881"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "xbrdga.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-104 80.5 52.7925"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + interiorFile = "xbrdga.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "147.5 62 87.2684"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + interiorFile = "xmisc1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "148.5 110 89.4904"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "xmisc1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "184.5 50.5 83.2666"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "xbunkb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "42.0921 154.319 133.494"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "xplat3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Item() { + position = "-50.825 90.755 59.49"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory1) { + position = "9.6277 89.221 152.464"; + rotation = "0 0 1 226.891"; + scale = "1 1 1"; + nameTag = "SouthEast Balcony"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory2) { + position = "26.3559 64.063 152.484"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Upper Entry"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory3) { + position = "-15.0121 107.359 152.488"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "Upper Entry"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory4) { + position = "-42.2812 92.164 58.483"; + rotation = "0 0 -1 46.4096"; + scale = "1 1 1"; + nameTag = "Lower Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory5) { + position = "9.514 38.666 85.9787"; + rotation = "0 0 -1 46.4096"; + scale = "1 1 1"; + nameTag = "NorthEast Outdoor"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item() { + position = "-33.1564 42.788 51.4893"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-35.3291 44.857 51.4893"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-37.5018 46.925 51.4893"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "1.257 85.155 51.4772"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "3.3017 82.96 51.4772"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "5.3466 80.765 51.4772"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "5.7508 46.802 51.4973"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "3.6833 44.628 51.4973"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "1.6172 42.454 51.4973"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-16.0137 50.098 157.485"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-16.0137 53.098 157.485"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-16.0137 56.098 157.485"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory6) { + position = "-40.7326 38.868 152.506"; + rotation = "0 0 1 43.5448"; + scale = "1 1 1"; + nameTag = "NorthWest Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-53.4695 14.417 117.035"; + rotation = "0 0 1 218.479"; + scale = "1 1 1"; + interiorFile = "xplat3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Item() { + position = "-50.825 87.755 59.49"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory7) { + position = "178.133 50.3628 85.23"; + rotation = "0 0 -1 89.3814"; + scale = "1 1 1"; + nameTag = "Bunker"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Trigger(NexusTrigger) { + position = "-42.9354 89.5608 79.7589"; + rotation = "1 0 0 0"; + scale = "53.8668 53.3831 18.8736"; + dataBlock = "gameTrigger"; + polyhedron = "0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000 -0.0000000 -1.0000000 -0.0000000 -0.0000000 -0.0000000 1.0000000"; + locked = "true"; + missionTypesList = "Hunters"; + }; + new Item(Nexus) { + position = "-16.2213 63.951 80.5541"; + rotation = "1 0 0 0"; + scale = "1 1 0.66"; + dataBlock = "Nexus"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + flashThreadDir = "1"; + missionTypesList = "Hunters"; + }; + new StaticShape() { + position = "-16.2213 63.951 80.2341"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "NexusBase"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + missionTypesList = "Hunters"; + }; + new StaticShape() { + position = "-16.2213 63.951 85.7641"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "NexusCap"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + missionTypesList = "Hunters"; + }; + }; + }; + new WayPoint() { + position = "-15.9843 63.986 75.7918"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Nexus"; + team = "0"; + locked = "true"; + missionTypesList = "Hunters"; + }; + new WayPoint() { + position = "-15.9843 63.986 75.7918"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Tower"; + team = "0"; + locked = "true"; + missionTypesList = "Bounty DM"; + }; + new AIObjective(AIORepairObject) { + position = "9.6277 89.221 154.03"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory1"; + targetClientId = "-1"; + targetObjectId = "5523"; + location = "9.6277 89.221 154.03"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "9.6277 89.221 154.03"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory1"; + targetClientId = "-1"; + targetObjectId = "5523"; + location = "9.6277 89.221 154.03"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "26.3559 64.063 154.05"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory2"; + targetClientId = "-1"; + targetObjectId = "5525"; + location = "26.3559 64.063 154.05"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "26.3559 64.063 154.05"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory2"; + targetClientId = "-1"; + targetObjectId = "5525"; + location = "26.3559 64.063 154.05"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-15.0121 107.359 154.054"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory3"; + targetClientId = "-1"; + targetObjectId = "5527"; + location = "-15.0121 107.359 154.054"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-15.0121 107.359 154.054"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory3"; + targetClientId = "-1"; + targetObjectId = "5527"; + location = "-15.0121 107.359 154.054"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-42.2812 92.164 60.0488"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory4"; + targetClientId = "-1"; + targetObjectId = "5530"; + location = "-42.2812 92.164 60.0488"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-42.2812 92.164 60.0488"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory4"; + targetClientId = "-1"; + targetObjectId = "5530"; + location = "-42.2812 92.164 60.0488"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "9.514 38.666 87.5445"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory5"; + targetClientId = "-1"; + targetObjectId = "5533"; + location = "9.514 38.666 87.5445"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "9.514 38.666 87.5445"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory5"; + targetClientId = "-1"; + targetObjectId = "5533"; + location = "9.514 38.666 87.5445"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-40.7326 38.868 154.072"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory6"; + targetClientId = "-1"; + targetObjectId = "5547"; + location = "-40.7326 38.868 154.072"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-40.7326 38.868 154.072"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory6"; + targetClientId = "-1"; + targetObjectId = "5547"; + location = "-40.7326 38.868 154.072"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "178.133 50.3628 86.7958"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory7"; + targetClientId = "-1"; + targetObjectId = "5551"; + location = "178.133 50.3628 86.7958"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "178.133 50.3628 86.7958"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory7"; + targetClientId = "-1"; + targetObjectId = "5551"; + location = "178.133 50.3628 86.7958"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AudioEmitter() { + position = "-52.2482 170.965 70.3341"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/howlingwind3.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.4"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Damnation.mis b/base/missions/Damnation.mis new file mode 100644 index 0000000..ef4863d --- /dev/null +++ b/base/missions/Damnation.mis @@ -0,0 +1,1192 @@ +// MissionTypes = CTF + +//--- MISSION QUOTE BEGIN --- +//By the flow of the inland river, +//Whence the fleets of iron have fled, +//Where the blades of the grave-grass quiver, +//Asleep are the ranks of the dead. +// -- Francis Miles Finch +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[CTF]Six flag captures to win +//Balanced mission (both sides identical) +//No vehicle stations +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + CTF_scoreLimit = "6"; + musicTrack = "lush"; + CTF_timeLimit = "25"; + powerCount = "0"; + cdTrack = "2"; + + new MissionArea(MissionArea) { + area = "-512 -384 1040 1040"; + flightCeiling = "2000"; + flightCeilingRange = "50"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.600000 0.600000 0.600000 1.000000"; + ambient = "0.200000 0.200000 0.200000 1.000000"; + rotation = "1 0 0 0"; + locked = "true"; + scale = "1 1 1"; + position = "-1216 -848 0"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/lushdet1"; + terrainFile = "Damnation.ter"; + squareSize = "8"; + emptySquares = "95892 161683 293011 358802 359058 359314 228499 97684 241259 175979 372842 373098 307818 242539 177260"; + locked = "true"; + visibleDistance = "1200"; + hazeDistance = "250"; + position = "-1024 -1024 0"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "45"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + rotation = "0 0 0 0"; + locked = "true"; + XDimOverSize = "0"; + scale = "1 1 1"; + conjoinBowlDev = "20"; + coverage = "0"; + position = "0 0 0 1"; + YDimOverSize = "0"; + GraphFile = "Damnation.nav"; + }; + new Sky(Sky) { + position = "-1216 -848 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "520"; + useSkyTextures = "1"; + SkySolidColor = "0.390000 0.390000 0.390000 0.000000"; + fogDistance = "220"; + fogColor = "0.500000 0.500000 0.500000 1.000000"; + fogVolume1 = "0 0 0"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "Lush_l4.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 -198748244414614883000000000000000000000.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 -222768174765569861000000000000000000000.000000"; + locked = "true"; + cloudSpeed0 = "0.000000 0.000000"; + }; + new SimGroup(Teams) { + + new SimGroup(Team1) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-195.416 172.745 166.653"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "15"; + indoorWeight = "75"; + outdoorWeight = "25"; + locked = "true"; + }; + new SpawnSphere() { + position = "-135.821 396.688 109.317"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "70"; + sphereWeight = "70"; + indoorWeight = "75"; + outdoorWeight = "25"; + locked = "true"; + }; + new SpawnSphere() { + position = "-416.969 399.982 151.834"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "15"; + indoorWeight = "75"; + outdoorWeight = "25"; + locked = "true"; + }; + }; + new SimGroup(Base0) { + + new Item() { + position = "-313.995 363.658 87.863"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + Target = "33"; + locked = "true"; + }; + new Item() { + position = "-120.695 380.206 89.624"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new StaticShape() { + position = "-138.098 404.8 99.296"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "Hydroplant"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + Target = "34"; + locked = "true"; + }; + new StaticShape() { + position = "-138.144 385.835 99.2963"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "Hydroplant"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + Target = "35"; + locked = "true"; + }; + new StaticShape() { + position = "-148.34 424.054 109.25"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "Hydroplant"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "36"; + locked = "true"; + }; + new StaticShape() { + position = "-159.496 424.101 109.25"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Hydroplant"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "37"; + locked = "true"; + }; + new StaticShape() { + position = "-159.522 366.285 109.25"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Hydroplant"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "38"; + locked = "true"; + }; + new StaticShape() { + position = "-148.314 366.254 109.25"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "Hydroplant"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "39"; + locked = "true"; + }; + new StaticShape() { + position = "-143.526 371.157 121.107"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "Hydroplant"; + dataBlock = "SensorLargePulse"; + lockCount = "0"; + homingCount = "0"; + Target = "40"; + locked = "true"; + }; + new Turret() { + position = "-145.05 419.314 121.8"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "Hydroplant"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + Target = "41"; + locked = "true"; + }; + new InteriorInstance() { + position = "-152.431 395.348 101.258"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bpower1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new InteriorInstance() { + position = "-313.981 363.606 86.674"; + rotation = "1 0 0 0"; + scale = "1.5 1.5 1.5686"; + interiorFile = "bplat6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-313.964 363.622 87.8387"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "InteriorFlagStand"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + locked = "true"; + }; + new InteriorInstance() { + position = "-194.149 161.526 156.521"; + rotation = "0 0 1 225.928"; + scale = "1 1 1"; + interiorFile = "btowr8.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape() { + position = "-196.748 158.992 172.52"; + rotation = "0 0 1 225.355"; + scale = "1 1 1"; + nameTag = "Forward Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "42"; + locked = "true"; + }; + new InteriorInstance() { + position = "-423.66 393.712 156.257"; + rotation = "0 0 -1 44.6907"; + scale = "1 1 1"; + interiorFile = "bbunk2.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new Item() { + position = "-420.82 396.034 160.568"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new StaticShape() { + position = "-437.029 390.012 149.85"; + rotation = "0 0 1 225.355"; + scale = "1 1 1"; + nameTag = "Rear Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "43"; + locked = "true"; + }; + new StaticShape() { + position = "-419.536 406.735 149.85"; + rotation = "0 0 1 45.2637"; + scale = "1 1 1"; + nameTag = "Rear Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "44"; + locked = "true"; + }; + }; + }; + new SimGroup(Team2) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "453.235 -46.8356 151.323"; + rotation = "0 0 1 185.248"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "15"; + indoorWeight = "75"; + outdoorWeight = "25"; + locked = "true"; + }; + new SpawnSphere() { + position = "136.794 -23.7782 110.969"; + rotation = "0 0 1 218.479"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "70"; + sphereWeight = "70"; + indoorWeight = "75"; + outdoorWeight = "25"; + locked = "true"; + }; + new SpawnSphere() { + position = "195.43 166.585 160.315"; + rotation = "0 0 1 224.209"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "15"; + indoorWeight = "75"; + outdoorWeight = "25"; + locked = "true"; + }; + }; + new SimGroup(Base0) { + + new Item() { + position = "306.8 -17.171 87.8528"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + Target = "45"; + locked = "true"; + }; + new Item() { + position = "132.695 -32.6061 89.624"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new StaticShape() { + position = "150.241 -57.5069 99.31"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Hydroplant"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + Target = "46"; + locked = "true"; + }; + new StaticShape() { + position = "150.315 -38.271 99.31"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Hydroplant"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + Target = "47"; + locked = "true"; + }; + new StaticShape() { + position = "161.076 -76.8596 109.25"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Hydroplant"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "48"; + locked = "true"; + }; + new StaticShape() { + position = "171.918 -76.8919 109.25"; + rotation = "-0 -0 1 90"; + scale = "1 1 1"; + nameTag = "Hydroplant"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "49"; + locked = "true"; + }; + new StaticShape() { + position = "172.025 -19.1343 109.25"; + rotation = "-0 -0 1 90"; + scale = "1 1 1"; + nameTag = "Hydroplant"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "50"; + locked = "true"; + }; + new StaticShape() { + position = "160.783 -19.2409 109.25"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Hydroplant"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "51"; + locked = "true"; + }; + new StaticShape() { + position = "156.126 -23.5571 121.107"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Hydroplant"; + dataBlock = "SensorLargePulse"; + lockCount = "0"; + homingCount = "0"; + Target = "52"; + locked = "true"; + }; + new Turret() { + position = "157.05 -72.5141 121.699"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Hydroplant"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + Target = "53"; + locked = "true"; + }; + new InteriorInstance() { + position = "164.86 -48.2173 101.258"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + interiorFile = "bpower1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new InteriorInstance() { + position = "306.892 -17.224 86.6738"; + rotation = "1 0 0 0"; + scale = "1.5 1.5 1.5686"; + interiorFile = "bplat6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "306.807 -17.171 87.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "InteriorFlagStand"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + locked = "true"; + }; + new InteriorInstance() { + position = "205.543 184.409 155.721"; + rotation = "0 0 1 45.928"; + scale = "1 1 1"; + interiorFile = "btowr8.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape() { + position = "208.101 187.045 171.71"; + rotation = "0 0 1 45.355"; + scale = "1 1 1"; + nameTag = "Forward Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "54"; + locked = "true"; + }; + new InteriorInstance() { + position = "435.757 -47.2228 154.857"; + rotation = "0 0 1 135.309"; + scale = "1 1 1"; + interiorFile = "bbunk2.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new Item() { + position = "431.93 -49.3341 159.168"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new StaticShape() { + position = "449.224 -43.2509 148.36"; + rotation = "0 0 1 45.355"; + scale = "1 1 1"; + nameTag = "Rear Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "55"; + locked = "true"; + }; + new StaticShape() { + position = "431.627 -60.2621 148.36"; + rotation = "0 0 1 225.264"; + scale = "1 1 1"; + nameTag = "Rear Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "56"; + locked = "true"; + }; + }; + }; + new SimGroup(team0) { + }; + }; + new WaterBlock() { + position = "128 -168 38.688"; + rotation = "1 0 0 0"; + scale = "352 288 50"; + liquidType = "StagnantWater"; + density = "1"; + viscosity = "5"; + waveMagnitude = "0.5"; + surfaceTexture = "LiquidTiles/AlgaeWater"; + surfaceOpacity = "0.8"; + envMapTexture = "lush/skies/lushcloud3"; + envMapIntensity = "0.7"; + removeWetEdges = "1"; + locked = "true"; + }; + new SimGroup(RandomOrganics) { + + new SimGroup(Addition1BELgTree19) { + + new TSStatic() { + position = "482.764 -239.173 130.388"; + rotation = "0 0 1 213"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-166.305 -217.455 144.032"; + rotation = "0 0 -1 103"; + scale = "1.3 1.3 1.3"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-446.5 659.5 137.838"; + rotation = "0 0 1 83"; + scale = "0.8 0.8 0.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition3BEPlant23) { + }; + new SimGroup(Addition1BELgTree19) { + + new TSStatic() { + position = "90 356 107.031"; + rotation = "0 0 1 54"; + scale = "0.8 0.8 0.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-6 252 56.9375"; + rotation = "0 0 1 155"; + scale = "1.2 1.2 1.2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "197.15 53.8397 103.981"; + rotation = "0 0 1 143"; + scale = "0.9 0.9 0.9"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-182 68 91.5938"; + rotation = "0 0 1 206"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-134 -44 103"; + rotation = "0 0 1 82"; + scale = "1.1 1.1 1.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-222 44 95.4531"; + rotation = "0 0 1 214"; + scale = "0.9 0.9 0.9"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-302 36 52.0781"; + rotation = "0 0 1 218"; + scale = "1.1 1.1 1.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "34 -60 93.9922"; + rotation = "0 0 -1 26.9998"; + scale = "0.8 0.8 0.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition2BELgTree18) { + + new TSStatic() { + position = "-210.532 290.244 103.399"; + rotation = "-0.101786 -0.00522579 0.994793 33.1633"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "90 -68 108.359"; + rotation = "-0.0754226 0.0162109 -0.99702 98.1695"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "42 324 92"; + rotation = "-0.0129373 0.0304783 -0.999452 44.0219"; + scale = "1.4 1.4 1.4"; + shapeName = "borg18.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition3BESmTree17) { + + new TSStatic() { + position = "90 -100 101.961"; + rotation = "0 0 1 9.99989"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-278 -132 67.9375"; + rotation = "0 0 1 35"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-158 300 101.898"; + rotation = "0 0 1 121"; + scale = "0.9 0.9 0.9"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "178 316 95.2343"; + rotation = "0 0 1 90.0002"; + scale = "1.1 1.1 1.1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "226 428 60.6719"; + rotation = "0 0 1 206"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-318 68 67.289"; + rotation = "0 0 1 195"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition4BEPlant1) { + + new TSStatic() { + position = "-70.0692 211.948 107.303"; + rotation = "-0.0922343 -0.24279 -0.965684 116.799"; + scale = "0.6 0.6 0.6"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "82 12 105.42"; + rotation = "0.244446 0.1545 -0.957275 117.246"; + scale = "0.5 0.5 0.5"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "1.95262 380.003 114.008"; + rotation = "0.116129 -0.050922 0.991928 141.291"; + scale = "2 2 2"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "154.094 508.059 109.449"; + rotation = "-0.235124 -0.169519 0.957068 186.701"; + scale = "0.9 0.9 0.9"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-61.9587 364.041 101.159"; + rotation = "0.0151215 0.192138 -0.981251 100.069"; + scale = "0.5 0.5 0.5"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "202.071 276 93.6709"; + rotation = "-0.179699 -0.0905798 0.979543 232.061"; + scale = "0.6 0.6 0.6"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "105.992 -156.008 104.767"; + rotation = "0.2135 -0.175995 0.96096 11.4439"; + scale = "1.7 1.7 1.7"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "386.041 556.084 127.204"; + rotation = "-0.223333 -0.156024 0.962174 123.854"; + scale = "1.5 1.5 1.5"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-285.95 540.099 115.855"; + rotation = "-0.112605 0.370342 -0.922045 96.6356"; + scale = "2 2 2"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-46 212 97.4671"; + rotation = "0.329494 -0.101911 0.938642 128.88"; + scale = "1.8 1.8 1.8"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "305.973 179.995 104.05"; + rotation = "-0.0183599 -0.250603 -0.967916 31.976"; + scale = "2 2 2"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-174 11.939 99.8785"; + rotation = "0.526422 0.131252 0.840031 33.0626"; + scale = "0.6 0.6 0.6"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-285.915 572.029 128.749"; + rotation = "-0.365142 0.472928 0.801879 45.298"; + scale = "0.5 0.5 0.5"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "154 20 105.35"; + rotation = "0 0 1 100"; + scale = "2 2 2"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "322.032 116.069 96.3918"; + rotation = "-0.176548 0.289402 -0.940785 70.2565"; + scale = "0.6 0.6 0.6"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-333.969 564.075 119.589"; + rotation = "-0.782066 0.191168 0.593151 29.9008"; + scale = "1.8 1.8 1.8"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-294.076 -19.9813 56.9705"; + rotation = "0.183774 -0.0833939 0.979425 159.423"; + scale = "1.8 1.8 1.8"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "41.9724 444.079 77.1451"; + rotation = "0.0181824 -0.22121 0.975057 151.694"; + scale = "1.6 1.6 1.6"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-70.0639 -99.9534 80.5491"; + rotation = "0.0323144 -0.290007 0.956479 87.544"; + scale = "0.8 0.8 0.8"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-382.087 459.994 117.834"; + rotation = "0.206925 -0.66769 0.715103 37.1165"; + scale = "1.9 1.9 1.9"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-398.047 -91.8929 131.969"; + rotation = "-0.823392 -0.169726 -0.541497 42.8632"; + scale = "1.6 1.6 1.6"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "42.0115 388.036 105.31"; + rotation = "-0.0678493 0.120824 -0.990353 86.5551"; + scale = "1.9 1.9 1.9"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-133.975 12.0047 104.683"; + rotation = "-0.0619199 -0.0127325 0.998 181.996"; + scale = "1.9 1.9 1.9"; + shapeName = "borg1.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition5BEPlant5) { + }; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "-225.463 143.423 202.782"; + rotation = "0 0 1 117.639"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "96.8526 -104.743 165.021"; + rotation = "0 0 1 51.5662"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-441.34 213.013 172.936"; + rotation = "0 0 1 57.8687"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-438.012 383.79 169.698"; + rotation = "0.0338656 -0.0499505 0.998177 111.824"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "468.774 -25.0539 182.879"; + rotation = "0.104974 0.109172 -0.988464 92.9103"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new WaterBlock() { + position = "-472 232 38.688"; + rotation = "1 0 0 0"; + scale = "352 288 50"; + liquidType = "StagnantWater"; + density = "1"; + viscosity = "5"; + waveMagnitude = "0.5"; + surfaceTexture = "LiquidTiles/AlgaeWater"; + surfaceOpacity = "0.8"; + envMapTexture = "lush/skies/lushcloud3"; + envMapIntensity = "0.7"; + removeWetEdges = "1"; + locked = "true"; + }; + new SimGroup(Ambiance) { + + new AudioEmitter() { + position = "306.526 28.56 88.9729"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/frog2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "80"; + maxDistance = "5120"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "20000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "279.25 -111.373 89.1046"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/frog2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "80"; + maxDistance = "5120"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "20000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-284.259 454.007 99.9255"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/frog2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "80"; + maxDistance = "5120"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "20000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-311.535 314.074 100.057"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/frog2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "80"; + maxDistance = "5120"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "30000"; + type = "EffectAudioType"; + locked = "true"; + }; + new TSStatic() { + position = "-158.989 397.344 105.26"; + rotation = "0 0 -1 90.5273"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-158.999 397.363 106.26"; + rotation = "0 0 -1 90.5273"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-159 397.36 107.26"; + rotation = "0 0 -1 90.5273"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "171.13 -50.2151 105.148"; + rotation = "0 0 1 91.1003"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "170.781 -44.8251 106.772"; + rotation = "0.772155 0.085904 0.629601 190.082"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "171.141 -50.2315 107.148"; + rotation = "0 0 1 91.1003"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "171.139 -50.2344 106.148"; + rotation = "0 0 1 91.1003"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-159.368 392.293 105.071"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-159.393 392.208 107.043"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-166.32 412.837 98.9555"; + rotation = "1 0 0 0"; + scale = "1 1.93677 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-166.296 378.045 97.3739"; + rotation = "1 0 0 0"; + scale = "1 1.93677 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + }; + new Precipitation(Precipitation) { + position = "-225.463 143.423 202.782"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Rain"; + percentage = "1"; + color1 = "0.600000 0.600000 0.600000 1.000000"; + color2 = "-1.000000 0.000000 0.000000 1.000000"; + color3 = "-1.000000 0.000000 0.000000 1.000000"; + offsetSpeed = "0.25"; + minVelocity = "1.25"; + maxVelocity = "4"; + maxNumDrops = "2000"; + maxRadius = "80"; + locked = "true"; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/DeathBirdsFly.mis b/base/missions/DeathBirdsFly.mis new file mode 100644 index 0000000..ec9c559 --- /dev/null +++ b/base/missions/DeathBirdsFly.mis @@ -0,0 +1,3866 @@ +// DisplayName = Death Birds Fly +// MissionTypes = CTF + +//--- MISSION QUOTE BEGIN --- +//We will not glorify ourselves, Lord Phoenix. +//Your wrath will clothe us in righteousness as we chastise the tribes with fire. +// -- Anton Malderi, anointed Phoenix Prime, 3941 CE +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[CTF]5 flag captures to win +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + musicTrack = "desert"; + powerCount = "0"; + cdTrack = "6"; + CTF_scoreLimit = "5"; + + new MissionArea(MissionArea) { + area = "-720 -760 1504 1648"; + flightCeiling = "300"; + flightCeilingRange = "20"; + locked = "true"; + }; + new Sky(Sky) { + position = "-312 -64 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "700"; + useSkyTextures = "0"; + SkySolidColor = "0.500000 0.500000 0.630000 0.000000"; + fogDistance = "675"; + fogColor = "0.600000 0.500000 0.430000 1.000000"; + fogVolume1 = "200 0 53"; + fogVolume2 = "500 53 58"; + fogVolume3 = "1500 58 200"; + materialList = "sky_desert_brown.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 -70138839232381912800000000000000.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 0.003575"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 148037830649288698000000000000.000000"; + locked = "true"; + cloudSpeed0 = "0.000503 0.000020"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.900000 0.900000 0.900000 1.000000"; + ambient = "0.600000 0.600000 0.600000 1.000000"; + position = "2 3 0"; + locked = "true"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/desertdet1"; + terrainFile = "DeathBirdsFly.ter"; + squareSize = "8"; + emptySquares = "342721 342977 343233 152643 152899 153155 87875 155203 155459 155715 155971 167323 167579 167835 102555 170139 170395 170651 380734 380990 381246 381502"; + position = "-1024 -1024 0"; + locked = "true"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "65"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + conjoinBowlDev = "20"; + position = "0 0 0 1"; + locked = "true"; + rotation = "0 0 0 0"; + GraphFile = "DeathBirdsFly.nav"; + scale = "1 1 1"; + coverage = "0"; + }; + new SimGroup(Teams) { + + new SimGroup(Team1) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-527.397 621.85 107.986"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "80"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "100"; + locked = "true"; + }; + new SpawnSphere() { + position = "183.019 175.645 56.4546"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "10"; + outdoorWeight = "40"; + locked = "true"; + }; + }; + new SimGroup(base0) { + + new Item(Team1flag1) { + position = "-506.606 646.498 120.155"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-490.618 647.564 105.569"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory1) { + position = "-495.487 635.807 104.966"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Main Floor"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory2) { + position = "-502.227 635.802 104.958"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Main Floor"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory3) { + position = "-515.296 660.197 92.9678"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Basement"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory4) { + position = "-524.242 640.783 92.9628"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Basement"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory5) { + position = "-513.987 640.815 92.9608"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Basement"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1generatorLarge1) { + position = "-480.651 649.681 94.9747"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1generatorLarge2) { + position = "-480.648 657.044 94.9747"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-502.604 645.427 107.965"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + interiorFile = "pbunk2.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape() { + position = "-506.612 646.525 119.97"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + dataBlock = "InteriorFlagStand"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Turret(Team1TurretBaseLarge1) { + position = "-428.308 619.603 128.289"; + rotation = "-0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "MortarBarrelLarge"; + locked = "true"; + }; + new InteriorInstance() { + position = "-428.319 619.686 110.287"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + interiorFile = "pplat2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-526 417 143"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + interiorFile = "pvpad.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-537 417 142.7"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-458.475 673.155 135.773"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(tower0) { + providesPower = "1"; + + new InteriorInstance() { + position = "223.562 208.534 60.3968"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "ptowr4.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new InteriorInstance() { + position = "223.562 111.534 60.3968"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + interiorFile = "ptowr4.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape(Team1StationInventory6) { + position = "230.211 207.792 61.4004"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "North Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory7) { + position = "216.923 207.855 61.3983"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "North Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item() { + position = "223.526 203.349 88.053"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "223.253 116.936 88.0241"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory8) { + position = "216.842 112.302 61.3951"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "South Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory9) { + position = "230.188 112.179 61.3942"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "South Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "124.378 214.2 63.4777"; + rotation = "0 0 -1 104.897"; + scale = "1 1 1"; + interiorFile = "pvpad.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "135.18 216.983 63.1777"; + rotation = "0 0 1 75.0117"; + scale = "1 1 1"; + nameTag = "Tower"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new WayPoint() { + position = "227.09 165.998 105.666"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Tower"; + team = "0"; + locked = "true"; + }; + }; + new InteriorInstance() { + position = "-458.191 673.263 127.727"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pmisc4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(Team2) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "546.135 -546.356 126.888"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "100"; + locked = "true"; + }; + new SpawnSphere() { + position = "-451.936 -300.216 97.9411"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "80"; + sphereWeight = "100"; + indoorWeight = "10"; + outdoorWeight = "40"; + locked = "true"; + }; + }; + new SimGroup(base1) { + + new Item(Team2flag1) { + position = "540.002 -546.071 100.147"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + locked = "true"; + }; + new StaticShape() { + position = "540.008 -546.098 99.9622"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "InteriorFlagStand"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "531.923 -323.951 123.134"; + rotation = "0 0 -1 90.0913"; + scale = "1 1 1"; + interiorFile = "pvpad.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "543.078 -324.021 122.834"; + rotation = "0 0 1 89.8174"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory5) { + position = "528.883 -535.38 84.9584"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Main Floor"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item() { + position = "524.014 -547.136 85.5614"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "475.096 -482.842 98.2954"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + interiorFile = "pplat2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Turret(Team2TurretBaseLarge2) { + position = "475.085 -482.759 116.297"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "MortarBarrelLarge"; + locked = "true"; + }; + new InteriorInstance() { + position = "536 -545 87.9573"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pbunk2.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape(Team2generatorLarge1) { + position = "514.059 -556.669 74.9267"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2generatorLarge2) { + position = "514.065 -549.299 74.9267"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory1) { + position = "547.382 -540.388 72.9535"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Basement"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory2) { + position = "557.638 -540.356 72.9552"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Basement"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory3) { + position = "548.692 -559.77 72.9606"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Basement"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory4) { + position = "535.622 -535.374 84.9502"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Main Floor"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "614.374 -543.048 100.916"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(tower1) { + providesPower = "1"; + + new InteriorInstance() { + position = "-479.997 -247.829 62"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "ptowr4.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new InteriorInstance() { + position = "-479.917 -344.538 62"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + interiorFile = "ptowr4.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape(Team2StationInventory6) { + position = "-473.348 -248.571 63.0036"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "North Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory7) { + position = "-486.636 -248.508 63.0015"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "North Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item() { + position = "-480.033 -253.014 89.6562"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-480.226 -339.136 89.6273"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory8) { + position = "-486.637 -343.77 62.9983"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "South Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory9) { + position = "-473.291 -343.893 62.9974"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "South Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-347.162 -308.107 65.4496"; + rotation = "0 0 1 97.3572"; + scale = "1 1 1"; + interiorFile = "pvpad.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-358.216 -306.594 65.1496"; + rotation = "0 0 -1 85.0259"; + scale = "1 1 1"; + nameTag = "Tower"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new WayPoint() { + position = "-486.859 -296.532 107.64"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Tower"; + team = "0"; + locked = "true"; + }; + }; + new InteriorInstance() { + position = "614.309 -543.068 92.8885"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pmisc4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(team0) { + + new Item() { + position = "-140.651 -21.3195 57.4018"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-140.651 -24.3195 57.4018"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-140.651 -27.3195 57.4018"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-140.714 -24.3187 54.6997"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pbunk5.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "449.688 -339.065 174.366"; + rotation = "0.041603 -0.0838848 0.995607 127.442"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-616.094 717.924 192.88"; + rotation = "0.0301391 -0.0798784 0.996349 138.794"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-378.626 -348.22 69.4172"; + rotation = "0 0 -1 62.4524"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "95.434 259.06 71.5224"; + rotation = "0 0 1 124.332"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new AudioEmitter() { + position = "558.841 -498.675 89.0972"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/wind_sandstorm.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.1"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new InteriorInstance() { + position = "-287.374 335.207 73.9965"; + rotation = "1 0 0 0"; + scale = "1.5 1.5 1.5"; + interiorFile = "pspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new SimGroup(RandomOrganics) { + + new SimGroup(Addition3PhoenixPlant5) { + + new TSStatic() { + position = "644 -836 156.867"; + rotation = "0.0745279 0.0397071 0.996428 213.885"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-964 -788 101.523"; + rotation = "-0.235427 0.943001 -0.235208 12.7041"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-100 -684 57.5082"; + rotation = "0.403798 -0.457634 0.792161 32.4966"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-556 -740 118.383"; + rotation = "-0.681833 0.194945 -0.705053 25.3213"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1060 -636 81.8832"; + rotation = "0.0212981 0.168178 0.985527 56.6953"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-540 524 127.898"; + rotation = "0.689873 -0.175214 -0.702407 18.4273"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "804 -444 83.4612"; + rotation = "0.0929788 0.00686342 0.995644 202.903"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-572 -764 112.383"; + rotation = "-0.712216 -0.394945 -0.580316 23.8931"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "92 100 54.1331"; + rotation = "0.193477 0.201099 -0.960274 100.293"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-732 -932 62.7894"; + rotation = "-0.138513 0.175061 0.974766 62.2886"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-892 892 57.6332"; + rotation = "-0.0598778 0.186168 0.980692 145.636"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-196 -564 61.3519"; + rotation = "0.127714 0.171165 0.97693 135.938"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-372 844 105.93"; + rotation = "-0.135916 0.0896295 0.986658 128.604"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "596 -708 153.445"; + rotation = "0.0191195 -0.488002 0.872633 17.1588"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "244 92 75.18"; + rotation = "0.0318401 -0.88632 -0.461978 25.6338"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "524 804 135.07"; + rotation = "-0.205803 0.138465 0.968748 43.2316"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-140 764 49.4144"; + rotation = "-0.0162494 -0.00759878 0.999839 87.0093"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-940 -564 59.0394"; + rotation = "0.0523393 0.173086 0.983515 128.746"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "844 -876 53.3675"; + rotation = "0.326827 -0.158131 0.931761 57.3433"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "788 -372 64.6488"; + rotation = "-0.206068 -0.965504 0.159178 18.6838"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-996 -980 51.1644"; + rotation = "-0.0104134 0.745268 -0.666684 8.98915"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "412 500 101.352"; + rotation = "0.014062 0.370566 0.9287 59.5847"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "52 -100 65.2269"; + rotation = "-0.0136947 -0.210947 0.977402 54.0531"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "188 -524 50.1957"; + rotation = "-0.0136496 0.00147318 0.999906 118.005"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-204 420 49.5706"; + rotation = "-0.0108871 0.00473386 0.99993 222.997"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "20 -380 55.6019"; + rotation = "0.209262 -0.0999147 -0.972742 76.5346"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "836 84 78.5081"; + rotation = "-0.0251515 -0.0211934 0.999459 126.025"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-748 308 126.055"; + rotation = "0.659675 -0.0799556 0.747286 18.6615"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "916 -548 52.8207"; + rotation = "0.2883 0.681323 0.672816 16.2889"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "68 -580 49.4456"; + rotation = "0.00963762 0.0101351 0.999902 235.996"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "12 -428 59.5081"; + rotation = "0.110294 -0.052542 0.992509 149.221"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1052 -996 52.4457"; + rotation = "0.0991415 -0.00882239 0.995034 149.147"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "628 -884 161.945"; + rotation = "0.247699 -0.00984149 -0.968787 46.299"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-708 -380 127.43"; + rotation = "-0.155523 0.0825773 0.984375 163.262"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-764 636 143.086"; + rotation = "-0.0714981 -0.0214063 0.997211 202.938"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "628 -716 158.945"; + rotation = "0.0018718 -0.0354001 0.999371 186.996"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "396 -28 133.164"; + rotation = "-0.143646 -0.105078 0.984035 53.74"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1036 -836 74.102"; + rotation = "-0.330311 0.626448 -0.706015 29.4178"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "780 548 60.6644"; + rotation = "0.229194 -0.0189514 0.973196 67.4302"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-412 -100 130.117"; + rotation = "-0.349889 0.0533014 -0.935274 52.9998"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-556 812 93.5551"; + rotation = "0.117061 0.0788606 -0.989989 71.5458"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1084 556 49.7269"; + rotation = "-0.0285437 -0.167803 -0.985407 33.4614"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "852 -340 55.9925"; + rotation = "0.0802635 -0.113823 0.990254 157.218"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "892 -1020 67.4457"; + rotation = "0.0259104 -0.289589 0.9568 49.908"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1028 -276 55.3988"; + rotation = "0.0560468 0.0341411 0.997844 160.043"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "436 -532 144.727"; + rotation = "0.0688545 0.0869445 0.993831 122.3"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-996 -988 51.18"; + rotation = "0.101628 0.112738 -0.988414 56.5554"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1028 -724 113.93"; + rotation = "-0.00410956 0.0124663 0.999914 151.002"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "164 284 61.1488"; + rotation = "-0.365352 0.388144 0.846086 44.2892"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-284 252 50.5707"; + rotation = "-0.050581 -0.0357469 0.99808 118.097"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-404 508 137.523"; + rotation = "-0.0232242 0.126332 0.991716 63.4258"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-236 188 58.8831"; + rotation = "0.22117 0.222671 0.949474 27.333"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-588 956 85.9768"; + rotation = "-0.0169985 -0.095417 -0.995292 60.2345"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-508 804 93.8988"; + rotation = "0.0721348 0.0517737 0.99605 86.2261"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1068 564 50.4457"; + rotation = "-0.121377 -0.014697 0.992498 174.045"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-788 52 136.867"; + rotation = "-0.0469196 0.0168431 0.998757 98.0704"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-20 684 49.305"; + rotation = "-0.0034945 0.0297211 -0.999552 67.024"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1068 884 49.8831"; + rotation = "0.0234288 -0.0074355 0.999698 118.016"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "236 -748 85.4456"; + rotation = "0.0930028 0.172695 0.980575 139.732"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-36 -948 50.6488"; + rotation = "-0.101336 -0.107859 -0.988988 86.6335"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-756 -452 131.273"; + rotation = "0.148178 0.16441 0.975199 74.3808"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "44 332 96.6332"; + rotation = "-0.0651773 -0.228191 -0.971432 45.1656"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-52 -412 50.5082"; + rotation = "0.0907002 0.0870361 0.992068 71.4318"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "292 -908 105.633"; + rotation = "-0.00209454 -0.0173916 0.999847 198.997"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-860 -572 51.5706"; + rotation = "0.0121897 -0.0156492 0.999803 189.999"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-956 -556 58.4144"; + rotation = "0.436999 -0.107852 0.892973 41.0818"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "300 500 92.68"; + rotation = "-0.0655348 -0.225806 -0.971965 100.605"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-316 -836 130.227"; + rotation = "0.0117254 -0.025729 0.9996 139.015"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-524 972 72.7269"; + rotation = "0.0300159 -0.176731 0.983801 179.016"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-76 -84 50.3988"; + rotation = "0.096505 -0.00529828 0.995318 136.186"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "124 244 50.7738"; + rotation = "0.0349479 -0.0235618 0.999111 124.042"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-364 -52 151.789"; + rotation = "-0.139481 -0.139261 0.980383 236.053"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "652 -132 118.398"; + rotation = "-0.101145 -0.160008 0.98192 47.7693"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-972 -196 50.8988"; + rotation = "-0.0347638 -0.0438825 -0.998432 109.085"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-3.99997 -164 56.3519"; + rotation = "-0.0552982 -0.0127666 0.998388 116.083"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-108 132 52.6019"; + rotation = "-0.137781 -0.126895 0.9823 66.9381"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "412 388 139.805"; + rotation = "-0.15892 0.361904 0.91857 13.055"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "564 68 130.601"; + rotation = "-0.226484 0.104469 0.968396 57.5387"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-108 908 49.3987"; + rotation = "0.00972533 -0.00732355 0.999926 93.0042"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "92 -676 59.7894"; + rotation = "0.0227731 0.190692 0.981386 43.7393"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "500 -644 130.383"; + rotation = "0.192013 -0.0812406 0.978024 237.915"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "500 844 135.586"; + rotation = "-0.279582 -0.0521521 0.958704 65.1734"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-252 140 52.9144"; + rotation = "-0.567539 0.336925 -0.751253 27.7167"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "556 -756 149.68"; + rotation = "0.183919 0.153146 -0.970938 87.6872"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "844 -284 56.5237"; + rotation = "0.00995499 0.02013 0.999748 224.99"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "348 -964 101.352"; + rotation = "0.141933 -0.157114 0.977328 190.752"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "132 964 51.6644"; + rotation = "-0.00433659 -0.0140204 0.999892 212.996"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-156 -236 49.4612"; + rotation = "0.0168417 -0.000735337 -0.999858 95.0085"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "4.00003 972 50.1801"; + rotation = "0.58517 0.0216631 -0.810621 14.7751"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "44 -188 62.0707"; + rotation = "0.0372945 0.0716824 0.99673 119.164"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "836 676 64.4143"; + rotation = "-0.0687134 -0.158009 0.985044 159.307"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-892 -100 51.3988"; + rotation = "-0.0759097 -0.101135 0.991973 139.302"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1004 -140 57.8207"; + rotation = "-0.0158505 -0.2445 -0.96952 106.706"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "36 -404 55.8363"; + rotation = "0.155713 -0.0894278 0.983746 168.193"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "900 -796 49.68"; + rotation = "-0.0521868 0.0605177 -0.996802 56.1523"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-388 52 91.9613"; + rotation = "0.116087 -0.00583792 0.993222 123.326"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "596 52 137.961"; + rotation = "0.815326 -0.320371 0.482292 24.5882"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-212 -756 77.1176"; + rotation = "0.883736 0.186894 -0.429048 18.5134"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "404 388 139.383"; + rotation = "-0.327935 0.17126 0.929047 34.3051"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-404 564 138.055"; + rotation = "-0.628889 0.261052 -0.732359 34.9937"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "452 -228 130.523"; + rotation = "0.264649 0.226689 0.937322 41.3929"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-44 -204 51.6956"; + rotation = "0.346244 -0.100232 -0.932775 38.41"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1020 828 49.3206"; + rotation = "0.00465448 -0.000778902 0.999989 71.0004"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-60 484 51.4456"; + rotation = "0.0809657 0.07997 -0.993504 116.335"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "204 -676 57.7426"; + rotation = "-0.108541 -0.287578 -0.951587 70.66"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-124 -1004 49.5862"; + rotation = "0.0703342 -0.0271782 0.997153 101.16"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-684 620 130.445"; + rotation = "-0.271682 0.132334 -0.953245 27.2288"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-900 68 108.773"; + rotation = "0.146183 0.299647 -0.942784 71.1631"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1068 -564 51.4144"; + rotation = "-0.00776704 0.00571117 0.999954 105.003"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-116 -628 58.68"; + rotation = "0.0069326 0.0064549 0.999955 63.0024"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-340 140 58.8363"; + rotation = "0.378943 -0.616883 0.689825 24.4485"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-204 52 52.1175"; + rotation = "0.50785 0.790133 0.343189 20.2102"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "364 -900 126.68"; + rotation = "0.98782 0.008527 -0.15537 12.8196"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-900 -468 72.5863"; + rotation = "-0.152378 -0.0189886 0.98814 62.6048"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "652 -404 96.0394"; + rotation = "0.141598 0.0502224 0.988649 193.842"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-84 -772 69.5551"; + rotation = "0.160655 -0.0281459 0.986609 83.767"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-4.10818 -515.97 50.255"; + rotation = "-0.00927407 -0.363375 0.931597 29.9664"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "884 860 58.4144"; + rotation = "0.0764556 0.0284284 0.996668 227.858"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-3.99997 652 49.2894"; + rotation = "0.00259346 -0.0104018 -0.999943 62.0032"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-12 804 89.3363"; + rotation = "0.0394408 0.0258496 0.998888 186.992"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-172 -876 63.3519"; + rotation = "-0.0326881 -0.184314 0.982324 236.147"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "28 -396 59.0081"; + rotation = "-0.993074 0.117491 0 4.02376"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-948 884 49.7112"; + rotation = "0.0268786 0.00475613 0.999627 171.003"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-348 -356 55.0707"; + rotation = "0.00282144 0.0647749 -0.997896 69.1125"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "300 628 56.7269"; + rotation = "0.13098 -0.122017 0.983848 135.656"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-532 892 67.6175"; + rotation = "-0.22166 -0.22183 -0.949557 22.0886"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-140 -636 54.8988"; + rotation = "-0.054856 0.0985568 0.993618 87.3663"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-948 -444 60.4457"; + rotation = "-0.0430939 0.151675 -0.987491 49.5468"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "380 -732 98.1488"; + rotation = "-0.198208 -0.0959858 0.975449 130.098"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "516 980 136.539"; + rotation = "0.13049 -0.0476897 0.990302 103.544"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-116 -780 77.2738"; + rotation = "-0.0671478 0.0782348 -0.994671 63.2729"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "100 -604 51.0394"; + rotation = "0.0289837 0.108441 -0.99368 69.3393"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "204 364 88.9769"; + rotation = "-0.120301 0.083074 0.989255 35.3565"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "780 -332 76.4613"; + rotation = "-0.473142 -0.385722 -0.792057 20.1236"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "628 -844 159.898"; + rotation = "-0.109521 -0.131271 0.985278 51.6635"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "468 -924 112.32"; + rotation = "-0.150019 -0.00188534 0.988681 151.315"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "52 -468 49.5394"; + rotation = "-0.0236929 -0.00417764 -0.999711 70.0161"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "796 4 50.1332"; + rotation = "0.0384125 0.0169451 0.999118 183.997"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "820 -476 77.805"; + rotation = "0.15972 -0.0821867 0.983735 136.649"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-628 188 154.352"; + rotation = "0.106647 -0.0848651 0.990669 216.678"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1068 -156 54.7581"; + rotation = "-0.0320113 0.0675172 0.997204 67.1478"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-492 -772 145.164"; + rotation = "-0.0294465 0.316218 0.948229 40.9565"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-564 -132 128.633"; + rotation = "-0.114183 -0.374254 0.92027 50.58"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "180 908 77.4457"; + rotation = "0.257622 0.350936 0.900264 23.2661"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-748 172 159.461"; + rotation = "0.17771 0.115518 0.977279 232.942"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-556 468 129.945"; + rotation = "0.82823 -0.420651 -0.370253 8.09021"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "740 -484 113.242"; + rotation = "-0.255401 -0.844284 0.47112 14.7939"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-140 -164 53.0082"; + rotation = "-0.192926 0.0364751 -0.980535 84.1194"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-780 -948 56.5237"; + rotation = "-0.0284231 0.131778 0.990872 85.5237"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-156 100 51.3831"; + rotation = "-0.0261543 -0.147894 0.988657 122.552"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-748 -220 134.352"; + rotation = "-0.0576748 -0.126826 0.990247 202.782"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "276 -908 104.601"; + rotation = "-0.00878129 0.0838015 0.996444 97.2029"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "348 -260 131.601"; + rotation = "-0.128357 0.150007 0.980317 23.4492"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-948 -356 50.7425"; + rotation = "0.0374193 -0.108555 0.993386 125.311"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-476 500 152.836"; + rotation = "-0.0872303 0.0428545 -0.995266 108.258"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-492 4 93.2737"; + rotation = "0.159753 0.487352 0.858468 43.711"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "908 -972 61.9143"; + rotation = "0.112234 -0.0309089 0.993201 123.327"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-140 572 56.68"; + rotation = "0.0244473 -0.0579761 0.998019 133.083"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "620 -964 160.523"; + rotation = "-0.0914147 0.49066 0.866543 28.7012"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-612 -212 123.57"; + rotation = "-0.22347 -0.628476 -0.745037 26.6302"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1068 -508 60.2582"; + rotation = "-0.19483 0.0257425 0.980499 180"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-108 764 50.3051"; + rotation = "0.00145888 -0.105248 0.994445 235.736"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "540 444 144.977"; + rotation = "0.0154658 -0.211049 0.977353 228.017"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-140 -444 49.4612"; + rotation = "-0.00375007 0.00207869 0.999991 212"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "300 212 98.1176"; + rotation = "0.0798642 0.0203019 0.996599 104.189"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-964 -372 49.305"; + rotation = "-0.00906716 0.00940224 -0.999915 39.0029"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "572 -772 155.523"; + rotation = "-0.0797391 0.0792956 0.993657 179.006"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "340 468 87.4925"; + rotation = "0.00538551 -0.222801 0.974849 60.2591"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "340 -276 132.305"; + rotation = "0.0859983 -0.105932 -0.990648 55.4425"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-212 -572 66.3519"; + rotation = "0.142985 0.0807453 0.986426 215.542"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "68 124 49.8362"; + rotation = "0.071559 -0.0334657 0.996875 221.88"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "356 -764 84.6175"; + rotation = "0.0441811 0.168498 -0.984711 26.3896"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-212 876 71.6488"; + rotation = "0.0575923 -0.437508 0.897368 16.6925"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-228 -148 49.5706"; + rotation = "0.00312315 -0.000382654 0.999995 203"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-140 -156 55.0863"; + rotation = "0.120477 -0.0899233 0.988635 206.704"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "836 -764 50.8832"; + rotation = "0.0373536 -0.128211 -0.991043 27.2347"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-380 844 103.508"; + rotation = "-0.127639 0.00686493 0.991797 172.066"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-548 820 94.305"; + rotation = "-0.0528842 0.0049965 0.998588 185.991"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-692 -476 127.07"; + rotation = "-0.0573118 -0.0299229 0.997908 160.041"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "916 748 62.8675"; + rotation = "-0.00625943 -0.0248732 0.999671 196.994"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-940 -524 54.3987"; + rotation = "0.0338301 0.18729 -0.981722 117.938"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1004 -260 50.3363"; + rotation = "0.094915 0.0241627 0.995192 168.057"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-740 764 109.711"; + rotation = "-0.0635948 -0.0498327 0.996731 172.026"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "868 -84 54.7581"; + rotation = "-0.0790959 -0.151942 0.985219 35.4923"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-172 844 51.0238"; + rotation = "-0.0567132 -0.154102 -0.986426 94.7804"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-788 -396 133.633"; + rotation = "0.02784 0.00896549 0.999572 148.013"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-3.99997 -68 53.6956"; + rotation = "-0.0367427 0.133682 0.990343 122.47"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-268 -188 50.0395"; + rotation = "0.0209613 0.000264613 0.99978 141.008"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-556 916 71.2894"; + rotation = "-0.0246118 -0.0654477 0.997552 147.076"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1012 -36 49.5706"; + rotation = "-0.0511683 0.0199034 0.998492 113.08"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "60 -1004 50.9613"; + rotation = "-0.0268216 -0.0383637 0.998904 206.971"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-996 -484 57.8832"; + rotation = "-0.112733 0.0468628 0.99252 118.379"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "12 604 51.2425"; + rotation = "0.0440615 0.0909633 0.994879 179.005"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-140 580 57.8988"; + rotation = "-0.159691 -0.216791 0.963068 48.5971"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-260 -940 69.2738"; + rotation = "0.0792318 0.149777 0.98554 93.8333"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "148 -140 73.4769"; + rotation = "0.426306 -0.166473 -0.889129 45.6142"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "828 -44 55.2113"; + rotation = "0.562167 0.354367 0.747257 29.1618"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "860 84 84.0238"; + rotation = "0.0129196 0.133992 -0.990898 98.5183"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "876 564 51.8362"; + rotation = "-0.211241 -0.0650669 -0.975266 116.293"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition5PhoenixPlant2) { + + new TSStatic() { + position = "-140 -932 56.7406"; + rotation = "0.0178646 -0.0136576 0.999747 111.014"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "452 -916 110.553"; + rotation = "0.0103014 0.169097 -0.985546 45.5928"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-308 -372 55.7719"; + rotation = "0.113499 0.0767677 0.990568 157.212"; + scale = "0.9 0.9 0.9"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "92 436 95.4906"; + rotation = "0.284392 0.938231 0.19709 15.1363"; + scale = "0.9 0.9 0.9"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-508 796 96.7875"; + rotation = "0.998827 0.0231215 -0.0425414 23.1882"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "524 -228 123.803"; + rotation = "0.0144852 0.0271992 0.999525 187.996"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-692 -676 125.381"; + rotation = "0.0858385 0.172237 0.981308 31.5613"; + scale = "0.8 0.8 0.8"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-884 -228 83.475"; + rotation = "0.263919 -0.00832806 0.964509 63.843"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1012 92 50.475"; + rotation = "0.0732539 -0.0143858 -0.99721 55.1315"; + scale = "1.4 1.4 1.4"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "148 -348 65.3188"; + rotation = "-0.00607984 0.250719 -0.968041 42.236"; + scale = "1.2 1.2 1.2"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "148 -780 89.4907"; + rotation = "0.192077 -0.031088 -0.980887 88.1042"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "140 356 102.444"; + rotation = "-0.00427419 -0.148209 0.988947 176.044"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-396 -708 107.272"; + rotation = "-0.299956 0.4755 -0.826998 13.2823"; + scale = "0.8 0.8 0.8"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1084 548 50.5843"; + rotation = "-0.0478507 -0.0664432 -0.996642 78.1887"; + scale = "1.4 1.4 1.4"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1092 836 53.7719"; + rotation = "0.602997 0.00245216 -0.79774 10.019"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "324 500 86.9907"; + rotation = "0.0579544 0.141382 0.988257 217.585"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "364 -1020 103.725"; + rotation = "0.265373 0.299469 0.916458 59.1951"; + scale = "0.8 0.8 0.8"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1124 652 51.2875"; + rotation = "0.194602 -0.149324 0.96945 15.4671"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-916 636 88.6156"; + rotation = "-0.48603 0.195799 0.851726 33.7807"; + scale = "1.2 1.2 1.2"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1108 564 54.0531"; + rotation = "0.0347828 0.00768924 0.999365 185.996"; + scale = "0.8 0.8 0.8"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "828 -404 56.4125"; + rotation = "0.0945017 0.106505 0.989811 199.8"; + scale = "0.8 0.8 0.8"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-476 868 70.0218"; + rotation = "-0.157859 0.0406971 0.986623 175.067"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-996 796 54.4594"; + rotation = "0.122629 0.0906422 0.988305 101.661"; + scale = "0.9 0.9 0.9"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-644 -196 111.35"; + rotation = "-0.101308 0.0579498 0.993166 239.66"; + scale = "1.4 1.4 1.4"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-284 -260 50.5062"; + rotation = "0.0384528 0.00678744 0.999237 174.004"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "460 556 102.538"; + rotation = "0.48111 -0.0956917 -0.871422 40.8969"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1100 -940 52.7093"; + rotation = "0.0538739 0.132732 0.989687 143.356"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "660 -172 106.6"; + rotation = "0.419429 0.100587 0.902198 9.97101"; + scale = "1.4 1.4 1.4"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "276 -932 107.725"; + rotation = "0.105189 0.0846745 0.990841 190.9"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "4 604 52.3812"; + rotation = "0.0705904 0.0634085 0.995488 106.249"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "188 52 103.272"; + rotation = "0.300429 -0.586704 0.752011 25.0909"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "476 -348 118.319"; + rotation = "0.261912 0.130821 0.956184 40.6438"; + scale = "0.9 0.9 0.9"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "92 -540 50.1625"; + rotation = "0.0154163 -0.00787793 -0.99985 91.0086"; + scale = "0.8 0.8 0.8"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-484 -716 131.553"; + rotation = "0.00240858 -0.00691939 0.999973 100.002"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-20 -564 52.1625"; + rotation = "0.0902822 -0.128774 0.987556 123.6"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-420 812 100.381"; + rotation = "0.386965 0.167667 -0.906723 37.2666"; + scale = "0.9 0.9 0.9"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "172 -652 58.6"; + rotation = "0.0306181 -0.213285 0.97651 100.343"; + scale = "0.9 0.9 0.9"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-676 -660 123.631"; + rotation = "0.345184 0.0612453 -0.936535 44.5751"; + scale = "1.2 1.2 1.2"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "516 116 129.725"; + rotation = "-0.0605037 0.592709 -0.803141 33.2852"; + scale = "0.9 0.9 0.9"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "596 -772 157.1"; + rotation = "0.541354 0.343405 0.767469 30.961"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-740 492 105.6"; + rotation = "-0.0936906 0.218306 0.971372 78.6265"; + scale = "0.9 0.9 0.9"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "820 -660 60.4594"; + rotation = "0.0499274 -0.293477 0.954661 72.517"; + scale = "1.4 1.4 1.4"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "836 -28 53.1781"; + rotation = "-0.0722752 0.054789 0.995879 225.83"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "188 284 70.2563"; + rotation = "0.120264 0.12921 -0.984297 65.8248"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1052 68 51.6781"; + rotation = "0.205676 -0.964817 0.163785 12.1664"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "796 -948 89.2718"; + rotation = "0.199744 0.0274002 0.979465 93.1876"; + scale = "0.9 0.9 0.9"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-116 -788 77.7875"; + rotation = "-0.075209 -0.0475235 0.996035 182.988"; + scale = "0.9 0.9 0.9"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "428 -332 114.787"; + rotation = "-0.0367213 -0.0233555 0.999053 65.0491"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1100 668 50.1156"; + rotation = "-0.0024609 0.00236934 0.999994 129"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-612 588 123.366"; + rotation = "0.0135817 -0.0645708 0.997821 229.904"; + scale = "1.4 1.4 1.4"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-940 780 56.6938"; + rotation = "-0.098263 0.168179 0.980847 149.566"; + scale = "1.2 1.2 1.2"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-196 -356 50.2718"; + rotation = "-0.0155342 0.0092411 0.999837 238.992"; + scale = "0.8 0.8 0.8"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-100 -988 50.7093"; + rotation = "-0.0128268 0.0517545 0.998577 190.985"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-388 44 93.4437"; + rotation = "0.172796 -0.0139831 0.984858 111.814"; + scale = "1.4 1.4 1.4"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-916 180 119.569"; + rotation = "-0.0125683 0.205488 0.978579 98.2296"; + scale = "0.9 0.9 0.9"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "100 -44 57.8031"; + rotation = "0.0905885 0.0139588 0.995791 132.179"; + scale = "1.2 1.2 1.2"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "164 724 85.4281"; + rotation = "0.00109192 -0.150556 -0.988601 117.584"; + scale = "1.2 1.2 1.2"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "180 44 103.319"; + rotation = "-0.122264 0.193428 -0.973467 71.4548"; + scale = "0.9 0.9 0.9"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "92 -580 51.6"; + rotation = "-0.11524 0.0782971 0.990247 89.5613"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "540 964 139.131"; + rotation = "-0.0943725 0.0827174 0.992095 157.177"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-924 -164 50.1468"; + rotation = "0.00832717 6.84116e-05 0.999965 208.999"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1004 956 51.0219"; + rotation = "0.0319499 0.0679404 0.997178 32.0859"; + scale = "1.2 1.2 1.2"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-916 -476 70.3657"; + rotation = "0.033429 0.0837431 0.995926 111.219"; + scale = "0.9 0.9 0.9"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1020 -516 55.0375"; + rotation = "-0.0166584 -0.111319 0.993645 68.339"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-4 -684 50.2406"; + rotation = "0.0316311 0.00241339 0.999497 227.979"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-548 -1004 94.4282"; + rotation = "0.901146 -0.108542 0.419707 7.14025"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "836 -372 53.9281"; + rotation = "0.0693136 -0.110541 0.991452 107.47"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-708 -68 123.178"; + rotation = "0.580886 0.0552522 0.812108 35.3284"; + scale = "0.8 0.8 0.8"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-164 -332 51.6938"; + rotation = "-0.0516372 0.12051 0.991368 98.4914"; + scale = "1.2 1.2 1.2"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "204 620 100.35"; + rotation = "0.118546 -0.0126136 0.992868 199.86"; + scale = "0.8 0.8 0.8"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "92 52 53.7719"; + rotation = "0.0143466 0.784255 0.620272 23.9663"; + scale = "1.4 1.4 1.4"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "52 -364 54.35"; + rotation = "0.0144462 -0.0669306 -0.997653 80.1327"; + scale = "0.9 0.9 0.9"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1028 -996 50.2875"; + rotation = "-0.014349 -0.0276308 -0.999515 106.026"; + scale = "1.2 1.2 1.2"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "76 -660 55.1468"; + rotation = "0.385268 0.164081 -0.9081 45.8285"; + scale = "1.2 1.2 1.2"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "820 -412 60.3031"; + rotation = "0.204226 0.0628572 0.976904 126.089"; + scale = "1.2 1.2 1.2"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "324 -828 92.0375"; + rotation = "-0.051054 0.0751895 0.995861 172.033"; + scale = "0.8 0.8 0.8"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "604 -52 123.022"; + rotation = "0.348633 -0.0841428 -0.933475 45.7581"; + scale = "1.2 1.2 1.2"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-156 -932 58.1313"; + rotation = "0.0332659 0.0867295 0.995676 179.005"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-820 92 128.553"; + rotation = "0.0626438 0.0832849 0.994555 164.086"; + scale = "1.4 1.4 1.4"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-156 -28 56.6469"; + rotation = "0.0894332 -0.971658 0.218821 9.12153"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-68 636 52.9281"; + rotation = "0.767129 -0.209974 0.606155 8.23978"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-892 716 107.975"; + rotation = "-0.185783 0.533146 -0.825373 35.9708"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "156 132 66.6937"; + rotation = "-0.127767 -0.0250743 0.991487 228.631"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "292 316 92.8031"; + rotation = "-0.137907 -0.144232 0.979887 101.144"; + scale = "1.4 1.4 1.4"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1020 908 50.4437"; + rotation = "-0.0139156 -0.0106922 0.999846 226.994"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "108 252 53.1468"; + rotation = "-0.0255553 -0.0613663 0.997788 102.125"; + scale = "0.8 0.8 0.8"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "764 772 98.3187"; + rotation = "0.131763 0.154481 0.97917 233.031"; + scale = "0.8 0.8 0.8"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-204 -460 50.4437"; + rotation = "-0.0459975 -0.0352546 0.998319 128.076"; + scale = "1.4 1.4 1.4"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "28 796 70.9594"; + rotation = "-0.0690173 -0.35367 0.932821 68.6621"; + scale = "0.8 0.8 0.8"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1020 932 50.4281"; + rotation = "-0.0136751 -0.00315694 0.999902 205.998"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-892 644 87.5688"; + rotation = "-0.271748 -0.530415 0.803002 24.7694"; + scale = "0.8 0.8 0.8"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "572 -164 112.381"; + rotation = "-0.0451369 0.183785 0.98193 147.565"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "556 -1012 131.584"; + rotation = "-0.0725622 -0.00297709 -0.997359 114.138"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-396 -556 135.491"; + rotation = "-0.00614223 -0.245046 -0.969492 59.5177"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "52 -628 50.475"; + rotation = "0.0278891 -0.0224348 0.999359 110.034"; + scale = "0.8 0.8 0.8"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-852 92 127.631"; + rotation = "0.558492 0.436342 -0.705473 19.7463"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + }; + new TSStatic() { + position = "-568.18 658.189 109.628"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new InteriorInstance() { + position = "-540.61 595.602 111.122"; + rotation = "-0.889244 -0.294686 0.349864 86.8932"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-421.192 738.589 125.772"; + rotation = "0 0 -1 52.1391"; + scale = "1 1 1"; + interiorFile = "pspir5.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new TSStatic() { + position = "-490.503 705.088 113.337"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-525.437 580.881 107.131"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-455.248 552.981 120.619"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-475.714 601.664 104.681"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "609.009 -577.008 91.3345"; + rotation = "0 0 -1 37.2423"; + scale = "2 2 2"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "615.763 -570.829 90.2859"; + rotation = "0 0 1 148.969"; + scale = "1.5 1.5 2"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new InteriorInstance() { + position = "594.515 -495.167 102.824"; + rotation = "0 0 -1 32.0857"; + scale = "2 2 2"; + interiorFile = "prock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new TSStatic() { + position = "514.557 -512.94 87.7958"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "605.798 -543.291 93.0818"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new SimGroup(Addition1PhoenixPlant6) { + + new TSStatic() { + position = "-140 -604 57.3437"; + rotation = "0 0 1 208"; + scale = "1.7 1.7 1.7"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "68 -116 65.1249"; + rotation = "0 0 1 85.9998"; + scale = "1.3 1.3 1.3"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-100 660 54.0156"; + rotation = "0 0 -1 79"; + scale = "2 2 2"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "44 -516 50"; + rotation = "0 0 1 174"; + scale = "1.6 1.6 1.6"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-92 -628 54.6094"; + rotation = "0 0 1 99.0002"; + scale = "1.1 1.1 1.1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-100 180 58.3125"; + rotation = "0 0 -1 52.0003"; + scale = "1.7 1.7 1.7"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-92 -292 54.9531"; + rotation = "0 0 1 97"; + scale = "1.6 1.6 1.6"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-36 540 51.2032"; + rotation = "0 0 1 119"; + scale = "1.7 1.7 1.7"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "884 -764 51.1563"; + rotation = "0 0 1 162"; + scale = "1.2 1.2 1.2"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "916 -396 50.0156"; + rotation = "0 0 -1 55.0003"; + scale = "1.4 1.4 1.4"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "828 20 51.7344"; + rotation = "0 0 -1 67.0005"; + scale = "1.1 1.1 1.1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-20 -124 53.8906"; + rotation = "0 0 -1 38.9999"; + scale = "1.1 1.1 1.1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-324 -220 52.3594"; + rotation = "0 0 1 130"; + scale = "1.6 1.6 1.6"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-140 820 52.2344"; + rotation = "0 0 1 97"; + scale = "2 2 2"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "892 -764 51.875"; + rotation = "0 0 -1 53.9998"; + scale = "1.1 1.1 1.1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-84 12 52.0312"; + rotation = "0 0 1 37"; + scale = "1.7 1.7 1.7"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-140 -260 51.7344"; + rotation = "0 0 1 152"; + scale = "2 2 2"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-84 -76 51.3125"; + rotation = "0 0 1 204"; + scale = "1.4 1.4 1.4"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "84 -412 50.3437"; + rotation = "0 0 1 130"; + scale = "1.5 1.5 1.5"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-116 -596 60.4376"; + rotation = "0 0 -1 16.9999"; + scale = "1.6 1.6 1.6"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-4 620 51.2657"; + rotation = "0 0 1 15"; + scale = "1 1 1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-108 180 59.2656"; + rotation = "0 0 1 163"; + scale = "1.7 1.7 1.7"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "876 -452 50.4531"; + rotation = "0 0 1 189"; + scale = "2 2 2"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-132 796 52.9999"; + rotation = "0 0 1 58.9998"; + scale = "1.7 1.7 1.7"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "836 -300 59.375"; + rotation = "0 0 1 218"; + scale = "1.4 1.4 1.4"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-84 -412 50.2187"; + rotation = "0 0 1 31"; + scale = "1.7 1.7 1.7"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-20 204 51.7969"; + rotation = "0 0 1 67.9998"; + scale = "1.4 1.4 1.4"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "20 -588 51.9375"; + rotation = "0 0 -1 78.0002"; + scale = "2 2 2"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "140 -516 50.9063"; + rotation = "0 0 -1 90.0002"; + scale = "1.8 1.8 1.8"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "212 -444 58.4532"; + rotation = "0 0 -1 38.9999"; + scale = "2 2 2"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "788 628 56.0157"; + rotation = "0 0 1 23"; + scale = "1.5 1.5 1.5"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "60 84 50.9844"; + rotation = "0 0 1 44"; + scale = "1.9 1.9 1.9"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-292 -276 51.6563"; + rotation = "0 0 1 23"; + scale = "1.4 1.4 1.4"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "92 -236 50.3281"; + rotation = "0 0 1 234"; + scale = "1.3 1.3 1.3"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "900 884 58.1875"; + rotation = "0 0 1 69.0002"; + scale = "1.7 1.7 1.7"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "772 60 55.6875"; + rotation = "0 0 1 203"; + scale = "1.1 1.1 1.1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-100 916 50.6874"; + rotation = "0 0 -1 59.0003"; + scale = "1.7 1.7 1.7"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "908 876 56.2032"; + rotation = "0 0 -1 78.0002"; + scale = "1.2 1.2 1.2"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "804 -380 60.75"; + rotation = "0 0 1 64"; + scale = "2 2 2"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "836 -740 52.9062"; + rotation = "0 0 1 228"; + scale = "1.5 1.5 1.5"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-100 -260 55.6719"; + rotation = "0 0 -1 74.0004"; + scale = "1.9 1.9 1.9"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "156 -356 64.7187"; + rotation = "0 0 -1 93.0002"; + scale = "1 1 1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "876 -116 51.7969"; + rotation = "0 0 1 163"; + scale = "1.8 1.8 1.8"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "908 420 50.0468"; + rotation = "0 0 1 126"; + scale = "1 1 1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "100 -572 53.0937"; + rotation = "0 0 -1 29.9998"; + scale = "1 1 1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-84 804 61.625"; + rotation = "0 0 1 55"; + scale = "1.1 1.1 1.1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-276 276 51.0782"; + rotation = "0 0 1 124"; + scale = "1.3 1.3 1.3"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "148 -332 64.9999"; + rotation = "0 0 -1 100"; + scale = "1.3 1.3 1.3"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "108 -708 65.5"; + rotation = "0 0 -1 7.99996"; + scale = "1.3 1.3 1.3"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "924 884 54.5312"; + rotation = "0 0 1 124"; + scale = "1.4 1.4 1.4"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "164 -444 54.8281"; + rotation = "0 0 1 126"; + scale = "1.6 1.6 1.6"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-140 -724 60.3594"; + rotation = "0 0 -1 56"; + scale = "1.7 1.7 1.7"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "900 -460 50.4843"; + rotation = "0 0 1 170"; + scale = "1.2 1.2 1.2"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "60 -300 58.6094"; + rotation = "0 0 1 40"; + scale = "2 2 2"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-36 596 51.4063"; + rotation = "0 0 1 43"; + scale = "1.1 1.1 1.1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-236 -348 50.9375"; + rotation = "0 0 -1 32"; + scale = "1.9 1.9 1.9"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "860 -284 55.5626"; + rotation = "0 0 -1 56.9999"; + scale = "1.6 1.6 1.6"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-412 -364 57.4375"; + rotation = "0 0 1 107"; + scale = "1.1 1.1 1.1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-204 -124 50.3437"; + rotation = "0 0 -1 65.0004"; + scale = "1.3 1.3 1.3"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-76 740 50.5312"; + rotation = "0 0 -1 23.9998"; + scale = "1.9 1.9 1.9"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "852 916 59.5625"; + rotation = "0 0 1 195"; + scale = "1.3 1.3 1.3"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "268 692 66.9218"; + rotation = "0 0 1 212"; + scale = "1.1 1.1 1.1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-28 36 50.0156"; + rotation = "0 0 -1 35"; + scale = "1.2 1.2 1.2"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "852 -764 50.2187"; + rotation = "0 0 1 41"; + scale = "1.6 1.6 1.6"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "52 -572 50.9532"; + rotation = "0 0 -1 72.0002"; + scale = "1.1 1.1 1.1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-68 -260 57.9844"; + rotation = "0 0 -1 31.0002"; + scale = "1.4 1.4 1.4"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-116 756 50.1718"; + rotation = "0 0 1 24"; + scale = "1 1 1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "892 -212 57.3281"; + rotation = "0 0 1 143"; + scale = "1.1 1.1 1.1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "196 -596 52"; + rotation = "0 0 -1 62.0003"; + scale = "1.5 1.5 1.5"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "28 -348 50.5"; + rotation = "0 0 -1 29"; + scale = "1.3 1.3 1.3"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "300 692 66.7344"; + rotation = "0 0 1 189"; + scale = "1 1 1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition2PhoenixPlant3) { + + new TSStatic() { + position = "-44 -52 50.0468"; + rotation = "0 0 -1 111"; + scale = "0.8 0.8 0.8"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "204 -508 52.9375"; + rotation = "0 0 1 222"; + scale = "0.5 0.5 0.5"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "44 -260 50.6093"; + rotation = "0 0 1 48"; + scale = "0.8 0.8 0.8"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-4 -36 56.8281"; + rotation = "0 0 -1 10.0001"; + scale = "0.9 0.9 0.9"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-180 444 50.0468"; + rotation = "0 0 -1 4.99997"; + scale = "0.5 0.5 0.5"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-68 -628 52.3594"; + rotation = "0 0 1 38"; + scale = "0.6 0.6 0.6"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "908 596 50.7188"; + rotation = "0 0 -1 4.00015"; + scale = "0.7 0.7 0.7"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-196 -484 50.6249"; + rotation = "0 0 1 134"; + scale = "0.6 0.6 0.6"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-76 -532 67.6719"; + rotation = "0 0 -1 41.9998"; + scale = "0.6 0.6 0.6"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-108 -140 51"; + rotation = "0 0 1 238"; + scale = "0.7 0.7 0.7"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-4 -556 50.3281"; + rotation = "0 0 -1 2.9997"; + scale = "0.5 0.5 0.5"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-44 596 52"; + rotation = "0 0 1 230"; + scale = "0.6 0.6 0.6"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-164 508 50.5312"; + rotation = "0 0 -1 77.0004"; + scale = "0.9 0.9 0.9"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-228 340 50.4375"; + rotation = "0 0 -1 105"; + scale = "0.7 0.7 0.7"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "28 -4 60.8438"; + rotation = "0 0 1 81.0002"; + scale = "0.7 0.7 0.7"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-252 -468 50.3593"; + rotation = "0 0 1 15"; + scale = "1 1 1"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-180 -428 50.25"; + rotation = "0 0 1 3.99996"; + scale = "0.9 0.9 0.9"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-124 -308 50.4062"; + rotation = "0 0 1 112"; + scale = "0.5 0.5 0.5"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "84 -396 50.0937"; + rotation = "0 0 -1 84.0002"; + scale = "0.9 0.9 0.9"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-244 -388 51.7813"; + rotation = "0 0 1 72.0002"; + scale = "0.8 0.8 0.8"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "876 -100 52.9062"; + rotation = "0 0 1 7.00001"; + scale = "0.6 0.6 0.6"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-292 -260 51.2032"; + rotation = "0 0 1 227"; + scale = "1 1 1"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "140 -60 52.8125"; + rotation = "0 0 1 162"; + scale = "0.6 0.6 0.6"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-76 956 52.375"; + rotation = "0 0 1 53"; + scale = "0.7 0.7 0.7"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-140 868 51.1563"; + rotation = "0 0 -1 29"; + scale = "1 1 1"; + shapeName = "porg3.dts"; + locked = "true"; + }; + }; + new InteriorInstance() { + position = "26.4696 19.1919 60.8449"; + rotation = "1 0 0 100.841"; + scale = "1 1 1"; + interiorFile = "prock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "544.165 -104.014 113.454"; + rotation = "0.370127 0.925901 0.0755866 113.646"; + scale = "1 1 1"; + interiorFile = "prock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new AIObjective(AIODefendLocation) { + position = "-506.594 646.498 121.867"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend our flag"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "5601"; + location = "-506.594 646.498 121.867"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + chat = "ChatSelfDefendFlag DefendBase"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackPlayer) { + position = "-506.594 646.498 121.867"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Kill the enemy flag carrier"; + mode = "FlagCarrier"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "2 3 0"; + weightLevel1 = "4800"; + weightLevel2 = "3000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergySniper"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "-506.594 646.498 121.867"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Return our flag"; + mode = "FlagDropped"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "5601"; + location = "-506.594 646.498 121.867"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "539.989 -546.071 101.859"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend our flag"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "5686"; + location = "539.989 -546.071 101.859"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + chat = "ChatSelfDefendFlag DefendBase"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackPlayer) { + position = "539.989 -546.071 101.859"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Kill the enemy flag carrier"; + mode = "FlagCarrier"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "2 3 0"; + weightLevel1 = "4800"; + weightLevel2 = "3000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergySniper"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "539.989 -546.071 101.859"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Return our flag"; + mode = "FlagDropped"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "5686"; + location = "539.989 -546.071 101.859"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new InteriorInstance() { + position = "203.329 -483.185 49.9738"; + rotation = "0 0 1 189.649"; + scale = "1 1 1"; + interiorFile = "pspir4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Desiccator.mis b/base/missions/Desiccator.mis new file mode 100644 index 0000000..ff3455e --- /dev/null +++ b/base/missions/Desiccator.mis @@ -0,0 +1,1756 @@ +// MissionTypes = CTF + +//--- MISSION QUOTE BEGIN --- +//If survival were my most important goal I would be a mollusk, not a man. +// -- Phoenix Prime Renn Gistos yl-Harabec two days before his assassination, 3941 CE +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[CTF]Five flag captures to win +//[CTF]Destroy force field generators to expose flag +//Low visibility makes sensor networks critical +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + powerCount = "0"; + cdTrack = "6"; + musicTrack = "desert"; + CTF_timeLimit = "25"; + CTF_scoreLimit = "5"; + + new MissionArea(MissionArea) { + area = "-544 -512 1456 1040"; + flightCeiling = "300"; + flightCeilingRange = "20"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.700000 0.700000 0.700000 1.000000"; + ambient = "0.400000 0.400000 0.400000 1.000000"; + position = "72 -1152 0"; + locked = "true"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/desertdet1"; + terrainFile = "Desiccator.ter"; + squareSize = "8"; + emptySquares = "352974 306527"; + position = "-1024 -1024 0"; + locked = "true"; + hazeDistance = "250"; + visibleDistance = "1200"; + }; + new SimGroup(RandomOrganics) { + + new SimGroup(Addition1PhoenixPlant2) { + + new TSStatic() { + position = "767.881 -23.4133 174.172"; + rotation = "-0.295901 0.722716 -0.624599 17.5275"; + scale = "0.8 0.8 0.8"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "416 216 80.725"; + rotation = "0.255178 -0.619555 -0.742318 28.0373"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "728.029 119.939 131.693"; + rotation = "0.563682 0.40079 0.722239 28.7851"; + scale = "1.2 1.2 1.2"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-224 -448 80.475"; + rotation = "-0.0479858 0.0411978 0.997998 123.096"; + scale = "1.2 1.2 1.2"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "528 240 80.6313"; + rotation = "-0.0253531 0.439988 0.897646 24.4368"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "616.41 -121.332 171.517"; + rotation = "0.159859 0.117288 -0.980147 109.089"; + scale = "0.9 0.9 0.9"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "288 -368 126.35"; + rotation = "-0.0224353 0.0266647 0.999393 144.02"; + scale = "0.8 0.8 0.8"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "80 -360 79.5687"; + rotation = "0.0341395 0.0048777 0.999405 90.034"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-48 -400 117.975"; + rotation = "-0.112089 -0.270249 0.956243 74.4548"; + scale = "1.2 1.2 1.2"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "32.2174 -216.075 125.647"; + rotation = "-0.28954 -0.463409 -0.837508 30.8229"; + scale = "1.4 1.4 1.4"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "368 248 79.8501"; + rotation = "0.0557386 0.0204408 0.998236 136.071"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "304 360 126.413"; + rotation = "0.0441373 0.00773768 -0.998995 63.0512"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-40 -16 80.1313"; + rotation = "0.48298 0.103873 -0.869449 13.7853"; + scale = "1.4 1.4 1.4"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "608.476 39.8 121.349"; + rotation = "-0.212118 0.0761162 0.974275 238.588"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "736 136 127.069"; + rotation = "-0.0125533 0.0709939 0.997398 207.93"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "392 -344 175.037"; + rotation = "0.0639026 0.0355794 0.997322 64.1381"; + scale = "1.2 1.2 1.2"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "216 -400 86.5687"; + rotation = "-0.27506 -0.220292 0.935849 40.4002"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "24 -48 125.819"; + rotation = "0.506036 -0.0399345 -0.861587 12.7535"; + scale = "1.4 1.4 1.4"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "288 496 126.631"; + rotation = "0.0268475 0.478997 0.877406 7.97514"; + scale = "0.9 0.9 0.9"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "560 360 79.2562"; + rotation = "-0.0117044 -0.00717245 -0.999906 117.005"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "536 328 81.3812"; + rotation = "0.029475 -0.173489 -0.984395 51.7037"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "312.047 -24.3801 157.447"; + rotation = "0.21688 -0.170863 0.961129 38.3888"; + scale = "1.4 1.4 1.4"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-112 -256 80.0063"; + rotation = "0.123258 0.0535395 -0.990929 64.4703"; + scale = "1.2 1.2 1.2"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-208 -8 126.694"; + rotation = "-0.0344106 0.039214 0.998638 193.981"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "464 56 79.5062"; + rotation = "-0.10204 -0.130133 -0.986232 91.7936"; + scale = "1.2 1.2 1.2"; + shapeName = "porg2.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition2PhoenixPlant5) { + + new TSStatic() { + position = "552 -168 125.519"; + rotation = "0.01703 0.0330607 0.999308 75.0386"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "456 0 79.9563"; + rotation = "0.0838583 -0.0302465 0.996019 197.929"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-72 256 126.081"; + rotation = "0.0324809 -0.0618773 -0.997555 69.1308"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "720 224 126.3"; + rotation = "0.036733 0.0194095 0.999137 226.964"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "48 328 126.706"; + rotation = "0.0309778 -0.0651789 0.997393 192.966"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "616 -248 173.706"; + rotation = "0.0868295 0.00147936 -0.996222 101.213"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "672 344 78.9562"; + rotation = "-0.0560538 -0.525561 -0.848907 19.9693"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "168 96 156.019"; + rotation = "-0.0179104 0.0409786 0.999 204.976"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "768 368 78.9562"; + rotation = "0.0142451 -0.230612 0.972942 37.9563"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "160 24 90.2375"; + rotation = "0.00596013 0.0230351 0.999717 165.004"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "648 136 125.519"; + rotation = "-0.0186543 0.0189735 -0.999646 68.0187"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "136 368 125.613"; + rotation = "-0.0363399 0.062677 -0.997372 118.133"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "184 152 126.3"; + rotation = "0.253723 -0.00833352 -0.967241 23.7572"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "680 240 129.487"; + rotation = "0.153001 0.00393266 0.988218 152.317"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "400 -496 78.1438"; + rotation = "-0.531882 -0.310647 -0.787781 11.4098"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "720 -376 158.362"; + rotation = "-0.0649522 -0.0209373 0.997669 208.935"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "600 480 78.7062"; + rotation = "-0.0812358 -0.0730859 -0.994012 57.289"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "656 96 125.8"; + rotation = "0.00833469 0.0451933 0.998943 69.0569"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-40 240 126.144"; + rotation = "0.00594886 0.0172731 0.999833 173.001"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "464 72 78.9562"; + rotation = "0.0919192 -0.080692 0.992492 95.4303"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "296 408 127.675"; + rotation = "-0.0231866 0.175944 -0.984127 93.9152"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-56 -488 171.956"; + rotation = "-0.00294143 -0.0662612 0.997798 65.1143"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "272 456 125.769"; + rotation = "-0.0264261 0.00259755 0.999647 225.985"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-24 -96 173.456"; + rotation = "0.068431 -0.0757721 0.994774 106.288"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-80 -184 125.55"; + rotation = "-0.0159015 -0.0278168 0.999487 167.007"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition3PhoenixPlant6) { + + new TSStatic() { + position = "-48 -272 81"; + rotation = "0 0 1 163"; + scale = "1.2 1.2 1.2"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "160 -312 79.7813"; + rotation = "0 0 -1 58.0005"; + scale = "0.8 0.8 0.8"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "48 -136 174.119"; + rotation = "0 0 1 82.9998"; + scale = "1.4 1.4 1.4"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "528 304 88.1937"; + rotation = "0 0 1 94.9998"; + scale = "1 1 1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "296 -112 159.044"; + rotation = "0 0 1 205"; + scale = "1.3 1.3 1.3"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-192 360 126.188"; + rotation = "0 0 -1 88"; + scale = "0.8 0.8 0.8"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "648 440 72.4063"; + rotation = "0 0 -1 31.0002"; + scale = "1.1 1.1 1.1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "344 496 158.312"; + rotation = "0 0 -1 103"; + scale = "1.3 1.3 1.3"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-200 -56 126.225"; + rotation = "0 0 1 203"; + scale = "1.2 1.2 1.2"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "488 192 79.125"; + rotation = "0 0 1 50"; + scale = "1.1 1.1 1.1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "16 -328 125.875"; + rotation = "0 0 1 39"; + scale = "1 1 1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "336 376 127.719"; + rotation = "0 0 1 226"; + scale = "1.1 1.1 1.1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "720 -384 159.706"; + rotation = "0 0 1 58.9997"; + scale = "1.1 1.1 1.1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-64 -160 127.531"; + rotation = "0 0 1 41"; + scale = "0.9 0.9 0.9"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "8 -48 125.381"; + rotation = "0 0 1 188"; + scale = "1 1 1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "512 -288 79.0937"; + rotation = "0 0 -1 5.99979"; + scale = "1 1 1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "768 344 79.125"; + rotation = "0 0 -1 29"; + scale = "0.9 0.9 0.9"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "632 24 131.1"; + rotation = "0 0 -1 41"; + scale = "1.1 1.1 1.1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "160 -16 89.9688"; + rotation = "0 0 1 134"; + scale = "1.4 1.4 1.4"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "328 -200 130.25"; + rotation = "0 0 -1 79"; + scale = "0.9 0.9 0.9"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "144 16 87.8438"; + rotation = "0 0 1 96.0002"; + scale = "1 1 1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "488 464 79.125"; + rotation = "0 0 -1 102"; + scale = "1.4 1.4 1.4"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "232 216 126.05"; + rotation = "0 0 1 165"; + scale = "1.3 1.3 1.3"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "536 -392 125.813"; + rotation = "0 0 -1 110"; + scale = "1.2 1.2 1.2"; + shapeName = "porg6.dts"; + locked = "true"; + }; + }; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "70"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + YDimOverSize = "0"; + position = "0 0 0 1"; + XDimOverSize = "0"; + GraphFile = "Desiccator.nav"; + locked = "true"; + rotation = "0 0 0 0"; + conjoinBowlDev = "20"; + scale = "1 1 1"; + coverage = "0"; + }; + new Sky(Sky) { + position = "72 -1152 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "400"; + useSkyTextures = "0"; + SkySolidColor = "0.700000 0.600000 0.600000 1.000000"; + fogDistance = "200"; + fogColor = "0.800000 0.600000 0.400000 1.000000"; + fogVolume1 = "150 0 500"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "sky_desert_blue.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 173.831879"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 187.134155"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 637.846008"; + locked = "true"; + cloudSpeed0 = "0.000000 0.000000"; + }; + new SimGroup(Teams) { + + new SimGroup(Team1) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-259.499 -27.9938 133.835"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "60"; + sphereWeight = "60"; + indoorWeight = "50"; + outdoorWeight = "50"; + locked = "true"; + }; + }; + new SimGroup(base0) { + + new StaticShape(Team1StationInventory1) { + position = "-271.458 -20.9746 143.7"; + rotation = "0 0 -1 90.0913"; + scale = "1 1 1"; + nameTag = "Flag Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "33"; + locked = "true"; + }; + new WayPoint() { + position = "-233.401 362.886 120.044"; + rotation = "1 0 0 0"; + scale = "0.1 0.1 0.1"; + nameTag = "Force Field Gens"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Force Field Gens"; + team = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-267.494 -26.329 125.696"; + rotation = "0 0 -1 90.0913"; + scale = "1 1 1"; + interiorFile = "ptowr1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_3"; + locked = "true"; + }; + new Item(Team1flag1) { + position = "-268.079 -26.5093 163.709"; + rotation = "0 0 1 90.0002"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + Target = "34"; + locked = "true"; + stand = "3379"; + }; + new Turret(Team1SentryTurret2) { + position = "-349.36 -122.453 187.701"; + rotation = "0 0 1 55.5769"; + scale = "1 1 1"; + nameTag = "Sentry"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + Target = "35"; + locked = "true"; + }; + new Item() { + position = "-340.802 -126.651 201.409"; + rotation = "1 0 0 0"; + scale = "1 1 1.0303"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new StaticShape(Team1generatorLarge1) { + position = "-349.613 -129.603 200.67"; + rotation = "-0 0 -1 34.3775"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + Target = "36"; + locked = "true"; + }; + new StaticShape(Team1StationInventory2) { + position = "-353.853 -121.094 200.873"; + rotation = "0 0 1 187.93"; + scale = "1 1 1"; + nameTag = "Tac. Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "37"; + locked = "true"; + }; + new InteriorInstance() { + position = "-237.968 16.3529 131.4"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "pvpad.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-268.123 -26.4974 163.6"; + rotation = "0 0 1 22.3453"; + scale = "1 1 1"; + dataBlock = "ExteriorFlagStand"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + locked = "true"; + Flag = "3371"; + }; + new InteriorInstance() { + position = "-349.265 -122.249 172.62"; + rotation = "0 0 1 53.858"; + scale = "1 1 1"; + interiorFile = "pbunk6.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_3"; + locked = "true"; + }; + new StaticShape(Team1SensorLargePulse1) { + position = "-331.22 -140.381 200.314"; + rotation = "0 0 1 55.0039"; + scale = "1 1 1"; + nameTag = "Tactical"; + dataBlock = "SensorLargePulse"; + lockCount = "0"; + homingCount = "0"; + Target = "38"; + locked = "true"; + }; + new StaticShape() { + position = "-251.549 15.8776 131.1"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Vehicle Pad"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + locked = "true"; + mobileBaseVehicle = "Removed"; + }; + new StaticShape(Team1StationInventory3) { + position = "-348.452 -117.503 200.709"; + rotation = "0 0 1 91.1003"; + scale = "1 1 1"; + nameTag = "Tac. Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "40"; + locked = "true"; + }; + }; + new SimGroup(FFGens) { + + new Item() { + position = "-227.803 363.086 159.779"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new StaticShape(Team1generatorLarge2) { + position = "-231.905 368.706 120.45"; + rotation = "0 0 1 90.0913"; + scale = "1 1 1"; + nameTag = "Force Field"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + Target = "41"; + locked = "true"; + }; + new StaticShape(Team1generatorLarge3) { + position = "-231.594 357.344 120.45"; + rotation = "0 0 1 90.0913"; + scale = "1 1 1"; + nameTag = "Force Field"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + Target = "42"; + locked = "true"; + }; + new InteriorInstance() { + position = "-228.564 363.027 130.407"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pbunk1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_3"; + locked = "true"; + }; + new SimGroup(ForcefieldE) { + + new ForceFieldBare(FORCEFIELD) { + position = "-276.373 -32.4551 163.666"; + rotation = "1 0 0 0"; + scale = "0.498016 12.2104 16.7912"; + dataBlock = "defaultTeamSlowFieldBare"; + Target = "43"; + locked = "true"; + triggerCount = "0"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + }; + new SimGroup(ForceFieldF) { + + new ForceFieldBare(FORCEFIELD) { + position = "-259.145 -32.3896 163.633"; + rotation = "1 0 0 0"; + scale = "0.498154 12.2104 16.7912"; + dataBlock = "defaultTeamSlowFieldBare"; + Target = "44"; + locked = "true"; + triggerCount = "0"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + }; + new SimGroup(ForceFieldG) { + + new ForceFieldBare(FORCEFIELD) { + position = "-273.597 -34.6506 163.156"; + rotation = "0 0 1 90"; + scale = "0.498634 12.2104 16.7912"; + dataBlock = "defaultTeamSlowFieldBare"; + Target = "45"; + locked = "true"; + triggerCount = "0"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + }; + new SimGroup(ForceFieldH) { + + new ForceFieldBare(FORCEFIELD) { + position = "-273.547 -17.3856 163.53"; + rotation = "0 0 1 90"; + scale = "0.502035 12.2104 16.7912"; + dataBlock = "defaultTeamSlowFieldBare"; + Target = "46"; + locked = "true"; + triggerCount = "0"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + }; + }; + }; + new SimGroup(Team2) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "678.046 82.7083 126.199"; + rotation = "0 0 1 177.044"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "60"; + sphereWeight = "60"; + indoorWeight = "50"; + outdoorWeight = "50"; + locked = "true"; + }; + new SpawnSphere() { + position = "625.397 208.252 174.162"; + rotation = "0 0 1 170.351"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "40"; + indoorWeight = "50"; + outdoorWeight = "50"; + locked = "true"; + }; + }; + new SimGroup(base1) { + + new Item(Team2flag1) { + position = "687.38 85.09 163.294"; + rotation = "0 0 1 90.0002"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + Target = "47"; + locked = "true"; + stand = "3416"; + }; + new InteriorInstance() { + position = "686.457 84.8348 125.291"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + interiorFile = "ptowr1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_3"; + locked = "true"; + }; + new StaticShape(Team2StationInventory1) { + position = "690.544 79.3884 143.29"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Flag Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "48"; + locked = "true"; + }; + new InteriorInstance() { + position = "623.913 209.075 169.669"; + rotation = "0 0 1 64.1713"; + scale = "1 1 1"; + interiorFile = "pbunk6.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_3"; + locked = "true"; + }; + new StaticShape() { + position = "687.395 85.1503 163.213"; + rotation = "0 0 1 21.7724"; + scale = "1 1 1"; + dataBlock = "ExteriorFlagStand"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + locked = "true"; + Flag = "3410"; + }; + new StaticShape(Team2SensorLargePulse1) { + position = "630.925 184.648 197.449"; + rotation = "0 0 1 64.1713"; + scale = "1 1 1"; + nameTag = "Tactical"; + dataBlock = "SensorLargePulse"; + lockCount = "0"; + homingCount = "0"; + Target = "49"; + locked = "true"; + }; + new StaticShape(Team2generatorLarge1) { + position = "622.254 201.902 197.715"; + rotation = "0 0 -1 24.0642"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + Target = "50"; + locked = "true"; + }; + new Item() { + position = "631.451 203.229 198.458"; + rotation = "1 0 0 0"; + scale = "1 1 1.0303"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new Turret(Team2SentryTurret1) { + position = "623.783 208.891 184.75"; + rotation = "0 0 1 65.8901"; + scale = "1 1 1"; + nameTag = "Sentry"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + Target = "51"; + locked = "true"; + }; + new InteriorInstance() { + position = "691.614 35.2041 131.4"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + interiorFile = "pvpad.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory2) { + position = "625.44 213.392 197.67"; + rotation = "0 0 1 105.424"; + scale = "1 1 1"; + nameTag = "Tac. Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "52"; + locked = "true"; + }; + new StaticShape(Team2StationInventory3) { + position = "619.613 210.758 197.67"; + rotation = "0 0 1 201.108"; + scale = "1 1 1"; + nameTag = "Tac. Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "53"; + locked = "true"; + }; + new StaticShape() { + position = "701.907 35.0144 131.1"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "Vehicle Pad"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + locked = "true"; + mobileBaseVehicle = "Removed"; + }; + new WayPoint() { + position = "630.424 -237.057 159.646"; + rotation = "1 0 0 0"; + scale = "0.1 0.1 0.1"; + nameTag = "Force Field Gens"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Force Field Gens"; + team = "0"; + locked = "true"; + }; + }; + new SimGroup(FFGens) { + + new InteriorInstance() { + position = "626.391 -237.229 170.075"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + interiorFile = "pbunk1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_3"; + locked = "true"; + }; + new StaticShape(Team2generatorLarge2) { + position = "629.774 -231.537 160.12"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Force Field"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + Target = "55"; + locked = "true"; + }; + new StaticShape(Team2generatorLarge3) { + position = "629.733 -242.916 160.12"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Force Field"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + Target = "56"; + locked = "true"; + }; + new SimGroup(ForceFieldA) { + + new ForceFieldBare(FORCEFIELD) { + position = "694.819 78.7717 163.013"; + rotation = "1 0 0 0"; + scale = "0.551331 12.2104 16.7912"; + dataBlock = "defaultTeamSlowFieldBare"; + Target = "57"; + locked = "true"; + triggerCount = "0"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + }; + new SimGroup(ForceFieldB) { + + new ForceFieldBare(FORCEFIELD) { + position = "677.493 78.6921 162.902"; + rotation = "1 0 0 0"; + scale = "0.536683 12.2104 16.7912"; + dataBlock = "defaultTeamSlowFieldBare"; + Target = "58"; + locked = "true"; + triggerCount = "0"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + }; + new SimGroup(ForceFieldC) { + + new ForceFieldBare(FORCEFIELD) { + position = "680.335 93.3698 163.336"; + rotation = "1 0 0 0"; + scale = "12.1661 0.466393 16.4208"; + dataBlock = "defaultTeamSlowFieldBare"; + Target = "59"; + locked = "true"; + triggerCount = "0"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + }; + new SimGroup(ForceFieldD) { + + new ForceFieldBare(FORCEFIELD) { + position = "680.412 75.9156 163.048"; + rotation = "1 0 0 0"; + scale = "12.1661 0.535919 16.4208"; + dataBlock = "defaultTeamSlowFieldBare"; + Target = "60"; + locked = "true"; + triggerCount = "0"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + }; + new Item() { + position = "632.546 -237.517 199.495"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + }; + }; + new SimGroup(team0) { + + new SimGroup(AIObjectives) { + }; + }; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "677.853 220.083 214.081"; + rotation = "0 0 1 214.859"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "724.202 84.2594 181.543"; + rotation = "0 0 -1 90.5273"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "657.762 -273.766 197.603"; + rotation = "0 0 -1 14.8969"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "268.639 -105.833 172.127"; + rotation = "0.00271684 -0.122932 0.992411 177.487"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-203.354 390.586 183.105"; + rotation = "-0.0561174 -0.178747 0.982293 214.278"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Environmental) { + + new InteriorInstance() { + position = "516.575 -28.3364 121.6"; + rotation = "0 0 1 193.178"; + scale = "1 1 1"; + interiorFile = "pbrdgn.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "481.549 -20.0535 121.6"; + rotation = "0 0 1 13.178"; + scale = "1 1 1"; + interiorFile = "pbrdgo.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "458.35 -14.7034 121.6"; + rotation = "0 0 1 13.178"; + scale = "1 1 1"; + interiorFile = "pbrdgo.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "435.176 -9.27749 121.6"; + rotation = "0 0 1 13.178"; + scale = "1 1 1"; + interiorFile = "pbrdgo.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "411.971 -3.83609 121.6"; + rotation = "0 0 1 13.178"; + scale = "1 1 1"; + interiorFile = "pbrdgn.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-139.896 3.23059 122.955"; + rotation = "0 0 1 27.5019"; + scale = "1 1 1"; + interiorFile = "pbrdgn.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-118.748 -7.75861 122.955"; + rotation = "0 0 1 27.5019"; + scale = "1 1 1"; + interiorFile = "pbrdgo.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-97.6377 -18.749 122.955"; + rotation = "0 0 1 27.5019"; + scale = "1 1 1"; + interiorFile = "pbrdgo.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-76.5272 -29.7393 122.955"; + rotation = "0 0 1 27.5019"; + scale = "1 1 1"; + interiorFile = "pbrdgo.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-44.5953 -46.3633 122.955"; + rotation = "0 0 1 207.502"; + scale = "1 1 1"; + interiorFile = "pbrdgn.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "237.727 279.831 104.27"; + rotation = "-0.0169123 0.00999195 0.999807 67.4196"; + scale = "1.3159 0.865459 0.840546"; + interiorFile = "prockb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(Ambiance) { + + new AudioEmitter() { + position = "572.87 -39.2623 137.509"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/crickets_drygrass.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "35"; + maxDistance = "2240"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "267.465 213.832 140.539"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/fly_swarm.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-247.952 -115.057 129.042"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/crickets_drygrass.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "40"; + maxDistance = "2560"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "189.879 20.4425 80.9642"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/fly_swarm.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "309.836 -315.076 134.953"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/crickets_drygrass.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "161.141 -229.016 144.42"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/fly_swarm.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "292.188 458.016 150.152"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/crickets_drygrass.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new TSStatic() { + position = "103.57 287.084 126.411"; + rotation = "0.117535 0.422326 -0.898791 18.589"; + scale = "1 1 1"; + shapeName = "vehicle_land_assault_wreck.dts"; + locked = "true"; + }; + new TSStatic() { + position = "270.396 -124.988 157.328"; + rotation = "-0.0817868 0.0746787 0.993848 85.15"; + scale = "1 1 1"; + shapeName = "vehicle_air_scout_wreck.dts"; + locked = "true"; + }; + new AudioEmitter() { + position = "270.832 -127.45 165.443"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/fly_swarm.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "102.07 285.16 129.253"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/fly_swarm.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "500"; + maxLoopGap = "1000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-0.1425 -135.063 176.048"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/rockslide1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "45000"; + maxLoopGap = "90000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "214.111 -15.9139 145.558"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/rockslide1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "10"; + maxDistance = "640"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "30000"; + maxLoopGap = "75000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-52.5643 -275.652 107.126"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/rockslide2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "20000"; + maxLoopGap = "60000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "83.44 163.931 88.9308"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/rockslide1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "30000"; + maxLoopGap = "70000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "511.435 95.4149 86.8687"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/rockslide1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "30000"; + maxLoopGap = "70000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "641.802 118.866 134.47"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/cicadas.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-201.563 -1.4155 139.489"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/cicadas.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "140.649 -127.001 163.495"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/sandstorm.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new InteriorInstance() { + position = "640.638 90.5208 126.668"; + rotation = "0 0 -1 22.9183"; + scale = "1 1 1"; + interiorFile = "prock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "400.572 47.0657 126.887"; + rotation = "0 0 -1 26.929"; + scale = "1 1 1.22433"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-215.289 -75.4966 125.886"; + rotation = "0 0 -1 32.0856"; + scale = "1 1 1"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-221.276 -67.9314 126.664"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/DustToDust.mis b/base/missions/DustToDust.mis new file mode 100644 index 0000000..826fea9 --- /dev/null +++ b/base/missions/DustToDust.mis @@ -0,0 +1,2317 @@ +// DisplayName = Dust to Dust +// MissionTypes = CTF Hunters TeamHunters + +//--- MISSION QUOTE BEGIN --- +//Behold a pale horse: and his name that sat upon him was Death, and Hell followed with him. +// -- Revelations 6:8 +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[CTF]Eight flag captures to win +//[Hunters TeamHunters]Nexus is on a floating platform located near center of map +//No inventory or vehicle stations, but hidden weapons caches exist +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + Team_Hunters_timeLimit = "25"; + CTF_timeLimit = "25"; + Hunters_timeLimit = "25"; + musicTrack = "desert"; + cdTrack = "6"; + powerCount = "0"; + CTF_scoreLimit = "8"; + + new MissionArea(MissionArea) { + area = "-224 -352 768 960"; + flightCeiling = "2000"; + flightCeilingRange = "50"; + locked = "true"; + }; + new Sky(Sky) { + position = "0 0 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "800"; + useSkyTextures = "1"; + SkySolidColor = "0.390000 0.390000 0.390000 0.000000"; + fogDistance = "200"; + fogColor = "0.800000 0.700000 0.500000 1.000000"; + fogVolume1 = "0 0 0"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "Desert_l4.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 -1037713472.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 -1037713472.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 -1037713472.000000"; + cloudSpeed0 = "0.000000 0.000000"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.700000 0.700000 0.700000 1.000000"; + ambient = "0.300000 0.300000 0.300000 1.000000"; + position = "0 0 0"; + rotation = "1 0 0 0"; + locked = "true"; + scale = "1 1 1"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/desertdet1"; + terrainFile = "DustToDust.ter"; + squareSize = "8"; + emptySquares = "297105"; + position = "-1024 -1024 0"; + locked = "true"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "45"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + position = "0 0 0 1"; + YDimOverSize = "0"; + rotation = "0 0 0 0"; + conjoinBowlDev = "20"; + locked = "true"; + coverage = "0"; + scale = "1 1 1"; + GraphFile = "DustToDust.nav"; + XDimOverSize = "0"; + }; + new SimGroup(RandomOrganics) { + + new SimGroup(PhoenixPlants) { + }; + new SimGroup(Addition1PhoenixPlant2) { + + new TSStatic() { + position = "-52 212 165.991"; + rotation = "0.555486 0.0755775 -0.828084 25.2314"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "28 332 164.725"; + rotation = "0.00874655 0.0030876 0.999957 182"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "68 364 142.584"; + rotation = "0.0154594 -0.305191 -0.952166 62.4616"; + scale = "0.9 0.9 0.9"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "76 364 141.725"; + rotation = "0.0538253 -0.112649 0.992176 62.398"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "436 76 164.506"; + rotation = "0.00115466 0.0463927 0.998923 165.016"; + scale = "1.4 1.4 1.4"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "140 -12 134.397"; + rotation = "0.0901597 -0.126035 0.98792 136.482"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "380 212 99.475"; + rotation = "0.233721 0.0653238 -0.970107 61.5173"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "84 260 143.709"; + rotation = "0.314044 0.395261 0.863218 40.1304"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "124 404 207.866"; + rotation = "0.0109823 0.00998997 0.99989 207.997"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "436 236 74.3187"; + rotation = "-0.130356 -0.0298546 -0.991018 107.494"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-44 148 206.975"; + rotation = "-0.0403175 -0.0226006 0.998931 145.035"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "260 -36 189.444"; + rotation = "-0.255386 -0.460509 0.850123 44.0991"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "268 324 207.709"; + rotation = "-0.0478957 -0.214365 -0.975579 49.0613"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "204 124 98.7562"; + rotation = "0.187404 -0.365132 -0.911898 26.2416"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "380 60 208.428"; + rotation = "0.13613 -0.0722834 0.988051 194.823"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-68 12 206.225"; + rotation = "-0.00524723 0.162628 0.986674 202.702"; + scale = "0.9 0.9 0.9"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "28 364 164.991"; + rotation = "-0.0168121 -0.00950094 0.999813 190.998"; + scale = "0.8 0.8 0.8"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "396 -92 207.381"; + rotation = "-0.0921044 0.00458803 -0.995739 91.2441"; + scale = "1.2 1.2 1.2"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-92 388 105.147"; + rotation = "0.0735273 0.0583496 0.995585 75.2454"; + scale = "1.2 1.2 1.2"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "252 84 123.913"; + rotation = "0.13841 -0.0469015 0.989264 82.6131"; + scale = "1.4 1.4 1.4"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-92 -68 297.116"; + rotation = "0.177175 -0.0832767 0.98065 134.8"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-116 252 208.662"; + rotation = "0.134246 -0.0213168 0.990719 226.611"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "28 -12 165.006"; + rotation = "0.0095948 -0.0147274 0.999846 192.999"; + scale = "1.2 1.2 1.2"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-20 140 207.709"; + rotation = "0.0205006 0.000786498 -0.99979 96.0129"; + scale = "1.2 1.2 1.2"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "220 -92 196.241"; + rotation = "0.638185 0.516404 -0.571006 29.3343"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition2PhoenixPlant3) { + + new TSStatic() { + position = "140 36 104.844"; + rotation = "0 0 1 99.0002"; + scale = "1 1 1"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "404 412 131.125"; + rotation = "0 0 -1 69.0002"; + scale = "1 1 1"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "412 28 168.781"; + rotation = "0 0 1 55"; + scale = "1.3 1.3 1.3"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-84 -36 263.406"; + rotation = "0 0 1 184"; + scale = "1.1 1.1 1.1"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "92 260 143.234"; + rotation = "0 0 1 209"; + scale = "0.9 0.9 0.9"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "444 60 164.875"; + rotation = "0 0 -1 81.0002"; + scale = "1.4 1.4 1.4"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "212 284 242.844"; + rotation = "0 0 1 173"; + scale = "1 1 1"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-20 372 144.547"; + rotation = "0 0 1 94.9998"; + scale = "1.4 1.4 1.4"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-92 148 207.984"; + rotation = "0 0 -1 93.0002"; + scale = "0.8 0.8 0.8"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "308 84 183.578"; + rotation = "0 0 -1 47"; + scale = "0.9 0.9 0.9"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "236 -68 184.484"; + rotation = "0 0 1 1.9999"; + scale = "1.3 1.3 1.3"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "364 68 218.562"; + rotation = "0 0 1 167"; + scale = "1.2 1.2 1.2"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "388 140 138.906"; + rotation = "0 0 -1 87.0002"; + scale = "1.4 1.4 1.4"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "364 372 128.469"; + rotation = "0 0 -1 58.0005"; + scale = "0.8 0.8 0.8"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "204 -156 205.688"; + rotation = "0 0 -1 14"; + scale = "1 1 1"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "52 124 165.547"; + rotation = "0 0 1 205"; + scale = "1.3 1.3 1.3"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "196 -140 203.484"; + rotation = "0 0 1 150"; + scale = "1.4 1.4 1.4"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "236 -36 196.891"; + rotation = "0 0 -1 9.99997"; + scale = "1.2 1.2 1.2"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "420 212 80.9844"; + rotation = "0 0 1 107"; + scale = "0.8 0.8 0.8"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "420 204 83.8281"; + rotation = "0 0 -1 103"; + scale = "1.3 1.3 1.3"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "428 20 164.703"; + rotation = "0 0 1 226"; + scale = "1.1 1.1 1.1"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-148 -116 236.266"; + rotation = "0 0 1 58.9997"; + scale = "1.1 1.1 1.1"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "124 12 104.5"; + rotation = "0 0 1 33"; + scale = "0.8 0.8 0.8"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-60 68 207.766"; + rotation = "0 0 1 28"; + scale = "1.4 1.4 1.4"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "52 364 145.641"; + rotation = "0 0 1 4.99997"; + scale = "0.8 0.8 0.8"; + shapeName = "porg3.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition3PhoenixPlant5) { + + new TSStatic() { + position = "84 -28 104.425"; + rotation = "-0.0153781 -0.0675128 -0.9976 41.0904"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "244 20 192.394"; + rotation = "-0.0113304 0.200553 -0.979617 80.1602"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "44 332 164.144"; + rotation = "-0.0124627 0.0199102 0.999724 238.986"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "212 -28 199.269"; + rotation = "-0.132875 -0.0468762 0.990024 57.4832"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "260 -180 248.05"; + rotation = "-0.132625 -0.0422838 0.990264 164.154"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "4 332 165.206"; + rotation = "0.193255 -0.0370055 -0.98045 46.8195"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-100 172 206.769"; + rotation = "0.00974765 -0.0147755 -0.999843 59.0078"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "68 340 146.066"; + rotation = "-0.696069 -0.706503 0.127834 15.5507"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "436 260 76.6125"; + rotation = "0.182445 -0.0181341 0.983049 225.299"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "12 364 164.753"; + rotation = "0.0802312 -0.245441 0.966086 12.418"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-92 140 208.097"; + rotation = "-0.0102027 0.0535133 0.998515 209.958"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "260 20 191.862"; + rotation = "-0.0798726 0.00634792 -0.996785 27.0836"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-124 -164 200.441"; + rotation = "-0.23192 0.160175 0.959457 70.2149"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-100 420 104.503"; + rotation = "0.0374299 -0.0260001 0.998961 132.044"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "28 -164 209.112"; + rotation = "-0.355016 0.158063 0.921401 45.2341"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "172 36 100.425"; + rotation = "0.0578894 -0.0728881 0.995659 177.013"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "444 -100 142.55"; + rotation = "-0.0130851 -0.00599911 0.999896 212.996"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "252 20 192.816"; + rotation = "-0.319616 -0.00932571 -0.947501 37.8558"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "60 212 164.706"; + rotation = "0.0110939 -0.0125618 0.99986 225.994"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-116 -28 293.05"; + rotation = "0.40792 -0.0928579 0.908283 21.9726"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-84 132 209.659"; + rotation = "0.528817 0.0422397 0.847684 40.8057"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "20 52 164.784"; + rotation = "-0.00390784 -0.0241498 -0.999701 116.015"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-68 404 104.847"; + rotation = "-0.105629 0.136117 0.985045 46.6242"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "412 84 164.769"; + rotation = "0.0673681 0.0445128 0.996735 126.151"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "116 412 207.925"; + rotation = "-0.0758278 0.0324637 -0.996592 53.1564"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition4PhoenixPlant6) { + + new TSStatic() { + position = "444 276 79.9063"; + rotation = "0 0 1 4.99997"; + scale = "1 1 1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "68 324 148.031"; + rotation = "0 0 1 158"; + scale = "0.9 0.9 0.9"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "444 228 72.5782"; + rotation = "0 0 1 234"; + scale = "1.4 1.4 1.4"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-148 284 207.594"; + rotation = "0 0 1 128"; + scale = "1.4 1.4 1.4"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "228 260 241.984"; + rotation = "0 0 1 108"; + scale = "1.1 1.1 1.1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "388 -20 204.656"; + rotation = "0 0 1 207"; + scale = "0.8 0.8 0.8"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "68 196 164.922"; + rotation = "0 0 1 85"; + scale = "1.3 1.3 1.3"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "420 28 168.234"; + rotation = "0 0 1 165"; + scale = "1.3 1.3 1.3"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "52 20 151.094"; + rotation = "0 0 1 3.99996"; + scale = "1.3 1.3 1.3"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "348 380 129.953"; + rotation = "0 0 1 13"; + scale = "1.2 1.2 1.2"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-76 12 207.125"; + rotation = "0 0 1 73"; + scale = "0.8 0.8 0.8"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "76 260 142.234"; + rotation = "0 0 1 205"; + scale = "1 1 1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "5.52935 365.94 164.772"; + rotation = "0 0 1 211"; + scale = "1.3 1.3 1.3"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "20 164 207.828"; + rotation = "0 0 -1 2.9997"; + scale = "1 1 1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "228 148 121.094"; + rotation = "0 0 -1 108"; + scale = "0.8 0.8 0.8"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "436 268 79.8125"; + rotation = "0 0 1 67"; + scale = "1.3 1.3 1.3"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "60 188 167.516"; + rotation = "0 0 1 191"; + scale = "1.4 1.4 1.4"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "44 -172 206.937"; + rotation = "0 0 -1 77.0004"; + scale = "1 1 1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-12 140 208.625"; + rotation = "0 0 -1 8.99978"; + scale = "1 1 1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "404 -36 206.172"; + rotation = "0 0 -1 22.9999"; + scale = "1.4 1.4 1.4"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "420 372 156.422"; + rotation = "0 0 1 220"; + scale = "0.9 0.9 0.9"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "148 124 78.3906"; + rotation = "0 0 1 69.0002"; + scale = "0.9 0.9 0.9"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-156 412 132.484"; + rotation = "0 0 1 170"; + scale = "1 1 1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "212 316 244.156"; + rotation = "0 0 1 214"; + scale = "1.2 1.2 1.2"; + shapeName = "porg6.dts"; + locked = "true"; + }; + }; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "164.102 449.891 262.661"; + rotation = "0 0 1 166.731"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "13.1107 480.375 294.888"; + rotation = "0.00800593 -0.019998 0.999768 136.373"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "68.1902 -18.1193 338.344"; + rotation = "0 0 1 135.791"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-69.6816 -245.738 277.632"; + rotation = "0 0 -1 78.4952"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + + new SimGroup(Team1) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-26.0085 -177.073 208.551"; + rotation = "0 0 -1 48.7014"; + scale = "1 1 0.831263"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "120"; + sphereWeight = "100"; + indoorWeight = "20"; + outdoorWeight = "80"; + missionTypesList = "CTF TeamHunters"; + locked = "true"; + }; + new SpawnSphere() { + position = "120.837 68.9882 106.618"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "300"; + sphereWeight = "10000"; + indoorWeight = "0"; + outdoorWeight = "100"; + missionTypesList = "Hunters"; + locked = "true"; + }; + }; + new SimGroup(BaseAlpha) { + providesPower = "1"; + + new InteriorInstance() { + position = "-38.0196 -191.093 205.811"; + rotation = "0 0 1 37.2423"; + scale = "1 1 1"; + interiorFile = "pbunk6.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_3"; + locked = "true"; + }; + new Item(Team1flag1) { + position = "-38.2426 -191.302 221.824"; + rotation = "0 0 -1 50.4203"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + missionTypesList = "CTF"; + locked = "true"; + Target = "33"; + }; + new InteriorInstance() { + position = "-85.3805 -77.2785 289.424"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "ptowr5.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape(Team1SensorMediumPulse1) { + position = "109.633 -134.158 263.218"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Short Range"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + missionTypesList = "CTF TeamHunters"; + locked = "true"; + Target = "34"; + }; + new StaticShape() { + position = "-38.2325 -191.339 221.82"; + rotation = "0 0 -1 6.30264"; + scale = "1 1 1"; + dataBlock = "InteriorFlagStand"; + lockCount = "0"; + homingCount = "0"; + missionTypesList = "CTF"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-38.1307 -190.886 208.68"; + rotation = "0 0 1 36.0963"; + scale = "1 1 1"; + dataBlock = "EnergyPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Turret() { + position = "-37.9605 -190.634 232.822"; + rotation = "0 0 1 38.9612"; + scale = "1 1 1"; + nameTag = "Flag Sentry"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + missionTypesList = "CTF"; + locked = "false"; + Target = "35"; + }; + }; + new SimGroup(AIObjectives) { + + new AIObjective(AIODefendLocation) { + position = "-38.0136 -191.427 222.997"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend our flag"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3431"; + location = "-38.0136 -191.427 222.997"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "LightShieldSet"; + chat = "ChatSelfDefendFlag DefendBase"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + issuingClientId = "-1"; + gameType = "CTF"; + }; + new AIObjective(AIOAttackPlayer) { + position = "-38.0136 -191.427 222.997"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Kill the enemy flag carrier"; + mode = "FlagCarrier"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3431"; + location = "-38.0136 -191.427 222.997"; + weightLevel1 = "4900"; + weightLevel2 = "4050"; + weightLevel3 = "3000"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergySniper"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + issuingClientId = "-1"; + gameType = "CTF"; + }; + new AIObjective(AIOTouchObject) { + position = "-38.0136 -191.427 222.997"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Return our flag"; + mode = "FlagDropped"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3431"; + location = "-38.0136 -191.427 222.997"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "2000"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + issuingClientId = "-1"; + gameType = "CTF"; + }; + new AIObjective(AIORepairObject) { + position = "109.633 -134.158 265.738"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the Sensor"; + targetObject = "Team1SensorMediumPulse1"; + targetClientId = "-1"; + targetObjectId = "3434"; + location = "109.633 -134.158 265.738"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "111.196 444.487 222.76"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the enemy flag"; + mode = "FlagGrab"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3452"; + location = "111.196 444.487 222.76"; + weightLevel1 = "3850"; + weightLevel2 = "3500"; + weightLevel3 = "2000"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + issuingClientId = "-1"; + gameType = "CTF"; + }; + new AIObjective(AIOTouchObject) { + position = "111.196 444.487 222.76"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the flag!"; + mode = "FlagCapture"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3452"; + location = "111.196 444.487 222.76"; + weightLevel1 = "5000"; + weightLevel2 = "4000"; + weightLevel3 = "3000"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + issuingClientId = "-1"; + gameType = "CTF"; + }; + new AIObjective(AIOTouchObject) { + position = "111.196 444.487 222.76"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the dropped enemy flag"; + mode = "FlagDropped"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3452"; + location = "111.196 444.487 222.76"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "3000"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + issuingClientId = "-1"; + gameType = "CTF"; + }; + }; + }; + new SimGroup(Team2) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "65.4032 401.61 226.846"; + rotation = "0 0 1 136.364"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "120"; + sphereWeight = "10000"; + indoorWeight = "15"; + outdoorWeight = "85"; + missionTypesList = "CTF TeamHunters"; + locked = "true"; + }; + }; + new SimGroup(BaseBeta) { + providesPower = "1"; + + new InteriorInstance() { + position = "21.9315 457.999 253.397"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "ptowr5.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "111.285 444.69 205.856"; + rotation = "0 0 1 49.2744"; + scale = "1 1 1"; + interiorFile = "pbunk6.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_3"; + locked = "true"; + }; + new Item(Team2flag1) { + position = "111.245 444.67 221.86"; + rotation = "0 0 -1 41.253"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + missionTypesList = "CTF"; + locked = "true"; + Target = "36"; + }; + new InteriorInstance() { + position = "-34.1357 -81.1869 258.452"; + rotation = "-0.109772 -0.0992301 -0.988991 84.8562"; + scale = "1 1 1"; + interiorFile = "pmiscc.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape(Team2SensorMediumPulse1) { + position = "173.368 304.061 262.722"; + rotation = "0 0 1 219.052"; + scale = "1 1 1"; + nameTag = "Short Range"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + missionTypesList = "CTF TeamHunters"; + locked = "true"; + Target = "37"; + }; + new InteriorInstance() { + position = "36.595 431.508 216.453"; + rotation = "-0.751694 0.0527047 -0.657403 12.1756"; + scale = "1 1 1"; + interiorFile = "pmiscc.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "111.237 444.655 221.881"; + rotation = "0 0 1 4.01071"; + scale = "1 1 1"; + dataBlock = "InteriorFlagStand"; + lockCount = "0"; + homingCount = "0"; + missionTypesList = "CTF"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "111.514 444.754 208.239"; + rotation = "0 0 1 48.1285"; + scale = "1 1 1"; + dataBlock = "EnergyPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Turret() { + position = "111.036 444.654 232.902"; + rotation = "0 0 -1 37.8152"; + scale = "1 1 1"; + nameTag = "Flag Sentry"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + missionTypesList = "CTF"; + locked = "true"; + Target = "38"; + }; + }; + new SimGroup(AIObjectives) { + + new AIObjective(AIOTouchObject) { + position = "-38.0136 -191.427 222.997"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the enemy flag"; + mode = "FlagGrab"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3431"; + location = "-38.0136 -191.427 222.997"; + weightLevel1 = "3850"; + weightLevel2 = "3500"; + weightLevel3 = "2000"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + issuingClientId = "-1"; + gameType = "CTF"; + }; + new AIObjective(AIOTouchObject) { + position = "-38.0136 -191.427 222.997"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the flag!"; + mode = "FlagCapture"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3431"; + location = "-38.0136 -191.427 222.997"; + weightLevel1 = "5000"; + weightLevel2 = "3000"; + weightLevel3 = "2000"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + issuingClientId = "-1"; + gameType = "CTF"; + }; + new AIObjective(AIOTouchObject) { + position = "-38.0136 -191.427 222.997"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the dropped enemy flag"; + mode = "FlagDropped"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3431"; + location = "-38.0136 -191.427 222.997"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "2000"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + issuingClientId = "-1"; + gameType = "CTF"; + }; + new AIObjective(AIODefendLocation) { + position = "111.196 444.487 222.76"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend our flag"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3452"; + location = "111.196 444.487 222.76"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "LightShieldSet"; + chat = "ChatSelfDefendFlag DefendBase"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + issuingClientId = "-1"; + gameType = "CTF"; + }; + new AIObjective(AIOAttackPlayer) { + position = "111.196 444.487 222.76"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Kill the enemy flag carrier"; + mode = "FlagCarrier"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3452"; + location = "111.196 444.487 222.76"; + weightLevel1 = "4900"; + weightLevel2 = "4050"; + weightLevel3 = "3000"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergySniper"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + issuingClientId = "-1"; + gameType = "CTF"; + }; + new AIObjective(AIOTouchObject) { + position = "111.196 444.487 222.76"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Return our flag"; + mode = "FlagDropped"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3452"; + location = "111.196 444.487 222.76"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "3000"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + issuingClientId = "-1"; + gameType = "CTF"; + }; + new AIObjective(AIORepairObject) { + position = "173.368 304.061 265.242"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the Sensor"; + targetObject = "Team2SensorMediumPulse1"; + targetClientId = "-1"; + targetObjectId = "3454"; + location = "173.368 304.061 265.242"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + issuingClientId = "-1"; + }; + }; + }; + new SimGroup(team0) { + }; + }; + new SimGroup(Environmental) { + + new AudioEmitter() { + position = "-18.2958 -116.376 229.707"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/drywind.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new Item() { + position = "207.302 -43.8472 197.77"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "PlasmaAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new InteriorInstance() { + position = "166.423 66.7967 100.985"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pbunk1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Item() { + position = "160.305 73.1715 98.508"; + rotation = "0 0 -1 48.1284"; + scale = "1 1 1"; + dataBlock = "CloakingPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "160.581 61.0167 98.624"; + rotation = "0 0 1 44.6907"; + scale = "1 1 1"; + dataBlock = "ShieldPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "164.016 67.1527 115.875"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "161.466 67.2267 116.525"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "166.421 67.3099 116.483"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "387.348 -27.5316 204.513"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "GrenadeLauncher"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "385.984 -25.3373 204.289"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "GrenadeLauncherAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "388.676 -29.4172 204.188"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "GrenadeLauncherAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new InteriorInstance() { + position = "-104.507 210.521 230.655"; + rotation = "0 0 -1 72.1927"; + scale = "1 1 1"; + interiorFile = "pplat5.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Item() { + position = "-99.8315 208.811 233.22"; + rotation = "0 0 1 17.7617"; + scale = "1 1 1"; + dataBlock = "SniperRifle"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "210.078 -39.6732 198.928"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "DiscAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "23.1143 54.4361 165.472"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Plasma"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "22.6423 52.4263 164.805"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "PlasmaAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "23.6197 57.8064 164.617"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "PlasmaAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "234.862 358.509 210.168"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "161.944 -226.435 134.395"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "208.45 -41.8507 198.429"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ChaingunAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-44.0787 -193.047 234.082"; + rotation = "0 0 -1 5.72956"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-48.1303 -189.773 233.8"; + rotation = "0 0 -1 5.72956"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "110.208 445.992 234.103"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Mine"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "113.104 450.946 234.103"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "105.42 444.13 234.103"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "101.803 447.856 233.837"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-37.1135 -185.498 234.082"; + rotation = "0 0 -1 5.72956"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-39.1201 -190.162 234.082"; + rotation = "0 0 -1 5.72956"; + scale = "1 1 1"; + dataBlock = "Mine"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "false"; + Target = "-1"; + }; + }; + new SimGroup(HuntersObjects) { + + new Item() { + position = "112.938 442.963 234.292"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + missionTypesList = "Hunters TeamHunters"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "120.337 440.394 233.865"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + missionTypesList = "Hunters TeamHunters"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "114.365 435.248 234.197"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + missionTypesList = "Hunters TeamHunters"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "110.105 443.612 222.52"; + rotation = "0 0 -1 40.107"; + scale = "1 1 1"; + dataBlock = "Chaingun"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + missionTypesList = "Hunters TeamHunters"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "112.071 441.062 222.047"; + rotation = "0 0 1 47.5555"; + scale = "1 1 1"; + dataBlock = "ChaingunAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + missionTypesList = "Hunters TeamHunters"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "107.874 445.802 221.948"; + rotation = "0 0 1 50.9932"; + scale = "1 1 1"; + dataBlock = "ChaingunAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + missionTypesList = "Hunters TeamHunters"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-28.6192 -193.164 233.932"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + missionTypesList = "Hunters TeamHunters"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-33.7005 -199.502 233.914"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + missionTypesList = "Hunters TeamHunters"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-36.0712 -192.515 233.866"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ShieldPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + missionTypesList = "Hunters TeamHunters"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-38.8779 -187.613 221.615"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "PlasmaAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + missionTypesList = "Hunters TeamHunters"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-34.363 -191.147 221.68"; + rotation = "0 0 1 4.01071"; + scale = "1 1 1"; + dataBlock = "PlasmaAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + missionTypesList = "Hunters TeamHunters"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-39.3877 -193.222 222.599"; + rotation = "0 0 -1 55.5769"; + scale = "1 1 1"; + dataBlock = "Plasma"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + missionTypesList = "Hunters TeamHunters"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-38.6043 -192.035 240.05"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ShockLance"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + missionTypesList = "Hunters TeamHunters"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "110.693 444.009 240.245"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Blaster"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + missionTypesList = "Hunters TeamHunters"; + locked = "true"; + Target = "-1"; + }; + }; + new Item() { + position = "163.286 74.9837 130.165"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ChaingunAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new SimGroup(theNexus) { + + new Item() { + position = "124.511 44.2983 167.348"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Nexus"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + missionTypesList = "Hunters TeamHunters"; + locked = "true"; + Target = "39"; + flashThreadDir = "1"; + }; + new StaticShape() { + position = "124.511 44.2983 167.388"; + rotation = "0 0 1 8.02137"; + scale = "1 1 1"; + dataBlock = "NexusBase"; + lockCount = "0"; + homingCount = "0"; + missionTypesList = "Hunters TeamHunters"; + locked = "true"; + Target = "-1"; + }; + new StaticShape() { + position = "124.511 44.2983 175.348"; + rotation = "0 0 1 8.02137"; + scale = "1 1 1"; + dataBlock = "NexusCap"; + lockCount = "0"; + homingCount = "0"; + missionTypesList = "Hunters TeamHunters"; + locked = "true"; + Target = "-1"; + }; + new InteriorInstance() { + position = "124.506 44.2707 166.994"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pmisc3.dif"; + showTerrainInside = "0"; + missionTypesList = "Hunters TeamHunters"; + locked = "true"; + }; + new InteriorInstance() { + position = "124.506 44.27 175.794"; + rotation = "0 1 0 180"; + scale = "1 1 1"; + interiorFile = "pmisc3.dif"; + showTerrainInside = "0"; + missionTypesList = "Hunters TeamHunters"; + locked = "true"; + }; + new WayPoint() { + position = "124.373 43.7972 161.94"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Nexus"; + team = "0"; + missionTypesList = "Hunters TeamHunters"; + locked = "true"; + }; + new StaticShape() { + position = "124.511 44.298 168.548"; + rotation = "1 0 0 0"; + scale = "0.8 0.8 1"; + dataBlock = "NexusBase"; + lockCount = "0"; + homingCount = "0"; + missionTypesList = "Hunters TeamHunters"; + locked = "true"; + Target = "-1"; + }; + new StaticShape() { + position = "124.511 44.298 174.151"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "NexusCap"; + lockCount = "0"; + homingCount = "0"; + missionTypesList = "Hunters TeamHunters"; + locked = "true"; + Target = "-1"; + }; + new Trigger(NexusTrigger) { + position = "116.413 51.5895 165.14"; + rotation = "1 0 0 0"; + scale = "15.1222 14.655 15.9954"; + dataBlock = "gameTrigger"; + polyhedron = "0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000 -0.0000000 -1.0000000 -0.0000000 -0.0000000 -0.0000000 1.0000000"; + missionTypesList = "Hunters TeamHunters"; + locked = "true"; + }; + }; + new Item() { + position = "-28.5885 329.658 165.731"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "GrenadeLauncherAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-19.9492 335.571 165.731"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "GrenadeLauncherAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-23.9776 332.615 166.508"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "GrenadeLauncher"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "163.206 58.6794 130.041"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "DiscAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "63.1218 203.274 165.848"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "151.632 -113.812 231.269"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ConcussionGrenade"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "66.2104 199.39 165.848"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "64.9191 201.156 165.288"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "201.623 243.102 207.91"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ELFGun"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "21.8887 127.292 208.334"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Chaingun"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "19.7383 127.62 208.091"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ChaingunAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "24.1576 127.522 208.025"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ChaingunAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Equinox.mis b/base/missions/Equinox.mis new file mode 100644 index 0000000..69ac0f7 --- /dev/null +++ b/base/missions/Equinox.mis @@ -0,0 +1,2253 @@ +// MissionTypes = CnH DM + +//--- MISSION QUOTE BEGIN --- +//Gentle rains, come wash my sins away, cleanse me of these memories. +// -- Great Eagle Alexandre Konavalev, 3940 CE +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//Four towers, one at each corner of map +//[CnH]Each tower has a control switch +//[CnH]4800 points to win +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + powerCount = "0"; + DM_timeLimit = "25"; + musicTrack = "lush"; + cdTrack = "2"; + CnH_timeLimit = "25"; + DM_scoreLimit = "16"; + + new MissionArea(MissionArea) { + area = "-480 -480 1040 1152"; + flightCeiling = "2000"; + flightCeilingRange = "50"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.600000 0.600000 0.600000 1.000000"; + ambient = "0.200000 0.200000 0.200000 1.000000"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + locked = "true"; + position = "-832 -1272 0"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/lushdet1"; + terrainFile = "Equinox.ter"; + squareSize = "8"; + visibleDistance = "1200"; + hazeDistance = "250"; + locked = "true"; + position = "-1024 -1024 0"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "45"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + YDimOverSize = "0"; + XDimOverSize = "0"; + rotation = "0 0 0 0"; + scale = "1 1 1"; + conjoinBowlDev = "20"; + coverage = "0"; + locked = "true"; + GraphFile = "Equinox.nav"; + position = "0 0 0 1"; + }; + new Sky(Sky) { + position = "-832 -1272 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "550"; + useSkyTextures = "1"; + SkySolidColor = "0.390000 0.390000 0.390000 0.000000"; + fogDistance = "375"; + fogColor = "0.500000 0.500000 0.500000 1.000000"; + fogVolume1 = "300 50 100"; + fogVolume2 = "350 100 170"; + fogVolume3 = "0 0 0"; + materialList = "Lush_l4.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 -nan"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 -nan"; + cloudSpeed0 = "0.000500 0.000500"; + locked = "true"; + }; + new SimGroup(ObserverDropPoints) { + powerCount = "0"; + + new Camera() { + position = "75.1682 158.808 136.933"; + rotation = "0.0271823 -0.069917 0.997182 137.619"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-212.984 448.855 92.0225"; + rotation = "0 0 1 154.699"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "403.809 377.135 110.141"; + rotation = "-0.0491699 -0.25677 0.965221 200.944"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "298.72 -246.869 102.851"; + rotation = "0.0285852 -0.039973 0.998792 108.928"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-62.1428 -368.961 91.7874"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + powerCount = "0"; + + new SimGroup(Team0) { + powerCount = "0"; + + new SimGroup(Towers) { + powerCount = "0"; + + new SimGroup(Tower1) { + powerCount = "1"; + providesPower = "1"; + + new InteriorInstance() { + position = "-202.351 433.802 74.8672"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "btowr2.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + team = "0"; + locked = "true"; + }; + new StaticShape(Team0flipflop1) { + position = "-202.397 426.928 88.8532"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "NW Stronghold"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + Target = "33"; + number = "0"; + name = "NW Stronghold"; + missionTypesList = "CnH"; + Projector = "3299"; + team = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory1) { + position = "-198.372 436.956 80.365"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "NW Stronghold"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "34"; + team = "0"; + locked = "false"; + Trigger = "3294"; + }; + new StaticShape(Team0StationInventory2) { + position = "-206.68 436.629 80.365"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "NW Stronghold"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "35"; + team = "0"; + locked = "true"; + Trigger = "3296"; + }; + new Item() { + position = "-202.452 438.44 76.4406"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "NW Stronghold"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + team = "0"; + locked = "true"; + }; + new WayPoint() { + position = "-202.047 432.615 80.9093"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "NW Stronghold"; + team = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-202.399 435.794 97.3382"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + holo = "0"; + missionTypesList = "CnH"; + team = "0"; + locked = "true"; + }; + }; + new SimGroup(Tower2) { + powerCount = "1"; + providesPower = "1"; + + new InteriorInstance() { + position = "398.856 364.063 44.7872"; + rotation = "0 0 1 36.6693"; + scale = "1 1 1"; + interiorFile = "btowr5.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + team = "0"; + locked = "true"; + }; + new StaticShape(Team0flipflop2) { + position = "406.409 361.085 75.5221"; + rotation = "0 0 -1 52.7121"; + scale = "1 1 1"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + Target = "36"; + number = "1"; + name = "NE Stronghold"; + missionTypesList = "CnH"; + Projector = "3308"; + missionListTypes = "CnH"; + team = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory3) { + position = "395.167 369.591 63.55"; + rotation = "0 0 1 127.197"; + scale = "1 1 1"; + nameTag = "NE Stronghold"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "37"; + team = "0"; + locked = "true"; + Trigger = "3304"; + }; + new StaticShape(Team0StationInventory4) { + position = "402.316 359.441 57.62"; + rotation = "0 0 1 217.724"; + scale = "1 1 1"; + nameTag = "NE Stronghold"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "38"; + team = "0"; + locked = "true"; + Trigger = "3306"; + }; + new WayPoint() { + position = "405.125 361.724 66.841"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "NE Stronghold"; + team = "0"; + locked = "true"; + }; + new StaticShape() { + position = "399.689 366.189 90.4933"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + holo = "0"; + missionTypesList = "CnH"; + team = "0"; + locked = "true"; + }; + }; + new SimGroup(Tower3) { + powerCount = "1"; + providesPower = "1"; + + new InteriorInstance() { + position = "330.779 -261.455 73.5873"; + rotation = "0 0 1 44.6907"; + scale = "1 1 1"; + interiorFile = "btowr6.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + team = "0"; + locked = "true"; + }; + new StaticShape() { + position = "332.492 -259.527 102.414"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + holo = "0"; + missionTypesList = "CnH"; + team = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory6) { + position = "335.204 -262.955 71.585"; + rotation = "0 0 1 134.072"; + scale = "1 1 1"; + nameTag = "SE Stronghold"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "39"; + team = "0"; + locked = "true"; + Trigger = "3313"; + }; + new StaticShape(Team0flipflop3) { + position = "328.656 -256.267 71.5"; + rotation = "0 0 -1 43.5448"; + scale = "1 1 1"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + Target = "40"; + number = "2"; + name = "SE Stronghold"; + missionTypesList = "CnH"; + Projector = "3311"; + missionListTypes = "CnH"; + team = "0"; + locked = "true"; + }; + new WayPoint() { + position = "330.318 -257.911 81.3871"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "SE Stronghold"; + team = "0"; + locked = "true"; + }; + }; + new SimGroup(Tower4) { + powerCount = "1"; + providesPower = "1"; + + new InteriorInstance() { + position = "-67.1011 -328.438 67.7471"; + rotation = "0 0 1 152.589"; + scale = "1 1 1"; + interiorFile = "bbunk2.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + team = "0"; + locked = "true"; + }; + new StaticShape(Team0flipflop4) { + position = "-63.9736 -334.333 77.7"; + rotation = "0 0 -1 27.5019"; + scale = "1 1 1"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + Target = "41"; + number = "3"; + name = "SW Stronghold"; + missionTypesList = "CnH"; + Projector = "3325"; + missionListTypes = "CnH"; + team = "0"; + locked = "false"; + }; + new StaticShape(Team0StationInventory7) { + position = "-71.9901 -334.708 85.61"; + rotation = "0 0 -1 119.175"; + scale = "1 1 1"; + nameTag = "SW Stronghold"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "42"; + team = "0"; + locked = "true"; + Trigger = "3320"; + }; + new StaticShape(Team0StationInventory8) { + position = "-59.6764 -327.717 85.61"; + rotation = "0 0 1 62.4524"; + scale = "1 1 1"; + nameTag = "SW Stronghold"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "43"; + team = "0"; + locked = "true"; + Trigger = "3322"; + }; + new Item() { + position = "-67.0775 -329.341 62.075"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + team = "0"; + locked = "true"; + }; + new WayPoint() { + position = "-64.7515 -333.165 50.9552"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "SW Stronghold"; + team = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-65.6336 -330.935 99.2"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + holo = "0"; + missionTypesList = "CnH"; + team = "0"; + locked = "true"; + }; + }; + }; + new SimGroup(AIObjectives) { + powerCount = "0"; + }; + }; + new SimGroup(Team1) { + powerCount = "0"; + + new SimGroup(spawnspheres) { + powerCount = "0"; + + new SpawnSphere() { + position = "82.0476 87.4112 112.526"; + rotation = "0 0 1 180.482"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "125"; + sphereWeight = "500"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new SimGroup(AIObjectives) { + powerCount = "0"; + + new AIObjective(AIOTouchObject) { + position = "-202.397 426.928 90.4869"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0flipflop1"; + mode = "TouchFlipFlop"; + targetObject = "Team0flipflop1"; + targetClientId = "-1"; + targetObjectId = "3292"; + location = "-202.397 426.928 90.4869"; + weightLevel1 = "3950"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-198.372 436.956 82.0292"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3293"; + location = "-198.372 436.956 82.0292"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-206.68 436.629 82.0071"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3295"; + location = "-206.68 436.629 82.0071"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIOTouchObject) { + position = "406.409 361.085 77.1558"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0flipflop2"; + mode = "TouchFlipFlop"; + targetObject = "Team0flipflop2"; + targetClientId = "-1"; + targetObjectId = "3302"; + location = "406.409 361.085 77.1558"; + weightLevel1 = "3950"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIORepairObject) { + position = "395.167 369.591 65.1158"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3303"; + location = "395.167 369.591 65.1158"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIORepairObject) { + position = "402.316 359.441 59.217"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3305"; + location = "402.316 359.441 59.217"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-59.6764 -327.717 87.3327"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory8"; + targetClientId = "-1"; + targetObjectId = "3321"; + location = "-59.6764 -327.717 87.3327"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIORepairObject) { + position = "335.204 -262.955 73.268"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory6"; + targetClientId = "-1"; + targetObjectId = "3312"; + location = "335.204 -262.955 73.268"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIOTouchObject) { + position = "328.674 -256.375 72.6995"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0flipflop3"; + mode = "TouchFlipFlop"; + targetObject = "Team0flipflop3"; + targetClientId = "-1"; + targetObjectId = "3314"; + location = "328.674 -256.375 72.6995"; + weightLevel1 = "3950"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIODefendLocation) { + position = "-63.9721 -334.343 79.4384"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the flipflop"; + targetObject = "Team0flipflop4"; + targetClientId = "-1"; + targetObjectId = "3318"; + location = "-63.9721 -334.343 79.4384"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIOTouchObject) { + position = "-63.9721 -334.343 79.4384"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0flipflop4"; + mode = "TouchFlipFlop"; + targetObject = "Team0flipflop4"; + targetClientId = "-1"; + targetObjectId = "3318"; + location = "-63.9721 -334.343 79.4384"; + weightLevel1 = "3950"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-71.9901 -334.708 87.2402"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory7"; + targetClientId = "-1"; + targetObjectId = "3319"; + location = "-71.9901 -334.708 87.2402"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + }; + new SimGroup(ObjectiveSet) { + powerCount = "0"; + + new AIObjective(AIODefendLocation) { + position = "406.409 361.085 77.1558"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the flipflop"; + targetObject = "Team0flipflop2"; + targetClientId = "-1"; + targetObjectId = "3302"; + location = "406.409 361.085 77.1558"; + weightLevel1 = "3450"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + group = "3343"; + }; + new AIObjective(AIODeployEquipment) { + position = "385.823 344.538 50.5291"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "385.823 344.538 50.5291"; + weightLevel1 = "3500"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + group = "3343"; + }; + new AIObjective(AIODeployEquipment) { + position = "400.703 409.258 50.8"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "400.703 409.258 50.8"; + weightLevel1 = "3500"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + group = "3343"; + }; + new AIObjective(AIODeployEquipment) { + position = "397.609 363.834 60.6696"; + rotation = "0 0 1 222.308"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "397.609 363.834 60.6696"; + weightLevel1 = "3499"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "1"; + group = "3343"; + }; + }; + new SimGroup(ObjectiveSet) { + powerCount = "0"; + + new AIObjective(AIODefendLocation) { + position = "-202.397 426.928 90.4869"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the flipflop"; + targetObject = "Team0flipflop1"; + targetClientId = "-1"; + targetObjectId = "3292"; + location = "-202.397 426.928 90.4869"; + weightLevel1 = "3450"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + group = "3348"; + }; + new AIObjective(AIODeployEquipment) { + position = "-213.463 474.2 69.5414"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-213.463 474.2 69.5414"; + weightLevel1 = "3500"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + group = "3348"; + }; + new AIObjective(AIODeployEquipment) { + position = "-194.915 410.934 69.07"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-194.915 410.934 69.07"; + weightLevel1 = "3500"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + group = "3348"; + }; + new AIObjective(AIODeployEquipment) { + position = "-196.452 436.083 69.2254"; + rotation = "0 0 1 88.8085"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-196.452 436.083 69.2254"; + weightLevel1 = "3499"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "1"; + group = "3348"; + }; + }; + new SimGroup(ObjectiveSet) { + powerCount = "0"; + + new AIObjective(AIODefendLocation) { + position = "-63.9721 -334.343 79.4384"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the flipflop"; + targetObject = "Team0flipflop4"; + targetClientId = "-1"; + targetObjectId = "3318"; + location = "-63.9721 -334.343 79.4384"; + weightLevel1 = "3450"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + group = "3353"; + }; + new AIObjective(AIODeployEquipment) { + position = "-38.8711 -340.989 68.0242"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-38.8711 -340.989 68.0242"; + weightLevel1 = "3500"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + group = "3353"; + }; + new AIObjective(AIODeployEquipment) { + position = "-98.2266 -361.98 66.3655"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-98.2266 -361.98 66.3655"; + weightLevel1 = "3500"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + group = "3353"; + }; + new AIObjective(AIODeployEquipment) { + position = "-67.1821 -328.063 78.2324"; + rotation = "0 0 -1 21.7724"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-67.1821 -328.063 78.2324"; + weightLevel1 = "3499"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "1"; + group = "3353"; + }; + }; + new SimGroup(ObjectiveSet) { + powerCount = "0"; + + new AIObjective(AIODefendLocation) { + position = "328.674 -256.375 72.6995"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the flipflop"; + targetObject = "Team0flipflop3"; + targetClientId = "-1"; + targetObjectId = "3314"; + location = "328.674 -256.375 72.6995"; + weightLevel1 = "3450"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + group = "3358"; + }; + new AIObjective(AIODeployEquipment) { + position = "379.247 -277.93 69.7168"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "379.247 -277.93 69.7168"; + weightLevel1 = "3500"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + group = "3358"; + }; + new AIObjective(AIODeployEquipment) { + position = "335.588 -230.334 73.8635"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "335.588 -230.334 73.8635"; + weightLevel1 = "3500"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + group = "3358"; + }; + new AIObjective(AIODeployEquipment) { + position = "333.331 -256.922 90.2415"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "333.331 -256.922 90.2415"; + weightLevel1 = "3499"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "1"; + group = "3358"; + }; + }; + }; + }; + new SimGroup(Team2) { + powerCount = "0"; + + new SimGroup(spawnspheres) { + powerCount = "0"; + + new SpawnSphere() { + position = "72.1296 90.013 110.083"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "125"; + sphereWeight = "500"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new SimGroup(AIObjectives) { + powerCount = "0"; + + new AIObjective(AIOTouchObject) { + position = "-202.397 426.928 90.4869"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0flipflop1"; + mode = "TouchFlipFlop"; + targetObject = "Team0flipflop1"; + targetClientId = "-1"; + targetObjectId = "3292"; + location = "-202.397 426.928 90.4869"; + weightLevel1 = "3950"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIORepairObject) { + position = "-198.372 436.956 82.0292"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3293"; + location = "-198.372 436.956 82.0292"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIORepairObject) { + position = "-206.68 436.629 82.0071"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3295"; + location = "-206.68 436.629 82.0071"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIOTouchObject) { + position = "406.409 361.085 77.1558"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0flipflop2"; + mode = "TouchFlipFlop"; + targetObject = "Team0flipflop2"; + targetClientId = "-1"; + targetObjectId = "3302"; + location = "406.409 361.085 77.1558"; + weightLevel1 = "3950"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIORepairObject) { + position = "395.167 369.591 65.1158"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3303"; + location = "395.167 369.591 65.1158"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIORepairObject) { + position = "402.316 359.441 59.217"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3305"; + location = "402.316 359.441 59.217"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIORepairObject) { + position = "-59.6764 -327.717 87.3327"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory8"; + targetClientId = "-1"; + targetObjectId = "3321"; + location = "-59.6764 -327.717 87.3327"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIORepairObject) { + position = "335.204 -262.955 73.268"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory6"; + targetClientId = "-1"; + targetObjectId = "3312"; + location = "335.204 -262.955 73.268"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIOTouchObject) { + position = "328.674 -256.375 72.6995"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0flipflop3"; + mode = "TouchFlipFlop"; + targetObject = "Team0flipflop3"; + targetClientId = "-1"; + targetObjectId = "3314"; + location = "328.674 -256.375 72.6995"; + weightLevel1 = "3950"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIOTouchObject) { + position = "-63.9721 -334.343 79.4384"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0flipflop4"; + mode = "TouchFlipFlop"; + targetObject = "Team0flipflop4"; + targetClientId = "-1"; + targetObjectId = "3318"; + location = "-63.9721 -334.343 79.4384"; + weightLevel1 = "3950"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIORepairObject) { + position = "-71.9901 -334.708 87.2402"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory7"; + targetClientId = "-1"; + targetObjectId = "3319"; + location = "-71.9901 -334.708 87.2402"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + }; + new SimGroup(ObjectiveSet) { + powerCount = "0"; + + new AIObjective(AIODefendLocation) { + position = "406.409 361.085 77.1558"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the flipflop"; + targetObject = "Team0flipflop2"; + targetClientId = "-1"; + targetObjectId = "3302"; + location = "406.409 361.085 77.1558"; + weightLevel1 = "3450"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + group = "3378"; + }; + new AIObjective(AIODeployEquipment) { + position = "385.823 344.538 50.5291"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "385.823 344.538 50.5291"; + weightLevel1 = "3500"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + group = "3378"; + }; + new AIObjective(AIODeployEquipment) { + position = "400.703 409.258 50.8"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "400.703 409.258 50.8"; + weightLevel1 = "3500"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + group = "3378"; + }; + new AIObjective(AIODeployEquipment) { + position = "397.531 363.855 60.6663"; + rotation = "0 0 1 222.308"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "397.531 363.855 60.6663"; + weightLevel1 = "3499"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "2"; + group = "3378"; + }; + }; + new SimGroup(ObjectiveSet) { + powerCount = "0"; + + new AIObjective(AIODefendLocation) { + position = "-202.397 426.928 90.4869"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the flipflop"; + targetObject = "Team0flipflop1"; + targetClientId = "-1"; + targetObjectId = "3292"; + location = "-202.397 426.928 90.4869"; + weightLevel1 = "3450"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + group = "3383"; + }; + new AIObjective(AIODeployEquipment) { + position = "-213.463 474.2 69.5414"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-213.463 474.2 69.5414"; + weightLevel1 = "3500"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + group = "3383"; + }; + new AIObjective(AIODeployEquipment) { + position = "-194.915 410.934 69.07"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-194.915 410.934 69.07"; + weightLevel1 = "3500"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + group = "3383"; + }; + new AIObjective(AIODeployEquipment) { + position = "-196.672 435.882 69.7214"; + rotation = "0 0 1 88.8085"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-196.672 435.882 69.7214"; + weightLevel1 = "3499"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "2"; + group = "3383"; + }; + }; + new SimGroup(ObjectiveSet) { + powerCount = "0"; + + new AIObjective(AIODefendLocation) { + position = "-63.9721 -334.343 79.4384"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the flipflop"; + targetObject = "Team0flipflop4"; + targetClientId = "-1"; + targetObjectId = "3318"; + location = "-63.9721 -334.343 79.4384"; + weightLevel1 = "3450"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + group = "3388"; + }; + new AIObjective(AIODeployEquipment) { + position = "-38.8711 -340.989 68.0242"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-38.8711 -340.989 68.0242"; + weightLevel1 = "3500"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + group = "3388"; + }; + new AIObjective(AIODeployEquipment) { + position = "-98.2266 -361.98 66.3655"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-98.2266 -361.98 66.3655"; + weightLevel1 = "3500"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + group = "3388"; + }; + new AIObjective(AIODeployEquipment) { + position = "-67.0291 -327.63 77.9927"; + rotation = "0 0 -1 21.7724"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-67.0291 -327.63 77.9927"; + weightLevel1 = "3499"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "2"; + group = "3388"; + }; + }; + new SimGroup(ObjectiveSet) { + powerCount = "0"; + + new AIObjective(AIODefendLocation) { + position = "328.674 -256.375 72.6995"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the flipflop"; + targetObject = "Team0flipflop3"; + targetClientId = "-1"; + targetObjectId = "3314"; + location = "328.674 -256.375 72.6995"; + weightLevel1 = "3450"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + group = "3393"; + }; + new AIObjective(AIODeployEquipment) { + position = "379.247 -277.93 69.7168"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "379.247 -277.93 69.7168"; + weightLevel1 = "3500"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + group = "3393"; + }; + new AIObjective(AIODeployEquipment) { + position = "335.588 -230.334 73.8635"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "335.588 -230.334 73.8635"; + weightLevel1 = "3500"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + group = "3393"; + }; + new AIObjective(AIODeployEquipment) { + position = "328.481 -260.225 90.4923"; + rotation = "0 0 1 177.617"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "328.481 -260.225 90.4923"; + weightLevel1 = "3499"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + team = "2"; + group = "3393"; + }; + }; + }; + }; + }; + new SimGroup(Environmental) { + powerCount = "0"; + + new Item() { + position = "121.897 92.8568 121.654"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new InteriorInstance() { + position = "121.059 92.1692 120.057"; + rotation = "-0.0247773 0.990887 0.1324 21.39"; + scale = "1 1 1"; + interiorFile = "brock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new Precipitation(Precipitation) { + position = "61.9596 188.997 89.1805"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Rain"; + percentage = "1"; + color1 = "0.600000 0.600000 0.600000 1.000000"; + color2 = "-1.000000 0.000000 0.000000 1.000000"; + color3 = "-1.000000 0.000000 0.000000 1.000000"; + offsetSpeed = "0.25"; + minVelocity = "1.25"; + maxVelocity = "4"; + maxNumDrops = "2000"; + maxRadius = "80"; + locked = "true"; + }; + new SimGroup(Ambiance) { + powerCount = "0"; + + new AudioEmitter() { + position = "116.659 93.9778 125.739"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/fog.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "239.654 404.275 111.407"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo5.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "50000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "422.654 -234.613 116.139"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo4.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "40000"; + type = "EffectAudioType"; + locked = "true"; + }; + new InteriorInstance() { + position = "128.533 104.994 123.009"; + rotation = "-0.178128 0.901868 0.39358 53.2976"; + scale = "2 2 2"; + interiorFile = "brock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "126.874 83.3308 121.234"; + rotation = "-0.178128 0.901868 0.39358 53.2976"; + scale = "2 2 2"; + interiorFile = "brock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "103.925 86.7246 119.895"; + rotation = "-0.178128 0.901868 0.39358 53.2976"; + scale = "2 2 2"; + interiorFile = "brock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "107.504 106.021 118.877"; + rotation = "0.588212 0.523641 0.616285 66.1512"; + scale = "2 2 2"; + interiorFile = "brock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Escalade.mis b/base/missions/Escalade.mis new file mode 100644 index 0000000..c6fba51 --- /dev/null +++ b/base/missions/Escalade.mis @@ -0,0 +1,1352 @@ +// MissionTypes = TeamHunters Hunters DM Rabbit Bounty + +//--- MISSION QUOTE BEGIN --- +//The flying bullet down the Pass, +//That whistles clear: "All flesh is grass." +// -- Rudyard Kipling +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[Hunters TeamHunters]Nexus is a floating platform near center of map +//[Rabbit]Flag is on a floating platform near the center of the map +//[DM Bounty]Mission follows standard Rules of Engagement +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + musicTrack = "lush"; + powerCount = "0"; + cdTrack = "2"; + + new MissionArea(MissionArea) { + area = "-184 -504 1152 928"; + flightCeiling = "300"; + flightCeilingRange = "20"; + locked = "true"; + }; + new Sky(Sky) { + position = "40 -768 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "600"; + useSkyTextures = "1"; + SkySolidColor = "0.365000 0.390000 0.420000 0.000000"; + fogDistance = "150"; + fogColor = "0.420000 0.420000 0.420000 1.000000"; + fogVolume1 = "400 0 80"; + fogVolume2 = "500 80 90"; + fogVolume3 = "0 0 0"; + materialList = "sky_lush_blue.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 0.000000"; + cloudSpeed0 = "0.000400 0.000000"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.800000 0.800000 0.800000 1.000000"; + ambient = "0.400000 0.400000 0.400000 1.000000"; + position = "40 -768 0"; + locked = "true"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/lushdet1"; + terrainFile = "Escalade.ter"; + squareSize = "8"; + emptySquares = "89025 154817 155073 89787 89800 155841"; + position = "-1024 -1024 0"; + locked = "true"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "45"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + YDimOverSize = "0"; + GraphFile = "Escalade.nav"; + conjoinBowlDev = "20"; + position = "0 0 0 1"; + coverage = "0"; + locked = "true"; + rotation = "0 0 0 0"; + XDimOverSize = "0"; + scale = "1 1 1"; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "650.229 15.1818 168.403"; + rotation = "0.0077088 -0.188853 0.981975 175.409"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "233.25 235.761 114.524"; + rotation = "-0.035439 0.0898221 0.995327 137.12"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "113.307 -41.3487 99.462"; + rotation = "-0.0264942 -0.0149942 -0.999537 59.0374"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "545.828 -290.898 51.73"; + rotation = "-0.0166108 -0.0299914 0.999412 237.931"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "578.036 -193.947 158.692"; + rotation = "-0.448716 -0.151194 -0.880792 41.8688"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + + new SimGroup(team0) { + providesPower = "1"; + + new Trigger(NexusTrigger) { + position = "386.283 94.606 140.931"; + rotation = "1 0 0 0"; + scale = "20 20 35.856"; + dataBlock = "gameTrigger"; + polyhedron = "0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000 -0.0000000 -1.0000000 -0.0000000 -0.0000000 -0.0000000 1.0000000"; + missionTypesList = "Hunters TeamHunters"; + locked = "true"; + }; + new Item() { + position = "396.285 84.5895 146.563"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Nexus"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + missionTypesList = "Hunters TeamHunters"; + flashThreadDir = "1"; + locked = "true"; + }; + new StaticShape() { + position = "396.285 84.5895 146.608"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "NexusBase"; + lockCount = "0"; + homingCount = "0"; + missionTypesList = "Hunters TeamHunters"; + locked = "true"; + }; + new StaticShape() { + position = "396.285 84.5895 154.563"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "NexusCap"; + lockCount = "0"; + homingCount = "0"; + missionTypesList = "Hunters TeamHunters"; + locked = "true"; + }; + new Item() { + position = "396.285 84.5895 148"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + missionTypesList = "Rabbit"; + locked = "true"; + }; + new WayPoint() { + position = "396.285 84.5895 148.563"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Nexus"; + team = "0"; + missionTypesList = "Hunters TeamHunters"; + locked = "true"; + }; + new WayPoint() { + position = "396.285 84.5895 148.563"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Mission Center"; + team = "0"; + missionTypesList = "DM Bounty"; + locked = "true"; + }; + new SimGroup(Tower1) { + + new InteriorInstance() { + position = "435.054 -44.3967 250.972"; + rotation = "-0 0 -1 33.2315"; + scale = "1 1 1"; + interiorFile = "btowr5.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new InteriorInstance() { + position = "451.421 -31.2098 263.802"; + rotation = "0 0 1 56.7685"; + scale = "1 1 1"; + interiorFile = "bbrdg0.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "468.986 -19.7013 263.802"; + rotation = "0 0 1 236.768"; + scale = "1 1 1"; + interiorFile = "bbrdg2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "428.596 -46.1826 269.777"; + rotation = "0 0 1 56.7685"; + scale = "1 1 1"; + nameTag = "Pinnacle "; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new TSStatic() { + position = "442.397 -42.1644 263.847"; + rotation = "-0 0 -1 33.2315"; + scale = "1 1 1"; + shapeName = "stackable2m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "441.387 -42.4676 263.847"; + rotation = "-0 0 -1 33.2315"; + scale = "1 1 1"; + shapeName = "stackable2m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "442.118 -42.2912 264.897"; + rotation = "-0 0 -1 16.6158"; + scale = "1 1 1"; + shapeName = "stackable2m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "442.237 -42.2914 265.947"; + rotation = "-0 0 -1 21.1995"; + scale = "1 1 1"; + shapeName = "stackable2m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "440.387 -42.826 263.847"; + rotation = "-0 0 -1 33.2315"; + scale = "1 1 1"; + shapeName = "stackable2m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "440.933 -42.6923 264.897"; + rotation = "-0 0 -1 33.2315"; + scale = "1 1 1"; + shapeName = "stackable2m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "430.431 -45.1315 282.749"; + rotation = "0 0 1 56.1498"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "430.953 -44.7843 281.734"; + rotation = "0 0 1 56.1498"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "430.048 -45.3862 281.725"; + rotation = "0 0 1 56.1498"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + }; + new SimGroup(Tower2) { + + new InteriorInstance() { + position = "280.823 118.804 106.906"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bbunk1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape() { + position = "276.55 111.339 109.719"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "RockPile"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Tower3) { + + new InteriorInstance() { + position = "723.208 -74.4544 95.1575"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bbunk2.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape() { + position = "723.228 -68.7276 99.0275"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Bridge Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "730.431 -71.3893 113.022"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Bridge Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "732.287 4.90254 78.1969"; + rotation = "0 0 1 81.933"; + scale = "1 1 1"; + interiorFile = "bbrdg9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "735.062 -14.7455 78.1969"; + rotation = "0 0 1 81.933"; + scale = "1 1 1"; + interiorFile = "bbrdg8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "737.878 -34.5463 78.1969"; + rotation = "0 0 1 81.933"; + scale = "1 1 1"; + interiorFile = "bbrdg9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new TSStatic() { + position = "726.691 -72.6874 91.1457"; + rotation = "-0.128558 -0.983334 0.128558 90.9629"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "716.685 -64.8448 91.1927"; + rotation = "0.250563 -0.935113 0.250563 93.841"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + }; + new SimGroup(Tower4) { + + new InteriorInstance() { + position = "528 -264 55.9096"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bbase1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape() { + position = "514.363 -263.962 44.4053"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Supply Base"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "541.656 -264.016 44.4066"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Supply Base"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "568.847 -318.524 46.4049"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Supply Base"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new TSStatic() { + position = "516.223 -283.103 44.4025"; + rotation = "0 0 1 2.8649"; + scale = "1 1 1"; + shapeName = "stackable2m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "515.165 -283.063 44.4025"; + rotation = "0 0 1 2.8649"; + scale = "1 1 1"; + shapeName = "stackable2m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "526.061 -293.425 45.4357"; + rotation = "0 1 0 48.1284"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "530.696 -240.961 60.4578"; + rotation = "0 0 -1 90.5273"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "517.338 -283.085 44.4025"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable2m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "515.542 -283.133 45.4428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable2m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "532.932 -240.958 60.4578"; + rotation = "0 0 -1 90.5273"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "530.747 -241.163 58.4078"; + rotation = "0 0 -1 90.5273"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "532.983 -241.159 58.4078"; + rotation = "0 0 -1 90.5273"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "541.167 -307.516 44.4025"; + rotation = "-0 0 -1 16.0428"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "540.398 -304.381 44.4025"; + rotation = "-0 0 -1 16.0428"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "539.649 -301.209 44.4025"; + rotation = "-0 0 -1 16.0428"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "541.213 -306.551 47.4025"; + rotation = "0 0 -1 25.7832"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "539.773 -302.092 47.4025"; + rotation = "0 0 -1 14.897"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "520.786 -298.234 44.3939"; + rotation = "0 0 1 32.6586"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "519.116 -301.246 44.3939"; + rotation = "0 0 1 29.2208"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "517.431 -303.999 44.3939"; + rotation = "0 0 1 29.2208"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "518.529 -301.951 47.3939"; + rotation = "0 0 1 93.392"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + }; + new SimGroup(HealthPad5) { + + new AudioEmitter() { + position = "736.228 84.5717 114.717"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/armor/thrust_uw.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "5"; + maxDistance = "320"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new Item() { + position = "735.228 82.5717 120.06"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "735.228 86.5717 120.06"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "738.228 84.5717 120.06"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "736.228 84.5717 120.06"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "739.228 90.5717 122.733"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bplat3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(HealthPad4) { + + new AudioEmitter() { + position = "516.446 204.49 110.288"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/armor/thrust_uw.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "5"; + maxDistance = "320"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new Item() { + position = "515.446 202.49 115.631"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "515.446 206.49 115.631"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "518.446 204.49 115.631"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "516.446 204.49 115.631"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "519.446 210.49 118.304"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bplat3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(HealthPad3) { + + new AudioEmitter() { + position = "305.157 263.909 100.211"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/armor/thrust_uw.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "5"; + maxDistance = "320"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new Item() { + position = "304.157 261.909 105.554"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "304.157 265.909 105.554"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "307.157 263.909 105.554"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "305.157 263.909 105.554"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "308.157 269.909 108.227"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bplat3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(HealthPad1) { + + new InteriorInstance() { + position = "383.036 -269.225 173.761"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bplat3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Item() { + position = "380.036 -275.225 171.088"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "382.036 -275.225 171.088"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "379.036 -273.225 171.088"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "379.036 -277.225 171.088"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new AudioEmitter() { + position = "380.036 -275.225 165.745"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/armor/thrust_uw.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "5"; + maxDistance = "320"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + }; + new SimGroup(Tower5) { + + new InteriorInstance() { + position = "30.8856 4.16997 107.243"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + interiorFile = "bbunk2.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape() { + position = "36.5001 4.18328 111.115"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "33.92 11.3762 125.107"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(HealthPad2) { + + new AudioEmitter() { + position = "78.7715 156.022 117.388"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/armor/thrust_uw.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "5"; + maxDistance = "320"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new Item() { + position = "77.7715 154.022 122.731"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "77.7715 158.022 122.731"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "80.7715 156.022 122.731"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "78.7715 156.022 122.731"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "81.7715 162.022 125.404"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bplat3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + }; + new SimGroup(Team2) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "172.968 92.7825 62.3745"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + new SpawnSphere() { + position = "452.639 217.51 69.9594"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + new SpawnSphere() { + position = "679.978 12.8538 54.012"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + new SpawnSphere() { + position = "796.445 1.97045 63.6692"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "30"; + sphereWeight = "150"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + new SpawnSphere() { + position = "563.157 -284.949 62.5985"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + }; + new SimGroup(Team1) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "172.968 92.7825 62.3745"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + new SpawnSphere() { + position = "452.639 217.51 69.9594"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + new SpawnSphere() { + position = "679.978 12.8538 54.012"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + new SpawnSphere() { + position = "796.445 1.97045 63.6692"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "30"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + new SpawnSphere() { + position = "563.157 -284.949 62.5985"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + }; + new InteriorInstance() { + position = "476.294 -49.779 222.938"; + rotation = "0 0 1 118.602"; + scale = "1 1 1"; + interiorFile = "bplat2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new InteriorInstance() { + position = "399.128 90.5043 149.885"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bplat3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new AudioEmitter() { + position = "396.085 84.5895 142.363"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/armor/thrust_uw.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "5"; + maxDistance = "320"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new SimGroup(Environmental) { + + new InteriorInstance() { + position = "763.785 -55.3552 96.4762"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir5.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "491.934 -327.482 68.363"; + rotation = "0 0 -1 77.9223"; + scale = "1 1 1"; + interiorFile = "bspir1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "478.946 -133.639 106.46"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir5.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "592.575 46.1623 125.94"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "182.143 207.594 74.8187"; + rotation = "0 0 1 83.0789"; + scale = "1 1 1"; + interiorFile = "bspir3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "144.998 48.3066 67.5383"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "12.8101 -125.73 141.655"; + rotation = "0 0 1 56.1498"; + scale = "1 1 1"; + interiorFile = "bspir3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "167.407 -283.042 174.129"; + rotation = "0 0 1 47.5555"; + scale = "1 1 1"; + interiorFile = "bspir4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "266.965 -384.194 84.278"; + rotation = "0 0 1 211.604"; + scale = "1 1 1"; + interiorFile = "bspir5.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "475.994 305.509 150.58"; + rotation = "0 0 1 134.072"; + scale = "1 1 1"; + interiorFile = "bspir4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "847.143 37.8342 111.179"; + rotation = "0 0 -1 25.21"; + scale = "1 1 1"; + interiorFile = "bspir3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "736.171 -360.369 110.211"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new InteriorInstance() { + position = "282.873 73.6419 98.5829"; + rotation = "-1 0 0 55.5769"; + scale = "1 1 1"; + interiorFile = "brock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "278.067 80.6823 94.1152"; + rotation = "-1 0 0 95.6839"; + scale = "1 1 1"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "269.748 77.7101 94.2848"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "280.474 76.4743 99.7524"; + rotation = "0 0 -1 104.278"; + scale = "1 1 1"; + interiorFile = "brock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new AudioEmitter() { + position = "424.809 117.98 92.8088"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/drywind.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.5"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Firestorm.mis b/base/missions/Firestorm.mis new file mode 100644 index 0000000..9a0d58e --- /dev/null +++ b/base/missions/Firestorm.mis @@ -0,0 +1,604 @@ +// MissionTypes = CnH CTF + +//--- MISSION QUOTE BEGIN --- +//Do not go gentle into that good night, +//Rage, rage against the dying of the light. +// -- Dylan Thomas +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[CTF]Eight flag captures to win +//[CnH]Single control point on center island +//No vehicle stations +//[CnH]1200 points to win +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + cdTrack = "3"; + musicTrack = "volcanic"; + CTF_timeLimit = "25"; + powerCount = "0"; + CnH_timeLimit = "25"; + CTF_scoreLimit = "8"; + + new MissionArea(MissionArea) { + area = "-384 -368 768 752"; + flightCeiling = "2000"; + flightCeilingRange = "50"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.600000 0.600000 0.600000 1.000000"; + ambient = "0.200000 0.200000 0.200000 1.000000"; + locked = "true"; + position = "-1024 -1584 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + }; + new Sky(Sky) { + position = "-1024 -1584 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "600"; + useSkyTextures = "1"; + renderBottomTexture = "0"; + SkySolidColor = "0.000000 0.000000 0.000000 0.000000"; + fogDistance = "300"; + fogColor = "0.850000 0.380000 0.100000 1.000000"; + fogVolume1 = "0 0 0"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "sky_lush_starrynight.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 -520175634523126950000000000000000.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 0.000000"; + cloudSpeed0 = "0.000000 0.000000"; + locked = "true"; + }; + new SimGroup(Ambiance) { + + new AudioEmitter() { + position = "-56.4248 -18.6941 132.737"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "145"; + maxDistance = "9280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new InteriorInstance() { + position = "-52.6933 -37.0834 115.979"; + rotation = "-1 0 0 39.5341"; + scale = "1 1 1"; + interiorFile = "dvent.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new ParticleEmissionDummy() { + position = "-43.883 12.5616 125.582"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "doubleTimeEmissionDummy"; + emitter = "SmallHeavyDamageSmoke"; + velocity = "1"; + locked = "true"; + }; + new AudioEmitter() { + position = "-43.9 12.2 125.8"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahiss.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "5"; + maxDistance = "320"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new InteriorInstance() { + position = "-44.17 12.3603 124.608"; + rotation = "0 0 1 21.7724"; + scale = "1 1 1"; + interiorFile = "dvent.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new ParticleEmissionDummy() { + position = "-52.6355 -37.296 116.881"; + rotation = "-1 0 0 44.1177"; + scale = "1 1 1"; + dataBlock = "halftimeEmissionDummy"; + emitter = "LightDamageSmoke"; + velocity = "1"; + locked = "true"; + }; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/lavadet2"; + terrainFile = "Firestorm.ter"; + squareSize = "8"; + locked = "true"; + hazeDistance = "250"; + position = "-1024 -1024 0"; + visibleDistance = "1200"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "55"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + YDimOverSize = "0"; + locked = "true"; + position = "0 0 0 1"; + conjoinBowlDev = "20"; + GraphFile = "Firestorm.nav"; + coverage = "0"; + rotation = "0 0 0 0"; + XDimOverSize = "0"; + scale = "1 1 1"; + }; + new WaterBlock() { + position = "-232 -184 13.106"; + rotation = "1 0 0 0"; + scale = "352 320 100"; + liquidType = "CrustyLava"; + density = "1"; + viscosity = "15"; + waveMagnitude = "0"; + surfaceTexture = "LiquidTiles/Lava"; + surfaceOpacity = "1"; + envMapTexture = "desert/skies/d_n_move1"; + envMapIntensity = "0.5"; + submergeTexture[0] = "special/lavadeath_1"; + submergeTexture[1] = "special/lavadeath_2"; + removeWetEdges = "1"; + locked = "true"; + }; + new SimGroup(Teams) { + + new SimGroup(Team1) { + + new SimGroup(Base0) { + providesPower = "1"; + + new SimGroup(Flag0) { + + new StaticShape() { + position = "-249.699 -47.7852 185.053"; + rotation = "0 0 1 23.4913"; + scale = "1 1 1"; + dataBlock = "ExteriorFlagStand"; + lockCount = "0"; + homingCount = "0"; + missionTypesList = "CTF"; + Target = "-1"; + locked = "true"; + Flag = "3287"; + }; + new Item(Team1flag1) { + position = "-249.674 -47.7808 185.133"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + missionTypesList = "CTF"; + Target = "33"; + locked = "true"; + stand = "3286"; + }; + }; + new InteriorInstance() { + position = "-284.575 -47.8885 185.12"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "dtowr4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory1) { + position = "-288.37 -53.8372 186.12"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Upper"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "34"; + locked = "true"; + }; + new StaticShape(Team1StationInventory2) { + position = "-288.366 -41.9357 186.12"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Upper"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "35"; + locked = "true"; + }; + new Item() { + position = "-289.454 -47.6801 149.709"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new SimGroup(FFOne) { + + new ForceFieldBare() { + position = "-290.6 -38.3014 186.214"; + rotation = "1 0 0 0"; + scale = "12.529 0.310146 5.40663"; + dataBlock = "defaultTeamSlowFieldBare"; + Target = "36"; + locked = "true"; + triggerCount = "0"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + }; + new SimGroup(FFTwo) { + + new ForceFieldBare() { + position = "-290.657 -57.8683 186.214"; + rotation = "1 0 0 0"; + scale = "12.529 0.310146 5.40663"; + dataBlock = "defaultTeamSlowFieldBare"; + Target = "37"; + locked = "true"; + triggerCount = "0"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + }; + new SimGroup(FFThree) { + + new ForceFieldBare() { + position = "-277.467 -56.9089 184.35"; + rotation = "1 0 0 0"; + scale = "0.320709 18.3436 7.28"; + dataBlock = "defaultTeamSlowFieldBare"; + Target = "38"; + locked = "true"; + triggerCount = "0"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + }; + new WayPoint() { + position = "-279.409 -48.7504 186.702"; + rotation = "1 0 0 0"; + scale = "0.1 0.1 0.1"; + nameTag = "Base"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Base"; + team = "0"; + missionTypesList = "CnH"; + locked = "true"; + }; + }; + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-311.68 -51.0028 128.635"; + rotation = "0.00157728 -0.996885 -0.0788537 2.29888"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "80"; + sphereWeight = "100"; + indoorWeight = "30"; + outdoorWeight = "70"; + locked = "true"; + }; + }; + }; + new SimGroup(Team2) { + + new SimGroup(Base1) { + providesPower = "1"; + + new SimGroup(Flag1) { + + new StaticShape() { + position = "133.469 47.7797 183.43"; + rotation = "0 0 1 24.6372"; + scale = "1 1 1"; + dataBlock = "ExteriorFlagStand"; + lockCount = "0"; + homingCount = "0"; + missionTypesList = "CTF"; + Target = "-1"; + locked = "true"; + Flag = "3312"; + }; + new Item(Team2Flag1) { + position = "133.494 47.7836 183.52"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + missionTypesList = "CTF"; + Target = "39"; + locked = "true"; + stand = "3311"; + }; + }; + new InteriorInstance() { + position = "168.65 47.6 183.507"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + interiorFile = "dtowr4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory1) { + position = "172.597 53.681 184.505"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "Upper"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "40"; + locked = "true"; + }; + new StaticShape(Team2StationInventory2) { + position = "172.509 41.5849 184.505"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "Upper"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "41"; + locked = "true"; + }; + new SimGroup(FFFour) { + + new ForceFieldBare() { + position = "161.206 38.489 182.731"; + rotation = "1 0 0 0"; + scale = "0.401444 18.1854 7.28"; + dataBlock = "defaultTeamSlowFieldBare"; + Target = "42"; + locked = "true"; + triggerCount = "0"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + }; + new SimGroup(FFFive) { + + new ForceFieldBare() { + position = "161.965 37.6155 184.526"; + rotation = "1 0 0 0"; + scale = "12.7687 0.409168 5.47897"; + dataBlock = "defaultTeamSlowFieldBare"; + Target = "43"; + locked = "true"; + triggerCount = "0"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + }; + new SimGroup(FFSix) { + + new ForceFieldBare() { + position = "162.071 57.1006 184.528"; + rotation = "1 0 0 0"; + scale = "12.7604 0.344791 5.47897"; + dataBlock = "defaultTeamSlowFieldBare"; + Target = "44"; + locked = "true"; + triggerCount = "0"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + }; + new Item() { + position = "173.42 47.5205 148.002"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new WayPoint() { + position = "167.353 46.5529 182.938"; + rotation = "1 0 0 0"; + scale = "0.1 0.1 0.1"; + nameTag = "Base"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Base"; + team = "0"; + missionTypesList = "CnH"; + locked = "true"; + }; + }; + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "189.708 27.874 124.606"; + rotation = "0 0 1 183.346"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "80"; + sphereWeight = "100"; + indoorWeight = "30"; + outdoorWeight = "70"; + locked = "true"; + }; + }; + }; + new SimGroup(team0) { + + new WayPoint() { + position = "-53.4 -2.3 124"; + rotation = "1 0 0 0"; + scale = "0.1 0.1 0.1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "The Island"; + team = "0"; + missionTypesList = "CnH"; + locked = "true"; + }; + new StaticShape() { + position = "-53.4 -2.3 120.023"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + missionTypesList = "CnH"; + Target = "-1"; + locked = "true"; + holoHeight = "25"; + holo = "0"; + }; + new StaticShape(Teamflipflop1) { + position = "-53.4 -2.3 125"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + name = "The Island"; + Projector = "3395"; + missionTypesList = "CnH"; + Target = "45"; + locked = "true"; + }; + new SimGroup(AIObjectives) { + }; + }; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "-260.613 -19.77 152.515"; + rotation = "0 0 1 76.7763"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "122.65 -5.97 198.668"; + rotation = "0 0 1 37.2423"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-34.241 92.78 144.126"; + rotation = "0 0 1 188.503"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Environmental) { + + new InteriorInstance() { + position = "-56.5164 81.707 120.356"; + rotation = "0 0 -1 89.9544"; + scale = "1.84135 1.2 1.2"; + interiorFile = "dbrdg10.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new TSStatic() { + position = "-129.991 -172.113 123.471"; + rotation = "0.456374 0.0805439 0.886135 57.2886"; + scale = "1 1 1"; + shapeName = "vehicle_air_scout_wreck.dts"; + locked = "true"; + }; + new FireballAtmosphere(FireballAtmosphere) { + position = "-38.2 -70 143.8"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "fireball"; + dropRadius = "900"; + dropsPerMinute = "10"; + minDropAngle = "0"; + maxDropAngle = "10"; + startVelocity = "300"; + dropHeight = "1000"; + dropDir = "0.212 0.212 -0.953998"; + locked = "true"; + }; + new InteriorInstance() { + position = "-4.46887 154.451 124.694"; + rotation = "0 0 1 16.0429"; + scale = "1 1.59448 1"; + interiorFile = "drock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Flashpoint.mis b/base/missions/Flashpoint.mis new file mode 100644 index 0000000..7504fca --- /dev/null +++ b/base/missions/Flashpoint.mis @@ -0,0 +1,1114 @@ +// MissionTypes = CnH + +//--- MISSION QUOTE BEGIN --- +//Think of Buddha, but kill mosquitoes. +// -- Diamond Sword saying +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[CnH]Five towers, central one floating +//Vehicle stations at NE and SW Towers; no inventory stations at NW and SE Towers +//[CnH]6000 points to win +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + musicTrack = "volcanic"; + CnH_timeLimit = "25"; + cdTrack = "3"; + powerCount = "0"; + + new MissionArea(MissionArea) { + area = "-600 -448 1072 1168"; + flightCeiling = "250"; + flightCeilingRange = "20"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.600000 0.600000 0.600000 1.000000"; + ambient = "0.200000 0.200000 0.200000 1.000000"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + locked = "true"; + position = "-1024 -1024 0"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/lavadet2"; + terrainFile = "Flashpoint.ter"; + squareSize = "8"; + emptySquares = "250"; + visibleDistance = "1200"; + hazeDistance = "250"; + locked = "true"; + position = "-1024 -1024 0"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "70"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + rotation = "0 0 0 0"; + XDimOverSize = "0"; + scale = "1 1 1"; + locked = "true"; + conjoinBowlDev = "20"; + GraphFile = "Flashpoint.nav"; + position = "0 0 0 1"; + coverage = "0"; + YDimOverSize = "0"; + }; + new Sky(Sky) { + position = "-1024 -1024 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "400"; + useSkyTextures = "0"; + SkySolidColor = "0.450000 0.300000 0.250000 1.000000"; + fogDistance = "125"; + fogColor = "0.450000 0.300000 0.250000 1.000000"; + fogVolume1 = "0 0 0"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "sky_lava_brown.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 0.000000"; + locked = "true"; + cloudSpeed0 = "0.000000 0.000000"; + }; + new SimGroup(Lava) { + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "-144.453 107.26 193.576"; + rotation = "0 0 1 138.083"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "217.64 357.63 90.674"; + rotation = "0 0 1 29.7938"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-292.622 369.46 154.035"; + rotation = "0 0 -1 96.8299"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-383.189 -374.247 74.4834"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "154.88 -194.027 104.909"; + rotation = "0 0 1 73.3386"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + + new SimGroup(Team1) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "243.53 124.7 63.4594"; + rotation = "0 0 1 178.763"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + }; + new SimGroup(Team2) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-472.34 16.42 65.8698"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + }; + new SimGroup(Team0) { + + new SimGroup(Tower1) { + + new InteriorInstance() { + position = "-96.616 23.1 134.914"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + interiorFile = "dbase4.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_Pulse_2"; + locked = "true"; + }; + new StaticShape(Team0SensorLargePulse1) { + position = "-95.385 22.91 198.474"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Ctr. Stronghold"; + dataBlock = "SensorLargePulse"; + lockCount = "0"; + homingCount = "0"; + Target = "33"; + locked = "true"; + }; + new StaticShape(Team0flipflop1) { + position = "-96.424 22.75 154.87"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + name = "Center Stronghold"; + Projector = "3304"; + Target = "34"; + locked = "true"; + }; + new StaticShape(Team0generatorLarge1) { + position = "-96.483 24.4 144.42"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Ctr. Stronghold"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + Target = "35"; + locked = "true"; + }; + new StaticShape(Team0StationInventory1) { + position = "-108.308 36.24 150.91"; + rotation = "0 0 -1 48.1284"; + scale = "1 1 1"; + nameTag = "Ctr. Stronghold"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "36"; + locked = "true"; + }; + new StaticShape(Team0StationInventory2) { + position = "-84.896 35.94 150.91"; + rotation = "0 0 1 41.253"; + scale = "1 1 1"; + nameTag = "Ctr. Stronghold"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "37"; + locked = "true"; + }; + new StaticShape(Team0StationInventory3) { + position = "-85.0396 6.74148 150.91"; + rotation = "0 0 1 135.218"; + scale = "1 1 1"; + nameTag = "Ctr. Stronghold"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "38"; + locked = "true"; + }; + new StaticShape(Team0StationInventory4) { + position = "-108.16 6.04599 150.91"; + rotation = "0 0 1 223.454"; + scale = "1 1 1"; + nameTag = "Ctr. Stronghold"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "39"; + locked = "true"; + }; + new WayPoint() { + position = "-97.422 23.02 145.482"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Center Stronghold"; + team = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-161.533 -52.577 121.054"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dplat3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-164.029 87.16 123.24"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dplat1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-36.516 78.04 120.967"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dplat3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-36.062 -52.307 120.743"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dplat1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-98.521 22.97 199.379"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + locked = "true"; + holo = "0"; + }; + new TSStatic() { + position = "-91.995 69.78 143.41"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-95.036 69.69 143.41"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-91.983 69.77 144.41"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-95.026 69.67 144.41"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-95.0141 69.6222 145.41"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-51.877 20.39 143.41"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-139.405 20.91 143.5"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-139.386 22.94 143.5"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-139.429 21.54 144.5"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-139.29 19.35 143.406"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable2m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-139.458 21.4 145.5"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + shapeName = "stackable1s.dts"; + locked = "true"; + }; + }; + new SimGroup(Tower2) { + providesPower = "1"; + + new InteriorInstance() { + position = "-418.586 -257.393 51.0152"; + rotation = "0 0 1 40.68"; + scale = "1.0013 1 1"; + interiorFile = "dtowr1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_Pulse_1"; + locked = "true"; + }; + new StaticShape() { + position = "-419.728 -259.963 104.96"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + locked = "true"; + holo = "0"; + }; + new WayPoint() { + position = "-422.852 -262.799 60.7275"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "SW Tower"; + team = "0"; + locked = "true"; + }; + new StaticShape(Team0flipflop2) { + position = "-420.595 -260.839 74.4713"; + rotation = "0 0 1 10.3133"; + scale = "1 1 1"; + nameTag = "SW Tower"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + name = "SW Tower"; + Projector = "3318"; + Target = "40"; + locked = "true"; + }; + new StaticShape(Team0StationInventory5) { + position = "-418.747 -268.598 51.01"; + rotation = "0 0 1 173.033"; + scale = "1 1 1"; + nameTag = "SW Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "41"; + locked = "true"; + }; + new StaticShape(Team0StationInventory6) { + position = "-428.509 -260.285 51.01"; + rotation = "0 0 -1 80.2141"; + scale = "1 1 1"; + nameTag = "SW Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "42"; + locked = "true"; + }; + new Item() { + position = "-419.082 -267.934 63.6074"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new SimGroup(ffield) { + + new ForceFieldBare() { + position = "-430.249 -264.465 50.8655"; + rotation = "0.0399823 0.0187772 0.999024 129.73"; + scale = "1 8.27421 6.59044"; + dataBlock = "defaultAllSlowFieldBare"; + color = "0.500000 0.500000 1.000000 1.000000"; + Target = "43"; + locked = "true"; + }; + }; + new SimGroup(Spawns) { + + new SpawnSphere() { + position = "-379.525 -261.749 61.3482"; + rotation = "0 0 -1 22.9183"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new StaticShape() { + position = "-365.258 -306.643 54"; + rotation = "0 0 1 222.881"; + scale = "1 1 1"; + nameTag = "Vehicle Pad"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + locked = "true"; + }; + new InteriorInstance() { + position = "-360.619 -301.783 54.3"; + rotation = "0 0 1 42.81"; + scale = "1 1 1"; + interiorFile = "dvpad.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(Tower3) { + + new InteriorInstance() { + position = "-357.386 370.528 134.942"; + rotation = "0 0 1 141.521"; + scale = "1 1 1"; + interiorFile = "dtowr4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape(Team0flipflop3) { + position = "-337.389 345.568 134.87"; + rotation = "5.54288e-10 -1.03756e-10 1 51.5662"; + scale = "1 1 1"; + nameTag = "NW Tower"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + name = "NW Tower"; + Projector = "3352"; + Target = "45"; + locked = "true"; + }; + new Item() { + position = "-365.086 370.138 136.043"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "EnergyPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new Item() { + position = "-355.384 377.838 136.133"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "CloakingPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new Item() { + position = "-359.351 362.718 136.519"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new Item() { + position = "-349.025 370.068 136.579"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ShieldPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new Item() { + position = "-360.292 370.958 136.24"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SatchelCharge"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new Item() { + position = "-356.369 373.848 136.243"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Mine"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new Item() { + position = "-352.965 365.238 135.869"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Grenade"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new Turret(Team0TurretBaseLarge1) { + position = "-386.617 348.088 134.88"; + rotation = "0 0 1 141.521"; + scale = "1 1 1"; + nameTag = "Northwest"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "MissileBarrelLarge"; + Target = "46"; + locked = "true"; + }; + new Turret(Team0TurretBaseLarge2) { + position = "-329.886 392.428 134.88"; + rotation = "0 0 1 142.666"; + scale = "1 1 1"; + nameTag = "Northwest"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "MissileBarrelLarge"; + Target = "47"; + locked = "true"; + }; + new StaticShape(Team0generatorLarge3) { + position = "-361.528 375.688 98.9663"; + rotation = "0 0 -1 37.8152"; + scale = "1 1 1"; + nameTag = "NW Tower"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + Target = "48"; + locked = "true"; + }; + new WayPoint() { + position = "-336.85 345.738 126.718"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "NW Tower"; + team = "0"; + locked = "true"; + }; + new SimGroup(Spawns) { + + new SpawnSphere() { + position = "-361.05 349.818 86.4837"; + rotation = "0 0 1 39.5341"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new StaticShape() { + position = "-356.874 369.568 143.12"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + locked = "true"; + holo = "0"; + }; + }; + new SimGroup(Tower4) { + providesPower = "1"; + + new WayPoint() { + position = "296.07 422.78 60.9598"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "NE Tower"; + team = "0"; + locked = "true"; + }; + new SpawnSphere() { + position = "253.42 422.94 63.5805"; + rotation = "0 0 1 156.99"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "100"; + locked = "true"; + }; + new StaticShape() { + position = "294.26 421.44 105.44"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + locked = "true"; + holo = "0"; + }; + new StaticShape() { + position = "227.909 456.691 53.8"; + rotation = "0 0 1 42.9718"; + scale = "1 1 1"; + nameTag = "Vehicle Pad"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + locked = "true"; + }; + new InteriorInstance() { + position = "291.32 418.51 51.4475"; + rotation = "0 0 1 220.589"; + scale = "1.0013 1 1"; + interiorFile = "dtowr1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_Pulse_1"; + locked = "true"; + }; + new SimGroup(ffield) { + + new ForceFieldBare() { + position = "297.1 431.59 51.5273"; + rotation = "0 0 1 130.677"; + scale = "1 8.27421 6.59044"; + dataBlock = "defaultAllSlowFieldBare"; + color = "0.500000 0.500000 1.000000 1.000000"; + Target = "50"; + triggerCount = "0"; + locked = "true"; + }; + }; + new Item() { + position = "302.49 421.51 64.2975"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new StaticShape(Team0StationInventory7) { + position = "302.37 421.55 51.44"; + rotation = "0 0 1 99.6946"; + scale = "1 1 1"; + nameTag = "NE Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "51"; + locked = "true"; + }; + new StaticShape(Team0StationInventory8) { + position = "292.69 429.9 51.44"; + rotation = "-0 0 -1 7.05828"; + scale = "1 1 1"; + nameTag = "NE Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "52"; + locked = "true"; + }; + new StaticShape(Team0flipflop4) { + position = "294.49 422.1 74.9036"; + rotation = "0 0 1 190.222"; + scale = "1 1 1"; + nameTag = "NE Tower"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + name = "NE Tower"; + Projector = "3356"; + Target = "53"; + locked = "true"; + }; + new InteriorInstance() { + position = "220.089 447.663 54.1"; + rotation = "0 0 1 222.97"; + scale = "1 1 1"; + interiorFile = "dvpad.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(Tower5) { + + new StaticShape(Team0flipflop5) { + position = "227.97 -181.064 133.36"; + rotation = "-1.08129e-12 -2.54446e-10 1 210.848"; + scale = "1 1 1"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + name = "SE Tower"; + Projector = "3387"; + Target = "54"; + locked = "true"; + }; + new InteriorInstance() { + position = "255.51 -197.336 133.459"; + rotation = "-0 0 -1 59.1967"; + scale = "1 1 1"; + interiorFile = "dtowr4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Item() { + position = "262.57 -194.247 134.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "EnergyPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new Item() { + position = "256.22 -204.881 134.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "CloakingPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new Item() { + position = "254.59 -189.328 134.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new Item() { + position = "247.53 -199.863 134.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ShieldPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new Item() { + position = "258.38 -196.71 134.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SatchelCharge"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new Item() { + position = "256.03 -198.897 134.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Mine"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new Item() { + position = "249.5 -193.952 134.386"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Grenade"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + locked = "true"; + }; + new Turret(Team0TurretBaseLarge3) { + position = "274.91 -166.006 133.42"; + rotation = "-0 0 -1 59.1967"; + scale = "1 1 1"; + nameTag = "Southeast"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "MissileBarrelLarge"; + Target = "55"; + locked = "true"; + }; + new Turret(Team0TurretBaseLarge4) { + position = "237.53 -227.548 133.42"; + rotation = "-0 0 -1 58.0518"; + scale = "1 1 1"; + nameTag = "Southeast"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "MissileBarrelLarge"; + Target = "56"; + locked = "true"; + }; + new StaticShape(Team0generatorLarge5) { + position = "261.21 -200.697 97.4837"; + rotation = "0 0 1 121.467"; + scale = "1 1 1"; + nameTag = "SE Tower"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + Target = "57"; + locked = "true"; + }; + new WayPoint() { + position = "228.61 -182.463 125.903"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "SE Tower"; + team = "0"; + locked = "true"; + }; + new SimGroup(Spawns) { + + new SpawnSphere() { + position = "250.35 -183.411 98.9368"; + rotation = "0 0 1 186.784"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new StaticShape() { + position = "254.72 -196.373 141.412"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + locked = "true"; + holo = "0"; + }; + }; + }; + }; + new SimGroup(Ambiance) { + + new ParticleEmissionDummy() { + position = "-200.388 -69.3782 53.3559"; + rotation = "-0.870674 0.486579 0.0718842 16.5162"; + scale = "1 1 1"; + dataBlock = "defaultEmissionDummy"; + emitter = "HeavyDamageSmoke"; + velocity = "1"; + locked = "true"; + }; + new TSStatic() { + position = "-201.47 -66.557 50.2098"; + rotation = "-0.455902 -0.353976 -0.816612 22.4156"; + scale = "1 1 1"; + shapeName = "vehicle_land_assault_wreck.dts"; + locked = "true"; + }; + new AudioEmitter() { + position = "-243.602 -14.58 50.3803"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/rumblingthunder.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new ParticleEmissionDummy() { + position = "-96.4604 -7.40853 138.913"; + rotation = "1 0 0 179.909"; + scale = "1 1 1"; + dataBlock = "halftimeEmissionDummy"; + emitter = "PlasmaExplosionEmitter"; + velocity = "1"; + locked = "true"; + }; + new ParticleEmissionDummy() { + position = "-96.4693 62.0943 139.032"; + rotation = "1 0 0 179.909"; + scale = "1 1 1"; + dataBlock = "halftimeEmissionDummy"; + emitter = "PlasmaExplosionEmitter"; + velocity = "1"; + locked = "true"; + }; + new WaterBlock() { + position = "-200 -136 34.9178"; + rotation = "1 0 0 0"; + scale = "192 288 9.27051"; + liquidType = "CrustyLava"; + density = "1"; + viscosity = "15"; + waveMagnitude = "0"; + surfaceTexture = "LiquidTiles/Lava"; + surfaceOpacity = "1"; + envMapTexture = "desert/skies/d_n_move1"; + envMapIntensity = "0.5"; + submergeTexture[0] = "special/lavadeath_1"; + submergeTexture[1] = "special/lavadeath_2"; + removeWetEdges = "1"; + locked = "true"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Fracas.mis b/base/missions/Fracas.mis new file mode 100644 index 0000000..dca0306 --- /dev/null +++ b/base/missions/Fracas.mis @@ -0,0 +1,657 @@ +// MissionTypes = Hunters DM +// DisplayName = Fracas + +//--- MISSION QUOTE BEGIN --- +//A thousand worlds shall be rent with fire, and even the Immortals shall tremble. +// -- The Fenecian Prophecy, 3941 CE +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[Hunters]Nexus is located atop center tower +//Hidden weapon caches can be found in addition to inventory stations +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + cdTrack = "4"; + DM_timeLimit = "25"; + powerCount = "0"; + musicTrack = "badlands"; + Hunters_timeLimit = "25"; + DM_scoreLimit = "35"; + + new MissionArea(MissionArea) { + area = "-672 -8 656 832"; + flightCeiling = "2000"; + flightCeilingRange = "50"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.600000 0.600000 0.600000 1.000000"; + ambient = "0.200000 0.200000 0.200000 1.000000"; + position = "-1024 -1024 0"; + locked = "true"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/baddet2"; + terrainFile = "Fracas.ter"; + squareSize = "8"; + emptySquares = "304722 436049 436305 436561 436817 437073 371794 437585 437841 438097 438353 438609 438865 439121 373841 308562 178509 178521 178765 178777 114259 245586 376913 246098"; + position = "-1024 -1024 0"; + locked = "true"; + hazeDistance = "250"; + visibleDistance = "1200"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "60"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + conjoinBowlDev = "20"; + position = "0 0 0 1"; + locked = "true"; + rotation = "0 0 0 0"; + coverage = "0"; + scale = "1 1 1"; + GraphFile = "Fracas.nav"; + }; + new SimGroup(BaseItems) { + + new InteriorInstance() { + position = "-353 403.88 57.103"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + interiorFile = "xbase2.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_3"; + locked = "true"; + }; + new Item() { + position = "-360.86 74.72 145.245"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "EnergyPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-361.446 76.38 165.035"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SniperRifle"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new InteriorInstance() { + position = "-359.62 77.29 125.897"; + rotation = "0 0 -1 66.4631"; + scale = "1 1 1"; + interiorFile = "xmiscb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Item() { + position = "-362.963 361 40.2874"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "CloakingPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-342.921 361.09 39.5867"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Trigger(NexusTrigger) { + position = "-375.375 531.501 117.54"; + rotation = "1 0 0 0"; + scale = "42.8074 38.259 27.2131"; + dataBlock = "gameTrigger"; + polyhedron = "0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000 -0.0000000 -1.0000000 -0.0000000 -0.0000000 -0.0000000 1.0000000"; + locked = "true"; + missionTypesList = "Hunters"; + }; + new Item() { + position = "-411.8 577.28 180.749"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Mine"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new InteriorInstance() { + position = "-412.384 577.24 177.628"; + rotation = "0 0 -1 45.2636"; + scale = "1 1 1"; + interiorFile = "xmiscc.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new WayPoint() { + position = "-354.953 515.87 117.964"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Nexus"; + team = "0"; + locked = "true"; + missionTypesList = "Hunters"; + }; + new WayPoint() { + position = "-354.953 515.87 117.964"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Stronghold"; + team = "0"; + locked = "true"; + missionTypesList = "DM"; + }; + }; + new Sky(Sky) { + position = "-1024 -1024 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "600"; + useSkyTextures = "1"; + SkySolidColor = "0.190000 0.235000 0.210000 0.000000"; + fogDistance = "350"; + fogColor = "0.900000 0.700000 0.500000 1.000000"; + fogVolume1 = "120 100 100"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "sky_badlands_cloudy.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 0.000000"; + locked = "true"; + cloudSpeed0 = "0.001000 0.001000"; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "-398.089 549.2 169.347"; + rotation = "0 0 1 127.77"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-314.557 264.42 122.593"; + rotation = "0 0 -1 15.4698"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-343.698 457.75 53.1268"; + rotation = "0 0 1 175.898"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-352.099 402.705 36.1195"; + rotation = "0 0 1 180.482"; + scale = "1 1 0.887068"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-366.087 443.905 50.1832"; + rotation = "0.114121 -0.0397281 0.992672 38.6506"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-352.832 504.358 20.0556"; + rotation = "-0.00759312 -0.0848953 0.996361 190.185"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + providesPower = "1"; + + new SimGroup(Team1) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-351.764 404.28 80.2002"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "160"; + sphereWeight = "100"; + indoorWeight = "65"; + outdoorWeight = "35"; + locked = "true"; + }; + }; + new SimGroup(AIObjectives) { + }; + }; + new SimGroup(team0) { + + new SimGroup(AIObjectives) { + }; + }; + new StaticShape() { + position = "-352.84 454.239 42.605"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "33"; + }; + new StaticShape() { + position = "-340.288 510.131 11.105"; + rotation = "0 0 1 89.9546"; + scale = "1 1 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "34"; + }; + new StaticShape() { + position = "-347.276 514.106 101.61"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "35"; + }; + new StaticShape() { + position = "-293.885 463.911 81.1"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "36"; + }; + new StaticShape() { + position = "-356.287 350.896 31.1"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "37"; + }; + new Item(Nexus) { + position = "-355.472 513.94 125.722"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Nexus"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + flashThreadDir = "1"; + locked = "true"; + missionTypesList = "Hunters"; + Target = "38"; + }; + }; + new SimGroup(Ambiance) { + + new TSStatic() { + position = "-309.457 287.51 58.8317"; + rotation = "-0.273478 -0.961685 0.0192892 74.0213"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-361.169 319.13 65.1"; + rotation = "0 0 -1 30.3667"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-336.526 334.973 59.1"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable4l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-331.166 329.89 59.1368"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-331.982 329.87 61.17"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-370.334 349.35 59.1814"; + rotation = "0 0 1 89.3814"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-376.047 402.12 47.1708"; + rotation = "0 0 -1 89.9543"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-340.807 410.82 47.1133"; + rotation = "0 0 -1 23.4912"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-367.748 419.5 31.1066"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-390.637 85.43 130.14"; + rotation = "0 1 0 39.5341"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new AudioEmitter() { + position = "-438.696 678.97 238.174"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/rockslide1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "45000"; + maxLoopGap = "90000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-97.966 463.1 156.539"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/rockslide2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "34000"; + maxLoopGap = "66000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-278.391 22.41 204.287"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/rockslide1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "30000"; + maxLoopGap = "50000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-39.82 373.21 122.06"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/moaningwind1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new TSStatic() { + position = "-367.347 528.206 65.4362"; + rotation = "-0.157476 -0.0524344 0.98613 135.494"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-375.934 512.892 65.7323"; + rotation = "0 0 -1 89.5637"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-335.297 509.785 66.9075"; + rotation = "0.57511 0.581353 0.575568 119.617"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-375.391 514.331 66.6247"; + rotation = "-0.0210077 0.999777 0.00210784 90.5401"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-375.242 517.746 64.4774"; + rotation = "-0.00261531 -0.0680204 -0.99768 88.2906"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-304.838 559.706 69.4229"; + rotation = "-0.0545916 -0.11748 0.991574 50.2189"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + new StaticShape() { + position = "-355.479 513.94 125.703"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "NexusBase"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + missionTypesList = "Hunters"; + Target = "-1"; + }; + new StaticShape() { + position = "-355.479 513.94 133.329"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "NexusCap"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + missionTypesList = "Hunters"; + Target = "-1"; + }; + new TSStatic() { + position = "-381.568 367.53 47.0343"; + rotation = "0.0149336 0.0747557 0.99709 90.2762"; + scale = "2.96362 2.42373 3.00128"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-375.949 407.023 47.17"; + rotation = "0 0 -1 89.9543"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-376.017 404.179 49.17"; + rotation = "0 0 -1 89.9543"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-376.139 406.377 51.17"; + rotation = "0 0 -1 89.9543"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + new Lightning() { + position = "-326.556 397.364 234.911"; + rotation = "1 0 0 0"; + scale = "868.945 957.948 445.077"; + dataBlock = "DefaultStorm"; + strikesPerMinute = "9"; + strikeWidth = "5"; + chanceToHitTarget = "0.95"; + strikeRadius = "27"; + boltStartRadius = "20"; + color = "1.000000 1.000000 1.000000 1.000000"; + fadeColor = "0.100000 0.100000 1.000000 1.000000"; + useFog = "1"; + locked = "true"; + }; + new TSStatic() { + position = "-658.249 792.016 170.221"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "statue_base.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-658.276 792.143 173.5"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "statue_lfemale.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-376.306 407.68 49.17"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Gauntlet.mis b/base/missions/Gauntlet.mis new file mode 100644 index 0000000..e9c873c --- /dev/null +++ b/base/missions/Gauntlet.mis @@ -0,0 +1,3214 @@ +// MissionTypes = Siege + +//--- MISSION QUOTE BEGIN --- +//Fire only burns the faithless. +// -- Harbingers of Phoenix saying +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[Siege]Each tower contains a generator powering defenders' main forcefield +//[Siege]Destroy all generators to kill defender forcefields +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + musicTrack = "desert"; + cdTrack = "6"; + powerCount = "0"; + + new MissionArea(MissionArea) { + area = "-608 -952 1088 1136"; + flightCeiling = "300"; + flightCeilingRange = "20"; + locked = "true"; + }; + new Sky(Sky) { + position = "0 0 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "700"; + useSkyTextures = "1"; + SkySolidColor = "0.365000 0.390000 0.420000 0.000000"; + fogDistance = "200"; + fogColor = "0.540000 0.540000 0.500000 1.000000"; + fogVolume1 = "0 0 0"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "sky_desert_blue.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + locked = "true"; + cloudSpeed0 = "0.000150 0.000050"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.800000 0.800000 0.800000 1.000000"; + ambient = "0.450000 0.450000 0.450000 1.000000"; + rotation = "1 0 0 0"; + locked = "true"; + scale = "1 1 1"; + position = "0 0 0"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/desertdet1"; + terrainFile = "Gauntlet.ter"; + squareSize = "8"; + emptySquares = "333158 287371 289433 292507 292748 97431 229270 229526 229782"; + locked = "true"; + position = "-1024 -1024 0"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "65"; + cullDensity = "0.1"; + customArea = "0 0 0 0"; + GraphFile = "Gauntlet.nav"; + rotation = "0 0 0 0"; + coverage = "0"; + locked = "true"; + scale = "1 1 1"; + conjoinBowlDev = "20"; + position = "0 0 0 1"; + }; + new InteriorInstance() { + position = "140.209 -171.275 86.7623"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pmisc2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "115.802 30.4655 112.07"; + rotation = "0.00747397 -0.0299947 0.999522 152.029"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "251.943 -193.277 100.176"; + rotation = "0.41746 0.113291 -0.901605 33.5035"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + + new SimGroup(Team2) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "187.316 -4.9771 68.391"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new SimGroup(BunkerPowered) { + + new StaticShape(Team2generatorLarge1) { + position = "114.695 -236.202 71.1529"; + rotation = "0 0 1 89.5639"; + scale = "1 1 1"; + nameTag = "Bunker 1"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2generatorLarge2) { + position = "201.307 -171.776 53.1292"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Bunker 2"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2generatorLarge3) { + position = "220.274 -75.7459 47.4929"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Bunker 3"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2generatorLarge4) { + position = "122.055 -68.2083 63.2656"; + rotation = "0 0 1 89.5639"; + scale = "1 1 1"; + nameTag = "Bunker 4"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new SimGroup(Bunker1) { + + new InteriorInstance() { + position = "118.967 -235.912 74.1635"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pbunk1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape(Team2StationInventory1) { + position = "95.2001 -235.966 75.6614"; + rotation = "0 0 1 89.5639"; + scale = "1 1 1"; + nameTag = "Bunker 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Bunker2) { + + new InteriorInstance() { + position = "197.033 -172.03 56.1398"; + rotation = "0 0 1 180.482"; + scale = "1 1 1"; + interiorFile = "pbunk1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape(Team2StationInventory2) { + position = "220.799 -172.175 57.6378"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Bunker 2"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Bunker3) { + + new StaticShape(Team2StationInventory3) { + position = "239.766 -76.1451 52.0015"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Bunker 3"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "216 -76 50.5035"; + rotation = "0 0 1 180.482"; + scale = "1 1 1"; + interiorFile = "pbunk1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + }; + new SimGroup(Bunker4) { + + new InteriorInstance() { + position = "126.327 -67.9183 66.2762"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pbunk1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape(Team2StationInventory4) { + position = "102.56 -67.973 67.7742"; + rotation = "0 0 1 89.5639"; + scale = "1 1 1"; + nameTag = "Bunker 4"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(MainBaseFFields) { + + new SimGroup(field2) { + + new ForceFieldBare(forceField2) { + position = "183.972 -29.2255 61.25"; + rotation = "1 0 0 0"; + scale = "8.5 0.1 9.25"; + dataBlock = "defaultTeamSlowFieldBare"; + triggerCount = "0"; + color = "0.500000 0.500000 1.000000 1.000000"; + locked = "true"; + }; + }; + }; + }; + new SimGroup(MainPowered) { + + new Turret(Team2TurretBaseLarge1) { + position = "139.716 -171.299 91.382"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "Base Compound"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + originalBarrel = "PlasmaBarrelLarge"; + }; + new InteriorInstance() { + position = "188.092 -14.516 58.4005"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + interiorFile = "pbunk3.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape(Team2generatorLarge5) { + position = "188.177 55.5101 44.3984"; + rotation = "0 0 1 180.091"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory5) { + position = "170.387 56.6136 44.394"; + rotation = "-0 0 -1 89.9543"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory6) { + position = "170.383 51.6136 44.394"; + rotation = "-0 0 -1 89.9543"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory7) { + position = "170.375 41.6136 44.394"; + rotation = "-0 0 -1 89.9543"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory8) { + position = "170.371 36.6136 44.394"; + rotation = "-0 0 -1 89.9543"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory9) { + position = "170.4 41.475 50.3957"; + rotation = "-0 0 -1 89.9543"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory10) { + position = "170.396 36.475 50.3957"; + rotation = "-0 0 -1 89.9543"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory11) { + position = "170.408 51.475 50.3957"; + rotation = "-0 0 -1 89.9543"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory12) { + position = "170.412 56.475 50.3957"; + rotation = "-0 0 -1 89.9543"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Turret(Team2SentryTurret1) { + position = "205.45 5.4293 37.7286"; + rotation = "-1 0 0 90"; + scale = "1 1 1"; + nameTag = "Control Switch"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + }; + new SimGroup(field3) { + + new ForceFieldBare() { + position = "186.07 25.4553 43.3492"; + rotation = "1 0 0 0"; + scale = "4.08823 4.10441 0.879177"; + dataBlock = "defaultForceFieldBare"; + color = "0.500000 0.500000 1.000000 1.000000"; + locked = "true"; + }; + }; + }; + new StaticShape(Team0flipflop1) { + position = "188.098 11.7635 32.4013"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Main Control"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + scoreValue = "5"; + locked = "true"; + }; + new WayPoint() { + position = "199.172 -171.42 96.1636"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Bunker 2"; + team = "0"; + locked = "true"; + }; + new WayPoint() { + position = "116.693 -235.964 113.659"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Bunker 1"; + team = "0"; + locked = "true"; + }; + new WayPoint() { + position = "218.486 -75.1646 90.4386"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Bunker 3"; + team = "0"; + locked = "true"; + }; + new WayPoint() { + position = "123.951 -67.938 106.075"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Bunker 4"; + team = "0"; + locked = "true"; + }; + new WayPoint() { + position = "187.809 11.6775 32.3547"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Main Switch"; + team = "0"; + locked = "true"; + }; + new SimGroup(AIObjectives) { + + new SimGroup(RepairTasks1) { + + new AIObjective(AIORepairObject) { + position = "112.758 -236.481 72.6048"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the GeneratorLarge"; + targetObject = "Team2generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3280"; + location = "112.758 -236.481 72.6048"; + weightLevel1 = "3200"; + weightLevel2 = "3200"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "HeavyRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3336"; + }; + new AIObjective(AIORepairObject) { + position = "203.246 -171.513 54.5811"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the GeneratorLarge"; + targetObject = "Team2generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3281"; + location = "203.246 -171.513 54.5811"; + weightLevel1 = "3200"; + weightLevel2 = "3200"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "HeavyRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3336"; + }; + new AIObjective(AIORepairObject) { + position = "222.213 -75.4827 48.9448"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the GeneratorLarge"; + targetObject = "Team2generatorLarge3"; + targetClientId = "-1"; + targetObjectId = "3282"; + location = "222.213 -75.4827 48.9448"; + weightLevel1 = "3200"; + weightLevel2 = "3200"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "HeavyRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3336"; + }; + new AIObjective(AIORepairObject) { + position = "120.118 -68.4877 64.7175"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the GeneratorLarge"; + targetObject = "Team2generatorLarge4"; + targetClientId = "-1"; + targetObjectId = "3283"; + location = "120.118 -68.4877 64.7175"; + weightLevel1 = "3200"; + weightLevel2 = "3200"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "HeavyRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3336"; + }; + new AIObjective(AIORepairObject) { + position = "140.377 -171.298 93.1335"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3306"; + location = "140.377 -171.298 93.1335"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "HeavyRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3336"; + }; + new AIObjective(AIODefendLocation) { + position = "112.758 -236.481 72.6048"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the GeneratorLarge"; + targetObject = "Team2generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3280"; + location = "112.758 -236.481 72.6048"; + weightLevel1 = "3150"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3336"; + }; + new AIObjective(AIODefendLocation) { + position = "203.246 -171.513 54.5811"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the GeneratorLarge"; + targetObject = "Team2generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3281"; + location = "203.246 -171.513 54.5811"; + weightLevel1 = "3150"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3336"; + }; + new AIObjective(AIODefendLocation) { + position = "120.118 -68.4877 64.7175"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the GeneratorLarge"; + targetObject = "Team2generatorLarge4"; + targetClientId = "-1"; + targetObjectId = "3283"; + location = "120.118 -68.4877 64.7175"; + weightLevel1 = "3150"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3336"; + }; + new AIObjective(AIODefendLocation) { + position = "222.213 -75.4827 48.9448"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the GeneratorLarge"; + targetObject = "Team2generatorLarge3"; + targetClientId = "-1"; + targetObjectId = "3282"; + location = "222.213 -75.4827 48.9448"; + weightLevel1 = "3150"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3336"; + }; + }; + new SimGroup(RepairTasks1) { + + new AIObjective(AIORepairObject) { + position = "170.412 56.475 51.9615"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory12"; + targetClientId = "-1"; + targetObjectId = "3323"; + location = "170.412 56.475 51.9615"; + weightLevel1 = "3200"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "HeavyRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3346"; + }; + new AIObjective(AIORepairObject) { + position = "187.915 57.4495 45.9959"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the GeneratorLarge"; + targetObject = "Team2generatorLarge5"; + targetClientId = "-1"; + targetObjectId = "3308"; + location = "187.915 57.4495 45.9959"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "HeavyRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3346"; + }; + }; + new SimGroup(Deploys1) { + + new AIObjective(AIODeployEquipment) { + position = "171.31 13.6183 43.4307"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy Inventory Station"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "171.31 13.6183 43.4307"; + weightLevel1 = "3950"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "InventoryDeployable"; + buyEquipmentSet = "HeavyInventorySet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3349"; + }; + new AIObjective(AIODeployEquipment) { + position = "183.404 -1.49377 47.0762"; + rotation = "0 0 1 179.518"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "183.404 -1.49377 47.0762"; + weightLevel1 = "3930"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "HeavyIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3349"; + }; + new AIObjective(AIODeployEquipment) { + position = "168.124 6.92058 47.4296"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "168.124 6.92058 47.4296"; + weightLevel1 = "3930"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "HeavyIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3349"; + }; + new AIObjective(AIODeployEquipment) { + position = "197.073 8.52547 47.8614"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "197.073 8.52547 47.8614"; + weightLevel1 = "3930"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "HeavyIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3349"; + }; + new AIObjective(AIODeployEquipment) { + position = "184.625 -2.27708 47.1274"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "184.625 -2.27708 47.1274"; + weightLevel1 = "3930"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "HeavyIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3349"; + }; + new AIObjective(AIODefendLocation) { + position = "189.948 1.71902 43.9461"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the Back Entrance"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "189.948 1.71902 43.9461"; + weightLevel1 = "3900"; + weightLevel2 = "3000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3349"; + }; + new AIObjective(AIODeployEquipment) { + position = "197.963 -3.68499 47.3984"; + rotation = "0 0 1 163.293"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "197.963 -3.68499 47.3984"; + weightLevel1 = "3930"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3349"; + }; + }; + new SimGroup(Deploys2) { + + new AIObjective(AIODeployEquipment) { + position = "202.116 29.1566 47.5414"; + rotation = "0 0 1 89.3814"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "202.116 29.1566 47.5414"; + weightLevel1 = "3930"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "HeavyIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3357"; + }; + new AIObjective(AIODeployEquipment) { + position = "193.085 36.2397 39.5804"; + rotation = "0 0 1 89.3814"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "193.085 36.2397 39.5804"; + weightLevel1 = "3930"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "HeavyIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3357"; + }; + new AIObjective(AIODefendLocation) { + position = "198.968 25.0571 44.9767"; + rotation = "0 0 1 158.709"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the FlipFlop"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "198.968 25.0571 44.9767"; + weightLevel1 = "3900"; + weightLevel2 = "3000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3357"; + }; + new AIObjective(AIODeployEquipment) { + position = "182 32.5327 43.5125"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "182 32.5327 43.5125"; + weightLevel1 = "3930"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "HeavyIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3357"; + }; + }; + new AIObjective(AIODefendLocation) { + position = "188.274 -31.2952 82.9537"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the Compound"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "188.274 -31.2952 82.9537"; + weightLevel1 = "3200"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "SniperRifle"; + buyEquipmentSet = "LightSniperChain"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + }; + }; + new SimGroup(Team1) { + providesPower = "1"; + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-178.548 -871.097 60.7946"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new InteriorInstance() { + position = "-179.97 -895.918 52.4711"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pvbay1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape(Team1StationInventory1) { + position = "-158.307 -904.742 53.4643"; + rotation = "0 0 1 89.9543"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory2) { + position = "-158.292 -887.634 53.4643"; + rotation = "0 0 1 89.9543"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory3) { + position = "-211.544 -899.383 53.478"; + rotation = "0 0 -1 90.0457"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory4) { + position = "-211.54 -904.383 53.478"; + rotation = "0 0 -1 90.0457"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory5) { + position = "-212.134 -889.955 60.475"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-180.158 -892.599 51.2"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory6) { + position = "-211.554 -886.811 53.499"; + rotation = "0 0 -1 90.0456"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory7) { + position = "-211.55 -891.81 53.499"; + rotation = "0 0 -1 90.0456"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory8) { + position = "-212.166 -901.905 60.4711"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory9) { + position = "-158.52 -887.57 62.5032"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory10) { + position = "-158.448 -904.27 62.4728"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new SimGroup(AIObjectives) { + + new AIObjective(AIOTouchObject) { + position = "188.098 11.7635 34.035"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0flipflop1"; + mode = "TouchFlipFlop"; + targetObject = "Team0flipflop1"; + targetClientId = "-1"; + targetObjectId = "3329"; + location = "188.098 11.7635 34.035"; + weightLevel1 = "4630"; + weightLevel2 = "3100"; + weightLevel3 = "1500"; + weightLevel4 = "1000"; + offense = "1"; + defense = "0"; + desiredEquipment = "Mortar"; + buyEquipmentSet = "MediumShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "112.758 -236.481 72.6048"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the GeneratorLarge"; + targetObject = "Team2generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3280"; + location = "112.758 -236.481 72.6048"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack PlasmaRifle"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "205.42 5.76036 37.7286"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the SentryTurret"; + targetObject = "Team2SentryTurret1"; + targetClientId = "-1"; + targetObjectId = "3325"; + location = "205.42 5.76036 37.7286"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "187.915 57.4495 45.9959"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the GeneratorLarge"; + targetObject = "Team2generatorLarge5"; + targetClientId = "-1"; + targetObjectId = "3308"; + location = "187.915 57.4495 45.9959"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOMortarObject) { + position = "140.377 -171.298 93.1335"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3306"; + location = "140.377 -171.298 93.1335"; + weightLevel1 = "3200"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "222.213 -75.4827 48.9448"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the GeneratorLarge"; + targetObject = "Team2generatorLarge3"; + targetClientId = "-1"; + targetObjectId = "3282"; + location = "222.213 -75.4827 48.9448"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "MediumShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "120.118 -68.4877 64.7175"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the GeneratorLarge"; + targetObject = "Team2generatorLarge4"; + targetClientId = "-1"; + targetObjectId = "3283"; + location = "120.118 -68.4877 64.7175"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "MediumEnergySet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "203.246 -171.513 54.5811"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the GeneratorLarge"; + targetObject = "Team2generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3281"; + location = "203.246 -171.513 54.5811"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + }; + new ForceFieldBare() { + position = "-192.321 -851.036 62.8612"; + rotation = "1 0 0 0"; + scale = "0.25 5.25616 5.72361"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + }; + new ForceFieldBare() { + position = "-193.811 -844.216 62.8997"; + rotation = "0 0 -1 90"; + scale = "0.25 6.20879 5.72361"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + }; + new Turret() { + position = "-193.426 -814.655 49.4552"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + originalBarrel = "PlasmaBarrelLarge"; + }; + new Item() { + position = "-204.795 -895.854 61.1125"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-179.877 -928.572 54.076"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + }; + new SimGroup(team0) { + + new Item() { + position = "119.139 -235.921 75.8298"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "196.861 -172.019 57.8061"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "126.499 -67.9272 67.9425"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "215.828 -75.9896 52.1698"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new SimGroup(AIObjectives) { + }; + }; + }; + new SimGroup(RandomOrganics) { + + new SimGroup(Addition1PhoenixPlant5) { + + new TSStatic() { + position = "292 -188 70.8625"; + rotation = "0.0998371 -0.2011 -0.97447 62.304"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "324 -84 96.2063"; + rotation = "0.0281555 -0.0141936 0.999503 114.026"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "124 -84 66.2375"; + rotation = "-0.000971651 0.00290395 0.999995 127"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "84 20 98.6438"; + rotation = "0.153927 0.152375 0.976262 221.087"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "268 -108 67.7688"; + rotation = "-0.0398282 -0.0134269 0.999116 200.982"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "188 -60 51.8"; + rotation = "-0.891358 0.0717711 -0.447583 17.7592"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "124 20 69.6906"; + rotation = "-0.0169087 0.0448565 0.99885 213.963"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "100 -180 75.0344"; + rotation = "0.0589137 0.30882 0.949294 67.731"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "172 -228 60.0499"; + rotation = "0 0 1 43"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "212 -108 63.6438"; + rotation = "-0.00155468 -0.140709 0.99005 82.5678"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "100 -172 74.4249"; + rotation = "-0.156881 0.33053 0.930665 60.5192"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "132 -116 52.2687"; + rotation = "0.185001 0.0463582 0.981644 92.0611"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "76 -108 78.3781"; + rotation = "-0.0674586 -0.103245 -0.992366 27.1998"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "148 -100 50.5813"; + rotation = "-0.0636886 0.14365 0.987577 33.3922"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "220 -220 60.1907"; + rotation = "0.0517505 0.0054553 0.998645 52.0612"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "52 -156 78.425"; + rotation = "-0.0156173 -0.0182861 -0.999711 81.0163"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "276 -244 77.9875"; + rotation = "0.0684632 0.049103 -0.996445 58.1736"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "156 -124 51.0032"; + rotation = "0.0596954 0.0457621 0.997167 117.145"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "116 12 70.4719"; + rotation = "0.172433 -0.0154705 -0.9849 30.4386"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "28 -252 98.0031"; + rotation = "-0.0171627 -0.0480015 0.9987 176.005"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "108 -36 70.6906"; + rotation = "-0.0157814 0.0520015 -0.998522 114.078"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "84 -260 79.4563"; + rotation = "-0.047025 -0.26649 -0.96269 45.5341"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "284 -124 68.3938"; + rotation = "0.00808342 0.00420796 -0.999958 35.0013"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "316 -228 79.1593"; + rotation = "-0.0380264 -0.0316612 0.998775 217.957"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "132 -52 68.175"; + rotation = "-0.202426 -0.0437711 -0.978319 99.242"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition2PhoenixPlant5) { + + new TSStatic() { + position = "28 -460 84.5344"; + rotation = "0.00795359 0.0410383 0.999126 141.031"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "172 -588 73.3469"; + rotation = "-0.113528 0.00818609 -0.993501 119.326"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "28 -420 81.8782"; + rotation = "0.0207971 0.180618 0.983333 62.8535"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "76 -508 87.2375"; + rotation = "0.0439526 -0.0118088 -0.998964 116.054"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "220 -652 77.1126"; + rotation = "-0.0656082 0.161938 0.984618 216.469"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "92 -404 84.5344"; + rotation = "0.0252465 -0.202135 -0.979032 110.144"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "108 -652 79.05"; + rotation = "-0.0131997 0.0357865 0.999272 121.036"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "140 -492 79.9407"; + rotation = "0.169617 -0.128554 0.97709 91.3277"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "140 -508 80.3313"; + rotation = "0.131918 0.0391182 0.990489 219.649"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "212 -564 64.55"; + rotation = "0.0295791 0.100114 0.994536 193.924"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "36 -676 60.6438"; + rotation = "0.118952 0.026937 -0.992535 62.3797"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "172 -516 78.2062"; + rotation = "0.0232338 0.0199145 0.999532 166.007"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-36 -652 78.4562"; + rotation = "0.0286029 -0.00196964 0.999589 208.989"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "92 -500 87.0344"; + rotation = "-0.0201866 -0.00743785 0.999769 214.993"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-4 -468 85.425"; + rotation = "0.0545957 0.095142 0.993965 165.089"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "164 -636 76.3781"; + rotation = "0.577329 -0.767825 0.277734 21.3719"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "164 -556 79.2374"; + rotation = "-0.1498 0.0162232 -0.988583 119.574"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "100 -652 78.7375"; + rotation = "0.0026733 0.00513537 0.999983 215"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "156 -500 78.4875"; + rotation = "-0.010753 -0.0165199 -0.999806 103.01"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "44 -684 63.175"; + rotation = "0.208134 0.0158923 -0.977971 96.2701"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-12 -476 85.2063"; + rotation = "0.126304 0.111119 -0.985748 117.73"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "156 -668 80.4875"; + rotation = "-0.220279 -0.150556 -0.963748 31.0747"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "124 -412 79.3468"; + rotation = "-0.108687 -0.183135 -0.977061 116.199"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition3PhoenixPlant5) { + + new TSStatic() { + position = "-148 -860 76.4093"; + rotation = "0.121658 0.196623 0.972902 84.5645"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-204 -884 78.6281"; + rotation = "0.0092082 0.00670618 0.999935 109.003"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-196 -652 80.9094"; + rotation = "0.777848 0.0750633 -0.623954 25.3874"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-108 -884 75.9094"; + rotation = "0.0238808 -0.163055 0.986328 61.6921"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-140 -844 74.9875"; + rotation = "-0.102074 0.226865 0.968562 81.8068"; + scale = "0.9 0.9 0.9"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-244 -684 59.9874"; + rotation = "0.280537 -0.180795 0.942662 20.1327"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-124 -636 78.675"; + rotation = "0.027194 -0.0153368 0.999512 68.0256"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-316 -876 71.7687"; + rotation = "-0.154958 0.125853 -0.979872 56.9714"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-236 -868 78.3469"; + rotation = "-0.0104277 0.00238257 0.999943 227.998"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-60 -868 68.5188"; + rotation = "0.0129671 -0.00170595 0.999914 190.999"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-188 -732 58.1125"; + rotation = "-0.00200073 -0.113879 0.993493 179.006"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-292 -804 68.4094"; + rotation = "-0.00486267 0.00286434 0.999984 29.0004"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-92 -916 93.8313"; + rotation = "0.0411618 -0.221057 0.974392 18.465"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-244 -844 77.9719"; + rotation = "0.0170943 -0.0341689 0.99927 164.011"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-60 -876 68.425"; + rotation = "0.00786619 0.000625129 0.999969 46.0012"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-148 -724 59.9406"; + rotation = "-0.00397822 -0.00731573 0.999965 151.001"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-108 -724 59.9093"; + rotation = "0.00102535 -0.000973021 0.999999 183"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-116 -756 59.8937"; + rotation = "-1.75963e-05 -0.00201596 0.999998 88.9998"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-252 -804 76.8624"; + rotation = "0.425565 0.276366 -0.861694 27.7132"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-244 -772 55.1593"; + rotation = "-0.336767 0.0341253 -0.940969 56.8701"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-308 -932 78.9562"; + rotation = "0.0052408 -0.0422508 0.999093 159.018"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-220 -692 64.4406"; + rotation = "0.183213 0.17966 -0.966517 68.8082"; + scale = "0.6 0.6 0.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-276 -916 78.7062"; + rotation = "0.00446302 0.00713144 0.999965 187"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition4PhoenixPlant1) { + + new TSStatic() { + position = "-36 -596 80.2969"; + rotation = "0 0 1 64"; + scale = "1.3 1.3 1.3"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-132 -676 68.625"; + rotation = "0 0 1 1.9999"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-84 -724 59.6875"; + rotation = "0 0 1 228"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "20 -788 79.1406"; + rotation = "0 0 -1 116"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-124 -612 79.3125"; + rotation = "0 0 1 72.0002"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-164 -524 105.328"; + rotation = "0 0 1 88"; + scale = "1.4 1.4 1.4"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "12 -644 76.4375"; + rotation = "0 0 1 235"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-12 -548 83.4844"; + rotation = "0 0 1 123"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-132 -700 64.8281"; + rotation = "0 0 -1 116"; + scale = "0.8 0.8 0.8"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-172 -508 106"; + rotation = "0 0 1 181"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-156 -556 103.625"; + rotation = "0 0 1 38"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-148 -636 80.8125"; + rotation = "0 0 1 57"; + scale = "1.3 1.3 1.3"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "60 -684 67.5626"; + rotation = "0 0 1 163"; + scale = "0.9 0.9 0.9"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-188 -708 61.8437"; + rotation = "0 0 -1 111"; + scale = "1.3 1.3 1.3"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "36 -716 62"; + rotation = "0 0 1 42"; + scale = "0.9 0.9 0.9"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-124 -628 78.7812"; + rotation = "0 0 1 170"; + scale = "0.9 0.9 0.9"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "36 -548 85.7656"; + rotation = "0 0 -1 119"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "100 -596 78.6875"; + rotation = "0 0 1 32"; + scale = "0.8 0.8 0.8"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-60 -796 78.0781"; + rotation = "0 0 -1 55.0003"; + scale = "0.8 0.8 0.8"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-164 -756 56.9844"; + rotation = "0 0 1 169"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-84 -524 104.328"; + rotation = "0 0 -1 84.9994"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-84 -660 79.4843"; + rotation = "0 0 -1 76"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-124 -764 60.1562"; + rotation = "0 0 1 201"; + scale = "1.4 1.4 1.4"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-28 -756 50.9375"; + rotation = "0 0 1 183"; + scale = "0.9 0.9 0.9"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-148 -788 56.1407"; + rotation = "0 0 1 9.99989"; + scale = "1.4 1.4 1.4"; + shapeName = "porg1.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition5PhoenixPlant1) { + + new TSStatic() { + position = "148 -388 68.0938"; + rotation = "0 0 1 26"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "276 -548 68.4063"; + rotation = "0 0 1 122"; + scale = "1.4 1.4 1.4"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "172 -380 65.5782"; + rotation = "0 0 -1 80.0004"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "372 -508 103.609"; + rotation = "0 0 1 7.00001"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "364 -620 79.8907"; + rotation = "0 0 -1 41.9998"; + scale = "1.3 1.3 1.3"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "364 -428 104.156"; + rotation = "0 0 1 227"; + scale = "0.8 0.8 0.8"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "188 -468 62.9844"; + rotation = "0 0 1 107"; + scale = "0.8 0.8 0.8"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "348 -500 103.484"; + rotation = "0 0 1 73"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "356 -500 103.719"; + rotation = "0 0 -1 26"; + scale = "0.9 0.9 0.9"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "108 -460 86.4062"; + rotation = "0 0 -1 113"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "132 -436 81.1094"; + rotation = "0 0 1 13"; + scale = "0.9 0.9 0.9"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "396 -484 103.344"; + rotation = "0 0 1 210"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "220 -444 58.4844"; + rotation = "0 0 1 167"; + scale = "0.8 0.8 0.8"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "372 -668 102.063"; + rotation = "0 0 1 99.0002"; + scale = "0.8 0.8 0.8"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "332 -404 100.266"; + rotation = "0 0 -1 73.0006"; + scale = "0.8 0.8 0.8"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "380 -420 104.203"; + rotation = "0 0 -1 17.9997"; + scale = "0.8 0.8 0.8"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "284 -468 68.875"; + rotation = "0 0 1 42"; + scale = "0.8 0.8 0.8"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "156 -508 78.8125"; + rotation = "0 0 -1 101"; + scale = "0.8 0.8 0.8"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "276 -532 68.2813"; + rotation = "0 0 1 102"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "284 -588 74.7499"; + rotation = "0 0 -1 44"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "116 -468 85.0625"; + rotation = "0 0 -1 17.9997"; + scale = "0.8 0.8 0.8"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "300 -564 69.4687"; + rotation = "0 0 -1 23.9998"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "244 -580 64.2344"; + rotation = "0 0 1 200"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "284 -476 68.7031"; + rotation = "0 0 1 178"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "148 -380 68.625"; + rotation = "0 0 1 54"; + scale = "0.9 0.9 0.9"; + shapeName = "porg1.dts"; + locked = "true"; + }; + }; + }; + new AudioEmitter() { + position = "91.1828 -52.9183 96.3989"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/drywind.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.25"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new SimGroup(RandomRocks) { + + new SimGroup(Addition11prock6) { + + new InteriorInstance() { + position = "-456.552 -49.2896 97.5817"; + rotation = "0.999405 0.00308934 -0.0343471 194.339"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "211.448 -760.29 99.2678"; + rotation = "0.487786 0.872775 0.0181121 176.461"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "149.448 -792.29 77.3624"; + rotation = "0.0671984 -0.748146 0.660122 90.9385"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-340.552 -708.29 94.3125"; + rotation = "0.451074 0.892276 0.01938 176.551"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "334.448 -133.29 73.3529"; + rotation = "0.998899 0.0281986 -0.0374927 194.235"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-250.552 -159.29 76.5653"; + rotation = "0 0 1 1.95478"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "282.448 -720.29 79.2079"; + rotation = "0.987324 0.12894 0.092552 182.25"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-82.5519 -21.2896 87.0741"; + rotation = "0.241298 0.380846 -0.892598 88.6893"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-387.552 -164.29 77.2676"; + rotation = "0 0 1 5.09628"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-125.552 -506.29 110"; + rotation = "0.45691 0.889306 0.0191825 176.536"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "237.448 -147.29 50.3496"; + rotation = "0.0878005 -0.726043 0.682021 92.7212"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-378.552 -153.29 69.5872"; + rotation = "0.985532 0.142165 0.0922829 182.391"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-450.552 -78.2896 87.2364"; + rotation = "0.987363 0.128639 0.0925579 182.246"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-81.5519 -410.29 60.1477"; + rotation = "0.998417 0.0371215 0.0422619 82.6801"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-136.552 -266.29 77.8565"; + rotation = "0.999295 0.0122217 -0.0354937 194.302"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-117.552 -235.29 84.5016"; + rotation = "0.988318 0.120964 0.0927062 182.164"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-344.552 -669.29 94.4819"; + rotation = "0.998971 0.0259166 -0.0372077 194.245"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "100.448 -19.2896 78.8727"; + rotation = "0.997037 0.0507641 0.0577935 82.7586"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-351.552 -657.29 94.3174"; + rotation = "0.243956 0.371016 -0.896009 90.4219"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-135.552 -140.29 85.5828"; + rotation = "0 0 1 4.48543"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-122.552 -16.2896 77.9119"; + rotation = "0.999231 0.0258784 0.0294618 82.6337"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-414.552 -299.29 78.4887"; + rotation = "0.474567 0.880023 0.0185756 176.493"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-406.552 -296.29 78.4307"; + rotation = "0.991162 0.0944265 0.093175 181.879"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-380.552 -325.29 78.3212"; + rotation = "0 0 1 0.125115"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-251.552 -634.29 78.3551"; + rotation = "0.241567 0.37986 -0.892945 88.8599"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-400.552 -313.29 77.6385"; + rotation = "0 0 1 2.82749"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "267.448 -430.29 63.5298"; + rotation = "0 0 1 0.697732"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-203.552 -294.29 67.7361"; + rotation = "0.990395 0.102275 0.0930434 181.963"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-364.552 -204.29 78.752"; + rotation = "0 0 1 1.13435"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-210.552 -124.29 62.8916"; + rotation = "0.999846 0.0115742 0.0131769 82.5987"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-212.552 -186.29 77.9168"; + rotation = "0 0 1 0.489388"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-198.552 -711.29 60.6723"; + rotation = "0.9883 0.121115 0.0927033 182.166"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-125.552 -299.29 75.4698"; + rotation = "0.23974 0.386541 -0.890568 87.7089"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "92.4481 -157.29 68.757"; + rotation = "0.24164 0.379592 -0.89304 88.907"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-329.552 -289.29 79.3838"; + rotation = "0.239915 0.385904 -0.890797 87.8178"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-217.552 -777.29 54.1338"; + rotation = "0 0 1 1.51849"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-87.5519 -770.29 74.637"; + rotation = "0.458805 0.888331 0.019118 176.532"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-47.5519 -589.29 92.5941"; + rotation = "0.986389 0.136006 0.0924103 182.325"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-208.552 -143.29 76.1957"; + rotation = "0.0744806 -0.740525 0.667889 91.5495"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-311.552 -73.2896 87.2428"; + rotation = "0.986225 0.137208 0.0923858 182.339"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-350.552 -554.29 68.9049"; + rotation = "0.989957 0.106498 0.0929701 182.009"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "103.448 -412.29 83.1059"; + rotation = "0.480589 0.876754 0.0183654 176.478"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "141.448 -198.29 72.3953"; + rotation = "0.990241 0.103783 0.0930174 181.979"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "110.448 -691.29 77.7967"; + rotation = "0.998689 0.0337811 0.0384589 82.6646"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-6.55191 -520.29 85.4549"; + rotation = "0.998827 0.0319582 0.0363835 82.6566"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "1.44809 -512.29 86.7425"; + rotation = "0 0 1 2.14676"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "252.448 -218.29 54.1096"; + rotation = "0.9851 0.145167 0.0922194 182.424"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "162.448 -178.29 68.7364"; + rotation = "0.999529 0.0202503 0.0230545 82.6171"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-177.552 -18.2896 80.2377"; + rotation = "0 0 1 2.94971"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(Addition12prock7) { + + new InteriorInstance() { + position = "-377.552 -582.29 68.7767"; + rotation = "1 0 0 0"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-38.5519 -19.2896 82.5194"; + rotation = "0.448761 0.89344 0.0194579 176.556"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "10.4481 -477.29 86.5378"; + rotation = "0.999431 -0.00589175 -0.0332167 194.373"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-110.552 -612.29 78.95"; + rotation = "0.998701 0.0336292 0.038286 82.6641"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-254.552 -497.29 78.2141"; + rotation = "0.998686 0.0341305 -0.0382327 194.209"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-461.552 -572.29 60.0226"; + rotation = "0 0 1 2.37359"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-102.552 -407.29 62.9771"; + rotation = "0.470405 0.882252 0.0187199 176.503"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-278.552 -683.29 70.6124"; + rotation = "0.473896 0.880384 0.0185989 176.494"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "128.448 -364.29 70.9036"; + rotation = "0.0714821 -0.743687 0.664695 91.2956"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-61.5519 -154.29 104.038"; + rotation = "0.99756 0.0460697 0.0524491 82.7288"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-148.552 -108.29 83.2921"; + rotation = "0.999775 0.0140102 0.0159502 82.6028"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-387.552 -778.29 69.9393"; + rotation = "0.999215 0.0164829 -0.0360277 194.284"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-41.5519 -262.29 95.5278"; + rotation = "0 0 1 5.55019"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-312.552 -602.29 72.9251"; + rotation = "0.999428 -0.00147729 -0.0337726 194.356"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "191.448 -461.29 60.8619"; + rotation = "0.495612 0.868361 0.0178339 176.443"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-183.552 -447.29 78.8497"; + rotation = "0 0 1 4.46812"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-154.552 -503.29 107.967"; + rotation = "0.997463 0.0469787 0.053484 82.7345"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-391.552 -358.29 78.7483"; + rotation = "0.448897 0.893372 0.0194533 176.556"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "25.4481 -474.29 86.1089"; + rotation = "0 0 1 3.49058"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "0.44809 -435.29 80.1545"; + rotation = "0.459753 0.887842 0.0190857 176.529"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "11.4481 -5.28961 78.8053"; + rotation = "0.0689809 -0.746299 0.662026 91.0863"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "198.448 -502.29 60.1611"; + rotation = "0.989812 0.107855 0.0929462 182.023"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "217.448 -432.29 59.9942"; + rotation = "0.998105 0.0406118 0.0462354 82.6979"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-182.552 -490.29 98.6802"; + rotation = "0 0 1 6.16103"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-396.552 -88.2896 86.9834"; + rotation = "0.989861 0.107403 0.0929542 182.018"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-136.552 -154.29 81.7752"; + rotation = "0.243839 0.371453 -0.89586 90.3434"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "328.448 -8.28961 88.044"; + rotation = "0.239238 0.388368 -0.889908 87.398"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-184.552 -183.29 78.8473"; + rotation = "0 0 1 4.39818"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-168.552 -591.29 79.7512"; + rotation = "0.988835 0.116597 0.092788 182.117"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-153.552 -360.29 78.4604"; + rotation = "0.999271 0.0135914 -0.0356654 194.296"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-316.552 -412.29 101.304"; + rotation = "0.452976 0.891313 0.0193158 176.546"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-115.552 -606.29 79.7615"; + rotation = "0.0752005 -0.73976 0.668655 91.6113"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "79.4481 -384.29 76.7114"; + rotation = "0 0 1 5.23602"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "206.448 -550.29 62.2843"; + rotation = "0.241347 0.380667 -0.892661 88.7202"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-211.552 -154.29 77.1515"; + rotation = "0.0837208 -0.730555 0.677702 92.3545"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-421.552 -456.29 80.9903"; + rotation = "0.242509 0.376386 -0.89416 89.4669"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "257.448 -544.29 58.5275"; + rotation = "0.998605 0.0348441 0.0396691 82.6692"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-321.552 -74.2896 87.1754"; + rotation = "0.485257 0.874182 0.0182014 176.468"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-270.552 -290.29 86.1055"; + rotation = "0.988006 0.123523 0.0926574 182.191"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "181.448 -362.29 70.8082"; + rotation = "0.0943561 -0.718645 0.688946 93.3245"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-274.552 -651.29 78.1645"; + rotation = "0.998519 0.0359071 0.0408793 82.6744"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-36.5519 -796.29 74.767"; + rotation = "0.23969 0.386724 -0.890502 87.6775"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-195.552 -347.29 60.1562"; + rotation = "0.999377 0.0232929 0.0265183 82.6257"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-166.552 -747.29 57.9329"; + rotation = "0.0951297 -0.71776 0.689762 93.3968"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-289.552 -504.29 68.4224"; + rotation = "0 0 1 3.94438"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-195.552 -410.29 78.5788"; + rotation = "0.489115 0.872032 0.018065 176.458"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-457.552 -354.29 65.1509"; + rotation = "0.985934 0.139311 0.0923424 182.361"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "257.448 -117.29 68.2561"; + rotation = "0.999414 0.00171936 -0.0341748 194.344"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "150.448 -82.2896 55.1644"; + rotation = "0 0 1 3.8747"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Gehenna.mis b/base/missions/Gehenna.mis new file mode 100644 index 0000000..b5a459b --- /dev/null +++ b/base/missions/Gehenna.mis @@ -0,0 +1,1481 @@ +// MissionTypes = Hunters TeamHunters + +//--- MISSION QUOTE BEGIN --- +//Be patient and the enemy shall consume himself. +// -- Diamond Sword saying +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[Hunters TeamHunters]Nexus located over a caldera atop the central mountain +//Five towers with inventory stations +//Map is large; placing sensors helps you find 'prey' +//--- MISSION STRING END --- + + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + musicTrack = "volcanic"; + powerCount = "0"; + Hunters_timeLimit = "25"; + cdTrack = "3"; + Team_Hunters_timeLimit = "25"; + + new MissionArea(MissionArea) { + area = "-432 -656 992 1200"; + flightCeiling = "2000"; + flightCeilingRange = "50"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.800000 0.800000 0.800000 1.000000"; + ambient = "0.400000 0.400000 0.400000 1.000000"; + rotation = "1 0 0 0"; + locked = "true"; + scale = "1 1 1"; + position = "-1024 -1024 0"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/lavadet1"; + terrainFile = "Gehenna.ter"; + squareSize = "8"; + locked = "true"; + visibleDistance = "1200"; + hazeDistance = "250"; + position = "-1024 -1024 0"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "55"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + coverage = "0"; + GraphFile = "Gehenna.nav"; + rotation = "0 0 0 0"; + XDimOverSize = "0"; + locked = "true"; + scale = "1 1 1"; + YDimOverSize = "0"; + conjoinBowlDev = "20"; + position = "0 0 0 1"; + }; + new Sky(Sky) { + position = "-536 -1136 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "500"; + useSkyTextures = "1"; + SkySolidColor = "0.365000 0.330000 0.310000 1.000000"; + fogDistance = "225"; + fogColor = "0.450000 0.300000 0.250000 1.000000"; + fogVolume1 = "200 50 55"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "sky_lava_brown.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 -198748244414614883000000000000000000000.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 -222768174765569861000000000000000000000.000000"; + locked = "true"; + cloudSpeed0 = "0.001000 0.001000"; + }; + new SimGroup(ObserverDropPoints) { + powerCount = "0"; + + new Camera() { + position = "63.0383 -4.39411 233.976"; + rotation = "0.0721507 -0.188367 0.979445 138.872"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-84.5914 421.049 91.8946"; + rotation = "0 0 1 105.997"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "130.246 -468.535 82"; + rotation = "0 0 -1 66.6458"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "263.084 -4.95393 156.603"; + rotation = "0.256543 -0.0627804 0.964492 28.474"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + powerCount = "0"; + + new SimGroup(Team1) { + powerCount = "0"; + + new SimGroup(spawnspheres) { + powerCount = "0"; + + new SpawnSphere() { + position = "295.144 371.862 61.7032"; + rotation = "0 0 1 130.061"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "80"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + missionTypesList = "TeamHunters"; + }; + new SpawnSphere() { + position = "-187.403 234.596 75.6892"; + rotation = "0 0 -1 6.87539"; + scale = "1 1 0.809626"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + missionTypesList = "TeamHunters"; + }; + new SpawnSphere() { + position = "476.171 261.308 125.662"; + rotation = "0 0 1 130.061"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + missionTypesList = "Hunters"; + }; + new SpawnSphere() { + position = "260.282 -209.274 112.446"; + rotation = "0 0 1 130.061"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + missionTypesList = "Hunters"; + }; + new SpawnSphere() { + position = "-214.629 -99.2604 91.5018"; + rotation = "0 0 1 130.061"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + missionTypesList = "Hunters"; + }; + }; + }; + new SimGroup(team2) { + powerCount = "0"; + + new SimGroup(spawnspheres) { + powerCount = "0"; + + new SpawnSphere() { + position = "-302.462 -459.008 101.225"; + rotation = "0 0 -1 48.7014"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + missionTypesList = "TeamHunters"; + }; + new SpawnSphere() { + position = "277.523 -563.635 61.3461"; + rotation = "0 0 -1 118.602"; + scale = "1 1 1.0302"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + missionTypesList = "TeamHunters"; + }; + }; + }; + new InteriorInstance() { + position = "89.8795 -58.7261 205.61"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dplat1.dif"; + showTerrainInside = "0"; + locked = "true"; + missionTypesList = "Hunters TeamHunters"; + }; + new InteriorInstance() { + position = "108.28 -28.7261 185.61"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dplat1.dif"; + showTerrainInside = "0"; + locked = "true"; + missionTypesList = "Hunters TeamHunters"; + }; + new InteriorInstance() { + position = "105.28 -88.7261 185.61"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dplat1.dif"; + showTerrainInside = "0"; + locked = "true"; + missionTypesList = "Hunters TeamHunters"; + }; + new InteriorInstance() { + position = "59.8795 -58.7261 185.61"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dplat1.dif"; + showTerrainInside = "0"; + locked = "true"; + missionTypesList = "Hunters TeamHunters"; + }; + new Item(Nexus) { + position = "89.7978 -58.6047 205.61"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Nexus"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + flashThreadDir = "1"; + locked = "true"; + Target = "33"; + missionTypesList = "Hunters TeamHunters"; + }; + new WayPoint() { + position = "89.5709 -58.3712 207.01"; + rotation = "1 0 0 0"; + scale = "0.1 0.1 0.1"; + nameTag = "The Nexus"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "The Nexus"; + team = "0"; + locked = "true"; + missionTypesList = "Hunters TeamHunters"; + }; + new Trigger(NexusTrigger) { + position = "79.4439 -49.5435 192.34"; + rotation = "1 0 0 0"; + scale = "20.8041 18.1619 27.2131"; + dataBlock = "gameTrigger"; + polyhedron = "0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000 -0.0000000 -1.0000000 -0.0000000 -0.0000000 -0.0000000 1.0000000"; + locked = "true"; + missionTypesList = "Hunters TeamHunters"; + }; + new SimGroup(team0) { + powerCount = "2"; + providesPower = "1"; + + new ForceFieldBare(FORCEFIELD) { + position = "226.007 -10.4838 140.044"; + rotation = "1 0 0 0"; + scale = "9.55232 8.42736 1"; + dataBlock = "defaultForceFieldBare"; + locked = "true"; + Target = "34"; + team = "0"; + }; + new ForceFieldBare(FORCEFIELD) { + position = "-90.0292 -116.684 183.242"; + rotation = "1 0 0 0"; + scale = "9.55232 8.42736 1"; + dataBlock = "defaultForceFieldBare"; + locked = "true"; + Target = "35"; + team = "0"; + }; + new InteriorInstance() { + position = "317.046 178.658 63.1775"; + rotation = "0 0 1 236.632"; + scale = "1 1 1"; + interiorFile = "dtowr1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_3"; + locked = "true"; + team = "0"; + }; + new InteriorInstance() { + position = "403.563 -193.869 62.0471"; + rotation = "0 0 -1 67.2186"; + scale = "1 1 1"; + interiorFile = "dtowr1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_3"; + locked = "true"; + team = "0"; + }; + new InteriorInstance() { + position = "60.3802 -471.803 62.1601"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dtowr1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_3"; + locked = "true"; + team = "0"; + }; + new InteriorInstance() { + position = "-321.842 -219.391 63.4496"; + rotation = "0 0 1 164.439"; + scale = "1 1 1"; + interiorFile = "dtowr1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_3"; + locked = "true"; + team = "0"; + }; + new InteriorInstance() { + position = "-22.2284 433.339 62.9738"; + rotation = "0 0 1 139.802"; + scale = "1 1 1"; + interiorFile = "dtowr1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_3"; + locked = "true"; + team = "0"; + }; + new StaticShape() { + position = "328.76 178.09 75.2046"; + rotation = "0 0 1 146.677"; + scale = "1 1 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "36"; + team = "0"; + Trigger = "3353"; + }; + new StaticShape() { + position = "341.11 184.407 -975.383"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "37"; + team = "0"; + }; + new TSStatic() { + position = "328.19 176.965 63.1608"; + rotation = "0 0 -1 37.8152"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + team = "0"; + }; + new StaticShape() { + position = "409.846 -203.678 74.0342"; + rotation = "0 0 1 202.254"; + scale = "1 1 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "38"; + team = "0"; + Trigger = "3357"; + }; + new TSStatic() { + position = "411.481 -188.392 62.19"; + rotation = "1 0 0 23.4913"; + scale = "1 1 1"; + shapeName = "stackable4l.dts"; + locked = "true"; + team = "0"; + }; + new StaticShape() { + position = "53.7353 -481.29 74.3159"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "39"; + team = "0"; + Trigger = "3360"; + }; + new TSStatic() { + position = "54.0822 -481.966 62.1909"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable5l.dts"; + locked = "true"; + team = "0"; + }; + new StaticShape() { + position = "-318.013 -208.534 75.4921"; + rotation = "0 0 1 75.0575"; + scale = "1 1 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "40"; + team = "0"; + Trigger = "3363"; + }; + new StaticShape() { + position = "-23.2358 444.902 75.027"; + rotation = "0 0 1 48.1285"; + scale = "1 1 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "41"; + team = "0"; + Trigger = "3365"; + }; + new TSStatic() { + position = "-30.7756 433.268 62.9963"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + team = "0"; + }; + new InteriorInstance() { + position = "89.8302 -58.6331 214.41"; + rotation = "1 0 0 0"; + scale = "0.3 0.3 0.3"; + interiorFile = "dplat1.dif"; + showTerrainInside = "0"; + locked = "true"; + team = "0"; + missionTypesList = "Hunters TeamHunters"; + }; + }; + new StaticShape() { + position = "89.798 -58.6039 207.694"; + rotation = "1 0 0 0"; + scale = "0.8 0.8 1"; + dataBlock = "NexusBase"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "-1"; + }; + new StaticShape() { + position = "89.798 -58.604 213.681"; + rotation = "1 0 0 0"; + scale = "0.8 0.8 1"; + dataBlock = "NexusCap"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "-1"; + }; + }; + new SimGroup(Ambiance) { + powerCount = "0"; + + new WaterBlock() { + position = "32 -176 104"; + rotation = "1 0 0 0"; + scale = "128 192 60.1947"; + liquidType = "HotLava"; + density = "1"; + viscosity = "15"; + waveMagnitude = "0"; + surfaceTexture = "LiquidTiles/Lava"; + surfaceOpacity = "1"; + envMapTexture = "desert/skies/d_n_move1"; + envMapIntensity = "0.5"; + submergeTexture[0] = "special/lavadeath_1"; + submergeTexture[1] = "special/lavadeath_2"; + removeWetEdges = "1"; + locked = "true"; + }; + new WaterBlock() { + position = "-1024 -1024 -53.939"; + rotation = "1 0 0 0"; + scale = "2048 2048 100"; + liquidType = "HotLava"; + density = "1"; + viscosity = "15"; + waveMagnitude = "0"; + surfaceTexture = "LiquidTiles/Lava"; + surfaceOpacity = "1"; + envMapTexture = "desert/skies/d_n_move1"; + envMapIntensity = "0.5"; + submergeTexture[0] = "special/lavadeath_1"; + submergeTexture[1] = "special/lavadeath_2"; + removeWetEdges = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "255.071 -6.39306 145.357"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "dtowr4.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_Pulse_1"; + locked = "true"; + }; + new Item() { + position = "252.194 -0.407294 153.761"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Mine"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "250.147 -0.328957 146.5"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "250.024 -12.6038 146.5"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "249.957 -6.38556 146.36"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-104.619 -112.469 189.25"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-104.696 -106.251 189.4"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-104.799 -118.526 189.4"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-106.847 -118.451 196.648"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Mine"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new InteriorInstance() { + position = "-109.733 -112.469 188.244"; + rotation = "0 0 -1 90.1368"; + scale = "1 1 1"; + interiorFile = "dtowr4.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_Pulse_1"; + locked = "true"; + }; + new Item() { + position = "-77.5577 -112.477 174.576"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new InteriorInstance() { + position = "-80.7727 -422.333 54.6"; + rotation = "0 0 -1 67.0361"; + scale = "1.58453 1 1"; + interiorFile = "dbrdg10.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new AudioEmitter() { + position = "-364.125 -260.35 56.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/drywind2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-400.02 -307.144 57.6838"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-306.298 -290.943 56.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-184.146 -323.668 56.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-191.541 -411.98 56.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-99.4573 -427.632 56.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-9.37299 -430.891 56.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "109.627 -439.494 56.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "216.808 -438.303 56.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "333.229 -339.579 56.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "10"; + maxDistance = "640"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "272.889 -404.248 56.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "10"; + maxDistance = "640"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "434.22 -94.4922 56.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "398.99 10.4169 56.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "357.667 108.201 56.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "253.956 210.274 56.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "146.248 239.021 56.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "45.7413 298.319 56.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "33.8775 476.222 56.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "0.0836792 381.294 56.9417"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "121.975 362.152 56.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "157.424 496.789 56.9"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new InteriorInstance() { + position = "372.014 198.8 61.4916"; + rotation = "0 0 1 36.6693"; + scale = "1 1 1"; + interiorFile = "dvent.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new ParticleEmissionDummy() { + position = "372.282 199.011 62.373"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "doubleTimeEmissionDummy"; + emitter = "SmallLightDamageSmoke"; + velocity = "1"; + locked = "true"; + }; + new ParticleEmissionDummy() { + position = "375.994 -249.152 63.8673"; + rotation = "-0 -1 0 12.0321"; + scale = "1 1 1"; + dataBlock = "doubleTimeEmissionDummy"; + emitter = "SmallLightDamageSmoke"; + velocity = "1"; + locked = "true"; + }; + new InteriorInstance() { + position = "375.548 -249.364 63.0611"; + rotation = "0.0997732 -0.306194 0.946726 37.9855"; + scale = "1 1 1"; + interiorFile = "dvent.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new ParticleEmissionDummy() { + position = "-220.537 -168.198 62.6713"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "doubleTimeEmissionDummy"; + emitter = "SmallLightDamageSmoke"; + velocity = "1"; + locked = "true"; + }; + new InteriorInstance() { + position = "-220.805 -168.409 61.7899"; + rotation = "0 0 1 36.6693"; + scale = "1 1 1"; + interiorFile = "dvent.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new AudioEmitter() { + position = "371.704 199.05 62.0366"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahiss.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "5"; + maxDistance = "320"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "376.411 -249.19 64.9593"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahiss.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "5"; + maxDistance = "320"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-221.213 -168.032 63.135"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahiss.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "5"; + maxDistance = "320"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "114.043 -77.2696 164.61"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "50"; + maxDistance = "3200"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + }; + new SimGroup(RandomOrganics) { + powerCount = "0"; + + new SimGroup(Addition1DSPlant16) { + powerCount = "0"; + + new TSStatic() { + position = "-128.284 -185.398 92.2261"; + rotation = "-0.292649 0.152343 0.944006 57.7486"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "302.219 -116.813 72.8366"; + rotation = "0.302969 -0.263367 0.915886 87.0094"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "382.455 -153.494 60.5687"; + rotation = "0 0 1 104.281"; + scale = "1.2 1.2 1.2"; + shapeName = "dorg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "265.258 -307.153 70.4047"; + rotation = "-0.164237 -0.0135418 0.986328 170.701"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "11.7206 -312.004 135.541"; + rotation = "-0.123841 0.115483 -0.985559 94.8309"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "340 -12 61.0375"; + rotation = "0 0 1 34"; + scale = "1 1 1"; + shapeName = "dorg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "388 -324 61.1594"; + rotation = "0 0 1 148"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "25.3474 228.305 56.0699"; + rotation = "0.232142 0.21504 0.948614 97.3866"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg16.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition3DSPlant18) { + powerCount = "0"; + + new TSStatic() { + position = "368.844 164.703 51.1463"; + rotation = "-0.320194 -0.225772 0.920056 126.791"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "295.118 -137.98 81.4841"; + rotation = "0.0934351 -0.158621 0.982909 119.86"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "98.8019 56.4712 207.62"; + rotation = "-0.214234 -0.279195 0.936031 78.6877"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "52 -180 173.313"; + rotation = "0 0 -1 72.0002"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-36 92 95.025"; + rotation = "0 0 1 28"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "68 180 60.4468"; + rotation = "0 0 -1 7.00012"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-204 -268 60.5469"; + rotation = "0 0 1 214"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg18.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition4DSPlant19) { + powerCount = "0"; + + new TSStatic() { + position = "-188 -292 58.2156"; + rotation = "0 0 1 166"; + scale = "1.2 1.2 1.2"; + shapeName = "dorg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "61.8098 -299.75 161.673"; + rotation = "-0.408512 -0.190864 0.892574 90.1504"; + scale = "1.2 1.2 1.2"; + shapeName = "dorg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "220.474 147.588 59.5219"; + rotation = "0 0 -1 118"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "229.591 262.609 50.1644"; + rotation = "0.263624 -0.152203 0.952542 237.617"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "332 156 58.8593"; + rotation = "0 0 -1 29.9998"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg19.dts"; + locked = "true"; + }; + }; + }; + new Lightning() { + position = "76.2095 -63.7231 368.643"; + rotation = "1 0 0 0"; + scale = "1057.22 1334.77 375.171"; + dataBlock = "DefaultStorm"; + strikesPerMinute = "15"; + strikeWidth = "5"; + chanceToHitTarget = "0.9"; + strikeRadius = "30"; + boltStartRadius = "20"; + color = "0.900000 0.300000 0.300000 1.000000"; + fadeColor = "0.300000 0.100000 1.000000 1.000000"; + useFog = "1"; + locked = "true"; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/IceBound.mis b/base/missions/IceBound.mis new file mode 100644 index 0000000..da3df0a --- /dev/null +++ b/base/missions/IceBound.mis @@ -0,0 +1,2726 @@ +// DisplayName = Icebound +// MissionTypes = Siege + +//--- MISSION QUOTE BEGIN --- +//Give them great meals of beef and iron and steel, they will eat like wolves and fight like devils. +// -- William Shakespeare, Henry V +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[Siege]Defenders' power provided by generators located deep within one of their bases +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + cdTrack = "5"; + musicTrack = "ice"; + powerCount = "0"; + + new MissionArea(MissionArea) { + area = "-608 -720 1216 1440"; + flightCeiling = "300"; + flightCeilingRange = "20"; + locked = "true"; + }; + new Sky(Sky) { + position = "0 0 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "750"; + useSkyTextures = "1"; + SkySolidColor = "0.365000 0.390000 0.420000 0.000000"; + fogDistance = "50"; + fogColor = "0.500000 0.500000 0.570000 1.000000"; + fogVolume1 = "750 0 100"; + fogVolume2 = "700 100 250"; + fogVolume3 = "0 0 0"; + materialList = "sky_ice_blue.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 4216686175807421430000000.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 -6202843637937751620000000000000.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 0.000000"; + cloudSpeed0 = "0.000500 0.000000"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.700000 0.700000 0.700000 1.000000"; + ambient = "0.400000 0.400000 0.400000 1.000000"; + position = "0 0 0"; + locked = "true"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/snowdet1"; + terrainFile = "IceBound.ter"; + squareSize = "8"; + emptySquares = "294993 426320 426576 426832 427088 361808 299197 1020338 1020594 1020850 1021106 1021362 431794 300978 301234 301490 172737 304064 304320 435646 435902 1025973 1026229 1026485 1026741 306101 633787"; + position = "-1024 -1024 0"; + locked = "true"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "75"; + cullDensity = "0.1"; + customArea = "0 0 0 0"; + position = "0 0 0 1"; + locked = "true"; + coverage = "0"; + rotation = "0 0 0 0"; + scale = "1 1 1"; + conjoinBowlDev = "20"; + GraphFile = "IceBound.nav"; + }; + new WaterBlock(Water) { + position = "-184 -584 -0"; + rotation = "1 0 0 0"; + scale = "608 608 72"; + liquidType = "RiverWater"; + density = "1"; + viscosity = "5"; + waveMagnitude = "2"; + surfaceTexture = "LiquidTiles/BlueWater"; + surfaceOpacity = "0.5"; + envMapTexture = "ice/skies/icebound_emap_cloudsground"; + envMapIntensity = "0"; + removeWetEdges = "1"; + locked = "true"; + }; + new WaterBlock(Water) { + position = "-504 40 0"; + rotation = "1 0 0 0"; + scale = "608 704 72"; + liquidType = "RiverWater"; + density = "1"; + viscosity = "5"; + waveMagnitude = "2"; + surfaceTexture = "LiquidTiles/BlueWater"; + surfaceOpacity = "0.5"; + envMapTexture = "ice/skies/icebound_emap_cloudsground"; + envMapIntensity = "0"; + removeWetEdges = "1"; + locked = "true"; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "-229.216 3.484 106.421"; + rotation = "0.00961484 0.00999937 -0.999904 92.2517"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "394.718 369.08 163.069"; + rotation = "0.0446758 -0.134456 0.989912 143.586"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "582.693 174.337 102.248"; + rotation = "0.113058 0.0595796 -0.9918 55.9669"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + + new SimGroup(Team2) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "472.482 240.071 82.2774"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "120"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new InteriorInstance() { + position = "417.78 204 70.5"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "sbase3.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new InteriorInstance() { + position = "528 282.6 70.5"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + interiorFile = "sbase3.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape(Team2generatorLarge1) { + position = "444.673 214.235 47.5003"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Compound"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2generatorLarge2) { + position = "444.673 206.305 47.5003"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Compound"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new WayPoint() { + position = "468.836 157.363 103.217"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Power Building"; + team = "0"; + locked = "true"; + }; + new WayPoint() { + position = "477.048 329.22 103.709"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Control Building"; + team = "0"; + locked = "true"; + }; + new StaticShape(Team2SensorLargePulse1) { + position = "412.455 189.482 168.46"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Compound"; + dataBlock = "SensorLargePulse"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new SimGroup(switchBase) { + + new StaticShape(Team0flipflop1) { + position = "511.344 288.616 45.4942"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Control"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + scoreValue = "5"; + locked = "true"; + }; + new ForceFieldBare() { + position = "506.928 283.603 45.4741"; + rotation = "1 0 0 0"; + scale = "9.25262 0.15 10.154"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + new ForceFieldBare() { + position = "506.957 293.483 45.4312"; + rotation = "1 0 0 0"; + scale = "9.25262 0.15 10.154"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + new StaticShape(Team2StationInventory1) { + position = "526.277 344.6 47.5"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "C-Base Dais"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory2) { + position = "531 344.6 47.5"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "C-Base Dais"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory3) { + position = "479.648 320.84 68.4988"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Upper C-Base"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory4) { + position = "474.356 348.195 68.499"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Upper C-Base"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory5) { + position = "540.355 332.247 68.4993"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Upper C-Base"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory6) { + position = "447.413 298.446 57.4893"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "C-Base Lower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory7) { + position = "442.69 298.446 57.4893"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "C-Base Lower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Turret(Team2SentryTurret1) { + position = "528.109 297.832 137.156"; + rotation = "1 0 0 67.6547"; + scale = "1 1 1"; + nameTag = "C-Base Sentry"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + }; + new ForceFieldBare() { + position = "494.884 266.619 45.4373"; + rotation = "0 0 1 90"; + scale = "9.25262 0.15 10.154"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + new ForceFieldBare() { + position = "486.871 266.749 45.3442"; + rotation = "0 0 1 90"; + scale = "9.25262 0.15 10.154"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + new ForceFieldBare() { + position = "444.852 308.478 57.2996"; + rotation = "1 0 0 0"; + scale = "10.3921 0.15 10.154"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + new ForceFieldBare() { + position = "456.89 303.16 57.4493"; + rotation = "0 0 1 90"; + scale = "10.3921 0.15 10.154"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + new ForceFieldBare() { + position = "469.857 306.496 45.4256"; + rotation = "1 0 0 0"; + scale = "9.25262 0.15 10.154"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + new ForceFieldBare() { + position = "469.95 290.4 45.4912"; + rotation = "1 0 0 0"; + scale = "9.25262 0.15 10.154"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + new ForceFieldBare() { + position = "521.875 329.437 45.4572"; + rotation = "1 0 0 0"; + scale = "9.25262 0.15 10.154"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + new ForceFieldBare() { + position = "521.953 323.459 45.3926"; + rotation = "1 0 0 0"; + scale = "9.25262 0.15 10.154"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + }; + new Turret(Team2TurretBaseLarge1) { + position = "499.156 171.6 78.3776"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "P-Base"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + originalBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new ForceFieldBare() { + position = "522.937 288.549 167.523"; + rotation = "1 0 0 0"; + scale = "6.1 4.1 0.9"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + new Item() { + position = "503.051 304.553 89.2088"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "442.851 182.274 89.283"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new SimGroup(powerBase) { + + new StaticShape(Team2StationInventory8) { + position = "467.715 137.356 68.5196"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Upper P-Base"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory9) { + position = "469.292 168.643 68.4932"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Upper P-Base"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory10) { + position = "420.5 138.352 47.4961"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "P-Base Dais"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory11) { + position = "410.136 145.956 47.4885"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "P-Base Dias"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory12) { + position = "429.426 200.872 125.502"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "P-Base Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory13) { + position = "406.125 201.072 125.497"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "P-Base Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory14) { + position = "428.343 190.36 68.4942"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "P-Base Loft"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory15) { + position = "428.297 205.646 68.4966"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "P-Base Loft"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory16) { + position = "441.893 183.632 79.4993"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "P-Base Mid"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Turret(Team2TurretBaseLarge2) { + position = "446.536 314.891 78.4985"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "C-Base"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "MissileBarrelLarge"; + originalBarrel = "MissileBarrelLarge"; + locked = "true"; + }; + new Turret(Team2TurretBaseLarge3) { + position = "534.516 298.511 168.487"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "C-Base Tower"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "AABarrelLarge"; + originalBarrel = "AABarrelLarge"; + locked = "true"; + }; + }; + new ForceFieldBare() { + position = "489.335 138.004 70.3142"; + rotation = "1 0 0 0"; + scale = "21 0.15 6.5"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + new ForceFieldBare() { + position = "435.755 348.34 70.2864"; + rotation = "1 0 0 0"; + scale = "21 0.15 6.5"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + new ForceFieldBare() { + position = "462.072 348.219 80.3008"; + rotation = "1 0 0 0"; + scale = "30.1 0.15 4.36464"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + new ForceFieldBare() { + position = "454.019 138.189 80.2309"; + rotation = "1 0 0 0"; + scale = "30.1 0.15 4.36464"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + new ForceFieldBare() { + position = "460.738 311.622 79.8614"; + rotation = "1 0 0 0"; + scale = "30.1 0.15 4.36464"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + new ForceFieldBare() { + position = "454.767 174.786 80.0512"; + rotation = "1 0 0 0"; + scale = "30.1 0.15 4.36464"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + new ForceFieldBare() { + position = "521.945 276.582 125.464"; + rotation = "1 0 0 0"; + scale = "12.3108 0.15 12.0284"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + new Turret(Team2SentryTurret2) { + position = "429.961 330.024 86.676"; + rotation = "-3.09086e-08 0.707107 -0.707107 180"; + scale = "1 1 1"; + nameTag = "C-Base Entry"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + }; + new SimGroup(AIObjectives) { + + new AIObjective(AIOAttackObject) { + position = "-320.461 -106.486 100.301"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3422"; + location = "-320.461 -106.486 100.301"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "-315.856 -108.433 100.301"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3424"; + location = "-315.856 -108.433 100.301"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "-302.04 -114.274 100.301"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3426"; + location = "-302.04 -114.274 100.301"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "-306.646 -112.327 100.301"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3428"; + location = "-306.646 -112.327 100.301"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "-370.385 30.385 122.871"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3431"; + location = "-370.385 30.385 122.871"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "-363.523 24.39 106.865"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory6"; + targetClientId = "-1"; + targetObjectId = "3433"; + location = "-363.523 24.39 106.865"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "-363.976 -29.636 106.377"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory7"; + targetClientId = "-1"; + targetObjectId = "3435"; + location = "-363.976 -29.636 106.377"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "-364.003 -29.4751 98.293"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team1generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3437"; + location = "-364.003 -29.4751 98.293"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "444.214 214.241 49.005"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team2generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3294"; + location = "444.214 214.241 49.005"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIODefendLocation) { + position = "444.214 214.241 49.005"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team2generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3294"; + location = "444.214 214.241 49.005"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "444.214 206.311 49.005"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team2generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3295"; + location = "444.214 206.311 49.005"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIODefendLocation) { + position = "444.214 206.311 49.005"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team2generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3295"; + location = "444.214 206.311 49.005"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "410.675 189.5 172.735"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SensorLargePulse"; + targetObject = "Team2SensorLargePulse1"; + targetClientId = "-1"; + targetObjectId = "3298"; + location = "410.675 189.5 172.735"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIODefendLocation) { + position = "511.344 288.616 47.1279"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the flipflop"; + targetObject = "Team0flipflop1"; + targetClientId = "-1"; + targetObjectId = "3300"; + location = "511.344 288.616 47.1279"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOTouchObject) { + position = "511.344 288.616 47.1279"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0flipflop1"; + mode = "TouchFlipFlop"; + targetObject = "Team0flipflop1"; + targetClientId = "-1"; + targetObjectId = "3300"; + location = "511.344 288.616 47.1279"; + weightLevel1 = "3850"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "526.277 344.6 49.0658"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3306"; + location = "526.277 344.6 49.0658"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "531 344.6 49.0658"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3308"; + location = "531 344.6 49.0658"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "479.648 320.84 70.0646"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3310"; + location = "479.648 320.84 70.0646"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "474.356 348.195 70.0648"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3312"; + location = "474.356 348.195 70.0648"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "540.355 332.247 70.0651"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3314"; + location = "540.355 332.247 70.0651"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "447.413 298.446 59.0551"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory6"; + targetClientId = "-1"; + targetObjectId = "3316"; + location = "447.413 298.446 59.0551"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "442.69 298.446 59.0551"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory7"; + targetClientId = "-1"; + targetObjectId = "3318"; + location = "442.69 298.446 59.0551"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "528.079 297.526 137.03"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SentryTurret"; + targetObject = "Team2SentryTurret1"; + targetClientId = "-1"; + targetObjectId = "3320"; + location = "528.079 297.526 137.03"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "497.376 172.261 80.1291"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3337"; + location = "497.376 172.261 80.1291"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "465.935 137.356 70.0854"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory8"; + targetClientId = "-1"; + targetObjectId = "3343"; + location = "465.935 137.356 70.0854"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "467.512 168.643 70.059"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory9"; + targetClientId = "-1"; + targetObjectId = "3345"; + location = "467.512 168.643 70.059"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "418.72 138.352 49.0619"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory10"; + targetClientId = "-1"; + targetObjectId = "3347"; + location = "418.72 138.352 49.0619"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "408.356 145.956 49.0543"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory11"; + targetClientId = "-1"; + targetObjectId = "3349"; + location = "408.356 145.956 49.0543"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "427.646 200.872 127.068"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory12"; + targetClientId = "-1"; + targetObjectId = "3351"; + location = "427.646 200.872 127.068"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "404.345 201.072 127.063"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory13"; + targetClientId = "-1"; + targetObjectId = "3353"; + location = "404.345 201.072 127.063"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "426.563 190.36 70.06"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory14"; + targetClientId = "-1"; + targetObjectId = "3355"; + location = "426.563 190.36 70.06"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "426.517 205.646 70.0624"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory15"; + targetClientId = "-1"; + targetObjectId = "3357"; + location = "426.517 205.646 70.0624"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "440.113 183.632 81.0651"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory16"; + targetClientId = "-1"; + targetObjectId = "3359"; + location = "440.113 183.632 81.0651"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "446.537 314.23 80.25"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3361"; + location = "446.537 314.23 80.25"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "534.516 297.85 170.239"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge3"; + targetClientId = "-1"; + targetObjectId = "3362"; + location = "534.516 297.85 170.239"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "429.991 330.355 86.676"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SentryTurret"; + targetObject = "Team2SentryTurret2"; + targetClientId = "-1"; + targetObjectId = "3377"; + location = "429.991 330.355 86.676"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + }; + }; + new SimGroup(Team1) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-358.5 21.85 110.289"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "75"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "10"; + locked = "true"; + }; + }; + new InteriorInstance() { + position = "-296.969 -76.629 96.7425"; + rotation = "0 0 1 22.9183"; + scale = "1 1 1"; + interiorFile = "svpad.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-297.708 -79.548 96.4425"; + rotation = "0 0 1 202.918"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory1) { + position = "-320.461 -106.486 98.7353"; + rotation = "0 0 1 202.918"; + scale = "1 1 1"; + nameTag = "Vehicle Pad"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory2) { + position = "-315.856 -108.433 98.7353"; + rotation = "0 0 1 202.918"; + scale = "1 1 1"; + nameTag = "Vehicle Pad"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory3) { + position = "-302.04 -114.274 98.7353"; + rotation = "0 0 1 202.918"; + scale = "1 1 1"; + nameTag = "Vehicle Pad"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory4) { + position = "-306.646 -112.327 98.7353"; + rotation = "0 0 1 202.918"; + scale = "1 1 1"; + nameTag = "Vehicle Pad"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-360 -24 118.307"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + interiorFile = "sbunk9.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape(Team1StationInventory5) { + position = "-370.385 30.385 121.305"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Upper Base"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory6) { + position = "-363.523 24.39 105.299"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Lower Base"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory7) { + position = "-363.976 -29.636 104.811"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Generator Area"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1generatorLarge1) { + position = "-364.009 -28.154 96.7883"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new SimGroup(AIObjectives) { + + new AIObjective(AIORepairObject) { + position = "-320.461 -106.486 100.301"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3422"; + location = "-320.461 -106.486 100.301"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-315.856 -108.433 100.301"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3424"; + location = "-315.856 -108.433 100.301"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-302.04 -114.274 100.301"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3426"; + location = "-302.04 -114.274 100.301"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-306.646 -112.327 100.301"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3428"; + location = "-306.646 -112.327 100.301"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-370.385 30.385 122.871"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3431"; + location = "-370.385 30.385 122.871"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-363.523 24.39 106.865"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory6"; + targetClientId = "-1"; + targetObjectId = "3433"; + location = "-363.523 24.39 106.865"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-363.976 -29.636 106.377"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory7"; + targetClientId = "-1"; + targetObjectId = "3435"; + location = "-363.976 -29.636 106.377"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-364.003 -29.4751 98.293"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team1generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3437"; + location = "-364.003 -29.4751 98.293"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIODefendLocation) { + position = "-364.003 -29.4751 98.293"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team1generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3437"; + location = "-364.003 -29.4751 98.293"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "444.214 214.241 49.005"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team2generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3294"; + location = "444.214 214.241 49.005"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "444.214 206.311 49.005"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team2generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3295"; + location = "444.214 206.311 49.005"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOMortarObject) { + position = "410.675 189.5 172.735"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the SensorLargePulse"; + targetObject = "Team2SensorLargePulse1"; + targetClientId = "-1"; + targetObjectId = "3298"; + location = "410.675 189.5 172.735"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIODefendLocation) { + position = "511.344 288.616 47.1279"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the flipflop"; + targetObject = "Team0flipflop1"; + targetClientId = "-1"; + targetObjectId = "3300"; + location = "511.344 288.616 47.1279"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOTouchObject) { + position = "511.344 288.616 47.1279"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0flipflop1"; + mode = "TouchFlipFlop"; + targetObject = "Team0flipflop1"; + targetClientId = "-1"; + targetObjectId = "3300"; + location = "511.344 288.616 47.1279"; + weightLevel1 = "3850"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "526.277 344.6 49.0658"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3306"; + location = "526.277 344.6 49.0658"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "531 344.6 49.0658"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3308"; + location = "531 344.6 49.0658"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "479.648 320.84 70.0646"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3310"; + location = "479.648 320.84 70.0646"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "474.356 348.195 70.0648"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3312"; + location = "474.356 348.195 70.0648"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "540.355 332.247 70.0651"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3314"; + location = "540.355 332.247 70.0651"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "447.413 298.446 59.0551"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory6"; + targetClientId = "-1"; + targetObjectId = "3316"; + location = "447.413 298.446 59.0551"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "442.69 298.446 59.0551"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory7"; + targetClientId = "-1"; + targetObjectId = "3318"; + location = "442.69 298.446 59.0551"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "528.079 297.526 137.03"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the SentryTurret"; + targetObject = "Team2SentryTurret1"; + targetClientId = "-1"; + targetObjectId = "3320"; + location = "528.079 297.526 137.03"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOMortarObject) { + position = "497.376 172.261 80.1291"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3337"; + location = "497.376 172.261 80.1291"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "465.935 137.356 70.0854"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory8"; + targetClientId = "-1"; + targetObjectId = "3343"; + location = "465.935 137.356 70.0854"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "467.512 168.643 70.059"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory9"; + targetClientId = "-1"; + targetObjectId = "3345"; + location = "467.512 168.643 70.059"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "418.72 138.352 49.0619"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory10"; + targetClientId = "-1"; + targetObjectId = "3347"; + location = "418.72 138.352 49.0619"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "408.356 145.956 49.0543"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory11"; + targetClientId = "-1"; + targetObjectId = "3349"; + location = "408.356 145.956 49.0543"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "427.646 200.872 127.068"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory12"; + targetClientId = "-1"; + targetObjectId = "3351"; + location = "427.646 200.872 127.068"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "404.345 201.072 127.063"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory13"; + targetClientId = "-1"; + targetObjectId = "3353"; + location = "404.345 201.072 127.063"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "426.563 190.36 70.06"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory14"; + targetClientId = "-1"; + targetObjectId = "3355"; + location = "426.563 190.36 70.06"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "426.517 205.646 70.0624"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory15"; + targetClientId = "-1"; + targetObjectId = "3357"; + location = "426.517 205.646 70.0624"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "440.113 183.632 81.0651"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory16"; + targetClientId = "-1"; + targetObjectId = "3359"; + location = "440.113 183.632 81.0651"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOMortarObject) { + position = "446.537 314.23 80.25"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3361"; + location = "446.537 314.23 80.25"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOMortarObject) { + position = "534.516 297.85 170.239"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge3"; + targetClientId = "-1"; + targetObjectId = "3362"; + location = "534.516 297.85 170.239"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "429.991 330.355 86.676"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the SentryTurret"; + targetObject = "Team2SentryTurret2"; + targetClientId = "-1"; + targetObjectId = "3377"; + location = "429.991 330.355 86.676"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + }; + new ForceFieldBare() { + position = "-341.118 19.8695 121.119"; + rotation = "1 0 0 0"; + scale = "0.25 8.52603 7.28607"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + }; + new ForceFieldBare() { + position = "-372.466 18.7023 132.29"; + rotation = "0 -1 0 43.5448"; + scale = "0.25 10.3585 4.39531"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + }; + }; + new SimGroup(team0) { + + new Item() { + position = "437.825 236.089 50.215"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-156.289 394.091 68.7838"; + rotation = "0 0 1 85.9437"; + scale = "1 1 1"; + interiorFile = "sbrdgo.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "95.08 411.917 68.7838"; + rotation = "0 0 1 85.9437"; + scale = "1 1 1"; + interiorFile = "sbrdgo.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "11.291 405.975 68.7838"; + rotation = "0 0 1 85.9437"; + scale = "1 1 1"; + interiorFile = "sbrdgo.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-72.499 400.033 68.7838"; + rotation = "0 0 1 85.9437"; + scale = "1 1 1"; + interiorFile = "sbrdgo.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new SimGroup(AIObjectives) { + }; + }; + }; + new SimGroup(sounds) { + + new AudioEmitter() { + position = "440.355 -120.372 204.374"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/yeti_howl2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-44.599 721.208 152.389"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/yeti_howl1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-172.436 579.932 48.2502"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/icecrack2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-116.994 39.404 42.2907"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/icecrack1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + }; + new AudioEmitter() { + position = "-228.276 4.721 121.968"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/coldwind1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.5"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Insalubria.mis b/base/missions/Insalubria.mis new file mode 100644 index 0000000..6bf235e --- /dev/null +++ b/base/missions/Insalubria.mis @@ -0,0 +1,6831 @@ +// MissionTypes = CnH + +//--- MISSION QUOTE BEGIN --- +//I will inhabit their nightmares. +// -- Blood Eagle Sirdar-Prime Fury, on the Hordes. +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[CnH]4 color-coded towers in mission area +//[CnH]4800 points to win +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + musicTrack = "badlands"; + cdTrack = "4"; + powerCount = "0"; + + new MissionArea(MissionArea) { + area = "-576 -1000 1488 1600"; + flightCeiling = "300"; + flightCeilingRange = "20"; + locked = "true"; + }; + new Sky(Sky) { + position = "40 -768 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "400"; + useSkyTextures = "1"; + SkySolidColor = "0.365000 0.390000 0.420000 0.000000"; + fogDistance = "250"; + fogColor = "0.480000 0.480000 0.450000 1.000000"; + fogVolume1 = "0 0 0"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "sky_lush_blue.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 -0.002702"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 306394995426410077000000000000000.000000"; + locked = "true"; + cloudSpeed0 = "0.000100 0.000500"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.800000 0.800000 0.800000 1.000000"; + ambient = "0.400000 0.400000 0.400000 1.000000"; + position = "40 -768 0"; + locked = "true"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/lushdet1"; + terrainFile = "Insalubria.ter"; + squareSize = "8"; + position = "-1024 -1024 0"; + locked = "true"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "70"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + conjoinBowlDev = "20"; + position = "0 0 0 1"; + locked = "true"; + rotation = "0 0 0 0"; + coverage = "0"; + GraphFile = "Insalubria.nav"; + scale = "1 1 1"; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "609.593 434.296 106.128"; + rotation = "0.0192438 -0.237659 0.971158 171.007"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-393.055 -752.648 133.879"; + rotation = "0.325191 -0.113206 0.938848 40.6892"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "407.562 -338.582 92.2044"; + rotation = "-0.0133336 -0.0848902 0.996301 197.788"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "91.1322 -269.839 85.7978"; + rotation = "0.116465 0.0347547 -0.992587 33.4659"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "272.503 -45.4171 86"; + rotation = "-0.00322867 -0.104807 0.994487 183.51"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + + new SimGroup(team0) { + + new SimGroup(Red) { + providesPower = "1"; + + new StaticShape(Team0StationInventory1) { + position = "248.708 -201.192 61.4732"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Red Rath"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory2) { + position = "257.234 -201.181 61.4703"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Red Rath"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0FlipFlop1) { + position = "252.953 -201.187 52.8987"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + tCapThread = "151"; + locked = "true"; + name = "Red Rath"; + pCapThread = "150"; + }; + new InteriorInstance() { + position = "252.955 -193.723 58.6693"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bbunk1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new InteriorInstance() { + position = "238.88 -162.983 48.2803"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bmisc9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new WayPoint() { + position = "252.953 -201.187 52.8987"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Red Rath"; + team = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "169 -165.97 52.29"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bmisc9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "169 -130.245 52.29"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bmisc9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Turret(Team0TurretBaseLarge1) { + position = "169.542 -130.272 62.2786"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Red Rath West"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new Turret(Team0TurretBaseLarge2) { + position = "169.644 -165.996 62.2785"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Red Rath West"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new Item() { + position = "252.872 -190.886 60.0404"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "287.503 -95.9769 62.4361"; + rotation = "0 0 1 130.634"; + scale = "1 1 1"; + interiorFile = "bmisc9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "249.017 -62.9506 62.4361"; + rotation = "0 0 1 130.634"; + scale = "1 1 1"; + interiorFile = "bmisc9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Turret(Team0TurretBaseLarge3) { + position = "287.184 -96.3964 72.4171"; + rotation = "0 0 1 40.1074"; + scale = "1 1 1"; + nameTag = "Red Rath NE"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new Turret(Team0TurretBaseLarge4) { + position = "248.556 -63.4222 72.4258"; + rotation = "0 0 1 40.1074"; + scale = "1 1 1"; + nameTag = "Red Rath NE"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new StaticShape() { + position = "239.043 -163.006 58.1067"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + holo = "0"; + locked = "true"; + holoHeight = "15"; + }; + }; + new SimGroup(Green) { + providesPower = "1"; + + new Item() { + position = "168.568 -482.564 59.2949"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new WayPoint() { + position = "175.109 -490.523 52.1532"; + rotation = "-0 0 -1 38.9611"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Green Garrison"; + team = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "170.417 -484.718 57.9238"; + rotation = "-0 0 -1 38.9611"; + scale = "1 1 1"; + interiorFile = "bbunk1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape(Team0FlipFlop2) { + position = "175.109 -490.523 52.1532"; + rotation = "-0 0 -1 38.9611"; + scale = "1 1 1"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + tCapThread = "205"; + locked = "true"; + name = "Green Garrison"; + pCapThread = "204"; + }; + new StaticShape(Team0StationInventory3) { + position = "171.811 -493.196 60.7277"; + rotation = "0 0 1 231.039"; + scale = "1 1 1"; + nameTag = "Grn Garrison"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory4) { + position = "178.434 -487.826 60.7248"; + rotation = "0 0 1 51.0388"; + scale = "1 1 1"; + nameTag = "Grn Garrison"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "234.257 -469.498 54.2444"; + rotation = "0 0 1 157.563"; + scale = "1 1 1"; + interiorFile = "bmisc6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "247.891 -502.519 54.2444"; + rotation = "0 0 1 157.563"; + scale = "1 1 1"; + interiorFile = "bmisc6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Turret(Team0TurretBaseLarge5) { + position = "233.651 -469.72 64.2329"; + rotation = "0 0 1 67.609"; + scale = "1 1 1"; + nameTag = "Grn Garrison NE"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new Turret(Team0TurretBaseLarge6) { + position = "247.38 -502.701 64.233"; + rotation = "0 0 1 67.609"; + scale = "1 1 1"; + nameTag = "Grn Garrison NE"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new TSStatic() { + position = "206.736 -495.646 50.2432"; + rotation = "0 0 1 40.1071"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + new InteriorInstance() { + position = "162.972 -594.499 57.8994"; + rotation = "-0 0 -1 58.6246"; + scale = "1 1 1"; + interiorFile = "bmisc6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "132.472 -575.899 57.8994"; + rotation = "-0 0 -1 58.6246"; + scale = "1 1 1"; + interiorFile = "bmisc6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Turret(Team0TurretBaseLarge7) { + position = "163.331 -593.962 67.8879"; + rotation = "0 0 1 211.421"; + scale = "1 1 1"; + nameTag = "Grn Garrison SW"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new Turret(Team0TurretBaseLarge8) { + position = "132.777 -575.45 67.888"; + rotation = "0 0 1 211.421"; + scale = "1 1 1"; + nameTag = "Grn Garrison SW"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new StaticShape() { + position = "178.207 -518.084 59.268"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + holo = "0"; + locked = "true"; + holoHeight = "15"; + }; + new InteriorInstance() { + position = "178.044 -518.061 49.4416"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bmisc6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new TSStatic() { + position = "204.34 -491.758 50.1361"; + rotation = "0 0 -1 7.44841"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "206.542 -491.768 52.1632"; + rotation = "-0.0143679 -0.287119 0.957787 5.98175"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "208.539 -493.058 50.0603"; + rotation = "0 0 1 23.4913"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + new InteriorInstance() { + position = "149.552 -389.213 64.5038"; + rotation = "0 0 -1 82.5059"; + scale = "1 1 1"; + interiorFile = "bwall3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(Orange) { + providesPower = "1"; + + new WayPoint() { + position = "-12.6712 -67.8323 51.6512"; + rotation = "0 0 1 48.7015"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Orange Outwork"; + team = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "6.11508 -89.987 46.7575"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bmisc8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-7.06244 -62.9074 57.4218"; + rotation = "0 0 1 48.7015"; + scale = "1 1 1"; + interiorFile = "bbunk1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape(Team0FlipFlop3) { + position = "-12.6712 -67.8323 51.6512"; + rotation = "0 0 1 48.7015"; + scale = "1 1 1"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + tCapThread = "174"; + locked = "true"; + name = "Orange Outwork"; + pCapThread = "173"; + }; + new Turret(Team0TurretBaseLarge9) { + position = "1.07743 -174.961 62.5418"; + rotation = "0 0 1 127.379"; + scale = "1 1 1"; + nameTag = "Or Outwork SE"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new StaticShape(Team0StationInventory5) { + position = "-15.4765 -64.646 60.2257"; + rotation = "-0 0 -1 41.2985"; + scale = "1 1 1"; + nameTag = "Or Outwork"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Turret(Team0TurretBaseLarge10) { + position = "22.6612 -146.495 62.5417"; + rotation = "0 0 1 127.379"; + scale = "1 1 1"; + nameTag = "Or Outwork SE"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new StaticShape(Team0StationInventory6) { + position = "-9.84089 -71.0445 60.2228"; + rotation = "0 0 1 138.701"; + scale = "1 1 1"; + nameTag = "Or Outwork"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item() { + position = "-4.98564 -60.9721 58.7929"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-83.3104 -161.911 50.3657"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bmisc8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-83.3104 -126.186 50.3657"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bmisc8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Turret(Team0TurretBaseLarge11) { + position = "-82.6664 -161.937 60.3543"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Or Outwork West"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new Turret(Team0TurretBaseLarge12) { + position = "-82.7684 -126.213 60.3544"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Or Outwork West"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new InteriorInstance() { + position = "23.1576 -146.906 52.5532"; + rotation = "0 0 1 217.334"; + scale = "1 1 1"; + interiorFile = "bmisc8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "1.49195 -175.312 52.5532"; + rotation = "0 0 1 217.334"; + scale = "1 1 1"; + interiorFile = "bmisc8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "6.27808 -90.01 56.5839"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + holo = "0"; + locked = "true"; + holoHeight = "15"; + }; + new InteriorInstance() { + position = "72.9329 -98.3728 64.0706"; + rotation = "0 0 1 57.2958"; + scale = "1 1.5 1"; + interiorFile = "bwall3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-37.4421 27.1092 79.5435"; + rotation = "0 0 1 77.3493"; + scale = "1 1 1"; + interiorFile = "bwall3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(Blue) { + providesPower = "1"; + + new WayPoint() { + position = "427.113 -510.85 71.7485"; + rotation = "-0 0 -1 11.4591"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Blue Bastion"; + team = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "415.822 -477.415 58.077"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bmisc7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "425.632 -503.534 77.5191"; + rotation = "-0 0 -1 11.4591"; + scale = "1 1 1"; + interiorFile = "bbunk1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape(Team0FlipFlop4) { + position = "427.113 -510.85 71.7485"; + rotation = "-0 0 -1 11.4591"; + scale = "1 1 1"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + tCapThread = "226"; + locked = "true"; + name = "Blue Bastion"; + pCapThread = "225"; + }; + new Turret(Team0TurretBaseLarge13) { + position = "426.033 -387.755 63.229"; + rotation = "-0 0 -1 42.9719"; + scale = "1 1 1"; + nameTag = "Blue Bastion NW"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new StaticShape(Team0StationInventory7) { + position = "422.953 -511.698 80.3229"; + rotation = "0 0 -1 101.459"; + scale = "1 1 1"; + nameTag = "Blue Bastion"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Turret(Team0TurretBaseLarge14) { + position = "399.983 -412.201 63.2289"; + rotation = "-0 0 -1 42.9719"; + scale = "1 1 1"; + nameTag = "Blue Bastion NW"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new StaticShape(Team0StationInventory8) { + position = "431.308 -509.993 80.32"; + rotation = "0 0 1 78.5407"; + scale = "1 1 1"; + nameTag = "Blue Bastion"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item() { + position = "424.987 -500.77 78.8901"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "399.563 -411.712 53.2404"; + rotation = "0 0 1 46.9825"; + scale = "1 1 1"; + interiorFile = "bmisc7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "425.683 -387.34 53.2404"; + rotation = "0 0 1 46.9825"; + scale = "1 1 1"; + interiorFile = "bmisc7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "550.764 -500.414 70.2938"; + rotation = "0 0 1 17.7618"; + scale = "1 2.5126 1"; + interiorFile = "bwall1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "308.384 -576.176 96.5369"; + rotation = "0 0 -1 13.1781"; + scale = "1 2.30461 1"; + interiorFile = "bwall1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "415.985 -477.438 67.9034"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + holo = "0"; + locked = "true"; + holoHeight = "15"; + }; + new TSStatic() { + position = "386.145 -508.677 64.0332"; + rotation = "0 0 1 84.7977"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "388.99 -508.442 65.7017"; + rotation = "0 -1 0 34.3775"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "390.317 -510.938 64.3444"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable2m.dts"; + locked = "true"; + }; + }; + new SimGroup(AIObjectives) { + }; + }; + new SimGroup(Team2) { + providesPower = "1"; + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-241.053 -637.641 96.7366"; + rotation = "0 0 -1 105.997"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "30"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "0"; + locked = "true"; + }; + }; + new SimGroup(BaseTower) { + + new StaticShape(Team2StationInventory1) { + position = "-242.217 -629.712 105.247"; + rotation = "0 0 1 13.7968"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory2) { + position = "-245.831 -643.968 105.247"; + rotation = "0 0 1 193.797"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item() { + position = "-246.815 -636.119 91.7366"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-241.053 -637.641 87.3725"; + rotation = "-0 0 -1 76.2034"; + scale = "1 1 1"; + interiorFile = "bbunk2.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new WayPoint() { + position = "-241.053 -637.641 87.3725"; + rotation = "-0 0 -1 11.4591"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Main Base"; + team = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory3) { + position = "-244.248 -623.301 80.8621"; + rotation = "0 0 1 13.7968"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Turret(Team2TurretBaseLarge1) { + position = "-249.463 -647.336 91.8761"; + rotation = "-0 0 -1 76.2034"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "MissileBarrelLarge"; + locked = "true"; + }; + new StaticShape(Team2StationInventory4) { + position = "-250.544 -648.84 80.8665"; + rotation = "0 0 1 193.797"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Turret(Team2TurretBaseLarge2) { + position = "-243.993 -625.152 91.877"; + rotation = "-0 0 -1 76.2034"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "MissileBarrelLarge"; + locked = "true"; + }; + }; + new StaticShape(Team2StationInventory5) { + position = "-276.47 -665.066 71.7275"; + rotation = "0 0 1 45.0456"; + scale = "1 1 1"; + nameTag = "Vehicle Pad"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory6) { + position = "-276.572 -696.35 71.7225"; + rotation = "0 0 1 135.046"; + scale = "1 1 1"; + nameTag = "Vehicle Pad"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-312.123 -680.678 69.734"; + rotation = "-0 0 -1 89.9544"; + scale = "1 1 1"; + interiorFile = "bvpad.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-301.123 -680.678 69.434"; + rotation = "0 0 1 90.0456"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new TSStatic() { + position = "-309.748 -699.02 50.8605"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-311.001 -702.826 50.6828"; + rotation = "0 0 1 12.605"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-310.746 -701.306 53.7872"; + rotation = "-1 0 0 4.58367"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-316.723 -696.208 51.5006"; + rotation = "-0.179593 -0.0526939 0.982329 58.6496"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new InteriorInstance() { + position = "-172.26 -658.017 122.553"; + rotation = "0 0 1 127.197"; + scale = "1 1 1"; + interiorFile = "bmisc1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Turret(Team2TurretBaseLarge3) { + position = "-172.542 -658.462 132.528"; + rotation = "0 0 1 37.1966"; + scale = "1 1 1"; + nameTag = "Hilltop"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "MissileBarrelLarge"; + locked = "true"; + }; + new SimGroup(AIObjectives) { + + new SimGroup(grp5) { + + new AIObjective(AIORepairObject) { + position = "431.308 -509.993 81.8858"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory8"; + targetClientId = "-1"; + targetObjectId = "3363"; + location = "431.308 -509.993 81.8858"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3407"; + }; + new AIObjective(AIORepairObject) { + position = "399.533 -411.717 64.9804"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge14"; + targetClientId = "-1"; + targetObjectId = "3362"; + location = "399.533 -411.717 64.9804"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3407"; + }; + new AIObjective(AIORepairObject) { + position = "425.583 -387.271 64.9805"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge13"; + targetClientId = "-1"; + targetObjectId = "3359"; + location = "425.583 -387.271 64.9805"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3407"; + }; + new AIObjective(AIOTouchObject) { + position = "427.113 -510.85 73.3822"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0FlipFlop4"; + mode = "TouchFlipFlop"; + targetObject = "Team0FlipFlop4"; + targetClientId = "-1"; + targetObjectId = "3358"; + location = "427.113 -510.85 73.3822"; + weightLevel1 = "4150"; + weightLevel2 = "4150"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3407"; + }; + new AIObjective(AIODefendLocation) { + position = "427.113 -510.85 73.3822"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the FlipFlop"; + targetObject = "Team0FlipFlop4"; + targetClientId = "-1"; + targetObjectId = "3358"; + location = "427.113 -510.85 73.3822"; + weightLevel1 = "3500"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3407"; + }; + new AIObjective(AIODeployEquipment) { + position = "424.775 -522.63 77.2396"; + rotation = "0 0 1 168.45"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "424.775 -522.63 77.2396"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3407"; + }; + new AIObjective(AIODeployEquipment) { + position = "419.195 -508.656 75.996"; + rotation = "0 0 -1 95.111"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "419.195 -508.656 75.996"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3407"; + }; + new AIObjective(AIODeployEquipment) { + position = "430.571 -510.085 79.7152"; + rotation = "-1 0 0 89.3814"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "430.571 -510.085 79.7152"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3407"; + }; + new AIObjective(AIODeployEquipment) { + position = "418.972 -484.437 65.1499"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "418.972 -484.437 65.1499"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3407"; + }; + new AIObjective(AIODeployEquipment) { + position = "408.322 -532.494 65.9261"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "408.322 -532.494 65.9261"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3407"; + }; + }; + new SimGroup(grp8) { + + new AIObjective(AIODeployEquipment) { + position = "203.001 -494.735 50.207"; + rotation = "0 0 1 127.77"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "203.001 -494.735 50.207"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3418"; + }; + new AIObjective(AIODeployEquipment) { + position = "141.181 -472.359 52.0886"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "141.181 -472.359 52.0886"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3418"; + }; + new AIObjective(AIODeployEquipment) { + position = "177.281 -499.591 69.8078"; + rotation = "0 0 1 135.791"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "177.281 -499.591 69.8078"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3418"; + }; + new AIObjective(AIODeployEquipment) { + position = "180.268 -486.555 55.789"; + rotation = "0 0 1 51.5662"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "180.268 -486.555 55.789"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3418"; + }; + new AIObjective(AIODeployEquipment) { + position = "164.503 -484.759 57.8043"; + rotation = "0 0 -1 36.0963"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "164.503 -484.759 57.8043"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3418"; + }; + new AIObjective(AIORepairObject) { + position = "132.432 -576.014 69.6395"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge8"; + targetClientId = "-1"; + targetObjectId = "3326"; + location = "132.432 -576.014 69.6395"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3418"; + }; + new AIObjective(AIORepairObject) { + position = "162.986 -594.526 69.6394"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge7"; + targetClientId = "-1"; + targetObjectId = "3325"; + location = "162.986 -594.526 69.6394"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3418"; + }; + new AIObjective(AIORepairObject) { + position = "247.991 -502.449 65.9845"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge6"; + targetClientId = "-1"; + targetObjectId = "3321"; + location = "247.991 -502.449 65.9845"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3418"; + }; + new AIObjective(AIORepairObject) { + position = "234.262 -469.468 65.9844"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge5"; + targetClientId = "-1"; + targetObjectId = "3320"; + location = "234.262 -469.468 65.9844"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3418"; + }; + new AIObjective(AIORepairObject) { + position = "178.434 -487.826 62.2906"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3316"; + location = "178.434 -487.826 62.2906"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3418"; + }; + new AIObjective(AIOTouchObject) { + position = "175.109 -490.523 53.7869"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0FlipFlop2"; + mode = "TouchFlipFlop"; + targetObject = "Team0FlipFlop2"; + targetClientId = "-1"; + targetObjectId = "3313"; + location = "175.109 -490.523 53.7869"; + weightLevel1 = "4150"; + weightLevel2 = "4150"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3418"; + }; + new AIObjective(AIODefendLocation) { + position = "175.109 -490.523 53.7869"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the FlipFlop"; + targetObject = "Team0FlipFlop2"; + targetClientId = "-1"; + targetObjectId = "3313"; + location = "175.109 -490.523 53.7869"; + weightLevel1 = "3500"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3418"; + }; + }; + new AIObjective(AIORepairObject) { + position = "-250.544 -648.84 82.4323"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3389"; + location = "-250.544 -648.84 82.4323"; + weightLevel1 = "2850"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new SimGroup(grp6) { + + new AIObjective(AIODeployEquipment) { + position = "259.454 -201.161 58.777"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "259.454 -201.161 58.777"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3432"; + }; + new AIObjective(AIODeployEquipment) { + position = "246.45 -201.167 58.5704"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "246.45 -201.167 58.5704"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3432"; + }; + new AIObjective(AIODeployEquipment) { + position = "257.856 -187.451 68.6284"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "257.856 -187.451 68.6284"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3432"; + }; + new AIObjective(AIODeployEquipment) { + position = "257.845 -214.86 68.6444"; + rotation = "0 0 1 180.091"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "257.845 -214.86 68.6444"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3432"; + }; + new AIObjective(AIODeployEquipment) { + position = "224.096 -201.396 52.5064"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "224.096 -201.396 52.5064"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3432"; + }; + new AIObjective(AIODeployEquipment) { + position = "242.26 -150.912 51.821"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "242.26 -150.912 51.821"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3432"; + }; + new AIObjective(AIORepairObject) { + position = "248.982 -62.9168 74.1773"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge4"; + targetClientId = "-1"; + targetObjectId = "3307"; + location = "248.982 -62.9168 74.1773"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3432"; + }; + new AIObjective(AIORepairObject) { + position = "287.61 -95.891 74.1686"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge3"; + targetClientId = "-1"; + targetObjectId = "3306"; + location = "287.61 -95.891 74.1686"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3432"; + }; + new AIObjective(AIORepairObject) { + position = "168.983 -165.995 64.03"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3302"; + location = "168.983 -165.995 64.03"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3432"; + }; + new AIObjective(AIORepairObject) { + position = "168.881 -130.271 64.0301"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3301"; + location = "168.881 -130.271 64.0301"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3432"; + }; + new AIObjective(AIOTouchObject) { + position = "252.953 -201.187 54.5324"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0FlipFlop1"; + mode = "TouchFlipFlop"; + targetObject = "Team0FlipFlop1"; + targetClientId = "-1"; + targetObjectId = "3295"; + location = "252.953 -201.187 54.5324"; + weightLevel1 = "4150"; + weightLevel2 = "4150"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3432"; + }; + new AIObjective(AIODefendLocation) { + position = "252.953 -201.187 54.5324"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the FlipFlop"; + targetObject = "Team0FlipFlop1"; + targetClientId = "-1"; + targetObjectId = "3295"; + location = "252.953 -201.187 54.5324"; + weightLevel1 = "3500"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3432"; + }; + new AIObjective(AIORepairObject) { + position = "257.234 -201.181 63.0361"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3293"; + location = "257.234 -201.181 63.0361"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3432"; + }; + }; + new SimGroup(grp7) { + + new AIObjective(AIODeployEquipment) { + position = "-18.3528 -79.1443 54.6532"; + rotation = "0 0 1 46.9825"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-18.3528 -79.1443 54.6532"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3446"; + }; + new AIObjective(AIODeployEquipment) { + position = "-7.02179 -56.3843 53.4228"; + rotation = "0 0 1 232.803"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-7.02179 -56.3843 53.4228"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3446"; + }; + new AIObjective(AIODeployEquipment) { + position = "10.8613 -85.727 51.4821"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "10.8613 -85.727 51.4821"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3446"; + }; + new AIObjective(AIORepairObject) { + position = "-83.4293 -126.212 62.1059"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge12"; + targetClientId = "-1"; + targetObjectId = "3348"; + location = "-83.4293 -126.212 62.1059"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3446"; + }; + new AIObjective(AIORepairObject) { + position = "-83.3273 -161.936 62.1058"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge11"; + targetClientId = "-1"; + targetObjectId = "3347"; + location = "-83.3273 -161.936 62.1058"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3446"; + }; + new AIObjective(AIORepairObject) { + position = "-9.84089 -71.0445 61.7886"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory6"; + targetClientId = "-1"; + targetObjectId = "3342"; + location = "-9.84089 -71.0445 61.7886"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3446"; + }; + new AIObjective(AIORepairObject) { + position = "23.1863 -146.896 64.2932"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge10"; + targetClientId = "-1"; + targetObjectId = "3341"; + location = "23.1863 -146.896 64.2932"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3446"; + }; + new AIObjective(AIORepairObject) { + position = "1.60257 -175.362 64.2933"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge9"; + targetClientId = "-1"; + targetObjectId = "3338"; + location = "1.60257 -175.362 64.2933"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3446"; + }; + new AIObjective(AIOTouchObject) { + position = "-12.6712 -67.8323 53.2849"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0FlipFlop3"; + mode = "TouchFlipFlop"; + targetObject = "Team0FlipFlop3"; + targetClientId = "-1"; + targetObjectId = "3337"; + location = "-12.6712 -67.8323 53.2849"; + weightLevel1 = "4150"; + weightLevel2 = "4150"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3446"; + }; + new AIObjective(AIODefendLocation) { + position = "-12.6712 -67.8323 53.2849"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the FlipFlop"; + targetObject = "Team0FlipFlop3"; + targetClientId = "-1"; + targetObjectId = "3337"; + location = "-12.6712 -67.8323 53.2849"; + weightLevel1 = "3500"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3446"; + }; + }; + }; + }; + new SimGroup(Team1) { + providesPower = "1"; + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "602.375 332.008 84"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "30"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "0"; + locked = "true"; + }; + }; + new SimGroup(Bridge) { + + new InteriorInstance() { + position = "724.218 142.836 52.1419"; + rotation = "0 0 1 38.9612"; + scale = "1 1 1"; + interiorFile = "bbrdgn.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "704.412 118.343 52.1419"; + rotation = "0 0 1 38.9612"; + scale = "1 1 1"; + interiorFile = "bbrdgo.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "714.472 130.784 52.1419"; + rotation = "0 0 1 38.9612"; + scale = "1 1 1"; + interiorFile = "bbrdgo.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "694.665 106.29 52.1419"; + rotation = "0 0 1 218.961"; + scale = "1 1 1"; + interiorFile = "bbrdgn.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new InteriorInstance() { + position = "529.834 284.514 155.934"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bmisc1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory1) { + position = "669.774 344.343 60.1714"; + rotation = "0 0 1 135"; + scale = "1 1 1"; + nameTag = "Vehicle Pad"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "654.134 379.984 58.1779"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bvpad.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "654.134 368.984 57.8779"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory2) { + position = "638.49 344.42 60.1664"; + rotation = "0 0 1 225"; + scale = "1 1 1"; + nameTag = "Vehicle Pad"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new SimGroup(BaseTower) { + + new InteriorInstance() { + position = "602.375 332.008 74.6359"; + rotation = "0 0 1 29.7938"; + scale = "1 1 1"; + interiorFile = "bbunk2.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new WayPoint() { + position = "602.375 332.008 74.6359"; + rotation = "-0 0 -1 11.4591"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Main Base"; + team = "0"; + locked = "true"; + }; + new Turret(Team1TurretBaseLarge1) { + position = "595.373 342.765 79.1395"; + rotation = "0 0 1 29.7938"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "MissileBarrelLarge"; + locked = "true"; + }; + new Turret(Team1TurretBaseLarge2) { + position = "615.191 331.393 79.1404"; + rotation = "0 0 1 29.7938"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "MissileBarrelLarge"; + locked = "true"; + }; + new StaticShape(Team1StationInventory3) { + position = "610.318 330.942 92.5107"; + rotation = "0 0 1 119.794"; + scale = "1 1 1"; + nameTag = "Main Base Top"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory4) { + position = "597.61 338.345 92.5103"; + rotation = "-0 0 -1 60.2062"; + scale = "1 1 1"; + nameTag = "Main Base Top"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory5) { + position = "594.225 344.218 68.1299"; + rotation = "-0 0 -1 60.2062"; + scale = "1 1 1"; + nameTag = "Main Base Bottom"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory6) { + position = "617.04 331.128 68.1255"; + rotation = "0 0 1 119.794"; + scale = "1 1 1"; + nameTag = "Main Base Bottom"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item() { + position = "605.426 337.128 79"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + }; + new Turret(Team1TurretBaseLarge3) { + position = "530.359 284.558 165.909"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Hilltop"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "MissileBarrelLarge"; + locked = "true"; + }; + new SimGroup(AIObjectives) { + + new SimGroup(grp1) { + + new AIObjective(AIOTouchObject) { + position = "427.113 -510.85 73.3822"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0FlipFlop4"; + mode = "TouchFlipFlop"; + targetObject = "Team0FlipFlop4"; + targetClientId = "-1"; + targetObjectId = "3358"; + location = "427.113 -510.85 73.3822"; + weightLevel1 = "4150"; + weightLevel2 = "4150"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3490"; + }; + new AIObjective(AIORepairObject) { + position = "431.308 -509.993 81.8858"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory8"; + targetClientId = "-1"; + targetObjectId = "3363"; + location = "431.308 -509.993 81.8858"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3490"; + }; + new AIObjective(AIORepairObject) { + position = "425.583 -387.271 64.9805"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge13"; + targetClientId = "-1"; + targetObjectId = "3359"; + location = "425.583 -387.271 64.9805"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3490"; + }; + new AIObjective(AIORepairObject) { + position = "399.533 -411.717 64.9804"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge14"; + targetClientId = "-1"; + targetObjectId = "3362"; + location = "399.533 -411.717 64.9804"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3490"; + }; + new AIObjective(AIODefendLocation) { + position = "427.113 -510.85 73.3822"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the FlipFlop"; + targetObject = "Team0FlipFlop4"; + targetClientId = "-1"; + targetObjectId = "3358"; + location = "427.113 -510.85 73.3822"; + weightLevel1 = "3500"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3490"; + }; + new AIObjective(AIODeployEquipment) { + position = "424.775 -522.63 77.2396"; + rotation = "0 0 1 168.45"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "424.775 -522.63 77.2396"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3490"; + }; + new AIObjective(AIODeployEquipment) { + position = "419.195 -508.656 75.996"; + rotation = "0 0 -1 95.111"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "419.195 -508.656 75.996"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3490"; + }; + new AIObjective(AIODeployEquipment) { + position = "430.571 -510.085 79.7152"; + rotation = "-1 0 0 89.3814"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "430.571 -510.085 79.7152"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3490"; + }; + new AIObjective(AIODeployEquipment) { + position = "418.972 -484.437 65.1499"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "418.972 -484.437 65.1499"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3490"; + }; + new AIObjective(AIODeployEquipment) { + position = "408.322 -532.494 65.9261"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "408.322 -532.494 65.9261"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3490"; + }; + }; + new AIObjective(AIORepairObject) { + position = "594.225 344.218 69.6957"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3483"; + location = "594.225 344.218 69.6957"; + weightLevel1 = "2850"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new SimGroup(grp4) { + + new AIObjective(AIORepairObject) { + position = "234.262 -469.468 65.9844"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge5"; + targetClientId = "-1"; + targetObjectId = "3320"; + location = "234.262 -469.468 65.9844"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3502"; + }; + new AIObjective(AIORepairObject) { + position = "132.432 -576.014 69.6395"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge8"; + targetClientId = "-1"; + targetObjectId = "3326"; + location = "132.432 -576.014 69.6395"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3502"; + }; + new AIObjective(AIODefendLocation) { + position = "175.109 -490.523 53.7869"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the FlipFlop"; + targetObject = "Team0FlipFlop2"; + targetClientId = "-1"; + targetObjectId = "3313"; + location = "175.109 -490.523 53.7869"; + weightLevel1 = "3500"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3502"; + }; + new AIObjective(AIORepairObject) { + position = "162.986 -594.526 69.6394"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge7"; + targetClientId = "-1"; + targetObjectId = "3325"; + location = "162.986 -594.526 69.6394"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3502"; + }; + new AIObjective(AIORepairObject) { + position = "178.434 -487.826 62.2906"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3316"; + location = "178.434 -487.826 62.2906"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3502"; + }; + new AIObjective(AIORepairObject) { + position = "247.991 -502.449 65.9845"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge6"; + targetClientId = "-1"; + targetObjectId = "3321"; + location = "247.991 -502.449 65.9845"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3502"; + }; + new AIObjective(AIOTouchObject) { + position = "175.109 -490.523 53.7869"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0FlipFlop2"; + mode = "TouchFlipFlop"; + targetObject = "Team0FlipFlop2"; + targetClientId = "-1"; + targetObjectId = "3313"; + location = "175.109 -490.523 53.7869"; + weightLevel1 = "4150"; + weightLevel2 = "4150"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3502"; + }; + new AIObjective(AIODeployEquipment) { + position = "203.001 -494.735 50.207"; + rotation = "0 0 1 127.77"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "203.001 -494.735 50.207"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3502"; + }; + new AIObjective(AIODeployEquipment) { + position = "141.181 -472.359 52.0886"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "141.181 -472.359 52.0886"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3502"; + }; + new AIObjective(AIODeployEquipment) { + position = "177.281 -499.591 69.8078"; + rotation = "0 0 1 135.791"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "177.281 -499.591 69.8078"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3502"; + }; + new AIObjective(AIODeployEquipment) { + position = "180.268 -486.555 55.789"; + rotation = "0 0 1 51.5662"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "180.268 -486.555 55.789"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3502"; + }; + new AIObjective(AIODeployEquipment) { + position = "164.503 -484.759 57.8043"; + rotation = "0 0 -1 36.0963"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "164.503 -484.759 57.8043"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3502"; + }; + }; + new SimGroup(grp2) { + + new AIObjective(AIORepairObject) { + position = "168.881 -130.271 64.0301"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3301"; + location = "168.881 -130.271 64.0301"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3515"; + }; + new AIObjective(AIORepairObject) { + position = "248.982 -62.9168 74.1773"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge4"; + targetClientId = "-1"; + targetObjectId = "3307"; + location = "248.982 -62.9168 74.1773"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3515"; + }; + new AIObjective(AIODefendLocation) { + position = "252.953 -201.187 54.5324"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the FlipFlop"; + targetObject = "Team0FlipFlop1"; + targetClientId = "-1"; + targetObjectId = "3295"; + location = "252.953 -201.187 54.5324"; + weightLevel1 = "3500"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3515"; + }; + new AIObjective(AIORepairObject) { + position = "287.61 -95.891 74.1686"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge3"; + targetClientId = "-1"; + targetObjectId = "3306"; + location = "287.61 -95.891 74.1686"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3515"; + }; + new AIObjective(AIORepairObject) { + position = "257.234 -201.181 63.0361"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3293"; + location = "257.234 -201.181 63.0361"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3515"; + }; + new AIObjective(AIORepairObject) { + position = "168.983 -165.995 64.03"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3302"; + location = "168.983 -165.995 64.03"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3515"; + }; + new AIObjective(AIOTouchObject) { + position = "252.953 -201.187 54.5324"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0FlipFlop1"; + mode = "TouchFlipFlop"; + targetObject = "Team0FlipFlop1"; + targetClientId = "-1"; + targetObjectId = "3295"; + location = "252.953 -201.187 54.5324"; + weightLevel1 = "4150"; + weightLevel2 = "4150"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3515"; + }; + new AIObjective(AIODeployEquipment) { + position = "259.454 -201.161 58.777"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "259.454 -201.161 58.777"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3515"; + }; + new AIObjective(AIODeployEquipment) { + position = "246.45 -201.167 58.5704"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "246.45 -201.167 58.5704"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3515"; + }; + new AIObjective(AIODeployEquipment) { + position = "257.856 -187.451 68.6284"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "257.856 -187.451 68.6284"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3515"; + }; + new AIObjective(AIODeployEquipment) { + position = "257.845 -214.86 68.6444"; + rotation = "0 0 1 180.091"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "257.845 -214.86 68.6444"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3515"; + }; + new AIObjective(AIODeployEquipment) { + position = "224.096 -201.396 52.5064"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "224.096 -201.396 52.5064"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3515"; + }; + new AIObjective(AIODeployEquipment) { + position = "242.26 -150.912 51.821"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "242.26 -150.912 51.821"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3515"; + }; + }; + new SimGroup(grp3) { + + new AIObjective(AIOTouchObject) { + position = "-12.6712 -67.8323 53.2849"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0FlipFlop3"; + mode = "TouchFlipFlop"; + targetObject = "Team0FlipFlop3"; + targetClientId = "-1"; + targetObjectId = "3337"; + location = "-12.6712 -67.8323 53.2849"; + weightLevel1 = "4150"; + weightLevel2 = "4150"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3529"; + }; + new AIObjective(AIORepairObject) { + position = "-83.4293 -126.212 62.1059"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge12"; + targetClientId = "-1"; + targetObjectId = "3348"; + location = "-83.4293 -126.212 62.1059"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3529"; + }; + new AIObjective(AIODefendLocation) { + position = "-12.6712 -67.8323 53.2849"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the FlipFlop"; + targetObject = "Team0FlipFlop3"; + targetClientId = "-1"; + targetObjectId = "3337"; + location = "-12.6712 -67.8323 53.2849"; + weightLevel1 = "3500"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3529"; + }; + new AIObjective(AIORepairObject) { + position = "-83.3273 -161.936 62.1058"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge11"; + targetClientId = "-1"; + targetObjectId = "3347"; + location = "-83.3273 -161.936 62.1058"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3529"; + }; + new AIObjective(AIORepairObject) { + position = "23.1863 -146.896 64.2932"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge10"; + targetClientId = "-1"; + targetObjectId = "3341"; + location = "23.1863 -146.896 64.2932"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3529"; + }; + new AIObjective(AIORepairObject) { + position = "-9.84089 -71.0445 61.7886"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory6"; + targetClientId = "-1"; + targetObjectId = "3342"; + location = "-9.84089 -71.0445 61.7886"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3529"; + }; + new AIObjective(AIORepairObject) { + position = "1.60257 -175.362 64.2933"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge9"; + targetClientId = "-1"; + targetObjectId = "3338"; + location = "1.60257 -175.362 64.2933"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3529"; + }; + new AIObjective(AIODeployEquipment) { + position = "-18.3528 -79.1443 54.6532"; + rotation = "0 0 1 46.9825"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-18.3528 -79.1443 54.6532"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3529"; + }; + new AIObjective(AIODeployEquipment) { + position = "-7.02179 -56.3843 53.4228"; + rotation = "0 0 1 232.803"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-7.02179 -56.3843 53.4228"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3529"; + }; + new AIObjective(AIODeployEquipment) { + position = "10.8613 -85.727 51.4821"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "10.8613 -85.727 51.4821"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3529"; + }; + }; + }; + }; + }; + new SimGroup(Organics) { + + new TSStatic() { + position = "331.394 -166.376 85.3343"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "380.847 -227.055 121.446"; + rotation = "0 0 -1 68.7549"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "404.57 -233.1 123.697"; + rotation = "0 0 -1 48.7014"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "401.749 -211.875 123.725"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "378.249 -198.292 129.463"; + rotation = "-0.00170638 -0.0378941 -0.99928 63.6353"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "284.678 177.619 193.319"; + rotation = "0 0 -1 60.1606"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "292.228 -248.322 67.037"; + rotation = "0 0 1 29.7938"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "181.807 -84.7235 113.662"; + rotation = "0 0 1 103.132"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "162.872 -79.7908 111.602"; + rotation = "0 0 -1 59.0147"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "132.489 -77.2851 107.348"; + rotation = "0 0 1 223.636"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "169.083 -44.438 135.77"; + rotation = "-0.247779 -0.0725931 -0.966093 33.7407"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "288.415 63.3826 134.697"; + rotation = "0 0 -1 37.8152"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "289.228 112.321 189.357"; + rotation = "0 0 1 47.5555"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "300.135 125.783 189.234"; + rotation = "0.475758 0.827279 -0.298769 6.17968"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "293.278 149.09 174.308"; + rotation = "0 0 -1 114.019"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "316.67 178.038 187.224"; + rotation = "0 0 -1 94.538"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new InteriorInstance() { + position = "390.682 -95.601 44.9262"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir5.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-312.225 -800.358 55.3381"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "732.162 324.73 53.9878"; + rotation = "0 0 1 141.521"; + scale = "1 1 1"; + interiorFile = "bspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "697.817 398.906 49.1765"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-228.482 90.2813 177.037"; + rotation = "0 1 0 163.293"; + scale = "1.5 1.5 1.5"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new TSStatic() { + position = "-114.126 -516.117 132.651"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-81.1803 -569.975 154.802"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-69.3906 -553.209 148.263"; + rotation = "0.899673 -0.431983 0.0630802 18.4384"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new InteriorInstance() { + position = "-87.607 -516.189 124.094"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "brock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-89.2754 -513.292 125.139"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "brock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-77.7768 -517.893 121.383"; + rotation = "1 0 0 48.1285"; + scale = "1 1 1"; + interiorFile = "brock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-78.9978 -515.732 121.902"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "brock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-70.467 -526.377 124.313"; + rotation = "0 0 -1 37.2423"; + scale = "1 1 1"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-74.2521 -514.761 122.269"; + rotation = "0.917121 0.21346 0.336636 118.929"; + scale = "1.5 1.5 1.5"; + interiorFile = "brock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-91.3209 -525.986 126.555"; + rotation = "1 0 0 87.6625"; + scale = "1 1 1"; + interiorFile = "brock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-83.0319 -527.811 125.734"; + rotation = "-0.352897 0.661613 0.661613 77.7511"; + scale = "1 1 1"; + interiorFile = "brock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "506.919 210.068 100.406"; + rotation = "0 0 -1 33.2315"; + scale = "1 1 1"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(RandomOrganics) { + + new SimGroup(Addition9BELGTree16) { + + new TSStatic() { + position = "-556 -332 64.3593"; + rotation = "0 0 -1 110"; + scale = "1.5 1.5 1.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-396 300 80"; + rotation = "0 0 1 2.99997"; + scale = "1.4 1.4 1.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "468 -900 75.5937"; + rotation = "0 0 1 9.99989"; + scale = "1.2 1.2 1.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-508 -84 65.25"; + rotation = "0 0 1 225"; + scale = "1.2 1.2 1.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-588 -332 68.9062"; + rotation = "0 0 1 232"; + scale = "0.8 0.8 0.8"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-156 252 115.813"; + rotation = "1 0 0 0"; + scale = "1.2 1.2 1.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "948 -20 65.5781"; + rotation = "0 0 1 178"; + scale = "1.1 1.1 1.1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-524 -92 65.5781"; + rotation = "0 0 1 58.9997"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "204 636 71.5624"; + rotation = "0 0 1 225"; + scale = "1.1 1.1 1.1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "52 388 68.5781"; + rotation = "0 0 1 44"; + scale = "1.5 1.5 1.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "812 28 155.687"; + rotation = "0 0 1 137"; + scale = "1.2 1.2 1.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "76 524 64.5626"; + rotation = "0 0 1 96.0002"; + scale = "0.9 0.9 0.9"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "924 -716 62.5157"; + rotation = "0 0 1 115"; + scale = "0.9 0.9 0.9"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "236 -580 98.781"; + rotation = "1 0 0 0"; + scale = "1.1 1.1 1.1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "404 -532 63.0469"; + rotation = "0 0 1 22"; + scale = "1.1 1.1 1.1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "900 -828 68"; + rotation = "0 0 -1 5.99979"; + scale = "1.5 1.5 1.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "36 -268 65.9375"; + rotation = "0 0 -1 119"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "908 -196 102.219"; + rotation = "0 0 1 190"; + scale = "0.8 0.8 0.8"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "44 100 120.313"; + rotation = "0 0 -1 83.0004"; + scale = "1.2 1.2 1.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-444 -436 76.25"; + rotation = "0 0 1 132"; + scale = "1.4 1.4 1.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "132 -332 104.312"; + rotation = "0 0 1 142"; + scale = "1.5 1.5 1.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "52 84 121.437"; + rotation = "0 0 -1 63.0001"; + scale = "0.8 0.8 0.8"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "956 -948 67.0938"; + rotation = "0 0 1 209"; + scale = "1.1 1.1 1.1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-292 -180 67.4532"; + rotation = "0 0 1 50"; + scale = "0.8 0.8 0.8"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "84 -716 88.9219"; + rotation = "0 0 1 100"; + scale = "1.3 1.3 1.3"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "940 -732 65.5781"; + rotation = "0 0 1 140"; + scale = "0.9 0.9 0.9"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "36 -260 67.2813"; + rotation = "0 0 -1 114"; + scale = "1.1 1.1 1.1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "372 588 104.156"; + rotation = "0 0 1 150"; + scale = "1.1 1.1 1.1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-380 -596 70.4844"; + rotation = "0 0 1 38"; + scale = "1.4 1.4 1.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-572 252 74.6719"; + rotation = "0 0 1 91"; + scale = "1.5 1.5 1.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "588 -428 85.5468"; + rotation = "0 0 1 43"; + scale = "1.1 1.1 1.1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-148 -636 117.078"; + rotation = "0 0 -1 28.0002"; + scale = "1.2 1.2 1.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-244 -100 96.5469"; + rotation = "0 0 -1 4.00015"; + scale = "1.5 1.5 1.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "812 612 62.4219"; + rotation = "0 0 -1 108"; + scale = "1.3 1.3 1.3"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "332 196 190.766"; + rotation = "0 0 1 70"; + scale = "1.4 1.4 1.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-516 -828 66.1719"; + rotation = "0 0 -1 25.0002"; + scale = "1.3 1.3 1.3"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "516 324 154.891"; + rotation = "0 0 -1 81.0002"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "988 -4 65.0157"; + rotation = "0 0 -1 104"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "932 -692 62.6563"; + rotation = "0 0 -1 116"; + scale = "1.5 1.5 1.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "396 -228 120.688"; + rotation = "0 0 -1 61.0005"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "620 188 155.75"; + rotation = "0 0 1 61.9998"; + scale = "1.3 1.3 1.3"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-180 516 67.1563"; + rotation = "0 0 -1 70.0005"; + scale = "1.2 1.2 1.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-268 36 187.187"; + rotation = "0 0 1 11"; + scale = "0.9 0.9 0.9"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "932 516 71.4531"; + rotation = "0 0 1 221"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-356 -908 132.016"; + rotation = "0 0 1 209"; + scale = "1.4 1.4 1.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "860 -668 75.3281"; + rotation = "0 0 1 197"; + scale = "1.3 1.3 1.3"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "364 4 68.9687"; + rotation = "0 0 -1 79"; + scale = "1.5 1.5 1.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "764 -212 75.8906"; + rotation = "0 0 -1 50.9998"; + scale = "0.8 0.8 0.8"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-340 172 71.5781"; + rotation = "0 0 1 67"; + scale = "0.9 0.9 0.9"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-188 252 114.391"; + rotation = "0 0 1 57.9999"; + scale = "1.2 1.2 1.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-380 572 110.844"; + rotation = "0 0 1 45"; + scale = "1.2 1.2 1.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-396 300 80"; + rotation = "0 0 -1 113"; + scale = "1.4 1.4 1.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-236 172 64.6719"; + rotation = "0 0 1 129"; + scale = "1.2 1.2 1.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "52 -260 68.4062"; + rotation = "0 0 -1 96.0002"; + scale = "0.9 0.9 0.9"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "924 164 153.859"; + rotation = "0 0 -1 52.0003"; + scale = "1.4 1.4 1.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "924 -676 62.0781"; + rotation = "0 0 1 55"; + scale = "0.9 0.9 0.9"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-492 -116 63.5781"; + rotation = "0 0 1 99.0002"; + scale = "0.8 0.8 0.8"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-524 -644 107.531"; + rotation = "0 0 -1 104"; + scale = "1.3 1.3 1.3"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-132 -636 119.016"; + rotation = "0 0 1 149"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "636 -188 62.5313"; + rotation = "0 0 1 215"; + scale = "1.3 1.3 1.3"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "652 -180 63.6719"; + rotation = "0 0 -1 98.0004"; + scale = "0.9 0.9 0.9"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "852 220 62.8281"; + rotation = "0 0 -1 97"; + scale = "0.9 0.9 0.9"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "980 -220 65.4844"; + rotation = "0 0 -1 9.99997"; + scale = "1.1 1.1 1.1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-532 332 116.375"; + rotation = "0 0 -1 82"; + scale = "1.2 1.2 1.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-276 -44 170.344"; + rotation = "0 0 1 204"; + scale = "1.2 1.2 1.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-356 348 106.656"; + rotation = "0 0 1 218"; + scale = "1.2 1.2 1.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "44 396 68.8906"; + rotation = "0 0 1 182"; + scale = "1.3 1.3 1.3"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-356 -44 156.641"; + rotation = "0 0 1 202"; + scale = "1.4 1.4 1.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "780 -804 127.141"; + rotation = "0 0 1 58.9997"; + scale = "1.4 1.4 1.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "892 -828 67.5157"; + rotation = "0 0 -1 101"; + scale = "1.2 1.2 1.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-388 -804 64.2343"; + rotation = "0 0 1 157"; + scale = "1.2 1.2 1.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-356 172 71.9844"; + rotation = "0 0 1 218"; + scale = "1.2 1.2 1.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-236 -804 63.1875"; + rotation = "0 0 1 223"; + scale = "0.8 0.8 0.8"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "812 428 67.8281"; + rotation = "0 0 -1 32"; + scale = "1.4 1.4 1.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "36 -260 67.2813"; + rotation = "0 0 1 94"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "348 620 127.688"; + rotation = "0 0 1 141"; + scale = "1.5 1.5 1.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "532 -492 70.25"; + rotation = "0 0 1 105"; + scale = "1.1 1.1 1.1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "924 -716 62.5157"; + rotation = "0 0 1 201"; + scale = "0.8 0.8 0.8"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-356 -908 132.016"; + rotation = "0 0 1 168"; + scale = "1.5 1.5 1.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-396 -796 65.2813"; + rotation = "0 0 1 28"; + scale = "1.1 1.1 1.1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "340 476 112.75"; + rotation = "0 0 -1 89.0004"; + scale = "1.1 1.1 1.1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "20 -364 141.25"; + rotation = "0 0 -1 101"; + scale = "1.5 1.5 1.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-476 -428 71.7657"; + rotation = "0 0 1 193"; + scale = "1.5 1.5 1.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "20 -228 62.4844"; + rotation = "0 0 -1 13.0002"; + scale = "1.2 1.2 1.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "940 -588 68.1406"; + rotation = "0 0 -1 94"; + scale = "0.8 0.8 0.8"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-404 540 76.6563"; + rotation = "0 0 1 50"; + scale = "1.4 1.4 1.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-436 -428 76.5938"; + rotation = "0 0 1 191"; + scale = "0.8 0.8 0.8"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "108 -340 88.8125"; + rotation = "0 0 1 197"; + scale = "0.8 0.8 0.8"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "620 -332 92.8281"; + rotation = "0 0 -1 108"; + scale = "1.2 1.2 1.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "908 -476 62.875"; + rotation = "0 0 -1 84.9994"; + scale = "1.5 1.5 1.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "932 516 71.4531"; + rotation = "0 0 1 199"; + scale = "0.9 0.9 0.9"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "396 -236 121.812"; + rotation = "0 0 1 56"; + scale = "1.1 1.1 1.1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "852 236 66.3906"; + rotation = "0 0 1 122"; + scale = "0.9 0.9 0.9"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-500 -116 63.9687"; + rotation = "0 0 1 84.0002"; + scale = "0.9 0.9 0.9"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-604 -52 99.844"; + rotation = "0 0 1 122"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "68 100 119.422"; + rotation = "0 0 1 105"; + scale = "1.2 1.2 1.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-212 -852 107.984"; + rotation = "0 0 -1 114"; + scale = "0.8 0.8 0.8"; + shapeName = "borg16.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition10BELGTree18) { + + new TSStatic() { + position = "-484 -436 71.3437"; + rotation = "0 0 -1 38.9999"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "948 452 81.0156"; + rotation = "0 0 1 57.9999"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "964 -20 66.7031"; + rotation = "0 0 1 52"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "980 4 63.4687"; + rotation = "0 0 1 224"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "60 -276 65.3438"; + rotation = "0 0 1 44"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-388 -708 73.9843"; + rotation = "0 0 1 161"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "508 300 151"; + rotation = "0 0 1 199"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "36 -228 65.1563"; + rotation = "1 0 0 0"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-348 -196 129.922"; + rotation = "0 0 1 222"; + scale = "1.4 1.4 1.4"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "940 -708 63.5312"; + rotation = "0 0 1 4.99997"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "52 372 65.3906"; + rotation = "0 0 1 79"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-356 -140 113.594"; + rotation = "0 0 -1 7.99996"; + scale = "1.3 1.3 1.3"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "932 -580 69.7657"; + rotation = "0 0 1 209"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "964 -20 66.7031"; + rotation = "0 0 -1 40.0002"; + scale = "1.4 1.4 1.4"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-396 300 80"; + rotation = "0 0 1 194"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "892 -820 66.7968"; + rotation = "0 0 1 41"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "284 -660 170.922"; + rotation = "0 0 1 88.9998"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "828 -764 92.6094"; + rotation = "0 0 1 26"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "892 -828 67.5157"; + rotation = "0 0 1 51"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "332 580 123.375"; + rotation = "0 0 1 195"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-588 -340 68.8281"; + rotation = "0 0 1 54"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-52 380 162.484"; + rotation = "0 0 1 228"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-524 572 62.375"; + rotation = "0 0 1 178"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "300 636 117.281"; + rotation = "0 0 -1 4.99997"; + scale = "1.4 1.4 1.4"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "132 -332 104.312"; + rotation = "0 0 -1 111"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "860 228 65.7188"; + rotation = "0 0 1 67.9998"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-140 500 68.7812"; + rotation = "0 0 1 73.9998"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "940 508 71.7969"; + rotation = "0 0 -1 75.0002"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "300 -116 80.4219"; + rotation = "0 0 -1 13.0002"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-372 580 110.281"; + rotation = "0 0 -1 75.0002"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "292 612 118.688"; + rotation = "0 0 1 9.00004"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-484 -340 64.6251"; + rotation = "0 0 1 91"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "596 -420 83.9376"; + rotation = "0 0 1 192"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "76 532 64.3593"; + rotation = "0 0 -1 22.9999"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-100 -804 81.0937"; + rotation = "0 0 1 202"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-404 -788 64.2343"; + rotation = "0 0 1 199"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "940 -732 65.5781"; + rotation = "0 0 1 130"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "612 -476 72.2657"; + rotation = "0 0 1 175"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "604 -260 71.8126"; + rotation = "0 0 1 212"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-260 36 188.734"; + rotation = "0 0 1 53"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-596 340 136.219"; + rotation = "0 0 -1 14"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-124 548 64.4374"; + rotation = "0 0 1 155"; + scale = "1.3 1.3 1.3"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-500 -460 69.1562"; + rotation = "0 0 -1 65.0003"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "332 532 121.312"; + rotation = "0 0 -1 5.99979"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "284 180 190.875"; + rotation = "0 0 1 9.99989"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "756 540 72.2813"; + rotation = "0 0 1 205"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-44 252 240.781"; + rotation = "0 0 1 167"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "628 180 157.469"; + rotation = "0 0 1 16"; + scale = "1.3 1.3 1.3"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-580 180 106.094"; + rotation = "0 0 1 194"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "948 -748 64.4531"; + rotation = "0 0 1 132"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "76 -284 63.9218"; + rotation = "0 0 1 199"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "716 -812 68.3281"; + rotation = "0 0 1 226"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-444 564 66.3437"; + rotation = "0 0 1 204"; + scale = "1.3 1.3 1.3"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "860 212 63.9531"; + rotation = "1 0 0 0"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "524 284 158.281"; + rotation = "0 0 1 18"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-356 340 106.141"; + rotation = "0 0 1 211"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-140 492 69"; + rotation = "0 0 -1 96.0002"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "524 -556 136.391"; + rotation = "0 0 1 54"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "44 92 121.266"; + rotation = "0 0 1 35"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-420 -428 75.1406"; + rotation = "0 0 1 84.0002"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "524 -564 135.531"; + rotation = "0 0 1 102"; + scale = "1.4 1.4 1.4"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-284 252 81.3437"; + rotation = "0 0 1 188"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "300 188 185.609"; + rotation = "0 0 -1 22.0002"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "60 124 109.516"; + rotation = "0 0 -1 96.0002"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "276 -652 172.875"; + rotation = "0 0 1 149"; + scale = "1.4 1.4 1.4"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-460 -444 73.3125"; + rotation = "0 0 1 100"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-84 -956 87.3125"; + rotation = "0 0 1 168"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-68 636 62.0937"; + rotation = "0 0 1 168"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-380 -612 68.5"; + rotation = "0 0 -1 32.9998"; + scale = "1.3 1.3 1.3"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "596 -676 200.953"; + rotation = "0 0 -1 41.9998"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "52 372 65.3906"; + rotation = "0 0 1 209"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "948 580 83.7343"; + rotation = "0 0 1 49"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-604 348 135.359"; + rotation = "0 0 1 146"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "20 -364 141.25"; + rotation = "0 0 1 216"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "580 196 152.812"; + rotation = "0 0 1 194"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "820 -804 122.156"; + rotation = "0 0 1 36"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "268 -940 88.3281"; + rotation = "0 0 -1 78.0002"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "780 -308 157.234"; + rotation = "0 0 1 119"; + scale = "1.4 1.4 1.4"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "964 -764 63.6562"; + rotation = "0 0 1 207"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-516 -100 65.4063"; + rotation = "0 0 1 114"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-196 252 115.109"; + rotation = "0 0 1 79.9998"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "972 -764 64.8282"; + rotation = "0 0 1 142"; + scale = "1.3 1.3 1.3"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "948 -116 62.75"; + rotation = "0 0 -1 67.0005"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-548 -788 158.375"; + rotation = "0 0 1 123"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "780 -308 157.234"; + rotation = "0 0 -1 4.99997"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "948 580 83.7343"; + rotation = "0 0 1 38"; + scale = "1.4 1.4 1.4"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-196 -900 104.422"; + rotation = "0 0 1 163"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-84 -956 87.3125"; + rotation = "0 0 1 202"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "732 -348 135.156"; + rotation = "0 0 1 215"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "948 564 82.6094"; + rotation = "0 0 1 64"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "36 -908 150.219"; + rotation = "0 0 -1 108"; + scale = "1.4 1.4 1.4"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-412 -796 63.3438"; + rotation = "0 0 1 128"; + scale = "1.3 1.3 1.3"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-380 44 64.3125"; + rotation = "0 0 1 41"; + scale = "1.4 1.4 1.4"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "332 580 123.375"; + rotation = "0 0 1 187"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition11BELGTree19) { + + new TSStatic() { + position = "28 380 64.9688"; + rotation = "0 0 -1 69.0002"; + scale = "1.4 1.4 1.4"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "340 500 119.031"; + rotation = "0 0 -1 44.9999"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "556 -452 97.125"; + rotation = "0 0 -1 17.9997"; + scale = "1.4 1.4 1.4"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "604 -348 92.8437"; + rotation = "0 0 1 76.9998"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-436 -492 83.9376"; + rotation = "0 0 1 224"; + scale = "1.3 1.3 1.3"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-380 -788 62.2813"; + rotation = "0 0 -1 83.0004"; + scale = "1.2 1.2 1.2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-44 356 164.219"; + rotation = "0 0 -1 71.0004"; + scale = "0.9 0.9 0.9"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "820 412 64.6563"; + rotation = "0 0 -1 4.00015"; + scale = "1.3 1.3 1.3"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-404 52 70.875"; + rotation = "0 0 -1 90.0002"; + scale = "0.9 0.9 0.9"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-148 244 117.531"; + rotation = "0 0 1 131"; + scale = "1.3 1.3 1.3"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "340 588 122.813"; + rotation = "0 0 -1 8.99978"; + scale = "1.2 1.2 1.2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "444 -660 79.1251"; + rotation = "0 0 1 234"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-188 252 114.391"; + rotation = "0 0 -1 64.0005"; + scale = "0.9 0.9 0.9"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-356 -964 98.969"; + rotation = "0 0 1 193"; + scale = "1.2 1.2 1.2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-28 -956 87.2188"; + rotation = "0 0 1 186"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "100 -316 87.0938"; + rotation = "0 0 1 160"; + scale = "1.4 1.4 1.4"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-388 68 65.3594"; + rotation = "0 0 -1 105"; + scale = "1.4 1.4 1.4"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "924 -708 62.6563"; + rotation = "0 0 1 161"; + scale = "0.9 0.9 0.9"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "788 -12 142.906"; + rotation = "0 0 1 181"; + scale = "1.3 1.3 1.3"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "980 -908 117.859"; + rotation = "0 0 1 136"; + scale = "1.4 1.4 1.4"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-204 292 79.4219"; + rotation = "0 0 1 205"; + scale = "1.1 1.1 1.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "692 588 99.906"; + rotation = "0 0 1 131"; + scale = "0.9 0.9 0.9"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-132 -636 119.016"; + rotation = "0 0 -1 93.0002"; + scale = "1.3 1.3 1.3"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "724 -804 69.1093"; + rotation = "0 0 -1 26"; + scale = "1.1 1.1 1.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "532 -596 138.969"; + rotation = "0 0 -1 115"; + scale = "1.3 1.3 1.3"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "940 -588 68.1406"; + rotation = "0 0 1 18"; + scale = "0.8 0.8 0.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "612 -348 92.2031"; + rotation = "0 0 1 103"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "44 100 120.313"; + rotation = "0 0 1 200"; + scale = "0.8 0.8 0.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-188 220 110.062"; + rotation = "0 0 1 141"; + scale = "0.8 0.8 0.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-132 -636 119.016"; + rotation = "0 0 1 117"; + scale = "1.3 1.3 1.3"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "100 4 141.391"; + rotation = "0 0 -1 96.0002"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "44 100 120.313"; + rotation = "0 0 -1 32.9998"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "372 460 93.6094"; + rotation = "0 0 -1 4.00015"; + scale = "1.4 1.4 1.4"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "972 -4 64.1406"; + rotation = "0 0 1 55"; + scale = "1.2 1.2 1.2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-396 36 65.6094"; + rotation = "0 0 1 94.9998"; + scale = "0.8 0.8 0.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "932 444 84.9063"; + rotation = "0 0 1 224"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-372 196 79.2032"; + rotation = "0 0 -1 84.0002"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "100 4 141.391"; + rotation = "0 0 -1 119"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "396 -268 112.484"; + rotation = "0 0 -1 14"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "668 -332 163.125"; + rotation = "0 0 1 9.00004"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "396 -524 63.5"; + rotation = "0 0 1 203"; + scale = "1.3 1.3 1.3"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "52 -284 67.2344"; + rotation = "0 0 1 161"; + scale = "1.3 1.3 1.3"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "620 -460 76.0937"; + rotation = "0 0 1 236"; + scale = "1.1 1.1 1.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "604 204 153.75"; + rotation = "0 0 1 54"; + scale = "0.8 0.8 0.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-188 236 108.953"; + rotation = "0 0 -1 68.0003"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "140 -84 104.25"; + rotation = "0 0 -1 110"; + scale = "1.4 1.4 1.4"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "548 -860 68.3594"; + rotation = "0 0 1 205"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "596 -396 88.1093"; + rotation = "0 0 1 33"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-228 36 188.656"; + rotation = "1 0 0 0"; + scale = "1.3 1.3 1.3"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "788 -812 128.422"; + rotation = "0 0 -1 95.0004"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "948 -748 64.4531"; + rotation = "0 0 1 120"; + scale = "1.1 1.1 1.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-612 -28 101.625"; + rotation = "0 0 1 33"; + scale = "0.8 0.8 0.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-476 -436 72.4063"; + rotation = "0 0 1 142"; + scale = "1.2 1.2 1.2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-308 340 134.438"; + rotation = "0 0 1 53"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-236 44 189.203"; + rotation = "0 0 -1 111"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "556 -868 65.8281"; + rotation = "0 0 1 149"; + scale = "1.2 1.2 1.2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "100 -316 87.0938"; + rotation = "0 0 1 140"; + scale = "0.8 0.8 0.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "412 564 68.75"; + rotation = "0 0 1 61.9998"; + scale = "0.9 0.9 0.9"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "68 -300 63.7031"; + rotation = "0 0 1 156"; + scale = "1.1 1.1 1.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-364 340 104.875"; + rotation = "1 0 0 0"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "620 -212 65.6406"; + rotation = "0 0 -1 96.0002"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "260 492 111.5"; + rotation = "0 0 -1 46.0002"; + scale = "1.4 1.4 1.4"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-180 516 67.1563"; + rotation = "0 0 1 138"; + scale = "1.1 1.1 1.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "68 -276 63.4219"; + rotation = "0 0 1 235"; + scale = "1.4 1.4 1.4"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "228 -444 71.5937"; + rotation = "0 0 1 175"; + scale = "1.4 1.4 1.4"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "300 180 185.141"; + rotation = "0 0 -1 84.0002"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "92 -788 127.516"; + rotation = "0 0 1 136"; + scale = "1.1 1.1 1.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-148 -588 92.7812"; + rotation = "0 0 -1 43.0002"; + scale = "1.1 1.1 1.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "596 -268 74.4375"; + rotation = "0 0 1 227"; + scale = "1.2 1.2 1.2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "980 -908 117.859"; + rotation = "0 0 1 216"; + scale = "1.4 1.4 1.4"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-364 -204 131.156"; + rotation = "0 0 1 46"; + scale = "0.9 0.9 0.9"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "60 284 111.25"; + rotation = "0 0 -1 96.0002"; + scale = "1.1 1.1 1.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "516 332 153.891"; + rotation = "0 0 1 97"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-404 540 76.6563"; + rotation = "0 0 -1 94"; + scale = "1.3 1.3 1.3"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "316 -724 171.313"; + rotation = "0 0 -1 94"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-348 -276 120.641"; + rotation = "0 0 1 3.99996"; + scale = "1.4 1.4 1.4"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "836 636 62.1876"; + rotation = "0 0 1 128"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "868 244 67.7969"; + rotation = "0 0 -1 50.9998"; + scale = "1.2 1.2 1.2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "236 388 146.625"; + rotation = "0 0 1 220"; + scale = "0.8 0.8 0.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "100 -900 102.312"; + rotation = "0 0 -1 38"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "380 596 102.141"; + rotation = "0 0 1 180"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "828 -180 79.4532"; + rotation = "0 0 1 143"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "92 -908 100.813"; + rotation = "0 0 1 221"; + scale = "1.2 1.2 1.2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "308 -780 178.125"; + rotation = "0 0 -1 8.99978"; + scale = "0.8 0.8 0.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "828 -36 124.422"; + rotation = "0 0 1 229"; + scale = "1.2 1.2 1.2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "156 -76 108.25"; + rotation = "0 0 1 55"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-260 36 188.734"; + rotation = "0 0 -1 16.0002"; + scale = "0.9 0.9 0.9"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "356 564 112.141"; + rotation = "0 0 -1 50.9998"; + scale = "1.2 1.2 1.2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-500 -108 65.0469"; + rotation = "0 0 1 75.0002"; + scale = "1.1 1.1 1.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "796 -756 95.5312"; + rotation = "0 0 1 223"; + scale = "0.8 0.8 0.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "516 332 153.891"; + rotation = "0 0 1 114"; + scale = "0.8 0.8 0.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "900 -668 64.9844"; + rotation = "0 0 1 14"; + scale = "1.1 1.1 1.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "316 628 115.234"; + rotation = "0 0 -1 32"; + scale = "1.3 1.3 1.3"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "908 -828 66.625"; + rotation = "0 0 1 76.9998"; + scale = "0.9 0.9 0.9"; + shapeName = "borg19.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition12BESmTree17) { + + new TSStatic() { + position = "596 -260 72.25"; + rotation = "0 0 1 117"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "388 -524 64.125"; + rotation = "0 0 1 233"; + scale = "1.5 1.5 1.5"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "940 -100 62.0624"; + rotation = "0 0 1 101"; + scale = "1.3 1.3 1.3"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "436 -492 65.0157"; + rotation = "0 0 1 174"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "932 -684 62.2032"; + rotation = "0 0 -1 111"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-172 -676 122.266"; + rotation = "0 0 1 69.0002"; + scale = "1.1 1.1 1.1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-356 -964 98.969"; + rotation = "0 0 -1 7.00012"; + scale = "1.1 1.1 1.1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "932 -692 62.6563"; + rotation = "0 0 1 107"; + scale = "1.5 1.5 1.5"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-140 -956 88.7188"; + rotation = "0 0 -1 56.9999"; + scale = "1.1 1.1 1.1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "132 -332 104.312"; + rotation = "0 0 1 117"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "916 -684 64.0937"; + rotation = "0 0 -1 73.0006"; + scale = "1.1 1.1 1.1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-236 -812 62.75"; + rotation = "0 0 -1 47.9999"; + scale = "1.3 1.3 1.3"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-28 -956 87.2188"; + rotation = "0 0 1 160"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-348 -220 134.938"; + rotation = "0 0 1 177"; + scale = "1.3 1.3 1.3"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-364 -252 130.609"; + rotation = "0 0 -1 52.0003"; + scale = "1.3 1.3 1.3"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-428 -500 83.7031"; + rotation = "0 0 -1 9.99997"; + scale = "1.3 1.3 1.3"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "20 -228 62.4844"; + rotation = "0 0 1 176"; + scale = "1.5 1.5 1.5"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "308 188 185"; + rotation = "0 0 -1 100"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "52 -276 66.6875"; + rotation = "0 0 -1 35.9998"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "300 -820 165.844"; + rotation = "0 0 1 136"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "20 292 122.656"; + rotation = "0 0 -1 98.0004"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "108 -332 87.9062"; + rotation = "0 0 1 220"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-444 -436 76.25"; + rotation = "0 0 -1 7.99996"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "4 140 123.234"; + rotation = "0 0 1 230"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-156 -932 85.2812"; + rotation = "0 0 -1 65.0003"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "860 476 102.141"; + rotation = "0 0 1 127"; + scale = "0.9 0.9 0.9"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-420 -428 75.1406"; + rotation = "0 0 1 85.9998"; + scale = "1.3 1.3 1.3"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-588 -332 68.9062"; + rotation = "0 0 1 103"; + scale = "0.9 0.9 0.9"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "644 -452 88.0156"; + rotation = "0 0 1 40"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "452 -652 79.8438"; + rotation = "0 0 1 75.0002"; + scale = "1.3 1.3 1.3"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "572 -252 69.1406"; + rotation = "0 0 1 9.00004"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "628 180 157.469"; + rotation = "0 0 -1 52.0003"; + scale = "0.9 0.9 0.9"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-148 -628 115.875"; + rotation = "0 0 1 15"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-372 260 116.937"; + rotation = "0 0 1 190"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-148 508 68.5312"; + rotation = "0 0 -1 35"; + scale = "1.3 1.3 1.3"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "372 580 104.984"; + rotation = "0 0 1 205"; + scale = "1.5 1.5 1.5"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-516 -828 66.1719"; + rotation = "0 0 1 181"; + scale = "1.1 1.1 1.1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "732 -332 140.031"; + rotation = "0 0 1 28"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "908 -948 99.547"; + rotation = "0 0 -1 19.0001"; + scale = "1.1 1.1 1.1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "580 -268 74.3594"; + rotation = "0 0 1 61.9998"; + scale = "1.5 1.5 1.5"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "444 -668 77.8281"; + rotation = "0 0 1 209"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-516 388 89.4688"; + rotation = "0 0 1 196"; + scale = "1.1 1.1 1.1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-356 -140 113.594"; + rotation = "0 0 1 96.0002"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "196 636 72.6875"; + rotation = "0 0 1 182"; + scale = "1.4 1.4 1.4"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-380 -876 125.953"; + rotation = "0 0 1 84.0002"; + scale = "1.5 1.5 1.5"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "604 -388 90.0625"; + rotation = "0 0 1 157"; + scale = "0.9 0.9 0.9"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "516 580 79.5782"; + rotation = "0 0 1 142"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-348 540 126.406"; + rotation = "0 0 1 1.9999"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "44 -244 69.1093"; + rotation = "0 0 1 97"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-604 -36 103.484"; + rotation = "0 0 -1 58.0005"; + scale = "1.1 1.1 1.1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "28 372 66.1094"; + rotation = "0 0 1 212"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-316 372 114.078"; + rotation = "0 0 1 14"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "748 -220 72.8906"; + rotation = "0 0 -1 49.0003"; + scale = "1.5 1.5 1.5"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-388 60 66.4062"; + rotation = "0 0 -1 93.0002"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "788 -172 97.219"; + rotation = "0 0 1 185"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "604 -388 90.0625"; + rotation = "0 0 -1 41"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "692 580 97.531"; + rotation = "0 0 1 123"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "780 -284 155.344"; + rotation = "0 0 1 199"; + scale = "1.3 1.3 1.3"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "988 -188 62.9531"; + rotation = "0 0 1 73"; + scale = "1.3 1.3 1.3"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "52 124 109.203"; + rotation = "0 0 -1 100"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "100 -324 87.8437"; + rotation = "1 0 0 0"; + scale = "1.5 1.5 1.5"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-260 68 172.859"; + rotation = "0 0 -1 113"; + scale = "0.9 0.9 0.9"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "740 508 70.7344"; + rotation = "0 0 1 188"; + scale = "0.9 0.9 0.9"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-332 380 113.656"; + rotation = "0 0 -1 58.0005"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "580 -284 78.3906"; + rotation = "0 0 1 178"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "380 -924 70.6094"; + rotation = "0 0 1 46"; + scale = "1.5 1.5 1.5"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-156 -940 84.5938"; + rotation = "0 0 1 23"; + scale = "0.9 0.9 0.9"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "804 492 134.187"; + rotation = "0 0 -1 77.0004"; + scale = "1.4 1.4 1.4"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "740 -212 70.8281"; + rotation = "0 0 1 187"; + scale = "1.3 1.3 1.3"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "68 -292 63.6562"; + rotation = "0 0 -1 38.9999"; + scale = "1.5 1.5 1.5"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-380 -796 62.6719"; + rotation = "0 0 1 216"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "692 588 99.906"; + rotation = "0 0 -1 20.9998"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-500 -460 69.1562"; + rotation = "0 0 1 162"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-524 564 62.375"; + rotation = "0 0 1 76.9998"; + scale = "1.3 1.3 1.3"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-372 340 104.484"; + rotation = "0 0 -1 56.9999"; + scale = "1.1 1.1 1.1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "284 -668 170.172"; + rotation = "0 0 -1 37.0002"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "172 -76 111.812"; + rotation = "0 0 1 133"; + scale = "0.9 0.9 0.9"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "388 -596 66.4531"; + rotation = "0 0 -1 111"; + scale = "1.1 1.1 1.1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-44 252 240.781"; + rotation = "0 0 1 38"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "52 412 68.9687"; + rotation = "0 0 1 79.9998"; + scale = "1.5 1.5 1.5"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "924 -684 63.1875"; + rotation = "0 0 -1 4.99997"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "948 324 71.6874"; + rotation = "0 0 1 69.0002"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "356 -900 74.8282"; + rotation = "0 0 -1 26"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "388 -884 62.1249"; + rotation = "0 0 -1 26.9998"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "68 12 121.953"; + rotation = "0 0 1 159"; + scale = "1.1 1.1 1.1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-484 -340 64.6251"; + rotation = "0 0 1 167"; + scale = "1.4 1.4 1.4"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "828 -28 124.594"; + rotation = "0 0 1 174"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "604 -324 91.9063"; + rotation = "0 0 1 191"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-556 -164 127.891"; + rotation = "0 0 1 121"; + scale = "1.5 1.5 1.5"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "652 604 112.219"; + rotation = "0 0 1 193"; + scale = "1.1 1.1 1.1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "588 -444 87.2813"; + rotation = "0 0 1 198"; + scale = "1.4 1.4 1.4"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "844 636 62.8438"; + rotation = "0 0 -1 37.0002"; + scale = "1.5 1.5 1.5"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "868 244 67.7969"; + rotation = "0 0 -1 108"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "628 188 156.578"; + rotation = "0 0 1 19"; + scale = "1.4 1.4 1.4"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "540 604 66.6562"; + rotation = "0 0 1 23"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + locked = "true"; + }; + }; + }; + new SimGroup(Pond) { + + new WaterBlock() { + position = "-320 128 42.8524"; + rotation = "1 0 0 0"; + scale = "96 96 10"; + liquidType = "StagnantWater"; + density = "1"; + viscosity = "5"; + waveMagnitude = "0.1"; + surfaceTexture = "LiquidTiles/AlgaeWater"; + surfaceOpacity = "0.8"; + envMapTexture = "lush/skies/lush_day_emap"; + envMapIntensity = "0.9"; + removeWetEdges = "1"; + locked = "true"; + }; + }; + new SimGroup(audio) { + + new AudioEmitter() { + position = "718.245 132.672 47.3284"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/crickets.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "5"; + maxDistance = "320"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "2000"; + maxLoopGap = "20000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-77.4584 -516.809 122.187"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/crickets_drygrass.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "5"; + maxDistance = "320"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "2000"; + maxLoopGap = "20000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "158.574 -636.323 79.6718"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/drywind.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.4"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "97.1055 -307.332 106.268"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "5"; + maxDistance = "320"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "2000"; + maxLoopGap = "20000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "287.425 168.234 195.844"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "5"; + maxDistance = "320"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "2000"; + maxLoopGap = "20000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "292.013 -390.663 63.0693"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo5.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "5"; + maxDistance = "320"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "2000"; + maxLoopGap = "20000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "150.45 -700.822 148.233"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo5.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "5"; + maxDistance = "320"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "2000"; + maxLoopGap = "20000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-407.398 -165.161 156.728"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo5.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "5"; + maxDistance = "320"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "2000"; + maxLoopGap = "20000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "715.699 -77.0752 156.728"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo5.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "5"; + maxDistance = "320"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "2000"; + maxLoopGap = "20000"; + type = "EffectAudioType"; + locked = "true"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Invictus.mis b/base/missions/Invictus.mis new file mode 100644 index 0000000..4276dd5 --- /dev/null +++ b/base/missions/Invictus.mis @@ -0,0 +1,889 @@ +// MissionTypes = DM + +//--- MISSION QUOTE BEGIN --- +//I am the master of my fate, +//I am the captain of my soul. +// -- William Ernest Henley +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//No inventory stations +//Weapons bunkers scattered across the map +//Low visibility +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + musicTrack = "lush"; + cdTrack = "2"; + DM_scoreLimit = "20"; + powerCount = "0"; + DM_timeLimit = "25"; + + new MissionArea(MissionArea) { + area = "-808 -432 944 768"; + flightCeiling = "2000"; + flightCeilingRange = "50"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.600000 0.600000 0.600000 1.000000"; + ambient = "0.200000 0.200000 0.200000 1.000000"; + locked = "true"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + position = "-832 -1272 0"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/lushdet2"; + terrainFile = "Invictus.ter"; + squareSize = "8"; + emptySquares = "94061"; + locked = "true"; + hazeDistance = "250"; + visibleDistance = "1200"; + position = "-1024 -1024 0"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "45"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + XDimOverSize = "0"; + locked = "true"; + rotation = "0 0 0 0"; + conjoinBowlDev = "20"; + scale = "1 1 1"; + coverage = "0"; + GraphFile = "Invictus.nav"; + YDimOverSize = "0"; + position = "0 0 0 1"; + }; + new Sky(Sky) { + position = "-832 -1272 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "270"; + useSkyTextures = "0"; + SkySolidColor = "0.500000 0.500000 0.500000 1.000000"; + fogDistance = "235"; + fogColor = "0.500000 0.500000 0.500000 1.000000"; + fogVolume1 = "120 0 80"; + fogVolume2 = "120 80 135"; + fogVolume3 = "0 0 0"; + materialList = "Lush_l4.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 609191954011538915000000000.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 609191954011538915000000000.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 609191954011538915000000000.000000"; + locked = "true"; + cloudSpeed0 = "0.000000 0.000000"; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "64.1682 182.408 115.133"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-140.384 24.121 170.134"; + rotation = "0 0 1 105.997"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-129.307 -149.639 179.678"; + rotation = "0.495806 0.108272 -0.861658 28.4428"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-447.245 -257.636 126.822"; + rotation = "0.579717 0.141866 -0.802373 33.9225"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + + new SimGroup(Team1) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-239.27 21.3511 111.082"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "300"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new SimGroup(AIObjectives) { + }; + }; + new SimGroup(team0) { + + new SimGroup(AIObjectives) { + }; + }; + new WayPoint() { + position = "-160.99 5.062 147.458"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Weapons Bunker"; + team = "0"; + locked = "true"; + }; + }; + new SimGroup(Towers) { + + new SimGroup(Stuff) { + + new InteriorInstance() { + position = "-312.249 -79.5131 80.2446"; + rotation = "0 0 1 183.346"; + scale = "1 1 1"; + interiorFile = "bbunk9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Item() { + position = "-317.385 -91.3008 83.6052"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-306.792 -92.0084 83.4849"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "EnergyPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-312.606 -91.6935 83.553"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "CloakingPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new TSStatic() { + position = "-323.724 -54.6317 77.9097"; + rotation = "0 0 1 43.5448"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-298.483 -64.1389 80.5062"; + rotation = "0 0 1 155.272"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new InteriorInstance() { + position = "-149 -131 162.421"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + interiorFile = "bbunkd.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Item() { + position = "-149.009 -134.312 163.838"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SniperRifle"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new InteriorInstance() { + position = "-170.151 9.7961 157.234"; + rotation = "0 0 1 28.0749"; + scale = "1 0.647508 1"; + interiorFile = "bbunk7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Item() { + position = "-173.223 11.381 159.844"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ShockLance"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-156.015 2.4484 160.007"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ELFGun"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-164.351 6.8827 159.432"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Mine"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-166.031 3.6834 159.438"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-162.474 10.1829 159.158"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new InteriorInstance() { + position = "-461.241 -238.26 111.267"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bbunk8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Item() { + position = "-460.737 -238.508 113.463"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "GrenadeLauncher"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-456.023 -237.997 113.272"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "GrenadeLauncherAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-465.757 -238.526 113.307"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "GrenadeLauncherAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new InteriorInstance() { + position = "-419.569 122.606 85.1019"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bbunkb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Item() { + position = "-426.09 122.479 87.5639"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Plasma"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-412.646 125.283 87.1254"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "PlasmaAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-412.317 120.013 87.0978"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "PlasmaAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-418.585 111.931 88.2777"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-419.762 132.721 87.6662"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ConcussionGrenade"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-425.88 -53.065 50.1181"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ChaingunAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-428.777 -55.275 50.7253"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-430.966 -56.6262 50.2027"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "DiscAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-626.852 -256.424 50.5736"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ChaingunAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-620.967 -260.188 50.5674"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ChaingunAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-571.122 -109.471 143.152"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ShieldPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-568.992 -106.314 145.413"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Grenade"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new InteriorInstance() { + position = "-10.6274 -178.623 49.0708"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bbunk7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Item() { + position = "-14.4155 -178.5 51.8049"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SatchelCharge"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new InteriorInstance() { + position = "-641.735 192.397 62.7898"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "bbunk7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Item() { + position = "-641.794 175.781 65.5091"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AmmoPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new StaticShape() { + position = "-484.421 83.1763 -1213.13"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "33"; + }; + }; + }; + new SimGroup(RandomOrganics) { + + new SimGroup(Addition1BELgTree19) { + + new TSStatic() { + position = "-269.471 216.664 49.9516"; + rotation = "0 0 1 237"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-142.614 171.356 49.2"; + rotation = "0 0 -1 28"; + scale = "1.3 1.3 1.3"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-493.614 246.356 87.8804"; + rotation = "0 0 -1 3.99996"; + scale = "1.6 1.6 1.6"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-762.614 268.356 52.6207"; + rotation = "0 0 1 101"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-701.614 -378.644 56.1719"; + rotation = "0 0 -1 59"; + scale = "0.9 0.9 0.9"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "99.548 -21.477 154.18"; + rotation = "0 0 -1 56"; + scale = "1.1 1.1 1.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-215.614 59.3559 88.4722"; + rotation = "0 0 1 36"; + scale = "0.7 0.7 0.7"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "17.3863 278.356 85.7625"; + rotation = "0 0 1 138"; + scale = "0.8 0.8 0.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-198.614 184.356 51.5179"; + rotation = "0 0 1 71"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-604.614 214.356 66.675"; + rotation = "0 0 1 42"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-237.794 79.021 87.7793"; + rotation = "0 0 1 233"; + scale = "1.1 1.1 1.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-583.614 305.356 51.791"; + rotation = "0 0 1 84"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "102.386 -313.644 89.6996"; + rotation = "0 0 1 48"; + scale = "0.9 0.9 0.9"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-711.614 -249.644 50"; + rotation = "0 0 1 95"; + scale = "0.7 0.7 0.7"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-412.614 75.3559 84.709"; + rotation = "0 0 -1 88"; + scale = "0.8 0.8 0.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-538.614 275.356 73.8926"; + rotation = "0 0 -1 9.00004"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-484.614 -409.644 58.1226"; + rotation = "0 0 1 129"; + scale = "1.6 1.6 1.6"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-700.105 245.7 49.2"; + rotation = "0 0 1 215"; + scale = "1.1 1.1 1.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "128.386 221.356 92.1934"; + rotation = "0 0 1 45"; + scale = "0.8 0.8 0.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition2BESmTree17) { + + new TSStatic() { + position = "-131.806 -123.811 164.001"; + rotation = "1 0 0 0"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "51.4496 245.28 88.6547"; + rotation = "0 0 -1 31"; + scale = "1.1 1.1 1.1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "49.3863 224.356 85.2851"; + rotation = "0 0 -1 53"; + scale = "1.4 1.4 1.4"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-626.16 190.826 63.475"; + rotation = "0 0 1 141"; + scale = "0.9 0.9 0.9"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "73.3863 -259.644 103.383"; + rotation = "0 0 -1 13"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-559.614 324.356 53.4668"; + rotation = "0 0 1 171"; + scale = "0.9 0.9 0.9"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-449.614 91.3559 85.484"; + rotation = "0 0 1 92"; + scale = "1.6 1.6 1.6"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-248.614 254.356 50.1281"; + rotation = "0 0 1 7.00001"; + scale = "1.5 1.5 1.5"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-145.614 220.356 56.1266"; + rotation = "0 0 -1 82"; + scale = "1.3 1.3 1.3"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-101.62 198.322 49.8"; + rotation = "0 0 1 191"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-380.625 70.3445 89.7098"; + rotation = "0 0 1 110"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "125.404 -357.728 89.9676"; + rotation = "0 0 1 227"; + scale = "1.5 1.5 1.5"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-695.534 -85.6855 96.364"; + rotation = "0 0 1 114"; + scale = "1.4 1.4 1.4"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-297.614 -402.644 78.9765"; + rotation = "0 0 1 129"; + scale = "0.9 0.9 0.9"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "8.3863 219.356 89.911"; + rotation = "0 0 1 113"; + scale = "1.6 1.6 1.6"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-363.951 -112.602 85.6117"; + rotation = "0 0 1 36"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "75.3863 -332.644 86.0589"; + rotation = "0 0 -1 96"; + scale = "0.9 0.9 0.9"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-151.617 -334.559 74.9421"; + rotation = "0 0 -1 98"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-643.614 -189.644 73.1219"; + rotation = "0 0 1 32"; + scale = "0.9 0.9 0.9"; + shapeName = "borg17.dts"; + locked = "true"; + }; + }; + }; + new SimGroup(Ambiance) { + + new Precipitation(Precipitation) { + position = "-377.901 -153.118 89.5079"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Rain"; + percentage = "1"; + color1 = "0.600000 0.600000 0.600000 1.000000"; + color2 = "-1.000000 0.000000 0.000000 1.000000"; + color3 = "-1.000000 0.000000 0.000000 1.000000"; + offsetSpeed = "0.25"; + minVelocity = "1.25"; + maxVelocity = "4"; + maxNumDrops = "2000"; + maxRadius = "80"; + locked = "true"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/JacobsLadder.mis b/base/missions/JacobsLadder.mis new file mode 100644 index 0000000..c3fab3e --- /dev/null +++ b/base/missions/JacobsLadder.mis @@ -0,0 +1,1660 @@ +// DisplayName = Jacob's Ladder +// MissionTypes = CnH + +//--- MISSION QUOTE BEGIN --- +//In Flanders fields the poppies blow +//Between the crosses, row on row. +// -- John McCrae +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[CnH]5 different control towers +//[CnH]6000 points to win +//[DM]This mission follows standard ruleset +//Very rugged terrain +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + cdTrack = "2"; + powerCount = "0"; + musicTrack = "lush"; + + new MissionArea(MissionArea) { + area = "-640 -968 960 864"; + flightCeiling = "300"; + flightCeilingRange = "20"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.700000 0.700000 0.700000 1.000000"; + ambient = "0.500000 0.500000 0.500000 1.000000"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + locked = "true"; + position = "-1304 -1032 0"; + }; + new Sky(Sky) { + position = "-1304 -1032 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "500"; + useSkyTextures = "1"; + SkySolidColor = "0.390000 0.390000 0.390000 0.000000"; + fogDistance = "575"; + fogColor = "0.500000 0.500000 0.500000 1.000000"; + fogVolume1 = "450 0 200"; + fogVolume2 = "350 200 260"; + fogVolume3 = "450 260 275"; + materialList = "Lush_l4.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "0.500000 0.500000 0.500000 1.000000"; + fogVolumeColor2 = "0.500000 0.500000 0.500000 1.000000"; + fogVolumeColor3 = "0.500000 0.500000 0.500000 1.000000"; + cloudSpeed0 = "0.000000 0.000000"; + locked = "true"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/lushdet1"; + terrainFile = "JacobsLadder.ter"; + squareSize = "8"; + emptySquares = "75846"; + visibleDistance = "1200"; + hazeDistance = "250"; + locked = "true"; + position = "-1024 -1024 0"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "59"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + rotation = "0 0 0 0"; + scale = "1 1 1"; + coverage = "0"; + locked = "true"; + conjoinBowlDev = "20"; + GraphFile = "JacobsLadder.nav"; + position = "0 0 0 1"; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "-255.46 -585.96 266.458"; + rotation = "-0.1685 0.103309 0.980273 64.0473"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-143.128 -380.321 152.023"; + rotation = "0 0 -1 4.58367"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "250.925 -718.148 200.391"; + rotation = "0.0263612 0.0349807 -0.99904 106.05"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-271.154 -918.539 207.493"; + rotation = "0.206645 0.141374 -0.968148 70.4935"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-435.507 -729.12 193.889"; + rotation = "0.213759 0.107241 -0.970982 54.6494"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + + new SimGroup(team0) { + providesPower = "1"; + + new SimGroup(Bunker1) { + + new SimGroup(Spawns) { + + new SpawnSphere() { + position = "-183.509 -546.319 278.518"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new WayPoint() { + position = "-193.721 -532.228 273.75"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Bunker 1"; + team = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-193.721 -532.228 273.75"; + rotation = "0 0 -1 5.15661"; + scale = "1 1 1"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + name = "Bunker 1"; + locked = "true"; + }; + new StaticShape() { + position = "-193.721 -532.228 282.01"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + holo = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-173.304 -560.73 280.191"; + rotation = "0 0 1 79.0682"; + scale = "1 1 1"; + interiorFile = "bbunk1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-193.703 -532.218 271.638"; + rotation = "0 0 -1 4.58349"; + scale = "1 1 1"; + interiorFile = "bbunkb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-190.102 -559.693 274.213"; + rotation = "0 0 -1 55.004"; + scale = "1 1 1"; + nameTag = "Bunker 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-170.921 -564.535 274.201"; + rotation = "0 0 1 123.186"; + scale = "1 1 1"; + nameTag = "Bunker 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item() { + position = "-180.693 -561.813 283.598"; + rotation = "0 0 -1 9.74027"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + }; + new SimGroup(Bunker2) { + + new SimGroup(Spawns) { + + new SpawnSphere() { + position = "-153.924 -203.428 192.224"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "100"; + indoorWeight = "20"; + outdoorWeight = "80"; + locked = "true"; + }; + }; + new StaticShape() { + position = "-163.41 -320.252 123.423"; + rotation = "0 0 1 37.8152"; + scale = "1 1 1"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + name = "Bunker 2"; + locked = "true"; + }; + new WayPoint() { + position = "-163.41 -320.252 123.423"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Bunker 2"; + team = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-163.41 -320.252 131.792"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + holo = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-161.065 -317.429 121.411"; + rotation = "0 0 1 219.625"; + scale = "1 1 1"; + interiorFile = "bbunk9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-153.806 -211.875 183.791"; + rotation = "0 0 1 236.241"; + scale = "1 1 1"; + interiorFile = "bbunk9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-142.368 -266.897 158.067"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bmisc8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Turret() { + position = "-142.317 -267.446 168.113"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Bunker 2"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "MortarBarrelLarge"; + locked = "true"; + }; + new InteriorInstance() { + position = "-88.4642 -262.258 174.685"; + rotation = "0 0 -1 108.862"; + scale = "1 1 1"; + interiorFile = "bmisc8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-89.6907 -262.759 184.638"; + rotation = "0 0 -1 108.862"; + scale = "1 1 1"; + nameTag = "Bunker 2"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-165.055 -219.847 185.788"; + rotation = "0 0 1 236.241"; + scale = "1 1 1"; + nameTag = "Bunker 2"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Turret() { + position = "-151.407 -210.344 192.829"; + rotation = "0 0 -1 36.6693"; + scale = "1 1 1"; + nameTag = "Bunker 2"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + }; + new TSStatic() { + position = "-154.151 -214.455 185.789"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-154.002 -214.491 187.789"; + rotation = "0 0 -1 17.1887"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-156.513 -214.382 187.772"; + rotation = "0 0 1 59.5876"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-156.572 -214.241 185.772"; + rotation = "0 0 1 53.858"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-155.417 -211.752 187.783"; + rotation = "0 0 -1 2.29172"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-155.566 -211.716 185.783"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-157.692 -209.815 187.777"; + rotation = "-0 0 -1 16.6157"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-157.841 -209.778 185.777"; + rotation = "0 0 1 0.573347"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-158.445 -212.391 185.766"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new Item() { + position = "-158.453 -212.39 187.866"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + }; + new SimGroup(Bunker3) { + + new SimGroup(Spawns) { + + new SpawnSphere() { + position = "89.2885 -707.037 179.508"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "100"; + indoorWeight = "20"; + outdoorWeight = "80"; + locked = "true"; + }; + }; + new StaticShape() { + position = "169.283 -783.29 192.488"; + rotation = "0 0 -1 29.7938"; + scale = "1 1 1"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + name = "Bunker 3"; + locked = "true"; + }; + new WayPoint() { + position = "169.283 -783.29 192.488"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Bunker 3"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Bunker 3"; + team = "0"; + locked = "true"; + }; + new StaticShape() { + position = "169.283 -783.29 200.853"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + holo = "0"; + locked = "true"; + }; + new Turret() { + position = "169.168 -783.367 199.29"; + rotation = "0 0 1 154.699"; + scale = "1 1 1"; + nameTag = "Bunker 3"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + }; + new InteriorInstance() { + position = "169.291 -783.135 190.499"; + rotation = "0 0 -1 26.9291"; + scale = "1 1 1"; + interiorFile = "bbunk5.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "110.799 -768.964 186.895"; + rotation = "-0.00999906 -0.0124922 -0.999872 77.3564"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "126.408 -772.468 186.583"; + rotation = "-0.00999906 -0.0124922 -0.999872 77.3564"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "142.016 -775.972 186.271"; + rotation = "-0.00999906 -0.0124922 -0.999872 77.3564"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "78.5247 -721.577 178.35"; + rotation = "0 0 1 54.431"; + scale = "1 1 1"; + interiorFile = "bbunk2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "76.9091 -713.73 196.21"; + rotation = "0 0 -1 39.5341"; + scale = "1 1 1"; + nameTag = "Bunker 3"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "91.4479 -728.406 171.837"; + rotation = "0 0 1 144.385"; + scale = "1 1 1"; + nameTag = "Bunker 3"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item() { + position = "83.2909 -717.976 182.569"; + rotation = "0 0 -1 35.5234"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new TSStatic() { + position = "79.5685 -711.099 171.827"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new InteriorInstance() { + position = "63.8329 -773.817 199.626"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bmisc9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Turret() { + position = "65.4573 -772.728 209.62"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Bunker 3"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + }; + new SimGroup(Bunker4) { + + new SimGroup(Spawns) { + + new SpawnSphere() { + position = "-515.379 -703.256 181.86"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "100"; + indoorWeight = "20"; + outdoorWeight = "80"; + locked = "true"; + }; + }; + new StaticShape() { + position = "-491.238 -700.295 167.252"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + name = "Bunker 4"; + locked = "true"; + }; + new WayPoint() { + position = "-491.238 -700.295 167.252"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Bunker 4"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Bunker 4"; + team = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-456.649 -699.996 178.608"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + holo = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-523.621 -705.548 165.318"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bbunkb.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-491.256 -700.296 166.506"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bplat6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-459 -700 170.226"; + rotation = "0 0 -1 91.1003"; + scale = "1 1 1"; + interiorFile = "bbunkd.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-517.482 -705.385 167.296"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Bunker 4"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-529.867 -705.385 167.296"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Bunker 4"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item() { + position = "-460.039 -700.003 171.911"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Turret() { + position = "-461.188 -699.983 178.786"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Bunker 4"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "AABarrelLarge"; + locked = "true"; + }; + new StaticShape() { + position = "-523.621 -705.548 175.781"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + dataBlock = "SensorLargePulse"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Bunker5) { + + new SimGroup(Spawns) { + + new SpawnSphere() { + position = "-368.867 -889.175 121.296"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "100"; + indoorWeight = "20"; + outdoorWeight = "80"; + locked = "true"; + }; + }; + new StaticShape() { + position = "-367 -883 171.024"; + rotation = "-0 0 -1 35.5234"; + scale = "1 1 1"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + name = "Bunker 5"; + locked = "true"; + }; + new WayPoint() { + position = "-367 -883 171.024"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Bunker 5"; + team = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-380.701 -892.771 174.421"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + holo = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-367 -883 171.026"; + rotation = "-0 0 -1 35.5234"; + scale = "1 1 1"; + interiorFile = "bbrdg2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-354.798 -900.091 171.026"; + rotation = "-0 0 -1 35.5234"; + scale = "1 1 1"; + interiorFile = "bbrdg1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-345.502 -913.113 171.026"; + rotation = "-0 0 -1 35.5234"; + scale = "1 1 1"; + interiorFile = "bbrdg1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-336.205 -926.135 171.026"; + rotation = "-0 0 -1 35.5234"; + scale = "1 1 1"; + interiorFile = "bbrdg1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-326.909 -939.157 171.026"; + rotation = "-0 0 -1 35.5234"; + scale = "1 1 1"; + interiorFile = "bbrdg1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-379.202 -865.908 171.026"; + rotation = "-0 0 -1 35.5234"; + scale = "1 1 1"; + interiorFile = "bbrdg1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-388.498 -852.886 171.026"; + rotation = "-0 0 -1 35.5234"; + scale = "1 1 1"; + interiorFile = "bbrdg1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-397.795 -839.864 171.026"; + rotation = "-0 0 -1 35.5234"; + scale = "1 1 1"; + interiorFile = "bbrdg1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-407.091 -826.842 171.026"; + rotation = "-0 0 -1 35.5234"; + scale = "1 1 1"; + interiorFile = "bbrdg1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-367 -883 114.075"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bbunk9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-314.001 -936.832 163.368"; + rotation = "0 0 1 54.4766"; + scale = "1 1 1"; + interiorFile = "bmisc7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-438.938 -831.358 183.522"; + rotation = "0 0 1 146.723"; + scale = "1 1 1"; + interiorFile = "bmisc7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Turret() { + position = "-437.533 -830.578 193.495"; + rotation = "0 0 1 56.7228"; + scale = "1 1 1"; + nameTag = "Bunker 5"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new Turret() { + position = "-314.783 -935.428 173.361"; + rotation = "-0 0 -1 35.5234"; + scale = "1 1 1"; + nameTag = "Bunker 5"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new StaticShape() { + position = "-367 -876.6 124.526"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Bunker 5"; + dataBlock = "SensorLargePulse"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-366.872 -869.164 116.038"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Bunker 5"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new TSStatic() { + position = "-374.692 -876.88 116.065"; + rotation = "0 0 -1 30.9397"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-374.457 -879.228 116.065"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-374.618 -878.996 118.065"; + rotation = "0 0 1 21.1994"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new Item() { + position = "-374.64 -876.834 118.228"; + rotation = "0 0 -1 0.573347"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + }; + }; + new SimGroup(Team1) { + providesPower = "1"; + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-507.42 -367.458 105.927"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "1"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new InteriorInstance() { + position = "-506.866 -387.566 104.594"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bbunk5.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-506.866 -382.398 106.575"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Fallback"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-506.566 -392.787 106.575"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Fallback"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-501.653 -387.566 106.575"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Fallback"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-512.075 -387.566 106.575"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Fallback"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Team2) { + providesPower = "1"; + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "163.414 -480.151 149.183"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "60"; + sphereWeight = "1"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new InteriorInstance() { + position = "162.079 -424.059 143.033"; + rotation = "0 0 1 35.5234"; + scale = "1 1 1"; + interiorFile = "bbunk5.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "157.84 -421.033 145.014"; + rotation = "-0 0 -1 54.4766"; + scale = "1 1 1"; + nameTag = "Fallback"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "166.322 -427.088 145.014"; + rotation = "0 0 1 125.523"; + scale = "1 1 1"; + nameTag = "Fallback"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "159.29 -428.483 145.014"; + rotation = "0 0 1 215.523"; + scale = "1 1 1"; + nameTag = "Fallback"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "165.082 -419.853 145.014"; + rotation = "0 0 1 35.5234"; + scale = "1 1 1"; + nameTag = "Fallback"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + }; + new SimGroup(PlacedOrganics) { + + new InteriorInstance() { + position = "-146.953 -329.979 121.553"; + rotation = "-0.728379 0.282512 -0.62422 63.71"; + scale = "1 1 1"; + interiorFile = "brock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-315.231 -871.395 141.068"; + rotation = "0.0380742 -0.727499 -0.685051 77.0459"; + scale = "1.5 1.5 1.5"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "233.396 -728.042 85.2098"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new TSStatic() { + position = "-196.289 -558.576 272.776"; + rotation = "1 0 0 0"; + scale = "1 1 1.5"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "98.991 -772.624 188.622"; + rotation = "1 0 0 0"; + scale = "1 1 1.5"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "201.968 -437.797 142.885"; + rotation = "1 0 0 0"; + scale = "1 1 1.5"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-502.483 -372.578 105.103"; + rotation = "1 0 0 0"; + scale = "1.2 1.2 1.7"; + shapeName = "borg5.dts"; + locked = "true"; + }; + }; + new SimGroup(RandomOrganics) { + + new SimGroup(Addition1BeLgTree16) { + + new TSStatic() { + position = "-23.2341 -698.265 138.44"; + rotation = "0 0 1 18.1847"; + scale = "0.8 0.8 0.8"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-48.2217 -838.057 168.685"; + rotation = "0 0 -1 14.9998"; + scale = "1.1 1.1 1.1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-282.464 -973.992 161.16"; + rotation = "0 0 1 206"; + scale = "1.2 1.2 1.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-615.273 -76.4236 146.667"; + rotation = "0 0 1 23"; + scale = "1.5 1.5 1.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-539.657 -200.892 203.783"; + rotation = "0 0 -1 87.0002"; + scale = "1.5 1.5 1.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-96.3513 -12.0294 127.53"; + rotation = "0 0 1 221"; + scale = "1.2 1.2 1.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-587.531 -156.802 201.114"; + rotation = "0 0 1 194"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-6.83932 -250.847 209.445"; + rotation = "0 0 1 11"; + scale = "1.5 1.5 1.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-284.102 -624.359 195.461"; + rotation = "0 0 1 230"; + scale = "1.2 1.2 1.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "11.6642 -698.227 130.384"; + rotation = "0 0 1 70"; + scale = "0.9 0.9 0.9"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-425.681 -911.43 138.266"; + rotation = "0 0 1 38"; + scale = "1.4 1.4 1.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "139.758 -271.113 121.951"; + rotation = "0 0 -1 19.9999"; + scale = "0.9 0.9 0.9"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-52.7239 -855.117 163.7"; + rotation = "0 0 1 75.0002"; + scale = "1.1 1.1 1.1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-36.5216 -695.324 133.942"; + rotation = "0 0 -1 92.0004"; + scale = "1.4 1.4 1.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-382.752 -867.567 113.213"; + rotation = "0 0 1 47.8969"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-109.061 -26.7387 119.742"; + rotation = "0 0 1 64"; + scale = "1.4 1.4 1.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-148 -4 124.469"; + rotation = "0 0 1 178"; + scale = "0.9 0.9 0.9"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "158.932 -455.029 143.385"; + rotation = "0 0 1 110"; + scale = "1.3 1.3 1.3"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-479.275 -369.427 104.244"; + rotation = "0 0 1 60.0001"; + scale = "1.5 1.5 1.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "172.208 -491.348 141.793"; + rotation = "0 0 1 176"; + scale = "1.1 1.1 1.1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "100 -988 229.67"; + rotation = "0 0 -1 50"; + scale = "1.4 1.4 1.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition2BeLgTree18) { + + new TSStatic() { + position = "-99.8126 -35.3917 122.591"; + rotation = "0 0 -1 43.0002"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-123.151 -3.00305 113.106"; + rotation = "0 0 1 152"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-84 -828 172.998"; + rotation = "0 0 1 175"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-164 -20 124.902"; + rotation = "0 0 -1 22.9999"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-268 -580 216.734"; + rotation = "0 0 1 197"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "11.2961 -998.431 173.826"; + rotation = "0 0 -1 13.0002"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-676 -844 183.606"; + rotation = "0 0 1 172"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-223.74 -615.058 219.137"; + rotation = "0 0 -1 100"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-149.406 5.10184 125.131"; + rotation = "0 0 1 154"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-515.857 -847.032 155.459"; + rotation = "0 0 -1 87.0002"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-542.348 -655.745 192.753"; + rotation = "0 0 1 129"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-395.665 -686.799 137.783"; + rotation = "0 0 1 240"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-189.408 -325.779 119.96"; + rotation = "0 0 1 155"; + scale = "1.3 1.3 1.3"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "134.459 -284.24 120.899"; + rotation = "0 0 -1 8.99978"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "151.275 -496.337 144.05"; + rotation = "0 0 1 225"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "100.634 -971.586 225.651"; + rotation = "0 0 1 178"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-128.055 -30.0459 116.861"; + rotation = "0 0 -1 74.0004"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-494.269 -845.008 154.97"; + rotation = "0 0 1 125"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-568.023 -487.138 145.875"; + rotation = "0 0 1 160"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "193.818 -429.073 141.403"; + rotation = "0 0 1 66.0002"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-604.076 -69.9467 147.623"; + rotation = "0 0 -1 67.0005"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-64.4365 -824.315 174.42"; + rotation = "0 0 1 164"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition3BeLgTree19) { + + new TSStatic() { + position = "33.4144 -30.4185 174.393"; + rotation = "0 0 1 42"; + scale = "1.4 1.4 1.4"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-78.1095 -847.329 172.452"; + rotation = "0 0 1 129"; + scale = "0.9 0.9 0.9"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-150.943 -400.194 88.5937"; + rotation = "0 0 -1 119"; + scale = "1.3 1.3 1.3"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-85.8633 -804.721 171.846"; + rotation = "0 0 1 106"; + scale = "1.1 1.1 1.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-25.0246 -708.171 135.62"; + rotation = "0 0 1 111"; + scale = "0.9 0.9 0.9"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-55.9703 -704.062 130.842"; + rotation = "0 0 1 57.9999"; + scale = "1.4 1.4 1.4"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "135.241 -706.619 170.9"; + rotation = "0 0 1 144"; + scale = "0.9 0.9 0.9"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-540.109 -376.977 103.311"; + rotation = "0 0 -1 41.9998"; + scale = "1.1 1.1 1.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-63.5733 -265.908 195.421"; + rotation = "0 0 1 106"; + scale = "1.4 1.4 1.4"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-605.768 -56.5627 145.203"; + rotation = "0 0 1 180"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-212 -412 142.641"; + rotation = "0 0 1 103"; + scale = "0.9 0.9 0.9"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-430.248 -807.521 175.867"; + rotation = "0 0 1 201.854"; + scale = "1.3 1.3 1.3"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-410.209 -677.624 135.462"; + rotation = "0 0 -1 65.0004"; + scale = "0.9 0.9 0.9"; + shapeName = "borg19.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition4BeSmTree17) { + + new TSStatic() { + position = "-535.281 -400.931 104.998"; + rotation = "0.187972 -0.101567 -0.976909 47.9868"; + scale = "1.4 1.4 1.4"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "123.938 -988.124 226.159"; + rotation = "-0.119501 -0.0981362 0.987972 71.6564"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-428 -68 149.78"; + rotation = "0.0973462 -0.0602896 -0.993423 77.3688"; + scale = "1.4 1.4 1.4"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-274.572 -395.272 121.891"; + rotation = "-0.0642398 -0.0814766 0.994603 136.215"; + scale = "0.9 0.9 0.9"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-562.465 -71.893 144.716"; + rotation = "0.100231 -0.0740989 0.992201 132.332"; + scale = "1.3 1.3 1.3"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-386.049 -892.476 114.319"; + rotation = "0.132363 0.0701232 0.988718 44.4535"; + scale = "1.4 1.4 1.4"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-504.255 -855.738 155.627"; + rotation = "0.0726313 0.133547 0.988377 58.5694"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-401.178 -693.239 135.623"; + rotation = "-0.0990133 0.281555 -0.954423 38.6388"; + scale = "0.9 0.9 0.9"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-301.155 -976.512 160.532"; + rotation = "-0.0473325 -0.0455559 0.99784 184.989"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-390.07 -878.203 112.553"; + rotation = "0.0374912 0.0834348 0.995808 46.1734"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + locked = "true"; + }; + }; + new TSStatic() { + position = "-510.262 -343.354 102.364"; + rotation = "0 0 1 20"; + scale = "1.4 1.4 1.4"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-144.623 -185.957 183.535"; + rotation = "0 0 1 161"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-136.586 -227.269 183.281"; + rotation = "0.244939 -0.211123 0.946273 38.9465"; + scale = "0.9 0.9 0.9"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-15.9535 -432.55 172.777"; + rotation = "0 0 -1 73.0006"; + scale = "0.8 0.8 0.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "282.1 -138.242 212.452"; + rotation = "0 0 -1 39.4447"; + scale = "0.8 0.8 0.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-166.69 -948.818 151.131"; + rotation = "-0.0866092 -0.114763 0.98961 220.609"; + scale = "0.9 0.9 0.9"; + shapeName = "borg17.dts"; + locked = "true"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Katabatic.mis b/base/missions/Katabatic.mis new file mode 100644 index 0000000..ccb00ef --- /dev/null +++ b/base/missions/Katabatic.mis @@ -0,0 +1,4444 @@ +// MissionTypes = CTF + +//--- MISSION QUOTE BEGIN --- +//The huge downside to the Starwolf is the miserable planets you have to fight ’em on, most often some polar outhouse where your tail gets frostbite every time you pop your armor and you can't sneeze without snot freezing all over your face. +// -- Naj-Zero, Blood Eagle warrior +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[CTF]8 flag captures to win +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + powerCount = "0"; + cdTrack = "5"; + CTF_scoreLimit = "8"; + musicTrack = "ice"; + + new MissionArea(MissionArea) { + area = "-896 -696 1504 1392"; + flightCeiling = "300"; + flightCeilingRange = "20"; + locked = "true"; + }; + new Sky(Sky) { + position = "0 0 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "500"; + useSkyTextures = "1"; + SkySolidColor = "0.365000 0.390000 0.420000 0.000000"; + fogDistance = "400"; + fogColor = "0.650000 0.650000 0.700000 1.000000"; + fogVolume1 = "450 0 100"; + fogVolume2 = "400 100 250"; + fogVolume3 = "0 0 0"; + materialList = "sky_ice_blue.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 -0.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 0.000000"; + cloudSpeed0 = "0.000000 0.000000"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.700000 0.700000 0.700000 1.000000"; + ambient = "0.400000 0.400000 0.400000 1.000000"; + scale = "1 1 1"; + position = "0 0 0"; + locked = "true"; + rotation = "1 0 0 0"; + }; + new Precipitation(Precipitation) { + position = "0 0 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Snow"; + percentage = "1"; + color1 = "1.000000 1.000000 1.000000 1.000000"; + color2 = "-1.000000 0.000000 0.000000 1.000000"; + color3 = "-1.000000 0.000000 0.000000 1.000000"; + offsetSpeed = "0.25"; + minVelocity = "0.25"; + maxVelocity = "1.5"; + maxNumDrops = "2000"; + maxRadius = "125"; + locked = "true"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/snowdet2"; + terrainFile = "Katabatic.ter"; + squareSize = "8"; + emptySquares = "223146 747683 747939 748195 748451 355491 305974 437300 437556 372277 372533 307254 373046 373302 373558 373814 308534"; + position = "-1024 -1024 0"; + locked = "true"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "75"; + cullDensity = "0.1"; + customArea = "0 0 0 0"; + conjoinBowlDev = "20"; + scale = "1 1 1"; + position = "0 0 0 1"; + locked = "true"; + coverage = "0"; + rotation = "0 0 0 0"; + GraphFile = "Katabatic.nav"; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "-482.862 327.444 163.649"; + rotation = "0.373651 0.211465 -0.903143 64.1455"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "247.14 -70.3646 152.739"; + rotation = "0.0387592 -0.173977 0.983987 155.271"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "119.074 79.2511 158.051"; + rotation = "0.0802951 0.069717 -0.99433 82.2557"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-231.546 357.086 109.491"; + rotation = "0.0207373 -0.0549604 0.998273 138.721"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + + new SimGroup(Team1) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "326.888 -168.521 74.8106"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "90"; + indoorWeight = "100"; + outdoorWeight = "100"; + locked = "true"; + }; + new SpawnSphere() { + position = "-257.527 -53.2192 145.5"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "75"; + sphereWeight = "30"; + indoorWeight = "100"; + outdoorWeight = "110"; + locked = "true"; + }; + }; + new SimGroup(MainBase1) { + + + new SimGroup(MainBase1Powered) { + + new StaticShape(Team1GeneratorLarge1) { + position = "345.283 -197.479 71.0291"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1GeneratorLarge2) { + position = "351.855 -197.491 71.0293"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new SimGroup(MainBase1Misc) { + + new StaticShape() { + position = "323.376 -173.543 96.0413"; + rotation = "0 0 -1 22.3453"; + scale = "1 1 1"; + dataBlock = "ExteriorFlagStand"; + lockCount = "0"; + homingCount = "0"; + Flag = "3304"; + locked = "true"; + }; + new Item(Team1Flag1) { + position = "323.373 -173.553 96.6452"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + locked = "true"; + stand = "3303"; + }; + }; + new SimGroup(MainBase1Buildings) { + + new InteriorInstance() { + position = "347.539 -170.518 93.036"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "sbunk2.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new InteriorInstance() { + position = "251.987 -242.184 78.1013"; + rotation = "0 0 -1 30.3667"; + scale = "1 1 1"; + interiorFile = "svpad.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "179.548 -100.806 94.7401"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "smisc3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(MainBase1Turrets) { + + new Turret(Team1TurretBaseLarge1) { + position = "348.08 -178.761 113.037"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Rooftop"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "AABarrelLarge"; + locked = "true"; + }; + new Turret(Team1TurretBaseLarge2) { + position = "179.548 -101.496 96.3367"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Mountainside"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + }; + new SimGroup(MainBase1Stations) { + + new StaticShape() { + position = "255.389 -248.02 77.8013"; + rotation = "0 0 1 149.542"; + scale = "1 1 1"; + nameTag = "Main Compound"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory1) { + position = "287.981 -168.951 96.0435"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Front Entrance"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory2) { + position = "336.286 -225.796 71.034"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "Generator Room"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory3) { + position = "343.378 -225.667 71.0201"; + rotation = "0 0 -1 90.5273"; + scale = "1 1 1"; + nameTag = "Generator Room"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory4) { + position = "293.333 -181.491 80.0333"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Front Landing"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory5) { + position = "353.692 -165.466 80.0255"; + rotation = "0 0 1 90.5273"; + scale = "1 1 1"; + nameTag = "Rear Landing"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory6) { + position = "357.551 -164.521 96.0313"; + rotation = "0 0 1 4.0109"; + scale = "1 1 1"; + nameTag = "Rear Entrance"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + }; + new SimGroup(Crates) { + + new TSStatic() { + position = "315.551 -117.489 71.0436"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable4l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "315.595 -116.624 71.0436"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable4l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "317.072 -117.501 71.0436"; + rotation = "0 0 1 79.6412"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "322.4 -116.698 71.0436"; + rotation = "-0 0 -1 5.72956"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "322.173 -114.708 71.0436"; + rotation = "-0 0 -1 5.72956"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "322.329 -115.683 71.0436"; + rotation = "-0 0 -1 5.72956"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "317.029 -128.833 73.0436"; + rotation = "0 0 -1 26.356"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "317.493 -126.298 71.0436"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "316.916 -128.571 71.0436"; + rotation = "0 0 -1 1.71915"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "317.116 -130.887 71.0436"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "304.731 -136.327 71.0436"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable2m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "299.938 -129.952 71.0436"; + rotation = "0 0 -1 11.4591"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "303.173 -123.185 71.0436"; + rotation = "0 0 1 16.6157"; + scale = "1 1 1"; + shapeName = "stackable2m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "304.374 -123.679 72.0436"; + rotation = "0 0 1 5.72969"; + scale = "1 1 1"; + shapeName = "stackable2m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "304.304 -123.653 71.0436"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable2m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "303.057 -137.439 72.8627"; + rotation = "0 1 0 36.6693"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "298.045 -131.855 73.0436"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "297.283 -129.947 73.0436"; + rotation = "0 0 -1 6.30252"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "297.295 -129.261 71.0436"; + rotation = "0 0 -1 12.0321"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "298.004 -131.399 71.0436"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "297.503 -133.503 71.0436"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + }; + new StaticShape() { + position = "330.048 -178.319 80.4267"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + dataBlock = "Banner_Strength"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "317.048 -178.319 80.4267"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + dataBlock = "Banner_Strength"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(BaseTower1) { + providesPower = "1"; + + new Item() { + position = "158.815 -274.653 162.309"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory7) { + position = "156.81 -269.568 160.868"; + rotation = "-0 0 -1 21.1994"; + scale = "1 1 1"; + nameTag = "Base Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "156.976 -270.011 97.8793"; + rotation = "0 0 1 68.7549"; + scale = "1 1 1"; + interiorFile = "stowr6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(Tower1) { + + new WayPoint() { + position = "-257.527 -53.2192 193.163"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Remote Tower"; + team = "0"; + locked = "true"; + }; + new SimGroup(Tower1Powered) { + providesPower = "1"; + + new ForceFieldBare() { + position = "-257.732 -48.1132 169.993"; + rotation = "0 0 1 132.536"; + scale = "7.2989 7.30716 0.25"; + dataBlock = "defaultForceFieldBare"; + locked = "true"; + }; + new Turret(Team1SentryTurret1) { + position = "-257.467 -53.2283 163.599"; + rotation = "0.915437 0.402461 -4.32963e-08 180"; + scale = "1 1 1"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + }; + new StaticShape(Team1StationInventory8) { + position = "-265.055 -53.5008 163.629"; + rotation = "0 0 -1 92.4642"; + scale = "1 1 1"; + nameTag = "Remote Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory9) { + position = "-249.899 -52.8997 163.635"; + rotation = "0 0 1 87.5358"; + scale = "1 1 1"; + nameTag = "Remote Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1SensorLargePulse1) { + position = "-257.527 -53.2192 192.608"; + rotation = "-0 0 -1 47.4646"; + scale = "1 1 1"; + nameTag = "Remote Tower"; + dataBlock = "SensorLargePulse"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-240.494 -70.229 158.626"; + rotation = "0 0 1 132.536"; + scale = "1 1 1"; + interiorFile = "stowr4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(Tower1Goodies) { + + new Item() { + position = "-283.299 -29.5826 188.78"; + rotation = "0 0 1 132.536"; + scale = "1 1 1"; + dataBlock = "CloakingPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-231.644 -77.0427 188.808"; + rotation = "0 0 1 132.536"; + scale = "1 1 1"; + dataBlock = "ShieldPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-228.56 -30.1645 188.659"; + rotation = "0 0 1 132.536"; + scale = "1 1 1"; + dataBlock = "SniperRifle"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-232.472 -25.9589 188.548"; + rotation = "0 0 1 132.536"; + scale = "1 1 1"; + dataBlock = "EnergyPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-257.595 -45.2241 164.399"; + rotation = "0 0 1 132.536"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-254.144 -48.2657 170.636"; + rotation = "0 0 1 132.536"; + scale = "1 1 1"; + dataBlock = "PlasmaAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-252.775 -49.505 170.631"; + rotation = "0 0 1 132.536"; + scale = "1 1 1"; + dataBlock = "PlasmaAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-254.075 -49.4487 170.633"; + rotation = "0 0 1 132.536"; + scale = "1 1 1"; + dataBlock = "PlasmaAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-261.739 -57.7463 171.342"; + rotation = "0 0 1 42.5355"; + scale = "1 1 1"; + dataBlock = "Plasma"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-257.799 -45.7266 171.27"; + rotation = "0 0 1 132.536"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-265.333 -53.6064 171.271"; + rotation = "0 0 1 132.536"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-257.31 -60.9347 171.274"; + rotation = "0 0 1 132.536"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-249.59 -53.0389 171.278"; + rotation = "0 0 1 132.536"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + }; + }; + new SimGroup(AIObjectives) { + + new AIObjective(AIOAttackObject) { + position = "-573.832 420.026 91.1255"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory6"; + targetClientId = "-1"; + targetObjectId = "3465"; + location = "-573.832 420.026 91.1255"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOTouchObject) { + position = "-578.317 384.576 91.4003"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the enemy flag"; + mode = "FlagGrab"; + targetObject = "Team2Flag1"; + targetClientId = "-1"; + targetObjectId = "3469"; + location = "-578.317 384.576 91.4003"; + weightLevel1 = "3850"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + }; + new AIObjective(AIOAttackObject) { + position = "-630.632 371.564 66.1093"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3463"; + location = "-630.632 371.564 66.1093"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "-586.361 414.552 75.1086"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3459"; + location = "-586.361 414.552 75.1086"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "-569.34 350.347 91.1066"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3455"; + location = "-569.34 350.347 91.1066"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOTouchObject) { + position = "-578.317 384.576 91.4003"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the dropped enemy flag"; + mode = "FlagDropped"; + targetObject = "Team2Flag1"; + targetClientId = "-1"; + targetObjectId = "3469"; + location = "-578.317 384.576 91.4003"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + }; + new AIObjective(AIOTouchObject) { + position = "-578.317 384.576 91.4003"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the flag!"; + mode = "FlagCapture"; + targetObject = "Team2Flag1"; + targetClientId = "-1"; + targetObjectId = "3469"; + location = "-578.317 384.576 91.4003"; + weightLevel1 = "5000"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + }; + new AIObjective(AIORepairObject) { + position = "347.419 -178.761 114.789"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team1TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3310"; + location = "347.419 -178.761 114.789"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "179.548 -100.835 98.0882"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team1TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3311"; + location = "179.548 -100.835 98.0882"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "287.981 -168.951 97.6093"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3316"; + location = "287.981 -168.951 97.6093"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "336.286 -225.796 72.5998"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3318"; + location = "336.286 -225.796 72.5998"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "343.378 -225.667 72.5859"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3320"; + location = "343.378 -225.667 72.5859"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "293.333 -181.491 81.5991"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3322"; + location = "293.333 -181.491 81.5991"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "353.692 -165.466 81.5913"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3324"; + location = "353.692 -165.466 81.5913"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "357.551 -164.521 97.5971"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory6"; + targetClientId = "-1"; + targetObjectId = "3326"; + location = "357.551 -164.521 97.5971"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "156.391 -268.486 162.434"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory7"; + targetClientId = "-1"; + targetObjectId = "3354"; + location = "156.391 -268.486 162.434"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-257.487 -53.2505 163.93"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SentryTurret"; + targetObject = "Team1SentryTurret1"; + targetClientId = "-1"; + targetObjectId = "3363"; + location = "-257.487 -53.2505 163.93"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-265.055 -53.5008 165.195"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory8"; + targetClientId = "-1"; + targetObjectId = "3364"; + location = "-265.055 -53.5008 165.195"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-249.899 -52.8997 165.201"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory9"; + targetClientId = "-1"; + targetObjectId = "3366"; + location = "-249.899 -52.8997 165.201"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-257.54 -53.2069 197.438"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SensorLargePulse"; + targetObject = "Team1SensorLargePulse1"; + targetClientId = "-1"; + targetObjectId = "3368"; + location = "-257.54 -53.2069 197.438"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "-607.058 353.566 66.0435"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the GeneratorLarge"; + targetObject = "Team2GeneratorLarge1"; + targetClientId = "-1"; + targetObjectId = "3446"; + location = "-607.058 353.566 66.0435"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "-607.076 365.048 66.0433"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the GeneratorLarge"; + targetObject = "Team2GeneratorLarge2"; + targetClientId = "-1"; + targetObjectId = "3447"; + location = "-607.076 365.048 66.0433"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOMortarObject) { + position = "-452.623 355.91 99.2096"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3449"; + location = "-452.623 355.91 99.2096"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOMortarObject) { + position = "-583.195 360.028 108.291"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3450"; + location = "-583.195 360.028 108.291"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "343.344 -197.744 72.481"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the GeneratorLarge"; + targetObject = "Team1GeneratorLarge1"; + targetClientId = "-1"; + targetObjectId = "3300"; + location = "343.344 -197.744 72.481"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIODefendLocation) { + position = "343.344 -197.744 72.481"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the GeneratorLarge"; + targetObject = "Team1GeneratorLarge1"; + targetClientId = "-1"; + targetObjectId = "3300"; + location = "343.344 -197.744 72.481"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "353.794 -197.226 72.4812"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the GeneratorLarge"; + targetObject = "Team1GeneratorLarge2"; + targetClientId = "-1"; + targetObjectId = "3301"; + location = "353.794 -197.226 72.4812"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIODefendLocation) { + position = "353.794 -197.226 72.4812"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the GeneratorLarge"; + targetObject = "Team1GeneratorLarge2"; + targetClientId = "-1"; + targetObjectId = "3301"; + location = "353.794 -197.226 72.4812"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIODefendLocation) { + position = "326.11 -168.458 96.2014"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend our flag"; + targetObject = "Team1Flag1"; + targetClientId = "-1"; + targetObjectId = "3304"; + location = "326.11 -168.458 96.2014"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + chat = "ChatSelfDefendFlag DefendBase"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + }; + new AIObjective(AIOAttackPlayer) { + position = "323.373 -173.553 97.8754"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Kill the enemy flag carrier"; + mode = "FlagCarrier"; + targetObject = "Team1Flag1"; + targetClientId = "-1"; + targetObjectId = "3304"; + location = "323.373 -173.553 97.8754"; + weightLevel1 = "4800"; + weightLevel2 = "3000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergySniper"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + }; + new AIObjective(AIOTouchObject) { + position = "323.373 -173.553 97.8754"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Return our flag"; + mode = "FlagDropped"; + targetObject = "Team1Flag1"; + targetClientId = "-1"; + targetObjectId = "3304"; + location = "323.373 -173.553 97.8754"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + }; + new AIObjective(AIOAttackObject) { + position = "-570.288 354.206 75.1008"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3457"; + location = "-570.288 354.206 75.1008"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "-630.497 364.472 66.0954"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3461"; + location = "-630.497 364.472 66.0954"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "-491.502 583.075 171.022"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory7"; + targetClientId = "-1"; + targetObjectId = "3510"; + location = "-491.502 583.075 171.022"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOMortarObject) { + position = "62.8001 286.982 208.476"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the SensorLargePulse"; + targetObject = "Team2SensorLargePulse1"; + targetClientId = "-1"; + targetObjectId = "3516"; + location = "62.8001 286.982 208.476"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "55.1522 287.045 176.239"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory8"; + targetClientId = "-1"; + targetObjectId = "3517"; + location = "55.1522 287.045 176.239"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "70.3198 286.912 176.233"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory9"; + targetClientId = "-1"; + targetObjectId = "3519"; + location = "70.3198 286.912 176.233"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "62.7487 287.028 174.968"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the SentryTurret"; + targetObject = "Team2SentryTurret1"; + targetClientId = "-1"; + targetObjectId = "3522"; + location = "62.7487 287.028 174.968"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new SimGroup(FlagTurretGroup) { + + new AIObjective(AIODeployEquipment) { + position = "313.976 -188.069 96.0868"; + rotation = "0 0 -1 94.538"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "313.976 -188.069 96.0868"; + weightLevel1 = "4200"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3423"; + }; + new AIObjective(AIODeployEquipment) { + position = "333.515 -193.216 96.1523"; + rotation = "0 0 -1 51.5662"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "333.515 -193.216 96.1523"; + weightLevel1 = "4200"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3423"; + }; + new AIObjective(AIODeployEquipment) { + position = "321.422 -197.247 93.9055"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy Inventory Station"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "321.422 -197.247 93.9055"; + weightLevel1 = "4300"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "InventoryDeployable"; + buyEquipmentSet = "MediumInventorySet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3423"; + }; + new AIObjective(AIODeployEquipment) { + position = "340.538 -194.395 100.463"; + rotation = "0.00733701 0.366091 0.93055 175.877"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "340.538 -194.395 100.463"; + weightLevel1 = "4200"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3423"; + }; + new AIObjective(AIODeployEquipment) { + position = "356.831 -192.654 100.11"; + rotation = "-0.186085 0.382415 0.905059 146.767"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "356.831 -192.654 100.11"; + weightLevel1 = "4200"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3423"; + }; + new AIObjective(AIODeployEquipment) { + position = "306.974 -152.703 99.9126"; + rotation = "-0.990201 0.0594835 0.126351 50.8564"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "306.974 -152.703 99.9126"; + weightLevel1 = "4200"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3423"; + }; + new AIObjective(AIODeployEquipment) { + position = "291.661 -152.699 99.9622"; + rotation = "-0.914078 -0.179262 -0.363766 49.3988"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "291.661 -152.699 99.9622"; + weightLevel1 = "4200"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3423"; + }; + }; + new SimGroup(GeneratorDeployGroup) { + + new AIObjective(AIODeployEquipment) { + position = "355.367 -214.153 74.3503"; + rotation = "-0.365902 0.340873 0.86598 94.181"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "355.367 -214.153 74.3503"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3431"; + }; + new AIObjective(AIODeployEquipment) { + position = "331.658 -192.204 74.4017"; + rotation = "-0.389146 -0.40068 -0.82947 102.291"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "331.658 -192.204 74.4017"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3431"; + }; + new AIObjective(AIODeployEquipment) { + position = "353.3 -175.369 83.473"; + rotation = "-0.353753 0.364238 0.861504 100.161"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "353.3 -175.369 83.473"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3431"; + }; + new AIObjective(AIODeployEquipment) { + position = "312.707 -183.465 84.5697"; + rotation = "-0.0259665 0.366149 0.930194 172.452"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "312.707 -183.465 84.5697"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3431"; + }; + new AIObjective(AIODeployEquipment) { + position = "317.572 -177.07 71.1776"; + rotation = "0 0 -1 97.4028"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "317.572 -177.07 71.1776"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3431"; + }; + new AIObjective(AIODeployEquipment) { + position = "334.514 -143.911 71.1987"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy Inventory Station"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "334.514 -143.911 71.1987"; + weightLevel1 = "4150"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "InventoryDeployable"; + buyEquipmentSet = "MediumInventorySet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3431"; + }; + new AIObjective(AIODeployEquipment) { + position = "312.022 -173.633 89.2464"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "312.022 -173.633 89.2464"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3431"; + }; + }; + }; + }; + new SimGroup(Team2) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-576.432 383.169 63.92"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "90"; + indoorWeight = "100"; + outdoorWeight = "100"; + locked = "true"; + }; + new SpawnSphere() { + position = "62.7873 286.995 163.189"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "65"; + sphereWeight = "30"; + indoorWeight = "100"; + outdoorWeight = "110"; + locked = "true"; + }; + }; + new SimGroup(MainBase2) { + + + new SimGroup(MainBase2Powered) { + + new StaticShape(Team2GeneratorLarge1) { + position = "-602.321 356.05 64.5588"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2GeneratorLarge2) { + position = "-602.281 362.517 64.5386"; + rotation = "0 0 1 180.482"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new SimGroup(MainBase2Turrets) { + + new Turret(Team2TurretBaseLarge1) { + position = "-453.284 355.91 97.4581"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Mountainside"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new Turret(Team2TurretBaseLarge2) { + position = "-583.195 359.367 106.539"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Rooftop"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "AABarrelLarge"; + locked = "true"; + }; + }; + new SimGroup(MainBase2Stations) { + + new StaticShape() { + position = "-610.208 541.337 77.054"; + rotation = "-0 0 -1 63.5982"; + scale = "1 1 1"; + nameTag = "Main Compound"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory1) { + position = "-569.34 350.347 89.5408"; + rotation = "0 0 1 93.9653"; + scale = "1 1 1"; + nameTag = "Rear Entrance"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory2) { + position = "-570.288 354.206 73.535"; + rotation = "0 0 1 180.482"; + scale = "1 1 1"; + nameTag = "Rear Landing"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory3) { + position = "-586.361 414.552 73.5428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Front Landing"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory4) { + position = "-630.497 364.472 64.5296"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Generator Room"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory5) { + position = "-630.632 371.564 64.5435"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "Generator Room"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory6) { + position = "-573.832 420.026 89.5597"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Front Entrance"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(MainBase2Misc) { + + new StaticShape() { + position = "-578.317 384.578 89.5662"; + rotation = "0 0 -1 20.6264"; + scale = "1 1 1"; + dataBlock = "ExteriorFlagStand"; + lockCount = "0"; + homingCount = "0"; + Flag = "3469"; + locked = "true"; + }; + new Item(Team2Flag1) { + position = "-578.317 384.576 90.1702"; + rotation = "0 0 -1 88.8084"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + locked = "true"; + stand = "3468"; + }; + }; + new SimGroup(MainBase2Buildings) { + + new InteriorInstance() { + position = "-575.345 360.355 86.5455"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + interiorFile = "sbunk2.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new InteriorInstance() { + position = "-605.436 538.968 77.354"; + rotation = "0 0 1 115.92"; + scale = "1 1 1"; + interiorFile = "svpad.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-452.561 355.816 95.8588"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + interiorFile = "smisc3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + }; + new SimGroup(Crates2) { + + new TSStatic() { + position = "-543.306 404.422 64.5492"; + rotation = "0 0 1 6.30239"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-543.35 404.168 66.5492"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-531.013 392.492 64.5492"; + rotation = "0 0 1 1.14602"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-530.864 391.032 67.5492"; + rotation = "0 0 1 2.8649"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-530.975 389.238 64.5492"; + rotation = "0 0 -1 1.71915"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-527.25 389.375 64.5492"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable4l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-527.423 390.149 64.5492"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable4l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-526.648 389.961 64.5492"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable4l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-526.668 392.072 64.5492"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable4l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-526.389 390.678 64.5492"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable4l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-526.78 391.317 64.5492"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable4l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-527.338 391.757 64.5492"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable4l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-527.405 390.94 64.5492"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable4l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-528.114 408.185 65.5892"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-527.912 405.905 64.5492"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-528.125 407.093 65.5892"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-528.183 404.828 65.5892"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-528.122 405.998 65.5892"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-527.971 407.011 64.5492"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-528.152 408.165 64.5492"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-527.84 404.78 64.5492"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-538.169 414.541 65.8296"; + rotation = "-0.292011 -0.289335 0.9116 95.8202"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-536.009 414.337 65.5611"; + rotation = "-0.244718 -0.242475 0.938786 94.1429"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-532.99 407.074 66.5991"; + rotation = "0 1 0 89.9544"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-532.351 409.13 66.5991"; + rotation = "0 1 0 89.9544"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-535.098 407.374 66.5991"; + rotation = "-0.0150097 0.999775 -0.0149977 89.9673"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-534.834 407.898 68.5937"; + rotation = "0 0 -1 19.4806"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-535.502 405.721 64.5492"; + rotation = "0 0 1 3.43771"; + scale = "1 1 1"; + shapeName = "stackable1s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-541.393 392.492 64.5492"; + rotation = "0 0 1 1.14602"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-541.355 389.238 64.5492"; + rotation = "0 0 1 1.71869"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-541.244 391.032 67.5492"; + rotation = "0 0 1 2.8649"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + }; + new StaticShape() { + position = "-583.178 377.846 73.9808"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + dataBlock = "Banner_Strength"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-583.178 390.846 73.9808"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + dataBlock = "Banner_Strength"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(BaseTower2) { + providesPower = "1"; + + new Item() { + position = "-495.959 586.111 170.445"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory7) { + position = "-491.502 583.075 169.456"; + rotation = "0 0 1 123.186"; + scale = "1 1 1"; + nameTag = "Base Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-494.498 585.022 106.448"; + rotation = "0 0 1 33.2315"; + scale = "1 1 1"; + interiorFile = "stowr6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(Tower2) { + + new WayPoint() { + position = "62.7873 286.995 204.201"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Remote Tower"; + team = "0"; + locked = "true"; + }; + new SimGroup(Tower2Powered) { + providesPower = "1"; + + new StaticShape(Team2SensorLargePulse1) { + position = "62.7873 286.995 203.616"; + rotation = "0 0 1 135.309"; + scale = "1 1 1"; + nameTag = "Remote Tower"; + dataBlock = "SensorLargePulse"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory8) { + position = "55.1522 287.045 174.673"; + rotation = "-0 0 -1 89.6907"; + scale = "1 1 1"; + nameTag = "Remote Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory9) { + position = "70.3198 286.912 174.667"; + rotation = "0 0 1 90.3093"; + scale = "1 1 1"; + nameTag = "Remote Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "46.5972 304.809 169.664"; + rotation = "-0 0 -1 44.6907"; + scale = "1 1 1"; + interiorFile = "stowr4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Turret(Team2SentryTurret1) { + position = "62.7273 287.007 174.637"; + rotation = "-0.380189 0.924909 1.66185e-08 180"; + scale = "1 1 1"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + }; + new ForceFieldBare() { + position = "62.7448 281.885 181.031"; + rotation = "-0 0 -1 44.6907"; + scale = "7.2989 7.30716 0.25"; + dataBlock = "defaultForceFieldBare"; + locked = "true"; + }; + }; + new SimGroup(Tower2Goodies) { + + new Item() { + position = "54.8508 287.199 182.316"; + rotation = "0 0 -1 44.6907"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "62.9433 294.712 182.312"; + rotation = "0 0 -1 44.6907"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "70.6022 287.004 182.309"; + rotation = "0 0 -1 44.6907"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "62.6966 279.498 182.308"; + rotation = "0 0 -1 44.6907"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "67.2132 291.313 182.38"; + rotation = "0 0 1 225.309"; + scale = "1 1 1"; + dataBlock = "Plasma"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "59.1563 283.396 181.671"; + rotation = "0 0 -1 44.6907"; + scale = "1 1 1"; + dataBlock = "PlasmaAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "57.8614 283.515 181.669"; + rotation = "0 0 -1 44.6907"; + scale = "1 1 1"; + dataBlock = "PlasmaAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "59.168 282.211 181.674"; + rotation = "0 0 -1 44.6907"; + scale = "1 1 1"; + dataBlock = "PlasmaAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "62.4679 279.006 175.437"; + rotation = "0 0 -1 44.6907"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "36.4425 260.979 199.586"; + rotation = "0 0 -1 44.6907"; + scale = "1 1 1"; + dataBlock = "EnergyPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "32.7386 265.369 199.697"; + rotation = "0 0 -1 44.6907"; + scale = "1 1 1"; + dataBlock = "SniperRifle"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "38.0866 312.043 199.846"; + rotation = "0 0 -1 44.6907"; + scale = "1 1 1"; + dataBlock = "ShieldPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "87.3852 262.139 199.818"; + rotation = "0 0 -1 44.6907"; + scale = "1 1 1"; + dataBlock = "CloakingPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + }; + }; + new SimGroup(AIObjectives) { + + new AIObjective(AIOAttackObject) { + position = "342.82 -202.246 72.5338"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the GeneratorLarge"; + targetObject = "Team1GeneratorLarge1"; + targetClientId = "-1"; + targetObjectId = "3300"; + location = "342.82 -202.246 72.5338"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "354.302 -202.237 72.534"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the GeneratorLarge"; + targetObject = "Team1GeneratorLarge2"; + targetClientId = "-1"; + targetObjectId = "3301"; + location = "354.302 -202.237 72.534"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOTouchObject) { + position = "323.373 -173.553 97.8754"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the enemy flag"; + mode = "FlagGrab"; + targetObject = "Team1Flag1"; + targetClientId = "-1"; + targetObjectId = "3304"; + location = "323.373 -173.553 97.8754"; + weightLevel1 = "3850"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + }; + new AIObjective(AIOTouchObject) { + position = "323.373 -173.553 97.8754"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the flag!"; + mode = "FlagCapture"; + targetObject = "Team1Flag1"; + targetClientId = "-1"; + targetObjectId = "3304"; + location = "323.373 -173.553 97.8754"; + weightLevel1 = "5000"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + }; + new AIObjective(AIOTouchObject) { + position = "323.373 -173.553 97.8754"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the dropped enemy flag"; + mode = "FlagDropped"; + targetObject = "Team1Flag1"; + targetClientId = "-1"; + targetObjectId = "3304"; + location = "323.373 -173.553 97.8754"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + }; + new AIObjective(AIOMortarObject) { + position = "347.419 -178.761 114.789"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team1TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3310"; + location = "347.419 -178.761 114.789"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOMortarObject) { + position = "179.548 -100.835 98.0882"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team1TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3311"; + location = "179.548 -100.835 98.0882"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "287.981 -168.951 97.6093"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3316"; + location = "287.981 -168.951 97.6093"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "336.286 -225.796 72.5998"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3318"; + location = "336.286 -225.796 72.5998"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "343.378 -225.667 72.5859"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3320"; + location = "343.378 -225.667 72.5859"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "293.333 -181.491 81.5991"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3322"; + location = "293.333 -181.491 81.5991"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "353.692 -165.466 81.5913"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3324"; + location = "353.692 -165.466 81.5913"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "357.551 -164.521 97.5971"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory6"; + targetClientId = "-1"; + targetObjectId = "3326"; + location = "357.551 -164.521 97.5971"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "156.391 -268.486 162.434"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory7"; + targetClientId = "-1"; + targetObjectId = "3354"; + location = "156.391 -268.486 162.434"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "-257.487 -53.2505 163.93"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the SentryTurret"; + targetObject = "Team1SentryTurret1"; + targetClientId = "-1"; + targetObjectId = "3363"; + location = "-257.487 -53.2505 163.93"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "-265.055 -53.5008 165.195"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory8"; + targetClientId = "-1"; + targetObjectId = "3364"; + location = "-265.055 -53.5008 165.195"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "-249.899 -52.8997 165.201"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory9"; + targetClientId = "-1"; + targetObjectId = "3366"; + location = "-249.899 -52.8997 165.201"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIOMortarObject) { + position = "-257.54 -53.2069 197.438"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the SensorLargePulse"; + targetObject = "Team1SensorLargePulse1"; + targetClientId = "-1"; + targetObjectId = "3368"; + location = "-257.54 -53.2069 197.438"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-607.058 353.566 66.0435"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the GeneratorLarge"; + targetObject = "Team2GeneratorLarge1"; + targetClientId = "-1"; + targetObjectId = "3446"; + location = "-607.058 353.566 66.0435"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIODefendLocation) { + position = "-607.058 353.566 66.0435"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the GeneratorLarge"; + targetObject = "Team2GeneratorLarge1"; + targetClientId = "-1"; + targetObjectId = "3446"; + location = "-607.058 353.566 66.0435"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-607.076 365.048 66.0433"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the GeneratorLarge"; + targetObject = "Team2GeneratorLarge2"; + targetClientId = "-1"; + targetObjectId = "3447"; + location = "-607.076 365.048 66.0433"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIODefendLocation) { + position = "-607.076 365.048 66.0433"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the GeneratorLarge"; + targetObject = "Team2GeneratorLarge2"; + targetClientId = "-1"; + targetObjectId = "3447"; + location = "-607.076 365.048 66.0433"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-452.623 355.91 99.2096"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3449"; + location = "-452.623 355.91 99.2096"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-583.195 360.028 108.291"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3450"; + location = "-583.195 360.028 108.291"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-569.34 350.347 91.1066"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3455"; + location = "-569.34 350.347 91.1066"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-570.288 354.206 75.1008"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3457"; + location = "-570.288 354.206 75.1008"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-586.361 414.552 75.1086"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3459"; + location = "-586.361 414.552 75.1086"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-630.497 364.472 66.0954"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3461"; + location = "-630.497 364.472 66.0954"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-630.632 371.564 66.1093"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3463"; + location = "-630.632 371.564 66.1093"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-573.832 420.026 91.1255"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory6"; + targetClientId = "-1"; + targetObjectId = "3465"; + location = "-573.832 420.026 91.1255"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIODefendLocation) { + position = "-578.317 384.576 91.4003"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend our flag"; + targetObject = "Team2Flag1"; + targetClientId = "-1"; + targetObjectId = "3469"; + location = "-578.317 384.576 91.4003"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + chat = "ChatSelfDefendFlag DefendBase"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + }; + new AIObjective(AIOAttackPlayer) { + position = "-578.317 384.576 91.4003"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Kill the enemy flag carrier"; + mode = "FlagCarrier"; + targetObject = "Team2Flag1"; + targetClientId = "-1"; + targetObjectId = "3469"; + location = "-578.317 384.576 91.4003"; + weightLevel1 = "4800"; + weightLevel2 = "3000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergySniper"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + }; + new AIObjective(AIOTouchObject) { + position = "-578.317 384.576 91.4003"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Return our flag"; + mode = "FlagDropped"; + targetObject = "Team2Flag1"; + targetClientId = "-1"; + targetObjectId = "3469"; + location = "-578.317 384.576 91.4003"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + }; + new AIObjective(AIORepairObject) { + position = "-491.502 583.075 171.022"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory7"; + targetClientId = "-1"; + targetObjectId = "3510"; + location = "-491.502 583.075 171.022"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "62.8001 286.982 208.476"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SensorLargePulse"; + targetObject = "Team2SensorLargePulse1"; + targetClientId = "-1"; + targetObjectId = "3516"; + location = "62.8001 286.982 208.476"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "55.1522 287.045 176.239"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory8"; + targetClientId = "-1"; + targetObjectId = "3517"; + location = "55.1522 287.045 176.239"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "70.3198 286.912 176.233"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory9"; + targetClientId = "-1"; + targetObjectId = "3519"; + location = "70.3198 286.912 176.233"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIORepairObject) { + position = "62.7487 287.028 174.968"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SentryTurret"; + targetObject = "Team2SentryTurret1"; + targetClientId = "-1"; + targetObjectId = "3522"; + location = "62.7487 287.028 174.968"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new SimGroup(FlagDeployGroup) { + + new AIObjective(AIODeployEquipment) { + position = "-596.83 375.163 89.6071"; + rotation = "0 0 1 42.9718"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-596.83 375.163 89.6071"; + weightLevel1 = "4200"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3578"; + }; + new AIObjective(AIODeployEquipment) { + position = "-592.479 395.278 89.6249"; + rotation = "0 0 1 176.654"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-592.479 395.278 89.6249"; + weightLevel1 = "4200"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3578"; + }; + new AIObjective(AIODeployEquipment) { + position = "-601.751 387.421 87.4799"; + rotation = "0 0 1 83.0789"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy Inventory Station"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-601.751 387.421 87.4799"; + weightLevel1 = "4300"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "InventoryDeployable"; + buyEquipmentSet = "MediumInventorySet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3578"; + }; + new AIObjective(AIODeployEquipment) { + position = "-561.407 396.633 97.7165"; + rotation = "0 0 1 190.977"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-561.407 396.633 97.7165"; + weightLevel1 = "4200"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3578"; + }; + new AIObjective(AIODeployEquipment) { + position = "-566.533 376.387 93.4969"; + rotation = "0.0223656 0.412218 0.910811 185.658"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-566.533 376.387 93.4969"; + weightLevel1 = "4200"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3578"; + }; + new AIObjective(AIODeployEquipment) { + position = "-598.71 368.707 92.9963"; + rotation = "-0.673461 -0.304797 -0.673461 67.8043"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-598.71 368.707 92.9963"; + weightLevel1 = "4200"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3578"; + }; + new AIObjective(AIODeployEquipment) { + position = "-584.193 346.648 93.0864"; + rotation = "0.024806 0.457198 0.889019 185.523"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-584.193 346.648 93.0864"; + weightLevel1 = "4200"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3578"; + }; + new AIObjective(AIODeployEquipment) { + position = "-558.275 399.839 92.9017"; + rotation = "-0.146935 0.407846 0.90115 144.027"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-558.275 399.839 92.9017"; + weightLevel1 = "4200"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3578"; + }; + }; + new SimGroup(GeneratorDeployGroup) { + + new AIObjective(AIODeployEquipment) { + position = "-576.502 414.036 77.1237"; + rotation = "-0.944961 0.220876 0.241376 50.6474"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-576.502 414.036 77.1237"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3587"; + }; + new AIObjective(AIODeployEquipment) { + position = "-634.912 399.957 64.7697"; + rotation = "0 0 1 51.5662"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-634.912 399.957 64.7697"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3587"; + }; + new AIObjective(AIODeployEquipment) { + position = "-548.794 373.184 64.6807"; + rotation = "0 0 1 83.0789"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy Inventory Station"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-548.794 373.184 64.6807"; + weightLevel1 = "4150"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "InventoryDeployable"; + buyEquipmentSet = "MediumInventorySet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3587"; + }; + new AIObjective(AIODeployEquipment) { + position = "-512.68 385.535 69.3916"; + rotation = "0.994098 0.0752542 0.0781392 226.074"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-512.68 385.535 69.3916"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3587"; + }; + new AIObjective(AIODeployEquipment) { + position = "-547.938 403.674 64.668"; + rotation = "0 0 1 193.842"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy Inventory Station"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-547.938 403.674 64.668"; + weightLevel1 = "4150"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "InventoryDeployable"; + buyEquipmentSet = "MediumInventorySet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3587"; + }; + new AIObjective(AIODeployEquipment) { + position = "-548.863 390.261 67.9052"; + rotation = "-1 0 0 48.7014"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-548.863 390.261 67.9052"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3587"; + }; + new AIObjective(AIODeployEquipment) { + position = "-576.42 378.846 67.7643"; + rotation = "-0.353753 0.364238 0.861504 100.161"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-576.42 378.846 67.7643"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3587"; + }; + new AIObjective(AIODeployEquipment) { + position = "-621.213 353.494 68.0578"; + rotation = "-0.457589 -0.426288 -0.780315 100.1"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-621.213 353.494 68.0578"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3587"; + }; + }; + }; + }; + new SimGroup(team0) { + + new Item() { + position = "-578.437 414.33 74.6654"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-578.34 354.518 74.6836"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "293.561 -173.567 81.1559"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "353.373 -173.518 81.1741"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new SimGroup(AIObjectives) { + }; + }; + }; + new SimGroup(Landmarks) { + + new InteriorInstance(SmallRock) { + position = "4.29272 -678.22 87.0344"; + rotation = "0 0 1 40.68"; + scale = "1 1 1"; + interiorFile = "sspir4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "604.674 288.347 95.0202"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "sspir3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-694.001 688.419 81.4125"; + rotation = "0 0 1 68.7549"; + scale = "1 1 1"; + interiorFile = "sspir4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-882.758 293.23 98.8326"; + rotation = "0 0 -1 25.2101"; + scale = "1 1 1"; + interiorFile = "sspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-891.714 -286.207 88.3106"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "sspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-221.53 190.742 77.4905"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "srock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-209.718 191.939 80.2187"; + rotation = "-0.819622 -0.568812 -0.0683577 80.983"; + scale = "1 1 1"; + interiorFile = "srock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-177.352 224.065 77.315"; + rotation = "-0.844132 -0.0752246 -0.530831 52.3752"; + scale = "1 1 1"; + interiorFile = "srock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-179.65 235.545 77.0884"; + rotation = "0.960354 0.139691 0.24126 110.99"; + scale = "1 1 1"; + interiorFile = "srock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-106.21 57.7174 78.575"; + rotation = "0.632488 0.637505 -0.439938 88.8149"; + scale = "1 1 1"; + interiorFile = "srock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-107.599 41.1366 80.8043"; + rotation = "1 0 0 135.218"; + scale = "1 1 1"; + interiorFile = "srock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-40.5405 106.833 78.0061"; + rotation = "-0.785982 0.317479 0.530508 101.895"; + scale = "1 1 1"; + interiorFile = "srock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-53.613 125.786 84.5896"; + rotation = "-0.729593 -0.471499 -0.495362 81.0287"; + scale = "1 1 1"; + interiorFile = "srock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-50.1881 105.939 76.4521"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "srock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-58.092 116.907 76.9334"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "srock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-93.3823 63.4909 76.8637"; + rotation = "1 0 0 205.874"; + scale = "1 1 1"; + interiorFile = "srock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-191.544 230.281 76.4113"; + rotation = "0 1 0 17.7616"; + scale = "1 1 1"; + interiorFile = "srock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-216.399 199.251 77.8031"; + rotation = "-0.00419048 -0.594692 -0.803943 94.5913"; + scale = "1 1 1"; + interiorFile = "srock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-33.1756 122.498 78.0202"; + rotation = "-0.335772 0.927883 -0.162146 125.688"; + scale = "1 1 1"; + interiorFile = "srock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new AudioEmitter() { + position = "289.762 209.214 173.677"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/moaningwind1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Masada.mis b/base/missions/Masada.mis new file mode 100644 index 0000000..30bb50f --- /dev/null +++ b/base/missions/Masada.mis @@ -0,0 +1,1947 @@ +// MissionTypes = Siege +// DisplayName = Masada + +//--- MISSION QUOTE BEGIN --- +//Mortality weighs heavily on me like unwilling sleep, and each imagined pinnacle and steep of godlike hardship tells me I must die. +// -- John Keats +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[Siege]Defenders - high ground but few resources +//[Siege]Attackers - poor position but good resources +//[Siege]Attackers have vehicle station +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + musicTrack = "desert"; + cdTrack = "6"; + Siege_timeLimit = "20"; + powerCount = "0"; + + new MissionArea(MissionArea) { + area = "-216 -576 848 912"; + flightCeiling = "2000"; + flightCeilingRange = "50"; + locked = "true"; + }; + new Sky(Sky) { + position = "-1216 -1336 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "630"; + useSkyTextures = "1"; + renderBottomTexture = "0"; + SkySolidColor = "0.000000 0.000000 0.000000 1.000000"; + fogDistance = "305"; + fogColor = "0.000000 0.000000 0.000000 1.000000"; + fogVolume1 = "0 0 0"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "sky_desert_starrynight.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 0.000000"; + cloudSpeed0 = "0.000000 0.000000"; + locked = "true"; + }; + new Sun() { + direction = "0.643953 0.643953 -0.413096"; + color = "0.600000 0.600000 0.600000 1.000000"; + ambient = "0.300000 0.300000 0.300000 1.000000"; + position = "-1216 -1336 0"; + locked = "true"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/desertdet2"; + terrainFile = "Masada.ter"; + squareSize = "8"; + emptySquares = "293756 294012 294268 294524 294780 295036"; + position = "-1024 -1024 0"; + locked = "true"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "45"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + GraphFile = "Masada.nav"; + coverage = "0"; + XDimOverSize = "0"; + position = "0 0 0 1"; + locked = "true"; + YDimOverSize = "0"; + rotation = "0 0 0 0"; + scale = "1 1 1"; + conjoinBowlDev = "20"; + }; + new SimGroup(RandomOrganics) { + powerCount = "0"; + + new SimGroup(Addition1PhoenixPlant2) { + powerCount = "0"; + + new TSStatic() { + position = "118.5 386.5 213.604"; + rotation = "0 0 -1 78"; + scale = "1.5 1.5 1.5"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "140.5 94.5 219.982"; + rotation = "0 0 -1 1.9999"; + scale = "0.8 0.8 0.8"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-321.5 107.5 110.939"; + rotation = "0 0 -1 101"; + scale = "0.9 0.9 0.9"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "156.5 -111.5 109.758"; + rotation = "0 0 1 53"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-70.5 -364.5 56.7207"; + rotation = "0 0 1 158"; + scale = "1.6 1.6 1.6"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-71.5 163.5 153.738"; + rotation = "0 0 1 104"; + scale = "1.4 1.4 1.4"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "275.5 -428.5 70.6367"; + rotation = "1 0 0 0"; + scale = "1.6 1.6 1.6"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-335.5 306.5 222.141"; + rotation = "0 0 -1 26"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-69.5 -66.5 268.201"; + rotation = "0 0 1 163"; + scale = "1.6 1.6 1.6"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-299.5 -425.5 284.137"; + rotation = "0 0 1 40"; + scale = "0.8 0.8 0.8"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "205.5 -294.5 158.496"; + rotation = "0 0 -1 107"; + scale = "1.2 1.2 1.2"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-286.5 -49.5 104.34"; + rotation = "0 0 -1 117"; + scale = "0.9 0.9 0.9"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-44.5 -431.5 61.1484"; + rotation = "0 0 1 204"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "407.5 209.5 99.4277"; + rotation = "0 0 1 218"; + scale = "0.9 0.9 0.9"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-409.5 329.5 153.207"; + rotation = "0 0 1 107"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition2PhoenixPlant3) { + powerCount = "0"; + + new TSStatic() { + position = "106.5 454.5 223.049"; + rotation = "0 0 1 180"; + scale = "0.7 0.7 0.7"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "90.5 -386.5 54.5996"; + rotation = "0 0 -1 14"; + scale = "1.4 1.4 1.4"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-266.5 385.5 283.426"; + rotation = "0 0 -1 50"; + scale = "0.7 0.7 0.7"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-406.5 285.5 152.908"; + rotation = "0 0 1 211"; + scale = "1.5 1.5 1.5"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "413.5 40.5 58.7071"; + rotation = "0 0 -1 45"; + scale = "1.1 1.1 1.1"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "194.5 373.5 246.525"; + rotation = "0 0 1 25"; + scale = "1.4 1.4 1.4"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "337.5 359.5 127.373"; + rotation = "0 0 1 30"; + scale = "1.6 1.6 1.6"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "221.5 -148.5 176.709"; + rotation = "0 0 1 47"; + scale = "0.7 0.7 0.7"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-20.5 235.5 107.375"; + rotation = "0 0 1 6.00005"; + scale = "1 1 1"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-390.5 -56.5 146.266"; + rotation = "0 0 -1 89"; + scale = "1.6 1.6 1.6"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "4.5 -420.5 56.834"; + rotation = "0 0 1 100"; + scale = "1.4 1.4 1.4"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "155.5 -235.5 176.275"; + rotation = "0 0 -1 52"; + scale = "1.5 1.5 1.5"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "347.5 -261.5 166.576"; + rotation = "0 0 1 174"; + scale = "0.8 0.8 0.8"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "33.5 373.5 104.133"; + rotation = "0 0 1 197"; + scale = "1.1 1.1 1.1"; + shapeName = "porg3.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition3PhoenixPlant5) { + powerCount = "0"; + + new TSStatic() { + position = "263.5 -242.5 176.404"; + rotation = "0 0 1 118"; + scale = "1.6 1.6 1.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-358.5 -157.5 112.832"; + rotation = "0 0 1 60"; + scale = "1.1 1.1 1.1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "395.5 289.5 179.865"; + rotation = "0 0 -1 47"; + scale = "1.6 1.6 1.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-156.5 257.5 214.682"; + rotation = "0 0 1 206"; + scale = "1.6 1.6 1.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-49.5 -436.5 61.123"; + rotation = "1 0 0 0"; + scale = "1.1 1.1 1.1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-84.5 220.5 132.353"; + rotation = "0 0 1 186"; + scale = "1.2 1.2 1.2"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "405.5 40.5 60.1874"; + rotation = "0 0 1 71"; + scale = "1.6 1.6 1.6"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "25.5 -178.5 172.76"; + rotation = "0 0 -1 117"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-282.5 -300.5 280.658"; + rotation = "0 0 1 235"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "74.5 -355.5 56.8535"; + rotation = "0 0 1 152"; + scale = "1 1 1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "353.5 68.5 55.8282"; + rotation = "0 0 1 102"; + scale = "1.3 1.3 1.3"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "229.5 -162.5 177.508"; + rotation = "0 0 -1 34"; + scale = "0.7 0.7 0.7"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "248.5 -219.5 198.689"; + rotation = "0 0 1 86"; + scale = "1.1 1.1 1.1"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-225.5 286.5 282.639"; + rotation = "0 0 1 212"; + scale = "0.8 0.8 0.8"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-70.5 -56.5 270.82"; + rotation = "0 0 1 164"; + scale = "1.4 1.4 1.4"; + shapeName = "porg5.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition4PhoenixPlant6) { + powerCount = "0"; + + new TSStatic() { + position = "-399.5 -396.5 211.094"; + rotation = "0 0 -1 87"; + scale = "1.5 1.5 1.5"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-249.5 -385.5 285.008"; + rotation = "0 0 1 131"; + scale = "1.2 1.2 1.2"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-280.5 -46.5 101.158"; + rotation = "0 0 1 112"; + scale = "1.3 1.3 1.3"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-314.5 -244.5 285.412"; + rotation = "0 0 1 123"; + scale = "0.9 0.9 0.9"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-287.5 228.5 262.816"; + rotation = "0 0 -1 91"; + scale = "1.2 1.2 1.2"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "328.5 150.5 66.334"; + rotation = "0 0 -1 34"; + scale = "1.3 1.3 1.3"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-60.5 -212.5 106.299"; + rotation = "0 0 -1 50"; + scale = "1 1 1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "0.5 -121.5 218.785"; + rotation = "0 0 1 192"; + scale = "1.4 1.4 1.4"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "403.5 208.5 97.416"; + rotation = "0 0 1 97"; + scale = "1.3 1.3 1.3"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-14.5 -325.5 56.1426"; + rotation = "0 0 1 127"; + scale = "0.7 0.7 0.7"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-240.5 -371.5 286.293"; + rotation = "0 0 1 133"; + scale = "0.8 0.8 0.8"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "360.5 151.5 63.1484"; + rotation = "0 0 1 182"; + scale = "0.8 0.8 0.8"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "325.5 352.5 124.748"; + rotation = "0 0 1 8.00005"; + scale = "1.3 1.3 1.3"; + shapeName = "porg6.dts"; + locked = "true"; + }; + }; + new TSStatic() { + position = "39.5108 50.7112 285.104"; + rotation = "0 0 -1 5.15676"; + scale = "1 1 1.0507"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "8.737 -0.5 285.739"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "8.3238 55.5653 284.675"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-37.7247 1.7271 284.938"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new SimGroup(Addition5PhoenixPlant1) { + powerCount = "0"; + + new TSStatic() { + position = "-791.5 823.5 175.647"; + rotation = "0 0 1 204"; + scale = "1.5 1.5 1.5"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "454.5 -438.5 81.4082"; + rotation = "0 0 1 78"; + scale = "0.7 0.7 0.7"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "534.5 535.5 167.596"; + rotation = "0 0 -1 45"; + scale = "0.8 0.8 0.8"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "64.5 729.5 50.0937"; + rotation = "0 0 1 180"; + scale = "1.4 1.4 1.4"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-442.5 -532.5 175.75"; + rotation = "0 0 -1 93"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "601.5 -73.5 166.547"; + rotation = "0 0 -1 68"; + scale = "1.5 1.5 1.5"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "345.5 72.5 54.5156"; + rotation = "0 0 1 46"; + scale = "0.8 0.8 0.8"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-289.5 -381.5 284.309"; + rotation = "0 0 1 184"; + scale = "1.3 1.3 1.3"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-185.5 -200.5 79.5351"; + rotation = "0 0 -1 93"; + scale = "0.7 0.7 0.7"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-505.5 -84.5 218.471"; + rotation = "0 0 -1 94"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-241.5 -42.5 104.811"; + rotation = "0 0 1 120"; + scale = "1.4 1.4 1.4"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-433.5 -348.5 199.502"; + rotation = "0 0 1 134"; + scale = "1.4 1.4 1.4"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-306.5 -586.5 208.242"; + rotation = "0 0 -1 49"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "583.5 -79.5 156.969"; + rotation = "0 0 1 12"; + scale = "1.3 1.3 1.3"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "852.5 -205.5 75.9668"; + rotation = "0 0 -1 35"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + locked = "true"; + }; + }; + }; + new SimGroup(ObserverDropPoints) { + powerCount = "0"; + + new Camera() { + position = "-20.6626 102.72 305.189"; + rotation = "0 0 1 167.486"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "22.3738 -45.7446 306.076"; + rotation = "0 0 -1 19.4805"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "376.02 -108.567 267.124"; + rotation = "0 0 -1 64.7442"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-283.207 46.3119 182.125"; + rotation = "0 0 1 72.7656"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + powerCount = "0"; + + new SimGroup(Team1) { + powerCount = "0"; + + new SimGroup(spawnspheres) { + powerCount = "0"; + + new SpawnSphere() { + position = "486.888 89.3748 59.581"; + rotation = "0 0 1 198.999"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "40"; + sphereWeight = "50"; + indoorWeight = "50"; + outdoorWeight = "50"; + locked = "true"; + }; + }; + new SimGroup(Bases) { + powerCount = "0"; + + new SimGroup(EBase) { + powerCount = "1"; + + new InteriorInstance() { + position = "488.016 107.143 51.364"; + rotation = "0 0 1 93.3921"; + scale = "1 1 1"; + interiorFile = "pbunk6.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_1"; + team = "1"; + locked = "true"; + }; + new StaticShape(Team1generatorLarge2) { + position = "491.575 100.406 79.429"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Assault Base"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + Target = "33"; + team = "1"; + locked = "true"; + }; + new StaticShape(Team1StationInventory3) { + position = "486.547 107.142 67.38"; + rotation = "0 0 -1 87.6625"; + scale = "1 1 1"; + nameTag = "Assault Base"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "34"; + team = "1"; + locked = "true"; + Trigger = "3432"; + }; + new StaticShape(Team1StationInventory4) { + position = "492.221 113.632 79.515"; + rotation = "0 0 1 90.5273"; + scale = "1 1 1"; + nameTag = "Assault Base"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "35"; + team = "1"; + locked = "true"; + Trigger = "3434"; + }; + new StaticShape(Team1StationInventory5) { + position = "484.799 113.632 79.515"; + rotation = "0 0 -1 88.2355"; + scale = "1 1 1"; + nameTag = "Assault Base"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "36"; + team = "1"; + locked = "true"; + Trigger = "3436"; + }; + new ForceFieldBare() { + position = "486.024 112.327 52.9314"; + rotation = "0 0 1 3.43793"; + scale = "4.41078 0.265478 7.87093"; + dataBlock = "defaultTeamSlowFieldBare"; + Target = "37"; + team = "1"; + locked = "true"; + }; + new ForceFieldBare() { + position = "485.382 101.815 52.5017"; + rotation = "0 0 1 2.8649"; + scale = "4.66089 0.252535 8.34756"; + dataBlock = "defaultTeamSlowFieldBare"; + Target = "38"; + team = "1"; + locked = "true"; + }; + new InteriorInstance() { + position = "399.456 103.275 52.7"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + interiorFile = "pvpad.dif"; + showTerrainInside = "0"; + team = "1"; + locked = "true"; + }; + new StaticShape() { + position = "408.037 102.282 52.4"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + Target = "-1"; + AssaultVehicle = "Removed"; + team = "1"; + locked = "true"; + mobileBaseVehicle = "Removed"; + ready = "1"; + station = "3444"; + }; + new Turret() { + position = "484.355 117.451 85.3125"; + rotation = "0 0 -1 85.9437"; + scale = "1 1 1"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + Target = "40"; + team = "1"; + locked = "true"; + originalBarrel = "PlasmaBarrelLarge"; + lastProjectile = "4424"; + }; + new Turret() { + position = "483.229 97.4348 85.3125"; + rotation = "0 0 -1 84.7978"; + scale = "1 1 1"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + Target = "41"; + team = "1"; + locked = "true"; + originalBarrel = "PlasmaBarrelLarge"; + lastProjectile = "4425"; + }; + }; + }; + new SimGroup(AIObjectives) { + powerCount = "0"; + + new AIObjective(AIOAttackObject) { + position = "15.4737 82.6144 296.473"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy generator"; + targetObject = "Team2generatorLarge3"; + targetClientId = "-1"; + targetObjectId = "3473"; + location = "15.4737 82.6144 296.473"; + weightLevel1 = "4500"; + weightLevel2 = "3000"; + weightLevel3 = "2000"; + weightLevel4 = "1800"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "MediumShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + issuingClientId = "-1"; + isInvalid = "0"; + gameType = "all"; + }; + new AIObjective(AIOAttackObject) { + position = "15.2334 84.7637 313.495"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3465"; + location = "15.2334 84.7637 313.495"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + isInvalid = "0"; + }; + new AIObjective(AIOTouchObject) { + position = "-15.3318 -0.0208393 271.993"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team2FlipFlop1"; + mode = "TouchFlipFlop"; + targetObject = "Team2FlipFlop1"; + targetClientId = "-1"; + targetObjectId = "3475"; + location = "-15.3318 -0.0208393 271.993"; + weightLevel1 = "3850"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "Light EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + isInvalid = "0"; + }; + new AIObjective(AIOAttackObject) { + position = "-10.4499 -44.4111 272.693"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy generator"; + targetObject = "Team2generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3462"; + location = "-10.4499 -44.4111 272.693"; + weightLevel1 = "4500"; + weightLevel2 = "3000"; + weightLevel3 = "2000"; + weightLevel4 = "1800"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "MediumShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + issuingClientId = "-1"; + isInvalid = "0"; + gameType = "all"; + }; + new AIObjective(AIOAttackObject) { + position = "-3.74753 -44.3354 272.093"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy generator"; + targetObject = "Team2generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3463"; + location = "-3.74753 -44.3354 272.093"; + weightLevel1 = "4500"; + weightLevel2 = "3000"; + weightLevel3 = "2000"; + weightLevel4 = "1800"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "MediumShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + issuingClientId = "-1"; + isInvalid = "0"; + gameType = "all"; + }; + new AIObjective(AIODefendLocation) { + position = "499.594 108.103 19.5009"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the GeneratorLarge"; + targetObject = "Team1generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "499.594 108.103 19.5009"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + isInvalid = "0"; + }; + }; + }; + new SimGroup(Team2) { + powerCount = "0"; + + new SimGroup(defense) { + powerCount = "3"; + + new WayPoint() { + position = "-5.4366 -45.1529 272.689"; + rotation = "-0 0 -1 42.9718"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Holdfast Generators"; + team = "2"; + locked = "true"; + }; + new WayPoint() { + position = "15.7295 83.0713 296.738"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Stronghold Generator"; + team = "2"; + locked = "true"; + }; + new InteriorInstance() { + position = "-15.5504 -20.6638 284.652"; + rotation = "-0 0 -1 89.9543"; + scale = "1 1 1"; + interiorFile = "pbunk2.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_1"; + team = "2"; + locked = "true"; + }; + new InteriorInstance() { + position = "15.194 77.3314 282.413"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pbunk7.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_1"; + team = "2"; + locked = "true"; + }; + new Item() { + position = "15.3102 70.229 312.183"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + team = "2"; + locked = "true"; + }; + new StaticShape(Team2generatorLarge1) { + position = "-8.11399 -42.8063 271.588"; + rotation = "0 0 1 90.5272"; + scale = "1 1 1"; + nameTag = "Holdfast"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + name = "Bunker"; + Target = "42"; + team = "2"; + locked = "true"; + damageTimeMS = "694715"; + }; + new StaticShape(Team2generatorLarge2) { + position = "-6.7802 -43.0255 271.588"; + rotation = "0 0 -1 90.5273"; + scale = "1 1 1"; + nameTag = "Holdfast"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + name = "Bunker"; + Target = "43"; + team = "2"; + locked = "true"; + damageTimeMS = "695007"; + }; + new Item() { + position = "-14.7471 -32.7903 282.27"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Mine"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + team = "2"; + locked = "true"; + }; + new StaticShape(Team2StationInventory1) { + position = "15.2334 84.7637 311.929"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Defense"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "44"; + team = "2"; + locked = "true"; + Trigger = "3466"; + }; + new StaticShape(Team2SensorLargePulse1) { + position = "-56.1232 -88.395 305.148"; + rotation = "0 0 -1 57.8687"; + scale = "1 1 1"; + nameTag = "Main Sensor"; + dataBlock = "SensorLargePulse"; + lockCount = "0"; + homingCount = "0"; + Target = "45"; + team = "2"; + locked = "true"; + }; + new Item() { + position = "-18.2612 -29.9575 296.872"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ShieldPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + team = "2"; + locked = "true"; + }; + new Item() { + position = "-18.8244 -32.2674 282.283"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Mine"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + team = "2"; + locked = "true"; + }; + new Item() { + position = "-14.5991 -29.9928 296.903"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + team = "2"; + locked = "true"; + }; + new Item() { + position = "8.8965 70.9295 304.879"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ConcussionGrenade"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + team = "2"; + locked = "true"; + }; + new Item() { + position = "22.4336 70.5298 305.03"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "FlashGrenade"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + team = "2"; + locked = "true"; + }; + new StaticShape(Team2generatorLarge3) { + position = "16.7948 82.6214 294.968"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "Stronghold"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + name = "Tower"; + Target = "46"; + team = "2"; + locked = "true"; + damageTimeMS = "652863"; + }; + new Item() { + position = "-11.0846 -30.0616 297.07"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "EnergyPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + team = "2"; + locked = "true"; + }; + new StaticShape(Team2FlipFlop1) { + position = "-15.3318 -0.0208392 269.726"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Control Switch"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + Target = "47"; + team = "2"; + locked = "true"; + Projector = "0"; + }; + new ForceFieldBare() { + position = "-15.6484 -12.6499 269.508"; + rotation = "1 0 0 0"; + scale = "7.42997 0.968412 11.2878"; + dataBlock = "defaultTeamSlowFieldBare"; + Target = "48"; + team = "2"; + locked = "true"; + }; + }; + new SimGroup(spawnspheres) { + powerCount = "0"; + + new SpawnSphere() { + position = "-10.9234 -17.1259 291.099"; + rotation = "-0 0 -1 42.9718"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "50"; + indoorWeight = "50"; + outdoorWeight = "50"; + locked = "true"; + }; + new SpawnSphere() { + position = "14.7427 74.1882 307.053"; + rotation = "0 0 1 90.5273"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "35"; + sphereWeight = "50"; + indoorWeight = "50"; + outdoorWeight = "50"; + locked = "true"; + }; + }; + new SimGroup(AIObjectives) { + powerCount = "0"; + + new AIObjective(AIORepairObject) { + position = "-10.4499 -44.4111 272.693"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generator"; + targetObject = "Team2generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3462"; + location = "-10.4499 -44.4111 272.693"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "HeavyRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + issuingClientId = "-1"; + isInvalid = "0"; + gameType = "all"; + }; + new AIObjective(AIODefendLocation) { + position = "-10.4499 -44.4111 272.693"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generator"; + targetObject = "Team2generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3462"; + location = "-10.4499 -44.4111 272.693"; + weightLevel1 = "4500"; + weightLevel2 = "2500"; + weightLevel3 = "2000"; + weightLevel4 = "1500"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + issuingClientId = "-1"; + isInvalid = "0"; + gameType = "all"; + }; + new AIObjective(AIODefendLocation) { + position = "-15.3318 -0.0208393 271.993"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the FlipFlop"; + targetObject = "Team2FlipFlop1"; + targetClientId = "-1"; + targetObjectId = "3475"; + location = "-15.3318 -0.0208393 271.993"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + isInvalid = "0"; + }; + new AIObjective(AIODefendLocation) { + position = "-4.84369 -42.743 273.631"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the GeneratorLarge"; + targetObject = "Team2generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3463"; + location = "-4.84369 -42.743 273.631"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "15.4737 82.6144 296.473"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generator"; + targetObject = "Team2generatorLarge3"; + targetClientId = "-1"; + targetObjectId = "3473"; + location = "15.4737 82.6144 296.473"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "HeavyRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + issuingClientId = "-1"; + isInvalid = "0"; + gameType = "all"; + }; + new AIObjective(AIODefendLocation) { + position = "15.4737 82.6144 296.473"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generator"; + targetObject = "Team2generatorLarge3"; + targetClientId = "-1"; + targetObjectId = "3473"; + location = "15.4737 82.6144 296.473"; + weightLevel1 = "4000"; + weightLevel2 = "2500"; + weightLevel3 = "2000"; + weightLevel4 = "1500"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + issuingClientId = "-1"; + isInvalid = "0"; + gameType = "all"; + }; + new AIObjective(AIORepairObject) { + position = "-4.84369 -42.743 273.631"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the GeneratorLarge"; + targetObject = "Team2generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3463"; + location = "-4.84369 -42.743 273.631"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "-56.1386 -88.3853 309.423"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SensorLargePulse"; + targetObject = "Team2SensorLargePulse1"; + targetClientId = "-1"; + targetObjectId = "3467"; + location = "-56.1386 -88.3853 309.423"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "15.2334 84.7637 313.495"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3465"; + location = "15.2334 84.7637 313.495"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + isInvalid = "0"; + }; + new SimGroup(deploy) { + clientLevel1 = "3147"; + powerCount = "0"; + + new AIObjective(AIODeployEquipment) { + position = "-21.5883 -10.5368 269.972"; + rotation = "0 0 1 230.329"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy Inventory Station"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-21.5883 -10.5368 269.972"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "InventoryDeployable"; + buyEquipmentSet = "MediumInventorySet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + group = "3491"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-11.4566 -20.5771 271.934"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-11.4566 -20.5771 271.934"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + group = "3491"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "18.1197 -23.2996 272.581"; + rotation = "0.00499992 0.00495411 0.999975 90.5287"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "18.1197 -23.2996 272.581"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + group = "3491"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-31.1203 -22.3868 273.377"; + rotation = "0 0 -1 87.845"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-31.1203 -22.3868 273.377"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + group = "3491"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-22.29 -15.2144 282.106"; + rotation = "0 0 -1 33.8045"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-22.29 -15.2144 282.106"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + group = "3491"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-3.016 -32.3073 281.965"; + rotation = "0 0 1 133.499"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-3.016 -32.3073 281.965"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + group = "3491"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "2.46598 36.4512 285.293"; + rotation = "0 0 1 61.8794"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "2.46598 36.4512 285.293"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + group = "3491"; + isInvalid = "0"; + }; + }; + }; + }; + new SimGroup(team0) { + powerCount = "0"; + + new SimGroup(AIObjectives) { + powerCount = "0"; + }; + }; + }; + new SimGroup(Ambiance) { + powerCount = "0"; + + new AudioEmitter() { + position = "9.8136 30.4218 291.845"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/crickets.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "5"; + maxDistance = "320"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "142.648 57.3514 208.275"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/fly_swarm.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "10"; + maxDistance = "640"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "282.723 -80.4861 195.344"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/crickets_drygrass.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "10"; + maxDistance = "640"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-217.778 29.7983 140.134"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/crickets_drygrass.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "10"; + maxDistance = "640"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-40.0386 -55.3559 208.819"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/rockslide1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "2"; + maxDistance = "128"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "30000"; + maxLoopGap = "60000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "62.9439 119.138 226.868"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/rockslide2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "2"; + maxDistance = "128"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "20000"; + maxLoopGap = "40000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-63.0371 -93.4292 300.781"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/desertowl.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "20000"; + maxLoopGap = "40000"; + type = "EffectAudioType"; + locked = "true"; + }; + new TSStatic() { + position = "-285.871 -411.232 284.689"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "statue_base.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-285.696 -410.927 287.973"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "statue_lmale.dts"; + locked = "true"; + }; + }; + new ForceFieldBare() { + position = "486.483 118.913 77.2077"; + rotation = "0 0 1 2.8649"; + scale = "4.57986 0.252535 7.56859"; + dataBlock = "defaultTeamSlowFieldBare"; + Target = "49"; + locked = "true"; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Minotaur.mis b/base/missions/Minotaur.mis new file mode 100644 index 0000000..23bd4d3 --- /dev/null +++ b/base/missions/Minotaur.mis @@ -0,0 +1,1854 @@ +// MissionTypes = CTF + +//--- MISSION QUOTE BEGIN --- +//These humans are hard to catch off-guard. Rrrh, so be it! We’ll crush them the old-fashioned way -- brute force! +// -- from a Horde Maul tactical briefing +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[CTF]10 flag captures to win +//No vehicle stations +//Lightning strikes are hazardous +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + cdTrack = "4"; + powerCount = "0"; + CTF_timeLimit = "25"; + CTF_scoreLimit = "10"; + musicTrack = "badlands"; + + new MissionArea(MissionArea) { + area = "-536 -648 880 592"; + flightCeiling = "2000"; + flightCeilingRange = "50"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.600000 0.600000 0.600000 1.000000"; + ambient = "0.200000 0.200000 0.200000 1.000000"; + locked = "true"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + position = "-1024 -1024 0"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/baddet1"; + terrainFile = "Minotaur.ter"; + squareSize = "8"; + emptySquares = "150887 151143 154232 154488"; + locked = "true"; + hazeDistance = "250"; + visibleDistance = "1200"; + position = "-1024 -1024 0"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "45"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + locked = "true"; + rotation = "0 0 0 0"; + YDimOverSize = "0"; + scale = "1 1 1"; + GraphFile = "Minotaur.nav"; + conjoinBowlDev = "20"; + coverage = "0"; + XDimOverSize = "0"; + position = "0 0 0 1"; + }; + new Sky(Sky) { + position = "-1024 -1024 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "750"; + useSkyTextures = "1"; + SkySolidColor = "0.190000 0.235000 0.210000 0.000000"; + fogDistance = "600"; + fogColor = "0.200000 0.200000 0.200000 1.000000"; + fogVolume1 = "0 0 0"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "sky_badlands_cloudy.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 nan"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 148120713330651839000000000000000000000.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 nan"; + locked = "true"; + cloudSpeed0 = "0.002000 0.003000"; + }; + new SimGroup(RandomOrganics) { + + new SimGroup(Addition1BiodermPlant20) { + + new TSStatic() { + position = "-288.533 -431.44 164.261"; + rotation = "-0.231532 -0.342845 0.910412 57.8562"; + scale = "1.5 1.5 1.5"; + shapeName = "xorg20.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-502.5 -634.5 141.369"; + rotation = "0 0 1 155"; + scale = "1.5 1.5 1.5"; + shapeName = "xorg20.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-65.5 -129.5 195.881"; + rotation = "0 0 1 143"; + scale = "1.2 1.2 1.2"; + shapeName = "xorg20.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-202.5 -72.5 178.143"; + rotation = "1 0 0 0"; + scale = "1.4 1.4 1.4"; + shapeName = "xorg20.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-60.9 -345.3 130.908"; + rotation = "0 0 1 214"; + scale = "1.4 1.4 1.4"; + shapeName = "xorg20.dts"; + locked = "true"; + }; + new TSStatic() { + position = "30.5 -320.5 155.574"; + rotation = "0 0 1 187"; + scale = "1.2 1.2 1.2"; + shapeName = "xorg20.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-272.5 -218.5 175.229"; + rotation = "0 0 1 177"; + scale = "0.8 0.8 0.8"; + shapeName = "xorg20.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-271.5 -276.5 178.355"; + rotation = "0 0 1 110"; + scale = "1.4 1.4 1.4"; + shapeName = "xorg20.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-109.9 -381.3 119.846"; + rotation = "0 0 1 131"; + scale = "1.5 1.5 1.5"; + shapeName = "xorg20.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition2BiodermPlant21) { + + new TSStatic() { + position = "-203.9 -376.3 114.809"; + rotation = "0 0 1 64"; + scale = "1.4 1.4 1.4"; + shapeName = "xorg21.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-315.5 -613.5 112.504"; + rotation = "0 0 -1 38"; + scale = "1.4 1.4 1.4"; + shapeName = "xorg21.dts"; + locked = "true"; + }; + new TSStatic() { + position = "56.54 -160.408 133.985"; + rotation = "-0.53497 0.113711 0.837184 28.4922"; + scale = "1.6 1.6 1.6"; + shapeName = "xorg21.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-187.5 -558.5 125.285"; + rotation = "0 0 -1 35"; + scale = "1.1 1.1 1.1"; + shapeName = "xorg21.dts"; + locked = "true"; + }; + new TSStatic() { + position = "218.59 -106.552 162.667"; + rotation = "-0.183739 0.0475181 0.981826 208.495"; + scale = "1.2 1.2 1.2"; + shapeName = "xorg21.dts"; + locked = "true"; + }; + new TSStatic() { + position = "20.5 -406.5 170.395"; + rotation = "0 0 1 182"; + scale = "0.7 0.7 0.7"; + shapeName = "xorg21.dts"; + locked = "true"; + }; + new TSStatic() { + position = "279.4 -544.523 114.472"; + rotation = "-0.133371 -0.167671 -0.97678 104.308"; + scale = "1.3 1.3 1.3"; + shapeName = "xorg21.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-447.552 -546.522 180.789"; + rotation = "0.119677 0.0243485 0.992514 157.168"; + scale = "1 1 1"; + shapeName = "xorg21.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-233.9 -345.3 114.94"; + rotation = "0 0 -1 30"; + scale = "0.8 0.8 0.8"; + shapeName = "xorg21.dts"; + locked = "true"; + }; + new TSStatic() { + position = "173.44 -101.693 153.868"; + rotation = "0.0902262 0.0597194 -0.994129 67.3109"; + scale = "0.8 0.8 0.8"; + shapeName = "xorg21.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-218.516 -496.48 118.401"; + rotation = "0.0229954 -0.0649371 0.997624 141.086"; + scale = "0.8 0.8 0.8"; + shapeName = "xorg21.dts"; + locked = "true"; + }; + new TSStatic() { + position = "163.44 -409.508 134.436"; + rotation = "0.144977 -0.128265 0.981086 84.0871"; + scale = "1 1 1"; + shapeName = "xorg21.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition5BiodermPlant5) { + + new TSStatic() { + position = "-308.5 370.5 71.3633"; + rotation = "0 0 -1 24"; + scale = "1.3 1.3 1.3"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "200.5 348.5 124.172"; + rotation = "0 0 1 107"; + scale = "1.3 1.3 1.3"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "210.5 159.5 148.172"; + rotation = "0 0 -1 69"; + scale = "1.6 1.6 1.6"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-497.5 -253.5 188.269"; + rotation = "0 0 -1 18"; + scale = "0.7 0.7 0.7"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-136.9 -343.3 134.092"; + rotation = "0 0 1 54"; + scale = "0.8 0.8 0.8"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-16.5 -117.5 196.826"; + rotation = "0 0 1 192"; + scale = "1.6 1.6 1.6"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "365.5 165.5 182.314"; + rotation = "0 0 -1 108"; + scale = "1.4 1.4 1.4"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-235.5 -73.5 183.48"; + rotation = "0 0 1 9.00004"; + scale = "1.5 1.5 1.5"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-411.5 -14.5 131.27"; + rotation = "0 0 1 89"; + scale = "1.5 1.5 1.5"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-671.5 -44.5 90.4648"; + rotation = "0 0 1 109"; + scale = "0.7 0.7 0.7"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1287.5 -641.5 67.1816"; + rotation = "0 0 1 150"; + scale = "1.1 1.1 1.1"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-994.5 337.5 153.178"; + rotation = "0 0 -1 9.00004"; + scale = "1.4 1.4 1.4"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition1BiodermPlant5) { + + new TSStatic() { + position = "-492.5 -632.5 140.287"; + rotation = "0 0 1 190"; + scale = "1.1 1.1 1.1"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-315.5 -365.5 189.799"; + rotation = "0 0 1 80"; + scale = "1 1 1"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-202.533 -438.675 112.898"; + rotation = "0 0 1 123"; + scale = "1.2 1.2 1.2"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-214.5 -588.5 127.965"; + rotation = "0 0 1 174"; + scale = "0.8 0.8 0.8"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-179.5 -497.5 119.875"; + rotation = "0 0 1 52"; + scale = "1.3 1.3 1.3"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "211.5 -527.5 85.5723"; + rotation = "0 0 -1 111"; + scale = "1.4 1.4 1.4"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "227.5 -210.5 176.242"; + rotation = "0 0 1 221"; + scale = "1.1 1.1 1.1"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-23.79 -325.171 130.635"; + rotation = "0 0 1 108.719"; + scale = "1.3 1.3 1.3"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-249.5 -488.5 127.779"; + rotation = "0 0 -1 58"; + scale = "1.4 1.4 1.4"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-230.9 -322.3 115.635"; + rotation = "0 0 1 128"; + scale = "0.7 0.7 0.7"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "123.5 -66.5 140.393"; + rotation = "0 0 1 123"; + scale = "0.7 0.7 0.7"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "192.5 -357.5 129.436"; + rotation = "0 0 1 25"; + scale = "1.2 1.2 1.2"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-477.5 -399.5 201.33"; + rotation = "0 0 1 54"; + scale = "0.8 0.8 0.8"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "286.5 -388.5 148.145"; + rotation = "0 0 -1 108"; + scale = "1.4 1.4 1.4"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-256.5 -203.5 172.551"; + rotation = "0 0 1 109"; + scale = "1.6 1.6 1.6"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-50.9 -330.3 129.731"; + rotation = "0 0 1 132"; + scale = "1.4 1.4 1.4"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-111.89 -307.59 138.857"; + rotation = "0 0 -1 21"; + scale = "1.3 1.3 1.3"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-362.5 -286.5 166.23"; + rotation = "0 0 1 176"; + scale = "0.8 0.8 0.8"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-161.5 -106.5 166.646"; + rotation = "0 0 -1 77"; + scale = "1.2 1.2 1.2"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-255.5 -446.5 165.297"; + rotation = "0 0 -1 100"; + scale = "1.6 1.6 1.6"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + }; + }; + new InteriorInstance() { + position = "-120.224 -344.357 132.44"; + rotation = "0 0 1 179.518"; + scale = "1 1 1"; + interiorFile = "xbunk1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_Pulse_2"; + locked = "true"; + }; + new SimGroup(Teams) { + + new SimGroup(Team1) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-313.4 -412.343 180.871"; + rotation = "0 0 -1 37.2423"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "50"; + outdoorWeight = "50"; + locked = "true"; + }; + }; + new SimGroup(base0) { + providesPower = "1"; + + new InteriorInstance() { + position = "-276.868 -418.049 161.289"; + rotation = "0 0 1 102.559"; + scale = "1 1 1"; + interiorFile = "xbunk9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Turret(Team1TurretBaseLarge1) { + position = "-276.983 -418.102 171.102"; + rotation = "0 0 1 101.414"; + scale = "1 1 1"; + nameTag = "Defense"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + damageTimeMS = "442641"; + Target = "33"; + }; + new StaticShape(Team1StationInventory1) { + position = "-267.864 -425.861 163.3"; + rotation = "0 0 1 193.087"; + scale = "1 1 1"; + nameTag = "Bunker"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "34"; + }; + new StaticShape(Team1StationInventory2) { + position = "-265.227 -414.831 163.3"; + rotation = "0 0 1 10.8863"; + scale = "1 1 1"; + nameTag = "Bunker"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "35"; + }; + new Item(Team1flag1) { + position = "-195.896 -397.84 112.943"; + rotation = "0 0 1 90.0002"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + locked = "true"; + Target = "36"; + }; + new StaticShape() { + position = "-195.928 -397.829 112.941"; + rotation = "0 0 1 89.3814"; + scale = "1 1 1"; + dataBlock = "InteriorFlagStand"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + damageTimeMS = "226371"; + Target = "-1"; + }; + new ForceFieldBare() { + position = "-279.186 -426.668 163.189"; + rotation = "0 0 1 12.6051"; + scale = "0.590975 17.8124 6.11812"; + dataBlock = "defaultAllSlowFieldBare"; + locked = "true"; + Target = "37"; + }; + new Turret(Team1SentryTurret2) { + position = "-196.036 -405.017 112.9"; + rotation = "1 0 0 180"; + scale = "1 1 1"; + nameTag = "Sentry"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + lastProjectile = "4508"; + Target = "38"; + }; + new Turret() { + position = "-184.758 -400.271 145.37"; + rotation = "1 0 0 180.091"; + scale = "1 1 1"; + nameTag = "Upper"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + lastProjectile = "4418"; + Target = "39"; + }; + }; + new SimGroup(AIObjectives) { + + new SimGroup(Objectivesset) { + + new AIObjective(AIORepairObject) { + position = "-185.142 -400.303 146.42"; + rotation = "0 0 -1 90.1369"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the turret"; + targetObject = "Team1SentryTurret1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-185.142 -400.303 146.42"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3613"; + gameType = "all"; + isInvalid = "0"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-195.636 -405.217 113.315"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the turret"; + targetObject = "Team1SentryTurret2"; + targetClientId = "-1"; + targetObjectId = "3609"; + location = "-195.636 -405.217 113.315"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3613"; + gameType = "all"; + isInvalid = "0"; + issuingClientId = "-1"; + }; + }; + new AIObjective(AIODefendLocation) { + position = "-195.748 -398.082 113.862"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend our flag"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3604"; + location = "-195.748 -398.082 113.862"; + weightLevel1 = "4900"; + weightLevel2 = "2500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "MediumShieldSet"; + chat = "ChatSelfDefendFlag DefendBase"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + isInvalid = "0"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackPlayer) { + position = "-195.762 -398.077 113.862"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Kill the enemy flag carrier"; + mode = "FlagCarrier"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3604"; + location = "-195.762 -398.077 113.862"; + weightLevel1 = "4800"; + weightLevel2 = "3500"; + weightLevel3 = "2500"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "MediumShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + isInvalid = "0"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "-195.755 -398.098 113.862"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Return our flag"; + mode = "FlagDropped"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3604"; + location = "-195.755 -398.098 113.862"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "2000"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + isInvalid = "0"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "-60.0476 -295.245 135.25"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the enemy flag"; + mode = "FlagGrab"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3642"; + location = "-60.0476 -295.245 135.25"; + weightLevel1 = "4950"; + weightLevel2 = "3000"; + weightLevel3 = "2000"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "MediumShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + isInvalid = "0"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "-60.0476 -295.245 135.25"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the flag!"; + mode = "FlagCapture"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3642"; + location = "-60.0476 -295.245 135.25"; + weightLevel1 = "5000"; + weightLevel2 = "4000"; + weightLevel3 = "3000"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + isInvalid = "0"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "-60.0476 -295.245 135.25"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the dropped enemy flag"; + mode = "FlagDropped"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3642"; + location = "-60.0476 -295.245 135.25"; + weightLevel1 = "5001"; + weightLevel2 = "2100"; + weightLevel3 = "1000"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + isInvalid = "0"; + issuingClientId = "-1"; + }; + new SimGroup(Objectivesset) { + + new AIObjective(AIODeployEquipment) { + position = "-180.82 -378.108 71.0553"; + rotation = "0 0 1 90.5273"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy Inventory Station"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-180.82 -378.108 71.0553"; + weightLevel1 = "4851"; + weightLevel2 = "3000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "InventoryDeployable"; + buyEquipmentSet = "MediumInventorySet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3622"; + isInvalid = "0"; + issuingClientId = "-1"; + }; + new AIObjective(AIODeployEquipment) { + position = "-197.491 -379.272 81.6177"; + rotation = "0 0 1 30.3667"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-197.491 -379.272 81.6177"; + weightLevel1 = "4850"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3622"; + isInvalid = "0"; + issuingClientId = "-1"; + }; + new AIObjective(AIODeployEquipment) { + position = "-191.299 -403.046 98.8793"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-191.299 -403.046 98.8793"; + weightLevel1 = "4850"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3622"; + isInvalid = "0"; + issuingClientId = "-1"; + }; + new AIObjective(AIODeployEquipment) { + position = "-196.044 -404.78 146.256"; + rotation = "0 0 1 179.336"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-196.044 -404.78 146.256"; + weightLevel1 = "4850"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3622"; + isInvalid = "0"; + issuingClientId = "-1"; + }; + new AIObjective(AIODeployEquipment) { + position = "-175.708 -345.677 81.4567"; + rotation = "0 0 1 89.3814"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-175.708 -345.677 81.4567"; + weightLevel1 = "4850"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3622"; + isInvalid = "0"; + }; + }; + new AIObjective(AIORepairObject) { + position = "-265.032 -414.943 164.865"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-265.032 -414.943 164.865"; + weightLevel1 = "2500"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "0"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + }; + }; + }; + new SimGroup(Team2) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "96.96 -330.785 170.904"; + rotation = "0 0 1 182.383"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "50"; + outdoorWeight = "50"; + locked = "true"; + }; + }; + new SimGroup(base1) { + providesPower = "1"; + + new InteriorInstance() { + position = "65.43 -322.18 156.531"; + rotation = "0 0 -1 77.3493"; + scale = "1 1 1"; + interiorFile = "xbunk9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory1) { + position = "56.3092 -314.42 158.53"; + rotation = "0 0 1 15.4698"; + scale = "1 1 1"; + nameTag = "Bunker"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "40"; + }; + new StaticShape(Team2StationInventory2) { + position = "53.72 -325.307 158.53"; + rotation = "0 0 1 191.55"; + scale = "1 1 1"; + nameTag = "Bunker"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "41"; + }; + new ForceFieldBare() { + position = "63.1825 -330.806 158.456"; + rotation = "0 0 1 12.6051"; + scale = "0.590975 17.8124 6.11812"; + dataBlock = "defaultAllSlowFieldBare"; + locked = "true"; + Target = "42"; + }; + new Turret(Team2SentryTurret2) { + position = "-60.52 -301.763 134.4"; + rotation = "0 1 0 179.597"; + scale = "1 1 1"; + nameTag = "Sentry"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + Target = "43"; + }; + new StaticShape() { + position = "-60.58 -294.86 134.415"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "InteriorFlagStand"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "-1"; + }; + new Item(Team2flag1) { + position = "-60.585 -294.863 134.443"; + rotation = "0 0 1 90.0002"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + locked = "true"; + Target = "44"; + }; + new Turret(Team2TurretBaseLarge1) { + position = "64.93 -322.059 166.448"; + rotation = "0 0 -1 75.0575"; + scale = "1 1 1"; + nameTag = "Defense"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + damageTimeMS = "402636"; + Target = "45"; + }; + new Turret() { + position = "-48.424 -297 158.4"; + rotation = "1 0 0 179.909"; + scale = "1 1 1"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + Target = "46"; + }; + }; + new SimGroup(AIObjectives) { + + new AIObjective(AIOTouchObject) { + position = "-196.145 -398.078 113.262"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the enemy flag"; + mode = "FlagGrab"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3604"; + location = "-196.145 -398.078 113.262"; + weightLevel1 = "4950"; + weightLevel2 = "3000"; + weightLevel3 = "2000"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "MediumShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + isInvalid = "0"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "-195.731 -398.054 113.862"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the flag!"; + mode = "FlagCapture"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3604"; + location = "-195.731 -398.054 113.862"; + weightLevel1 = "5000"; + weightLevel2 = "4000"; + weightLevel3 = "3000"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + isInvalid = "0"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "-195.782 -398.085 113.862"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the dropped enemy flag"; + mode = "FlagDropped"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3604"; + location = "-195.782 -398.085 113.862"; + weightLevel1 = "5001"; + weightLevel2 = "2100"; + weightLevel3 = "1000"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + isInvalid = "0"; + issuingClientId = "-1"; + }; + new SimGroup(Objectivesset) { + + new AIObjective(AIORepairObject) { + position = "-48.6926 -296.853 158.72"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the turret"; + targetObject = "Team2SentryTurret1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-48.6926 -296.853 158.72"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3650"; + gameType = "all"; + isInvalid = "0"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-60.118 -301.963 134.72"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the turret"; + targetObject = "Team2SentryTurret2"; + targetClientId = "-1"; + targetObjectId = "3640"; + location = "-60.118 -301.963 134.72"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3650"; + gameType = "all"; + isInvalid = "0"; + issuingClientId = "-1"; + }; + }; + new AIObjective(AIODefendLocation) { + position = "-60.0476 -295.245 135.25"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend our flag"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3642"; + location = "-60.0476 -295.245 135.25"; + weightLevel1 = "4900"; + weightLevel2 = "2700"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "MediumShieldSet"; + chat = "ChatSelfDefendFlag DefendBase"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + isInvalid = "0"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackPlayer) { + position = "-60.0476 -295.245 135.25"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Kill the enemy flag carrier"; + mode = "FlagCarrier"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3642"; + location = "-60.0476 -295.245 135.25"; + weightLevel1 = "4800"; + weightLevel2 = "3500"; + weightLevel3 = "2500"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "MediumShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + isInvalid = "0"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "-60.0476 -295.245 135.25"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Return our flag"; + mode = "FlagDropped"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3642"; + location = "-60.0476 -295.245 135.25"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "2000"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + isInvalid = "0"; + issuingClientId = "-1"; + }; + new SimGroup(Objectivesset) { + + new AIObjective(AIODeployEquipment) { + position = "-90.6133 -307.127 111.441"; + rotation = "0.00199991 -0.00505712 0.999985 226.318"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy Inventory Station"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-90.6133 -307.127 111.441"; + weightLevel1 = "4951"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "InventoryDeployable"; + buyEquipmentSet = "MediumInventorySet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3656"; + isInvalid = "0"; + issuingClientId = "-1"; + }; + new AIObjective(AIODeployEquipment) { + position = "-95.6809 -287.182 111.292"; + rotation = "7.48526e-06 -3.45767e-06 -1 46.9826"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-95.6809 -287.182 111.292"; + weightLevel1 = "4950"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3656"; + isInvalid = "0"; + issuingClientId = "-1"; + }; + new AIObjective(AIODeployEquipment) { + position = "-52.7295 -292.894 110.984"; + rotation = "0 0 1 89.3814"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-52.7295 -292.894 110.984"; + weightLevel1 = "4950"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3656"; + isInvalid = "0"; + issuingClientId = "-1"; + }; + new AIObjective(AIODeployEquipment) { + position = "-59.6 -300.12 159.346"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-59.6 -300.12 159.346"; + weightLevel1 = "4950"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3656"; + isInvalid = "0"; + issuingClientId = "-1"; + }; + new AIObjective(AIODeployEquipment) { + position = "-115.603 -297.079 122.983"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-115.603 -297.079 122.983"; + weightLevel1 = "4950"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3656"; + isInvalid = "0"; + }; + }; + new AIObjective(AIORepairObject) { + position = "56.286 -314.39 159.913"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "56.286 -314.39 159.913"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "0"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + }; + }; + }; + new SimGroup(team0) { + + new Item() { + position = "-44.9582 -296.699 150.495"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-181.706 -399.805 137.76"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + }; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "-177.318 -349.64 169.049"; + rotation = "0 0 1 202.254"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-88.48 -244.583 171.244"; + rotation = "0 0 1 132.353"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-190.228 -398.372 123.246"; + rotation = "-0.212287 -0.394 0.894258 231.452"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-65.2935 -344.244 106.801"; + rotation = "0.501182 0.197279 -0.842554 50.0823"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-56.3801 -301.524 136.736"; + rotation = "0 0 -1 46.4096"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Miskellany) { + + new Item() { + position = "-182.646 -350.256 71.742"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-170.114 -279.918 89.7787"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + }; + new SimGroup(Ambience) { + + new TSStatic() { + position = "-192.149 -406.215 97.93"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable4l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-191.283 -406.197 97.93"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable4l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-185.059 -405.772 97.94"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable4l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-185.888 -405.818 97.94"; + rotation = "0 0 1 34.3775"; + scale = "1 1 1"; + shapeName = "stackable4l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-186.075 -404.85 98.22"; + rotation = "-0.749872 0.466646 0.46897 105.591"; + scale = "1 1 1"; + shapeName = "stackable4l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-185.218 -395.064 97.94"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable2m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-196.071 -376.083 80.44"; + rotation = "0 0 1 29.2208"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-181.197 -376.661 80.44"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-179.302 -349.715 80.44"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable2l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-188.694 -341.84 80.4381"; + rotation = "0 0 -1 30.9397"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-186.832 -342.888 81.4666"; + rotation = "-0.270226 -0.496461 0.824927 53.6613"; + scale = "0.99 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-116.836 -344.537 92.2068"; + rotation = "0.258044 -0.253136 -0.932382 95.1051"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-49.794 -293.484 110.44"; + rotation = "0 0 1 85.9437"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-50.383 -302.596 110.44"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable5l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-116.063 -290.914 111.989"; + rotation = "-0.551405 -0.385083 0.740043 119.688"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-114.213 -291.898 110.44"; + rotation = "0 0 1 60.7335"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + new AudioEmitter() { + position = "-201.38 -415.042 156.501"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/moaningwind1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new TSStatic() { + position = "-67.819 -311.53 92.6281"; + rotation = "0.063701 -0.978634 0.195492 36.8317"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-67.377 -305.708 91.3731"; + rotation = "0 0 1 44.1177"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-145.924 -301.798 88.44"; + rotation = "0 0 -1 33.8045"; + scale = "1 1 1"; + shapeName = "stackable5l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-170.54 -293.325 88.44"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + shapeName = "stackable5l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-170.466 -289.313 88.44"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + shapeName = "stackable5l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-78.867 -294.067 110.44"; + rotation = "0 0 -1 61.8794"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-93.441 -306.525 110.44"; + rotation = "0 0 -1 90.5273"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-93.357 -301.557 110.44"; + rotation = "0 0 -1 90.5273"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-93.414 -306.507 112.44"; + rotation = "0 0 -1 90.5273"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-200.231 -392.278 114.714"; + rotation = "3.46431e-09 -1.05458e-08 1 89.9544"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + locked = "true"; + }; + }; + new TSStatic() { + position = "-63.0197 -347.938 96.44"; + rotation = "0 0 -1 21.7724"; + scale = "3 3 3"; + shapeName = "stackable5m.dts"; + locked = "true"; + }; + new Lightning() { + position = "-100.876 -342.565 174.976"; + rotation = "1 0 0 0"; + scale = "982.77 682.62 300"; + dataBlock = "DefaultStorm"; + strikesPerMinute = "6"; + strikeWidth = "2.5"; + chanceToHitTarget = "0.95"; + strikeRadius = "20"; + boltStartRadius = "20"; + color = "1.000000 1.000000 1.000000 1.000000"; + fadeColor = "0.300000 0.300000 1.000000 1.000000"; + useFog = "1"; + locked = "true"; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/MyrkWood.mis b/base/missions/MyrkWood.mis new file mode 100644 index 0000000..6349a76 --- /dev/null +++ b/base/missions/MyrkWood.mis @@ -0,0 +1,2201 @@ +// DisplayName = Myrkwood +// MissionTypes = Hunters DM Rabbit + +//--- MISSION QUOTE BEGIN --- +//He dropped to his knees, and death was a mist about him. +// -- Homer, The Iliad +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[Hunters]Nexus is inside a small structure near center of map +//Visibility severely limited +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + cdTrack = "2"; + powerCount = "0"; + musicTrack = "lush"; + + new MissionArea(MissionArea) { + area = "-528 -184 464 368"; + flightCeiling = "300"; + flightCeilingRange = "20"; + locked = "true"; + }; + new Sky(Sky) { + position = "680 824 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "150"; + useSkyTextures = "1"; + SkySolidColor = "0.000000 0.000000 0.000000 0.000000"; + fogDistance = "10"; + fogColor = "0.150000 0.150000 0.150000 1.000000"; + fogVolume1 = "100 0 450"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "sky_lush_starrynight.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 0.000000"; + locked = "true"; + cloudSpeed0 = "0.000000 0.000000"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.600000 0.600000 0.600000 1.000000"; + ambient = "0.400000 0.400000 0.400000 1.000000"; + position = "680 824 0"; + locked = "true"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + terrainFile = "MyrkWood.ter"; + squareSize = "8"; + position = "-1024 -1024 0"; + locked = "true"; + detailTexture = "details/lushdet2"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "45"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + YDimOverSize = "0"; + conjoinBowlDev = "20"; + position = "0 0 0 1"; + GraphFile = "Myrkwood.nav"; + coverage = "0"; + locked = "true"; + rotation = "0 0 0 0"; + XDimOverSize = "0"; + scale = "1 1 1"; + }; + new WaterBlock(Water) { + position = "-688 -208 0"; + rotation = "1 0 0 0"; + scale = "800 160 67"; + liquidType = "RiverWater"; + density = "1"; + viscosity = "5"; + waveMagnitude = "1"; + surfaceTexture = "LiquidTiles/AlgaeWater"; + surfaceOpacity = "0.8"; + envMapTexture = "lush/skies/lush_day_emap"; + envMapIntensity = "0.4"; + removeWetEdges = "1"; + locked = "true"; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "-331.208 9.361 95.4242"; + rotation = "0.0340704 -0.159226 0.986654 156.158"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-321.814 -126.555 86.5132"; + rotation = "1 0 0 9.16737"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + + new SimGroup(Team1) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-314 -7.5 103.543"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + }; + new SimGroup(team0) { + providesPower = "1"; + + new InteriorInstance() { + position = "-452.496 91.6867 75.5001"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bbunk5.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-320.397 -7.5 75.6299"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bbunk7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-142.67 4.7761 81.6749"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bbunk8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-328.273 124.019 77.4224"; + rotation = "0 0 1 121.467"; + scale = "1 1 1"; + interiorFile = "bbunk9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-162.589 113.516 79.2286"; + rotation = "0 0 1 28.6479"; + scale = "1 1 1"; + interiorFile = "bbunk5.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-314.529 -7.57016 77.6354"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "NexusBase"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + missionTypesList = "Hunters"; + }; + new Trigger(NexusTrigger) { + position = "-344.667 20.5914 75.9335"; + rotation = "1 0 0 0"; + scale = "60 60 20"; + dataBlock = "gameTrigger"; + polyhedron = "0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000 -0.0000000 -1.0000000 -0.0000000 -0.0000000 -0.0000000 1.0000000"; + locked = "true"; + missionTypesList = "Hunters"; + }; + new Item() { + position = "-314.529 -7.57016 76.1623"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Nexus"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + flashThreadDir = "1"; + locked = "true"; + missionTypesList = "Hunters"; + }; + new StaticShape() { + position = "-314.529 -7.57016 84.1054"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "NexusCap"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + missionTypesList = "Hunters"; + }; + new WayPoint() { + position = "-314 -7.5 78.7254"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Nexus"; + team = "0"; + locked = "true"; + missionTypesList = "Hunters"; + }; + new WayPoint() { + position = "-314 -7.5 78.7254"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Mission Center"; + team = "0"; + locked = "true"; + missionTypesList = "DM"; + }; + new Item(Teamflag1) { + position = "-314 -7.5 77.6741"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + carrier = "0"; + locked = "true"; + missionTypesList = "Rabbit"; + }; + new StaticShape() { + position = "-142.591 4.5794 83.167"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "East bunker"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(TeamStationInventory1) { + position = "-447.764 86.9858 77.4992"; + rotation = "-0.00499997 -0.00211865 0.999985 134.073"; + scale = "1 1 1"; + nameTag = "NW Bunker"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(TeamStationInventory2) { + position = "-457.151 96.345 77.4924"; + rotation = "0 0 -1 41.8259"; + scale = "1 1 1"; + nameTag = "NW Bunker"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(TeamStationInventory3) { + position = "-321.479 119.418 79.421"; + rotation = "0 0 -1 58.4417"; + scale = "1 1 1"; + nameTag = "North bunker"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new TSStatic() { + position = "-346.432 124.13 75.6222"; + rotation = "0 0 1 34.3775"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new StaticShape(TeamStationInventory4) { + position = "-165.174 108.532 81.2265"; + rotation = "0 0 1 208.739"; + scale = "1 1 1"; + nameTag = "NE Bunker"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(TeamStationInventory5) { + position = "-159.989 118.456 81.226"; + rotation = "0 0 1 28.6479"; + scale = "1 1 1"; + nameTag = "NE Bunker"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + }; + new SimGroup(Organics) { + + new TSStatic() { + position = "-415.638 22.0933 76.3932"; + rotation = "0 0 1 41.2529"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-447.935 -73.6998 74.2662"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-433.863 -80.7691 69.3847"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-418.544 -62.1353 72.5431"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-446.094 -92.3373 69.2482"; + rotation = "0 0 1 46.9825"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-333.383 -50.6253 73.2547"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + // new TSStatic() { + // position = "-267.332 -83.3934 72.1227"; + // rotation = "0 0 -1 52.8946"; + // scale = "2 2 2"; + // shapeName = "borg16.dts"; + // locked = "true"; + // }; + new TSStatic() { + position = "-345.094 83.1596 76.3744"; + rotation = "0 0 1 41.2529"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-268.473 25.952 77.4621"; + rotation = "0 0 -1 17.1887"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-132.316 96.881 75.8713"; + rotation = "0 0 1 82.5059"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-101.326 -76.1011 69.8174"; + rotation = "0 0 -1 4.01071"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-215.32 -8.879 76.3941"; + rotation = "0 0 -1 4.01071"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-262.677 107.028 79.4741"; + rotation = "0 0 -1 55.5769"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-440.825 57.2678 74.3554"; + rotation = "0 0 -1 4.01071"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-491.153 130.239 76.7565"; + rotation = "0 0 -1 28.0749"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-326.795 12.2121 74.4145"; + rotation = "0 0 -1 65.3172"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-469.064 28.7926 75.5744"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-436.634 106.421 66.7278"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-289.844 120.453 74.7944"; + rotation = "0 0 1 85.3707"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-178.425 68.0898 78.8081"; + rotation = "0 0 1 4.58367"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-166.313 146.862 79.317"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-218.105 -84.5642 69.5514"; + rotation = "0 0 1 63.0253"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-252.637 62.4072 77.5041"; + rotation = "0 0 -1 1.71915"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-273.299 -8.0521 75.3508"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-294.797 -54.4529 73.0346"; + rotation = "0 0 -1 51.5662"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-125.714 25.7259 80.7404"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-134.872 -39.7799 71.6557"; + rotation = "0 0 -1 84.2248"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-333.431 150.851 75.1151"; + rotation = "0 0 1 6.8755"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-396.163 161.873 89.0533"; + rotation = "0 0 -1 99.1217"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-465.785 108.193 72.0249"; + rotation = "0 0 -1 21.1995"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-276.551 77.2367 76.4214"; + rotation = "0 0 1 5.72956"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-466.434 -26.5853 75.3814"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-297.787 48.9482 75.9243"; + rotation = "0 0 -1 33.8045"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-360.938 -78.2364 69.3066"; + rotation = "0 0 1 2.29172"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-241.275 -52.1734 73.3893"; + rotation = "0 0 1 61.3065"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-164.126 4.35196 79.3947"; + rotation = "0 0 1 6.8755"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-212.572 72.477 78.7461"; + rotation = "0 0 1 192.123"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-362.951 18.2381 75.8574"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-400.461 85.7012 77.1569"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-190.337 17.9785 78.5922"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-281.603 -31.5809 76.488"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-184.326 -59.4508 70.7196"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-315.347 88.8928 76.034"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-328.766 -97.4357 65.5958"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-394.12 -17.8722 74.6047"; + rotation = "0 0 1 42.3989"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-184.392 -22.4439 76.4233"; + rotation = "0 0 1 105.997"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-391.627 13.1573 75.0138"; + rotation = "0 0 -1 4.01071"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-343.397 -18.0407 76.0384"; + rotation = "0 0 -1 4.01071"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-389.399 117.602 90.729"; + rotation = "0 0 1 33.2315"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-235.691 32.9008 79.1791"; + rotation = "0 0 -1 4.01071"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-257.633 48.185 77.8222"; + rotation = "0 0 -1 46.4096"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-393.203 44.9129 74.6529"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-322.787 60.0202 75.5754"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-232.049 42.1379 79.7314"; + rotation = "0 0 1 25.7831"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-174.503 99.857 76.9572"; + rotation = "0 0 -1 4.01071"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-161.821 -33.4263 74.012"; + rotation = "0 0 -1 18.9076"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-401.234 235.705 93.2531"; + rotation = "0 0 -1 16.0428"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-241.778 290.45 106.952"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-101.538 159.682 105.955"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-64.4174 1.7842 126.145"; + rotation = "0 0 1 127.952"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "9.0666 110.759 101.996"; + rotation = "0 0 -1 9.74027"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "18.4847 331.652 92.2696"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-157.734 322.267 127.358"; + rotation = "0 0 -1 56.1499"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-233.165 153.747 111.236"; + rotation = "0 0 -1 8.02137"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-521.834 71.9963 100.255"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-595.632 -27.1304 121.997"; + rotation = "0 0 -1 116.883"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-533.716 -75.7519 116.151"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-657.594 32.0365 118.283"; + rotation = "0 0 -1 116.883"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-590.695 145.688 114.328"; + rotation = "0 0 -1 59.0147"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-534.861 246.949 136.055"; + rotation = "0 0 1 202.437"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-587.709 204.911 120.095"; + rotation = "0 0 1 1.71915"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-498.558 311.28 115.858"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-369.932 418.912 124.589"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-286.46 249.985 96.268"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-153.852 -148.474 69.0581"; + rotation = "0 0 -1 88.2355"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-90.6857 -203.101 72.7709"; + rotation = "0 0 1 233.376"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "37.576 -233.532 76.4848"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-13.3515 -194.084 75.0712"; + rotation = "0 0 1 217.906"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-46.7129 -279.078 72.5772"; + rotation = "0 0 -1 28.6479"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-390.863 -241.458 77.5906"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-473.717 -292.328 77.3098"; + rotation = "0 0 -1 105.424"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-557.401 -216.042 73.5052"; + rotation = "0 0 -1 13.178"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-658.983 -186.558 68.0028"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-548.984 4.5035 106.197"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-620.039 77.4808 109.31"; + rotation = "0 0 -1 88.2355"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-571.159 54.5744 97.1391"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-545.779 188.17 128.709"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-355.715 220.98 84.9762"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-232.516 191.294 114.271"; + rotation = "0 0 1 236.814"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-116.208 268.77 116.062"; + rotation = "0 0 -1 75.0575"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-50.054 143.355 103.043"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-7.2864 -18.4824 119.346"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-48.3023 -221.269 74.4921"; + rotation = "0 0 -1 68.182"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-229.935 -206.093 76.9745"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-279.617 -283.113 81.228"; + rotation = "0 0 -1 81.36"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-313.166 -182.639 74.8101"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-340.427 -286.923 80.6801"; + rotation = "0 0 -1 65.3172"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-448.353 -269.762 78.624"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-469.683 -202.709 75.3412"; + rotation = "0 0 1 97.9758"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-654.719 -82.4381 97.7275"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-580.778 -74.4551 111.447"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-205.946 -21.1204 76.4421"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new SimGroup(plants) { + }; + new TSStatic() { + position = "-241 -68.4743 74.1749"; + rotation = "0 0 -1 97.4028"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-354.118 66.2093 76.5801"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-429.181 79.9388 76.506"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-398.771 -75.7218 71.6629"; + rotation = "0 0 1 232.23"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-162.587 -209.1 75.7355"; + rotation = "0 0 -1 52.1391"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-108.706 -172.448 73.1982"; + rotation = "0 0 -1 52.1391"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-56.7124 -167.401 71.3088"; + rotation = "0 0 -1 100.268"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-65.686 -29.5787 123.276"; + rotation = "0 0 -1 52.1391"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-3.5302 40.3737 105.209"; + rotation = "0 0 -1 52.1391"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-192.319 96.715 78.2198"; + rotation = "0 0 -1 52.1391"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-299.978 17.6454 75.1239"; + rotation = "0 0 -1 52.1391"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-343.237 108.208 77.4368"; + rotation = "0 0 -1 116.31"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-478.404 182.929 105.464"; + rotation = "0 0 -1 52.1391"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-272.454 166.878 104.361"; + rotation = "0 0 1 201.864"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-442.926 22.3572 77.7418"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-362.955 -5.7265 76.3938"; + rotation = "0 0 -1 52.1391"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-352.212 4.745 76.9591"; + rotation = "0 0 -1 52.1391"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-283.772 100.292 78.2563"; + rotation = "0 0 -1 38.9611"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-301.626 93.7936 78.688"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-204.083 44.0345 80.8086"; + rotation = "0 0 -1 38.3882"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-159.94 199.709 103.858"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-172.87 182.123 106.093"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-67.0733 41.2139 125.265"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-76.9543 68.4643 118.259"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-236.623 -163.727 70.65"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-198.879 114.477 79.8738"; + rotation = "-0.0762667 -0.298685 0.951299 30.0497"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-360.249 -197.182 78.9132"; + rotation = "0 0 -1 33.8045"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-358.513 -36.881 75.74"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-366.947 -56.2186 72.5292"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-321.881 35.7059 75.3399"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-336.358 37.8844 76.1395"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-246.312 50.6312 80.1539"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-176.17 45.8146 82.4821"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-219.261 -40.4285 75.5622"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-190.597 -188.859 75.0842"; + rotation = "0 0 -1 44.1177"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-407.067 -164.187 69.0597"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-0.2455 -89.633 123.377"; + rotation = "0 0 -1 82.5059"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-440.571 75.2409 74.6431"; + rotation = "1 0 0 0"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-420.185 90.4829 75.0559"; + rotation = "0 0 1 41.2529"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-165.873 94.9849 78.6566"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + }; + new SimGroup(AudioCreatures) { + + new AudioEmitter(Frog1) { + position = "-312.361 -130.772 70.7249"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/frog1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.5"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter(Frog2) { + position = "-440.974 -137.948 72.9539"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/frog2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.5"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter(Frog3) { + position = "-200.974 -126.948 72.9539"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/frog1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.5"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter(Frog4) { + position = "-102.174 -123.548 72.9539"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/frog2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.5"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter(Frog5) { + position = "33.5644 -149.685 71.8847"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/frog1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.5"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter(Frog6) { + position = "-554.211 -152.37 78.9209"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/frog2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.5"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter(Bird1) { + position = "-123.276 28.4301 116.558"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "10"; + maxDistance = "640"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "5000"; + maxLoopGap = "15000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter(Crickets) { + position = "-254.789 -4.9169 78.8753"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/crickets.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.5"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter(Bird2) { + position = "-288.977 118.926 110.287"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "10"; + maxDistance = "640"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "5000"; + maxLoopGap = "15000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter(Bird3) { + position = "-464.766 -25.1102 114.665"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "10"; + maxDistance = "640"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "5000"; + maxLoopGap = "15000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter(Eerie_Fog) { + position = "-313.707 -7.9654 88.1657"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/fog.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "300"; + maxDistance = "19200"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter(Bird4) { + position = "-464.866 108.756 106.983"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "10"; + maxDistance = "640"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "5000"; + maxLoopGap = "15000"; + type = "EffectAudioType"; + locked = "true"; + }; + }; + new SimGroup(AudioWater) { + + new AudioEmitter() { + position = "-505.098 -144.393 75.16"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.8"; + isLooping = "1"; + is3D = "1"; + minDistance = "10"; + maxDistance = "640"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "2000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-443.713 -140.62 75.3064"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.8"; + isLooping = "1"; + is3D = "1"; + minDistance = "10"; + maxDistance = "640"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "2000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-356.271 -140.956 74.3973"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.8"; + isLooping = "1"; + is3D = "1"; + minDistance = "10"; + maxDistance = "640"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "2000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-269.508 -127.461 79.189"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.8"; + isLooping = "1"; + is3D = "1"; + minDistance = "10"; + maxDistance = "640"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "2000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-181.594 -114.427 79.3438"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.8"; + isLooping = "1"; + is3D = "1"; + minDistance = "10"; + maxDistance = "640"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "2000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-96.0414 -118.626 82.6969"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.8"; + isLooping = "1"; + is3D = "1"; + minDistance = "10"; + maxDistance = "640"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "2000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-41.5698 -136.325 76.8384"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.8"; + isLooping = "1"; + is3D = "1"; + minDistance = "10"; + maxDistance = "640"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "2000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "39.9091 -142.126 76.7012"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.8"; + isLooping = "1"; + is3D = "1"; + minDistance = "10"; + maxDistance = "640"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "2000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AIObjective(AIODefendLocation) { + position = "-314 -7.5 79.3174"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend our flag"; + targetObject = "Teamflag1"; + targetClientId = "-1"; + targetObjectId = "5516"; + location = "-314 -7.5 79.3174"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + chat = "ChatSelfDefendFlag DefendBase"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "Rabbit"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackPlayer) { + position = "-314 -7.5 79.3174"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Kill the enemy flag carrier"; + mode = "FlagCarrier"; + targetObject = "Teamflag1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-1 -4 0"; + weightLevel1 = "4800"; + weightLevel2 = "3000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergySniper"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "Rabbit"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "-314 -7.5 79.3174"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Return our flag"; + mode = "FlagDropped"; + targetObject = "Teamflag1"; + targetClientId = "-1"; + targetObjectId = "5516"; + location = "-314 -7.5 79.3174"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "Rabbit"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-447.775 86.9745 79.0649"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "TeamStationInventory1"; + targetClientId = "-1"; + targetObjectId = "5518"; + location = "-447.775 86.9745 79.0649"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-447.775 86.9745 79.0649"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "TeamStationInventory1"; + targetClientId = "-1"; + targetObjectId = "5518"; + location = "-447.775 86.9745 79.0649"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-457.151 96.345 79.0582"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "TeamStationInventory2"; + targetClientId = "-1"; + targetObjectId = "5520"; + location = "-457.151 96.345 79.0582"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-457.151 96.345 79.0582"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "TeamStationInventory2"; + targetClientId = "-1"; + targetObjectId = "5520"; + location = "-457.151 96.345 79.0582"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-321.479 119.418 80.9868"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "TeamStationInventory3"; + targetClientId = "-1"; + targetObjectId = "5522"; + location = "-321.479 119.418 80.9868"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-321.479 119.418 80.9868"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "TeamStationInventory3"; + targetClientId = "-1"; + targetObjectId = "5522"; + location = "-321.479 119.418 80.9868"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-165.174 108.532 82.7923"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "TeamStationInventory4"; + targetClientId = "-1"; + targetObjectId = "5525"; + location = "-165.174 108.532 82.7923"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-165.174 108.532 82.7923"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "TeamStationInventory4"; + targetClientId = "-1"; + targetObjectId = "5525"; + location = "-165.174 108.532 82.7923"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-159.989 118.456 82.7918"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "TeamStationInventory5"; + targetClientId = "-1"; + targetObjectId = "5527"; + location = "-159.989 118.456 82.7918"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-159.989 118.456 82.7918"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "TeamStationInventory5"; + targetClientId = "-1"; + targetObjectId = "5527"; + location = "-159.989 118.456 82.7918"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-188.172 43.5596 50.1089"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "TeamgeneratorLarge1"; + targetClientId = "-1"; + targetObjectId = "5529"; + location = "-188.172 43.5596 50.1089"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-188.172 43.5596 50.1089"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "TeamgeneratorLarge1"; + targetClientId = "-1"; + targetObjectId = "5529"; + location = "-188.172 43.5596 50.1089"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "-188.172 43.5596 50.1089"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "TeamgeneratorLarge1"; + targetClientId = "-1"; + targetObjectId = "5529"; + location = "-188.172 43.5596 50.1089"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Oasis.mis b/base/missions/Oasis.mis new file mode 100644 index 0000000..7076e3c --- /dev/null +++ b/base/missions/Oasis.mis @@ -0,0 +1,928 @@ +// MissionTypes = DM + +//--- MISSION QUOTE BEGIN --- +//As a lion fights a boar in wild combat over a little spring of water, both wanting to drink there, so did these tribes battle in their pride. +// -- from The Book of Phoenix, 3870 CE +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//Inventory stations available in all towers +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + DM_scoreLimit = "25"; + musicTrack = "desert"; + powerCount = "0"; + cdTrack = "6"; + DM_timeLimit = "25"; + + new MissionArea(MissionArea) { + area = "-400 -360 752 752"; + flightCeiling = "2000"; + flightCeilingRange = "50"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.600000 0.600000 0.600000 1.000000"; + ambient = "0.200000 0.200000 0.200000 1.000000"; + locked = "true"; + scale = "1 1 1"; + position = "-1680 -1880 0"; + rotation = "1 0 0 0"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/desertdet1"; + terrainFile = "Oasis.ter"; + squareSize = "8"; + emptySquares = "359010"; + hazeDistance = "250"; + locked = "true"; + position = "-1024 -1024 0"; + visibleDistance = "1200"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "45"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + XDimOverSize = "0"; + locked = "true"; + scale = "1 1 1"; + GraphFile = "Oasis.nav"; + YDimOverSize = "0"; + conjoinBowlDev = "20"; + position = "0 0 0 1"; + coverage = "0"; + rotation = "0 0 0 0"; + }; + new Sky(Sky) { + position = "-1680 -1880 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "900"; + useSkyTextures = "1"; + renderBottomTexture = "0"; + SkySolidColor = "0.390000 0.390000 0.390000 0.000000"; + fogDistance = "600"; + fogColor = "0.500000 0.500000 0.500000 1.000000"; + fogVolume1 = "120 0 100"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "Lush_l4.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 0.000000"; + locked = "true"; + cloudSpeed0 = "0.000000 0.000000"; + }; + new WaterBlock() { + position = "-128 -96 90"; + rotation = "1 0 0 0"; + scale = "128 96 12"; + liquidType = "Water"; + density = "1"; + viscosity = "5"; + waveMagnitude = "0.2"; + surfaceTexture = "LiquidTiles/GreenWater"; + surfaceOpacity = "0.8"; + envMapTexture = "lush/skies/lushcloud1"; + envMapIntensity = "0.7"; + removeWetEdges = "1"; + locked = "true"; + }; + new SimGroup(environment) { + powerCount = "0"; + + new TSStatic() { + position = "-99.589 -115.88 125.815"; + rotation = "0 0 -1 55.0039"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-55.6873 14.5 124.435"; + rotation = "0 0 1 123.186"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-103.306 -39.641 104.528"; + rotation = "0 0 -1 12.605"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-122.789 -30.4939 104.096"; + rotation = "0 0 1 63.5983"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-46.068 -90.5109 114.357"; + rotation = "0 0 -1 32.0856"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-97.266 -33.5638 105.025"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg33.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-117.452 -39.1965 105.735"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg34.dts"; + locked = "true"; + }; + }; + new SimGroup(ObserverDropPoints) { + powerCount = "0"; + + new Camera() { + position = "-52.1118 -103.14 180.539"; + rotation = "0.363528 0.0766801 -0.928422 25.6001"; + scale = "1 1 0.930191"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-186.237 59.4353 205.297"; + rotation = "0.15534 -0.287211 0.945188 125.847"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-178.244 -55.5781 115.216"; + rotation = "0 0 1 88.8084"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-43.2597 -178.425 205.963"; + rotation = "0.558326 0.148527 -0.816218 36.1036"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + powerCount = "0"; + + new SimGroup(Team0) { + powerCount = "0"; + + new SimGroup(Base0) { + powerCount = "3"; + + new StaticShape() { + position = "-202.863 -44.7028 122.075"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "West Stronghold"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "33"; + Trigger = "3361"; + team = "0"; + }; + new StaticShape() { + position = "-207.1 -40.064 97.59"; + rotation = "0 0 -1 48.1284"; + scale = "1 1 1"; + nameTag = "West Stronghold"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "34"; + Trigger = "3363"; + team = "0"; + }; + new InteriorInstance() { + position = "-202.509 -44.8018 107.6"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pbunk1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_3"; + locked = "true"; + team = "0"; + }; + new InteriorInstance() { + position = "-102.796 21.1962 139.043"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bbunk2.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + team = "0"; + }; + new InteriorInstance() { + position = "-58.1054 -111.149 132.645"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "bbunk1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + team = "0"; + }; + new Item() { + position = "-209.9 -44.7356 105.823"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + team = "0"; + }; + new StaticShape() { + position = "-208.747 -50.5824 97.59"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "West Stronghold"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "35"; + team = "0"; + }; + new StaticShape() { + position = "-70.6533 -106.666 126.66"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "South Stronghold"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "36"; + Trigger = "3370"; + team = "0"; + }; + new StaticShape() { + position = "-101.038 26.3027 142.92"; + rotation = "0 0 1 90.5273"; + scale = "1 1 1"; + nameTag = "North Stronghold"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "37"; + team = "0"; + }; + new StaticShape() { + position = "-115.116 27.4632 132.54"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "North Stronghold"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "38"; + Trigger = "3373"; + team = "0"; + }; + new StaticShape() { + position = "-90.4074 27.4432 132.54"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "North Stronghold"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "39"; + Trigger = "3375"; + team = "0"; + }; + new StaticShape() { + position = "-60.196 -115.78 126.66"; + rotation = "0 0 1 180.091"; + scale = "1 1 1"; + nameTag = "South Stronghold"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "40"; + Trigger = "3377"; + team = "0"; + }; + new StaticShape() { + position = "-64.0443 -106.333 135.48"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "South Stronghold"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "41"; + team = "0"; + }; + }; + }; + new SimGroup(team1) { + powerCount = "0"; + + new SimGroup(spawnspheres) { + powerCount = "0"; + + new SpawnSphere() { + position = "-70.435 -46.3061 116.136"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "180"; + sphereWeight = "100"; + indoorWeight = "10"; + outdoorWeight = "90"; + locked = "true"; + }; + }; + new WayPoint() { + position = "-112 -96 110.863"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Oasis"; + team = "0"; + locked = "true"; + }; + }; + }; + new SimGroup(RandomOrganics) { + powerCount = "0"; + + new SimGroup(Addition4BEPlant1) { + powerCount = "0"; + + new TSStatic() { + position = "-105 -82 103.342"; + rotation = "0.462131 -0.253345 0.849854 46.3684"; + scale = "1.1 1.1 1.1"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-25 -2 121.987"; + rotation = "-0.0144114 0.0336269 0.999331 141.024"; + scale = "0.5 0.5 0.5"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-105 -106 123.459"; + rotation = "-0.108457 0.315024 0.942866 200.771"; + scale = "1.4 1.4 1.4"; + shapeName = "borg1.dts"; + locked = "true"; + }; + }; + new TSStatic() { + position = "-140.51 16.8311 131.494"; + rotation = "0 0 1 23.4913"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-49.5967 -116.738 125.795"; + rotation = "0 1 0 7.44851"; + scale = "1 1 1"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-94.8663 35.5787 131.797"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new SimGroup(Addition5PhoenixPlant1) { + powerCount = "0"; + + new TSStatic() { + position = "-113 46 132.148"; + rotation = "0 0 1 129"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-265 134 115.195"; + rotation = "0 0 1 149"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "63 118 180.078"; + rotation = "0 0 -1 109"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "87 70 167.875"; + rotation = "0 0 -1 69.0002"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-201 -98 127.793"; + rotation = "0 0 1 192"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-145 -34 106.539"; + rotation = "0 0 1 7.00012"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-137 150 168.086"; + rotation = "0 0 -1 82"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-185 -34 104.965"; + rotation = "0 0 1 236"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "47 110 181.051"; + rotation = "0 0 1 110"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-129 126 170.215"; + rotation = "0 0 1 39"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "95 214 146.312"; + rotation = "0 0 -1 105"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-57 118 163.344"; + rotation = "0 0 1 129"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-201 -26 110.246"; + rotation = "0 0 1 36"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-241 6 113.391"; + rotation = "0 0 1 99.0002"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "95 110 169.32"; + rotation = "0 0 -1 96.0002"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-105 174 174.695"; + rotation = "0 0 -1 20.9998"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-169 -130 120.356"; + rotation = "0 0 -1 118"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-113 54 132.18"; + rotation = "0 0 -1 59.0003"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-41 206 179.164"; + rotation = "0 0 1 6.00018"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition6PhoenixPlant2) { + powerCount = "0"; + + new TSStatic() { + position = "-137 102 168.824"; + rotation = "0 0 1 50"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-185 206 150.68"; + rotation = "0 0 -1 86.0004"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-257 -2 108.727"; + rotation = "0 0 1 236"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-265 38 137.941"; + rotation = "0 0 -1 104"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1 94 165.027"; + rotation = "0 0 -1 60.0001"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "23 -58 130.398"; + rotation = "0 0 1 32"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-169 -138 122.379"; + rotation = "0 0 1 120"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "23 214 155.297"; + rotation = "0 0 1 7.00012"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-97 102 151.262"; + rotation = "0 0 1 34"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-41 -178 177.32"; + rotation = "0 0 1 139"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-25 134 158.785"; + rotation = "0 0 1 79"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-257 -186 180.27"; + rotation = "0 0 1 96.0002"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "103 -186 196.887"; + rotation = "0 0 1 70.9998"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "71 174 182.895"; + rotation = "0 0 1 192"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-17 166 166.719"; + rotation = "0 0 1 240"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "71 102 175.273"; + rotation = "0 0 -1 50"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "95 -170 187.805"; + rotation = "0 0 1 113"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-121 30 131.816"; + rotation = "0 0 1 196"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-25 70 142"; + rotation = "0 0 1 239"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition1BELgTree18) { + powerCount = "0"; + + new TSStatic() { + position = "-121 14 128.484"; + rotation = "0 0 -1 102"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-49 6 119.805"; + rotation = "0 0 1 57.9999"; + scale = "1.4 1.4 1.4"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-105 -18 99.633"; + rotation = "0 0 1 169"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-32.5498 3.139 117.762"; + rotation = "0 0 1 57.9999"; + scale = "1.4 1.4 1.4"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-97.206 -50.249 101.355"; + rotation = "0 0 1 58.9997"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-121 -74 104.211"; + rotation = "0 0 -1 79"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + }; + }; + new SimGroup(Ambiance) { + powerCount = "0"; + + new AudioEmitter() { + position = "-60.3481 -42.8411 108.656"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/frog1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "30000"; + maxLoopGap = "60000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-121.581 -30.8508 119.614"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "3"; + maxDistance = "192"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "40000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-293.673 -11.7674 116.589"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/crickets_drygrass.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "35"; + maxDistance = "2240"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-106.738 165.746 185.082"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/crickets_drygrass.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "0"; + minDistance = "35"; + maxDistance = "2240"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "154.36 64.0897 179.913"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/crickets_drygrass.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "35"; + maxDistance = "2240"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "23.604 -178.446 194.867"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/crickets_drygrass.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "35"; + maxDistance = "2240"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-210.922 -185.037 192.368"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/crickets_drygrass.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "35"; + maxDistance = "2240"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Overreach.mis b/base/missions/Overreach.mis new file mode 100644 index 0000000..b3534e5 --- /dev/null +++ b/base/missions/Overreach.mis @@ -0,0 +1,7993 @@ +// MissionTypes = CnH + +//--- MISSION QUOTE BEGIN --- +//Let your plans be dark and impenetrable as the night, and when you move, fall like a thunderbolt. +// -- Sun-Tzu, The Art of War +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[CnH]3 control towers +//[CnH]3600 points to win +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + musicTrack = "ice"; + cdTrack = "5"; + powerCount = "0"; + + new MissionArea(MissionArea) { + area = "-880 -840 1728 1712"; + flightCeiling = "300"; + flightCeilingRange = "20"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.400000 0.400000 0.400000 1.000000"; + ambient = "0.300000 0.300000 0.300000 1.000000"; + position = "-1024 -1024 0"; + locked = "true"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/snowdet1"; + terrainFile = "Overreach.ter"; + squareSize = "8"; + emptySquares = "270891 271147 271403 271659 271915 316897 382688 382944 383200 317921"; + visibleDistance = "1200"; + position = "-1024 -1024 0"; + hazeDistance = "250"; + locked = "true"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "55"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + conjoinBowlDev = "20"; + coverage = "0"; + position = "0 0 0 1"; + locked = "true"; + YDimOverSize = "0"; + rotation = "0 0 0 0"; + GraphFile = "Overreach.nav"; + scale = "1 1 1"; + XDimOverSize = "0"; + }; + new Sky(Sky) { + position = "-1024 -1024 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "700"; + useSkyTextures = "1"; + SkySolidColor = "0.100000 0.100000 0.100000 0.000000"; + fogDistance = "0"; + fogColor = "0.100000 0.100000 0.150000 1.000000"; + fogVolume1 = "800 200 225"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "sky_ice_starrynight.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 0.000000"; + cloudSpeed0 = "0.000000 0.000300"; + locked = "true"; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "-540.959 -742.604 140.945"; + rotation = "0.109108 0.059606 -0.992241 57.6721"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "309.61 -480.82 122.211"; + rotation = "0.367584 -0.106179 0.923909 34.7233"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-338.673 156.59 157.07"; + rotation = "0.227082 -0.240941 0.9436 96.7049"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-601.87 577.61 134.837"; + rotation = "-0.017592 -0.208428 0.97788 189.437"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "788.93 627.97 144.168"; + rotation = "0.636002 0.130428 -0.760585 30.1794"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + + new SimGroup(Team0) { + + new SimGroup(Dawn) { + + new InteriorInstance() { + position = "-618.08 499.14 64.9186"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "stowr4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape(Team0flipflop1) { + position = "-619.073 475.12 69.9208"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Dawn Hold"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + name = "Dawn Hold"; + }; + new StaticShape() { + position = "-619.467 474.36 98.7565"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + holo = "0"; + }; + new StaticShape(Team0StationInventory1) { + position = "-589.436 475.18 76.9189"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Dawn Hold Outdoor"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory2) { + position = "-619.014 445.49 76.9208"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Dawn Hold Outdoor"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory3) { + position = "-648.73 475.17 76.9135"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Dawn Hold Outdoor"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory4) { + position = "-619.356 504.79 76.9161"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Dawn Hold Outdoor"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new ForceFieldBare() { + position = "-624.307 470.2 85.4279"; + rotation = "1 0 0 0"; + scale = "10 10 0.25"; + dataBlock = "defaultForceFieldBare"; + locked = "true"; + }; + new StaticShape(Team0StationInventory5) { + position = "-646.31 481.51 85.9256"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Dawn Hold Wing"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory6) { + position = "-646.224 468.75 85.9232"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Dawn Hold Wing"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory7) { + position = "-592.029 481.52 85.9151"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Dawn Hold Wing"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory8) { + position = "-591.904 468.76 85.9151"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Dawn Hold Wing"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory9) { + position = "-619.027 438.49 94.4168"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Dawn Hold Loft"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory10) { + position = "-619.067 511.78 94.4177"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Dawn Hold Loft"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0generatorLarge1) { + position = "-599.188 475.18 69.9148"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Dawn Hold"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0generatorLarge2) { + position = "-639.001 475.05 69.9122"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Dawn Hold"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item() { + position = "-619.096 453.13 70.0896"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Turret(Team0SentryTurret1) { + position = "-619.069 498.64 73.6869"; + rotation = "1 0 0 90"; + scale = "1 1 1"; + nameTag = "Dawn Hold"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + }; + new Item() { + position = "-618.072 497.13 70.2068"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-620.133 497.15 70.2068"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-619.069 496.57 70.2068"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Turret(Team0TurretBaseLarge1) { + position = "-605.855 488.07 85.9196"; + rotation = "0 0 1 45"; + scale = "1 1 1"; + nameTag = "Dawn Hold"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "AABarrelLarge"; + locked = "true"; + }; + new Turret(Team0TurretBaseLarge2) { + position = "-632.261 462.18 85.9204"; + rotation = "0 0 1 225"; + scale = "1 1 1"; + nameTag = "Dawn Hold"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "AABarrelLarge"; + locked = "true"; + }; + new WayPoint() { + position = "-619.073 475.12 69.9208"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Dawn Hold"; + team = "0"; + locked = "true"; + }; + new SpawnSphere() { + position = "-619.073 475.12 79.9208"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new SimGroup(Day) { + + new InteriorInstance() { + position = "-172.391 170.7 63.8093"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "stowr4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape(Team0flipflop2) { + position = "-173.384 146.68 68.8115"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Day Hold"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + tHoldThread = "742"; + tCapThread = "223"; + locked = "true"; + name = "Day Hold"; + pCapThread = "222"; + }; + new WayPoint() { + position = "-173.384 146.68 68.8115"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Day Hold"; + team = "0"; + locked = "true"; + }; + new SpawnSphere() { + position = "-173.384 146.68 78.8115"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "100"; + locked = "true"; + }; + new StaticShape() { + position = "-173.778 145.92 97.6471"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + holo = "0"; + }; + new StaticShape(Team0StationInventory11) { + position = "-143.747 146.74 75.8096"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Day Hold Outdoor"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory12) { + position = "-173.325 117.05 75.8115"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Day Hold Outdoor"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory13) { + position = "-203.041 146.73 75.8042"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Day Hold Outdoor"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory14) { + position = "-173.667 176.35 75.8068"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Day Hold Outdoor"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new ForceFieldBare() { + position = "-178.207 141.517 84.0331"; + rotation = "1 0 0 0"; + scale = "10 10 0.25"; + dataBlock = "defaultForceFieldBare"; + locked = "true"; + }; + new StaticShape(Team0StationInventory15) { + position = "-200.621 153.07 84.8162"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Day Hold Wing"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory16) { + position = "-200.535 140.31 84.8138"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Day Hold Wing"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory17) { + position = "-146.34 153.08 84.8057"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Day Hold Wing"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory18) { + position = "-146.215 140.32 84.8057"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Day Hold Wing"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory19) { + position = "-173.338 110.05 93.3074"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Day Hold Loft"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory20) { + position = "-173.378 183.34 93.3083"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Day Hold Loft"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0generatorLarge3) { + position = "-153.499 146.74 68.8055"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Day Hold"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0generatorLarge4) { + position = "-193.312 146.61 68.8029"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Day Hold"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item() { + position = "-173.407 124.69 68.9803"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Turret(Team0SentryTurret2) { + position = "-173.38 170.2 72.5776"; + rotation = "1 0 0 90"; + scale = "1 1 1"; + nameTag = "Day Hold"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + }; + new Item() { + position = "-172.383 168.69 69.0975"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-174.444 168.71 69.0975"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-173.38 168.13 69.0975"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Turret(Team0TurretBaseLarge3) { + position = "-160.166 159.63 84.8102"; + rotation = "0 0 1 45"; + scale = "1 1 1"; + nameTag = "Day Hold"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "AABarrelLarge"; + locked = "true"; + }; + new Turret(Team0TurretBaseLarge4) { + position = "-186.572 133.74 84.811"; + rotation = "0 0 1 225"; + scale = "1 1 1"; + nameTag = "Day Hold"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "AABarrelLarge"; + locked = "true"; + }; + }; + new SimGroup(Dusk) { + + new InteriorInstance() { + position = "379.52 -367.048 65.2361"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "stowr4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape(Team0flipflop3) { + position = "378.53 -391.068 70.2383"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Dusk Hold"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + name = "Dusk Hold"; + }; + new WayPoint() { + position = "378.53 -391.068 70.2383"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Dusk Hold"; + team = "0"; + locked = "true"; + }; + new SpawnSphere() { + position = "378.53 -391.068 80.2383"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "100"; + locked = "true"; + }; + new StaticShape() { + position = "378.14 -391.828 99.0739"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + holo = "0"; + }; + new StaticShape(Team0StationInventory21) { + position = "408.17 -391.008 77.2364"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Dusk Hold Outdoor"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory22) { + position = "378.59 -420.698 77.2383"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Dusk Hold Outdoor"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory23) { + position = "348.87 -391.018 77.231"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Dusk Hold Outdoor"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory24) { + position = "378.25 -361.398 77.2336"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Dusk Hold Outdoor"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new ForceFieldBare() { + position = "373.981 -396.182 85.6969"; + rotation = "1 0 0 0"; + scale = "10 10 0.25"; + dataBlock = "defaultForceFieldBare"; + locked = "true"; + }; + new StaticShape(Team0StationInventory25) { + position = "351.29 -384.678 86.243"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Dusk Hold Wing"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory26) { + position = "351.38 -397.438 86.2406"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Dusk Hold Wing"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory27) { + position = "405.57 -384.668 86.2325"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Dusk Hold Wing"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory28) { + position = "405.7 -397.428 86.2325"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Dusk Hold Wing"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory29) { + position = "378.57 -427.698 94.7342"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Dusk Hold Loft"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory30) { + position = "378.53 -354.408 94.7351"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Dusk Hold Loft"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0generatorLarge5) { + position = "398.41 -391.008 70.2323"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Dusk Hold"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0generatorLarge6) { + position = "358.6 -391.138 70.2297"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Dusk Hold"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item() { + position = "378.51 -413.058 70.4071"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Turret(Team0SentryTurret3) { + position = "378.53 -367.548 74.0044"; + rotation = "1 0 0 90"; + scale = "1 1 1"; + nameTag = "Dusk Hold"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + }; + new Item() { + position = "379.53 -369.058 70.5243"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "377.47 -369.038 70.5243"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "378.53 -369.618 70.5781"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Turret(Team0TurretBaseLarge5) { + position = "391.75 -378.118 86.237"; + rotation = "0 0 1 45"; + scale = "1 1 1"; + nameTag = "Dusk Hold"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "AABarrelLarge"; + locked = "true"; + }; + new Turret(Team0TurretBaseLarge6) { + position = "365.34 -404.008 86.2378"; + rotation = "0 0 1 225"; + scale = "1 1 1"; + nameTag = "Dusk Hold"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "AABarrelLarge"; + locked = "true"; + }; + }; + new SimGroup(repHut1) { + + new Item() { + position = "-16.91 -537.657 52.3465"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-20.93 -537.622 52.3296"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-20.84 -541.537 52.3586"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-16.88 -541.493 52.3523"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-18.89 -539.552 51.7931"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-18.93 -539.564 60.5732"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "stowr1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(repHut2) { + + new Item() { + position = "-261.765 565.9 51.84"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-264.764 568.58 51.8231"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-267.278 565.57 51.8521"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-264.272 563 51.8458"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-264.503 565.78 51.2866"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-264.541 565.8 60.0667"; + rotation = "0 0 1 41.253"; + scale = "1 1 1"; + interiorFile = "stowr1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(repHut3) { + + new Item() { + position = "-453.924 -86.13 109.562"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-457.944 -86.095 109.545"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-457.854 -90.01 109.574"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-453.894 -89.966 109.568"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-455.904 -88.025 109.009"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-455.944 -88.037 117.789"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "stowr1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(repHut4) { + + new Item() { + position = "420.18 89.28 87.046"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "416.16 89.32 87.0291"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "416.25 85.4 87.0581"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "420.21 85.45 87.0518"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "418.2 87.39 86.4926"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "418.16 87.37 95.2727"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "stowr1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(rephut5) { + + new Item() { + position = "-432.595 144.51 94.65"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-436.615 144.55 94.6331"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-436.525 140.63 94.6621"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-432.565 140.68 94.6558"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-434.575 142.62 94.0966"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-434.615 142.6 102.877"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "stowr1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(AIObjectives) { + }; + }; + new SimGroup(team1) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-664.223 -734.181 128.32"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "0"; + locked = "true"; + }; + }; + new InteriorInstance() { + position = "-635.345 -649.356 70.7518"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "svpad.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-616 -736 98.3256"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + interiorFile = "sbunk9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new WayPoint() { + position = "-664.223 -734.181 118.32"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Main Base"; + team = "0"; + locked = "true"; + }; + new StaticShape(Team1generatorLarge1) { + position = "-612.346 -739.801 84.8357"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item() { + position = "-633.942 -740.034 85.7768"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory1) { + position = "-610.674 -740.008 76.8263"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Generator"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory2) { + position = "-638.631 -748.135 78.3219"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Basement"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory3) { + position = "-638.802 -731.37 78.3264"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Basement"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory4) { + position = "-670.347 -746.526 101.323"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Balcony"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory5) { + position = "-664.382 -739.53 85.3289"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Landing"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Turret(Team1SentryTurret1) { + position = "-666.788 -739.549 101.607"; + rotation = "0.57735 0.57735 -0.57735 120"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + }; + new StaticShape() { + position = "-635.496 -663.764 70.4518"; + rotation = "0 0 1 180.573"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item() { + position = "-643.686 -687.438 73.4978"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new SimGroup(AIObjectives) { + + new AIObjective(AIODefendLocation) { + position = "-619.073 475.12 71.5545"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the flipflop"; + targetObject = "Team0flipflop1"; + targetClientId = "-1"; + targetObjectId = "3296"; + location = "-619.073 475.12 71.5545"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "-619.073 475.12 71.5545"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0flipflop1"; + mode = "TouchFlipFlop"; + targetObject = "Team0flipflop1"; + targetClientId = "-1"; + targetObjectId = "3296"; + location = "-619.073 475.12 71.5545"; + weightLevel1 = "3850"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-589.436 475.18 78.4847"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3298"; + location = "-589.436 475.18 78.4847"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-589.436 475.18 78.4847"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3298"; + location = "-589.436 475.18 78.4847"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-619.014 445.49 78.4866"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3300"; + location = "-619.014 445.49 78.4866"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-619.014 445.49 78.4866"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3300"; + location = "-619.014 445.49 78.4866"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-648.73 475.17 78.4793"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3302"; + location = "-648.73 475.17 78.4793"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-648.73 475.17 78.4793"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3302"; + location = "-648.73 475.17 78.4793"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-619.356 504.79 78.4819"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3304"; + location = "-619.356 504.79 78.4819"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-619.356 504.79 78.4819"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3304"; + location = "-619.356 504.79 78.4819"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-646.31 481.51 87.4914"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3309"; + location = "-646.31 481.51 87.4914"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-646.31 481.51 87.4914"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3309"; + location = "-646.31 481.51 87.4914"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-646.224 468.75 87.489"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory6"; + targetClientId = "-1"; + targetObjectId = "3311"; + location = "-646.224 468.75 87.489"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-646.224 468.75 87.489"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory6"; + targetClientId = "-1"; + targetObjectId = "3311"; + location = "-646.224 468.75 87.489"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-592.029 481.52 87.4809"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory7"; + targetClientId = "-1"; + targetObjectId = "3313"; + location = "-592.029 481.52 87.4809"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-592.029 481.52 87.4809"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory7"; + targetClientId = "-1"; + targetObjectId = "3313"; + location = "-592.029 481.52 87.4809"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-591.904 468.76 87.4809"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory8"; + targetClientId = "-1"; + targetObjectId = "3315"; + location = "-591.904 468.76 87.4809"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-591.904 468.76 87.4809"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory8"; + targetClientId = "-1"; + targetObjectId = "3315"; + location = "-591.904 468.76 87.4809"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-619.027 438.49 95.9826"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory9"; + targetClientId = "-1"; + targetObjectId = "3317"; + location = "-619.027 438.49 95.9826"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-619.027 438.49 95.9826"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory9"; + targetClientId = "-1"; + targetObjectId = "3317"; + location = "-619.027 438.49 95.9826"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-619.067 511.78 95.9835"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory10"; + targetClientId = "-1"; + targetObjectId = "3319"; + location = "-619.067 511.78 95.9835"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-619.067 511.78 95.9835"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory10"; + targetClientId = "-1"; + targetObjectId = "3319"; + location = "-619.067 511.78 95.9835"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-597.867 475.19 71.4195"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team0generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3321"; + location = "-597.867 475.19 71.4195"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-597.867 475.19 71.4195"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team0generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3321"; + location = "-597.867 475.19 71.4195"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "-597.867 475.19 71.4195"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team0generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3321"; + location = "-597.867 475.19 71.4195"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-640.322 475.04 71.4169"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team0generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3322"; + location = "-640.322 475.04 71.4169"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-640.322 475.04 71.4169"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team0generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3322"; + location = "-640.322 475.04 71.4169"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "-640.322 475.04 71.4169"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team0generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3322"; + location = "-640.322 475.04 71.4169"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-619.069 498.32 73.6869"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SentryTurret"; + targetObject = "Team0SentryTurret1"; + targetClientId = "-1"; + targetObjectId = "3324"; + location = "-619.069 498.32 73.6869"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "-619.069 498.32 73.6869"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the SentryTurret"; + targetObject = "Team0SentryTurret1"; + targetClientId = "-1"; + targetObjectId = "3324"; + location = "-619.069 498.32 73.6869"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-605.388 488.54 87.6711"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3328"; + location = "-605.388 488.54 87.6711"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "-605.388 488.54 87.6711"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3328"; + location = "-605.388 488.54 87.6711"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-632.728 461.71 87.6719"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3329"; + location = "-632.728 461.71 87.6719"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "-632.728 461.71 87.6719"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3329"; + location = "-632.728 461.71 87.6719"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "-173.384 146.68 70.4452"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the flipflop"; + targetObject = "Team0flipflop2"; + targetClientId = "-1"; + targetObjectId = "3334"; + location = "-173.384 146.68 70.4452"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "-173.384 146.68 70.4452"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0flipflop2"; + mode = "TouchFlipFlop"; + targetObject = "Team0flipflop2"; + targetClientId = "-1"; + targetObjectId = "3334"; + location = "-173.384 146.68 70.4452"; + weightLevel1 = "3850"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-143.747 146.74 77.3754"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory11"; + targetClientId = "-1"; + targetObjectId = "3338"; + location = "-143.747 146.74 77.3754"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-143.747 146.74 77.3754"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory11"; + targetClientId = "-1"; + targetObjectId = "3338"; + location = "-143.747 146.74 77.3754"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-173.325 117.05 77.3773"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory12"; + targetClientId = "-1"; + targetObjectId = "3340"; + location = "-173.325 117.05 77.3773"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-173.325 117.05 77.3773"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory12"; + targetClientId = "-1"; + targetObjectId = "3340"; + location = "-173.325 117.05 77.3773"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-203.041 146.73 77.37"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory13"; + targetClientId = "-1"; + targetObjectId = "3342"; + location = "-203.041 146.73 77.37"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-203.041 146.73 77.37"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory13"; + targetClientId = "-1"; + targetObjectId = "3342"; + location = "-203.041 146.73 77.37"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-173.667 176.35 77.3726"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory14"; + targetClientId = "-1"; + targetObjectId = "3344"; + location = "-173.667 176.35 77.3726"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-173.667 176.35 77.3726"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory14"; + targetClientId = "-1"; + targetObjectId = "3344"; + location = "-173.667 176.35 77.3726"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-200.621 153.07 86.382"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory15"; + targetClientId = "-1"; + targetObjectId = "3348"; + location = "-200.621 153.07 86.382"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-200.621 153.07 86.382"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory15"; + targetClientId = "-1"; + targetObjectId = "3348"; + location = "-200.621 153.07 86.382"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-200.535 140.31 86.3796"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory16"; + targetClientId = "-1"; + targetObjectId = "3350"; + location = "-200.535 140.31 86.3796"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-200.535 140.31 86.3796"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory16"; + targetClientId = "-1"; + targetObjectId = "3350"; + location = "-200.535 140.31 86.3796"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-146.34 153.08 86.3715"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory17"; + targetClientId = "-1"; + targetObjectId = "3352"; + location = "-146.34 153.08 86.3715"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-146.34 153.08 86.3715"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory17"; + targetClientId = "-1"; + targetObjectId = "3352"; + location = "-146.34 153.08 86.3715"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-146.215 140.32 86.3715"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory18"; + targetClientId = "-1"; + targetObjectId = "3354"; + location = "-146.215 140.32 86.3715"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-146.215 140.32 86.3715"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory18"; + targetClientId = "-1"; + targetObjectId = "3354"; + location = "-146.215 140.32 86.3715"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-173.338 110.05 94.8732"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory19"; + targetClientId = "-1"; + targetObjectId = "3356"; + location = "-173.338 110.05 94.8732"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-173.338 110.05 94.8732"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory19"; + targetClientId = "-1"; + targetObjectId = "3356"; + location = "-173.338 110.05 94.8732"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-173.378 183.34 94.8741"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory20"; + targetClientId = "-1"; + targetObjectId = "3358"; + location = "-173.378 183.34 94.8741"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-173.378 183.34 94.8741"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory20"; + targetClientId = "-1"; + targetObjectId = "3358"; + location = "-173.378 183.34 94.8741"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-152.178 146.75 70.3102"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team0generatorLarge3"; + targetClientId = "-1"; + targetObjectId = "3360"; + location = "-152.178 146.75 70.3102"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-152.178 146.75 70.3102"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team0generatorLarge3"; + targetClientId = "-1"; + targetObjectId = "3360"; + location = "-152.178 146.75 70.3102"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "-152.178 146.75 70.3102"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team0generatorLarge3"; + targetClientId = "-1"; + targetObjectId = "3360"; + location = "-152.178 146.75 70.3102"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-194.633 146.6 70.3076"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team0generatorLarge4"; + targetClientId = "-1"; + targetObjectId = "3361"; + location = "-194.633 146.6 70.3076"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-194.633 146.6 70.3076"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team0generatorLarge4"; + targetClientId = "-1"; + targetObjectId = "3361"; + location = "-194.633 146.6 70.3076"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "-194.633 146.6 70.3076"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team0generatorLarge4"; + targetClientId = "-1"; + targetObjectId = "3361"; + location = "-194.633 146.6 70.3076"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-173.38 169.88 72.5776"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SentryTurret"; + targetObject = "Team0SentryTurret2"; + targetClientId = "-1"; + targetObjectId = "3363"; + location = "-173.38 169.88 72.5776"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "-173.38 169.88 72.5776"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the SentryTurret"; + targetObject = "Team0SentryTurret2"; + targetClientId = "-1"; + targetObjectId = "3363"; + location = "-173.38 169.88 72.5776"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-159.699 160.1 86.5617"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge3"; + targetClientId = "-1"; + targetObjectId = "3367"; + location = "-159.699 160.1 86.5617"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "-159.699 160.1 86.5617"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge3"; + targetClientId = "-1"; + targetObjectId = "3367"; + location = "-159.699 160.1 86.5617"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-187.039 133.27 86.5625"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge4"; + targetClientId = "-1"; + targetObjectId = "3368"; + location = "-187.039 133.27 86.5625"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "-187.039 133.27 86.5625"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge4"; + targetClientId = "-1"; + targetObjectId = "3368"; + location = "-187.039 133.27 86.5625"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "378.53 -391.068 71.872"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the flipflop"; + targetObject = "Team0flipflop3"; + targetClientId = "-1"; + targetObjectId = "3371"; + location = "378.53 -391.068 71.872"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "378.53 -391.068 71.872"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0flipflop3"; + mode = "TouchFlipFlop"; + targetObject = "Team0flipflop3"; + targetClientId = "-1"; + targetObjectId = "3371"; + location = "378.53 -391.068 71.872"; + weightLevel1 = "3850"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "408.17 -391.008 78.8022"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory21"; + targetClientId = "-1"; + targetObjectId = "3375"; + location = "408.17 -391.008 78.8022"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "408.17 -391.008 78.8022"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory21"; + targetClientId = "-1"; + targetObjectId = "3375"; + location = "408.17 -391.008 78.8022"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "378.59 -420.698 78.8041"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory22"; + targetClientId = "-1"; + targetObjectId = "3377"; + location = "378.59 -420.698 78.8041"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "378.59 -420.698 78.8041"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory22"; + targetClientId = "-1"; + targetObjectId = "3377"; + location = "378.59 -420.698 78.8041"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "348.87 -391.018 78.7968"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory23"; + targetClientId = "-1"; + targetObjectId = "3379"; + location = "348.87 -391.018 78.7968"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "348.87 -391.018 78.7968"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory23"; + targetClientId = "-1"; + targetObjectId = "3379"; + location = "348.87 -391.018 78.7968"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "378.25 -361.398 78.7994"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory24"; + targetClientId = "-1"; + targetObjectId = "3381"; + location = "378.25 -361.398 78.7994"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "378.25 -361.398 78.7994"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory24"; + targetClientId = "-1"; + targetObjectId = "3381"; + location = "378.25 -361.398 78.7994"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "351.29 -384.678 87.8088"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory25"; + targetClientId = "-1"; + targetObjectId = "3385"; + location = "351.29 -384.678 87.8088"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "351.29 -384.678 87.8088"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory25"; + targetClientId = "-1"; + targetObjectId = "3385"; + location = "351.29 -384.678 87.8088"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "351.38 -397.438 87.8064"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory26"; + targetClientId = "-1"; + targetObjectId = "3387"; + location = "351.38 -397.438 87.8064"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "351.38 -397.438 87.8064"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory26"; + targetClientId = "-1"; + targetObjectId = "3387"; + location = "351.38 -397.438 87.8064"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "405.57 -384.668 87.7983"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory27"; + targetClientId = "-1"; + targetObjectId = "3389"; + location = "405.57 -384.668 87.7983"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "405.57 -384.668 87.7983"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory27"; + targetClientId = "-1"; + targetObjectId = "3389"; + location = "405.57 -384.668 87.7983"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "405.7 -397.428 87.7983"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory28"; + targetClientId = "-1"; + targetObjectId = "3391"; + location = "405.7 -397.428 87.7983"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "405.7 -397.428 87.7983"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory28"; + targetClientId = "-1"; + targetObjectId = "3391"; + location = "405.7 -397.428 87.7983"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "378.57 -427.698 96.3"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory29"; + targetClientId = "-1"; + targetObjectId = "3393"; + location = "378.57 -427.698 96.3"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "378.57 -427.698 96.3"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory29"; + targetClientId = "-1"; + targetObjectId = "3393"; + location = "378.57 -427.698 96.3"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "378.53 -354.408 96.3009"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory30"; + targetClientId = "-1"; + targetObjectId = "3395"; + location = "378.53 -354.408 96.3009"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "378.53 -354.408 96.3009"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory30"; + targetClientId = "-1"; + targetObjectId = "3395"; + location = "378.53 -354.408 96.3009"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "399.73 -391.002 71.737"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team0generatorLarge5"; + targetClientId = "-1"; + targetObjectId = "3397"; + location = "399.73 -391.002 71.737"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "399.73 -391.002 71.737"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team0generatorLarge5"; + targetClientId = "-1"; + targetObjectId = "3397"; + location = "399.73 -391.002 71.737"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "399.73 -391.002 71.737"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team0generatorLarge5"; + targetClientId = "-1"; + targetObjectId = "3397"; + location = "399.73 -391.002 71.737"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "357.28 -391.144 71.7344"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team0generatorLarge6"; + targetClientId = "-1"; + targetObjectId = "3398"; + location = "357.28 -391.144 71.7344"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "357.28 -391.144 71.7344"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team0generatorLarge6"; + targetClientId = "-1"; + targetObjectId = "3398"; + location = "357.28 -391.144 71.7344"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "357.28 -391.144 71.7344"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team0generatorLarge6"; + targetClientId = "-1"; + targetObjectId = "3398"; + location = "357.28 -391.144 71.7344"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "378.53 -367.868 74.0044"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SentryTurret"; + targetObject = "Team0SentryTurret3"; + targetClientId = "-1"; + targetObjectId = "3400"; + location = "378.53 -367.868 74.0044"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "378.53 -367.868 74.0044"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the SentryTurret"; + targetObject = "Team0SentryTurret3"; + targetClientId = "-1"; + targetObjectId = "3400"; + location = "378.53 -367.868 74.0044"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "392.22 -377.651 87.9885"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge5"; + targetClientId = "-1"; + targetObjectId = "3404"; + location = "392.22 -377.651 87.9885"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "392.22 -377.651 87.9885"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge5"; + targetClientId = "-1"; + targetObjectId = "3404"; + location = "392.22 -377.651 87.9885"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "364.87 -404.475 87.9893"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge6"; + targetClientId = "-1"; + targetObjectId = "3405"; + location = "364.87 -404.475 87.9893"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "364.87 -404.475 87.9893"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge6"; + targetClientId = "-1"; + targetObjectId = "3405"; + location = "364.87 -404.475 87.9893"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-611.025 -739.796 86.3404"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team1generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3448"; + location = "-611.025 -739.796 86.3404"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "-611.025 -739.796 86.3404"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team1generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3448"; + location = "-611.025 -739.796 86.3404"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-610.674 -740.008 78.3921"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3450"; + location = "-610.674 -740.008 78.3921"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-638.631 -748.135 79.8877"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3452"; + location = "-638.631 -748.135 79.8877"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-638.802 -731.37 79.8922"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3454"; + location = "-638.802 -731.37 79.8922"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-670.347 -746.526 102.889"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3456"; + location = "-670.347 -746.526 102.889"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-664.382 -739.53 86.8947"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3458"; + location = "-664.382 -739.53 86.8947"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-666.438 -739.549 101.607"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SentryTurret"; + targetObject = "Team1SentryTurret1"; + targetClientId = "-1"; + targetObjectId = "3460"; + location = "-666.438 -739.549 101.607"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "792.02 701.51 108.26"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the SentryTurret"; + targetObject = "Team2SentryTurret1"; + targetClientId = "-1"; + targetObjectId = "3591"; + location = "792.02 701.51 108.26"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "792.01 703.57 93.5475"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3592"; + location = "792.01 703.57 93.5475"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "799 697.6 109.542"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3594"; + location = "799 697.6 109.542"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "783.85 729.15 86.545"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3596"; + location = "783.85 729.15 86.545"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "800.61 729.32 86.5405"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3598"; + location = "800.61 729.32 86.5405"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "792.48 757.27 85.0449"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3600"; + location = "792.48 757.27 85.0449"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "792.28 756.92 92.9932"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team2generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3603"; + location = "792.28 756.92 92.9932"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "-619.073 475.12 71.5545"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the flipflop"; + targetObject = "Team0flipflop1"; + targetClientId = "-1"; + targetObjectId = "3296"; + location = "-619.073 475.12 71.5545"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIODefendLocation) { + position = "-173.384 146.68 70.4452"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the flipflop"; + targetObject = "Team0flipflop2"; + targetClientId = "-1"; + targetObjectId = "3334"; + location = "-173.384 146.68 70.4452"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIODefendLocation) { + position = "378.53 -391.068 71.872"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the flipflop"; + targetObject = "Team0flipflop3"; + targetClientId = "-1"; + targetObjectId = "3371"; + location = "378.53 -391.068 71.872"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + }; + }; + new SimGroup(team2) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "786.66 703.72 134.973"; + rotation = "-0 0 -1 90"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "0"; + locked = "true"; + }; + }; + new InteriorInstance() { + position = "788.48 751.95 104.978"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "sbunk9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new WayPoint() { + position = "786.66 703.72 124.973"; + rotation = "-0 0 -1 90"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Main Base"; + team = "0"; + locked = "true"; + }; + new Turret(Team2SentryTurret1) { + position = "792.02 701.16 108.26"; + rotation = "6.89103e-07 0.707107 -0.707107 180"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + }; + new StaticShape(Team2StationInventory1) { + position = "792.01 703.57 91.9817"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Landing"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory2) { + position = "799 697.6 107.976"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Balcony"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory3) { + position = "783.85 729.15 84.9792"; + rotation = "-0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Basement"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory4) { + position = "800.61 729.32 84.9747"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Basement"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory5) { + position = "792.48 757.27 83.4791"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Generator"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item() { + position = "792.51 734.01 92.4296"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new StaticShape(Team2generatorLarge1) { + position = "792.28 755.6 91.4885"; + rotation = "0 0 1 180.046"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item() { + position = "788.22 591.25 87.9341"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "750.06 599.21 85.1881"; + rotation = "-0 0 -1 90"; + scale = "1 1 1"; + interiorFile = "svpad.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "764.47 599.2 84.8881"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new SimGroup(AIObjectives) { + + new AIObjective(AIODefendLocation) { + position = "-619.073 475.12 71.5545"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the flipflop"; + targetObject = "Team0flipflop1"; + targetClientId = "-1"; + targetObjectId = "3296"; + location = "-619.073 475.12 71.5545"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "-619.073 475.12 71.5545"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0flipflop1"; + mode = "TouchFlipFlop"; + targetObject = "Team0flipflop1"; + targetClientId = "-1"; + targetObjectId = "3296"; + location = "-619.073 475.12 71.5545"; + weightLevel1 = "3850"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-589.436 475.18 78.4847"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3298"; + location = "-589.436 475.18 78.4847"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-589.436 475.18 78.4847"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3298"; + location = "-589.436 475.18 78.4847"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-619.014 445.49 78.4866"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3300"; + location = "-619.014 445.49 78.4866"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-619.014 445.49 78.4866"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3300"; + location = "-619.014 445.49 78.4866"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-648.73 475.17 78.4793"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3302"; + location = "-648.73 475.17 78.4793"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-648.73 475.17 78.4793"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3302"; + location = "-648.73 475.17 78.4793"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-619.356 504.79 78.4819"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3304"; + location = "-619.356 504.79 78.4819"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-619.356 504.79 78.4819"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3304"; + location = "-619.356 504.79 78.4819"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-646.31 481.51 87.4914"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3309"; + location = "-646.31 481.51 87.4914"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-646.31 481.51 87.4914"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3309"; + location = "-646.31 481.51 87.4914"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-646.224 468.75 87.489"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory6"; + targetClientId = "-1"; + targetObjectId = "3311"; + location = "-646.224 468.75 87.489"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-646.224 468.75 87.489"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory6"; + targetClientId = "-1"; + targetObjectId = "3311"; + location = "-646.224 468.75 87.489"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-592.029 481.52 87.4809"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory7"; + targetClientId = "-1"; + targetObjectId = "3313"; + location = "-592.029 481.52 87.4809"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-592.029 481.52 87.4809"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory7"; + targetClientId = "-1"; + targetObjectId = "3313"; + location = "-592.029 481.52 87.4809"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-591.904 468.76 87.4809"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory8"; + targetClientId = "-1"; + targetObjectId = "3315"; + location = "-591.904 468.76 87.4809"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-591.904 468.76 87.4809"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory8"; + targetClientId = "-1"; + targetObjectId = "3315"; + location = "-591.904 468.76 87.4809"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-619.027 438.49 95.9826"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory9"; + targetClientId = "-1"; + targetObjectId = "3317"; + location = "-619.027 438.49 95.9826"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-619.027 438.49 95.9826"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory9"; + targetClientId = "-1"; + targetObjectId = "3317"; + location = "-619.027 438.49 95.9826"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-619.067 511.78 95.9835"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory10"; + targetClientId = "-1"; + targetObjectId = "3319"; + location = "-619.067 511.78 95.9835"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-619.067 511.78 95.9835"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory10"; + targetClientId = "-1"; + targetObjectId = "3319"; + location = "-619.067 511.78 95.9835"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-597.867 475.19 71.4195"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team0generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3321"; + location = "-597.867 475.19 71.4195"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-597.867 475.19 71.4195"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team0generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3321"; + location = "-597.867 475.19 71.4195"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "-597.867 475.19 71.4195"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team0generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3321"; + location = "-597.867 475.19 71.4195"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-640.322 475.04 71.4169"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team0generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3322"; + location = "-640.322 475.04 71.4169"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-640.322 475.04 71.4169"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team0generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3322"; + location = "-640.322 475.04 71.4169"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "-640.322 475.04 71.4169"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team0generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3322"; + location = "-640.322 475.04 71.4169"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-619.069 498.32 73.6869"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SentryTurret"; + targetObject = "Team0SentryTurret1"; + targetClientId = "-1"; + targetObjectId = "3324"; + location = "-619.069 498.32 73.6869"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "-619.069 498.32 73.6869"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the SentryTurret"; + targetObject = "Team0SentryTurret1"; + targetClientId = "-1"; + targetObjectId = "3324"; + location = "-619.069 498.32 73.6869"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-605.388 488.54 87.6711"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3328"; + location = "-605.388 488.54 87.6711"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "-605.388 488.54 87.6711"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3328"; + location = "-605.388 488.54 87.6711"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-632.728 461.71 87.6719"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3329"; + location = "-632.728 461.71 87.6719"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "-632.728 461.71 87.6719"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3329"; + location = "-632.728 461.71 87.6719"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "-173.384 146.68 70.4452"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the flipflop"; + targetObject = "Team0flipflop2"; + targetClientId = "-1"; + targetObjectId = "3334"; + location = "-173.384 146.68 70.4452"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "-173.384 146.68 70.4452"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0flipflop2"; + mode = "TouchFlipFlop"; + targetObject = "Team0flipflop2"; + targetClientId = "-1"; + targetObjectId = "3334"; + location = "-173.384 146.68 70.4452"; + weightLevel1 = "3850"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-143.747 146.74 77.3754"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory11"; + targetClientId = "-1"; + targetObjectId = "3338"; + location = "-143.747 146.74 77.3754"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-143.747 146.74 77.3754"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory11"; + targetClientId = "-1"; + targetObjectId = "3338"; + location = "-143.747 146.74 77.3754"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-173.325 117.05 77.3773"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory12"; + targetClientId = "-1"; + targetObjectId = "3340"; + location = "-173.325 117.05 77.3773"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-173.325 117.05 77.3773"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory12"; + targetClientId = "-1"; + targetObjectId = "3340"; + location = "-173.325 117.05 77.3773"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-203.041 146.73 77.37"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory13"; + targetClientId = "-1"; + targetObjectId = "3342"; + location = "-203.041 146.73 77.37"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-203.041 146.73 77.37"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory13"; + targetClientId = "-1"; + targetObjectId = "3342"; + location = "-203.041 146.73 77.37"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-173.667 176.35 77.3726"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory14"; + targetClientId = "-1"; + targetObjectId = "3344"; + location = "-173.667 176.35 77.3726"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-173.667 176.35 77.3726"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory14"; + targetClientId = "-1"; + targetObjectId = "3344"; + location = "-173.667 176.35 77.3726"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-200.621 153.07 86.382"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory15"; + targetClientId = "-1"; + targetObjectId = "3348"; + location = "-200.621 153.07 86.382"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-200.621 153.07 86.382"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory15"; + targetClientId = "-1"; + targetObjectId = "3348"; + location = "-200.621 153.07 86.382"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-200.535 140.31 86.3796"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory16"; + targetClientId = "-1"; + targetObjectId = "3350"; + location = "-200.535 140.31 86.3796"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-200.535 140.31 86.3796"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory16"; + targetClientId = "-1"; + targetObjectId = "3350"; + location = "-200.535 140.31 86.3796"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-146.34 153.08 86.3715"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory17"; + targetClientId = "-1"; + targetObjectId = "3352"; + location = "-146.34 153.08 86.3715"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-146.34 153.08 86.3715"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory17"; + targetClientId = "-1"; + targetObjectId = "3352"; + location = "-146.34 153.08 86.3715"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-146.215 140.32 86.3715"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory18"; + targetClientId = "-1"; + targetObjectId = "3354"; + location = "-146.215 140.32 86.3715"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-146.215 140.32 86.3715"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory18"; + targetClientId = "-1"; + targetObjectId = "3354"; + location = "-146.215 140.32 86.3715"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-173.338 110.05 94.8732"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory19"; + targetClientId = "-1"; + targetObjectId = "3356"; + location = "-173.338 110.05 94.8732"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-173.338 110.05 94.8732"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory19"; + targetClientId = "-1"; + targetObjectId = "3356"; + location = "-173.338 110.05 94.8732"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-173.378 183.34 94.8741"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory20"; + targetClientId = "-1"; + targetObjectId = "3358"; + location = "-173.378 183.34 94.8741"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-173.378 183.34 94.8741"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory20"; + targetClientId = "-1"; + targetObjectId = "3358"; + location = "-173.378 183.34 94.8741"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-152.178 146.75 70.3102"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team0generatorLarge3"; + targetClientId = "-1"; + targetObjectId = "3360"; + location = "-152.178 146.75 70.3102"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-152.178 146.75 70.3102"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team0generatorLarge3"; + targetClientId = "-1"; + targetObjectId = "3360"; + location = "-152.178 146.75 70.3102"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "-152.178 146.75 70.3102"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team0generatorLarge3"; + targetClientId = "-1"; + targetObjectId = "3360"; + location = "-152.178 146.75 70.3102"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-194.633 146.6 70.3076"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team0generatorLarge4"; + targetClientId = "-1"; + targetObjectId = "3361"; + location = "-194.633 146.6 70.3076"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-194.633 146.6 70.3076"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team0generatorLarge4"; + targetClientId = "-1"; + targetObjectId = "3361"; + location = "-194.633 146.6 70.3076"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "-194.633 146.6 70.3076"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team0generatorLarge4"; + targetClientId = "-1"; + targetObjectId = "3361"; + location = "-194.633 146.6 70.3076"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-173.38 169.88 72.5776"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SentryTurret"; + targetObject = "Team0SentryTurret2"; + targetClientId = "-1"; + targetObjectId = "3363"; + location = "-173.38 169.88 72.5776"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "-173.38 169.88 72.5776"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the SentryTurret"; + targetObject = "Team0SentryTurret2"; + targetClientId = "-1"; + targetObjectId = "3363"; + location = "-173.38 169.88 72.5776"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-159.699 160.1 86.5617"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge3"; + targetClientId = "-1"; + targetObjectId = "3367"; + location = "-159.699 160.1 86.5617"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "-159.699 160.1 86.5617"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge3"; + targetClientId = "-1"; + targetObjectId = "3367"; + location = "-159.699 160.1 86.5617"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-187.039 133.27 86.5625"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge4"; + targetClientId = "-1"; + targetObjectId = "3368"; + location = "-187.039 133.27 86.5625"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "-187.039 133.27 86.5625"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge4"; + targetClientId = "-1"; + targetObjectId = "3368"; + location = "-187.039 133.27 86.5625"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "378.53 -391.068 71.872"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the flipflop"; + targetObject = "Team0flipflop3"; + targetClientId = "-1"; + targetObjectId = "3371"; + location = "378.53 -391.068 71.872"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "378.53 -391.068 71.872"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team0flipflop3"; + mode = "TouchFlipFlop"; + targetObject = "Team0flipflop3"; + targetClientId = "-1"; + targetObjectId = "3371"; + location = "378.53 -391.068 71.872"; + weightLevel1 = "3850"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "408.17 -391.008 78.8022"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory21"; + targetClientId = "-1"; + targetObjectId = "3375"; + location = "408.17 -391.008 78.8022"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "408.17 -391.008 78.8022"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory21"; + targetClientId = "-1"; + targetObjectId = "3375"; + location = "408.17 -391.008 78.8022"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "378.59 -420.698 78.8041"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory22"; + targetClientId = "-1"; + targetObjectId = "3377"; + location = "378.59 -420.698 78.8041"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "378.59 -420.698 78.8041"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory22"; + targetClientId = "-1"; + targetObjectId = "3377"; + location = "378.59 -420.698 78.8041"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "348.87 -391.018 78.7968"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory23"; + targetClientId = "-1"; + targetObjectId = "3379"; + location = "348.87 -391.018 78.7968"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "348.87 -391.018 78.7968"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory23"; + targetClientId = "-1"; + targetObjectId = "3379"; + location = "348.87 -391.018 78.7968"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "378.25 -361.398 78.7994"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory24"; + targetClientId = "-1"; + targetObjectId = "3381"; + location = "378.25 -361.398 78.7994"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "378.25 -361.398 78.7994"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory24"; + targetClientId = "-1"; + targetObjectId = "3381"; + location = "378.25 -361.398 78.7994"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "351.29 -384.678 87.8088"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory25"; + targetClientId = "-1"; + targetObjectId = "3385"; + location = "351.29 -384.678 87.8088"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "351.29 -384.678 87.8088"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory25"; + targetClientId = "-1"; + targetObjectId = "3385"; + location = "351.29 -384.678 87.8088"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "351.38 -397.438 87.8064"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory26"; + targetClientId = "-1"; + targetObjectId = "3387"; + location = "351.38 -397.438 87.8064"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "351.38 -397.438 87.8064"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory26"; + targetClientId = "-1"; + targetObjectId = "3387"; + location = "351.38 -397.438 87.8064"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "405.57 -384.668 87.7983"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory27"; + targetClientId = "-1"; + targetObjectId = "3389"; + location = "405.57 -384.668 87.7983"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "405.57 -384.668 87.7983"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory27"; + targetClientId = "-1"; + targetObjectId = "3389"; + location = "405.57 -384.668 87.7983"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "405.7 -397.428 87.7983"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory28"; + targetClientId = "-1"; + targetObjectId = "3391"; + location = "405.7 -397.428 87.7983"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "405.7 -397.428 87.7983"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory28"; + targetClientId = "-1"; + targetObjectId = "3391"; + location = "405.7 -397.428 87.7983"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "378.57 -427.698 96.3"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory29"; + targetClientId = "-1"; + targetObjectId = "3393"; + location = "378.57 -427.698 96.3"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "378.57 -427.698 96.3"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory29"; + targetClientId = "-1"; + targetObjectId = "3393"; + location = "378.57 -427.698 96.3"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "378.53 -354.408 96.3009"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team0StationInventory30"; + targetClientId = "-1"; + targetObjectId = "3395"; + location = "378.53 -354.408 96.3009"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "378.53 -354.408 96.3009"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team0StationInventory30"; + targetClientId = "-1"; + targetObjectId = "3395"; + location = "378.53 -354.408 96.3009"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "399.73 -391.002 71.737"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team0generatorLarge5"; + targetClientId = "-1"; + targetObjectId = "3397"; + location = "399.73 -391.002 71.737"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "399.73 -391.002 71.737"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team0generatorLarge5"; + targetClientId = "-1"; + targetObjectId = "3397"; + location = "399.73 -391.002 71.737"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "399.73 -391.002 71.737"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team0generatorLarge5"; + targetClientId = "-1"; + targetObjectId = "3397"; + location = "399.73 -391.002 71.737"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "357.28 -391.144 71.7344"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team0generatorLarge6"; + targetClientId = "-1"; + targetObjectId = "3398"; + location = "357.28 -391.144 71.7344"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "357.28 -391.144 71.7344"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team0generatorLarge6"; + targetClientId = "-1"; + targetObjectId = "3398"; + location = "357.28 -391.144 71.7344"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "357.28 -391.144 71.7344"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team0generatorLarge6"; + targetClientId = "-1"; + targetObjectId = "3398"; + location = "357.28 -391.144 71.7344"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "378.53 -367.868 74.0044"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SentryTurret"; + targetObject = "Team0SentryTurret3"; + targetClientId = "-1"; + targetObjectId = "3400"; + location = "378.53 -367.868 74.0044"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "378.53 -367.868 74.0044"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the SentryTurret"; + targetObject = "Team0SentryTurret3"; + targetClientId = "-1"; + targetObjectId = "3400"; + location = "378.53 -367.868 74.0044"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "392.22 -377.651 87.9885"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge5"; + targetClientId = "-1"; + targetObjectId = "3404"; + location = "392.22 -377.651 87.9885"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "392.22 -377.651 87.9885"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge5"; + targetClientId = "-1"; + targetObjectId = "3404"; + location = "392.22 -377.651 87.9885"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "364.87 -404.475 87.9893"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge6"; + targetClientId = "-1"; + targetObjectId = "3405"; + location = "364.87 -404.475 87.9893"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "364.87 -404.475 87.9893"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team0TurretBaseLarge6"; + targetClientId = "-1"; + targetObjectId = "3405"; + location = "364.87 -404.475 87.9893"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-611.025 -739.796 86.3404"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team1generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3448"; + location = "-611.025 -739.796 86.3404"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-610.674 -740.008 78.3921"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3450"; + location = "-610.674 -740.008 78.3921"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-638.631 -748.135 79.8877"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3452"; + location = "-638.631 -748.135 79.8877"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-638.802 -731.37 79.8922"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3454"; + location = "-638.802 -731.37 79.8922"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-670.347 -746.526 102.889"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3456"; + location = "-670.347 -746.526 102.889"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-664.382 -739.53 86.8947"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3458"; + location = "-664.382 -739.53 86.8947"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-666.438 -739.549 101.607"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the SentryTurret"; + targetObject = "Team1SentryTurret1"; + targetClientId = "-1"; + targetObjectId = "3460"; + location = "-666.438 -739.549 101.607"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "792.02 701.51 108.26"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SentryTurret"; + targetObject = "Team2SentryTurret1"; + targetClientId = "-1"; + targetObjectId = "3591"; + location = "792.02 701.51 108.26"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "792.01 703.57 93.5475"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3592"; + location = "792.01 703.57 93.5475"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "799 697.6 109.542"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3594"; + location = "799 697.6 109.542"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "783.85 729.15 86.545"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3596"; + location = "783.85 729.15 86.545"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "800.61 729.32 86.5405"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3598"; + location = "800.61 729.32 86.5405"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "792.48 757.27 85.0449"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3600"; + location = "792.48 757.27 85.0449"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "792.28 756.92 92.9932"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team2generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3603"; + location = "792.28 756.92 92.9932"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "792.28 756.92 92.9932"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team2generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3603"; + location = "792.28 756.92 92.9932"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "-619.073 475.12 71.5545"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the flipflop"; + targetObject = "Team0flipflop1"; + targetClientId = "-1"; + targetObjectId = "3296"; + location = "-619.073 475.12 71.5545"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIODefendLocation) { + position = "-173.384 146.68 70.4452"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the flipflop"; + targetObject = "Team0flipflop2"; + targetClientId = "-1"; + targetObjectId = "3334"; + location = "-173.384 146.68 70.4452"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + new AIObjective(AIODefendLocation) { + position = "378.53 -391.068 71.872"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the flipflop"; + targetObject = "Team0flipflop3"; + targetClientId = "-1"; + targetObjectId = "3371"; + location = "378.53 -391.068 71.872"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + }; + }; + }; + }; + new SimGroup(Spires) { + + new InteriorInstance() { + position = "-529.442 -626.596 65.7656"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "sspir4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "146.22 -142.474 45.2222"; + rotation = "0 0 1 55.0039"; + scale = "1 1 1"; + interiorFile = "sspir4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "211.45 352.73 72.7639"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "sspir3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "642.25 122.45 52.5541"; + rotation = "0 0 1 71.6197"; + scale = "1 1 1"; + interiorFile = "sspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "86.73 268.95 42.7072"; + rotation = "0 0 1 121.467"; + scale = "1 1 1"; + interiorFile = "sspir3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "82.13 299.56 45.9614"; + rotation = "0 0 1 33.8045"; + scale = "1 1 1"; + interiorFile = "sspir4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "107.23 471.46 81.8605"; + rotation = "0 0 -1 88.8085"; + scale = "1 1 1"; + interiorFile = "sspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-381.38 -565.143 74.2241"; + rotation = "0 0 1 56.1499"; + scale = "1 1 1"; + interiorFile = "sspir1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-585.765 -462.557 44.7925"; + rotation = "0 0 -1 29.2208"; + scale = "1 1 1"; + interiorFile = "sspir1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "43.93 -412.745 69.0179"; + rotation = "0 0 -1 117.456"; + scale = "1 1 1"; + interiorFile = "sspir4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "159.34 -307.449 43.2556"; + rotation = "0 0 1 37.8152"; + scale = "1 1 1"; + interiorFile = "sspir3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "138.76 -295.236 45.2606"; + rotation = "0.532221 0.790979 -0.301817 105.6"; + scale = "1 1 1"; + interiorFile = "srock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-42.115 -149.758 50.5681"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "sspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-43.522 -174.473 47.3502"; + rotation = "0 0 1 65.8901"; + scale = "1 1 1"; + interiorFile = "sspir1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-51.42 -78.435 44.6093"; + rotation = "0 0 1 37.2423"; + scale = "1 1 1"; + interiorFile = "sspir3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new AudioEmitter() { + position = "289.762 209.214 173.677"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/moaningwind1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Pyroclasm.mis b/base/missions/Pyroclasm.mis new file mode 100644 index 0000000..3e9a261 --- /dev/null +++ b/base/missions/Pyroclasm.mis @@ -0,0 +1,752 @@ +// MissionTypes = DM + +//--- MISSION QUOTE BEGIN --- +//For my confession they burned me with fire and found that I was for endurance made. +// -- The Arabian Nights +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//Inventory stations available in both towers +//--- MISSION STRING END --- + + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + DM_scoreLimit = "20"; + musicTrack = "volcanic"; + DM_timeLimit = "25"; + powerCount = "0"; + cdTrack = "3"; + + new MissionArea(MissionArea) { + area = "-624 -184 768 784"; + flightCeiling = "2000"; + flightCeilingRange = "50"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.600000 0.600000 0.600000 1.000000"; + ambient = "0.200000 0.200000 0.200000 1.000000"; + locked = "true"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + position = "-1024 -1024 0"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/lavadet1"; + terrainFile = "Pyroclasm.ter"; + squareSize = "8"; + emptySquares = "250"; + locked = "true"; + hazeDistance = "250"; + visibleDistance = "1200"; + position = "-1024 -1024 0"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "45"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + locked = "true"; + YDimOverSize = "0"; + rotation = "0 0 0 0"; + conjoinBowlDev = "20"; + scale = "1 1 1"; + coverage = "0"; + GraphFile = "Pyroclasm.nav"; + XDimOverSize = "0"; + position = "0 0 0 1"; + }; + new Sky(Sky) { + position = "-1024 -1024 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "400"; + useSkyTextures = "1"; + SkySolidColor = "0.365000 0.330000 0.310000 1.000000"; + fogDistance = "75"; + fogColor = "0.450000 0.300000 0.250000 1.000000"; + fogVolume1 = "0 0 0"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "sky_lava_brown.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 17752555020136093100000000000.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 0.000000"; + locked = "true"; + cloudSpeed0 = "0.001000 0.001000"; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "-292.101 305.1 273.176"; + rotation = "0 0 1 138.083"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-133.375 255.69 162.262"; + rotation = "0 0 1 238.533"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-347.859 144.2 164.274"; + rotation = "-0.425334 0.210731 0.880161 58.7509"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + + new SimGroup(Team1) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-262.913 201.07 112.918"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "190"; + sphereWeight = "100"; + indoorWeight = "20"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + }; + new SimGroup(team0) { + + new SimGroup(Towers) { + + new SimGroup(Tower1) { + providesPower = "1"; + + new InteriorInstance() { + position = "-244.264 220.93 224.914"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + interiorFile = "dbase4.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_Pulse_1"; + locked = "true"; + }; + new InteriorInstance() { + position = "-183.71 145.54 164.943"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dplat1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Item() { + position = "-244.77 238.72 222.436"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Grenade"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new StaticShape() { + position = "-255.985 234.127 240.91"; + rotation = "0 0 -1 48.1284"; + scale = "1 1 1"; + nameTag = "Ctr. Stronghold"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "33"; + }; + new StaticShape() { + position = "-232.296 234.311 240.91"; + rotation = "0 0 1 41.253"; + scale = "1 1 1"; + nameTag = "Ctr. Stronghold"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "34"; + }; + new StaticShape() { + position = "-232.421 203.555 240.91"; + rotation = "0 0 1 135.218"; + scale = "1 1 1"; + nameTag = "Ctr. Stronghold"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "35"; + }; + new StaticShape() { + position = "-256.217 203.486 240.91"; + rotation = "0 0 1 223.454"; + scale = "1 1 1"; + nameTag = "Ctr. Stronghold"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "36"; + }; + new WayPoint() { + position = "-245.07 220.86 235.482"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Center Tower"; + team = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-309.181 145.27 185.054"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dplat3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-311.298 284.53 205.64"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dplat1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-184.164 275.88 140.967"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dplat3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Item() { + position = "-309.308 161.09 187.746"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "GrenadeLauncher"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-303.365 160.99 187.131"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "GrenadeLauncherAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-315.141 161.42 187.13"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "GrenadeLauncherAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-311.528 282.86 208.003"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SatchelCharge"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-311.451 287.18 207.973"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ShockLance"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-178.687 292.37 143.004"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "PlasmaAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-188.824 292.25 143.034"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "PlasmaAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-183.975 291.97 143.478"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Plasma"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-183.9 276.41 143.411"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ShieldPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-183.792 142.21 167.683"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "EnergyPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-184.044 147.68 167.712"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ELFGun"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-309.069 142.21 187.769"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AmmoPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-244.826 220.78 290.261"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SniperRifle"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-243.848 221.58 275.095"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-243.865 217.48 275.541"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-243.77 225.43 275.281"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-244.411 202.32 222.581"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ConcussionGrenade"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new InteriorInstance() { + position = "39.62 344.85 78.2101"; + rotation = "0 0 -1 116.883"; + scale = "1 1 1"; + interiorFile = "dtowr1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_Pulse_1"; + locked = "true"; + }; + new StaticShape() { + position = "50.81 343.87 90.21"; + rotation = "0 0 1 154.126"; + scale = "1 1 1"; + nameTag = "South Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "37"; + }; + new StaticShape() { + position = "51.14 343.34 78.21"; + rotation = "0 0 1 152.407"; + scale = "1 1 1"; + nameTag = "South Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "38"; + }; + new StaticShape() { + position = "-452.475 20.12 79.05"; + rotation = "-0 0 -1 32.2679"; + scale = "1 1 1"; + nameTag = "South Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "39"; + }; + new StaticShape() { + position = "-452.103 19.62 91.05"; + rotation = "-0 0 -1 30.5489"; + scale = "1 1 1"; + nameTag = "South Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "40"; + }; + new InteriorInstance() { + position = "-440.871 19.55 79.053"; + rotation = "0 0 1 58.4421"; + scale = "1 1 1"; + interiorFile = "dtowr1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_Pulse_1"; + locked = "true"; + }; + }; + }; + }; + }; + new SimGroup(Ambiance) { + + new TSStatic() { + position = "-239.796 269.418 233.42"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-242.825 269.431 233.42"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-239.798 269.415 234.42"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-242.841 269.442 234.42"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-242.85 269.527 235.42"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable1m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-199.677 219.79 233.373"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + shapeName = "stackable3l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-243.945 176.97 235.52"; + rotation = "0 0 1 186.785"; + scale = "1 1 1"; + shapeName = "stackable1s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-245.999 176.86 233.429"; + rotation = "0 0 1 91.6733"; + scale = "1 1 1"; + shapeName = "stackable2m.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-243.806 176.94 234.523"; + rotation = "0 0 1 181.628"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-242.408 176.85 233.523"; + rotation = "0 0 1 181.628"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-244.437 176.93 233.523"; + rotation = "0 0 1 181.628"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new AudioEmitter() { + position = "-513.517 226.51 179.741"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/rockslide2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "50"; + maxDistance = "3200"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "15000"; + maxLoopGap = "45000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-163.821 543.99 217.496"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/rockslide2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "50"; + maxDistance = "3200"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "15000"; + maxLoopGap = "45000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "255.1 161.44 242.375"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/rockslide2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "50"; + maxDistance = "3200"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "15000"; + maxLoopGap = "45000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "26.53 -163.211 151.691"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/rockslide2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "50"; + maxDistance = "3200"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "15000"; + maxLoopGap = "45000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-239.883 272.25 95.0244"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/drywind.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new ParticleEmissionDummy() { + position = "-244.046 190.464 228.981"; + rotation = "1 0 0 179.518"; + scale = "1 1 1"; + dataBlock = "defaultEmissionDummy"; + emitter = "PlasmaExplosionEmitter"; + velocity = "1"; + locked = "true"; + }; + new ParticleEmissionDummy() { + position = "-244.113 259.999 228.942"; + rotation = "1 0 0 179.518"; + scale = "1 1 1"; + dataBlock = "defaultEmissionDummy"; + emitter = "PlasmaExplosionEmitter"; + velocity = "1"; + locked = "true"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Quagmire.mis b/base/missions/Quagmire.mis new file mode 100644 index 0000000..b4ab430 --- /dev/null +++ b/base/missions/Quagmire.mis @@ -0,0 +1,1073 @@ +// MissionTypes = CTF + +//--- MISSION QUOTE BEGIN --- +//I got a plascannon that says no one's immortal. +// -- Blood Eagle saying +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[CTF]6 flag captures to win +//No vehicle stations +//Water can be used to tactical advantage +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + CTF_timeLimit = "25"; + powerCount = "0"; + musicTrack = "lush"; + cdTrack = "2"; + CTF_scoreLimit = "6"; + + new MissionArea(MissionArea) { + area = "-584 -680 1280 1152"; + flightCeiling = "2000"; + flightCeilingRange = "50"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.600000 0.600000 0.600000 1.000000"; + ambient = "0.200000 0.200000 0.200000 1.000000"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + locked = "true"; + position = "-1024 -1024 0"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/lushdet1"; + terrainFile = "Quagmire.ter"; + squareSize = "8"; + locked = "true"; + visibleDistance = "1200"; + position = "-1024 -1024 0"; + hazeDistance = "250"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "70"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + coverage = "0"; + rotation = "0 0 0 0"; + GraphFile = "Quagmire.nav"; + scale = "1 1 1"; + locked = "true"; + conjoinBowlDev = "20"; + position = "0 0 0 1"; + }; + new SimGroup(ObserverDropPoints) { + powerCount = "0"; + + new Camera() { + position = "286.12 -50.147 121.143"; + rotation = "-0.00663717 0.00410242 0.99997 63.4418"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "492.59 -288.397 129.129"; + rotation = "0 0 -1 59.0145"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-343.65 -279.784 146.457"; + rotation = "0 0 -1 72.7656"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "384.678 -218.148 99.197"; + rotation = "0 0 1 39.5341"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "94.6108 -117.385 88.4598"; + rotation = "0 0 1 218.297"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-346.666 -150.339 102.181"; + rotation = "0.326169 0.0661178 -0.942996 24.2638"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new Sky(Sky) { + position = "-1024 -1024 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "250"; + useSkyTextures = "1"; + SkySolidColor = "0.390000 0.390000 0.390000 0.000000"; + fogDistance = "95"; + fogColor = "0.500000 0.500000 0.500000 1.000000"; + fogVolume1 = "100 60 300"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "Lush_l4.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 -5639490784253845060000000000.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 -5639490784253845060000000000.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 -5639490784253845060000000000.000000"; + locked = "true"; + cloudSpeed0 = "0.000000 0.000000"; + }; + new SimGroup(RandomOrganics) { + powerCount = "0"; + + new SimGroup(Addition1BELgTree16) { + powerCount = "0"; + + new TSStatic() { + position = "289.5 21.5 101.754"; + rotation = "0 0 1 114"; + scale = "1.2 1.2 1.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "741.5 -185.5 140.773"; + rotation = "0 0 1 162.281"; + scale = "1.6 1.6 1.6"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-240.5 -485.5 53.9359"; + rotation = "0 0 1 155"; + scale = "1.5 1.5 1.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-368.5 468.5 51.75"; + rotation = "1 0 0 0"; + scale = "0.7 0.7 0.7"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "473.61 9.02 52.8"; + rotation = "0 0 1 218.043"; + scale = "1.4 1.4 1.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "627.5 -555.5 86.2086"; + rotation = "0 0 1 218"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-255.423 70.8 77.0898"; + rotation = "0 0 -1 113.434"; + scale = "1.2 1.2 1.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition2BELgTree18) { + powerCount = "0"; + + new TSStatic() { + position = "-337.376 -483.645 58.0524"; + rotation = "0 0 -1 103"; + scale = "1.3 1.3 1.3"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "200.5 -734.5 61.2833"; + rotation = "0 0 1 170"; + scale = "1.4 1.4 1.4"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-623.5 -115.5 86.4101"; + rotation = "0 0 1 182"; + scale = "0.7 0.7 0.7"; + shapeName = "borg18.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition3BELgTree19) { + powerCount = "0"; + + new TSStatic() { + position = "-425.5 308.5 89.2988"; + rotation = "0 0 -1 117"; + scale = "1.6 1.6 1.6"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "517.5 -309.5 71.7355"; + rotation = "0 0 1 233"; + scale = "1.4 1.4 1.4"; + shapeName = "borg19.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition4BELgTree19) { + powerCount = "0"; + + new TSStatic() { + position = "278.68 -736.469 104.296"; + rotation = "0 0 1 9.99997"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "198.5 486.5 57.0391"; + rotation = "0 0 1 123"; + scale = "1.2 1.2 1.2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "301.15 -636.277 97.3332"; + rotation = "0 0 1 58"; + scale = "1.6 1.6 1.6"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "623.5 -465.5 88.1801"; + rotation = "0 0 1 28"; + scale = "1.4 1.4 1.4"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-477.5 81.5 108.047"; + rotation = "0 0 1 42"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-87.804 -385.058 54.3848"; + rotation = "0 0 -1 67"; + scale = "1.2 1.2 1.2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-573.5 382.5 90.7579"; + rotation = "0 0 1 168"; + scale = "1.1 1.1 1.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-475.5 268.5 107.35"; + rotation = "0 0 1 109"; + scale = "1.2 1.2 1.2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "19.5 453.5 108.816"; + rotation = "0 0 1 20"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "42.77 -30.878 74.627"; + rotation = "0 0 -1 105.481"; + scale = "0.9 0.9 0.9"; + shapeName = "borg19.dts"; + locked = "true"; + }; + }; + new TSStatic() { + position = "-156.77 -168.705 65.8918"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg20.dts"; + locked = "true"; + }; + new TSStatic() { + position = "108.53 -142.656 64.7273"; + rotation = "0 0 1 50.4203"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-362.622 -17.61 82.6182"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + powerCount = "0"; + + new SimGroup(Team1) { + powerCount = "0"; + + new SimGroup(spawnspheres) { + powerCount = "0"; + + new SpawnSphere() { + position = "283.89 -80.706 77.4959"; + rotation = "0 0 -1 107.143"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "75"; + sphereWeight = "50"; + indoorWeight = "40"; + outdoorWeight = "60"; + locked = "true"; + }; + new SpawnSphere() { + position = "461.8 -288.351 91.1848"; + rotation = "0 0 -1 82.5057"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "75"; + sphereWeight = "50"; + indoorWeight = "30"; + outdoorWeight = "70"; + locked = "true"; + }; + }; + new SimGroup(Base0) { + powerCount = "3"; + + new InteriorInstance() { + position = "415.61 -176.382 77.5472"; + rotation = "0 0 1 67.0908"; + scale = "1 1 1"; + interiorFile = "bbunk9.dif"; + showTerrainInside = "0"; + team = "1"; + locked = "true"; + }; + new Item() { + position = "424.89 -172.8 79.5605"; + rotation = "0 0 1 68.8008"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + originalPosition = "424.89 -172.8 79.5605 0 0 1 1.2008"; + team = "1"; + Target = "33"; + isHome = "1"; + locked = "true"; + }; + new InteriorInstance() { + position = "303.2 -59.322 84.3111"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bbunk1.dif"; + showTerrainInside = "0"; + team = "1"; + locked = "true"; + }; + new InteriorInstance() { + position = "483.1 -299.94 101.715"; + rotation = "0 0 -1 55.004"; + scale = "1 1 1"; + interiorFile = "bbunk2.dif"; + showTerrainInside = "0"; + team = "1"; + locked = "true"; + }; + new InteriorInstance() { + position = "341.493 -179.539 78.7793"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bmisc1.dif"; + showTerrainInside = "0"; + team = "1"; + locked = "true"; + }; + new Turret() { + position = "340.693 -179.482 88.7657"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Point Defense"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "ELFBarrelLarge"; + team = "1"; + Target = "34"; + locked = "true"; + }; + new Turret() { + position = "483.57 -294.958 133.163"; + rotation = "0 0 -1 55.0039"; + scale = "1 1 1"; + nameTag = "Point Defense"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + team = "1"; + Target = "35"; + locked = "true"; + }; + new StaticShape() { + position = "298.14 -64.992 87.1"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Backup"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + team = "1"; + Target = "36"; + locked = "true"; + damageTimeMS = "331888"; + }; + new StaticShape() { + position = "308.302 -68.8173 87.1"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "Backup"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + team = "1"; + Target = "37"; + locked = "true"; + }; + new Item() { + position = "303.02 -76.503 85.6266"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + team = "1"; + Target = "-1"; + locked = "true"; + }; + new StaticShape() { + position = "298.55 -73.081 78.34"; + rotation = "0 0 -1 103.705"; + scale = "1 1 1"; + nameTag = "Backup"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + team = "1"; + Target = "38"; + locked = "true"; + Trigger = "3335"; + }; + new StaticShape() { + position = "307.6 -60.28 78.34"; + rotation = "0 0 1 73.3386"; + scale = "1 1 1"; + nameTag = "Backup"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + team = "1"; + Target = "39"; + locked = "true"; + Trigger = "3337"; + }; + new StaticShape() { + position = "479.93 -295.351 105.551"; + rotation = "0 0 1 33.8045"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + team = "1"; + Target = "40"; + locked = "true"; + }; + new InteriorInstance() { + position = "-304.003 -471.93 48.6877"; + rotation = "-0.789212 0.230771 -0.569112 16.2411"; + scale = "1 1 1"; + interiorFile = "bbunkc.dif"; + showTerrainInside = "0"; + team = "1"; + locked = "true"; + }; + new StaticShape() { + position = "471.04 -305.236 95.21"; + rotation = "0 0 1 216.188"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + team = "1"; + Target = "41"; + locked = "true"; + Trigger = "3341"; + }; + new StaticShape() { + position = "484.26 -286.872 95.21"; + rotation = "0 0 1 34.9504"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + team = "1"; + Target = "42"; + locked = "true"; + Trigger = "3343"; + }; + new InteriorInstance() { + position = "256.04 -572.266 49.8795"; + rotation = "-0.289456 -0.71011 -0.64184 12.7195"; + scale = "1 1 1"; + interiorFile = "bbunk5.dif"; + showTerrainInside = "0"; + team = "1"; + locked = "true"; + }; + new Item() { + position = "475.67 -304.231 120.043"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + team = "1"; + Target = "-1"; + locked = "true"; + }; + new InteriorInstance() { + position = "71.63 -165.891 58.7187"; + rotation = "0.0205555 -0.179078 -0.98362 104.378"; + scale = "1 1 1"; + interiorFile = "btowra.dif"; + showTerrainInside = "0"; + team = "1"; + locked = "true"; + }; + new StaticShape() { + position = "424.88 -172.791 79.58"; + rotation = "0 0 -1 63.0253"; + scale = "1 1 1"; + dataBlock = "InteriorFlagStand"; + lockCount = "0"; + homingCount = "0"; + team = "1"; + Target = "-1"; + locked = "false"; + }; + }; + }; + new SimGroup(Team2) { + powerCount = "0"; + + new SimGroup(spawnspheres) { + powerCount = "0"; + + new SpawnSphere() { + position = "-270.355 7.69 98.5595"; + rotation = "0 0 1 99.6947"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "75"; + sphereWeight = "50"; + indoorWeight = "30"; + outdoorWeight = "70"; + locked = "true"; + }; + new SpawnSphere() { + position = "-303.66 -254.044 118.116"; + rotation = "0 0 1 88.8084"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "75"; + sphereWeight = "50"; + indoorWeight = "35"; + outdoorWeight = "65"; + locked = "true"; + }; + }; + new SimGroup(Base1) { + powerCount = "3"; + + new InteriorInstance() { + position = "-388.74 -84.485 78.444"; + rotation = "0 0 -1 75.0575"; + scale = "1 1 1"; + interiorFile = "bbunk9.dif"; + showTerrainInside = "0"; + team = "2"; + locked = "true"; + }; + new InteriorInstance() { + position = "-316.541 -254.03 121.141"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bbunk1.dif"; + showTerrainInside = "0"; + team = "2"; + locked = "true"; + }; + new InteriorInstance() { + position = "-283.977 18.08 101.25"; + rotation = "0 0 1 123.186"; + scale = "1 1 1"; + interiorFile = "bbunk2.dif"; + showTerrainInside = "0"; + team = "2"; + locked = "true"; + }; + new Turret() { + position = "-278.451 -103.223 73.0707"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "Point Defense"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "ELFBarrelLarge"; + team = "2"; + Target = "43"; + locked = "true"; + }; + new Item() { + position = "-398.223 -81.567 80.4573"; + rotation = "0 0 -1 74.5303"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + originalPosition = "-398.223 -81.567 80.4573 0 0 -1 1.3008"; + team = "2"; + Target = "44"; + isHome = "1"; + locked = "true"; + }; + new InteriorInstance() { + position = "-278.659 -103.327 72.4981"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bplat6.dif"; + showTerrainInside = "0"; + team = "2"; + locked = "true"; + }; + new Turret() { + position = "-283.899 13.04 132.7"; + rotation = "0 0 1 121.467"; + scale = "1 1 1"; + nameTag = "Point Defense"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + team = "2"; + Target = "45"; + locked = "true"; + }; + new StaticShape() { + position = "-285.469 4.09 94.75"; + rotation = "0 0 1 213.323"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + team = "2"; + Target = "46"; + locked = "true"; + Trigger = "3362"; + }; + new StaticShape() { + position = "-271.412 24.96 94.75"; + rotation = "0 0 1 33.2315"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + team = "2"; + Target = "47"; + locked = "true"; + Trigger = "3364"; + }; + new StaticShape() { + position = "-311.49 -255.506 115.15"; + rotation = "0 0 1 71.6197"; + scale = "1 1 1"; + nameTag = "Backup"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + team = "2"; + Target = "48"; + locked = "true"; + Trigger = "3366"; + }; + new StaticShape() { + position = "-278.998 17.0024 105.046"; + rotation = "0 0 1 33.8045"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + team = "2"; + Target = "49"; + locked = "true"; + }; + new StaticShape() { + position = "-321.251 -267.695 115.15"; + rotation = "0 0 -1 104.851"; + scale = "1 1 1"; + nameTag = "Backup"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + team = "2"; + Target = "50"; + locked = "true"; + Trigger = "3369"; + }; + new Item() { + position = "-278.031 22.39 119.829"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + team = "2"; + Target = "-1"; + locked = "true"; + }; + new StaticShape() { + position = "-311.516 -263.542 123.95"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "Backup"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + team = "2"; + Target = "51"; + locked = "true"; + }; + new StaticShape() { + position = "-321.679 -259.526 123.95"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Backup"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + team = "2"; + Target = "52"; + locked = "true"; + }; + new Item() { + position = "-316.676 -251.633 122.177"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + team = "2"; + Target = "-1"; + locked = "true"; + }; + new StaticShape() { + position = "-398.177 -81.628 80.45"; + rotation = "0 0 -1 27.502"; + scale = "1 1 1"; + dataBlock = "InteriorFlagStand"; + lockCount = "0"; + homingCount = "0"; + team = "2"; + Target = "-1"; + locked = "true"; + }; + }; + }; + new SimGroup(team0) { + powerCount = "0"; + }; + }; + new SimGroup(Ambience) { + powerCount = "0"; + + new AudioEmitter() { + position = "52.04 -154.453 74.2276"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/fog.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "100"; + maxDistance = "6400"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "118.77 -562.63 80.2537"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/fog.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "70"; + maxDistance = "4480"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-313.514 -79.817 69.7519"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/frog1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "15"; + maxDistance = "960"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "5000"; + maxLoopGap = "20000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "133.18 -435.037 197.702"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo5.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "20000"; + maxLoopGap = "40000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-313.248 -479.486 69.4709"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo5.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "30000"; + maxLoopGap = "60000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "363.45 -240.11 65.1431"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/frog1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "15"; + maxDistance = "960"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "5000"; + maxLoopGap = "15000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "277.66 -10.46 112.794"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo4.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "20000"; + maxLoopGap = "50000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-364.275 -20.17 95.0531"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo4.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "60000"; + type = "EffectAudioType"; + locked = "true"; + }; + }; + new Precipitation(Precipitation) { + position = "286.12 -50.147 121.143"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Rain"; + percentage = "1"; + color1 = "0.600000 0.600000 0.600000 1.000000"; + color2 = "-1.000000 0.000000 0.000000 1.000000"; + color3 = "-1.000000 0.000000 0.000000 1.000000"; + offsetSpeed = "0.25"; + minVelocity = "1.25"; + maxVelocity = "4"; + maxNumDrops = "2000"; + maxRadius = "80"; + locked = "true"; + }; + new WaterBlock() { + position = "-1024 -1024 45"; + rotation = "1 0 0 0"; + scale = "2048 2048 20"; + liquidType = "StagnantWater"; + density = "1"; + viscosity = "5"; + waveMagnitude = "0.3"; + surfaceTexture = "LiquidTiles/AlgaeWater"; + surfaceOpacity = "0.8"; + envMapTexture = "lush/skies/lushcloud3"; + envMapIntensity = "0.4"; + removeWetEdges = "0"; + locked = "true"; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Rasp.mis b/base/missions/Rasp.mis new file mode 100644 index 0000000..513e53c --- /dev/null +++ b/base/missions/Rasp.mis @@ -0,0 +1,1017 @@ +// MissionTypes = Hunters Bounty DM + +//--- MISSION QUOTE BEGIN --- +//If the red slayer thinks he slays +//Or if the slain thinks he is slain +//They know not well the subtle ways I keep. +// -- Ralph Waldo Emerson +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[Hunters]Nexus is inside underground building +//[DM Bounty]Mission follows standard Rules of Engagement +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + musicTrack = "desert"; + powerCount = "0"; + cdTrack = "6"; + + new MissionArea(MissionArea) { + area = "-744 -680 336 304"; + flightCeiling = "300"; + flightCeilingRange = "20"; + locked = "true"; + }; + new Sky(Sky) { + position = "40 760 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed[0] = "0.000000 0.000400"; + cloudSpeed[1] = "0.000201 0.000101"; + cloudSpeed[2] = "0.000201 0.000000"; + visibleDistance = "550"; + useSkyTextures = "1"; + SkySolidColor = "0.365 0.39 0.42 0.000000"; + fogDistance = "250"; + fogColor = "0.630000 0.550000 0.500000 1.000000"; + fogVolume1 = "0 0 0"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "sky_desert_blue.dml"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.800000 0.800000 0.800000 1.000000"; + ambient = "0.600000 0.600000 0.600000 1.000000"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + locked = "true"; + position = "40 760 0"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/desertdet2"; + terrainFile = "Rasp.ter"; + squareSize = "8"; + emptySquares = "148783 214574 83507 214830 83763"; + locked = "true"; + position = "-1024 -1024 0"; + }; + new NavigationGraph(NavGraph) { + graphFile = "Rasp.nav"; + conjoinAngleDev = "45"; + conjoinBowlDev = "20"; + coverage = "0"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + rotation = "0 0 0 0"; + scale = "1 1 1"; + YDimOverSize = "0"; + locked = "true"; + position = "0 0 0 1"; + XDimOverSize = "0"; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "-605.649 -381.017 135.806"; + rotation = "0.00475689 -0.0714684 0.997432 172.404"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-646.16 -493.429 106.12"; + rotation = "0.00842225 -0.0492278 0.998752 160.607"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-453.807 -608.172 140.086"; + rotation = "0.615879 0.0848723 -0.783256 19.9571"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-601.644 -447.713 58.4272"; + rotation = "-0.0205845 -0.039813 0.998995 234.634"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + + new SimGroup(Team1) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-653.242 -543.124 53.6599"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "10"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "0"; + locked = "true"; + }; + new SpawnSphere() { + position = "-604.294 -495.748 53.3903"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "7"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "0"; + locked = "true"; + }; + new SpawnSphere() { + position = "-604.133 -538.666 51.8405"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "8"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "0"; + locked = "true"; + }; + new SpawnSphere() { + position = "-603.642 -451.062 51.5472"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "8"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "0"; + locked = "true"; + }; + new SpawnSphere() { + position = "-634.352 -450.327 50.9198"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "8"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "0"; + locked = "true"; + }; + new SpawnSphere() { + position = "-642.676 -441.126 82.2364"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "20"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + new SpawnSphere() { + position = "-595.774 -455.836 91.2699"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "20"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + new SpawnSphere() { + position = "-533.324 -581.494 176.538"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "20"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "0"; + locked = "true"; + }; + new SpawnSphere() { + position = "-467.243 -477.134 94.3372"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "30"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + new SpawnSphere() { + position = "-635.232 -497.43 99.617"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "6"; + sphereWeight = "75"; + indoorWeight = "100"; + outdoorWeight = "0"; + locked = "true"; + }; + new SpawnSphere() { + position = "-649.802 -497.234 99.4563"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "6"; + sphereWeight = "75"; + indoorWeight = "100"; + outdoorWeight = "0"; + locked = "true"; + }; + }; + }; + new SimGroup(team0) { + providesPower = "1"; + + new StaticShape() { + position = "-642.231 -524.622 98.1385"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "NexusBase"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + missionTypesList = "Hunters"; + }; + new Trigger(NexusTrigger) { + position = "-674.803 -517.527 97.6378"; + rotation = "1 0 0 0"; + scale = "63.2641 13.054 10"; + dataBlock = "gameTrigger"; + polyhedron = "0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000 -0.0000000 -1.0000000 -0.0000000 -0.0000000 -0.0000000 1.0000000"; + locked = "true"; + missionTypesList = "Hunters"; + }; + new Item() { + position = "-642.231 -524.622 97.8378"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Nexus"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + flashThreadDir = "1"; + locked = "true"; + missionTypesList = "Hunters"; + }; + new StaticShape() { + position = "-642.231 -524.622 105.738"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "NexusCap"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + missionTypesList = "Hunters"; + }; + new InteriorInstance() { + position = "-637.461 -603.222 91.8477"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pbunk5.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory1) { + position = "-631.353 -497.437 110.12"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Loft"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory2) { + position = "-653.419 -497.457 110.127"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "Loft"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory3) { + position = "-638.757 -602.834 93.8429"; + rotation = "0 0 -1 89.3814"; + scale = "1 1 1"; + nameTag = "Outdoor"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory4) { + position = "-642.402 -530.031 110.134"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Hidden Room"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new WayPoint() { + position = "-642.231 -524.622 97.8378"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Main Base"; + team = "0"; + locked = "true"; + missionTypesList = "DM Bounty"; + }; + new StaticShape(Team0StationInventory5) { + position = "-642.397 -466.703 110.135"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Hidden Chute Room"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new WayPoint() { + position = "-642.231 -524.622 97.8378"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Nexus"; + team = "0"; + locked = "true"; + missionTypesList = "Hunters"; + }; + new InteriorInstance() { + position = "-485.706 -537.291 109.598"; + rotation = "0 0 1 213.323"; + scale = "1 1 1"; + interiorFile = "pbunk5.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Item() { + position = "-488.775 -538.235 112.4"; + rotation = "0 0 -1 10.8863"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-485.829 -537.668 112.4"; + rotation = "0 0 -1 10.8863"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-482.883 -537.102 112.4"; + rotation = "0 0 -1 10.8863"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-486.585 -533.74 112.4"; + rotation = "0 0 -1 10.8863"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-485.074 -541.596 112.4"; + rotation = "0 0 -1 10.8863"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-626.866 -539.664 54.7461"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-634.602 -469.342 54.8148"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-602.667 -517.253 54.7262"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-601.99 -469.39 54.778"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-642.35 -488 80.4508"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-639.35 -488 80.4508"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-645.35 -488 80.4508"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + }; + }; + new SimGroup(NonTeamSpecific) { + + new SimGroup(wall1) { + + new InteriorInstance() { + position = "-407.365 -613.784 113.059"; + rotation = "0 1 0 90"; + scale = "1 1 1"; + interiorFile = "pmisc4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-407.365 -597.784 113.059"; + rotation = "0 1 0 90"; + scale = "1 1 1"; + interiorFile = "pmisc4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-407.365 -605.784 113.059"; + rotation = "0 1 0 90"; + scale = "1 1 1"; + interiorFile = "pmisc4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-407.365 -589.784 105.059"; + rotation = "0 1 0 90"; + scale = "1 1 1"; + interiorFile = "pmisc4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-407.365 -597.784 105.059"; + rotation = "0 1 0 90"; + scale = "1 1 1"; + interiorFile = "pmisc4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-407.365 -605.784 105.059"; + rotation = "0 1 0 90"; + scale = "1 1 1"; + interiorFile = "pmisc4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-407.365 -613.784 105.059"; + rotation = "0 1 0 90"; + scale = "1 1 1"; + interiorFile = "pmisc4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-407.365 -589.784 113.059"; + rotation = "0 1 0 90"; + scale = "1 1 1"; + interiorFile = "pmisc4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(Wall2) { + + new InteriorInstance() { + position = "-575.309 -376.022 119.733"; + rotation = "0 1 0 90"; + scale = "1 1 1"; + interiorFile = "pmisc4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-567.309 -376.022 119.733"; + rotation = "0 1 0 90"; + scale = "1 1 1"; + interiorFile = "pmisc4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-575.309 -376.022 111.733"; + rotation = "0 1 0 90"; + scale = "1 1 1"; + interiorFile = "pmisc4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-567.309 -376.022 111.733"; + rotation = "0 1 0 90"; + scale = "1 1 1"; + interiorFile = "pmisc4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-599.047 -375.997 119.779"; + rotation = "0 1 0 90"; + scale = "1 1 1"; + interiorFile = "pmisc4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-591.047 -375.997 119.779"; + rotation = "0 1 0 90"; + scale = "1 1 1"; + interiorFile = "pmisc4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-583.047 -375.997 119.779"; + rotation = "0 1 0 90"; + scale = "1 1 1"; + interiorFile = "pmisc4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-599.047 -375.997 111.779"; + rotation = "0 1 0 90"; + scale = "1 1 1"; + interiorFile = "pmisc4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-591.047 -375.997 111.779"; + rotation = "0 1 0 90"; + scale = "1 1 1"; + interiorFile = "pmisc4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-583.047 -375.997 111.779"; + rotation = "0 1 0 90"; + scale = "1 1 1"; + interiorFile = "pmisc4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(RocksnSpires) { + + new InteriorInstance() { + position = "-612.707 -591.116 82.7529"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pspir1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-738.499 -420.457 97.1362"; + rotation = "0 0 -1 99.6947"; + scale = "2 2 2"; + interiorFile = "pspir1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-639.746 -326.645 99.5683"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-672.411 -541.702 127.961"; + rotation = "0 0 1 49.2744"; + scale = "2 2 2"; + interiorFile = "pspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-527.369 -456.063 97.6523"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pspir3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-642.636 -497.369 70.1328"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + interiorFile = "pbase3.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new InteriorInstance() { + position = "-466.02 -475.281 93.6964"; + rotation = "0 0 -1 25.7831"; + scale = "1 1 1"; + interiorFile = "procka.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-538.154 -677.157 97.0699"; + rotation = "0.0161614 0.00499932 0.999857 34.3821"; + scale = "2.31472 2.56187 1.48225"; + interiorFile = "prock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-525.91 -591.148 84.1504"; + rotation = "0 0 1 140.948"; + scale = "2 2 2"; + interiorFile = "pspir3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-290.588 -542.833 79.1119"; + rotation = "0 0 1 119.175"; + scale = "2 2 2"; + interiorFile = "pspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "49.6789 -653.188 79.3742"; + rotation = "0 0 1 49.2744"; + scale = "2 2 2"; + interiorFile = "pspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-942.232 -109.657 120.495"; + rotation = "0 0 1 42.3988"; + scale = "1 1 1"; + interiorFile = "pspir5.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new InteriorInstance() { + position = "-687.838 -363.362 100.693"; + rotation = "0.612838 -0.499456 0.612351 233.117"; + scale = "1 1 1"; + interiorFile = "prockc.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(RandomOrganics) { + + new SimGroup(Addition1PhoenixPlant1) { + + new TSStatic() { + position = "-787 -522 133.407"; + rotation = "0 0 1 185"; + scale = "0.9 0.9 0.9"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-451 -730 133.446"; + rotation = "0 0 1 55"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-747 -378 88.1485"; + rotation = "0 0 1 82"; + scale = "0.9 0.9 0.9"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-795 -354 87.3867"; + rotation = "0 0 -1 2.9997"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-707 -698 179.883"; + rotation = "0 0 1 160"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-715 -498 133.45"; + rotation = "0 0 1 220"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-795 -362 87.3906"; + rotation = "0 0 1 169"; + scale = "1.3 1.3 1.3"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-803 -546 134.7"; + rotation = "0 0 -1 43.0002"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-611 -634 133.356"; + rotation = "0 0 1 182"; + scale = "0.9 0.9 0.9"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-604.176 -426.144 97.4486"; + rotation = "0.149432 0.00913964 0.98873 173.079"; + scale = "1.3 1.3 1.3"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-651 -394 89.3438"; + rotation = "0 0 1 125"; + scale = "0.9 0.9 0.9"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-419 -410 133.032"; + rotation = "0 0 1 166"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-787 -634 183.024"; + rotation = "0 0 1 58.9997"; + scale = "1.3 1.3 1.3"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-795 -682 183.684"; + rotation = "0 0 1 182"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-707 -538 133.899"; + rotation = "0 0 -1 82"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-747 -650 183.2"; + rotation = "0 0 -1 115"; + scale = "1.3 1.3 1.3"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-707 -482 133.579"; + rotation = "0 0 1 168"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-675 -690 182.668"; + rotation = "0 0 -1 118"; + scale = "1.3 1.3 1.3"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-683 -450 103.215"; + rotation = "0 0 -1 17.9997"; + scale = "1.3 1.3 1.3"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-723 -602 133.473"; + rotation = "0 0 1 225"; + scale = "0.9 0.9 0.9"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-419 -354 136.043"; + rotation = "0 0 -1 19.0001"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-483 -738 133.559"; + rotation = "0 0 1 46"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-403 -650 133.54"; + rotation = "0 0 1 107"; + scale = "1.1 1.1 1.1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-731 -562 133.543"; + rotation = "0 0 1 11"; + scale = "1.2 1.2 1.2"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-571 -490 104.25"; + rotation = "0 0 1 222"; + scale = "1.4 1.4 1.4"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-523 -370 133.918"; + rotation = "0 0 1 28"; + scale = "1.3 1.3 1.3"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-403 -642 133.622"; + rotation = "0 0 -1 41"; + scale = "1.4 1.4 1.4"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-419 -682 130.86"; + rotation = "0 0 1 214"; + scale = "0.8 0.8 0.8"; + shapeName = "porg1.dts"; + locked = "true"; + }; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Recalescence.mis b/base/missions/Recalescence.mis new file mode 100644 index 0000000..9801e14 --- /dev/null +++ b/base/missions/Recalescence.mis @@ -0,0 +1,4610 @@ +// MissionTypes = CTF + +//--- MISSION QUOTE BEGIN --- +//And the fierce thunders roar me their music +//And the winds shriek through the clouds mad, opposing +//And through all the riven skies God's swords clash. +// -- Ezra Pound +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[CTF]3 flag captures to win +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + CTF_scoreLimit = "3"; + musicTrack = "volcanic"; + cdTrack = "3"; + Retrieve_scoreLimit = "5"; + powerCount = "0"; + + new MissionArea(MissionArea) { + area = "-776 -672 1552 1344"; + flightCeiling = "300"; + flightCeilingRange = "20"; + locked = "true"; + }; + new Sky(Sky) { + position = "680 -352 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "700"; + useSkyTextures = "0"; + SkySolidColor = "0.800000 0.360000 0.200000 0.000000"; + fogDistance = "50"; + fogColor = "0.450000 0.300000 0.250000 1.000000"; + fogVolume1 = "750 215 235"; + fogVolume2 = "700 235 245"; + fogVolume3 = "750 245 255"; + materialList = "lava_dark.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 72443192238023397900000.000000"; + cloudSpeed0 = "0.000300 0.000300"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.700000 0.700000 0.700000 1.000000"; + ambient = "0.500000 0.500000 0.500000 1.000000"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + locked = "true"; + position = "680 -352 0"; + }; + new FireballAtmosphere(FireballAtmosphere) { + position = "0 0 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "fireball"; + dropRadius = "600"; + dropsPerMinute = "10"; + minDropAngle = "0"; + maxDropAngle = "10"; + startVelocity = "300"; + dropHeight = "1000"; + dropDir = "0.212 0.212 -0.953998"; + locked = "true"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/lavadet1"; + terrainFile = "Recalescence.ter"; + squareSize = "8"; + emptySquares = "86853 86856 87109 87112 153926 154182 154438 154694 287045 287301 303285 303541 173749 174005 174261 174517 306869 307125"; + locked = "true"; + position = "-1024 -1024 0"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "45"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + XDimOverSize = "0"; + rotation = "0 0 0 0"; + conjoinBowlDev = "20"; + coverage = "0"; + GraphFile = "Recalescence.nav"; + scale = "1 1 1"; + YDimOverSize = "0"; + locked = "true"; + position = "0 0 0 1"; + }; + new SimGroup(Teams) { + + new SimGroup(Team1) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "342.91 463.815 185.198"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "80"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + new SpawnSphere() { + position = "583.478 328.233 211.935"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "25"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new SimGroup(Tower0) { + + new WayPoint() { + position = "326.022 117.278 149.473"; + rotation = "0 0 1 86.5169"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Bridge Tower"; + team = "0"; + locked = "true"; + }; + new StaticShape(Team1generatorLarge1) { + position = "322.603 120.244 139.172"; + rotation = "0 0 1 153.553"; + scale = "1 1 1"; + nameTag = "Bridge Tower"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory1) { + position = "315.703 118.345 127.167"; + rotation = "-0 0 -1 71.6194"; + scale = "1 1 1"; + nameTag = "Bridge Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory2) { + position = "328.065 124.544 127.171"; + rotation = "0 0 1 18.3346"; + scale = "1 1 1"; + nameTag = "Bridge Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Turret(Team1TurretBaseLarge1) { + position = "330.799 103.453 151.26"; + rotation = "0 0 1 153.553"; + scale = "1 1 1"; + nameTag = "Bridge Tower"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "MissileBarrelLarge"; + locked = "true"; + }; + new InteriorInstance() { + position = "326.301 112.697 127.181"; + rotation = "0 0 1 153.553"; + scale = "1 1 1"; + interiorFile = "dtowr1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + }; + new SimGroup(Base0) { + + new InteriorInstance() { + position = "423.854 319.99 127.821"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + interiorFile = "dbase2.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new Item() { + position = "434.058 319.732 223.559"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new StaticShape(Team1generatorLarge2) { + position = "359.354 245.61 124.819"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1generatorLarge3) { + position = "359.242 258.425 124.801"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory3) { + position = "424.043 238.629 139.82"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "South Platform"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory4) { + position = "424.027 406.629 139.82"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "North Alcove"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory5) { + position = "449.34 407.561 124.818"; + rotation = "0 0 1 135"; + scale = "1 1 1"; + nameTag = "North Pillar Room"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory6) { + position = "398.53 231.306 124.819"; + rotation = "-0 0 -1 45"; + scale = "1 1 1"; + nameTag = "South Pillar Room"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory7) { + position = "432.19 249.026 211.819"; + rotation = "-0 0 -1 90"; + scale = "1 1 1"; + nameTag = "South Entrance"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory8) { + position = "447.508 248.974 211.821"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "South Entrance"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory9) { + position = "446.479 390.965 211.82"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "North Entrance"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory10) { + position = "431.192 390.989 211.821"; + rotation = "-0 0 -1 90"; + scale = "1 1 1"; + nameTag = "North Entrance"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory11) { + position = "415.203 319.995 222.814"; + rotation = "-0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Rooftop"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Turret(Team1SentryTurret1) { + position = "439.862 320.02 214.487"; + rotation = "0.0103966 -0.999892 0.0103973 90.0062"; + scale = "1 1 1"; + nameTag = "Main Entrance"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + }; + new Item() { + position = "423.839 319.992 117.438"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "442.906 322.948 117.319"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "442.906 319.948 117.319"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "442.906 316.948 117.319"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item(Team1flag1) { + position = "423.866 319.988 151.834"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + missionTypesList = "CTF"; + locked = "true"; + }; + new StaticShape() { + position = "580.177 326.571 196.289"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + scoutVehicle = "Removed"; + AssaultVehicle = "Removed"; + mobileBaseVehicle = "Removed"; + locked = "true"; + }; + new InteriorInstance() { + position = "341.359 395.747 206.31"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dmisc1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Turret(Team1TurretBaseLarge2) { + position = "341.789 395.84 216.312"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Compound"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new Turret(Team1TurretBaseLarge3) { + position = "538.761 266.044 247.277"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Vehicle Pad"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new InteriorInstance() { + position = "538.668 266.474 237.275"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + interiorFile = "dmisc1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "417.671 293.072 135.847"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + dataBlock = "Banner_Strength"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "430.111 293.072 135.847"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + dataBlock = "Banner_Strength"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-448.091 -269.207 128.214"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Banner_Strength"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-441.607 -205.283 122.823"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + dataBlock = "Banner_Strength"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-448.097 -322.783 128.194"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + dataBlock = "Banner_Unity"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-441.743 -385.722 123.598"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Banner_Unity"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-435.567 -322.783 128.194"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + dataBlock = "Banner_Unity"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-468.642 -289.749 136.22"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + dataBlock = "Banner_Honor"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-468.642 -302.259 136.2"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + dataBlock = "Banner_Honor"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-447.647 -254.18 134.856"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Banner_Strength"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-436.018 -336.796 134.846"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + dataBlock = "Banner_Unity"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "417.619 346.783 136.26"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Banner_Unity"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "430.099 346.783 136.26"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Banner_Unity"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "423.859 409.699 132.682"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + dataBlock = "Banner_Unity"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "429.663 360.772 142.833"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Banner_Unity"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "438.658 375.204 180.258"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + dataBlock = "Banner_Unity"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "423.714 229.273 132.562"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Banner_Strength"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "429.671 278.21 142.791"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + dataBlock = "Banner_Strength"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "439.763 264.779 180.25"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Banner_Strength"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "418.001 278.21 142.791"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + dataBlock = "Banner_Strength"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "417.993 360.772 142.833"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Banner_Unity"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "450.646 313.703 144.229"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + dataBlock = "Banner_Honor"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "450.646 326.173 144.229"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + dataBlock = "Banner_Honor"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(outerTurrets0) { + providesPower = "1"; + + new SimGroup(turret0A) { + + new Turret(Team1TurretBaseLarge4) { + position = "564.197 -458.367 141.491"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Range"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "AABarrelLarge"; + locked = "true"; + }; + new InteriorInstance() { + position = "564.278 -458.005 139.49"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dplat1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(turret0B) { + + new Turret(Team1TurretBaseLarge5) { + position = "-126.36 288.14 162.006"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Range"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "AABarrelLarge"; + locked = "true"; + }; + new InteriorInstance() { + position = "-125.998 288.059 160.005"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + interiorFile = "dplat1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + }; + new SimGroup(AIObjectives) { + + new AIObjective(AIORepairObject) { + position = "322.009 121.424 140.677"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team1generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3330"; + location = "322.009 121.424 140.677"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "322.009 121.424 140.677"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team1generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3330"; + location = "322.009 121.424 140.677"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "315.703 118.345 128.733"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3331"; + location = "315.703 118.345 128.733"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "328.065 124.544 128.737"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3333"; + location = "328.065 124.544 128.737"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "325.515 114.332 183.071"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team1TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3335"; + location = "325.515 114.332 183.071"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "359.36 244.289 126.324"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team1generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3340"; + location = "359.36 244.289 126.324"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "359.36 244.289 126.324"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team1generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3340"; + location = "359.36 244.289 126.324"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "359.236 259.746 126.306"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team1generatorLarge3"; + targetClientId = "-1"; + targetObjectId = "3341"; + location = "359.236 259.746 126.306"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "359.236 259.746 126.306"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team1generatorLarge3"; + targetClientId = "-1"; + targetObjectId = "3341"; + location = "359.236 259.746 126.306"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "424.043 238.629 141.386"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3342"; + location = "424.043 238.629 141.386"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "424.027 406.629 141.386"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3344"; + location = "424.027 406.629 141.386"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "449.34 407.561 126.384"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3346"; + location = "449.34 407.561 126.384"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "398.53 231.306 126.385"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory6"; + targetClientId = "-1"; + targetObjectId = "3348"; + location = "398.53 231.306 126.385"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "432.19 249.026 213.385"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory7"; + targetClientId = "-1"; + targetObjectId = "3350"; + location = "432.19 249.026 213.385"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "447.508 248.974 213.387"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory8"; + targetClientId = "-1"; + targetObjectId = "3352"; + location = "447.508 248.974 213.387"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "446.479 390.965 213.386"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory9"; + targetClientId = "-1"; + targetObjectId = "3354"; + location = "446.479 390.965 213.386"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "431.192 390.989 213.387"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory10"; + targetClientId = "-1"; + targetObjectId = "3356"; + location = "431.192 390.989 213.387"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "415.203 319.995 224.38"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory11"; + targetClientId = "-1"; + targetObjectId = "3358"; + location = "415.203 319.995 224.38"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "439.542 319.994 215.717"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SentryTurret"; + targetObject = "Team1SentryTurret1"; + targetClientId = "-1"; + targetObjectId = "3360"; + location = "439.542 319.994 215.717"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "423.866 319.988 153.469"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend our flag"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3365"; + location = "423.866 319.988 153.469"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + chat = "ChatSelfDefendFlag DefendBase"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackPlayer) { + position = "423.866 319.988 153.469"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Kill the enemy flag carrier"; + mode = "FlagCarrier"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3365"; + location = "423.866 319.988 153.469"; + weightLevel1 = "4800"; + weightLevel2 = "3000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergySniper"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "423.866 319.988 153.469"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Return our flag"; + mode = "FlagDropped"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3365"; + location = "423.866 319.988 153.469"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "341.261 395.84 218.213"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team1TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3370"; + location = "341.261 395.84 218.213"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "538.761 266.572 249.178"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team1TurretBaseLarge3"; + targetClientId = "-1"; + targetObjectId = "3371"; + location = "538.761 266.572 249.178"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "564.197 -457.839 143.392"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team1TurretBaseLarge4"; + targetClientId = "-1"; + targetObjectId = "3400"; + location = "564.197 -457.839 143.392"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "531.44 -472.082 23.5592"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team1generatorLarge4"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "531.44 -472.082 23.5592"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "531.44 -472.082 23.5592"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team1generatorLarge4"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "531.44 -472.082 23.5592"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-125.832 288.14 163.907"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team1TurretBaseLarge5"; + targetClientId = "-1"; + targetObjectId = "3403"; + location = "-125.832 288.14 163.907"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-217.825 -376.141 162.961"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team2generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3465"; + location = "-217.825 -376.141 162.961"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-215.134 -382.623 151.017"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3466"; + location = "-215.134 -382.623 151.017"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-220.571 -369.907 151.021"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3468"; + location = "-220.571 -369.907 151.021"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "-210.533 -373.073 205.355"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3470"; + location = "-210.533 -373.073 205.355"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-377.356 -220.299 118.301"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team2generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3474"; + location = "-377.356 -220.299 118.301"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-377.232 -235.756 118.283"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team2generatorLarge3"; + targetClientId = "-1"; + targetObjectId = "3475"; + location = "-377.232 -235.756 118.283"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-442.039 -214.639 133.363"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3476"; + location = "-442.039 -214.639 133.363"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-442.023 -382.639 133.363"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3478"; + location = "-442.023 -382.639 133.363"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-467.336 -383.571 118.361"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3480"; + location = "-467.336 -383.571 118.361"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-416.526 -207.316 118.362"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory6"; + targetClientId = "-1"; + targetObjectId = "3482"; + location = "-416.526 -207.316 118.362"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-450.186 -225.036 205.362"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory7"; + targetClientId = "-1"; + targetObjectId = "3484"; + location = "-450.186 -225.036 205.362"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-465.504 -224.984 205.364"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory8"; + targetClientId = "-1"; + targetObjectId = "3486"; + location = "-465.504 -224.984 205.364"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-464.475 -366.975 205.363"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory9"; + targetClientId = "-1"; + targetObjectId = "3488"; + location = "-464.475 -366.975 205.363"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-449.188 -366.999 205.364"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory10"; + targetClientId = "-1"; + targetObjectId = "3490"; + location = "-449.188 -366.999 205.364"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-433.199 -296.005 216.357"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory11"; + targetClientId = "-1"; + targetObjectId = "3492"; + location = "-433.199 -296.005 216.357"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "-457.538 -296.004 207.694"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the SentryTurret"; + targetObject = "Team2SentryTurret1"; + targetClientId = "-1"; + targetObjectId = "3494"; + location = "-457.538 -296.004 207.694"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "-441.862 -295.998 145.446"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the enemy flag"; + mode = "FlagGrab"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3499"; + location = "-441.862 -295.998 145.446"; + weightLevel1 = "3850"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "-441.862 -295.998 145.446"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the flag!"; + mode = "FlagCapture"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3499"; + location = "-441.862 -295.998 145.446"; + weightLevel1 = "5000"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "-441.862 -295.998 145.446"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the dropped enemy flag"; + mode = "FlagDropped"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3499"; + location = "-441.862 -295.998 145.446"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "-366.164 -407.872 221.397"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3504"; + location = "-366.164 -407.872 221.397"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "-521.981 -366.913 216.864"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge3"; + targetClientId = "-1"; + targetObjectId = "3506"; + location = "-521.981 -366.913 216.864"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "408.605 -506.112 132.412"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge4"; + targetClientId = "-1"; + targetObjectId = "3517"; + location = "408.605 -506.112 132.412"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "508.732 -497.768 31.2799"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team2generatorLarge4"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "508.732 -497.768 31.2799"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "-483.736 281.906 213.98"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge5"; + targetClientId = "-1"; + targetObjectId = "3520"; + location = "-483.736 281.906 213.98"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + }; + new InteriorInstance() { + position = "570.078 326.716 196.589"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + interiorFile = "dvpad.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(Team2) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-432.055 -486.089 175.021"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "80"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + new SpawnSphere() { + position = "-534.877 -306.228 208.032"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "25"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new SimGroup(Tower1) { + + new WayPoint() { + position = "-213.443 -372.387 171.757"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Bridge Tower"; + team = "0"; + locked = "true"; + }; + new StaticShape(Team2generatorLarge1) { + position = "-216.611 -375.62 161.456"; + rotation = "0 0 1 67.0361"; + scale = "1 1 1"; + nameTag = "Bridge Tower"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory1) { + position = "-215.134 -382.623 149.451"; + rotation = "0 0 1 201.864"; + scale = "1 1 1"; + nameTag = "Bridge Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory2) { + position = "-220.571 -369.907 149.455"; + rotation = "0 0 -1 68.182"; + scale = "1 1 1"; + nameTag = "Bridge Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Turret(Team2TurretBaseLarge1) { + position = "-199.334 -368.375 173.549"; + rotation = "0 0 1 67.0361"; + scale = "1 1 1"; + nameTag = "Bridge Tower"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "MissileBarrelLarge"; + locked = "true"; + }; + new InteriorInstance() { + position = "-208.853 -372.387 149.465"; + rotation = "0 0 1 67.036"; + scale = "1 1 1"; + interiorFile = "dtowr1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + }; + new SimGroup(Base1) { + + new InteriorInstance() { + position = "-441.85 -296 119.798"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + interiorFile = "dbase2.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape(Team2generatorLarge2) { + position = "-377.35 -221.62 116.796"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2generatorLarge3) { + position = "-377.238 -234.435 116.778"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory3) { + position = "-442.039 -214.639 131.797"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "North Platform"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory4) { + position = "-442.023 -382.639 131.797"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "South Platform"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory5) { + position = "-467.336 -383.571 116.795"; + rotation = "0 0 -1 45"; + scale = "1 1 1"; + nameTag = "South Pillar Room"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory6) { + position = "-416.526 -207.316 116.796"; + rotation = "0 0 1 135"; + scale = "1 1 1"; + nameTag = "North Pillar Room"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory7) { + position = "-450.186 -225.036 203.796"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "North Entrance"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory8) { + position = "-465.504 -224.984 203.798"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "North Entrance"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory9) { + position = "-464.475 -366.975 203.797"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "South Entrance"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory10) { + position = "-449.188 -366.999 203.798"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "South Entrance"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory11) { + position = "-433.199 -296.005 214.791"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Rooftop"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Turret(Team2SentryTurret1) { + position = "-457.858 -296.034 206.464"; + rotation = "-0.707087 -0.0073527 0.707088 180.843"; + scale = "1 1 1"; + nameTag = "Main Entrance"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + }; + new Item() { + position = "-441.835 -296.002 109.415"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-460.902 -298.958 109.296"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-460.902 -295.958 109.296"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-460.902 -292.958 109.296"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item(Team2flag1) { + position = "-441.862 -295.998 143.811"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + missionTypesList = "CTF"; + locked = "true"; + }; + new Item() { + position = "-452.054 -295.742 215.536"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-542.853 -290.947 182.1"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + scoutVehicle = "Removed"; + AssaultVehicle = "Removed"; + mobileBaseVehicle = "Removed"; + locked = "true"; + }; + new Turret(Team2TurretBaseLarge2) { + position = "-365.636 -407.872 219.496"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Compound"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new InteriorInstance() { + position = "-366.066 -407.965 209.494"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dmisc1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Turret(Team2TurretBaseLarge3) { + position = "-521.981 -367.441 214.963"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Vehicle Pad"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new InteriorInstance() { + position = "-522.074 -367.011 204.961"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + interiorFile = "dmisc1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-435.591 -269.207 128.214"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Banner_Strength"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-457.092 -351.214 172.207"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Banner_Unity"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-457.783 -240.782 172.233"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + dataBlock = "Banner_Strength"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-435.987 -254.18 134.856"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Banner_Strength"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-447.677 -336.792 134.846"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + dataBlock = "Banner_Unity"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(outerTurrets1) { + providesPower = "1"; + + new SimGroup(turret1A) { + + new InteriorInstance() { + position = "408.854 -506.368 128.514"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dplat1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Turret(Team2TurretBaseLarge4) { + position = "409.133 -506.112 130.511"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Range"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "AABarrelLarge"; + locked = "true"; + }; + }; + new SimGroup(turret1B) { + + new InteriorInstance() { + position = "-483.48 282.155 210.082"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + interiorFile = "dplat1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Turret(Team2TurretBaseLarge5) { + position = "-483.736 282.434 212.079"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Range"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "AABarrelLarge"; + locked = "true"; + }; + }; + }; + new SimGroup(AIObjectives) { + + new AIObjective(AIOAttackObject) { + position = "322.009 121.424 140.677"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team1generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3330"; + location = "322.009 121.424 140.677"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "315.703 118.345 128.733"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3331"; + location = "315.703 118.345 128.733"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "328.065 124.544 128.737"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3333"; + location = "328.065 124.544 128.737"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "325.515 114.332 183.071"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team1TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3335"; + location = "325.515 114.332 183.071"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "359.36 244.289 126.324"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team1generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3340"; + location = "359.36 244.289 126.324"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "359.236 259.746 126.306"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team1generatorLarge3"; + targetClientId = "-1"; + targetObjectId = "3341"; + location = "359.236 259.746 126.306"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "424.043 238.629 141.386"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3342"; + location = "424.043 238.629 141.386"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "424.027 406.629 141.386"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3344"; + location = "424.027 406.629 141.386"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "449.34 407.561 126.384"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3346"; + location = "449.34 407.561 126.384"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "398.53 231.306 126.385"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory6"; + targetClientId = "-1"; + targetObjectId = "3348"; + location = "398.53 231.306 126.385"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "432.19 249.026 213.385"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory7"; + targetClientId = "-1"; + targetObjectId = "3350"; + location = "432.19 249.026 213.385"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "447.508 248.974 213.387"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory8"; + targetClientId = "-1"; + targetObjectId = "3352"; + location = "447.508 248.974 213.387"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "446.479 390.965 213.386"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory9"; + targetClientId = "-1"; + targetObjectId = "3354"; + location = "446.479 390.965 213.386"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "431.192 390.989 213.387"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory10"; + targetClientId = "-1"; + targetObjectId = "3356"; + location = "431.192 390.989 213.387"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "415.203 319.995 224.38"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory11"; + targetClientId = "-1"; + targetObjectId = "3358"; + location = "415.203 319.995 224.38"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "439.542 319.994 215.717"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the SentryTurret"; + targetObject = "Team1SentryTurret1"; + targetClientId = "-1"; + targetObjectId = "3360"; + location = "439.542 319.994 215.717"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "423.866 319.988 153.469"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the enemy flag"; + mode = "FlagGrab"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3365"; + location = "423.866 319.988 153.469"; + weightLevel1 = "3850"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "423.866 319.988 153.469"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the flag!"; + mode = "FlagCapture"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3365"; + location = "423.866 319.988 153.469"; + weightLevel1 = "5000"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "423.866 319.988 153.469"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the dropped enemy flag"; + mode = "FlagDropped"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3365"; + location = "423.866 319.988 153.469"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "341.261 395.84 218.213"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team1TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3370"; + location = "341.261 395.84 218.213"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "538.761 266.572 249.178"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team1TurretBaseLarge3"; + targetClientId = "-1"; + targetObjectId = "3371"; + location = "538.761 266.572 249.178"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "564.197 -457.839 143.392"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team1TurretBaseLarge4"; + targetClientId = "-1"; + targetObjectId = "3400"; + location = "564.197 -457.839 143.392"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "531.44 -472.082 23.5592"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team1generatorLarge4"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "531.44 -472.082 23.5592"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "-125.832 288.14 163.907"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team1TurretBaseLarge5"; + targetClientId = "-1"; + targetObjectId = "3403"; + location = "-125.832 288.14 163.907"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-217.825 -376.141 162.961"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team2generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3465"; + location = "-217.825 -376.141 162.961"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "-217.825 -376.141 162.961"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team2generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3465"; + location = "-217.825 -376.141 162.961"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-215.134 -382.623 151.017"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3466"; + location = "-215.134 -382.623 151.017"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-220.571 -369.907 151.021"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3468"; + location = "-220.571 -369.907 151.021"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-210.533 -373.073 205.355"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3470"; + location = "-210.533 -373.073 205.355"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-377.356 -220.299 118.301"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team2generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3474"; + location = "-377.356 -220.299 118.301"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "-377.356 -220.299 118.301"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team2generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3474"; + location = "-377.356 -220.299 118.301"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-377.232 -235.756 118.283"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team2generatorLarge3"; + targetClientId = "-1"; + targetObjectId = "3475"; + location = "-377.232 -235.756 118.283"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "-377.232 -235.756 118.283"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team2generatorLarge3"; + targetClientId = "-1"; + targetObjectId = "3475"; + location = "-377.232 -235.756 118.283"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-442.039 -214.639 133.363"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3476"; + location = "-442.039 -214.639 133.363"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-442.023 -382.639 133.363"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3478"; + location = "-442.023 -382.639 133.363"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-467.336 -383.571 118.361"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3480"; + location = "-467.336 -383.571 118.361"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-416.526 -207.316 118.362"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory6"; + targetClientId = "-1"; + targetObjectId = "3482"; + location = "-416.526 -207.316 118.362"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-450.186 -225.036 205.362"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory7"; + targetClientId = "-1"; + targetObjectId = "3484"; + location = "-450.186 -225.036 205.362"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-465.504 -224.984 205.364"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory8"; + targetClientId = "-1"; + targetObjectId = "3486"; + location = "-465.504 -224.984 205.364"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-464.475 -366.975 205.363"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory9"; + targetClientId = "-1"; + targetObjectId = "3488"; + location = "-464.475 -366.975 205.363"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-449.188 -366.999 205.364"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory10"; + targetClientId = "-1"; + targetObjectId = "3490"; + location = "-449.188 -366.999 205.364"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-433.199 -296.005 216.357"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory11"; + targetClientId = "-1"; + targetObjectId = "3492"; + location = "-433.199 -296.005 216.357"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-457.538 -296.004 207.694"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SentryTurret"; + targetObject = "Team2SentryTurret1"; + targetClientId = "-1"; + targetObjectId = "3494"; + location = "-457.538 -296.004 207.694"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "-441.862 -295.998 145.446"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend our flag"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3499"; + location = "-441.862 -295.998 145.446"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + chat = "ChatSelfDefendFlag DefendBase"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackPlayer) { + position = "-441.862 -295.998 145.446"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Kill the enemy flag carrier"; + mode = "FlagCarrier"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3499"; + location = "-441.862 -295.998 145.446"; + weightLevel1 = "4800"; + weightLevel2 = "3000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergySniper"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "-441.862 -295.998 145.446"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Return our flag"; + mode = "FlagDropped"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3499"; + location = "-441.862 -295.998 145.446"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-366.164 -407.872 221.397"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3504"; + location = "-366.164 -407.872 221.397"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-521.981 -366.913 216.864"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge3"; + targetClientId = "-1"; + targetObjectId = "3506"; + location = "-521.981 -366.913 216.864"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "408.605 -506.112 132.412"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge4"; + targetClientId = "-1"; + targetObjectId = "3517"; + location = "408.605 -506.112 132.412"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "508.732 -497.768 31.2799"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team2generatorLarge4"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "508.732 -497.768 31.2799"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "508.732 -497.768 31.2799"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team2generatorLarge4"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "508.732 -497.768 31.2799"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-483.736 281.906 213.98"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge5"; + targetClientId = "-1"; + targetObjectId = "3520"; + location = "-483.736 281.906 213.98"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + }; + new InteriorInstance() { + position = "-542.922 -297.713 182.4"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + interiorFile = "dvpad.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(Team0) { + + new Item() { + position = "-310.664 236.155 201.932"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "534.476 -544.388 128.613"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new SimGroup(AIObjectives) { + }; + new StaticShape(RetrieveFlagStandSource) { + position = "145.413 -165.995 184.896"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ExteriorFlagStand"; + lockCount = "0"; + homingCount = "0"; + missionTypesList = "Retrieve"; + name = "Retrieval Point"; + locked = "true"; + }; + }; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "-67.5707 -314.903 222.032"; + rotation = "0.034307 0.0349722 -0.998799 91.1691"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "21.7433 33.4874 179.322"; + rotation = "0.0231395 -0.0149954 0.99962 65.91"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "558.209 -2.8835 205.361"; + rotation = "0.0135575 0.0199968 -0.999708 111.742"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-271.311 57.2777 161.655"; + rotation = "0.0182628 -0.0549631 0.998321 143.297"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Bridge1) { + + new InteriorInstance() { + position = "380.819 22.5013 104.757"; + rotation = "-0.0488905 -0.0648766 0.996695 106.179"; + scale = "1 1 1"; + interiorFile = "dbrdg10.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "363.181 -38.5013 96.7812"; + rotation = "-0.0488905 -0.0648766 0.996695 106.179"; + scale = "1 1 1"; + interiorFile = "dbrdg10.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(Bridge2) { + + new InteriorInstance() { + position = "-126.603 -169.439 101.94"; + rotation = "0.0947935 -0.0966317 -0.990796 57.3507"; + scale = "1 1 1"; + interiorFile = "dbrdg10.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-161.397 -222.561 109.916"; + rotation = "0.0947935 -0.0966317 -0.990796 57.3507"; + scale = "1 1 1"; + interiorFile = "dbrdg10.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new InteriorInstance() { + position = "534.295 -544.638 126.026"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dplat1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-310.659 236.109 199.668"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dplat1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new SimGroup(AudioBubbling) { + + new AudioEmitter() { + position = "-127.271 -599.191 73.8282"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-0.1303 -379.435 82.0205"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "157.388 -327.829 79.6444"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-78.2492 -230.919 76.0957"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-167.821 -165.86 68.4118"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-341.266 -11.3738 94.1502"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-482.129 113.983 67.6711"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-141.102 10.5968 55.5102"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "5"; + maxDistance = "320"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "50.562 143.443 71.5025"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "180.524 88.5898 82.5195"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "10"; + maxDistance = "640"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "270.612 38.3664 81.4305"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "10"; + maxDistance = "640"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "359.701 -41.4356 78.8128"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "10"; + maxDistance = "640"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "415.911 7.8789 77.0379"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "10"; + maxDistance = "640"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "527.198 -5.8731 76.6843"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "677.579 3.7397 75.6718"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "779.934 -76.4898 81.8745"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "664.153 -199.782 72.5073"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "695.044 -307.339 76.7616"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "503.624 -202.354 71.3533"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "404.98 -350.207 76.25"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "236.584 -422.991 74.9242"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "257.65 -611.217 79.5614"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "99.294 34.1552 66.3693"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "10"; + maxDistance = "640"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "416.214 -61.4063 71.6195"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahostile.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "5"; + maxDistance = "320"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + }; + new AudioEmitter() { + position = "788.243 -120.742 93.2821"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/drywind2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.3"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new Item() { + position = "-222.133 -378.01 157.186"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "319.874 125.674 134.693"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Respite.mis b/base/missions/Respite.mis new file mode 100644 index 0000000..632da38 --- /dev/null +++ b/base/missions/Respite.mis @@ -0,0 +1,1529 @@ +// MissionTypes = Siege +// DisplayName = Respite + +//--- MISSION QUOTE BEGIN --- +//Let all the Tribes of Man hear me: none shall escape the Bright Lord's mercy. +// -- Anton Malderi yl-Harabec, first anointed Phoenix Prime of the Harbingers, 3941 CE +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//Inventory stations available to both teams +//Attacking team must kill north and south generators to reach control switch +//Placing turrets critical for defenders +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + cdTrack = "6"; + powerCount = "0"; + musicTrack = "desert"; + Siege_timeLimit = "20"; + + new MissionArea(MissionArea) { + area = "-608 -440 1040 1040"; + flightCeiling = "2000"; + flightCeilingRange = "50"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.600000 0.600000 0.600000 1.000000"; + ambient = "0.200000 0.200000 0.200000 1.000000"; + scale = "1 1 1"; + position = "-1680 -1880 0"; + rotation = "1 0 0 0"; + locked = "true"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/desertdet1"; + terrainFile = "Respite.ter"; + squareSize = "8"; + emptySquares = "359010"; + hazeDistance = "250"; + visibleDistance = "1200"; + position = "-1024 -1024 0"; + locked = "true"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "45"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + scale = "1 1 1"; + conjoinBowlDev = "20"; + GraphFile = "Respite.nav"; + position = "0 0 0 1"; + coverage = "0"; + rotation = "0 0 0 0"; + XDimOverSize = "0"; + YDimOverSize = "0"; + locked = "true"; + }; + new SimGroup(Teams) { + powerCount = "0"; + + new SimGroup(Team1) { + powerCount = "0"; + + new SimGroup(spawnspheres) { + powerCount = "0"; + + new SpawnSphere() { + position = "-428.893 446.853 123.677"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "60"; + sphereWeight = "100"; + indoorWeight = "90"; + outdoorWeight = "10"; + locked = "true"; + }; + }; + new SimGroup(Base1) { + powerCount = "1"; + providesPower = "1"; + + new ForceFieldBare() { + position = "-420.839 433.798 126.019"; + rotation = "1 0 0 0"; + scale = "0.772095 6.3679 5.62782"; + dataBlock = "defaultTeamSlowFieldBare"; + Target = "33"; + team = "1"; + locked = "true"; + }; + new ForceFieldBare() { + position = "-440.609 434.035 125.961"; + rotation = "1 0 0 0"; + scale = "1 6.3679 5.62782"; + dataBlock = "defaultTeamSlowFieldBare"; + Target = "34"; + team = "1"; + locked = "true"; + }; + new ForceFieldBare() { + position = "-433.416 444.271 108"; + rotation = "1 0 0 0"; + scale = "6.1382 0.587158 13.1878"; + dataBlock = "defaultTeamSlowFieldBare"; + Target = "35"; + team = "1"; + locked = "true"; + }; + new InteriorInstance() { + position = "-430.353 436.067 107.119"; + rotation = "0 0 1 180.091"; + scale = "1 1 1"; + interiorFile = "ptowr4.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_1"; + team = "1"; + locked = "true"; + }; + new StaticShape(Team1StationInventory8) { + position = "-424.242 436.76 108.1"; + rotation = "0 0 1 89.564"; + scale = "1 1 1"; + nameTag = "Assault"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "36"; + team = "1"; + Trigger = "6332"; + locked = "true"; + }; + new StaticShape(Team1StationInventory7) { + position = "-436.838 436.903 108.1"; + rotation = "-0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Assault"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "37"; + team = "1"; + Trigger = "6334"; + locked = "true"; + }; + new Item() { + position = "-436.606 441.699 134.933"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + team = "1"; + locked = "true"; + }; + new Turret() { + position = "-427.346 437.755 151.05"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + Target = "38"; + team = "1"; + originalBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new Turret() { + position = "-433.407 435.186 151.05"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + Target = "39"; + team = "1"; + originalBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + }; + new SimGroup(AIObjectives) { + powerCount = "0"; + + new AIObjective(AIOAttackObject) { + position = "-61.3335 -115.982 128.367"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory3"; + targetClientId = "-1"; + targetObjectId = "6367"; + location = "-61.3335 -115.982 128.367"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "-66.0305 -111.598 137.022"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team2generatorLarge3"; + targetClientId = "-1"; + targetObjectId = "6366"; + location = "-66.0305 -111.598 137.022"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "-69.5116 -106.377 128.364"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory4"; + targetClientId = "-1"; + targetObjectId = "6369"; + location = "-69.5116 -106.377 128.364"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIOTouchObject) { + position = "-202.729 -45.0803 99.9606"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the Team2FlipFlop1"; + mode = "TouchFlipFlop"; + targetObject = "Team2FlipFlop1"; + targetClientId = "-1"; + targetObjectId = "6354"; + location = "-202.729 -45.0803 99.9606"; + weightLevel1 = "3850"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "Light EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "-103.341 25.4572 144.392"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team2generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "6357"; + location = "-103.341 25.4572 144.392"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "-115.004 27.3879 134.436"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory1"; + targetClientId = "-1"; + targetObjectId = "6358"; + location = "-115.004 27.3879 134.436"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIOAttackObject) { + position = "-90.4107 27.457 134.412"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory2"; + targetClientId = "-1"; + targetObjectId = "6360"; + location = "-90.4107 27.457 134.412"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "1"; + }; + }; + }; + new SimGroup(Team2) { + powerCount = "0"; + + new SimGroup(spawnspheres) { + powerCount = "0"; + + new SpawnSphere() { + position = "-114.601 -61.0651 119.369"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new SimGroup(Base0) { + powerCount = "0"; + + new SimGroup(ObjAlpha) { + powerCount = "1"; + + new InteriorInstance() { + position = "-202.509 -44.8018 107.6"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pbunk1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_1"; + team = "2"; + locked = "true"; + }; + new Item() { + position = "-209.9 -44.7356 105.823"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + Target = "-1"; + team = "2"; + locked = "true"; + }; + new StaticShape(Team2generatorLarge1) { + position = "-208.471 -50.5374 91.9001"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "East Stronghold"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + name = "East Bunker Generator"; + Target = "40"; + team = "2"; + scoreValue = "5"; + locked = "true"; + }; + new StaticShape(Team2FlipFlop1) { + position = "-202.729 -45.0803 97.5"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Control Switch"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + Target = "41"; + team = "2"; + Projector = "0"; + locked = "true"; + }; + }; + new SimGroup(ObjBeta) { + powerCount = "1"; + + new InteriorInstance() { + position = "-102.692 20.9235 139.043"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bbunk2.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + team = "2"; + locked = "true"; + }; + new StaticShape(Team2generatorLarge2) { + position = "-101.402 26.1234 142.949"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "South Stronghold"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + name = "South Bunker Generator"; + Target = "42"; + team = "2"; + scoreValue = "5"; + locked = "true"; + }; + new StaticShape(Team2StationInventory1) { + position = "-115.004 27.3879 132.533"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "South Stronghold"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "43"; + team = "2"; + Trigger = "6359"; + locked = "true"; + }; + new StaticShape(Team2StationInventory2) { + position = "-90.2866 27.4388 132.533"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "South Stronghold"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "44"; + team = "2"; + Trigger = "6361"; + locked = "true"; + }; + new ForceFieldBare() { + position = "-211.684 -46.9191 97.4984"; + rotation = "1 0 0 0"; + scale = "1 4.49667 6.22947"; + dataBlock = "defaultTeamSlowFieldBare"; + Target = "45"; + team = "2"; + locked = "true"; + }; + }; + new SimGroup(ObjLambda) { + powerCount = "1"; + + new InteriorInstance() { + position = "-58.1054 -111.149 132.645"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "bbunk1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + team = "2"; + locked = "true"; + }; + new StaticShape(Team2generatorLarge3) { + position = "-63.8819 -111.35 135.4"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "North Stronghold"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + name = "North Bunker Generator"; + Target = "46"; + team = "2"; + scoreValue = "5"; + locked = "true"; + }; + new StaticShape(Team2StationInventory3) { + position = "-61.3169 -115.977 126.67"; + rotation = "0 0 1 180.091"; + scale = "1 1 1"; + nameTag = "North Stronghold"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "47"; + team = "2"; + Trigger = "6368"; + locked = "true"; + }; + new StaticShape(Team2StationInventory4) { + position = "-69.6014 -106.278 126.67"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "North Stronghold"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + Target = "48"; + team = "2"; + Trigger = "6370"; + locked = "true"; + }; + new ForceFieldBare() { + position = "-216.511 -47.0479 97.4596"; + rotation = "1 0 0 0"; + scale = "0.985513 4.37129 6.19709"; + dataBlock = "defaultTeamSlowFieldBare"; + Target = "49"; + team = "2"; + locked = "true"; + }; + }; + new WayPoint() { + position = "-64.5573 -106.805 125.669"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "South Base Generator"; + team = "2"; + locked = "true"; + }; + new WayPoint() { + position = "-104.34 26.2317 135.396"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "North Base Generator"; + team = "2"; + locked = "true"; + }; + new WayPoint() { + position = "-206.347 -48.8631 90.5829"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "West Tower"; + team = "2"; + locked = "true"; + }; + }; + new SimGroup(AIObjectives) { + powerCount = "0"; + + new AIObjective(AIORepairObject) { + position = "-66.0305 -111.598 137.022"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team2generatorLarge3"; + targetClientId = "-1"; + targetObjectId = "6366"; + location = "-66.0305 -111.598 137.022"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIORepairObject) { + position = "-61.3335 -115.982 128.367"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory3"; + targetClientId = "-1"; + targetObjectId = "6367"; + location = "-61.3335 -115.982 128.367"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIORepairObject) { + position = "-69.5116 -106.377 128.364"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory4"; + targetClientId = "-1"; + targetObjectId = "6369"; + location = "-69.5116 -106.377 128.364"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIODefendLocation) { + position = "-202.729 -45.0803 99.9606"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the FlipFlop"; + targetObject = "Team2FlipFlop1"; + targetClientId = "-1"; + targetObjectId = "6354"; + location = "-202.729 -45.0803 99.9606"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIORepairObject) { + position = "-103.341 25.4572 144.392"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team2generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "6357"; + location = "-103.341 25.4572 144.392"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIODefendLocation) { + position = "-103.341 25.4572 144.392"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team2generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "6357"; + location = "-103.341 25.4572 144.392"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIORepairObject) { + position = "-115.004 27.3879 134.436"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory1"; + targetClientId = "-1"; + targetObjectId = "6358"; + location = "-115.004 27.3879 134.436"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIORepairObject) { + position = "-90.4107 27.457 134.412"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory2"; + targetClientId = "-1"; + targetObjectId = "6360"; + location = "-90.4107 27.457 134.412"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + isInvalid = "0"; + team = "2"; + }; + }; + }; + new SimGroup(team0) { + powerCount = "0"; + + new SimGroup(AIObjectives) { + powerCount = "0"; + }; + }; + }; + new Sky(Sky) { + position = "-1680 -1880 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "900"; + useSkyTextures = "1"; + SkySolidColor = "0.390000 0.390000 0.390000 0.000000"; + fogDistance = "600"; + fogColor = "0.500000 0.500000 0.500000 1.000000"; + fogVolume1 = "120 0 100"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "Lush_l4.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 0.000000"; + cloudSpeed0 = "0.000001 0.000001"; + locked = "true"; + }; + new WaterBlock() { + position = "-128 -96 90"; + rotation = "1 0 0 0"; + scale = "128 96 12"; + liquidType = "Water"; + density = "1"; + viscosity = "5"; + waveMagnitude = "0.2"; + surfaceTexture = "LiquidTiles/GreenWater"; + surfaceOpacity = "0.8"; + envMapTexture = "lush/skies/lushcloud1"; + envMapIntensity = "0.7"; + removeWetEdges = "1"; + locked = "true"; + }; + new SimGroup(Environment) { + powerCount = "0"; + + new TSStatic() { + position = "-99.589 -115.88 125.815"; + rotation = "0 0 -1 55.0039"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-55.6873 14.5 124.435"; + rotation = "0 0 1 123.186"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-103.306 -39.641 104.528"; + rotation = "0 0 -1 12.605"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-122.789 -30.4939 104.096"; + rotation = "0 0 1 63.5983"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-46.068 -90.5109 114.357"; + rotation = "0 0 -1 32.0856"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-97.287 -33.6868 104.639"; + rotation = "1 0 0 10.8863"; + scale = "1 1 1"; + shapeName = "borg33.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-117.452 -39.1965 105.735"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg34.dts"; + locked = "true"; + }; + }; + new SimGroup(ObserverDropPoints) { + powerCount = "0"; + + new Camera() { + position = "-31.5635 30.7804 157.928"; + rotation = "0 0 1 135.218"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-216.173 -87.9387 163.853"; + rotation = "0 0 1 77.9223"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-439.903 452.289 162.532"; + rotation = "0.0166045 -0.0499723 0.998613 143.287"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-23.3748 -88.6262 138.51"; + rotation = "0 0 -1 111.154"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-219.645 -61.8336 143.463"; + rotation = "0 0 1 59.5876"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(RandomOrganics) { + powerCount = "0"; + + new SimGroup(Addition4BEPlant1) { + powerCount = "0"; + + new TSStatic() { + position = "-105 -82 103.342"; + rotation = "0.462131 -0.253345 0.849854 46.3684"; + scale = "1.1 1.1 1.1"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-25 -2 121.987"; + rotation = "-0.0144114 0.0336269 0.999331 141.024"; + scale = "0.5 0.5 0.5"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-105 -106 123.459"; + rotation = "-0.108457 0.315024 0.942866 200.771"; + scale = "1.4 1.4 1.4"; + shapeName = "borg1.dts"; + locked = "true"; + }; + }; + new TSStatic() { + position = "-140.51 16.8311 131.494"; + rotation = "0 0 1 23.4913"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-49.5967 -116.738 125.795"; + rotation = "0 1 0 7.44841"; + scale = "1 1 1"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-94.8663 35.5787 131.797"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new SimGroup(Addition5PhoenixPlant1) { + powerCount = "0"; + + new TSStatic() { + position = "-113 46 132.148"; + rotation = "0 0 1 129"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-265 134 115.195"; + rotation = "0 0 1 149"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "63 118 180.078"; + rotation = "0 0 -1 109"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "87 70 167.875"; + rotation = "0 0 -1 69.0002"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-201 -98 127.793"; + rotation = "0 0 1 192"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-145 -34 106.539"; + rotation = "0 0 1 7.00001"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-137 150 168.086"; + rotation = "0 0 -1 82"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-185 -34 104.965"; + rotation = "0 0 1 236"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "47 110 181.051"; + rotation = "0 0 1 110"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-129 126 170.215"; + rotation = "0 0 1 39"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "95 214 146.312"; + rotation = "0 0 -1 105"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-57 118 163.344"; + rotation = "0 0 1 129"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-201 -26 110.246"; + rotation = "0 0 1 36"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-241 6 113.391"; + rotation = "0 0 1 99.0002"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "95 110 169.32"; + rotation = "0 0 -1 96.0002"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-105 174 174.695"; + rotation = "0 0 -1 20.9998"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-169 -130 120.356"; + rotation = "0 0 -1 118"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-113 54 132.18"; + rotation = "0 0 -1 59.0003"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-41 206 179.164"; + rotation = "0 0 1 6.00005"; + scale = "1 1 1"; + shapeName = "porg1.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition6PhoenixPlant2) { + powerCount = "0"; + + new TSStatic() { + position = "-137 102 168.824"; + rotation = "0 0 1 50"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-185 206 150.68"; + rotation = "0 0 -1 86.0004"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-257 -2 108.727"; + rotation = "0 0 1 236"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-265 38 137.941"; + rotation = "0 0 -1 104"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1 94 165.027"; + rotation = "0 0 -1 60.0001"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "23 -58 130.398"; + rotation = "0 0 1 32"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-169 -138 122.379"; + rotation = "0 0 1 120"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "23 214 155.297"; + rotation = "0 0 1 7.00001"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-97 102 151.262"; + rotation = "0 0 1 34"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-41 -178 177.32"; + rotation = "0 0 1 139"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-25 134 158.785"; + rotation = "0 0 1 79"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-257 -186 180.27"; + rotation = "0 0 1 96.0002"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "103 -186 196.887"; + rotation = "0 0 1 70.9998"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "71 174 182.895"; + rotation = "0 0 1 192"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-17 166 166.719"; + rotation = "0 0 -1 120"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "71 102 175.273"; + rotation = "0 0 -1 50"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "95 -170 187.805"; + rotation = "0 0 1 113"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-121 30 131.816"; + rotation = "0 0 1 196"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-25 70 142"; + rotation = "0 0 1 239"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition1BELgTree18) { + powerCount = "0"; + + new TSStatic() { + position = "-121 14 128.484"; + rotation = "0 0 -1 102"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-49 6 119.805"; + rotation = "0 0 1 57.9999"; + scale = "1.4 1.4 1.4"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-105 -18 99.633"; + rotation = "0 0 1 169"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-32.5498 3.139 117.762"; + rotation = "0 0 1 57.9999"; + scale = "1.4 1.4 1.4"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-97.206 -50.249 101.355"; + rotation = "0 0 1 58.9997"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-121 -74 104.211"; + rotation = "0 0 -1 79"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + }; + }; + new SimGroup(Ambiance) { + powerCount = "0"; + + new AudioEmitter() { + position = "-60.3481 -42.8411 108.656"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/frog1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-121.581 -30.8508 119.614"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "3"; + maxDistance = "192"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-293.673 -11.7674 116.589"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/crickets_drygrass.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "35"; + maxDistance = "2240"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-106.738 165.746 185.082"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/crickets_drygrass.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "35"; + maxDistance = "2240"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "154.36 64.0897 179.913"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/crickets_drygrass.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "35"; + maxDistance = "2240"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "23.604 -178.446 194.867"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/crickets_drygrass.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "35"; + maxDistance = "2240"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-210.922 -185.037 192.368"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/crickets_drygrass.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "35"; + maxDistance = "2240"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Reversion.mis b/base/missions/Reversion.mis new file mode 100644 index 0000000..c026cb9 --- /dev/null +++ b/base/missions/Reversion.mis @@ -0,0 +1,3987 @@ +// MissionTypes = CTF + +//--- MISSION QUOTE BEGIN --- +//By the edge of those wilds warriors had charged +//But now the year and the generals were gone +//And the grass grew in the armors hollow on the hills. +// -- The Graymere Annals, 3704 CE +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[CTF]5 flag captures to win +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + CTF_scoreLimit = "5"; + powerCount = "0"; + cdTrack = "2"; + musicTrack = "lush"; + + new MissionArea(MissionArea) { + area = "-944 -824 1872 1648"; + flightCeiling = "300"; + flightCeilingRange = "20"; + locked = "true"; + }; + new Sky(Sky) { + position = "120 32 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "650"; + useSkyTextures = "0"; + SkySolidColor = "0.300000 0.300000 0.300000 0.000000"; + fogDistance = "50"; + fogColor = "0.350000 0.350000 0.350000 1.000000"; + fogVolume1 = "150 0 54"; + fogVolume2 = "275 54 60"; + fogVolume3 = "1500 60 300"; + materialList = "lush_dark.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 -190776.046875"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 -62109.015625"; + locked = "true"; + cloudSpeed0 = "0.000000 0.000700"; + }; + new Lightning() { + position = "-24.2587 -1058.63 355.675"; + rotation = "1 0 0 0"; + scale = "2000 500 300"; + dataBlock = "DefaultStorm"; + strikesPerMinute = "2"; + strikeWidth = "2.5"; + chanceToHitTarget = "0.5"; + strikeRadius = "20"; + boltStartRadius = "20"; + color = "1.000000 1.000000 1.000000 1.000000"; + fadeColor = "0.100000 0.100000 1.000000 1.000000"; + useFog = "1"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.700000 0.700000 0.700000 1.000000"; + ambient = "0.600000 0.600000 0.600000 1.000000"; + position = "120 32 0"; + locked = "true"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/lushdet1"; + terrainFile = "Reversion.ter"; + squareSize = "8"; + position = "-1024 -1024 0"; + locked = "true"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "65"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + conjoinBowlDev = "20"; + coverage = "0"; + position = "0 0 0 1"; + locked = "true"; + GraphFile = "Reversion.nav"; + rotation = "0 0 0 0"; + scale = "1 1 1"; + }; + new WaterBlock() { + position = "256 400 7.9047"; + rotation = "1 0 0 0"; + scale = "128 192 41.9265"; + liquidType = "RiverWater"; + density = "1"; + viscosity = "15"; + waveMagnitude = "1"; + surfaceTexture = "LiquidTiles/GreenWater"; + surfaceOpacity = "0.8"; + envMapTexture = "lush/skies/lush_day_emap"; + envMapIntensity = "0.5"; + removeWetEdges = "1"; + locked = "true"; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "-620.438 283.257 142.023"; + rotation = "0.932418 0.0841451 -0.351448 28.8022"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-729.703 556.37 124.251"; + rotation = "0.0266336 -0.099798 0.994651 150.268"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "578.294 -468.308 149.149"; + rotation = "0.219564 -0.212904 0.952084 91.0485"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "729.464 -296.748 95.9682"; + rotation = "-0.00123095 -0.0249974 0.999687 185.637"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(teamS) { + + new SimGroup(Team0) { + + new InteriorInstance() { + position = "202.257 611.607 75.7962"; + rotation = "0 0 -1 12.0321"; + scale = "1 1 1"; + interiorFile = "bbunk9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Item() { + position = "202 615.5 78"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "199.087 614.785 78"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "204.913 616.215 78"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new SimGroup(AIObjectives) { + }; + }; + new SimGroup(Team1) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-592.055 343.334 69.4735"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "100"; + locked = "true"; + }; + new SpawnSphere() { + position = "-592.219 494.489 70.6153"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "100"; + locked = "true"; + }; + new SpawnSphere() { + position = "-749.741 424.635 57.6114"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new StaticShape(Team1generatorLarge1) { + position = "-700.961 390.401 55.4845"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Base"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new SimGroup(tower0b) { + + new StaticShape(Team1StationInventory1) { + position = "-604.757 346.985 51.4981"; + rotation = "-0 0 -1 90"; + scale = "1 1 1"; + nameTag = "South Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory2) { + position = "-579.671 346.989 51.4927"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "South Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory3) { + position = "-592.285 346.339 61.8749"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "South Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item() { + position = "-592.263 345.019 76.2272"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Turret(Team1TurretBaseLarge1) { + position = "-592.282 353.122 86.0031"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "South Tower"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new InteriorInstance() { + position = "-592.225 340.482 58"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bbunk2.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + }; + new SimGroup(base0) { + + new InteriorInstance() { + position = "-700.2 419 50"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + interiorFile = "bbase7.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new Turret(Team1TurretBaseLarge2) { + position = "-668.312 418.661 64.9914"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Forward"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "MissileBarrelLarge"; + locked = "true"; + }; + new Item(Team1flag1) { + position = "-701.246 419.048 86.0133"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + locked = "true"; + }; + new StaticShape(Team1SensorMediumPulse1) { + position = "-606.274 417.202 57.1059"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Base"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory4) { + position = "-701.066 412.142 92.0019"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Breezeway"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory5) { + position = "-701.021 425.866 91.9946"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Breezeway"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory6) { + position = "-686.565 419.146 59.0018"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Main Floor"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory7) { + position = "-703.347 439.114 77.9997"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Ramp"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory8) { + position = "-703.353 398.983 78.0001"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Ramp"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item() { + position = "-687.038 418.579 74.5295"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Turret(Team1SentryTurret1) { + position = "-684.2 418.951 55.5301"; + rotation = "0.57735 -0.57735 0.57735 120"; + scale = "1 1 1"; + nameTag = "Indoor Base"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + }; + new Turret(Team1SentryTurret2) { + position = "-716.193 419.3 55.5031"; + rotation = "0.57735 0.57735 -0.57735 120"; + scale = "1 1 1"; + nameTag = "Indoor Base"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + }; + new Turret() { + position = "-710.498 419.286 98.9546"; + rotation = "0.283404 0.283404 -0.916168 95.0101"; + scale = "1 1 1"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "ELFBarrelLarge"; + locked = "true"; + }; + }; + new SimGroup(veh0) { + + new InteriorInstance() { + position = "-750.979 426.27 49.1888"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bvpad.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-750.979 415.27 48.8888"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new StaticShape(Team1generatorLarge2) { + position = "-700.99 447.595 55.4948"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Base"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new SimGroup(tower0a) { + + new StaticShape(Team1StationInventory9) { + position = "-604.709 490.954 51.4968"; + rotation = "-0 0 -1 90"; + scale = "1 1 1"; + nameTag = "North Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory10) { + position = "-579.64 490.895 51.4974"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "North Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory11) { + position = "-592.181 491.943 61.8746"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "North Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item() { + position = "-592.281 492.645 76.2456"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Turret(Team1TurretBaseLarge3) { + position = "-592.44 485.028 86.0104"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "North Tower"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new InteriorInstance() { + position = "-592.184 497.451 58"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + interiorFile = "bbunk2.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + }; + new SimGroup(AIObjectives) { + + new AIObjective(AIORepairObject) { + position = "-700.967 391.722 56.9892"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generator"; + targetObject = "Team1generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3295"; + location = "-700.967 391.722 56.9892"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "HeavyRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "-700.967 391.722 56.9892"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generator"; + targetObject = "Team1generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3295"; + location = "-700.967 391.722 56.9892"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-579.668 342.497 53.0639"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team1StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3297"; + location = "-579.668 342.497 53.0639"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-604.754 342.493 53.0585"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team1StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3299"; + location = "-604.754 342.493 53.0585"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-592.14 343.143 63.4407"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team1StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3301"; + location = "-592.14 343.143 63.4407"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-592.296 355.93 83.8925"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the turret"; + targetObject = "Team1TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3304"; + location = "-592.296 355.93 83.8925"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-667.784 418.661 66.8927"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the turret"; + targetObject = "Team1TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3308"; + location = "-667.784 418.661 66.8927"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "-701.246 419.048 87.644"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend our flag"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3309"; + location = "-701.246 419.048 87.644"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + chat = "ChatSelfDefendFlag DefendBase"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackPlayer) { + position = "-701.246 419.048 87.644"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Kill the enemy flag carrier"; + mode = "FlagCarrier"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3309"; + location = "-701.246 419.048 87.644"; + weightLevel1 = "4800"; + weightLevel2 = "3000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergySniper"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "-701.246 419.048 87.644"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Return our flag"; + mode = "FlagDropped"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3309"; + location = "-701.246 419.048 87.644"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-700.941 453.754 108.512"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the Sensor"; + targetObject = "Team1SensorMediumPulse1"; + targetClientId = "-1"; + targetObjectId = "3310"; + location = "-700.941 453.754 108.512"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-701.066 412.142 93.5677"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team1StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3311"; + location = "-701.066 412.142 93.5677"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-701.021 425.866 93.5604"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team1StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3313"; + location = "-701.021 425.866 93.5604"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-686.565 419.146 60.5676"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team1StationInventory6"; + targetClientId = "-1"; + targetObjectId = "3315"; + location = "-686.565 419.146 60.5676"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-703.347 439.114 79.5655"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team1StationInventory7"; + targetClientId = "-1"; + targetObjectId = "3317"; + location = "-703.347 439.114 79.5655"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-703.353 398.983 79.5659"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team1StationInventory8"; + targetClientId = "-1"; + targetObjectId = "3319"; + location = "-703.353 398.983 79.5659"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-684.52 418.951 55.5301"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the turret"; + targetObject = "Team1SentryTurret1"; + targetClientId = "-1"; + targetObjectId = "3322"; + location = "-684.52 418.951 55.5301"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-715.873 419.3 55.5031"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the turret"; + targetObject = "Team1SentryTurret2"; + targetClientId = "-1"; + targetObjectId = "3323"; + location = "-715.873 419.3 55.5031"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-700.984 446.274 56.9995"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generator"; + targetObject = "Team1generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3330"; + location = "-700.984 446.274 56.9995"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "HeavyRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "-700.984 446.274 56.9995"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generator"; + targetObject = "Team1generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3330"; + location = "-700.984 446.274 56.9995"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-579.675 495.497 53.0626"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team1StationInventory9"; + targetClientId = "-1"; + targetObjectId = "3332"; + location = "-579.675 495.497 53.0626"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-604.744 495.556 53.0632"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team1StationInventory10"; + targetClientId = "-1"; + targetObjectId = "3334"; + location = "-604.744 495.556 53.0632"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-592.203 494.508 63.4404"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team1StationInventory11"; + targetClientId = "-1"; + targetObjectId = "3336"; + location = "-592.203 494.508 63.4404"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-592.235 482.026 83.8916"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the turret"; + targetObject = "Team1TurretBaseLarge3"; + targetClientId = "-1"; + targetObjectId = "3339"; + location = "-592.235 482.026 83.8916"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "778.671 -439.259 59.3313"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy generator"; + targetObject = "Team2generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3393"; + location = "778.671 -439.259 59.3313"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "MediumShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "657.372 -390.034 55.406"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy inventory"; + targetObject = "Team2StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3394"; + location = "657.372 -390.034 55.406"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "682.458 -390.03 55.4006"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy inventory"; + targetObject = "Team2StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3396"; + location = "682.458 -390.03 55.4006"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "669.844 -390.68 65.7828"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy inventory"; + targetObject = "Team2StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3398"; + location = "669.844 -390.68 65.7828"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "670 -403.467 86.2345"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the enemy turret"; + targetObject = "Team2TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3401"; + location = "670 -403.467 86.2345"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "745.488 -466.198 69.2348"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the enemy turret"; + targetObject = "Team2TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3404"; + location = "745.488 -466.198 69.2348"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "778.95 -466.585 89.986"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the enemy flag"; + mode = "FlagGrab"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3405"; + location = "778.95 -466.585 89.986"; + weightLevel1 = "3850"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "778.95 -466.585 89.986"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the flag!"; + mode = "FlagCapture"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3405"; + location = "778.95 -466.585 89.986"; + weightLevel1 = "5000"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "778.95 -466.585 89.986"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the dropped enemy flag"; + mode = "FlagDropped"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3405"; + location = "778.95 -466.585 89.986"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "778.645 -501.291 110.854"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the enemy Sensor"; + targetObject = "Team2SensorMediumPulse1"; + targetClientId = "-1"; + targetObjectId = "3406"; + location = "778.645 -501.291 110.854"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "778.77 -459.679 95.9097"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy inventory"; + targetObject = "Team2StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3407"; + location = "778.77 -459.679 95.9097"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "778.725 -473.403 95.9024"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy inventory"; + targetObject = "Team2StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3409"; + location = "778.725 -473.403 95.9024"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "764.269 -466.683 62.9097"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy inventory"; + targetObject = "Team2StationInventory6"; + targetClientId = "-1"; + targetObjectId = "3411"; + location = "764.269 -466.683 62.9097"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "781.051 -486.651 81.9075"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy inventory"; + targetObject = "Team2StationInventory7"; + targetClientId = "-1"; + targetObjectId = "3413"; + location = "781.051 -486.651 81.9075"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "781.057 -446.52 81.9079"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy inventory"; + targetObject = "Team2StationInventory8"; + targetClientId = "-1"; + targetObjectId = "3415"; + location = "781.057 -446.52 81.9079"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "762.224 -466.488 57.8722"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the enemy turret"; + targetObject = "Team2SentryTurret1"; + targetClientId = "-1"; + targetObjectId = "3418"; + location = "762.224 -466.488 57.8722"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "793.577 -466.837 57.8452"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the enemy turret"; + targetObject = "Team2SentryTurret2"; + targetClientId = "-1"; + targetObjectId = "3419"; + location = "793.577 -466.837 57.8452"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "778.688 -493.811 59.3416"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy generator"; + targetObject = "Team2generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3424"; + location = "778.688 -493.811 59.3416"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "MediumShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "657.379 -543.034 55.4047"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy inventory"; + targetObject = "Team2StationInventory9"; + targetClientId = "-1"; + targetObjectId = "3425"; + location = "657.379 -543.034 55.4047"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "682.448 -543.093 55.4053"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy inventory"; + targetObject = "Team2StationInventory10"; + targetClientId = "-1"; + targetObjectId = "3427"; + location = "682.448 -543.093 55.4053"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "669.907 -542.045 65.7825"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy inventory"; + targetObject = "Team2StationInventory11"; + targetClientId = "-1"; + targetObjectId = "3429"; + location = "669.907 -542.045 65.7825"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "669.939 -529.563 86.2336"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the enemy turret"; + targetObject = "Team2TurretBaseLarge3"; + targetClientId = "-1"; + targetObjectId = "3432"; + location = "669.939 -529.563 86.2336"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + }; + new InteriorInstance() { + position = "-606.179 417.306 47.1243"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + interiorFile = "bmisc9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(Team2) { + + new SpawnSphere() { + position = "669.77 -390.883 71.8156"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "100"; + locked = "true"; + }; + new SpawnSphere() { + position = "669.934 -542.037 72.9574"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "100"; + locked = "true"; + }; + new SpawnSphere() { + position = "828.52 -463.342 59.9535"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "100"; + locked = "true"; + }; + new StaticShape(Team2generatorLarge1) { + position = "778.665 -437.938 57.8266"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Base"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory1) { + position = "682.472 -394.534 53.8402"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "North Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory2) { + position = "657.386 -394.537 53.8348"; + rotation = "-0 0 -1 90"; + scale = "1 1 1"; + nameTag = "North Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory3) { + position = "670 -393.888 64.217"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "North Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item() { + position = "669.978 -392.568 78.5692"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Turret(Team2TurretBaseLarge1) { + position = "669.911 -400.594 88.2732"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "North Tower"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new InteriorInstance() { + position = "669.94 -388.031 60.3421"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + interiorFile = "bbunk2.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new InteriorInstance() { + position = "777.904 -466.537 52.3421"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + interiorFile = "bbase7.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new Turret(Team2TurretBaseLarge2) { + position = "746.016 -466.198 67.3335"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Forward"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "MissileBarrelLarge"; + locked = "true"; + }; + new Item(Team2flag1) { + position = "778.95 -466.585 88.3554"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + locked = "true"; + }; + new StaticShape(Team2SensorMediumPulse1) { + position = "678.792 -470.131 58.7282"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Base"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory4) { + position = "778.77 -459.679 94.3439"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Breezeway"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory5) { + position = "778.725 -473.403 94.3366"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Breezeway"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory6) { + position = "764.269 -466.683 61.3439"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + nameTag = "Main Floor"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory7) { + position = "781.051 -486.651 80.3417"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Ramp"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory8) { + position = "781.057 -446.52 80.3421"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Ramp"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item() { + position = "764.742 -466.116 76.8715"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Turret(Team2SentryTurret1) { + position = "761.904 -466.488 57.8722"; + rotation = "0.57735 0.577351 -0.57735 120"; + scale = "1 1 1"; + nameTag = "Indoor Base"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + }; + new Turret(Team2SentryTurret2) { + position = "793.897 -466.837 57.8452"; + rotation = "-0.57735 0.577351 -0.57735 240"; + scale = "1 1 1"; + nameTag = "Indoor Base"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + }; + new InteriorInstance() { + position = "827.282 -461.707 51.5309"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bvpad.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "827.282 -472.707 51.2309"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2generatorLarge2) { + position = "778.694 -495.132 57.8369"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Base"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory9) { + position = "682.424 -538.502 53.8389"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "South Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory10) { + position = "657.355 -538.443 53.8395"; + rotation = "-0 0 -1 90"; + scale = "1 1 1"; + nameTag = "South Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory11) { + position = "669.896 -539.491 64.2167"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "South Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item() { + position = "669.996 -540.193 78.5876"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Turret(Team2TurretBaseLarge3) { + position = "670.053 -532.512 88.3432"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "South Tower"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new InteriorInstance() { + position = "669.899 -544.999 60.3421"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bbunk2.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new SimGroup(AIObjectives) { + + new AIObjective(AIOAttackObject) { + position = "-700.967 391.722 56.9892"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy generator"; + targetObject = "Team1generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3295"; + location = "-700.967 391.722 56.9892"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "MediumShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-579.668 342.497 53.0639"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy inventory"; + targetObject = "Team1StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3297"; + location = "-579.668 342.497 53.0639"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-604.754 342.493 53.0585"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy inventory"; + targetObject = "Team1StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3299"; + location = "-604.754 342.493 53.0585"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-592.14 343.143 63.4407"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy inventory"; + targetObject = "Team1StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3301"; + location = "-592.14 343.143 63.4407"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "-592.296 355.93 83.8925"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the enemy turret"; + targetObject = "Team1TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3304"; + location = "-592.296 355.93 83.8925"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "-667.784 418.661 66.8927"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the enemy turret"; + targetObject = "Team1TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3308"; + location = "-667.784 418.661 66.8927"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "-701.246 419.048 87.644"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the enemy flag"; + mode = "FlagGrab"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3309"; + location = "-701.246 419.048 87.644"; + weightLevel1 = "3850"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "-701.246 419.048 87.644"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the flag!"; + mode = "FlagCapture"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3309"; + location = "-701.246 419.048 87.644"; + weightLevel1 = "5000"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "-701.246 419.048 87.644"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the dropped enemy flag"; + mode = "FlagDropped"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3309"; + location = "-701.246 419.048 87.644"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "-700.941 453.754 108.512"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the enemy Sensor"; + targetObject = "Team1SensorMediumPulse1"; + targetClientId = "-1"; + targetObjectId = "3310"; + location = "-700.941 453.754 108.512"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-701.066 412.142 93.5677"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy inventory"; + targetObject = "Team1StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3311"; + location = "-701.066 412.142 93.5677"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-701.021 425.866 93.5604"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy inventory"; + targetObject = "Team1StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3313"; + location = "-701.021 425.866 93.5604"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-686.565 419.146 60.5676"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy inventory"; + targetObject = "Team1StationInventory6"; + targetClientId = "-1"; + targetObjectId = "3315"; + location = "-686.565 419.146 60.5676"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-703.347 439.114 79.5655"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy inventory"; + targetObject = "Team1StationInventory7"; + targetClientId = "-1"; + targetObjectId = "3317"; + location = "-703.347 439.114 79.5655"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-703.353 398.983 79.5659"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy inventory"; + targetObject = "Team1StationInventory8"; + targetClientId = "-1"; + targetObjectId = "3319"; + location = "-703.353 398.983 79.5659"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "-684.52 418.951 55.5301"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the enemy turret"; + targetObject = "Team1SentryTurret1"; + targetClientId = "-1"; + targetObjectId = "3322"; + location = "-684.52 418.951 55.5301"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "-715.873 419.3 55.5031"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the enemy turret"; + targetObject = "Team1SentryTurret2"; + targetClientId = "-1"; + targetObjectId = "3323"; + location = "-715.873 419.3 55.5031"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-700.984 446.274 56.9995"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy generator"; + targetObject = "Team1generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3330"; + location = "-700.984 446.274 56.9995"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "MediumShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-579.675 495.497 53.0626"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy inventory"; + targetObject = "Team1StationInventory9"; + targetClientId = "-1"; + targetObjectId = "3332"; + location = "-579.675 495.497 53.0626"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-604.744 495.556 53.0632"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy inventory"; + targetObject = "Team1StationInventory10"; + targetClientId = "-1"; + targetObjectId = "3334"; + location = "-604.744 495.556 53.0632"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-592.203 494.508 63.4404"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy inventory"; + targetObject = "Team1StationInventory11"; + targetClientId = "-1"; + targetObjectId = "3336"; + location = "-592.203 494.508 63.4404"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "-592.235 482.026 83.8916"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the enemy turret"; + targetObject = "Team1TurretBaseLarge3"; + targetClientId = "-1"; + targetObjectId = "3339"; + location = "-592.235 482.026 83.8916"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "778.671 -439.259 59.3313"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generator"; + targetObject = "Team2generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3393"; + location = "778.671 -439.259 59.3313"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "HeavyRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "778.671 -439.259 59.3313"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generator"; + targetObject = "Team2generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3393"; + location = "778.671 -439.259 59.3313"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "657.372 -390.034 55.406"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team2StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3394"; + location = "657.372 -390.034 55.406"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "682.458 -390.03 55.4006"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team2StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3396"; + location = "682.458 -390.03 55.4006"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "669.844 -390.68 65.7828"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team2StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3398"; + location = "669.844 -390.68 65.7828"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "670 -403.467 86.2345"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the turret"; + targetObject = "Team2TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3401"; + location = "670 -403.467 86.2345"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "745.488 -466.198 69.2348"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the turret"; + targetObject = "Team2TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3404"; + location = "745.488 -466.198 69.2348"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "778.95 -466.585 89.986"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend our flag"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3405"; + location = "778.95 -466.585 89.986"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + chat = "ChatSelfDefendFlag DefendBase"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackPlayer) { + position = "778.95 -466.585 89.986"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Kill the enemy flag carrier"; + mode = "FlagCarrier"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3405"; + location = "778.95 -466.585 89.986"; + weightLevel1 = "4800"; + weightLevel2 = "3000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergySniper"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "778.95 -466.585 89.986"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Return our flag"; + mode = "FlagDropped"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3405"; + location = "778.95 -466.585 89.986"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "778.645 -501.291 110.854"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the Sensor"; + targetObject = "Team2SensorMediumPulse1"; + targetClientId = "-1"; + targetObjectId = "3406"; + location = "778.645 -501.291 110.854"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "778.77 -459.679 95.9097"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team2StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3407"; + location = "778.77 -459.679 95.9097"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "778.725 -473.403 95.9024"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team2StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3409"; + location = "778.725 -473.403 95.9024"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "764.269 -466.683 62.9097"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team2StationInventory6"; + targetClientId = "-1"; + targetObjectId = "3411"; + location = "764.269 -466.683 62.9097"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "781.051 -486.651 81.9075"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team2StationInventory7"; + targetClientId = "-1"; + targetObjectId = "3413"; + location = "781.051 -486.651 81.9075"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "781.057 -446.52 81.9079"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team2StationInventory8"; + targetClientId = "-1"; + targetObjectId = "3415"; + location = "781.057 -446.52 81.9079"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "762.224 -466.488 57.8722"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the turret"; + targetObject = "Team2SentryTurret1"; + targetClientId = "-1"; + targetObjectId = "3418"; + location = "762.224 -466.488 57.8722"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "793.577 -466.837 57.8452"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the turret"; + targetObject = "Team2SentryTurret2"; + targetClientId = "-1"; + targetObjectId = "3419"; + location = "793.577 -466.837 57.8452"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "778.688 -493.811 59.3416"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generator"; + targetObject = "Team2generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3424"; + location = "778.688 -493.811 59.3416"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "HeavyRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "778.688 -493.811 59.3416"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generator"; + targetObject = "Team2generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3424"; + location = "778.688 -493.811 59.3416"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "657.379 -543.034 55.4047"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team2StationInventory9"; + targetClientId = "-1"; + targetObjectId = "3425"; + location = "657.379 -543.034 55.4047"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "682.448 -543.093 55.4053"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team2StationInventory10"; + targetClientId = "-1"; + targetObjectId = "3427"; + location = "682.448 -543.093 55.4053"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "669.907 -542.045 65.7825"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team2StationInventory11"; + targetClientId = "-1"; + targetObjectId = "3429"; + location = "669.907 -542.045 65.7825"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "669.939 -529.563 86.2336"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the turret"; + targetObject = "Team2TurretBaseLarge3"; + targetClientId = "-1"; + targetObjectId = "3432"; + location = "669.939 -529.563 86.2336"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + gameType = "all"; + issuingClientId = "-1"; + }; + }; + new InteriorInstance() { + position = "678.434 -470.156 48.8163"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + interiorFile = "bmisc8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Turret() { + position = "788.135 -466.735 101.346"; + rotation = "0.287606 -0.287605 0.913546 95.1737"; + scale = "1 1 1"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "ELFBarrelLarge"; + locked = "true"; + }; + }; + }; + new SimGroup(Organics) { + + new TSStatic() { + position = "-133.533 -606.804 52.7506"; + rotation = "1 0 0 0"; + scale = "3 3 3"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "228.452 465.752 67.9757"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "331.87 360.319 49.8039"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "398.588 572.925 72.3492"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new InteriorInstance() { + position = "-221.204 808.859 48.3257"; + rotation = "0 0 1 29.7938"; + scale = "1 1 1"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-179.775 810.668 45.3881"; + rotation = "0.885553 0.436657 0.158514 90.3092"; + scale = "1 1 1"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "239.768 -813.59 47.6653"; + rotation = "0.210642 -0.158738 0.964589 107.973"; + scale = "1 1 1"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "362.641 -814.344 55.4042"; + rotation = "0 0 1 61.3065"; + scale = "1 1 1"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new TSStatic() { + position = "-185.798 -676.856 63.8358"; + rotation = "0 0 1 116.31"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-63.3654 -675.879 70.0938"; + rotation = "0 0 -1 80.787"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-573.682 196.234 73.4702"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-468.42 316.98 68.4671"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-445 354 80.6467"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-533.129 731.972 87.3182"; + rotation = "0 0 1 45.8366"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-156.684 483.974 84.3727"; + rotation = "0 0 1 34.9504"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-164.159 106.95 59.8089"; + rotation = "0 0 1 104.278"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-190 -166 87.4137"; + rotation = "0 0 1 79.0682"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "74.5247 -211.457 85.7287"; + rotation = "0 0 -1 41.8259"; + scale = "1.3 1.3 1.3"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "287.252 35.4062 69.0122"; + rotation = "0 0 1 62.4524"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "257.02 10.7366 71.046"; + rotation = "0 0 -1 41.8259"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "224.605 -224.631 70.2669"; + rotation = "0 0 1 26.929"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "566.293 -276.306 56.7236"; + rotation = "0 0 -1 52.7121"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "507.776 -304.988 55.5671"; + rotation = "0 0 1 37.2423"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "777.547 -117.595 75.5863"; + rotation = "0 0 -1 64.1713"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "822.478 -632.831 50.0429"; + rotation = "0 0 1 42.3989"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "813.296 -664.078 49.8462"; + rotation = "0 0 -1 30.9397"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new SimGroup(AudioWater) { + + new AudioEmitter() { + position = "286.108 515.075 54.4287"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.4"; + isLooping = "1"; + is3D = "1"; + minDistance = "15"; + maxDistance = "640"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + }; + }; + new SimGroup(AudioCreatures) { + + new AudioEmitter() { + position = "-130.021 -605.67 103.48"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo5.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "10"; + maxDistance = "640"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "5000"; + maxLoopGap = "25000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-165.416 109.665 86.4439"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo5.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "10"; + maxDistance = "640"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "5000"; + maxLoopGap = "25000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "228.243 467.01 91.5886"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo4.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "10"; + maxDistance = "640"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "5000"; + maxLoopGap = "30000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-576.167 203.734 99.8476"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo4.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "10"; + maxDistance = "640"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "5000"; + maxLoopGap = "30000"; + type = "EffectAudioType"; + locked = "true"; + }; + }; + new SimGroup(Rocks) { + + new InteriorInstance() { + position = "-430.596 222.191 64.7917"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-450.616 650.028 80.2129"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-143.789 543.163 94.815"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-264.882 155.907 98.7295"; + rotation = "0 0 1 44.1177"; + scale = "1 1 1"; + interiorFile = "bspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-393.68 -48.3251 61.5342"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-412.603 -79.3307 57.9718"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-374.921 -69.2389 61.3461"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-640.634 -232.746 57.5357"; + rotation = "0 0 -1 92.2462"; + scale = "1 1 1"; + interiorFile = "bspir4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-194.801 -126.726 102.882"; + rotation = "0 0 1 51.5662"; + scale = "1 1 1"; + interiorFile = "bspir5.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "63.7042 97.6869 105.822"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "184.628 187.984 64.3413"; + rotation = "0 0 1 73.3386"; + scale = "1 1 1"; + interiorFile = "bspir4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "181.954 260.956 52.5766"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "411.273 81.0008 86.4959"; + rotation = "0.0889925 0.376956 0.921946 175.725"; + scale = "1 1 1"; + interiorFile = "brocka.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "486.496 -158.734 49.5211"; + rotation = "0 0 1 226.501"; + scale = "1 1 1"; + interiorFile = "bspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "539.964 -196.76 47.6935"; + rotation = "0 0 -1 115.92"; + scale = "1 1 1"; + interiorFile = "bspir3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "635.944 -210.565 78.4084"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "612.695 -12.5919 117.781"; + rotation = "0 0 1 192.696"; + scale = "1 1 1"; + interiorFile = "bspir4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "825.664 240.799 56.1113"; + rotation = "-1 0 0 24.0642"; + scale = "1 1 1"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "382.643 412.75 71.9031"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "442.715 408.565 70.6079"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "447.739 584.203 93.1733"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir5.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "170.048 579.017 72.7536"; + rotation = "0 0 1 67.609"; + scale = "1 1 1"; + interiorFile = "bspir3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "632.608 418.948 79.3764"; + rotation = "0 0 1 177.617"; + scale = "1 1 1"; + interiorFile = "bspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "798.723 256.967 67.4079"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "734.044 33.8683 51.5069"; + rotation = "0 0 1 42.9718"; + scale = "1 1 1"; + interiorFile = "brockc.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "978.701 -239.387 51.9367"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "759.286 -312.77 70.0386"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir5.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "586.058 -563.127 80.644"; + rotation = "0 0 -1 110.581"; + scale = "1 1 1"; + interiorFile = "bspir3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "261.977 -750.887 50.0861"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "192.303 -714.896 51.2411"; + rotation = "0 0 1 80.2141"; + scale = "1 1 1"; + interiorFile = "bspir3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "274.925 -512.594 76.0684"; + rotation = "1 0 0 134.072"; + scale = "1 1 1"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new AudioEmitter() { + position = "-355.854 -192.013 82.2533"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/moaningwind1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.3"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Rimehold.mis b/base/missions/Rimehold.mis new file mode 100644 index 0000000..fc8df36 --- /dev/null +++ b/base/missions/Rimehold.mis @@ -0,0 +1,480 @@ +// MissionTypes = Hunters TeamHunters + +//--- MISSION QUOTE BEGIN --- +//Howl, O Wolves, howl for our dead kin scattered on the frozen seas of Ymir. Then take up your weapons. We shall hunt the Hordes until the stars grow cold. +// -- Jarek Redmoon, Ur-Shaman of the Starwolf, 3941 CE +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[Hunters TeamHunters]Nexus located in center of underground Great Hall +//Inventory stations located at corner towers +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + cdTrack = "5"; + powerCount = "0"; + musicTrack = "ice"; + Team_Hunters_timeLimit = "25"; + Hunters_timeLimit = "25"; + + new MissionArea(MissionArea) { + area = "-440 -312 848 880"; + flightCeiling = "2000"; + flightCeilingRange = "50"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.700000 0.700000 0.700000 1.000000"; + ambient = "0.600000 0.600000 0.620000 1.000000"; + locked = "true"; + position = "-1024 -1024 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/snowdet1"; + terrainFile = "Rimehold.ter"; + squareSize = "8"; + emptySquares = "101741 101997 102253 299658 430985 431241 431497 366217"; + hazeDistance = "250"; + locked = "true"; + visibleDistance = "1200"; + position = "-1024 -1024 0"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "55"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + locked = "true"; + XDimOverSize = "0"; + YDimOverSize = "0"; + GraphFile = "Rimehold.nav"; + position = "0 0 0 1"; + rotation = "0 0 0 0"; + conjoinBowlDev = "20"; + scale = "1 1 1"; + coverage = "0"; + }; + new Sky(Sky) { + position = "-904 -1136 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "600"; + useSkyTextures = "1"; + SkySolidColor = "0.365000 0.390000 0.420000 0.000000"; + fogDistance = "0"; + fogColor = "0.700000 0.700000 0.700000 1.000000"; + fogVolume1 = "0 0 0"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "sky_ice_blue.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 -0.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 0.000000"; + locked = "true"; + cloudSpeed0 = "0.000000 0.000000"; + }; + new SimGroup(ObserverDropPoints) { + powerCount = "0"; + + new Camera() { + position = "-20.1378 130.534 175.57"; + rotation = "0 0 -1 95.2935"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-98.5621 203.831 198.799"; + rotation = "0.0328029 -0.0599317 0.997663 122.726"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-17.4677 159.05 77.7879"; + rotation = "0 0 1 195.952"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "163.16 -235.163 216.951"; + rotation = "0.305024 0.0666097 -0.950012 25.8909"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-277.015 272.671 178.033"; + rotation = "0.0190453 -0.0299901 0.999369 115.197"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + powerCount = "0"; + + new SimGroup(Team1) { + powerCount = "0"; + + new SimGroup(spawnspheres) { + powerCount = "0"; + + new SpawnSphere() { + position = "-0.966477 -50.0832 112.711"; + rotation = "0 0 -1 84.7978"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "120"; + locked = "true"; + }; + new SpawnSphere() { + position = "-34.2901 125.288 201.689"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "300"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + }; + new SimGroup(Team2) { + powerCount = "0"; + + new SimGroup(spawnspheres) { + powerCount = "0"; + + new SpawnSphere() { + position = "-87.5583 365.17 126.118"; + rotation = "0 0 1 57.8687"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "120"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + }; + new SimGroup(team0) { + powerCount = "0"; + + new SimGroup(Stuff) { + powerCount = "1"; + + new InteriorInstance() { + position = "-277.883 464.884 214.117"; + rotation = "0 0 1 90.5273"; + scale = "1 1 1"; + interiorFile = "stowr1.dif"; + showTerrainInside = "0"; + locked = "true"; + team = "0"; + }; + new StaticShape() { + position = "31.9146 91.7929 -97.0133"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "33"; + team = "0"; + }; + new InteriorInstance() { + position = "223.424 372.998 217.978"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "stowr1.dif"; + showTerrainInside = "0"; + locked = "true"; + team = "0"; + }; + new StaticShape() { + position = "223.429 374.166 208.98"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "34"; + team = "0"; + Trigger = "3346"; + }; + new StaticShape() { + position = "157.765 -195.042 204.45"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "35"; + team = "0"; + Trigger = "3348"; + }; + new InteriorInstance() { + position = "157.83 -196.214 213.451"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "stowr1.dif"; + showTerrainInside = "0"; + locked = "true"; + team = "0"; + }; + new StaticShape() { + position = "-264.666 -196.208 217.09"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "36"; + team = "0"; + Trigger = "3351"; + }; + new InteriorInstance() { + position = "-264.726 -197.424 226.091"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "stowr1.dif"; + showTerrainInside = "0"; + locked = "true"; + team = "0"; + }; + new StaticShape() { + position = "-276.719 464.838 205.12"; + rotation = "0 0 1 90.5273"; + scale = "1 1 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "37"; + team = "0"; + Trigger = "3354"; + }; + new InteriorInstance() { + position = "-29.8911 124.026 57.2013"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "sbase5.dif"; + showTerrainInside = "0"; + locked = "true"; + team = "0"; + }; + new Item(Nexus) { + position = "-23.8753 84.0586 81.555"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Nexus"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "38"; + team = "0"; + flashThreadDir = "1"; + }; + new Trigger(NexusTrigger) { + position = "-33.4285 100.14 55.34"; + rotation = "1 0 0 0"; + scale = "19.5116 30 38.3776"; + dataBlock = "gameTrigger"; + polyhedron = "0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000 -0.0000000 -1.0000000 -0.0000000 -0.0000000 -0.0000000 1.0000000"; + locked = "true"; + team = "0"; + missionTypesList = "Hunters TeamHunters"; + }; + new WayPoint() { + position = "-23.8712 84.0586 81.555"; + rotation = "1 0 0 0"; + scale = "0.1 0.1 0.1"; + nameTag = "The Nexus"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "The Nexus"; + team = "0"; + locked = "true"; + }; + new Item() { + position = "-37.617 208.163 174.667"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + team = "0"; + }; + new InteriorInstance() { + position = "-39.6396 208.086 110.813"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "stowr6.dif"; + showTerrainInside = "0"; + locked = "true"; + team = "0"; + }; + }; + new WayPoint() { + position = "94.4419 164.733 129.701"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "East Nexus Entrance"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "East Nexus Entrance"; + team = "0"; + locked = "true"; + }; + new WayPoint() { + position = "-144.489 118.269 122.953"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "West Nexus Entrance"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "West Nexus Entrance"; + team = "0"; + locked = "true"; + }; + }; + }; + new SimGroup(Ambiance) { + powerCount = "0"; + + new Precipitation(Precipitation) { + position = "-72.3863 217.965 161.798"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Snow"; + percentage = "1"; + color1 = "1.000000 1.000000 1.000000 1.000000"; + color2 = "-1.000000 0.000000 0.000000 1.000000"; + color3 = "-1.000000 0.000000 0.000000 1.000000"; + offsetSpeed = "0.25"; + minVelocity = "0.25"; + maxVelocity = "1.5"; + maxNumDrops = "2000"; + maxRadius = "125"; + locked = "true"; + }; + new AudioEmitter() { + position = "-72.3863 217.965 161.798"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/moaningwind1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new InteriorInstance() { + position = "-249.18 222.364 161.676"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "sspir1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-55.7404 39.1725 136.706"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "sspir4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-23.8753 84.0586 89.6089"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "NexusCap"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "-1"; + }; + new InteriorInstance() { + position = "-120.189 283.025 148.859"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "sspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-23.8753 84.0586 81.6897"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "NexusBase"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "-1"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/RiverDance.mis b/base/missions/RiverDance.mis new file mode 100644 index 0000000..5efecaa --- /dev/null +++ b/base/missions/RiverDance.mis @@ -0,0 +1,3612 @@ +// DisplayName = Riverdance +// MissionTypes = CTF Bounty + +//--- MISSION QUOTE BEGIN --- +//Storm'd at with shot and shell, +//Boldly they rode and well, +//Into the jaws of Death, +//Into the mouth of Hell. +// -- Alfred Lord Tennyson +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[CTF]5 flag captures to win +//[Bounty]Mission follows standard Rules of Engagement +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + CTF_scoreLimit = "5"; + musicTrack = "lush"; + powerCount = "0"; + cdTrack = "2"; + + new MissionArea(MissionArea) { + area = "-696 -784 720 1296"; + flightCeiling = "300"; + flightCeilingRange = "20"; + locked = "true"; + }; + new Sky(Sky) { + position = "0 0 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "500"; + useSkyTextures = "1"; + SkySolidColor = "0.420000 0.420000 0.420000 0.000000"; + fogDistance = "300"; + fogColor = "0.420000 0.420000 0.420000 1.000000"; + fogVolume1 = "300 0 71"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "sky_lush_blue.dml"; + windVelocity = "1 1 0"; + windEffectPrecipitation = "1"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 -222768174765569861000000000000000000000.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 -170698929442160049000000000000000000000.000000"; + locked = "true"; + }; + new Precipitation(Precipitation) { + position = "-336.859 -631.623 191.648"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Rain"; + percentage = "1"; + color1 = "0.400000 0.450000 0.480000 1.000000"; + color2 = "-1.000000 0.000000 0.000000 1.000000"; + color3 = "-1.000000 0.000000 0.000000 1.000000"; + offsetSpeed = "0.25"; + minVelocity = "1.25"; + maxVelocity = "4"; + maxNumDrops = "2000"; + maxRadius = "80"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.750000 0.750000 0.750000 1.000000"; + ambient = "0.500000 0.500000 0.500000 1.000000"; + position = "0 0 0"; + locked = "true"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/lushdet2"; + terrainFile = "RiverDance.ter"; + squareSize = "8"; + emptySquares = "340042 340298 406089 144204 95350 439128 439384 439640"; + position = "-1024 -1024 0"; + locked = "true"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "70"; + cullDensity = "0.1"; + customArea = "0 0 0 0"; + YDimOverSize = "0"; + conjoinBowlDev = "20"; + position = "0 0 0 1"; + coverage = "0"; + locked = "true"; + rotation = "0 0 0 0"; + XDimOverSize = "0"; + GraphFile = "RiverDance.nav"; + scale = "1 1 1"; + }; + new WaterBlock(Water) { + position = "-688 -1008 0"; + rotation = "1 0 0 0"; + scale = "768 1152 71.4642"; + liquidType = "RiverWater"; + density = "1"; + viscosity = "5"; + waveMagnitude = "1"; + surfaceTexture = "LiquidTiles/GreenWater"; + surfaceOpacity = "0.8"; + envMapTexture = "lush/skies/lush_day_emap"; + envMapIntensity = "0.1"; + removeWetEdges = "1"; + locked = "true"; + }; + new SimGroup(ObserverDropPoints) { + powerCount = "0"; + + new Camera() { + position = "-351.944 -540.814 193.161"; + rotation = "0 0 1 230.329"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-297.193 -128.662 207.328"; + rotation = "0 0 1 84.2248"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-237.93 336.553 119.233"; + rotation = "0 0 -1 41.8259"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + powerCount = "0"; + + new SimGroup(Team1) { + powerCount = "1"; + + new SimGroup(spawnspheres) { + powerCount = "1"; + + new SpawnSphere() { + position = "-390.8 -557.509 168.215"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new InteriorInstance() { + position = "-412 -623.726 185.552"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bbase6.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + team = "1"; + locked = "true"; + }; + new InteriorInstance() { + position = "-251.998 -243.486 142.611"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bmisc3.dif"; + showTerrainInside = "0"; + team = "1"; + locked = "true"; + }; + new Turret(Team1TurretBaseLarge1) { + position = "-251.963 -244.032 144.254"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Riverbank"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + team = "1"; + missionTypesList = "CTF"; + locked = "true"; + Target = "33"; + }; + new InteriorInstance() { + position = "-365.211 -492.095 168.47"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bmisc2.dif"; + showTerrainInside = "0"; + team = "1"; + locked = "true"; + }; + new Turret(Team1TurretBaseLarge2) { + position = "-365.829 -492.138 174.446"; + rotation = "0 0 1 89.5639"; + scale = "1 1 1"; + nameTag = "Main Compound"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + team = "1"; + missionTypesList = "CTF"; + locked = "true"; + Target = "34"; + }; + new Item(Team1flag1) { + position = "-412.024 -599.725 201.503"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + team = "1"; + missionTypesList = "CTF"; + locked = "true"; + originalPosition = "-412.024 -599.725 201.503 1 0 0 0"; + Target = "35"; + isHome = "1"; + }; + new StaticShape(Team1StationInventory1) { + position = "-394.37 -611.982 198.302"; + rotation = "0 0 1 45.2637"; + scale = "1 1 1"; + nameTag = "Catwalk"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + team = "1"; + Trigger = "3295"; + locked = "true"; + Target = "36"; + }; + new StaticShape(Team1StationInventory2) { + position = "-429.661 -612.071 198.304"; + rotation = "-0 0 -1 41.4353"; + scale = "1 1 1"; + nameTag = "Catwalk"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + team = "1"; + Trigger = "3297"; + locked = "true"; + Target = "37"; + }; + new Turret(Team1TurretBaseLarge3) { + position = "-185.462 -266.639 95.1137"; + rotation = "0 0 1 67.609"; + scale = "1 1 1"; + nameTag = "Tower"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + team = "1"; + missionTypesList = "CTF"; + locked = "true"; + Target = "38"; + }; + new StaticShape(Team1StationInventory3) { + position = "-401.466 -635.237 173.541"; + rotation = "0 0 -1 90.1374"; + scale = "1 1 1"; + nameTag = "Rear"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + team = "1"; + Trigger = "3300"; + locked = "true"; + Target = "39"; + }; + new StaticShape(Team1StationInventory4) { + position = "-422.358 -635.228 173.543"; + rotation = "0 0 1 89.954"; + scale = "1 1 1"; + nameTag = "Rear"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + team = "1"; + Trigger = "3302"; + locked = "true"; + Target = "40"; + }; + new StaticShape(Team1generatorLarge1) { + position = "-412.132 -630.141 211.538"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + team = "1"; + locked = "true"; + Target = "41"; + }; + new InteriorInstance() { + position = "-195.013 -268.288 78.4752"; + rotation = "0 0 1 157.746"; + scale = "1 1 1"; + interiorFile = "btowr6.dif"; + showTerrainInside = "0"; + team = "1"; + locked = "true"; + }; + new StaticShape(Team1StationInventory5) { + position = "-190.53 -268.528 76.4605"; + rotation = "0 0 1 67.2185"; + scale = "1 1 1"; + nameTag = "Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + team = "1"; + Trigger = "3306"; + locked = "true"; + Target = "42"; + }; + new StaticShape(Team1StationInventory6) { + position = "-394.871 -616.062 173.551"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Alcove"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + team = "1"; + Trigger = "3308"; + locked = "true"; + Target = "43"; + }; + new StaticShape(Team1StationInventory7) { + position = "-428.772 -616.093 173.546"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Alcove"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + team = "1"; + Trigger = "3310"; + locked = "true"; + Target = "44"; + }; + new SimGroup(AIObjectives) { + powerCount = "1"; + + new AIObjective(AIOAttackObject) { + position = "-299.605 422.457 127.665"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the GeneratorLarge"; + targetObject = "Team2generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3347"; + location = "-299.605 422.457 127.665"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "MediumShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + isInvalid = "0"; + }; + new AIObjective(AIOTouchObject) { + position = "-300.034 394.008 117.408"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the enemy flag"; + mode = "FlagGrab"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3358"; + location = "-300.034 394.008 117.408"; + weightLevel1 = "3850"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack CloakPack ShieldPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + isInvalid = "0"; + gameType = "CTF"; + }; + new SimGroup(Repairs) { + powerCount = "1"; + + new AIObjective(AIORepairObject) { + position = "-365.168 -492.133 176.198"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team1TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3292"; + location = "-365.168 -492.133 176.198"; + weightLevel1 = "3100"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + group = "3315"; + isInvalid = "0"; + gameType = "CTF"; + }; + new AIObjective(AIORepairObject) { + position = "-394.871 -616.062 175.117"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory6"; + targetClientId = "-1"; + targetObjectId = "3307"; + location = "-394.871 -616.062 175.117"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + group = "3315"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "-412.4 -628.202 212.99"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the GeneratorLarge"; + targetObject = "Team1generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3303"; + location = "-412.4 -628.202 212.99"; + weightLevel1 = "3200"; + weightLevel2 = "3000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + group = "3315"; + isInvalid = "0"; + }; + }; + new SimGroup(defense) { + powerCount = "1"; + + new AIObjective(AIODefendLocation) { + position = "-412.024 -603.635 202.733"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend our flag"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3293"; + location = "-412.024 -603.635 202.733"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ElfGun Chaingun SNiperRifle"; + buyEquipmentSet = "LightEnergyELF"; + chat = "ChatSelfDefendFlag DefendBase"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + group = "3319"; + isInvalid = "0"; + gameType = "CTF"; + }; + new AIObjective(AIODefendLocation) { + position = "-411.97 -616.652 212.99"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the GeneratorLarge"; + targetObject = "Team1generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3303"; + location = "-411.97 -616.652 212.99"; + weightLevel1 = "3300"; + weightLevel2 = "3100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "RepairPack ChainGun PlasmaRifle"; + buyEquipmentSet = "HeavyRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + group = "3319"; + isInvalid = "0"; + }; + }; + new SimGroup(General) { + powerCount = "1"; + + new AIObjective(AIOAttackPlayer) { + position = "-412.024 -599.725 202.733"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Kill the enemy flag carrier"; + mode = "FlagCarrier"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3293"; + location = "-412.024 -599.725 202.733"; + weightLevel1 = "4800"; + weightLevel2 = "3000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "EnergyPack ElfGun Chaingun SniperRifle"; + buyEquipmentSet = "LightEnergyELF"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + group = "3322"; + isInvalid = "0"; + gameType = "CTF"; + }; + new AIObjective(AIOTouchObject) { + position = "-412.024 -599.725 202.733"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Return our flag"; + mode = "FlagDropped"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3293"; + location = "-412.024 -599.725 202.733"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + group = "3322"; + isInvalid = "0"; + gameType = "CTF"; + }; + new AIObjective(AIOTouchObject) { + position = "-300.034 393.988 117.408"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the dropped enemy flag"; + mode = "FlagDropped"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3358"; + location = "-300.034 393.988 117.408"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + group = "3322"; + isInvalid = "0"; + gameType = "CTF"; + }; + new AIObjective(AIOTouchObject) { + position = "-300.034 393.988 117.408"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the flag!"; + mode = "FlagCapture"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3358"; + location = "-300.034 393.988 117.408"; + weightLevel1 = "5000"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + group = "3322"; + isInvalid = "0"; + gameType = "CTF"; + }; + }; + new SimGroup(deploy) { + powerCount = "1"; + + new AIObjective(AIODeployEquipment) { + position = "-412.176 -612.638 177.741"; + rotation = "-1 0 0 89.9544"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-412.176 -612.638 177.741"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + group = "3327"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-406.908 -605.832 177.24"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-406.908 -605.832 177.24"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + group = "3327"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-417.083 -599.713 177.11"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-417.083 -599.713 177.11"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + group = "3327"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-412.022 -597.007 177.7"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-412.022 -597.007 177.7"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + group = "3327"; + isInvalid = "0"; + }; + }; + new SimGroup(Deploy2) { + powerCount = "1"; + + new AIObjective(AIODeployEquipment) { + position = "-402.859 -628.897 211.545"; + rotation = "-4.29061e-10 9.08218e-12 1 221.735"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy Inventory Station"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-402.859 -628.897 211.545"; + weightLevel1 = "4150"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "InventoryDeployable"; + buyEquipmentSet = "MediumInventorySet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + group = "3332"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-430.505 -608.004 211.541"; + rotation = "0 0 1 49.8473"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-430.505 -608.004 211.541"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + group = "3332"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-393.424 -607.945 211.545"; + rotation = "0 0 -1 50.4203"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-393.424 -607.945 211.545"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + group = "3332"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-404.684 -607.996 211.548"; + rotation = "0 0 1 45.8366"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-404.684 -607.996 211.548"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + group = "3332"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-419.29 -607.974 211.546"; + rotation = "0 0 -1 50.9933"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-419.29 -607.974 211.546"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "1"; + group = "3332"; + isInvalid = "0"; + }; + }; + }; + }; + new SimGroup(Team2) { + powerCount = "1"; + + new SimGroup(spawnspheres) { + powerCount = "1"; + + new SpawnSphere() { + position = "-333.627 342.531 87.7581"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new InteriorInstance() { + position = "-300.013 417.95 100.227"; + rotation = "0 0 1 180.091"; + scale = "1 1 1"; + interiorFile = "bbase6.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + team = "2"; + locked = "true"; + }; + new InteriorInstance() { + position = "-489.163 24.1787 94.1874"; + rotation = "0 0 -1 45.8366"; + scale = "1 1 1"; + interiorFile = "btowr6.dif"; + showTerrainInside = "0"; + team = "2"; + locked = "true"; + }; + new InteriorInstance() { + position = "-366.114 346.526 81.8562"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + interiorFile = "bmisc2.dif"; + showTerrainInside = "0"; + team = "2"; + locked = "true"; + }; + new InteriorInstance() { + position = "-368.855 -17.7987 144.18"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bmisc3.dif"; + showTerrainInside = "0"; + team = "2"; + locked = "true"; + }; + new Turret(Team2TurretBaseLarge1) { + position = "-368.816 -17.3134 146.065"; + rotation = "0 0 1 180.482"; + scale = "1 1 1"; + nameTag = "Riverbank"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + team = "2"; + missionTypesList = "CTF"; + locked = "true"; + Target = "45"; + }; + new Turret(Team2TurretBaseLarge2) { + position = "-366.13 347.061 87.6066"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "Main Compound"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + team = "2"; + missionTypesList = "CTF"; + locked = "true"; + Target = "46"; + }; + new StaticShape(Team2generatorLarge1) { + position = "-299.87 424.396 126.213"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + team = "2"; + locked = "true"; + Target = "47"; + }; + new StaticShape(Team2StationInventory1) { + position = "-289.48 429.505 88.2248"; + rotation = "0 0 -1 90.5273"; + scale = "1 1 1"; + nameTag = "Rear"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + team = "2"; + Trigger = "3349"; + locked = "true"; + Target = "48"; + }; + new StaticShape(Team2StationInventory2) { + position = "-310.508 429.397 88.2255"; + rotation = "0 0 1 89.9543"; + scale = "1 1 1"; + nameTag = "Rear"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + team = "2"; + Trigger = "3351"; + locked = "true"; + Target = "49"; + }; + new StaticShape(Team2StationInventory3) { + position = "-283.274 410.286 88.2195"; + rotation = "0 0 1 180.091"; + scale = "1 1 1"; + nameTag = "Alcove"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + team = "2"; + Trigger = "3353"; + locked = "true"; + Target = "50"; + }; + new StaticShape(Team2StationInventory4) { + position = "-282.37 406.297 112.979"; + rotation = "0 0 1 138.656"; + scale = "1 1 1"; + nameTag = "Catwalk"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + team = "2"; + Trigger = "3355"; + locked = "true"; + Target = "51"; + }; + new StaticShape(Team2StationInventory5) { + position = "-317.519 406.405 112.977"; + rotation = "0 0 1 225.355"; + scale = "1 1 1"; + nameTag = "Catwalk"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + team = "2"; + Trigger = "3357"; + locked = "true"; + Target = "52"; + }; + new Item(Team2flag1) { + position = "-300.034 393.988 116.166"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + team = "2"; + missionTypesList = "CTF"; + locked = "true"; + originalPosition = "-300.034 393.988 116.166 1 0 0 0"; + Target = "53"; + isHome = "1"; + }; + new StaticShape(Team2StationInventory6) { + position = "-493.368 22.6056 92.1727"; + rotation = "0 0 1 223.636"; + scale = "1 1 1"; + nameTag = "Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + team = "2"; + Trigger = "3360"; + locked = "true"; + Target = "54"; + }; + new StaticShape(Team2StationInventory7) { + position = "-316.999 410.359 88.2198"; + rotation = "0 0 1 180.091"; + scale = "1 1 1"; + nameTag = "Alcove"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + team = "2"; + Trigger = "3362"; + locked = "true"; + Target = "55"; + }; + new Turret(Team2TurretBaseLarge3) { + position = "-496.762 19.2728 110.83"; + rotation = "0 0 1 224.782"; + scale = "1 1 1"; + nameTag = "Tower"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + team = "2"; + missionTypesList = "CTF"; + locked = "true"; + Target = "56"; + }; + new SimGroup(AIObjectives) { + powerCount = "1"; + + new AIObjective(AIOTouchObject) { + position = "-412.024 -599.725 202.733"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the enemy flag"; + mode = "FlagGrab"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3293"; + location = "-412.024 -599.725 202.733"; + weightLevel1 = "3850"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + isInvalid = "0"; + gameType = "CTF"; + }; + new AIObjective(AIOAttackObject) { + position = "-412.4 -628.202 212.99"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the GeneratorLarge"; + targetObject = "Team1generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3303"; + location = "-412.4 -628.202 212.99"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "MediumShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + isInvalid = "0"; + }; + new SimGroup(defense) { + powerCount = "1"; + + new AIObjective(AIODefendLocation) { + position = "-300.034 397.828 117.408"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend our flag"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3358"; + location = "-300.034 397.828 117.408"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ElfGun Chaingun SNiperRifle"; + buyEquipmentSet = "LightEnergyELF"; + chat = "ChatSelfDefendFlag DefendBase"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + group = "3368"; + isInvalid = "0"; + gameType = "CTF"; + }; + new AIObjective(AIODefendLocation) { + position = "-299.605 410.777 127.665"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the GeneratorLarge"; + targetObject = "Team2generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3347"; + location = "-299.605 410.777 127.665"; + weightLevel1 = "3300"; + weightLevel2 = "3100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "RepairPack ChainGun PlasmaRifle"; + buyEquipmentSet = "HeavyRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + group = "3368"; + isInvalid = "0"; + }; + }; + new SimGroup(Repairs) { + powerCount = "1"; + + new AIObjective(AIORepairObject) { + position = "-366.129 346.4 89.3581"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3346"; + location = "-366.129 346.4 89.3581"; + weightLevel1 = "3100"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + group = "3371"; + isInvalid = "0"; + gameType = "CTF"; + }; + new AIObjective(AIORepairObject) { + position = "-299.605 422.457 127.665"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the GeneratorLarge"; + targetObject = "Team2generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3347"; + location = "-299.605 422.457 127.665"; + weightLevel1 = "3200"; + weightLevel2 = "3000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + group = "3371"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "-316.999 410.359 89.7856"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory7"; + targetClientId = "-1"; + targetObjectId = "3361"; + location = "-316.999 410.359 89.7856"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + group = "3371"; + isInvalid = "0"; + }; + }; + new SimGroup(General) { + powerCount = "1"; + + new AIObjective(AIOTouchObject) { + position = "-300.034 393.988 117.408"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Return our flag"; + mode = "FlagDropped"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3358"; + location = "-300.034 393.988 117.408"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + group = "3375"; + isInvalid = "0"; + gameType = "CTF"; + }; + new AIObjective(AIOTouchObject) { + position = "-412.024 -599.725 202.733"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the flag!"; + mode = "FlagCapture"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3293"; + location = "-412.024 -599.725 202.733"; + weightLevel1 = "5000"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + group = "3375"; + isInvalid = "0"; + gameType = "CTF"; + }; + new AIObjective(AIOTouchObject) { + position = "-412.024 -599.725 202.733"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the dropped enemy flag"; + mode = "FlagDropped"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3293"; + location = "-412.024 -599.725 202.733"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + group = "3375"; + isInvalid = "0"; + gameType = "CTF"; + }; + new AIObjective(AIOAttackPlayer) { + position = "-300.034 393.988 117.408"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Kill the enemy flag carrier"; + mode = "FlagCarrier"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3358"; + location = "-300.034 393.988 117.408"; + weightLevel1 = "4800"; + weightLevel2 = "3000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "EnergyPack ElfGun Chaingun SniperRifle"; + buyEquipmentSet = "LightEnergyELF"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + group = "3375"; + isInvalid = "0"; + gameType = "CTF"; + }; + }; + new SimGroup(Deploy3) { + powerCount = "1"; + + new AIObjective(AIODeployEquipment) { + position = "-302.831 405.963 92.2903"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-302.831 405.963 92.2903"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + group = "3380"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-305.109 394.148 91.9202"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-305.109 394.148 91.9202"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + group = "3380"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-298.529 406.948 92.4119"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-298.529 406.948 92.4119"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + group = "3380"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-296.632 391.429 91.8408"; + rotation = "0 0 1 159.855"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-296.632 391.429 91.8408"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + group = "3380"; + isInvalid = "0"; + }; + }; + new SimGroup(Deploy4) { + powerCount = "1"; + + new AIObjective(AIODeployEquipment) { + position = "-290.837 422.998 126.231"; + rotation = "0 0 -1 38.9611"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy Inventory Station"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-290.837 422.998 126.231"; + weightLevel1 = "4150"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "InventoryDeployable"; + buyEquipmentSet = "MediumInventorySet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + group = "3385"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-281.537 402.167 126.265"; + rotation = "0 0 1 228.792"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-281.537 402.167 126.265"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + group = "3385"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-318.617 402.265 126.233"; + rotation = "2.19218e-09 -6.50844e-10 1 135.219"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-318.617 402.265 126.233"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + group = "3385"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-307.326 402.176 126.206"; + rotation = "0.00499996 -0.00251341 0.999984 233.375"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-307.326 402.176 126.206"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + group = "3385"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-292.703 402.233 126.209"; + rotation = "0 0 1 136.364"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-292.703 402.233 126.209"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + team = "2"; + group = "3385"; + isInvalid = "0"; + }; + }; + }; + }; + new SimGroup(team0) { + powerCount = "0"; + + new InteriorInstance() { + position = "-254.396 -86.9783 109.648"; + rotation = "0.220023 -0.0828172 0.971973 42.3385"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + team = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-264.794 -98.8338 112.355"; + rotation = "0.220023 -0.0828172 0.971973 42.3385"; + scale = "1 1 1"; + interiorFile = "bbrdg1.dif"; + showTerrainInside = "0"; + team = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-275.192 -110.689 115.062"; + rotation = "0.220023 -0.0828172 0.971973 42.3385"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + team = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-285.59 -122.545 117.769"; + rotation = "0.220023 -0.0828172 0.971973 42.3385"; + scale = "1 1 1"; + interiorFile = "bbrdg1.dif"; + showTerrainInside = "0"; + team = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-295.988 -134.4 120.476"; + rotation = "0.220023 -0.0828172 0.971973 42.3385"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + team = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-306.387 -146.256 123.182"; + rotation = "0.220023 -0.0828172 0.971973 42.3385"; + scale = "1 1 1"; + interiorFile = "bbrdg1.dif"; + showTerrainInside = "0"; + team = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-316.785 -158.111 125.889"; + rotation = "0.220023 -0.0828172 0.971973 42.3385"; + scale = "1 1 1"; + interiorFile = "bbrdgb.dif"; + showTerrainInside = "0"; + team = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-327.183 -169.967 128.596"; + rotation = "0.220023 -0.0828172 0.971973 42.3385"; + scale = "1 1 1"; + interiorFile = "bbrdg1.dif"; + showTerrainInside = "0"; + team = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-77.0947 -91.2849 277.314"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "bbunkd.dif"; + showTerrainInside = "0"; + team = "0"; + locked = "true"; + }; + new Item() { + position = "-300.065 408.89 95.3845"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + team = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-412.001 -614.569 180.794"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + team = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-192.976 -273.024 83.6261"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + team = "0"; + locked = "true"; + Target = "-1"; + }; + new Item() { + position = "-492.927 27.58 99.1967"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + team = "0"; + locked = "true"; + Target = "-1"; + }; + new SimGroup(AIObjectives) { + powerCount = "0"; + }; + }; + }; + new SimGroup(AudioCreatures) { + powerCount = "0"; + + new AudioEmitter() { + position = "-94.0017 -850.072 58.5574"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/frog1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.5"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-31.8275 -326.177 64.703"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/frog1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.5"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-617.199 -239.103 66.0503"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/frog1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.5"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-590.519 65.6461 64.0405"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/frog1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.5"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + }; + new SimGroup(AudioWater) { + powerCount = "0"; + + new AudioEmitter() { + position = "-3.409 -899.704 6.7194"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.25"; + isLooping = "1"; + is3D = "1"; + minDistance = "100"; + maxDistance = "6400"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-162.75 -854.68 21.2708"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.25"; + isLooping = "1"; + is3D = "1"; + minDistance = "100"; + maxDistance = "6400"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-193.143 -576.66 21.7311"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.25"; + isLooping = "1"; + is3D = "1"; + minDistance = "80"; + maxDistance = "5120"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-200.348 -715.484 30.2868"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.25"; + isLooping = "1"; + is3D = "1"; + minDistance = "80"; + maxDistance = "5120"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-118.657 -471.908 16.0065"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.25"; + isLooping = "1"; + is3D = "1"; + minDistance = "80"; + maxDistance = "5120"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-116.215 -311.324 19.8767"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.25"; + isLooping = "1"; + is3D = "1"; + minDistance = "80"; + maxDistance = "5120"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-215.316 -192.442 16.6968"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.25"; + isLooping = "1"; + is3D = "1"; + minDistance = "80"; + maxDistance = "5120"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-328.211 -99.5332 15.4853"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.25"; + isLooping = "1"; + is3D = "1"; + minDistance = "80"; + maxDistance = "5120"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-502.77 -70.5871 26.3138"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.25"; + isLooping = "1"; + is3D = "1"; + minDistance = "80"; + maxDistance = "5120"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-605.967 -182.555 18.3957"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.25"; + isLooping = "1"; + is3D = "1"; + minDistance = "50"; + maxDistance = "3200"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-573.833 7.4946 36.1315"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.25"; + isLooping = "1"; + is3D = "1"; + minDistance = "50"; + maxDistance = "3200"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + }; + new SimGroup(RandomOrganics) { + powerCount = "0"; + + new SimGroup(Addition7belgtree16) { + powerCount = "0"; + + new TSStatic() { + position = "-564 -908 78.6093"; + rotation = "0 0 1 202"; + scale = "1.5 1.5 1.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-431.905 -492.975 166.311"; + rotation = "0 0 1 9.99997"; + scale = "2 2 2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "52.4125 -436.187 116.962"; + rotation = "0 0 1 119"; + scale = "2.5 2.5 2.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-668 -932 123.562"; + rotation = "0 0 -1 61.0005"; + scale = "2.5 2.5 2.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-169.868 -621.692 85.7429"; + rotation = "0 0 -1 53"; + scale = "2.1 2.1 2.1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-668 -956 121.125"; + rotation = "0 0 -1 38"; + scale = "2.4 2.4 2.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-4 -628 172.922"; + rotation = "0 0 1 61"; + scale = "1.6 1.6 1.6"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-321.164 -658.008 191.488"; + rotation = "0 0 -1 74.0004"; + scale = "2.5 2.5 2.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-220 -316 116.516"; + rotation = "0 0 -1 88"; + scale = "2.1 2.1 2.1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition8belgtree18) { + powerCount = "0"; + + new TSStatic() { + position = "124 -332 128.102"; + rotation = "0 0 1 7.00001"; + scale = "2.9 2.9 2.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "36 -276 115.451"; + rotation = "0 0 1 213"; + scale = "2.1 2.1 2.1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-316 -252 137.672"; + rotation = "0 0 1 108"; + scale = "2.2 2.2 2.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-564 -436 137.484"; + rotation = "0 0 1 35"; + scale = "2.5 2.5 2.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-540 -692 118.281"; + rotation = "0 0 1 29"; + scale = "2.6 2.6 2.6"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-244 -404 117.828"; + rotation = "0 0 -1 89.0004"; + scale = "2.5 2.5 2.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-716 -100 107.297"; + rotation = "0 0 -1 10.0001"; + scale = "3 3 3"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-51.7702 -202.073 135.731"; + rotation = "0 0 -1 115.296"; + scale = "2.5 2.5 2.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-316.608 -561.951 155.821"; + rotation = "0 0 1 123"; + scale = "2.6 2.6 2.6"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-158.642 -199.603 97.4636"; + rotation = "0 0 1 8.03103"; + scale = "2.2 2.2 2.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-430.584 -411.965 191.665"; + rotation = "0 0 1 87.0002"; + scale = "2.9 2.9 2.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-748 -220 76.8125"; + rotation = "0 0 1 18"; + scale = "2.6 2.6 2.6"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-812 -356 116.344"; + rotation = "0 0 -1 16.0002"; + scale = "3 3 3"; + shapeName = "borg18.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition9belgtree19) { + powerCount = "0"; + + new TSStatic() { + position = "-668 -452 142.781"; + rotation = "0 0 1 192"; + scale = "2.1 2.1 2.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-186.347 -382.468 105.563"; + rotation = "0 0 1 78.0002"; + scale = "2.2 2.2 2.2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-604 -444 127.641"; + rotation = "0 0 1 51"; + scale = "2.3 2.3 2.3"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-12 -532 90.8437"; + rotation = "0 0 1 6.00005"; + scale = "2.2 2.2 2.2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "92 -580 129.266"; + rotation = "0 0 1 161"; + scale = "2.3 2.3 2.3"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-716 -564 98.46"; + rotation = "0 0 1 224"; + scale = "2 2 2"; + shapeName = "borg19.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition10belgtree16) { + powerCount = "0"; + + new TSStatic() { + position = "-532 60 83.8907"; + rotation = "0 0 -1 94"; + scale = "1.7 1.7 1.7"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "28 -260 116.437"; + rotation = "0 0 -1 13.0002"; + scale = "1.8 1.8 1.8"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-508 68 91.7969"; + rotation = "0 0 1 136"; + scale = "2.1 2.1 2.1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-588 -28 72.3282"; + rotation = "0 0 -1 118"; + scale = "2.4 2.4 2.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-676.766 131.135 97.5548"; + rotation = "0 0 -1 75.0002"; + scale = "2.2 2.2 2.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-788 220 91.0313"; + rotation = "0 0 -1 53.9998"; + scale = "1.5 1.5 1.5"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-679.254 -281.139 91.8457"; + rotation = "0 0 -1 17.9998"; + scale = "2.2 2.2 2.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-668 -116 112.078"; + rotation = "0 0 -1 41.9998"; + scale = "1.6 1.6 1.6"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-452 36 112.625"; + rotation = "0 0 -1 80.0004"; + scale = "2.1 2.1 2.1"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-412 604 92.9218"; + rotation = "0 0 1 109"; + scale = "2.3 2.3 2.3"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-244 492 109.328"; + rotation = "0 0 1 173"; + scale = "1.6 1.6 1.6"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-836 452 92.3594"; + rotation = "0 0 1 32"; + scale = "2.4 2.4 2.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-660 564 77.7656"; + rotation = "0 0 1 227"; + scale = "1.6 1.6 1.6"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-580 132 78.0156"; + rotation = "0 0 1 193"; + scale = "1.7 1.7 1.7"; + shapeName = "borg16.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition11belgtree18) { + powerCount = "0"; + + new TSStatic() { + position = "-396.769 857.43 61.6791"; + rotation = "0 0 -1 96.0002"; + scale = "2.2 2.2 2.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-262.98 225.372 80.7198"; + rotation = "0 0 1 82"; + scale = "2.3 2.3 2.3"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-444.588 477.405 82.4872"; + rotation = "0 0 1 35.3091"; + scale = "2.9 2.9 2.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-812 316 101.078"; + rotation = "0 0 -1 16.0002"; + scale = "2.7 2.7 2.7"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-92.4422 154.282 80.4789"; + rotation = "0 0 1 107"; + scale = "2.9 2.9 2.9"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-490.094 -275.639 151.905"; + rotation = "0 0 1 29"; + scale = "3 3 3"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-225.103 -89.2998 107.442"; + rotation = "0 0 1 12.3585"; + scale = "2.7 2.7 2.7"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-622.875 -306.136 86.5078"; + rotation = "0 0 -1 84.0002"; + scale = "2.4 2.4 2.4"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-503.04 598.339 117.499"; + rotation = "0 0 1 189"; + scale = "3 3 3"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-585.251 -96.8789 73.2344"; + rotation = "0 0 -1 90.0002"; + scale = "3 3 3"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-812 172 79.7188"; + rotation = "0 0 -1 99.0002"; + scale = "2.2 2.2 2.2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-661.997 -166.649 90.2656"; + rotation = "0 0 1 135"; + scale = "2.8 2.8 2.8"; + shapeName = "borg18.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition12belgtree19) { + powerCount = "0"; + + new TSStatic() { + position = "98.3823 174.606 102.781"; + rotation = "0 0 1 11"; + scale = "2.5 2.5 2.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-540 380 107.904"; + rotation = "0 0 -1 16.9999"; + scale = "2.4 2.4 2.4"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-420 436 79.8125"; + rotation = "0 0 -1 38.9999"; + scale = "1.8 1.8 1.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-270.929 272.967 82.6457"; + rotation = "0 0 -1 59.0003"; + scale = "1.7 1.7 1.7"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-788 -164 85.4691"; + rotation = "0 0 1 109"; + scale = "2.1 2.1 2.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-796 380 99.984"; + rotation = "0 0 1 107"; + scale = "2.1 2.1 2.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-604 188 75.0938"; + rotation = "0 0 1 129"; + scale = "1.8 1.8 1.8"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-612 324 113.188"; + rotation = "0 0 1 56"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-468 356 79.2813"; + rotation = "0 0 -1 95.0004"; + scale = "2.1 2.1 2.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "137.649 22.9043 77.5"; + rotation = "0 0 1 200"; + scale = "2.1 2.1 2.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + }; + new TSStatic() { + position = "-418.631 265.493 47.4765"; + rotation = "1 0 0 0"; + scale = "2.5 2.5 2.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new SimGroup(Addition1BEPlant5) { + powerCount = "0"; + + new TSStatic() { + position = "-76 -660 180.578"; + rotation = "-0.113644 0.233577 0.965674 193.524"; + scale = "1 1 1.5"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-652 -172 91.8438"; + rotation = "0.00568772 -0.117519 0.993054 44.2781"; + scale = "1.2 1.2 1.8"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-428 -276 167.484"; + rotation = "-0.901262 -0.362844 0.236793 32.9045"; + scale = "1.1 1.1 1.65"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-436 -124 90.4062"; + rotation = "0.743772 0.25287 -0.618757 43.8942"; + scale = "1.3 1.3 1.95"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-44 -452 96.8907"; + rotation = "-0.443975 0.0163538 0.89589 85.2361"; + scale = "1 1 1.5"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-444 -180 140.578"; + rotation = "0.101435 0.291866 0.951065 97.856"; + scale = "1 1 1.5"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-348 -380 150.969"; + rotation = "0.0477031 0.182953 0.981964 215.391"; + scale = "1.4 1.4 2.1"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-84 -524 84.5157"; + rotation = "-0.319036 0.168786 0.932592 97.9758"; + scale = "1.3 1.3 1.95"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-564 -436 140.484"; + rotation = "-0.02381 0.165032 0.986001 139.527"; + scale = "1.3 1.3 1.95"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-212 -108 104.703"; + rotation = "-0.234383 -0.127676 0.963724 95.1122"; + scale = "1.3 1.3 1.95"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-508 -212 137.391"; + rotation = "-0.0805316 0.0673309 -0.994475 86.3166"; + scale = "1.1 1.1 1.65"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-644 -612 136.516"; + rotation = "0.17153 0.0919233 0.980881 115.007"; + scale = "1.1 1.1 1.65"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "36 -260 120.563"; + rotation = "-0.0519213 -0.0345 0.998055 152.052"; + scale = "1.2 1.2 1.8"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-412 -204 155.469"; + rotation = "0.592336 -0.221334 0.774693 55.0869"; + scale = "1.3 1.3 1.95"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "36 -628 187.734"; + rotation = "0.100115 -0.263948 -0.959327 116.155"; + scale = "1.3 1.3 1.95"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-212 -332 120.312"; + rotation = "0.352327 0.0566948 0.934158 114.597"; + scale = "1.2 1.2 1.8"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-12 -524 93.375"; + rotation = "0.0249993 -0.00303947 0.999683 202.993"; + scale = "1.3 1.3 1.95"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-364 -260 143.188"; + rotation = "0.354449 0.0929582 0.930443 45.8915"; + scale = "1.5 1.5 2.25"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-524 -420 137.547"; + rotation = "0.348556 0.709989 0.611902 45.8222"; + scale = "1.1 1.1 1.65"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-740 -340 110.469"; + rotation = "0.155826 -0.256603 -0.953873 58.2727"; + scale = "1.5 1.5 2.25"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-668 -332 97.0469"; + rotation = "0.151187 0.0899201 0.984407 123.751"; + scale = "1.5 1.5 2.25"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-60 -204 137.656"; + rotation = "-0.638928 0.493417 -0.590179 33.2689"; + scale = "1.1 1.1 1.65"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-380 -660 203.703"; + rotation = "0.153798 -0.341992 -0.927032 27.969"; + scale = "1.2 1.2 1.8"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-500 -628 158.672"; + rotation = "-0.232244 -0.0180055 0.972491 190.699"; + scale = "1.2 1.2 1.8"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "20 -332 113.531"; + rotation = "-0.221933 0.203825 0.95352 98.7045"; + scale = "1.3 1.3 1.95"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-276 -428 129.031"; + rotation = "0.256017 -0.400229 0.879927 27.1606"; + scale = "1.3 1.3 1.95"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-636 -460 131.109"; + rotation = "0.252247 -0.0841962 0.963993 167.464"; + scale = "1 1 1.5"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-628 -628 129.953"; + rotation = "0.203724 0.00772258 0.978998 225.131"; + scale = "1.5 1.5 2.25"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-724 -716 137.766"; + rotation = "0.0566774 0.259282 0.964137 85.0808"; + scale = "1.2 1.2 1.8"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-700 -124 118.203"; + rotation = "0.317214 -0.277848 0.906739 39.4292"; + scale = "1.3 1.3 1.95"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "20 -364 107.562"; + rotation = "0.0738744 0.56086 -0.824608 54.4754"; + scale = "1.5 1.5 2.25"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-548 -868 110.391"; + rotation = "-0.0888905 -0.0541436 0.994569 119.273"; + scale = "1.5 1.5 2.25"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-596 -764 83.7031"; + rotation = "-0.496667 -0.304143 -0.812907 65.2696"; + scale = "1.3 1.3 1.95"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-484 -476 170.687"; + rotation = "0.136571 0.333659 0.932749 62.4788"; + scale = "1.3 1.3 1.95"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-564 -620 144.156"; + rotation = "-0.818764 0.246124 0.518699 33.96"; + scale = "1.4 1.4 2.1"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-444 -132 92.1719"; + rotation = "0.0449544 0.35262 0.934686 110.662"; + scale = "1.5 1.5 2.25"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-412 -316 156.938"; + rotation = "-0.00092261 -0.0287017 0.999588 223.984"; + scale = "1.1 1.1 1.65"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-436 -500 171.75"; + rotation = "0.0381319 -0.250235 0.967434 186.773"; + scale = "1.3 1.3 1.95"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-172 -380 105.266"; + rotation = "0.211562 -0.0670621 0.975061 137.977"; + scale = "1.1 1.1 1.65"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-676 -300 96.5626"; + rotation = "0.0010811 -0.0595557 -0.998224 119.089"; + scale = "1.1 1.1 1.65"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "44 -268 119.875"; + rotation = "0.0769184 -0.174403 0.981665 49.805"; + scale = "1.5 1.5 2.25"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-652 -92 108.953"; + rotation = "0.284103 -0.680436 0.675494 48.7033"; + scale = "1.2 1.2 1.8"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-452 -276 167.453"; + rotation = "-0.582511 0.810187 -0.0654069 15.2014"; + scale = "1.3 1.3 1.95"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-516 -548 176.078"; + rotation = "0.317019 -0.0707498 -0.945777 103.129"; + scale = "1.4 1.4 2.1"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-324 -444 136.75"; + rotation = "0.12169 0.147622 0.981529 190.798"; + scale = "1.4 1.4 2.1"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-628 -532 125.266"; + rotation = "-0.0961287 -0.0401914 0.994557 114.286"; + scale = "1.5 1.5 2.25"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-700 -852 137"; + rotation = "0.015669 -0.446086 0.894853 50.7547"; + scale = "1.2 1.2 1.8"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-660 -284 94.0157"; + rotation = "0.1118 -0.00200782 0.993729 71.3407"; + scale = "1.4 1.4 2.1"; + shapeName = "borg5.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition2BEPlant5) { + powerCount = "0"; + + new TSStatic() { + position = "-276 140 137.031"; + rotation = "0.15768 -0.772403 -0.615248 35.0668"; + scale = "1.1 1.1 1.65"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-220 412 128.594"; + rotation = "-0.0923854 0.110649 -0.989556 81.5943"; + scale = "1 1 1.5"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-460 596 107.359"; + rotation = "-0.46413 -0.627654 0.625007 43.4961"; + scale = "1.2 1.2 1.8"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-652 268 120.938"; + rotation = "-0.130163 -0.378324 0.916476 92.9956"; + scale = "1.1 1.1 1.65"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-732 180 79.4843"; + rotation = "-0.533951 0.487593 -0.69076 7.23332"; + scale = "1 1 1.5"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-444 500 86.125"; + rotation = "0.461884 -0.0811535 -0.88322 31.5284"; + scale = "1.3 1.3 1.95"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-508 4 89.7969"; + rotation = "-0.169624 0.278235 -0.945417 56.6441"; + scale = "1.5 1.5 2.25"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-492 604 122.828"; + rotation = "0.586461 -0.272259 0.762849 24.7455"; + scale = "1.1 1.1 1.65"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-4 452 92.8906"; + rotation = "-0.205546 -0.00558445 0.978631 150.613"; + scale = "1.1 1.1 1.65"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-180 92 97.2656"; + rotation = "0.693535 -0.213171 -0.688162 39.8322"; + scale = "1.4 1.4 2.1"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-708 164 89.0156"; + rotation = "-0.131741 0.118105 0.984223 165.234"; + scale = "1.2 1.2 1.8"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-196 548 94.4219"; + rotation = "-0.055724 0.503102 -0.862429 71.8506"; + scale = "1.2 1.2 1.8"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-700 172 88.5625"; + rotation = "0.078502 0.000426481 0.996914 135.125"; + scale = "1 1 1.5"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-516 572 122.344"; + rotation = "-0.87303 -0.483412 0.0642756 30.3864"; + scale = "1.1 1.1 1.65"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-420 468 83.8437"; + rotation = "0.0284757 0.0480337 0.99844 62.0788"; + scale = "1.5 1.5 2.25"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-620 -148 84.4688"; + rotation = "0.0174162 -0.324119 0.945856 114.925"; + scale = "1.3 1.3 1.95"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-388 492 78.0156"; + rotation = "0.0996139 -0.192765 0.976176 52.0818"; + scale = "1.4 1.4 2.1"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-108 196 84.2343"; + rotation = "-0.0567583 -0.0952192 -0.993837 64.3191"; + scale = "1.4 1.4 2.1"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-364 -28 142.453"; + rotation = "-0.256376 0.259399 -0.931119 97.0714"; + scale = "1.5 1.5 2.25"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-284 524 92.6094"; + rotation = "0.821528 0.242407 -0.516072 41.2785"; + scale = "1.4 1.4 2.1"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-548 68 83.7343"; + rotation = "-0.504578 0.504776 0.70043 45.8473"; + scale = "1.2 1.2 1.8"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-564 476 94.5469"; + rotation = "0.673923 -0.126667 0.727862 48.1122"; + scale = "1.5 1.5 2.25"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-292 596 82.8594"; + rotation = "-0.242073 0.0894355 -0.966127 115.791"; + scale = "1.3 1.3 1.95"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-140 84 81.5781"; + rotation = "0.379139 0.093493 0.920605 57.9261"; + scale = "1.5 1.5 2.25"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-76 108 84.5001"; + rotation = "0.14743 0.401667 0.903841 61.9883"; + scale = "1.3 1.3 1.95"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-356 548 79.4999"; + rotation = "-0.0398515 -0.0912165 0.995033 138.191"; + scale = "1 1 1.5"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-436 -124 90.4062"; + rotation = "-0.115271 0.274523 0.954646 160.89"; + scale = "1 1 1.5"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-268 332 83.7656"; + rotation = "0.158365 0.133043 -0.978376 102.227"; + scale = "1.3 1.3 1.95"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-124 372 132.187"; + rotation = "-0.0651454 -0.248483 -0.966443 87.953"; + scale = "1.5 1.5 2.25"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-412 348 77.0781"; + rotation = "-0.262712 0.044508 -0.963847 87.1045"; + scale = "1.2 1.2 1.8"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-28 476 82.0469"; + rotation = "0.412888 0.134603 -0.900781 55.8035"; + scale = "1.1 1.1 1.65"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-652 76 84.5157"; + rotation = "0.108941 0.0245808 0.993744 234.706"; + scale = "1.3 1.3 1.95"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-268 188 92.3594"; + rotation = "-0.0570135 -0.488847 -0.870504 61.7597"; + scale = "1.2 1.2 1.8"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-636 20 90.7031"; + rotation = "0.152427 -0.00428874 0.988305 69.631"; + scale = "1 1 1.5"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-364 52 134.562"; + rotation = "0.648587 -0.0485525 -0.75959 29.9888"; + scale = "1 1 1.5"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-356 396 76.9531"; + rotation = "-0.503816 0.135353 0.853141 25.6704"; + scale = "1 1 1.5"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-572 372 97.2344"; + rotation = "-0.367845 0.705366 0.605929 29.2977"; + scale = "1.2 1.2 1.8"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-596 276 106.266"; + rotation = "-0.380743 0.0258507 -0.92432 88.4984"; + scale = "1.2 1.2 1.8"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-644 124 85.7969"; + rotation = "0.263288 0.175584 0.948604 221.94"; + scale = "1.3 1.3 1.95"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-580 588 98.4531"; + rotation = "0.0465567 0.653879 -0.755166 52.6803"; + scale = "1.3 1.3 1.95"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-572 124 79.4843"; + rotation = "-0.318213 0.248094 -0.914981 44.4524"; + scale = "1 1 1.5"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-444 580 90.5625"; + rotation = "-0.0774069 -0.065488 0.994846 109.28"; + scale = "1.3 1.3 1.95"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-172 108 87.1563"; + rotation = "0.691166 -0.0711572 0.719184 38.241"; + scale = "1.5 1.5 2.25"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-196 -28 139.828"; + rotation = "-0.248132 -0.0652906 0.966523 138.314"; + scale = "1.4 1.4 2.1"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-628 -20 91.9375"; + rotation = "0.129105 0.188218 0.973605 188.763"; + scale = "1.4 1.4 2.1"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-636 -12 92.5938"; + rotation = "0.177594 0.195116 0.964567 230.389"; + scale = "1 1 1.5"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-436 564 87.5469"; + rotation = "-0.277154 0.513313 -0.812216 20.852"; + scale = "1 1 1.5"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-404 356 77.0937"; + rotation = "0.180924 -0.239242 0.953955 206.758"; + scale = "1.5 1.5 2.25"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-188 -36 142.359"; + rotation = "0.232119 0.218299 -0.947875 103.005"; + scale = "1.1 1.1 1.65"; + shapeName = "borg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-108 196 84.2343"; + rotation = "0.0598945 -0.044804 0.997199 104.156"; + scale = "1.1 1.1 1.65"; + shapeName = "borg5.dts"; + locked = "true"; + }; + }; + }; + new SimGroup(RandomRocks) { + powerCount = "0"; + + new SimGroup(Addition3brock8) { + powerCount = "0"; + + new InteriorInstance() { + position = "-483.613 -374.093 147.248"; + rotation = "0.0229003 0.995533 0.0915929 28.1959"; + scale = "1.5 1.5 1.5"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-583.494 -477.237 133.804"; + rotation = "0 0 1 0.0559529"; + scale = "0.5 0.5 0.5"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-488.494 -266.237 158.407"; + rotation = "0 0 1 2.53065"; + scale = "0.5 0.5 0.5"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-584.494 -155.237 53.2229"; + rotation = "0.996747 0.053185 0.0605497 82.7752"; + scale = "0.5 0.5 0.5"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "0.506165 -884.237 51.7016"; + rotation = "0 0 1 1.04753"; + scale = "0.5 0.5 0.5"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(Addition4brock8) { + powerCount = "0"; + + new InteriorInstance() { + position = "-48.4358 -94.1638 280.32"; + rotation = "0.99942 -0.00908851 -0.0328136 194.385"; + scale = "0.5 0.5 0.5"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-630.436 108.836 83.7527"; + rotation = "0.999904 0.00913793 0.0104033 82.5959"; + scale = "0.5 0.5 0.5"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-553.436 368.836 104.071"; + rotation = "0.998967 0.0260688 -0.0372268 194.244"; + scale = "0.5 0.5 0.5"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-520.86 159.391 77.8349"; + rotation = "0 0 1 196.63"; + scale = "1.5 1.5 1.5"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + }; + new TSStatic() { + position = "-330.874 133.436 139.654"; + rotation = "0 0 1 77.3035"; + scale = "3 3 3"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-443.73 129.656 123.107"; + rotation = "0 0 1 186.047"; + scale = "1.3 1.3 1.3"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-506.28 -574.043 180.552"; + rotation = "0 0 1 158.274"; + scale = "2.1 2.1 2.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new InteriorInstance() { + position = "-522.626 -69.5992 47.9001"; + rotation = "0 0 1 122.04"; + scale = "1.5 1.5 1.5"; + interiorFile = "bspir4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new TSStatic() { + position = "-319.494 -212.422 136.352"; + rotation = "0 0 -1 10.0001"; + scale = "2.1 2.1 2.1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-22.0009 -394.395 92.1406"; + rotation = "0 0 1 97.9998"; + scale = "2.3 2.3 2.3"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-97.2999 -962.344 72.5074"; + rotation = "0 0 1 157"; + scale = "2.5 2.5 2.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-555.387 -291.038 111.355"; + rotation = "0 0 1 158"; + scale = "2 2 2"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-503.997 -213.782 134.997"; + rotation = "0 0 1 167"; + scale = "2.5 2.5 2.5"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-873.575 -649.498 76.0124"; + rotation = "0 0 1 110"; + scale = "1.8 1.8 1.8"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-183.662 453.163 116.5"; + rotation = "0 0 -1 26.9998"; + scale = "2.4 2.4 2.4"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-322.778 38.3542 135.572"; + rotation = "0 0 -1 119"; + scale = "2.2 2.2 2.2"; + shapeName = "borg16.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-1001.92 92.9566 74.7078"; + rotation = "0 0 1 173"; + scale = "2.2 2.2 2.2"; + shapeName = "borg19.dts"; + locked = "true"; + }; +}; +//--- OBJECT WRITE END --- + +Game.cdtrack = 2; diff --git a/base/missions/Sanctuary.mis b/base/missions/Sanctuary.mis new file mode 100644 index 0000000..31b3526 --- /dev/null +++ b/base/missions/Sanctuary.mis @@ -0,0 +1,2970 @@ +// MissionTypes = CTF + +//--- MISSION QUOTE BEGIN --- +//Butchers is an apt title for them, but they shed blood without purpose. God shall abandon them. +// -- Firelord Anton Malderi on the Blood Eagle, 3937 CE +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[CTF]5 flag captures for victory +//Remotely located repair packs could bolster opposition +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + musicTrack = "lush"; + powerCount = "0"; + CTF_scoreLimit = "5"; + cdTrack = "2"; + + new MissionArea(MissionArea) { + area = "-976 -928 1360 1424"; + flightCeiling = "2000"; + flightCeilingRange = "50"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.600000 0.600000 0.600000 1.000000"; + ambient = "0.600000 0.600000 0.600000 1.000000"; + scale = "1 1 1"; + position = "-1024 -1024 0"; + rotation = "1 0 0 0"; + }; + new Sky(Sky) { + position = "-1024 -1024 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "300"; + useSkyTextures = "1"; + SkySolidColor = "0.106000 0.125000 0.235000 0.000000"; + fogDistance = "250"; + fogColor = "0.170000 0.170000 0.170000 1.000000"; + fogVolume1 = "80 1 72"; + fogVolume2 = "250 73 250"; + fogVolume3 = "8000 251 500"; + materialList = "lush_dark.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 -0.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 844439074249547710000.000000"; + cloudSpeed0 = "0.000500 0.000500"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/lushdet2"; + terrainFile = "Sanctuary.ter"; + squareSize = "8"; + hazeDistance = "250"; + visibleDistance = "500"; + position = "-1024 -1024 0"; + lastDamagedBy = "2"; + lastDamagedByTeam = "1"; + }; + new Terraformer(Terraformer) { + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "70"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + scale = "1 1 1"; + conjoinBowlDev = "20"; + GraphFile = "Sanctuary.nav"; + coverage = "0"; + position = "0 0 0 1"; + rotation = "0 0 0 0"; + }; + new SimGroup(ObserverDropPoints) { + powerCount = "0"; + + new Camera() { + position = "-278.52 439.75 287.383"; + rotation = "0.00588202 -0.164249 0.986401 175.954"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + team = "0"; + }; + new Camera() { + position = "-451.588 -797.72 304.322"; + rotation = "0.788746 0.15624 -0.594533 36.8541"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + team = "0"; + }; + }; + new SimGroup(Teams) { + powerCount = "0"; + + new SimGroup(team0) { + powerCount = "0"; + + new SimGroup(AIObjectives) { + powerCount = "0"; + }; + }; + new SimGroup(Team1) { + powerCount = "0"; + + new SimGroup(equipment) { + powerCount = "2"; + team = "1"; + + new InteriorInstance() { + position = "-459.363 -723.638 210.051"; + rotation = "0 0 1 198.243"; + scale = "0.993914 1 1"; + interiorFile = "bbase4cm.dif"; + showTerrainInside = "0"; + team = "1"; + Hidden = "false"; + lastDamagedBy = "2"; + locked = "true"; + lastDamagedByTeam = "1"; + }; + new StaticShape(Team1StationInventory3) { + position = "-453.7 -754.041 224.031"; + rotation = "0 0 1 201.108"; + scale = "1 1 1"; + nameTag = "South"; + dataBlock = "stationInventory"; + lockCount = "0"; + homingCount = "0"; + target = "33"; + Trigger = "3336"; + notReady = "1"; + team = "1"; + inUse = "Down"; + }; + new StaticShape() { + position = "-502.671 -876.777 214.391"; + rotation = "0 0 1 204.546"; + scale = "1 1 1"; + nameTag = "Vehicle Pad"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + target = "-1"; + notReady = "1"; + team = "1"; + inUse = "Down"; + lastDamagedBy = "2"; + Ready = "1"; + lastDamagedByTeam = "1"; + station = "3338"; + }; + new StaticShape(Team1generatorLarge1) { + position = "-501.955 -707.453 210.551"; + rotation = "0 0 -1 73.1303"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "generatorLarge"; + lockCount = "0"; + homingCount = "0"; + target = "35"; + beingRepaired = "0"; + team = "1"; + inUse = "Up"; + lastDamagedBy = "2"; + lastDamagedByTeam = "1"; + }; + new StaticShape(Team1generatorLarge2) { + position = "-504.421 -714.945 210.601"; + rotation = "0 0 -1 69.51"; + scale = "1 1 1"; + nameTag = "Secondary"; + dataBlock = "generatorLarge"; + lockCount = "0"; + homingCount = "0"; + target = "36"; + team = "1"; + }; + new StaticShape(Team1StationInventory1) { + position = "-494.116 -696.271 224.015"; + rotation = "0 0 1 109.435"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "stationInventory"; + lockCount = "0"; + homingCount = "0"; + target = "37"; + Trigger = "3343"; + notReady = "1"; + team = "1"; + inUse = "Down"; + }; + new StaticShape(Team1SensorMediumPulse1) { + position = "-456.583 -644.825 240.163"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Hill"; + dataBlock = "sensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + target = "38"; + team = "1"; + lastDamagedBy = "2"; + }; + new Turret(Team1TurretBaseLarge1) { + position = "-437.596 -732.065 219.427"; + rotation = "0 0 1 108.862"; + scale = "1 1 1"; + nameTag = "Base"; + dataBlock = "turretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + target = "39"; + team = "1"; + lastDamagedBy = "2"; + }; + new StaticShape(Team1StationInventory4) { + position = "-437.07 -705.56 223.976"; + rotation = "0 0 1 20.6265"; + scale = "1 1 1"; + nameTag = "North"; + dataBlock = "stationInventory"; + lockCount = "0"; + homingCount = "0"; + target = "40"; + Trigger = "3347"; + notReady = "1"; + team = "1"; + inUse = "Down"; + }; + new StaticShape(Team1StationInventory2) { + position = "-507.886 -739.704 224.011"; + rotation = "0 0 1 110.008"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "stationInventory"; + lockCount = "0"; + homingCount = "0"; + target = "41"; + Trigger = "3349"; + notReady = "1"; + team = "1"; + inUse = "Down"; + lastDamagedBy = "2"; + lastDamagedByTeam = "1"; + }; + }; + new Item(Team1flag1) { + position = "-474.023 -719.821 210.309"; + rotation = "0 0 1 105.424"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + target = "42"; + team = "1"; + lastDamagedBy = "2"; + originalPosition = "-474.023 -719.821 210.309 0 0 1 1.84"; + locked = "false"; + isHome = "1"; + }; + new SimGroup(spawnspheres) { + powerCount = "0"; + team = "1"; + + new SpawnSphere() { + position = "-470.529 -720.7 222.858"; + rotation = "0 0 1 177.617"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "80"; + sphereWeight = "60"; + indoorWeight = "100"; + outdoorWeight = "100"; + team = "1"; + }; + }; + new StaticShape() { + position = "-474.023 -719.821 210.036"; + rotation = "0 0 1 197.098"; + scale = "1 1 1"; + dataBlock = "InteriorFlagStand"; + lockCount = "0"; + homingCount = "0"; + target = "-1"; + damageTimeMS = "1173895"; + team = "1"; + lastDamagedBy = "3315"; + locked = "false"; + lastDamagedByTeam = "1"; + }; + new SimGroup(AIObjectives) { + powerCount = "0"; + + new AIObjective(AIODefendLocation) { + position = "-474.023 -719.821 211.396"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend our flag"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3350"; + location = "-474.023 -719.821 211.396"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + chat = "ChatSelfDefendFlag DefendBase"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + gameType = "all"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIOTouchObject) { + position = "-247.801 359.1 231.027"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the enemy flag"; + mode = "FlagGrab"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3393"; + location = "-247.801 359.1 231.027"; + weightLevel1 = "3850"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + gameType = "all"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIOAttackPlayer) { + position = "-474.023 -719.821 211.396"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Kill the enemy flag carrier"; + mode = "FlagCarrier"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3350"; + location = "-474.023 -719.821 211.396"; + weightLevel1 = "4800"; + weightLevel2 = "3000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergySniper"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + gameType = "all"; + isInvalid = "0"; + team = "1"; + }; + new SimGroup(ObjectiveSet) { + powerCount = "0"; + + new AIObjective(AIORepairObject) { + position = "-437.07 -705.56 225.542"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3346"; + location = "-437.07 -705.56 225.542"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3359"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-507.848 -888.782 218.615"; + rotation = "0.756941 -0.0669726 0.650042 39.5001"; + scale = "0.688174 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + targetObject = "3338"; + targetClientId = "-1"; + targetObjectId = "3338"; + location = "-507.848 -888.782 218.615"; + weightLevel1 = "2800"; + weightLevel2 = "1300"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "0"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3359"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-456.853 -645.33 241.988"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SensorMediumPulse"; + targetObject = "Team1SensorMediumPulse1"; + targetClientId = "-1"; + targetObjectId = "3344"; + location = "-456.853 -645.33 241.988"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3359"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-507.886 -739.704 225.577"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3348"; + location = "-507.886 -739.704 225.577"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3359"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-436.971 -732.279 221.179"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team1TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3345"; + location = "-436.971 -732.279 221.179"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3359"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-494.116 -696.271 225.581"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3342"; + location = "-494.116 -696.271 225.581"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3359"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-502.348 -715.515 212.106"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team1generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3341"; + location = "-502.348 -715.515 212.106"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3359"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIORepairObject) { + position = "-499.986 -708.052 212.106"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team1generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3340"; + location = "-499.986 -708.052 212.106"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3359"; + isInvalid = "0"; + team = "1"; + }; + }; + new AIObjective(AIOTouchObject) { + position = "-474.023 -719.821 211.396"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Return our flag"; + mode = "FlagDropped"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3350"; + location = "-474.023 -719.821 211.396"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + gameType = "all"; + isInvalid = "0"; + team = "1"; + }; + new SimGroup(ObjectiveSet) { + powerCount = "0"; + + new AIObjective(AIOMortarObject) { + position = "-264.016 323.747 240.862"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3404"; + location = "-264.016 323.747 240.862"; + weightLevel1 = "2000"; + weightLevel2 = "500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3369"; + isInvalid = "0"; + team = "1"; + }; + }; + new AIObjective(AIOTouchObject) { + position = "-247.801 359.1 231.027"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the dropped enemy flag"; + mode = "FlagDropped"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3393"; + location = "-247.801 359.1 231.027"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + gameType = "all"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIOTouchObject) { + position = "-247.801 359.1 231.027"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the flag!"; + mode = "FlagCapture"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3393"; + location = "-247.801 359.1 231.027"; + weightLevel1 = "5000"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + gameType = "all"; + isInvalid = "0"; + team = "1"; + }; + new SimGroup(ObjectiveSet) { + powerCount = "0"; + + new AIObjective(AIODeployEquipment) { + position = "-447.187 -711.476 213.605"; + rotation = "-0.0184623 -0.0429773 0.998905 102.861"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-447.187 -711.476 213.605"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3373"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIODeployEquipment) { + position = "-474.239 -742.851 209.887"; + rotation = "0.912291 -0.170726 0.37226 53.3786"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy Inventory Station"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-474.239 -742.851 209.887"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "InventoryDeployable"; + buyEquipmentSet = "MediumInventorySet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3373"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIODeployEquipment) { + position = "-497.48 -732.153 210.575"; + rotation = "0.0157831 -0.0335904 0.999311 199.616"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-497.48 -732.153 210.575"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3373"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIODeployEquipment) { + position = "-440.479 -742.831 207.704"; + rotation = "0.262895 0.201127 -0.943628 75.2692"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-440.479 -742.831 207.704"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3373"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIODeployEquipment) { + position = "-515.632 -694.151 227.08"; + rotation = "-0.0555792 0.0226218 -0.998198 75.0999"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-515.632 -694.151 227.08"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3373"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIODeployEquipment) { + position = "-505.845 -710.363 216.589"; + rotation = "-0.382601 0.502456 0.775341 118.885"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-505.845 -710.363 216.589"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3373"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIODeployEquipment) { + position = "-497.703 -837.699 207.382"; + rotation = "0.207319 -0.389497 0.897391 119.097"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy Inventory Station"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-497.703 -837.699 207.382"; + weightLevel1 = "4200"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "InventoryDeployable"; + buyEquipmentSet = "MediumInventorySet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3373"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIODeployEquipment) { + position = "-451.199 -764.566 206.77"; + rotation = "0.337304 -0.340423 0.877689 97.9764"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-451.199 -764.566 206.77"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3373"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIODeployEquipment) { + position = "-476.869 -677.982 208.006"; + rotation = "0.167961 -0.401968 0.900117 138.776"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-476.869 -677.982 208.006"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3373"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIODeployEquipment) { + position = "-494.788 -819.781 208.068"; + rotation = "0.152573 -0.254071 0.955076 120.328"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-494.788 -819.781 208.068"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3373"; + isInvalid = "0"; + team = "1"; + }; + new AIObjective(AIODeployEquipment) { + position = "-393.951 -705.015 202.712"; + rotation = "0.666496 -0.188051 0.721401 42.7221"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-393.951 -705.015 202.712"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3373"; + isInvalid = "0"; + team = "1"; + }; + }; + }; + new SimGroup(Misc) { + powerCount = "0"; + + new Item() { + position = "-214.067 -569.617 167.18"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + target = "-1"; + team = "1"; + }; + new InteriorInstance() { + position = "-214.043 -569.517 156.404"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bmisc1.dif"; + showTerrainInside = "0"; + team = "1"; + }; + new InteriorInstance() { + position = "-193.539 284.568 245.397"; + rotation = "0 0 -1 36.0963"; + scale = "1 1 1"; + interiorFile = "bmisc1.dif"; + showTerrainInside = "0"; + team = "1"; + }; + new InteriorInstance() { + position = "-385.412 363.196 217.717"; + rotation = "0 0 1 105.424"; + scale = "1 1 1"; + interiorFile = "bvpad.dif"; + showTerrainInside = "0"; + team = "1"; + }; + new InteriorInstance() { + position = "-456.783 -645.234 230.259"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bmisc1.dif"; + showTerrainInside = "0"; + team = "1"; + }; + new InteriorInstance() { + position = "-496.286 -864.422 214.798"; + rotation = "0 0 1 24.0643"; + scale = "1 1 1"; + interiorFile = "bvpad.dif"; + showTerrainInside = "0"; + team = "1"; + }; + }; + }; + new SimGroup(Team2) { + powerCount = "0"; + + new Item(Team2flag1) { + position = "-247.801 359.1 229.938"; + rotation = "0 0 1 26.929"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + target = "43"; + team = "2"; + originalPosition = "-247.801 359.1 229.938 0 0 1 0.47"; + isHome = "1"; + }; + new SimGroup(equipment) { + powerCount = "2"; + team = "2"; + + new InteriorInstance() { + position = "-252.497 345.01 229.685"; + rotation = "0 0 -1 64.7442"; + scale = "1 1.15763 1"; + interiorFile = "bbase4cm.dif"; + showTerrainInside = "0"; + team = "2"; + locked = "true"; + }; + new StaticShape(Team2StationInventory4) { + position = "-287.53 344.9 243.663"; + rotation = "0 0 -1 73.9115"; + scale = "1 1 1"; + nameTag = "West"; + dataBlock = "stationInventory"; + lockCount = "0"; + homingCount = "0"; + target = "44"; + Trigger = "3397"; + notReady = "1"; + team = "2"; + inUse = "Down"; + }; + new StaticShape(Team2generatorLarge1) { + position = "-230.591 385.206 230.183"; + rotation = "0 0 1 25.2102"; + scale = "1 1 1"; + nameTag = "Main "; + dataBlock = "generatorLarge"; + lockCount = "0"; + homingCount = "0"; + target = "45"; + team = "2"; + lastDamagedBy = "2"; + }; + new StaticShape(Team2generatorLarge2) { + position = "-239.076 389.165 230.15"; + rotation = "0 0 1 24.0642"; + scale = "1 1 1"; + nameTag = "Secondary "; + dataBlock = "generatorLarge"; + lockCount = "0"; + homingCount = "0"; + target = "46"; + team = "2"; + lastDamagedBy = "2"; + }; + new StaticShape(Team2StationInventory1) { + position = "-265.773 396.705 243.645"; + rotation = "0 0 1 204.155"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "stationInventory"; + lockCount = "0"; + homingCount = "0"; + target = "47"; + Trigger = "3401"; + notReady = "1"; + team = "2"; + inUse = "Down"; + lastDamagedBy = "2"; + }; + new StaticShape(Team2StationInventory2) { + position = "-218.873 375.39 243.619"; + rotation = "0 0 1 206.838"; + scale = "1 1 1"; + nameTag = "Main"; + dataBlock = "stationInventory"; + lockCount = "0"; + homingCount = "0"; + target = "48"; + Trigger = "3403"; + notReady = "1"; + team = "2"; + inUse = "Down"; + }; + new Turret(Team2TurretBaseLarge1) { + position = "-263.724 324.34 239.11"; + rotation = "0 0 1 206.265"; + scale = "1 1 1"; + nameTag = "Base "; + dataBlock = "turretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + target = "49"; + ELFrecur = "2941"; + team = "2"; + lastDamagedBy = "2"; + }; + new StaticShape(Team2StationInventory3) { + position = "-233.647 319.35 243.666"; + rotation = "0 0 1 113.055"; + scale = "1 1 1"; + nameTag = "East"; + dataBlock = "stationInventory"; + lockCount = "0"; + homingCount = "0"; + target = "50"; + Trigger = "3406"; + notReady = "1"; + team = "2"; + inUse = "Down"; + }; + new StaticShape() { + position = "-396.14 366.643 217.31"; + rotation = "0 0 -1 74.4845"; + scale = "1 1 1"; + nameTag = "Vehicle Pad"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + target = "-1"; + notReady = "1"; + team = "2"; + inUse = "Down"; + Ready = "1"; + station = "3408"; + }; + new StaticShape(Team2SensorMediumPulse1) { + position = "-193.466 284.61 255.349"; + rotation = "0 0 1 143.422"; + scale = "1 1 1"; + nameTag = "Hill"; + dataBlock = "sensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + target = "52"; + team = "2"; + lastDamagedBy = "2"; + }; + }; + new SimGroup(spawnspheres) { + powerCount = "0"; + team = "2"; + + new SpawnSphere() { + position = "-247.065 363.69 246.544"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "80"; + sphereWeight = "60"; + indoorWeight = "35"; + outdoorWeight = "65"; + team = "2"; + }; + }; + new StaticShape() { + position = "-247.801 359.1 229.667"; + rotation = "-0 0 -1 65.3172"; + scale = "1 1 1"; + dataBlock = "InteriorFlagStand"; + lockCount = "0"; + homingCount = "0"; + target = "-1"; + team = "2"; + lastDamagedBy = "2"; + }; + new SimGroup(AIObjectives) { + powerCount = "0"; + + new SimGroup(ObjectiveSet) { + powerCount = "0"; + + new AIObjective(AIORepairObject) { + position = "-231.594 383.504 232.288"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team2generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3398"; + location = "-231.594 383.504 232.288"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3416"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIORepairObject) { + position = "-193.604 284.699 256.824"; + rotation = "0 0 -1 12.0321"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SensorMediumPulse"; + targetObject = "Team2SensorMediumPulse1"; + targetClientId = "-1"; + targetObjectId = "3410"; + location = "-193.604 284.699 256.824"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3416"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIORepairObject) { + position = "-264.016 323.747 240.862"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3404"; + location = "-264.016 323.747 240.862"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3416"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIORepairObject) { + position = "-233.647 319.35 245.232"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3405"; + location = "-233.647 319.35 245.232"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3416"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIORepairObject) { + position = "-218.873 375.39 245.185"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3402"; + location = "-218.873 375.39 245.185"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3416"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIORepairObject) { + position = "-267.233 397.36 245.211"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3400"; + location = "-267.233 397.36 245.211"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3416"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIORepairObject) { + position = "-239.849 387.061 232.305"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team2generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3399"; + location = "-239.849 387.061 232.305"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3416"; + isInvalid = "0"; + team = "2"; + }; + }; + new AIObjective(AIOTouchObject) { + position = "-247.801 359.1 231.027"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Return our flag"; + mode = "FlagDropped"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3393"; + location = "-247.801 359.1 231.027"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + gameType = "all"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIOAttackPlayer) { + position = "-247.801 359.1 231.027"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Kill the enemy flag carrier"; + mode = "FlagCarrier"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3393"; + location = "-247.801 359.1 231.027"; + weightLevel1 = "4800"; + weightLevel2 = "3000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergySniper"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + gameType = "all"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIODefendLocation) { + position = "-247.801 359.1 231.027"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend our flag"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3393"; + location = "-247.801 359.1 231.027"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + chat = "ChatSelfDefendFlag DefendBase"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + gameType = "all"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIOTouchObject) { + position = "-474.023 -719.821 211.396"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the dropped enemy flag"; + mode = "FlagDropped"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3350"; + location = "-474.023 -719.821 211.396"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + gameType = "all"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIOTouchObject) { + position = "-474.023 -719.821 211.396"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the flag!"; + mode = "FlagCapture"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3350"; + location = "-474.023 -719.821 211.396"; + weightLevel1 = "5000"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + gameType = "all"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIOTouchObject) { + position = "-474.023 -719.821 211.396"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the enemy flag"; + mode = "FlagGrab"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3350"; + location = "-474.023 -719.821 211.396"; + weightLevel1 = "3850"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + gameType = "all"; + isInvalid = "0"; + team = "2"; + }; + new SimGroup(ObjectiveSet) { + powerCount = "0"; + + new AIObjective(AIOAttackObject) { + position = "-437.07 -705.56 225.542"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3346"; + location = "-437.07 -705.56 225.542"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3430"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIOAttackObject) { + position = "-453.7 -754.041 225.597"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3335"; + location = "-453.7 -754.041 225.597"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3430"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIOMortarObject) { + position = "-456.853 -645.33 241.988"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the SensorMediumPulse"; + targetObject = "Team1SensorMediumPulse1"; + targetClientId = "-1"; + targetObjectId = "3344"; + location = "-456.853 -645.33 241.988"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3430"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIOAttackObject) { + position = "-507.886 -739.704 225.577"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3348"; + location = "-507.886 -739.704 225.577"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3430"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIOMortarObject) { + position = "-436.971 -732.279 221.179"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team1TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3345"; + location = "-436.971 -732.279 221.179"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3430"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIOAttackObject) { + position = "-494.116 -696.271 225.581"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3342"; + location = "-494.116 -696.271 225.581"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3430"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIOAttackObject) { + position = "-502.348 -715.515 212.106"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team1generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3341"; + location = "-502.348 -715.515 212.106"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3430"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIOAttackObject) { + position = "-499.986 -708.052 212.106"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team1generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3340"; + location = "-499.986 -708.052 212.106"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3430"; + isInvalid = "0"; + team = "2"; + }; + }; + new SimGroup(ObjectiveSet) { + powerCount = "0"; + + new AIObjective(AIODeployEquipment) { + position = "-233.404 388.693 236.131"; + rotation = "0.161307 0.477472 0.863713 212.534"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-233.404 388.693 236.131"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3439"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIODeployEquipment) { + position = "-215.632 397.329 245.636"; + rotation = "0 0 1 20.0535"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-215.632 397.329 245.636"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3439"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIODeployEquipment) { + position = "-240.717 331.198 231.463"; + rotation = "0 0 1 207.593"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-240.717 331.198 231.463"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3439"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIODeployEquipment) { + position = "-262.064 380.295 231.471"; + rotation = "0 0 -1 70.4738"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-262.064 380.295 231.471"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3439"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIODeployEquipment) { + position = "-221.915 355.943 229.474"; + rotation = "0.328649 0.201496 -0.922707 67.2052"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy Inventory Station"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-221.915 355.943 229.474"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "InventoryDeployable"; + buyEquipmentSet = "MediumInventorySet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3439"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIODeployEquipment) { + position = "-371.217 381.015 211.884"; + rotation = "-0.244113 -0.395755 0.885317 232.748"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy Inventory Station"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-371.217 381.015 211.884"; + weightLevel1 = "4300"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "InventoryDeployable"; + buyEquipmentSet = "MediumInventorySet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3439"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIODeployEquipment) { + position = "-349.309 372.086 215.176"; + rotation = "0.272888 -0.260697 0.92605 102.992"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-349.309 372.086 215.176"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3439"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIODeployEquipment) { + position = "-296.869 343.826 226.745"; + rotation = "-0.0642784 -0.332797 0.940805 200.598"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-296.869 343.826 226.745"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3439"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIODeployEquipment) { + position = "-236.536 296.638 228.111"; + rotation = "0.368861 0.357673 -0.857911 96.9986"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-236.536 296.638 228.111"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3439"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIODeployEquipment) { + position = "-193.084 342.457 229.783"; + rotation = "0.676699 -0.2901 0.676699 64.7098"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-193.084 342.457 229.783"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3439"; + isInvalid = "0"; + team = "2"; + }; + new AIObjective(AIODeployEquipment) { + position = "-265.167 414.943 227.734"; + rotation = "0.808363 -0.193541 0.55596 46.5982"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-265.167 414.943 227.734"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + group = "3439"; + isInvalid = "0"; + team = "2"; + }; + }; + }; + new SimGroup(Misc) { + powerCount = "0"; + + new InteriorInstance() { + position = "-191.665 49.0313 133.271"; + rotation = "0 0 -1 2.29172"; + scale = "1 1 1"; + interiorFile = "bmisc1.dif"; + showTerrainInside = "0"; + team = "2"; + }; + new Item() { + position = "-191.922 49.0127 144.047"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + target = "-1"; + team = "2"; + }; + }; + }; + }; + new SimGroup(Misc) { + powerCount = "0"; + }; + new SimGroup(Bridge) { + powerCount = "0"; + + new InteriorInstance() { + position = "-811.825 -37.563 105.583"; + rotation = "0 0 1 40.68"; + scale = "1 1 1"; + interiorFile = "bbrdg1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "-832.485 -61.61 105.583"; + rotation = "0 0 1 40.68"; + scale = "1 1 1"; + interiorFile = "bbrdg1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "-842.772 -73.551 105.583"; + rotation = "0 0 1 40.68"; + scale = "1 1 1"; + interiorFile = "bbrdg1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "-822.073 -49.487 105.583"; + rotation = "0 0 1 40.68"; + scale = "1 1 1"; + interiorFile = "bbrdg1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "-801.424 -25.417 105.593"; + rotation = "0 0 1 40.68"; + scale = "1 1 1"; + interiorFile = "bbrdg1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "-853.063 -85.564 105.584"; + rotation = "0 0 1 40.68"; + scale = "1 1 1"; + interiorFile = "bbrdg1.dif"; + showTerrainInside = "0"; + }; + }; + new SimGroup(Water) { + powerCount = "0"; + + new WaterBlock() { + position = "-920 -792 19.2205"; + rotation = "1 0 0 0"; + scale = "192 160 60"; + liquidType = "Water"; + density = "1"; + viscosity = "5"; + waveMagnitude = "2"; + surfaceTexture = "LiquidTiles/GreenWater"; + surfaceOpacity = "0.8"; + envMapTexture = "lush/skies/lushcloud1"; + envMapIntensity = "0.5"; + removeWetEdges = "1"; + }; + new WaterBlock() { + position = "-120 344 30.339"; + rotation = "1 0 0 0"; + scale = "288 224 60"; + liquidType = "Water"; + density = "1"; + viscosity = "5"; + waveMagnitude = "2"; + surfaceTexture = "LiquidTiles/GreenWater"; + surfaceOpacity = "0.8"; + envMapTexture = "lush/skies/lushcloud1"; + envMapIntensity = "0.5"; + removeWetEdges = "1"; + }; + new WaterBlock() { + position = "-104 -120 16.3623"; + rotation = "1 0 0 0"; + scale = "288 224 70"; + liquidType = "Water"; + density = "1"; + viscosity = "5"; + waveMagnitude = "2"; + surfaceTexture = "LiquidTiles/GreenWater"; + surfaceOpacity = "0.8"; + envMapTexture = "lush/skies/lushcloud1"; + envMapIntensity = "0.5"; + removeWetEdges = "1"; + }; + new WaterBlock() { + position = "-448 -80 36.8361"; + rotation = "1 0 0 0"; + scale = "224 192 50"; + liquidType = "Water"; + density = "1"; + viscosity = "5"; + waveMagnitude = "2"; + surfaceTexture = "LiquidTiles/GreenWater"; + surfaceOpacity = "0.8"; + envMapTexture = "lush/skies/lushcloud1"; + envMapIntensity = "0.5"; + removeWetEdges = "1"; + }; + new WaterBlock() { + position = "-704 -600 -0.359596"; + rotation = "1 0 0 0"; + scale = "288 224 80"; + liquidType = "Water"; + density = "1"; + viscosity = "5"; + waveMagnitude = "2"; + surfaceTexture = "LiquidTiles/GreenWater"; + surfaceOpacity = "0.8"; + envMapTexture = "lush/skies/lushcloud1"; + envMapIntensity = "0.5"; + removeWetEdges = "1"; + }; + new WaterBlock() { + position = "-920 -80 35"; + rotation = "1 0 0 0"; + scale = "128 160 50"; + liquidType = "Water"; + density = "1"; + viscosity = "5"; + waveMagnitude = "1.5"; + surfaceTexture = "LiquidTiles/GreenWater"; + surfaceOpacity = "0.8"; + envMapTexture = "lush/skies/lushcloud1"; + envMapIntensity = "0.5"; + removeWetEdges = "1"; + }; + new WaterBlock() { + position = "-16 -440 69"; + rotation = "1 0 0 0"; + scale = "128 128 30"; + liquidType = "Water"; + density = "1"; + viscosity = "5"; + waveMagnitude = "2"; + surfaceTexture = "LiquidTiles/GreenWater"; + surfaceOpacity = "0.8"; + envMapTexture = "lush/skies/lushcloud1"; + envMapIntensity = "0.5"; + removeWetEdges = "1"; + }; + new WaterBlock() { + position = "-440 -280 67.038"; + rotation = "1 0 0 0"; + scale = "96 128 50"; + liquidType = "Water"; + density = "1"; + viscosity = "5"; + waveMagnitude = "2"; + surfaceTexture = "LiquidTiles/GreenWater"; + surfaceOpacity = "0.8"; + envMapTexture = "lush/skies/lushcloud1"; + envMapIntensity = "0.5"; + removeWetEdges = "1"; + }; + new WaterBlock() { + position = "104 -192 67.033"; + rotation = "1 0 0 0"; + scale = "128 96 40"; + liquidType = "Water"; + density = "1"; + viscosity = "5"; + waveMagnitude = "1.5"; + surfaceTexture = "LiquidTiles/GreenWater"; + surfaceOpacity = "0.8"; + envMapTexture = "lush/skies/lushcloud1"; + envMapIntensity = "0.5"; + removeWetEdges = "1"; + }; + new WaterBlock() { + position = "-680 120 81.7432"; + rotation = "1 0 0 0"; + scale = "128 96 21.2156"; + liquidType = "Water"; + density = "1"; + viscosity = "5"; + waveMagnitude = "1.5"; + surfaceTexture = "LiquidTiles/GreenWater"; + surfaceOpacity = "0.8"; + envMapTexture = "lush/skies/lushcloud1"; + envMapIntensity = "0.5"; + removeWetEdges = "1"; + }; + }; + new SimGroup(Sounds) { + powerCount = "0"; + + new AudioEmitter() { + position = "-816.585 -720.936 98.0073"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "AudioDefaultLooping3d"; + fileName = "fx/environment/frog2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "200"; + maxDistance = "300"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "3000"; + maxLoopGap = "20000"; + type = "EffectAudioType"; + }; + new AudioEmitter() { + position = "-537.65 -478.5 107.873"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "AudioDefaultLooping3d"; + fileName = "fx/environment/frog1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "110"; + maxDistance = "7040"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "3000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + }; + new AudioEmitter() { + position = "42.13 -409.455 111.748"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "AudioDefaultLooping3d"; + fileName = "fx/environment/frog1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "40"; + maxDistance = "2560"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "3000"; + maxLoopGap = "12000"; + type = "EffectAudioType"; + }; + new AudioEmitter() { + position = "290.9 -709.964 127.37"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "AudioDefaultLooping3d"; + fileName = "fx/environment/crickets.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "80"; + maxDistance = "5120"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + }; + new AudioEmitter() { + position = "-416.208 -233.275 131.498"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "AudioDefaultLooping3d"; + fileName = "fx/environment/frog2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "40"; + maxDistance = "2560"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "3000"; + maxLoopGap = "12000"; + type = "EffectAudioType"; + }; + new AudioEmitter() { + position = "-359.701 15.76 112.664"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "AudioDefaultLooping3d"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "120"; + maxDistance = "7680"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "2000"; + maxLoopGap = "8000"; + type = "EffectAudioType"; + }; + new AudioEmitter() { + position = "-10.56 -15.81 115.274"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "AudioDefaultLooping3d"; + fileName = "fx/environment/crickets_drygrass.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "75"; + maxDistance = "4800"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "5000"; + type = "EffectAudioType"; + }; + new AudioEmitter() { + position = "172.83 -151.844 127.849"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "75"; + maxDistance = "4800"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "5000"; + maxLoopGap = "12000"; + type = "EffectAudioType"; + }; + new AudioEmitter() { + position = "-877.421 -326.179 212.333"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "AudioDefaultLooping3d"; + fileName = "fx/environment/crickets_drygrass.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "75"; + maxDistance = "4800"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + }; + new AudioEmitter() { + position = "-846.934 13.79 103.749"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "AudioDefaultLooping3d"; + fileName = "fx/environment/bird_echo3.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "50"; + maxDistance = "3200"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "5000"; + maxLoopGap = "12000"; + type = "EffectAudioType"; + }; + new AudioEmitter() { + position = "-556.935 401.14 181.905"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "AudioDefaultLooping3d"; + fileName = "fx/environment/crickets.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "80"; + maxDistance = "5120"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "1000"; + maxLoopGap = "3000"; + type = "EffectAudioType"; + }; + new AudioEmitter() { + position = "-3.01 424.87 146.64"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "AudioDefaultLooping3d"; + fileName = "fx/environment/frog1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "70"; + maxDistance = "4480"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "3000"; + maxLoopGap = "8000"; + type = "EffectAudioType"; + }; + new AudioEmitter() { + position = "-266.062 -664.522 283.158"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "AudioDefaultLooping3d"; + fileName = "fx/environment/bird_echo4.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "40"; + maxDistance = "50"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + }; + }; + new SimGroup(Environment) { + powerCount = "0"; + + new TSStatic() { + position = "-356.984 297.923 205.766"; + rotation = "0 0 -1 4.58367"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + }; + new TSStatic() { + position = "-337.829 401.987 215.392"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "-136.153 182.457 157.877"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "-160.946 161.792 161.837"; + rotation = "0 0 -1 57.2958"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + }; + new InteriorInstance() { + position = "-151.803 185.288 164.016"; + rotation = "-0.437731 -0.798273 -0.413705 100.274"; + scale = "2 2 2"; + interiorFile = "brock6.dif"; + showTerrainInside = "0"; + }; + new TSStatic() { + position = "-726.653 66.1344 125.058"; + rotation = "0 1 0 12.6051"; + scale = "1 1 1"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "-176.035 39.5488 137.103"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + }; + new TSStatic() { + position = "-185.247 43.2137 137.916"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "-177.154 225.845 186.456"; + rotation = "-0.765608 -0.284088 -0.577182 39.2068"; + scale = "1 1 1"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "-314.439 -65.7355 111.627"; + rotation = "0.673202 0.387047 -0.630075 80.4197"; + scale = "1 1 1"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "-306.667 -49.9362 107.124"; + rotation = "0.412403 0.606569 -0.679704 84.4769"; + scale = "1 1 1"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "-272.18 -109.564 126.709"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "-268.36 -99.5525 127.717"; + rotation = "-0.789554 0.103769 0.604844 18.2917"; + scale = "1 1 1"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "-316.83 -290.109 166.01"; + rotation = "-0.150095 0.0840141 0.985095 50.7969"; + scale = "1 1 1"; + shapeName = "borg13.dts"; + }; + new TSStatic() { + position = "-480.798 -344.793 100.602"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + }; + new TSStatic() { + position = "-495.754 -398.464 82.4863"; + rotation = "-0.936757 0.259938 -0.234347 26.5857"; + scale = "1 1 1"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "-485.235 -337.563 101.22"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg5.dts"; + }; + new InteriorInstance() { + position = "-345.417 -483.38 101.064"; + rotation = "-0.568319 0.756803 0.322897 77.6136"; + scale = "3 3 3"; + interiorFile = "brock7.dif"; + showTerrainInside = "0"; + }; + new TSStatic() { + position = "-304.939 -553.958 168.268"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + }; + new TSStatic() { + position = "-243.02 -554.156 161.365"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "-230.182 -561.588 161.131"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "-156.243 -734.06 161.902"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "-162.219 -739.959 161.286"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "-156.893 -743.493 161.249"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "-167.917 -745.641 160.666"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + }; + new TSStatic() { + position = "-304.289 -754.599 158.465"; + rotation = "-0.963412 -0.232199 -0.13387 7.71271"; + scale = "1 1 1"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "-372.553 -728.457 182.794"; + rotation = "0 0 -1 47.5555"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "-425.313 -709.42 207.271"; + rotation = "-0.535151 -0.809595 0.241182 11.8975"; + scale = "1 1 1"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "-540.938 -660.461 200.383"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + }; + new InteriorInstance() { + position = "-733.574 -566.981 157.906"; + rotation = "0.239803 0.825081 -0.511601 115.336"; + scale = "1 1 0.994154"; + interiorFile = "brock6.dif"; + showTerrainInside = "0"; + }; + new TSStatic() { + position = "-718.624 -574.904 157.404"; + rotation = "-0.452581 -0.875133 0.171208 6.35954"; + scale = "1 1 1"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "-900.296 -545.501 159.384"; + rotation = "0.0049999 -0.00593609 0.99997 80.2158"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "-895.107 -554.128 159.618"; + rotation = "-0.0185749 0.347858 -0.937363 10.2299"; + scale = "1 1 1"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "-917.252 -436.756 205.641"; + rotation = "-0.478552 -0.682273 0.552712 32.0623"; + scale = "1 1 1"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "-806.48 -336.4 142.821"; + rotation = "0.276427 -0.127534 -0.952535 22.457"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + }; + new TSStatic() { + position = "-808.421 -311.927 140.655"; + rotation = "0 0 -1 2.8649"; + scale = "1 1 1"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "-654.064 -305.894 158.1"; + rotation = "0 0 1 50.9932"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "-659.498 -363.31 161.807"; + rotation = "0.425364 0.734243 0.529106 24.4137"; + scale = "1 1 1"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "-611.287 -247.584 149.731"; + rotation = "0.427544 -0.893612 -0.136617 9.03878"; + scale = "1 1 1"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "-802.665 -115.662 125.412"; + rotation = "0.00177874 0.999367 -0.0355454 29.7968"; + scale = "1 1 1"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "-887.976 -99.5106 108.43"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + }; + }; + }; +//--- OBJECT WRITE END --- diff --git a/base/missions/Sirocco.mis b/base/missions/Sirocco.mis new file mode 100644 index 0000000..afda6b5 --- /dev/null +++ b/base/missions/Sirocco.mis @@ -0,0 +1,1005 @@ +// MissionTypes = CnH + +//--- MISSION QUOTE BEGIN --- +//All in a hot and copper sky, the bloody sun, at noon. +// -- Samuel Taylor Coleridge +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[CnH]6 different control towers +//[CnH]Mirrored Mission (both sides of map identical) +//[CnH]7200 points to win +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + musicTrack = "desert"; + powerCount = "0"; + cdTrack = "6"; + + new MissionArea(MissionArea) { + area = "-512 -712 1024 1424"; + flightCeiling = "300"; + flightCeilingRange = "20"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.700000 0.700000 0.700000 1.000000"; + ambient = "0.500000 0.500000 0.500000 1.000000"; + position = "-1024 -1200 0"; + locked = "true"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + }; + new Sky(Sky) { + position = "-1024 -1200 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "900"; + useSkyTextures = "0"; + SkySolidColor = "1.000000 0.450000 0.000000 0.000000"; + fogDistance = "350"; + fogColor = "0.600000 0.300000 0.000000 1.000000"; + fogVolume1 = "0 0 0"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "sky_desert_brown.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 -222768174765569861000000000000000000000.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 -170698929442160049000000000000000000000.000000"; + cloudSpeed0 = "0.000000 0.000000"; + locked = "true"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/desertdet1"; + terrainFile = "Sirocco.ter"; + squareSize = "8"; + emptySquares = "90283 90539 90795 91051 105387 105643 105899 106155 106411"; + visibleDistance = "1200"; + position = "-1024 -1024 0"; + hazeDistance = "250"; + locked = "true"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "65"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + position = "0 0 0 1"; + coverage = "0"; + locked = "true"; + rotation = "0 0 0 0"; + conjoinBowlDev = "20"; + GraphFile = "Sirocco.nav"; + scale = "1 1 1"; + }; + new SimGroup(RandomOrganics) { + + new SimGroup(Addition3PhoenixPlant6) { + + new TSStatic() { + position = "-144.5 540.5 78.8164"; + rotation = "0 0 1 156"; + scale = "1 1 1"; + shapeName = "porg6.dts"; + locked = "true"; + }; + new TSStatic() { + position = "91.5 371.5 50.041"; + rotation = "0 0 1 90"; + scale = "1.2 1.2 1.2"; + shapeName = "porg6.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition4PhoenixPlant5) { + + new TSStatic() { + position = "-68.5 418.5 78.7989"; + rotation = "0 0 1 235"; + scale = "1.5 1.5 1.5"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "262.5 85.5 78.709"; + rotation = "0 0 1 233"; + scale = "1.4 1.4 1.4"; + shapeName = "porg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-99.5 614.5 78.7324"; + rotation = "0 0 1 98"; + scale = "1.3 1.3 1.3"; + shapeName = "porg5.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition7PhoenixPlant1) { + + new TSStatic() { + position = "-206.5 -302.5 78.9004"; + rotation = "0 0 -1 24"; + scale = "1.4 1.4 1.4"; + shapeName = "porg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "575.5 -281.5 78.8535"; + rotation = "0 0 -1 69"; + scale = "1.6 1.6 1.6"; + shapeName = "porg1.dts"; + locked = "true"; + }; + }; + new SimGroup(Addition8PhoenixPlant3) { + + new TSStatic() { + position = "470.5 -577.5 79.1093"; + rotation = "0 0 -1 67"; + scale = "0.8 0.8 0.8"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "139.5 -345.5 51.1289"; + rotation = "0 0 1 75"; + scale = "1 1 1"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "481.5 -131.5 78.8985"; + rotation = "0 0 1 146"; + scale = "1.5 1.5 1.5"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-197.5 -88.5 60.1797"; + rotation = "0 0 -1 80"; + scale = "1.4 1.4 1.4"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-288.5 92.5 78.4531"; + rotation = "0 0 1 41"; + scale = "0.7 0.7 0.7"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-600.5 -387.5 68.7461"; + rotation = "0 0 -1 59"; + scale = "1.3 1.3 1.3"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-432.5 184.5 78.9062"; + rotation = "0 0 1 179"; + scale = "0.9 0.9 0.9"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-618.5 -505.5 78.836"; + rotation = "0 0 1 57"; + scale = "1.4 1.4 1.4"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-82.5 -645.5 78.8145"; + rotation = "0 0 1 216"; + scale = "1.5 1.5 1.5"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-216.5 -282.5 79.0195"; + rotation = "0 0 1 35"; + scale = "0.8 0.8 0.8"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-344.5 -118.5 78.7695"; + rotation = "0 0 1 174"; + scale = "0.7 0.7 0.7"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "578.5 43.5 86.7305"; + rotation = "0 0 1 147"; + scale = "1.5 1.5 1.5"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "477.5 352.5 60.1074"; + rotation = "0 0 -1 87"; + scale = "0.7 0.7 0.7"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "72.5 -505.5 104.025"; + rotation = "0 0 -1 83"; + scale = "1.5 1.5 1.5"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-426.5 73.5 78.836"; + rotation = "0 0 -1 98"; + scale = "0.7 0.7 0.7"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-290.5 -187.5 60.1289"; + rotation = "0 0 1 181"; + scale = "1.2 1.2 1.2"; + shapeName = "porg3.dts"; + locked = "true"; + }; + new TSStatic() { + position = "503.5 74.5 78.7324"; + rotation = "0 0 1 59"; + scale = "1.4 1.4 1.4"; + shapeName = "porg3.dts"; + locked = "true"; + }; + }; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "-390.288 326.558 144.956"; + rotation = "0 0 1 75.0575"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-301.758 -267.281 142.737"; + rotation = "0 0 1 192.514"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "58.9505 -422.989 151.154"; + rotation = "0 0 1 161.574"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "307.897 -260.652 124.93"; + rotation = "0 0 -1 44.6907"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "392.99 185.767 124.79"; + rotation = "0 0 1 235.668"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "75.87 515.998 128.111"; + rotation = "0 0 1 192.514"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + + new SimGroup(Team1) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "29.1927 -174.193 59.61"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "180"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + }; + new SimGroup(Team2) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "29.1927 -174.193 59.61"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "180"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + }; + new SimGroup(team0) { + + new SimGroup(Towers) { + + new SimGroup(Stronghold1) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "25.0196 -517.314 116.661"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "100"; + indoorWeight = "20"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new InteriorInstance() { + position = "25.0196 -517.314 106.661"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pbunk7.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape(Team0SensorLargePulse1) { + position = "24.9351 -517.135 149.95"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Stronghold 1"; + dataBlock = "SensorLargePulse"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0generatorLarge1) { + position = "17.3378 -521.063 136.297"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Stronghold 1"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0generatorLarge2) { + position = "32.592 -520.93 136.158"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Stronghold 1"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory1) { + position = "31.7266 -510.814 136.157"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "Stronghold 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory2) { + position = "18.3417 -511.183 136.152"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Stronghold 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0flipflop1) { + position = "25.0163 -509.149 119.159"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Stronghold 1"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + name = "Stronghold 1"; + }; + new WayPoint() { + position = "25.0163 -509.149 119.159"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Stronghold 1"; + team = "0"; + locked = "true"; + }; + new Item() { + position = "34.0024 -517.047 111.467"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new StaticShape() { + position = "19.0736 -511.316 157.561"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + holo = "0"; + }; + }; + new SimGroup(Outpost1) { + providesPower = "1"; + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "349.211 -218.432 107.046"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "100"; + indoorWeight = "20"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new InteriorInstance() { + position = "349.211 -218.432 97.0458"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + interiorFile = "pbunk1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape(Team0flipflop2) { + position = "349.119 -221.074 87.0265"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Outpost 1"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + name = "Outpost 1"; + }; + new WayPoint() { + position = "349.119 -221.074 87.0265"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Outpost 1"; + team = "0"; + locked = "true"; + }; + new Item() { + position = "349.359 -217.842 126.806"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new StaticShape() { + position = "348.99 -220.978 136.936"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + holo = "0"; + }; + }; + new SimGroup(Tower1) { + providesPower = "1"; + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-349.174 291.454 103.01"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "100"; + indoorWeight = "20"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new InteriorInstance() { + position = "-349.174 291.454 93.0105"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + interiorFile = "ptowr1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape(Team0flipflop3) { + position = "-354.653 290.212 111.003"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Tower 1"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + name = "Tower_1"; + }; + new WayPoint() { + position = "-354.653 290.212 111.003"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Tower 1"; + team = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory3) { + position = "-354.455 287.594 99.5027"; + rotation = "0 0 -1 89.3814"; + scale = "1 1 1"; + nameTag = "Tower 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item() { + position = "-354.397 296.878 111.594"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-349.598 291.866 149.915"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + holo = "0"; + }; + }; + new SimGroup(Stronghold2) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "72.9052 508.449 112.494"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "100"; + indoorWeight = "20"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new InteriorInstance() { + position = "72.9052 508.449 102.494"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + interiorFile = "pbunk7.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape(Team0SensorLargePulse2) { + position = "72.965 507.561 146.408"; + rotation = "0 0 1 180.482"; + scale = "1 1 1"; + nameTag = "Stronghold 2"; + dataBlock = "SensorLargePulse"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0generatorLarge5) { + position = "66.2145 511.625 131.997"; + rotation = "0 0 1 180.091"; + scale = "1 1 1"; + nameTag = "Stronghold 2"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0generatorLarge6) { + position = "80.4877 511.823 132"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "Stronghold 2"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory4) { + position = "78.9219 501.954 131.981"; + rotation = "0 0 1 90.1369"; + scale = "1 1 1"; + nameTag = "Stronghold 2"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory5) { + position = "66.6812 502.287 131.975"; + rotation = "0 0 -1 89.9543"; + scale = "1 1 1"; + nameTag = "Stronghold 2"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0flipflop4) { + position = "72.9019 500.284 114.996"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Stronghold 2"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + name = "Stronghold 2"; + }; + new WayPoint() { + position = "72.9019 500.284 114.996"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Stronghold 2"; + team = "0"; + locked = "true"; + }; + new Item() { + position = "81.888 508.182 107.3"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new StaticShape() { + position = "66.9055 502.441 153.362"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + holo = "0"; + }; + }; + new SimGroup(Outpost2) { + providesPower = "1"; + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "349.211 218.432 107.046"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "100"; + indoorWeight = "20"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new InteriorInstance() { + position = "349.211 218.432 97.0458"; + rotation = "-0 -0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "pbunk1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape(Team0flipflop5) { + position = "349.119 221.074 87.0341"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Outpost 2"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + name = "Outpost 2"; + }; + new WayPoint() { + position = "349.119 221.074 87.0341"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Outpost 2"; + team = "0"; + locked = "true"; + }; + new Item() { + position = "349.359 217.842 126.806"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new StaticShape() { + position = "349.243 220.985 136.941"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + holo = "0"; + }; + }; + new SimGroup(Tower2) { + providesPower = "1"; + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-348.458 -304.824 102.632"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "100"; + indoorWeight = "20"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new InteriorInstance() { + position = "-348.458 -304.824 92.6319"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "ptowr1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape(Team0flipflop6) { + position = "-342.303 -302.994 110.627"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Tower 2"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + name = "Tower 2"; + }; + new WayPoint() { + position = "-342.303 -302.994 110.627"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Tower 2"; + team = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory6) { + position = "-353.849 -300.446 99.1291"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Tower 2"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item() { + position = "-343.481 -310.248 111.215"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-349.772 -304.791 149.522"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "LogoProjector"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + holo = "0"; + }; + }; + }; + new SimGroup(AIObjectives) { + }; + }; + }; + new SimGroup(Spires) { + + new InteriorInstance() { + position = "-308.283 -4.9731 97.3154"; + rotation = "0 0 -1 24.6372"; + scale = "1 1 1"; + interiorFile = "pspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-228.669 -627.489 81.4123"; + rotation = "0 0 1 69.9008"; + scale = "1 1 1"; + interiorFile = "pspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "168.51 -358.376 53.8925"; + rotation = "0 0 1 1.14465"; + scale = "1 1 1"; + interiorFile = "pspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "502.565 -155.993 71.2782"; + rotation = "0 0 1 187.54"; + scale = "1 1 1"; + interiorFile = "pspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "104.71 -4.7591 67.8742"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pspir5.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "137.598 -3.2641 69.9934"; + rotation = "0 0 -1 8.5942"; + scale = "1 1 1"; + interiorFile = "pspir2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new AudioEmitter() { + position = "-282.875 442.784 90.4216"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/drywind2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.3"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Slapdash.mis b/base/missions/Slapdash.mis new file mode 100644 index 0000000..2aeb03f --- /dev/null +++ b/base/missions/Slapdash.mis @@ -0,0 +1,1113 @@ +// MissionTypes = CTF +// DisplayName = Slapdash + +//--- MISSION QUOTE BEGIN --- +//Thunder is good, thunder is impressive; but it is lightning that does the work. +// -- Mark Twain +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[CTF]4 flag captures to win +//[CTF]Flag located outside base +//Vehicle-centric mission +//High visibility +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + musicTrack = "lush"; + CTF_scoreLimit = "4"; + cdTrack = "2"; + CTF_timeLimit = "25"; + powerCount = "0"; + + new MissionArea(MissionArea) { + area = "-848 -864 1264 1472"; + flightCeiling = "240"; + flightCeilingRange = "20"; + locked = "true"; + }; + new Sun() { + direction = "0.622506 0.622506 -0.474313"; + color = "0.800000 0.800000 0.800000 1.000000"; + ambient = "0.400000 0.400000 0.400000 1.000000"; + scale = "1 1 1"; + locked = "true"; + position = "-1024 -1024 0"; + rotation = "1 0 0 0"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/lushdet2"; + terrainFile = "Slapdash.ter"; + squareSize = "8"; + emptySquares = "94579 99875"; + locked = "true"; + position = "-1024 -1024 0"; + visibleDistance = "1200"; + hazeDistance = "250"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "70"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + scale = "1 1 1"; + locked = "true"; + coverage = "0"; + GraphFile = "Slapdash.nav"; + XDimOverSize = "0"; + position = "0 0 0 1"; + YDimOverSize = "0"; + rotation = "0 0 0 0"; + conjoinBowlDev = "20"; + }; + new SimGroup(RandomOrganics) { + + new SimGroup(Addition4BELgTree18) { + + new TSStatic() { + position = "-19.85 -559.547 127.066"; + rotation = "0 0 1 79.8327"; + scale = "1.6 1.6 1.6"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "400.5 -277.5 128.938"; + rotation = "0 0 1 98"; + scale = "1.3 1.3 1.3"; + shapeName = "borg18.dts"; + locked = "true"; + }; + }; + new TSStatic() { + position = "-33.151 -55.869 128.41"; + rotation = "0 0 -1 52.7121"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-169.314 -61.619 128.085"; + rotation = "0 0 -1 34.3775"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new SimGroup(Addition1BEPlant1) { + + new TSStatic() { + position = "-268 260 129.288"; + rotation = "0 0 1 82"; + scale = "0.6 0.6 0.6"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "140 -140 129.272"; + rotation = "-0.261677 0.145892 0.954065 108.572"; + scale = "1 1 1"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-4 -20 129.772"; + rotation = "-0.133613 -0.0501878 0.989762 47.4328"; + scale = "1.7 1.7 1.7"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-644 28 154.709"; + rotation = "0.143549 -0.119692 -0.982378 95.0154"; + scale = "1.4 1.4 1.4"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-332 396 121.788"; + rotation = "0.108807 0.0797487 0.990859 34.2954"; + scale = "0.6 0.6 0.6"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-155.685 59.4242 128.933"; + rotation = "-0.0783751 0.394846 0.915398 166.862"; + scale = "0.6 0.6 0.6"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-308 412 133.881"; + rotation = "-0.243443 -0.261637 0.93396 17.1152"; + scale = "1.2 1.2 1.2"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-500.097 -20.0703 153.531"; + rotation = "-0.162675 0.762419 0.626302 44.8742"; + scale = "1.1 1.1 1.1"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-316 212 129.491"; + rotation = "-0.0303782 0.00824476 0.999505 181.999"; + scale = "2 2 2"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-220 -276 126.459"; + rotation = "0.130888 0.298129 0.945509 132.415"; + scale = "1.6 1.6 1.6"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-132 -100 129.288"; + rotation = "0 0 -1 82"; + scale = "0.5 0.5 0.5"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-213.687 350.079 164.349"; + rotation = "-0.455246 0.4015 0.794701 55.0589"; + scale = "0.5 0.5 0.5"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-220 -92 129.241"; + rotation = "-0.0056401 0.0148964 0.999873 162.002"; + scale = "1.6 1.6 1.6"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-540 -220 102.225"; + rotation = "0.0385352 0.118458 0.992211 166.108"; + scale = "2 2 2"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-36 -28 129.288"; + rotation = "0 0 -1 16.9999"; + scale = "0.7 0.7 0.7"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-404 -196 166.491"; + rotation = "-0.00931408 -0.336025 -0.941807 113.194"; + scale = "0.7 0.7 0.7"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "148 28 112.459"; + rotation = "-0.257195 -0.216438 -0.94181 100.395"; + scale = "1.6 1.6 1.6"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "44 460 152.1"; + rotation = "0.785524 0.367614 -0.497808 27.7109"; + scale = "0.7 0.7 0.7"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-27.9992 -132.002 129.15"; + rotation = "0.00904323 -0.00348301 -0.999953 79.0023"; + scale = "1.6 1.6 1.6"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-300 300 129.288"; + rotation = "0 0 1 107"; + scale = "1 1 1"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "52 148 167.147"; + rotation = "0.320545 -0.0696586 -0.944669 114.99"; + scale = "2 2 2"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-140 -92 129.288"; + rotation = "0 0 -1 41"; + scale = "2 2 2"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-572 -12 129.678"; + rotation = "-0.15546 0.121266 0.980371 213.369"; + scale = "2 2 2"; + shapeName = "borg1.dts"; + locked = "true"; + }; + new TSStatic() { + position = "68 340 133.022"; + rotation = "0.185558 0.235852 0.953909 127.185"; + scale = "1.6 1.6 1.6"; + shapeName = "borg1.dts"; + locked = "true"; + }; + }; + new TSStatic() { + position = "-740.673 129.85 139.443"; + rotation = "0 0 1 235.095"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-538.483 -131.363 127.001"; + rotation = "0 0 -1 44.1178"; + scale = "1 1.07701 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new SimGroup(Addition1BESmTree17) { + + new TSStatic() { + position = "-47.5 355.5 129.361"; + rotation = "0 0 1 35"; + scale = "0.7 0.7 0.7"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-552.5 -791.5 128.607"; + rotation = "0 0 1 202"; + scale = "1.4 1.4 1.4"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-382.5 -460.5 128.938"; + rotation = "0 0 1 187"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "234.5 -939.5 129.09"; + rotation = "0 0 1 110"; + scale = "1.4 1.4 1.4"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-567.439 -379.794 129.179"; + rotation = "0 0 1 33.8327"; + scale = "1.1 1.1 1.1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "160.5 -879.5 128.938"; + rotation = "0 0 -1 119"; + scale = "1.4 1.4 1.4"; + shapeName = "borg17.dts"; + locked = "true"; + }; + }; + new TSStatic() { + position = "-353.375 -549.332 130.415"; + rotation = "0 0 1 67.0361"; + scale = "1 1.47973 0.940896"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-514.178 494.43 128.51"; + rotation = "0 0 -1 34.9504"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-482.358 465.83 128.431"; + rotation = "0 0 1 64.7442"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new TSStatic() { + position = "178.9 -576.324 127.147"; + rotation = "0 0 1 40.107"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new TSStatic() { + position = "116.51 -312.701 128.69"; + rotation = "0 0 1 138.083"; + scale = "1.29596 1.34204 1"; + shapeName = "borg19.dts"; + locked = "true"; + }; + new SimGroup(Addition2BELgTree18) { + + new TSStatic() { + position = "-563.5 563.5 128.232"; + rotation = "0 0 1 235"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-404.5 -818.5 129.312"; + rotation = "0 0 1 233"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "157.5 501.5 128.992"; + rotation = "0 0 -1 17"; + scale = "1.6 1.6 1.6"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-893.5 544.5 128.938"; + rotation = "0 0 -1 82"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + locked = "true"; + }; + new TSStatic() { + position = "365.5 -320.5 128.938"; + rotation = "0 0 1 216"; + scale = "1.3 1.3 1.3"; + shapeName = "borg18.dts"; + locked = "true"; + }; + }; + }; + new Sky(Sky) { + position = "-1024 -1024 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "500"; + useSkyTextures = "1"; + SkySolidColor = "0.390000 0.390000 0.390000 0.000000"; + fogDistance = "280"; + fogColor = "0.500000 0.500000 0.500000 1.000000"; + fogVolume1 = "0 0 0"; + fogVolume2 = "100 100 120"; + fogVolume3 = "0 0 0"; + materialList = "Lush_l4.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 -0.040112"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 0.742938"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 0.000000"; + locked = "true"; + cloudSpeed0 = "0.000000 0.000000"; + }; + new SimGroup(Teams) { + + new SimGroup(Team1) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "10.1367 -731.459 134.475"; + rotation = "0 0 1 189.832"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "85"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new SimGroup(base0) { + + new StaticShape(Team1generatorLarge1) { + position = "27.6414 -778.864 140.86"; + rotation = "0 0 -1 16.7982"; + scale = "1 1 1"; + nameTag = "Primary"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "33"; + }; + new Item(Team1flag1) { + position = "29.2496 -517.863 130.823"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + locked = "true"; + stand = "6303"; + Target = "34"; + }; + new InteriorInstance() { + position = "21.95 -775.731 136.943"; + rotation = "0 0 1 162.147"; + scale = "1 1 1"; + interiorFile = "bbunk2.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape(Team1StationInventory1) { + position = "35.77 -778.125 130.44"; + rotation = "0 0 1 72.1927"; + scale = "1 1 1"; + nameTag = "Stronghold"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "35"; + }; + new StaticShape(Team1StationInventory2) { + position = "12.37 -785.702 130.44"; + rotation = "0 0 -1 108.289"; + scale = "1 1 1"; + nameTag = "Stronghold"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "36"; + }; + new Item() { + position = "18.43 -779.075 155.311"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new StaticShape(Team1generatorLarge2) { + position = "18.9463 -781.466 140.86"; + rotation = "0 0 -1 16.7983"; + scale = "1 1 1"; + nameTag = "Primary"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "37"; + }; + new InteriorInstance() { + position = "-464.099 333.286 201.777"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bmisc1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new TSStatic() { + position = "32.68 -687.926 128.145"; + rotation = "0 0 1 64.1713"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + locked = "true"; + }; + new StaticShape(Team1SensorMediumPulse1) { + position = "-249.275 -572.075 196.455"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "West"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "38"; + }; + new StaticShape() { + position = "29.2396 -517.875 130.752"; + rotation = "0 0 1 22.9183"; + scale = "1 1 1"; + dataBlock = "ExteriorFlagStand"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + flag = "6292"; + Target = "-1"; + }; + new StaticShape(Team1SensorMediumPulse2) { + position = "76.3604 -606.604 171.044"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "East"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "39"; + }; + new Turret(Team1TurretBaseLarge1) { + position = "52.78 -622.969 164.796"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Guardian"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "MissileBarrelLarge"; + locked = "true"; + Target = "40"; + }; + new InteriorInstance() { + position = "-504.863 530.014 126.638"; + rotation = "0 0 1 159.282"; + scale = "1 1 1"; + interiorFile = "bvpad.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Turret(Team1SentryTurret1) { + position = "21.69 -775.096 146.95"; + rotation = "0.593177 0.805072 0.000472372 179.927"; + scale = "1 1 1"; + nameTag = "Upper Sentry"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + Target = "41"; + }; + new Turret(Team1SentryTurret2) { + position = "24.73 -784.69 138.44"; + rotation = "0 0 1 72.1927"; + scale = "1 1 1"; + nameTag = "Lower Sentry"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + Target = "42"; + }; + new InteriorInstance() { + position = "53.76 -623.223 154.922"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bmisc1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "96.1 -778.507 127.8"; + rotation = "0 0 1 171.314"; + scale = "1 1 1"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "-1"; + }; + new InteriorInstance() { + position = "29.1996 -517.92 120.819"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bmisc1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-249.291 -572.01 186.486"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bmisc1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "76.7219 -606.373 161.17"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bmisc1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-158.771 300.759 174.866"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bmisc1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + }; + new SimGroup(Team2) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-474.973 493.494 129.572"; + rotation = "0 0 1 221.344"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "85"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new SimGroup(base1) { + + new StaticShape() { + position = "-305.606 280.563 130.665"; + rotation = "0 0 1 24.0642"; + scale = "1 1 1"; + dataBlock = "ExteriorFlagStand"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + flag = "6324"; + Target = "-1"; + }; + new StaticShape(Team2SensorMediumPulse1) { + position = "-464.199 333.835 211.667"; + rotation = "0 0 1 179.336"; + scale = "1 1 1"; + nameTag = "West"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "44"; + }; + new Item(Team2flag1) { + position = "-305.521 280.633 130.743"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + locked = "true"; + stand = "6322"; + Target = "45"; + }; + new InteriorInstance() { + position = "-427.866 503.23 136.098"; + rotation = "0 0 1 32.0857"; + scale = "1 1 1"; + interiorFile = "bbunk2.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape(Team2StationInventory1) { + position = "-435.278 515.64 129.6"; + rotation = "0 0 -1 57.2958"; + scale = "1 1 1"; + nameTag = "Stronghold"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + name = "Tower Inventory Station"; + Target = "46"; + }; + new StaticShape(Team2StationInventory2) { + position = "-413.586 501.89 129.6"; + rotation = "0 0 1 122.04"; + scale = "1 1 1"; + nameTag = "Stronghold"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + name = "Tower Inventory Station"; + Target = "47"; + }; + new StaticShape(Team2generatorLarge1) { + position = "-428.872 509.44 140.02"; + rotation = "0 0 1 212.567"; + scale = "1 1 1"; + nameTag = "Primary"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "48"; + }; + new StaticShape(Team2generatorLarge2) { + position = "-421.431 504.848 140.02"; + rotation = "0 0 1 207.411"; + scale = "1 1 1"; + nameTag = "Primary"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "49"; + }; + new Item() { + position = "-429.882 507.2 154.539"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + }; + new StaticShape(Team2SensorMediumPulse2) { + position = "-159.072 301.144 184.739"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "East"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "50"; + }; + new Turret(Team2SentryTurret1) { + position = "-428.099 502.77 146.04"; + rotation = "0.27559 0.961275 0.00120368 179.539"; + scale = "1 1 1"; + nameTag = "Upper Sentry"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + Target = "51"; + }; + new InteriorInstance() { + position = "95.5533 -772.914 128.1"; + rotation = "0 0 -1 9.16728"; + scale = "1 1 1"; + interiorFile = "bvpad.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-365.004 418.673 137.391"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bmisc1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Turret(Team2TurretBaseLarge1) { + position = "-366.078 418.633 147.396"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Guardian"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "MissileBarrelLarge"; + locked = "true"; + Target = "52"; + }; + new Turret(Team2SentryTurret2) { + position = "-422.954 511.39 137.65"; + rotation = "0 0 -1 56.7228"; + scale = "1 1 1"; + nameTag = "Lower Sentry"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + Target = "53"; + }; + new StaticShape() { + position = "-507.135 536.098 126.338"; + rotation = "-0 0 -1 20.6265"; + scale = "1 1 1"; + nameTag = "Vehicle Pad"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "-1"; + }; + new InteriorInstance() { + position = "-305.445 280.583 120.739"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bmisc1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + }; + new SimGroup(team0) { + + new SimGroup(AIObjectives) { + }; + }; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "-42.656 -794.536 194.889"; + rotation = "0 0 -1 46.4096"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-58.193 -540.298 162.218"; + rotation = "0 0 1 137.51"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-425.2 468.66 154.157"; + rotation = "0 0 1 177.799"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-462.529 530.76 158.674"; + rotation = "0 0 1 123.186"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Miskellany) { + + new InteriorInstance() { + position = "293.3 -393.442 128.618"; + rotation = "0 0 1 47.5555"; + scale = "1 1 1"; + interiorFile = "bbunk9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-99.074 -115 126.206"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + interiorFile = "bbunkd.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-362.627 208.53 118.664"; + rotation = "0 0 -1 40.68"; + scale = "1 1 1"; + interiorFile = "bbunkc.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-741.056 50.94 127.615"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "bbunkd.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(Ambiance) { + + new AudioEmitter() { + position = "-87.88 -700.815 191.107"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo5.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "40000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-168.263 -2.47 139.564"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "40000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-573.301 606.13 141.004"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo3.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "40000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "360.77 -363.742 158.176"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "50000"; + maxLoopGap = "70000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-212.09 -229.039 142.75"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "20000"; + maxLoopGap = "60000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-392.039 141.68 152.835"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo4.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "30000"; + type = "EffectAudioType"; + locked = "true"; + }; + new TSStatic() { + position = "405.613 599.739 128.641"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "statue_base.dts"; + locked = "true"; + }; + new TSStatic() { + position = "405.92 599.28 131.892"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + shapeName = "statue_hmale.dts"; + locked = "true"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/SunDried.mis b/base/missions/SunDried.mis new file mode 100644 index 0000000..8c376ee --- /dev/null +++ b/base/missions/SunDried.mis @@ -0,0 +1,1117 @@ +// DisplayName = Sun Dried +// MissionTypes = Hunters Bounty DM Rabbit + +//--- MISSION QUOTE BEGIN --- +//With a burning spear and a horse of air to the wilderness I wander. +// -- from 'Tom O'Bedlam's Song,' Anon. +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[Hunters]Nexus is atop center tower +//[Rabbit]Flag platform is atop center tower +//[DM Bounty]Mission follows standard Rules of Engagement +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + cdTrack = "6"; + musicTrack = "desert"; + powerCount = "0"; + + new MissionArea(MissionArea) { + area = "-768 64 1024 800"; + flightCeiling = "300"; + flightCeilingRange = "20"; + locked = "true"; + }; + new Sky(Sky) { + position = "0 0 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "500"; + useSkyTextures = "1"; + SkySolidColor = "0.365000 0.390000 0.420000 0.000000"; + fogDistance = "200"; + fogColor = "0.550000 0.450000 0.380000 1.000000"; + fogVolume1 = "0 0 0"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "sky_desert_blue.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 0.000000"; + locked = "true"; + cloudSpeed0 = "0.000503 0.000020"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.900000 0.900000 0.900000 1.000000"; + ambient = "0.600000 0.600000 0.600000 1.000000"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + locked = "true"; + position = "0 0 0"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/desertdet1"; + terrainFile = "SunDried.ter"; + squareSize = "8"; + locked = "true"; + position = "-1024 -1024 0"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "50"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + GraphFile = "SunDried.nav"; + conjoinBowlDev = "20"; + rotation = "0 0 0 0"; + coverage = "0"; + scale = "1 1 1"; + locked = "true"; + position = "0 0 0 1"; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "-190.054 402.516 134.059"; + rotation = "0 0 1 121.942"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-591.86 507.222 118.24"; + rotation = "-0.0675751 -0.168796 0.983332 222.976"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-205.317 672.457 113.525"; + rotation = "0.919055 -0.0935562 0.382865 29.7787"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "107.001 155.043 84.8555"; + rotation = "0.317652 0.108804 -0.941944 39.9662"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + + new SimGroup(Team1) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-657.613 448.578 105.752"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "75"; + sphereWeight = "50"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + new SpawnSphere() { + position = "-198.926 767.473 106.574"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "75"; + sphereWeight = "50"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + new SpawnSphere() { + position = "89.9495 186.211 110.572"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "75"; + sphereWeight = "50"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + new SpawnSphere() { + position = "-219.73 412.686 148.973"; + rotation = "-0 0 -1 82.1154"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "150"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + }; + new SimGroup(team0) { + providesPower = "1"; + + new InteriorInstance() { + position = "109.864 449.038 117.362"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pplat2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-531.228 141.792 119.641"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pplat2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-198.269 767.314 49.4307"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pbunk8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-657.156 448.654 48.465"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pbunk8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "89.53 185.821 53.7832"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pbunk8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-507.451 836.499 107.579"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pplat2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-363.513 213.64 73.8112"; + rotation = "0.105914 0.766908 0.632957 194.625"; + scale = "1 1 1"; + interiorFile = "prock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-138.357 589.646 60.8018"; + rotation = "0 0 1 40.68"; + scale = "1 1 1"; + interiorFile = "prockc.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory3) { + position = "83.7679 192.52 83.2818"; + rotation = "0 0 -1 45"; + scale = "1 1 1"; + nameTag = "SE Bunker Upper"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory4) { + position = "95.9562 193.255 83.2872"; + rotation = "0 0 1 45"; + scale = "1 1 1"; + nameTag = "SE Bunker Upper"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory3) { + position = "83.7438 192.587 75.7831"; + rotation = "0 0 -1 45"; + scale = "1 1 1"; + nameTag = "SE Bunker Lower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory4) { + position = "95.2651 192.587 75.7793"; + rotation = "0 0 1 45"; + scale = "1 1 1"; + nameTag = "SE Bunker Lower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory5) { + position = "-651.447 455.365 77.964"; + rotation = "0 0 1 45"; + scale = "1 1 1"; + nameTag = "West Bunker Upper"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory6) { + position = "-662.845 455.335 77.9613"; + rotation = "0 0 -1 45"; + scale = "1 1 1"; + nameTag = "West Bunker Upper"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory5) { + position = "-651.45 455.455 70.4685"; + rotation = "0 0 1 45"; + scale = "1 1 1"; + nameTag = "West Bunker Lower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory6) { + position = "-662.895 455.361 70.4601"; + rotation = "0 0 -1 45"; + scale = "1 1 1"; + nameTag = "West Bunker Lower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory9) { + position = "-192.597 774.015 78.9253"; + rotation = "0 0 1 45"; + scale = "1 1 1"; + nameTag = "North Bunker Upper"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory10) { + position = "-203.947 773.986 78.9275"; + rotation = "0 0 -1 45"; + scale = "1 1 1"; + nameTag = "North Bunker Upper"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory9) { + position = "-192.576 774.028 71.4276"; + rotation = "0 0 1 45"; + scale = "1 1 1"; + nameTag = "North Bunker Lower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory10) { + position = "-204.062 774.049 71.4359"; + rotation = "0 0 -1 45"; + scale = "1 1 1"; + nameTag = "North Bunker Lower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Trigger(NexusTrigger) { + position = "-258.297 452.027 82.064"; + rotation = "1 0 0 0"; + scale = "80 80 80"; + dataBlock = "gameTrigger"; + polyhedron = "0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000 -0.0000000 -1.0000000 -0.0000000 -0.0000000 -0.0000000 1.0000000"; + missionTypesList = "Hunters TeamHunters"; + locked = "true"; + }; + new InteriorInstance() { + position = "-328.184 502.073 42.1114"; + rotation = "0.64833 0.759915 -0.0468717 104.509"; + scale = "3 3 3"; + interiorFile = "prock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Item() { + position = "-513.5 835.534 111"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-501.5 835.534 111"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-507.5 842.534 111"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-507.5 830.534 111"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-531.118 135.761 123.008"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-531.118 147.761 123.008"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-525.118 140.761 123.008"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-537.118 140.761 123.008"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "110.029 443.01 120.666"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "110.029 455.01 120.666"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "116.029 448.01 120.666"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "104.029 448.01 120.666"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-218.297 412.027 120.057"; + rotation = "-0 0 -1 82.1154"; + scale = "1 1 1"; + interiorFile = "pplat1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Item() { + position = "-218.297 412.027 122.012"; + rotation = "0 0 1 8.02137"; + scale = "1 1 1"; + dataBlock = "Nexus"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + missionTypesList = "Hunters"; + locked = "true"; + }; + new StaticShape() { + position = "-218.297 412.027 122.057"; + rotation = "0 0 1 8.02137"; + scale = "1 1 1"; + dataBlock = "NexusBase"; + lockCount = "0"; + homingCount = "0"; + missionTypesList = "Hunters"; + locked = "true"; + }; + new StaticShape() { + position = "-218.297 412.027 130.012"; + rotation = "0 0 1 8.02137"; + scale = "1 1 1"; + dataBlock = "NexusCap"; + lockCount = "0"; + homingCount = "0"; + missionTypesList = "Hunters"; + locked = "true"; + }; + new WayPoint() { + position = "-218.297 412.027 122.064"; + rotation = "-0 0 -1 82.1154"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Nexus"; + team = "0"; + missionTypesList = "Hunters"; + locked = "true"; + }; + new WayPoint() { + position = "-218.297 412.027 122.064"; + rotation = "-0 0 -1 82.1154"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Mission Center"; + team = "0"; + missionTypesList = "DM Bounty"; + locked = "true"; + }; + new Item(Team0flag1) { + position = "-218.297 412.027 122.075"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + missionTypesList = "Rabbit"; + locked = "true"; + }; + }; + }; + new InteriorInstance() { + position = "-348.024 748.713 81.7243"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pspir5.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-577.965 240.315 82.0099"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pspir3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new SimGroup(RandomRocks) { + + new SimGroup(Addition1prock6) { + + new InteriorInstance(SmallRock) { + position = "-93.8033 303.628 83.5842"; + rotation = "0.984991 0.145917 0.0922034 182.432"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-747.803 589.628 99.5202"; + rotation = "0.988282 0.121265 0.0927005 182.167"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-9.80328 261.628 73.7824"; + rotation = "0 0 1 1.92003"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-731.803 454.628 84.7368"; + rotation = "0.0737592 -0.741289 0.667121 91.4882"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "52.1967 589.628 70.7921"; + rotation = "0 0 1 5.23602"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "118.197 547.628 87.7468"; + rotation = "0.243106 0.374176 -0.894926 89.8593"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-659.803 407.628 65.5203"; + rotation = "0 0 1 1.08208"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "118.197 486.628 106.541"; + rotation = "0 0 1 2.583"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "116.197 538.628 87.9292"; + rotation = "0.458129 0.88868 0.019141 176.533"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "117.197 659.628 83.4012"; + rotation = "0 0 1 3.01947"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-173.803 918.628 101.344"; + rotation = "0.0819133 -0.732532 0.675786 92.1946"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-332.803 688.628 87.8587"; + rotation = "0.0823159 -0.732093 0.676213 92.2302"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-69.8033 911.628 104.285"; + rotation = "0.999508 0.0207068 0.0235741 82.6183"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-95.8033 451.628 94.6557"; + rotation = "0 0 1 3.70004"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "33.1967 504.628 81.9941"; + rotation = "0.998816 0.0306324 -0.0377965 194.225"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-244.803 553.628 83.8193"; + rotation = "0 0 1 1.29178"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-33.8033 528.628 83.7467"; + rotation = "0.990757 0.0986532 0.0931048 181.924"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-601.803 896.628 101.156"; + rotation = "0.243059 0.374352 -0.894865 89.8278"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "225.197 905.628 99.9014"; + rotation = "0 0 1 0.611656"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "38.1967 286.628 78.685"; + rotation = "0.998543 0.0376283 -0.0386684 194.194"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "138.197 73.6284 96.3749"; + rotation = "0.241518 0.380039 -0.892883 88.8291"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "37.1967 756.628 90.9971"; + rotation = "0.466772 0.884177 0.0188452 176.512"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-522.803 468.628 87.6694"; + rotation = "0.99939 0.0049159 -0.0345766 194.331"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "168.197 785.628 86.5531"; + rotation = "0.0700253 -0.745212 0.663141 91.1737"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-738.803 758.628 85.061"; + rotation = "0.08502 -0.729125 0.679079 92.4702"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "56.1967 -7.37158 103.219"; + rotation = "0 0 1 2.07708"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-498.803 -23.3716 101.313"; + rotation = "0.999072 0.0224173 -0.0367704 194.26"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-136.803 801.628 85.6176"; + rotation = "0.0904589 -0.723065 0.684832 92.9636"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-125.803 56.6284 110.201"; + rotation = "0.999254 0.0145045 -0.0357798 194.292"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-692.803 625.628 85.3489"; + rotation = "0 0 1 6.16103"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(Addition2prock7) { + + new InteriorInstance(SmallRock) { + position = "-679.803 6.62842 101.344"; + rotation = "0.242076 0.377986 -0.893603 89.1878"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-507.803 173.628 87.6393"; + rotation = "0.989333 0.112227 0.0928681 182.07"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-413.803 628.628 75.2727"; + rotation = "0.469867 0.882538 0.0187385 176.504"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "141.197 777.628 83.9062"; + rotation = "0.494023 0.869265 0.0178906 176.446"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-437.803 868.628 100.505"; + rotation = "0.999099 0.0280069 0.0318852 82.6411"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-686.803 940.628 102.372"; + rotation = "0 0 1 5.88183"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "189.197 411.628 101.333"; + rotation = "0.999948 0.00670135 0.00762931 82.593"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-730.803 282.628 104.955"; + rotation = "0.987246 0.129542 0.0925401 182.256"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "63.1967 234.628 77.3064"; + rotation = "0 0 1 0.0884693"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-8.80328 34.6284 101.344"; + rotation = "0 0 1 2.02441"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-243.803 239.628 70.1262"; + rotation = "0.459753 0.887842 0.0190857 176.529"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-134.803 -8.37158 101.161"; + rotation = "0.999101 0.0213523 -0.0366372 194.264"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-292.803 690.628 83.8688"; + rotation = "0.24592 0.363658 -0.898486 91.753"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-575.803 -10.3716 101.29"; + rotation = "0.989061 0.114638 0.0928241 182.096"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-229.803 865.628 101.288"; + rotation = "0.999425 -0.00787068 -0.0329672 194.381"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "135.197 249.628 83.7685"; + rotation = "0.987031 0.131196 0.0925073 182.274"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-165.803 843.628 101.224"; + rotation = "0.999275 0.025118 0.0285961 82.6314"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "9.19672 523.628 83.9016"; + rotation = "0 0 1 1.72777"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-342.803 935.628 101.173"; + rotation = "0.489514 0.871809 0.0180509 176.457"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "14.1967 926.628 101.344"; + rotation = "0.987801 0.125179 0.0926255 182.209"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-383.803 434.628 83.9062"; + rotation = "0.245211 0.366324 -0.897596 91.267"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-638.803 267.628 83.9062"; + rotation = "0.999039 0.028919 0.0329235 82.6445"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-72.8033 881.628 101.909"; + rotation = "0.472286 0.881248 0.0186548 176.499"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-492.803 39.6284 101.344"; + rotation = "0.46448 0.885381 0.018924 176.517"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-685.803 592.628 91.6676"; + rotation = "0.459482 0.887982 0.0190949 176.53"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-214.803 793.628 76.2821"; + rotation = "0.999877 0.010356 0.0117901 82.597"; + scale = "1.5 1.5 1.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "99.1967 864.628 101.323"; + rotation = "0.99709 0.0503099 0.0572765 82.7557"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-331.803 117.628 99.9051"; + rotation = "0.999393 0.00461145 -0.0345384 194.332"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "-423.803 825.628 92.6656"; + rotation = "0 0 1 4.66006"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SmallRock) { + position = "209.197 741.628 94.7785"; + rotation = "0.10068 -0.711332 0.695608 93.925"; + scale = "0.5 0.5 0.5"; + interiorFile = "prock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Talus.mis b/base/missions/Talus.mis new file mode 100644 index 0000000..421fee7 --- /dev/null +++ b/base/missions/Talus.mis @@ -0,0 +1,731 @@ +// MissionTypes = Hunters Bounty DM + +//--- MISSION QUOTE BEGIN --- +//The sword shall be drawn too late, the eagle shall bathe in its own blood, the wolf will fall into its shadow, and the phoenix shall with two heads devour its children. +// -- The Fenecian Prophecy, 3941 CE +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[Hunters]Nexus is in small bunker under bridge +//[DM Bounty]Mission follows standard Rules of Engagement +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + cdTrack = "4"; + powerCount = "0"; + musicTrack = "badlands"; + + new MissionArea(MissionArea) { + area = "-192 -336 560 576"; + flightCeiling = "300"; + flightCeilingRange = "20"; + locked = "true"; + }; + new Sky(Sky) { + position = "-680 -680 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed[0] = "0.000700 0.000000"; + cloudSpeed[1] = "0.000501 0.000701"; + cloudSpeed[2] = "0.000001 0.000300"; + visibleDistance = "600"; + useSkyTextures = "1"; + SkySolidColor = "0.19 0.235 0.21 0.000000"; + fogDistance = "100"; + fogColor = "0.430000 0.420000 0.400000 1.000000"; + fogVolume1 = "700 150 200"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "sky_badlands_cloudy.dml"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.700000 0.700000 0.700000 1.000000"; + ambient = "0.500000 0.500000 0.500000 1.000000"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + locked = "true"; + position = "-680 -680 0"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/baddet1"; + terrainFile = "Talus.ter"; + squareSize = "8"; + emptySquares = "684435 684691 684947 685203 685459 685715 685971 686227"; + locked = "true"; + position = "-1024 -1024 0"; + }; + new NavigationGraph(NavGraph) { + graphFile = "Talus.nav"; + conjoinAngleDev = "50"; + conjoinBowlDev = "20"; + coverage = "0"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + rotation = "0 0 0 0"; + scale = "1 1 1"; + locked = "true"; + YDimOverSize = "0"; + position = "0 0 0 1"; + XDimOverSize = "0"; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "44.637 142.07 114.542"; + rotation = "0.0639949 -0.22751 0.971671 149.427"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "257.713 -17.652 82.2047"; + rotation = "0.181561 0.176054 -0.967492 90.1287"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + + new SimGroup(Team1) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "175.957 -87.613 40.7467"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "70"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "0"; + locked = "true"; + }; + new SpawnSphere() { + position = "-76.36 98.425 74.3441"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "20"; + indoorWeight = "100"; + outdoorWeight = "0"; + locked = "true"; + }; + }; + }; + new SimGroup(team0) { + providesPower = "1"; + + new Trigger(NexusTrigger) { + position = "59.5378 42.4244 12.2764"; + rotation = "1 0 0 0"; + scale = "60 60 20"; + dataBlock = "gameTrigger"; + polyhedron = "0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000 -0.0000000 -1.0000000 -0.0000000 -0.0000000 -0.0000000 1.0000000"; + missionTypesList = "Hunters"; + locked = "true"; + }; + new StaticShape() { + position = "86.372 11.309 15.689"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "NexusBase"; + lockCount = "0"; + homingCount = "0"; + missionTypesList = "Hunters"; + locked = "true"; + }; + new Item() { + position = "86.372 11.309 14.2159"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Nexus"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + missionTypesList = "Hunters"; + locked = "true"; + flashThreadDir = "1"; + }; + new StaticShape() { + position = "86.372 11.309 21.3891"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "NexusCap"; + lockCount = "0"; + homingCount = "0"; + missionTypesList = "Hunters"; + locked = "true"; + }; + new WayPoint() { + position = "86.332 11.529 13.9235"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Nexus"; + team = "0"; + missionTypesList = "Hunters"; + locked = "true"; + }; + new WayPoint() { + position = "86.332 11.529 13.9235"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Mission Center"; + team = "0"; + missionTypesList = "DM"; + locked = "true"; + }; + new StaticShape(Team0StationInventory1) { + position = "169.082 -86.234 43.6613"; + rotation = "0 0 -1 89.3814"; + scale = "1 1 1"; + nameTag = "Upper Base"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory2) { + position = "190.711 -87.804 35.6577"; + rotation = "0 0 1 1.1467"; + scale = "1 1 1"; + nameTag = "Mid Base"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory3) { + position = "190.759 -83.001 35.6581"; + rotation = "0 0 1 181.237"; + scale = "1 1 1"; + nameTag = "Mid Base"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory4) { + position = "207.339 -105.495 8.6439"; + rotation = "0 0 1 181.237"; + scale = "1 1 1"; + nameTag = "Alcove"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory5) { + position = "208.09 -69.172 8.6465"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Alcove"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory6) { + position = "200.503 -69.055 26.6731"; + rotation = "0 0 1 135.218"; + scale = "1 1 1"; + nameTag = "South Loft"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory7) { + position = "201.063 -105.071 26.6602"; + rotation = "0 0 1 48.1284"; + scale = "1 1 1"; + nameTag = "North Loft"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory8) { + position = "204.396 -86.75 -24.3412"; + rotation = "0 0 1 91.1003"; + scale = "1 1 1"; + nameTag = "Core"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item() { + position = "181.441 -89.644 25.582"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "181.461 -86.357 25.582"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "178.236 -86.285 25.582"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "181.561 -82.992 25.582"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "184.759 -86.508 25.582"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-81.225 105.436 56.5"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-84.283 94.172 56.5"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-70.669 89.964 56.5"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-68.458 102.444 56.5"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "6.5572 -151.284 92.9612"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "3.7202 -150.31 92.9612"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "0.8832 -149.336 92.9612"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "216.737 -238.742 91.4766"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "213.9 -237.768 91.4766"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "211.063 -236.794 91.4766"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "193.968 131.996 108.703"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "191.131 132.97 108.703"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "188.294 133.944 108.703"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory9) { + position = "-67.562 102.765 79.7716"; + rotation = "0 0 1 63.0253"; + scale = "1 1 1"; + nameTag = "Upper Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory10) { + position = "-84.75 93.986 79.7656"; + rotation = "0 0 -1 116.883"; + scale = "1 1 1"; + nameTag = "Upper Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory11) { + position = "-65.652 103.378 32.2586"; + rotation = "0 0 1 63.5983"; + scale = "1 1 1"; + nameTag = "Lower Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory12) { + position = "-86.402 92.85 32.2743"; + rotation = "0 0 -1 116.883"; + scale = "1 1 1"; + nameTag = "Lower Tower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + }; + new SimGroup(Buildings) { + + new InteriorInstance() { + position = "-76.198 98.426 39.2783"; + rotation = "0 0 -1 26.929"; + scale = "1 1 1"; + interiorFile = "xtowr1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new InteriorInstance() { + position = "194.748 -86.584 19.6725"; + rotation = "0 0 1 1.14602"; + scale = "1 1 1"; + interiorFile = "xbunk2.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new InteriorInstance() { + position = "86.332 11.529 13.6735"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "xbunk5.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "193.192 132.182 106.415"; + rotation = "0 0 -1 71.6197"; + scale = "1 1 1"; + interiorFile = "xbunk9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "5.994 -151.072 90.7623"; + rotation = "0 0 -1 71.6197"; + scale = "1 1 1"; + interiorFile = "xbunk9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "215.996 -238.314 89.0566"; + rotation = "0 0 -1 71.6197"; + scale = "1 1 1"; + interiorFile = "xbunk9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(Bridge1) { + + new InteriorInstance() { + position = "124.884 55.8962 64.8005"; + rotation = "0 0 1 41.8259"; + scale = "1 1 1"; + interiorFile = "xbrdg0.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "114.214 43.9734 64.8005"; + rotation = "0 0 1 41.8259"; + scale = "1 1 1"; + interiorFile = "xbrdg8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "103.544 32.0506 64.8005"; + rotation = "0 0 1 41.8259"; + scale = "1 1 1"; + interiorFile = "xbrdg1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "92.8738 20.1278 64.8005"; + rotation = "0 0 1 41.8259"; + scale = "1 1 1"; + interiorFile = "xbrdg2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "82.2039 8.205 64.8005"; + rotation = "0 0 1 41.8259"; + scale = "1 1 1"; + interiorFile = "xbrdg9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "71.5341 -3.7178 64.8005"; + rotation = "0 0 1 41.8259"; + scale = "1 1 1"; + interiorFile = "xbrdg2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "60.8641 -15.6406 64.8005"; + rotation = "0 0 1 41.8259"; + scale = "1 1 1"; + interiorFile = "xbrdg1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "50.1942 -27.5634 64.8005"; + rotation = "0 0 1 41.8259"; + scale = "1 1 1"; + interiorFile = "xbrdg8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "39.5243 -39.4861 64.8005"; + rotation = "0 0 1 221.826"; + scale = "1 1 1"; + interiorFile = "xbrdg0.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(Organics) { + + new TSStatic() { + position = "45.305 -182.118 109.553"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "226.613 -30.409 43.751"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "160.681 11.384 21.7222"; + rotation = "0 0 1 100.268"; + scale = "1 1 1"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "169.341 7.967 24.8251"; + rotation = "0 0 -1 5.72956"; + scale = "1 1 1"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + new TSStatic() { + position = "262.182 -140.721 30.6938"; + rotation = "0 0 1 104.851"; + scale = "1 1 1"; + shapeName = "xorg5.dts"; + locked = "true"; + }; + }; + new AudioEmitter() { + position = "79.9776 -62.0504 21.1463"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/coldwind1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.6"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/ThinIce.mis b/base/missions/ThinIce.mis new file mode 100644 index 0000000..8a9b7d1 --- /dev/null +++ b/base/missions/ThinIce.mis @@ -0,0 +1,4394 @@ +// DisplayName = Thin Ice +// MissionTypes = CTF + +//--- MISSION QUOTE BEGIN --- +//Silent as the mouths of the dead. +// -- Starwolf saying +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[CTF]5 flag captures to win +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + CTF_scoreLimit = "5"; + musicTrack = "ice"; + cdTrack = "5"; + powerCount = "0"; + + new MissionArea(MissionArea) { + area = "-688 -1008 1408 1984"; + flightCeiling = "300"; + flightCeilingRange = "20"; + locked = "true"; + }; + new Sky(Sky) { + position = "264 -8 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "600"; + useSkyTextures = "1"; + SkySolidColor = "0.365000 0.390000 0.420000 0.000000"; + fogDistance = "575"; + fogColor = "0.500000 0.500000 0.570000 1.000000"; + fogVolume1 = "5 0 70"; + fogVolume2 = "800 175 250"; + fogVolume3 = "0 0 0"; + materialList = "sky_ice_blue.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 7648147490786239160000000.000000"; + cloudSpeed0 = "0.000250 0.000050"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.600000 0.600000 0.600000 1.000000"; + ambient = "0.500000 0.500000 0.500000 1.000000"; + position = "264 -8 0"; + locked = "true"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/snowdet2"; + terrainFile = "ThinIce.ter"; + squareSize = "8"; + emptySquares = "535384 666712 535896 536152 119972 316835 317091 317347 317603 317859 318115 318371 318627"; + position = "-1024 -1024 0"; + locked = "true"; + }; + new WaterBlock(Water) { + position = "-1024 -1024 0"; + rotation = "1 0 0 0"; + scale = "2048 2048 70.5"; + liquidType = "RiverWater"; + density = "1"; + viscosity = "5"; + waveMagnitude = "1"; + surfaceTexture = "LiquidTiles/BlueWater"; + surfaceOpacity = "0.4"; + envMapTexture = "ice/skies/icebound_emap_cloudsground"; + envMapIntensity = "0.1"; + removeWetEdges = "0"; + locked = "true"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "45"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + YDimOverSize = "0"; + position = "0 0 0 1"; + locked = "true"; + XDimOverSize = "0"; + rotation = "0 0 0 0"; + conjoinBowlDev = "20"; + scale = "1 1 1"; + coverage = "0"; + GraphFile = "ThinIce.nav"; + }; + new SimGroup(Teams) { + + new SimGroup(Team1) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "227.226 706.748 170.128"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "20"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new SimGroup(mainPowered) { + + new InteriorInstance() { + position = "421.645 787.752 186.432"; + rotation = "0 0 1 233.376"; + scale = "1 1 1"; + interiorFile = "svpad.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "425.866 790.854 186.132"; + rotation = "0 0 1 233.376"; + scale = "1 1 1"; + nameTag = "Base"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + mobileBaseVehicle = "Removed"; + AssaultVehicle = "Removed"; + scoutVehicle = "Removed"; + locked = "true"; + }; + new Item(Team1flag1) { + position = "296.029 718.738 131.452"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "296.008 673.733 127.449"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "sbase1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new StaticShape(Team1StationInventory1) { + position = "308.001 684.065 127.448"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "Lower Alcove"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory2) { + position = "284.057 684.061 127.437"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "Lower Alcove"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1generatorLarge1) { + position = "289.766 712.331 131.447"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Base"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1generatorLarge2) { + position = "302.147 712.314 131.444"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Base"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory3) { + position = "302.378 711.092 147.444"; + rotation = "0 0 1 180.091"; + scale = "1 1 1"; + nameTag = "Base Midlevel"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory4) { + position = "289.644 711.066 147.452"; + rotation = "0 0 1 180.091"; + scale = "1 1 1"; + nameTag = "Base Midlevel"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory5) { + position = "296.008 725.081 147.445"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "Base Central"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory6) { + position = "412.608 765.293 188.426"; + rotation = "0 0 1 233.376"; + scale = "1 1 1"; + nameTag = "Main Vehicle Pad"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory7) { + position = "397.533 785.579 188.428"; + rotation = "0 0 1 233.376"; + scale = "1 1 1"; + nameTag = "Main Vehicle Pad"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Turret(Team1TurretBaseLarge1) { + position = "296.008 727.209 159.435"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Base Upper"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "MissileBarrelLarge"; + locked = "true"; + }; + new Turret(Team1TurretBaseLarge2) { + position = "295.835 675.121 145.44"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "Base Entrance"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new StaticShape(Team1StationInventory8) { + position = "296.008 725.081 131.451"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Base Primary"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1SensorMediumPulse1) { + position = "401.492 677.619 233.749"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + nameTag = "Base"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(forcefieldGroup) { + + new ForceFieldBare() { + position = "304.027 747.633 155.4"; + rotation = "0 0 1 179.954"; + scale = "6.73058 0.15 3.34155"; + dataBlock = "defaultForceFieldBare"; + locked = "true"; + color = "0.000000 0.000000 0.200000 1.000000"; + }; + new ForceFieldBare() { + position = "294.62 747.633 155.4"; + rotation = "0 0 1 179.954"; + scale = "6.73058 0.15 3.34155"; + dataBlock = "defaultForceFieldBare"; + locked = "true"; + color = "0.000000 0.000000 0.200000 1.000000"; + }; + new ForceFieldBare() { + position = "317.017 716.802 146.408"; + rotation = "0 0 1 90"; + scale = "21.5 0.15 6.5"; + dataBlock = "defaultForceFieldBare"; + locked = "true"; + color = "0.000000 0.000000 0.200000 1.000000"; + }; + new ForceFieldBare() { + position = "274.758 716.879 146.438"; + rotation = "0 0 1 90"; + scale = "21.5 0.15 6.5"; + dataBlock = "defaultForceFieldBare"; + locked = "true"; + color = "0.000000 0.000000 0.200000 1.000000"; + }; + new StaticShape(Team1generatorLarge3) { + position = "295.981 735.314 154.437"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Forcefield"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new Item() { + position = "296.012 710.237 146.882"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "401.492 677.619 225.694"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "smisc4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new SimGroup(AuxVehPad0) { + + new StaticShape(Team1generatorLarge4) { + position = "464.434 558.022 167.577"; + rotation = "-0 0 -1 19.4805"; + scale = "1 1 1"; + nameTag = "Aux Vehicle Pad"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "464.856 556.908 176.575"; + rotation = "0 0 -1 109.435"; + scale = "1 1 1"; + interiorFile = "stowr1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "520.093 480.492 81.3057"; + rotation = "0 0 1 213.185"; + scale = "1 1 1"; + interiorFile = "svpad.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "526.114 489.697 81.0057"; + rotation = "0 0 1 33.1853"; + scale = "1 1 1"; + nameTag = "Aux"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item() { + position = "541.022 512.489 84.1202"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new StaticShape() { + position = "526.342 519.88 83.3091"; + rotation = "0 0 -1 11.4591"; + scale = "1 1 1"; + nameTag = "Aux Vehicle Pad"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(AIObjectives) { + + new AIObjective(AIODefendLocation) { + position = "293.951 724.905 133.342"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend our flag"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3288"; + location = "293.951 724.905 133.342"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + chat = "ChatSelfDefendFlag DefendBase"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + gameType = "all"; + }; + new AIObjective(AIOAttackPlayer) { + position = "293.951 724.905 133.342"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Kill the enemy flag carrier"; + mode = "FlagCarrier"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3288"; + location = "293.951 724.905 133.342"; + weightLevel1 = "4800"; + weightLevel2 = "3000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergySniper"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + gameType = "all"; + }; + new AIObjective(AIOTouchObject) { + position = "293.951 724.905 133.342"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Return our flag"; + mode = "FlagDropped"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3288"; + location = "293.951 724.905 133.342"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + gameType = "all"; + }; + new AIObjective(AIOAttackObject) { + position = "305.993 690.332 129.014"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3290"; + location = "305.993 690.332 129.014"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "282.049 690.328 129.003"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3292"; + location = "282.049 690.328 129.003"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "287.764 717.277 132.952"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team1generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3294"; + location = "287.764 717.277 132.952"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "287.764 717.277 132.952"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team1generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3294"; + location = "287.764 717.277 132.952"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "300.145 717.26 132.949"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team1generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3295"; + location = "300.145 717.26 132.949"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "300.145 717.26 132.949"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team1generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3295"; + location = "300.145 717.26 132.949"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "300.37 717.359 149.01"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3296"; + location = "300.37 717.359 149.01"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "287.636 717.333 149.018"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3298"; + location = "287.636 717.333 149.018"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "294 731.348 149.011"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3300"; + location = "294 731.348 149.011"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "412.608 765.293 189.992"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory6"; + targetClientId = "-1"; + targetObjectId = "3302"; + location = "412.608 765.293 189.992"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "397.533 785.579 189.994"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory7"; + targetClientId = "-1"; + targetObjectId = "3304"; + location = "397.533 785.579 189.994"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "294 734.004 161.336"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team1TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3306"; + location = "294 734.004 161.336"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "293.548 680.86 147.341"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team1TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3307"; + location = "293.548 680.86 147.341"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "294 731.348 133.017"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory8"; + targetClientId = "-1"; + targetObjectId = "3308"; + location = "294 731.348 133.017"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "401.492 677.619 236.269"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SensorMediumPulse"; + targetObject = "Team1SensorMediumPulse1"; + targetClientId = "-1"; + targetObjectId = "3310"; + location = "401.492 677.619 236.269"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "293.979 740.26 155.942"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team1generatorLarge3"; + targetClientId = "-1"; + targetObjectId = "3321"; + location = "293.979 740.26 155.942"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "293.979 740.26 155.942"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team1generatorLarge3"; + targetClientId = "-1"; + targetObjectId = "3321"; + location = "293.979 740.26 155.942"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-534.468 461.68 84.3938"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team1generatorLarge4"; + targetClientId = "-1"; + targetObjectId = "3326"; + location = "-534.468 461.68 84.3938"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "-534.468 461.68 84.3938"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team1generatorLarge4"; + targetClientId = "-1"; + targetObjectId = "3326"; + location = "-534.468 461.68 84.3938"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOTouchObject) { + position = "-298.089 -658.892 124.476"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the enemy flag"; + mode = "FlagGrab"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3380"; + location = "-298.089 -658.892 124.476"; + weightLevel1 = "3850"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + gameType = "all"; + }; + new AIObjective(AIOTouchObject) { + position = "-298.089 -658.892 124.476"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the flag!"; + mode = "FlagCapture"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3380"; + location = "-298.089 -658.892 124.476"; + weightLevel1 = "5000"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + gameType = "all"; + }; + new AIObjective(AIOTouchObject) { + position = "-298.089 -658.892 124.476"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the dropped enemy flag"; + mode = "FlagDropped"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3380"; + location = "-298.089 -658.892 124.476"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + gameType = "all"; + }; + new AIObjective(AIORepairObject) { + position = "-263.506 -646.878 120.148"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3386"; + location = "-263.506 -646.878 120.148"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-263.521 -670.821 120.137"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3388"; + location = "-263.521 -670.821 120.137"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-290.466 -665.085 124.086"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team2generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3390"; + location = "-290.466 -665.085 124.086"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-290.439 -652.704 124.083"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team2generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3391"; + location = "-290.439 -652.704 124.083"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-290.538 -652.479 140.144"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3392"; + location = "-290.538 -652.479 140.144"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-290.522 -665.213 140.152"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3394"; + location = "-290.522 -665.213 140.152"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-304.532 -658.838 140.145"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3396"; + location = "-304.532 -658.838 140.145"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-324.571 -805.236 128.762"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory6"; + targetClientId = "-1"; + targetObjectId = "3398"; + location = "-324.571 -805.236 128.762"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-304.285 -790.161 128.764"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory7"; + targetClientId = "-1"; + targetObjectId = "3400"; + location = "-304.285 -790.161 128.764"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "-307.187 -658.836 152.47"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3402"; + location = "-307.187 -658.836 152.47"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "-254.044 -659.331 138.475"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3403"; + location = "-254.044 -659.331 138.475"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-304.532 -658.838 124.151"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team2StationInventory8"; + targetClientId = "-1"; + targetObjectId = "3404"; + location = "-304.532 -658.838 124.151"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "-239.622 -763.912 234.678"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the SensorMediumPulse"; + targetObject = "Team2SensorMediumPulse1"; + targetClientId = "-1"; + targetObjectId = "3406"; + location = "-239.622 -763.912 234.678"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-313.444 -658.852 147.076"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team2generatorLarge3"; + targetClientId = "-1"; + targetObjectId = "3416"; + location = "-313.444 -658.852 147.076"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "345.486 -689.162 87.5538"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team2generatorLarge4"; + targetClientId = "-1"; + targetObjectId = "3426"; + location = "345.486 -689.162 87.5538"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + }; + }; + new SimGroup(Team2) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-336.223 -685.61 137.098"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "20"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new SimGroup(mainPowered) { + + new Item(Team2flag1) { + position = "-294.712 -663.941 122.75"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-249.757 -664.008 118.747"; + rotation = "-0 0 -1 89.9544"; + scale = "1 1 1"; + interiorFile = "sbase1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new InteriorInstance() { + position = "-302.112 -814.273 125.202"; + rotation = "-0 0 -1 36.624"; + scale = "1 1 1"; + interiorFile = "svpad.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-298.739 -818.936 124.902"; + rotation = "-0 0 -1 36.624"; + scale = "1 1 1"; + nameTag = "Base"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + mobileBaseVehicle = "Removed"; + AssaultVehicle = "Removed"; + scoutVehicle = "Removed"; + locked = "true"; + }; + new StaticShape(Team2StationInventory1) { + position = "-260.079 -652.007 118.746"; + rotation = "0 0 1 89.9547"; + scale = "1 1 1"; + nameTag = "Lower Alcove"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory2) { + position = "-260.094 -675.95 118.735"; + rotation = "0 0 1 89.9547"; + scale = "1 1 1"; + nameTag = "Lower Alcove"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2generatorLarge1) { + position = "-288.36 -670.219 122.745"; + rotation = "-0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Base"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2generatorLarge2) { + position = "-288.333 -657.838 122.742"; + rotation = "-0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Base"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory3) { + position = "-287.111 -657.608 138.742"; + rotation = "0 0 1 90.1366"; + scale = "1 1 1"; + nameTag = "Base Midlevel"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory4) { + position = "-287.095 -670.342 138.75"; + rotation = "0 0 1 90.1366"; + scale = "1 1 1"; + nameTag = "Base Midlevel"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory5) { + position = "-301.105 -663.967 138.743"; + rotation = "0 0 1 89.9547"; + scale = "1 1 1"; + nameTag = "Base Central"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory6) { + position = "-324.571 -805.236 127.196"; + rotation = "-0 0 -1 36.624"; + scale = "1 1 1"; + nameTag = "Base Vehicle Pad"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory7) { + position = "-304.285 -790.161 127.198"; + rotation = "-0 0 -1 36.624"; + scale = "1 1 1"; + nameTag = "Base Vehicle Pad"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Turret(Team2TurretBaseLarge1) { + position = "-303.232 -663.965 150.733"; + rotation = "-0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Base Upper"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "MissileBarrelLarge"; + locked = "true"; + }; + new Turret(Team2TurretBaseLarge2) { + position = "-251.145 -664.09 136.738"; + rotation = "0 0 1 89.9547"; + scale = "1 1 1"; + nameTag = "Base Entrance"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new StaticShape(Team2StationInventory8) { + position = "-301.105 -663.967 122.749"; + rotation = "0 0 1 90.0456"; + scale = "1 1 1"; + nameTag = "Base Primary"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2SensorMediumPulse1) { + position = "-239.622 -763.912 232.158"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Base"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(forcefieldGroup) { + + new ForceFieldBare() { + position = "-323.339 -655.795 146.664"; + rotation = "0 0 1 90"; + scale = "6.73058 0.15 3.34155"; + dataBlock = "defaultForceFieldBare"; + locked = "true"; + color = "0.000000 0.000000 0.200000 1.000000"; + }; + new ForceFieldBare() { + position = "-323.333 -665.322 146.664"; + rotation = "0 0 1 90"; + scale = "6.73058 0.15 3.34155"; + dataBlock = "defaultForceFieldBare"; + locked = "true"; + color = "0.000000 0.000000 0.200000 1.000000"; + }; + new ForceFieldBare() { + position = "-292.809 -642.964 137.706"; + rotation = "1 0 0 0"; + scale = "21.5 0.15 6.5"; + dataBlock = "defaultForceFieldBare"; + locked = "true"; + color = "0.000000 0.000000 0.200000 1.000000"; + }; + new ForceFieldBare() { + position = "-292.92 -685.224 137.736"; + rotation = "1 0 0 0"; + scale = "21.5 0.15 6.5"; + dataBlock = "defaultForceFieldBare"; + locked = "true"; + color = "0.000000 0.000000 0.200000 1.000000"; + }; + new StaticShape(Team2generatorLarge3) { + position = "-311.338 -663.986 145.735"; + rotation = "-0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Forcefield"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new Item() { + position = "-286.261 -663.974 138.18"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-239.622 -763.912 224.103"; + rotation = "0 0 1 181.055"; + scale = "1 1 1"; + interiorFile = "smisc4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new SimGroup(AuxVehPad) { + + new InteriorInstance() { + position = "33.359 -659.809 112.427"; + rotation = "0 0 1 84.2701"; + scale = "1 1 1"; + interiorFile = "svpad.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "19.3336 -661.103 112.127"; + rotation = "0 0 -1 95.7304"; + scale = "1 1 1"; + nameTag = "Aux"; + dataBlock = "StationVehiclePad"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-50.1791 -684.242 189.539"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "stowr1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape(Team2generatorLarge4) { + position = "-48.9881 -684.214 180.541"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "Aux Vehicle Pad"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item() { + position = "-4.55446 -663.525 115.173"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-4.43608 -647.114 114.43"; + rotation = "0 0 -1 50.9932"; + scale = "1 1 1"; + nameTag = "Aux Vehicle Pad"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(AIObjectives) { + + new AIObjective(AIOTouchObject) { + position = "293.951 724.905 133.342"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the enemy flag"; + mode = "FlagGrab"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3288"; + location = "293.951 724.905 133.342"; + weightLevel1 = "3850"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + gameType = "all"; + }; + new AIObjective(AIOTouchObject) { + position = "293.951 724.905 133.342"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the flag!"; + mode = "FlagCapture"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3288"; + location = "293.951 724.905 133.342"; + weightLevel1 = "5000"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + gameType = "all"; + }; + new AIObjective(AIOTouchObject) { + position = "293.951 724.905 133.342"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the dropped enemy flag"; + mode = "FlagDropped"; + targetObject = "Team1flag1"; + targetClientId = "-1"; + targetObjectId = "3288"; + location = "293.951 724.905 133.342"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + gameType = "all"; + }; + new AIObjective(AIORepairObject) { + position = "305.993 690.332 129.014"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3290"; + location = "305.993 690.332 129.014"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "282.049 690.328 129.003"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3292"; + location = "282.049 690.328 129.003"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "287.764 717.277 132.952"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team1generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3294"; + location = "287.764 717.277 132.952"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "300.145 717.26 132.949"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team1generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3295"; + location = "300.145 717.26 132.949"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "300.37 717.359 149.01"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3296"; + location = "300.37 717.359 149.01"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "287.636 717.333 149.018"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3298"; + location = "287.636 717.333 149.018"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "294 731.348 149.011"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3300"; + location = "294 731.348 149.011"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "412.608 765.293 189.992"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory6"; + targetClientId = "-1"; + targetObjectId = "3302"; + location = "412.608 765.293 189.992"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "397.533 785.579 189.994"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory7"; + targetClientId = "-1"; + targetObjectId = "3304"; + location = "397.533 785.579 189.994"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "294 734.004 161.336"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team1TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3306"; + location = "294 734.004 161.336"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "293.548 680.86 147.341"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team1TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3307"; + location = "293.548 680.86 147.341"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "294 731.348 133.017"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory8"; + targetClientId = "-1"; + targetObjectId = "3308"; + location = "294 731.348 133.017"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOMortarObject) { + position = "401.492 677.619 236.269"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the SensorMediumPulse"; + targetObject = "Team1SensorMediumPulse1"; + targetClientId = "-1"; + targetObjectId = "3310"; + location = "401.492 677.619 236.269"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "293.979 740.26 155.942"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team1generatorLarge3"; + targetClientId = "-1"; + targetObjectId = "3321"; + location = "293.979 740.26 155.942"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-534.468 461.68 84.3938"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the generatorLarge"; + targetObject = "Team1generatorLarge4"; + targetClientId = "-1"; + targetObjectId = "3326"; + location = "-534.468 461.68 84.3938"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "-298.089 -658.892 124.476"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend our flag"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3380"; + location = "-298.089 -658.892 124.476"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + chat = "ChatSelfDefendFlag DefendBase"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + gameType = "all"; + }; + new AIObjective(AIOAttackPlayer) { + position = "-298.089 -658.892 124.476"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Kill the enemy flag carrier"; + mode = "FlagCarrier"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3380"; + location = "-298.089 -658.892 124.476"; + weightLevel1 = "4800"; + weightLevel2 = "3000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergySniper"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + gameType = "all"; + }; + new AIObjective(AIOTouchObject) { + position = "-298.089 -658.892 124.476"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Return our flag"; + mode = "FlagDropped"; + targetObject = "Team2flag1"; + targetClientId = "-1"; + targetObjectId = "3380"; + location = "-298.089 -658.892 124.476"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + gameType = "all"; + }; + new AIObjective(AIOAttackObject) { + position = "-263.506 -646.878 120.148"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3386"; + location = "-263.506 -646.878 120.148"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-263.521 -670.821 120.137"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3388"; + location = "-263.521 -670.821 120.137"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-290.466 -665.085 124.086"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team2generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3390"; + location = "-290.466 -665.085 124.086"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "-290.466 -665.085 124.086"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team2generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3390"; + location = "-290.466 -665.085 124.086"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-290.439 -652.704 124.083"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team2generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3391"; + location = "-290.439 -652.704 124.083"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "-290.439 -652.704 124.083"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team2generatorLarge2"; + targetClientId = "-1"; + targetObjectId = "3391"; + location = "-290.439 -652.704 124.083"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-290.538 -652.479 140.144"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3392"; + location = "-290.538 -652.479 140.144"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-290.522 -665.213 140.152"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory4"; + targetClientId = "-1"; + targetObjectId = "3394"; + location = "-290.522 -665.213 140.152"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-304.532 -658.838 140.145"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory5"; + targetClientId = "-1"; + targetObjectId = "3396"; + location = "-304.532 -658.838 140.145"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-324.571 -805.236 128.762"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory6"; + targetClientId = "-1"; + targetObjectId = "3398"; + location = "-324.571 -805.236 128.762"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-304.285 -790.161 128.764"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory7"; + targetClientId = "-1"; + targetObjectId = "3400"; + location = "-304.285 -790.161 128.764"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-307.187 -658.836 152.47"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3402"; + location = "-307.187 -658.836 152.47"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-254.044 -659.331 138.475"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team2TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3403"; + location = "-254.044 -659.331 138.475"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIOAttackObject) { + position = "-304.532 -658.838 124.151"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team2StationInventory8"; + targetClientId = "-1"; + targetObjectId = "3404"; + location = "-304.532 -658.838 124.151"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-239.622 -763.912 234.678"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the SensorMediumPulse"; + targetObject = "Team2SensorMediumPulse1"; + targetClientId = "-1"; + targetObjectId = "3406"; + location = "-239.622 -763.912 234.678"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "-313.444 -658.852 147.076"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team2generatorLarge3"; + targetClientId = "-1"; + targetObjectId = "3416"; + location = "-313.444 -658.852 147.076"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "-313.444 -658.852 147.076"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team2generatorLarge3"; + targetClientId = "-1"; + targetObjectId = "3416"; + location = "-313.444 -658.852 147.076"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIORepairObject) { + position = "345.486 -689.162 87.5538"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generatorLarge"; + targetObject = "Team2generatorLarge4"; + targetClientId = "-1"; + targetObjectId = "3426"; + location = "345.486 -689.162 87.5538"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + new AIObjective(AIODefendLocation) { + position = "345.486 -689.162 87.5538"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generatorLarge"; + targetObject = "Team2generatorLarge4"; + targetClientId = "-1"; + targetObjectId = "3426"; + location = "345.486 -689.162 87.5538"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + }; + }; + }; + new SimGroup(team0) { + + new SimGroup(AIObjectives) { + }; + }; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "-155.322 -616.974 188.339"; + rotation = "-0.0788399 -0.144043 0.986426 236.73"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-566.136 -223.173 143.419"; + rotation = "0.068876 -0.0398944 0.996827 60.3186"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "340.277 -37.8727 118.314"; + rotation = "0.0791522 0.024919 -0.996551 35.064"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "370.9 583.087 191.983"; + rotation = "0.302936 0.0903999 -0.948714 34.9214"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(bridge1) { + + new InteriorInstance() { + position = "-76.996 -145.355 58.1014"; + rotation = "0 0 1 85.9437"; + scale = "1 1 1"; + interiorFile = "sbrdgo.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-160.785 -151.297 58.1014"; + rotation = "0 0 1 85.9437"; + scale = "1 1 1"; + interiorFile = "sbrdgo.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-244.575 -157.239 58.1014"; + rotation = "0 0 1 85.9437"; + scale = "1 1 1"; + interiorFile = "sbrdgo.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(brdige2) { + + new InteriorInstance() { + position = "333.746 282.804 72.508"; + rotation = "0 0 1 21.1995"; + scale = "1 1 1"; + interiorFile = "sbrdgo.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "303.37 204.489 72.508"; + rotation = "0 0 1 21.1995"; + scale = "1 1 1"; + interiorFile = "sbrdgo.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "272.994 126.173 72.508"; + rotation = "0 0 1 21.1995"; + scale = "1 1 1"; + interiorFile = "sbrdgo.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "242.619 47.8568 72.508"; + rotation = "0 0 1 21.1995"; + scale = "1 1 1"; + interiorFile = "sbrdgo.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(AudioWater) { + + new AudioEmitter() { + position = "601.21 335.606 68.5284"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-589.426 824.95 83.8392"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-524.186 756.618 86.1711"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-451.897 671.275 80.4897"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-310.484 484.207 77.9826"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-190.234 408.99 83.9741"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-62.0273 335.789 77.5297"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "22.2814 332.258 81.1332"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "132.166 339.487 80.4969"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "254.92 361.952 83.2938"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "162.013 284.636 82.3461"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "222.601 204.07 77.3374"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "308.59 128.358 80.6357"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "354.373 53.7217 86.938"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "186.736 113.014 78.952"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "112.543 31.6621 81.7584"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-27.3073 -9.6724 76.5363"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-94.7851 -80.8653 78.9953"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-135.925 -181.996 67.7771"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-167.692 -252.255 76.919"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-93.5191 -325.6 85.2911"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-2.9425 -381.725 75.7156"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "107.042 -498.123 76.3871"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "411.612 -903.5 83.1638"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "312.552 -862.514 74.3032"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "188.964 -903.69 75.6023"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-37.8193 -1020.19 73.1935"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-279.767 -971.146 76.1991"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-539.107 -263.886 80.9785"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-423.731 30.0758 65.9006"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-307.155 -3.895 70.3028"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-225.375 -82.9053 80.7942"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-117.29 -68.6357 71.1176"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lakewaves.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "30"; + maxDistance = "1920"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + }; + new SimGroup(AudioIce) { + + new AudioEmitter() { + position = "51.4797 -443.162 48.018"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/icecrack2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "197.786 -581.538 35.7268"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/icecrack2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "273.821 -817.129 60.4446"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/icecrack2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "565.467 -402.402 49.6072"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/icecrack2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "477.927 -132.986 36.8269"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/icecrack2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "98.8 203.689 60.2986"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/icecrack2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "245.374 295.257 62.466"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/icecrack2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-367.904 502.825 46.3583"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/icecrack2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-518.856 828.165 53.2221"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/icecrack1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-581.811 228.514 53.9287"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/icecrack1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-321.679 -62.4149 45.0066"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/icecrack1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "52.2378 50.7429 53.2836"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/icecrack1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "227.982 425.181 45.5979"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/icecrack1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "301.512 268.466 57.2814"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/icecrack1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "526.708 371.224 54.8098"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/icecrack1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "394.709 2.0176 53.2124"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/icecrack1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-172.45 16.6238 48.836"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/icecrack2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-450.622 -141.327 50.0381"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/icecrack2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + }; + new SimGroup(AudioSnow) { + + new AudioEmitter() { + position = "-310.343 -540.858 207.228"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/snowfall1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "30000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-613 -642.324 94.3295"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/snowfall2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "30000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-468.426 -580.771 68.7285"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/snowfall1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "30000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-53.0981 -747.782 144.428"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/snowfall2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "30000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "91.476 -686.229 118.827"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/snowfall3.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "30000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "246.868 -403.456 124.322"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/snowfall3.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "30000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "391.442 -341.903 98.7208"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/snowfall1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "30000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "572.262 602.371 199.409"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/snowfall1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "30000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "716.836 663.924 173.808"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/snowfall2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "30000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "160.286 840.671 192.93"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/snowfall1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "30000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "304.86 902.223 167.329"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/snowfall4.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "30000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "-98.2552 669.264 181.105"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/snowfall1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "30000"; + type = "EffectAudioType"; + locked = "true"; + }; + new AudioEmitter() { + position = "46.3188 730.817 155.504"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/snowfall1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "30000"; + type = "EffectAudioType"; + locked = "true"; + }; + }; + new AudioEmitter() { + position = "-86.0234 -626.579 135.239"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/moaningwind1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.5"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Tombstone.mis b/base/missions/Tombstone.mis new file mode 100644 index 0000000..e8d2f53 --- /dev/null +++ b/base/missions/Tombstone.mis @@ -0,0 +1,2188 @@ +// MissionTypes = CTF + +//--- MISSION QUOTE BEGIN --- +//Let me rest. O, my people, let me rest, for I have bled for you. +// -- Manfred Gregor yl-Harabec, last words, 3802 CE +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[CTF]5 flag captures to win +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + cdTrack = "6"; + CTF_scoreLimit = "5"; + powerCount = "0"; + musicTrack = "desert"; + + new MissionArea(MissionArea) { + area = "-640 -576 1248 1280"; + flightCeiling = "2000"; + flightCeilingRange = "50"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.700000 0.700000 0.700000 1.000000"; + ambient = "0.500000 0.500000 0.500000 1.000000"; + locked = "true"; + position = "-980 -793 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/desertdet1"; + terrainFile = "Tombstone.ter"; + squareSize = "8"; + emptySquares = "346704 346960 347216 347472 347728 287641 305735 374682 374938 375194 375450 375706"; + locked = "true"; + position = "-1024 -1024 0"; + hazeDistance = "250"; + visibleDistance = "1200"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "45"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + locked = "true"; + conjoinBowlDev = "20"; + coverage = "0"; + position = "0 0 0 1"; + XDimOverSize = "0"; + rotation = "0 0 0 0"; + YDimOverSize = "0"; + scale = "1 1 1"; + GraphFile = "Tombstone.nav"; + }; + new Sky(Sky) { + position = "0 0 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "400"; + useSkyTextures = "0"; + SkySolidColor = "0.690000 0.620000 0.550000 0.000000"; + fogDistance = "75"; + fogColor = "0.590000 0.520000 0.450000 1.000000"; + fogVolume1 = "400 300 325"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "sky_desert_blue.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 -1734829824.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 -1734829824.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 -1734829824.000000"; + locked = "true"; + cloudSpeed0 = "0.000050 0.000050"; + }; + new SimGroup(ObserverDropPoints) { + }; + new SimGroup(Environmental) { + + new InteriorInstance() { + position = "-7.65 -2.9369 53.7824"; + rotation = "0 0 -1 15.4698"; + scale = "1 1 1"; + interiorFile = "ptowr2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + + new SimGroup(Team1) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-466.784 345.534 183.969"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "50"; + indoorWeight = "25"; + outdoorWeight = "75"; + locked = "true"; + }; + new SpawnSphere() { + position = "-340.45 -410.932 161.956"; + rotation = "0 0 -1 50.4203"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "60"; + sphereWeight = "50"; + indoorWeight = "40"; + outdoorWeight = "60"; + locked = "true"; + }; + }; + new SimGroup(Base0) { + + new InteriorInstance() { + position = "-453.121 340.533 179.776"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + interiorFile = "pbunk1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "-450.816 340.977 169.772"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "InteriorFlagStand"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-363.986 -401.484 155.401"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "pbunk3.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new WayPoint() { + position = "-363.986 -401.484 155.401"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Main Base"; + team = "0"; + locked = "true"; + }; + new StaticShape(Team1GeneratorLarge1) { + position = "-373.589 -423.221 129.438"; + rotation = "0 0 1 180.091"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1GeneratorLarge2) { + position = "-354.321 -423.404 129.444"; + rotation = "0 0 1 180.091"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory1) { + position = "-347.882 -474.997 147.45"; + rotation = "0 0 1 180.091"; + scale = "1 1 1"; + nameTag = "Main Base Upper"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory2) { + position = "-347.655 -475.114 141.418"; + rotation = "0 0 1 180.664"; + scale = "1 1 1"; + nameTag = "Main Base Center"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1StationInventory3) { + position = "-347.673 -475.076 135.39"; + rotation = "0 0 1 180.091"; + scale = "1 1 1"; + nameTag = "Main Base Lower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item() { + position = "-370.789 -411.751 189.585"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Turret() { + position = "-370.433 -388.478 163.2"; + rotation = "-0.580854 0.581317 0.569806 239.389"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + }; + new Turret() { + position = "-357.82 -388.478 163.2"; + rotation = "-0.580854 0.581317 0.569806 239.389"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + }; + new StaticShape(Team1SensorMediumPulse1) { + position = "-450.586 340.067 219.751"; + rotation = "0 0 1 89.3814"; + scale = "1 1 1"; + nameTag = "Flag Base"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-381.407 283.977 205.245"; + rotation = "0 0 1 26.356"; + scale = "1 1 1"; + interiorFile = "pmisc1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Turret(Team1TurretBaseLarge1) { + position = "-379.246 288.422 216.234"; + rotation = "0 0 1 26.356"; + scale = "1 1 1"; + nameTag = "Flag Base Front"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "MissileBarrelLarge"; + locked = "true"; + }; + new InteriorInstance() { + position = "-505.373 382.062 191.791"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + interiorFile = "pmisc1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Turret(Team1TurretBaseLarge2) { + position = "-500.73 382.101 202.754"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + nameTag = "Flag Base Rear"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new Item(Team1Flag1) { + position = "-450.736 341.002 170.055"; + rotation = "0 0 -1 87.0896"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + locked = "true"; + }; + }; + new SimGroup(AIObjectives) { + + new AIObjective(AIODefendLocation) { + position = "-448.962 345.821 169.969"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend our flag"; + targetObject = "Team1Flag1"; + targetClientId = "-1"; + targetObjectId = "3308"; + location = "-448.962 345.821 169.969"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "MediumShieldSet LightShieldSet HeavyShieldSet"; + chat = "ChatSelfDefendFlag DefendBase"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + gameType = "All"; + }; + new AIObjective(AIOAttackPlayer) { + position = "-450.824 341.037 169.746"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Kill the enemy flag carrier"; + mode = "FlagCarrier"; + targetObject = "Team1Flag1"; + targetClientId = "-1"; + targetObjectId = "3308"; + location = "-450.824 341.037 169.746"; + weightLevel1 = "4800"; + weightLevel2 = "3000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergySniper"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + gameType = "All"; + }; + new AIObjective(AIOTouchObject) { + position = "-450.824 341.037 169.746"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Return our flag"; + mode = "FlagDropped"; + targetObject = "Team1Flag1"; + targetClientId = "-1"; + targetObjectId = "3308"; + location = "-450.824 341.037 169.746"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + gameType = "All"; + }; + new SimGroup(RepairGroup1) { + + new AIObjective(AIORepairObject) { + position = "-374.229 -423.221 129.438"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generator"; + targetObject = "Team1GeneratorLarge1"; + targetClientId = "-1"; + targetObjectId = "3292"; + location = "-374.229 -423.221 129.438"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "HeavyRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3313"; + gameType = "All"; + }; + new AIObjective(AIORepairObject) { + position = "-354.961 -423.404 129.444"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generator"; + targetObject = "Team1GeneratorLarge2"; + targetClientId = "-1"; + targetObjectId = "3293"; + location = "-354.961 -423.404 129.444"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "HeavyRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3313"; + gameType = "All"; + }; + new AIObjective(AIORepairObject) { + position = "-348.523 -475.597 147.503"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team1StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3294"; + location = "-348.523 -475.597 147.503"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3313"; + gameType = "All"; + }; + new AIObjective(AIORepairObject) { + position = "-348.3 -475.514 141.818"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team1StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3296"; + location = "-348.3 -475.514 141.818"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3313"; + gameType = "All"; + }; + new AIObjective(AIORepairObject) { + position = "-348.239 -475.61 135.59"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team1StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3298"; + location = "-348.239 -475.61 135.59"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3313"; + gameType = "All"; + }; + }; + new SimGroup(DefendGroup1) { + + new AIObjective(AIODefendLocation) { + position = "-354.965 -422.083 130.949"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generator"; + targetObject = "Team1GeneratorLarge2"; + targetClientId = "-1"; + targetObjectId = "3293"; + location = "-354.965 -422.083 130.949"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "RepairPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3319"; + gameType = "All"; + }; + new AIObjective(AIODefendLocation) { + position = "-374.233 -421.9 130.943"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generator"; + targetObject = "Team1GeneratorLarge1"; + targetClientId = "-1"; + targetObjectId = "3292"; + location = "-374.233 -421.9 130.943"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "RepairPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3319"; + gameType = "All"; + }; + new AIObjective(AIODeployEquipment) { + position = "-371.584 -435.195 132.854"; + rotation = "0 0 1 189.076"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-371.584 -435.195 132.854"; + weightLevel1 = "3500"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + group = "3319"; + }; + }; + new SimGroup(RepairGroup2) { + + new AIObjective(AIORepairObject) { + position = "-450.586 340.067 219.751"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the Sensor"; + targetObject = "Team1SensorMediumPulse1"; + targetClientId = "-1"; + targetObjectId = "3303"; + location = "-450.586 340.067 219.751"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3323"; + gameType = "All"; + }; + new AIObjective(AIORepairObject) { + position = "-379.246 288.422 216.724"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the turret"; + targetObject = "Team1TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3305"; + location = "-379.246 288.422 216.724"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3323"; + gameType = "All"; + }; + new AIObjective(AIORepairObject) { + position = "-500.73 382.101 203.291"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the turret"; + targetObject = "Team1TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3307"; + location = "-500.73 382.101 203.291"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3323"; + gameType = "All"; + }; + }; + new AIObjective(AIOTouchObject) { + position = "230.744 -227.148 151.072"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the enemy flag"; + mode = "FlagGrab"; + targetObject = "Team2Flag1"; + targetClientId = "-1"; + targetObjectId = "3352"; + location = "230.744 -227.148 151.072"; + weightLevel1 = "3850"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + gameType = "All"; + }; + new AIObjective(AIOTouchObject) { + position = "230.744 -227.148 151.072"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the flag!"; + mode = "FlagCapture"; + targetObject = "Team2Flag1"; + targetClientId = "-1"; + targetObjectId = "3352"; + location = "230.744 -227.148 151.072"; + weightLevel1 = "5000"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + gameType = "All"; + }; + new AIObjective(AIOTouchObject) { + position = "230.744 -227.148 151.072"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the dropped enemy flag"; + mode = "FlagDropped"; + targetObject = "Team2Flag1"; + targetClientId = "-1"; + targetObjectId = "3352"; + location = "230.744 -227.148 151.072"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + gameType = "All"; + }; + new SimGroup(AttackGroup) { + + new AIObjective(AIOAttackObject) { + position = "218.526 475.962 151.463"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy generator"; + targetObject = "Team2GeneratorLarge1"; + targetClientId = "-1"; + targetObjectId = "3358"; + location = "218.526 475.962 151.463"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "MediumShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3330"; + gameType = "All"; + }; + new AIObjective(AIOAttackObject) { + position = "237.794 475.749 151.457"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy generator"; + targetObject = "Team2GeneratorLarge2"; + targetClientId = "-1"; + targetObjectId = "3359"; + location = "237.794 475.749 151.457"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "MediumShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3330"; + gameType = "All"; + }; + new AIObjective(AIOAttackObject) { + position = "210.72 526.044 158.053"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy inventory station"; + targetObject = "Team2StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3365"; + location = "210.72 526.044 158.053"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "MediumShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + group = "3330"; + gameType = "All"; + }; + new AIObjective(AIOAttackObject) { + position = "0 0 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy inventory station"; + targetObject = "Team3StationInventory1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "0 0 0"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "MediumShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + group = "3330"; + gameType = "All"; + }; + new AIObjective(AIOAttackObject) { + position = "0 0 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy inventory station"; + targetObject = "Team4StationInventory1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "0 0 0"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + buyEquipmentSet = "MediumShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + group = "3330"; + gameType = "All"; + }; + }; + new SimGroup(MortarObjectGroup) { + + new AIObjective(AIOMortarObject) { + position = "289.413 -148.675 202.069"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the enemy turret"; + targetObject = "Team2TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3362"; + location = "289.413 -148.675 202.069"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3336"; + gameType = "All"; + }; + new AIObjective(AIOMortarObject) { + position = "139.131 -297.241 191.431"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the enemy turret"; + targetObject = "Team2TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3364"; + location = "139.131 -297.241 191.431"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3336"; + gameType = "All"; + }; + new AIObjective(AIOMortarObject) { + position = "228.64 -226.654 201.286"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the enemy Sensor"; + targetObject = "Team2SensorMediumPulse1"; + targetClientId = "-1"; + targetObjectId = "3351"; + location = "228.64 -226.654 201.286"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3336"; + gameType = "All"; + }; + }; + new SimGroup(DeployTurretGroup) { + + new AIObjective(AIODeployEquipment) { + position = "-456.995 340.007 180.933"; + rotation = "0 0 1 90.0913"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy inventory near the flag."; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-456.995 340.007 180.933"; + weightLevel1 = "3100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "InventoryDeployable"; + buyEquipmentSet = "MediumInventorySet"; + chat = "ChatTaskSetupRemote"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "3"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3340"; + gameType = "All"; + }; + new AIObjective(AIODeployEquipment) { + position = "-441.144 350.771 179.59"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy an outdoor turret."; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-441.144 350.771 179.59"; + weightLevel1 = "3000"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + group = "3340"; + gameType = "All"; + }; + new AIObjective(AIODeployEquipment) { + position = "-454.961 335.702 171.965"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor turret at the flag."; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-454.961 335.702 171.965"; + weightLevel1 = "3000"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "0"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + group = "3340"; + gameType = "All"; + }; + }; + }; + }; + new SimGroup(Team2) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "216.361 -243.583 170.356"; + rotation = "0 0 1 214.469"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "50"; + indoorWeight = "20"; + outdoorWeight = "80"; + locked = "true"; + }; + new SpawnSphere() { + position = "204.478 427.721 181.059"; + rotation = "0 0 1 136.364"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "60"; + sphereWeight = "50"; + indoorWeight = "40"; + outdoorWeight = "60"; + locked = "true"; + }; + }; + new SimGroup(Base1) { + + new InteriorInstance() { + position = "293.929 -150.358 190.876"; + rotation = "0 0 -1 69.9008"; + scale = "1 1 1"; + interiorFile = "pmisc1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape() { + position = "230.739 -227.177 151.094"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "InteriorFlagStand"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2SensorMediumPulse1) { + position = "230.263 -226.937 201.042"; + rotation = "0 0 -1 90.5273"; + scale = "1 1 1"; + nameTag = "Flag Base"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Item(Team2Flag1) { + position = "230.744 -227.148 151.486"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + dataBlock = "Flag"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "0"; + rotate = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "233.041 -226.648 161.102"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pbunk1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Turret() { + position = "221.813 436.197 185.219"; + rotation = "0.581478 0.58009 -0.570421 239.285"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + }; + new Turret() { + position = "234.422 436.192 185.219"; + rotation = "0.581478 0.58009 -0.570421 239.285"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + locked = "true"; + }; + new Item() { + position = "234.816 459.483 211.604"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new StaticShape(Team2GeneratorLarge1) { + position = "218.366 471.162 151.463"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2GeneratorLarge2) { + position = "237.634 470.949 151.457"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Main Base"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "227.997 449.227 177.42"; + rotation = "-0 0 -1 89.9544"; + scale = "1 1 1"; + interiorFile = "pbunk3.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new WayPoint() { + position = "227.997 449.227 177.42"; + rotation = "0 0 -1 9.74027"; + scale = "0.1 0.1 0.1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Main Base"; + team = "0"; + locked = "true"; + }; + new Turret(Team2TurretBaseLarge1) { + position = "289.413 -148.675 201.864"; + rotation = "0 0 -1 69.3279"; + scale = "1 1 1"; + nameTag = "Flag Base Front"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "MissileBarrelLarge"; + locked = "true"; + }; + new InteriorInstance() { + position = "135.208 -300.208 180.441"; + rotation = "0 0 1 53.2851"; + scale = "1 1 1"; + interiorFile = "pmisc1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Turret(Team2TurretBaseLarge2) { + position = "139.131 -297.241 191.431"; + rotation = "0 0 1 53.2851"; + scale = "1 1 1"; + nameTag = "Flag Base Rear"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + locked = "true"; + }; + new StaticShape(Team2StationInventory1) { + position = "210.56 521.244 157.416"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Main Base Lower"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory2) { + position = "210.536 522.388 163.398"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Main Base Center"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team2StationInventory3) { + position = "210.495 522.654 169.385"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Main Base Upper"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(AIObjectives) { + + new AIObjective(AIOTouchObject) { + position = "-450.824 341.037 169.746"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the enemy flag"; + mode = "FlagGrab"; + targetObject = "Team1Flag1"; + targetClientId = "-1"; + targetObjectId = "3308"; + location = "-450.824 341.037 169.746"; + weightLevel1 = "3850"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + gameType = "All"; + }; + new AIObjective(AIOTouchObject) { + position = "-450.824 341.037 169.746"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the flag!"; + mode = "FlagCapture"; + targetObject = "Team1Flag1"; + targetClientId = "-1"; + targetObjectId = "3308"; + location = "-450.824 341.037 169.746"; + weightLevel1 = "5000"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + gameType = "All"; + }; + new AIObjective(AIOTouchObject) { + position = "-450.824 341.037 169.746"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Grab the dropped enemy flag"; + mode = "FlagDropped"; + targetObject = "Team1Flag1"; + targetClientId = "-1"; + targetObjectId = "3308"; + location = "-450.824 341.037 169.746"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + gameType = "All"; + }; + new SimGroup(AttackGroup) { + + new AIObjective(AIOAttackObject) { + position = "-374.229 -423.221 129.438"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy generator"; + targetObject = "Team1GeneratorLarge1"; + targetClientId = "-1"; + targetObjectId = "3292"; + location = "-374.229 -423.221 129.438"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "MediumShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3375"; + gameType = "All"; + }; + new AIObjective(AIOAttackObject) { + position = "-354.961 -423.404 129.444"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy generator"; + targetObject = "Team1GeneratorLarge2"; + targetClientId = "-1"; + targetObjectId = "3293"; + location = "-354.961 -423.404 129.444"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "MediumShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3375"; + gameType = "All"; + }; + new AIObjective(AIOAttackObject) { + position = "-348.523 -475.597 147.503"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy inventory"; + targetObject = "Team1StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3294"; + location = "-348.523 -475.597 147.503"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3375"; + gameType = "All"; + }; + new AIObjective(AIOAttackObject) { + position = "-348.3 -475.514 141.818"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy inventory"; + targetObject = "Team1StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3296"; + location = "-348.3 -475.514 141.818"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3375"; + gameType = "All"; + }; + new AIObjective(AIOAttackObject) { + position = "-348.239 -475.61 135.59"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the enemy inventory"; + targetObject = "Team1StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3298"; + location = "-348.239 -475.61 135.59"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3375"; + gameType = "All"; + }; + }; + new SimGroup(MortarGroup) { + + new AIObjective(AIOMortarObject) { + position = "-450.586 340.067 219.751"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the enemy Sensor"; + targetObject = "Team1SensorMediumPulse1"; + targetClientId = "-1"; + targetObjectId = "3303"; + location = "-450.586 340.067 219.751"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3381"; + gameType = "All"; + }; + new AIObjective(AIOMortarObject) { + position = "-379.246 288.422 216.724"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the enemy turret"; + targetObject = "Team1TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3305"; + location = "-379.246 288.422 216.724"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3381"; + gameType = "All"; + }; + new AIObjective(AIOMortarObject) { + position = "-500.73 382.101 203.291"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the enemy turret"; + targetObject = "Team1TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3307"; + location = "-500.73 382.101 203.291"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3381"; + gameType = "All"; + }; + }; + new SimGroup(RepairGroup1) { + + new AIObjective(AIORepairObject) { + position = "228.64 -226.654 201.286"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the Sensor"; + targetObject = "Team2SensorMediumPulse1"; + targetClientId = "-1"; + targetObjectId = "3351"; + location = "228.64 -226.654 201.286"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3385"; + gameType = "All"; + }; + new AIObjective(AIORepairObject) { + position = "289.413 -148.675 202.069"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the turret"; + targetObject = "Team2TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3362"; + location = "289.413 -148.675 202.069"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3385"; + gameType = "All"; + }; + new AIObjective(AIORepairObject) { + position = "139.131 -297.241 192.231"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the turret"; + targetObject = "Team2TurretBaseLarge2"; + targetClientId = "-1"; + targetObjectId = "3364"; + location = "139.131 -297.241 192.231"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "LightRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3385"; + gameType = "All"; + }; + }; + new AIObjective(AIODefendLocation) { + position = "230.744 -227.148 151.072"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend our flag"; + targetObject = "Team2Flag1"; + targetClientId = "-1"; + targetObjectId = "3352"; + location = "230.744 -227.148 151.072"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "MediumShieldSet LightShieldSet HeavyShieldSet"; + chat = "ChatSelfDefendFlag DefendBase"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + gameType = "All"; + }; + new AIObjective(AIOAttackPlayer) { + position = "230.744 -227.148 151.072"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Kill the enemy flag carrier"; + mode = "FlagCarrier"; + targetObject = "Team2Flag1"; + targetClientId = "-1"; + targetObjectId = "3352"; + location = "230.744 -227.148 151.072"; + weightLevel1 = "4800"; + weightLevel2 = "3000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergySniper"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + gameType = "All"; + }; + new AIObjective(AIOTouchObject) { + position = "230.744 -227.148 151.072"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Return our flag"; + mode = "FlagDropped"; + targetObject = "Team2Flag1"; + targetClientId = "-1"; + targetObjectId = "3352"; + location = "230.744 -227.148 151.072"; + weightLevel1 = "5001"; + weightLevel2 = "4100"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "1"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + gameType = "All"; + }; + new SimGroup(RepairGroup2) { + + new AIObjective(AIORepairObject) { + position = "218.526 475.962 151.463"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generator"; + targetObject = "Team2GeneratorLarge1"; + targetClientId = "-1"; + targetObjectId = "3358"; + location = "218.526 475.962 151.463"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3392"; + gameType = "All"; + }; + new AIObjective(AIORepairObject) { + position = "237.794 475.749 151.457"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the generator"; + targetObject = "Team2GeneratorLarge2"; + targetClientId = "-1"; + targetObjectId = "3359"; + location = "237.794 475.749 151.457"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3392"; + gameType = "All"; + }; + new AIObjective(AIORepairObject) { + position = "210.72 526.044 158.053"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team2StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3365"; + location = "210.72 526.044 158.053"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3392"; + gameType = "All"; + }; + new AIObjective(AIORepairObject) { + position = "210.696 527.188 163.899"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team2StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3367"; + location = "210.696 527.188 163.899"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3392"; + gameType = "All"; + }; + new AIObjective(AIORepairObject) { + position = "210.655 527.454 170.041"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the inventory station"; + targetObject = "Team2StationInventory3"; + targetClientId = "-1"; + targetObjectId = "3369"; + location = "210.655 527.454 170.041"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3392"; + gameType = "All"; + }; + }; + new SimGroup(DefendGroup) { + + new AIObjective(AIODefendLocation) { + position = "218.528 474.641 152.968"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generator"; + targetObject = "Team2GeneratorLarge1"; + targetClientId = "-1"; + targetObjectId = "3358"; + location = "218.528 474.641 152.968"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "RepairPack Plasma PlasmaAmmo"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3398"; + gameType = "All"; + }; + new AIObjective(AIODefendLocation) { + position = "237.796 474.428 152.962"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the generator"; + targetObject = "Team2GeneratorLarge2"; + targetClientId = "-1"; + targetObjectId = "3359"; + location = "237.796 474.428 152.962"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "RepairPack Plasma PlasmaAmmo"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + radius = "0"; + group = "3398"; + gameType = "All"; + }; + }; + new SimGroup(DeployGroup) { + + new AIObjective(AIODeployEquipment) { + position = "207.759 -226.696 162.69"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy an inventory station near the flag."; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "207.759 -226.696 162.69"; + weightLevel1 = "3100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "InventoryDeployable"; + buyEquipmentSet = "MediumInventorySet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + group = "3401"; + gameType = "All"; + }; + new AIObjective(AIODeployEquipment) { + position = "216.424 -216.406 160.581"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy a turret near the flag"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "216.424 -216.406 160.581"; + weightLevel1 = "3000"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + group = "3401"; + gameType = "All"; + }; + new AIObjective(AIODeployEquipment) { + position = "234.747 -221.818 153.325"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy an indoor turret near the flag."; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "234.747 -221.818 153.325"; + weightLevel1 = "3000"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "1"; + issuingClientId = "-1"; + group = "3401"; + gameType = "all"; + }; + }; + }; + }; + new SimGroup(team0) { + }; + }; + new Camera() { + position = "231.273 -186.079 195.577"; + rotation = "0 0 1 196.134"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-466.119 399.062 213.772"; + rotation = "0 0 1 154.126"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new AudioEmitter() { + position = "29.6484 -76.2233 99.9808"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/sandstorm2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Training1.mis b/base/missions/Training1.mis new file mode 100644 index 0000000..91006d6 --- /dev/null +++ b/base/missions/Training1.mis @@ -0,0 +1,2761 @@ +// MissionTypes = SinglePlayer +// DisplayName = Newblood + +//--- MISSION BRIEFING BEGIN --- +//Alright, newblood. I'm Strike Colonel Akanruth. Here's the situation: After six years of bloody effort, we've finally got the BioDerms on the ropes, but we're all exhausted. Manpower is short. That's why we're calling up inexperienced warriors like you. +// +//Your first mission should be easy enough. Scan for Derm activity over the Hanakush Lowlands. Your code name's Lone Wolf. +// +//You shouldn't hit any combat in this mission, so you'll go out in Scout gear. Charybdis was a Blood Eagle world before the Derms got here. If you run across any B-E, keep it civil. Remember, the enemy of my enemy is my friend. +// +//Lieutenant Kenzie will coordinate your movements over your Command Circuit. Follow her instructions. She's a veteran who knows her stuff. +// +//This region of Charybdis has a lush climate. Keep the bugs out of your armor if you can. +// +//That's it. Dismissed. +//--- MISSION BRIEFING END --- + +// BriefingWAV = T1 6 +// Bitmap = trn_1charybdis + +//--- MISSION STRING BEGIN --- +//OBJECTIVES: +//Use bomber to survey enemy territory +//Obey Lieutenant Kenzie's orders +//TRAINING: +//Heads Up Display +//Basic combat and vehicle use +//Practice jetting and skiing +//--- MISSION STRING END --- + +// PlanetName = Charybdis, 3947 CE + +//--- MISSION BLURB BEGIN --- +//In 3941, the BioDerm Hordes crushed the Starwolf tribe at the star system of Ymir. Six years later, the tribal alliance called the Pact begins a crucial offensive. You are of the Pact, a Starwolf newblood. Remember Ymir. Avenge your people. +//--- MISSION BLURB END --- + + +//scriptlet +//we have to jump through a lot of hoops to get those dead bodies in training1 +function deadArmor::onAdd(%this, %obj) +{ + %skin = (%obj.trainingSkin == 1 ? 'swolf' : 'beagle'); + //echo("skin = " SPC %skin); + createTarget(%obj, 'Dead Body', %skin, "", 'deadArmor', 0); +} + +function deadArmor::onRemove(%this, %obj) +{ + //echo("singleplayerGame -- deadArmor::onRemove"); + freeTarget(%obj.getTarget()); +} + + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + powerCount = "0"; + + new MissionArea(MissionArea) { + area = "-448 -1408 2304 2208"; + flightCeiling = "2000"; + flightCeilingRange = "50"; + }; + new Sky(Sky) { + position = "0 0 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "400"; + useSkyTextures = "1"; + SkySolidColor = "0.390000 0.390000 0.390000 1.000000"; + fogDistance = "100"; + fogColor = "0.500000 0.500000 0.500000 1.000000"; + fogVolume1 = "0 0 0"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "Lush_l4.dml"; + windVelocity = "0 0 0"; + windEffectPrecipitation = "0"; + cloudSpeed0 = "0.000000 0.000000"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.600000 0.600000 0.600000 1.000000"; + ambient = "0.600000 0.600000 0.600000 1.000000"; + scale = "1 1 1"; + position = "0 0 0"; + rotation = "1 0 0 0"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/lushdet1"; + terrainFile = "Training1.ter"; + squareSize = "8"; + position = "-1024 -1024 0"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "50"; + cullDensity = "0.1"; + customArea = "0 0 0 0"; + conjoinBowlDev = "20"; + scale = "1 1 1"; + GraphFile = "Training1.nav"; + position = "0 0 0 1"; + coverage = "0"; + rotation = "0 0 0 0"; + }; + new Camera(hoverBikeDP) { + position = "629.407 -58.6929 124.08"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new SimGroup(Teams) { + + new SimGroup(Team2) { + + new SimGroup(DropPoints) { + + new Camera(enemy0) { + position = "472.802 349.922 204.888"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + SkillLevel = "0"; + }; + new Camera(enemy1) { + position = "551.142 790.21 107.5"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + SkillLevel = "0"; + }; + new Camera(enemy2) { + position = "738.109 5.1693 152.475"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + SkillLevel = "0"; + }; + new Camera(enemy3) { + position = "988.221 -326.252 86.2044"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + SkillLevel = "0"; + }; + new Camera(enemy4) { + position = "917.043 -476.293 102.216"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + SkillLevel = "0"; + }; + new Camera(enemy5) { + position = "977.56 -584.56 107.011"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + SkillLevel = "0"; + }; + new Camera(enemy6) { + position = "980.365 -777.838 97.7195"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + SkillLevel = "0"; + }; + new Camera(enemy7) { + position = "472.356 345.155 200.883"; + rotation = "0 0 -1 75.6304"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + SkillLevel = "0"; + }; + new Camera(enemy8) { + position = "564.903 791.638 107.929"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera(enemy9) { + position = "589.296 806.741 111.858"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera(enemy10) { + position = "575.32 -29.8525 138.276"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera(enemy11) { + position = "827.178 406.124 195.466"; + rotation = "0 0 1 183.919"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera(enemy12) { + position = "-721.719 296.493 83.3617"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera(enemy13) { + position = "882.259 49.6576 147.146"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + }; + }; + new SimGroup(Team1) { + providesPower = "1"; + + new SimGroup(DropPoints) { + + new Camera() { + position = "1301.77 -832.202 88.3109"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "1255.36 -826.299 79.1645"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera(DP) { + position = "-262.22 528.825 148.641"; + rotation = "0 0 1 174.696"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new SimGroup(Respawns) { + + new Camera() { + position = "-311.987 532.198 155.274"; + rotation = "0 0 1 150.115"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "-293.826 391.612 75.1421"; + rotation = "0 0 1 96.2569"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "483.448 364.206 225.265"; + rotation = "0 0 1 178.763"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "635.748 -42.3523 127.123"; + rotation = "0 0 1 183.346"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + }; + }; + new StaticShape(Team1SensorLargePulse1) { + position = "476.731 363.919 232.695"; + rotation = "0 0 1 94.538"; + scale = "1 1 1"; + dataBlock = "SensorLargePulse"; + lockCount = "0"; + homingCount = "0"; + }; + new InteriorInstance(Tower) { + position = "478.373 363.933 210.21"; + rotation = "0 0 -1 90.137"; + scale = "1 1 1"; + interiorFile = "btowr2.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_1"; + threshold2 = "60"; + threshold1 = "330"; + }; + }; + new SimGroup(team0) { + }; + }; + new SimGroup(RandomRocks) { + + new SimGroup(Addition2brock6) { + + new InteriorInstance() { + position = "-211.225 415.883 78.0187"; + rotation = "0.0859163 -0.728135 0.680028 92.551"; + scale = "0.5 0.5 0.5"; + interiorFile = "brock6.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "-247.225 413.883 69.4588"; + rotation = "0.0903608 -0.723175 0.684728 92.9544"; + scale = "1.5 1.5 1.5"; + interiorFile = "brock6.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "-249.142 384.741 73.6875"; + rotation = "0.999508 0.0207068 0.0235741 82.6183"; + scale = "1.5 1.5 1.5"; + interiorFile = "brock6.dif"; + showTerrainInside = "0"; + }; + }; + new SimGroup(Addition3brock6) { + + new InteriorInstance() { + position = "-361.859 580.372 133.844"; + rotation = "0.0749949 -0.739978 0.668437 91.5936"; + scale = "0.5 0.5 0.5"; + interiorFile = "brock6.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "-327.859 553.372 138.108"; + rotation = "0 0 1 3.17638"; + scale = "0.5 0.5 0.5"; + interiorFile = "brock6.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "-338.859 543.372 141.73"; + rotation = "0 0 1 6.1087"; + scale = "0.5 0.5 0.5"; + interiorFile = "brock6.dif"; + showTerrainInside = "0"; + }; + }; + new SimGroup(Addition4brock6) { + + new InteriorInstance() { + position = "614.302 -90.5742 134.156"; + rotation = "0.999363 0.00750352 -0.0349017 194.321"; + scale = "0.5 0.5 0.5"; + interiorFile = "brock6.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "623.302 -78.5742 127.591"; + rotation = "0.985035 0.145617 0.0922095 182.429"; + scale = "0.5 0.5 0.5"; + interiorFile = "brock6.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "621.302 -52.5742 122.494"; + rotation = "0.496802 0.867682 0.0177913 176.44"; + scale = "0.5 0.5 0.5"; + interiorFile = "brock6.dif"; + showTerrainInside = "0"; + }; + }; + new SimGroup(Addition5brock6) { + + new InteriorInstance() { + position = "854.237 -299.5 51.5671"; + rotation = "0.990727 0.0989551 0.0930998 181.927"; + scale = "1.5 1.5 1.5"; + interiorFile = "brock6.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "844.237 -312.5 50.7056"; + rotation = "0 0 1 5.44537"; + scale = "0.5 0.5 0.5"; + interiorFile = "brock6.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "855.237 -281.5 51.8106"; + rotation = "0 0 1 1.30923"; + scale = "1.5 1.5 1.5"; + interiorFile = "brock6.dif"; + showTerrainInside = "0"; + }; + }; + }; + new SimGroup(Goodies) { + + new Item() { + position = "474.634 364.471 216.897"; + rotation = "0 0 1 94.538"; + scale = "1 1 1"; + dataBlock = "SniperRifle"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + new Item() { + position = "-289.395 388.467 76.2374"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + new Item() { + position = "479.087 360.808 224.938"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + new Item() { + position = "475.639 368.891 224.967"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + new Item() { + position = "475.428 360.075 205.496"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "EnergyPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + new Item() { + position = "-284.144 392.475 76.8"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + new Item() { + position = "-289.826 398.197 76.5"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + new Item() { + position = "473.838 358.562 224.84"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ChaingunAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + new Item() { + position = "480.085 363.933 224.88"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ChaingunAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + new Item() { + position = "474.75 368.018 205.334"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "DiscAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + new Item() { + position = "478.415 368.123 205.334"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "DiscAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + new Item() { + position = "-307.816 375.393 71.9373"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ChaingunAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + new Item() { + position = "-310.012 376.784 72.4285"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "DiscAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + new Item() { + position = "-298.878 367.65 72.8"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ChaingunAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + }; + new SimGroup(RandomOrganics) { + + new SimGroup(Addition1BEPlant1) { + + new TSStatic() { + position = "12 44 103.084"; + rotation = "0.187078 -0.299834 -0.935469 91.8214"; + scale = "0.9 0.9 0.9"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "12 28 112.272"; + rotation = "0.673747 -0.00405274 0.738951 46.2144"; + scale = "0.7 0.7 0.7"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "-12 -60 115.006"; + rotation = "0.222631 0.00381878 0.974895 201.461"; + scale = "1.4 1.4 1.4"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "-44 -12 158.381"; + rotation = "0.296084 -0.0550443 0.953575 213.468"; + scale = "1 1 1"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "44 20 116.163"; + rotation = "0.0927419 0.0384151 -0.994949 45.2054"; + scale = "2 2 2"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "12 -12 110.944"; + rotation = "-0.125633 -0.322398 0.93823 94.648"; + scale = "0.5 0.5 0.5"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "52 4 115.459"; + rotation = "-0.325118 -0.266284 0.907409 15.4122"; + scale = "0.5 0.5 0.5"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "28 -36 103.991"; + rotation = "-0.104028 -0.1201 0.987296 217.551"; + scale = "0.7 0.7 0.7"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "-60 -12 164.709"; + rotation = "0.0580189 -0.15164 0.986732 104.741"; + scale = "1 1 1"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "-28 -60 120.725"; + rotation = "0.0577292 -0.221813 0.973379 141.962"; + scale = "0.5 0.5 0.5"; + shapeName = "borg1.dts"; + }; + }; + new SimGroup(Addition2BEPlant1) { + + new TSStatic() { + position = "-212 388 75.4125"; + rotation = "-0.206499 0.0467321 0.97733 186.842"; + scale = "0.5 0.5 0.5"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "-212 444 88.4125"; + rotation = "-0.574363 0.322049 0.75259 32.8274"; + scale = "0.7 0.7 0.7"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "-252 388 73.9906"; + rotation = "0.148682 -0.256464 -0.95505 66.3921"; + scale = "0.8 0.8 0.8"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "-276 356 78.7875"; + rotation = "-0.140865 0.079089 0.986865 160.257"; + scale = "0.5 0.5 0.5"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "-252 436 77.725"; + rotation = "0.166724 -0.218018 0.961598 224.408"; + scale = "0.5 0.5 0.5"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "-292 372 74.2094"; + rotation = "-0.207835 0.156096 0.965629 73.9162"; + scale = "1 1 1"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "-228 436 80.4438"; + rotation = "-0.287258 0.463175 -0.838422 54.8233"; + scale = "1.5 1.5 1.5"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "-196 356 91.7093"; + rotation = "0.201291 0.712453 0.67223 42.085"; + scale = "1.8 1.8 1.8"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "-212 420 79.5531"; + rotation = "-0.61971 0.490923 0.612335 36.7589"; + scale = "0.6 0.6 0.6"; + shapeName = "borg1.dts"; + }; + }; + new SimGroup(Addition3BELgTree16) { + + new TSStatic() { + position = "-316 268 55.3594"; + rotation = "0 0 1 97.9998"; + scale = "1.1 1.1 1.1"; + shapeName = "borg16.dts"; + }; + new TSStatic() { + position = "-276 236 66.9844"; + rotation = "0 0 1 183"; + scale = "0.9 0.9 0.9"; + shapeName = "borg16.dts"; + }; + new TSStatic() { + position = "-28 316 81.6407"; + rotation = "0 0 -1 38"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + }; + new TSStatic() { + position = "-412 364 69.0468"; + rotation = "0 0 1 79.9998"; + scale = "1.2 1.2 1.2"; + shapeName = "borg16.dts"; + }; + new TSStatic() { + position = "-148 244 78.6875"; + rotation = "0 0 1 116"; + scale = "1.3 1.3 1.3"; + shapeName = "borg16.dts"; + }; + new TSStatic() { + position = "-68 300 89.1407"; + rotation = "0 0 1 192"; + scale = "1.3 1.3 1.3"; + shapeName = "borg16.dts"; + }; + new TSStatic() { + position = "-236 540 147.953"; + rotation = "0 0 1 37"; + scale = "1.2 1.2 1.2"; + shapeName = "borg16.dts"; + }; + new TSStatic() { + position = "-92 292 91.3282"; + rotation = "0 0 1 67"; + scale = "1.3 1.3 1.3"; + shapeName = "borg16.dts"; + }; + new TSStatic() { + position = "-52 300 86.4375"; + rotation = "0 0 1 12"; + scale = "1.3 1.3 1.3"; + shapeName = "borg16.dts"; + }; + new TSStatic() { + position = "-76 260 95.8438"; + rotation = "0 0 1 9.00004"; + scale = "1.1 1.1 1.1"; + shapeName = "borg16.dts"; + }; + new TSStatic() { + position = "-276 364 74.8594"; + rotation = "0 0 1 231"; + scale = "1.5 1.5 1.5"; + shapeName = "borg16.dts"; + }; + new TSStatic() { + position = "-420 236 87.4531"; + rotation = "0 0 1 81.0002"; + scale = "1.2 1.2 1.2"; + shapeName = "borg16.dts"; + }; + new TSStatic() { + position = "-140 580 123.656"; + rotation = "0 0 -1 88"; + scale = "1 1 1"; + shapeName = "borg16.dts"; + }; + new TSStatic() { + position = "-292 572 141.844"; + rotation = "0 0 1 46"; + scale = "0.8 0.8 0.8"; + shapeName = "borg16.dts"; + }; + new TSStatic() { + position = "-140 540 112.297"; + rotation = "0 0 1 123"; + scale = "1.5 1.5 1.5"; + shapeName = "borg16.dts"; + }; + }; + new SimGroup(Addition1BESmTree17) { + + new TSStatic() { + position = "140 -228 165.828"; + rotation = "0.285418 0.403782 0.869193 24.074"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "-268 -100 140.031"; + rotation = "-0.0727138 0.0455015 0.996314 146.118"; + scale = "1.5 1.5 1.5"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "292 -172 96.375"; + rotation = "-0.437468 0.474769 -0.763686 29.8352"; + scale = "1.4 1.4 1.4"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "84 84 105.656"; + rotation = "-0.154012 -0.0638678 0.986003 239.303"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "-172 28 185.844"; + rotation = "0.13083 -0.102316 -0.986111 65.7286"; + scale = "0.9 0.9 0.9"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "-308 60 92.1562"; + rotation = "-0.6199 0.346496 0.704035 21.1836"; + scale = "1.5 1.5 1.5"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "-76 -4 162.375"; + rotation = "0.0636308 -0.172424 -0.982965 109.928"; + scale = "0.9 0.9 0.9"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "-356 12 77.4531"; + rotation = "-0.160854 0.0557614 0.985402 186.898"; + scale = "1.4 1.4 1.4"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "-124 228 82.5781"; + rotation = "0.00475492 0.193705 -0.981048 83.0869"; + scale = "1.3 1.3 1.3"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "364 -284 77.0157"; + rotation = "0.0643768 0.238911 -0.968905 59.5481"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "-340 20 82.375"; + rotation = "-0.0214268 0.428443 0.903315 30.8605"; + scale = "1.1 1.1 1.1"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "300 -116 111.453"; + rotation = "0.265667 0.740693 -0.617086 19.3317"; + scale = "1.1 1.1 1.1"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "324 -108 114.109"; + rotation = "0.0390719 0.0270788 0.998869 134.046"; + scale = "1.4 1.4 1.4"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "-388 -388 100.922"; + rotation = "0.278494 0.331909 0.901264 24.3416"; + scale = "1.1 1.1 1.1"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "348 -412 76.1093"; + rotation = "-0.0417168 0.0484254 0.997955 222.92"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "300 84 104.672"; + rotation = "-0.184826 -0.0124876 -0.982692 74.9641"; + scale = "1.5 1.5 1.5"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "-372 -548 99.172"; + rotation = "0.0555475 0.0330002 0.997911 229.908"; + scale = "1.1 1.1 1.1"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "-196 -508 110.563"; + rotation = "-0.142972 0.0412338 0.988867 214.634"; + scale = "1.5 1.5 1.5"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "340 236 165.906"; + rotation = "-0.0987353 0.15622 0.982775 86.9933"; + scale = "1.3 1.3 1.3"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "380 -308 77.75"; + rotation = "0.157783 -0.115876 0.980651 69.0414"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + }; + }; + new SimGroup(Addition2BELgTree18) { + + new TSStatic() { + position = "-308 364 65.6094"; + rotation = "0 0 -1 69.0002"; + scale = "1.3 1.3 1.3"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "-260 340 82.5312"; + rotation = "0 0 1 195"; + scale = "1.3 1.3 1.3"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "236 -60 105.828"; + rotation = "0 0 1 176"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "76 100 104.641"; + rotation = "0 0 -1 92.0004"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "260 -60 103.438"; + rotation = "0 0 -1 94"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "-244 276 65.7344"; + rotation = "0 0 1 6.00005"; + scale = "1.4 1.4 1.4"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "-36 -188 64.8282"; + rotation = "0 0 -1 120"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "188 380 84"; + rotation = "0 0 1 35"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "-364 300 58.6406"; + rotation = "0 0 1 215"; + scale = "1.3 1.3 1.3"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "-76 -300 120.156"; + rotation = "0 0 1 75.0002"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "84 28 111.031"; + rotation = "0 0 1 47"; + scale = "1.4 1.4 1.4"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "-276 244 65"; + rotation = "0 0 1 130"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "300 -244 97.797"; + rotation = "0 0 1 152"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "364 36 124.031"; + rotation = "0 0 1 218"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "-340 156 87.4531"; + rotation = "0 0 1 104"; + scale = "1.3 1.3 1.3"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "92 276 67.375"; + rotation = "0 0 1 39"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "-4 228 101.828"; + rotation = "0 0 -1 87.0002"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "92 340 71.3125"; + rotation = "0 0 1 76.9998"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "-300 276 58.1875"; + rotation = "0 0 1 57.9999"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "-188 452 92.2656"; + rotation = "0 0 -1 81.0002"; + scale = "1.4 1.4 1.4"; + shapeName = "borg18.dts"; + }; + }; + new SimGroup(Addition1BESmTree17) { + + new TSStatic() { + position = "500 -316 96.6875"; + rotation = "0.0189433 -0.0920088 0.995578 210.869"; + scale = "1.4 1.4 1.4"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "820 -412 60.8594"; + rotation = "0.151268 0.0290211 0.988067 97.6825"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "876 -276 51.7187"; + rotation = "-0.0767067 0.461516 -0.883809 20.3196"; + scale = "0.9 0.9 0.9"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "652 244 85.625"; + rotation = "0.307312 -0.398951 0.863943 32.1955"; + scale = "1.3 1.3 1.3"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "708 -276 72.7656"; + rotation = "0.265436 -0.176198 0.947891 59.6082"; + scale = "1.5 1.5 1.5"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "836 -308 47.8438"; + rotation = "0.0204826 -0.0196076 0.999598 140.015"; + scale = "1.4 1.4 1.4"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "604 4 141.703"; + rotation = "-0.107106 -0.00849662 0.994211 233.731"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "1172 -12 145.812"; + rotation = "-0.169217 0.00416148 0.98557 91.8325"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "1020 -204 127.797"; + rotation = "-0.0211118 0.743291 0.668635 20.8112"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "1108 44 107.75"; + rotation = "-0.0451934 0.160773 0.985956 44.5658"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "644 -348 115.234"; + rotation = "0.737692 0.0137925 -0.674997 20.6192"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "844 140 163.828"; + rotation = "-0.155668 -0.0493325 0.986577 83.7687"; + scale = "1.1 1.1 1.1"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "1092 76 116.188"; + rotation = "-0.140404 -0.0943009 -0.985593 74.8008"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "940 -180 84.4688"; + rotation = "-0.0699772 0.0254908 0.997223 103.155"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "596 76 133.891"; + rotation = "-0.145307 -0.0467364 0.988282 129.523"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "1036 188 136.187"; + rotation = "0.0143986 -0.126977 0.991801 89.4714"; + scale = "1.3 1.3 1.3"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "708 -60 140.547"; + rotation = "-0.214297 -0.107879 0.970793 63.5095"; + scale = "0.9 0.9 0.9"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "980 -316 79.7969"; + rotation = "-0.524424 0.50887 -0.682665 23.2662"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "532 52 118.094"; + rotation = "0.236918 0.0674468 -0.969186 70.6835"; + scale = "1.1 1.1 1.1"; + shapeName = "borg17.dts"; + }; + }; + new SimGroup(Addition2BELgTree18) { + + new TSStatic() { + position = "428 188 135.5"; + rotation = "0 0 1 49"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "844 -212 55.6563"; + rotation = "0 0 -1 82"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "588 292 116.109"; + rotation = "0 0 1 144"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "964 12 184.766"; + rotation = "0 0 1 134"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "844 -244 54.0469"; + rotation = "0 0 -1 16.9999"; + scale = "1.4 1.4 1.4"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "700 244 81.3907"; + rotation = "0 0 1 9.99989"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "1060 -220 118.953"; + rotation = "0 0 1 228"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "1204 316 61.4843"; + rotation = "0 0 1 177"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "1132 284 74.4219"; + rotation = "0 0 -1 23.9998"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "556 -12 129.312"; + rotation = "0 0 -1 111"; + scale = "1.3 1.3 1.3"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "412 -44 68.4531"; + rotation = "0 0 1 7.00001"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "860 292 155.844"; + rotation = "0 0 -1 10.9999"; + scale = "1.3 1.3 1.3"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "1036 -180 124.484"; + rotation = "0 0 1 88.9998"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "588 -52 129.75"; + rotation = "0 0 -1 67.0005"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "468 -372 66.0937"; + rotation = "0 0 1 128"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "860 116 166.922"; + rotation = "0 0 1 11"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "716 252 82.9531"; + rotation = "0 0 1 11"; + scale = "1.4 1.4 1.4"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "1180 -444 145.719"; + rotation = "0 0 1 4.99997"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "876 -380 52.9063"; + rotation = "0 0 1 46"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + }; + }; + new SimGroup(Addition3BEPlant5) { + + new TSStatic() { + position = "588 156 102.809"; + rotation = "-0.193563 0.0259592 0.980744 181.962"; + scale = "1 1 1"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "492 140 100.575"; + rotation = "0.146029 0.137793 0.979637 117.055"; + scale = "1.5 1.5 1.5"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "588 140 108.325"; + rotation = "-0.318993 0.168786 0.932606 227.962"; + scale = "1 1 1"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "548 220 119.778"; + rotation = "-0.542672 -0.517663 -0.661462 28.3949"; + scale = "1 1 1"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "548 196 107.903"; + rotation = "-0.575099 -0.240159 0.782039 51.104"; + scale = "1.3 1.3 1.3"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "492 196 112.762"; + rotation = "0.253778 -0.1873 0.948955 203.761"; + scale = "1 1 1"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "604 156 105.887"; + rotation = "-0.0326261 0.0389834 0.998707 225.946"; + scale = "1.5 1.5 1.5"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "564 236 114.544"; + rotation = "0.208184 -0.0821455 0.974634 115.338"; + scale = "1.4 1.4 1.4"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "492 148 99.2617"; + rotation = "-0.0149542 -0.224199 -0.974429 58.2532"; + scale = "1.1 1.1 1.1"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "572 44 129.95"; + rotation = "-0.0753689 0.145225 0.986524 67.7173"; + scale = "1.3 1.3 1.3"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "628 188 107.028"; + rotation = "-0.124681 -0.107766 -0.986327 72.7519"; + scale = "1.3 1.3 1.3"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "580 108 129.606"; + rotation = "-0.160092 0.296592 0.94149 163.037"; + scale = "1.2 1.2 1.2"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "572 188 105.919"; + rotation = "-0.0916734 -0.212707 0.972806 188.756"; + scale = "1 1 1"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "636 236 95.4966"; + rotation = "0.296211 -0.0940407 0.950482 86.9005"; + scale = "1.1 1.1 1.1"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "652 132 111.966"; + rotation = "0.114039 0.329162 0.937362 63.2603"; + scale = "1.2 1.2 1.2"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "596 108 134.653"; + rotation = "-0.131211 0.224869 0.965514 229.455"; + scale = "1.5 1.5 1.5"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "660 60 143.575"; + rotation = "-0.0366527 -0.205783 0.977911 82.2664"; + scale = "1.2 1.2 1.2"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "676 92 133.559"; + rotation = "-0.143912 0.101845 0.984336 208.565"; + scale = "1.2 1.2 1.2"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "484 124 107.887"; + rotation = "0.0688712 0.267605 0.961064 116.062"; + scale = "1.4 1.4 1.4"; + shapeName = "borg5.dts"; + }; + new TSStatic() { + position = "548 188 102.95"; + rotation = "-0.141141 -0.288261 0.947093 135.236"; + scale = "1.2 1.2 1.2"; + shapeName = "borg5.dts"; + }; + }; + new SimGroup(Addition4BEPlant1) { + + new TSStatic() { + position = "196 124 106.788"; + rotation = "-0.0194762 0.0360942 0.999159 185.995"; + scale = "0.8 0.8 0.8"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "324 132 137.709"; + rotation = "-0.824061 0.269725 0.498169 40.8144"; + scale = "1.5 1.5 1.5"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "404 148 129.272"; + rotation = "-0.453514 0.0103151 -0.89119 57.3823"; + scale = "1.3 1.3 1.3"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "148 164 106.272"; + rotation = "0.346131 0.139353 0.927779 82.2303"; + scale = "1.3 1.3 1.3"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "388 52 119.178"; + rotation = "0.299604 0.0496035 0.952773 96.7594"; + scale = "0.8 0.8 0.8"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "452 220 146.162"; + rotation = "-0.155184 -0.275246 0.948766 94.0103"; + scale = "1.5 1.5 1.5"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "164 324 104.084"; + rotation = "-0.256999 0.966412 0 31.3768"; + scale = "1.4 1.4 1.4"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "380 100 118.959"; + rotation = "0.252843 -0.0682316 0.965098 206.091"; + scale = "0.7 0.7 0.7"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "252 140 124.506"; + rotation = "-0.290357 -0.0857175 0.953072 149.43"; + scale = "0.7 0.7 0.7"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "172 364 93.2094"; + rotation = "0.0544781 0.166186 0.984588 180.985"; + scale = "1 1 1"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "156 180 97.1313"; + rotation = "0.735189 0.316481 0.599448 35.9322"; + scale = "1.5 1.5 1.5"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "452 212 143.413"; + rotation = "-0.292077 -0.0147327 -0.956281 70.3941"; + scale = "2 2 2"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "476 324 193.725"; + rotation = "-0.46624 -0.0634 0.882384 21.4771"; + scale = "1.5 1.5 1.5"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "428 164 133.319"; + rotation = "-0.0128469 -0.219879 0.975443 155.595"; + scale = "0.6 0.6 0.6"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "388 252 165.584"; + rotation = "0.0979139 -0.392969 0.914324 89.1213"; + scale = "0.7 0.7 0.7"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "388 164 134.662"; + rotation = "0.136418 -0.0673901 0.988357 100.66"; + scale = "0.6 0.6 0.6"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "436 148 121.663"; + rotation = "-0.487287 0.0647607 -0.870837 83.7945"; + scale = "1.7 1.7 1.7"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "236 340 114.647"; + rotation = "-0.0104936 0.224169 0.974494 182.924"; + scale = "1.1 1.1 1.1"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "324 164 150.147"; + rotation = "-0.547013 0.782764 -0.296745 23.293"; + scale = "1 1 1"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "268 116 123.741"; + rotation = "-0.479476 0.578886 -0.65954 35.7259"; + scale = "1.2 1.2 1.2"; + shapeName = "borg1.dts"; + }; + }; + new SimGroup(Addition5BEPlant1) { + + new TSStatic() { + position = "1364 -852 77.2562"; + rotation = "-0.768939 0.365446 -0.524579 33.6006"; + scale = "0.9 0.9 0.9"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "1196 -836 64.3031"; + rotation = "0.210641 0.146051 -0.966592 61.7001"; + scale = "0.9 0.9 0.9"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "1244 -780 86.6625"; + rotation = "-0.115374 -0.141325 0.983217 175.084"; + scale = "1.3 1.3 1.3"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "1308 -876 75.1782"; + rotation = "0.228708 -0.120099 0.966058 183.864"; + scale = "0.9 0.9 0.9"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "1132 -892 65.725"; + rotation = "-0.12685 0.170462 0.977165 141.825"; + scale = "0.9 0.9 0.9"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "1244 -924 102.069"; + rotation = "-0.110985 0.0519229 0.992465 144.254"; + scale = "2 2 2"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "1180 -868 69.0688"; + rotation = "0.0109543 0.159993 0.987057 149.382"; + scale = "1.8 1.8 1.8"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "1204 -644 98.9593"; + rotation = "0.110772 -0.25673 0.960114 237.022"; + scale = "1.3 1.3 1.3"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "1396 -940 87.4594"; + rotation = "-0.266377 0.35014 0.898023 69.6625"; + scale = "0.5 0.5 0.5"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "1292 -620 110.038"; + rotation = "-0.054907 0.139267 0.988732 202.747"; + scale = "1.7 1.7 1.7"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "1060 -644 119.631"; + rotation = "-0.492076 0.214682 -0.843666 61.1638"; + scale = "0.6 0.6 0.6"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "1316 -708 100.069"; + rotation = "-0.195611 0.0941593 0.976151 203.444"; + scale = "2 2 2"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "1172 -788 55.9126"; + rotation = "0.0333406 0.00956025 0.999398 122.029"; + scale = "1.6 1.6 1.6"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "1076 -700 95.6469"; + rotation = "-0.0505172 -0.443439 -0.89488 14.5118"; + scale = "0.9 0.9 0.9"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "1260 -828 77.9125"; + rotation = "0.0225397 0.0724205 0.997119 129.128"; + scale = "1.2 1.2 1.2"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "1076 -860 65.7719"; + rotation = "0.133628 -0.137519 0.981444 105.039"; + scale = "1.7 1.7 1.7"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "1316 -836 87.85"; + rotation = "-0.09518 -0.0525785 0.994071 108.324"; + scale = "0.6 0.6 0.6"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "1132 -908 71.2563"; + rotation = "0.00708622 0.347095 0.937803 103.601"; + scale = "0.8 0.8 0.8"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "1156 -916 80.3344"; + rotation = "-0.0730995 0.138384 0.987677 220.536"; + scale = "1.2 1.2 1.2"; + shapeName = "borg1.dts"; + }; + new TSStatic() { + position = "1060 -564 127.616"; + rotation = "0.0985932 0.092788 0.990793 200.811"; + scale = "1.1 1.1 1.1"; + shapeName = "borg1.dts"; + }; + }; + new SimGroup(Addition6BELgTree18) { + + new TSStatic() { + position = "1340 -876 63.3125"; + rotation = "0 0 1 232"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "1348 -524 77.4063"; + rotation = "0 0 1 201"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "1244 -972 92.5"; + rotation = "0 0 1 195"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "1004 -932 71.3281"; + rotation = "0 0 1 121"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "1044 -852 70.5938"; + rotation = "0 0 -1 96.0002"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "1172 -804 54.0625"; + rotation = "0 0 1 138"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "1164 -852 60.6406"; + rotation = "0 0 1 153"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "1060 -716 94.75"; + rotation = "0 0 -1 73.0006"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "1260 -612 106.578"; + rotation = "0 0 -1 82"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "1036 -836 72.0157"; + rotation = "0 0 -1 113"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "1268 -948 95.7499"; + rotation = "0 0 1 113"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "1244 -932 98.625"; + rotation = "0 0 1 9.99989"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "1252 -716 85.6875"; + rotation = "0 0 1 33"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "1316 -524 79.6719"; + rotation = "0 0 1 207"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "1324 -644 109.062"; + rotation = "0 0 1 113"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "1132 -452 157.297"; + rotation = "0 0 1 180"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "980 -924 78.2031"; + rotation = "1 0 0 0"; + scale = "1.3 1.3 1.3"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "1004 -716 103.766"; + rotation = "0 0 1 72.0002"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "1020 -740 98.406"; + rotation = "0 0 1 127"; + scale = "1.4 1.4 1.4"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "1204 -724 66.0312"; + rotation = "0 0 1 149"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + }; + }; + new SimGroup(Addition1BESmTree17) { + + new TSStatic() { + position = "516 -852 114.203"; + rotation = "0.0226453 0.0115586 0.999677 203.992"; + scale = "1.4 1.4 1.4"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "412 -636 137.328"; + rotation = "-0.054195 -0.05415 0.997061 181.994"; + scale = "1.1 1.1 1.1"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "516 -852 114.203"; + rotation = "-0.0128273 -0.0480088 -0.998765 60.0615"; + scale = "1.1 1.1 1.1"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "444 -756 96.0001"; + rotation = "-0.0616775 -0.117932 0.991104 215.7"; + scale = "1.1 1.1 1.1"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "340 -772 79.5938"; + rotation = "-0.214777 0.964319 0.154792 6.45366"; + scale = "1.5 1.5 1.5"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "604 -844 157.766"; + rotation = "-0.0445501 -0.0465846 0.99792 184.99"; + scale = "1.4 1.4 1.4"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "628 -644 187.891"; + rotation = "0.19108 -0.0345838 -0.980965 98.0915"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "372 -764 83.5781"; + rotation = "0.126305 0.0603915 -0.990151 87.5658"; + scale = "1.5 1.5 1.5"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "588 -844 156.516"; + rotation = "-0.124319 -0.119349 0.985038 104.836"; + scale = "1.3 1.3 1.3"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "412 -900 119.953"; + rotation = "-0.0628523 -0.0476702 0.996884 210.907"; + scale = "1.1 1.1 1.1"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "428 -540 160.078"; + rotation = "-0.106477 0.0229367 0.994051 223.763"; + scale = "1.5 1.5 1.5"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "468 -652 141.938"; + rotation = "0.209904 -0.0580286 -0.975998 73.3289"; + scale = "1.5 1.5 1.5"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "404 -892 119.344"; + rotation = "0.0258563 0.208098 -0.977766 83.2771"; + scale = "1.3 1.3 1.3"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "476 -500 153.453"; + rotation = "0.770847 -0.137338 -0.62204 20.7593"; + scale = "1.1 1.1 1.1"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "284 -532 90.2187"; + rotation = "-0.835172 0.10902 0.539075 20.2546"; + scale = "1.3 1.3 1.3"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "300 -860 106.953"; + rotation = "0.0300008 0.141884 0.989429 78.5967"; + scale = "1.5 1.5 1.5"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "468 -724 105.984"; + rotation = "-0.231502 0.313655 -0.920884 48.4362"; + scale = "1.1 1.1 1.1"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "436 -780 93.1406"; + rotation = "-0.0166021 0.0320587 0.999348 205.983"; + scale = "0.9 0.9 0.9"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "276 -876 111.875"; + rotation = "0.10672 0.12651 0.986208 236.335"; + scale = "1.5 1.5 1.5"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "380 -740 84.4219"; + rotation = "-0.126943 0.171214 0.977022 55.0849"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "460 -564 163.094"; + rotation = "-0.00537145 0.279877 -0.960021 67.1369"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "468 -868 119.641"; + rotation = "-0.275798 -0.0223686 -0.960955 45.6079"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "580 -812 159.172"; + rotation = "0.11136 -0.181869 0.976997 71.2576"; + scale = "0.9 0.9 0.9"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "292 -644 101.859"; + rotation = "-0.154484 -0.000180158 0.987995 176.048"; + scale = "0.9 0.9 0.9"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "340 -876 123.937"; + rotation = "0.00543177 0.0324584 0.999458 184.997"; + scale = "1.3 1.3 1.3"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "356 -644 117.328"; + rotation = "-0.0709721 -0.0117515 0.997409 157.058"; + scale = "0.9 0.9 0.9"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "444 -540 160.797"; + rotation = "0.0687445 0.0224915 0.997381 82.149"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "516 -852 114.203"; + rotation = "0.0261136 -0.00134998 0.999658 144.011"; + scale = "1.3 1.3 1.3"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "580 -796 159.547"; + rotation = "0.0555007 0.0996695 0.993472 234.693"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "452 -532 160.047"; + rotation = "0.0187232 0.0595054 0.998052 143.067"; + scale = "1.4 1.4 1.4"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "452 -572 159.516"; + rotation = "-0.107753 -0.142268 0.983946 143.555"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "572 -772 157.203"; + rotation = "0.085667 0.0576616 0.994654 176.021"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "348 -788 81.5782"; + rotation = "-0.119645 0.050421 0.991536 217.701"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "380 -740 84.4219"; + rotation = "-0.152944 0.359364 0.920579 29.2333"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "268 -564 82.4531"; + rotation = "-0.0958363 0.325672 -0.940613 33.9076"; + scale = "0.9 0.9 0.9"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "460 -540 162.266"; + rotation = "-0.131657 0.0740015 0.988529 198.786"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + }; + }; + new SimGroup(Addition2BELgTree18) { + + new TSStatic() { + position = "332 -932 118.766"; + rotation = "0 0 -1 53.9998"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "188 -604 87.5781"; + rotation = "0 0 1 159"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "12 -844 121.125"; + rotation = "0 0 1 233"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "-36 -468 135.203"; + rotation = "0 0 1 76"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "108 -892 102.594"; + rotation = "0 0 1 53"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "476 -652 142.578"; + rotation = "0 0 1 208"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "444 -524 160.156"; + rotation = "0 0 1 17"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "-28 -468 136"; + rotation = "0 0 1 121"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "228 -452 115.188"; + rotation = "0 0 1 36"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "164 -564 91.9688"; + rotation = "0 0 -1 44.9999"; + scale = "1.3 1.3 1.3"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "76 -412 131.828"; + rotation = "0 0 -1 1.00014"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "260 -892 118.438"; + rotation = "0 0 1 150"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "452 -556 162.062"; + rotation = "0 0 1 20"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "156 -604 84.5781"; + rotation = "0 0 1 93.0002"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "340 -780 79.5"; + rotation = "0 0 -1 10.9999"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "284 -676 104.078"; + rotation = "0 0 1 109"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "212 -748 102.672"; + rotation = "0 0 1 180"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "44 -708 86.1249"; + rotation = "0 0 1 177"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "324 -436 77.3281"; + rotation = "0 0 -1 35"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "228 -532 103.313"; + rotation = "0 0 1 174"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + }; + }; + new TSStatic() { + position = "590.041 -542.501 248.284"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + }; + new SimGroup(Addition3BELgTree18) { + + new TSStatic() { + position = "612 676 187.797"; + rotation = "0 0 1 236"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "596 684 188.609"; + rotation = "0 0 1 222"; + scale = "1.4 1.4 1.4"; + shapeName = "borg18.dts"; + }; + }; + new SimGroup(Addition4BELgTree18) { + + new TSStatic() { + position = "484 548 68.625"; + rotation = "0 0 1 75.0002"; + scale = "1.3 1.3 1.3"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "532 524 84.0782"; + rotation = "0 0 1 161"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + }; + }; + new SimGroup(Addition5BELgTree18) { + + new TSStatic() { + position = "268 668 97.359"; + rotation = "0 0 1 60.0001"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "60 588 135.438"; + rotation = "0 0 1 218"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "44 780 52.0312"; + rotation = "0 0 1 168"; + scale = "1.3 1.3 1.3"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "316 604 115.359"; + rotation = "0 0 1 1.9999"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "124 820 54.7031"; + rotation = "0 0 1 21"; + scale = "1.1 1.1 1.1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "84 556 133.891"; + rotation = "0 0 -1 38"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "76 572 133.078"; + rotation = "0 0 -1 34.0002"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "236 588 125.078"; + rotation = "0 0 1 57"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "332 668 98.781"; + rotation = "0 0 1 130"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "332 740 90.7656"; + rotation = "0 0 1 85.9998"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "276 812 99.359"; + rotation = "0 0 1 42"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "300 692 100.281"; + rotation = "0 0 1 32"; + scale = "1.2 1.2 1.2"; + shapeName = "borg18.dts"; + }; + }; + new SimGroup(Addition6BESmTree17) { + + new TSStatic() { + position = "316 764 90.3593"; + rotation = "-0.269346 0.0747762 0.960136 9.37201"; + scale = "1.4 1.4 1.4"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "284 796 100.625"; + rotation = "-0.109174 -0.268087 0.957189 30.2388"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "92 788 52.4374"; + rotation = "-0.00226441 0.0373222 0.999301 211.979"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "236 596 124.828"; + rotation = "0.0374212 -0.125582 -0.991377 48.3697"; + scale = "0.9 0.9 0.9"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "92 604 130.219"; + rotation = "0.130424 -0.533966 0.835386 29.7251"; + scale = "1.2 1.2 1.2"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "236 580 125.891"; + rotation = "0.988853 -0.0859407 0.121593 8.21026"; + scale = "1.1 1.1 1.1"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "204 844 64"; + rotation = "0.075034 -0.0658218 0.995006 117.256"; + scale = "1.4 1.4 1.4"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "324 724 93.625"; + rotation = "0.177271 -0.147427 0.973057 84.5554"; + scale = "0.9 0.9 0.9"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "68 692 85.2812"; + rotation = "0.197225 0.181032 0.963499 72.0145"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "324 588 114.719"; + rotation = "-0.0913719 -0.0166197 0.995678 143.149"; + scale = "1.5 1.5 1.5"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "124 812 54.3437"; + rotation = "-0.139173 -0.0205308 0.990055 195.843"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "332 772 93.0156"; + rotation = "-0.630648 0.457846 -0.626626 22.1727"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + }; + }; + new SimGroup(Addition7BESmTree17) { + + new TSStatic() { + position = "724 500 100.312"; + rotation = "-0.474947 0.55988 -0.67894 10.2955"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "692 644 172.547"; + rotation = "-0.120142 -0.104658 0.987225 130.562"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "788 604 183.453"; + rotation = "-0.381454 0.132918 0.914782 46.594"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "748 620 177.734"; + rotation = "-0.133731 0.0451644 0.989988 126.465"; + scale = "1 1 1"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "700 636 170.906"; + rotation = "-0.28187 -0.0991843 0.954312 63.3697"; + scale = "1.4 1.4 1.4"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "796 676 167.984"; + rotation = "-0.114769 0.0364394 0.992724 166.101"; + scale = "1.5 1.5 1.5"; + shapeName = "borg17.dts"; + }; + }; + new SimGroup(Addition8BESmTree17) { + + new TSStatic() { + position = "612 492 82.4219"; + rotation = "0.15131 -0.0330094 0.987935 175.06"; + scale = "1.4 1.4 1.4"; + shapeName = "borg17.dts"; + }; + new TSStatic() { + position = "652 428 79.7656"; + rotation = "0.122244 -0.16474 -0.978732 87.229"; + scale = "0.8 0.8 0.8"; + shapeName = "borg17.dts"; + }; + }; + }; + new SimGroup(NotSoRandomOrganics) { + + new InteriorInstance() { + position = "-234.377 399.56 72.0484"; + rotation = "1 0 0 139.229"; + scale = "1.18518 1.63312 1"; + interiorFile = "brock7.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "-359.655 570.11 126.837"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "-361.343 564.269 130.504"; + rotation = "1 0 0 50.4203"; + scale = "1 1 1"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "-351.76 562.309 125.975"; + rotation = "0.769297 0.578037 -0.272129 62.9301"; + scale = "1 1 1"; + interiorFile = "brock8.dif"; + showTerrainInside = "0"; + }; + new StaticShape(SWDeadMed) { + position = "-332.993 471.436 122.37"; + rotation = "-0.294439 -0.309888 0.904033 47.0646"; + scale = "1 1 0.99"; + dataBlock = "MediumMaleHuman_Dead"; + lockCount = "0"; + homingCount = "0"; + trainingSkin = 1; + }; + new StaticShape(MedDeadBody) { + position = "477.477 360.201 204.267"; + rotation = "0 0 1 82.5059"; + scale = "1 1 1"; + dataBlock = "MediumMaleHuman_Dead"; + lockCount = "0"; + homingCount = "0"; + }; + new StaticShape(SWDeadLt) { + position = "-205.392 473.86 97.7869"; + rotation = "-0.94867 0.262068 0.177046 24.3075"; + scale = "1 1 1"; + dataBlock = "LightMaleHuman_Dead"; + lockCount = "0"; + homingCount = "0"; + trainingSkin = 1; + }; + new StaticShape(LightDeadBody) { + position = "474.167 360.154 215.68"; + rotation = "0 0 1 94.538"; + scale = "1 1 1"; + dataBlock = "LightMaleHuman_Dead"; + lockCount = "0"; + homingCount = "0"; + }; + new InteriorInstance() { + position = "-32.6219 242.339 102.947"; + rotation = "0 0 -1 115.92"; + scale = "1 1 1"; + interiorFile = "bspir1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "93.7696 300.472 66.6777"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir5.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "363.768 249.524 170.509"; + rotation = "0 0 1 218.479"; + scale = "1 1 1"; + interiorFile = "bspir4.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "976.562 -614.672 90.2773"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bspir3.dif"; + showTerrainInside = "0"; + }; + new StaticShape(HeavyDeadBody) { + position = "476.153 360.368 232.658"; + rotation = "0 0 1 94.538"; + scale = "1 1 1"; + dataBlock = "HeavyMaleHuman_Dead"; + lockCount = "0"; + homingCount = "0"; + }; + new WheeledVehicle(MPB) { + position = "1273.71 -818.372 79.5295"; + rotation = "0.12202 0.0215281 -0.992294 60.694"; + scale = "1 1 1"; + dataBlock = "mobileBaseVehicle"; + lockCount = "0"; + homingCount = "0"; + disableMove = "0"; + respawn = "0"; + selfPower = "1"; + mountable = "1"; + }; + }; + new SimGroup(Water) { + + new WaterBlock() { + position = "-16 -80 71.5051"; + rotation = "1 0 0 0"; + scale = "128 128 6.3387"; + liquidType = "StagnantWater"; + density = "1"; + viscosity = "6"; + waveMagnitude = "1"; + surfaceTexture = "LiquidTiles/GreenWater"; + surfaceOpacity = "0.7"; + envMapTexture = "lush/skies/lushcloud3"; + envMapIntensity = "0.9"; + removeWetEdges = "1"; + }; + new WaterBlock() { + position = "-8 48 95.5"; + rotation = "1 0 0 0"; + scale = "64 64 3.71365"; + liquidType = "StagnantWater"; + density = "1"; + viscosity = "6"; + waveMagnitude = "0.2"; + surfaceTexture = "LiquidTiles/AlgaeWater"; + surfaceOpacity = "0.7"; + envMapTexture = "lush/skies/lushcloud3"; + envMapIntensity = "0.9"; + removeWetEdges = "1"; + }; + new WaterBlock() { + position = "-272 376 72"; + rotation = "1 0 0 0"; + scale = "64 64 1"; + liquidType = "StagnantWater"; + density = "1"; + viscosity = "6"; + waveMagnitude = "0.1"; + surfaceTexture = "LiquidTiles/AlgaeWater"; + surfaceOpacity = "0.7"; + envMapTexture = "lush/skies/lushcloud3"; + envMapIntensity = "0.9"; + removeWetEdges = "1"; + }; + }; + new SimGroup(Sounds) { + + new AudioEmitter(Frog1) { + position = "-222.356 401.06 75.6289"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/frog1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "150"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + }; + new AudioEmitter(Cricket1) { + position = "-59.9835 298.318 95.3758"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/crickets.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "150"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + }; + new AudioEmitter(Frog2) { + position = "534.092 163.88 102.215"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/frog2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "150"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + }; + new AudioEmitter(Cricket1) { + position = "377.544 386.028 124.305"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/crickets.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "150"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + }; + new AudioEmitter(Cricket1) { + position = "818.623 -238.858 63.6823"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/crickets.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "150"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + }; + new AudioEmitter(Cricket1) { + position = "1211.31 -579.262 126.456"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/crickets.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "150"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + }; + new AudioEmitter(Cricket1) { + position = "1058.83 -419.898 124.77"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/crickets.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "150"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + }; + new AudioEmitter(bird) { + position = "-260.284 339.991 112.661"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/bird_echo5.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "2"; + maxDistance = "150"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + }; + }; + new Camera(introFlyerDP) { + position = "400 -1000 200"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new SimGroup(FlightPath) { + + new Camera(1) { + position = "400 -800 200"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera(2) { + position = "400 -650 200"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera(3) { + position = "400 -350 200"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera(4) { + position = "400 -245 200"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera(5) { + position = "400 45 200"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + }; + new Camera(MissileGuySpot) { + position = "250.052 -348.706 132.918"; + rotation = "0 0 -1 43.1546"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera(MissileCamera) { + position = "246.608 -349.915 134.29"; + rotation = "0 0 1 39.6094"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; +}; +//--- OBJECT WRITE END --- + +exec("scripts/training1.cs"); diff --git a/base/missions/Training2.mis b/base/missions/Training2.mis new file mode 100644 index 0000000..d7dd9a6 --- /dev/null +++ b/base/missions/Training2.mis @@ -0,0 +1,1538 @@ +// MissionTypes = SinglePlayer +// DisplayName = Warrior + +//--- MISSION BRIEFING BEGIN --- +//Welcome, warrior. Glad to see you survived Charybdis. This planet is Sehrganda Prime. It's about as different from Charybdis as you can imagine: a desert world once held by the Phoenix. +// +//The Hordes have been fortifying a string of the old Children of Phoenix bases in the Sunblast March, one of the key approaches to the fertile Darath valleys. We need the food those valleys can produce. +// +//Your mission is to sweep through a series of these towers and deny them to the Derm reavers. +// +//The loadout will be Assault armor and missile launchers. In addition, your armor carries a targeted digital virus to assist you in taking control of these bases. The Derms still use tribal equipment, so you shouldn't encounter any technical problems. +// +//You'll be paired with another warrior, warnom of Dogkiller. Work with him. Lieutenant Kenzie will be running the Command Circuit again. She remembers you from Charybdis. +// +//OK, that is all. Dismissed. +//--- MISSION BRIEFING END --- + +// BriefingWAV = T2 6 +// Bitmap = trn_2sehrganda + +//--- MISSION STRING BEGIN --- +//OBJECTIVES: +//Capture a series of enemy towers +//Destroy enemy defenses +//TRAINING: +//Basic teamwork +//Control Switches and Inventory Stations +//Shield and repair packs +//--- MISSION STRING END --- + +// PlanetName = Sehrganda Prime, 3947 CE +//--- MISSION BLURB BEGIN --- +//The Pact needs the agricultural resources of Sehrganda Prime. Soldiers fight on their stomachs, and without food, tribal warriors will be easy meat for Horde reavers. It is dawn. Soon, the desert sun will turn this land into an inferno. Better get moving. +//--- MISSION BLURB END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + powerCount = "0"; + + new MissionArea(MissionArea) { + area = "-256 -928 1376 1472"; + flightCeiling = "2000"; + flightCeilingRange = "50"; + }; + new Sky(Sky) { + position = "0 0 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed[0] = "0.000100 0.000000"; + cloudSpeed[1] = "0.000300 0.000000"; + cloudSpeed[2] = "0.000500 0.000000"; + visibleDistance = "400"; + useSkyTextures = "1"; + SkySolidColor = "0.365 0.33 0.31 0.000000"; + fogDistance = "0"; + fogColor = "0.237250 0.127450 0.127450 1.000000"; + fogVolume1 = "0 0 0"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "sky_desert_brown.dml"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.600000 0.600000 0.600000 1.000000"; + ambient = "0.600000 0.600000 0.600000 1.000000"; + position = "0 0 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/desertdet1"; + terrainFile = "Training2.ter"; + squareSize = "8"; + emptySquares = "94076"; + position = "-1024 -1024 0"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "65"; + cullDensity = "0.1"; + customArea = "0 0 0 0"; + position = "0 0 0 1"; + coverage = "0"; + rotation = "0 0 0 0"; + GraphFile = "Training2.nav"; + scale = "1 1 1"; + conjoinBowlDev = "20"; + }; + new SimGroup(Teams) { + + new SimGroup(Team1) { + + new SimGroup(DropPoints) { + + new Camera() { + position = "17.8468 418.138 74.959"; + rotation = "0 0 1 190.222"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "14.194 425.182 74.881"; + rotation = "0 0 1 188.503"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new SimGroup(Respawns) { + + new Camera() { + position = "13.5138 419.899 85.2662"; + rotation = "0 0 1 188.503"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "-48.6691 -83.1481 130.63"; + rotation = "0 0 1 136.364"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "332.557 -243.321 100.568"; + rotation = "0 0 1 152.98"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "661.485 -572.045 132.189"; + rotation = "0 0 1 122.04"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + }; + }; + new SimGroup(AIObjectives) { + + new AIObjective(AIOAttackObject) { + position = "793.159 -648.806 138.528"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Inventory_Beta"; + targetClientId = "-1"; + targetObjectId = "3237"; + location = "793.159 -648.806 138.528"; + weightLevel1 = "2900"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIOAttackObject) { + position = "786.235 -659.018 138.622"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Inventory_Alpha"; + targetClientId = "-1"; + targetObjectId = "3235"; + location = "786.235 -659.018 138.622"; + weightLevel1 = "2900"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIOAttackObject) { + position = "788.001 -646.949 164.29"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the GeneratorLarge"; + targetObject = "Generator3"; + targetClientId = "-1"; + targetObjectId = "3234"; + location = "788.001 -646.949 164.29"; + weightLevel1 = "3100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIOTouchObject) { + position = "797.596 -652.19 164.558"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the EasternFortification"; + mode = "TouchFlipFlop"; + targetObject = "EasternFortification"; + targetClientId = "-1"; + targetObjectId = "3240"; + location = "797.596 -652.19 164.558"; + weightLevel1 = "0"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODefendLocation) { + position = "791.311 -655.22 156.159"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the FlipFlop"; + targetObject = "EasternFortification"; + targetClientId = "-1"; + targetObjectId = "3240"; + location = "791.311 -655.22 156.159"; + weightLevel1 = "2600"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "793.159 -648.806 138.528"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Inventory_Beta"; + targetClientId = "-1"; + targetObjectId = "3237"; + location = "793.159 -648.806 138.528"; + weightLevel1 = "2900"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "786.235 -659.018 138.622"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Inventory_Alpha"; + targetClientId = "-1"; + targetObjectId = "3235"; + location = "786.235 -659.018 138.622"; + weightLevel1 = "2900"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "788.001 -646.949 164.29"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the GeneratorLarge"; + targetObject = "Generator3"; + targetClientId = "-1"; + targetObjectId = "3234"; + location = "788.001 -646.949 164.29"; + weightLevel1 = "3200"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + }; + }; + new SimGroup(Team2) { + + new SimGroup(DropPoints) { + + new Camera(enemy0) { + position = "-15.6292 -111.517 134.145"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + equipment = "1"; + specialObjectives = "0"; + }; + new Camera(enemy1) { + position = "-23.5924 -110.297 133.29"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + equipment = "2"; + specialObjectives = "0"; + }; + new Camera(enemy2) { + position = "384.576 -288.5 103.525"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + equipment = "1"; + specialObjectives = "1"; + }; + new Camera(enemy3) { + position = "386.071 -313.524 101.85"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + equipment = "1"; + specialObjectives = "1"; + }; + new Camera(enemy4) { + position = "803.084 -633.443 131.867"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + equipment = "1"; + specialObjectives = "2"; + SkillLevel = "0.0"; + }; + new Camera(enemy5) { + position = "767.054 -680.544 131.762"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + equipment = "1"; + specialObjectives = "2"; + }; + new Camera(enemy6) { + position = "14.5448 -117.655 132.537"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + equipment = "3"; + specialObjectives = "0"; + }; + new Camera(enemy7) { + position = "790.273 -653.841 174.156"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + specialObjectives = "2"; + }; + new Camera(enemy8) { + position = "-40.4121 -111.547 131.564"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + equipment = "3"; + specialObjectives = "0"; + }; + new Camera(enemy9) { + position = "371.903 -301.672 122.784"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + equipment = "3"; + specialObjectives = "1"; + }; + new Camera(enemy10) { + position = "791.311 -655.22 156.159"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + specialObjectives = "2"; + }; + new SimGroup(Respawns) { + + new Camera(DP) { + position = "702.985 -1031.52 99.2586"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + equipment = "1"; + specialObjectives = "2"; + }; + new Camera(DP) { + position = "694.16 -1039.71 102.501"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + equipment = "1"; + specialObjectives = "2"; + }; + new Camera(DP) { + position = "1271.87 -389.877 109.506"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + equipment = "1"; + specialObjectives = "2"; + }; + new Camera(DP) { + position = "696.954 -1056.33 101.798"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + equipment = "1"; + specialObjectives = "2"; + }; + new Camera(DP) { + position = "705.779 -1048.14 98.5557"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + equipment = "1"; + specialObjectives = "2"; + }; + new Camera(DP) { + position = "1223.52 -748.852 101.22"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + equipment = "1"; + specialObjectives = "2"; + }; + }; + }; + new SimGroup(Base1) { + + new InteriorInstance(base) { + position = "-8.8043 -131.828 129.698"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pbunk1.dif"; + showTerrainInside = "0"; + locked = "true"; + threshold1 = "240"; + threshold2 = "190"; + }; + new InteriorInstance(SensorPlatform) { + position = "-164.017 126.239 97.5715"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pplat4.dif"; + showTerrainInside = "0"; + }; + new StaticShape(InitialPulseSensor) { + position = "-163.766 126.011 98.5562"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SensorLargePulse"; + lockCount = "0"; + homingCount = "0"; + }; + new StaticShape(Generator) { + position = "-32.3984 -131.857 131.591"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + }; + new Item() { + position = "-8.0567 -132.091 131.289"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + new StaticShape(CommandSwitch) { + position = "-8.8262 -131.779 119.756"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Small Tower"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + name = "North Base Command Switch"; + }; + new StaticShape(Team2SensorMediumPulse1) { + position = "-11.5761 -131.662 169.684"; + rotation = "0 0 1 89.3814"; + scale = "1 1 1"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + }; + new Item() { + position = "-13.9581 -132.162 145.009"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "MissileLauncherAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + new Item() { + position = "-11.2665 -132.092 145.1"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "DiscAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + new Item() { + position = "-8.4602 -132.143 145.079"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "PlasmaAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + }; + new SimGroup(Base2) { + + new InteriorInstance(Bridge) { + position = "342.613 -282.075 95.0938"; + rotation = "0 0 1 197.28"; + scale = "1 1 1"; + interiorFile = "pbrdg1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(base) { + position = "380.262 -298.625 98.9719"; + rotation = "0 0 -1 94.538"; + scale = "1 1 1"; + interiorFile = "ptowr7.dif"; + showTerrainInside = "0"; + locked = "true"; + threshold1 = "300"; + threshold2 = "250"; + }; + new InteriorInstance(TurretPlatform) { + position = "274.154 -351.326 97.6447"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "pmisc2.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new StaticShape(Sensor) { + position = "380.565 -301.198 131.4"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + }; + new StaticShape(Generator) { + position = "380.411 -300.914 111.738"; + rotation = "0 0 1 178.19"; + scale = "1 1 1"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + }; + new Turret(Turret_Beta) { + position = "274.785 -351.226 102.094"; + rotation = "0 0 -1 91.1003"; + scale = "1 1 1"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + }; + new Item() { + position = "374.41 -305.57 121.133"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "PlasmaAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + new Item() { + position = "387.02 -296.774 120.929"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "MissileLauncherAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + new Item() { + position = "387.213 -300.396 121.02"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "DiscAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + new Item() { + position = "387.206 -304.933 120.699"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "PlasmaAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + new Item() { + position = "373.503 -298.246 121.504"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "MissileLauncherAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + new Item() { + position = "373.173 -302.462 121.786"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "DiscAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + }; + new SimGroup(Base3) { + + new InteriorInstance(SensorPlatform) { + position = "556.244 -411.004 129.382"; + rotation = "0 0 1 30.9397"; + scale = "1 1 1"; + interiorFile = "pmisc3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(base) { + position = "790.141 -654.339 135.951"; + rotation = "0 0 1 123.368"; + scale = "1 1 1"; + interiorFile = "ptowr4.dif"; + showTerrainInside = "0"; + locked = "true"; + threshold1 = "370"; + threshold2 = "150"; + }; + new StaticShape(MidwaySensor) { + position = "556.144 -411.448 130.704"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + }; + new StaticShape(Generator3) { + position = "787.127 -648.7 162.838"; + rotation = "0 0 1 214.286"; + scale = "1 1 1"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + }; + new StaticShape(Inventory_Alpha) { + position = "786.235 -659.018 137.056"; + rotation = "0 0 1 213.14"; + scale = "1 1 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + }; + new StaticShape(Inventory_Beta) { + position = "793.159 -648.806 136.962"; + rotation = "7.20629e-10 2.9093e-10 1 32.6586"; + scale = "1 1 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + }; + new Turret(TurtleTurret) { + position = "792.748 -656.036 144.234"; + rotation = "0 0 -1 58.4417"; + scale = "1 1 1"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + }; + new StaticShape(EasternFortification) { + position = "797.596 -652.19 162.924"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Eastern Fortification"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + name = "CommandSwitch"; + }; + new Item(RP) { + position = "794.083 -657.044 146.3"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + new Item() { + position = "783.628 -655.481 163.809"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + }; + }; + new SimGroup(team0) { + }; + }; + new SimGroup(RandomOrganics) { + + new SimGroup(Addition1PhoenixPlant2) { + + new TSStatic() { + position = "204 44 106.006"; + rotation = "0.138981 -0.193169 0.971272 78.6321"; + scale = "1.4 1.4 1.4"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "228 60 98.3187"; + rotation = "0.035547 -0.0761718 0.996461 22.0762"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "-116 180 71.8187"; + rotation = "-0.130654 0.00927947 -0.991385 108.471"; + scale = "0.9 0.9 0.9"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "12 -188 129.631"; + rotation = "-0.00253782 -0.00781055 0.999966 144.001"; + scale = "0.8 0.8 0.8"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "28 -196 129.475"; + rotation = "0.0388878 -0.0470259 0.998136 206.951"; + scale = "0.8 0.8 0.8"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "-52 156 69.0062"; + rotation = "0.062246 0.0136081 0.997968 90.1165"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "-76 -180 129.537"; + rotation = "0 0 1 162"; + scale = "0.8 0.8 0.8"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "-36 -180 129.537"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "-100 -132 129.584"; + rotation = "-0.0032046 -0.00947315 -0.99995 60.0024"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "-92 -156 129.537"; + rotation = "0 0 -1 63.0001"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + }; + }; + new SimGroup(Addition2PhoenixPlant2) { + + new TSStatic() { + position = "28 604 70.6157"; + rotation = "-0.484867 -0.431141 -0.760934 15.7281"; + scale = "1.4 1.4 1.4"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "-116 276 68.8188"; + rotation = "-0.0326546 0.000847525 0.999466 238.974"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "-36 228 98.2094"; + rotation = "0.0275813 -0.0339577 0.999043 74.0525"; + scale = "0.9 0.9 0.9"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "-156 340 97.9125"; + rotation = "0.0170423 0.0222057 0.999608 225.984"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "172 300 98.0687"; + rotation = "0.00154715 -0.0155108 0.999879 145.004"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "-76 540 129.959"; + rotation = "1 0 0 0"; + scale = "0.8 0.8 0.8"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "-84 524 129.991"; + rotation = "0.00825498 -0.000221404 0.999966 204.999"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "-4 612 70.0532"; + rotation = "0.384825 -0.503595 0.773499 9.04225"; + scale = "0.9 0.9 0.9"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "196 436 68.6469"; + rotation = "0.0175645 0.00169155 0.999844 190.998"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "-76 252 95.8187"; + rotation = "0.082311 -0.0360514 0.995954 218.854"; + scale = "0.8 0.8 0.8"; + shapeName = "porg2.dts"; + }; + }; + new SimGroup(Addition3PhoenixPlant22) { + + new TSStatic() { + position = "156 4 98.1094"; + rotation = "0 0 -1 64.0005"; + scale = "1.2 1.2 1.2"; + shapeName = "porg22.dts"; + }; + new TSStatic() { + position = "36 -116 129.531"; + rotation = "0 0 1 239"; + scale = "1 1 1"; + shapeName = "porg22.dts"; + }; + new TSStatic() { + position = "300 -348 97.125"; + rotation = "0 0 1 191"; + scale = "0.8 0.8 0.8"; + shapeName = "porg22.dts"; + }; + new TSStatic() { + position = "204 4 97.9375"; + rotation = "0 0 -1 91"; + scale = "1.2 1.2 1.2"; + shapeName = "porg22.dts"; + }; + new TSStatic() { + position = "132 -4 67.2343"; + rotation = "0 0 1 141"; + scale = "1.4 1.4 1.4"; + shapeName = "porg22.dts"; + }; + new TSStatic() { + position = "244 -212 98.4843"; + rotation = "0 0 1 184"; + scale = "1.4 1.4 1.4"; + shapeName = "porg22.dts"; + }; + new TSStatic() { + position = "148 -124 67.8125"; + rotation = "0 0 1 198"; + scale = "1.2 1.2 1.2"; + shapeName = "porg22.dts"; + }; + new TSStatic() { + position = "364 -60 68.3594"; + rotation = "0 0 -1 69.0002"; + scale = "1.3 1.3 1.3"; + shapeName = "porg22.dts"; + }; + new TSStatic() { + position = "100 -116 97.125"; + rotation = "0 0 1 227"; + scale = "1.1 1.1 1.1"; + shapeName = "porg22.dts"; + }; + new TSStatic() { + position = "236 -244 68.4531"; + rotation = "0 0 1 194"; + scale = "1.3 1.3 1.3"; + shapeName = "porg22.dts"; + }; + }; + new SimGroup(Addition4PhoenixPlant22) { + + new TSStatic() { + position = "300 -484 97.9375"; + rotation = "0 0 -1 102"; + scale = "1 1 1"; + shapeName = "porg22.dts"; + }; + new TSStatic() { + position = "612 -188 98.5937"; + rotation = "0 0 -1 101"; + scale = "1 1 1"; + shapeName = "porg22.dts"; + }; + new TSStatic() { + position = "588 -236 98.0469"; + rotation = "0 0 -1 58.0005"; + scale = "1.2 1.2 1.2"; + shapeName = "porg22.dts"; + }; + new TSStatic() { + position = "460 -156 98.3437"; + rotation = "0 0 1 39"; + scale = "1.2 1.2 1.2"; + shapeName = "porg22.dts"; + }; + new TSStatic() { + position = "500 -460 97.2031"; + rotation = "0 0 -1 16.9999"; + scale = "1.1 1.1 1.1"; + shapeName = "porg22.dts"; + }; + new TSStatic() { + position = "500 -444 99.2344"; + rotation = "0 0 1 205"; + scale = "1.1 1.1 1.1"; + shapeName = "porg22.dts"; + }; + new TSStatic() { + position = "388 -316 97.9844"; + rotation = "1 0 0 0"; + scale = "0.9 0.9 0.9"; + shapeName = "porg22.dts"; + }; + new TSStatic() { + position = "428 -556 72.4844"; + rotation = "0 0 1 37"; + scale = "1.3 1.3 1.3"; + shapeName = "porg22.dts"; + }; + new TSStatic() { + position = "612 -252 97.8594"; + rotation = "0 0 1 165"; + scale = "1.2 1.2 1.2"; + shapeName = "porg22.dts"; + }; + new TSStatic() { + position = "356 -500 68.9219"; + rotation = "0 0 -1 68.0003"; + scale = "0.9 0.9 0.9"; + shapeName = "porg22.dts"; + }; + }; + new SimGroup(Addition5PhoenixPlant2) { + + new TSStatic() { + position = "324 -196 68.0688"; + rotation = "0.0268162 -0.0773757 -0.996641 118.17"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "428 -404 68.3969"; + rotation = "-0.0703382 -0.0340642 0.996941 150.087"; + scale = "1.4 1.4 1.4"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "468 -508 69.1156"; + rotation = "0.106185 0.238209 -0.965392 23.8013"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "532 -180 98.8187"; + rotation = "0.0190327 -0.0151093 0.999705 152.008"; + scale = "1.3 1.3 1.3"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "588 -532 98.3031"; + rotation = "-0.1528 0.205046 -0.966751 9.30792"; + scale = "1.2 1.2 1.2"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "428 -532 68.4438"; + rotation = "-0.0344495 0.0169882 0.999262 208.979"; + scale = "0.9 0.9 0.9"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "684 -476 98.0844"; + rotation = "0.0244148 -0.0674537 -0.997424 81.1458"; + scale = "1.4 1.4 1.4"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "540 -180 98.6468"; + rotation = "-0.0126604 0.0104385 -0.999865 105.008"; + scale = "1.2 1.2 1.2"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "324 -516 98.1625"; + rotation = "0.0998934 -0.0617606 -0.99308 29.1935"; + scale = "0.9 0.9 0.9"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "668 -180 98.2718"; + rotation = "0.00214308 -0.00552806 -0.999982 115.001"; + scale = "0.9 0.9 0.9"; + shapeName = "porg2.dts"; + }; + }; + new SimGroup(Addition6PhoenixPlant2) { + + new TSStatic() { + position = "852 -828 68.5375"; + rotation = "0.0530827 -0.0082523 -0.998556 100.081"; + scale = "1.1 1.1 1.1"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "748 -580 129.6"; + rotation = "0 0 1 64.9998"; + scale = "1.4 1.4 1.4"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "812 -452 69.4593"; + rotation = "0.0330953 -0.0674867 0.997171 153.073"; + scale = "0.8 0.8 0.8"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "756 -620 129.616"; + rotation = "-0.00977169 0.00346036 0.999946 141.001"; + scale = "1.2 1.2 1.2"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "612 -508 129.912"; + rotation = "0.00205919 -0.0262369 0.999654 163.006"; + scale = "1.2 1.2 1.2"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "828 -580 96.9594"; + rotation = "0.230068 0.124104 0.965229 68.8793"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "868 -644 129.631"; + rotation = "-0.0093644 -0.0085996 -0.999919 58.0039"; + scale = "0.8 0.8 0.8"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "876 -468 68.8656"; + rotation = "-0.0481711 0.0610819 0.99697 83.1723"; + scale = "1.4 1.4 1.4"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "876 -652 129.787"; + rotation = "-0.00488244 0.0260161 0.99965 95.0201"; + scale = "1 1 1"; + shapeName = "porg2.dts"; + }; + new TSStatic() { + position = "836 -804 69.3812"; + rotation = "-0.0502539 0.329154 0.942938 7.4225"; + scale = "1.4 1.4 1.4"; + shapeName = "porg2.dts"; + }; + }; + new SimGroup(Addition7PhoenixPlant22) { + + new TSStatic() { + position = "612 -452 97.6719"; + rotation = "0 0 -1 88"; + scale = "0.8 0.8 0.8"; + shapeName = "porg22.dts"; + }; + new TSStatic() { + position = "740 -436 70.9844"; + rotation = "0 0 1 30"; + scale = "1.2 1.2 1.2"; + shapeName = "porg22.dts"; + }; + new TSStatic() { + position = "668 -564 129.547"; + rotation = "0 0 1 107"; + scale = "0.8 0.8 0.8"; + shapeName = "porg22.dts"; + }; + new TSStatic() { + position = "780 -676 129.516"; + rotation = "0 0 -1 118"; + scale = "1 1 1"; + shapeName = "porg22.dts"; + }; + new TSStatic() { + position = "788 -612 129.703"; + rotation = "0 0 1 210"; + scale = "1.4 1.4 1.4"; + shapeName = "porg22.dts"; + }; + new TSStatic() { + position = "812 -644 129.437"; + rotation = "0 0 1 50"; + scale = "1.1 1.1 1.1"; + shapeName = "porg22.dts"; + }; + new TSStatic() { + position = "868 -668 129.5"; + rotation = "0 0 1 112"; + scale = "1.2 1.2 1.2"; + shapeName = "porg22.dts"; + }; + new TSStatic() { + position = "620 -732 97.5781"; + rotation = "0 0 1 33"; + scale = "0.8 0.8 0.8"; + shapeName = "porg22.dts"; + }; + new TSStatic() { + position = "580 -468 98.4843"; + rotation = "0 0 -1 105"; + scale = "1.3 1.3 1.3"; + shapeName = "porg22.dts"; + }; + new TSStatic() { + position = "708 -748 69.2656"; + rotation = "0 0 1 28"; + scale = "1.4 1.4 1.4"; + shapeName = "porg22.dts"; + }; + }; + }; + new SimGroup(ambient) { + + new AudioEmitter(WindSound) { + position = "34.8209 374.954 100.009"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/sandstorm2.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "100"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + }; + new AudioEmitter(flies1) { + position = "-76.1559 166.457 71.3035"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/fly_swarm.wav"; + useProfileDescription = "0"; + outsideAmbient = "0"; + volume = "0.5"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "60"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + }; + new AudioEmitter(flies2) { + position = "170.379 -338.465 61.9534"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/fly_swarm.wav"; + useProfileDescription = "0"; + outsideAmbient = "0"; + volume = "0.5"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "60"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + }; + new AudioEmitter(sandPatter1) { + position = "333.702 -161.571 72.08"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/sandpatter1.wav"; + useProfileDescription = "0"; + outsideAmbient = "0"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "100"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "30000"; + type = "EffectAudioType"; + }; + new AudioEmitter(sandPatter2) { + position = "640.679 -507.778 104.063"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/sandpatter2. wav"; + useProfileDescription = "0"; + outsideAmbient = "0"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "100"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "30000"; + type = "EffectAudioType"; + }; + new AudioEmitter(sandPatter3) { + position = "5.48026 2.36356 61.6817"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/sandpatter2.wav"; + useProfileDescription = "0"; + outsideAmbient = "0"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "100"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "30000"; + type = "EffectAudioType"; + }; + new AudioEmitter(sandPatter4) { + position = "-119.613 -406.784 72.964"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/sandpatter1.wav"; + useProfileDescription = "0"; + outsideAmbient = "0"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "100"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "30000"; + type = "EffectAudioType"; + }; + new AudioEmitter(sandPatter5) { + position = "335.214 -315.084 70.6655"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/sandpatter2.wav"; + useProfileDescription = "0"; + outsideAmbient = "0"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "100"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "30000"; + type = "EffectAudioType"; + }; + new AudioEmitter(sandPatter6) { + position = "-139.133 -126.389 109.036"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/sandpatter1.wav"; + useProfileDescription = "0"; + outsideAmbient = "0"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "100"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "30000"; + type = "EffectAudioType"; + }; + new AudioEmitter(sandPatter7) { + position = "904.258 -618.315 111.262"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/sandpatter2.wav"; + useProfileDescription = "0"; + outsideAmbient = "0"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "100"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "30000"; + type = "EffectAudioType"; + }; + new AudioEmitter(sandPatter8) { + position = "682.178 -796.078 98.592"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/sandpatter1.wav"; + useProfileDescription = "0"; + outsideAmbient = "0"; + volume = "1"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "100"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "10000"; + maxLoopGap = "30000"; + type = "EffectAudioType"; + }; + }; +}; +//--- OBJECT WRITE END --- + + +exec("scripts/training2.cs"); diff --git a/base/missions/Training3.mis b/base/missions/Training3.mis new file mode 100644 index 0000000..e642a8d --- /dev/null +++ b/base/missions/Training3.mis @@ -0,0 +1,1834 @@ +// MissionTypes = SinglePlayer +// DisplayName = Ranger + +//--- MISSION BRIEFING BEGIN --- +//Captain Kenzie says good things about you, Lone Wolf. We chose you for this mission based on the glowing reports she submitted after the Sehrganda Prime offensive. +// +//After six and a half years, we're back on Ymir. This was our world once, warrior. Before the Hordes slaughtered us. Can you hear the ghosts in the wind? I can. +// +//Alright, here's what you need to know: one of our former bases in the Icefell Range contains critical data in its computer. The Hordes don't know about it, but they guard that base heavily. We need to liberate that data, and I can't tell you why, but it's vital to the war. +// +//Your assignment is to infiltrate the base and reach the command switch. When you touch it and implant the control virus, the base computer will transmit that data to us in a compressed signal burst. +// +//You'll go in with a stealth configuration: Scout armor and cloaking pack. The objective is deep in enemy territory, so we've provided a Shrike for transportation. Take care of it. If it's destroyed, you're finished. +// +//Once you've triggered the data burst, get out. That's all. Good luck. +//--- MISSION BRIEFING END --- + +// BriefingWAV = T3 6 +// Bitmap = trn_3ymir + +//--- MISSION STRING BEGIN --- +//OBJECTIVES: +//Pilot Shrike to enemy base +//Destroy shield generator +//Implant digital virus +//TRAINING: +//Piloting and aerial evasion +//Cloaking pack and base infiltration +//Neutralizing shields +//--- MISSION STRING END --- + +// PlanetName = Ymir, 3947 CE +//--- MISSION BLURB BEGIN --- +//Ymir. Located near the Imperial border, it is a world of salt-rimed mountains and frozen seas. Before the Hordes, it was a Starwolf world. Your home. Now it is a graveyard, and the ghosts of your past cry out for vengeance. +//--- MISSION BLURB END --- + +// Scriptlet +switch($pref::trainingDifficulty){ + case 2: %range = 250; + case 3: %range = 400; + default: %range = 150; +} +error("Effective Turret Range is:" SPC %range); + +datablock SensorData(TrainingLongDetectTurretBaseSensorObj) : TurretBaseSensorObj +{ + detectRadius = %range; +}; + +datablock TurretData(TrainingLongDetectTurret) : TurretBaseLarge +{ + sensorData = TrainingLongDetectTurretBaseSensorObj; + sensorRadius = TrainingLongDetectTurretBaseSensorObj.detectRadius; +}; + +datablock TurretImageData(LongAttackAABarrelLarge) : AABarrelLarge +{ + attackRadius = %range; +}; + +// End Scriptlet + + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + powerCount = "0"; + + new MissionArea(MissionArea) { + area = "-512 56 560 608"; + flightCeiling = "350"; + flightCeilingRange = "50"; + }; + new Sky(Sky) { + position = "0 0 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "400"; + useSkyTextures = "1"; + SkySolidColor = "0.000000 0.000000 0.000000 0.000000"; + fogDistance = "200"; + fogColor = "0.000000 0.000000 0.000000 1.000000"; + fogVolume1 = "0 0 0"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "sky_ice_starrynight.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 0.000000"; + cloudSpeed0 = "0.000000 0.002000"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.200000 0.200000 0.200000 1.000000"; + ambient = "0.400000 0.400000 0.400000 1.000000"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + position = "0 0 0"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/lushdet1"; + terrainFile = "Training3.ter"; + squareSize = "8"; + emptySquares = "1090906 1091162 1091418 1091674 1091930 1092186 568154 437338 437594 437850"; + position = "-1024 -1024 0"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "72"; + cullDensity = "0.1"; + customArea = "-700 -100 900 900"; + coverage = "0"; + GraphFile = "Training3.nav"; + rotation = "0 0 0 0"; + conjoinBowlDev = "20"; + scale = "1 1 1"; + position = "0 0 0 1"; + }; + new SimGroup(Sounds) { + + new AudioEmitter(SnowStormAudio) { + position = "76.5773 198.129 161.579"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/coldwind1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + }; + }; + new SimGroup(Teams) { + + new SimGroup(Team1) { + + new FlyingVehicle(Ride) { + position = "-4013.44 2518.69 213.855"; + rotation = "0 0 1 151.475"; + scale = "1 1 1"; + dataBlock = "ScoutFlyer"; + lockCount = "0"; + homingCount = "0"; + disableMove = "0"; + nextWeaponFire = "2"; + selfPower = "1"; + mountable = "1"; + }; + new SimGroup(DropPoints) { + + new Camera(PlayerDropPoint) { + position = "-4001.6 2505.01 212.961"; + rotation = "0 0 -1 39.7174"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new SimGroup(respawns) { + + new Camera(PlayerDropPoint) { + position = "-4001.6 2505.01 212.961"; + rotation = "0 0 -1 39.7174"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "-153.052 280.829 209.347"; + rotation = "0 0 -1 59.5876"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + }; + }; + }; + new SimGroup(Team2) { + + new SimGroup(DropPoints) { + + new Camera() { + position = "-235.648 314.818 178.35"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + SkillLevel = "0"; + }; + new Camera() { + position = "-241.133 314.76 178.194"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + SkillLevel = "0"; + }; + new Camera() { + position = "-246.241 314.415 177.091"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + SkillLevel = "0"; + }; + new Camera() { + position = "-237.479 321.437 176.646"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + SkillLevel = "0"; + }; + new Camera() { + position = "-241.85 321.633 176.646"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + SkillLevel = "0"; + }; + new Camera() { + position = "-249.402 322.509 178.181"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + SkillLevel = "0"; + }; + }; + new SimGroup(BaseEquipment) { + + new StaticShape(Inventory1) { + position = "-188.988 317.911 198.305"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + }; + new Item(RPA) { + position = "-294.152 365.55 210.992"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "BaseRepair"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + new StaticShape(FF) { + position = "-282.658 303.848 177.273"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Icefell Range Base"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + name = "Icefell Range Base"; + }; + new StaticShape(Inventory2) { + position = "-228.227 299.385 198.268"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + }; + new Item(RPB) { + position = "-290.02 317.262 199.722"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "RepairBase"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + new StaticShape(BaseGen) { + position = "-267.538 366.522 198.264"; + rotation = "-5.43881e-10 -5.22997e-12 1 179.336"; + scale = "1 1 1"; + nameTag = "Main Base Power"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + }; + new InteriorInstance(MainBase) { + position = "-278.161 366.323 200.252"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "sbase3.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_3"; + locked = "true"; + }; + new StaticShape(PitInventory) { + position = "-187.186 353.598 187.307"; + rotation = "0 0 1 42.3989"; + scale = "1 1 1"; + nameTag = "Pit Inventory"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + }; + new Turret(BackEnterSentry) { + position = "-180.397 333.804 216.278"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + }; + }; + new SimGroup(SensorNetGroup) { + + new InteriorInstance() { + position = "-43.1349 -544.735 323.125"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "stowr1.dif"; + showTerrainInside = "0"; + }; + new StaticShape(Team2SensorMediumPulse1) { + position = "-43.1249 -545.017 332.314"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + }; + new InteriorInstance() { + position = "-812.259 260.211 239.046"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "stowr1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "-567.833 810.849 231.992"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "stowr1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "173.403 314.181 289.737"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "stowr1.dif"; + showTerrainInside = "0"; + }; + new StaticShape(Team2SensorMediumPulse2) { + position = "173.33 313.131 298.956"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + }; + new StaticShape(Team2SensorMediumPulse3) { + position = "-812.326 260.044 248.366"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + }; + new StaticShape(Team2SensorMediumPulse4) { + position = "-567.828 810.294 241.179"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + }; + new StaticShape(sensorNetGen) { + position = "-278.4 308.488 187.189"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Sensor Power"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + }; + new StaticShape(Team2SensorMediumPulse2) { + position = "-3445.25 2111.69 302.264"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + }; + new InteriorInstance() { + position = "-3445.18 2112.74 293.045"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "stowr1.dif"; + showTerrainInside = "0"; + }; + new StaticShape(Team2SensorMediumPulse2) { + position = "-2173.34 2264.2 283.85"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + }; + new InteriorInstance() { + position = "-2173.27 2265.25 274.632"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "stowr1.dif"; + showTerrainInside = "0"; + }; + new StaticShape(Team2SensorMediumPulse2) { + position = "-2293.33 1319.24 298.381"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + }; + new InteriorInstance() { + position = "-2293.26 1320.29 289.162"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "stowr1.dif"; + showTerrainInside = "0"; + }; + new StaticShape(Team2SensorMediumPulse2) { + position = "-1383.82 829.65 280.57"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + }; + new InteriorInstance() { + position = "-1383.75 830.7 271.351"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "stowr1.dif"; + showTerrainInside = "0"; + }; + new StaticShape(Team2SensorMediumPulse2) { + position = "-2910.83 718.499 245.302"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + }; + new InteriorInstance() { + position = "-2910.76 719.549 236.083"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "stowr1.dif"; + showTerrainInside = "0"; + }; + new StaticShape(Team2SensorMediumPulse2) { + position = "-2936.09 1343.24 330.32"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + }; + new InteriorInstance() { + position = "-2936.02 1344.29 321.101"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "stowr1.dif"; + showTerrainInside = "0"; + }; + new StaticShape(Team2SensorMediumPulse2) { + position = "-1873.16 312.09 302.874"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + }; + new InteriorInstance() { + position = "-1873.09 313.14 293.655"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "stowr1.dif"; + showTerrainInside = "0"; + }; + new StaticShape(Team2SensorMediumPulse2) { + position = "-1187.35 1527.94 288.045"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + }; + new InteriorInstance() { + position = "-1187.28 1528.99 278.826"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "stowr1.dif"; + showTerrainInside = "0"; + }; + new StaticShape(Team2SensorMediumPulse2) { + position = "-2935.86 -1.23096 270.229"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SensorMediumPulse"; + lockCount = "0"; + homingCount = "0"; + }; + new InteriorInstance() { + position = "-2935.78 -0.180976 261.01"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "stowr1.dif"; + showTerrainInside = "0"; + }; + }; + new SimGroup(TurretDefenses) { + + new StaticShape(AATurretGen) { + position = "-267.711 354.064 198.147"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "AntiAircraft Turret Power"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-3349.1 2517.45 234.155"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-3349.63 2517.38 260.233"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new Turret(AADefenseTurret) { + position = "-3622.24 2127.38 205.299"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-3621.71 2127.45 179.221"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-3576.78 1631.16 256.434"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-3576.25 1631.23 230.356"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-3668.77 1165.57 247.692"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-3669.3 1165.5 273.77"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-3234.15 1532.58 234.171"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-3234.68 1532.51 260.25"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-3103.71 1943.79 252.701"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-3104.24 1943.72 278.779"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-2610.91 2246.41 219.861"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-2611.44 2246.34 245.939"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-2159.75 1983.3 282.145"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-2160.28 1983.23 308.223"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-1698.7 2080.86 242.957"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-1699.23 2080.79 269.035"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-2030.84 2504.33 245.144"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-2031.37 2504.26 271.222"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new Turret(AADefenseTurret) { + position = "-2089.87 1504.58 305.657"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-2089.34 1504.65 279.579"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-2341.63 1087.95 245.045"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-2341.1 1088.02 218.967"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-2775.83 972.91 274.215"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-2775.3 972.98 248.137"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-3365.76 943.355 238.893"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-3365.23 943.425 212.815"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-3119.93 785.248 201.854"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-3119.4 785.318 175.776"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-3966.9 671.47 221.159"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-3966.37 671.54 195.081"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-3924.86 310.697 272.862"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-3924.33 310.767 246.784"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-1907.2 1247.26 260.009"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-1906.67 1247.33 233.931"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-2637.77 1382.97 205.406"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-2637.24 1383.04 179.328"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-2384.89 579.487 301.086"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-2384.36 579.557 275.008"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-2791.09 666.781 303.685"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-2790.56 666.851 277.607"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-2151.5 -63.1723 308.913"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-2150.97 -63.1022 282.835"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-1528.48 1631.8 256.752"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-1527.95 1631.87 230.674"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-1621.15 1154.18 273.708"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-1620.62 1154.25 247.63"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-1320.34 943.652 238.95"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-1319.81 943.722 212.872"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-1492.76 495.482 214.537"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-1492.23 495.552 188.459"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-1914.56 668.429 219.126"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-1914.03 668.499 195.048"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-2027.06 457.261 272.483"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-2026.53 457.331 246.405"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-2603.75 198.023 246.868"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-2603.22 198.093 220.79"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-1712.6 -125.767 302.531"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-1712.07 -125.697 276.453"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-1061.06 -104.149 277.923"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-1060.53 -104.079 251.845"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-743.747 664.876 304.165"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-743.217 664.947 278.087"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-360.155 910.456 247.369"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-359.625 910.526 221.291"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-1399.21 1397.3 255.843"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-1398.68 1397.37 229.765"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "40.2422 463.441 254.447"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "40.7723 463.511 228.369"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-126.279 -83.08 297.376"; + rotation = "0 0 1 221.735"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-126.58 -83.5219 271.298"; + rotation = "0 0 1 221.735"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-621.788 103.78 215.865"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-621.258 103.85 189.787"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-42.0873 1502.99 305.468"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-41.5573 1503.06 279.39"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-416.258 1704.29 271.704"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-415.728 1704.36 245.626"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + new Turret(AADefenseTurret) { + position = "-895.84 1340.35 303.369"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "TrainingLongDetectTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "LongAttackAABarrelLarge"; + }; + new InteriorInstance(SpikedTurretPlatform) { + position = "-895.31 1340.42 277.291"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "smisca.dif"; + showTerrainInside = "0"; + }; + }; + new SimGroup(Prison) { + + new ForceFieldBare(Shield) { + position = "-281.349 319.209 175.191"; + rotation = "1 0 0 0"; + scale = "9.18317 0.2 10.9174"; + nameTag = "Prison"; + dataBlock = "defaultTeamSlowFieldBare"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + new StaticShape(PrisonGen) { + position = "-250.545 370.018 177.201"; + rotation = "0 0 -1 90.1369"; + scale = "1 1 1"; + nameTag = "Forcefield Power"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + }; + }; + new SimGroup(AIObjectives) { + + new AIObjective(AIORepairObject) { + position = "-188.988 317.911 199.871"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the Station Inventory1"; + targetObject = "Inventory1"; + targetClientId = "-1"; + targetObjectId = "4401"; + location = "-188.988 317.911 199.871"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODefendLocation) { + position = "-277.293 314.923 176.507"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the flipflop"; + targetObject = "FF"; + targetClientId = "-1"; + targetObjectId = "4404"; + location = "-277.293 314.923 176.507"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIOTouchObject) { + position = "-282.658 303.848 178.907"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Capture the FF"; + mode = "TouchFlipFlop"; + targetObject = "FF"; + targetClientId = "-1"; + targetObjectId = "4404"; + location = "-282.658 303.848 178.907"; + weightLevel1 = "4200"; + weightLevel2 = "4200"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "LIGHT"; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "-278.135 306.949 188.641"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the sensorNetGen"; + targetObject = "sensorNetGen"; + targetClientId = "-1"; + targetObjectId = "4422"; + location = "-278.135 306.949 188.641"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "-267.825 368.458 199.716"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the BaseGen"; + targetObject = "BaseGen"; + targetClientId = "-1"; + targetObjectId = "4408"; + location = "-267.825 368.458 199.716"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODefendLocation) { + position = "-289.579 358.93 199.916"; + rotation = "0 0 1 139.411"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the upstairs generatorS"; + targetObject = "BaseGen"; + targetClientId = "-1"; + targetObjectId = "4408"; + location = "-289.579 358.93 199.916"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODefendLocation) { + position = "-255.042 385.99 176.653"; + rotation = "0 0 1 203.973"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the PrisonGen"; + targetObject = "PrisonGen"; + targetClientId = "-1"; + targetObjectId = "4527"; + location = "-255.042 385.99 176.653"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "-248.607 370.487 178.853"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the PrisonGen"; + targetObject = "PrisonGen"; + targetClientId = "-1"; + targetObjectId = "4527"; + location = "-248.607 370.487 178.853"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "-267.446 352.125 199.799"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the AATurretGen"; + targetObject = "AATurretGen"; + targetClientId = "-1"; + targetObjectId = "4442"; + location = "-267.446 352.125 199.799"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODefendLocation) { + position = "-278.803 317.805 188.641"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the sensorNetGen"; + targetObject = "sensorNetGen"; + targetClientId = "-1"; + targetObjectId = "4422"; + location = "-278.803 317.805 188.641"; + weightLevel1 = "3200"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "LightShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODefendLocation) { + position = "-254.386 333.301 210.776"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend Chute"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-254.386 333.301 210.776"; + weightLevel1 = "3150"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "0"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new SimGroup(Deployment) { + + new AIObjective(AIODeployEquipment) { + position = "-289.513 345.671 277.281"; + rotation = "0 0 1 221.344"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy Inventory Station"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-289.513 345.671 277.281"; + weightLevel1 = "4100"; + weightLevel2 = "3770"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "InventoryDeployable"; + buyEquipmentSet = "MediumInventorySet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + group = "4540"; + }; + new AIObjective(AIODeployEquipment) { + position = "-278.753 362.48 255.923"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-278.753 362.48 255.923"; + weightLevel1 = "4100"; + weightLevel2 = "3770"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + group = "4540"; + }; + new AIObjective(AIODeployEquipment) { + position = "-267.558 378.071 176.158"; + rotation = "0 0 1 165.194"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-267.558 378.071 176.158"; + weightLevel1 = "4100"; + weightLevel2 = "3770"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + group = "4540"; + }; + new AIObjective(AIODeployEquipment) { + position = "-196.592 314.099 199.082"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-196.592 314.099 199.082"; + weightLevel1 = "4100"; + weightLevel2 = "3770"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + group = "4540"; + }; + new AIObjective(AIODeployEquipment) { + position = "-277.563 336.008 210.079"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-277.563 336.008 210.079"; + weightLevel1 = "4100"; + weightLevel2 = "3770"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + group = "4540"; + }; + }; + new SimGroup(MedDeploy) { + + new AIObjective(AIODeployEquipment) { + position = "-196.342 304.56 200.388"; + rotation = "0.00104231 8.21109e-07 0.999999 179.348"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy door motion sensor"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-196.342 304.56 200.388"; + weightLevel1 = "2800"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "MotionSensorDeployable"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + group = "4546"; + }; + new AIObjective(AIODeployEquipment) { + position = "-226.633 319.949 233.33"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-226.633 319.949 233.33"; + weightLevel1 = "2800"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + group = "4546"; + }; + new AIObjective(AIODeployEquipment) { + position = "-307.638 352.106 200.479"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy outdoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-307.638 352.106 200.479"; + weightLevel1 = "2800"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretOutdoorDeployable"; + buyEquipmentSet = "MediumOutdoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + group = "4546"; + }; + new AIObjective(AIODeployEquipment) { + position = "-281.838 380.106 177.385"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy basement motion sensor"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-281.838 380.106 177.385"; + weightLevel1 = "2800"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "MotionSensorDeployable"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + group = "4546"; + }; + new AIObjective(AIODeployEquipment) { + position = "-286.104 358.239 199.251"; + rotation = "0 0 1 135.218"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-286.104 358.239 199.251"; + weightLevel1 = "2800"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + group = "4546"; + }; + new AIObjective(AIODeployEquipment) { + position = "-274.223 301.05 177.916"; + rotation = "0 0 1 129.488"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy Inventory Station"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-274.223 301.05 177.916"; + weightLevel1 = "2800"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "InventoryDeployable"; + buyEquipmentSet = "MediumInventorySet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + group = "4546"; + }; + }; + }; + new SimGroup(TeamDrops) { + + new SpawnSphere() { + position = "-237.548 329.033 226.174"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "70"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "100"; + }; + }; + }; + }; +}; +//--- OBJECT WRITE END --- + +exec("scripts/training3.cs"); diff --git a/base/missions/Training4.mis b/base/missions/Training4.mis new file mode 100644 index 0000000..72ef134 --- /dev/null +++ b/base/missions/Training4.mis @@ -0,0 +1,1108 @@ +// MissionTypes = SinglePlayer +// DisplayName = Seargent + +//--- MISSION BRIEFING BEGIN --- +//Welcome, Sergeant. We have another tricky assignment for you. Captain Kenzie requested you lead the field operation, and I'm sure you're the right man for the mission. +// +//Ever since we landed on Bloodjewel, the Hordes have stayed one step ahead of us. They've used the old Blood Eagle bases and bunkers to resupply and keep their reavers combat-ready, even though they've been on the move constantly. +// +//There's a large Derm force moving through the Nagakhun Mountains. We think they're headed for a high-altitude base to pick up inventory for an assault on Menabar Holdfast and the starport located there. +// +//Your job is to take a team in and hold the base until we can divert a larger force to reinforce you. We're stretched thin right now locking down the southern hemisphere, so I'm afraid you won't have much to work with. +// +//We're sending you in with Juggernaut armor, but you can switch loadouts once you hit the base. The base may be damaged, so be ready to make repairs. +// +//Watch the high altitude if you pop your suit. Air's pretty thin up there. Dismissed. +//--- MISSION BRIEFING END --- + +// BriefingWAV = T4 6 +// Bitmap = trn_4bloodjewel + +//--- MISSION STRING BEGIN --- +//OBJECTIVES: +//Prepare base defense +//Repel enemy assault +//Coordinate/command base defense +//TRAINING: +//Command Circuit +//Base defense +//Turret and equipment deployment +//--- MISSION STRING END --- + +// PlanetName = Bloodjewel, 3949 CE +//--- MISSION BLURB BEGIN --- +//The Pact has won Bloodjewel after a bloody battle. Now BioDerm survivors seek to escape and reinforce the Kepler system, where Pact and Horde forces are mired in combat. Your job: Cut off the escape route. Contain the Derms. Then finish them. +//--- MISSION BLURB END --- + +//scriptlet +echo(%initialBarrel = ($pref::trainingDifficulty < 2 ? "PlasmaBarrelLarge" : "AABarrelLarge")); + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + powerCount = "0"; + + new MissionArea(MissionArea) { + area = "0 0 672 576"; + flightCeiling = "2000"; + flightCeilingRange = "50"; + }; + new Sky(Sky) { + position = "0 0 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "900"; + useSkyTextures = "1"; + SkySolidColor = "0.390000 0.390000 0.390000 1.000000"; + fogDistance = "900"; + fogColor = "0.600000 0.600000 0.600000 1.000000"; + fogVolume1 = "400 40 65"; + fogVolume2 = "900 65 250"; + fogVolume3 = "0 0 0"; + materialList = "Lush_l4.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + cloudSpeed0 = "0.000500 0.000500"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.600000 0.600000 0.600000 1.000000"; + ambient = "0.600000 0.600000 0.600000 1.000000"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + position = "0 0 0"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/snowdet1"; + terrainFile = "Training4.ter"; + squareSize = "8"; + position = "-1024 -1024 0"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "50"; + cullDensity = "0.1"; + customArea = "0 0 0 0"; + rotation = "0 0 0 0"; + conjoinBowlDev = "20"; + scale = "1 1 1"; + GraphFile = "Training4.nav"; + coverage = "0"; + position = "0 0 0 1"; + }; + new SimGroup(Teams) { + + new SimGroup(Team1) { + + new SimGroup(DropPoints) { + + new Camera() { + position = "577.776 432.542 85.5609"; + rotation = "0 0 -1 89.5644"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "590.478 432.08 87.6649"; + rotation = "0 0 -1 90.7104"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "585.466 425.069 84.7949"; + rotation = "0 0 -1 97.0129"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "575.066 425.069 84.7949"; + rotation = "0 0 -1 97.0129"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "580.266 416.881 85.6649"; + rotation = "0 0 -1 90.7104"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "567.376 432.542 85.5609"; + rotation = "0 0 -1 89.5644"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "585.466 400.069 84.7949"; + rotation = "0 0 -1 97.0129"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "569.508 420.621 85.6649"; + rotation = "0 0 -1 90.7104"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "577.776 407.542 85.5609"; + rotation = "0 0 -1 89.5644"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + }; + new InteriorInstance(SensorTower1) { + position = "47.7826 143.791 144.827"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bplat6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance(SensorTower2) { + position = "485.669 447.5 116.1"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "bplat6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new SimGroup(StrongHold) { + + new Item() { + position = "368.782 293.976 63.3423"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + new SimGroup(ForceFieldPower) { + + new ForceFieldBare(GenForceField) { + position = "367.066 291.499 72.1728"; + rotation = "0 0 -1 8.59448"; + scale = "0.2 4.05507 5.8207"; + dataBlock = "defaultTeamSlowFieldBare"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + new StaticShape(Team1generatorLarge1) { + position = "383.872 295.13 93.18"; + rotation = "0 0 1 83.0789"; + scale = "1 1 1"; + nameTag = "Forcefield"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + }; + }; + new SimGroup(BasePower) { + + new InteriorInstance(base) { + position = "377.319 294.829 67.1425"; + rotation = "0 0 -1 97.4028"; + scale = "1 1 1"; + interiorFile = "bbase6.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_Pulse_1"; + locked = "true"; + }; + new StaticShape(Team1SensorLargePulse1) { + position = "47.9218 143.781 145.73"; + rotation = "0 0 -1 117.066"; + scale = "1 1 1"; + nameTag = "Tycho"; + dataBlock = "SensorLargePulse"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team1SensorLargePulse2) { + position = "485.692 447.481 117"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Gabriel"; + dataBlock = "SensorLargePulse"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Turret(Team1TurretBaseLarge1) { + position = "348.044 291.16 93.2164"; + rotation = "0 0 -1 98.7312"; + scale = "1 1 1"; + nameTag = "Deck Defense"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = %initialBarrel; + }; + new StaticShape(Team1StationInventory1) { + position = "387.215 309.333 55.3125"; + rotation = "0 0 1 173.033"; + scale = "1 1 1"; + nameTag = "Alpha"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + }; + new StaticShape(BaseGen) { + position = "354.834 292.01 72.3366"; + rotation = "1.76637e-09 -7.32103e-11 1 83.6518"; + scale = "1 1 1"; + nameTag = "Primary"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + }; + new StaticShape(Team1StationInventory2) { + position = "390.662 283.578 55.1062"; + rotation = "0 0 -1 6.48525"; + scale = "1 1 1"; + nameTag = "Bravo"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + }; + }; + }; + new SimGroup(spawnSpheres) { + + new SpawnSphere() { + position = "388.842 296.322 53"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "60"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "100"; + }; + }; + new SimGroup(AIObjectives) { + + new AIObjective(AIORepairObject) { + position = "381.979 294.634 94.6233"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the FFGen"; + targetObject = "Team1generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3274"; + location = "381.979 294.634 94.6233"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "390.662 283.578 56.672"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3283"; + location = "390.662 283.578 56.672"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODefendLocation) { + position = "360.961 292.121 73.7799"; + rotation = "0 0 1 76.7763"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the MainGen"; + targetObject = "BaseGen"; + targetClientId = "-1"; + targetObjectId = "3282"; + location = "352.936 291.533 73.7799"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "347.373 290.83 94.9203"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the TurretBaseLarge"; + targetObject = "Team1TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3279"; + location = "347.373 290.83 94.9203"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "387.215 309.333 56.8783"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "Team1StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3280"; + location = "387.215 309.333 56.8783"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "352.936 291.533 73.7799"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the Main Gen"; + targetObject = "BaseGen"; + targetClientId = "-1"; + targetObjectId = "3282"; + location = "352.936 291.533 73.7799"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new SimGroup(FFGenGuard) { + new AIObjective(AIODeployEquipment) { + position = "372.883 309.582 93.6366"; + rotation = "0 0 -1 42.57"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy Upstairs Station"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "372.883 309.582 93.6366"; + weightLevel1 = "4000"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "InventoryDeployable"; + buyEquipmentSet = "HeavyInventorySet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + }; + new AIObjective(AIODefendLocation) { + position = "375.786 293.82 94.6233"; + rotation = "0 0 -1 98.7312"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the FFGen"; + targetObject = "Team1generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3274"; + location = "375.786 293.82 94.6233"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + }; + }; + }; + new SimGroup(Team2) { + + new SimGroup(DropPoints) { + + new Camera() { + position = "17.1155 -199.002 119.456"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "149.348 -178.421 120.616"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "372.082 -116.878 140.086"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "716.005 -161.642 158.447"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "1032.85 264.772 139.657"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "1054.52 1029.11 65.1272"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "1038.72 1040.84 59.3357"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "1099.44 1107.25 59.7691"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "463.932 1294.07 61.8738"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "42.1104 997.543 63.8177"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "-287.513 761.042 74.5641"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "-505.899 517.419 57.2017"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "-505.018 531.174 55.2137"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "-466.152 -1.8818 68.1284"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "-42.6528 -505.846 62.2715"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + }; + new SimGroup(AIObjectives) { + + new SimGroup(GenAttack) { + new AIObjective(AIOAttackObject) { + position = "381.979 294.634 94.6233"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the FFGen"; + targetObject = "Team1generatorLarge1"; + targetClientId = "-1"; + targetObjectId = "3274"; + location = "381.979 294.634 94.6233"; + weightLevel1 = "3400"; + weightLevel2 = "2000"; + weightLevel3 = "1500"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIOAttackObject) { + position = "352.936 291.533 73.7799"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the MainGen"; + targetObject = "BaseGen"; + targetClientId = "-1"; + targetObjectId = "3282"; + location = "352.936 291.533 73.7799"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "1000"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + }; + new AIObjective(AIOMortarObject) { + position = "47.9056 143.773 150.005"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the SensorLargePulse"; + targetObject = "Team1SensorLargePulse1"; + targetClientId = "-1"; + targetObjectId = "3277"; + location = "47.9056 143.773 150.005"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIOMortarObject) { + position = "485.692 447.499 121.275"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the SensorLargePulse"; + targetObject = "Team1SensorLargePulse2"; + targetClientId = "-1"; + targetObjectId = "3278"; + location = "485.692 447.499 121.275"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIOMortarObject) { + position = "347.373 290.83 94.9203"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Mortar the TurretBaseLarge"; + targetObject = "Team1TurretBaseLarge1"; + targetClientId = "-1"; + targetObjectId = "3279"; + location = "347.373 290.83 94.9203"; + weightLevel1 = "3400"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIOAttackObject) { + position = "387.215 309.333 56.8783"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory1"; + targetClientId = "-1"; + targetObjectId = "3280"; + location = "387.215 309.333 56.8783"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIOAttackObject) { + position = "390.662 283.578 56.672"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Attack the StationInventory"; + targetObject = "Team1StationInventory2"; + targetClientId = "-1"; + targetObjectId = "3283"; + location = "390.662 283.578 56.672"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODefendLocation) { + position = "357.692 291.869 56.0051"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Offensive Entry D"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "357.692 291.869 57.0051"; + weightLevel1 = "1000"; + weightLevel2 = "800"; + weightLevel3 = "400"; + weightLevel4 = "100"; + offense = "0"; + defense = "0"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + }; + }; + }; + }; + new SimGroup(Sounds) { + + new AudioEmitter(Wind) { + position = "34.2619 29.2381 137.226"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/howlingwind1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + }; + }; + new SimGroup(RandomOrganics) { + + new SimGroup(Addition7belgtree16) { + + new TSStatic() { + position = "484 532 47"; + rotation = "0 0 -1 62.0003"; + scale = "1.1 1.1 1.1"; + shapeName = "borg16.dts"; + }; + new TSStatic() { + position = "508 604 77.0938"; + rotation = "0 0 1 26"; + scale = "0.8 0.8 0.8"; + shapeName = "borg16.dts"; + }; + new TSStatic() { + position = "500 612 79.4532"; + rotation = "0 0 -1 29.9998"; + scale = "1.1 1.1 1.1"; + shapeName = "borg16.dts"; + }; + new TSStatic() { + position = "556 500 47"; + rotation = "0 0 1 140"; + scale = "1.2 1.2 1.2"; + shapeName = "borg16.dts"; + }; + new TSStatic() { + position = "500 516 47"; + rotation = "0 0 -1 115"; + scale = "0.9 0.9 0.9"; + shapeName = "borg16.dts"; + }; + }; + new SimGroup(Addition6BELgTree19) { + + new TSStatic() { + position = "316 52 59.8594"; + rotation = "0 0 -1 102"; + scale = "0.9 0.9 0.9"; + shapeName = "borg19.dts"; + }; + new TSStatic() { + position = "200.009 250.632 47"; + rotation = "0 0 1 16"; + scale = "0.9 0.9 0.9"; + shapeName = "borg19.dts"; + }; + new TSStatic() { + position = "252 132 47"; + rotation = "0 0 1 46"; + scale = "1.1 1.1 1.1"; + shapeName = "borg19.dts"; + }; + new TSStatic() { + position = "228 28 47.4687"; + rotation = "0 0 1 220"; + scale = "1.1 1.1 1.1"; + shapeName = "borg19.dts"; + }; + new TSStatic() { + position = "212 52 56.8437"; + rotation = "0 0 1 190"; + scale = "1.3 1.3 1.3"; + shapeName = "borg19.dts"; + }; + }; + new SimGroup(Addition3BELgTree18) { + + new TSStatic() { + position = "540 308 69.875"; + rotation = "0 0 1 55"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "596.064 419.958 82.9219"; + rotation = "0 0 -1 11.9998"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "308 76 56.125"; + rotation = "0 0 1 114"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "556 180 72.8594"; + rotation = "0 0 1 3.99996"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "628 412 88.7188"; + rotation = "0 0 1 189"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "156 532 87.0938"; + rotation = "0 0 1 70"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "444 188 81.4688"; + rotation = "0 0 1 153"; + scale = "0.9 0.9 0.9"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "284 324 54.5625"; + rotation = "0 0 1 67.9998"; + scale = "1.4 1.4 1.4"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "508 372 73.0781"; + rotation = "0 0 1 204"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "588 180 70.3906"; + rotation = "0 0 1 235"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "364 356 53.5156"; + rotation = "0 0 1 3.99996"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "164 588 100.875"; + rotation = "0 0 1 229"; + scale = "1.5 1.5 1.5"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "588 348 71.6406"; + rotation = "0 0 1 134"; + scale = "0.8 0.8 0.8"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "196 188 47"; + rotation = "0 0 1 90.0002"; + scale = "1 1 1"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "220 220 47"; + rotation = "0 0 1 111"; + scale = "1.4 1.4 1.4"; + shapeName = "borg18.dts"; + }; + new TSStatic() { + position = "357.282 217.362 57.8862"; + rotation = "0 0 1 44"; + scale = "1.60141 1.57006 1.93285"; + shapeName = "borg18.dts"; + }; + }; + new SimGroup(Addition5BELgTree19) { + + new TSStatic() { + position = "12 244 48.2032"; + rotation = "0 0 -1 46.0002"; + scale = "1.4 1.4 1.4"; + shapeName = "borg19.dts"; + }; + new TSStatic() { + position = "4 316 47.7813"; + rotation = "0 0 1 164"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + }; + new TSStatic() { + position = "76 268 47"; + rotation = "0 0 1 132"; + scale = "1.5 1.5 1.5"; + shapeName = "borg19.dts"; + }; + new TSStatic() { + position = "36 308 47"; + rotation = "0 0 1 67.9998"; + scale = "1.4 1.4 1.4"; + shapeName = "borg19.dts"; + }; + new TSStatic() { + position = "28 308 47"; + rotation = "0 0 1 28"; + scale = "1 1 1"; + shapeName = "borg19.dts"; + }; + }; + }; + new SimGroup(RandomRocks) { + + new SimGroup(Addition4brock7) { + + new InteriorInstance() { + position = "165.815 249.477 50.3257"; + rotation = "0 0 1 106.62"; + scale = "1 1 1"; + interiorFile = "brock7.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "180.264 163.324 50"; + rotation = "0 0 1 4.74728"; + scale = "1 1 1"; + interiorFile = "brock7.dif"; + showTerrainInside = "0"; + }; + }; + }; +}; +//--- OBJECT WRITE END --- + +exec("scripts/training4.cs"); diff --git a/base/missions/Training5.mis b/base/missions/Training5.mis new file mode 100644 index 0000000..2494e2f --- /dev/null +++ b/base/missions/Training5.mis @@ -0,0 +1,3854 @@ +// MissionTypes = SinglePlayer +// DisplayName = Lieutenant + +//--- MISSION BRIEFING BEGIN --- +//Lieutenant. Thank you for volunteering on such short notice. Captain Kenzie will be working with you again. I'll tell you straight out: this may be a suicide mission. +// +//The Hordes took Shi-Draconis Alpha from the Diamond Sword two years ago. One particular base turned out to be a strategic network center with highly advanced strategic communications and computer assets. It now coordinates Horde operations on this continent. +// +//This base must be destroyed and soon, but it's well-protected. The Sworders immunized the base itself from any control virus, but the Kenshin have informed me that there is a way to destroy it. +// +//One of the towers on the base periphery contains a forcefield switch that's not immune to viral control conversion. Punch a hole in their sensor net, and seize the tower. After you hit the switch, you will be able to enter the main base. +// +//We'll equip you with a pack-mounted satchel charge. If you deploy it at the right location in the heart of the base, the explosion will cause a chain reaction and rupture the antimatter reactors the Sworders used for this base. +// +//Captain Kenzie will guide you in via the CC. May the Great Wolf be with you. Dismissed. +//--- MISSION BRIEFING END --- + +// BriefingWAV = T5 6 +// Bitmap = trn_5draconis + +//--- MISSION STRING BEGIN --- +//OBJECTIVES: +//Evade/Destroy defensive perimeter +//Penetrate enemy base +//Destroy key enemy generator +//TRAINING: +//Hostile Environment +//Satchel charge +//Base Assault +//--- MISSION STRING END --- + +// PlanetName = Shi-Draconis Alpha, 3950 CE +//--- MISSION BLURB BEGIN --- +//A harsh, barely habitable world, Shi-Draconis Alpha holds the key to Pact victory. Its capture would utterly divide the Hordes, but the planet is heavily fortified and well defended. The light at the end of the tunnel may be the onrushing blaze of plasma. +//--- MISSION BLURB END --- + +//scriptlet +echo("InitialBarrel =" SPC %initialBarrel = (%skill < 3 ? "MissileBarrelLarge" : "PlasmaBarrelLarge")); + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + powerCount = "0"; + + new MissionArea(MissionArea) { + area = "-760 -688 1664 1472"; + flightCeiling = "2000"; + flightCeilingRange = "50"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "1 1 1 1"; + ambient = "0.7 0.7 0.7 1.000000"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + position = "-1024 -1024 0"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/lavadet1"; + terrainFile = "Training5.ter"; + squareSize = "8"; + emptySquares = "217661 217676 86852 152390 87108 152646 218429 218444"; + position = "-1024 -1024 0"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "67"; + cullDensity = "0.3"; + customArea = "-776 -560 480 496"; + rotation = "0 0 0 0"; + scale = "1 1 1"; + coverage = "0"; + position = "0 0 0 1"; + GraphFile = "Training5.nav"; + conjoinBowlDev = "20"; + }; + new Sky(Sky) { + position = "692 -352 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "550"; + useSkyTextures = "1"; + SkySolidColor = "0.300000 0.100000 0.000000 0.800000"; + fogDistance = "250"; + fogColor = "0.300000 0.100000 0.000000 0.800000"; + fogVolume1 = "100 0 85"; + fogVolume2 = "600 85 270"; + fogVolume3 = "0 0 0"; + materialList = "sky_lava_starrynight.dml"; + windVelocity = "1 0 0"; + windEffectPrecipitation = "0"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 0.000000"; + locked = "true"; + }; + new WaterBlock(Lava) { + position = "-224 -264 93.1568"; + rotation = "1 0 0 0"; + scale = "768 608 27.0092"; + liquidType = "Lava"; + density = "1"; + viscosity = "15"; + waveMagnitude = "1"; + surfaceTexture = "LiquidTiles/Lava"; + surfaceOpacity = "1"; + envMapTexture = "lava/skies/lava_starrynite_emap"; + envMapIntensity = "0.2"; + submergeTexture[0] = "special/lavadeath_1"; + submergeTexture[1] = "special/lavadeath_2"; + removeWetEdges = "1"; + locked = "true"; + }; + new SimGroup(Environment) { + + new ParticleEmissionDummy(LavaSmoke) { + position = "-462.4 -366.791 5.12867"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "defaultEmissionDummy"; + emitter = "BeforeT5"; + //emitter = "AfterT5"; + velocity = "1"; + }; + new AudioEmitter(SmokeSound) { + position = "-462.61 -365.42 4.67642"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavahiss.wav"; + useProfileDescription = "0"; + outsideAmbient = "0"; + volume = "0.8"; + isLooping = "1"; + is3D = "1"; + minDistance = "20"; + maxDistance = "120"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + }; + new AudioEmitter(Outside1) { + position = "266.262 824.24 137.226"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/lavamellow1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.4"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + }; + new AudioEmitter(Outside2) { + position = "266.262 824.24 137.226"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/gravel3.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.1"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "4000"; + maxLoopGap = "15000"; + type = "EffectAudioType"; + }; + new StaticShape(Genhonor) { + position = "-431.785 -366.853 38.3577"; + rotation = "0 0 1 89.3814"; + scale = "1 1 1"; + dataBlock = "Banner_Honor"; + lockCount = "0"; + homingCount = "0"; + }; + new StaticShape(Genstrength) { + position = "-463.154 -398.109 38.4185"; + rotation = "0 0 1 181.055"; + scale = "1 1 1"; + dataBlock = "Banner_Strength"; + lockCount = "0"; + homingCount = "0"; + }; + new StaticShape(GenUnity) { + position = "-494.404 -366.856 38.1826"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + dataBlock = "Banner_Unity"; + lockCount = "0"; + homingCount = "0"; + }; + new StaticShape(DoorHonor) { + position = "-378.978 -350.28 115"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + dataBlock = "Banner_Honor"; + lockCount = "0"; + homingCount = "0"; + }; + new StaticShape(DoorUnity) { + position = "-547.33 -352.238 115"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "Banner_Unity"; + lockCount = "0"; + homingCount = "0"; + }; + new StaticShape(DoorStrength) { + position = "-462.751 -380.033 115"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Banner_Strength"; + lockCount = "0"; + homingCount = "0"; + }; + new StaticShape(WallHonor) { + position = "-372.568 -366.947 20.2877"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + dataBlock = "Banner_Honor"; + lockCount = "0"; + homingCount = "0"; + }; + new StaticShape(WallUnity) { + position = "-552.788 -366.854 20.8502"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "Banner_Unity"; + lockCount = "0"; + homingCount = "0"; + }; + new StaticShape(WallStrength) { + position = "-463.23 -399.018 35.4212"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Banner_Strength"; + lockCount = "0"; + homingCount = "0"; + }; + }; + new SimGroup(Teams) { + + new SimGroup(Team1) { + + new SimGroup(DropPoints) { + + new Camera(DP) { + position = "770.993 537.509 207.952"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new SimGroup(respawns) { + + new Camera(DP) { + position = "770.993 537.509 207.952"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera(InsideTower) { + position = "100.907 -4.53543 165.659"; + rotation = "0 0 1 114.592"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera(OutsideBase) { + position = "-475.223 -534.282 132.657"; + rotation = "0 0 -1 3.62027"; + scale = "1 1 0.867851"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera(GenRoom) { + position = "-501.5 -366.1 46.1"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + }; + }; + new SimGroup(base) { + + new StaticShape(station2) { + position = "785.587 532.538 206.108"; + rotation = "0.00499991 0.00471232 0.999976 93.3935"; + scale = "1 1 1"; + nameTag = "Tower Inventory"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "false"; + }; + new StaticShape(Station1) { + position = "786.326 543.704 206.114"; + rotation = "0 0 1 93.3922"; + scale = "1 1 1"; + nameTag = "Tower Inventory"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "false"; + }; + new StaticShape(TowerPower) { + position = "789.671 538.05 169.13"; + rotation = "0 0 1 92.6372"; + scale = "1 1 1"; + nameTag = "South Tower"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "false"; + }; + new InteriorInstance(DSTower) { + position = "782.299 538.347 205.138"; + rotation = "-0 0 -1 86.6992"; + scale = "1 1 1"; + interiorFile = "dtowr4.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_1"; + locked = "false"; + }; + }; + }; + new SimGroup(Team2) { + + new SimGroup(BasePower) { + + new SimGroup(Base) { + + new InteriorInstance(DBase2) { + position = "-463.118 -366.83 17.0706"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dbase2.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_3"; + locked = "true"; + }; + new StaticShape(ObjectiveGen1) { + position = "-460.757 -348.913 6.0481"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "Secondary Reactor"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + }; + }; + new StaticShape(InventoryStation5) { + position = "-387.192 -440.08 14.1387"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + }; + new StaticShape(InventoryStation1) { + position = "-387.019 -421.21 14.1507"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + }; + new StaticShape(InventoryStation2) { + position = "-402.649 -440.174 14.1592"; + rotation = "0 0 -1 90.1369"; + scale = "1 1 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + }; + new StaticShape(InventoryStation3) { + position = "-402.755 -421.308 14.112"; + rotation = "0 0 -1 90.1369"; + scale = "1 1 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + }; + new StaticShape(BaseGen2) { + position = "-380.672 -366.624 29.0406"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "Base Backup"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + }; + new StaticShape(FloatingBaseSensor) { + position = "-504.6 -203.122 156.504"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Perimeter"; + dataBlock = "SensorLargePulse"; + lockCount = "0"; + homingCount = "0"; + }; + new InteriorInstance(BaseSensorPlat) { + position = "-504.631 -203.509 154.979"; + rotation = "1 0 0 0"; + scale = "0.662015 0.662282 0.732005"; + interiorFile = "dplat1.dif"; + showTerrainInside = "0"; + }; + }; + new SimGroup(DropPoints) { + + new Camera() { + position = "-390.643 -425.938 15.3678"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "-389.287 -417.396 15.1161"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "-399.645 -416.71 15.2977"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "-399.232 -425.664 15.3133"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "-398.902 -436.664 15.4581"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "-461.288 -354.792 9.6386"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "-399.739 -443.424 15.6241"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "-389.042 -443.689 15.4032"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "-391.394 -455.189 15.8333"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "-390.343 -437.128 15.1037"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "-400.524 -455.134 16.3358"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "-452.943 -366.557 9.8478"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "-469.313 -371.778 9.4379"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "-460.183 -371.833 8.9354"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "-468.528 -360.068 8.7262"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + new Camera() { + position = "-462.093 -370.777 8.5503"; + rotation = "1 0 0 0"; + scale = "1 0.762032 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + }; + }; + new Item(InvRoomRepairPack) { + position = "-403.617 -449.228 16.0153"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + new Item(SatchelChargePack) { + position = "-463.131 -366.848 41.3416"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SatchelCharge"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + }; + new SimGroup(Perifery) { + + new InteriorInstance() { + position = "-672.476 -378.377 93.2107"; + rotation = "0 0 -1 91.8558"; + scale = "1 1 1"; + interiorFile = "dmisc1.dif"; + showTerrainInside = "0"; + }; + new StaticShape(PeriferyGen) { + position = "-547.707 -367.013 29.0564"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "Perifery Equipment"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + }; + new Turret(Turret3) { + position = "-482.32 -249.952 111.06"; + rotation = "-0 0 -1 0.181308"; + scale = "1 1 1"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + }; + new InteriorInstance() { + position = "-481.857 -249.119 101.34"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + interiorFile = "dmisc1.dif"; + showTerrainInside = "0"; + }; + new Turret(Turret3) { + position = "-257.301 -388.932 93.0956"; + rotation = "0 0 1 127.587"; + scale = "1 1 1"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + }; + new InteriorInstance() { + position = "-256.927 -389.808 83.3756"; + rotation = "-0 0 -1 52.3217"; + scale = "1 1 1"; + interiorFile = "dmisc1.dif"; + showTerrainInside = "0"; + }; + new Turret(Turret3) { + position = "-673.322 -377.939 102.931"; + rotation = "0 0 1 88.0532"; + scale = "1 1 1"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "PlasmaBarrelLarge"; + }; + }; + new SimGroup(Tower) { + providesPower = "1"; + + new InteriorInstance(Tower) { + position = "107.397 -14.4281 164.61"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + interiorFile = "dtowr1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Item(TowerRepairPack) { + position = "107.617 -9.57776 165.464"; + rotation = "0 0 1 45.2637"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new StaticShape(TowerSwitch) { + position = "107.407 -14.1891 188.049"; + rotation = "0 0 1 45.2638"; + scale = "1 1 1"; + nameTag = "Base subsidiary control tower"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + name = "Base subsidiary control tower"; + }; + new StaticShape(TowerInventory1) { + position = "102.324 -11.5951 176.64"; + rotation = "-0 0 -1 47.7382"; + scale = "1 1 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(TowerInventory2) { + position = "112.463 -11.569 176.623"; + rotation = "0 0 1 45.2638"; + scale = "1 1 1"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Turret(DownStairsSentry) { + position = "107.632 -15.4517 172.654"; + rotation = "0 0 1 86.5165"; + scale = "1 1 1"; + nameTag = "Tower Enterance"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + lastProjectile = "4633"; + locked = "true"; + }; + new Turret(UpstairsTurret) { + position = "107.434 -11.6831 198.601"; + rotation = "0 0 1 80.7869"; + scale = "1 1 1"; + nameTag = "Switch Sentry"; + dataBlock = "SentryTurret"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "SentryTurretBarrel"; + lastProjectile = "4642"; + locked = "true"; + }; + new StaticShape(TowerSensor) { + position = "107.265 -10.7643 218.535"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "Lava Rig"; + dataBlock = "SensorLargePulse"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Turret(SWTowerTurret) { + position = "51.473 -62.791 162.565"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "SW Rig"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = %initialBarrel; + }; + new Turret(SETowerTurret) { + position = "163.318 -62.732 162.585"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "SE Rig"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "MissileBarrelLarge"; + }; + new Turret(NETowerTurret) { + position = "163.387 46.947 162.665"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "NE Rig"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = %initialBarrel; + }; + new Turret(NWTowerTurret) { + position = "51.4 47.253 162.665"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "NW Rig"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "MissileBarrelLarge"; + }; + }; + new SimGroup(BaseForceFields) { + + new StaticShape(ObjectiveGen2) { + position = "-465.911 -348.919 6.0157"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "Primary Reactor"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + }; + new ForceFieldBare(CenterEnteranceFF) { + position = "-471.214 -379.6 99.8223"; + rotation = "1 0 0 0"; + scale = "16.6319 0.452235 9.31077"; + dataBlock = "defaultTeamSlowFieldBare"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + new ForceFieldBare(WestEnteranceFF) { + position = "-546.997 -359.996 99.1512"; + rotation = "1 0 0 0"; + scale = "0.912282 16.3236 11.119"; + dataBlock = "defaultTeamSlowFieldBare"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + new ForceFieldBare(EastEnteranceFF) { + position = "-379.979 -359.074 100.923"; + rotation = "1 0 0 0"; + scale = "0.782673 16.3247 10.9793"; + dataBlock = "defaultTeamSlowFieldBare"; + color = "0.500000 0.500000 1.000000 1.000000"; + }; + }; + new SimGroup(AIObjectives) { + + new AIObjective(AIODeployEquipment) { + position = "-479.062 -367.337 21.3635"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-479.062 -367.337 21.3635"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODefendLocation) { + position = "-367.611 -366.89 16.8839"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the GeneratorLarge"; + targetObject = "ObjectiveGen1"; + targetClientId = "-1"; + targetObjectId = "3402"; + location = "-367.611 -366.89 16.8839"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "-382.611 -366.89 30.4839"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the GeneratorLarge"; + targetObject = "TowerGen"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-382.611 -366.89 30.4839"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "-461.025 -346.974 7.49139"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the GeneratorLarge"; + targetObject = "ObjectiveGen1"; + targetClientId = "-1"; + targetObjectId = "3402"; + location = "-461.025 -346.974 7.49139"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODefendLocation) { + position = "-463.225 -357.774 7.49139"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the GeneratorLarge"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-463.225 -357.774 7.49139"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-462.372 -382.448 21.1798"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy pulse sensor"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-462.372 -382.448 21.1798"; + weightLevel1 = "4000"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "PulseSensorDeployable"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "-387.019 -421.21 15.7165"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "InventoryStation1"; + targetClientId = "-1"; + targetObjectId = "3405"; + location = "-387.019 -421.21 15.7165"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "-402.649 -440.174 15.725"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the StationInventory"; + targetObject = "InventoryStation2"; + targetClientId = "-1"; + targetObjectId = "3407"; + location = "-402.649 -440.174 15.725"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-490.107 -372.685 25.3669"; + rotation = "0 0 -1 89.3814"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy motion sensor"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-490.107 -372.685 25.3669"; + weightLevel1 = "4000"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "MotionSensorDeployable"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-462.954 -385.163 6.10047"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-462.954 -385.163 6.10047"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIORepairObject) { + position = "-549.646 -367.279 30.4997"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Repair the GeneratorLarge"; + targetObject = "PeriferyGen"; + targetClientId = "-1"; + targetObjectId = "3435"; + location = "-549.646 -367.279 30.4997"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODefendLocation) { + position = "-558.046 -367.279 16.0997"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the GeneratorLarge"; + targetObject = "PeriferyGen"; + targetClientId = "-1"; + targetObjectId = "3435"; + location = "-558.046 -367.279 16.0997"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-396.058 -351.012 66.1431"; + rotation = "0.109109 0.110293 -0.987892 90.0794"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-396.058 -351.012 66.1431"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-359.233 -344.498 32.309"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-359.233 -344.498 32.309"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-458.041 -345.615 17.4045"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-458.041 -345.615 17.4045"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-469.273 -321.868 17.5096"; + rotation = "0 0 -1 39.5341"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy Inventory Station"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-469.273 -321.868 17.5096"; + weightLevel1 = "4150"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "InventoryDeployable"; + buyEquipmentSet = "MediumInventorySet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-390.207 -454.757 14.2401"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-390.207 -454.757 14.2401"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-565.962 -344.63 32.8972"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-565.962 -344.63 32.8972"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-531.068 -352.243 66.2605"; + rotation = "0 0 1 90.5273"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-531.068 -352.243 66.2605"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-518.12 -351.861 71.379"; + rotation = "0 0 1 92.8192"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy motion sensor"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-518.12 -351.861 71.379"; + weightLevel1 = "4000"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "MotionSensorDeployable"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-462.959 -326.072 29.2657"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy Inventory Station"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-462.959 -326.072 29.2657"; + weightLevel1 = "4150"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "InventoryDeployable"; + buyEquipmentSet = "MediumInventorySet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-469.537 -365.779 65.2127"; + rotation = "0 0 -1 48.8839"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy Inventory Station"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-469.537 -365.779 65.2127"; + weightLevel1 = "4150"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "InventoryDeployable"; + buyEquipmentSet = "MediumInventorySet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-463.43 -350.819 67.7238"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-463.43 -350.819 67.7238"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-477.939 -356.131 68.3545"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy motion sensor"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-477.939 -356.131 68.3545"; + weightLevel1 = "4000"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "MotionSensorDeployable"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-572.803 -393.295 14.4543"; + rotation = "0 0 1 222.881"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy Inventory Station"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-572.803 -393.295 14.4543"; + weightLevel1 = "4150"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "InventoryDeployable"; + buyEquipmentSet = "MediumInventorySet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-361.325 -424.302 15.967"; + rotation = "-0.00499968 0.0109016 -0.999928 49.2775"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy motion sensor"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-361.325 -424.302 15.967"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "MotionSensorDeployable"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-358.956 -366.803 33.8362"; + rotation = "0 0 -1 90.7098"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy motion sensor"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-358.956 -366.803 33.8362"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "MotionSensorDeployable"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-497.28 -366.325 29.5"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy indoor Turret"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-497.28 -366.325 29.5"; + weightLevel1 = "4100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "TurretIndoorDeployable"; + buyEquipmentSet = "MediumIndoorTurretSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODeployEquipment) { + position = "-566.104 -367.131 32.6526"; + rotation = "0 0 1 90.5273"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Deploy motion sensor"; + targetObject = "-1"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-566.104 -367.131 32.6526"; + weightLevel1 = "4000"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "MotionSensorDeployable"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODefendLocation) { + position = "-462.433 -369.193 101.949"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the Strength Foyer"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-462.433 -369.193 101.949"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "100"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODefendLocation) { + position = "-393.367 -350.053 102.502"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the Honor foyer"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-393.367 -350.053 102.502"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "100"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + new AIObjective(AIODefendLocation) { + position = "-536.365 -349.456 101.97"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AIObjectiveMarker"; + lockCount = "0"; + homingCount = "0"; + description = "Defend the unity foyer"; + targetClientId = "-1"; + targetObjectId = "-1"; + location = "-536.365 -349.456 101.97"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "100"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + isInvalid = "0"; + }; + }; + new SimGroup(LavaBridges) { + + new InteriorInstance() { + position = "107.398 -7.70099 161.612"; + rotation = "1 0 0 0"; + scale = "2 2 1"; + interiorFile = "dbrdg8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "107.383 -31.701 161.612"; + rotation = "0 0 -1 90"; + scale = "2 2 1"; + interiorFile = "dbrdg7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "107.377 15.9 161.612"; + rotation = "0 0 1 90"; + scale = "2 2 1"; + interiorFile = "dbrdg7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "83.403 -7.67801 161.612"; + rotation = "1 0 0 0"; + scale = "2 2 1"; + interiorFile = "dbrdg7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "131.364 -7.702 161.612"; + rotation = "0 0 1 180"; + scale = "2 2 1"; + interiorFile = "dbrdg7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "51.42 -7.67899 164.359"; + rotation = "1 0 0 0"; + scale = "2 2 1"; + interiorFile = "dbrdg9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "107.38 47.897 164.359"; + rotation = "0 0 1 90"; + scale = "2 2 1"; + interiorFile = "dbrdg9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "107.382 -63.694 164.359"; + rotation = "0 0 1 90"; + scale = "2 2 1"; + interiorFile = "dbrdg9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "163.362 -7.698 164.359"; + rotation = "0 0 1 180"; + scale = "2 2 1"; + interiorFile = "dbrdg9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "107.382 -63.694 164.359"; + rotation = "0 0 1 90"; + scale = "2 2 1"; + interiorFile = "dbrdg9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "163.364 -47.697 161.608"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + interiorFile = "dbrdg7a.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "163.366 -63.6898 164.359"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + interiorFile = "dbrdg9a.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "163.379 47.8998 164.359"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dbrdg9a.dif"; + showTerrainInside = "0"; + locked = "false"; + }; + new InteriorInstance() { + position = "147.372 -63.701 161.608"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + interiorFile = "dbrdg7a.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "163.376 31.901 161.608"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + interiorFile = "dbrdg7a.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "147.387 47.897 161.608"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + interiorFile = "dbrdg7a.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "51.4084 48.1443 164.359"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + interiorFile = "dbrdg9a.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "51.398 32.214 161.608"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + interiorFile = "dbrdg7a.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "67.365 48.143 161.608"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dbrdg7a.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "51.364 -47.734 161.608"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + interiorFile = "dbrdg7a.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "51.3834 -63.6902 164.359"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + interiorFile = "dbrdg9a.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "67.378 -63.705 161.608"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dbrdg7a.dif"; + showTerrainInside = "0"; + }; + new SimGroup(FFBridges) { + + new SimGroup(CatwalkFFs) { + + new ForceFieldBare() { + position = "71.293 44.475 161.61"; + rotation = "1 0 0 0"; + scale = "24.126 7.54321 1"; + dataBlock = "defaultNoTeamLavaLightField"; + }; + new ForceFieldBare() { + position = "119.376 44.161 161.61"; + rotation = "1 0 0 0"; + scale = "24.0507 7.54321 1"; + dataBlock = "defaultNoTeamLavaLightField"; + }; + new ForceFieldBare() { + position = "119.389 -67.489 161.61"; + rotation = "1 0 0 0"; + scale = "24.0182 7.54321 1"; + dataBlock = "defaultNoTeamLavaLightField"; + }; + new ForceFieldBare() { + position = "159.57 27.902 161.61"; + rotation = "0 0 1 90"; + scale = "23.6238 7.54321 1"; + dataBlock = "defaultNoTeamLavaLightField"; + }; + new ForceFieldBare() { + position = "159.57 -19.69 161.61"; + rotation = "0 0 1 90"; + scale = "24.0246 7.54321 0.654541"; + dataBlock = "defaultNoTeamLavaLightField"; + }; + new StaticShape(CatwalkFFGen) { + position = "296.902 281.478 82.1046"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "All your base..."; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + }; + new ForceFieldBare() { + position = "47.57 28.212 161.61"; + rotation = "0 0 1 90"; + scale = "23.9272 7.54321 1"; + dataBlock = "defaultNoTeamLavaLightField"; + }; + new ForceFieldBare() { + position = "47.57 -19.676 161.61"; + rotation = "0 0 1 90"; + scale = "24.0593 7.54321 1"; + dataBlock = "defaultNoTeamLavaLightField"; + }; + new ForceFieldBare() { + position = "71.358 -67.489 161.61"; + rotation = "1 0 0 0"; + scale = "24.0928 7.54321 1"; + dataBlock = "defaultNoTeamLavaLightField"; + }; + }; + new SimGroup(DrawBridges) { + + new SimGroup(WestBridge) { + + new StaticShape(WestBridgeGen) { + position = "288.492 280.587 82.0062"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "...belong..."; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + }; + new ForceFieldBare() { + position = "39.406 -3.879 161.61"; + rotation = "0 0 1 180"; + scale = "236.773 7.54321 1"; + dataBlock = "defaultNoTeamLavaLightField"; + }; + }; + new SimGroup(NorthBridge) { + + new StaticShape(NorthBridgeGen) { + position = "292.178 280.66 82.0062"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "...are..."; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + }; + new ForceFieldBare() { + position = "103.62 282.64 161.61"; + rotation = "0 0 1 90"; + scale = "222.776 7.54321 1"; + dataBlock = "defaultNoTeamLavaLightField"; + }; + }; + new SimGroup(SouthBridge) { + + new StaticShape(SouthBridgeGen) { + position = "284.537 280.408 82.0062"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "...to..."; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + }; + new ForceFieldBare() { + position = "103.594 -75.687 161.61"; + rotation = "0 0 1 90"; + scale = "168.54 7.54321 1"; + dataBlock = "defaultNoTeamLavaLightField"; + }; + }; + new SimGroup(EastBridge) { + + new StaticShape(EastBridgeGen) { + position = "280.367 280.27 82.0062"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "...us!"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + }; + new ForceFieldBare() { + position = "440.421 -3.96201 161.954"; + rotation = "0 0 1 180"; + scale = "265.064 7.54321 0.654541"; + dataBlock = "defaultNoTeamLavaLightField"; + }; + }; + }; + }; + new InteriorInstance() { + position = "107.31 -260.168 161.61"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "dbrdg3a.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-233.356 -7.69101 161.61"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dbrdg7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "107.318 -280.154 161.61"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + interiorFile = "dbrdg7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-213.37 -7.668 161.61"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + interiorFile = "dbrdg3a.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "476.391 -7.707 161.608"; + rotation = "0 0 1 180"; + scale = "1 1 1"; + interiorFile = "dbrdg7.dif"; + showTerrainInside = "0"; + locked = "false"; + }; + new InteriorInstance() { + position = "456.405 -7.763 161.608"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dbrdg3a.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "-207.261 -7.55701 162.482"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "-207.261 -7.55701 142.482"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "107.439 292.602 161.63"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "450.286 -7.789 162.448"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "450.286 -7.789 142.448"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "107.235 -254.11 142.49"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "107.235 -254.11 162.47"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "106.984 -7.55801 161.01"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "106.984 -7.55801 141.03"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "106.984 -7.55801 121.09"; + rotation = "1 0 0 0"; + scale = "1 1 1.05589"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "107.394 -65.561 121.09"; + rotation = "1 0 0 0"; + scale = "1 1 1.05589"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "107.394 -65.561 141.03"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "107.394 -65.561 161.534"; + rotation = "1 0 0 0"; + scale = "1 1 1.0262"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "51.14 -63.648 161.534"; + rotation = "1 0 0 0"; + scale = "1 1 1.0262"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "51.14 -63.648 141.03"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "51.14 -63.648 121.09"; + rotation = "1 0 0 0"; + scale = "1 1 1.05589"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "51.379 48.853 121.09"; + rotation = "1 0 0 0"; + scale = "1 1 1.05589"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "51.379 48.853 141.03"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "51.379 48.853 161.534"; + rotation = "1 0 0 0"; + scale = "1 1 1.0262"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "49.864 -7.771 121.09"; + rotation = "1 0 0 0"; + scale = "1 1 1.05589"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "49.864 -7.771 141.03"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "49.864 -7.771 161.534"; + rotation = "1 0 0 0"; + scale = "1 1 1.0262"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "163.415 -63.978 121.09"; + rotation = "1 0 0 0"; + scale = "1 1 1.05589"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "163.415 -63.978 141.03"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "163.415 -63.978 161.534"; + rotation = "1 0 0 0"; + scale = "1 1 1.0262"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "165.039 -7.49799 121.09"; + rotation = "1 0 0 0"; + scale = "1 1 1.05589"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "165.039 -7.49799 141.03"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "165.039 -7.49799 161.534"; + rotation = "1 0 0 0"; + scale = "1 1 1.0262"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "163.423 48.406 121.09"; + rotation = "1 0 0 0"; + scale = "1 1 1.05589"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "163.423 48.406 141.03"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "163.423 48.406 161.534"; + rotation = "1 0 0 0"; + scale = "1 1 1.0262"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "107.386 49.616 121.09"; + rotation = "1 0 0 0"; + scale = "1 1 1.05589"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "107.386 49.616 141.03"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "107.386 49.616 161.534"; + rotation = "1 0 0 0"; + scale = "1 1 1.0262"; + interiorFile = "dpole1.dif"; + showTerrainInside = "0"; + }; + new InteriorInstance() { + position = "107.382 298.632 161.61"; + rotation = "0 0 -1 90.0456"; + scale = "1 1 1"; + interiorFile = "dbrdg3a.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "107.343 318.618 161.61"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "dbrdg7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new SimGroup(TeamDrops) { + + new SpawnSphere(respawnSphere) { + position = "-445.99 -376.448 66.8051"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "140"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "50"; + }; + }; + }; + new SimGroup(team0) { + }; + }; + new SimGroup(RandomOrganics) { + + new SimGroup(Addition1DSPlant16) { + + new TSStatic() { + position = "-348 -196 106.781"; + rotation = "0 0 1 167"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-636 -532 150.656"; + rotation = "0 0 1 230"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-428 -260 111.188"; + rotation = "0 0 1 114"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-412 -164 111.656"; + rotation = "0 0 -1 119"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-364 -164 103.953"; + rotation = "0 0 1 120"; + scale = "1 1 1"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-292 -188 128.547"; + rotation = "0 0 1 184"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-492 -548 122.672"; + rotation = "0 0 -1 75.0002"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-276 -468 111.969"; + rotation = "0 0 -1 58.0005"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-500 -556 123.344"; + rotation = "0 0 1 61"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-604 -292 115.953"; + rotation = "0 0 1 52"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-636 -188 157.312"; + rotation = "0 0 1 103"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-316 -260 122.5"; + rotation = "0 0 1 58.9998"; + scale = "1 1 1"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-572 -284 131.266"; + rotation = "0 0 -1 55.0003"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-636 -492 158.203"; + rotation = "0 0 1 3.99996"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-636 -540 152.703"; + rotation = "0 0 1 219"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-444 -540 129.828"; + rotation = "0 0 -1 19.0001"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-588 -556 106.531"; + rotation = "0 0 -1 92.0004"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-292 -188 128.547"; + rotation = "0 0 1 202"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-620 -252 148.969"; + rotation = "0 0 1 38"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-276 -180 125.922"; + rotation = "0 0 1 43"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-660 -236 138.141"; + rotation = "0 0 1 224"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-556 -196 130.344"; + rotation = "0 0 -1 78.0002"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-564 -228 136.031"; + rotation = "0 0 1 228"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-356 -204 105.172"; + rotation = "0 0 1 19"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-444 -476 96.5469"; + rotation = "0 0 1 206"; + scale = "1 1 1"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-380 -188 101.297"; + rotation = "0 0 1 48"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-276 -420 95.9688"; + rotation = "0 0 1 15"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-292 -540 126.203"; + rotation = "0 0 -1 112"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-428 -260 111.188"; + rotation = "0 0 -1 13.0002"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-580 -556 104.781"; + rotation = "0 0 1 147"; + scale = "1 1 1"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-508 -548 122.984"; + rotation = "0 0 1 60.0001"; + scale = "1 1 1"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-276 -188 124.547"; + rotation = "0 0 1 76.9998"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-284 -484 110.828"; + rotation = "0 0 -1 35"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-412 -172 113.031"; + rotation = "0 0 -1 16.9999"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-412 -172 113.031"; + rotation = "0 0 -1 50.9998"; + scale = "1 1 1"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-436 -244 112.297"; + rotation = "0 0 1 78.0002"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-644 -228 141.891"; + rotation = "0 0 1 97.9998"; + scale = "1 1 1"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-524 -164 147.094"; + rotation = "0 0 1 142"; + scale = "1 1 1"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-292 -492 109.156"; + rotation = "0 0 1 53"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-620 -228 151.547"; + rotation = "0 0 -1 92.0004"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg16.dts"; + }; + }; + new SimGroup(Addition2DSPlant17) { + + new TSStatic() { + position = "-500 -548 123.25"; + rotation = "-0.0619038 0.012427 0.998005 146.064"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "-564 -236 137.688"; + rotation = "0.101053 0.144122 0.984387 70.8497"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "-444 -548 127.344"; + rotation = "-0.830265 -0.530269 0.17168 17.3446"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "-492 -524 123.797"; + rotation = "0.477358 -0.532224 -0.69919 26.9199"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "-636 -500 157.062"; + rotation = "-0.749737 0.399268 -0.527712 16.9644"; + scale = "1 1 1"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "-412 -164 111.656"; + rotation = "0.0543937 0.0547673 -0.997016 88.1707"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "-316 -412 79.5"; + rotation = "0.00755817 -0.103259 0.994626 63.2758"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "-444 -196 126.422"; + rotation = "0.175219 -0.324668 -0.929456 39.597"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg17.dts"; + }; + }; + new SimGroup(Addition3DSPlant17) { + + new TSStatic() { + position = "12 -412 104.844"; + rotation = "-0.0503551 -0.018623 0.998558 143.05"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "-20 -412 106.25"; + rotation = "0.0761431 -0.110215 -0.990987 88.5186"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "-12 -468 142.812"; + rotation = "0.137513 0.111945 0.984154 97.9076"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "-84 -452 145.703"; + rotation = "0.0935228 0.120898 0.98825 234.447"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "-68 -492 131.578"; + rotation = "-0.0355517 -0.0468571 0.998269 78.0976"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "-12 -412 106.219"; + rotation = "0.0821308 -0.000199039 0.996622 84.1932"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "-4 -412 105.5"; + rotation = "0.0670501 -0.0130461 0.997664 88.134"; + scale = "1.2 1.2 1.2"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "-68 -492 131.578"; + rotation = "-0.495608 -0.154473 0.854699 8.18628"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "-68 -476 133.109"; + rotation = "-0.00379916 0.163641 -0.986513 80.767"; + scale = "1.2 1.2 1.2"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "-76 -484 132.672"; + rotation = "0.108004 0.0352753 0.993524 194.904"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg17.dts"; + }; + }; + new SimGroup(Addition4DSPlant19) { + + new TSStatic() { + position = "172 -332 146.234"; + rotation = "0 0 1 16"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "172 -348 148.938"; + rotation = "0 0 -1 73.0006"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "172 -348 148.938"; + rotation = "0 0 1 69.0002"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "140 -452 147.734"; + rotation = "0 0 1 111"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "-4 -412 105.5"; + rotation = "0 0 1 70.9998"; + scale = "1.2 1.2 1.2"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "212 -332 153.156"; + rotation = "0 0 1 104"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "84 -308 164.703"; + rotation = "0 0 1 3.99996"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "204 -380 156.266"; + rotation = "0 0 1 17"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "196 -372 157.594"; + rotation = "0 0 -1 11.9998"; + scale = "1.2 1.2 1.2"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "-12 -476 143.562"; + rotation = "0 0 -1 37.0002"; + scale = "1 1 1"; + shapeName = "dorg19.dts"; + }; + }; + new SimGroup(Addition5DSPlant19) { + + new TSStatic() { + position = "-364 28 166"; + rotation = "0 0 -1 60.0001"; + scale = "1.2 1.2 1.2"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "-420 -100 94.5312"; + rotation = "0 0 1 113"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "-292 -172 129.5"; + rotation = "0 0 1 138"; + scale = "1 1 1"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "-204 196 132.141"; + rotation = "0 0 -1 50.9998"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "-364 -172 103.875"; + rotation = "0 0 1 39"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg19.dts"; + }; + }; + new SimGroup(Addition6DSPlant16) { + + new TSStatic() { + position = "-524 -212 146.031"; + rotation = "0 0 1 38"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "-500 -76 105.25"; + rotation = "0 0 1 126"; + scale = "1 1 1"; + shapeName = "dorg16.dts"; + }; + }; + new SimGroup(Addition11DSPlant16) { + + new TSStatic() { + position = "892 476 173.172"; + rotation = "0 0 1 209"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "964 356 99.141"; + rotation = "0 0 -1 97"; + scale = "1.2 1.2 1.2"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "948 812 136.375"; + rotation = "0 0 -1 94"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "964 156 94.0313"; + rotation = "0 0 1 97"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "1148 572 136.016"; + rotation = "0 0 1 118"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "812 420 116.266"; + rotation = "0 0 1 141"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "548 900 161.422"; + rotation = "0 0 -1 50.9998"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "756 612 151.969"; + rotation = "0 0 1 233"; + scale = "1.2 1.2 1.2"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "1140 788 162.828"; + rotation = "0 0 -1 73.0006"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "1028 484 164"; + rotation = "0 0 1 234"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "1044 484 161.5"; + rotation = "0 0 -1 2.9997"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "812 268 89.9687"; + rotation = "0 0 1 238"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "956 812 136.484"; + rotation = "0 0 1 35"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "476 364 194.453"; + rotation = "0 0 1 177"; + scale = "1 1 1"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "604 916 149.047"; + rotation = "0 0 -1 4.00015"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "812 748 130.172"; + rotation = "0 0 1 24"; + scale = "1.2 1.2 1.2"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "732 212 76.3593"; + rotation = "0 0 1 51"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "1100 508 149.781"; + rotation = "0 0 -1 29.9998"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "676 764 169.812"; + rotation = "0 0 -1 80.0004"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "1092 876 185.672"; + rotation = "0 0 1 217"; + scale = "1.2 1.2 1.2"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "428 548 211.094"; + rotation = "0 0 1 121"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "932 524 173.125"; + rotation = "0 0 -1 71.0004"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "996 180 97.219"; + rotation = "0 0 1 44"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "636 892 140.578"; + rotation = "0 0 1 54"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "708 252 95.1562"; + rotation = "0 0 1 66.0002"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "420 676 178.266"; + rotation = "0 0 -1 29"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "956 868 153.906"; + rotation = "0 0 1 67.9998"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "908 524 173"; + rotation = "0 0 1 205"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "868 156 94.3594"; + rotation = "0 0 1 117"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "460 516 183.859"; + rotation = "0 0 1 230"; + scale = "1.2 1.2 1.2"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "604 916 149.047"; + rotation = "0 0 -1 119"; + scale = "1.2 1.2 1.2"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "1012 804 150.625"; + rotation = "0 0 -1 37.0002"; + scale = "1 1 1"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "980 756 116.422"; + rotation = "0 0 1 28"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "788 668 117.719"; + rotation = "0 0 1 17"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "1012 348 117.969"; + rotation = "0 0 1 217"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "964 700 155.375"; + rotation = "0 0 -1 61.0005"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "756 252 86.9531"; + rotation = "0 0 -1 77.0004"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "1148 380 70.6719"; + rotation = "0 0 1 22"; + scale = "1.2 1.2 1.2"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "428 644 178.656"; + rotation = "0 0 1 161"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "1180 644 160.187"; + rotation = "0 0 1 215"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "908 300 68.1719"; + rotation = "0 0 -1 58.0005"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "924 524 173.031"; + rotation = "0 0 1 69.0002"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "692 364 123.922"; + rotation = "0 0 -1 53.9998"; + scale = "1.2 1.2 1.2"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "1156 796 167.719"; + rotation = "0 0 -1 92.0004"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg16.dts"; + }; + new TSStatic() { + position = "524 788 196.734"; + rotation = "0 0 1 141"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg16.dts"; + }; + }; + new SimGroup(Addition12DSPlant17) { + + new TSStatic() { + position = "596 604 155.219"; + rotation = "-0.252214 0.0568745 0.965999 52.557"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "676 780 168.969"; + rotation = "0.0644755 0.0918072 -0.993687 79.3563"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "1180 428 100.875"; + rotation = "-0.13555 -0.0513793 0.989437 205.735"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "796 884 150.734"; + rotation = "0.214537 0.335293 -0.917362 31.4878"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "1052 516 172.5"; + rotation = "0.0326082 -0.0612456 0.99759 96.1377"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "700 444 95.7187"; + rotation = "0.0236739 -0.00272442 0.999716 130.013"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "444 364 181.766"; + rotation = "0.182467 -0.00253999 -0.983209 95.9659"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "748 388 124.922"; + rotation = "0.145242 0.0220224 0.989151 227.537"; + scale = "1 1 1"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "684 508 115.016"; + rotation = "0.107873 -0.0904691 0.99004 144.336"; + scale = "1.2 1.2 1.2"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "1012 812 150.656"; + rotation = "-0.436177 -0.113977 -0.892614 22.3487"; + scale = "1.2 1.2 1.2"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "764 268 90.5625"; + rotation = "-0.151402 -0.00972159 0.988424 127.531"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "972 220 99.687"; + rotation = "-0.0666638 0.167378 0.983636 83.9389"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "948 908 112.328"; + rotation = "-0.0115508 -0.143244 0.98962 84.5949"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "1164 772 170.828"; + rotation = "-0.0696701 0.0635217 0.995546 107.245"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "1140 788 162.828"; + rotation = "-0.138555 0.0419806 0.989465 124.501"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "668 484 117.547"; + rotation = "-0.112626 -0.107037 0.987855 147.379"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "1068 468 173.547"; + rotation = "-0.0739407 0.066415 0.995049 182.985"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "572 548 163.734"; + rotation = "0.0235022 -0.0760124 0.99683 188.971"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "932 748 132.016"; + rotation = "0.0157534 0.0466812 -0.998786 97.0689"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "556 636 146.938"; + rotation = "0.00172912 -0.183868 0.982949 61.8651"; + scale = "1.2 1.2 1.2"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "700 380 127.609"; + rotation = "-0.575477 -0.32338 0.751166 26.4206"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "388 844 163.953"; + rotation = "0.0485287 0.0029749 0.998817 109.064"; + scale = "1 1 1"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "812 748 130.172"; + rotation = "-0.121092 0.110974 -0.986418 41.5167"; + scale = "1.2 1.2 1.2"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "932 628 129.078"; + rotation = "0.0144005 -0.0381498 0.999168 167.011"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "964 708 155.375"; + rotation = "-0.0136492 0.313518 -0.949484 37.7824"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "580 604 156.922"; + rotation = "-0.450827 -0.23556 -0.860969 37.971"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "668 484 117.547"; + rotation = "-0.121311 -0.101946 0.987366 140.466"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "764 492 156.484"; + rotation = "0.117335 -0.0381243 0.99236 54.3563"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "588 924 147.562"; + rotation = "0.204729 0.174863 -0.963073 58.8262"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "436 724 168.313"; + rotation = "0.0454692 0.134065 0.989929 209.711"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "908 756 125.5"; + rotation = "0.0625492 -0.146797 0.987187 145.422"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "980 820 135.922"; + rotation = "0.127602 -0.10248 0.986517 223.463"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "748 268 88.3906"; + rotation = "-0.0133015 -0.0530759 0.998502 115.078"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "428 644 178.656"; + rotation = "-0.100363 0.105261 0.989367 146.341"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "1044 468 164.875"; + rotation = "0.0348411 0.150912 -0.987933 116.624"; + scale = "1.2 1.2 1.2"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "1180 572 127.766"; + rotation = "-0.0265204 -0.163439 -0.986197 116.714"; + scale = "1 1 1"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "980 812 135.953"; + rotation = "0.0360907 0.0983098 0.994501 179.006"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "756 228 77.6875"; + rotation = "-0.0980146 0.223292 -0.969811 77.7097"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "1124 772 160.703"; + rotation = "-0.0907992 -0.261222 0.960999 65.0491"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "628 884 140.391"; + rotation = "-0.894358 -0.309023 0.323463 12.3235"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "692 140 113.016"; + rotation = "0.0792873 -0.0294701 0.996416 157.08"; + scale = "1 1 1"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "916 220 72.7969"; + rotation = "0.00019495 0.0903265 0.995912 109.222"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "804 700 108.672"; + rotation = "0.583341 0.0169456 0.81205 28.1309"; + scale = "1.2 1.2 1.2"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "1044 252 125.531"; + rotation = "0.00811237 -0.0415602 0.999103 139.034"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "556 900 159.969"; + rotation = "0.137374 -0.210933 0.967799 61.6371"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg17.dts"; + }; + new TSStatic() { + position = "908 228 72.875"; + rotation = "-0.0695661 0.115309 -0.990891 115.474"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg17.dts"; + }; + }; + new SimGroup(Addition13DSPlant18) { + + new TSStatic() { + position = "972 156 95.4218"; + rotation = "0 0 -1 74.0004"; + scale = "1.2 1.2 1.2"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "1116 868 181.031"; + rotation = "0 0 1 58.9998"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "428 372 177.891"; + rotation = "0 0 1 79"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "676 388 126.625"; + rotation = "0 0 -1 58.0005"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "828 764 134.531"; + rotation = "0 0 -1 82"; + scale = "1 1 1"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "924 508 173.453"; + rotation = "0 0 -1 14.9998"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "1100 812 157.953"; + rotation = "0 0 1 1.9999"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "404 388 158.766"; + rotation = "0 0 1 205"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "556 884 168.078"; + rotation = "0 0 1 99.0002"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "484 484 178.281"; + rotation = "0 0 -1 81.0002"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "1116 676 142.453"; + rotation = "0 0 1 221"; + scale = "1.2 1.2 1.2"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "676 836 154.063"; + rotation = "0 0 -1 107"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "452 492 179"; + rotation = "0 0 -1 90.0002"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "1068 860 172.672"; + rotation = "0 0 -1 104"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "684 268 90.8593"; + rotation = "0 0 1 160"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "788 308 109.531"; + rotation = "0 0 1 39"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "1012 804 150.625"; + rotation = "0 0 -1 115"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "980 204 104.016"; + rotation = "0 0 1 44"; + scale = "1.2 1.2 1.2"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "924 244 77.6875"; + rotation = "0 0 1 122"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "1020 652 182.672"; + rotation = "0 0 1 18"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "620 204 143.344"; + rotation = "0 0 1 12"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "924 516 173.063"; + rotation = "0 0 1 214"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "492 308 158.859"; + rotation = "0 0 1 143"; + scale = "1.2 1.2 1.2"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "1084 652 152.109"; + rotation = "0 0 1 28"; + scale = "1.2 1.2 1.2"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "620 212 144.453"; + rotation = "0 0 1 156"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "1108 524 155.203"; + rotation = "0 0 1 28"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "844 452 125.641"; + rotation = "0 0 1 136"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "532 428 180.125"; + rotation = "0 0 -1 10.9999"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "684 388 127.75"; + rotation = "0 0 1 109"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "692 276 90.8124"; + rotation = "0 0 1 20"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "1068 820 175.313"; + rotation = "0 0 1 66.0002"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "860 156 94.125"; + rotation = "0 0 -1 107"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "540 428 178.094"; + rotation = "0 0 -1 100"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "940 708 139.703"; + rotation = "0 0 1 60.0001"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "924 252 78.1406"; + rotation = "0 0 1 165"; + scale = "1 1 1"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "772 260 90.8437"; + rotation = "0 0 -1 50.9998"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "692 156 112.984"; + rotation = "0 0 1 148"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "1100 860 183.859"; + rotation = "0 0 1 49"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "1108 628 148.562"; + rotation = "0 0 1 94.9998"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "972 812 136.266"; + rotation = "0 0 1 229"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "972 220 99.687"; + rotation = "0 0 1 222"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "1036 756 151.047"; + rotation = "0 0 1 29"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "596 772 152.672"; + rotation = "0 0 1 235"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "836 452 126.141"; + rotation = "0 0 1 64"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "436 732 167.469"; + rotation = "0 0 1 7.99996"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "988 284 116.016"; + rotation = "0 0 1 57.9999"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "500 756 195.719"; + rotation = "0 0 1 172"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg18.dts"; + }; + new TSStatic() { + position = "644 492 118.75"; + rotation = "0 0 1 20"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg18.dts"; + }; + }; + new SimGroup(Addition14DSPlant19) { + + new TSStatic() { + position = "756 212 76.8125"; + rotation = "0 0 1 208"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "676 764 169.812"; + rotation = "0 0 -1 110"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "1108 748 157.578"; + rotation = "0 0 1 140"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "572 564 167.922"; + rotation = "0 0 -1 97"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "828 452 126.687"; + rotation = "0 0 1 185"; + scale = "1 1 1"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "460 900 128.109"; + rotation = "0 0 1 51"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "892 876 171.438"; + rotation = "0 0 -1 44"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "1180 860 197.953"; + rotation = "0 0 1 236"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "1100 524 154.406"; + rotation = "0 0 1 236"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "604 164 171.953"; + rotation = "0 0 -1 93.0002"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "780 308 112.078"; + rotation = "0 0 -1 76"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "812 276 91.4532"; + rotation = "0 0 1 49"; + scale = "1 1 1"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "740 892 162.078"; + rotation = "0 0 1 90.0002"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "1028 484 164"; + rotation = "0 0 -1 95.0004"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "452 604 159.688"; + rotation = "0 0 1 153"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "676 876 157.391"; + rotation = "0 0 -1 5.99979"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "572 804 158.656"; + rotation = "0 0 1 204"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "804 692 111.109"; + rotation = "0 0 1 239"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "556 540 157.937"; + rotation = "0 0 -1 112"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "1124 868 180.422"; + rotation = "0 0 -1 38.9999"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "748 276 89.7344"; + rotation = "0 0 1 198"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "844 236 116.266"; + rotation = "0 0 1 169"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "668 532 112.703"; + rotation = "0 0 1 87.0002"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "1124 772 160.703"; + rotation = "0 0 -1 46.0002"; + scale = "1.2 1.2 1.2"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "572 716 204.594"; + rotation = "0 0 -1 32.9998"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "820 460 127.109"; + rotation = "0 0 1 150"; + scale = "1 1 1"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "980 220 100.625"; + rotation = "0 0 1 24"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "772 708 109.203"; + rotation = "0 0 -1 53.9998"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "388 812 156.672"; + rotation = "0 0 -1 23.9998"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "588 932 148.109"; + rotation = "0 0 -1 4.00015"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "956 588 160.734"; + rotation = "0 0 1 152"; + scale = "1.4 1.4 1.4"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "908 436 151.469"; + rotation = "0 0 1 101"; + scale = "1.2 1.2 1.2"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "1004 316 118.219"; + rotation = "0 0 -1 26"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "540 420 178.047"; + rotation = "0 0 -1 32"; + scale = "1.3 1.3 1.3"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "564 212 171.297"; + rotation = "0 0 -1 65.0004"; + scale = "1 1 1"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "596 700 209.375"; + rotation = "0 0 1 1.9999"; + scale = "1.5 1.5 1.5"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "580 932 147"; + rotation = "0 0 1 235"; + scale = "1.2 1.2 1.2"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "572 804 158.656"; + rotation = "0 0 1 128"; + scale = "1 1 1"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "812 900 150.344"; + rotation = "0 0 1 119"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "828 428 120.375"; + rotation = "0 0 1 162"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "604 852 130.406"; + rotation = "0 0 1 224"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "1172 860 197.391"; + rotation = "0 0 1 150"; + scale = "0.8 0.8 0.8"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "668 516 115.172"; + rotation = "0 0 1 67"; + scale = "1.1 1.1 1.1"; + shapeName = "dorg19.dts"; + }; + new TSStatic() { + position = "428 380 178.078"; + rotation = "0 0 -1 72.0002"; + scale = "0.9 0.9 0.9"; + shapeName = "dorg19.dts"; + }; + }; + }; +}; +//--- OBJECT WRITE END --- + +exec("scripts/training5.cs"); diff --git a/base/missions/UltimaThule.mis b/base/missions/UltimaThule.mis new file mode 100644 index 0000000..1ad3674 --- /dev/null +++ b/base/missions/UltimaThule.mis @@ -0,0 +1,849 @@ +// DisplayName = Ultima Thule +// MissionTypes = Siege + +//--- MISSION QUOTE BEGIN --- +//Appear at points the enemy must hasten to defend; march swiftly to places where you are not expected. +// -- Sun-Tzu, The Art of War +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[Siege]Attackers must destroy forcefield generators to access defending base +//Stealth is key to this mission +//No vehicle stations +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + musicTrack = "ice"; + Siege_timeLimit = "20"; + cdTrack = "5"; + powerCount = "0"; + + new MissionArea(MissionArea) { + area = "-536 -784 1040 1264"; + flightCeiling = "2000"; + flightCeilingRange = "50"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.600000 0.600000 0.600000 1.000000"; + ambient = "0.200000 0.200000 0.200000 1.000000"; + position = "-1024 -1024 0"; + locked = "true"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/snowdet2"; + terrainFile = "UltimaThule.ter"; + squareSize = "8"; + emptySquares = "220030 220286 358520 358776 359032 359288 294008 235933 236189 367516 433307 302492"; + position = "-1024 -1024 0"; + locked = "true"; + hazeDistance = "250"; + visibleDistance = "1200"; + }; + new NavigationGraph(NavGraph) { + conjoinAngleDev = "45"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + position = "0 0 0 1"; + XDimOverSize = "0"; + GraphFile = "UltimaThule.nav"; + locked = "true"; + rotation = "0 0 0 0"; + conjoinBowlDev = "20"; + coverage = "0"; + scale = "1 1 1"; + YDimOverSize = "0"; + }; + new SimGroup(Teams) { + powerCount = "0"; + + new SimGroup(Team2) { + powerCount = "0"; + + new SimGroup(spawnspheres) { + powerCount = "0"; + + new SpawnSphere() { + position = "-17.75 -170.391 105.793"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "100"; + sphereWeight = "100"; + indoorWeight = "100"; + outdoorWeight = "0"; + locked = "true"; + }; + }; + new SimGroup(base) { + powerCount = "3"; + + new InteriorInstance() { + position = "-7.62 -171.5 47.6491"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + interiorFile = "sbase5.dif"; + showTerrainInside = "0"; + locked = "true"; + team = "2"; + }; + new StaticShape() { + position = "41.78 -224.046 45.55"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "South"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + name = "Sorth Entrance Generator"; + Target = "33"; + team = "1"; + }; + new StaticShape() { + position = "40.62 -127.18 51.09"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "North"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + name = "East Generator"; + Target = "34"; + team = "1"; + }; + new Turret() { + position = "-1.6 -288.306 120.594"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "South"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "MissileBarrelLarge"; + lastProjectile = "4747"; + locked = "true"; + originalBarrel = "MissileBarrelLarge"; + Target = "35"; + team = "1"; + }; + new Turret() { + position = "-47.944 -49.71 130.086"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "North"; + dataBlock = "TurretBaseLarge"; + lockCount = "0"; + homingCount = "0"; + initialBarrel = "MissileBarrelLarge"; + lastProjectile = "4741"; + locked = "true"; + originalBarrel = "MissileBarrelLarge"; + Target = "36"; + team = "1"; + }; + new StaticShape() { + position = "29.2665 -147.266 77.15"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "Great Hall"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Trigger = "3336"; + Target = "37"; + team = "1"; + }; + new StaticShape() { + position = "29.14 -184.838 77.15"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Great Hall"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Trigger = "3338"; + Target = "38"; + team = "1"; + }; + new Item() { + position = "-50.698 -185.06 77.4285"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + team = "2"; + }; + new StaticShape() { + position = "2.82 -194.077 126.913"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Long Range"; + dataBlock = "SensorLargePulse"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "39"; + team = "1"; + }; + new InteriorInstance() { + position = "2.92 -194.397 103.295"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "smiscb.dif"; + showTerrainInside = "0"; + locked = "true"; + team = "2"; + }; + new Item() { + position = "42.33 -162.045 48.5718"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + team = "2"; + }; + new StaticShape() { + position = "40.8585 -215.877 45.62"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "South Entrance"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Trigger = "3344"; + Target = "40"; + team = "1"; + }; + new StaticShape() { + position = "29.7229 -165.563 72.1"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Great Hall"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + name = "Great Hall Generator"; + Target = "41"; + team = "1"; + }; + new WayPoint() { + position = "34.89 -165.434 71.8233"; + rotation = "1 0 0 0"; + scale = "0.1 0.1 0.1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Great Hall Generator"; + team = "1"; + locked = "true"; + }; + new WayPoint() { + position = "40.81 -129.263 50.1692"; + rotation = "1 0 0 0"; + scale = "0.1 0.1 0.1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "East Generator"; + team = "1"; + locked = "true"; + }; + new WayPoint() { + position = "40.03 -223.787 46.0142"; + rotation = "1 0 0 0"; + scale = "0.1 0.1 0.1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "South Entrance Generator"; + team = "1"; + locked = "true"; + }; + new StaticShape() { + position = "31.6522 -165.653 51.15"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "Control Switch"; + dataBlock = "FlipFlop"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "42"; + team = "1"; + }; + new ForceFieldBare() { + position = "25.7162 -158.946 50.9885"; + rotation = "1 0 0 0"; + scale = "10.7955 1 8.81866"; + dataBlock = "defaultForceFieldBare"; + locked = "true"; + Target = "43"; + team = "1"; + }; + new ForceFieldBare() { + position = "24.9871 -171.971 50.6676"; + rotation = "1 0 0 0"; + scale = "1 13.0754 9.26102"; + dataBlock = "defaultForceFieldBare"; + locked = "true"; + Target = "44"; + team = "1"; + }; + new ForceFieldBare() { + position = "26.2857 -173.158 50.9898"; + rotation = "1 0 0 0"; + scale = "10.7955 1 8.81866"; + dataBlock = "defaultForceFieldBare"; + locked = "true"; + Target = "45"; + team = "1"; + }; + new TSStatic() { + position = "-63.6461 -63.51 115.67"; + rotation = "0 -1 0 89.9544"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + }; + new TSStatic() { + position = "-55.1833 -63.5947 115.67"; + rotation = "0 -1 0 89.9544"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + }; + new TSStatic() { + position = "-57.9987 -63.4812 115.67"; + rotation = "0 -1 0 89.9544"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + }; + new TSStatic() { + position = "-46.7185 -63.4731 115.67"; + rotation = "0 -1 0 89.9544"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + }; + new TSStatic() { + position = "-44.1589 -63.4965 115.67"; + rotation = "0 -1 0 89.9544"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + }; + new TSStatic() { + position = "-49.5346 -63.4763 115.67"; + rotation = "0 -1 0 89.9544"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + }; + new TSStatic() { + position = "-52.308 -63.4494 115.67"; + rotation = "0 -1 0 89.9544"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + }; + new TSStatic() { + position = "-60.868 -63.5004 115.67"; + rotation = "0 -1 0 89.9544"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + }; + new TSStatic() { + position = "-64.6154 -60.488 113.16"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + }; + new TSStatic() { + position = "-64.6651 -55.7284 113.16"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + }; + new TSStatic() { + position = "-64.7217 -50.7434 113.16"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + }; + new TSStatic() { + position = "-64.6682 -45.8125 113.16"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + }; + new TSStatic() { + position = "-64.8208 -37.1847 113.16"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + }; + new TSStatic() { + position = "-64.6817 -41.6522 113.16"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + }; + new TSStatic() { + position = "-64.6981 -39.6572 115.16"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + }; + new TSStatic() { + position = "-64.644 -44.8315 115.16"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + }; + new TSStatic() { + position = "-64.706 -49.1668 115.16"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + }; + new TSStatic() { + position = "-64.6571 -53.6174 115.16"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + }; + new TSStatic() { + position = "-64.6351 -58.2494 115.16"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + }; + new TSStatic() { + position = "-64.6484 -41.5186 117.16"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + }; + new TSStatic() { + position = "-64.6448 -48.1693 117.16"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + }; + new TSStatic() { + position = "-64.4692 -55.5371 117.16"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + }; + new TSStatic() { + position = "-64.6119 -44.74 119.16"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + shapeName = "stackable3m.dts"; + }; + }; + new SimGroup(OuterFFGens) { + powerCount = "2"; + + new SimGroup(FFBeta) { + powerCount = "2"; + + new ForceFieldBare() { + position = "-52.954 -62.074 96.9079"; + rotation = "1 0 0 0"; + scale = "10.2257 1 7.86202"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + color = "0.500000 0.500000 1.000000 1.000000"; + triggerCount = "0"; + Target = "46"; + team = "1"; + }; + }; + new StaticShape() { + position = "246.04 275.45 134.33"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "NE Force Field"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + name = "NE Force Field Generator #1"; + Target = "47"; + team = "1"; + }; + new StaticShape() { + position = "243.46 232.45 166.9"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + nameTag = "NE Force Field"; + dataBlock = "GeneratorLarge"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + name = "NE Force Field Generator #2"; + Target = "48"; + team = "1"; + }; + new InteriorInstance() { + position = "240.91 269.69 155.91"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "sbunk9.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + team = "2"; + }; + new SimGroup(FFAlpha) { + powerCount = "2"; + + new ForceFieldBare() { + position = "-5.52 -284.655 95.5815"; + rotation = "1 0 0 0"; + scale = "8.15845 1 6.08793"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + color = "0.500000 0.500000 1.000000 1.000000"; + triggerCount = "0"; + Target = "49"; + team = "1"; + }; + new ForceFieldBare() { + position = "-33.6013 -45.677 96.4871"; + rotation = "0 0 1 89.9544"; + scale = "10.2257 1 7.86202"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + color = "0.500000 0.500000 1.000000 1.000000"; + triggerCount = "0"; + Target = "50"; + team = "1"; + }; + }; + new WayPoint() { + position = "239.74 221.29 169.23"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "North Force Field Generator Bunker"; + team = "1"; + locked = "true"; + }; + new Item() { + position = "250.45 216.71 144.22"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + team = "2"; + }; + }; + }; + new SimGroup(Team1) { + powerCount = "0"; + + new SimGroup(spawnspheres) { + powerCount = "0"; + + new SpawnSphere() { + position = "375.86 -124.438 295.988"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "50"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + new SimGroup(base) { + providesPower = "1"; + powerCount = "2"; + + new StaticShape() { + position = "373.914 -91.7462 304.2"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + nameTag = "East Assault"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Trigger = "3376"; + Target = "51"; + team = "2"; + }; + new Item() { + position = "374.745 -99.3849 314.344"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + Target = "-1"; + team = "1"; + }; + new InteriorInstance() { + position = "372.511 -99.2266 250.757"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "stowr6.dif"; + showTerrainInside = "0"; + locked = "true"; + team = "1"; + }; + new ForceFieldBare() { + position = "378.385 -108.783 304.178"; + rotation = "0 -1 0 11.459"; + scale = "0.1 18.5835 8.93002"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + Target = "52"; + team = "2"; + }; + new ForceFieldBare() { + position = "369.634 -108.648 304.36"; + rotation = "0 1 0 13.7511"; + scale = "0.1 18.5835 8.93002"; + dataBlock = "defaultTeamSlowFieldBare"; + locked = "true"; + Target = "53"; + team = "2"; + }; + new StaticShape() { + position = "373.933 -106.692 304.2"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "East Assault"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Trigger = "3384"; + Target = "54"; + team = "2"; + }; + new StaticShape() { + position = "375.031 -101.505 -305.489"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SolarPanel"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + Target = "55"; + team = "2"; + }; + }; + }; + new SimGroup(team0) { + powerCount = "0"; + }; + }; + new Sky(Sky) { + position = "-1024 -1024 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed1 = "0.0001"; + cloudSpeed2 = "0.0002"; + cloudSpeed3 = "0.0003"; + visibleDistance = "500"; + useSkyTextures = "0"; + SkySolidColor = "0.500000 0.500000 0.500000 1.000000"; + fogDistance = "350"; + fogColor = "0.500000 0.500000 0.500000 1.000000"; + fogVolume1 = "0 0 0"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "ice_dark.dml"; + windVelocity = "0.8 0.7 0"; + windEffectPrecipitation = "1"; + fogVolumeColor1 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor2 = "128.000000 128.000000 128.000000 0.000000"; + fogVolumeColor3 = "128.000000 128.000000 128.000000 0.000000"; + locked = "true"; + cloudSpeed0 = "0.000300 0.0003"; + }; + new Precipitation(Precipitation) { + position = "-123.6 -162.6 124.2"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Snow"; + percentage = "1"; + color1 = "1.000000 1.000000 1.000000 1.000000"; + color2 = "-1.000000 0.000000 0.000000 1.000000"; + color3 = "-1.000000 0.000000 0.000000 1.000000"; + offsetSpeed = "0.25"; + minVelocity = "0.25"; + maxVelocity = "1.5"; + maxNumDrops = "2000"; + maxRadius = "125"; + locked = "true"; + }; + new SimGroup(ObserverDropPoints) { + powerCount = "0"; + + new Camera() { + position = "57.01 -329.326 163.148"; + rotation = "0.448717 0.195026 -0.872134 52.979"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-42.184 -12.29 123.267"; + rotation = "0 0 1 111.727"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-27.8365 -162.051 76.7347"; + rotation = "0 0 1 88.8085"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "1.24824 -278.291 99.3577"; + rotation = "0 0 1 228.61"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-14.1716 -188.073 127.677"; + rotation = "0 0 1 93.9651"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-50.311 -44.814 106.787"; + rotation = "0.0836944 -0.168589 0.982127 128.015"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Ambiance) { + powerCount = "0"; + + new AudioEmitter() { + position = "-67.162 -108.482 130.149"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/snowstorm1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; + new InteriorInstance() { + position = "-156.267 -279.118 203.606"; + rotation = "0 1 0 31.5126"; + scale = "1.71005 1.75318 1"; + interiorFile = "srock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "120.774 -131.439 210.165"; + rotation = "0 0 -1 48.7014"; + scale = "2.29851 1.90265 1.70877"; + interiorFile = "srock6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "119.703 -306.184 167.608"; + rotation = "0 0 1 12.0321"; + scale = "1.16378 1.58153 1"; + interiorFile = "srock8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-82.6378 -543.135 242.058"; + rotation = "0 0 -1 27.502"; + scale = "1 1 1.20488"; + interiorFile = "srock7.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-22.4503 71.5691 153.838"; + rotation = "1 0 0 0"; + scale = "1.0139 1 1"; + interiorFile = "sspir1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Underhill.mis b/base/missions/Underhill.mis new file mode 100644 index 0000000..ff7308c --- /dev/null +++ b/base/missions/Underhill.mis @@ -0,0 +1,970 @@ +// MissionTypes = Hunters Bounty DM + +//--- MISSION QUOTE BEGIN --- +//Fah! Humans are weak! Find me a human who can fight, and I will bring you the sun in these two hands! +// -- Rog Gedharhk Blood-Drinker, Horde Maul reaver +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//[Hunters]Nexus located on outer catwalk +//Inventory stations located both inside and outside main bunker +//Ideal for combined indoor/outdoor tactics +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + musicTrack = "badlands"; + powerCount = "0"; + cdTrack = "4"; + + new MissionArea(MissionArea) { + area = "-672 -848 928 1104"; + flightCeiling = "300"; + flightCeilingRange = "20"; + locked = "true"; + }; + new Sky(Sky) { + position = "0 0 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed[0] = "0.000500 0.000030"; + cloudSpeed[1] = "0.000120 0.000001"; + cloudSpeed[2] = "0.000205 0.000002"; + visibleDistance = "500"; + useSkyTextures = "1"; + SkySolidColor = "0.39 0.39 0.39 0.000000"; + fogDistance = "25"; + fogColor = "0.500000 0.450000 0.400000 1.000000"; + fogVolume1 = "800 125 150"; + fogVolume2 = "700 150 250"; + fogVolume3 = "0 0 0"; + materialList = "Badlands_l4.dml"; + locked = "true"; + }; + new Sun() { + direction = "0.444193 0.595505 -0.669378"; + color = "0.650000 0.650000 0.650000 1.000000"; + ambient = "0.600000 0.600000 0.600000 1.000000"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + locked = "true"; + position = "0 0 0"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/baddet2"; + terrainFile = "Underhill.ter"; + squareSize = "8"; + emptySquares = "417378 483170 417890 418146 92255 355683 355939 356195 356451"; + locked = "true"; + position = "-1024 -1024 0"; + }; + new NavigationGraph(NavGraph) { + graphFile = "Underhill.nav"; + conjoinAngleDev = "65"; + conjoinBowlDev = "20"; + coverage = "0"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + rotation = "0 0 0 0"; + scale = "1 1 1"; + locked = "true"; + position = "0 0 0 1"; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "-302.673 -262.509 103.127"; + rotation = "0.234806 -0.111358 0.965643 52.314"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-305.01 -92.4793 106.915"; + rotation = "0.0915308 -0.22217 0.970702 136.406"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-211.746 -200.835 67.2206"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + + new SimGroup(Team1) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-414.339 -308.088 54.4288"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "70"; + sphereWeight = "15"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + new SpawnSphere() { + position = "-209.827 -249.58 103.5"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "50"; + indoorWeight = "100"; + outdoorWeight = "25"; + locked = "true"; + }; + new SpawnSphere() { + position = "-211.649 -137.731 101.166"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "50"; + sphereWeight = "50"; + indoorWeight = "100"; + outdoorWeight = "25"; + locked = "true"; + }; + new SpawnSphere() { + position = "-284.785 -188.423 99.8876"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "30"; + sphereWeight = "10"; + indoorWeight = "100"; + outdoorWeight = "0"; + locked = "true"; + }; + }; + }; + new SimGroup(team0) { + providesPower = "1"; + + new InteriorInstance() { + position = "-177.197 -198.697 95.8141"; + rotation = "0 0 1 44.6907"; + scale = "1 1 1"; + interiorFile = "xbrdgo.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-342.425 -243.952 16.8096"; + rotation = "0 0 1 129"; + scale = "1 1 1"; + interiorFile = "xbunk9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Item() { + position = "-174.268 -200.789 95.8883"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-176.399 -198.678 95.8883"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-178.53 -196.567 95.8883"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-181.183 -182.927 52.2084"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-181.183 -179.927 52.2084"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-181.183 -176.927 52.2084"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-180.942 -198.872 52.1732"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-180.942 -195.872 52.1732"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-180.942 -192.872 52.1732"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-259.036 -202.043 56.9523"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-259.036 -199.043 56.9523"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-259.036 -196.043 56.9523"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-181.256 -176.715 64.018"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-181.256 -179.715 64.018"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-181.256 -182.715 64.018"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-181.52 -193.117 64.0374"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-181.52 -196.117 64.0374"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-181.52 -199.117 64.0374"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-199.082 -157.872 64.2012"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-196.083 -157.814 64.2012"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-193.083 -157.756 64.2012"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-209.125 -157.53 64.1894"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-212.124 -157.563 64.1894"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-215.124 -157.595 64.1894"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-225.071 -157.407 64.3146"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-228.07 -157.439 64.3146"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-231.07 -157.472 64.3146"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory1) { + position = "-211.828 -169.646 39.6343"; + rotation = "0 0 1 180.091"; + scale = "1 1 1"; + nameTag = "Alcove"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory2) { + position = "-242.561 -228.348 64.626"; + rotation = "0 0 1 135.791"; + scale = "1 1 1"; + nameTag = "Catwalk"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory3) { + position = "-179.643 -218.372 39.6354"; + rotation = "0 0 -1 89.9544"; + scale = "1 1 1"; + nameTag = "Fallen Crate"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory4) { + position = "-212.007 -241.022 63.6065"; + rotation = "0 0 1 179.909"; + scale = "1 1 1"; + nameTag = "Crate Room"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory5) { + position = "-253.321 -191.161 75.6358"; + rotation = "0 0 1 129.488"; + scale = "1 1 1"; + nameTag = "Attic"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new StaticShape(Team0StationInventory6) { + position = "-332.496 -252.522 18.8065"; + rotation = "0 0 1 129"; + scale = "1 1 1"; + nameTag = "Outdoor Bunker"; + dataBlock = "StationInventory"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new WayPoint() { + position = "-212 -182 63.6354"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Main Base"; + team = "0"; + locked = "true"; + missionTypesList = "Bounty DM"; + }; + new WayPoint() { + position = "-289.894 -198.584 84.9911"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Nexus"; + team = "0"; + locked = "true"; + missionTypesList = "Hunters"; + }; + new StaticShape() { + position = "-289.894 -198.584 88.1585"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "NexusBase"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + missionTypesList = "Hunters"; + }; + new Trigger(NexusTrigger) { + position = "-299.871 -181.252 87.8578"; + rotation = "1 0 0 0"; + scale = "20.2352 35.4944 19.4353"; + dataBlock = "gameTrigger"; + polyhedron = "0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000 -0.0000000 -1.0000000 -0.0000000 -0.0000000 -0.0000000 1.0000000"; + locked = "true"; + missionTypesList = "Hunters"; + }; + new Item() { + position = "-289.894 -198.584 87.8578"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Nexus"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + flashThreadDir = "1"; + locked = "true"; + missionTypesList = "Hunters"; + }; + new StaticShape() { + position = "-289.894 -198.584 95.758"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "NexusCap"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + missionTypesList = "Hunters"; + }; + new InteriorInstance() { + position = "-212 -208 65.6382"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "xbase1.dif"; + showTerrainInside = "0"; + AudioProfile = "Universal_Base_2"; + locked = "true"; + }; + new TSStatic() { + position = "-207.892 -225.915 63.64"; + rotation = "0 0 -1 0.571981"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-216.834 -223.537 63.64"; + rotation = "0 0 -1 8.02127"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-210.692 -226.349 63.64"; + rotation = "0 0 1 10.8863"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-207.613 -223.304 63.64"; + rotation = "0 0 1 4.0109"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-209.807 -223.338 63.64"; + rotation = "0 0 -1 2.8649"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-213.178 -226.282 63.64"; + rotation = "0 0 -1 1.71869"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-214.634 -224.964 63.64"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-211.976 -223.637 63.64"; + rotation = "0 0 1 182.774"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-212.355 -225.056 63.64"; + rotation = "0 0 1 1.71915"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-207.758 -224.69 63.64"; + rotation = "0 0 1 0.573347"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-214.242 -223.556 63.64"; + rotation = "0 0 1 8.59429"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-215.426 -226.327 63.64"; + rotation = "0 0 1 6.87539"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-209.934 -224.832 63.64"; + rotation = "0 0 -1 4.01071"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-210.875 -225.901 64.64"; + rotation = "0 0 1 15.4698"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-213.035 -224.716 64.64"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-215.317 -223.728 64.64"; + rotation = "0 0 -1 2.8649"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-209.491 -223.597 64.64"; + rotation = "0 0 1 7.44841"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-207.339 -223.844 64.64"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-208.155 -227.053 64.199"; + rotation = "-0.286038 0.251278 -0.924685 101.825"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-207.48 -225.149 64.64"; + rotation = "0 0 -1 9.16737"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-215.33 -225.761 64.64"; + rotation = "0 0 -1 42.9718"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-209.701 -224.887 64.64"; + rotation = "0 0 1 4.01071"; + scale = "1 1 1"; + shapeName = "stackable3s.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-179.456 -222.098 40.6651"; + rotation = "-1 0 0 89.9544"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-179.578 -222.685 42.6651"; + rotation = "-0.9991 -0.0300059 -0.029982 90.006"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + new TSStatic() { + position = "-179.344 -227.834 41.7126"; + rotation = "0.939366 -0.342898 -0.00342922 181.162"; + scale = "1 1 1"; + shapeName = "stackable1l.dts"; + locked = "true"; + }; + }; + }; + new SimGroup(Bridge) { + + new InteriorInstance() { + position = "-253 -113.79 88.1429"; + rotation = "0 0 1 90"; + scale = "1 1 1"; + interiorFile = "xbrdg0.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-268.818 -113.79 88.1429"; + rotation = "0 0 -1 90"; + scale = "1 1 1"; + interiorFile = "xbrdg8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-289.818 -113.79 88.1429"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "xbrdg4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-289.818 -134.75 88.1429"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "xbrdg8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-289.818 -150.75 88.1429"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "xbrdg1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-289.818 -166.75 88.1429"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "xbrdg8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-289.818 -182.75 88.1429"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "xbrdg1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-289.818 -198.75 88.1429"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "xbrdg8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-289.818 -214.75 88.1429"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "xbrdg1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-289.818 -230.75 88.1429"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "xbrdg8.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-289.818 -251.75 88.1429"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "xbrdg4.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-268.818 -251.75 88.1429"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "xbrdg0.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-263.295 -251.54 56.6414"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "xbrdg10.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-289.671 -198.757 58.1372"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "xbrdg10.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-247.454 -113.85 56.569"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "xbrdg10.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + }; + new AudioEmitter() { + position = "-212.109 -208.421 120.699"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + fileName = "fx/environment/drywind.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "1"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/missions/Whiteout.mis b/base/missions/Whiteout.mis new file mode 100644 index 0000000..c40b99d --- /dev/null +++ b/base/missions/Whiteout.mis @@ -0,0 +1,612 @@ +// MissionTypes = DM Bounty + +//--- MISSION QUOTE BEGIN --- +//Let 'em come. We'll leave their frozen bodies scattered from here to the gates of Dark. +// -- Darvis M'Klannin, Starwolf Great Sergeant, 3941 CE +//--- MISSION QUOTE END --- + +//--- MISSION STRING BEGIN --- +//No inventory stations; hidden weapon caches +//5 towers, including central "spider" bunker +//Good visibility +//--- MISSION STRING END --- + +//--- OBJECT WRITE BEGIN --- +new SimGroup(MissionGroup) { + cdTrack = "5"; + musicTrack = "ice"; + powerCount = "0"; + + new MissionArea(MissionArea) { + area = "-512 -296 784 816"; + flightCeiling = "300"; + flightCeilingRange = "20"; + locked = "true"; + }; + new Sun() { + direction = "0.57735 0.57735 -0.57735"; + color = "0.700000 0.700000 0.700000 1.000000"; + ambient = "0.600000 0.600000 0.620000 1.000000"; + rotation = "1 0 0 0"; + locked = "true"; + scale = "1 1 1"; + position = "-1024 -1024 0"; + }; + new TerrainBlock(Terrain) { + rotation = "1 0 0 0"; + scale = "1 1 1"; + detailTexture = "details/snowdet1"; + terrainFile = "Whiteout.ter"; + squareSize = "8"; + emptySquares = "302934 303190 303446 303702 303958"; + hazeDistance = "250"; + visibleDistance = "1200"; + locked = "true"; + position = "-1024 -1024 0"; + }; + new NavigationGraph(NavGraph) { + graphFile = "Whiteout.nav"; + conjoinAngleDev = "55"; + conjoinBowlDev = "20"; + coverage = "0"; + cullDensity = "0.3"; + customArea = "0 0 0 0"; + rotation = "0 0 0 0"; + locked = "true"; + XDimOverSize = "0"; + scale = "1 1 1"; + position = "0 0 0 1"; + YDimOverSize = "0"; + }; + new Sky(Sky) { + position = "-1024 -1024 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + cloudHeightPer[0] = "0.349971"; + cloudHeightPer[1] = "0.25"; + cloudHeightPer[2] = "0.199973"; + cloudSpeed[0] = "0.000000 0.000000"; + cloudSpeed[1] = "0.000001 0.000001"; + cloudSpeed[2] = "0.000001 0.000001"; + visibleDistance = "600"; + useSkyTextures = "1"; + SkySolidColor = "0.365 0.39 0.42 0.000000"; + fogDistance = "0"; + fogColor = "0.700000 0.700000 0.700000 1.000000"; + fogVolume1 = "0 0 0"; + fogVolume2 = "0 0 0"; + fogVolume3 = "0 0 0"; + materialList = "sky_ice_blue.dml"; + locked = "true"; + }; + new SimGroup(ObserverDropPoints) { + + new Camera() { + position = "19.11 -193.232 197.106"; + rotation = "0 0 1 27.502"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-332.602 -125.808 260.419"; + rotation = "0 0 -1 28.0749"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-328.306 368.57 166.892"; + rotation = "0 0 1 176.471"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "251 151.14 176.573"; + rotation = "0 0 -1 24.6372"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + new Camera() { + position = "-54.949 125.93 175.116"; + rotation = "0 0 -1 84.7977"; + scale = "1 1 1"; + dataBlock = "Observer"; + lockCount = "0"; + homingCount = "0"; + locked = "true"; + }; + }; + new SimGroup(Teams) { + + new SimGroup(Team1) { + + new SimGroup(spawnspheres) { + + new SpawnSphere() { + position = "-125.577 130.04 116.667"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SpawnSphereMarker"; + lockCount = "0"; + homingCount = "0"; + radius = "300"; + sphereWeight = "100"; + indoorWeight = "0"; + outdoorWeight = "100"; + locked = "true"; + }; + }; + }; + new SimGroup(team0) { + + new SimGroup(Stuff) { + + new InteriorInstance() { + position = "37.03 -152.774 123.396"; + rotation = "0 0 1 47.5555"; + scale = "1 1 1"; + interiorFile = "stowr6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Item() { + position = "38.09 -153.994 187.951"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairKit"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "36.94 -152.966 177.605"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Plasma"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "32.19 -147.172 177.772"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "PlasmaAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "42.35 -158.339 177.554"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "PlasmaAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-129.073 130.98 113.016"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "stowr3.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Item() { + position = "-140.93 142.6 183.365"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "CloakingPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-117.119 143 183.245"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "EnergyPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-116.939 118.98 183.219"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-141.032 118.99 183.182"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ShieldPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-138.733 140.45 173.59"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ShockLance"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-118.894 121.09 173.653"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ELFGun"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-138.311 115.58 173.841"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "SniperRifle"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-138.276 131.76 158.335"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-119.978 131.65 158.898"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "RepairPatch"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-129.209 139.5 158.399"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Grenade"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-129.033 121.34 158.224"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ConcussionGrenade"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-358.427 -90.397 262.498"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + interiorFile = "stowr1.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Item() { + position = "-358.857 -90.312 254.1"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "GrenadeLauncher"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-355.931 -92.644 253.441"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "GrenadeLauncherAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-361.412 -87.635 253.753"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "GrenadeLauncherAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "-271.875 268.56 123.77"; + rotation = "0 0 1 89.9544"; + scale = "1 1 1"; + interiorFile = "sbunk9.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Item() { + position = "-266.535 264.41 110.952"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Chaingun"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-266.411 262.56 102.852"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ChaingunAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-266.133 267.02 103.464"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ChaingunAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "-324.828 257.39 112.4"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "ShieldPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new InteriorInstance() { + position = "229.52 179.79 108.87"; + rotation = "0 0 1 49.8473"; + scale = "1 1 1"; + interiorFile = "stowr6.dif"; + showTerrainInside = "0"; + locked = "true"; + }; + new Item() { + position = "231.92 178.69 173.293"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "AmmoPack"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "224.24 173.89 163.143"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "DiscAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "236.18 183.6 163.465"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "DiscAmmo"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "231.51 178.83 163.087"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Disc"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "221.97 188.68 163.529"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "Mine"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new Item() { + position = "237.51 170.71 163.918"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "FlashGrenade"; + lockCount = "0"; + homingCount = "0"; + collideable = "0"; + static = "1"; + rotate = "0"; + locked = "true"; + }; + new WayPoint() { + position = "228.41 174.98 157.726"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Outpost 1"; + team = "0"; + locked = "true"; + }; + new WayPoint() { + position = "-116.118 128.56 174.016"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "The Overlook"; + team = "0"; + locked = "true"; + }; + new WayPoint() { + position = "-305.137 265.34 118"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Outpost 3"; + team = "0"; + locked = "true"; + }; + new WayPoint() { + position = "-354.718 -85.735 244.1"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Outpost 4"; + team = "0"; + locked = "true"; + }; + new WayPoint() { + position = "27.04 -146.046 183.976"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Outpost 2"; + team = "0"; + locked = "true"; + }; + }; + }; + }; + new AudioEmitter() { + position = "25.89 -143.312 147.898"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + filename = "fx/environment/coldwind1.wav"; + useProfileDescription = "0"; + outsideAmbient = "1"; + volume = "0.4"; + isLooping = "1"; + is3D = "0"; + minDistance = "20"; + maxDistance = "1280"; + coneInsideAngle = "360"; + coneOutsideAngle = "360"; + coneOutsideVolume = "1"; + coneVector = "0 0 1"; + loopCount = "-1"; + minLoopGap = "0"; + maxLoopGap = "0"; + type = "EffectAudioType"; + locked = "true"; + }; +}; +//--- OBJECT WRITE END --- diff --git a/base/prefs/French Config.cs b/base/prefs/French Config.cs new file mode 100644 index 0000000..6fe8894 --- /dev/null +++ b/base/prefs/French Config.cs @@ -0,0 +1,98 @@ +// Tribes 2 Input Map File +moveMap.delete(); +new ActionMap(moveMap); +moveMap.bindCmd(keyboard, "escape", "", "escapeFromGame();"); +moveMap.bind(keyboard, "alt e", toggleEditor); +moveMap.bind(keyboard, "s", moveleft); +moveMap.bind(keyboard, "f", moveright); +moveMap.bind(keyboard, "e", moveforward); +moveMap.bind(keyboard, "d", movebackward); +moveMap.bind(keyboard, "space", jump); +moveMap.bind(keyboard, "pageup", pageMessageHudUp); +moveMap.bind(keyboard, "pagedown", pageMessageHudDown); +moveMap.bind(keyboard, "x", voiceCapture); +moveMap.bind(keyboard, "z", nextWeapon); +moveMap.bind(keyboard, "q", setZoomFOV); +moveMap.bind(keyboard, "r", useBackPack); +moveMap.bind(keyboard, "&", useFirstWeaponSlot); +moveMap.bind(keyboard, "é", useSecondWeaponSlot); +moveMap.bind(keyboard, "doublequote", useThirdWeaponSlot); +moveMap.bind(keyboard, "apostrophe", useFourthWeaponSlot); +moveMap.bind(keyboard, "(", useFifthWeaponSlot); +moveMap.bind(keyboard, "-", useSixthWeaponSlot); +moveMap.bind(keyboard, "g", throwGrenade); +moveMap.bind(keyboard, "b", placeMine); +moveMap.bind(keyboard, "h", placeBeacon); +moveMap.bind(keyboard, "l", useTargetingLaser); +moveMap.bind(keyboard, "ctrl r", throwPack); +moveMap.bind(keyboard, "ctrl f", throwFlag); +moveMap.bind(keyboard, "p", resizeChatHud); +moveMap.bind(keyboard, "t", toggleZoom); +moveMap.bind(keyboard, "numpadenter", toggleInventoryHud); +moveMap.bind(keyboard, "numpad1", selectFavorite1); +moveMap.bind(keyboard, "numpad2", selectFavorite2); +moveMap.bind(keyboard, "numpad3", selectFavorite3); +moveMap.bind(keyboard, "numpad4", selectFavorite4); +moveMap.bind(keyboard, "numpad5", selectFavorite5); +moveMap.bind(keyboard, "numpad6", selectFavorite6); +moveMap.bind(keyboard, "numpad7", selectFavorite7); +moveMap.bind(keyboard, "numpad8", selectFavorite8); +moveMap.bind(keyboard, "numpad9", selectFavorite9); +moveMap.bind(keyboard, "numpad0", selectFavorite10); +moveMap.bind(keyboard, "ctrl numpad0", quickPackEnergyPack); +moveMap.bind(keyboard, "ctrl numpad1", quickPackRepairPack); +moveMap.bind(keyboard, "ctrl numpad2", quickPackShieldPack); +moveMap.bind(keyboard, "ctrl numpad3", quickPackCloakPack); +moveMap.bind(keyboard, "ctrl numpad4", quickPackJammerPack); +moveMap.bind(keyboard, "ctrl numpad5", quickPackAmmoPack); +moveMap.bind(keyboard, "ctrl numpad6", quickPackSatchelCharge); +moveMap.bind(keyboard, "ctrl numpad7", quickPackDeployableStation); +moveMap.bind(keyboard, "ctrl numpad8", quickPackIndoorTurret); +moveMap.bind(keyboard, "ctrl numpad9", quickPackOutdoorTurret); +moveMap.bind(keyboard, "ctrl numpaddivide", quickPackMotionSensor); +moveMap.bind(keyboard, "ctrl *", quickPackPulse); +moveMap.bind(keyboard, "tab", toggleFirstPerson); +moveMap.bind(keyboard, "u", ToggleMessageHud); +moveMap.bind(keyboard, "y", TeamMessageHud); +moveMap.bind(keyboard, "v", activateChatMenuHud); +moveMap.bind(keyboard, "c", toggleCommanderMap); +moveMap.bind(keyboard, "ctrl k", suicide); +moveMap.bind(keyboard, "f1", toggleHelpGui); +moveMap.bind(keyboard, "f2", toggleScoreScreen); +moveMap.bind(keyboard, "f3", startRecordingDemo); +moveMap.bind(keyboard, "f4", stopRecordingDemo); +moveMap.bind(keyboard, "f6", toggleHudWaypoints); +moveMap.bind(keyboard, "f7", toggleHudMarkers); +moveMap.bind(keyboard, "f8", toggleHudCommands); +moveMap.bind(keyboard, "f9", toggleHudTargets); +moveMap.bind(keyboard, "n", toggleTaskListDlg); +moveMap.bind(keyboard, "return", fnAcceptTask); +moveMap.bind(keyboard, "backspace", fnDeclineTask); +moveMap.bind(keyboard, "shift c", fnTaskCompleted); +moveMap.bind(keyboard, "shift x", fnResetTaskList); +moveMap.bind(keyboard, "insert", voteYes); +moveMap.bind(keyboard, "delete", voteNo); +moveMap.bind(keyboard, "left", turnLeft); +moveMap.bind(keyboard, "right", turnRight); +moveMap.bind(keyboard, "up", panUp); +moveMap.bind(keyboard, "down", panDown); +moveMap.bind(keyboard, "shift z", prevWeapon); +moveMap.bind(keyboard, "a", useRepairKit); +moveMap.bind(keyboard, "ctrl-alt numpad1", selectFavorite11); +moveMap.bind(keyboard, "ctrl-alt numpad2", selectFavorite12); +moveMap.bind(keyboard, "ctrl-alt numpad3", selectFavorite13); +moveMap.bind(keyboard, "ctrl-alt numpad4", selectFavorite14); +moveMap.bind(keyboard, "ctrl-alt numpad5", selectFavorite15); +moveMap.bind(keyboard, "ctrl-alt numpad6", selectFavorite16); +moveMap.bind(keyboard, "ctrl-alt numpad7", selectFavorite17); +moveMap.bind(keyboard, "ctrl-alt numpad8", selectFavorite18); +moveMap.bind(keyboard, "ctrl-alt numpad9", selectFavorite19); +moveMap.bind(keyboard, "ctrl-alt numpad0", selectFavorite20); +moveMap.bind(keyboard, "w", toggleFreeLook); +moveMap.bind(keyboard, "ctrl z", throwWeapon); +moveMap.bind(mouse0, "xaxis", yaw); +moveMap.bind(mouse0, "yaxis", pitch); +moveMap.bind(mouse0, "button0", mouseFire); +moveMap.bind(mouse0, "button1", mouseJet); +moveMap.bind(mouse0, "zaxis", cycleWeaponAxis); +GlobalActionMap.bind(keyboard, "super2", toggleConsole); diff --git a/base/prefs/German config.cs b/base/prefs/German config.cs new file mode 100644 index 0000000..b444ca9 --- /dev/null +++ b/base/prefs/German config.cs @@ -0,0 +1,99 @@ +// Tribes 2 Input Map File +moveMap.delete(); +new ActionMap(moveMap); +moveMap.bindCmd(keyboard, "escape", "", "escapeFromGame();"); +moveMap.bind(keyboard, "alt e", toggleEditor); +moveMap.bind(keyboard, "s", moveleft); +moveMap.bind(keyboard, "f", moveright); +moveMap.bind(keyboard, "e", moveforward); +moveMap.bind(keyboard, "d", movebackward); +moveMap.bind(keyboard, "space", jump); +moveMap.bind(keyboard, "shift a", altTrigger); +moveMap.bind(keyboard, "pageup", pageMessageHudUp); +moveMap.bind(keyboard, "pagedown", pageMessageHudDown); +moveMap.bind(keyboard, "x", voiceCapture); +moveMap.bind(keyboard, "shift w", prevWeapon); +moveMap.bind(keyboard, "w", nextWeapon); +moveMap.bind(keyboard, "z", TeamMessageHud); +moveMap.bind(keyboard, "q", useRepairKit); +moveMap.bind(keyboard, "r", useBackPack); +moveMap.bind(keyboard, "1", useFirstWeaponSlot); +moveMap.bind(keyboard, "2", useSecondWeaponSlot); +moveMap.bind(keyboard, "3", useThirdWeaponSlot); +moveMap.bind(keyboard, "4", useFourthWeaponSlot); +moveMap.bind(keyboard, "5", useFifthWeaponSlot); +moveMap.bind(keyboard, "6", useSixthWeaponSlot); +moveMap.bind(keyboard, "g", throwGrenade); +moveMap.bind(keyboard, "b", placeMine); +moveMap.bind(keyboard, "h", placeBeacon); +moveMap.bind(keyboard, "l", useTargetingLaser); +moveMap.bind(keyboard, "ctrl w", throwWeapon); +moveMap.bind(keyboard, "ctrl r", throwPack); +moveMap.bind(keyboard, "ctrl f", throwFlag); +moveMap.bind(keyboard, "t", setZoomFOV); +moveMap.bind(keyboard, "a", toggleZoom); +moveMap.bind(keyboard, "numpadenter", toggleInventoryHud); +moveMap.bind(keyboard, "numpad1", selectFavorite1); +moveMap.bind(keyboard, "numpad2", selectFavorite2); +moveMap.bind(keyboard, "numpad3", selectFavorite3); +moveMap.bind(keyboard, "numpad4", selectFavorite4); +moveMap.bind(keyboard, "numpad5", selectFavorite5); +moveMap.bind(keyboard, "numpad6", selectFavorite6); +moveMap.bind(keyboard, "numpad7", selectFavorite7); +moveMap.bind(keyboard, "numpad8", selectFavorite8); +moveMap.bind(keyboard, "numpad9", selectFavorite9); +moveMap.bind(keyboard, "numpad0", selectFavorite10); +moveMap.bind(keyboard, "shift numpad1", selectFavorite11); +moveMap.bind(keyboard, "shift numpad2", selectFavorite12); +moveMap.bind(keyboard, "shift numpad3", selectFavorite13); +moveMap.bind(keyboard, "shift numpad4", selectFavorite14); +moveMap.bind(keyboard, "shift numpad5", selectFavorite15); +moveMap.bind(keyboard, "shift numpad6", selectFavorite16); +moveMap.bind(keyboard, "shift numpad7", selectFavorite17); +moveMap.bind(keyboard, "shift numpad8", selectFavorite18); +moveMap.bind(keyboard, "shift numpad9", selectFavorite19); +moveMap.bind(keyboard, "shift numpad0", selectFavorite20); +moveMap.bind(keyboard, "ctrl numpad0", quickPackEnergyPack); +moveMap.bind(keyboard, "ctrl numpad1", quickPackRepairPack); +moveMap.bind(keyboard, "ctrl numpad2", quickPackShieldPack); +moveMap.bind(keyboard, "ctrl numpad3", quickPackCloakPack); +moveMap.bind(keyboard, "ctrl numpad4", quickPackJammerPack); +moveMap.bind(keyboard, "ctrl numpad5", quickPackAmmoPack); +moveMap.bind(keyboard, "ctrl numpad6", quickPackSatchelCharge); +moveMap.bind(keyboard, "ctrl numpad7", quickPackDeployableStation); +moveMap.bind(keyboard, "ctrl numpad8", quickPackIndoorTurret); +moveMap.bind(keyboard, "ctrl numpad9", quickPackOutdoorTurret); +moveMap.bind(keyboard, "ctrl numpaddivide", quickPackMotionSensor); +moveMap.bind(keyboard, "ctrl *", quickPackPulse); +moveMap.bind(keyboard, "tab", toggleFirstPerson); +moveMap.bind(keyboard, "u", ToggleMessageHud); +moveMap.bind(keyboard, "v", activateChatMenuHud); +moveMap.bind(keyboard, "c", toggleCommanderMap); +moveMap.bind(keyboard, "ctrl k", suicide); +moveMap.bind(keyboard, "f1", toggleHelpGui); +moveMap.bind(keyboard, "f2", toggleScoreScreen); +moveMap.bind(keyboard, "f3", startRecordingDemo); +moveMap.bind(keyboard, "f4", stopRecordingDemo); +moveMap.bind(keyboard, "f6", toggleHudWaypoints); +moveMap.bind(keyboard, "f7", toggleHudMarkers); +moveMap.bind(keyboard, "f8", toggleHudTargets); +moveMap.bind(keyboard, "f9", toggleHudCommands); +moveMap.bind(keyboard, "n", toggleTaskListDlg); +moveMap.bind(keyboard, "return", fnAcceptTask); +moveMap.bind(keyboard, "backspace", fnDeclineTask); +moveMap.bind(keyboard, "shift c", fnTaskCompleted); +moveMap.bind(keyboard, "shift x", fnResetTaskList); +moveMap.bind(keyboard, "insert", voteYes); +moveMap.bind(keyboard, "delete", voteNo); +moveMap.bind(keyboard, "y", toggleFreeLook); +moveMap.bind(keyboard, "left", turnLeft); +moveMap.bind(keyboard, "right", turnRight); +moveMap.bind(keyboard, "up", panUp); +moveMap.bind(keyboard, "down", panDown); +moveMap.bind(keyboard, "p", resizeChatHud); +moveMap.bind(mouse0, "xaxis", yaw); +moveMap.bind(mouse0, "yaxis", pitch); +moveMap.bind(mouse0, "button0", mouseFire); +moveMap.bind(mouse0, "button1", mouseJet); +moveMap.bind(mouse0, "zaxis", cycleWeaponAxis); +GlobalActionMap.bind(keyboard, "^", toggleConsole); diff --git a/base/prefs/Italian Config.cs b/base/prefs/Italian Config.cs new file mode 100644 index 0000000..c5b2d35 --- /dev/null +++ b/base/prefs/Italian Config.cs @@ -0,0 +1,99 @@ +// Tribes 2 Input Map File +moveMap.delete(); +new ActionMap(moveMap); +moveMap.bindCmd(keyboard, "escape", "", "escapeFromGame();"); +moveMap.bind(keyboard, "alt e", toggleEditor); +moveMap.bind(keyboard, "s", moveleft); +moveMap.bind(keyboard, "f", moveright); +moveMap.bind(keyboard, "e", moveforward); +moveMap.bind(keyboard, "d", movebackward); +moveMap.bind(keyboard, "space", jump); +moveMap.bind(keyboard, "shift a", altTrigger); +moveMap.bind(keyboard, "pageup", pageMessageHudUp); +moveMap.bind(keyboard, "pagedown", pageMessageHudDown); +moveMap.bind(keyboard, "x", voiceCapture); +moveMap.bind(keyboard, "shift w", prevWeapon); +moveMap.bind(keyboard, "w", nextWeapon); +moveMap.bind(keyboard, "z", toggleFreeLook); +moveMap.bind(keyboard, "q", useRepairKit); +moveMap.bind(keyboard, "r", useBackPack); +moveMap.bind(keyboard, "1", useFirstWeaponSlot); +moveMap.bind(keyboard, "2", useSecondWeaponSlot); +moveMap.bind(keyboard, "3", useThirdWeaponSlot); +moveMap.bind(keyboard, "4", useFourthWeaponSlot); +moveMap.bind(keyboard, "5", useFifthWeaponSlot); +moveMap.bind(keyboard, "6", useSixthWeaponSlot); +moveMap.bind(keyboard, "g", throwGrenade); +moveMap.bind(keyboard, "b", placeMine); +moveMap.bind(keyboard, "h", placeBeacon); +moveMap.bind(keyboard, "l", useTargetingLaser); +moveMap.bind(keyboard, "ctrl w", throwWeapon); +moveMap.bind(keyboard, "ctrl r", throwPack); +moveMap.bind(keyboard, "ctrl f", throwFlag); +moveMap.bind(keyboard, "t", setZoomFOV); +moveMap.bind(keyboard, "a", toggleZoom); +moveMap.bind(keyboard, "numpadenter", toggleInventoryHud); +moveMap.bind(keyboard, "numpad1", selectFavorite1); +moveMap.bind(keyboard, "numpad2", selectFavorite2); +moveMap.bind(keyboard, "numpad3", selectFavorite3); +moveMap.bind(keyboard, "numpad4", selectFavorite4); +moveMap.bind(keyboard, "numpad5", selectFavorite5); +moveMap.bind(keyboard, "numpad6", selectFavorite6); +moveMap.bind(keyboard, "numpad7", selectFavorite7); +moveMap.bind(keyboard, "numpad8", selectFavorite8); +moveMap.bind(keyboard, "numpad9", selectFavorite9); +moveMap.bind(keyboard, "numpad0", selectFavorite10); +moveMap.bind(keyboard, "shift numpad1", selectFavorite11); +moveMap.bind(keyboard, "shift numpad2", selectFavorite12); +moveMap.bind(keyboard, "shift numpad3", selectFavorite13); +moveMap.bind(keyboard, "shift numpad4", selectFavorite14); +moveMap.bind(keyboard, "shift numpad5", selectFavorite15); +moveMap.bind(keyboard, "shift numpad6", selectFavorite16); +moveMap.bind(keyboard, "shift numpad7", selectFavorite17); +moveMap.bind(keyboard, "shift numpad8", selectFavorite18); +moveMap.bind(keyboard, "shift numpad9", selectFavorite19); +moveMap.bind(keyboard, "shift numpad0", selectFavorite20); +moveMap.bind(keyboard, "ctrl numpad0", quickPackEnergyPack); +moveMap.bind(keyboard, "ctrl numpad1", quickPackRepairPack); +moveMap.bind(keyboard, "ctrl numpad2", quickPackShieldPack); +moveMap.bind(keyboard, "ctrl numpad3", quickPackCloakPack); +moveMap.bind(keyboard, "ctrl numpad4", quickPackJammerPack); +moveMap.bind(keyboard, "ctrl numpad5", quickPackAmmoPack); +moveMap.bind(keyboard, "ctrl numpad6", quickPackSatchelCharge); +moveMap.bind(keyboard, "ctrl numpad7", quickPackDeployableStation); +moveMap.bind(keyboard, "ctrl numpad8", quickPackIndoorTurret); +moveMap.bind(keyboard, "ctrl numpad9", quickPackOutdoorTurret); +moveMap.bind(keyboard, "ctrl numpaddivide", quickPackMotionSensor); +moveMap.bind(keyboard, "ctrl *", quickPackPulse); +moveMap.bind(keyboard, "tab", toggleFirstPerson); +moveMap.bind(keyboard, "u", ToggleMessageHud); +moveMap.bind(keyboard, "y", TeamMessageHud); +moveMap.bind(keyboard, "v", activateChatMenuHud); +moveMap.bind(keyboard, "c", toggleCommanderMap); +moveMap.bind(keyboard, "ctrl k", suicide); +moveMap.bind(keyboard, "f1", toggleHelpGui); +moveMap.bind(keyboard, "f2", toggleScoreScreen); +moveMap.bind(keyboard, "f3", startRecordingDemo); +moveMap.bind(keyboard, "f4", stopRecordingDemo); +moveMap.bind(keyboard, "f6", toggleHudWaypoints); +moveMap.bind(keyboard, "f7", toggleHudMarkers); +moveMap.bind(keyboard, "f8", toggleHudTargets); +moveMap.bind(keyboard, "f9", toggleHudCommands); +moveMap.bind(keyboard, "n", toggleTaskListDlg); +moveMap.bind(keyboard, "return", fnAcceptTask); +moveMap.bind(keyboard, "backspace", fnDeclineTask); +moveMap.bind(keyboard, "shift c", fnTaskCompleted); +moveMap.bind(keyboard, "shift x", fnResetTaskList); +moveMap.bind(keyboard, "insert", voteYes); +moveMap.bind(keyboard, "delete", voteNo); +moveMap.bind(keyboard, "left", turnLeft); +moveMap.bind(keyboard, "right", turnRight); +moveMap.bind(keyboard, "up", panUp); +moveMap.bind(keyboard, "down", panDown); +moveMap.bind(keyboard, "p", resizeChatHud); +moveMap.bind(mouse0, "xaxis", yaw); +moveMap.bind(mouse0, "yaxis", pitch); +moveMap.bind(mouse0, "button0", mouseFire); +moveMap.bind(mouse0, "button1", mouseJet); +moveMap.bind(mouse0, "zaxis", cycleWeaponAxis); +GlobalActionMap.bind(keyboard, "backslash", toggleConsole); diff --git a/base/prefs/Spanish Config.cs b/base/prefs/Spanish Config.cs new file mode 100644 index 0000000..5454ca3 --- /dev/null +++ b/base/prefs/Spanish Config.cs @@ -0,0 +1,98 @@ +// Tribes 2 Input Map File +moveMap.delete(); +new ActionMap(moveMap); +moveMap.bindCmd(keyboard, "escape", "", "escapeFromGame();"); +moveMap.bind(keyboard, "alt e", toggleEditor); +moveMap.bind(keyboard, "s", moveleft); +moveMap.bind(keyboard, "f", moveright); +moveMap.bind(keyboard, "e", moveforward); +moveMap.bind(keyboard, "d", movebackward); +moveMap.bind(keyboard, "space", jump); +moveMap.bind(keyboard, "pageup", pageMessageHudUp); +moveMap.bind(keyboard, "pagedown", pageMessageHudDown); +moveMap.bind(keyboard, "x", voiceCapture); +moveMap.bind(keyboard, "shift w", prevWeapon); +moveMap.bind(keyboard, "w", nextWeapon); +moveMap.bind(keyboard, "z", toggleFreeLook); +moveMap.bind(keyboard, "q", useRepairKit); +moveMap.bind(keyboard, "r", useBackPack); +moveMap.bind(keyboard, "1", useFirstWeaponSlot); +moveMap.bind(keyboard, "2", useSecondWeaponSlot); +moveMap.bind(keyboard, "3", useThirdWeaponSlot); +moveMap.bind(keyboard, "4", useFourthWeaponSlot); +moveMap.bind(keyboard, "5", useFifthWeaponSlot); +moveMap.bind(keyboard, "6", useSixthWeaponSlot); +moveMap.bind(keyboard, "g", throwGrenade); +moveMap.bind(keyboard, "b", placeMine); +moveMap.bind(keyboard, "h", placeBeacon); +moveMap.bind(keyboard, "l", useTargetingLaser); +moveMap.bind(keyboard, "ctrl w", throwWeapon); +moveMap.bind(keyboard, "ctrl r", throwPack); +moveMap.bind(keyboard, "ctrl f", throwFlag); +moveMap.bind(keyboard, "t", setZoomFOV); +moveMap.bind(keyboard, "a", toggleZoom); +moveMap.bind(keyboard, "numpadenter", toggleInventoryHud); +moveMap.bind(keyboard, "numpad1", selectFavorite1); +moveMap.bind(keyboard, "numpad2", selectFavorite2); +moveMap.bind(keyboard, "numpad3", selectFavorite3); +moveMap.bind(keyboard, "numpad4", selectFavorite4); +moveMap.bind(keyboard, "numpad5", selectFavorite5); +moveMap.bind(keyboard, "numpad6", selectFavorite6); +moveMap.bind(keyboard, "numpad7", selectFavorite7); +moveMap.bind(keyboard, "numpad8", selectFavorite8); +moveMap.bind(keyboard, "numpad9", selectFavorite9); +moveMap.bind(keyboard, "numpad0", selectFavorite10); +moveMap.bind(keyboard, "shift numpad1", selectFavorite11); +moveMap.bind(keyboard, "shift numpad2", selectFavorite12); +moveMap.bind(keyboard, "shift numpad3", selectFavorite13); +moveMap.bind(keyboard, "shift numpad4", selectFavorite14); +moveMap.bind(keyboard, "shift numpad5", selectFavorite15); +moveMap.bind(keyboard, "shift numpad6", selectFavorite16); +moveMap.bind(keyboard, "shift numpad7", selectFavorite17); +moveMap.bind(keyboard, "shift numpad8", selectFavorite18); +moveMap.bind(keyboard, "shift numpad9", selectFavorite19); +moveMap.bind(keyboard, "shift numpad0", selectFavorite20); +moveMap.bind(keyboard, "ctrl numpad0", quickPackEnergyPack); +moveMap.bind(keyboard, "ctrl numpad1", quickPackRepairPack); +moveMap.bind(keyboard, "ctrl numpad2", quickPackShieldPack); +moveMap.bind(keyboard, "ctrl numpad3", quickPackCloakPack); +moveMap.bind(keyboard, "ctrl numpad4", quickPackJammerPack); +moveMap.bind(keyboard, "ctrl numpad5", quickPackAmmoPack); +moveMap.bind(keyboard, "ctrl numpad6", quickPackSatchelCharge); +moveMap.bind(keyboard, "ctrl numpad7", quickPackDeployableStation); +moveMap.bind(keyboard, "ctrl numpad8", quickPackIndoorTurret); +moveMap.bind(keyboard, "ctrl numpad9", quickPackOutdoorTurret); +moveMap.bind(keyboard, "ctrl numpaddivide", quickPackMotionSensor); +moveMap.bind(keyboard, "ctrl *", quickPackPulse); +moveMap.bind(keyboard, "tab", toggleFirstPerson); +moveMap.bind(keyboard, "u", ToggleMessageHud); +moveMap.bind(keyboard, "y", TeamMessageHud); +moveMap.bind(keyboard, "v", activateChatMenuHud); +moveMap.bind(keyboard, "c", toggleCommanderMap); +moveMap.bind(keyboard, "ctrl k", suicide); +moveMap.bind(keyboard, "f1", toggleHelpGui); +moveMap.bind(keyboard, "f2", toggleScoreScreen); +moveMap.bind(keyboard, "f3", startRecordingDemo); +moveMap.bind(keyboard, "f4", stopRecordingDemo); +moveMap.bind(keyboard, "f6", toggleHudWaypoints); +moveMap.bind(keyboard, "f7", toggleHudMarkers); +moveMap.bind(keyboard, "f8", toggleHudTargets); +moveMap.bind(keyboard, "f9", toggleHudCommands); +moveMap.bind(keyboard, "n", toggleTaskListDlg); +moveMap.bind(keyboard, "return", fnAcceptTask); +moveMap.bind(keyboard, "backspace", fnDeclineTask); +moveMap.bind(keyboard, "shift c", fnTaskCompleted); +moveMap.bind(keyboard, "shift x", fnResetTaskList); +moveMap.bind(keyboard, "insert", voteYes); +moveMap.bind(keyboard, "delete", voteNo); +moveMap.bind(keyboard, "left", turnLeft); +moveMap.bind(keyboard, "right", turnRight); +moveMap.bind(keyboard, "up", panUp); +moveMap.bind(keyboard, "down", panDown); +moveMap.bind(keyboard, "p", resizeChatHud); +moveMap.bind(mouse0, "xaxis", yaw); +moveMap.bind(mouse0, "yaxis", pitch); +moveMap.bind(mouse0, "button0", mouseFire); +moveMap.bind(mouse0, "button1", mouseJet); +moveMap.bind(mouse0, "zaxis", cycleWeaponAxis); +GlobalActionMap.bind(keyboard, "º", toggleConsole); diff --git a/base/prefs/WASDConfig.cs b/base/prefs/WASDConfig.cs new file mode 100644 index 0000000..b731ed0 --- /dev/null +++ b/base/prefs/WASDConfig.cs @@ -0,0 +1,101 @@ +// Tribes 2 Input Map File +moveMap.delete(); +new ActionMap(moveMap); +moveMap.bindCmd(keyboard, "escape", "", "escapeFromGame();"); +moveMap.bind(keyboard, "s", movebackward); +moveMap.bind(keyboard, "space", jump); +moveMap.bind(keyboard, "pageup", pageMessageHudUp); +moveMap.bind(keyboard, "pagedown", pageMessageHudDown); +moveMap.bind(keyboard, "w", moveforward); +moveMap.bind(keyboard, "b", placeBeacon); +moveMap.bind(keyboard, "q", nextWeapon); +moveMap.bind(keyboard, "1", useBlaster); +moveMap.bind(keyboard, "2", usePlasma); +moveMap.bind(keyboard, "3", useChaingun); +moveMap.bind(keyboard, "4", useDisc); +moveMap.bind(keyboard, "5", useGrenadeLauncher); +moveMap.bind(keyboard, "6", useSniperRifle); +moveMap.bind(keyboard, "g", throwGrenade); +moveMap.bind(keyboard, "h", useRepairKit); +moveMap.bind(keyboard, "l", useTargetingLaser); +moveMap.bind(keyboard, "ctrl w", throwWeapon); +moveMap.bind(keyboard, "ctrl f", throwFlag); +moveMap.bind(keyboard, "z", setZoomFOV); +moveMap.bind(keyboard, "a", moveleft); +moveMap.bind(keyboard, "numpadenter", toggleInventoryHud); +moveMap.bind(keyboard, "numpad1", selectFavorite1); +moveMap.bind(keyboard, "numpad2", selectFavorite2); +moveMap.bind(keyboard, "numpad3", selectFavorite3); +moveMap.bind(keyboard, "numpad4", selectFavorite4); +moveMap.bind(keyboard, "numpad5", selectFavorite5); +moveMap.bind(keyboard, "numpad6", selectFavorite6); +moveMap.bind(keyboard, "numpad7", selectFavorite7); +moveMap.bind(keyboard, "numpad8", selectFavorite8); +moveMap.bind(keyboard, "numpad9", selectFavorite9); +moveMap.bind(keyboard, "numpad0", selectFavorite10); +moveMap.bind(keyboard, "alt numpad1", selectFavorite11); +moveMap.bind(keyboard, "alt numpad2", selectFavorite12); +moveMap.bind(keyboard, "alt numpad3", selectFavorite13); +moveMap.bind(keyboard, "alt numpad4", selectFavorite14); +moveMap.bind(keyboard, "alt numpad5", selectFavorite15); +moveMap.bind(keyboard, "alt numpad6", selectFavorite16); +moveMap.bind(keyboard, "alt numpad7", selectFavorite17); +moveMap.bind(keyboard, "alt numpad8", selectFavorite18); +moveMap.bind(keyboard, "alt numpad9", selectFavorite19); +moveMap.bind(keyboard, "alt numpad0", selectFavorite20); +moveMap.bind(keyboard, "ctrl numpad0", quickPackEnergyPack); +moveMap.bind(keyboard, "ctrl numpad1", quickPackRepairPack); +moveMap.bind(keyboard, "ctrl numpad2", quickPackShieldPack); +moveMap.bind(keyboard, "ctrl numpad3", quickPackCloakPack); +moveMap.bind(keyboard, "ctrl numpad4", quickPackJammerPack); +moveMap.bind(keyboard, "ctrl numpad5", quickPackAmmoPack); +moveMap.bind(keyboard, "ctrl numpad6", quickPackSatchelCharge); +moveMap.bind(keyboard, "ctrl numpad7", quickPackDeployableStation); +moveMap.bind(keyboard, "ctrl numpad8", quickPackIndoorTurret); +moveMap.bind(keyboard, "ctrl numpad9", quickPackOutdoorTurret); +moveMap.bind(keyboard, "ctrl numpaddivide", quickPackMotionSensor); +moveMap.bind(keyboard, "ctrl *", quickPackPulse); +moveMap.bind(keyboard, "y", TeamMessageHud); +moveMap.bind(keyboard, "v", activateChatMenuHud); +moveMap.bind(keyboard, "c", toggleCommanderMap); +moveMap.bind(keyboard, "ctrl k", suicide); +moveMap.bind(keyboard, "f1", toggleHelpGui); +moveMap.bind(keyboard, "f2", toggleScoreScreen); +moveMap.bind(keyboard, "f3", startRecordingDemo); +moveMap.bind(keyboard, "f4", stopRecordingDemo); +moveMap.bind(keyboard, "f6", toggleHudWaypoints); +moveMap.bind(keyboard, "f7", toggleHudMarkers); +moveMap.bind(keyboard, "f8", toggleHudTargets); +moveMap.bind(keyboard, "f9", toggleHudCommands); +moveMap.bind(keyboard, "n", toggleTaskListDlg); +moveMap.bind(keyboard, "shift c", fnTaskCompleted); +moveMap.bind(keyboard, "shift x", fnResetTaskList); +moveMap.bind(keyboard, "insert", voteYes); +moveMap.bind(keyboard, "delete", voteNo); +moveMap.bind(keyboard, "d", moveright); +moveMap.bind(keyboard, "right", turnRight); +moveMap.bind(keyboard, "left", turnLeft); +moveMap.bind(keyboard, "up", panUp); +moveMap.bind(keyboard, "down", panDown); +moveMap.bind(keyboard, "e", toggleZoom); +moveMap.bind(keyboard, "7", useELFGun); +moveMap.bind(keyboard, "8", useMortar); +moveMap.bind(keyboard, "9", useMissileLauncher); +moveMap.bind(keyboard, "0", useShockLance); +moveMap.bind(keyboard, "shift q", prevWeapon); +moveMap.bind(keyboard, "m", placeMine); +moveMap.bind(keyboard, "p", useBackPack); +moveMap.bind(keyboard, "t", ToggleMessageHud); +moveMap.bind(keyboard, "r", toggleFirstPerson); +moveMap.bind(keyboard, "f", toggleFreeLook); +moveMap.bind(keyboard, "ctrl p", throwPack); +moveMap.bind(keyboard, "return", fnAcceptTask); +moveMap.bind(keyboard, "backspace", fnDeclineTask); +moveMap.bind(keyboard, "x", voiceCapture); +moveMap.bind(keyboard, "u", resizeChatHud); +moveMap.bind(mouse0, "xaxis", yaw); +moveMap.bind(mouse0, "yaxis", pitch); +moveMap.bind(mouse0, "button0", mouseFire); +moveMap.bind(mouse0, "button1", mouseJet); +moveMap.bind(mouse0, "zaxis", cycleWeaponAxis); +GlobalActionMap.bind(keyboard, "grave", toggleConsole); \ No newline at end of file diff --git a/base/scripts/BountyGame.cs b/base/scripts/BountyGame.cs new file mode 100644 index 0000000..fbfeedd --- /dev/null +++ b/base/scripts/BountyGame.cs @@ -0,0 +1,849 @@ +//--- GAME RULES BEGIN --- +//Eliminate Targets in order assigned; eliminate Pursuer(s) without penalty +//Killing a Bystander who was a former Target returns him to your Target pool +//Killing 3 or more Targets in a row without dying earns a bonus +//Killing all Targets first earns a bonus +//Red = Target, Green = Bystander +//--- GAME RULES END --- + +//Spec Note: Upon entry to game - +// All opponents have green triangles. +// Once you select your target, that player's triangle appears red (for you). +// If someone who has you as a target (a Pursuer) damages you, his triangle disappears altogether (for you). +// Once your target is eliminated, he respawns with a green triangle. +// If your Pursuer kills you, he has a green triangle again when you respawn (unless he becomes your target). + +exec("scripts/aiBountyGame.cs"); + +$InvBanList[Bounty, "TurretOutdoorDeployable"] = 1; +$InvBanList[Bounty, "TurretIndoorDeployable"] = 1; +$InvBanList[Bounty, "ElfBarrelPack"] = 1; +$InvBanList[Bounty, "MortarBarrelPack"] = 1; +$InvBanList[Bounty, "PlasmaBarrelPack"] = 1; +$InvBanList[Bounty, "AABarrelPack"] = 1; +$InvBanList[Bounty, "MissileBarrelPack"] = 1; +$InvBanList[Bounty, "Mine"] = 1; + +//-----------------Bounty Game score inits -------------- +// .objectiveTargetKills .bystanderKills .predatorKills .suicides .deaths +function BountyGame::initGameVars(%game) +{ + %game.SCORE_PER_TARGETKILL = 1; + %game.SCORE_PER_BYSTANDERKILL = -1; + %game.SCORE_PER_SUICIDE = -1; + %game.SCORE_PER_DEATH = 0; + %game.SCORE_PER_COMPLETION_BONUS = 5; + %game.SIZE_STREAK_TO_AWARD = 3; //award bonus for a winning streak this big or better + %game.WARN_AT_NUM_OBJREM = 2; //display warning when player has only this many or less objectives left + %game.MAX_CHEATDEATHS_ALLOWED = 1; //number of times a player can die by cntrl-k or die by leaving mission area before being labeled a cheater + + %game.waypointFrequency = 24000; + %game.waypointDuration = 6000; +} + +function BountyGame::startMatch(%game) +{ + //call the default + DefaultGame::startMatch(%game); + + //now give everyone who's already playing a target + %count = ClientGroup.getCount(); + for (%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + %game.nextObjective(%cl); + } +} + +function BountyGame::allowsProtectedStatics(%game) +{ + return true; +} + +function BountyGame::setUpTeams(%game) +{ + if ((%group = nameToID("MissionGroup/Teams")) == -1) + return; + + %dropSet = new SimSet("TeamDrops0"); + MissionCleanup.add(%dropSet); + + %group.setTeam(0); + + game.numTeams = 1; + setSensorGroupCount(32); + + //now set up the sensor group colors - specific for bounty - everyone starts out green to everone else... + for(%i = 0; %i < 32; %i++) + setSensorGroupColor(%i, 0xfffffffe, "0 255 0 255"); +} + +function BountyGame::pickTeamSpawn(%game, %team) +{ + DefaultGame::pickTeamSpawn(%game, 0); +} + +function BountyGame::claimSpawn(%game, %obj, %newTeam, %oldTeam) +{ + %newSpawnGroup = nameToId("MissionCleanup/TeamDrops0"); + %newSpawnGroup.add(%obj); +} + +function BountyGame::clientJoinTeam( %game, %client, %team, %respawn ) +{ + %game.assignClientTeam( %client ); + + // Spawn the player: + %game.spawnPlayer( %client, %respawn ); +} + +function BountyGame::assignClientTeam(%game, %client) +{ + %client.team = 0; + + //initialize the team array + for (%i = 1; %i < 32; %i++) + %game.teamArray[%i] = false; + + %count = ClientGroup.getCount(); + for (%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + if (%cl.team != 0) + %game.teamArray[%cl.team] = true; + } + + //now loop through the team array, looking for an empty team + for (%i = 1; %i < 32; %i++) + { + if (! %game.teamArray[%i]) + { + %client.team = %i; + break; + } + } + + // set player's skin pref here + setTargetSkin(%client.target, %client.skin); + %client.justEntered = true; + + // Let everybody know you are no longer an observer: + messageAll( 'MsgClientJoinTeam', '\c1%1 has joined the fray.', %client.name, "", %client, 1 ); + + updateCanListenState( %client ); + + logEcho(%client.nameBase@" (cl "@%client@") entered game"); +} + +function BountyGame::playerSpawned(%game, %player, %armor) +{ + DefaultGame::playerSpawned(%game, %player, %armor); + + %client = %player.client; + if (%client.justEntered) + { + %client.justEntered = ""; + %game.updateHitLists(); + } + %client.isPlaying = true; + // if client spawned and has no target (e.g. when first enters game), give him one + // if client came from observer mode, should still have a target + if (!%client.objectiveTarget && $MatchStarted) + %game.nextObjective(%client); + + //make sure the colors for this client are correct + %game.updateColorMask(%client); + + //show the waypoint for this player... + %client.damagedTargetTime = 0; + cancel(%client.waypointSchedule); + %game.showTargetWaypoint(%client); + + //also, anyone who has this client as an objective target, update their waypoint as well... + for (%i = 0; %i < ClientGroup.getCount(); %i++) + { + %cl = ClientGroup.getObject(%i); + if (%cl.objectiveTarget == %client) + { + %cl.damagedTargetTime = 0; + cancel(%cl.waypointSchedule); + %game.showTargetWaypoint(%cl); + } + } +} + +function BountyGame::equip(%game, %player) +{ + for(%i =0; %i<$InventoryHudCount; %i++) + %player.client.setInventoryHudItem($InventoryHudData[%i, itemDataName], 0, 1); + + //%player.setArmor("Light"); + %player.setInventory(EnergyPack, 1); + %player.setInventory(RepairKit,1); + %player.setInventory(Grenade,6); + %player.setInventory(Blaster,1); + %player.setInventory(Disc,1); + %player.setInventory(Chaingun, 1); + %player.setInventory(ChaingunAmmo, 100); + %player.setInventory(DiscAmmo, 20); + %player.setInventory(Beacon, 3); + %player.setInventory(TargetingLaser, 1); + %player.weaponCount = 3; + + %player.use("Blaster"); +} + +function BountyGame::updateColorMask(%game, %client) +{ + //set yourself to red, so your objectives will be red + %redMask = 0; + %blueMask = 0; + + %count = ClientGroup.getCount(); + for (%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + + //first, see if the client is your target + if (%cl == %client.objectiveTarget) + %redMask |= (1 << %cl.team); + + //else see if the have you as a target, and have damaged you... + else if (%cl.objectiveTarget == %client && %cl.damagedObjectiveTarget) + %blueMask |= (1 << %cl.team); + } + + //first everyone to green + setSensorGroupColor(%client.team, 0xfffffffe, "0 255 0 255"); + + //now set the red mask (your target) + setSensorGroupColor(%client.team, %redMask, "255 0 0 255"); + + //finally, set the blue mask (by setting alpha to 0 the damage/triangle will not appear, though + // names still can).. if none were desired then making this group never visible would be + // the better solution + setSensorGroupColor(%client.team, %blueMask, "0 0 255 0"); +} + +function BountyGame::showTargetWaypoint(%game, %client) +{ + //AI's simply detect their target + if (%client.isAIControlled()) + { + if (AIClientIsAlive(%client.objectiveTarget)) + %client.clientDetected(%client.objectiveTarget); + return; + } + + //only show the target waypoint if the target hasn't been damaged within the frequency period + if (getSimTime() - %client.damagedTargetTime < %game.waypointFrequency) + { + %client.waypointSchedule = %game.schedule(%game.waypointFrequency, "showTargetWaypoint", %client); + return; + } + + //flash a waypoint on the %client's current objective + %clTarget = %client.objectiveTarget; + if (!AIClientIsAlive(%clTarget) || !AIClientIsAlive(%client)) + return; + + //set the vis mask + %visMask = getSensorGroupAlwaysVisMask(%clTarget.getSensorGroup()); + %visMask |= (1 << %client.getSensorGroup()); + setSensorGroupAlwaysVisMask(%clTarget.getSensorGroup(), %visMask); + + //scope the client, then set the always vis mask... + if (isObject(%clTarget.player)) + { + //always keep the target in scope... + %clTarget.player.scopeToClient(%client); + + //now issue a command to kill the target + %client.setTargetId(%clTarget.target); + commandToClient(%client, 'TaskInfo', %client, -1, false, "Attack Target"); + %client.sendTargetTo(%client, true); + + //send the "waypoint is here sound" - QIX, need a sound! + messageClient(%client, 'MsgBountyWaypoint', '~wfx/misc/target_waypoint.wav'); + } + + //schedule the time to hide the waypoint + %client.waypointSchedule = %game.schedule(%game.waypointDuration, "hideTargetWaypoint", %client); +} + +function BountyGame::hideTargetWaypoint(%game, %client) +{ + //AI's simply detect their target + if (%client.isAIControlled()) + { + if (AIClientIsAlive(%client.objectiveTarget)) + %client.clientDetected(%client.objectiveTarget); + return; + } + + //flash a waypoint on the %client's current objective + %clTarget = %client.objectiveTarget; + if (!isObject(%clTarget)) + return; + + //clear scope the client, then unset the always vis mask... + %visMask = getSensorGroupAlwaysVisMask(%clTarget.getSensorGroup()); + %visMask &= ~(1 << %client.getSensorGroup()); + setSensorGroupAlwaysVisMask(%clTarget.getSensorGroup(), %visMask); + + //kill the actually task... + removeClientTargetType(%client, "AssignedTask"); + + //schedule the next time the waypoint should flash + %client.waypointSchedule = %game.schedule(%game.waypointFrequency, "showTargetWaypoint", %client); +} + +function BountyGame::nextObjective(%game, %client) +{ + %numValidTargets = %game.buildListValidTargets(%client); + + if (%numValidTargets > 0) + { + // if there are valid targets (other players that client hasn't killed) + %client.objectiveTarget = %game.selectNewTarget(%client, %numValidTargets); + %client.objectiveTargetName = detag((%client.objectiveTarget).name); + %client.damagedObjectiveTarget = false; + + // this client has now been assigned a target + %client.hasHadTarget = true; + messageClient(%client, 'msgBountyTargetIs', '\c2Your target is %1.', %client.objectiveTarget.name); + + //for the client, set his mask to see his target as red, anyone who as him as a target and has damaged him is blue + //and everyone else is green... + %game.updateColorMask(%client); + + //set a temporary waypoint so you can find your new target + if (%client.isAIControlled()) + %game.aiBountyAssignTarget(%client, %client.objectiveTarget); + + //show the waypoint... + %client.damagedTargetTime = 0; + cancel(%client.waypointSchedule); + %game.showTargetWaypoint(%client); + logEcho(%client.nameBase@" (pl "@%client.player@"/cl "@%client@") assigned objective"); + } + else + { + if (%client.hasHadTarget) + { + // if there aren't any more valid targets and you've been assigned one, + // that means you've killed everyone -- game over! + %game.awardScoreCompletionBonus(%client); + %game.gameOver(); + cycleMissions(); + } + else + { + cancel(%client.awaitingTargetThread); + %client.awaitingTargetThread = %game.schedule(500, "nextObjective", %client); //waiting for an opponent to join, keep checking 2x per second. + } + } +} + +function BountyGame::buildListValidTargets(%game, %cl) +{ + %availTargets = 0; + %numClients = ClientGroup.getCount(); + for (%cIndex = 0; %cIndex < %numClients; %cIndex++) + { + %opponent = ClientGroup.getObject(%cIndex); + //echo ("Predator = " @ %cl @ " PossPrey = " @ %opponent); + if (!%opponent.isNotInGame) //hasn't dropped + { + if (%opponent != %cl) //don't add client himself to list + { + if (%opponent.player) //make sure candidate for list has a player + { + if (!%cl.eliminated[%opponent]) //make sure candidate for list has not already been killed by client + { + %cl.validList[%availTargets] = %opponent; + %availTargets++; + } + } + } + } + } + //returns length of list (number of players eligible as targets to this client) + %game.hudUpdateObjRem(%cl, %availTargets); + if ((%availTargets <= %game.WARN_AT_NUM_OBJREM) && (%cl.hasHadTarget)) + %game.announceEminentWin(%cl, %availTargets); + return %availTargets; +} + +function BountyGame::selectNewTarget(%game, %cl, %numValidTargets) +{ + // pick a player at random from eligible target list + %targetIndex = mFloor(getRandom() * (%numValidTargets - 0.01)); + //echo("picking index " @ %targetIndex @ " from ValidList"); + return %cl.validList[%targetIndex]; +} + +function BountyGame::updateHitLists(%game) +{ + %numClients = ClientGroup.getCount(); + for (%cIndex = 0; %cIndex < %numClients; %cIndex++) + { + %cl = ClientGroup.getObject(%cIndex); + %game.buildListValidTargets(%cl); + } +} + +function BountyGame::timeLimitReached(%game) +{ + %game.gameOver(); + cycleMissions(); +} + +function BountyGame::gameOver(%game) +{ + //call the default + DefaultGame::gameOver(%game); + + //send the message + messageAll('MsgGameOver', "Match has ended.~wvoice/announcer/ann.gameover.wav" ); + + messageAll('MsgClearObjHud', ""); + for(%i = 0; %i < ClientGroup.getCount(); %i++) { + %client = ClientGroup.getObject(%i); + %game.resetScore(%client); + cancel(%client.waypointSchedule); + } +} + +function BountyGame::clientMissionDropReady(%game, %client) +{ + %game.resetScore(%client); + messageClient(%client, 'MsgClientReady', "", %game.class); + messageClient(%client, 'MsgBountyTargetIs', "", ""); + messageClient(%client, 'MsgYourScoreIs', "", 0); + //%objRem = %game.buildListValidTargets(%client); + //messageClient(%client, 'MsgBountyObjRem', "", %objRem); + //messageClient(%client, 'MsgYourRankIs', "", -1); + + messageClient(%client, 'MsgMissionDropInfo', '\c0You are in mission %1 (%2).', $MissionDisplayName, $MissionTypeDisplayName, $ServerName ); + + DefaultGame::clientMissionDropReady(%game, %client); +} + +function BountyGame::AIHasJoined(%game, %client) +{ + //let everyone know the player has joined the game + //messageAllExcept(%client, -1, 'MsgClientJoinTeam', '%1 has joined the fray.', %client.name, "", %client, 1); +} + +function BountyGame::onClientKilled(%game, %clVictim, %clKiller, %damageType, %implement, %damageLoc) +{ + DefaultGame::onClientKilled(%game, %clVictim, %clKiller, %damageType, %implement, %damageLoc); + + // you had your shot + %clVictim.isPlaying = false; + cancel(%clVictim.awaitingTargetThread); + + // any time a person dies, the kill streak is reset + %clVictim.killStreak = 0; +} + +function BountyGame::onClientLeaveGame(%game, %clientId) +{ + DefaultGame::onClientLeaveGame(%game, %clientId); + %clientId.isNotInGame = true; + + %numClients = ClientGroup.getCount(); + for (%index = 0; %index < %numClients; %index++) + { + %possPredator = ClientGroup.getObject(%index); + // make sure this guy gets erased from everyone's eliminated list + %possPredator.eliminated[%clientId] = ""; + + //no need for this - anyone who has him as a target will have their colors reset in game.nextObjective() + //reset everyones triangles to friendly and visible so the next guy that joins, doesn't get the old settings + //setTargetFriendlyMask(%possPredator.target, getTargetFriendlyMask(%possPredator.target) | (1< %game.MAX_CHEATDEATHS_ALLOWED); +} + +function BountyGame::testSuicide(%game, %victimID, %killerID, %damageType) +{ + return ((%victimID == %killerID) || (%damageType == $DamageType::Ground) || (%damageType == $DamageType::Suicide) || (%damageType == $DamageType::OutOfBounds)); +} + +function BountyGame::testTargetKill(%game, %clVictim, %clKiller) +{ + // was the person you just killed your target? + return (%clKiller.objectiveTarget == %clVictim); +} + +function BountyGame::testPredatorKill(%game, %clVictim, %clKiller) +{ + // were you the target of the person you just killed? + return (%clVictim.objectiveTarget == %clKiller); +} + +function BountyGame::awardScoreSuicide(%game, %clVictim, %damageType) +{ + //now loop through the client, and award the kill to any attacker who damaged the client within 20 secs... + for (%i = 0; %i < ClientGroup.getCount(); %i++) + { + %cl = ClientGroup.getObject(%i); + if (%cl.objectiveTarget == %clVictim) + { + %game.awardScoreTargetKill(%clVictim, %cl, true); + messageClient(%clVictim, 'msgBountyTarKil', '\c2You eliminated yourself. %1 has been awarded the bounty!', %cl.name); + } + } + + //update the "cheated" count + if (%damageType == $DamageType::Suicide) + { + %clVictim.cheated++; + DefaultGame::awardScoreSuicide(%game, %clVictim); + } + + %game.recalcScore(%clVictim); + %clVictim.killStreak = 0; +} + +function BountyGame::awardScoreTargetKill(%game,%clVictim, %clKiller, %victimSuicided) +{ + // congratulations, you killed your target + %clKiller.objectiveTargetKills++; + %clKiller.kills = %clKiller.objectiveTargetKills; + %clKiller.eliminated[%clVictim] = true; + + if (%victimSuicided) + { + if (%clVictim.gender $= "Female") + messageClient(%clKiller, 'msgBountyTarKil', '\c2Target %1 helped you out by eliminating herself!', %clVictim.name); + else + messageClient(%clKiller, 'msgBountyTarKil', '\c2Target %1 helped you out by eliminating himself!', %clVictim.name); + } + else + messageClient(%clKiller, 'msgBountyTarKil', '\c2You eliminated target %1!', %clVictim.name); + + if (%game.SCORE_PER_TARGETKILL != 0) + %game.recalcScore(%clKiller); + + %clKiller.killStreak++; + %clVictim.killStreak = 0; + if (%clKiller.killStreak >= %game.SIZE_STREAK_TO_AWARD) //award points for a kill streak + %game.awardScoreKillStreak(%clKiller); + + //the victim is no longer the objective of the killer, reset his colors. + //The colors for the killer will be reset in game.nextObjective() + %clKiller.objectiveTarget = ""; + %game.updateColorMask(%clVictim); + + %game.nextObjective(%clKiller); + + //since the killer scored, update everyone who's got him as a target... + for (%i = 0; %i < ClientGroup.getCount(); %i++) + { + %cl = ClientGroup.getObject(%i); + if (%cl.objectiveTarget == %clKiller) + { + %cl.damagedTargetTime = 0; + cancel(%cl.waypointSchedule); + %game.showTargetWaypoint(%cl); + } + } +} + +function BountyGame::awardScoreBystanderKill(%game, %clVictim, %clKiller) +{ + // uh oh, you killed someone other than your target or the person targeting you + %clKiller.bystanderKills++; + //%clVictim.killStreak = 0; //don't penalize the bystander right now, maybe change this later + // if you'd already killed him legally, he's back on your prospective target list + + if (mAbs(%game.SCORE_PER_BYSTANDERKILL) > 1) + %plural = (%game.SCORE_PER_BYSTANDERKILL > 1 ? "s" : ""); + + if (%game.SCORE_PER_BYSTANDERKILL != 0) + { + messageClient(%clKiller, 'msgBountyBysKil', '\c0You have been penalized %1 point%2 for killing bystander %3.', mAbs(%game.SCORE_PER_BYSTANDERKILL), %plural, %clVictim.name); + messageClient(%clVictim, 'msgBountyBystander', '\c2You were the victim of %1\'s lousy aim! He was penalized.', %clKiller.name); + %game.recalcScore(%clKiller); + } + + //add a target back to your list (any target) + %targetCount = 0; + for (%i = 0; %i < ClientGroup.getCount(); %i++) + { + %cl = ClientGroup.getObject(%i); + if (%clKiller.eliminated[%cl]) + { + %addTargetsArray[%targetCount] = %cl; + %targetCount++; + } + } + + //see if we found any targets we can add back on... + if (%targetCount > 0) + { + %clKiller.eliminated[%addTargetsArray[mFloor(getRandom() * (%targetCount - 0.01))]] = false; + messageClient(%clKiller, 'msgBountyBysRedo', '\c2One target has been added back onto your Bounty list.'); + } + + %clKiller.killStreak = 0; +} + +function BountyGame::awardScorePredatorKill(%game, %clVictim, %clKiller) +{ + %clVictim.killStreak = 0; + messageClient(%clKiller, 'msgBountyPredKill', '\c0You have temporarily fended off %1.', %clVictim.name); + + //now, try to assign a new objective target for clVictim... + %game.nextObjective(%clVictim); + + //also update the color mask for the killer... + %game.updateColorMask(%clKiller); +} + +function BountyGame::awardScoreKillStreak(%game, %cl) +{ + %bonus = (%cl.killStreak - %game.SIZE_STREAK_TO_AWARD) + 1; + %cl.streakPoints += %bonus; + + messageClient(%cl,'msgBountyPlrStrkBonus', '\c0You received a %1 point bonus for a %2 kill streak!', %bonus, %cl.killStreak); + messageAll('msgBountyStreakBonus', '\c0%1 has eliminated %2 targets in a row!', %cl.name, %cl.killStreak, %bonus); //send bonus for sound parsing + //callback exists in client.cs for 'msgBountyStreakBonus', to play repeating bell sound length dependent on streak +} + +function BountyGame::awardScoreCompletionBonus(%game, %cl) +{ + // you killed everybody who was on your list + %cl.compBonus = 1; + if (%game.SCORE_PER_COMPLETION_BONUS != 0) + messageAll('msgBountyCompBonus', '\c2%1 receives a %2 point bonus for completing all objectives.', %cl.name, %game.SCORE_PER_COMPLETION_BONUS); + + %game.recalcScore(%cl); +} + + +function BountyGame::announceEminentWin(%game, %cl, %objRem) +{ + %wav = "~wfx/misc/bounty_objRem" @ %objRem @ ".wav"; + %plural = (%objRem > 1 ? "s" : ""); + if (%objRem > 0) + messageAll('msgBountyEminent', '\c2%1 has only %2 target%3 left!%4', %cl.name, %objRem, %plural, %wav); + else + messageAll('msgBountyOver', '\c2%1 has eliminated all targets!~wfx/misc/bounty_completed.wav', %cl.name); +} + +function BountyGame::announceCheater(%game, %client) +{ + if (%client.cheated > 1) + %plural = "s"; + else + %plural = ""; + messageAll('msgCheater', '%1 has suicided \c2%2 \c0time%3!', %client.name, %client.cheated, %plural); +} + +function BountyGame::recalcScore(%game, %cl) +{ + %cl.score = %cl.objectiveTargetKills * %game.SCORE_PER_TARGETKILL; + %cl.score += %cl.bystanderKills * %game.SCORE_PER_BYSTANDERKILL; + %cl.score += %cl.suicides * %game.SCORE_PER_SUICIDE; + %cl.score += %cl.compBonus * %game.SCORE_PER_COMPLETION_BONUS; + %cl.score += %cl.streakPoints; //this awarded in awardScoreKillStreak + + messageClient(%cl, 'MsgYourScoreIs', "", %cl.score); + + %game.recalcTeamRanks(%cl); +} + +function BountyGame::resetScore(%game, %cl) +{ + %cl.score = 0; + %cl.kills = 0; + %cl.objectiveTargetKills = 0; + %cl.bystanderKills = 0; + %cl.suicides = 0; + %cl.compBonus = 0; + %cl.streakPoints = 0; + + cancel(%cl.awaitingTargetThread); + + %cl.killstreak = ""; + %cl.cheated = ""; + %cl.hasHadTarget = false; + + //reset %cl's hit list + //note that although this only clears clients (enemies) currently in the game, + //clients (enemies) who left early should have been cleared at that time. + %numClients = ClientGroup.getCount(); + for (%count = 0; %count < %numClients; %count++) + { + %enemy = ClientGroup.getObject(%count); + %cl.eliminated[%enemy] = ""; + } +} + +function BountyGame::hudUpdateObjRem(%game, %client, %availTargets) +{ + // how many people do you have left to kill? + messageClient(%client, 'msgBountyObjRem', "", %availTargets); +} + +function BountyGame::enterMissionArea(%game, %playerData, %player) +{ + %player.client.outOfBounds = false; + messageClient(%player.client, 'EnterMissionArea', '\c1You are back in the mission area.'); + cancel(%player.alertThread); + logEcho(%player.client.nameBase@" (pl "@%player@"/cl "@%player.client@") entered mission area"); +} + +function BountyGame::leaveMissionArea(%game, %playerData, %player) +{ + %player.client.outOfBounds = true; + messageClient(%player.client, 'LeaveMissionArea', '\c1You have left the mission area. Return or take damage.~wfx/misc/warning_beep.wav'); + %player.alertThread = %game.schedule(1000, "AlertPlayer", 3, %player); + logEcho(%player.client.nameBase@" (pl "@%player@"/cl "@%player.client@") left mission area"); +} + +function BountyGame::AlertPlayer(%game, %count, %player) +{ + if(%count > 1) + %player.alertThread = %game.schedule(1000, "AlertPlayer", %count - 1, %player); + else + %player.alertThread = %game.schedule(1000, "MissionAreaDamage", %player); +} + +function BountyGame::MissionAreaDamage(%game, %player) +{ + if(%player.getState() !$= "Dead") { + %player.setDamageFlash(0.1); + %prevHurt = %player.getDamageLevel(); + %player.setDamageLevel(%prevHurt + 0.05); + // a little redundancy to see if the lastest damage killed the player + if(%player.getState() $= "Dead") + %game.onClientKilled(%player.client, 0, $DamageType::OutOfBounds); + else + %player.alertThread = %game.schedule(1000, "MissionAreaDamage", %player); + } + else + { + %game.onClientKilled(%player.client, 0, $DamageType::OutOfBounds); + } +} + + +function BountyGame::updateScoreHud(%game, %client, %tag) +{ + // clear the header: + messageClient( %client, 'SetScoreHudHeader', "", "" ); + + // send the subheader: + messageClient( %client, 'SetScoreHudSubheader', "", '\tPLAYER\tSCORE\tTARGETS LEFT' ); + + for ( %index = 0; %index < $TeamRank[0, count]; %index++ ) + { + //get the client info + %cl = $TeamRank[0, %index]; + %clScore = %cl.score $= "" ? 0 : %cl.score; + + //find out how many targets this client has left + %clTargets = 0; + for (%cIndex = 0; %cIndex < ClientGroup.getCount(); %cIndex++) + { + %opponent = ClientGroup.getObject(%cIndex); + if (!%opponent.isNotInGame && %opponent != %cl && isObject(%opponent.player) && !%cl.eliminated[%opponent]) + %clTargets++; + } + + //find out if we've killed this target + %clKilled = ""; + if ( %client.eliminated[%cl] ) + %clKilled = "ELIMINATED"; + + %clStyle = %cl == %client ? "" : ""; + + //if the client is not an observer, send the message + if (%client.team != 0) + { + messageClient( %client, 'SetLineHud', "", %tag, %index, '%5\t%1%2%3\t%4', + %cl.name, %clScore, %clTargets, %clKilled, %clStyle ); + } + //else for observers, create an anchor around the player name so they can be observed + else + { + messageClient( %client, 'SetLineHud', "", %tag, %index, '%5\t%1%2%3\t%4', + %cl.name, %clScore, %clTargets, %clKilled, %clStyle, %cl ); + } + } + + //clear the rest of Hud so we don't get old lines hanging around... + messageClient(%client, 'ClearHud', "", %tag, %index); +} + +function BountyGame::applyConcussion(%game, %player) +{ +} diff --git a/base/scripts/CTFGame.cs b/base/scripts/CTFGame.cs new file mode 100644 index 0000000..65991a4 --- /dev/null +++ b/base/scripts/CTFGame.cs @@ -0,0 +1,922 @@ +// DisplayName = Capture the Flag + +//--- GAME RULES BEGIN --- +//Prevent enemy from capturing your flag +//Capture enemy flag and bring it to your team's flag stand +//Score a point each time enemy flag is "capped" +//To score, your flag must be at its stand when the enemy flag arrives +//--- GAME RULES END --- + +//exec the AI scripts +exec("scripts/aiCTF.cs"); + +package CTFGame { + +function Generator::onDestroyed(%data, %obj) +{ + if (Game.testGenDestroyed(%obj)) + Game.awardScoreGenDestroy(%obj.lastDamagedBy); +} + +function Flag::objectiveInit(%data, %flag) +{ + if (!%flag.isTeamSkinned) + { + %pos = %flag.getTransform(); + %group = %flag.getGroup(); + } + %flag.originalPosition = %flag.getTransform(); + %flag.isHome = true; + %flag.carrier = ""; + setTargetSkin(%flag.getTarget(), $TeamSkin[%flag.team]); + setTargetSensorGroup(%flag.getTarget(), %flag.team); + setTargetAlwaysVisMask(%flag.getTarget(), 0x7); + setTargetRenderMask(%flag.getTarget(), getTargetRenderMask(%flag.getTarget()) | 0x2); + %flag.scopeWhenSensorVisible(true); + $flagStatus[%flag.team] = ""; + + //Point the flag and stand at each other + %group = %flag.getGroup(); + %count = %group.getCount(); + %flag.stand = ""; + for(%i = 0; %i < %count; %i++) + { + %this = %group.getObject(%i); + if((%this.getClassName() !$= "InteriorInstance") && (%this.getClassName() !$= "SimGroup")) + { + if(%this.getDataBlock().getName() $= "ExteriorFlagStand") + { + %flag.stand = %this; + %this.flag = %flag; + } + } + } + + // set the nametag on the target + setTargetName(%flag.getTarget(), $teamName[%flag.team]); + + // create a marker on this guy + %flag.waypoint = new MissionMarker() { + position = %flag.getTransform(); + dataBlock = "FlagMarker"; + }; + MissionCleanup.add(%flag.waypoint); + + // create a target for this (there is no MissionMarker::onAdd script call) + %target = createTarget(%flag.waypoint, $teamName[%flag.team], "", "", 'Base', %flag.team, 0); + setTargetAlwaysVisMask(%target, 0xffffffff); + + //store the flag in an array + $TeamFlag[%flag.team] = %flag; +} + +}; + +//-- tracking --- +// .deaths .kills .genDefends .carrierKills .flagDefends .escortAssists .suicides .teamKills .turretKills .flagCaps +// .flagReturns .genDestroys .genRepairs + +function CTFGame::initGameVars(%game) +{ + %game.SCORE_PER_SUICIDE = -1; + %game.SCORE_PER_TEAMKILL = -1; + %game.SCORE_PER_DEATH = -1; + + %game.SCORE_PER_KILL = 1; + %game.SCORE_PER_PLYR_FLAG_CAP = 3; + %game.SCORE_PER_TEAM_FLAG_CAP = 1; + %game.SCORE_PER_GEN_DESTROY = 2; + %game.SCORE_PER_ESCORT_ASSIST = 1; + + %game.SCORE_PER_TURRET_KILL = 1; + %game.SCORE_PER_FLAG_DEFEND = 1; + %game.SCORE_PER_CARRIER_KILL = 1; + %game.SCORE_PER_FLAG_RETURN = 1; + %game.SCORE_PER_GEN_DEFEND = 1; + %game.SCORE_PER_GEN_REPAIR = 1; + + %game.FLAG_RETURN_DELAY = 45 * 1000; //45 seconds + + %game.TIME_CONSIDERED_FLAGCARRIER_THREAT = 3 * 1000; //after damaging enemy flag carrier + %game.RADIUS_GEN_DEFENSE = 20; //meters + %game.RADIUS_FLAG_DEFENSE = 20; //meters + + %game.fadeTimeMS = 2000; + + %game.notifyMineDist = 7.5; + + %game.stalemate = false; + %game.stalemateObjsVisible = false; + %game.stalemateTimeMS = 60000; + %game.stalemateFreqMS = 15000; + %game.stalemateDurationMS = 6000; +} + +//-------------------------------------------------------------------------- +// need to have this for the corporate maps which could not be fixed +function SimObject::clearFlagWaypoints(%this) +{ +} + +function WayPoint::clearFlagWaypoints(%this) +{ + logEcho("Removing flag waypoint: " @ %this); + if(%this.nameTag $= "Flag") + %this.delete(); +} + +function SimGroup::clearFlagWaypoints(%this) +{ + for(%i = %this.getCount() - 1; %i >= 0; %i--) + %this.getObject(%i).clearFlagWaypoints(); +} + +//-------------------------------------------------------------------------- +function CTFGame::missionLoadDone(%game) +{ + //default version sets up teams - must be called first... + DefaultGame::missionLoadDone(%game); + + for(%i = 1; %i < (%game.numTeams + 1); %i++) + $teamScore[%i] = 0; + + // remove + MissionGroup.clearFlagWaypoints(); +} + +function CTFGame::playerTouchFlag(%game, %player, %flag) +{ + %client = %player.client; + + if ((%flag.carrier $= "") && (%player.getState() !$= "Dead")) + { + //flag isn't held and has been touched by a live player + if (%client.team == %flag.team) + %game.playerTouchOwnFlag(%player, %flag); + else + %game.playerTouchEnemyFlag(%player, %flag); + } + + // toggle visibility of the flag + setTargetRenderMask(%flag.waypoint.getTarget(), %flag.isHome ? 0 : 1); +} + +function CTFGame::playerTouchOwnFlag(%game, %player, %flag) +{ + if(%flag.isHome) + { + if (%player.holdingFlag !$= "") + %game.flagCap(%player); + } + else + %game.flagReturn(%flag, %player); + + //call the AI function + %game.AIplayerTouchOwnFlag(%player, %flag); +} + +function CTFGame::playerTouchEnemyFlag(%game, %player, %flag) +{ + %client = %player.client; + %player.holdingFlag = %flag; //%player has this flag + %flag.carrier = %player; //this %flag is carried by %player + + %player.mountImage(FlagImage, $FlagSlot, true, $teamSkin[%flag.team]); + + %game.playerGotFlagTarget(%player); + //only cancel the return timer if the player is in bounds... + if (!%client.outOfBounds) + { + cancel($FlagReturnTimer[%flag]); + $FlagReturnTimer[%flag] = ""; + } + + //if this flag was "at home", see if both flags have now been taken + if (%flag.isHome) + { + %startStalemate = false; + if ($TeamFlag[1] == %flag) + %startStalemate = !$TeamFlag[2].isHome; + else + %startStalemate = !$TeamFlag[1].isHome; + + if (%startStalemate) + %game.stalemateSchedule = %game.schedule(%game.stalemateTimeMS, beginStalemate); + } + + %flag.hide(true); + %flag.isHome = false; + if(%flag.stand) + %flag.stand.getDataBlock().onFlagTaken(%flag.stand);//animate, if exterior stand + + $flagStatus[%flag.team] = %client.nameBase; + messageTeamExcept(%client, 'MsgCTFFlagTaken', '\c2Teammate %1 took the %2 flag.~wfx/misc/flag_snatch.wav', %client.name, $teamName[%flag.team], %flag.team, %client.nameBase); + messageTeam(%flag.team, 'MsgCTFFlagTaken', '\c2Your flag has been taken by %1!~wfx/misc/flag_taken.wav',%client.name, 0, %flag.team, %client.nameBase); + messageTeam(0, 'MsgCTFFlagTaken', '\c2%1 took the %2 flag.~wfx/misc/flag_snatch.wav', %client.name, $teamName[%flag.team], %flag.team, %client.nameBase); + messageClient(%client, 'MsgCTFFlagTaken', '\c2You took the %2 flag.~wfx/misc/flag_snatch.wav', %client.name, $teamName[%flag.team], %flag.team, %client.nameBase); + logEcho(%client.nameBase@" (pl "@%player@"/cl "@%client@") took team "@%flag.team@" flag"); + + //call the AI function + %game.AIplayerTouchEnemyFlag(%player, %flag); + + //if the player is out of bounds, then in 3 seconds, it should be thrown back towards the in bounds area... + if (%client.outOfBounds) + %game.schedule(3000, "boundaryLoseFlag", %player); +} + +function CTFGame::playerGotFlagTarget(%game, %player) +{ + %player.scopeWhenSensorVisible(true); + %target = %player.getTarget(); + setTargetRenderMask(%target, getTargetRenderMask(%target) | 0x2); + if(%game.stalemateObjsVisible) + setTargetAlwaysVisMask(%target, 0x7); +} + +function CTFGame::playerLostFlagTarget(%game, %player) +{ + %player.scopeWhenSensorVisible(false); + %target = %player.getTarget(); + setTargetRenderMask(%target, getTargetRenderMask(%target) & ~0x2); + // clear his always vis target mask + setTargetAlwaysVisMask(%target, (1 << getTargetSensorGroup(%target))); +} + +function CTFGame::playerDroppedFlag(%game, %player) +{ + %client = %player.client; + %flag = %player.holdingFlag; + + %game.playerLostFlagTarget(%player); + + %player.holdingFlag = ""; //player isn't holding a flag anymore + %flag.carrier = ""; //flag isn't held anymore + $flagStatus[%flag.team] = ""; + + %player.unMountImage($FlagSlot); + %flag.hide(false); //Does the throwItem function handle this? + + messageTeamExcept(%client, 'MsgCTFFlagDropped', '\c2Teammate %1 dropped the %2 flag.~wfx/misc/flag_drop.wav', %client.name, $teamName[%flag.team], %flag.team); + messageTeam(%flag.team, 'MsgCTFFlagDropped', '\c2Your flag has been dropped by %1!~wfx/misc/flag_drop.wav', %client.name, 0, %flag.team); + messageTeam(0, 'MsgCTFFlagDropped', '\c2%1 dropped the %2 flag.~wfx/misc/flag_drop.wav', %client.name, $teamName[%flag.team], %flag.team); + if(!%player.client.outOfBounds) + messageClient(%client, 'MsgCTFFlagDropped', '\c2You dropped the %2 flag.~wfx/misc/flag_drop.wav', 0, $teamName[%flag.team], %flag.team); + logEcho(%client.nameBase@" (pl "@%player@"/cl "@%client@") dropped team "@%flag.team@" flag"); + + //don't duplicate the schedule if there's already one in progress... + if ($FlagReturnTimer[%flag] <= 0) + $FlagReturnTimer[%flag] = %game.schedule(%game.FLAG_RETURN_DELAY - %game.fadeTimeMS, "flagReturnFade", %flag); + + //call the AI function + %game.AIplayerDroppedFlag(%player, %flag); +} + +function CTFGame::flagCap(%game, %player) +{ + %client = %player.client; + %flag = %player.holdingFlag; + %flag.carrier = ""; + + %game.playerLostFlagTarget(%player); + //award points to player and team + messageTeamExcept(%client, 'MsgCTFFlagCapped', '\c2%1 captured the %2 flag!~wfx/misc/flag_capture.wav', %client.name, $teamName[%flag.team], %flag.team, %client.team); + messageTeam(%flag.team, 'MsgCTFFlagCapped', '\c2Your flag was captured by %1.~wfx/misc/flag_lost.wav', %client.name, 0, %flag.team, %client.team); + messageTeam(0, 'MsgCTFFlagCapped', '\c2%1 captured the %2 flag!~wfx/misc/flag_capture.wav', %client.name, $teamName[%flag.team], %flag.team, %client.team); + messageClient(%client, 'MsgCTFFlagCapped', '\c2You captured the %2 flag!~wfx/misc/flag_capture.wav', 0, $teamName[%flag.team], %flag.team, %client.team); + + logEcho(%client.nameBase@" (pl "@%player@"/cl "@%client@") capped team "@%client.team@" flag"); + %player.holdingFlag = ""; //no longer holding it. + %player.unMountImage($FlagSlot); + %game.flagReset(%flag); + %game.awardScoreFlagCap(%client, %flag); + + //call the AI function + %game.AIflagCap(%player, %flag); + + //if this cap didn't end the game, play the announcer... + if ($missionRunning) + { + if ($teamName[%client.team] $= 'Inferno') + messageAll("", '~wvoice/announcer/ann.infscores.wav'); + else if ($teamName[%client.team] $= 'Storm') + messageAll("", '~wvoice/announcer/ann.stoscores.wav'); + } +} + +function CTFGame::flagReturnFade(%game, %flag) +{ + $FlagReturnTimer[%flag] = %game.schedule(%game.fadeTimeMS, "flagReturn", %flag); + %flag.startFade(%game.fadeTimeMS, 0, true); +} + +function CTFGame::flagReturn(%game, %flag, %player) +{ + cancel($FlagReturnTimer[%flag]); + $FlagReturnTimer[%flag] = ""; + + if(%flag.team == 1) + %otherTeam = 2; + else + %otherTeam = 1; + if (%player !$= "") + { + //a player returned it + %client = %player.client; + messageTeamExcept(%client, 'MsgCTFFlagReturned', '\c2Teammate %1 returned your flag to base.~wfx/misc/flag_return.wav', %client.name, 0, %flag.team); + messageTeam(%otherTeam, 'MsgCTFFlagReturned', '\c2Enemy %1 returned the %2 flag.~wfx/misc/flag_return.wav', %client.name, $teamName[%flag.team], %flag.team); + messageTeam(0, 'MsgCTFFlagReturned', '\c2%1 returned the %2 flag.~wfx/misc/flag_return.wav', %client.name, $teamName[%flag.team], %flag.team); + messageClient(%client, 'MsgCTFFlagReturned', '\c2You returned your flag.~wfx/misc/flag_return.wav', 0, $teamName[%flag.team], %flag.team); + logEcho(%client.nameBase@" (pl "@%player@"/cl "@%client@") returned team "@%flag.team@" flag"); + %game.awardScoreFlagReturn(%player.client); + } + else + { + //returned due to timer + messageTeam(%otherTeam, 'MsgCTFFlagReturned', '\c2The %2 flag was returned to base.~wfx/misc/flag_return.wav', 0, $teamName[%flag.team], %flag.team); //because it was dropped for too long + messageTeam(%flag.team, 'MsgCTFFlagReturned', '\c2Your flag was returned.~wfx/misc/flag_return.wav', 0, 0, %flag.team); + messageTeam(0, 'MsgCTFFlagReturned', '\c2The %2 flag was returned to base.~wfx/misc/flag_return.wav', 0, $teamName[%flag.team], %flag.team); + logEcho("team "@%flag.team@" flag returned (timeout)"); + } + %game.flagReset(%flag); +} + +function CTFGame::showStalemateTargets(%game) +{ + cancel(%game.stalemateSchedule); + + //show the targets + for (%i = 1; %i <= 2; %i++) + { + %flag = $TeamFlag[%i]; + + //find the object to scope/waypoint.... + //render the target hud icon for slot 1 (a centermass flag) + //if we just set him as always sensor vis, it'll work fine. + if (isObject(%flag.carrier)) + setTargetAlwaysVisMask(%flag.carrier.getTarget(), 0x7); + } + + //schedule the targets to hide + %game.stalemateObjsVisible = true; + %game.stalemateSchedule = %game.schedule(%game.stalemateDurationMS, hideStalemateTargets); +} + +function CTFGame::hideStalemateTargets(%game) +{ + cancel(%game.stalemateSchedule); + + //hide the targets + for (%i = 1; %i <= 2; %i++) + { + %flag = $TeamFlag[%i]; + if (isObject(%flag.carrier)) + { + %target = %flag.carrier.getTarget(); + setTargetAlwaysVisMask(%target, (1 << getTargetSensorGroup(%target))); + } + } + + //schedule the targets to show again + %game.stalemateObjsVisible = false; + %game.stalemateSchedule = %game.schedule(%game.stalemateFreqMS, showStalemateTargets); +} + +function CTFGame::beginStalemate(%game) +{ + %game.stalemate = true; + %game.showStalemateTargets(); +} + +function CTFGame::endStalemate(%game) +{ + %game.stalemate = false; + %game.hideStalemateTargets(); + cancel(%game.stalemateSchedule); +} + +function CTFGame::flagReset(%game, %flag) +{ + //any time a flag is reset, kill the stalemate schedule + %game.endStalemate(); + + //make sure if there's a player carrying it (probably one out of bounds...), it is stripped first + if (isObject(%flag.carrier)) + { + //hide the target hud icon for slot 2 (a centermass flag - visible only as part of a teams sensor network) + %game.playerLostFlagTarget(%flag.carrier); + %flag.carrier.holdingFlag = ""; //no longer holding it. + %flag.carrier.unMountImage($FlagSlot); + } + + //fades, restore default position, home, velocity, general status, etc. + %flag.setVelocity("0 0 0"); + %flag.setTransform(%flag.originalPosition); + %flag.isHome = true; + %flag.carrier = ""; + $flagStatus[%flag.team] = ""; + %flag.hide(false); + if(%flag.stand) + %flag.stand.getDataBlock().onFlagReturn(%flag.stand);//animate, if exterior stand + + //fade the flag in... + %flag.startFade(%game.fadeTimeMS, 0, false); + + // dont render base target + setTargetRenderMask(%flag.waypoint.getTarget(), 0); + + //call the AI function + %game.AIflagReset(%flag); +} + +function CTFGame::timeLimitReached(%game) +{ + logEcho("game over (timelimit)"); + %game.gameOver(); + cycleMissions(); +} + +function CTFGame::scoreLimitReached(%game) +{ + logEcho("game over (scorelimit)"); + %game.gameOver(); + cycleMissions(); +} + +function CTFGame::notifyMineDeployed(%game, %mine) +{ + //see if the mine is within 5 meters of the flag stand... + %mineTeam = %mine.sourceObject.team; + %homeFlag = $TeamFlag[%mineTeam]; + if (isObject(%homeFlag)) + { + %dist = VectorDist(%homeFlag.originalPosition, %mine.position); + if (%dist <= %game.notifyMineDist) + { + messageTeam(%mineTeam, 'MsgCTFFlagMined', "The flag has been mined.~wvoice/announcer/flag_minedFem.wav" ); + } + } +} + +function CTFGame::gameOver(%game) +{ + //call the default + DefaultGame::gameOver(%game); + + //send the winner message + %winner = ""; + if ($teamScore[1] > $teamScore[2]) + %winner = $teamName[1]; + else if ($teamScore[2] > $teamScore[1]) + %winner = $teamName[2]; + + if (%winner $= 'Storm') + messageAll('MsgGameOver', "Match has ended.~wvoice/announcer/ann.stowins.wav" ); + else if (%winner $= 'Inferno') + messageAll('MsgGameOver', "Match has ended.~wvoice/announcer/ann.infwins.wav" ); + else + messageAll('MsgGameOver', "Match has ended.~wvoice/announcer/ann.gameover.wav" ); + + messageAll('MsgClearObjHud', ""); + for(%i = 0; %i < ClientGroup.getCount(); %i ++) + { + %client = %group.getObject(%i); + %game.resetScore(%client); + } + for(%j = 1; %j <= %game.numTeams; %j++) + $TeamScore[%j] = 0; +} + +function CTFGame::onClientDamaged(%game, %clVictim, %clAttacker, %damageType, %implement, %damageLoc) +{ + //the DefaultGame will set some vars + DefaultGame::onClientDamaged(%game, %clVictim, %clAttacker, %damageType, %implement, %damageLoc); + + + //if victim is carrying a flag and is not on the attackers team, mark the attacker as a threat for x seconds(for scoring purposes) + if ((%clVictim.holdingFlag !$= "") && (%clVictim.team != %clAttacker.team)) + { + %clAttacker.dmgdFlagCarrier = true; + cancel(%clAttacker.threatTimer); //restart timer + %clAttacker.threatTimer = schedule(%game.TIME_CONSIDERED_FLAGCARRIER_THREAT, %clAttacker.dmgdFlagCarrier = false); + } +} + +//////////////////////////////////////////////////////////////////////////////////////// +function CTFGame::clientMissionDropReady(%game, %client) +{ + messageClient(%client, 'MsgClientReady',"", %game.class); + %game.resetScore(%client); + for(%i = 1; %i <= %game.numTeams; %i++) + { + $Teams[%i].score = 0; + messageClient(%client, 'MsgCTFAddTeam', "", %i, $TeamName[%i], $flagStatus[%i], $TeamScore[%i]); + } + //%game.populateTeamRankArray(%client); + + //messageClient(%client, 'MsgYourRankIs', "", -1); + + messageClient(%client, 'MsgMissionDropInfo', '\c0You are in mission %1 (%2).', $MissionDisplayName, $MissionTypeDisplayName, $ServerName ); + + DefaultGame::clientMissionDropReady(%game, %client); +} + +//NOTE - if we revert to this method of scoring, the function DefaultGame::awardScoreSuicide() no longer increments %client.deaths +// function CTFGame::recalcScore(%game, %cl) +// { +// // currently no penalty for suicide? +// //%cl.offenseScore = ((%cl.kills * %game.SCORE_PER_KILL) * (%cl.kills * %game.SCORE_PER_KILL)) / ((%cl.kills * %game.SCORE_PER_KILL) + (%cl.deaths * %game.SCORE_PER_DEATH)); //currently 1 pt per +// %cl.offenseScore = %cl.kills * %game.SCORE_PER_KILL + // 1 +// %cl.deaths * %game.SCORE_PER_DEATH + // -1 +// %cl.escortAssists * %game.SCORE_PER_ESCORT_ASSIST + // 1 +// %cl.teamKills * %game.SCORE_PER_TEAMKILL + // -1 +// %cl.flagCaps * %game.SCORE_PER_PLYR_FLAG_CAP + // 3 +// %cl.genDestroys * %game.SCORE_PER_GEN_DESTROY + // 2 +// +// %cl.defenseScore = %cl.genDefends * %game.SCORE_PER_GEN_DEFEND + // 1 +// %cl.carrierKills * %game.SCORE_PER_CARRIER_KILL + // 1 +// %cl.escortAssists * %game.SCORE_PER_ESCORT_ASSIST + // 1 +// %cl.turretKills * %game.SCORE_PER_TURRET_KILL + // 1 +// %cl.flagReturns * %game.SCORE_PER_FLAG_RETURN + // 1 +// %cl.genRepairs * %game.SCORE_PER_GEN_REPAIR + // 1 +// +// %cl.score = %cl.offenseScore + %cl.defenseScore; +// +// %game.recalcTeamRanks(%cl); +// } + +function CTFGame::assignClientTeam(%game, %client, %respawn) +{ + DefaultGame::assignClientTeam(%game, %client, %respawn); + // if player's team is not on top of objective hud, switch lines + messageClient(%client, 'MsgCheckTeamLines', "", %client.team); +} + +function CTFGame::recalcScore(%game, %cl) +{ + %killValue = %cl.kills * %game.SCORE_PER_KILL; + %deathValue = %cl.deaths * %game.SCORE_PER_DEATH; + + if (%killValue - %deathValue == 0) + %killPoints = 0; + else + %killPoints = (%killValue * %killValue) / (%killValue - %deathValue); + + %cl.offenseScore = %killPoints + + %cl.suicides * %game.SCORE_PER_SUICIDE + //-1 + %cl.escortAssists * %game.SCORE_PER_ESCORT_ASSIST + // 1 + %cl.teamKills * %game.SCORE_PER_TEAMKILL + // -1 + %cl.flagCaps * %game.SCORE_PER_PLYR_FLAG_CAP + // 3 + %cl.genDestroys * %game.SCORE_PER_GEN_DESTROY; // 2 + + %cl.defenseScore = %cl.genDefends * %game.SCORE_PER_GEN_DEFEND + // 1 + %cl.carrierKills * %game.SCORE_PER_CARRIER_KILL + // 1 + %cl.escortAssists * %game.SCORE_PER_ESCORT_ASSIST + // 1 + %cl.turretKills * %game.SCORE_PER_TURRET_KILL + // 1 + %cl.flagReturns * %game.SCORE_PER_FLAG_RETURN + // 1 + %cl.genRepairs * %game.SCORE_PER_GEN_REPAIR; // 1 + + %cl.score = mFloor(%cl.offenseScore + %cl.defenseScore); + + %game.recalcTeamRanks(%cl); +} + +function CTFGame::updateKillScores(%game, %clVictim, %clKiller, %damageType, %implement) +{ + if(%game.testTurretKill(%implement)) //check for turretkill before awarded a non client points for a kill + %game.awardScoreTurretKill(%clVictim, %implement); + else if (%game.testKill(%clVictim, %clKiller)) //verify victim was an enemy + { + %game.awardScoreKill(%clKiller); + %game.awardScoreDeath(%clVictim); + + if (%game.testGenDefend(%clVictim, %clKiller)) + %game.awardScoreGenDefend(%clKiller); + + if(%game.testCarrierKill(%clVictim, %clKiller)) + %game.awardScoreCarrierKill(%clKiller); + else + { + if (%game.testFlagDefend(%clVictim, %clKiller)) + %game.awardScoreFlagDefend(%clKiller); + } + if (%game.testEscortAssist(%clVictim, %clKiller)) + %game.awardScoreEscortAssist(%clKiller); + } + else + { + if (%game.testSuicide(%clVictim, %clKiller, %damageType)) //otherwise test for suicide + { + %game.awardScoreSuicide(%clVictim); + } + else + { + if (%game.testTeamKill(%clVictim, %clKiller)) //otherwise test for a teamkill + %game.awardScoreTeamKill(%clVictim, %clKiller); + } + } +} + +function CTFGame::testFlagDefend(%game, %victimID, %killerID) +{ + InitContainerRadiusSearch(%victimID.plyrPointOfDeath, %game.RADIUS_FLAG_DEFENSE, $TypeMasks::ItemObjectType); + %objID = containerSearchNext(); + while(%objID != 0) + { + %objType = %objID.getDataBlock().getName(); + if ((%objType $= "Flag") && (%objID.team == %killerID.team)) + return true; //found the(a) killer's flag near the victim's point of death + else + %objID = containerSearchNext(); + } + return false; //didn't find a qualifying flag within required radius of victims point of death +} + +function CTFGame::testGenDefend(%game, %victimID, %killerID) +{ + InitContainerRadiusSearch(%victimID.plyrPointOfDeath, %game.RADIUS_GEN_DEFENSE, $TypeMasks::StaticShapeObjectType); + %objID = containerSearchNext(); + while(%objID != 0) + { + %objType = %objID.getDataBlock().ClassName; + if ((%objType $= "generator") && (%objID.team == %killerID.team)) + return true; //found a killer's generator within required radius of victim's death + else + %objID = containerSearchNext(); + } + return false; //didn't find a qualifying gen within required radius of victim's point of death +} + +function CTFGame::testCarrierKill(%game, %victimID, %killerID) +{ + %flag = %victimID.plyrDiedHoldingFlag; + return ((%flag !$= "") && (%flag.team == %killerID.team)); +} + +function CTFGame::testEscortAssist(%game, %victimID, %killerID) +{ + return (%victimID.dmgdFlagCarrier); +} + +function CTFGame::testGenDestroyed(%game, %obj) +{ + return (%obj.lastDamagedByTeam != %obj.team); +} + +function CTFGame::testValidRepair(%game, %obj) +{ + return ((%obj.lastDamagedByTeam != %obj.team) && (%obj.repairedBy.team == %obj.team)); +} + +function CTFGame::awardScoreFlagCap(%game, %cl, %flag) +{ + %cl.flagCaps++; + $TeamScore[%cl.team] += %game.SCORE_PER_TEAM_FLAG_CAP; + messageAll('MsgTeamScoreIs', "", %cl.team, $TeamScore[%cl.team]); + + if (%game.SCORE_PER_TEAM_FLAG_CAP > 0) + { + %plural = (%game.SCORE_PER_PLYR_FLAG_CAP != 1 ? 's' : ""); + messageClient(%cl, 'msgCTFFriendCap', '\c0You receive %1 point%2 for capturing the enemy flag!', %game.SCORE_PER_PLYR_FLAG_CAP, %plural); + messageTeamExcept(%cl, 'msgCTFFriendCap', '\c0%1 receives %2 point%3 for capturing the enemy flag!', %cl.name, %game.SCORE_PER_PLYR_FLAG_CAP, %plural); + messageTeam(%flag.team, 'msgCTFEnemyCap', '\c0Enemy %1 received %2 point%3 for capturing your flag!', %cl.name, %game.SCORE_PER_PLYR_FLAG_CAP, %plural); + } + %game.recalcScore(%cl); + %game.checkScoreLimit(%cl.team); +} + +function CTFGame::checkScoreLimit(%game, %team) +{ + %scoreLimit = MissionGroup.CTF_scoreLimit; + // default of 5 if scoreLimit not defined + if(%scoreLimit $= "") + %scoreLimit = 5; + if($TeamScore[%team] >= %scoreLimit) + %game.scoreLimitReached(); +} + +function CTFGame::awardScoreFlagReturn(%game, %cl) +{ + %cl.flagReturns++; + if (%game.SCORE_PER_FLAG_RETURN != 0) + { + messageClient(%cl, 'scoreFlaRetMsg', '\c0You received a %1 point bonus for returning your flag.', %game.SCORE_PER_FLAG_RETURN); + messageTeamExcept(%cl, 'scoreFlaRetMsg', '\c0Teammate %1 received a %2 point bonus for returning your flag.', %cl.name, %game.SCORE_PER_FLAG_RETURN); + } + %game.recalcScore(%cl); +} + +function CTFGame::awardScoreGenDestroy(%game,%cl) +{ + %cl.genDestroys++; + if (%game.SCORE_PER_GEN_DESTROY != 0) + { + messageClient(%cl, 'msgGenDes', '\c0You received a %1 point bonus for destroying an enemy generator.', %game.SCORE_PER_GEN_DESTROY); + messageTeamExcept(%cl, 'msgGenDes', '\c0Teammate %1 received a %2 point bonus for destroying an enemy generator.', %cl.name, %game.SCORE_PER_GEN_DESTROY); + } + %game.recalcScore(%cl); +} + +function CTFGame::awardScoreGenRepair(%game, %cl) +{ + %cl.genRepairs++; + if (%game.SCORE_PER_GEN_REPAIR != 0) + { + messageClient(%cl, 'msgGenRep', '\c0You received a %1 point bonus for repairing a generator.', %game.SCORE_PER_GEN_REPAIR); + messageTeamExcept(%cl, 'msgGenRep', '\c0Teammate %1 received a %2 point bonus for repairing a generator.', %cl.name, %game.SCORE_PER_GEN_REPAIR); + } + %game.recalcScore(%cl); +} + +function CTFGame::awardScoreGenDefend(%game, %killerID) +{ + %killerID.genDefends++; + if (%game.SCORE_PER_GEN_DEFEND != 0) + { + messageClient(%killerID, 'msgGenDef', '\c0You received a %1 point bonus for defending a generator.', %game.SCORE_PER_GEN_DEFEND); + messageTeamExcept(%killerID, 'msgGenDef', '\c0Teammate %1 received a %2 point bonus for defending a generator.', %killerID.name, %game.SCORE_PER_GEN_DEFEND); + } + %game.recalcScore(%cl); +} + +function CTFGame::awardScoreCarrierKill(%game, %killerID) +{ + %killerID.carrierKills++; + if (%game.SCORE_PER_CARRIER_KILL != 0) + { + messageClient(%killerID, 'msgCarKill', '\c0You received a %1 point bonus for stopping the enemy flag carrier!', %game.SCORE_PER_CARRIER_KILL); + messageTeamExcept(%killerID, 'msgCarKill', '\c0Teammate %1 received a %2 point bonus for stopping the enemy flag carrier!', %killerID.name, %game.SCORE_PER_CARRIER_KILL); + } + %game.recalcScore(%killerID); +} + +function CTFGame::awardScoreFlagDefend(%game, %killerID) +{ + %killerID.flagDefends++; + if (%game.SCORE_PER_FLAG_DEFEND != 0) + { + messageClient(%killerID, 'msgFlagDef', '\c0You received a %1 point bonus for defending your flag!', %game.SCORE_PER_FLAG_DEFEND); + messageTeamExcept(%killerID, 'msgFlagDef', '\c0Teammate %1 received a %2 point bonus for defending your flag!', %killerID.name, %game.SCORE_PER_FLAG_DEFEND); + } + %game.recalcScore(%killerID); +} + +function CTFGame::awardScoreEscortAssist(%game, %killerID) +{ + %killerID.escortAssists++; + if (%game.SCORE_PER_ESCORT_ASSIST != 0) + { + messageClient(%killerID, 'msgEscAsst', '\c0You received a %1 point bonus for protecting the flag carrier!', %game.SCORE_PER_ESCORT_ASSIST); + messageTeamExcept(%killerID, 'msgEscAsst', '\c0Teammate %1 received a %2 point bonus for protecting the flag carrier!', %killerID.name, %game.SCORE_PER_ESCORT_ASSIST); + } + %game.recalcScore(%killerID); +} + +function CTFGame::resetScore(%game, %client) +{ + %client.offenseScore = 0; + %client.kills = 0; + %client.deaths = 0; + %client.suicides = 0; + %client.escortAssists = 0; + %client.teamKills = 0; + %client.flagCaps = 0; + %client.genDestroys = 0; + + %client.defenseScore = 0; + %client.genDefends = 0; + %client.carrierKills = 0; + %client.escortAssists = 0; + %client.turretKills = 0; + %client.flagReturns = 0; + %client.genRepairs = 0; + + + %client.score = 0; +} + +function CTFGame::genOnRepaired(%game, %obj, %objName) +{ + + if (%game.testValidRepair(%obj)) + { + %repairman = %obj.repairedBy; + messageTeam(%repairman.team, 'msgGenRepaired', '\c0%1 repaired the %2 Generator!', %repairman.name, %obj.nameTag); + %game.awardScoreGenRepair(%obj.repairedBy); + } +} + +function CTFGame::stationOnRepaired(%game, %obj, %objName) +{ + if (%game.testValidRepair(%obj)) + { + %repairman = %obj.repairedBy; + messageTeam(%repairman.team, 'msgStationRepaired', '\c0%1 repaired the %2 Inventory Station!', %repairman.name, %obj.nameTag); + } +} + +function CTFGame::sensorOnRepaired(%game, %obj, %objName) +{ + if (%game.testValidRepair(%obj)) + { + %repairman = %obj.repairedBy; + messageTeam(%repairman.team, 'msgSensorRepaired', '\c0%1 repaired the %2 Pulse Sensor!', %repairman.name, %obj.nameTag); + } +} + +function CTFGame::turretOnRepaired(%game, %obj, %objName) +{ + if (%game.testValidRepair(%obj)) + { + %repairman = %obj.repairedBy; + messageTeam(%repairman.team, 'msgTurretRepaired', '\c0%1 repaired the %2 Turret!', %repairman.name, %obj.nameTag); + } +} + +function CTFGame::vStationOnRepaired(%game, %obj, %objName) +{ + if (%game.testValidRepair(%obj)) + { + %repairman = %obj.repairedBy; + messageTeam(%repairman.team, 'msgTurretRepaired', '\c0%1 repaired the %2 Vehicle Station!', %repairman.name, %obj.nameTag); + } +} + +function CTFGame::enterMissionArea(%game, %playerData, %player) +{ + %player.client.outOfBounds = false; + messageClient(%player.client, 'EnterMissionArea', '\c1You are back in the mission area.'); + logEcho(%player.client.nameBase@" (pl "@%player@"/cl "@%player.client@") entered mission area"); + + //the instant a player leaves the mission boundary, the flag is dropped, and the return is scheduled... + if (%player.holdingFlag > 0) + { + cancel($FlagReturnTimer[%player.holdingFlag]); + $FlagReturnTimer[%player.holdingFlag] = ""; + } +} + +function CTFGame::leaveMissionArea(%game, %playerData, %player) +{ + // maybe we'll do this just in case + %player.client.outOfBounds = true; + // if the player is holding a flag, strip it and throw it back into the mission area + // otherwise, just print a message + if(%player.holdingFlag > 0) + %game.boundaryLoseFlag(%player); + else + messageClient(%player.client, 'MsgLeaveMissionArea', '\c1You have left the mission area.~wfx/misc/warning_beep.wav'); + logEcho(%player.client.nameBase@" (pl "@%player@"/cl "@%player.client@") left mission area"); +} + +function CTFGame::boundaryLoseFlag(%game, %player) +{ + // this is called when a player goes out of the mission area while holding + // the enemy flag. - make sure the player is still out of bounds + if (!%player.client.outOfBounds || !isObject(%player.holdingFlag)) + return; + + %client = %player.client; + %flag = %player.holdingFlag; + %flag.setVelocity("0 0 0"); + %flag.setTransform(%player.getWorldBoxCenter()); + %flag.setCollisionTimeout(%player); + + %game.playerDroppedFlag(%player); + + // now for the tricky part -- throwing the flag back into the mission area + // let's try throwing it back towards its "home" + %home = %flag.originalPosition; + %vecx = firstWord(%home) - firstWord(%player.getWorldBoxCenter()); + %vecy = getWord(%home, 1) - getWord(%player.getWorldBoxCenter(), 1); + %vecz = getWord(%home, 2) - getWord(%player.getWorldBoxCenter(), 2); + %vec = %vecx SPC %vecy SPC %vecz; + + // normalize the vector, scale it, and add an extra "upwards" component + %vecNorm = VectorNormalize(%vec); + %vec = VectorScale(%vecNorm, 1500); + %vec = vectorAdd(%vec, "0 0 500"); + + // apply the impulse to the flag object + %flag.applyImpulse(%player.getWorldBoxCenter(), %vec); + + //don't forget to send the message + messageClient(%player.client, 'MsgCTFFlagDropped', '\c1You have left the mission area and lost the flag.~wfx/misc/flag_drop.wav', 0, 0, %player.holdingFlag.team); + logEcho(%player.client.nameBase@" (pl "@%player@"/cl "@%player.client@") lost flag (out of bounds)"); +} + +function CTFGame::dropFlag(%game, %player) +{ + if(%player.holdingFlag > 0) + { + if (!%player.client.outOfBounds) + %player.throwObject(%player.holdingFlag); + else + %game.boundaryLoseFlag(%player); + } +} + +function CTFGame::applyConcussion(%game, %player) +{ + %game.dropFlag( %player ); +} + diff --git a/base/scripts/CenterPrint.cs b/base/scripts/CenterPrint.cs new file mode 100644 index 0000000..6b33d75 --- /dev/null +++ b/base/scripts/CenterPrint.cs @@ -0,0 +1,180 @@ +// CenterPrint Methods +//------------------------------------------------------------------------------------------------------- + +$centerPrintActive = 0; +$bottomPrintActive = 0; + +$CenterPrintSizes[1] = 20; +$CenterPrintSizes[2] = 36; +$CenterPrintSizes[3] = 56; + +function centerPrintAll( %message, %time, %lines ) +{ + if( %lines $= "" || ((%lines > 3) || (%lines < 1)) ) + %lines = 1; + + %count = ClientGroup.getCount(); + for (%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + if( !%cl.isAIControlled() ) + commandToClient( %cl, 'centerPrint', %message, %time, %lines ); + } +} + +function bottomPrintAll( %message, %time, %lines ) +{ + if( %lines $= "" || ((%lines > 3) || (%lines < 1)) ) + %lines = 1; + + %count = ClientGroup.getCount(); + for (%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + if( !%cl.isAIControlled() ) + commandToClient( %cl, 'bottomPrint', %message, %time, %lines ); + } +} + +//------------------------------------------------------------------------------------------------------- + +function centerPrint( %client, %message, %time, %lines ) +{ + if( %lines $= "" || ((%lines > 3) || (%lines < 1)) ) + %lines = 1; + + + commandToClient( %client, 'CenterPrint', %message, %time, %lines ); +} + +function bottomPrint( %client, %message, %time, %lines ) +{ + if( %lines $= "" || ((%lines > 3) || (%lines < 1)) ) + %lines = 1; + + commandToClient( %client, 'BottomPrint', %message, %time, %lines ); +} + +//------------------------------------------------------------------------------------------------------- + +function clearCenterPrint( %client ) +{ + commandToClient( %client, 'ClearCenterPrint'); +} + +function clearBottomPrint( %client ) +{ + commandToClient( %client, 'ClearBottomPrint'); +} + +//------------------------------------------------------------------------------------------------------- + +function clearCenterPrintAll() +{ + %count = ClientGroup.getCount(); + for (%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + if( !%cl.isAIControlled() ) + commandToClient( %cl, 'ClearCenterPrint'); + } +} + +function clearBottomPrintAll() +{ + %count = ClientGroup.getCount(); + for (%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + if( !%cl.isAIControlled() ) + commandToClient( %cl, 'ClearBottomPrint'); + } +} + +//------------------------------------------------------------------------------------------------------- + +function clientCmdCenterPrint( %message, %time, %lines ) // time is specified in seconds +{ + // if centerprint already visible, reset text and time. + if($centerPrintActive) + { + CenterPrintText.setText( "" @ %message ); + if( centerPrintDlg.removePrint !$= "") + { + cancel(centerPrintDlg.removePrint); + } + if(%time > 0) + centerPrintDlg.removePrint = schedule( ( %time * 1000 ), 0, "clientCmdClearCenterPrint" ); + + // were done. + return; + } + + + CenterPrintDlg.visible = 1; + $centerPrintActive = 1; + CenterPrintText.setText( "" @ %message ); + CenterPrintDlg.extent = firstWord(CenterPrintDlg.extent) @ " " @ $CenterPrintSizes[%lines]; + + if(%time > 0) + centerPrintDlg.removePrint = schedule( ( %time * 1000 ), 0, "clientCmdClearCenterPrint" ); +} + +function clientCmdBottomPrint( %message, %time, %lines ) // time is specified in seconds +{ + // if bottomprint already visible, reset text and time. + if($bottomPrintActive) + { + if( bottomPrintDlg.removePrint !$= "") + { + cancel(bottomPrintDlg.removePrint); + } + + bottomPrintText.setText( "" @ %message ); + bottomPrintDlg.extent = firstWord(bottomPrintDlg.extent) @ " " @ $CenterPrintSizes[%lines]; + + if(%time > 0) + bottomPrintDlg.removePrint = schedule( ( %time * 1000 ), 0, "clientCmdClearbottomPrint" ); + + // were done. + return; + } + + bottomPrintDlg.setVisible(true); + $bottomPrintActive = 1; + bottomPrintText.setText( "" @ %message ); + bottomPrintDlg.extent = firstWord(bottomPrintDlg.extent) @ " " @ $CenterPrintSizes[%lines]; + + if(%time > 0) + { + bottomPrintDlg.removePrint = schedule( ( %time * 1000 ), 0, "clientCmdClearbottomPrint" ); + } +} + +function BottomPrintText::onResize(%this, %width, %height) +{ + %this.position = "0 0"; +} + +function CenterPrintText::onResize(%this, %width, %height) +{ + %this.position = "0 0"; +} + +//------------------------------------------------------------------------------------------------------- + +function clientCmdClearCenterPrint() +{ + $centerPrintActive = 0; + CenterPrintDlg.visible = 0; + + CenterPrintDlg.removePrint = ""; +} + +function clientCmdClearBottomPrint() +{ + $bottomPrintActive = 0; + BottomPrintDlg.visible = 0; + + BottomPrintDlg.removePrint = ""; +} diff --git a/base/scripts/ChatGui.cs b/base/scripts/ChatGui.cs new file mode 100644 index 0000000..41ad2cf --- /dev/null +++ b/base/scripts/ChatGui.cs @@ -0,0 +1,2694 @@ +//------------------------------------------------------------------------------ +// +// ChatGui.cs +// +//------------------------------------------------------------------------------ + +$CHANNEL_STATUS = "STATUS"; +$VERSION_STRING = "Dynamix IRC Chat 1.2.0"; +$ESCAPE_SEQ = "_-_"; +$IRCClient::serverList = GetIRCServerList(0); +$IRCClient::serverCount = getRecordCount($IRCClient::serverList); +$IRCClient::retries = -1; +$IRCClient::serverIndex = -1; +$IRCClient::serverport = 6667; + +$AWAY_TIMEOUT = 5 * 60 * 1000; +$VERSION_FLOOD_TIMEOUT = 5.0; +$PING_FLOOD_TIMEOUT = 5.0; + +// Person flags +$PERSON_SPEAKER = 1; +$PERSON_OPERATOR = 2; +$PERSON_IGNORE = 4; +$PERSON_AWAY = 8; + +// Channel flags +$CHANNEL_PRIVATE = 1; +$CHANNEL_MODERATED = 2; +$CHANNEL_INVITE = 4; +$CHANNEL_LIMITED = 8; +$CHANNEL_NEWMESSAGE = 16; +$CHANNEL_IGNORE_EXTERN = 32; +$CHANNEL_SECRET = 64; +$CHANNEL_TOPIC_LIMITED = 128; +$CHANNEL_HAS_KEY = 256; +$CHANNEL_NEW = 512; + +//------------------------------------------------------------------------------ +function JoinChatDlg::onWake(%this) +{ + if ($IRCClient::state $= IDIRC_CONNECTED) + IRCClient::requestChannelList(); + else + MessageBoxYesNo("Connect IRC","Connect to IRC server?","IRCClient::connect();","Canvas.popDialog(JoinChatDlg);"); +} + +//------------------------------------------------------------------------------ +function JoinChatList::onSelect(%this,%id,%text) +{ + JoinChatName.setValue(%text); +} + +//------------------------------------------------------------------------------ +function JoinChatDlg::join(%this) +{ + IRCClient::join(IRCClient::channelName(JoinChatName.getValue())); + Canvas.popDialog(JoinChatDlg); + LaunchTabView.viewTab("CHAT",ChatGui,0); +} + +//------------------------------------------------------------------------------ +function ChatGui::onAdd(%this) +{ + // Add the Member popup menu: + new GuiControl(ChatMemberActionDlg) { + profile = "GuiModelessDialogProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + + new ShellPopupMenu(ChatMemberPopup) { + profile = "ShellPopupProfile"; + position = "0 0"; + extent = "0 0"; + minExtent = "0 0"; + visible = "1"; + maxPopupHeight = "200"; + noButtonStyle = "1"; + }; + }; +} + +//------------------------------------------------------------------------------ +function ChatGui::onWake(%this) +{ + Canvas.pushDialog(LaunchToolbarDlg); + + ChatTabView.addSet(1,"gui/shll_horztabbuttonB","5 5 5","50 50 0","5 5 5"); + + ChatGui.awake = true; + ChatTabView.setSelected($IRCClient::currentChannel); + ChatGuiScroll.scrollToBottom(); +} + +//------------------------------------------------------------------------------ +function ChatGui::setKey(%this,%ignore) +{ +} + +//------------------------------------------------------------------------------ +function ChatTabView::onAdd(%this) +{ + %this.addTab($IRCClient::channels.getObject(0),"STATUS"); +} + +//------------------------------------------------------------------------------ +function ChatTabView::onSelect(%this,%obj,%name) +{ + ChatTabFrame.setAltColor(%obj.private); + %i = %obj.findMember($IRCClient::people.getObject(0)); + ChatEditChannelBtn.setVisible(%obj.getFlags(%i) & $PERSON_OPERATOR); + ChatChannelTopic.setValue(%obj.topic); + if (ChatGui.awake) + { + if ($IRCClient::currentChannel == $IRCClient::attachedChannel) + ChatGuiMessageVector.detach(); + ChatGuiMessageVector.attach(%obj); + $IRCClient::attachedChannel = %obj; + } + $IRCClient::currentChannel = %obj; + ChatRoomMemberList_refresh(%obj); + ChatMessageEntry.schedule(1, makeFirstResponder, true); +} + +//------------------------------------------------------------------------------ +function ChatTabView::openNewPane(%this) +{ + Canvas.pushDialog(JoinChatDlg); +} + +//------------------------------------------------------------------------------ +function ChatTabView::closeCurrentPane(%this) +{ + if ($IRCClient::currentChannel == $IRCClient::channels.getObject(0)) + LaunchTabView.closeCurrentTab(); + else + IRCClient::part($IRCClient::currentChannel.getName()); +} + +//------------------------------------------------------------------------------ +function JoinPublicTribeChannel(%tribe) +{ + IRCClient::join(IRCClient::channelName(%tribe) @ "_Public"); + LaunchTabView.viewTab("CHAT",ChatGui,0); +} + +//------------------------------------------------------------------------------ +function JoinPrivateTribeChannel(%tribe) +{ + IRCClient::join(IRCClient::channelName(%tribe) @ "_Private"); + LaunchTabView.viewTab("CHAT",ChatGui,0); +} + +//------------------------------------------------------------------------------ +function KeyChannelJoin() +{ + Canvas.popDialog(ChannelKeyDlg); + IRCClient::join($IRCClient::keyChannel SPC EditChannelKey.getValue()); +} + +//------------------------------------------------------------------------------ +function ChatGuiMessageVector::urlClickCallback(%this,%type,%url,%content) +{ + switch$(%type) + { + case "http": + gotoWebPage(%url); + case "server": + IRCClient::onJoinGame(%content,%url); + + %url = nextToken(%url,a," "); + %url = nextToken(%url,map,"("); + %url = nextToken(%url,type,")"); + + // set the loading gui +// LoadingGui.map = %map; +// LoadingGui.missionType = %type; +// Canvas.setContent(LoadingGui); +// Canvas.repaint(); + + JoinGame(%content); + case "warrior": + LaunchBrowser(%url,"Warrior"); + } +} + +//------------------------------------------------------------------------------ +function ChatSendText() +{ + if ($IRCClient::people.getObject(0).flags & $PERSON_AWAY) + IRCClient::away(""); + else + { + if ($IRCClient::awaytimeout) + cancel($IRCClient::awaytimeout); + $IRCClient::awaytimeout = schedule($AWAY_TIMEOUT,0,"ChatAway_Timeout"); + } + if ($IRCClient::currentChannel.private) + IRCClient::send2(ChatMessageEntry.getValue(),$IRCClient::currentChannel.getName()); + else + IRCClient::send2(ChatMessageEntry.getValue(),""); + ChatMessageEntry.setValue(""); +} + +//------------------------------------------------------------------------------ +function ChatAway_Timeout() +{ + $IRCClient::awaytimeout = 0; + IRCClient::away($pref::IRCClient::awaymsg); +} + +//------------------------------------------------------------------------------ +function ChatRoomMemberList::onAdd(%this) +{ + ChatRoomMemberList.addStyle($PERSON_OPERATOR, + "sys_op_eye.png", "", + "","",""); + ChatRoomMemberList.addStyle($PERSON_IGNORE, + "", "mute_speaker.png", + "","",""); + ChatRoomMemberList.addStyle($PERSON_IGNORE | $PERSON_OPERATOR, + "sys_op_eye.png", "mute_speaker.png", + "","",""); + ChatRoomMemberList.addStyle($PERSON_AWAY, + "", "", + "128 128 128","",""); + ChatRoomMemberList.addStyle($PERSON_OPERATOR | $PERSON_AWAY, + "sys_op_eye.png", "", + "128 128 128","",""); + ChatRoomMemberList.addStyle($PERSON_IGNORE | $PERSON_AWAY, + "", "mute_speaker.png", + "128 128 128","",""); + ChatRoomMemberList.addStyle($PERSON_IGNORE | $PERSON_OPERATOR | $PERSON_AWAY, + "sys_op_eye.png", "mute_speaker.png", + "128 128 128","",""); +} + +//------------------------------------------------------------------------------ +function ChatRoomMemberList_refresh(%c) +{ + ChatRoomMemberList.clear(); + for (%i = 0; %i < %c.numMembers(); %i++) + { + ChatRoomMemberList.addRow(%c.getMemberId(%i),%c.getMemberNick(%i)); + ChatRoomMemberList.setRowStyle(%i,%c.getMemberId(%i).flags | %c.getFlags(%i)); + } +} + +//------------------------------------------------------------------------------ +function ChannelBannedList_refresh() +{ + ChannelBanList.clear(); + %j = 0; + for (%i = 0; %i < $IRCClient::numBanned; %i++) + { + %p = $IRCClient::banList[%i]; + if (!$IRCClient::removeBan[%p]) + { + ChannelBanList.addRow(%p,IRCClient::taggedNick(%p)); + ChannelBanList.setRowStyle(%j,%p.flags); + %j++; + } + } + ChannelBanList.sort(0); +} + +//------------------------------------------------------------------------------ +function ChannelRemoveBan() +{ + $IRCClient::removeBan[ChannelBanList.getSelectedId()] = true; + ChannelBannedList_refresh(); +} + +//------------------------------------------------------------------------------ +function ChatRoomMemberList::onRightMouseDown(%this,%column,%row,%mousePos) +{ + // Open the action menu: + ChatMemberPopup.member = %this.getRowId(%row); + ChatMemberPopup.position = %mousePos; + Canvas.pushDialog(ChatMemberActionDlg); + ChatMemberPopup.forceOnAction(); +} + +//------------------------------------------------------------------------------ +function ChatMemberActionDlg::onWake(%this) +{ + ChatMemberPopup.clear(); + %nick = IRCClient::displayNick(ChatMemberPopup.member); + %is = $IRCClient::currentChannel.findMember(ChatMemberPopup.member); + %im = $IRCClient::currentChannel.findMember($IRCClient::people.getObject(0)); + + // if ( !ChatMember.player.isBot ) + + ChatMemberPopup.add(%nick,-1); + for (%i = 0; %i < strlen(%nick) * 1.5; %i++) + %line = %line @ "-"; + ChatMemberPopup.add(%line,-1); + + if (ChatMemberPopup.member == $IRCClient::people.getObject(0)) + { + if (ChatMemberPopup.member.flags & $PERSON_AWAY) + ChatMemberPopup.add("Set Present",0); + else + ChatMemberPopup.add("Set Away",1); + } + else + { + if (strcmp(ChatMemberPopup.member.getName(),$IRCClient::currentChannel.getName())) + ChatMemberPopup.add("Chat",2); + + if ($IRCClient::currentChannel.getFlags(%im) & $PERSON_OPERATOR) + { + if (strlen(ChatMemberPopup.member.nick) && + !($IRCClient::currentChannel.getFlags(%is) & $PERSON_OPERATOR)) + ChatMemberPopup.add("Admin",3); + ChatMemberPopup.add("Kick",4); + ChatMemberPopup.add("Ban",5); + } + if (ChatMemberPopup.member.flags & $PERSON_IGNORE) + ChatMemberPopup.add("Unmute",6); + else + ChatMemberPopup.add("Mute",6); + for (%i = 1; %i < $IRCClient::channels.getCount(); %i++) + { + %c = $IRCClient::channels.getObject(%i); + if (%c.private) + continue; + %cis = %c.findMember(ChatMemberPopup.member); + %cim = %c.findMember($IRCClient::people.getObject(0)); + if (%cis < 0 && + (!(%c.flags & $CHANNEL_INVITE) || + %c.getFlags(%cim) & $PERSON_OPERATOR)) + ChatMemberPopup.add("Invite to" SPC IRCClient::displayChannel(%c.getName()),%c); + } + } +} + +//------------------------------------------------------------------------------ +function ChatPrivate() +{ + if (ChatRoomMemberList.getSelectedId() != $IRCClient::people.getObject(0)) + { + %c = IRCClient::findChannel(ChatRoomMemberList.getSelectedId().getName(),true); + ChatTabView.setSelected(%c); + } +} + +//------------------------------------------------------------------------------ +function ChatMemberPopup::onSelect(%this,%id,%text) +{ + switch( %id ) + { + case 0: // Set Back + IRCClient::away(""); + case 1: // Set Away + IRCClient::away($pref::IRCClient::awaymsg); + case 2: // Chat + %c = IRCClient::findChannel(ChatMemberPopup.member.getName(),true); + ChatTabView.setSelected(%c); + case 3: // Admin + IRCClient::setOperator(ChatMemberPopup.member); + case 4: // Kick + IRCClient::kick(ChatMemberPopup.member,$pref::IRCClient::kickmsg); + case 5: // Ban + IRCClient::ban(ChatMemberPopup.member,true); + IRCClient::kick(ChatMemberPopup.member,$pref::IRCClient::banmsg); + case 6: // Mute/Unmute + IRCClient::ignore(ChatMemberPopup.member,!(ChatMemberPopup.member.flags & $PERSON_IGNORE)); + default: // Invite + IRCClient::invite(ChatMemberPopup.member,%id); + } +} + +//------------------------------------------------------------------------------ +function ChannelBanList::onAdd(%this) +{ + ChannelBanList.addStyle($PERSON_IGNORE, + "", "mute_speaker.png", + "","",""); + ChannelBanList.addStyle($PERSON_AWAY, + "", "", + "128 128 128","",""); + ChannelBanList.addStyle($PERSON_IGNORE | $PERSON_AWAY, + "", "mute_speaker.png", + "128 128 128","",""); +} + +//------------------------------------------------------------------------------ +function ChatGui::onClose(%key) +{ + if ($IRCClient::people.getObject(0).flags & $PERSON_AWAY) + IRCClient::away(""); + for (%i = 1; %i < $IRCClient::channels.getCount(); %i++) + IRCClient::part($IRCClient::channels.getObject(%i).getName()); +} + +//------------------------------------------------------------------------------ +function ChatGui::onSleep(%this) +{ + ChatGui.awake = false; + $IRCClient::attachedChannel = 0; + + Canvas.popDialog(LaunchToolbarDlg); +} + +//------------------------------------------------------------------------------ +function EditChannelOptions() +{ + %c = $IRCClient::currentChannel; + ChannelOptionsDlg.channel = %c; + %im = $IRCClient::currentChannel.findMember($IRCClient::people.getObject(0)); + + EditChannelName.setValue(IRCClient::displayChannel(%c.getName())); + + IRCClient::requestBanList($IRCClient::currentChannel); + + EditChannelTopic.setValue(%c.topic); + + $EditChannelInvite = %c.flags & $CHANNEL_INVITE; + ButtonChannelInvite.setActive(!%c.tribe); + + $EditChannelModerate = %c.flags & $CHANNEL_MODERATED; + + $EditChannelLimit = %c.flags & $CHANNEL_LIMITED; + ButtonChannelLimit.setActive(!%c.tribe && !$EditChannelInvite); + if ($EditChannelLimit) + { + EditChannelMaxMembers.setValue(%c.personLimit); + EditChannelMaxMembers.setActive(!%c.tribe && !$EditChannelInvite); + } + else + EditChannelMaxMembers.setActive(false); + + $EditChannelKey = %c.flags & $CHANNEL_HAS_KEY; + ButtonChannelKey.setActive(!%c.tribe); + if ($EditChannelKey) + { + EditChannelPassword.setValue(%c.key); + EditChannelPassword.setActive(!%c.tribe); + } + else + EditChannelPassword.setActive(false); + + Canvas.pushDialog(ChannelOptionsDlg); +} + +//------------------------------------------------------------------------------ +function ToggleChannelInvite() +{ + if ($EditChannelInvite) + { + ButtonChannelLimit.setActive(false); + EditChannelMaxMembers.setActive(false); + } + else + { + ButtonChannelLimit.setActive(true); + ToggleChannelLimit(); + } +} + +//------------------------------------------------------------------------------ +function ToggleChannelLimit() +{ + EditChannelMaxMembers.setActive($EditChannelLimit); +} + +//------------------------------------------------------------------------------ +function ToggleChannelKey() +{ + EditChannelPassword.setActive($EditChannelKey); +} + +//------------------------------------------------------------------------------ +function CancelChannelOptions() +{ + Canvas.popDialog(ChannelOptionsDlg); + // remove temporarily created people + for (%i = 0; %i < $IRCClient::numBanned; %i++) + { + %p = $IRCClient::banList[%i]; + if (!%p.ref) + { + $IRCClient::people.remove(%p); + %p.delete(); + } + } +} + +//------------------------------------------------------------------------------ +function AcceptChannelOptions() +{ + Canvas.popDialog(ChannelOptionsDlg); + + %c = ChannelOptionsDlg.channel; + + // undo bans and remove temporarily created people + for (%i = 0; %i < $IRCClient::numBanned; %i++) + { + %p = $IRCClient::banList[%i]; + if ($IRCClient::removeBan[%p]) + IRCClient::ban(%p,false); + if (!%p.ref) + { + $IRCClient::people.remove(%p); + %p.delete(); + } + } + + %t = EditChannelTopic.getValue(); + if (strcmp(%t,%c.topic)) + IRCClient::topic(%c,%t); + + if ($EditChannelInvite != (%c.flags & $CHANNEL_INVITE)) + IRCClient::setInvite(%c,$EditChannelInvite); + + if ($EditChannelModerate != (%c.flags & $CHANNEL_MODERATED)) + IRCClient::setModerate(%c,$EditChannelModerate); + + if ($EditChannelLimit) + { + %l = EditChannelMaxMembers.getValue(); + if (!(%c.flags & $CHANNEL_LIMITED) || %l != %c.personLimit) + IRCClient::setLimit(%c,true,%l); + } + else + if (%c.flags @ $CHANNEL_LIMITED) + IRCClient::setLimit(%c,false,0); + + if ($EditChannelKey) + { + %k = EditChannelPassword.getValue(); + if (!(%c.flags & $CHANNEL_HAS_KEY) || strcmp(%k,%c.key)) + IRCClient::setKey(%c,true,%k); + } + else + if (%c.flags & $CHANNEL_HAS_KEY) + IRCClient::setKey(%c,false,""); +} + +//------------------------------------------------------------------------------ +function IRCClient::init() +{ + $IRCClient::tcp = new TCPObject(IRCTCP); + + $IRCClient::people = new SimGroup(IRCPeople); + $IRCClient::channels = new SimGroup(IRCChannels); + $IRCClient::connectwait = 0; + $IRCClient::room = ""; + $IRCClient::numCensorWords = 0; + + $IRCClient::people.add(new SimObject("IRCMe") + { + real = ""; + identity = ""; + nick = ""; + flags = 0; + ping = 0; + ref = 1; + }); + + $IRCClient::channels.add(new ChannelVector($CHANNEL_STATUS) + { + topic = "IRC Status"; + key = ""; + flags = 0; + personLimit = 0; + private = false; + tribe = false; + }); +} + +//------------------------------------------------------------------------------ +function IRCClient::notify(%event) +{ + switch$(%event) + { + case IDIRC_CONNECTING_SOCKET: + case IDIRC_CONNECTED: + IRCClient::requestChannelList(); + case IDIRC_ERR_HOSTNAME: + MessageBoxOK("Bad Hostname","Could not resolve IRC server address " @ $IRCClient::server @ ".",""); + case IDIRC_ERR_TIMEOUT: + MessageBoxOK("No Response","Connection failed. The IRC server did not respond.",""); + case IDIRC_ERR_DROPPED: + MessageBoxOK("Connection Dropped","You have been disconnected from IRC server " @ $IRCClient::server @ ".",""); + case IDIRC_RECONNECT: + case IDIRC_ERR_RECONNECT: + MessageBoxOK("No Reconnect","Unable to reconnect to IRC server " @ $IRCClient::server @ ".",""); + case IDIRC_ERR_BADCHALLENGE: + case IDIRC_ERR_BADCHALRESP_REPLY: + case IDIRC_CHANNEL_LIST: + JoinChatList.clear(); + for (%i = 0; %i < $IRCClient::numChannels; %i++) + JoinChatList.addRow(%i,IRCClient::displayChannel($IRCClient::channelNames[%i])); + JoinChatList.sort(0); + if (strlen(JoinChatName.getValue())) + { + %i = JoinChatList.findTextIndex(JoinChatName.getValue()); + JoinChatList.scrollVisible(%i); + JoinChatList.setSelectedById(JoinChatList.getRowId(%i)); + } + case IDIRC_CHANNEL_HAS_KEY: + KeyChannelName.setValue(IRCClient::displayChannel($IRCClient::keyChannel)); + Canvas.pushDialog(ChannelKeyDlg); + case IDIRC_ADDCHANNEL: + if (ChatTabView.tabCount() < $IRCClient::channels.getCount()) + ChatTabView.addTab($IRCClient::nextChannel, + IRCClient::displayChannel($IRCClient::nextChannel.getName()), + $IRCClient::nextChannel.private); + if ($IRCClient::nextChannel && !$IRCClient::nextChannel.private) + { + ChatTabView.setSelected($IRCClient::nextChannel); + $IRCClient::nextChannel = 0; + } + alxPlay(sButtonDown,0,0,0); + case IDIRC_JOIN: + %i = $IRCClient::currentChannel.findMember($IRCClient::people.getObject(0)); + ChatEditChannelBtn.setVisible($IRCClient::currentChannel.getFlags(%i) & $PERSON_OPERATOR); + ChatRoomMemberList_refresh($IRCClient::currentChannel); + case IDIRC_SORT: + %i = $IRCClient::currentChannel.findMember($IRCClient::people.getObject(0)); + ChatEditChannelBtn.setVisible($IRCClient::currentChannel.getFlags(%i) & $PERSON_OPERATOR); + ChatRoomMemberList_refresh($IRCClient::currentChannel); + case IDIRC_PART: + ChatRoomMemberList_refresh($IRCClient::currentChannel); + case IDIRC_KICK: + if ($IRCClient::nextChannel) + { + $IRCClient::attachedChannel = 0; + ChatTabView.setSelected($IRCClient::nextChannel); + $IRCClient::nextChannel = 0; + } + ChatTabView.removeTab($IRCClient::deletedChannel); + case IDIRC_INVITED: + MessageBoxOKCancel("Invite", + "You have been invited to channel " @ + IRCClient::displayChannel($IRCClient::invitechannel) @ + " by " @ $IRCClient::inviteperson @ ".", + "IRCClient::join($IRCClient::invitechannel);"); + case IDIRC_BAN_LIST: + ChannelBannedList_refresh(); + case IDIRC_TOPIC: + ChatChannelTopic.setValue($IRCClient::currentChannel.topic); + case IDIRC_DELCHANNEL: + if ($IRCClient::nextChannel) + { + $IRCClient::attachedChannel = 0; + ChatTabView.setSelected($IRCClient::nextChannel); + $IRCClient::nextChannel = 0; + } + ChatTabView.removeTab($IRCClient::deletedChannel); + + default: + echo("IRCClient: [NOTIFY] " @ %event); + } +} + +//------------------------------------------------------------------------------ +function IRCClient::statusMessage(%message) +{ + $IRCClient::channels.getObject(0).pushBackLine("[STATUS] " @ %message); +} + +//------------------------------------------------------------------------------ +function IRCClient::connecting() +{ + $IRCClient::connectwait++; + if ($IRCClient::connectwait > 1) + return; + + ChatChannelPane.setTitle("CONNECTING"); + JoinChatPane.setTitle("CONNECTING"); + ChannelBanPane.setTitle("CONNECTING"); +} + +//------------------------------------------------------------------------------ +function IRCClient::connected() +{ + if (!$IRCClient::connectwait) + return; + + $IRCClient::connectwait--; + if ($IRCClient::connectwait) + return; + + ChatChannelPane.setTitle("CHAT"); + JoinChatPane.setTitle("CHOOSE CHAT CHANNEL"); + ChannelBanPane.setTitle("EDIT BAN LIST"); +} + +//------------------------------------------------------------------------------ +function IRCClient::newMessage(%channel,%message) +{ + if (%channel == $IRCClient::channels.getObject(0) || + %channel $= "") + $IRCClient::channels.getObject(0).pushBackLine(%message); + else + %channel.pushBackLine(%message); +} + +//------------------------------------------------------------------------------ +function IRCClient::findPerson(%nick) +{ + for (%i = 0; %i < $IRCClient::people.getCount(); %i++) + { + %person = $IRCClient::people.getObject(%i); + if (%person.getName() $= %nick) + return %person; + } +} + +//------------------------------------------------------------------------------ +function IRCClient::findPerson2(%prefix,%create) +{ + // typical name + // Yakuza|!yakuzasama@pool032-max7.ds23-ca-us.dialup.earthlink.net + %prefix = nextToken(%prefix,nick," !"); + nextToken(%prefix,ident," "); + + if (strlen(%nick)) + { + if (getSubStr(%nick,0,1) $= "@" || getSubStr(%nick,0,1) $= "+") + %nick = getSubStr(%nick,1,strlen(%nick)-1); + if (strlen(%ident) && getSubStr(%ident,0,1) $= "~") + %ident = getSubStr(%ident,1,strlen(%ident)-1); + + // look 'em up + %p = IRCClient::findPerson(%nick); + if (%p) + { + if (strlen(%ident) && strcmp(%ident,%p.identity)) + { + IRCClient::setIdentity(%p,%ident); + IRCClient::correctNick(%p); + } + + return %p; + } + + if (%create) + { + %p = new SimObject(%nick) + { + real = ""; + identity = ""; + nick = ""; + flags = 0; + ping = 0; + ref = 0; + }; + if (strlen(%ident)) + IRCClient::setIdentity(%p,%ident); + $IRCClient::people.add(%p); + + %c = IRCClient::findChannel(%nick); + if (%c && %c.numMembers != 2) + { + IRCClient::newMessage(%c,IRCClient::taggedNick(%p) @ " has reconnected."); + %c.addMember(%p,IRCClient::taggedNick(%p)); + %p.ref++; + if (%c == $IRCClient::currentChannel) + IRCClient::notify(IDIRC_JOIN); + } + + // initiate WHO do determine username + if (!strlen(%ident) && %p != $IRCClient::people.getObject(1) && + getSubStr(%nick,strlen(%nick)-1,1) $= "^") + IRCClient::whois(%p); + + return %p; + } + } +} + +//------------------------------------------------------------------------------ +function IRCClient::doEscapes(%string) +{ + // escape spaces + while ((%i = strpos(%string," ")) != -1) + %string = getSubStr(%string,0,%i) @ $ESCAPE_SEQ @ "01" @ + getSubStr(%string,%i+1,strlen(%string)-(%i+1)); + + return %string; +} + +//------------------------------------------------------------------------------ +function IRCClient::undoEscapes(%string) +{ + %esclen = strlen($ESCAPE_SEQ); + %offset = 0; + %search = %string; + while ((%i = strpos(%search,$ESCAPE_SEQ)) != -1) + { + %code = getSubStr(%search,%i+%esclen,2); + switch$(%code) + { + case "01": + %replace = " "; + } + + %string = getSubStr(%string,0,%offset+%i) @ %replace @ + getSubStr(%string,%offset+%i+%esclen+2, + strlen(%string)-(%offset+%i+%esclen+2)); + %search = getSubStr(%string,%offset,strlen(%string)-%offset); + } + + return %string; +} + +//------------------------------------------------------------------------------ +function IRCClient::setIdentity(%p,%ident) +{ + %p.identity = %ident; + + if (getSubStr(%p.getName(),strlen(%p.getName())-1,1) $= "^") + { + // identity is set and user is WON-authenticated + %i = strpos(%ident,"@"); + while ((%j = strpos(%ident,"@",%i+1)) >= 0) + %i = %j; + %user = IRCToByte(getSubStr(%ident,0,%i)); + + %delimeter = $ESCAPE_SEQ @ "00"; + %delimlen = strlen(%delimeter); + %i = strpos(%user,%delimeter); + %name = getSubStr(%user,0,%i); + %user = getSubStr(%user,%i+%delimlen, + strlen(%user)-(%i+%delimlen)); + %i = strpos(%user,%delimeter); + %tag = getSubStr(%user,0,%i); + %append = getSubStr(%user,%i+%delimlen,1); + + if (strlen(%tag)) + if (%append) + { + %p.nick = %name @ %tag; + %p.tagged = "" @ %name @ "" @ %tag @ ""; + } + else + { + %p.nick = %tag @ %name; + %p.tagged = "" @ %tag @ "" @ %name @ ""; + } + else + { + %p.nick = %name; + %p.tagged = "" @ %name @ ""; + } + } +} + +//------------------------------------------------------------------------------ +function IRCClient::displayNick(%person) +{ + // identity is set and user is WON-authenticated + if (strlen(%person.nick)) + return %person.nick; + else + return %person.getName(); +} + +//------------------------------------------------------------------------------ +function IRCClient::taggedNick(%person) +{ + // identity is set and user is WON-authenticated + if (strlen(%person.nick)) + return %person.tagged; + else + return %person.getName(); +} + +//------------------------------------------------------------------------------ +function IRCClient::correctNick(%p) +{ + for (%i = 1; %i < $IRCClient::channels.getCount(); %i++) + { + %c = $IRCClient::channels.getObject(%i); + if (%c.getName() $= %p.getName()) + { + ChatTabView.setTabText(%c,IRCClient::displayNick(%p)); + %c.topic = "Private chat with" SPC IRCClient::displayNick(%p); + if (%c == $IRCClient::currentChannel) + IRCClient::notify(IDIRC_TOPIC); + } + + %mi = %c.findMember(%p); + if (%mi >= 0) + { + %c.setMemberNick(%mi,IRCClient::taggedNick(%p)); + %c.sort(); + if (%c == $IRCClient::currentChannel) + IRCClient::notify(IDIRC_SORT); + } + else + if (%c == $IRCClient::banChannel) + IRCClient::notify(IDIRC_BAN_LIST); + } +} + +//------------------------------------------------------------------------------ +function IRCClient::findChannel(%name,%create) +{ + if (%name $= "") + return $IRCClient::currentChannel; + + for (%i = 0; %i < $IRCClient::channels.getCount(); %i++) + { + %c = $IRCClient::channels.getObject(%i); + if (%c.getName() $= %name) + return %c; + } + if (%create) + { + %topic = ""; + %flags = $CHANNEL_NEW; + %private = false; + for (%i = 0; %i < $IRCClient::numChannels; %i++) + if (%name $= $IRCClient::channelNames[%i]) + { + %topic = $IRCClient::channelTopics[%i]; + + break; + } + + if (strcmp(getSubStr(%name,0,1),"#") && strcmp(getSubStr(%name,0,1),"&")) + { + %p = IRCClient::findPerson(%name); + %topic = "Private chat with " @ IRCClient::displayNick(%p); + %flags = %flags | $CHANNEL_PRIVATE; + %private = true; + } + %l = strlen(%name); + %tribe = (%l > 7 && strcmp(getSubStr(%name,%l-7,7),"_Public") == 0) || + (%l > 8 && strcmp(getSubStr(%name,%l-8,8),"_Private") == 0); + %c = new ChannelVector(%name) + { + topic = %topic; + key = ""; + flags = $CHANNEL_NEW; + personLimit = 0; + private = %private; + tribe = %tribe; + }; + $IRCClient::channels.add(%c); + if (%c.private) + { + %me = $IRCClient::people.getObject(0); + %c.addMember(%me,IRCClient::taggedNick(%me)); + %me.ref++; + %c.addMember(%p,IRCClient::taggedNick(%p)); + %p.ref++; + + $IRCClient::nextChannel = %c; + IRCClient::notify(IDIRC_ADDCHANNEL); + } + + return %c; + } +} + +//------------------------------------------------------------------------------ +function IRCClient::displayChannel(%channel) +{ + if (getSubStr(%channel,0,1) $= "#" || getSubStr(%channel,0,1) $= "&") + return IRCClient::undoEscapes(getSubStr(%channel,1,strlen(%channel)-1)); + else + return IRCClient::displayNick(IRCClient::findPerson(%channel)); +} + +//------------------------------------------------------------------------------ +function IRCClient::channelName(%channel) +{ + %channel = IRCClient::doEscapes(%channel); // escape spaces + + if (getSubStr(%channel,0,1) $= "#") + return %channel; + else + return "#" @ %channel; +} + +//------------------------------------------------------------------------------ +function IRCClient::reset() +{ + $IRCClient::numBanned = 0; + + // Delete all the channels except status + $IRCClient::numChannels = 0; + while ($IRCClient::channels.getCount() > 1) + { + %channel = $IRCClient::channels.getObject(1); + $IRCClient::channels.remove(%channel); + %channel.delete(); + } + $IRCClient::currentChannel = $IRCClient::channels.getObject(0); + + // Delete everyone except myself + while ($IRCClient::people.getCount() > 1) + { + %person = $IRCClient::people.getObject(1); + $IRCClient::people.remove(%person); + %person.delete(); + } +} + +//------------------------------------------------------------------------------ +function IRCClient::connect() +{ + if (strcmp($IRCClient::state,IDIRC_CONNECTING_WAITING)) + { + IRCClient::disconnect(); + if($IRCClient::retries == -1 || $IRCClient::retries > 5) + { + $IRCClient::serverIndex++; + $IRCClient::retries = 0; + if($IRCClient::serverIndex >= $IRCClient::serverCount) + { + IRCClient::newMessage("","Unable to connect to IRC servers."); + IRCClient::notify(IDIRC_ERR_RECONNECT); + $IRCClient::state = IDIRC_DISCONNECTED; + return; + } + $IRCClient::server = getField(getRecord($IRCClient::serverList, $IRCClient::serverIndex), 0); + } + IRCClient::newMessage("","Connecting to " @ $IRCClient::server); + $IRCClient::state = IDIRC_CONNECTING_SOCKET; + IRCClient::notify(IDIRC_CONNECTING_SOCKET); + + $IRCClient::tcp.connect($IRCClient::server); + } +} + +//------------------------------------------------------------------------------ +function IRCClient::connect2(%address,%port) +{ + $IRCClient::server = %address @ ":" @ %port; + + IRCClient::connect(); +} + +//------------------------------------------------------------------------------ +function IRCTCP::onConnected(%this) +{ + IRCClient::newMessage("","Established TCP/IP connection"); + %me = $IRCClient::people.getObject(0); + IRCClient::send("CERT " @ WONLoginIRC()); + $IRCClient::state = IDIRC_CONNECTING_WAITING; +} + +//------------------------------------------------------------------------------ +function IRCTCP::onDNSFailed(%this) +{ + IRCClient::newMessage("","Could not resolve address " @ $IRCClient::server @ "."); + $IRCClient::state = IDIRC_DISCONNECTED; + IRCClient::notify(IDIRC_ERR_HOSTNAME); +} + +//------------------------------------------------------------------------------ +function IRCTCP::onConnectFailed(%this) +{ + if ($IRCClient::state $= IDIRC_CONNECTED) + { + IRCClient::newMessage("","You have been disconnected from " @ $IRCClient::server @ "."); + if (!IRCClient::reconnect()) + { + $IRCClient::state = IDIRC_DISCONNECTED; + IRCClient::notify(IDIRC_ERR_DROPPED); + } + } + else + { + IRCClient::newMessage("","Connection failed. The server did not respond."); + IRCClient::disconnect(); + IRCClient::notify(IDIRC_ERR_TIMEOUT); + } +} + +//------------------------------------------------------------------------------ +function IRCClient::reconnect() +{ + if (!$pref::IRCClient::autoreconnect) + return (false); + + $IRCClient::retries++; + IRCClient::newMessage("","Try " @ $IRCClient::retries @ ". Attempting to reconnect to " @ $IRCClient::server @ "."); + IRCClient::notify(IDIRC_RECONNECT); + IRCClient::connect(); + return true; +} + +//------------------------------------------------------------------------------ +function IRCClient::disconnect() +{ + if ($IRCClient::awaytimeout) + { + cancel($IRCClient::awaytimeout); + $IRCClient::awaytimeout = 0; + } + + $IRCClient::state = IDIRC_DISCONNECTED; + + $IRCClient::tcp.disconnect(); + + $IRCClient::silentList = 0; + $IRCClient::silentBanList = 0; + + IRCClient::reset(); +} + +//------------------------------------------------------------------------------ +function IRCClient::send(%message) +{ + $IRCClient::tcp.send(%message @ "\r\n"); +} + +//------------------------------------------------------------------------------ +function IRCTCP::onLine(%this,%line) +{ + // HACK: Windows 2000 bug. We shouldn't need to do this! + if ($IRCClient::state $= IDIRC_CONNECTING_SOCKET) + IRCTCP::onConnected(%this); + + IRCClient::processLine(%line); +} + +//------------------------------------------------------------------------------ +function IRCClient::processLine(%line) +{ + // RFC_1459: Message Packet format + // + // ::= [':' ] + // ::= | [ '!' ] [ '@' ] + // ::= { } | + // ::= ' ' { ' ' } + // ::= [ ':' | ] + // + // ::= + // ::= + // ::= CR LF + + %src = %line; + if($pref::enableBadWordFilter) + %src = filterString(%src); + + if (strlen(%src)) + { + // check for prefix + if (getSubStr(%src,0,1) $= ":") + %src = nextToken(getSubStr(%src,1,strlen(%src)-1),prefix," "); + + // this is the command + %src = nextToken(%src,command," :"); + + // followed by its params + %src = nextToken(%src,params,""); + + if (!IRCClient::dispatch(%prefix,%command,%params)) + { + echo("IRCClient: " @ %command @ " not handled by dispatch!"); + echo("(cmd:) " @ %prefix @ " " @ %command @ " " @ %params); + } + } +} + +//------------------------------------------------------------------------------ +function IRCClient::dispatch(%prefix,%command,%params) +{ + switch$(%command) + { + case "PING": + IRCClient::onPing(%prefix,%params); + case "PONG": + IRCClient::onPong(%prefix,%params); + case "PRIVMSG": + IRCClient::onPrivMsg(%prefix,%params); + case "JOIN": + IRCClient::onJoin(%prefix,%params); + case "NICK": + IRCClient::onNick(%prefix,%params); + case "QUIT": + IRCClient::onQuit(%prefix,%params); + case "ERROR": + IRCClient::onError(%prefix,%params); + case "TOPIC": + IRCClient::onTopic(%prefix,%params); + case "PART": + IRCClient::onPart(%prefix,%params); + case "KICK": + IRCClient::onKick(%prefix,%params); + case "MODE": + IRCClient::onMode(%prefix,%params); + case "AWAY": + IRCClient::onAway(%prefix,%params); + case "NOTICE": + IRCClient::onNotice(%prefix,%params); + case "VERSION": + IRCClient::onVersion(%prefix,%params); + case "ACTION": + IRCClient::onAction(%prefix,%params); + case "INVITE": + IRCClient::onInvite(%prefix,%params); + + case "301": + IRCClient::onAwayReply(%prefix,%params); + case "305": + IRCClient::onUnAwayReply(%prefix,%params); + case "306": + IRCClient::onNowAwayReply(%prefix,%params); + case "311": + IRCClient::onWhoisUserReply(%prefix,%params); + case "312": + IRCClient::onWhoisReply(%prefix,%params); + case "318": + IRCClient::onWhoisReply(%prefix,%params); + case "319": + IRCClient::onWhoisReply(%prefix,%params); + case "315": + IRCClient::onEndOfWho(%prefix,%params); + case "317": + IRCClient::onWhoisIdle(%prefix,%params); + + case "322": + IRCClient::onList(%prefix,%params); + case "323": + IRCClient::onListEnd(%prefix,%params); + case "324": + IRCClient::onModeReply(%prefix,%params); + case "331": + IRCClient::onNoTopic(%prefix,%params); + case "332": + IRCClient::onTopic(%prefix,%params); + + case "341": + IRCClient::onInviteReply(%prefix,%params); + + case "352": + IRCClient::onWhoReply(%prefix,%params); + case "353": + IRCClient::onNameReply(%prefix,%params); + case "367": + IRCClient::onBanList(%prefix,%params); + case "368": + IRCClient::onBanListEnd(%prefix,%params); + case "372": + IRCClient::onMOTD(%prefix,%params); + case "376": + IRCClient::onMOTDEnd(%prefix,%params); + case "401": + IRCClient::onNoSuchNick(%prefix,%params); + case "422": + IRCClient::onMOTDEnd(%prefix,%params); + case "433": + IRCClient::onBadNick(%prefix,%params); + case "444": + IRCClient::onNoLogin(%prefix,%params); + case "465": + IRCClient::onServerBanned(%prefix,%params); + case "468": + IRCClient::onInvalidNick(%prefix,%params); + case "471": + IRCClient::onChannelFull(%prefix,%params); + case "473": + IRCClient::onChannelInviteOnly(%prefix,%params); + case "474": + IRCClient::onChannelBanned(%prefix,%params); + case "475": + IRCClient::onBadChannelKey(%prefix,%params); + + case "CHALLENGE": + IRCClient::onChallenge(%prefix,%params); + case "CHALRESP_REPLY": + IRCClient::onChalRespReply(%prefix,%params); + case "DBMSG": + HandleDatabaseProxyResponse(%prefix, %params); + default: + return false; + } + + return true; +} + +//------------------------------------------------------------------------------ +function IRCClient::onPing(%prefix,%params) +{ + %time = getSimTime(); + + if ((%time - $IRCClient::lastPinged) >= $PING_FLOOD_TIMEOUT) + { + $IRCClient::lastPinged = %time; + + if (strlen(%prefix)) + { + nextToken(%prefix,nick,"!"); + %p = IRCClient::findPerson(%nick); + + if (%p) + if (%p.ping) + { + IRCClient::newMessage($IRCClient::currentChannel, + IRCClient::taggedNick(%p) @ " roundtrip delay: " @ (%time-%p.ping)/1000 @ " seconds."); + %p.ping = 0; + } + else + { + %params = nextToken(%params,nick," :"); + nextToken(%params,key," \x01"); + IRCClient::send("NOTICE " @ %nick @ " :\x01PING " @ %key); + } + } + else + IRCClient::send("PONG " @ %params); + } +} + +//------------------------------------------------------------------------------ +function IRCClient::onPong(%prefix,%params) +{ + nextToken(%params,nick," "); + %p = IRCClient::findPerson(%nick); + if (%p && %p.ping) + { + IRCClient::newMessage($IRCClient::currentChannel, + IRCClient::taggedNick(%p) @ " roundtrip delay: " @ (getSimTime()-%p.ping)/1000 @ " seconds."); + %p.ping = 0; + } +} + +//------------------------------------------------------------------------------ +function IRCClient::onJoin(%prefix,%params) +{ + %p = IRCClient::findPerson2(%prefix,true); + %c = IRCClient::findChannel(%params,true); + + if (%c.addMember(%p,IRCClient::taggedNick(%p))) + { + %p.ref++; + IRCClient::notify(IDIRC_JOIN); + } + if ($pref::IRCClient::showjoinleave && !(%p.flags & $PERSON_IGNORE)) + IRCClient::newMessage(%c,IRCClient::taggedNick(%p) @ " has joined the conversation."); + + // if this is me then set this as the current channel + if (%p == $IRCClient::people.getObject(0)) + { + $IRCClient::nextChannel = %c; + IRCClient::notify(IDIRC_ADDCHANNEL); + + IRCClient::send("MODE " @ %c.getName()); + } + IRCClient::connected(); +} + +//------------------------------------------------------------------------------ +function IRCClient::onPrivMsg(%prefix,%params) +{ + %p = $IRCClient::people.getObject(0); + %params = nextToken(%params,ch," "); + %msg = %params; + + // messages always lead with a ':' + if (getSubStr(%msg,0,1) $= ":") + %msg = getSubStr(%msg,1,strlen(%msg)-1); + + %nick = %ch; + if (getSubStr(%ch,0,1) $= "@" || getSubStr(%ch,0,1) $= "+") + %nick = getSubStr(%nick,1,strlen(%nick)-1); + if ( %nick $= %p.getName()) + nextToken(%prefix,ch," !"); + + if (strcmp(getSubStr(%msg,0,1),"\x01")) + { + // are we IGNORING this person? + %p = IRCClient::findPerson2(%prefix,true); + if (%p && (%p.flags & $PERSON_IGNORE)) + return; + + %c = IRCClient::findChannel(%ch, true); + if ( !%c ) + return; + IRCClient::newMessage(%c,IRCClient::taggedNick(%p) @ ": " @ %msg); + } + else + { + // otherwise it's a command imbeded inside PRIVMSG (oh great!) + %msg = nextToken(%msg,command," \x01"); + IRCClient::dispatch(%prefix,%command,%ch @ ": " @ %msg); + } +} + +//------------------------------------------------------------------------------ +function IRCClient::onNick(%prefix,%params) +{ + %person = IRCClient::findPerson2(%prefix,false); + + if (%person) + { + if (!(%person.flags & $PERSON_IGNORE)) + IRCClient::newMessage($IRCClient::currentChannel,%person.getName() @ " is now known as " @ %params @ "."); + + %channel = IRCClient::findChannel(%person.getName()); + + if (%channel) + %channel.setName(%params); + + %person.setName(%params); + + // If this is me, re-set the console variable + if (%person == $IRCClient::people.getObject(0)) + $IRCClient::NickName = %person.getName(); + } +} + +//------------------------------------------------------------------------------ +function IRCClient::onQuit(%prefix,%params) +{ + %p = IRCClient::findPerson2(%prefix,false); + + if (%p) + { + // For every channel + for (%i = 1; %i < $IRCClient::channels.getCount(); %i++) + { + %c = $IRCClient::channels.getObject(%i); + if (%c.removeMember(%p)) + { + if (!(%p.flags & $PERSON_IGNORE)) + IRCClient::newMessage(%c,IRCClient::taggedNick(%p) @ " has disconnected from IRC."); + if (%c == $IRCClient::currentChannel) + IRCClient::notify(IDIRC_PART); + } + } + + // clean up the Person + $IRCClient::people.remove(%p); + %p.delete(); + } +} + +//------------------------------------------------------------------------------ +function IRCClient::onError(%prefix,%params) +{ + IRCClient::newMessage($IRCClient::currentChannel,%params); + IRCClient::notify(IDIRC_ERROR); + IRCClient::disconnect(); +} + +//------------------------------------------------------------------------------ +function IRCClient::onMOTD(%prefix,%params) +{ // command 372 + // EXAMPLE :StLouis.MO.US.UnderNet.org 372 homer128 :- ==> Disclaimer/ Rules: + %msg = nextToken(%params,prefix,":"); + IRCClient::newMessage($IRCClient::currentChannel,%msg); +} + +//------------------------------------------------------------------------------ +function IRCClient::onMOTDEnd(%prefix, %params) +{ // command 372 + // EXAMPLE :StLouis.MO.US.UnderNet.org 372 homer128 :- ==> Disclaimer/ Rules: + if ($IRCClient::state $= IDIRC_CONNECTING_WAITING) + { + IRCClient::newMessage("","Successfully connected to " @ $IRCClient::server @ ":" @ $IRCClient::serverport); + $IRCClient::state = IDIRC_CONNECTED; + IRCClient::notify(IDIRC_CONNECTED); + + // auto join a room if requested + if (strlen($IRCClient::room)) + IRCClient::send("JOIN " @ $IRCClient::room); + } +} + +//------------------------------------------------------------------------------ +function IRCClient::onNoSuchNick(%prefix,%params) +{ + %params = nextToken(%params,me," "); + nextToken(%params,nick," :"); + + %c = IRCClient::findChannel(%nick); + if (%c && %c.private) + { + %p = IRCClient::findPerson(%nick); + if (%p) + { + if (!(%p.flags & $PERSON_IGNORE)) + IRCClient::newMessage(%c,IRCClient::taggedNick(%p) @ " has disconnected from IRC."); + %c.removeMember(%p); + %p.delete(); + if (%c == $IRCClient::currentChannel) + IRCClient::notify(IDIRC_PART); + } + } +} + +//------------------------------------------------------------------------------ +function IRCClient::onNameReply(%prefix,%params) +{ // command 353 + // EXAMPLE homer128 = #Starsiege :homer128 Fusion^WP KM-UnDead Rick-wrk Lord-Star Apoc0410 + %params = nextToken(%params,nick," =@"); + %me = IRCClient::findPerson(%nick); + if (!%me) + { + echo("IRCClient::onNameReply: My nick should have existed."); + + return; + } + + // find the end of channel name + %params = nextToken(%params,ch," :"); + %c = IRCClient::findChannel(%ch); + if (!%c) + { + echo("IRCClient::onNameReply: This channel should have existed."); + + return; + } + + // loop through the nick and add them to the channel + while (strlen(%params)) + { + %params = nextToken(%params,nick," "); + %p = IRCClient::findPerson2(%nick,true); + + %flags = 0; + if (getSubStr(%nick,0,1) $= "@") + %flags = %flags | $PERSON_OPERATOR; + else if (getSubStr(%nick,0,1) $= "+") + %flags = %flags | $PERSON_SPEAKER; + + // If it's not me, add them to the channel + if (%p != %me) + { + %c.addMember(%p,IRCClient::taggedNick(%p),%flags); + %p.ref++; + } + // If it is me, just set the flags + else + { + %i = %c.findMember(%p); + if (%i != -1) + %c.setFlags(%i,%flags,true); + } + } + + IRCClient::notify(IDIRC_JOIN); +} + +//------------------------------------------------------------------------------ +function IRCClient::onWhoReply(%prefix, %params) +{ + // command 352 + // EXAMPLE: :StLouis.MO.US.UnderNet.org 352 homer128 #Starsiege ~DrAwkward 198.74.39.31 los-angeles.ca.us.undernet.org DrAwkward H :3 JR + %params = nextToken(%params,me," "); + %params = nextToken(%params,ch," "); + %params = nextToken(%params,user," "); + %params = nextToken(%params,at," "); + %params = nextToken(%params,server," "); + %params = nextToken(%params,nick," *+@"); + %params = nextToken(%params,HG," "); + %params = nextToken(%params,hops," "); + nextToken(%params,real," "); + + %p = IRCClient::findPerson(%nick); + if (!%p) return; + + if (getSubStr(%user,0,1) $= "~") + %user = getSubStr(%user,1,strlen(%user)-1); + + // update person in question + if (strcmp(%p.identity,%user @ "@" @ %at)) + { + IRCClient::setIdentity(%p,%user @ "@" @ %at); + IRCClient::correctNick(%p); + } + %p.real = %real; + + // Send it to the status channel + IRCClient::newMessage("","WHO " @ IRCClient::taggedNick(%p) @ ": " @ %user @ "@" @ %at @ " (" @ %real @ ") connected to server " @ %server @ "."); + IRCClient::connected(); +} + +//------------------------------------------------------------------------------ +function IRCClient::onEndOfWho(%prefix,%params) +{ + IRCClient::notify(IDIRC_END_OF_WHO); + // IRCClient::newMessage("","End of WHO list."); +} + +//------------------------------------------------------------------------------ +function IRCClient::onPart(%prefix,%params) +{ + %p = IRCClient::findPerson2(%prefix,false); + %c = IRCClient::findChannel(%params); + + if (%p && %c) + if (%c.removeMember(%p)) + { + if ($pref::IRCClient::showjoinleave && !(%p.flags & $PERSON_IGNORE)) + IRCClient::newMessage(%c,IRCClient::taggedNick(%p) @ " has left the conversation."); + IRCClient::notify(IDIRC_PART); + %p.ref--; + if (%p.ref == 0) + { + $IRCClient::people.remove(%p); + %p.delete(); + } + } + + // if this was me parting, clean up the channel + if (%p == $IRCClient::people.getObject(0) && %c) + { + $IRCClient::channels.remove(%c); + for (%i = 0; %i < %c.numMembers(); %i++) + { + %m = %c.getMemberId(%i); + %m.ref--; + if (%m.ref == 0) + { + $IRCClient::people.remove(%m); + %m.delete(); + } + } + %c.delete(); + $IRCClient::deletedChannel = %c; + if ($IRCClient::currentChannel == %c) + $IRCClient::nextChannel = $IRCClient::channels.getObject(0); + IRCClient::notify(IDIRC_DELCHANNEL); + } +} + +//------------------------------------------------------------------------------ +function IRCClient::onNoTopic(%prefix,%params) +{ + %params = nextToken(%params,channel," "); + %params = nextToken(%params,channel," "); + + // Just a message + IRCClient::newMessage($IRCClient::currentChannel,%channel @ ": No topic is set."); +} + +//------------------------------------------------------------------------------ +function IRCClient::onTopic(%prefix,%params) +{ + %params = nextToken(%params,ch," :"); + %c = IRCClient::findChannel(%ch); + if (!%c) + { + %params = nextToken(%params,ch," :"); + %c = IRCCLient::findChannel(%ch); + } + + if (!%c) + return; + %c.topic = %params; + if (%c == $IRCClient::currentChannel) + IRCClient::notify(IDIRC_TOPIC); +} + +//------------------------------------------------------------------------------ +function IRCClient::onKick(%prefix,%params) +{ + // EXAMPLE: BarbieGrl!Forgot@tsbrk3-204.gate.net KICK #HackPhreak RiseR :0,1 Shitlisted  + nextToken(%prefix,host," !"); + %params = nextToken(%params,ch," "); + %params = nextToken(%params,nick," :"); + + %h = IRCClient::findPerson(%host); + if (%h) + %host = IRCClient::taggedNick(%h); + %c = IRCClient::findChannel(%ch); + %p = IRCClient::findPerson(%nick); + + if (%p && %c) + if (%c.removeMember(%p)) + { + // was it me? + if (%p == $IRCClient::people.getObject(0)) + { + // Delete the channel + for (%i = 0; %i < $IRCClient::channels.getCount(); %i++) + if ($IRCClient::channels.getObject(%i) == %c) + { + $IRCClient::channels.remove(%c); + %c.delete(); + $IRCClient::deletedChannel = %c; + if ($IRCClient::currentChannel == %c) + $IRCClient::nextChannel = $IRCClient::channels.getObject(0); + + break; + } + + IRCClient::statusMessage("Host " @ %host @ " kicks " @ IRCClient::taggedNick(%p) @ " out of the chat room, saying \"" @ %params @ "\""); + IRCClient::notify(IDIRC_KICK); + } + else + { + IRCClient::newMessage($IRCClient::currentChannel,"Host " @ %host @ " kicks " @ IRCClient::taggedNick(%p) @ " out of the chat room, saying \"" @ %params @ "\""); + IRCClient::notify(IDIRC_PART); + } + + %p.ref--; + if (%p.ref == 0) + { + $IRCClient::people.remove(%p); + %p.delete(); + } + } +} + +//------------------------------------------------------------------------------ +function IRCClient::onModeReply(%prefix,%params) +{ + // Strip the person name + %params = nextToken(%params,person," "); + + // Send the rest on to the usual handler + IRCClient::onMode(%prefix,%params); +} + +//------------------------------------------------------------------------------ +function IRCClient::onMode(%prefix,%params) +{ + // EXAMPLE: :RickO!ricko@rick-266.dynamix.com MODE #starsiege +v homer128 + // EXAMPLE: PACKET: :RickO!ricko@rick-266.dynamix.com MODE #starsiege +m + // EXAMPLE: PACKET: :RickO!ricko@rick-266.dynamix.com MODE #starsiege -m + // EXAMPLE: PACKET: :RickO!ricko@rick-266.dynamix.com MODE #starsiege +lo 50 nick + // EXAMPLE: PACKET: :RickO!ricko@rick-266.dynamix.com MODE #starsiege +l 500 + // EXAMPLE: PACKET: :RickO!ricko@rick-266.dynamix.com MODE #starsiege -l + // EXAMPLE: PACKET: :RickO!ricko@rick-266.dynamix.com MODE #starsiege +s + // EXAMPLE: PACKET: :RickO!ricko@rick-266.dynamix.com MODE #starsiege -s + // EXAMPLE: PACKET: :RickO!ricko@rick-266.dynamix.com MODE #starsiege +p + // EXAMPLE: PACKET: :RickO!ricko@rick-266.dynamix.com MODE #starsiege -p + + IRCClient::newMessage("",%params); + %params = nextToken(%params,ch," "); + %params = nextToken(%params,mode," "); + + %enable = (getSubStr(%mode,0,1) $= "+"); + %c = IRCClient::findChannel(%ch); + if (!%c) return; + + for (%i = 1; %i < strlen(%mode); %i++) + switch$(getSubStr(%mode,%i,1)) + { + // PERSON Mode command + case "o": // Operator + %params = nextToken(%params,arg," "); + %i = (strlen(%arg) ? %c.findMember(IRCClient::findPerson(%arg)) : -1); + if (%i == -1) + break; + %c.setFlags(%i,$PERSON_OPERATOR,%enable); + %c.sort(); + if (%c == $IRCClient::currentChannel) + IRCClient::notify(IDIRC_SORT); + + // only display the message if my privilages are modified. + if (strcmp(%arg,$IRCClient::people.getObject(0).getName())) + break; + + nextToken(%prefix,arg,"!"); + if (%c.getFlags(%i) & $PERSON_OPERATOR) + IRCClient::newMessage(%c,%arg @ " made you an operator."); + else + if (%c.getFlags(%i) & $PERSON_SPEAKER) + IRCClient::newMessage(%c,%arg @ " made you a speaker."); + else + IRCClient::newMessage(%c,%arg @ " made you an spectator."); + + case "v": // Speaker (voice) + %params = nextToken(%params,arg," "); + %i = (strlen(%arg) ? %c.findMember(IRCClient::findPerson(%arg)) : -1); + if (%i == -1) + break; + %c.setFlags(%i,$PERSON_SPEAKER,%enable); + %c.sort(); + if (%c == $IRCClient::currentChannel) + IRCClient::notify(IDIRC_SORT); + + // only display the message if my privilages are modified. + if (strcmp(%arg,$IRCClient::people.getObject(0).getName())) + break; + + nextToken(%prefix,arg,"!"); + if (%c.getFlags(%i) & $PERSON_OPERATOR) + IRCClient::newMessage(%c,%arg @ " made you an operator."); + else + if (%c.getFlags(%i) & $PERSON_SPEAKER) + IRCClient::newMessage(%c,%arg @ " made you a speaker."); + else + IRCClient::newMessage(%c,%arg @ " made you a spectator."); + + // CHANNEL Mode command + case "b": // Ban + %params = nextToken(%params,arg," "); + + case "i": // Channel is Invite only + if (%enable) + %c.flags = %c.flags | $CHANNEL_INVITE; + else + %c.flags = %c.flags & ~$CHANNEL_INVITE; + IRCClient::notify(IDIRC_CHANNEL_FLAGS); + + case "l": // Channel has limited members + %params = nextToken(%params,arg," "); + %c.personLimit = (%enable ? %arg : 0); + if (%enable) + %c.flags = %c.flags | $CHANNEL_LIMITED; + else + %c.flags = %c.flags & ~$CHANNEL_LIMITED; + IRCClient::notify(IDIRC_CHANNEL_FLAGS); + + case "m": // Channel is moderated + if (%enable) + %c.flags = %c.flags | $CHANNEL_MODERATED; + else + %c.flags = %c.flags & ~$CHANNEL_MODERATED; + IRCClient::notify(IDIRC_CHANNEL_FLAGS); + + case "n": // External messages are ignored + if (%enable) + %c.flags = %c.flags | $CHANNEL_IGNORE_EXTERN; + else + %c.flags = %c.flags & ~$CHANNEL_IGNORE_EXTERN; + IRCClient::notify(IDIRC_CHANNEL_FLAGS); + + case "p": // Channel is Private + if (%enable) + %c.flags = %c.flags | $CHANNEL_PRIVATE; + else + %c.flags = %c.flags & ~$CHANNEL_PRIVATE; + IRCClient::notify(IDIRC_CHANNEL_FLAGS); + + case "s": // Channel is Secret + if (%enable) + %c.flags = %c.flags | $CHANNEL_SECRET; + else + %c.flags = %c.flags & ~$CHANNEL_SECRET; + IRCClient::notify(IDIRC_CHANNEL_FLAGS); + + case "t": // Channel topic limited to Operators + if (%enable) + %c.flags = %c.flags | $CHANNEL_TOPIC_LIMITED; + else + %c.flags = %c.flags & ~$CHANNEL_TOPIC_LIMITED; + IRCClient::notify(IDIRC_CHANNEL_FLAGS); + + case "k": // Channel has secret key + %params = nextToken(%params,arg," "); + %c.key = (%enable ? %arg : ""); + if (%enable) + %c.flags = %c.flags | $CHANNEL_HAS_KEY; + else + %c.flags = %c.flags & ~$CHANNEL_HAS_KEY; + IRCClient::notify(IDIRC_CHANNEL_FLAGS); + } +} + +//------------------------------------------------------------------------------ +function IRCClient::onWhoisReply(%prefix,%params) +{ + // EXAMPLE :rick-266.dynamix.com 311 homer128 RickO ricko rick-266.dynamix.com 198.74.38.222 :Rick + // EXAMPLE :rick-266.dynamix.com 319 homer128 RickO :@#starsiege + // EXAMPLE :rick-266.dynamix.com 312 homer128 RickO rick-266.dynamix.com :WIRCSRV Windows IRC Server + // $params = nextToken($params,ch," "); + // IRCClient::newMessage("",%params); +} + +//------------------------------------------------------------------------------ +function IRCClient::onWhoisUserReply(%prefix,%params) +{ + %params = nextToken(%params,chunk," "); + %tmp = %params; + %params = nextToken(%params,nick," "); + %params = nextToken(%params,user," "); + %params = nextToken(%params,at," "); + %real = nextToken(%params,chunk,":"); + + %p = IRCClient::findPerson(%nick); + if (!%p) return; + + if (getSubStr(%user,0,1) $= "~") + %user = getSubStr(%user,1,strlen(%user)-1); + + // update person in question + if (strcmp(%p.identity,%user @ "@" @ %at)) + { + IRCClient::setIdentity(%p,%user @ "@" @ %at); + IRCClient::correctNick(%p); + } + %p.real = %real; + + // Send it to the status channel + IRCClient::newMessage("","WHOIS " @ IRCClient::taggedNick(%p) @ ": " @ %user @ "@" @ %at @ " (" @ %real @ ")."); + IRCClient::connected(); +} + +//------------------------------------------------------------------------------ +function IRCClient::onWhoisIdle(%prefix,%params) +{ + // EXAMPLE :rick-266.dynamix.com 317 homer128 RickO 5350 907453369 :seconds idle + // the date is encoded in '907453369' but I have not figured out how to decode it :( + %params = nextToken(%params,nick," "); // strip out caller's name + %params = nextToken(%params,nick," "); + %params = nextToken(%params,seconds," "); + nextToken(%params,date," "); + + %p = IRCClient::findPerson(%nick); + + %iMinutes = %seconds/60; + %iSeconds = %seconds%60; + if (%iMinutes) + IRCClient::newMessage("",IRCClient::taggedNick(%p) @ " has been idle for " @ %iMinutes @ " minute(s) and " @ %iSeconds @ " second(s)."); + else + IRCCLient::newMessage("",IRCClient::taggedNick(%p) @ " has been idle for " @ %iSeconds @ "second(s)."); +} + +//------------------------------------------------------------------------------ +function IRCClient::censor(%str) +{ + if (!strlen(%str)) + return false; + if (!$IRCClient::numCensorWords) + if ($IRCClient::censorChannel) + { + %buffer = %str; + %p = strlwr(%buffer); + while (strlen(%p)) + { + %p = nextToken(%p,word," ,"); + $IRCClient::censorWords[$IRCClient::numCensorWords] = %word; + $IRCClient::numCensorWords++; + } + } + + %buffer = %str; + strlwr(%buffer); + + for (%i = 0; %i < $IRCClient::numCensorWords; %i++) + if (strstr(%buffer,$IRCClient::censorWords[%i])) + return true; + + return false; +} + +//------------------------------------------------------------------------------ +function IRCClient::onList(%prefix,%params) +{ + //EXAMPLE: :StLouis.MO.US.UnderNet.org 322 homer128 #bmx 9 :BMX Rules! + + %params = nextToken(%params,nick," "); + %params = nextToken(%params,ch," "); + %topic = nextToken(%params,users," :"); + + %l = strlen(%ch); + if ((%l > 7 && strcmp(getSubStr(%ch,%l-7,7),"_Public") == 0) || + (%l > 8 && strcmp(getSubStr(%ch,%l-8,8),"_Private") == 0)) + return; + if (IRCClient::censor(%topic)) + return; + + if ($IRCClient::silentList) + { + $IRCClient::channelNames[$IRCClient::numChannels] = %ch; + $IRCClient::channelTopics[$IRCClient::numChannels] = %topic; + $IRCClient::numChannels++; + } + else + IRCClient::newMessage($IRCClient::currentChannel,%users @ " " @ %ch @ " -- " @ %topic); +} + +//------------------------------------------------------------------------------ +function IRCClient::onBanList(%prefix,%params) +{ + %params = nextToken(%params,banned," "); + %params = nextToken(%params,banned," "); + %params = nextToken(%params,banned," "); + nextToken(%banned,banned,"!*@*"); + + if ($IRCClient::silentBanList) + { + // temporarily create person + $IRCClient::banList[$IRCClient::numBanned] = IRCClient::findPerson2(%banned,true); + $IRCClient::removeBan[$IRCClient::banList[$IRCClient::numBanned]] = false; + $IRCClient::numBanned++; + } +} + +//------------------------------------------------------------------------------ +function IRCClient::onListEnd(%prefix,%params) +{ + if ($IRCClient::silentList) + { + $IRCClient::silentList = false; + IRCClient::notify(IDIRC_CHANNEL_LIST); + IRCClient::connected(); + } +} + +//------------------------------------------------------------------------------ +function IRCClient::onBanListEnd(%prefix,%params) +{ + if ($IRCClient::silentBanList) + { + $IRCClient::silentBanList = false; + IRCClient::notify(IDIRC_BAN_LIST); + IRCClient::connected(); + } +} + +//------------------------------------------------------------------------------ +function IRCClient::onBadNick(%prefix,%params) +{ + IRCClient::newMessage("","NOTICE: Nickname (" @ $IRCClient::people.getObject(0).getName() @ ") is already in use."); + IRCClient::notify(IDIRC_ERR_NICK_IN_USE); +} + +//------------------------------------------------------------------------------ +function IRCClient::onNoLogin(%prefix,%params) +{ + %msg = nextToken(%params,cmd," :"); + IRCClient::connected(); + IRCClient::newMessage("","Could not log in:" SPC %msg); +} + +//------------------------------------------------------------------------------ +function IRCClient::onAway(%prefix,%params) +{ + %msg = nextToken(%params,nick," :"); + %p = IRCClient::findPerson(%nick); + if (!%p) + return; + %c = IRCClient::findChannel(%nick); + if (!%c) + return; + + if (strlen(%msg)) + { + %p.flags = %p.flags | $PERSON_AWAY; + if (!(%p.flags & $PERSON_IGNORE)) + IRCClient::newMessage($IRCClient::currentChannel,IRCClient::taggedNick(%p) @ " is away: " @ %msg); + } + else + { + %p.flags = %p.flags & ~$PERSON_AWAY; + if (!(%p.flags & $PERSON_IGNORE)) + IRCClient::newMessage($IRCClient::currentChannel,IRCClient::taggedNick(%p) @ " has returned."); + } + if ($IRCClient::currentChannel.findMember(%p) >= 0) + IRCClient::notify(IDIRC_SORT); +} + +//------------------------------------------------------------------------------ +function IRCClient::onAction(%prefix,%params) +{ + %msg = nextToken(%params,ch," :"); + %c = IRCClient::findChannel(%ch,true); + + IRCClient::newMessage(%c,%prefix @ " " @ %msg); +} + +//------------------------------------------------------------------------------ +function IRCClient::onAwayReply(%prefix,%params) +{ + //EXAMPLE :rick-266.dynamix.com 301 homer128 RickO :Gone fishing. + %params = nextToken(%params,me," "); + %msg = nextToken(%params,nick," :"); + %p = IRCClient::findPerson(%nick); + + if (%p) + { + %p.flags = %p.flags | $PERSON_AWAY; + IRCClient::newMessage($IRCClient::currentChannel,IRCClient::taggedNick(%p) SPC "is away:" SPC %msg); + IRCClient::notify(IDIRC_SORT); + } +} + +//------------------------------------------------------------------------------ +function IRCClient::onUnAwayReply(%prefix,%params) +{ + if ($IRCClient::awaytimeout) + cancel($IRCClient::awaytimeout); + $IRCClient::awaytimeout = schedule($AWAY_TIMEOUT,0,"ChatAway_Timeout"); + IRCClient::newMessage("","You are no longer marked as being away."); +} + +//------------------------------------------------------------------------------ +function IRCClient::onNowAwayReply(%prefix,%params) +{ + IRCClient::newMessage("","You have been marked as being away."); +} + +//------------------------------------------------------------------------------ +function IRCClient::onNotice(%prefix,%params) +{ + //EXAMPLE NOTICE AUTH :*** Found your hostname + + %sender = IRCClient::findPerson2(%prefix,true); + + if (!%sender || !(%sender.flags & $PERSON_IGNORE)) + { + %msg = strchr(%params,"\x01"); + if (!strlen(%msg)) + { + // Skip past the target name + %params = nextToken(%params,params,":"); + + IRCClient::newMessage("","NOTICE FROM " @ IRCClient::taggedNick(%sender) @ ": " @ %params); + } + else + { + // otherwise it's a command imbeded inside NOTICE (oh great!) + %msg = nextToken(%msg,command," \x01"); + IRCClient::dispatch(%prefix,%command,%msg); + } + } +} + +//------------------------------------------------------------------------------ +function IRCClient::onChannelFull(%prefix,%params) +{ + %channel = nextToken(%params,channel," "); + nextToken(%channel,channel," "); + + IRCClient::connected(); + IRCClient::statusMessage("Cannot join " @ %channel @ ": room is full."); + IRCClient::notify(IDIRC_CHANNEL_FULL); +} + +//------------------------------------------------------------------------------ +function IRCClient::onChannelInviteOnly(%prefix,%params) +{ + %channel = nextToken(%params,channel," "); + nextToken(%channel,channel," "); + + IRCClient::connected(); + IRCClient::statusMessage("Cannot join " @ %channel @ ": room is invite only."); + IRCClient::notify(IDIRC_INVITE_ONLY); +} + +//------------------------------------------------------------------------------ +function IRCClient::onInvite(%prefix,%params) +{ + // Find or create the person (should never be NULL) + %p = IRCClient::findPerson2(%prefix,true); + if (%p) + { + %params = nextToken(%params,channel,":"); + %channel = %params; + + // Only bother the user if they aren't ignoring this person + if (!(%person.flags & $PERSON_IGNORE)) + { + // Set vars and notify the responder + $IRCClient::invitechannel = %channel; + $IRCClient::inviteperson = IRCClient::displayNick(%p); + IRCClient::notify(IDIRC_INVITED); + } + } +} + +//------------------------------------------------------------------------------ +function IRCClient::onInviteReply(%prefix,%params) +{ + %params = nextToken(%params,me," "); + %params = nextToken(%params,person," "); + %params = nextToken(%params,channel," "); + %p = IRCClient::findPerson(%person); + + IRCClient::newMessage($IRCClient::currentChannel,"You have invited" SPC IRCClient::taggedNick(%p) SPC "to channel" SPC IRCClient::displayChannel(%channel) @ "."); +} + +//------------------------------------------------------------------------------ +function IRCClient::onChannelBanned(%prefix,%params) +{ + %channel = nextToken(%params,channel," "); + nextToken(%channel,channel," "); + + IRCClient::connected(); + IRCClient::statusMessage("Cannot join " @ %channel @ ": you have been banned."); + IRCClient::notify(IDIRC_BANNED_CH); +} + +//------------------------------------------------------------------------------ +function IRCClient::onServerBanned(%prefix,%params) +{ + $IRCClient::state = $IDIRC_DISCONNECTED; + + IRCClient::statusMessage("You have been banned from this server."); + // IRCClient::notify(IDIRC_BANNED_SERVER); +} + +//------------------------------------------------------------------------------ +function IRCClient::onInvalidNick(%prefix,%params) +{ + $IRCClient::state = IDIRC_DISCONNECTED; + %params = nextToken(%params,name,":"); + IRCClient::newMessage("",%params); +} + +//------------------------------------------------------------------------------ +function IRCClient::onBadChannelKey(%prefix,%params) +{ + %channel = nextToken(%params,channel," "); + nextToken(%channel,channel," "); + + IRCClient::connected(); + IRCClient::statusMessage("Cannot join " @ IRCClient::displayChannel(%channel) @ ": invalid password."); + $IRCClient::keyChannel = %channel; + IRCClient::notify(IDIRC_CHANNEL_HAS_KEY); +} + +//------------------------------------------------------------------------------ +function IRCClient::onVersion(%prefix,%params) +{ + %time = getSimTime(); + + if ((%time - $IRCClient::lastVersioned) >= $VERSION_FLOOD_TIMEOUT) + { + $IRCClient::lastVersioned = %time; + + nextToken(%prefix,nick,"!"); + %params = nextToken(%params,msg,": "); + nextToken(%params,msg,"\x01"); + %p = IRCClient::findPerson(%nick); + if (%p && strlen(%msg)) + IRCClient::newMessage($IRCClient::currentChannel,%nick @ "'s version: " @ %msg @ "."); + else + IRCClient::send("NOTICE " @ %prefix @ " :\x01VERSION " @ $VERSION_STRING @ "\x01"); + } +} + +//------------------------------------------------------------------------------ +function IRCClient::onChallenge(%prefix,%params) +{ + %params = nextToken(%params,challenge," "); + %me = $IRCClient::people.getObject(0); + IRCClient::newMessage("","Received WON authentication challenge"); + %response = WONLoginIRC(%challenge); + if (strcmp(%challenge,"ERROR")) + IRCClient::send("CHALRESP " @ %response); + else + IRCClient::notify(IDIRC_ERR_BADCHALLENGE); +} + +//------------------------------------------------------------------------------ +function IRCClient::onChalRespReply(%prefix,%params) +{ + %params = nextToken(%params,nick," "); + %params = nextToken(%params,ident," "); + %params = nextToken(%params,reply," "); + %me = $IRCClient::people.getObject(0); + %me.setName(%nick); + IRCClient::setIdentity(%me,%ident @ "@localhost"); + if (WONLoginIRC(%reply) $= "OK") + { + IRCClient::newMessage("","Successfully connected to " @ $IRCClient::server @ ":" @ $IRCClient::serverport); + $IRCClient::state = IDIRC_CONNECTED; + IRCClient::notify(IDIRC_CONNECTED); + + if ($IRCClient::awaytimeout) + cancel($IRCClient::awaytimeout); + $IRCClient::awaytimeout = schedule($AWAY_TIMEOUT,0,"ChatAway_Timeout"); + // auto join a room if requested + if (strlen($IRCClient::room)) + IRCClient::send("JOIN " @ $IRCClient::room); + } + else + { + IRCClient::disconnect(); + IRCClient::notify(IDIRC_ERR_BADCHALRESP_REPLY); + } +} + +//------------------------------------------------------------------------------ +function IRCClient::send2(%message,%to) +{ + if ((strcmp($IRCCLient::state,IDIRC_CONNECTING_IRC) && strcmp($IRCClient::state,IDIRC_CONNECTED)) || + !strlen(%message)) + return; + + if (getSubStr(%message,0,1) $= "/") + { + %buffer = getSubStr(%message,1,strlen(%message)-1); + %params = nextToken(%buffer,command," "); + + // dispatch the command to a handler -- if one exists + // we don't need to handle all outgoing commands just a few + switch$(%command) + { + case "PING": + IRCClient::ping(%params); + case "PART": + IRCClient::part(%params); + case "AWAY": + IRCClient::away(%params); + case "ME": + IRCClient::sendAction(%params); + case "ACTION": + IRCClient::sendAction(%params); + case "JOIN": + IRCClient::join(%params); + case "QUIT": + IRCClient::quit(%params); + + default: + // otherwise ship it to the server, RAW + IRCClient::send(getSubStr(%message,1,strlen(%message)-1)); + } + } + else + if (strlen(%to)) + { + IRCClient::send("PRIVMSG " @ %to @ " :" @ %message); + %c = IRCClient::findChannel(%to); + if (%c) + { + %me = $IRCClient::people.getObject(0); + IRCClient::newMessage(%c,IRCClient::taggedNick(%me) @ ": " @ %message); + } + } + else + if (strcmp($IRCClient::currentChannel.getName(),$CHANNEL_STATUS)) + { + IRCClient::send("PRIVMSG " @ $IRCClient::currentChannel.getName() @ " :" @ %message); + %me = $IRCClient::people.getObject(0); + IRCClient::newMessage($IRCClient::currentChannel,IRCClient::taggedNick(%me) @ ": " @ %message); + } +} + +//------------------------------------------------------------------------------ +function IRCClient::sendAction(%message) +{ + if (($IRCClient::state != $IDIRC_CONNECTING_IRC && $IRCClient::state != $IDIRC_CONNECTED) || + !strlen(%message)) + return; + + if (getSubStr(%message,0,1) $= "/") + IRCClient::send2(%message,""); + else + { + IRCClient::send("PRIVMSG " @ $IRCClient::currentChannel.getName() @ " :\x01ACTION " @ %message @ "\x01"); + %me = $IRCClient::people.getObject(0); + IRCClient::newMessage($IRCClient::currentChannel,%me.getName() @ " " @ %message); + } +} + +//------------------------------------------------------------------------------ +function IRCClient::join(%params) +{ + %tmp = nextToken(%params,channel," "); + nextToken(%tmp,key," "); + + // Only allow one channel / key combination at a time - no + // comma delimiting + nextToken(%channel,channel,","); + nextToken(%key,key,","); + + %c = IRCClient::findChannel(%channel); + if (%c) + { + $IRCClient::nextChannel = %c; + IRCClient::notify(IDIRC_ADDCHANNEL); + } + else + { + IRCClient::send("JOIN " @ %channel @ " " @ %key); + IRCClient::connecting(); + } +} + +//------------------------------------------------------------------------------ +function IRCClient::quit(%params) +{ + IRCClient::send("QUIT"); + + IRCClient::disconnect(); +} + +//------------------------------------------------------------------------------ +function IRCClient::nick(%nick) +{ + if (($IRCClient::state $= IDIRC_CONNECTED || $IRCClient::state $= IDIRC_CONNECTING_IRC) && + strlen(nick)) + { + if (stricmp(%nick, $IRCClient::people.getObject(0).getName())) + IRCClient::send("NICK " @ %nick); + } + else + { + $IRCClient::people.getObject(0).setName(%nick); + $IRCClient::NickName = %nick; + } +} + +//------------------------------------------------------------------------------ +function IRCClient::name(%name) +{ + $IRCClient::people.getObject(0).real = %name; +} + +//------------------------------------------------------------------------------ +function IRCClient::part(%params) +{ + nextToken(%params,ch," "); + if (%ch $= $CHANNEL_STATUS) + return; + + %c = IRCClient::findChannel(%ch); + if (%c) + for (%i = 0; %i < $IRCClient::channels.getCount(); %i++) + if ($IRCClient::channels.getObject(%i) == %c) + { + if (getSubStr(%ch,0,1) $= "#" || getSubStr(%ch,0,1) $= "&") + IRCClient::send("PART " @ %params); + else + { + $IRCClient::channels.remove(%c); + for (%i = 0; %i < %c.numMembers(); %i++) + { + %m = %c.getMemberId(%i); + %m.ref--; + if (%m.ref == 0) + { + $IRCClient::people.remove(%m); + %m.delete(); + } + else + if (%m != $IRCClient::people.getObject(0) && + (%m.flags & $PERSON_AWAY)) + %m.flags = %m.flags & ~$PERSON_AWAY; + } + %c.delete(); + $IRCClient::deletedChannel = %c; + if ($IRCClient::currentChannel == %c) + $IRCClient::nextChannel = $IRCClient::channels.getObject(0); + + IRCClient::notify(IDIRC_DELCHANNEL); + } + + break; + } +} + +//------------------------------------------------------------------------------ +function IRCClient::away(%params) +{ + %me = $IRCClient::people.getObject(0); + if (strlen(%params)) + { + if ($IRCClient::awaytimeout) + { + cancel($IRCClient::awaytimeout); + $IRCClient::awaytimeout = 0; + } + %me.flags = %me.flags | $PERSON_AWAY; + IRCClient::send("AWAY :" @ %params); + for (%i = 1; %i < $IRCClient::channels.getCount(); %i++) + { + %c = $IRCClient::channels.getObject(%i); + if (%c.private) + IRCClient::send("PRIVMSG " @ %c.getName() @ " :\x01AWAY :" @ %params @ "\x01"); + } + } + else + { + %me.flags = %me.flags & ~$PERSON_AWAY; + IRCClient::send("AWAY"); + for (%i = 1; %i < $IRCClient::channels.getCount(); %i++) + { + %c = $IRCClient::channels.getObject(%i); + if (%c.private) + IRCClient::send("PRIVMSG " @ %c.getName() @ " :\x01AWAY \x01"); + } + + } + IRCClient::notify(IDIRC_SORT); +} + +//------------------------------------------------------------------------------ +function IRCClient::ping(%params) +{ + %params = nextToken(%params,nick," "); + while (strlen(%nick)) + { + %p = IRCClient::findPerson(%nick); + if (%p) + { + %p.ping = GetSimTime(); + IRCClient::send("PRIVMSG " @ %nick @ " :\x01PING 0\x01"); + } + %params = nextToken(%params,nick," "); + } +} + +//------------------------------------------------------------------------------ +function IRCClient::setOperator(%p) +{ + IRCClient::send("MODE " @ $IRCClient::currentChannel.getName() @ " +o " @ %p.getName()); +} + +//------------------------------------------------------------------------------ +function IRCClient::setSpeaker(%nick) +{ + if (strcmp($IRCClient::currentChannel.getName(),$CHANNEL_STATUS)) + { + %i = $IRCClient::currentChannel.findMember(%nick); + + if (%i != -1) + { + if ($IRCClient::currentChannel.getFlags(%i) & $PERSON_OPERATOR) + IRCClient::send("MODE " @ $IRCClient::currentChannel.getName() @ " -o " @ %nick); + + IRCClient::send("MODE " @ $IRCClient::currentChannel.getName() @ " +v " @ %nick); + } + } +} + +//------------------------------------------------------------------------------ +function IRCClient::setSpectator(%nick) +{ + if (strcmp($IRCClient::currentChannel.getName(),$CHANNEL_STATUS)) + { + %i = $IRCClient::currentChannel.findMember(%nick); + + if (%i != -1) + { + if ($IRCClient::currentChannel.getFlags(%i) & $PERSON_OPERATOR) + IRCClient::send("MODE " @ $IRCClient::currentChannel.getName() @ " -o " @ %nick); + if ($IRCClient::currentChannel.getFlags(%i) & $PERSON_SPEAKER) + IRCClient::send("MODE " @ $IRCClient::currentChannel.getName() @ " -v " @ %nick); + } + } +} + +//------------------------------------------------------------------------------ +function IRCClient::kick(%p,%msg) +{ + IRCClient::send("KICK" SPC $IRCClient::currentChannel.getName() SPC %p.getName() @ " :" @ %msg); +} + +//------------------------------------------------------------------------------ +function IRCClient::ban(%p,%add) +{ + if (%add) + IRCClient::send("MODE " @ $IRCClient::currentChannel.getName() @ " +b " @ %p.getName()); + else + IRCClient::send("MODE " @ $IRCClient::currentChannel.getName() @ " -b " @ %p.getName()); +} + +//------------------------------------------------------------------------------ +function IRCClient::ignore(%p,%tf) +{ + if ($IRCClient::currentChannel.getName() $= $CHANNEL_STATUS) + { + echo("IRCClient::ignore: no current channel."); + + return; + } + + if (%p) + { + if (%tf) + { + %p.flags = %p.flags | $PERSON_IGNORE; + IRCClient::newMessage("","You are now ignoring " @ IRCClient::taggedNick(%p) @ "."); + } + else + { + %p.flags = %p.flags & ~$PERSON_IGNORE; + IRCClient::newMessage("","You are no longer ignoring " @ IRCClient::taggedNick(%p) @ "."); + } + IRCClient::notify(IDIRC_SORT); + } +} + +//------------------------------------------------------------------------------ +function IRCClient::invite(%p,%c) +{ + IRCClient::send("INVITE" SPC %p.getName() SPC %c.getName()); +} + +//------------------------------------------------------------------------------ +function IRCClient::who(%p) +{ + IRCClient::connecting(); + IRCClient::send("WHO" SPC %p.getName()); +} + +//------------------------------------------------------------------------------ +function IRCClient::whois(%p) +{ + IRCClient::connecting(); + IRCClient::send("WHOIS" SPC %p.getName()); +} + +//------------------------------------------------------------------------------ +function IRCClient::topic(%c,%t) +{ + IRCClient::send("TOPIC" SPC %c.getName() SPC ":" @ %t); +} + +//------------------------------------------------------------------------------ +function IRCClient::setInvite(%c,%i) +{ + if (%i) + IRCClient::send("MODE" SPC %c.getName() SPC "+i"); + else + IRCClient::send("MODE" SPC %c.getName() SPC "-i"); +} + +//------------------------------------------------------------------------------ +function IRCClient::setModerate(%c,%m) +{ + if (%m) + IRCClient::send("MODE" SPC %c.getName() SPC "+m"); + else + IRCClient::send("MODE" SPC %c.getName() SPC "-m"); +} + +//------------------------------------------------------------------------------ +function IRCClient::setLimit(%c,%l,%m) +{ + if (%l) + IRCClient::send("MODE" SPC %c.getName() SPC "+l" SPC %m); + else + IRCClient::send("MODE" SPC %c.getName() SPC "-l"); +} + +//------------------------------------------------------------------------------ +function IRCClient::setKey(%c,%k,%p) +{ + if (%k) + IRCClient::send("MODE" SPC %c.getName() SPC "+k" SPC %p); + else + IRCClient::send("MODE" SPC %c.getName() SPC "-k"); +} + +//------------------------------------------------------------------------------ +function IRCClient::requestChannelList() +{ + // clear the global channel List + $IRCClient::numChannels = 0; + + $IRCClient::silentList = true; + IRCClient::send("LIST"); + IRCClient::connecting(); +} + +//------------------------------------------------------------------------------ +function IRCClient::requestBanList(%c) +{ + // clear the global banned list + $IRCClient::banChannel = %c; + $IRCClient::numBanned = 0; + + $IRCClient::silentBanList = true; + IRCClient::send("MODE " @ %c.getName() @ " +b"); + IRCClient::connecting(); +} + +//------------------------------------------------------------------------------ +function IRCClient::onJoinServer(%mission,%server,%address,%mayprequire,%prequire) +{ + // server and address are required, and we have to be connected + if (strlen(%server) && strlen(%address) && $IRCClient::state == $IDIRC_CONNECTED) + { + %buf = "left to play " @ %mission @ " on server " @ %server @ " [" @ %address @ ":" @ %mayprequire @ %prequire @ "]"; + + IRCClient::send("PRIVMSG " @ $IRCClient::currentChannel.getName() @ ":\x01ACTION " @ %buf @ "\x01"); + IRCClient::newMessage($IRCClient::currentChannel, + IRCClient::taggedNick($IRCClient::people.getObject(0)) @ " " @ %buf); + } +} + +//------------------------------------------------------------------------------ +function IRCClient::onJoinGame(%address,%desc) +{ + %msg = "launched into " @ %desc @ "."; + IRCClient::away(%msg); + for (%i = 1; %i < $IRCClient::channels.getCount(); %i++) + { + %c = $IRCClient::channels.getObject(%i); + if (!%c.private) + IRCClient::send2(%msg,%c.getName()); + } +} + +IRCClient::init(); +IRCClient::connect(); \ No newline at end of file diff --git a/base/scripts/ChooseFilterDlg.cs b/base/scripts/ChooseFilterDlg.cs new file mode 100644 index 0000000..f89f7be --- /dev/null +++ b/base/scripts/ChooseFilterDlg.cs @@ -0,0 +1,291 @@ +//------------------------------------------------------------------------------ +// +// ChooseFilterDlg.cs +// +//------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ +function ChooseFilterDlg::onWake( %this ) +{ + CF_FilterList.clear(); + CF_FilterList.addRow( 0, "All servers" ); + CF_FilterList.addRow( 1, "Servers with buddies" ); + for ( %i = 0; $pref::ServerBrowser::Filter[%i] !$= ""; %i++ ) + CF_FilterList.addRow( %i + 2, $pref::ServerBrowser::Filter[%i] ); + + if ( $pref::ServerBrowser::activeFilter >= %i + 2 ) + $pref::ServerBrowser::activeFilter = 0; + + CF_FilterList.setSelectedById( $pref::ServerBrowser::activeFilter ); + + CF_GoBtn.makeFirstResponder( 1 ); +} + +//------------------------------------------------------------------------------ +function ChooseFilterDlg::onSleep( %this ) +{ + // export out all the filters... + %count = CF_FilterList.rowCount(); + for ( %row = 2; %row < %count; %row++ ) + $pref::ServerBrowser::Filter[%row - 2] = CF_FilterList.getRowText( %row ); +} + +//------------------------------------------------------------------------------ +function ChooseFilterDlg::newFilter( %this ) +{ + // get an updated list of game types: + queryMasterGameTypes(); + %this.editFilterIndex = CF_FilterList.rowCount(); + + FilterEditName.setValue( "New Filter" ); + FilterEditMinPlayers.setValue( 0 ); + FilterEditMaxPlayers.setValue( 255 ); + FilterEditGameType.setText( "Any" ); + FilterEditMissionType.setText( "Any" ); + for ( %i = 0; isObject( "FilterEditLocMask" @ %i ); %i++ ) + ( "FilterEditLocMask" @ %i ).setValue( true ); + FilterEditUsePingTgl.setValue( false ); + FilterEditMaxPing.setValue( 50 ); + FilterEditMaxPing.setVisible( false ); + + Canvas.pushDialog( FilterEditDlg ); +} + +//------------------------------------------------------------------------------ +function ChooseFilterDlg::editFilter( %this ) +{ + %rowId = CF_FilterList.getSelectedId(); + if ( %rowId < 2 ) // can't edit default filters + return; + + // get an updated list of game types: + queryMasterGameTypes(); + %rowText = CF_FilterList.getRowTextById( %rowId ); + %filterName = getField( %rowText, 0 ); + %gameType = getField( %rowText, 1 ); + %misType = getField( %rowText, 2 ); + %minPlayers = getField( %rowText, 3 ); + %maxPlayers = getField( %rowText, 4 ); + %regionCode = getField( %rowText, 5 ); + %maxPing = getField( %rowText, 6 ); + + FilterEditName.setValue( %filterName ); + FilterEditMinPlayers.setValue( %minPlayers ); + FilterEditMaxPlayers.setValue( %maxPlayers ); + FilterEditGameType.setText( %gameType ); + FilterEditMissionType.setText( %misType ); + %index = 0; + while ( isObject( "FilterEditLocMask" @ %index ) ) + { + ( "FilterEditLocMask" @ %index ).setValue( %regionCode & 1 ); + %index++; + %regionCode >>= 1; + } + + if ( %maxPing == 0 ) + { + FilterEditUsePingTgl.setValue( false ); + FilterEditMaxPing.setValue( 50 ); + FilterEditMaxPing.setVisible( false ); + } + else + { + FilterEditUsePingTgl.setValue( true ); + FilterEditMaxPing.setValue( %maxPing ); + FilterEditMaxPing.setVisible( true ); + } + + %this.editFilterIndex = %rowId; + Canvas.pushDialog( FilterEditDlg ); +} + +//------------------------------------------------------------------------------ +function ChooseFilterDlg::saveFilter( %this ) +{ + %filterName = FilterEditName.getValue(); + %gameType = FilterEditGameType.getText(); + %misType = FilterEditMissionType.getText(); + %minPlayers = FilterEditMinPlayers.getValue(); + %maxPlayers = FilterEditMaxPlayers.getValue(); + %regionCode = 0; + for ( %i = 0; isObject( "FilterEditLocMask" @ %i ); %i++ ) + { + if ( ( "FilterEditLocMask" @ %i ).getValue() ) + %regionCode |= ( 1 << %i ); + } + %maxPing = FilterEditUsePingTgl.getValue() ? FilterEditMaxPing.getValue() : 0; + %row = %filterName TAB %gameType TAB %misType + TAB %minPlayers TAB %maxPlayers TAB %regionCode TAB %maxPing; + + CF_FilterList.setRowById( %this.editFilterIndex, %row ); + CF_FilterList.setSelectedById( %this.editFilterIndex ); + %this.editFilterIndex = ""; + Canvas.popDialog( FilterEditDlg ); +} + +//------------------------------------------------------------------------------ +function ChooseFilterDlg::deleteFilter( %this ) +{ + %rowId = CF_FilterList.getSelectedId(); + if ( %rowId < 2 ) // can't delete default filters + return; + + %row = CF_FilterList.getRowNumById( %rowId ); + %lastFilter = CF_FilterList.rowCount() - 3; + + while ( ( %nextRow = CF_FilterList.getRowTextById( %rowId + 1 ) ) !$= "" ) + { + CF_FilterList.setRowById( %rowId, %nextRow ); + %rowId++; + } + CF_FilterList.removeRowById( %rowId ); + + // Get rid of the last filter (now extra): + $pref::ServerBrowser::Filter[%lastFilter] = ""; + + // Select next (or failing that, previous) filter: + if ( CF_FilterList.getRowTextById( %row ) $= "" ) + %selId = CF_FilterList.getRowId( %row - 1 ); + else + %selId = CF_FilterList.getRowId( %row ); + + CF_FilterList.setSelectedById( %selId ); +} + +//------------------------------------------------------------------------------ +function ChooseFilterDlg::go( %this ) +{ + Canvas.popDialog( ChooseFilterDlg ); + GMJ_Browser.runQuery(); +} + +//------------------------------------------------------------------------------ +function CF_FilterList::onSelect( %this, %id, %text ) +{ + // Let the user know they can't edit or delete the default filters: + if ( %id < 2 ) + { + CF_EditFilterBtn.setActive( false ); + CF_DeleteFilterBtn.setActive( false ); + } + else + { + CF_EditFilterBtn.setActive( true ); + CF_DeleteFilterBtn.setActive( true ); + } + $pref::ServerBrowser::activeFilter = %id; +} + +//------------------------------------------------------------------------------ +function FilterEditDlg::setMinPlayers( %this ) +{ + %newMin = FilterEditMinPlayers.getValue(); + if ( %newMin < 0 ) + { + %newMin = 0; + FilterEditMinPlayers.setValue( %newMin ); + } + else if ( %newMin > 254 ) + { + %newMin = 254; + FilterEditMinPlayers.setValue( %newMin ); + } + + %newMax = FilterEditMaxPlayers.getValue(); + if ( %newMax <= %newMin ) + { + %newMax = %newMin + 1; + FilterEditMaxPlayers.setValue( %newMax ); + } +} + +//------------------------------------------------------------------------------ +function FilterEditDlg::setMaxPlayers( %this ) +{ + %newMax = FilterEditMaxPlayers.getValue(); + if ( %newMax < 1 ) + { + %newMax = 1; + FilterEditMaxPlayers.setValue( %newMax ); + } + if ( %newMax > 255 ) + { + %newMax = 255; + FilterEditMaxPlayers.setValue( %newMax ); + } + + %newMin = FilterEditMinPlayers.getValue(); + if ( %newMin >= %newMax ) + { + %newMin = %newMax - 1; + FilterEditMinPlayers.setValue( %newMin ); + } +} + +//------------------------------------------------------------------------------ +function FilterEditUsePingTgl::onAction( %this ) +{ + FilterEditMaxPing.setVisible( %this.getValue() ); +} + +//------------------------------------------------------------------------------ +function FilterEditDlg::setMaxPing( %this ) +{ + %newMax = FilterEditMaxPing.getValue(); + if ( %newMax < 10 ) + { + %newMax = 10; + FilterEditMaxPing.setValue( %newMax ); + } +} + +//------------------------------------------------------------------------------ +function clearGameTypes() +{ + %text = FilterEditGameType.getText(); + FilterEditGameType.clear(); + FilterEditGameType.add( "Any", 0 ); + FilterEditGameType.setText( %text ); +} + +//------------------------------------------------------------------------------ +function addGameType( %type ) +{ + FilterEditGameType.add( %type, 0 ); +} + +//------------------------------------------------------------------------------ +function clearMissionTypes() +{ + %text = FilterEditMissionType.getText(); + FilterEditMissionType.clear(); + FilterEditMissionType.add( "Any", 0 ); + FilterEditMissionType.setText( %text ); + + // Add all the mission types found on this machine: + for ( %i = 0; %i < $HostTypeCount; %i++ ) + FilterEditMissionType.add( $HostTypeName[%i], %i ); +} + +//------------------------------------------------------------------------------ +function addMissionType(%type) +{ + if ( %type !$= "" && FilterEditMissionType.findText( %type ) == -1 ) + FilterEditMissionType.add( %type, 0 ); +} + +//------------------------------------------------------------------------------ +// Make sure we still have at least one region selected: +function FilterEditDlg::checkRegionMasks( %this, %lastIndex ) +{ + %index = 0; + while ( isObject( "FilterEditLocMask" @ %index ) ) + { + if ( ( "FilterEditLocMask" @ %index ).getValue() ) + return; + %index++; + } + + // None are selected, so reselect the last control: + ( "FilterEditLocMask" @ %lastIndex ).setValue( true ); +} diff --git a/base/scripts/CnHGame.cs b/base/scripts/CnHGame.cs new file mode 100644 index 0000000..363c1b8 --- /dev/null +++ b/base/scripts/CnHGame.cs @@ -0,0 +1,455 @@ +// DisplayName = Capture and Hold + +//--- GAME RULES BEGIN --- +//Teams try to capture marked objectives +//Capturing player gets a point 12 seconds after a capture +//Hold objectives in order to score +//A team scores 2 points per second it holds an objective +//Turrets and inventory stations convert when their switch is taken +//--- GAME RULES END --- + +//exec the AI scripts +exec("scripts/aiCnH.cs"); + +package CnHGame { + +function FlipFlop::playerTouch(%data, %flipflop, %player) +{ + if(%flipflop.team != %player.client.team) + { + Parent::playerTouch(%data, %flipflop, %player); + Game.startTimerPlayerFFCap(%player.client, %flipflop); + } +} + +function Flipflop::objectiveInit(%data, %flipflop) +{ + %flipflop.teamBonusThread = ""; + %flipflop.playerBonusThread = ""; + Parent::objectiveInit(%data, %flipflop); +} + +}; + + +//--------- CnH SCORING INIT ------------------ +function CnHGame::initGameVars(%game) +{ + %game.SCORE_PER_SUICIDE = -1; + %game.SCORE_PER_TEAMKILL = -1; + %game.SCORE_PER_DEATH = -1; + + %game.SCORE_PER_KILL = 1; + %game.SCORE_PER_PLYR_FLIPFLOP_CAP = 1; + %game.SCORE_PER_TEAM_FLIPFLOP_CAP = 1; + %game.SCORE_PER_TEAM_FLIPFLOP_HOLD = 1; + + %game.SCORE_PER_TURRET_KILL = 1; + %game.SCORE_PER_FLIPFLOP_DEFEND = 1; + %game.SCORE_LIMIT_PER_TOWER = 1200; //default of 1500 points per tower required to win @ 1 pt per %game.TIME_REQ_TEAM_HOLD_BONUS milliseconds + // default of 1500 per switch if not defined in mission file specifically. 2 pts per sec per switch = 10 minute min & 20 minute max mission length + // not counting time spent waiting for first point(s). Should be 15-30ish minute missions depending on turnovers + + %game.TIME_REQ_PLYR_CAP_BONUS = 12 * 1000; //player must hold a switch 12 seconds to get a point for it. + %game.TIME_REQ_TEAM_CAP_BONUS = 12 * 1000; //time after touching it takes for team to get a point + %game.TIME_REQ_TEAM_HOLD_BONUS = 0.5 * 1000; //recurring time it takes team to earn a point when flipflop held + %game.RADIUS_FLIPFLOP_DEFENSE = 20; //meters +} + +function CnHGame::setUpTeams(%game) +{ + DefaultGame::setUpTeams(%game); + + // reset the visibility of team 0 (team is still defaulted as friendly) + setSensorGroupAlwaysVisMask(0, 0); +} + +//-- tracking --- +// .deaths .kills .suicides .teamKills .turretKills +// .flipFlopDefends .flipFlopsCapped + +function CnHGame::startMatch(%game) +{ + for(%i = 0; %i <= %game.numTeams; %i++) + $TeamScore[%i] = 0; + + DefaultGame::startMatch(%game); +} + +function CnHGame::checkScoreLimit(%game, %team) +{ + %scoreLimit = %game.getScoreLimit(); + if($TeamScore[%team] >= %scoreLimit) + %game.scoreLimitReached(); +} + +function CnHGame::getScoreLimit(%game) +{ + %scoreLimit = MissionGroup.CnH_scoreLimit; + if(%scoreLimit $= "") + %scoreLimit = %game.getNumFlipFlops() * %game.SCORE_LIMIT_PER_TOWER; + + return %scoreLimit; +} + +function CnHGame::scoreLimitReached(%game) +{ + logEcho("game over (scorelimit)"); + %game.gameOver(); + cycleMissions(); +} + +function CnHGame::timeLimitReached(%game) +{ + logEcho("game over (timelimit)"); + %game.gameOver(); + cycleMissions(); +} + +function CnHGame::gameOver(%game) +{ + //call the default + DefaultGame::gameOver(%game); + + // stop all bonus timers + %game.stopScoreTimers(); + + //send the winner message + %winner = ""; + if ($teamScore[1] > $teamScore[2]) + %winner = $teamName[1]; + else if ($teamScore[2] > $teamScore[1]) + %winner = $teamName[2]; + + if (%winner $= 'Storm') + messageAll('MsgGameOver', "Match has ended.~wvoice/announcer/ann.stowins.wav" ); + else if (%winner $= 'Inferno') + messageAll('MsgGameOver', "Match has ended.~wvoice/announcer/ann.infwins.wav" ); + else + messageAll('MsgGameOver', "Match has ended.~wvoice/announcer/ann.gameover.wav" ); + + messageAll('MsgClearObjHud', ""); + for(%i = 0; %i < ClientGroup.getCount(); %i ++) + { + %client = %group.getObject(%i); + %game.resetScore(%client); + } + for ( %team = 1; %team <= %game.numTeams; %team++ ) + $TeamScore[%team] = 0; +} + +function CnHGame::stopScoreTimers(%game) +{ + // find all switches and cancel any timers associated with them + %ffGroup = nameToId("MissionCleanup/FlipFlops"); + if(%ffGroup <= 0) + return; + + for(%i = 0; %i < %ffGroup.getCount(); %i++) + { + %curFF = %ffGroup.getObject(%i); + cancel(%curFF.pCapThread); + cancel(%curFF.tCapThread); + cancel(%curFF.tHoldThread); + } +} + +function CnHGame::clientMissionDropReady(%game, %client) +{ + messageClient(%client, 'MsgClientReady',"", %game.class); + %scoreLimit = %game.getScoreLimit(); + + for(%i = 1; %i <= %game.numTeams; %i++) + { + %teamHeld = %game.countFlipsHeld(%i); + messageClient(%client, 'MsgCnHAddTeam', "", %i, $TeamName[%i], $TeamScore[%i], %scoreLimit, %teamHeld); + } + + //%game.populateTeamRankArray(%client); + //messageClient(%client, 'MsgYourRankIs', "", -1); + + messageClient(%client, 'MsgMissionDropInfo', '\c0You are in mission %1 (%2).', $MissionDisplayName, $MissionTypeDisplayName, $ServerName ); + + DefaultGame::clientMissionDropReady(%game, %client); +} + +function CnHGame::assignClientTeam(%game, %client, %respawn) +{ + DefaultGame::assignClientTeam(%game, %client, %respawn); + // if player's team is not on top of objective hud, switch lines + messageClient(%client, 'MsgCheckTeamLines', "", %client.team); +} + +function CnHGame::getNumFlipFlops() +{ + %ffGroup = nameToID("MissionCleanup/FlipFlops"); + return %ffGroup.getCount(); +} + +function CnHGame::countFlipsHeld(%game, %team) +{ + %teamHeld = 0; + // count how many flipflops each team holds + %ffSet = nameToID("MissionCleanup/FlipFlops"); + if(%ffSet > 0) + { + %numFF = %ffSet.getCount(); + for(%j = 0; %j < %numFF; %j++) + { + %curFF = %ffSet.getObject(%j); + if(%curFF.team == %team) + %teamHeld++; + } + } + + return %teamHeld; +} + +function CnHGame::countFlips(%game) +{ + return true; +} + +function CnHGame::equip(%game, %player) +{ + for(%i =0; %i<$InventoryHudCount; %i++) + %player.client.setInventoryHudItem($InventoryHudData[%i, itemDataName], 0, 1); + + //%player.setArmor("Light"); + %player.setInventory(Blaster,1); + %player.setInventory(Chaingun, 1); + %player.setInventory(ChaingunAmmo, 100); + %player.setInventory(Disc,1); + %player.setInventory(DiscAmmo, 20); + %player.setInventory(TargetingLaser, 1); + %player.setInventory(Grenade,6); + %player.setInventory(Beacon, 3); + %player.setInventory(RepairKit,1); + %player.weaponCount = 3; + + %player.use("Blaster"); +} + +//--------------- Scoring functions ----------------- +//NOTE - if we revert to this method of scoring, the function DefaultGame::awardScoreSuicide() no longer increments %client.deaths +// function CnHGame::recalcScore(%game, %cl) +// { +// //%cl.offenseScore = ((%cl.kills * %game.SCORE_PER_KILL) * (%cl.kills * %game.SCORE_PER_KILL)) / ((%cl.kills * %game.SCORE_PER_KILL) + (%cl.deaths * %game.SCORE_PER_DEATH)); //currently 1 pt per +// %cl.offenseScore = %cl.kills * %game.SCORE_PER_KILL; // 1 +// %cl.offenseScore += %cl.deaths * %game.SCORE_PER_DEATH; // -1 +// %cl.offenseScore += %cl.teamKills * %game.SCORE_PER_TEAMKILL; // -1 +// %cl.offenseScore += %cl.flipFlopsCapped * %game.SCORE_PER_PLYR_FLIPFLOP_CAP; +// +// +// %cl.defenseScore = %cl.turretKills * %game.SCORE_PER_TURRET_KILL; // 1 +// %cl.defenseScore += %cl.flipFlopDefends * %game.SCORE_PER_FLIPFLOP_DEFEND; +// +// %cl.score = %cl.offenseScore + %cl.defenseScore; +// //track switches held (not touched), switches defended, kills, deaths, suicides, tks +// +// %game.recalcTeamRanks(%cl); +// } + +function CnHGame::recalcScore(%game, %cl) +{ + %killValue = %cl.kills * %game.SCORE_PER_KILL; + %deathValue = %cl.deaths * %game.SCORE_PER_DEATH; + + if (%killValue - %deathValue == 0) + %killPoints = 0; + else + %killPoints = (%killValue * %killValue) / (%killValue - %deathValue); + + %cl.offenseScore = %killPoints; + %cl.offenseScore += %cl.suicides * %game.SCORE_PER_SUICIDE + //-1 + %cl.offenseScore += %cl.teamKills * %game.SCORE_PER_TEAMKILL; // -1 + %cl.offenseScore += %cl.flipFlopsCapped * %game.SCORE_PER_PLYR_FLIPFLOP_CAP; + + %cl.defenseScore = %cl.turretKills * %game.SCORE_PER_TURRET_KILL; // 1 + %cl.defenseScore += %cl.flipFlopDefends * %game.SCORE_PER_FLIPFLOP_DEFEND; + + %cl.score = mFloor(%cl.offenseScore + %cl.defenseScore); + //track switches held (not touched), switches defended, kills, deaths, suicides, tks + + %game.recalcTeamRanks(%cl); +} + +function CnHGame::updateKillScores(%game, %clVictim, %clKiller, %damageType, %implement) +{ + if(%game.testTurretKill(%implement)) //check for turretkill before awarded a non client points for a kill + { + %game.awardScoreTurretKill(%clVictim, %implement); + } + else if (%game.testKill(%clVictim, %clKiller)) //verify victim was an enemy + { + %game.awardScoreKill(%clKiller); + %game.awardScoreDeath(%clVictim); + + if (%game.testPlayerFFDefend(%clVictim, %clKiller)) + %game.awardScorePlayerFFDefend(%clVictim, %clKiller); + } + else + { + if (%game.testSuicide(%clVictim, %clKiller, %damageType)) //otherwise test for suicide + { + %game.awardScoreSuicide(%clVictim); + } + else + { + if (%game.testTeamKill(%clVictim, %clKiller)) //otherwise test for a teamkill + %game.awardScoreTeamKill(%clVictim, %clKiller); + } + } +} + +function CnHGame::testPlayerFFDefend(%game, %victimID, %killerID) +{ + InitContainerRadiusSearch(%victimID.plyrPointOfDeath, %game.RADIUS_FLIPFLOP_DEFENSE, $TypeMasks::ItemObjectType); + %objID = containerSearchNext(); + while(%objID != 0) + { + %objType = %objID.getDataBlock().getName(); + echo("tFD found " @ %objType @ " belonging to team " @ %objID.team); + if ((%objType $= "FlipFlop") && (%objID.team == %killerID.team)) + return true; //found a killer's team flipflop near the point of victim's death + else + %objID = containerSearchNext(); + } + return false; //didn't find a qualifying flipflop within required radius of victims point of death +} + +function CnHGame::awardScorePlayerFFDefend(%game, %cl, %this) +{ + %cl.flipFlopDefends++; + //if (%game.SCORE_PER_FLIPFLOP_DEFEND != 0) + //messageClient(%cl, $scoreFliDefMsg, 'You receive a %1 point bonus for defending the %2.', %game.SCORE_PER_FLIPFLOP_DEFEND, %game.cleanWord(%this.name)); + %game.recalcScore(%cl); +} + +function CnHGame::awardScorePlayerFFCap(%game, %cl, %this) +{ + %cl.flipFlopsCapped++; + %game.recalcScore(%cl); +} + +function CnHGame::awardScoreTeamFFCap(%game, %team, %this) +{ + cancel(%this.tCapThread); + $TeamScore[%team] +=%game.SCORE_PER_TEAM_FLIPFLOP_CAP; + %sLimit = %game.getScoreLimit(); + if (%game.SCORE_PER_TEAM_FLIPFLOP_CAP) + messageAll('MsgCnHTeamCap', "", -1, -1, -1, %team, $teamScore[%team], %sLimit); + if (%game.SCORE_PER_TEAM_FLIPFLOP_HOLD != 0) + %this.tHoldThread = %game.schedule(%game.TIME_REQ_TEAM_HOLD_BONUS, "awardScoreTeamFFHold", %team, %this, true); + + %game.checkScoreLimit(%team); +} + +function CnHGame::awardScoreTeamFFHold(%game, %team, %this, %msg) +{ + cancel(%this.tHoldThread); + $TeamScore[%team] +=%game.SCORE_PER_TEAM_FLIPFLOP_HOLD; + %sLimit = %game.getScoreLimit(); + if (%game.SCORE_PER_TEAM_FLIPFLOP_HOLD) + messageAll('MsgCnHTeamCap', "", $TeamName[%team], %game.SCORE_PER_TEAM_FLIPFLOP_HOLD, %game.cleanWord(%this.name), %team, $teamScore[%team], %sLimit); + + // if either team's score is divisible by 100, send a console log message + if(($TeamScore[%team] / 100) == (mFloor($TeamScore[%team] / 100))) + for(%i = 1; %i <= %game.numTeams; %i++) + logEcho("team "@%i@" score "@$TeamScore[%i]); + + %game.checkScoreLimit(%team); + + %this.tHoldThread = %game.schedule(%game.TIME_REQ_TEAM_HOLD_BONUS, "awardScoreTeamFFHold", %team, %this, false); +} + +function CnHGame::testValidRepair(%game, %obj) +{ + return ((%obj.lastDamagedByTeam != %obj.team) && (%obj.repairedBy.team == %obj.team)); +} + +function CnHGame::genOnRepaired(%game, %obj, %objName) +{ + + if (%game.testValidRepair(%obj)) + { + %repairman = %obj.repairedBy; + messageTeam(%repairman.team, 'msgGenRepaired', '\c0%1 repaired the %2 Generator!', %repairman.name, %objName); + } +} + +function CnHGame::stationOnRepaired(%game, %obj, %objName) +{ + if (%game.testValidRepair(%obj)) + { + %repairman = %obj.repairedBy; + messageTeam(%repairman.team, 'msgStationRepaired', '\c0%1 repaired the %2 Inventory Station!', %repairman.name, %objName); + } +} + +function CnHGame::sensorOnRepaired(%game, %obj, %objName) +{ + if (%game.testValidRepair(%obj)) + { + %repairman = %obj.repairedBy; + messageTeam(%repairman.team, 'msgSensorRepaired', '\c0%1 repaired the %2 Pulse Sensor!', %repairman.name, %objName); + } +} + +function CnHGame::turretOnRepaired(%game, %obj, %objName) +{ + if (%game.testValidRepair(%obj)) + { + %repairman = %obj.repairedBy; + messageTeam(%repairman.team, 'msgTurretRepaired', '\c0%1 repaired the %2 Turret!', %repairman.name, %objName); + } +} + +function CnHGame::vStationOnRepaired(%game, %obj, %objName) +{ + if (%game.testValidRepair(%obj)) + { + %repairman = %obj.repairedBy; + messageTeam(%repairman.team, 'msgTurretRepaired', '\c0%1 repaired the %2 Vehicle Station!', %repairman.name, %objName); + } +} + +function CnHGame::startTimerPlayerFFCap(%game, %cl, %this) +{ + cancel(%this.pCapThread); //stop the last owner from collecting a cap bonus + %this.pCapThread = %game.schedule(%game.TIME_REQ_PLYR_CAP_BONUS, "awardScorePlayerFFCap", %cl, %this); + cancel(%this.tCapThread); //stop the old owners from collecting any cap bonus + cancel(%this.tHoldThread); //stop the old owners from collecting any hold bonus + %this.tCapThread = %game.schedule(%game.TIME_REQ_TEAM_CAP_BONUS, "awardScoreTeamFFCap", %cl.team, %this); +} + +function CnHGame::startTimerTeamFFCap(%game, %team, %this, %time) +{ + %this.tCapThread = %game.schedule(%time, "awardScoreTeamFFCap", %team, %this); +} + +//------------------------------------------------------------------------ + +function CnHGame::resetScore(%game, %client) +{ + %client.offenseScore = 0; + %client.kills = 0; + %client.deaths = 0; + %client.teamKills = 0; + %client.flipFlopsCapped = 0; + + + %client.defenseScore = 0; + %client.turretKills = 0; + %client.flipFlopDefends = 0; + + %client.score = 0; + + for ( %team = 1; %team <= %game.numTeams; %team++ ) + if($TeamScore[%team] != 0) + $TeamScore[%team] = 0; +} + +function CnHGame::applyConcussion(%game, %player) +{ +} diff --git a/base/scripts/DMGame.cs b/base/scripts/DMGame.cs new file mode 100644 index 0000000..1c27461 --- /dev/null +++ b/base/scripts/DMGame.cs @@ -0,0 +1,358 @@ +// -------------------------------------------------------- +// Deathmatch mission type +// -------------------------------------------------------- + +// DisplayName = Deathmatch + +//--- GAME RULES BEGIN --- +//There aren't many rules... +//Kill +//Don't get killed +//Points are scored for each kill you make and subtracted each time you die +//--- GAME RULES END --- + +$InvBanList[DM, "TurretOutdoorDeployable"] = 1; +$InvBanList[DM, "TurretIndoorDeployable"] = 1; +$InvBanList[DM, "ElfBarrelPack"] = 1; +$InvBanList[DM, "MortarBarrelPack"] = 1; +$InvBanList[DM, "PlasmaBarrelPack"] = 1; +$InvBanList[DM, "AABarrelPack"] = 1; +$InvBanList[DM, "MissileBarrelPack"] = 1; +$InvBanList[DM, "Mine"] = 1; + +function DMGame::setUpTeams(%game) +{ + %group = nameToID("MissionGroup/Teams"); + if(%group == -1) + return; + + // create a team0 if it does not exist + %team = nameToID("MissionGroup/Teams/team0"); + if(%team == -1) + { + %team = new SimGroup("team0"); + %group.add(%team); + } + + // 'team0' is not counted as a team here + %game.numTeams = 0; + while(%team != -1) + { + // create drop set and add all spawnsphere objects into it + %dropSet = new SimSet("TeamDrops" @ %game.numTeams); + MissionCleanup.add(%dropSet); + + %spawns = nameToID("MissionGroup/Teams/team" @ %game.numTeams @ "/SpawnSpheres"); + if(%spawns != -1) + { + %count = %spawns.getCount(); + for(%i = 0; %i < %count; %i++) + %dropSet.add(%spawns.getObject(%i)); + } + + // set the 'team' field for all the objects in this team + %team.setTeam(0); + + clearVehicleCount(%team+1); + // get next group + %team = nameToID("MissionGroup/Teams/team" @ %game.numTeams + 1); + if (%team != -1) + %game.numTeams++; + } + + // set the number of sensor groups (including team0) that are processed + setSensorGroupCount(%game.numTeams + 1); + %game.numTeams = 1; + + // allow teams 1->31 to listen to each other (team 0 can only listen to self) + for(%i = 1; %i < 32; %i++) + setSensorGroupListenMask(%i, 0xfffffffe); +} + +function DMGame::initGameVars(%game) +{ + %game.SCORE_PER_KILL = 1; + %game.SCORE_PER_DEATH = -1; + %game.SCORE_PER_SUICIDE = -1; +} + +exec("scripts/aiDeathMatch.cs"); + +function DMGame::allowsProtectedStatics(%game) +{ + return true; +} + +function DMGame::equip(%game, %player) +{ + for(%i =0; %i<$InventoryHudCount; %i++) + %player.client.setInventoryHudItem($InventoryHudData[%i, itemDataName], 0, 1); + + //%player.setArmor("Light"); + %player.setInventory(RepairKit, 1); + %player.setInventory("Disc", 1); + %player.setInventory("DiscAmmo", 15); + %player.setInventory("TargetingLaser", 1); + %player.weaponCount = 1; + + // do we want to give players a disc launcher instead? GJL: Yes we do! + %player.use("Disc"); +} + +function DMGame::pickPlayerSpawn(%game, %client, %respawn) +{ + // all spawns come from team 1 + return %game.pickTeamSpawn(1); +} + +function DMGame::clientJoinTeam( %game, %client, %team, %respawn ) +{ + %game.assignClientTeam( %client ); + + // Spawn the player: + %game.spawnPlayer( %client, %respawn ); +} + +function DMGame::assignClientTeam(%game, %client) +{ + for(%i = 1; %i < 32; %i++) + $DMTeamArray[%i] = false; + + %maxSensorGroup = 0; + %count = ClientGroup.getCount(); + for(%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + if(%cl != %client) + { + $DMTeamArray[%cl.team] = true; + if (%cl.team > %maxSensorGroup) + %maxSensorGroup = %cl.team; + } + } + + //now loop through the team array, looking for an empty team + for(%i = 1; %i < 32; %i++) + { + if (! $DMTeamArray[%i]) + { + %client.team = %i; + if (%client.team > %maxSensorGroup) + %maxSensorGroup = %client.team; + break; + } + } + + // set player's skin pref here + setTargetSkin(%client.target, %client.skin); + + // Let everybody know you are no longer an observer: + messageAll( 'MsgClientJoinTeam', '\c1%1 has joined the fray.', %client.name, "", %client, 1 ); + updateCanListenState( %client ); + + //now set the max number of sensor groups... + setSensorGroupCount(%maxSensorGroup + 1); +} + +function DMGame::clientMissionDropReady(%game, %client) +{ + messageClient(%client, 'MsgClientReady',"", %game.class); + messageClient(%client, 'MsgYourScoreIs', "", 0); + messageClient(%client, 'MsgDMPlayerDies', "", 0); + messageClient(%client, 'MsgDMKill', "", 0); + %game.resetScore(%client); + + messageClient(%client, 'MsgMissionDropInfo', '\c0You are in mission %1 (%2).', $MissionDisplayName, $MissionTypeDisplayName, $ServerName ); + + DefaultGame::clientMissionDropReady(%game, %client); +} + +function DMGame::AIHasJoined(%game, %client) +{ + //let everyone know the player has joined the game + //messageAllExcept(%client, -1, 'MsgClientJoinTeam', '%1 has joined the fray.', %client.name, "", %client, 1 ); +} + +function DMGame::checkScoreLimit(%game, %client) +{ + //there's no score limit in DM +} + +function DMGame::createPlayer(%game, %client, %spawnLoc, %respawn) +{ + DefaultGame::createPlayer(%game, %client, %spawnLoc, %respawn); + %client.setSensorGroup(%client.team); +} + +function DMGame::resetScore(%game, %client) +{ + %client.deaths = 0; + %client.kills = 0; + %client.score = 0; + %client.efficiency = 0.0; + %client.suicides = 0; +} + +function DMGame::onClientKilled(%game, %clVictim, %clKiller, %damageType, %implement, %damageLoc) +{ + cancel(%clVictim.player.alertThread); + DefaultGame::onClientKilled(%game, %clVictim, %clKiller, %damageType, %implement, %damageLoc); +} + +function DMGame::updateKillScores(%game, %clVictim, %clKiller, %damageType, %implement) +{ + if (%game.testKill(%clVictim, %clKiller)) //verify victim was an enemy + { + %game.awardScoreKill(%clKiller); + messageClient(%clKiller, 'MsgDMKill', "", %clKiller.kills); + %game.awardScoreDeath(%clVictim); + } + else if (%game.testSuicide(%clVictim, %clKiller, %damageType)) //otherwise test for suicide + %game.awardScoreSuicide(%clVictim); + + messageClient(%clVictim, 'MsgDMPlayerDies', "", %clVictim.deaths + %clVictim.suicides); +} + +//NOTE - if we revert to this method of scoring, the function DefaultGame::awardScoreSuicide() no longer increments %client.deaths +//function DMGame::recalcScore(%game, %client) +//{ +// // MES - just in case :) +// if((%client.kills + %client.deaths) == 0) +// %client.efficiency = 0; +// else +// %client.efficiency = ((%client.kills) * (%client.kills)) / (%client.kills + %client.deaths); + + //TINMAN - I changed this since DM seems based on efficiency, and the previous score doesn't appear anywhere... + //%client.score = (%client.kills * %game.SCORE_PER_KILL) + (%client.deaths * %game.SCORE_PER_DEATH); +// %client.score = mFloatLength(%client.efficiency, 1); + +// messageClient(%client, 'MsgDMYourEfficIs', "", %client.score); +// %game.recalcTeamRanks(%client); +// %game.checkScoreLimit(%client); +//} + +function DMGame::recalcScore(%game, %client) +{ + %killValue = %client.kills * %game.SCORE_PER_KILL; + %deathValue = %client.deaths * %game.SCORE_PER_DEATH; + %suicideValue = %client.suicides * %game.SCORE_PER_SUICIDE; + + if (%killValue - %deathValue == 0) + %client.efficiency = %suicideValue; + else + %client.efficiency = ((%killValue * %killValue) / (%killValue - %deathValue)) + %suicideValue; + + %client.score = mFloatLength(%client.efficiency, 1); + messageClient(%client, 'MsgYourScoreIs', "", %client.score); + %game.recalcTeamRanks(%client); + %game.checkScoreLimit(%client); +} + +function DMGame::timeLimitReached(%game) +{ + logEcho("game over (timelimit)"); + %game.gameOver(); + cycleMissions(); +} + +function DMGame::scoreLimitReached(%game) +{ + logEcho("game over (scorelimit)"); + %game.gameOver(); + cycleMissions(); +} + +function DMGame::gameOver(%game) +{ + //call the default + DefaultGame::gameOver(%game); + + messageAll('MsgGameOver', "Match has ended.~wvoice/announcer/ann.gameover.wav" ); + + cancel(%game.timeThread); + messageAll('MsgClearObjHud', ""); + for(%i = 0; %i < ClientGroup.getCount(); %i ++) { + %client = %group.getObject(%i); + %game.resetScore(%client); + } +} + +function DMGame::enterMissionArea(%game, %playerData, %player) +{ + %player.client.outOfBounds = false; + messageClient(%player.client, 'EnterMissionArea', '\c1You are back in the mission area.'); + logEcho(%player.client.nameBase@" (pl "@%player@"/cl "@%player.client@") entered mission area"); + cancel(%player.alertThread); +} + +function DMGame::leaveMissionArea(%game, %playerData, %player) +{ + %player.client.outOfBounds = true; + messageClient(%player.client, 'LeaveMissionArea', '\c1You have left the mission area. Return or take damage.~wfx/misc/warning_beep.wav'); + logEcho(%player.client.nameBase@" (pl "@%player@"/cl "@%player.client@") left mission area"); + %player.alertThread = %game.schedule(1000, "DMAlertPlayer", 3, %player); +} + +function DMGame::DMAlertPlayer(%game, %count, %player) +{ + // MES - I commented below line out because it prints a blank line to chat window + //messageClient(%player.client, 'MsgDMLeftMisAreaWarn', '~wfx/misc/red_alert.wav'); + if(%count > 1) + %player.alertThread = %game.schedule(1000, "DMAlertPlayer", %count - 1, %player); + else + %player.alertThread = %game.schedule(1000, "MissionAreaDamage", %player); +} + +function DMGame::MissionAreaDamage(%game, %player) +{ + if(%player.getState() !$= "Dead") { + %player.setDamageFlash(0.1); + %prevHurt = %player.getDamageLevel(); + %player.setDamageLevel(%prevHurt + 0.05); + %player.alertThread = %game.schedule(1000, "MissionAreaDamage", %player); + } + else + %game.onClientKilled(%player.client, 0, $DamageType::OutOfBounds); +} + +function DMGame::updateScoreHud(%game, %client, %tag) +{ + // Clear the header: + messageClient( %client, 'SetScoreHudHeader', "", "" ); + + // Send the subheader: + messageClient(%client, 'SetScoreHudSubheader', "", '\tPLAYER\tRATING\tKILLS\tDEATHS'); + + for (%index = 0; %index < $TeamRank[0, count]; %index++) + { + //get the client info + %cl = $TeamRank[0, %index]; + + //get the score + %clScore = mFloatLength( %cl.efficiency, 1 ); + + %clKills = mFloatLength( %cl.kills, 0 ); + %clDeaths = mFloatLength( %cl.deaths + %cl.suicides, 0 ); + %clStyle = %cl == %client ? "" : ""; + + //if the client is not an observer, send the message + if (%client.team != 0) + { + messageClient( %client, 'SetLineHud', "", %tag, %index, '%5\t%1%2%3%4', + %cl.name, %clScore, %clKills, %clDeaths, %clStyle ); + } + //else for observers, create an anchor around the player name so they can be observed + else + { + messageClient( %client, 'SetLineHud', "", %tag, %index, '%5\t%1%2%3%4', + %cl.name, %clScore, %clKills, %clDeaths, %clStyle, %cl ); + } + } + + //clear the rest of Hud so we don't get old lines hanging around... + messageClient( %client, 'ClearHud', "", %tag, %index ); +} + +function DMGame::applyConcussion(%game, %player) +{ +} diff --git a/base/scripts/DebriefGui.cs b/base/scripts/DebriefGui.cs new file mode 100644 index 0000000..373edcc --- /dev/null +++ b/base/scripts/DebriefGui.cs @@ -0,0 +1,135 @@ +//------------------------------------------------------------------------------ +// +// DebriefGui.cs +// +//------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ +function DebriefGui::onWake( %this ) +{ + moveMap.pop(); + if ( isObject( passengerKeys ) ) + passengerKeys.pop(); + flyingCameraMove.pop(); + + if ( isObject( debriefMap ) ) + { + debriefMap.pop(); + debriefMap.delete(); + } + new ActionMap( debriefMap ); + %bind = moveMap.getBinding( toggleMessageHud ); + debriefMap.bind( getField( %bind, 0 ), getField( %bind, 1 ), toggleDebriefChat ); + debriefMap.copyBind( moveMap, activateChatMenuHud ); + debriefMap.bindCmd( keyboard, escape, "", "debriefContinue();" ); + debriefMap.push(); + + DB_ChatVector.attach( HudMessageVector ); + DB_ChatScroll.scrollToBottom(); + DB_LoadingProgress.setValue( 0 ); + LoadingProgress.setValue( 0 ); + DB_LoadingProgressTxt.setValue( "LOADING MISSION" ); + LoadingProgressTxt.setValue( "LOADING MISSION" ); +} + +//------------------------------------------------------------------------------ +function DebriefGui::onSleep( %this ) +{ + debriefMap.pop(); + debriefMap.delete(); +} + +//------------------------------------------------------------------------------ +function DebriefResultText::onResize( %this, %width, %height ) +{ + %fieldHeight = getWord( DB_ResultPane.getExtent(), 1 ); + %x = getWord( DB_ResultScroll.getPosition(), 0 ); + %w = getWord( DB_ResultScroll.getExtent(), 0 ); + %h = %fieldHeight - %height - 4; + DB_ResultScroll.resize( %x, %height + 2, %w, %h ); +} + +//------------------------------------------------------------------------------ +function toggleDebriefChat() +{ + Canvas.pushDialog( DB_ChatDlg ); +} + +//------------------------------------------------------------------------------ +function DB_ChatDlg::onWake( %this ) +{ + DB_ChatEntry.setValue( "" ); +} + +//------------------------------------------------------------------------------ +function DB_ChatEntry::onEscape( %this ) +{ + Canvas.popDialog( DB_ChatDlg ); +} + +//------------------------------------------------------------------------------ +function DB_ChatEntry::sendChat( %this ) +{ + %text = %this.getValue(); + if ( %text !$= "" ) + commandToServer( 'MessageSent', %text ); + + Canvas.popDialog( DB_ChatDlg ); +} + +//------------------------------------------------------------------------------ +function debriefDisconnect() +{ + MessageBoxYesNo( "DISCONNECT", "Are you sure you want to leave this game?", "Disconnect();" ); +} + +//------------------------------------------------------------------------------ +function debriefContinue() +{ + Canvas.setContent( LoadingGui ); + Canvas.repaint(); +} + +//------------------------------------------------------------------------------ +addMessageCallback( 'MsgGameOver', handleGameOverMessage ); +addMessageCallback( 'MsgClearDebrief', handleClearDebriefMessage ); +addMessageCallback( 'MsgDebriefResult', handleDebriefResultMessage ); +addMessageCallback( 'MsgDebriefAddLine', handleDebriefLineMessage ); + +//------------------------------------------------------------------------------ +function handleGameOverMessage( %msgType, %msgString ) +{ + weaponsHud.clearAll(); + inventoryHud.clearAll(); + + // Fill the Debriefer up with stuff... + Canvas.setContent( DebriefGui ); +} + +function handleClearDebriefMessage( %msgType, %msgString ) +{ + DebriefResultText.setText( "" ); + DebriefText.setText( "" ); +} + +//------------------------------------------------------------------------------ +function handleDebriefResultMessage( %msgType, %msgString, %string ) +{ + %text = DebriefResultText.getText(); + if ( %text $= "" ) + %newText = detag( %string ); + else + %newText = %text NL detag( %string ); + DebriefResultText.setText( %newText ); +} + +//------------------------------------------------------------------------------ +function handleDebriefLineMessage( %msgType, %msgString, %string ) +{ + %text = DebriefText.getText(); + if ( %text $= "" ) + %newText = detag( %string ); + else + %newText = %text NL detag( %string ); + DebriefText.setText( %newText ); +} diff --git a/base/scripts/DnDGame.cs b/base/scripts/DnDGame.cs new file mode 100644 index 0000000..1d70351 --- /dev/null +++ b/base/scripts/DnDGame.cs @@ -0,0 +1,270 @@ +// DisplayName = Defend and Destroy + +//--- GAME RULES BEGIN --- +//Whoever blows up the other team's crap first wins! +//W00T! +//--- GAME RULES END --- + +// Defend and Destroy type script for TRIBES 2 +// +// You should know how this works by now, boys and girls -- it's "classic" +// TRIBES-style D&D! Whoever blows up the other team's crap first wins! +// W00T! +// +// Objects will be identified as "Objectives" by a property called scoreValue +// being non-zero. +// +// Like Siege, this mission type doesn't have a scoreLimit because it doesn't need one. + + + +package DnDGame { + +function StaticShapeData::onDisabled(%data, %obj, %prevstate) +{ + Parent::onDisabled(%data, %obj, %prevState); + %team = %obj.team; + if(%obj.scoreValue && !%obj.objectiveCompleted) + { + %obj.objectiveCompleted = true; + $objDestroyed[%team]++; + %game.scoreObjective(%obj, %obj.lastDamagedBy); + %game.updateObjectives(); + %game.checkObjectives(); + //echo("Objective #" @ %obj @ "(" @ %obj.getClassName() @ ") was disabled by " @ %obj.lastDamagedBy); + } +} + +function StaticShapeData::objectiveInit(%data, %object) +{ + if(%object.scoreValue) { + %team = %object.team; + //error(%team @ " : Found objective #" @ %object @ " (" @ %object.getClassName() @ ") worth " @ %object.scoreValue @ " points"); + %object.objectiveCompleted = false; + $numObjectives[%team]++; + %objSet = nameToID("MissionCleanup/Objectives" @ %team); + if(%objSet <= 0) { + %objSet = new SimSet("Objectives" @ %team); + MissionCleanup.add(%objSet); + } + %objSet.add(%object); + } +} + +function FlipFlop::objectiveInit(%data, %flipflop) +{ + // add this flipflop to missioncleanup (for HUD reasons) + %team = %flipflop.team; + $numObjectives[%team]++; + %flipflopSet = nameToID("MissionCleanup/Objectives" @ %team); + if(%flipflopSet <= 0) { + %flipflopSet = new SimSet("Objectives" @ %team); + MissionCleanup.add(%flipflopSet); + } + %flipflopSet.add(%flipflop); + $flipflopStatus[%flipflop] = ""; + %flipFlop.objectiveCompleted = false; +} + +function FlipFlop::playerTouch(%data, %flipflop, %player) +{ + //echo("function DnDGame::playerTouchFlipFlop(Game "@Game@",%player "@%player@",%this "@%this@")"); + %client = %player.client; + %claimName = %client.name; + %flipName = %flipflop.Name; + %flipTeam = %flipflop.team; + + if(%flipTeam $= %player.team) + return; + + %flipflop.team = %player.team; + %flipflop.objectiveCompleted = !(%flipflop.objectiveCompleted); + $flipflopStatus[%flipflop] = $teamName[%client.team]; + messageAll('MsgDnDClaimFlipFlop', '%1 claimed %2 for %3.~wfx/misc/switch_taken.wav', %claimName, %flipName, $teamName[%client.team], %flipflop.number); + + // change the skin on the switch to claiming team's + setTargetSkin(%flipflop.getTarget(), $teamSkin[%player.team]); + + %client.touches++; + Game.computeScore(%client); + Game.computeTeamScore(%client.team); + + %flipflop.lastClaimedBy = %client; //Do I care? + Game.updateObjectives(); + Game.checkObjectives(); +} + +}; + + +function DnDGame::missionLoadDone(%game) +{ + //default version sets up teams - must be called first... + DefaultGame::missionLoadDone(%game); + + for(%i = 1; %i <= %game.numTeams; %i++) + $objDisabled[%i] = 0; +} + +function DnDGame::setUpTeams(%game) +{ + DefaultGame::setupTeams(%game); + + for(%i = 1; %i <= %game.numTeams; %i++) { + // $numObjectives[N] is the number of objectives that team N possesses + // (and must defend). $objDestroyed[N] is how many of team N's objectives + // have been destroyed. + $numObjectives[%i] = 0; + $objDestroyed[%i] = 0; + } +} + +function DnDGame::startMatch(%game) +{ + DefaultGame::startMatch(%game); + // jff: team change + //for(%i = 1; %i < %game.numTeams; %i++) + // error("Number of team #" @ %i @ " 's objectives: " @ $numObjectives[%i]); +} + +function DnDGame::scoreObjective(%game, %object, %client) +{ + //echo("scoreObjective: object " @ %object @ ", client " @ %client); + if(%object.team != %client.team) { + messageAll('MsgDnDObjDisabled', '%1 disabled an enemy objective worth %2 points!', %client.name, %object.scoreValue, 0, %object.number); + // if objective doesn't belong to the destroyer's team, positive points + %client.objScore += %object.scoreValue; + $objDisabled[%client.team]++; + } + else { + if(%client.sex $= "Male") + %tempGen = 'his'; + else + %tempGen = 'her'; + messageAll('MsgDnDObjDisabled', '%1 disabled %2 own team\'s objective worth %3 points!', %client.name, %tempGen, %object.scoreValue, %object.number); + // otherwise, score negative points + %client.objScore -= %object.scoreValue; + } + %game.computeScore(%client); + %game.computeTeamScore(%client.team); +} + +function DnDGame::checkObjectives(%game) +{ + %teamDone = 0; + // check all the objectives for both teams + for(%i = 1; %i <= %game.numTeams; %i++) { + %objSet = nameToID("MissionCleanup/Objectives" @ %i); + %numObjectives = %objSet.getCount(); + %numObjsCompleted = 0; + for(%j = 0; %j < %numObjectives; %j++) { + %curObj = %objSet.getObject(%j); + if(%curObj.objectiveCompleted) + %numObjsCompleted++; + } + // if all objectives have been destroyed, set flag + // otherwise, just update the objective screen + if(%numObjsCompleted == %numObjectives) + %teamDone++; + messageAll('MsgDnDTeamObjLeft', "", %i, (%numObjectives - %numObjsCompleted)); + } + // if at least one team is done, go to allObjectivesDestroyed + if(%teamDone) + %game.allObjectivesDestroyed(); +} + +function DnDGame::allObjectivesDestroyed(%game) +{ + messageAll('MsgDnDAllObjDestr', 'All objectives have been disabled!'); + %game.gameOver(); + cycleMissions(); +} + +function DnDGame::timeLimitReached(%game) +{ + //messageAll('MsgDnDTimeLimitReached', 'Time is up!'); + %game.gameOver(); + cycleMissions(); +} + +//function DnDGame::scoreLimitReached(%game) +//{ +// %game.gameOver(); +//} + +function DnDGame::gameOver(%game) +{ + //call the default + DefaultGame::gameOver(%game); + + //send the winner message + %winner = ""; + if ($teamScore[1] > $teamScore[2]) + %winner = $teamName[1]; + else if ($teamScore[2] > $teamScore[1]) + %winner = $teamName[2]; + + if (%winner $= 'Storm') + messageAll('MsgGameOver', "Match has ended.~wvoice/announcer/ann.stowins.wav" ); + else if (%winner $= 'Inferno') + messageAll('MsgGameOver', "Match has ended.~wvoice/announcer/ann.infwins.wav" ); + else + messageAll('MsgGameOver', "Match has ended.~wvoice/announcer/ann.gameover.wav" ); + + AIMissionEnd(); + messageAll('MsgClearObjHud', ""); + for(%i = 0; %i = %group.getCount(); %i ++) { + %client = %group.getObject(%i); + %game.resetScore(%client); + } + for ( %team = 1; %team <= %game.numTeams; %team++ ) + $TeamScore[%team] = 0; +} + +function DnDGame::computeScore(%game, %client) +{ + %client.score = %client.scoreKills - %client.scoreSelfKills - %client.teamKills + + %client.objScore; + %game.recalcTeamRanks(%client); +} + +function DnDGame::computeTeamScore(%game, %team) +{ + $teamScore[%team] = $objDisabled[%team]; +} + +function DnDGame::updateObjectives(%game) +{ + //echo("Updating objectives..."); +} + +function DnDGame::clientMissionDropReady(%game, %client) +{ + messageClient(%client, 'MsgClientReady', "", %game.class); + for(%i = 1; %i <= %game.numTeams; %i++) + messageClient(%client, 'MsgDnDAddTeam', "", %i, $teamName[%i], $teamScore[%i]); + %game.populateTeamRankArray(%client); + messageClient(%client, 'MsgYourRankIs', "", -1); + %numFlips = 0; + for(%i = 1; %i <= %game.numTeams; %i++) { + %numObj[%i] = 0; + %objSet = nameToId("MissionCleanup/Objectives" @ %i); + for(%j = 0; %j < %objSet.getCount(); %j++) { + %curObj = %objSet.getObject(%j); + } + messageAll('MsgDnDTeamObjLeft', "", %i, %numObj[%i]); + } + + messageClient(%client, 'MsgMissionDropInfo', '\c0You are in mission %1 (%2).', $MissionDisplayName, $MissionTypeDisplayName, $ServerName ); + + DefaultGame::clientMissionDropReady(%game, %client); +} + +function DnDGame::resetScore(%game, %client) +{ + %client.score = 0; + %client.scoreKills = 0; + %client.scoreSelfKills = 0; + %client.teamKills = 0; + %client.objScore = 0; +} \ No newline at end of file diff --git a/base/scripts/EditChatMenuGui.cs b/base/scripts/EditChatMenuGui.cs new file mode 100644 index 0000000..19ae96a --- /dev/null +++ b/base/scripts/EditChatMenuGui.cs @@ -0,0 +1,508 @@ +//------------------------------------------------------------------------------ +// +// EditChatMenuGui.cs +// +//------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ +function EditChatMenuGui::onWake( %this ) +{ + fillChatMenuTree(); +} + +//------------------------------------------------------------------------------ +function EditChatMenuGui::onSleep( %this ) +{ + chatMenuGuiTree.clear(); +} + +//------------------------------------------------------------------------------ +function fillChatMenuTree() +{ + %guiRoot = chatMenuGuiTree.getFirstRootItem(); + %newGuiId = chatMenuGuiTree.insertItem( %guiRoot, "CHAT MENU ROOT", 0 ); + traverseChatMenu( %newGuiId, $RootChatMenu ); + chatMenuGuiTree.expandItem( %newGuiId ); + chatMenuGuiTree.selectItem( %newGuiId ); + chatMenuGuiTree.dirty = false; +} + +//------------------------------------------------------------------------------ +function traverseChatMenu( %guiID, %menu ) +{ + for ( %i = 0; %i < %menu.optionCount; %i++ ) + { + %text = %menu.option[%i]; + + if ( %menu.isMenu[%i] ) + { + //echo( "** add menu item \"" @ %menu.option[%i] @ "\" **" ); + %newGuiID = chatMenuGuiTree.insertItem( %guiID, %text, 0 ); + traverseChatMenu( %newGuiID, %menu.command[%i] ); + } + else + { + //echo( "** add command item \"" @ %menu.option[%i] @ "\" (" @ %menu.command[%i] @ ") **" ); + %temp = %menu.command[%i]; + %cmdId = getSubStr( %temp, 1, strlen( temp ) - 1 ); + %commandName = $ChatTable[%cmdId].name; + %text = %text @ " - ( " @ %commandName @ " )"; + chatMenuGuiTree.insertItem( %guiID, %text, %cmdId ); + } + } +} + +//------------------------------------------------------------------------------ +function newChatMenu() +{ + chatMenuGuiTree.clear(); + %guiRoot = chatMenuGuiTree.getFirstRootItem(); + chatMenuGuiTree.insertItem( %guiRoot, "CHAT MENU ROOT", 0 ); + chatMenuGuiTree.dirty = true; +} + +//------------------------------------------------------------------------------ +function saveChatMenu() +{ + //getSaveFilename( "prefs/chatMenu/*.cs", doSaveChatMenu ); + doSaveChatMenu( "customVoiceBinds.cs" ); +} + +//------------------------------------------------------------------------------ +function resetChatMenu() +{ + doLoadChatMenu( "scripts/voiceBinds.cs" ); +} + +//------------------------------------------------------------------------------ +//function loadChatMenu() +//{ +// getLoadFilename( "prefs/chatMenu/*.cs", doLoadChatMenu ); +//} + +//------------------------------------------------------------------------------ +function doSaveChatMenu( %filename ) +{ + %filename = fileBase( %filename ); + if ( %filename $= "" ) + return; + + new fileObject( "saveFile" ); + saveFile.openForWrite( "prefs/" @ %filename @ ".cs" ); + + // Write a little header... + saveFile.writeLine( "//------------------------------------------------------------------------------" ); + saveFile.writeLine( "//" ); + saveFile.writeLine( "// Tribes 2 voice chat menu." ); + saveFile.writeLine( "//" ); + saveFile.writeLine( "//------------------------------------------------------------------------------" ); + saveFile.writeLine( " " ); + + // Fire off the tree-traversing write function: + %rootItem = chatMenuGuiTree.getFirstRootItem(); + writeTreeNode( saveFile, chatMenuGuiTree.getChild( %rootItem ) ); + + saveFile.close(); + saveFile.delete(); + + chatMenuGuiTree.dirty = false; + + MessageBoxOK( "SAVED", "Save successful." ); +} + +//------------------------------------------------------------------------------ +function writeTreeNode( %file, %item ) +{ + %temp = chatMenuGuiTree.getItemText( %item ); + %key = getSubStr( firstWord( %temp ), 0, 1 ); + %text = restWords( %temp ); + %command = chatMenuGuiTree.getItemValue( %item ); + + if ( strcmp( %command, "0" ) == 0 ) + { + %file.writeLine( "startChatMenu( \"" @ %key @ " " @ %text @ "\" );" ); + %child = chatMenuGuiTree.getChild( %item ); + if ( %child ) + writeTreeNode( %file, %child ); + + %file.writeLine( "endChatMenu(); // " @ %text ); + } + else + { + // Clip the command text off of the string: + %cmdName = $ChatTable[%command].name; + %text = getSubStr( %text, 0, strlen( %text ) - strlen( %cmdName ) - 7 ); + %file.writeLine( "addChat( \"" @ %key @ " " @ %text @ "\", '" @ %cmdName @ "' );" ); + } + + %sibling = chatMenuGuiTree.getNextSibling( %item ); + if ( %sibling != 0 ) + writeTreeNode( %file, %sibling ); +} + +//------------------------------------------------------------------------------ +function doLoadChatMenu( %filename ) +{ + // Clear existing chat menu: + chatMenuGuiTree.clear(); + + // Load the file... + activateChatMenu( %filename ); + fillChatMenuTree(); +} + +//------------------------------------------------------------------------------ +function chatMenuGuiTree::onRightMouseDown( %this, %item, %pos ) +{ + // launch the action menu... + chatMenuGuiTree.selectItem( %item ); + ChatMenuItemActionPopup.awaken( %item, %pos ); +} + +//------------------------------------------------------------------------------ +function editSelectedChatMenuItem() +{ + %item = chatMenuGuiTree.getSelectedItem(); + if ( %item != chatMenuGuiTree.getFirstRootItem() ) + { + %temp = chatMenuGuiTree.getItemText( %item ); + if ( strlen( %temp ) > 0 ) + { + %key = getSubStr( firstWord( %temp ), 0, 1 ); + %text = restWords( %temp ); + %command = chatMenuGuiTree.getItemValue( %item ); + if ( %command $= "0" ) + editChatMenu( %key, %text, "doEditChatMenu" ); + else + { + %temp = strlen( $ChatTable[%command].name ) + 7; + %text = getSubStr( %text, 0, strlen( %text ) - %temp ); + editChatCommand( %key, %text, %command, "doEditChatCommand" ); + } + } + } +} + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +function ChatMenuItemActionPopup::awaken( %this, %item, %pos ) +{ + %this.position = %pos; + %this.clear(); + + %treeRoot = chatMenuGuiTree.getFirstRootItem(); + %isMenu = ( strcmp( chatMenuGuiTree.getItemValue( %item ), "0" ) == 0 ); + + if ( %item != %treeRoot ) + %this.addEntry( "Edit", 0 ); + + if ( %isMenu ) + { + %this.addEntry( "Add menu", 1 ); + %this.addEntry( "Add command", 2 ); + } + + if ( chatMenuGuiTree.getPrevSibling( %item ) ) + %this.addEntry( "Move up", 3 ); + + if ( chatMenuGuiTree.getNextSibling( %item ) ) + %this.addEntry( "Move down", 4 ); + + if ( %item != %treeRoot ) + %this.addEntry( "Delete", 5 ); + + if ( %this.numEntries == 0 ) + return; + + Canvas.pushDialog( ChatMenuItemActionDlg ); + %this.forceOnAction(); +} + +//------------------------------------------------------------------------------ +function ChatMenuItemActionPopup::addEntry( %this, %text, %id ) +{ + %this.numEntries++; + %this.add( %text, %id ); +} + +//------------------------------------------------------------------------------ +function ChatMenuItemActionPopup::reset( %this ) +{ + %this.numEntries = 0; + %this.forceClose(); + Canvas.popDialog( ChatMenuItemActionDlg ); +} + +//------------------------------------------------------------------------------ +function ChatMenuItemActionPopup::onSelect( %this, %id, %text ) +{ + %item = chatMenuGuiTree.getSelectedItem(); + + switch ( %id ) + { + case 0: // Edit + %temp = chatMenuGuiTree.getItemText( %item ); + %key = getSubStr( firstWord( %temp ), 0, 1 ); + %text = restWords( %temp ); + %command = chatMenuGuiTree.getItemValue( %item ); + if ( strcmp( %command, "0" ) == 0 ) + editChatMenu( %key, %text, "doEditChatMenu" ); + else + { + // Strip the command name from the text: + %temp = strlen( $ChatTable[%command].name ) + 7; + %text = getSubStr( %text, 0, strlen( %text ) - %temp ); + editChatCommand( %key, %text, %command, "doEditChatCommand" ); + } + case 1: // Add menu + editChatMenu( "", "", "doNewChatMenu" ); + case 2: // Add command + editChatCommand( "", "", "", "doNewChatCommand" ); + case 3: // Move up + chatMenuGuiTree.moveItemUp( %item ); + chatMenuGuiTree.dirty = true; + case 4: // Move down + %nextItem = chatMenuGuiTree.getNextSibling( %item ); + chatMenuGuiTree.moveItemUp( %nextItem ); + chatMenuGuiTree.dirty = true; + case 5: // Delete + chatMenuGuiTree.removeItem( %item ); + chatMenuGuiTree.dirty = true; + } + + %this.reset(); +} + +//------------------------------------------------------------------------------ +function ChatMenuItemActionPopup::onCancel( %this ) +{ + %this.reset(); +} + +//------------------------------------------------------------------------------ +function editChatMenu( %key, %text, %callback ) +{ + $ECI::key = %key; + $ECI::text = %text; + $ECI::OKCommand = %callback @ "($ECI::key, $ECI::text);"; + Canvas.pushDialog( EditChatMenuDlg ); +} + +//------------------------------------------------------------------------------ +function editChatCommand( %key, %text, %command, %callback ) +{ + $ECI::key = %key; + $ECI::text = %text; + $ECI::command = %command; + $ECI::OKCommand = %callback @ "($ECI::key, $ECI::text, $ECI::command);"; + Canvas.pushDialog( EditChatCommandDlg ); +} + +//------------------------------------------------------------------------------ +function doEditChatMenu( %key, %text ) +{ + if ( strlen( %key ) && strlen( %text ) ) + { + Canvas.popDialog( EditChatMenuDlg ); + %item = chatMenuGuiTree.getSelectedItem(); + %newText = %key @ ": " @ %text; + chatMenuGuiTree.editItem( %item, %newText, "0" ); + checkSiblings( %item ); + chatMenuGuiTree.dirty = true; + } + //else + // WARN +} + +//------------------------------------------------------------------------------ +function doEditChatCommand( %key, %text, %command ) +{ + if ( strlen( %key ) && strlen( %text ) && isObject( $ChatTable[%command] ) ) + { + Canvas.popDialog( EditChatCommandDlg ); + %item = chatMenuGuiTree.getSelectedItem(); + %newText = %key @ ": " @ %text @ " - ( " @ $ChatTable[%command].name @ " )"; + chatMenuGuiTree.editItem( %item, %newText, %command ); + checkSiblings( %item ); + chatMenuGuiTree.dirty = true; + } + //else + // WARN +} + +//------------------------------------------------------------------------------ +function doNewChatMenu( %key, %text ) +{ + if ( strlen( %key ) && strlen( %text ) ) + { + Canvas.popDialog( EditChatMenuDlg ); + %item = chatMenuGuiTree.getSelectedItem(); + %newText = %key @ ": " @ %text; + %newItem = chatMenuGuiTree.insertItem( %item, %newText, "0" ); + chatMenuGuiTree.expandItem( %item ); + chatMenuGuiTree.selectItem( %newItem ); + checkSiblings( %newItem ); + chatMenuGuiTree.dirty = true; + } + //else + // WARN +} + +//------------------------------------------------------------------------------ +function doNewChatCommand( %key, %text, %command ) +{ + if ( strlen( %key ) && strlen( %text ) && isObject( $ChatTable[%command] ) ) + { + Canvas.popDialog( EditChatCommandDlg ); + %item = chatMenuGuiTree.getSelectedItem(); + %newText = %key @ ": " @ %text @ " - ( " @ $ChatTable[%command].name @ " )"; + %newItem = chatMenuGuiTree.insertItem( %item, %newText, %command ); + chatMenuGuiTree.expandItem( %item ); + chatMenuGuiTree.selectItem( %newItem ); + checkSiblings( %newItem ); + chatMenuGuiTree.dirty = true; + } + //else + // WARN +} + + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +function EditChatMenuDlg::onWake( %this ) +{ +} + +//------------------------------------------------------------------------------ +function EditChatCommandDlg::onWake( %this ) +{ + // Fill the command popup list: + EditChatCommandList.clear(); + for ( %i = $MinChatItemId; %i <= $MaxChatItemId; %i++ ) + { + if ( isObject( $ChatTable[%i] ) ) + EditChatCommandList.add( $ChatTable[%i].name, %i ); + } + EditChatCommandList.sort(); + + // Select the current command: + if ( isObject( $ChatTable[$ECI::command] ) ) + { + EditChatCommandList.setSelected( $ECI::command ); + EditChatCommandMessage.setText( $ChatTable[$ECI::command].text ); + ChatCommandTestBtn.setVisible( true ); + } + else + { + EditChatCommandList.setText( "Select command" ); + EditChatCommandMessage.setText( " " ); + ChatCommandTestBtn.setVisible( false ); + } +} + +//------------------------------------------------------------------------------ +function EditChatCommandList::onSelect( %this, %index, %value ) +{ + $ECI::command = %index; + EditChatCommandMessage.setText( $ChatTable[%index].text ); + ChatCommandTestBtn.setVisible( true ); +} + +//------------------------------------------------------------------------------ +function checkSiblings( %item ) +{ + %allClear = true; + %sibling = chatMenuGuiTree.getPrevSibling( %item ); + while ( %sibling != 0 ) + { + %siblingKey = getSubStr( firstWord( chatMenuGuiTree.getItemText( %sibling ) ), 0, 1 ); + if ( %siblingKey $= $ECI::key ) + { + %allClear = false; + break; + } + %sibling = chatMenuGuiTree.getPrevSibling( %sibling ); + } + + if ( %allClear ) + { + %sibling = chatMenuGuiTree.getNextSibling( %item ); + while ( %sibling != 0 ) + { + %siblingKey = getSubStr( firstWord( chatMenuGuiTree.getItemText( %sibling ) ), 0, 1 ); + if ( %siblingKey $= $ECI::key ) + { + %allClear = false; + break; + } + %sibling = chatMenuGuiTree.getNextSibling( %sibling ); + } + } + + if ( !%allClear ) + { + if ( chatMenuGuiTree.getItemValue( %item ) $= "0" ) + %text1 = restWords( chatMenuGuiTree.getItemText( %item ) ); + else + { + %temp = chatMenuGuiTree.getItemText( %item ); + %text1 = getWords( %temp, 1, getWordCount( %temp ) - 5 ); + } + + if ( chatMenuGuiTree.getItemValue( %sibling ) $= "0" ) + %text2 = restWords( chatMenuGuiTree.getItemText( %sibling ) ); + else + { + %temp = chatMenuGuiTree.getItemText( %sibling ); + %text2 = getWords( %temp, 1, getWordCount( %temp ) - 5 ); + } + + MessageBoxOK( "WARNING", "Menu siblings \"" @ %text1 @ "\" and \"" @ %text2 @ "\" are both bound to the \'" @ %siblingKey @ "\' key!" ); + } + + return %allClear; +} + +//------------------------------------------------------------------------------ +function testChatCommand( %command ) +{ + // Play the sound: + if ( $pref::Player::Count > 0 ) + %voiceSet = getField( $pref::Player[$pref::Player::Current], 3 ); + else + %voiceSet = "Male1"; + + ChatCommandTestBtn.setActive( false ); + %wav = "voice/" @ %voiceSet @ "/" @ $ChatTable[%command].audioFile @ ".wav"; + %handle = alxCreateSource( AudioChat, %wav ); + alxPlay( %handle ); + %delay = alxGetWaveLen( %wav ); + schedule( %delay, 0, "restoreCommandTestBtn" ); +} + +//------------------------------------------------------------------------------ +function restoreCommandTestBtn() +{ + ChatCommandTestBtn.setActive( true ); +} + +//------------------------------------------------------------------------------ +function leaveChatMenuEditor() +{ + if ( chatMenuGuiTree.dirty ) + MessageBoxYesNo( "CHANGES", "Do you want to save your changes?", + "saveChatMenu(); reallyLeaveChatMenuEditor();", + "reallyLeaveChatMenuEditor();" ); + else + reallyLeaveChatMenuEditor(); +} + +//------------------------------------------------------------------------------ +function reallyLeaveChatMenuEditor() +{ + activateChatMenu( "prefs/customVoiceBinds.cs" ); + Canvas.popDialog( EditChatMenuGui ); + Canvas.pushDialog( OptionsDlg ); +} + + diff --git a/base/scripts/GameGui.cs b/base/scripts/GameGui.cs new file mode 100644 index 0000000..24f7a26 --- /dev/null +++ b/base/scripts/GameGui.cs @@ -0,0 +1,1501 @@ +//------------------------------------------------------------------------------ +// +// GameGui.cs +// +//------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ +function LaunchGame( %pane ) +{ + if ( %pane !$= "" ) + GameGui.pane = %pane; + + LaunchTabView.viewTab( "GAME", GameGui, 0 ); +} + +//------------------------------------------------------------------------------ +function GameGui::onWake( %this ) +{ + Canvas.pushDialog( LaunchToolbarDlg ); + + GM_Frame.setTitle( $PlayingOnline ? "GAME" : "LAN GAME" ); + + // This is essentially an "isInitialized" flag... + if ( GM_TabView.tabCount() == 0 ) + { + GM_TabView.addTab( 1, "JOIN" ); + GM_TabView.addTab( 2, "HOST" ); + GM_TabView.addTab( 3, "WARRIOR SETUP", 1 ); + + queryMasterGameTypes(); + } + + switch$ ( %this.pane ) + { + case "Join": + GM_TabView.setSelected( 1 ); + case "Host": + GM_TabView.setSelected( 2 ); + default: // "Warrior" + GM_TabView.setSelected( 3 ); + } +} + +//------------------------------------------------------------------------------ +function GameGui::onSleep( %this ) +{ + %ctrl = "GM_" @ %this.pane @ "Pane"; + if ( isObject( %ctrl ) ) + %ctrl.onDeactivate(); +} + +//------------------------------------------------------------------------------ +function GameGui::setKey( %this, %key ) +{ + // To avoid console error +} + +//------------------------------------------------------------------------------ +function GameGui::onClose( %this, %key ) +{ + // To avoid console error +} + +//------------------------------------------------------------------------------ +function GM_TabView::onAdd( %this ) +{ + %this.addSet( 1, "gui/shll_horztabbuttonB", "5 5 5", "50 50 0", "5 5 5" ); +} + +//------------------------------------------------------------------------------ +function GM_TabView::onSelect( %this, %id, %text ) +{ + GM_JoinPane.setVisible( %id == 1 ); + GM_HostPane.setVisible( %id == 2 ); + GM_WarriorPane.setVisible( %id == 3 ); + GM_TabFrame.setAltColor( %this.getTabSet( %id ) != 0 ); + + %ctrl = "GM_" @ GameGui.pane @ "Pane"; + if ( isObject( %ctrl ) ) + %ctrl.onDeactivate(); + + switch ( %id ) + { + case 1: // Join + GM_JoinPane.onActivate(); + case 2: // Host + GM_HostPane.onActivate(); + case 3: // Warrior Setup + GM_WarriorPane.onActivate(); + } +} + +//------------------------------------------------------------------------------ +// Join Game pane: +//------------------------------------------------------------------------------ +function GM_JoinPane::onActivate( %this ) +{ + GameGui.pane = "Join"; + + if ( %this.onceOnly $= "" ) + { + GM_VersionText.setText( "Version" SPC getT2VersionNumber() ); + + %this.onceOnly = 1; + GMJ_Browser.lastQuery = $PlayingOnline ? "Master" : "LanServers"; + GMJ_Browser.runQuery(); + } + + GM_VersionText.setVisible( true ); + + // Use Server Info prefs: + SI_Window.resize( firstWord( $pref::ServerBrowser::InfoWindowPos ), + getWord( $pref::ServerBrowser::InfoWindowPos, 1 ), + firstWord( $pref::ServerBrowser::InfoWindowExtent ), + getWord( $pref::ServerBrowser::InfoWindowExtent, 1 ) ); + + if ( $pref::ServerBrowser::InfoWindowOpen ) + Canvas.pushDialog( ServerInfoDlg ); +} + +//------------------------------------------------------------------------------ +function GM_JoinPane::onDeactivate( %this ) +{ + GM_VersionText.setVisible( false ); + + // Save off the Server Info Window prefs: + $pref::ServerBrowser::InfoWindowOpen = GMJ_Browser.infoWindowOpen; + $pref::ServerBrowser::InfoWindowPos = SI_Window.getPosition(); + $pref::ServerBrowser::InfoWindowExtent = SI_Window.getExtent(); + $pref::ServerBrowser::InfoWindowBarPos = getWord( SI_InfoScroll.getExtent(), 1 ); + + if ( GMJ_Browser.infoWindowOpen ) + Canvas.popDialog( ServerInfoDlg ); +} + +//------------------------------------------------------------------------------ +$BrowserColumnCount = 0; +$BrowserColumnName[0] = "Server Name"; +$BrowserColumnRange[0] = "25 300"; +$BrowserColumnCount++; +$BrowserColumnName[1] = "Status"; +$BrowserColumnRange[1] = "25 75"; +$BrowserColumnCount++; +$BrowserColumnName[2] = "Favorite"; +$BrowserColumnRange[2] = "25 75"; +$BrowserColumnCount++; +$BrowserColumnName[3] = "Ping"; +$BrowserColumnRange[3] = "25 120"; +$BrowserColumnCount++; +$BrowserColumnName[4] = "Game Type"; +$BrowserColumnRange[4] = "25 200"; +$BrowserColumnCount++; +$BrowserColumnName[5] = "Mission Name"; +$BrowserColumnRange[5] = "25 300"; +$BrowserColumnCount++; +$BrowserColumnName[6] = "Rules Set"; +$BrowserColumnRange[6] = "25 300"; +$BrowserColumnCount++; +$BrowserColumnName[7] = "# Players"; +$BrowserColumnRange[7] = "25 150"; +$BrowserColumnCount++; +$BrowserColumnName[8] = "CPU"; +$BrowserColumnRange[8] = "25 120"; +$BrowserColumnCount++; +$BrowserColumnName[9] = "IP Address"; +$BrowserColumnRange[9] = "25 200"; +$BrowserColumnCount++; +$BrowserColumnName[10] = "Version"; +$BrowserColumnRange[10] = "25 200"; +$BrowserColumnCount++; + +//------------------------------------------------------------------------------ +function GMJ_Browser::onAdd( %this ) +{ + // Add the Server Browser columns based on the prefs: + for ( %i = 0; %i < $BrowserColumnCount; %i++ ) + { + %key = firstWord( $pref::ServerBrowser::Column[%i] ); + %width = getWord( $pref::ServerBrowser::Column[%i], 1 ); + %this.addColumn( %key, $BrowserColumnName[%key], %width, firstWord( $BrowserColumnRange[%key] ), getWord( $BrowserColumnRange[%key], 1 ) ); + } + %this.setSortColumn( $pref::ServerBrowser::SortColumnKey ); + %this.setSortIncreasing( $pref::ServerBrowser::SortInc ); +} + +//------------------------------------------------------------------------------ +function updateServerBrowser() +{ + GMJ_Browser.sort(); + if ( GMJ_Browser.infoWindowOpen ) + ServerInfoDlg.update(); +} + +//------------------------------------------------------------------------------ +function updateServerBrowserStatus( %text, %percentage ) +{ + GMJ_StatusText.setValue( %text ); + GMJ_ProgressBar.setValue( %percentage ); +} + +//------------------------------------------------------------------------------ +function GMJ_Browser::runQuery( %this ) +{ + GMJ_ProgressBar.setValue( 0 ); + $JoinGameAddress = ""; + GMJ_JoinBtn.setActive( false ); + GMJ_RefreshServerBtn.setActive( false ); + %this.clearList(); + + // Clear the Server Info dialog: + SI_InfoWindow.setText( "No server selected." ); + SI_ContentWindow.setText( "" ); + + if ( %this.lastQuery $= "LanServers" ) + { + GMJ_StatusText.setValue( "Querying LAN servers..." ); + GMJ_FilterBtn.setActive( false ); + GMJ_FilterBtn.setVisible( false ); + GMJ_FilterText.setText( "LAN Servers" ); + queryLanServers( $JoinGamePort ); + } + else + { + GMJ_FilterBtn.setActive( true ); + GMJ_FilterBtn.setVisible( true ); + + if ( $pref::ServerBrowser::activeFilter == 0 ) + { + GMJ_StatusText.setValue( "Querying the master server..." ); + GMJ_FilterText.setText( "All servers" ); + queryMasterServer( $JoinGamePort ); + } + else if ( $pref::ServerBrowser::activeFilter == 1 ) + { + // Buddy list query: + GMJ_StatusText.setValue( "Fetching buddy list..." ); + GMJ_FilterText.setText( "Buddies" ); + %this.key = LaunchGui.key++; + DatabaseQueryArray( 5, 0, "", %this, %this.key ); + } + else + { + GMJ_StatusText.setValue( "Querying the master server..." ); + %filterIndex = $pref::ServerBrowser::activeFilter - 2; + if ( $pref::ServerBrowser::Filter[%filterIndex] !$= "" ) + { + %filter = $pref::ServerBrowser::Filter[%filterIndex]; + GMJ_FilterText.setText( getField( %filter, 0 ) ); + queryMasterServer( + $JoinGamePort, + 0, // Flags + getField( %filter, 1 ), // Rules Set + getField( %filter, 2 ), // Mission Type + getField( %filter, 3 ), // Min Players + getField( %filter, 4 ), // Max Players + getField( %filter, 5 ), // Region Mask + getField( %filter, 6 ) ); // Max Ping + } + else + { + // Filter is invalid, so fall back to the default: + $pref::ServerBrowser::activeFilter = 0; + GMJ_FilterText.setText( "All servers" ); + queryMasterServer( $JoinGamePort ); + } + } + } +} + +//------------------------------------------------------------------------------ +function GMJ_Browser::onDatabaseQueryResult( %this, %status, %resultString, %key ) +{ + if ( %this.key != %key ) + return; + + if ( getField( %resultString, 0 ) <= 0 ) + { + GMJ_StatusText.setValue( "No buddies found." ); + MessageBoxOK( "INVALID FILTER", "You have no buddies in your buddy list!" ); + } + else // Prepare for the incoming buddy list: + %this.buddyList = ""; +} + +//------------------------------------------------------------------------------ +function GMJ_Browser::onDatabaseRow( %this, %row, %isLastRow, %key ) +{ + if ( %this.key != %key ) + return; + + %buddyName = getField( %row, 0 ); + %buddyGuid = getField( %row, 3 ); + echo( "Got buddy: \c9\"" @ %buddyName @ "\": " @ %buddyGuid ); + %this.buddyList = %this.buddyList $= "" ? %buddyGuid : %this.buddyList TAB %buddyGuid; + + if ( %isLastRow ) + { + GMJ_StatusText.setValue( "Querying the master server..." ); + queryMasterServer( $JoinGamePort, 0, "Any", "Any", 0, 255, 0xFFFFFFFF, 0, %this.buddyList ); + %this.buddyList = ""; + } +} + +//------------------------------------------------------------------------------ +function GMJ_Browser::onSelect( %this, %address ) +{ + GMJ_JoinBtn.setActive( true ); + GMJ_RefreshServerBtn.setActive( true ); + $JoinGamePassword = ""; + $JoinGameAddress = %address; + + if ( %this.infoWindowOpen ) + ServerInfoDlg.update(); +} + +//------------------------------------------------------------------------------ +function GMJ_Browser::refreshSelectedServer( %this ) +{ + querySingleServer( $JoinGameAddress ); + if ( %this.infoWindowOpen ) + ServerInfoDlg.update(); +} + +//------------------------------------------------------------------------------ +function GMJ_Browser::onSetSortKey( %this, %sortKey, %isIncreasing ) +{ + $pref::ServerBrowser::SortColumnKey = %sortKey; + $pref::ServerBrowser::SortInc = %isIncreasing; +} + +//------------------------------------------------------------------------------ +function GMJ_Browser::onColumnResize( %this, %column, %newSize, %key ) +{ + $pref::ServerBrowser::Column[%column] = %key SPC %newSize; +} + +//------------------------------------------------------------------------------ +function GMJ_Browser::onColumnRepositioned( %this, %oldColumn, %newColumn ) +{ + // Puke em all... + %count = %this.getNumColumns(); + for ( %col = 0; %col < %count; %col++ ) + $pref::ServerBrowser::Column[%col] = %this.getColumnKey( %col ) SPC %this.getColumnWidth( %col ); +} + +//------------------------------------------------------------------------------ +function GMJ_Browser::addFavorite( %this, %name, %address ) +{ + //error( "** addFavorite( \"" @ %name @ "\", " @ %address @ " ) **" ); + $pref::ServerBrowser::Favorite[$pref::ServerBrowser::FavoriteCount] = %name TAB %address; + $pref::ServerBrowser::FavoriteCount++; +} + +//------------------------------------------------------------------------------ +function GMJ_Browser::removeFavorite( %this, %address ) +{ + //error( "** removeFavorite( " @ %address @ " ) **" ); + %foundIt = false; + for ( %i = 0; %i < $pref::ServerBrowser::FavoriteCount; %i++ ) + { + if ( !%foundIt ) + { + if ( getField( $pref::ServerBrowser::Favorite[%i], 1 ) $= %address ) + %foundIt = true; + } + + if ( %foundIt ) + $pref::ServerBrowser::Favorite[%i] = $pref::ServerBrowser::Favorite[%i + 1]; + } + + if ( %foundIt ) + $pref::ServerBrowser::FavoriteCount--; +} + +//------------------------------------------------------------------------------ +function ServerInfoDlg::onAdd( %this ) +{ + %this.headerStyle = ""; +} + +//------------------------------------------------------------------------------ +function ServerInfoDlg::onWake( %this ) +{ + GMJ_Browser.infoWindowOpen = true; + GMJ_InfoBtn.setActive( false ); + SI_RefreshBtn.setActive( false ); + %this.update(); +} + +//------------------------------------------------------------------------------ +function ServerInfoDlg::update( %this ) +{ + %status = GMJ_Browser.getServerStatus(); + if ( %status $= "invalid" ) + { + SI_InfoWindow.setText( "No server selected." ); + return; + } + + %info = GMJ_Browser.getServerInfoString(); + %infoText = "" @ %this.headerStyle @ "NAME:" TAB getRecord( %info, 0 ) + NL "" @ %this.headerStyle @ "ADDRESS:" TAB getRecord( %info, 1 ) @ ""; + + %refreshable = false; + if ( %status $= "responded" ) + { + %temp = getRecord( %info, 2 ); + if ( %temp !$= "" ) + %infoText = %infoText NL "" @ %this.headerStyle @ "RULES SET:" TAB %temp @ ""; + %temp = getRecord( %info, 3 ); + if ( %temp $= "" ) + %temp = "None"; + %infoText = %infoText NL "" @ %this.headerStyle @ "FLAGS:" TAB %temp @ ""; + %temp = getRecord( %info, 4 ); + if ( %temp !$= "" ) + %infoText = %infoText NL "" @ %this.headerStyle @ "GAME TYPE:" TAB %temp @ ""; + %temp = getRecord( %info, 5 ); + if ( %temp !$= "" ) + %infoText = %infoText NL "" @ %this.headerStyle @ "MAP NAME:" TAB %temp @ ""; + %temp = getRecord( %info, 6 ); + if ( %temp !$= "" ) + %infoText = %infoText NL "" @ %this.headerStyle @ "SERVER INFO:" TAB %temp @ ""; + + // Fill in the content window: + %content = GMJ_Browser.getServerContentString(); + SI_ContentWindow.fill( %content ); + %refreshable = true; + } + else + { + switch$ ( %status ) + { + case "new": + %temp = "Not queried yet."; + SI_ContentWindow.setText( "Not available." ); + case "querying": + %temp = "Querying..."; + SI_ContentWindow.setText( "Not available." ); + case "updating": + %temp = "Updating..."; + case "timedOut": + %temp = "Timed out."; + SI_ContentWindow.setText( "Not available." ); + %refreshable = true; + } + %infoText = %infoText NL "" @ %this.headerStyle @ "STATUS: " TAB %temp; + } + + SI_InfoWindow.setText( %infoText ); + SI_InfoScroll.scrollToTop(); + SI_ContentScroll.scrollToTop(); + SI_RefreshBtn.setActive( %refreshable ); +} + +//------------------------------------------------------------------------------ +function SI_ContentWindow::fill( %this, %content ) +{ + if ( getRecordCount( %content ) == 1 ) + { + %this.setText( "" ); + return; + } + + %record = 0; + %teamCount = getRecord( %content, %record ); + %record++; + if ( %teamCount > 1 ) + { + %string = "" @ ServerInfoDlg.headerStyle @ "TEAMS" TAB "SCORE"; + for ( %i = 0; %i < %teamCount; %i++ ) + { + %teamEntry = getRecord( %content, %record ); + %string = %string NL "\t" @ getField( %teamEntry, 0 ) @ "" TAB getField( %teamEntry, 1 ); + %record++; + } + + %playerCount = getRecord( %content, %record ); + %record++; + %string = %string NL "\n" @ ServerInfoDlg.headerStyle @ "PLAYERS" TAB "TEAM" TAB "SCORE"; + for ( %i = 0; %i < %playerCount; %i++ ) + { + %playerEntry = getRecord( %content, %record ); + %string = %string NL "\t" @ getField( %playerEntry, 0 ) @ "" + TAB "" @ getField( %playerEntry, 1 ) @ "" TAB getField( %playerEntry, 2 ); + %record++; + } + } + else + { + %record++; + %playerCount = getRecord( %content, %record ); + %record++; + %string = "" @ ServerInfoDlg.headerStyle @ "PLAYERS" TAB "SCORE"; + for ( %i = 0; %i < %playerCount; %i++ ) + { + %playerEntry = getRecord( %content, %record ); + %string = %string NL "\t" @ getField( %playerEntry, 0 ) @ "" TAB getField( %playerEntry, 2 ); + %record++; + } + } + + %this.setText( %string ); +} + +//------------------------------------------------------------------------------ +function ServerInfoDlg::onSleep( %this ) +{ + GMJ_Browser.infoWindowOpen = false; + GMJ_InfoBtn.setActive( true ); +} + +//------------------------------------------------------------------------------ +function PasswordDlg::onWake( %this ) +{ + $JoinGamePassword = ""; +} + +//------------------------------------------------------------------------------ +function PasswordDlg::accept( %this ) +{ + Canvas.popDialog( PasswordDlg ); + JoinSelectedGame(); +} + +//------------------------------------------------------------------------------ +function JoinSelectedGame() +{ + // This stuff must go soon! + %info = GMJ_Browser.getValue(); + LoadingGui.map = getField( %info, 3 ); + LoadingGui.missionType = getField( %info, 4 ); + // + + %info = GMJ_Browser.getServerInfoString(); + %desc = "a" SPC getField(%info,4) @ "(" @ getField(%info,3) @ ") game on the \"" @ getField(%info,0) @ "\" server. Click here to follow"; + IRCClient::onJoinGame($JoinGameAddress,%desc); + + JoinGame($JoinGameAddress); +} + +//------------------------------------------------------------------------------ +function JoinGame(%address) +{ + MessagePopup( "JOINING SERVER", "CONNECTING" ); + echo("Joining Server " @ %address); + %playerPref = $pref::Player[$pref::Player::Current]; + %playerName = getField( %playerPref, 0 ); + %playerRaceGender = getField( %playerPref, 1 ); + %playerSkin = getField( %playerPref, 2 ); + %playerVoice = getField( %playerPref, 3 ); + %playerVoicePitch = getField( %playerPref, 4 ); + connect( %address, $JoinGamePassword, %playerName, %playerRaceGender, %playerSkin, %playerVoice, %playerVoicePitch ); + ServerConnection.setSimulatedNetParams(0.1, 10); +} + +//------------------------------------------------------------------------------ +// Host Game pane: +//------------------------------------------------------------------------------ +function GM_HostPane::onActivate( %this ) +{ + GameGui.pane = "Host"; + + $HostGameType = $PlayingOnline ? "Online" : "LAN"; + + buildMissionTypePopup( GMH_MissionType ); + GMH_BotMinSlider.setValue( $Host::MinBotDifficulty ); + GMH_BotMaxSlider.setValue( $Host::MaxBotDifficulty ); + GMH_BotsEnabledTgl.setValue( $Host::BotsEnabled ); + GMH_BotsEnabledTgl.onAction(); + + //clamp and set the bot count slider + setBotCountSlider(); + + // Select the saved-off prefs: + if ( $Host::MissionType !$= "" ) + { + %selId = GMH_MissionType.findText( $Host::MissionType ); + if ( %selId != -1 ) + { + GMH_MissionType.setSelected( %selId ); + GMH_MissionType.onSelect( %selId, "" ); + if ( $Host::Map !$= "" ) + { + %index = GMH_MissionList.findTextIndex( $Host::Map ); + if ( %index != -1 ) + { + %selId = GMH_MissionList.getRowId( %index ); + GMH_MissionList.setSelectedById( %selId ); + } + } + } + } + else + { + GMH_MissionType.setSelected( 0 ); + GMH_MissionType.onSelect( 0, "" ); + } + + GMH_StartGameBtn.makeFirstResponder( 1 ); +} + +//------------------------------------------------------------------------------ +function GM_HostPane::onDeactivate( %this ) +{ +} + +//------------------------------------------------------------------------------ +function buildMissionTypePopup( %popup ) +{ + %popup.clear(); + for( %type = 0; %type < $HostTypeCount; %type++ ) + %popup.add( $HostTypeName[%type], %type ); +} + +//------------------------------------------------------------------------------ +function buildMissionList() +{ + %search = "missions/*.mis"; + %ct = 0; + + $HostTypeCount = 0; + $HostMissionCount = 0; + + %fobject = new FileObject(); + + for( %file = findFirstFile( %search ); %file !$= ""; %file = findNextFile( %search ) ) + { + %name = fileBase( %file ); // get the name + + %idx = $HostMissionCount; + $HostMissionCount++; + + $HostMissionFile[%idx] = %name; + $HostMissionName[%idx] = %name; + + if ( !%fobject.openForRead( %file ) ) + continue; + + %typeList = "None"; + + while ( !%fobject.isEOF() ) + { + %line = %fobject.readLine(); + if ( getSubStr( %line, 0, 17 ) $= "// DisplayName = " ) + { + // Override the mission name: + $HostMissionName[%idx] = getSubStr( %line, 17, 1000 ); + } + else if ( getSubStr( %line, 0, 18 ) $= "// MissionTypes = " ) + { + %typeList = getSubStr( %line, 18, 1000 ); + break; + } + } + %fobject.close(); + + // Don't include single player missions: + if ( strstr( %typeList, "SinglePlayer" ) != -1 ) + continue; + + // Test to see if the mission is bot-enabled: + %navFile = "terrains/" @ %name @ ".nav"; + $BotEnabled[%idx] = isFile( %navFile ); + + for( %word = 0; ( %misType = getWord( %typeList, %word ) ) !$= ""; %word++ ) + { + for ( %i = 0; %i < $HostTypeCount; %i++ ) + if ( $HostTypeName[%i] $= %misType ) + break; + if ( %i == $HostTypeCount ) + { + $HostTypeCount++; + $HostTypeName[%i] = %misType; + $HostMissionCount[%i] = 0; + } + // add the mission to the type + %ct = $HostMissionCount[%i]; + $HostMission[%i, $HostMissionCount[%i]] = %idx; + $HostMissionCount[%i]++; + } + } + + %fobject.delete(); +} + +// One time only function call: +buildMissionList(); + +//------------------------------------------------------------------------------ +function validateMissionAndType(%misName, %misType) +{ + for ( %mis = 0; %mis < $HostMissionCount; %mis++ ) + if( $HostMissionFile[%mis] $= %misName ) + break; + if ( %mis == $HostMissionCount ) + return false; + for ( %type = 0; %type < $HostTypeCount; %type++ ) + if ( $HostTypeName[%type] $= %misType ) + break; + if(%type == $hostTypeCount) + return false; + $Host::Map = $HostMissionFile[%mis]; + $Host::MissionType = $HostTypeName[%type]; + + return true; +} + +//------------------------------------------------------------------------------ +function getNextMission( %misName, %misType ) +{ + // First find the index of the mission in the master list: + for ( %mis = 0; %mis < $HostMissionCount; %mis++ ) + if( $HostMissionFile[%mis] $= %misName ) + break; + if ( %mis == $HostMissionCount ) + return ""; + + // Now find the index of the mission type: + for ( %type = 0; %type < $HostTypeCount; %type++ ) + if ( $HostTypeName[%type] $= %misType ) + break; + if ( %type == $hostTypeCount ) + return ""; + + // Now find the mission's index in the mission-type specific sub-list: + for ( %i = 0; %i < $HostMissionCount[%type]; %i++ ) + if ( $HostMission[%type, %i] == %mis ) + break; + + // Go BACKWARDS, because the missions are in reverse alphabetical order: + if ( %i == 0 ) + %i = $HostMissionCount[%type] - 1; + else + %i--; + + // If there are bots in the game, don't switch to any maps without + // a NAV file: + if ( $HostGameBotCount > 0 ) + { + for ( %j = 0; %j < $HostMissionCount[%type] - 1; %j++ ) + { + if ( $BotEnabled[$HostMission[%type, %i]] ) + break; + + if ( %i == 0 ) + %i = $HostMissionCount[%type] - 1; + else + %i--; + } + } + + return $HostMissionFile[$HostMission[%type, %i]]; +} + +//------------------------------------------------------------------------------ +function GMH_MissionType::onSelect( %this, %id, %text ) +{ + // Fill the mission list: + GMH_MissionList.clear(); + %lastAdded = 0; + for ( %i = 0; %i < $HostMissionCount[%id];%i++ ) + { + %misId = $HostMission[%id,%i]; + GMH_MissionList.addRow( %misId, $HostMissionName[%misId] ); + %lastAdded = %misId; + } + GMH_MissionList.sort( 0 ); + + // Select the last mission added: + GMH_MissionList.setSelectedById( %lastAdded ); + $Host::MissionType = $HostTypeName[%id]; + + // Disable all non bot-enabled maps if bots are enabled: + if ( GMH_BotsEnabledTgl.getValue() ) + GMH_BotsEnabledTgl.onAction(); +} + +//------------------------------------------------------------------------------ +function GMH_MissionList::onSelect( %this, %id, %text ) +{ + if ( GMH_BotsEnabledTgl.getValue() ) + GMH_StartGameBtn.setActive( $BotEnabled[%id] ); +} + +//------------------------------------------------------------------------------ +function tryToStartHostedGame() +{ + if ( GMH_BotsEnabledTgl.getValue() ) + { + %selId = GMH_MissionList.getSelectedId(); + if ( !$BotEnabled[%selId] ) + return; + } + + StartHostedGame(); +} + +//------------------------------------------------------------------------------ +function StartHostedGame() +{ + %selId = GMH_MissionList.getSelectedId(); + %misFile = $HostMissionFile[%selId]; + + if ( $Host::BotsEnabled ) + { + validateMaxPlayers(); + $HostGameBotCount = $Host::BotCount; + } + else + $HostGameBotCount = 0; + + $ServerName = $Host::GameName; + $Host::Map = %misFile; + + echo( "exporting server prefs..." ); + export( "$Host::*", "prefs/ServerPrefs.cs", false ); + + if ( $Host::Dedicated ) + { + MessageBoxYesNo( "WARNING", + "You are about to launch a dedicated server and leave Tribes 2. Do you want to continue?", + "tryToLaunchDedicatedServer();" ); + return; + } + + MessagePopup( "STARTING SERVER", "Initializing..." ); + Canvas.repaint(); + + setNetPort( $Host::Port ); + CreateServer( $Host::Map, $Host::MissionType ); + %playerPref = $pref::Player[$pref::Player::Current]; + %playerName = getField( %playerPref, 0 ); + %playerRaceGender = getField( %playerPref, 1 ); + %playerSkin = getField( %playerPref, 2 ); + %playerVoice = getField( %playerPref, 3 ); + %playerVoicePitch = getField( %playerPref, 4 ); + localConnect( %playerName, %playerRaceGender, %playerSkin, %playerVoice, %playerVoicePitch ); + if(!$RecordDemo) + { + // demos are incompatible with local simulated net params + ServerConnection.setSimulatedNetParams($pref::Net::simPacketLoss, $pref::net::simPing * 0.5); + LocalClientConnection.setSimulatedNetParams($pref::Net::simPacketLoss, $pref::net::simPing * 0.5); + } +} + +//------------------------------------------------------------------------------ +function tryToLaunchDedicatedServer() +{ + %numBots = $Host::BotsEnabled ? $Host::BotCount : 0; + if ( launchDedicatedServer( $Host::MissionType, $Host::Map, %numBots ) ) + quit(); + else + { + error( "Failed to launch the dedicated server." ); + schedule( 0, 0, MessageBoxOK, "FAILED", "Tribes 2 failed to launch the dedicated server." ); + } +} + +//------------------------------------------------------------------------------ +function GMH_BotsEnabledTgl::onAction( %this ) +{ + %count = GMH_MissionList.rowCount(); + if ( %this.getValue() ) + { + for ( %i = 0; %i < %count; %i++ ) + { + %id = GMH_MissionList.getRowId( %i ); + GMH_MissionList.setRowActive( %id, $BotEnabled[%id] ); + } + + GMH_EnableBotsGroup.setVisible(true); + %misId = GMH_MissionList.getSelectedId(); + GMH_StartGameBtn.setActive( $BotEnabled[%misId] ); + } + else + { + for ( %i = 0; %i < %count; %i++ ) + { + %id = GMH_MissionList.getRowId( %i ); + GMH_MissionList.setRowActive( %id, true ); + } + + GMH_EnableBotsGroup.setVisible( false ); + GMH_StartGameBtn.setActive( true ); + } +} + +//------------------------------------------------------------------------------ +function updateMinBotDifficulty() +{ + %min = GMH_BotMinSlider.getValue(); + $Host::MinBotDifficulty = %min; + if ( GMH_BotMaxSlider.getValue() < %min ) + GMH_BotMaxSlider.setValue( %min ); +} + +//------------------------------------------------------------------------------ +function updateMaxBotDifficulty() +{ + %max = GMH_BotMaxSlider.getValue(); + $Host::MaxBotDifficulty = %max; + if ( GMH_BotMinSlider.getValue() > %max ) + GMH_BotMinSlider.setValue( %max ); +} + +//------------------------------------------------------------------------------ +function GMH_BotsEnabledTgl::onAction( %this ) +{ + %count = GMH_MissionList.rowCount(); + if ( %this.getValue() ) + { + for ( %i = 0; %i < %count; %i++ ) + { + %id = GMH_MissionList.getRowId( %i ); + GMH_MissionList.setRowActive( %id, $BotEnabled[%id] ); + } + + GMH_EnableBotsGroup.setVisible(true); + %misId = GMH_MissionList.getSelectedId(); + GMH_StartGameBtn.setActive( $BotEnabled[%misId] ); + } + else + { + for ( %i = 0; %i < %count; %i++ ) + { + %id = GMH_MissionList.getRowId( %i ); + GMH_MissionList.setRowActive( %id, true ); + } + + GMH_EnableBotsGroup.setVisible(false); + GMH_StartGameBtn.setActive( true ); + } +} + +//------------------------------------------------------------------------------ +function validateMaxPlayers() +{ + %maxPlayers = GMH_MaxPlayersTE.getValue(); + if (%maxPlayers < 1) + %maxPlayers = 1; + + if (%maxPlayers > 64) + %maxPlayers = 64; + + //reset the value back into the TE + GMH_MaxPlayersTE.setValue(%maxPlayers); + + //and make sure the bot sliders reflect the changes.. + setBotCountSlider(); +} + +function setBotCountSlider() +{ + %maxBots = 15; + if (%maxBots > $Host::MaxPlayers - 2) + %maxBots = $Host::MaxPlayers - 2; + if ($Host::BotCount > %maxBots + 1) + $Host::BotCount = %maxBots + 1; + + if (%maxBots <= 1) + %sliderValue = 0.0; + else + %sliderValue = ($Host::BotCount - 0.95) / %maxBots; + + GMH_MinCombatantSlider.setValue(%sliderValue); +} + +function setMinCombatants() +{ + %maxBots = 16; + if (%maxBots > $Host::MaxPlayers - 1) + %maxBots = $Host::MaxPlayers - 1; + if (%maxBots <= 0) + $Host::BotCount = 0; + else + $Host::BotCount = mFloor( GMH_MinCombatantSlider.getValue() * (%maxBots - 1)) + 1; + GMH_BotCountText.setValue( "(" @ $Host::BotCount @ ")" ); +} + +//------------------------------------------------------------------------------ +function AdvancedHostDlg::onWake( %this ) +{ + // Set all of the controls to the current pref states: + AH_HostPort.setText( $Host::Port ); + AH_DedicatedTgl.setValue( $Host::Dedicated ); + AH_TournamentTgl.setValue( $Host::TournamentMode ); + AH_AdminVoteTgl.setValue( $Host::allowAdminPlayerVotes ); + AH_AllowSmurfTgl.setValue( !$Host::NoSmurfs ); + AH_TimeLimit.setText( $Host::TimeLimit ); + AH_AdminPassword.setText( $Host::AdminPassword ); + AH_ServerInfo.setText( $Host::Info ); + AH_VotePassSlider.setValue( $Host::VotePassPercent ); + AH_VoteTimeSlider.setValue( $Host::VoteTime ); + AH_RespawnSlider.setValue( $Host::PlayerRespawnTimeout ); + AH_WarmupSlider.setValue( $Host::WarmupTime ); +} + +//------------------------------------------------------------------------------ +function AdvancedHostDlg::accept( %this ) +{ + // Apply all of the changes: + $Host::Port = AH_HostPort.getValue(); + $Host::Dedicated = AH_DedicatedTgl.getValue(); + $Host::TournamentMode = AH_TournamentTgl.getValue(); + $Host::allowAdminPlayerVotes = AH_AdminVoteTgl.getValue(); + $Host::NoSmurfs = !AH_AllowSmurfTgl.getValue(); + $Host::TimeLimit = AH_TimeLimit.getValue(); + $Host::AdminPassword = AH_AdminPassword.getValue(); + $Host::Info = AH_ServerInfo.getText(); + $Host::VotePassPercent = mFloor( AH_VotePassSlider.getValue() ); + $Host::VoteTime = mFloor( AH_VoteTimeSlider.getValue() ); + $Host::PlayerRespawnTimeout = mFloor( AH_RespawnSlider.getValue() ); + $Host::WarmupTime = mFloor( AH_WarmupSlider.getValue() ); + + // Save off the new prefs: + export( "$Host::*", "prefs/ServerPrefs.cs", false ); + + Canvas.popDialog( AdvancedHostDlg ); +} + +//------------------------------------------------------------------------------ +function AH_VotePassText::update( %this ) +{ + %this.setText( mFloor( AH_VotePassSlider.getValue() ) @ "%" ); +} + +//------------------------------------------------------------------------------ +function AH_VoteTimeText::update( %this ) +{ + %this.setText( mFloor( AH_VoteTimeSlider.getValue() ) SPC "seconds" ); +} + +//------------------------------------------------------------------------------ +function AH_RespawnText::update( %this ) +{ + %this.setText( mFloor( AH_RespawnSlider.getValue() ) SPC "seconds" ); +} + +//------------------------------------------------------------------------------ +function AH_WarmupText::update( %this ) +{ + %this.setText( mFloor( AH_WarmupSlider.getValue() ) SPC "seconds" ); +} + +//------------------------------------------------------------------------------ +// Warrior Setup pane: +//------------------------------------------------------------------------------ +function GM_WarriorPane::onActivate( %this ) +{ + GameGui.pane = "Warrior"; + if ( $pref::Player::Count == 0 ) + %this.createNewAlias(); + else + { + // Fill the warrior list: + GMW_WarriorPopup.clear(); + GMW_LightRdo.setValue( true ); + + // First add the warrior corresponding to the player nickname: + %this.warriorIndex = -1; + if ( $PlayingOnline ) + { + %warrior = getField( WONGetAuthInfo(), 0 ); + for ( %i = 0; %i < $pref::Player::Count; %i++ ) + { + %name = getField( $pref::Player[%i], 0 ); + if ( %name $= %warrior ) + { + %this.warriorIndex = %i; + GMW_WarriorPopup.add( %name, %i, 1 ); + break; + } + } + } + + // Add the rest of the aliases: + for ( %count = 0; %count < $pref::Player::Count; %count++ ) + { + if ( $pref::Player[%count] !$= "" && %count != %this.warriorIndex ) + { + %name = stripTrailingSpaces( strToPlayerName( getField( $pref::Player[%count], 0 ) ) ); + GMW_WarriorPopup.add( %name, %count ); + } + } + + // Fill the race/gender list: + GMW_RaceGenderPopup.fillList(); + + // Select the current player: + GMW_WarriorPopup.setSelected( $pref::Player::Current ); + GMW_WarriorPopup.onSelect( $pref::Player::Current, "" ); + + if ( $pref::Player::Count > 1 && $pref::Player::Current != %this.warriorIndex ) + GMW_DeleteWarriorBtn.setActive( true ); + else + GMW_DeleteWarriorBtn.setActive( false ); + + GMW_PlayerPageBtn.setVisible( $PlayingOnline ); + } +} + +//------------------------------------------------------------------------------ +function GM_WarriorPane::onDeactivate( %this ) +{ +} + +//------------------------------------------------------------------------------ +function GM_WarriorPane::createNewAlias( %this ) +{ + NW_NameEdit.setValue( "" ); + NW_DoneBtn.setActive( false ); + NW_CancelBtn.setVisible( $pref::Player::Count > 0 ); + Canvas.pushDialog( NewWarriorDlg ); +} + +//------------------------------------------------------------------------------ +function GM_WarriorPane::deleteWarrior( %this ) +{ + MessageBoxYesNo( "CONFIRM", "Are you sure you want to delete this alias?", "doDeleteWarrior();", "" ); +} + +//------------------------------------------------------------------------------ +function doDeleteWarrior() +{ + // Make sure we aren't trying to delete the default warrior (should never get this): + if ( $pref::Player::Current == GM_WarriorPane.warriorIndex ) + return; + + for ( %i = $pref::Player::Current; %i < $pref::Player::Count - 1; %i++ ) + $pref::Player[%i] = $pref::Player[%i + 1]; + $pref::Player[%i] = ""; + + if ( GM_WarriorPane.warriorIndex > $pref::Player::Current ) + GM_WarriorPane.warriorIndex--; + + $pref::Player::Count--; + if ( GM_WarriorPane.warriorIndex != -1 ) + $pref::Player::Current = GM_WarriorPane.warriorIndex; + else + $pref::Player::Current = 0; + + // Update the interface: + GM_WarriorPane::onActivate(); +} + +//------------------------------------------------------------------------------ +function GM_WarriorPane::gotoPlayerPage( %this ) +{ + %warrior = getField( WONGetAuthInfo(), 0 ); + LaunchBrowser( %warrior, "Warrior" ); +} + +//------------------------------------------------------------------------------ +function GMW_PlayerModel::update( %this ) +{ + // Get the shape names: + if ( GMW_HeavyRdo.getValue() ) + %armor = "heavy"; + else if ( GMW_MediumRdo.getValue() ) + %armor = "medium"; + else + %armor = "light"; + + switch ( GMW_RaceGenderPopup.getSelected() ) + { + case 1: + if ( %armor $= "heavy" ) + %shape = %armor @ "_male"; + else + %shape = %armor @ "_female"; + case 2: %shape = "bioderm_" @ %armor; + default: %shape = %armor @ "_male"; + } + + %skin = getField( $pref::Player[$pref::Player::Current], 2 ); + + %this.setModel( %shape @ ".dts", %skin ); +} + +//------------------------------------------------------------------------------ +function GMW_WarriorPopup::onAdd( %this ) +{ + %this.addScheme( 1, "255 255 0", "255 255 128", "128 128 0" ); +} + +//------------------------------------------------------------------------------ +function GMW_WarriorPopup::onSelect( %this, %id, %text ) +{ + // Set this as the currently selected player: + $pref::Player::Current = %id; + + // Select the race/gender: + %raceGender = getField( $pref::Player[%id], 1 ); + %selId = GMW_RaceGenderPopup.findText( %raceGender ); + if ( %selId == -1 ) + %selId = 0; + + GMW_RaceGenderPopup.setSelected( %selId ); + GMW_SkinPopup.fillList( %selId ); + GMW_VoicePopup.fillList( %selId ); + + // Select the skin: + %skin = getField( $pref::Player[%id], 2 ); + %selId = -1; + for ( %i = 0; %i < GMW_SkinPopup.size(); %i++ ) + { + if ( GMW_SkinPopup.realSkin[%i] !$= "" ) + { + if ( %skin $= GMW_SkinPopup.realSkin[%i] ) + { + %selId = %i; + break; + } + } + else if ( %skin $= GMW_SkinPopup.getTextById( %i ) ) + { + %selId = %i; + break; + } + } + if ( %selId == -1 ) + %selId = 0; + GMW_SkinPopup.setSelected( %selId ); + GMW_SkinPopup.onSelect( %selId, GMW_SkinPopup.getTextById( %selId ) ); + + // Select the voice: + %voice = getField( $pref::Player[%id], 3 ); + %voiceId = getSubStr( %voice, strlen( %voice ) -1, 1000 ) - 1; + GMW_VoicePopup.setSelected( %voiceId ); + GMW_VoicePopup.voiceIndex = 0; + + GMW_DeleteWarriorBtn.setActive( $pref::Player::Count > 1 && %id != GM_WarriorPane.warriorIndex ); +} + +//------------------------------------------------------------------------------ +function GMW_RaceGenderPopup::fillList( %this ) +{ + %this.clear(); + %this.add( "Human Male", 0 ); + %this.add( "Human Female", 1 ); + %this.add( "Bioderm", 2 ); +} + +//------------------------------------------------------------------------------ +function GMW_RaceGenderPopup::onSelect( %this, %id, %text ) +{ + // Update the player pref: + $pref::Player[$pref::Player::Current] = setField( $pref::Player[$pref::Player::Current], 1, %this.getText() ); + + // Fill the skin list: + %prevSkin = GMW_SkinPopup.getText(); + GMW_SkinPopup.fillList( %id ); + %selId = GMW_SkinPopup.findText( %prevSkin ); + if ( %selId == -1 ) + %selId = 0; + GMW_SkinPopup.setSelected( %selId ); + GMW_SkinPopup.onSelect( %selId, GMW_SkinPopup.getTextById( %selId ) ); + + // Fill the voice list: + %prevVoice = GMW_VoicePopup.getText(); + GMW_VoicePopup.fillList( %id ); + %selId = GMW_VoicePopup.findText( %prevVoice ); + if ( %selId == -1 ) + %selId = 0; + + GMW_VoicePopup.setSelected( %selId ); + GMW_VoicePopup.onSelect( %selId, "" ); +} + +//------------------------------------------------------------------------------ +$SkinCount = 0; +$Skin[$SkinCount, name] = "Blood Eagle"; +$Skin[$SkinCount, code] = "beagle"; +$SkinCount++; +$Skin[$SkinCount, name] = "Diamond Sword"; +$Skin[$SkinCount, code] = "dsword"; +$SkinCount++; +$Skin[$SkinCount, name] = "Starwolf"; +$Skin[$SkinCount, code] = "swolf"; +$SkinCount++; +$Skin[$SkinCount, name] = "Phoenix"; +$Skin[$SkinCount, code] = "cotp"; +$SkinCount++; +$Skin[$SkinCount, name] = "Storm"; +$Skin[$SkinCount, code] = "base"; +$SkinCount++; +$Skin[$SkinCount, name] = "Inferno"; +$Skin[$SkinCount, code] = "baseb"; +$SkinCount++; +$Skin[$SkinCount, name] = "Horde"; +$Skin[$SkinCount, code] = "horde"; +$SkinCount++; + +//------------------------------------------------------------------------------ +function GMW_SkinPopup::fillList( %this, %raceGender ) +{ + for ( %i = 0; %i < %this.size(); %i++ ) + %this.realSkin[%i] = ""; + + %this.clear(); + %path = "textures/skins/"; + switch ( %raceGender ) + { + case 0: // Human Male + %pattern = ".lmale.png"; + case 1: // Human Female + %pattern = ".lfemale.png"; + case 2: // Bioderm + %pattern = ".lbioderm.png"; + } + + %count = 0; + for ( %file = findFirstFile( %path @ "*" @ %pattern ); %file !$= ""; %file = findNextFile( %path @ "*" @ %pattern ) ) + { + %skin = getSubStr( %file, strlen( %path ), strlen( %file ) - strlen( %path ) - strlen( %pattern ) ); // strip off the path and postfix + + // Make sure this is not a bot skin: + if ( %skin !$= "basebot" && %skin !$= "basebbot" ) + { + // See if this skin has an alias: + for ( %i = 0; %i < $SkinCount; %i++ ) + { + if ( %skin $= $Skin[%i, code] ) + { + %skin = $Skin[%i, name]; + %this.realSkin[%count] = $Skin[%i, code]; + break; + } + } + + %this.add( %skin, %count ); + %count++; + } + } +} + +//------------------------------------------------------------------------------ +function GMW_SkinPopup::onSelect( %this, %id, %text ) +{ + // Update the player pref: + if ( %this.realSkin[%id] !$= "" ) + $pref::Player[$pref::Player::Current] = setField( $pref::Player[$pref::Player::Current], 2, %this.realSkin[%id] ); + else + $pref::Player[$pref::Player::Current] = setField( $pref::Player[$pref::Player::Current], 2, %text ); + + // Update the player model: + GMW_PlayerModel.update(); +} + +//------------------------------------------------------------------------------ +// TRANSLATE these voice set display names: +$MaleVoiceCount = 0; +$MaleVoiceName[$MaleVoiceCount] = "Hero"; +$MaleVoiceCount++; +$MaleVoiceName[$MaleVoiceCount] = "Iceman"; +$MaleVoiceCount++; +$MaleVoiceName[$MaleVoiceCount] = "Rogue"; +$MaleVoiceCount++; +$MaleVoiceName[$MaleVoiceCount] = "Hardcase"; +$MaleVoiceCount++; +$MaleVoiceName[$MaleVoiceCount] = "Psycho"; +$MaleVoiceCount++; + +$FemaleVoiceCount = 0; +$FemaleVoiceName[$FemaleVoiceCount] = "Heroine"; +$FemaleVoiceCount++; +$FemaleVoiceName[$FemaleVoiceCount] = "Professional"; +$FemaleVoiceCount++; +$FemaleVoiceName[$FemaleVoiceCount] = "Cadet"; +$FemaleVoiceCount++; +$FemaleVoiceName[$FemaleVoiceCount] = "Veteran"; +$FemaleVoiceCount++; +$FemaleVoiceName[$FemaleVoiceCount] = "Amazon"; +$FemaleVoiceCount++; + +$DermVoiceCount = 0; +$DermVoiceName[$DermVoiceCount] = "Warrior"; +$DermVoiceCount++; +$DermVoiceName[$DermVoiceCount] = "Monster"; +$DermVoiceCount++; +$DermVoiceName[$DermVoiceCount] = "Predator"; +$DermVoiceCount++; + +//------------------------------------------------------------------------------ +function GMW_VoicePopup::fillList( %this, %raceGender ) +{ + %this.clear(); + + switch ( %raceGender ) + { + case 0: // Human Male + for ( %i = 0; %i < $MaleVoiceCount; %i++ ) + %this.add( $MaleVoiceName[%i], %i ); + + case 1: // Human Female + for ( %i = 0; %i < $FemaleVoiceCount; %i++ ) + %this.add( $FemaleVoiceName[%i], %i ); + + case 2: // Bioderm + for ( %i = 0; %i < $DermVoiceCount; %i++ ) + %this.add( $DermVoiceName[%i], %i ); + } +} + +//------------------------------------------------------------------------------ +function GMW_VoicePopup::onSelect( %this, %id, %text ) +{ + // Update the player pref: + switch ( GMW_RaceGenderPopup.getSelected() ) + { + case 0: %base = "Male"; + case 1: %base = "Fem"; + case 2: %base = "Derm"; + } + + $pref::Player[$pref::Player::Current] = setField( $pref::Player[$pref::Player::Current], 3, %base @ ( %id + 1 ) ); + + %this.voiceIndex = 0; +} + +//------------------------------------------------------------------------------ +function GMW_VoicePitchSlider::setPitch(%this) +{ +} + +function GMW_VoicePopup::test( %this ) +{ + switch ( %this.voiceIndex ) + { + case 0: %file = "gbl.hi"; + case 1: %file = "gbl.brag"; + case 2: %file = "gbl.woohoo"; + case 3: %file = "gbl.rock"; + case 4: %file = "gbl.obnoxious"; + case 5: %file = "gbl.shazbot"; + } + + switch ( GMW_RaceGenderPopup.getSelected() ) + { + case 0: %base = "Male"; + case 1: %base = "Fem"; + case 2: %base = "Derm"; + } + + GMW_VoiceTestBtn.setActive( false ); + %voiceId = %this.getSelected() + 1; + %wav = "voice/" @ %base @ %voiceId @ "/" @ %file @ ".wav"; + %handle = alxCreateSource( AudioGui, %wav ); + + //pitch the voice + //%pitchSliderVal = GMW_VoicePitchSlider.getValue(); + //%pitch = getValidVoicePitch(%voiceId, %pitchSliderVal); + //if (%pitch != 1.0) + // alxSourcef(%handle, "AL_PITCH", %pitch); + + alxPlay( %handle ); + + %delay = alxGetWaveLen( %wav ); + schedule( %delay, 0, "restoreVoiceTestButton" ); + + if ( %this.voiceIndex == 5 ) + %this.voiceIndex = 0; + else + %this.voiceIndex++; +} + +//------------------------------------------------------------------------------ +function restoreVoiceTestButton() +{ + GMW_VoiceTestBtn.setActive( true ); +} + +//------------------------------------------------------------------------------ +function NewWarriorDlg::createPlayer( %this ) +{ + %name = stripTrailingSpaces( NW_NameEdit.getValue() ); + $pref::Player[$pref::Player::Count] = %name @ "\tHuman Male\tbeagle\tMale1"; + $pref::Player::Current = $pref::Player::Count; + $pref::Player::Count++; + Canvas.popDialog( NewWarriorDlg ); + GM_WarriorPane.onActivate(); // Refresh the warrior gui +} + +//------------------------------------------------------------------------------ +function NW_NameEdit::checkValidPlayerName( %this ) +{ + %name = %this.getValue(); + %test = strToPlayerName( %name ); + if ( %name !$= %test ) + %this.setValue( %name ); + + NW_DoneBtn.setActive( strlen( stripTrailingSpaces( %name ) ) > 2 ); +} + +//------------------------------------------------------------------------------ +function NW_NameEdit::processEnter( %this ) +{ + %this.checkValidPlayerName(); + if ( NW_DoneBtn.isActive() ) + NewWarriorDlg.createPlayer(); +} diff --git a/base/scripts/HuntersGame.cs b/base/scripts/HuntersGame.cs new file mode 100644 index 0000000..d5d48e3 --- /dev/null +++ b/base/scripts/HuntersGame.cs @@ -0,0 +1,1703 @@ +//--------------------------------------// +// HuntersGame.cs // +//--------------------------------------// + +//--- GAME RULES BEGIN --- +//Kill other players to make them drop flags +//Return flags to the Nexus for points +//The more flags brought to Nexus at one time, the more each flag scores +//GREED mode: you must return 8 or more flags at once to score +//HOARD mode: no returns between 5 and 2 min. left in game +//Flag Colors: Red = 1pt, Blue = 2pts, Yellow = 4pts, Green = 8pts +//--- GAME RULES END --- + +package HuntersGame { + +function Nexus::objectiveInit(%data, %object) +{ + Game.Nexus = %object; + Game.Nexus.playThread(0, "ambient"); + Game.Nexus.setThreadDir(0, true); + //The flash animation plays forwards, then back automatically, so we have to alternate the thread direcction... + Game.Nexus.flashThreadDir = true; + +} + +function NexusBase::objectiveInit(%data, %object) +{ + Game.NexusBase = %object; + Game.NexusBase.playthread(0, "ambient"); + Game.NexusBase.setThreadDir(0, true); +} + +function NexusCap::objectiveInit(%data, %object) +{ + Game.NexusCap = %object; + Game.NexusCap.playthread(0, "ambient"); + Game.NexusCap.setThreadDir(0, true); +} + +}; + +$InvBanList[Hunters, "TurretOutdoorDeployable"] = 1; +$InvBanList[Hunters, "TurretIndoorDeployable"] = 1; +$InvBanList[Hunters, "ElfBarrelPack"] = 1; +$InvBanList[Hunters, "MortarBarrelPack"] = 1; +$InvBanList[Hunters, "PlasmaBarrelPack"] = 1; +$InvBanList[Hunters, "AABarrelPack"] = 1; +$InvBanList[Hunters, "MissileBarrelPack"] = 1; +$InvBanList[Hunters, "Mine"] = 1; + +datablock AudioProfile(HuntersFlagPickupSound) +{ + filename = "fx/misc/hunters_flag_snatch.wav"; + description = AudioClose3d; + preload = true; +}; + +//exec the AI script +exec("scripts/aiHunters.cs"); + +//exec the records script +if (isFile("prefs/HuntersRecords.cs")) + exec("prefs/HuntersRecords.cs"); + +//----------------------------------------------------------------------------- +//Game initialization functions + +function HuntersGame::setUpTeams(%game) +{ + // Force the numTeams variable to one: + DefaultGame::setUpTeams(%game); + %game.numTeams = 1; + + // allow teams 1->31 to listen to each other (team 0 can only listen to self) + for(%i = 1; %i < 32; %i++) + setSensorGroupListenMask(%i, 0xfffffffe); +} + +function HuntersGame::initGameVars(%game) +{ + %game.SCORE_PER_SUICIDE = -1; + %game.SCORE_PER_DEATH = 0; + %game.SCORE_PER_KILL = 1; + + %game.teamMode = false; + + %game.greedMode = $Host::HuntersGreedMode; + %game.greedMinFlags = 8; //min number of flags you must have before you can cap + + %game.hoardMode = $Host::HuntersHoardMode; + %game.HoardStartTime = 5; //time left in the game at which hoard mode will start + %game.HoardDuration = 3; //duration of the hoard period + %game.HoardEndTime = %game.HoardStartTime - %game.HoardDuration; + + %game.yardSaleMin = 10; + + //make sure there is enough time in the match to actually have a hoard mode... + if ($host::timeLimit < %game.hoardStartTime + 1) + %game.hoardMode = false; + + %game.maxSensorGroup = 0; + + %game.highestFlagReturnCount = 10; //initialize to 10 - don't bother recording less than that... + %game.highestFlagReturnName = ""; + %game.greedFlagCount = 10; //initialize to 10 - don't bother recording greed less than that... + %game.greedFlagName = ""; + + //this is how many humans have to be playing in order to set a record + %game.numHumansForRecord = 4; + + //this is how many milliseconds before a warning is issued for camping near the Nexus + %game.nexusCampingTime = 10000; + + %game.flagHoarder = ""; + %game.flagHoarderMin = 15; + + //vars for how long before the flag is deleted, and the fade transition time... + %game.flagLifeTimeMS = 120000; + %game.fadeTimeMS = 2000; + + %game.flagMsgDelayMS = 3000; + %game.oobThrowFlagsDelayMS = 3000; + + // targets for each of the flag types (except for base which is properly skinned already) + HuntersFlag1.target = -1; // red + HuntersFlag2.target = allocTarget("", 'Blue', "", "", 0, "", ""); + HuntersFlag4.target = allocTarget("", 'Yellow', "", "", 0, "", ""); + HuntersFlag8.target = allocTarget("", 'Green', "", "", 0, "", ""); +} + +function HuntersGame::allowsProtectedStatics(%game) +{ + return true; +} + +function HuntersGame::missionLoadDone(%game) +{ + //default version sets up teams - must be called first... + DefaultGame::missionLoadDone(%game); + + //initialize the score and flag count for all the players + %count = ClientGroup.getCount(); + for(%i = 0; %i < %count; %i++) + { + %client = ClientGroup.getObject(%i); + %game.resetScore(%client); + %client.flagCount = 1; + %client.trackClient = 0; + %client.trackWaypoint = ""; + %client.playerTrackLine = -1; + } + $TopClient = -1; + $TopClientScore = 0; + + //create the Flag group + $FlagGroup = nameToID("MissionCleanup/FlagGroup"); + if ($FlagGroup <= 0) + { + $FlagGroup = new SimGroup("FlagGroup"); + MissionCleanup.add($FlagGroup); + } + + //create the "yard sale waypoint set" + if(nameToId("HuntersYardSaleSet") <= 0) + { + $HuntersYardSaleSet = new SimSet("HuntersYardSaleSet"); + MissionCleanup.add($HuntersYardSaleSet); + } +} + + +function HuntersGame::startMatch(%game) +{ + //call the default + DefaultGame::startMatch(%game); + + //schedule the hoard countdowns + %game.setupHoardCountdown(); +} + +function HuntersGame::setupHoardCountdown(%game) +{ + //delete all previous scheduled calls... + cancel(%game.hoardStart30); + cancel(%game.hoardStart10); + cancel(%game.hoardStart5); + cancel(%game.hoardStart4); + cancel(%game.hoardStart3); + cancel(%game.hoardStart2); + cancel(%game.hoardStart1); + cancel(%game.hoardStart0); + + cancel(%game.hoardEnd30); + cancel(%game.hoardEnd10); + cancel(%game.hoardEnd5); + cancel(%game.hoardEnd4); + cancel(%game.hoardEnd3); + cancel(%game.hoardEnd2); + cancel(%game.hoardEnd1); + cancel(%game.hoardEnd0); + + //schedule hoard mode start notify calls + %curTimeLeftMS = ($Host::TimeLimit * 60 * 1000) + $missionStartTime - getSimTime(); + %hoardStartTimeMS = %game.HoardStartTime * 60 * 1000; + + if (%curTimeLeftMS >= %hoardStartTimeMS + 30000) + %game.hoardStart30 = %game.schedule(%curTimeLeftMS - (%hoardStartTimeMS + 30000), "notifyHoardStart", 30); + + if (%curTimeLeftMS >= %hoardStartTimeMS + 10000) + %game.hoardStart10 = %game.schedule(%curTimeLeftMS - (%hoardStartTimeMS + 10000), "notifyHoardStart", 10); + + if (%curTimeLeftMS >= %hoardStartTimeMS + 5000) + %game.hoardStart5 = %game.schedule(%curTimeLeftMS - (%hoardStartTimeMS + 5000), "notifyHoardStart", 5); + + if (%curTimeLeftMS >= %hoardStartTimeMS + 4000) + %game.hoardStart4 = %game.schedule(%curTimeLeftMS - (%hoardStartTimeMS + 4000), "notifyHoardStart", 4); + + if (%curTimeLeftMS >= %hoardStartTimeMS + 3000) + %game.hoardStart3 = %game.schedule(%curTimeLeftMS - (%hoardStartTimeMS + 3000), "notifyHoardStart", 3); + + if (%curTimeLeftMS >= %hoardStartTimeMS + 2000) + %game.hoardStart2 = %game.schedule(%curTimeLeftMS - (%hoardStartTimeMS + 2000), "notifyHoardStart", 2); + + if (%curTimeLeftMS >= %hoardStartTimeMS + 1000) + %game.hoardStart1 = %game.schedule(%curTimeLeftMS - (%hoardStartTimeMS + 1000), "notifyHoardStart", 1); + + if (%curTimeLeftMS >= %hoardStartTimeMS) + %game.hoardStart0 = %game.schedule(%curTimeLeftMS - %hoardStartTimeMS, "notifyHoardStart", 0); + + + //schedule hoard mode end notify calls + %hoardEndTimeMS = %game.HoardEndTime * 60 * 1000; + + if (%curTimeLeftMS >= %hoardEndTimeMS + 30000) + %game.hoardEnd30 = %game.schedule(%curTimeLeftMS - (%hoardEndTimeMS + 30000), "notifyHoardEnd", 30); + + if (%curTimeLeftMS >= %hoardEndTimeMS + 10000) + %game.hoardEnd10 = %game.schedule(%curTimeLeftMS - (%hoardEndTimeMS + 10000), "notifyHoardEnd", 10); + + if (%curTimeLeftMS >= %hoardEndTimeMS + 5000) + %game.hoardEnd5 = %game.schedule(%curTimeLeftMS - (%hoardEndTimeMS + 5000), "notifyHoardEnd", 5); + + if (%curTimeLeftMS >= %hoardEndTimeMS + 4000) + %game.hoardEnd4 = %game.schedule(%curTimeLeftMS - (%hoardEndTimeMS + 4000), "notifyHoardEnd", 4); + + if (%curTimeLeftMS >= %hoardEndTimeMS + 3000) + %game.hoardEnd3 = %game.schedule(%curTimeLeftMS - (%hoardEndTimeMS + 3000), "notifyHoardEnd", 3); + + if (%curTimeLeftMS >= %hoardEndTimeMS + 2000) + %game.hoardEnd2 = %game.schedule(%curTimeLeftMS - (%hoardEndTimeMS + 2000), "notifyHoardEnd", 2); + + if (%curTimeLeftMS >= %hoardEndTimeMS + 1000) + %game.hoardEnd1 = %game.schedule(%curTimeLeftMS - (%hoardEndTimeMS + 1000), "notifyHoardEnd", 1); + + if (%curTimeLeftMS >= %hoardEndTimeMS) + %game.hoardEnd0 = %game.schedule(%curTimeLeftMS - %hoardEndTimeMS, "notifyHoardEnd", 0); +} + +function HuntersGame::notifyHoardStart(%game, %seconds) +{ + if (%game.HoardMode) + { + if (%seconds > 1) + messageAll('MsgHuntersHoardNotifyStart', '\c2%1 seconds left until the HOARD period begins.~wfx/misc/hunters_%1.wav', %seconds); + else if (%seconds == 1) + messageAll('MsgHuntersHoardNotifyStart', '\c21 second left until the HOARD period begins.~wfx/misc/hunters_1.wav'); + else + { + messageAll('MsgHuntHoardNotifyStarted', '\c2The HOARD period has begun.~wfx/misc/hunters_horde.wav'); + logEcho("hoard mode start"); + %game.setNexusDisabled(); + cancel(%game.greedNexusFlash); + } + } +} + +function HuntersGame::notifyHoardEnd(%game, %seconds) +{ + if (%game.HoardMode) + { + if (%seconds > 1) + messageAll('MsgHuntersHoardNotifyEnd', '\c2%1 seconds left until the HOARD period ends.~wfx/misc/hunters_%1.wav', %seconds); + else if (%seconds == 1) + messageAll('MsgHuntersHoardNotifyEnd', '\c21 second left until the HOARD period ends.~wfx/misc/hunters_1.wav'); + else + { + messageAll('MsgHuntersHoardNotifyEnded', '\c2The HOARD period has ended!~wfx/misc/hunters_greed.wav'); + logEcho("hoard mode end"); + %game.setNexusEnabled(); + cancel(%game.greedNexusFlash); + } + } +} + +function HuntersGame::clientJoinTeam( %game, %client, %team, %respawn ) +{ + %game.assignClientTeam( %client ); + + // Spawn the player: + %game.spawnPlayer( %client, %respawn ); +} + +//----------------------------------------------------------------------------- +//Player spawn/death functions + +function HuntersGame::assignClientTeam(%game, %client) +{ + %client.team = 0; + + //initialize the team array + for (%i = 1; %i < 32; %i++) + $HuntersTeamArray[%i] = false; + + %game.maxSensorGroup = 0; + %count = ClientGroup.getCount(); + for (%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + if (%cl.team != 0) + $HuntersTeamArray[%cl.team] = true; + + //need to set the number of sensor groups to the max... + if (%cl.team > %game.maxSensorGroup) + %game.maxSensorGroup = %cl.team; + } + + //now loop through the team array, looking for an empty team + for (%i = 1; %i < 32; %i++) + { + if (! $HuntersTeamArray[%i]) + { + %client.team = %i; + + if (%client.team > %game.maxSensorGroup) + %game.maxSensorGroup = %client.team; + + break; + } + } + + // set player's skin pref here + setTargetSkin(%client.target, %client.skin); + + // Let everybody know you are no longer an observer: + messageAll( 'MsgClientJoinTeam', '\c1%1 has joined the hunt.', %client.name, "", %client, 1 ); + updateCanListenState( %client ); + + //now set the max number of sensor groups... + setSensorGroupCount(%game.maxSensorGroup + 1); +} + +function HuntersGame::createPlayer(%game, %client, %spawnLoc, %respawn) +{ + //first call the default + DefaultGame::createPlayer(%game, %client, %spawnLoc, %respawn); + + //now set the sensor group + %client.setSensorGroup(%client.team); +} + +function HuntersGame::pickPlayerSpawn(%game, %client, %respawn) +{ + return %game.pickTeamSpawn(1); +} + +function HuntersGame::playerSpawned(%game, %player, %armor) +{ + //intialize + %client = %player.client; + %client.flagCount = 1; + %client.isDead = false; + + //make sure they're not still taking camping damage... + cancel(%client.campingThread); + + + //continue with the default + DefaultGame::playerSpawned(%game, %player, %armor); +} + +function HuntersGame::onClientKilled(%game, %clVictim, %clKiller, %damageType, %implement, %damageLoc) +{ + //set the flag + %clVictim.isDead = true; + + //set the greed variable if required + if (!%game.teamMode && $missionRunning) + { + if (%clVictim.flagCount - 1 > %game.greedFlagCount) + { + %game.greedFlagCount = %clVictim.flagCount - 1; + %game.greedFlagName = getTaggedString(%clVictim.name); + } + } + + //first, drop all the flags + HuntersGame::dropFlag(%game, %clVictim.player); + + //now call the default game stuff + DefaultGame::onClientKilled(%game, %clVictim, %clKiller, %damageType, %implement, %damageLoc); + + messageClient(%clVictim, 'MsgHuntYouHaveFlags', "", 0); +} + +function HuntersGame::updateKillScores(%game, %clVictim, %clKiller, %damageType, %implement) +{ + if (%game.testKill(%clVictim, %clKiller)) //verify victim was an enemy + { + %game.awardScoreKill(%clKiller); + %game.awardScoreDeath(%clVictim); + } + else if (%game.testSuicide(%clVictim, %clKiller, %damageType)) //otherwise test for suicide + %game.awardScoreSuicide(%clVictim); +} + +function Huntersgame::awardScoreKill(%game, %client) +{ + //call the default + DefaultGame::awardScoreKill(%game, %client); + + //check if we have a new leader + if (!%game.teamMode && (%client.score > $TopClientScore)) + { + $TopClientScore = %client.score; + //this message is annoying! + //if (%client != $TopClient) + // messageAll('MsgHuntNewTopScore', '\c0%1 has taken the lead with a score of %2!~wfx/misc/flag_capture.wav', %client.name, %client.score); + $TopClient = %client; + } +} + +function Huntersgame::awardScoreSuicide(%game, %client) +{ + //call the default + DefaultGame::awardScoreSuicide(%game, %client); + + //check if we have a new leader + if (!%game.teamMode && %client == $TopClient && (%client.score < $TopClientScore)) + { + //first lower the topClientScore var + $TopClientScore = %client.score; + + //see if there's a new leader... + %highestScore = %client.score; + %highestScoreClient = -1; + for (%i = 0; %i < ClientGroup.getCount(); %i++) + { + %cl = ClientGroup.getObject(%i); + if (%cl.score > %highestScore) + { + %highestScore = %cl.score; + %highestScoreClient = %cl; + } + } + + //did we find someone? + if (%highestScoreClient > 0) + { + $TopClientScore = %highestScoreClient.score; + $TopClient = %highestScoreClient; + //this message is annoying... + //messageAll('MsgHuntNewTopScore', '\c0%1 is now in the lead with a score of %2!~wfx/misc/flag_capture.wav', %highestScoreClient.name, %highestScoreClient.score); + } + } +} + +function HuntersGame::equip(%game, %player) +{ + for(%i =0; %i<$InventoryHudCount; %i++) + %player.client.setInventoryHudItem($InventoryHudData[%i, itemDataName], 0, 1); + + //%player.setArmor("Light"); + %player.setInventory(RepairKit,1); + %player.setInventory(Grenade,6); + %player.setInventory(Blaster,1); + %player.setInventory(Chaingun,1); + %player.setInventory(ChaingunAmmo, 100); + %player.setInventory(Disc,1); + %player.setInventory(DiscAmmo, 20); + %player.setInventory(EnergyPack,1); + %player.setInventory(TargetingLaser, 1); + %player.weaponCount = 3; + + %player.use("Disc"); +} + +//----------------------------------------------------------------------------- +//flag functions +function HuntersGame::playerDroppedFlag(%game, %player) +{ + // this stuff has all been moved to HuntersGame::dropFlag + // we really don't want something to happen for *every* flag a player drops anyway +} + +function HuntersStartFlagTimeOut(%flag) +{ + // start the fade out... + %flag.startFade(Game.fadeTimeMS, 0, true); + schedule(Game.fadeTimeMS, %flag, "HuntersEndFlagTimeOut", %flag); +} + +function HuntersEndFlagTimeOut(%flag) +{ + %flag.delete(); +} + +function HuntersYardSaleTimeOut(%waypoint) +{ + %waypoint.delete(); +} + +function HuntersGame::updateFlagHoarder(%game) +{ + %hoarder = -1; + %maxFlags = -1; + %count = ClientGroup.getCount(); + for (%i = 0; %i < %count; %i++) + { + %client = ClientGroup.getObject(%i); + if (%client.flagCount > %game.flagHoarderMin && %client.flagCount > %maxFlags) + { + %maxflags = %client.flagCount; + %hoarder = %client; + } + } + + //if we found our hoarder, set the waypoint, otherwise, delete it + if (%hoarder > 0) + { + if (!isObject(%game.hoarderWaypoint)) + { + //create a waypoint at player's location... + %game.hoarderWaypoint = new WayPoint() + { + position = %hoarder.player.position; + rotation = "1 0 0 0"; + scale = "1 1 1"; + name = "Flag Hoarder Was Here"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + team = 0; + }; + + //add the waypoint to the cleanup group + MissionCleanup.add(%game.hoarderWaypoint); + } + + //set the position + %game.hoarderWaypoint.setTransform(%hoarder.player.getWorldBoxCenter() SPC "0 0 1 0"); + } + else if (isObject(%game.hoarderWaypoint)) + { + %game.hoarderWaypoint.delete(); + } +} + +function HuntersGame::updateTrackers(%game, %client) +{ + //update anyone who is tracking this player + %count = ClientGroup.getCount(); + for (%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + if (%cl.trackClient == %client) + { + //see if the tracker has a waypoint already + if (!isObject(%cl.trackWaypoint)) + { + //create a waypoint at player's location... + %cl.trackWaypoint = new WayPoint() + { + position = %player.position; + rotation = "1 0 0 0"; + scale = "1 1 1"; + name = "Tracking" SPC getTaggedString(%client.name); + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + team = %client.team; + }; + + //add the waypoint to the cleanup group + MissionCleanup.add(%cl.trackWaypoint); + } + + //set the position + %cl.trackWaypoint.setTransform(%player.getWorldBoxCenter() SPC "0 0 1 0"); + } + } +} + +function HuntersGame::sendFlagCountMessage(%game, %client) +{ + //send the messages + if (%client.flagCount - 1 == 1) + { + messageAllExcept(%client, -1, 'MsgHuntPlayerHasFlags', '\c2%1 now has 1 flag.', %client.name, 1); + messageClient(%client, 'MsgHuntYouHaveFlags', '\c2You now have 1 flag.', %client.flagCount - 1); + } + else if (%client.flagCount - 1 > 1) + { + messageAllExcept(%client, -1, 'MsgHuntPlayerHasFlags', '\c2%1 now has %2 flags.', %client.name, %client.flagCount - 1); + messageClient(%client, 'MsgHuntYouHaveFlags', '\c2You now have %1 flags.', %client.flagCount - 1); + } +} + +function HuntersGame::playerTouchFlag(%game, %player, %flag) +{ + //make sure the player is still alive + %client = %player.client; + if (%player.getState() !$= "Dead") + { + //increase the count bye the flag value + %flagValue = %flag.value; + %client.flagCount += %flagValue; + + //delete the flag + %flag.delete(); + + //if the client has 5 or more flags, mount an image + if (%client.flagCount >= 5) + %player.mountImage(HuntersFlagImage, $FlagSlot); + + //schedule an update message + cancel(%client.flagMsgPending); + %client.flagMsgPending = %game.schedule(%game.flagMsgDelayMS, "sendFlagCountMessage", %client); + messageClient(%client, 'MsgHuntYouHaveFlags', "", %client.flagCount - 1); + + //update the log... + logEcho(%client.nameBase@" (pl "@%player@"/cl "@%client@") has "@%client.flagCount-1@" flags"); + + //play the sound pickup in 3D + %player.playAudio(0, HuntersFlagPickupSound); + + //see if the client could set the record + if (!%game.teamMode && !%client.couldSetRecord) + { + %numFlags = %client.flagCount - 1; + if (%numFlags > 10 && %numFlags > $HuntersRecords::Count[$currentMission]) + { + //see if we have at least 4 non-AI players + %humanCount = 0; + %count = ClientGroup.getCount(); + for (%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + if (!%cl.isAIControlled()) + %humanCount++; + if (%humanCount >= %game.numHumansForRecord) + break; + } + + if (%humanCount >= %game.numHumansForRecord) + { + %client.couldSetRecord = true; + + //send a message right away... + if (isEventPending(%client.flagMsgPending)) + { + cancel(%client.flagMsgPending); + %game.sendFlagCountMessage(%client); + } + + //send a message to everyone + messageAllExcept(%client, -1, 'MsgHuntPlayerCouldSetRecord', '\c2%1 has enough flags to set the record for this mission!~wfx/misc/flag_return.wav'); + messageClient(%client, 'MsgHuntYouCouldSetRecord', '\c2You have enough flags to set the record for this mission!~wfx/misc/flag_return.wav'); + } + } + } + + //new tracking - *everyone* automatically tracks the "flag hoarder" if they have at least 15 flags + %game.updateFlagHoarder(); + } +} + +function HuntersGame::checkTimeLimit(%game) +{ + DefaultGame::checkTimeLimit(%game); + + //make sure the hoard counter is also up to date + %curTimeLeftMS = ($Host::TimeLimit * 60 * 1000) + $missionStartTime - getSimTime(); + messageAll('MsgHuntHoardStatus', "", %game.HoardMode, $Host::TimeLimit, %curTimeLeftMS, %game.HoardStartTime, %game.HoardDuration); +} + +function HuntersGame::timeLimitReached(%game) +{ + logEcho("game over (timelimit)"); + %game.gameOver(); + cycleMissions(); +} + +function HuntersGame::scoreLimitReached(%game) +{ + //no such thing as a score limit in Hunters... +} + +function HuntersGame::gameOver(%game) +{ + //call the default + DefaultGame::gameOver(%game); + + messageAll('MsgGameOver', "Match has ended.~wvoice/announcer/ann.gameover.wav" ); + + messageAll('MsgClearObjHud', ""); + for(%i = 0; %i < ClientGroup.getCount(); %i ++) + { + %client = ClientGroup.getObject(%i); + Game.resetScore(%client); + cancel(%client.oobSched); + } +} + +function HuntersGame::checkScoreLimit(%game, %client) +{ + //no such thing as a score limit in Hunters... +} + +//----------------------------------------------------------------------------- +//Nexus functions + +function HuntersGame::setNexusDisabled(%game) +{ + //set the animations + Game.Nexus.playThread(1, "transition"); + Game.NexusCap.playthread(1, "transition"); + Game.NexusBase.playthread(1, "transition"); + Game.Nexus.setThreadDir(1, true); + Game.NexusCap.setThreadDir(1, true); + Game.NexusBase.setThreadDir(1, true); +} + +function HuntersGame::setNexusEnabled(%game) +{ + //set the animations + Game.Nexus.playThread(1, "transition"); + Game.NexusCap.playthread(1, "transition"); + Game.NexusBase.playthread(1, "transition"); + Game.Nexus.setThreadDir(1, false); + Game.NexusCap.setThreadDir(1, false); + Game.NexusBase.setThreadDir(1, false); +} + +function HuntersGame::flashNexus(%game) +{ + //set the animations + Game.Nexus.playThread(1, "flash"); + Game.NexusCap.playthread(1, "flash"); + Game.NexusBase.playthread(1, "flash"); + Game.Nexus.setThreadDir(1, Game.Nexus.flashThreadDir); + Game.NexusCap.setThreadDir(1, Game.Nexus.flashThreadDir); + Game.NexusBase.setThreadDir(1, Game.Nexus.flashThreadDir); + Game.Nexus.flashThreadDir = !Game.Nexus.flashThreadDir; +} + +function HuntersGame::NexusSparkEmitter(%game, %client, %cap, %numToScore) +{ + if (isObject(%client.nexusEmitter)) + %client.nexusEmitter.delete(); + + %client.nexusEmitter = new ParticleEmissionDummy() + { + //position = getWord(%client.player.position, 0) SPC getWord(%client.player.position, 1) SPC getWord(%client.player.position, 2) + 3; + position = (%cap ? Game.nexus.getWorldBoxCenter() : %client.player.getWorldBoxCenter()); + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = defaultEmissionDummy; + emitter = (%cap ? NexusParticleCapEmitter : NexusParticleDeniedEmitter); + velocity = "1"; + }; + MissionCleanup.add(%client.nexusEmitter); + + //the effect should only last a few seconds + if (%cap) + { + %timeMS = (%numToScore < 10 ? 200 : %numToScore * 20); + %client.nexusEmitter.schedule(%timeMS, "delete"); + } + else + %client.nexusEmitter.schedule(200, "delete"); +} + +function HuntersGame::hoardModeActive(%game, %wouldBeActive) +{ + if (%wouldBeActive $= "") + %wouldBeActive = false; + + //see if hoard mode is on and active + if (%game.HoardMode || %wouldBeActive) + { + %missionEndTime = ($Host::TimeLimit * 60 * 1000) + $missionStartTime; + %timeLeftMS = %missionEndTime - getSimTime(); + + %hoardStartTime = %game.HoardStartTime * 60 * 1000; + %hoardEndTime = %hoardStartTime - (%game.HoardDuration * 60 * 1000); + if (%timeLeftMS <= %hoardStartTime && %timeLeftMS > %hoardEndTime) + return true; + } + return false; +} + +function Nexus::onCollision(%data, %obj, %colObj) +{ + //make sure it was a player that entered the trigger + if((%colObj.getDataBlock().className $= Armor) && (%colObj.getState() !$= "Dead")) + { + %player = %colObj; + %client = %player.client; + + // if player has been to the nexus within last 5 seconds, don't keep spamming messages + if((getSimTime() - %player.lastNexusTime) < 5000) + return; + + %player.lastNexusTime = getSimTime(); + + if(Game.hoardModeActive()) + { + messageClient(%client, 'MsgHuntHoardNoCap', '\c2Hoard mode is in effect! You cannot return any flags right now.~wfx/powered/nexus_deny.wav'); + + //apply a "bounce" impulse to the player + %velocity = %player.getVelocity(); + if (VectorDist("0 0 0", %velocity) < 2) + %velocityNorm = "0 20 0"; + else + %velocityNorm = VectorScale(VectorNormalize(%velocity), 20); + %vector = VectorScale(%velocityNorm, -200); + %player.applyImpulse(%player.position, %vector); + + Game.NexusSparkEmitter(%client, false); + return; + } + + // you can't cap your own flag + %numToScore = %client.flagCount - 1; + if (Game.greedMode && (%numToScore < Game.GreedMinFlags) && (%numToScore >= 1)) + { + messageClient(%client, 'MsgHuntNeedGreed', '\c2Greed mode is ON! You must have %1 flags before you can return them.~wfx/powered/nexus_deny.wav', Game.GreedMinFlags); + + //transition the Nexus to the "off" animation and back again + Game.flashNexus(); + + //apply a "bounce" impuse to the player + %velocity = %player.getVelocity(); + if (VectorDist("0 0 0", %velocity) < 2) + %velocityNorm = "0 20 0"; + else + %velocityNorm = VectorScale(VectorNormalize(%velocity), 20); + %vector = VectorScale(%velocityNorm, -200); + %player.applyImpulse(%player.position, %vector); + + Game.NexusSparkEmitter(%client, false); + return; + } + + //send the flags message right away... + if (isEventPending(%client.flagMsgPending)) + { + cancel(%client.flagMsgPending); + %game.sendFlagCountMessage(%client); + } + + //unless the nexus is very near the mission boundary, there should be no oobSched to cancel, but... + cancel(%client.oobSched); + + //score the flags + %totalScore = (%numToScore * (%numToScore + 1)) / 2; + if (Game.teamMode) + { + $teamScore[%client.team] += %totalScore; + logEcho(%client.nameBase@" (pl "@%player@"/cl "@%client@") score "@%numToScore@" flags worth "@%totalScore@" pts for team "@%client.team); + messageAll('MsgTeamScoreIs', "", %client.team, $teamScore[%client.team]); + Game.recalcTeamRanks(%client.team); + } + else + { + %client.flagPoints += %totalScore; + logEcho(%client.nameBase@" (pl "@%player@"/cl "@%client@") score "@%numToScore@" flags worth "@%totalScore@" pts"); + Game.recalcScore(%client); + + //see if we should set the highest for the mission here + if (%numToScore > Game.highestFlagReturnCount) + { + Game.highestFlagReturnCount = %numToScore; + Game.highestFlagReturnName = getTaggedString(%client.name); + } + } + + //reset the flags + %client.flagCount = 1; + %client.couldSetRecord = false; + %player.unMountImage($FlagSlot); + messageClient(%client, 'MsgHuntYouHaveFlags', "", 0); + + //see if it's the top score + if (!Game.teamMode && (%client.score > $TopClientScore)) + %topScore = true; + else + %topScore = false; + + //send the messages + if (%numToScore <= 0) + { + messageClient(%client, 'MsgHuntYouNeedHelp', '\c2Pick up flags and bring them here to score points.~wfx/misc/nexus_idle.wav'); + } + else if (%numToScore == 1) + { + if(Game.teamMode) + messageAllExcept(%client, -1, 'MsgHuntPlayerScored', '\c2%1 returned 1 flag (1 point) for %2.~wfx/misc/nexus_cap.wav', %client.name, $TeamName[%client.team], 1); + else + { + messageAllExcept(%client, -1, 'MsgHuntPlayerScored', '\c2%1 returned 1 flag for 1 point.~wfx/misc/nexus_cap.wav', %client.name, 1); + + //new tracking - *everyone* automatically tracks the "flag hoarder" if they have at least 15 flags + Game.updateFlagHoarder(); + } + + //add the nexus effect + Game.NexusSparkEmitter(%client, true, %numToScore); + + messageClient(%client, 'MsgHuntYouScored', '\c2You returned 1 flag for 1 point.~wfx/misc/nexus_cap.wav', 1); + } + else if (%numToScore < 5) + { + if(Game.teamMode) + messageAllExcept(%client, -1, 'MsgHuntPlayerScored', '\c2%1 returned %2 flags (%3 points) for %4.~wfx/misc/nexus_cap.wav', %client.name, %numToScore, %totalScore, $TeamName[%client.team]); + else + { + messageAllExcept(%client, -1, 'MsgHuntPlayerScored', '\c2%1 returned %2 flags for %3 points.~wfx/misc/nexus_cap.wav', %client.name, %numToScore, %totalScore); + + //new tracking - *everyone* automatically tracks the "flag hoarder" if they have at least 15 flags + Game.updateFlagHoarder(); + } + + //add the nexus effect + Game.NexusSparkEmitter(%client, true, %numToScore); + + messageClient(%client, 'MsgHuntYouScored', '\c2You returned %1 flags for %2 points.~wfx/misc/nexus_cap.wav', %numToScore, %totalScore); + } + else + { + if(Game.teamMode) + messageAllExcept(%client, -1, 'MsgHuntPlayerScored', '\c2%1 returned %2 flags (%3 points) for %4.~wfx/misc/nexus_cap.wav', %client.name, %numToScore, %totalScore, $TeamName[%client.team]); + else + { + messageAllExcept(%client, -1, 'MsgHuntPlayerScored', '\c2%1 returned %2 flags for %3 points.~wfx/misc/nexus_cap.wav', %client.name, %numToScore, %totalScore); + + //new tracking - *everyone* automatically tracks the "flag hoarder" if they have at least 15 flags + Game.updateFlagHoarder(); + } + + //add the nexus effect + Game.NexusSparkEmitter(%client, true, %numToScore); + + messageClient(%client, 'MsgHuntYouScored', '\c2You returned %1 flags for %2 points.~wfx/misc/nexus_cap.wav', %numToScore, %totalScore); + } + + //see if it's the top score + if (%topScore) + { + $TopClientScore = %client.score; + if (%client == $TopClient) + { + if (%numToScore >= 5) + messageAll('MsgHuntTopScore', '\c0%1 is leading with a score of %2!~wfx/misc/flag_capture.wav', %client.name, %client.score); + else + messageAll('MsgHuntTopScore', '\c0%1 is leading with a score of %2!', %client.name, %client.score); + } + else + messageAll('MsgHuntNewTopScore', '\c0%1 has taken the lead with a score of %2!~wfx/misc/flag_capture.wav', %client.name, %client.score); + $TopClient = %client; + } + + //see if it's a record + if (%numToScore > 10 && %numToScore > $HuntersRecords::Count[$currentMission]) + { + //see if we have at least 4 non-AI players + %humanCount = 0; + %count = ClientGroup.getCount(); + for (%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + if (!%cl.isAIControlled()) + %humanCount++; + if (%humanCount >= Game.numHumansForRecord) + break; + } + + if (%humanCount >= Game.numHumansForRecord) + { + $HuntersRecords::Count[$currentMission] = %numToScore; + $HuntersRecords::Name[$currentMission] = getTaggedString(%client.name); + + //send a message to everyone + messageAllExcept(%client, -1, 'MsgHuntPlayerSetRecord', '\c2%1 set the record for this mission with a return of %2 flags!~wfx/misc/flag_return.wav', %client.name, %numToScore); + messageClient(%client, 'MsgHuntYouSetRecord', '\c2You set the record for this mission with a return of %1 flags!~wfx/misc/flag_return.wav', %numToScore); + + //update the records file... + export( "$HuntersRecords::*", "prefs/HuntersRecords.cs", false ); + + //once the record has been set, reset everyone's tag + for (%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%count); + %cl.couldSetRecord = false; + } + } + } + + if(Game.teamMode) + Game.checkScoreLimit(%team); + else + Game.checkScoreLimit(%client); + } +} + +function HuntersGame::clientMissionDropReady(%game, %client) +{ + //%client.rank = ClientGroup.getCount(); + messageClient(%client, 'MsgClientReady',"", %game.class); + //messageClient(%client, 'MsgHuntGreedStatus', "", %game.greedMode, %game.GreedMinFlags); + //%curTimeLeftMS = ($Host::TimeLimit * 60 * 1000) + $missionStartTime - getSimTime(); + //messageClient(%client, 'MsgHuntHoardStatus', "", %game.HoardMode, $Host::TimeLimit, %curTimeLeftMS, %game.HoardStartTime, %game.HoardDuration); + messageClient(%client, 'MsgHuntYouHaveFlags', "", 0); + messageClient(%client, 'MsgYourScoreIs', "", 0); + // MES function below does not exist + //%game.populateRankArray(%client); + //messageClient(%client, 'MsgYourRankIs', "", -1); + + messageClient(%client, 'MsgMissionDropInfo', '\c0You are in mission %1 (%2).', $MissionDisplayName, $MissionTypeDisplayName, $ServerName ); + + DefaultGame::clientMissionDropReady(%game, %client); +} + +function HuntersGame::AIHasJoined(%game, %client) +{ + //let everyone know the player has joined the game + //messageAllExcept(%client, -1, 'MsgClientJoin', '%1 joined the game.', %client.name, "", %client, 1); +} + +function HuntersGame::resetScore(%game, %client) +{ + %client.score = 0; + %client.suicides = 0; + %client.kills = 0; + %client.teamKills = 0; + %client.deaths = 0; + %client.flagPoints = 0; +} + +function HuntersGame::recalcScore(%game, %cl) +{ + if (%cl <= 0) + return; + + %killValue = %cl.kills * %game.SCORE_PER_KILL; + %deathValue = %cl.deaths * %game.SCORE_PER_DEATH; + + if (%killValue - %deathValue == 0) + %killPoints = 0; + else + %killPoints = (%killValue * %killValue) / (%killValue - %deathValue); + + %cl.score = %killPoints; + %cl.score += %cl.flagPoints; + %cl.score += %cl.suicides * %game.SCORE_PER_SUICIDE; + //%cl.score = mFloatLength(%cl.score, 1); + %cl.score = mFloor(%cl.score); + + //must send the message to update the HUD + messageClient(%cl, 'MsgYourScoreIs', "", %cl.score); + + %game.recalcTeamRanks(%cl); +} + +function HuntersGame::sendGameVoteMenu( %game, %client, %key ) +{ + // Don't send any options if a vote is already running: + if ( %game.scheduleVote $= "" ) + { + // First send the common options: + DefaultGame::sendGameVoteMenu( %game, %client, %key ); + + if(!%client.isAdmin) + { + // Now send the Hunters-specific options: + if ( %game.greedMode ) + messageClient( %client, 'MsgVoteItem', "", %key, 'VoteGreedMode', 'disable greed mode', 'Vote Disable GREED Mode' ); + else + messageClient( %client, 'MsgVoteItem', "", %key, 'VoteGreedMode', 'enable greed mode', 'Vote Enable GREED Mode' ); + + if ( %game.HoardMode ) + messageClient( %client, 'MsgVoteItem', "", %key, 'VoteHoardMode', 'disable hoard mode', 'Vote Disable HOARD Mode' ); + else + messageClient( %client, 'MsgVoteItem', "", %key, 'VoteHoardMode', 'enable hoard mode', 'Vote Enable HOARD Mode' ); + } + else + { + if ( %game.greedMode ) + messageClient( %client, 'MsgVoteItem', "", %key, 'VoteGreedMode', 'disable greed mode', 'Disable GREED Mode' ); + else + messageClient( %client, 'MsgVoteItem', "", %key, 'VoteGreedMode', 'enable greed mode', 'Enable GREED Mode' ); + + if ( %game.HoardMode ) + messageClient( %client, 'MsgVoteItem', "", %key, 'VoteHoardMode', 'disable hoard mode', 'Disable HOARD Mode' ); + else + messageClient( %client, 'MsgVoteItem', "", %key, 'VoteHoardMode', 'enable hoard mode', 'Enable HOARD Mode' ); + } + } +} + +function HuntersGame::voteGreedMode( %game, %admin, %player ) +{ + %cause = ""; + %setto = ""; + if ( %admin ) + { + if ( %game.greedMode ) + { + messageAll( 'AdminDisableGreedMode', '\c2The Admin has disabled GREED mode.~wfx/misc/hunters_greed.wav' ); + %game.greedMode = false; + %setto = "disabled"; + } + else + { + messageAll( 'AdminEnableGreedMode', '\c2The Admin has enabled GREED mode.~wfx/misc/hunters_greed.wav' ); + %game.greedMode = true; + %setto = "enabled"; + } + %cause = "(admin)"; + } + else + { + %totalVotes = %game.totalVotesFor + %game.totalVotesAgainst; + if ( %totalVotes > 0 && ( %game.totalVotesFor / %totalVotes ) > 0.7 ) + { + if ( %game.greedMode ) + { + messageAll( 'MsgVotePassed', '\c2GREED mode was disabled by vote.~wfx/misc/hunters_greed.wav' ); + %game.greedMode = false; + %setto = "disabled"; + } + else + { + messageAll( 'MsgVotePassed', '\c2GREED mode was enabled by vote.~wfx/misc/hunters_greed.wav' ); + %game.greedMode = true; + %setto = "enabled"; + } + %cause = "(vote)"; +// alxPlay(VotePassSound, 0, 0, 0); + } + else + { + if ( %game.greedMode ) + messageAll( 'MsgVoteFailed', '\c2Disable GREED mode vote did not pass, %1 to %2.', %game.totalVotesFor, %game.totalVotesAgainst ); + else + messageAll( 'MsgVoteFailed', '\c2Enable GREED mode vote did not pass, %1 to %2.', %game.totalVotesFor, %game.totalVotesAgainst ); +// alxPlay(VoteNotPassSound, 0, 0, 0); + } + } + + //send the global message + messageAll('MsgHuntGreedStatus', "", %game.greedMode, %game.GreedMinFlags); + if(%setto !$= "") + logEcho("greed mode "@%setto SPC %cause); + + //store the result + if (%game.teamMode) + $Host::TeamHuntersGreedMode = %game.greedMode; + else + $Host::HuntersGreedMode = %game.greedMode; +} + +function HuntersGame::voteHoardMode( %game, %admin, %player ) +{ + %cause = ""; + %setto = ""; + + if ( %admin ) + { + if ( %game.HoardMode ) + { + messageAll( 'AdminDisableHoardMode', '\c2The Admin has disabled HOARD mode.' ); + %game.HoardMode = false; + %setto = "disabled"; + } + else + { + messageAll( 'AdminEnableHoardMode', '\c2The Admin has enabled HOARD mode.' ); + %game.HoardMode = true; + %setto = "enabled"; + } + %cause = "(admin)"; + } + else + { + %totalVotes = %game.totalVotesFor + %game.totalVotesAgainst; + if ( %totalVotes > 0 && ( %game.totalVotesFor / %totalVotes ) > 0.7 ) + { + if ( %game.HoardMode ) + { + messageAll( 'MsgVotePassed', '\c2HOARD mode was disabled by vote.' ); + %game.HoardMode = false; + %setto = "disabled"; + } + else + { + messageAll( 'MsgVotePassed', '\c2HOARD mode was enabled by vote.' ); + %game.HoardMode = true; + %setto = "enabled"; + } + %cause = "(vote)"; +// alxPlay(VotePassSound, 0, 0, 0); + } + else + { + if ( %game.HoardMode ) + messageAll( 'MsgVoteFailed', '\c2Disable HOARD mode vote did not pass, %1 to %2.', %game.totalVotesFor, %game.totalVotesAgainst ); + else + messageAll( 'MsgVoteFailed', '\c2Enable HOARD mode vote did not pass, %1 to %2.', %game.totalVotesFor, %game.totalVotesAgainst ); +// alxPlay(VoteNotPassSound, 0, 0, 0); + } + } + + //send the global message + %curTimeLeftMS = ($Host::TimeLimit * 60 * 1000) + $missionStartTime - getSimTime(); + messageAll('MsgHuntHoardStatus', "", %game.HoardMode, $Host::TimeLimit, %curTimeLeftMS, %game.HoardStartTime, %game.HoardDuration); + if(%setto !$= "") + logEcho("hoard mode "@%setto SPC %cause); + + //store the result + if (%game.teamMode) + $Host::TeamHuntersHoardMode = %game.HoardMode; + else + $Host::HuntersHoardMode = %game.HoardMode; +} + +function HuntersGame::voteChangeTimeLimit( %game, %admin, %newLimit ) +{ + %oldTimeLimit = $Host::TimeLimit; + DefaultGame::voteChangeTimeLimit(%game, %admin, %newLimit); + + //if the time limit changed, this will affect hoard mode: + if ($Host::TimeLimit != %oldTimeLimit) + { + %game.setupHoardCountdown(); + } +} + +function createDroppedFlag(%data, %value, %player, %game) +{ + %client = %player.client; + %playerPos = %player.getWorldBoxCenter(); + + // create a flag and throw it + %droppedflag = new Item() { + position = %playerPos; + rotation = "0 0 1 " @ (getRandom() * 360); + scale = "1 1 1"; + dataBlock = %data; + collideable = "0"; + static = "0"; + rotate = "0"; + team = "0"; + }; + $FlagGroup.add(%droppedflag); + %droppedFlag.value = %value; + + // set the flags target (for proper skin) + %droppedFlag.setTarget(%data.target); + + //throw the flag randomly away from the body + if (%client.isDead) + { + %vec = (-1.0 + getRandom() * 2.0) SPC (-1.0 + getRandom() * 2.0) SPC getRandom(); + %vec = VectorScale(%vec, 1000 + (getRandom() * 500)); + + // Add player's velocity + %vec = vectorAdd(%vec, %player.getVelocity()); + } + + //else if the player is Out of bounds, throw them in the direction of the nexus + else if (%client.outOfBounds) + { + %towardsNexusVec = VectorSub(%game.nexus.position, %player.position); + %towardsNexusVec = getWord(%towardsNexusVec, 0) SPC getWord(%towardsNexusVec, 1) SPC "0"; + %towardsNexusVec = VectorNormalize(%towardsNexusVec); + + //add a little noise + %vec = getWord(%towardsNexusVec, 0) + (-0.3 + getRandom() * 0.6) SPC + getWord(%towardsNexusVec, 1) + (-0.3 + getRandom() * 0.6) SPC + getWord(%towardsNexusVec, 2); + %vec = VectorScale(%vec, 1000 + (getRandom() * 500)); + } + + //else throw them more or less in the direction the player was facing... + else + { + %playerFacingVec = MatrixMulVector("0 0 0 " @ getWords(%client.player.getTransform(), 3, 6), "0 1 0"); + %playerFacingVec = VectorNormalize(%playerFacingVec); + + //add a little noise + %vec = getWord(%playerFacingVec, 0) + (-0.3 + getRandom() * 0.6) SPC + getWord(%playerFacingVec, 1) + (-0.3 + getRandom() * 0.6) SPC + getWord(%playerFacingVec, 2); + %vec = VectorScale(%vec, 1000 + (getRandom() * 500)); + + // Add player's velocity + %vec = vectorAdd(%vec, %player.getVelocity()); + } + + %droppedflag.applyImpulse(%playerPos, %vec); + %droppedflag.setCollisionTimeout(%player); + schedule(%game.flagLifeTimeMS, %droppedflag, "HuntersStartFlagTimeOut", %droppedflag); +} + +function HuntersGame::throwFlags(%game, %player) +{ + %client = %player.client; + + //find out how many flags to drop + if (%client.isDead) + %numFlags = %client.flagCount; + else + %numFlags = %client.flagCount - 1; + + if (%numFlags <= 0) + return; + //send the flags message right away... + if (isEventPending(%client.flagMsgPending)) + { + cancel(%client.flagMsgPending); + %game.sendFlagCountMessage(%client); + } + + %numFlagsToDrop = %numFlags; + + //reset the count (which doesn't matter if player is dead) + %client.flagCount = 1; + %client.couldSetRecord = false; + + //drop the flags + %flagIncrement = 1; + %db[1] = HuntersFlag1; + %db[2] = HuntersFlag2; + %db[4] = HuntersFlag4; + %db[8] = HuntersFlag8; + + %i = 0; + while (%i < %numFlagsToDrop) + { + for (%j = 0; %j < 5; %j++) + { + %numFlagsLeft = %numFlagsToDrop - %i; + if (%numFlagsLeft >= %flagIncrement) + { + createDroppedFlag(%db[%flagIncrement], %flagIncrement, %player, %game); + %i += %flagIncrement; + } + else + { + // cleanup + if (%numFlagsLeft >= 8) + { + createDroppedFlag(%db[8], 8, %player, %game); + %i += 8; + %numFlagsLeft -= 8; + } + if (%numFlagsLeft >= 4) + { + createDroppedFlag(%db[4], 4, %player, %game); + %i += 4; + %numFlagsLeft -= 4; + } + if (%numFlagsLeft >= 2) + { + createDroppedFlag(%db[2], 2, %player, %game); + %i += 2; + %numFlagsLeft -= 2; + } + if (%numFlagsLeft >= 1) + { + createDroppedFlag(%db[1], 1, %player, %game); + %i += 1; + %numFlagsLeft -= 1; + } + + if (%i != %numFlagsToDrop || %numFlagsLeft != 0) + { + error("Error, missing a flag!"); + } + break; + } + } + + if (%flagIncrement < 8) + %flagIncrement = %flagIncrement * 2; + } + + //yard sale! + if (%numFlags >= %game.yardSaleMin) + { + messageAll('MsgHuntYardSale', '\c2YARD SALE!!!~wfx/misc/yardsale.wav'); + + //create a waypoint at player's location... + %yardWaypoint = new WayPoint() + { + position = %player.position; + rotation = "1 0 0 0"; + scale = "1 1 1"; + name = "YARD SALE!"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + team = "0"; + }; + + //add the waypoint to the cleanup group + MissionCleanup.add(%yardWaypoint); + $HuntersYardSaleSet.add(%yardWaypoint); + schedule(30000, %yardWaypoint, "HuntersYardSaleTimeOut", %yardWaypoint); + } + + //remove any mounted flag from the player + %player.unMountImage($FlagSlot); + + //update the client's hud + messageClient(%client, 'MsgHuntYouHaveFlags', "", 0); + + //new tracking - *everyone* automatically tracks the "flag hoarder" if they have at least 15 flags + %game.updateFlagHoarder(); +} + +function HuntersGame::dropFlag(%game, %player) +{ + //first throw the flags + %game.throwFlags(%player); + + //send the messages + if (%numFlags == 1) + { + messageAllExcept(%client, -1, 'MsgHuntPlayerDroppedFlags', '\c0%1 dropped 1 flag.', %client.name, 1); + messageClient(%client, 'MsgHuntYouDroppedFlags', '\c0You dropped 1 flag.', 1); + } + else if (%numFlags > 1) + { + messageAllExcept(%client, -1, 'MsgHuntPlayerDroppedFlags', '\c0%1 dropped %2 flags.', %client.name, %numFlags); + messageClient(%client, 'MsgHuntYouDroppedFlags', '\c0You dropped %1 flags.', %numFlags); + } + logEcho(%client.nameBase@" (pl "@%player@"/cl "@%client@") dropped "@%numFlags@" flags"); +} + +function HuntersGame::enterMissionArea(%game, %playerData, %player) +{ + %client = %player.client; + %client.outOfBounds = false; + cancel(%client.oobSched); + messageClient(%player.client, 'MsgEnterMissionArea', '\c1You are back in the mission area.'); + logEcho(%player.client.nameBase@" (pl "@%player@"/cl "@%player.client@") entered mission area"); + cancel(%player.alertThread); +} + +function HuntersGame::leaveMissionArea(%game, %playerData, %player) +{ + // strip flags and throw them back into the mission area + %client = %player.client; + %client.outOfBounds = true; + if (%player.client.flagCount > 1) + messageClient(%player.client, 'MsgLeaveMissionArea', '\c1You have left the mission area and will lose your flags!~wfx/misc/warning_beep.wav'); + else + messageClient(%player.client, 'MsgLeaveMissionArea', '\c1You have left the mission area.~wfx/misc/warning_beep.wav'); + + %client.oobSched = %game.schedule(%game.oobThrowFlagsDelayMS, "outOfBoundsThrowFlags", %client); + logEcho(%player.client.nameBase@" (pl "@%player@"/cl "@%player.client@") left mission area"); +} + +function HuntersGame::outOfBoundsThrowFlags(%game, %client) +{ + %player = %client.player; + if (!%client.outOfBounds) + return; + + if (%client.flagCount > 1) + { + %game.throwFlags(%player); + messageClient(%player.client, 'MsgLeaveMissionArea', '\c1You are out of the mission area and have lost your flags!~wfx/misc/flag_taken.wav'); + } + + //set the next schedule check + %client.oobSched = %game.schedule(%game.oobThrowFlagsDelayMS, "outOfBoundsThrowFlags", %client); +} + +function HuntersGame::onEnterTrigger(%game, %triggerName, %data, %obj, %colobj) +{ + //schedule a warning in 10 seconds + %client = %colobj.client; + %client.campingThread = %game.schedule(game.nexusCampingTime, "CampingDamage", %client, true); +} + +function HuntersGame::onLeaveTrigger(%game, %triggerName, %data, %obj, %colobj) +{ + %client = %colobj.client; + cancel(%client.campingThread); +} + +function HuntersGame::CampingDamage(%game, %client, %firstWarning) +{ + //make sure we're still alive... + %player = %client.player; + if (!isObject(%player) || %player.getState() $= "Dead") + return; + + //if the match hasn't yet started, don't warn or apply damage yet... + if (!$MatchStarted) + { + %client.campingThread = %game.schedule(game.nexusCampingTime / 2, "CampingDamage", %client, true); + } + else if (%firstWarning) + { + messageClient(%client, 'MsgHuntersNoCampZone', '\c2No camping near the Nexus.', 1); + %client.campingThread = %game.schedule(game.nexusCampingTime / 2, "CampingDamage", %client, false); + } + else + { + %player.setDamageFlash(0.1); + %player.damage(0, %player.position, 0.05, $DamageType::NexusCamping); + %client.campingThread = %game.schedule(1000, "CampingDamage", %client, false); + } + +} + +function HuntersGame::updateScoreHud(%game, %client, %tag) +{ + //tricky stuff here... use two columns if we have more than 15 clients... + %numClients = $TeamRank[0, count]; + if (%numClients > $ScoreHudMaxVisible) + %numColumns = 2; + + // Clear the header: + messageClient( %client, 'SetScoreHudHeader', "", "" ); + + // Send header: + if ( %numColumns == 2 ) + messageClient( %client, 'SetScoreHudSubheader', "", '\tPLAYER\tSCORE\tFLAGS\tPLAYER\tSCORE\tFLAGS' ); + else + messageClient( %client, 'SetScoreHudSubheader', "", '\tPLAYER\tSCORE\tFLAGS' ); + + //find out who has the most flags + %maxFlagsClient = -1; + %maxFlags = -1; + for (%i = 0; %i < %numClients; %i++) + { + %cl = $TeamRank[0, %i]; + if (%cl.flagCount > %maxFlags) + { + %maxFlags = %cl.flagCount - 1; + %maxFlagsClient = %cl; + } + } + + //if no one has any flags, don't hilite anyone... + if (%maxFlags <= 0) + %maxFlagsClient = -1; + + %countMax = %numClients; + if ( %countMax > ( 2 * $ScoreHudMaxVisible ) ) + { + if ( %countMax & 1 ) + %countMax++; + %countMax = %countMax / 2; + } + else if ( %countMax > $ScoreHudMaxVisible ) + %countMax = $ScoreHudMaxVisible; + + for (%index = 0; %index < %countMax; %index++) + { + //get the client info + %col1Client = $TeamRank[0, %index]; + %col1ClientScore = %col1Client.score $= "" ? 0 : %col1Client.score; + %col1ClientFlags = %col1Client.flagCount - 1; + if (%col1ClientFlags <= 0) + %col1ClientFlags = ""; + %col1Style = ""; + if ( %col1Client == %maxFlagsClient ) + %col1Style = ""; + else if ( %col1Client == %client ) + %col1Style = ""; + else if ( %col1Client == %client.trackClient ) + %col1Style = ""; + + //see if we have two columns + if (%numColumns == 2) + { + %col2Client = ""; + %col2ClientScore = ""; + %col2ClientFlags = ""; + %col2Style = ""; + + //get the column 2 client info + %col2Index = %index + %countMax; + if (%col2Index < %numClients) + { + %col2Client = $TeamRank[0, %col2Index]; + %col2ClientScore = %col2Client.score $= "" ? 0 : %col2Client.score; + %col2ClientFlags = %col2Client.flagCount - 1; + if (%col2ClientFlags <= 0) + %col2ClientFlags = ""; + if ( %col2Client == %maxFlagsClient ) + %col2Style = ""; + else if ( %col2Client == %client ) + %col2Style = ""; + else if ( %col2Client == %client.trackClient ) + %col2Style = ""; + } + } + + //if the client is not an observer, send the message + if (%client.team != 0) + { + if ( %numColumns == 2 ) + messageClient( %client, 'SetLineHud', "", %tag, %index, '%7\t%1%2%3%8%4%5%6', + %col1Client.name, %col1ClientScore, %col1ClientFlags, %col2Client.name, %col2ClientScore, %col2ClientFlags, %col1Style, %col2Style ); + else + messageClient( %client, 'SetLineHud', "", %tag, %index, '%4\t%1%2%3', + %col1Client.name, %col1ClientScore, %col1ClientFlags, %col1Style ); + } + + //else for observers, create an anchor around the player name so they can be observed + else + { + if ( %numColumns == 2 ) + messageClient( %client, 'SetLineHud', "", %tag, %index, '%7\t%1%2%3%8%4%5%6', + %col1Client.name, %col1ClientScore, %col1ClientFlags, + %col2Client.name, %col2ClientScore, %col2ClientFlags, + %col1Style, %col2Style, %col1Client, %col2Client); + else + messageClient( %client, 'SetLineHud', "", %tag, %index, '%4\t%1%2%3', + %col1Client.name, %col1ClientScore, %col1ClientFlags, %col1Style, %col1Client ); + } + } + + //clear the rest of Hud so we don't get old lines hanging around... + messageClient( %client, 'ClearHud', "", %tag, %index ); +} + +function HuntersGame::sendDebriefing( %game, %client ) +{ + // Mission result: + if ( $TeamRank[0, 0].score > 0 ) + messageClient( %client, 'MsgDebriefResult', "", '%1 wins with a score of %2!', $TeamRank[0, 0].name, $TeamRank[0, 0].score ); + else + messageClient( %client, 'MsgDebriefResult', "", 'Nobody wins!' ); + + + if ( %game.highestFlagReturnName !$= "" ) + messageClient( %client, 'MsgDebriefResult', "", '%1 had the highest return count with %2 flags!', %game.highestFlagReturnName, %game.highestFlagReturnCount ); + + if ( $HuntersRecords::Count[$currentMission] !$= "" && $HuntersRecords::Name[$currentMission] !$= "" ) + messageClient( %client, 'MsgDebriefResult', "", '%1 holds the record with a return count of %2 flags!', $HuntersRecords::Name[$currentMission], $HuntersRecords::Count[$currentMission] ); + + if ( %game.greedFlagName !$= "" ) + messageClient( %client, 'MsgDebriefResult', "", '%1 gets the honorary greed award for dropping %2 flags!', %game.greedFlagName, %game.greedFlagCount ); + + // Player scores: + messageClient( %client, 'MsgDebriefAddLine', "", 'PLAYER\tSCORE\tKILLS' ); + %count = $TeamRank[0, count]; + for ( %i = 0; %i < %count; %i++ ) + { + %cl = $TeamRank[0, %i]; + if ( %cl.score $= "" ) + %score = 0; + else + %score = %cl.score; + if ( %cl.kills $= "" ) + %kills = 0; + else + %kills = %cl.kills; + messageClient( %client, 'MsgDebriefAddLine', "", '\t%1\t%2\t%3', %cl.name, %score, %kills ); + } + + // Show observers: + %count = ClientGroup.getCount(); + %header = false; + for ( %i = 0; %i < %count; %i++ ) + { + %cl = ClientGroup.getObject( %i ); + if ( %cl.team <= 0 ) + { + if ( !%header ) + { + messageClient( %client, 'MsgDebriefAddLine', "", '\nOBSERVERS\tSCORE' ); + %header = true; + } + + %score = %cl.score $= "" ? 0 : %cl.score; + messageClient( %client, 'MsgDebriefAddLine', "", '\t%1\t%2', %cl.name, %score ); + } + } +} + +function HuntersGame::applyConcussion(%game, %player) +{ + //%game.dropFlag( %player ); +} diff --git a/base/scripts/LaunchLanGui.cs b/base/scripts/LaunchLanGui.cs new file mode 100644 index 0000000..e0b17b0 --- /dev/null +++ b/base/scripts/LaunchLanGui.cs @@ -0,0 +1,419 @@ +//-------------------------------------------------------- +function QueryServers( %searchCriteria ) +{ + GMJ_Browser.lastQuery = %searchCriteria; + LaunchGame( "JOIN" ); +} + +//-------------------------------------------------------- +function QueryOnlineServers() +{ + QueryServers("Master"); +} + +//-------------------------------------------------------- +// Launch gui functions +//-------------------------------------------------------- +function PlayOffline() +{ + $FirstLaunch = true; + setNetPort(0); + $PlayingOnline = false; + Canvas.setContent(LaunchGui); +} + +//-------------------------------------------------------- +function OnlineLogIn() +{ + $FirstLaunch = true; + setNetPort(0); + $PlayingOnline = true; + FilterEditGameType.clear(); + FilterEditMissionType.clear(); + queryMasterGameTypes(); + Canvas.setContent(LaunchGui); +} + +//-------------------------------------------------------- +function LaunchToolbarMenu::onSelect(%this, %id, %text) +{ + switch(%id) + { + case 0: + LaunchGame(); + case 1: // Start Training Mission + LaunchTraining(); + case 2: + LaunchNews(); + case 3: + LaunchForums(); + case 4: + LaunchEmail(); + case 5: // Join Chat Room + Canvas.pushDialog(JoinChatDlg); + case 6: + LaunchBrowser(); + case 7: // Options + Canvas.pushDialog(OptionsDlg); + //case 8: // Play Recording + // Canvas.pushDialog(RecordingsDlg); + case 9: // Quit + LaunchTabView.closeAllTabs(); + quit(); + //case 10: // Log Off + // LaunchTabView.closeAllTabs(); + // PlayOffline(); + //case 11: // Log On + // LaunchTabView.closeAllTabs(); + // OnlineLogIn(); + case 12: + LaunchCredits(); + } +} + +//-------------------------------------------------------- +function LaunchToolbarDlg::onWake(%this) +{ + // Play the shell hum: + if ( $HudHandle['shellScreen'] $= "" ) + $HudHandle['shellScreen'] = alxPlay( ShellScreenHumSound, 0, 0, 0 ); + + LaunchToolbarMenu.clear(); + + if ( $PlayingOnline ) + { + LaunchToolbarMenu.add( 0, "GAME" ); + LaunchToolbarMenu.add( 2, "NEWS" ); + LaunchToolbarMenu.add( 3, "FORUMS" ); + LaunchToolbarMenu.add( 4, "EMAIL" ); + LaunchToolbarMenu.add( 5, "CHAT" ); + LaunchToolbarMenu.add( 6, "BROWSER" ); + } + else + { + LaunchToolbarMenu.add( 1, "TRAINING" ); + LaunchToolbarMenu.add( 0, "LAN GAME" ); + } + + LaunchToolbarMenu.addSeparator(); + LaunchToolbarMenu.add( 7, "SETTINGS" ); +// LaunchToolbarMenu.add( 8, "RECORDINGS" ); + LaunchToolbarMenu.add( 12, "CREDITS" ); + + LaunchToolbarMenu.addSeparator(); + +// if ( $PlayingOnline ) +// LaunchToolbarMenu.add( 10, "LOG OFF" ); +// else +// LaunchToolbarMenu.add( 11, "LOG ON" ); + LaunchToolbarMenu.add( 9, "QUIT" ); + + LaunchToolbarCloseButton.setVisible( LaunchTabView.tabCount() > 0 ); +} + +//---------------------------------------------------------------------------- +// Launch Tab Group functions: +//---------------------------------------------------------------------------- +function OpenLaunchTabs( %gotoWarriorSetup ) +{ + if ( LaunchTabView.tabCount() > 0 || !$FirstLaunch ) + return; + + $FirstLaunch = ""; + + // Set up all of the launch bar tabs: + if ( $PlayingOnline ) + { + LaunchTabView.addLaunchTab( "GAME", GameGui ); + LaunchTabView.addLaunchTab( "NEWS", NewsGui ); + LaunchTabView.addLaunchTab( "FORUMS", ForumsGui ); + LaunchTabView.addLaunchTab( "EMAIL", EmailGui ); + LaunchTabView.addLaunchTab( "CHAT", ChatGui ); + LaunchTabView.addLaunchTab( "BROWSER", TribeAndWarriorBrowserGui ); + + switch$ ( $pref::Shell::LaunchGui ) + { + case "News": %launchGui = NewsGui; + case "Forums": %launchGui = ForumsGui; + case "Email": %launchGui = EmailGui; + case "Chat": %launchGui = ChatGui; + case "Browser": %launchGui = TribeAndWarriorBrowserGui; + default: %launchGui = GameGui; + } + } + else + { + LaunchTabView.addLaunchTab( "TRAINING", TrainingGui ); + LaunchTabView.addLaunchTab( "LAN GAME", GameGui ); + %launchGui = TrainingGui; + } + + if ( %gotoWarriorSetup ) + LaunchGame( "WARRIOR" ); + else + LaunchTabView.viewTab( "", %launchGui, 0 ); +} + +//-------------------------------------------------------- +function LaunchTabView::addLaunchTab( %this, %text, %gui ) +{ + %tabCount = %this.tabCount(); + %this.gui[%tabCount] = %gui; + %this.key[%tabCount] = 0; + %this.addTab( %tabCount, %text ); +} + +//-------------------------------------------------------- +function LaunchTabView::onSelect( %this, %id, %text ) +{ + // Ignore the ID - it can't be trusted. + %tab = %this.getSelectedTab(); + + Canvas.setContent( %this.gui[%tab] ); + %this.gui[%tab].setKey( %this.key[%tab] ); + %this.lastTab = %tab; +} + +//-------------------------------------------------------- +function LaunchTabView::viewLastTab( %this ) +{ + if ( %this.tabCount() == 0 || %this.lastTab $= "" ) + return; + + %this.setSelectedByIndex( %this.lastTab ); +} + +//-------------------------------------------------------- +function LaunchTabView::viewTab( %this, %text, %gui, %key ) +{ + %tabCount = %this.tabCount(); + for ( %tab = 0; %tab < %tabCount; %tab++ ) + if ( %this.gui[%tab] $= %gui && %this.key[%tab] $= %key ) + break; + + if ( %tab == %tabCount ) + { + // Add a new tab: + %this.gui[%tab] = %gui; + %this.key[%tab] = %key; + // WARNING! This id may not be unique and therefore should + // not be relied on! Use index instead! + %this.addTab( %tab, %text ); + } + + if ( %this.getSelectedTab() != %tab ) + %this.setSelectedByIndex( %tab ); +} + +//-------------------------------------------------------- +function LaunchTabView::closeCurrentTab( %this ) +{ + %tab = %this.getSelectedTab(); + %this.closeTab( %this.gui[%tab], %this.key[%tab] ); +} + +//-------------------------------------------------------- +function LaunchTabView::closeTab( %this, %gui, %key ) +{ + %tabCount = %this.tabCount(); + for ( %tab = 0; %tab < %tabCount; %tab++ ) + { + if( %this.gui[%tab] $= %gui && %this.key[%tab] $= %key ) + break; + } + + if ( %tab == %tabCount ) + return; + + for( %i = %tab; %i < %tabCount; %i++ ) + { + %this.gui[%i] = %this.gui[%i+1]; + %this.key[%i] = %this.key[%i+1]; + } + + %this.removeTabByIndex( %tab ); + %gui.onClose( %key ); + + if ( %tabCount == 1 ) + { + %this.lastTab = ""; + Canvas.setContent( LaunchGui ); + } +} + +//-------------------------------------------------------- +function LaunchTabView::closeAllTabs( %this ) +{ + %tabCount = %this.tabCount(); + for ( %i = 0; %i < %tabCount; %i++ ) + { + %this.gui[%i].onClose( %this.key[%i] ); + %this.gui[%i] = ""; + %this.key[%i] = ""; + } + + %this.clear(); +} + +//---------------------------------------------------------------------------- +// LaunchGui functions: +//---------------------------------------------------------------------------- +function LaunchGui::onAdd(%this) +{ + %this.getWarrior = true; +} + +//---------------------------------------------------------------------------- +function LaunchGui::onWake(%this) +{ + if ( !Canvas.isCursorOn() ) + CursorOn(); + $enableDirectInput = "0"; + disableDirectInput(); + Canvas.pushDialog(LaunchToolbarDlg); + if ( !$FirstLaunch ) + LaunchTabView.viewLastTab(); + + checkNamesAndAliases(); +} + +//---------------------------------------------------------------------------- +function LaunchGui::onSleep(%this) +{ + //alxStop($HudHandle['shellScreen']); + Canvas.popDialog( LaunchToolbarDlg ); +} + +//---------------------------------------------------------------------------- +// Login/Warrior creation functions: +//--------------------------------------------------------------------------- +function CreateWarriorDlg::onAdd( %this ) +{ + %this.created = ""; +} + +//---------------------------------------------------------------------------- +function CreateWarriorDlg::onWake( %this ) +{ + CreateWarriorText.setText( "Enter your warrior name.\nThis is the name by which you will be represented on forums, chat, and in e-mail." + @ " It is also the name you will use when becoming a member of a tribe." ); + CreateWarriorBtn.setActive( false ); + CreateWarriorNameEdit.schedule( 100, makeFirstResponder, 1 ); +} + +//---------------------------------------------------------------------------- +function CreateWarriorDlg::onLine( %this, %line, %key ) +{ + //error( "** line = \"" @ %line @ "\" **" ); + if ( %key != %this.key ) + return; + + if ( %this.checkState $= "createplayer" ) + { + if ( getField( %line, 0 ) $= "0" ) + %this.checkState = "getquad"; + else + { + MessageBoxOK( "FAILED", getField( %line, 1 ), "resetCreateWarrior();" ); + %this.checkState = ""; + } + } + else if ( %this.checkState $= "getquad" ) + { + %this.created = true; + CloseMessagePopup(); + MessageBoxOK( "SUCCESS", "You successfully created the new warrior \"" @ $CreateAccountWarriorName @ "\".", "checkNamesAndAliases();" ); + } +} + +//---------------------------------------------------------------------------- +function resetCreateWarrior() +{ + $CreateAccountWarriorName = ""; + Canvas.pushDialog( CreateWarriorDlg ); +} + +//---------------------------------------------------------------------------- +function CreateWarriorDlg::connectionTerminated( %this, %key ) +{ + if ( %key != %this.key ) + return; +} + +//---------------------------------------------------------------------------- +function CreateWarriorNameEdit::checkValidPlayerName( %this ) +{ + %name = strToPlayerName( %this.getValue() ); + %this.setValue( %name ); + + CreateWarriorBtn.setActive( strlen( stripTrailingSpaces( %name ) ) > 2 ); +} + +//---------------------------------------------------------------------------- +function LoginCreateWarrior() +{ + CreateWarriorNameEdit.checkValidPlayerName(); + if ( CreateWarriorBtn.isActive() ) + { + Canvas.popDialog(CreateWarriorDlg); + MessagePopup( "PLEASE WAIT", "Creating warrior..." ); + CreateWarriorDlg.key = LaunchGui.key++; + CreateWarriorDlg.checkState = "createplayer"; + + HTTPSecureRequest("update_createplayer", $CreateAccountWarriorName, CreateWarriorDlg, CreateWarriorDlg.key); + } +} + +//---------------------------------------------------------------------------- +function checkNamesAndAliases() +{ + %gotoWarriorSetup = false; + if ( $PlayingOnline ) + { + // When first launching, make sure we have a valid warrior: + if ( LaunchGui.getWarrior ) + { + %cert = WONGetAuthInfo(); + if ( %cert $= "" && !CreateWarriorDialog.created ) + { + // THIS WILL GO INTO THE CREATE ACCOUNT PROCESS SOON! + // Must create our player nickname: + Canvas.pushDialog( CreateWarriorDlg ); + return; + } + else + { + LaunchGui.getWarrior = ""; + if ( %cert $= "" ) + %warrior = $CreateAccountWarriorName; + else + %warrior = getField( %cert, 0 ); + + %warriorIdx = -1; + for ( %i = 0; %i < $pref::Player::count; %i++ ) + { + if ( %warrior $= getField( $pref::Player[%i], 0 ) ) + { + %warriorIdx = %i; + break; + } + } + + if ( %warriorIdx == -1 ) + { + // Create new warrior: + $pref::Player[$pref::Player::Count] = %warrior @ "\tHuman Male\tbeagle\tMale1"; + $pref::Player::Current = $pref::Player::Count; + $pref::Player::Count++; + %gotoWarriorSetup = true; + } + } + } + } + else if ( $pref::Player::Count == 0 ) + { + %gotoWarriorSetup = true; + } + + OpenLaunchTabs( %gotoWarriorSetup ); +} diff --git a/base/scripts/LobbyGui.cs b/base/scripts/LobbyGui.cs new file mode 100644 index 0000000..401eedb --- /dev/null +++ b/base/scripts/LobbyGui.cs @@ -0,0 +1,591 @@ +//------------------------------------------------------------------------------ +// +// LobbyGui.cs +// +//------------------------------------------------------------------------------ + +$InLobby = false; + +//------------------------------------------------------------------------------ +function LobbyGui::onAdd( %this ) +{ + // Add the Player popup menu: + new GuiControl(LobbyPlayerActionDlg) { + profile = "GuiModelessDialogProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + + new ShellPopupMenu( LobbyPlayerPopup ) { + profile = "ShellPopupProfile"; + position = "0 0"; + extent = "0 0"; + minExtent = "0 0"; + visible = "1"; + maxPopupHeight = "200"; + noButtonStyle = "1"; + }; + }; +} + +//------------------------------------------------------------------------------ +function LobbyGui::onWake( %this ) +{ + if ( !%this.initialized ) + { + LobbyPlayerList.setSortColumn( $pref::Lobby::SortColumnKey ); + LobbyPlayerList.setSortIncreasing( $pref::Lobby::SortInc ); + + %this.initialized = true; + } + + $InLobby = true; + %this.mouseOn = Canvas.isCursorOn(); + if ( !%this.mouseOn ) + CursorOn(); + + //pop any key maps + moveMap.pop(); + if ( isObject( passengerkeys ) ) + passengerKeys.pop(); + flyingCameraMove.pop(); + + $enableDirectInput = "0"; + disableDirectInput(); + + LobbyMessageVector.attach(HudMessageVector); + LobbyMessageScroll.scrollToBottom(); + updateLobbyPlayerList(); + + LobbyServerName.setText( $clServerName ); + + %headerStyle = ""; + %statusText = "" @ %headerStyle @ "MISSION TYPE:" SPC $clMissionType + NL "" @ %headerStyle @ "MISSION:" SPC $clMissionName + NL "" @ %headerStyle @ "OBJECTIVES:"; + + for ( %line = 0; %this.objLine[%line] !$= ""; %line++ ) + %statusText = %statusText NL "* " @ %this.objLine[%line]; + + LobbyStatusText.setText( %statusText ); + + fillLobbyVoteMenu(); +} + +//------------------------------------------------------------------------------ +function LobbyGui::onSleep( %this ) +{ + if ( %this.playerDialogOpen ) + LobbyPlayerPopup.forceClose(); + + LobbyVoteMenu.clear(); + LobbyVoteMenu.mode = ""; + LobbyCancelBtn.setVisible( false ); + LobbyStatusText.setText( "" ); + if ( !%this.mouseOn ) + CursorOff(); + %this.mouseOn = ""; + $InLobby = false; +} + +//------------------------------------------------------------------------------ +function lobbyDisconnect() +{ + MessageBoxYesNo( "CONFIRM", "Are you sure you want to leave this game?", "lobbyLeaveGame();", "" ); +} + +//------------------------------------------------------------------------------ +function lobbyLeaveGame() +{ + Canvas.popDialog( LobbyGui ); + Disconnect(); +} + +//------------------------------------------------------------------------------ +function lobbyReturnToGame() +{ + Canvas.setContent( PlayGui ); + CursorOff(); +} + +//------------------------------------------------------------------------------ +function LobbyChatEnter::onEscape( %this ) +{ + %this.setValue( "" ); +} + +//------------------------------------------------------------------------------ +function LobbyChatEnter::send( %this ) +{ + %text = %this.getValue(); + if ( %text $= "" ) + %text = " "; + commandToServer( 'MessageSent', %text ); + %this.setValue( "" ); +} + +//------------------------------------------------------------------------------ +function LobbyPlayerList::initColumns( %this ) +{ + %this.clear(); + %this.clearColumns(); + %this.addColumn( 0, " ", 24, 24, 24, "center" ); // Flag column + %this.addColumn( 6, " ", 20, 20, 20, "icon" ); // Voice Enabled column + %this.addColumn( 7, " ", 20, 20, 20, "icon" ); // Listening column + %this.addColumn( 1, "Player", $pref::Lobby::Column1, 50, 200 ); + if ( $clTeamCount > 1 ) + %this.addColumn( 2, "Team", $pref::Lobby::Column2, 50, 200 ); + %this.addColumn( 3, "Score", $pref::Lobby::Column3, 25, 200, "numeric center" ); + %this.addColumn( 4, "Ping", $pref::Lobby::Column4, 25, 200, "numeric center" ); + %this.addColumn( 5, "PL", $pref::Lobby::Column5, 25, 200, "numeric center" ); + + commandToServer( 'getScores' ); +} + +//------------------------------------------------------------------------------ +function LobbyPlayerList::onColumnResize( %this, %col, %size ) +{ + $pref::Lobby::Column[%this.getColumnKey( %col )] = %size; +} + +//------------------------------------------------------------------------------ +function LobbyPlayerList::onSetSortKey( %this, %key, %increasing ) +{ + $pref::Lobby::SortColumnKey = %key; + $pref::Lobby::SortInc = %increasing; +} + +//------------------------------------------------------------------------------ +function updateLobbyPlayerList() +{ + if ( $InLobby ) + { + // Let the server know we want an update: + commandToServer( 'getScores' ); + schedule( 4000, 0, updateLobbyPlayerList ); + } +} + +//------------------------------------------------------------------------------ +function lobbyUpdatePlayer( %clientId ) +{ + %player = $PlayerList[%clientId]; + if ( !isObject( %player ) ) + { + warn( "lobbyUpdatePlayer( " @ %clientId @ " ) - there is no client object with that id!" ); + return; + } + + // Build the text: + if ( %player.isSuperAdmin ) + %tag = "SA"; + else if ( %player.isAdmin ) + %tag = "A"; + else if ( %player.isBot ) + %tag = "B"; + else + %tag = " "; + + if ( %player.canListen ) + { + %voiceEnabled = %player.voiceEnabled ? "lobby_icon_speak" : ""; + %listening = %player.isListening ? "lobby_icon_listen" : ""; + } + else + %voiceEnabled = %listening = "shll_icon_timedout"; + + if ( $clTeamCount > 1 ) + { + if ( %player.teamId == 0 ) + %teamName = "Observer"; + else + %teamName = $clTeamScore[%player.teamId, 0] $= "" ? "-" : $clTeamScore[%player.teamId, 0]; + %text = %tag TAB %voiceEnabled TAB %listening TAB %player.name TAB %teamName TAB %player.score TAB %player.ping TAB %player.packetLoss; + } + else + %text = %tag TAB %voiceEnabled TAB %listening TAB %player.name TAB %player.score TAB %player.ping TAB %player.packetLoss; + + if ( LobbyPlayerList.getRowNumById( %clientId ) == -1 ) + LobbyPlayerList.addRow( %clientId, %text ); + else + LobbyPlayerList.setRowById( %clientId, %text ); + + if ( $InLobby ) + LobbyPlayerList.sort(); +} + +//------------------------------------------------------------------------------ +function lobbyRemovePlayer( %clientId ) +{ + LobbyPlayerList.removeRowById( %clientId ); +} + +//------------------------------------------------------------------------------ +function LobbyPlayerList::onRightMouseDown( %this, %column, %row, %mousePos ) +{ + // Open the action menu: + %clientId = %this.getRowId( %row ); + LobbyPlayerPopup.player = $PlayerList[%clientId]; + + if ( LobbyPlayerPopup.player !$= "" ) + { + LobbyPlayerPopup.position = %mousePos; + Canvas.pushDialog( LobbyPlayerActionDlg ); + LobbyPlayerPopup.forceOnAction(); + } +} + +//------------------------------------------------------------------------------ +function LobbyPlayerActionDlg::onWake( %this ) +{ + LobbyGui.playerDialogOpen = true; + fillPlayerPopupMenu(); +} + +//------------------------------------------------------------------------------ +function LobbyPlayerActionDlg::onSleep( %this ) +{ + LobbyGui.playerDialogOpen = false; +} + +//------------------------------------------------------------------------------ +function LobbyPlayerPopup::onSelect( %this, %id, %text ) +{ +//the id's for these are used in DefaultGame::sendGamePlayerPopupMenu()... +//mute: 1 +//admin: 2 +//kick: 3 +//ban: 4 +//force observer: 5 +//switch team: 6 + + switch( %id ) + { + case 1: // Mute/Unmute + togglePlayerMute(%this.player.clientId); + + case 2: // Admin + MessageBoxYesNo( "CONFIRM", "Are you sure you want to make " @ %this.player.name @ " an admin?", + "lobbyPlayerVote( VoteAdminPlayer, \"ADMIN player\", " @ %this.player.clientId @ " );" ); + + case 3: // Kick + MessageBoxYesNo( "CONFIRM", "Are you sure you want to kick " @ %this.player.name @ "?", + "lobbyPlayerVote( VoteKickPlayer, \"KICK player\", " @ %this.player.clientId @ " );" ); + + case 4: // Ban + MessageBoxYesNo( "CONFIRM", "Are you sure you want to ban " @ %this.player.name @ "?", + "lobbyPlayerVote( VoteBanPlayer, \"BAN player\", " @ %this.player.clientId @ " );" ); + + case 5: // force observer + forceToObserver(%this.player.clientId); + + case 6: //change team 1 + changePlayersTeam(%this.player.clientId, 1); + + case 7: //change team 2 + changePlayersTeam(%this.player.clientId, 2); + + case 8: + adminAddPlayerToGame(%this.player.clientId); + + case 9: // enable/disable voice communication + togglePlayerVoiceCom( %this.player ); + } + + Canvas.popDialog( LobbyPlayerActionDlg ); +} + +//------------------------------------------------------------------------------ +function LobbyPlayerPopup::onCancel( %this ) +{ + Canvas.popDialog( LobbyPlayerActionDlg ); +} + +//------------------------------------------------------------------------------ +function togglePlayerMute(%client) +{ + commandToServer( 'togglePlayerMute', %client ); +} + +//------------------------------------------------------------------------------ +function togglePlayerVoiceCom( %playerRep ) +{ + commandToServer( 'ListenTo', %playerRep.clientId, !%playerRep.voiceEnabled, true ); + //if ( !%playerRep.isSmurf ) + // update client pref +} + +//------------------------------------------------------------------------------ +function forceToObserver( %client ) +{ + commandToServer( 'forcePlayerToObserver', %client ); +} + +function AdminAddPlayerToGame(%client) +{ + CommandToServer( 'clientAddToGame', %client ); +} + +//------------------------------------------------------------------------------ +function changePlayersTeam(%client, %team) +{ + commandToServer( 'changePlayersTeam', %client, %team); +} + +//------------------------------------------------------------------------------ +function fillLobbyVoteMenu() +{ + LobbyVoteMenu.key++; + LobbyVoteMenu.clear(); + LobbyVoteMenu.tourneyChoose = 0; + commandToServer( 'GetVoteMenu', LobbyVoteMenu.key ); +} + +//------------------------------------------------------------------------------ +function fillLobbyTeamMenu() +{ + LobbyVoteMenu.key++; + LobbyVoteMenu.clear(); + LobbyVoteMenu.mode = "team"; + commandToServer( 'GetTeamList', LobbyVoteMenu.key ); + LobbyCancelBtn.setVisible( true ); +} + +//------------------------------------------------------------------------------ +function fillPlayerPopupMenu() +{ + LobbyPlayerPopup.key++; + LobbyPlayerPopup.clear(); + + LobbyPlayerPopup.add(LobbyPlayerPopup.player.name, 0); + commandToServer( 'GetPlayerPopupMenu', LobbyPlayerPopup.player.clientId, LobbyPlayerPopup.key ); +} + +//------------------------------------------------------------------------------ +function fillLobbyMissionTypeMenu() +{ + LobbyVoteMenu.key++; + LobbyVoteMenu.clear(); + LobbyVoteMenu.mode = "type"; + commandToServer( 'GetMissionTypes', LobbyVoteMenu.key ); + LobbyCancelBtn.setVisible( true ); +} + +//------------------------------------------------------------------------------ +function fillLobbyMissionMenu( %type, %typeName ) +{ + LobbyVoteMenu.key++; + LobbyVoteMenu.clear(); + LobbyVoteMenu.mode = "mission"; + LobbyVoteMenu.missionType = %typeName; + commandToServer( 'GetMissionList', LobbyVoteMenu.key, %type ); +} + +//------------------------------------------------------------------------------ +function fillLobbyTimeLimitMenu() +{ + LobbyVoteMenu.key++; + LobbyVoteMenu.clear(); + LobbyVoteMenu.mode = "timeLimit"; + commandToServer( 'GetTimeLimitList', LobbyVoteMenu.key ); + LobbyCancelBtn.setVisible( true ); +} + +//------------------------------------------------------------------------------ +addMessageCallback( 'MsgVoteItem', handleVoteItemMessage ); +addMessageCallback( 'MsgPlayerPopupItem', handlePlayerPopupMessage ); +addMessageCallback( 'MsgVotePassed', handleVotePassedMessage ); +addMessageCallback( 'MsgVoteFailed', handleVoteFailedMessage ); +addMessageCallback( 'MsgAdminPlayer', handleAdminPlayerMessage ); +addMessageCallback( 'MsgAdminAdminPlayer', handleAdminAdminPlayerMessage ); +addMessageCallback( 'MsgSuperAdminPlayer', handleSuperAdminPlayerMessage ); +addMessageCallback( 'MsgAdminForce', handleAdminForceMessage ); + +//------------------------------------------------------------------------------ +function handleAdminForceMessage() +{ + alxPlay(AdminForceSound, 0, 0, 0); +} + +//------------------------------------------------------------------------------ +function handleAdminAdminPlayerMessage( %msgType, %msgString, %client ) +{ + %player = $PlayerList[%client]; + if(%player) + %player.isAdmin = true; + alxPlay(AdminForceSound, 0, 0, 0); +} + +//------------------------------------------------------------------------------ +function handleAdminPlayerMessage( %msgType, %msgString, %client ) +{ + %player = $PlayerList[%client]; + if(%player) + %player.isAdmin = true; + alxPlay(VotePassSound, 0, 0, 0); +} + +//------------------------------------------------------------------------------ +function handleSuperAdminPlayerMessage( %msgType, %msgString, %client ) +{ + %player = $PlayerList[%client]; + if(%player) + { + %player.isSuperAdmin = true; + %player.isAdmin = true; + } + alxPlay(VotePassSound, 0, 0, 0); +} + +//------------------------------------------------------------------------------ +function handleVoteItemMessage( %msgType, %msgString, %key, %voteName, %voteActionMsg, %voteText, %sort ) +{ + if ( %key != LobbyVoteMenu.key ) + return; + + %index = LobbyVoteMenu.rowCount(); + LobbyVoteMenu.addRow( %index, detag( %voteText ) ); + if ( %sort ) + LobbyVoteMenu.sort( 0 ); + $clVoteCmd[%index] = detag( %voteName ); + $clVoteAction[%index] = detag( %voteActionMsg ); +} + +//------------------------------------------------------------------------------ +function handlePlayerPopupMessage( %msgType, %msgString, %key, %voteName, %voteActionMsg, %voteText, %popupEntryId ) +{ + if ( %key != LobbyPlayerPopup.key ) + return; + + LobbyPlayerPopup.add( " " @ detag( %voteText ), %popupEntryId ); +} + +//------------------------------------------------------------------------------ +function handleVotePassedMessage( %msgType, %msgString, %voteName, %voteText ) +{ + if ( $InLobby ) + fillLobbyVoteMenu(); + + alxPlay(VotePassSound, 0, 0, 0); +} + +//------------------------------------------------------------------------------ +function handleVoteFailedMessage( %msgType, %msgString, %voteName, %voteText ) +{ + if ( $InLobby ) + fillLobbyVoteMenu(); + + alxPlay(VoteNotPassSound, 0, 0, 0); +} + +//------------------------------------------------------------------------------ +function lobbyVote() +{ + %id = LobbyVoteMenu.getSelectedId(); + %text = LobbyVoteMenu.getRowTextById( %id ); + + switch$ ( LobbyVoteMenu.mode ) + { + case "": // Default case... + // Test for special cases: + switch$ ( $clVoteCmd[%id] ) + { + case "JoinGame": + CommandToServer( 'clientJoinGame' ); + schedule( 100, 0, lobbyReturnToGame ); + return; + + case "ChooseTeam": + fillLobbyTeamMenu(); + return; + + case "VoteTournamentMode": + LobbyVoteMenu.tourneyChoose = 1; + fillLobbyMissionTypeMenu(); + return; + + case "VoteMatchStart": + startNewVote( "VoteMatchStart", "Started the Match" ); + schedule( 100, 0, lobbyReturnToGame ); + return; + + case "MakeObserver": + commandToServer( 'ClientMakeObserver' ); + schedule( 100, 0, lobbyReturnToGame ); + return; + + case "VoteChangeMission": + fillLobbyMissionTypeMenu(); + return; + + case "VoteChangeTimeLimit": + fillLobbyTimeLimitMenu(); + return; + + case "Addbot": + commandToServer( 'addBot' ); + return; + } + + case "team": + commandToServer( 'ClientJoinTeam', %id++ ); + LobbyVoteMenu.reset(); + return; + + case "type": + fillLobbyMissionMenu( $clVoteCmd[%id], %text ); + return; + + case "mission": + if( !LobbyVoteMenu.tourneyChoose ) + { + startNewVote( "VoteChangeMission", + "change the mission to", + %text, // Mission display name + LobbyVoteMenu.missionType, // Mission type display name + $clVoteCmd[%id], // Mission file name + LobbyVoteMenu.missionType ); // Mission type + } + else + { + startNewVote( "VoteTournamentMode", + "change the server to", + %text, // Mission display name + LobbyVoteMenu.missionType, // Mission type display name + $clVoteCmd[%id], // Mission file name + LobbyVoteMenu.missionType ); // Mission type + LobbyVoteMenu.tourneyChoose = 0; + } + LobbyVoteMenu.reset(); + return; + + case "timeLimit": + startNewVote( "VoteChangeTimeLimit", "change the time limit to", $clVoteCmd[%id] ); + LobbyVoteMenu.reset(); + return; + } + + startNewVote( $clVoteCmd[%id], $clVoteAction[%id] ); + fillLobbyVoteMenu(); +} + +//------------------------------------------------------------------------------ +function LobbyVoteMenu::reset( %this ) +{ + %this.mode = ""; + %this.tourneyChoose = 0; + LobbyCancelBtn.setVisible( false ); + fillLobbyVoteMenu(); +} + +//------------------------------------------------------------------------------ +function lobbyPlayerVote(%voteType, %actionMsg, %playerId) +{ + startNewVote(%voteType, %actionMsg, %playerId, 0, 0, 0, true); + fillLobbyVoteMenu(); +} diff --git a/base/scripts/OptionsDlg.cs b/base/scripts/OptionsDlg.cs new file mode 100644 index 0000000..98b7dcc --- /dev/null +++ b/base/scripts/OptionsDlg.cs @@ -0,0 +1,1987 @@ +//------------------------------------------------------------------------------ +// +// OptionsDlg.cs +// +//------------------------------------------------------------------------------ +$max_screenerror = 25; +$min_TSScreenError = 2; +$max_TSScreenError = 20; +$min_TSDetailAdjust = 0.6; +$max_TSDetailAdjust = 1.0; +//------------------------------------------------------------------------------ +function OptionsDlg::onWake( %this ) +{ + // Save the cursor state since it's possible we will be coming from the sim: + %this.wasCursorOn = Canvas.isCursorOn(); + if ( !%this.wasCursorOn ) + CursorOn(); + + $enableDirectInput = "1"; + enableDirectInput(); + + OP_VideoPane.setVisible( false ); + OP_GraphicsPane.setVisible( false ); + OP_TexturesPane.setVisible( false ); + OP_SoundPane.setVisible( false ); + OP_ControlsPane.setVisible( false ); + OP_NetworkPane.setVisible( false ); + OP_GamePane.setVisible( false ); + + OP_VideoTab.setValue( false ); + OP_GraphicsTab.setValue( false ); + OP_TexturesTab.setValue( false ); + OP_SoundTab.setValue( false ); + OP_ControlsTab.setValue( false ); + OP_NetworkTab.setValue( false ); + OP_GameTab.setValue( false ); + + // Initialize the Video Pane controls: + // First the Video Driver menu: + %buffer = getDisplayDeviceList(); + %count = getFieldCount( %buffer ); + for ( %i = 0; %i < %count; %i++ ) + OP_VideoDriverMenu.add( getField( %buffer, %i ), %i ); + + // Select the current device: + %selId = OP_VideoDriverMenu.findText( $pref::Video::displayDevice ); + if ( %selId == -1 ) + %selId = 0; // How did THAT happen? + OP_VideoDriverMenu.setSelected( %selId ); + OP_VideoDriverMenu.onSelect( %selId, "" ); + + OP_FullScreenTgl.setValue( $pref::Video::fullScreen ); + OP_FullScreenTgl.onAction(); + + OP_ApplyBtn.setActive( false ); + + // Initialize the Graphics Options controls: + OptionsDlg::deviceDependent( %this ); + + OP_GammaSlider.setValue( $pref::OpenGL::gammaCorrection ); + OP_TerrainSlider.setValue( $max_screenerror - $pref::Terrain::screenError ); + OP_ShapeSlider.setValue( ( $max_TSScreenError - $pref::TS::screenError ) / ( $max_TSScreenError - $min_TSScreenError ) ); + OP_ShadowSlider.setValue( $pref::Shadows ); + OP_SkyDetailMenu.init(); + if ( !$pref::SkyOn ) + %selId = 5; + else if ( $pref::numCloudLayers >= 0 && $pref::numCloudLayers < 4 ) + %selId = 4 - $pref::numCloudLayers; + else + %selId = 1; + OP_SkyDetailMenu.setSelected( %selId ); + OP_SkyDetailMenu.setText( OP_SkyDetailMenu.getTextById( %selId ) ); + OP_VertexLightTgl.setValue( $pref::Interior::VertexLighting ); + OP_PlayerRenderMenu.init(); + %selId = $pref::Player::renderMyPlayer | ( $pref::Player::renderMyItems << 1 ); + OP_PlayerRenderMenu.setSelected( %selId ); + OP_VisibleDistanceSlider.setValue( $pref::VisibleDistanceMod ); + + // Initialize the Textures Options controls: + OP_ShapeTexSlider.setValue( 5 - $pref::OpenGL::mipReduction ); + OP_TerrainTexSlider.setValue( 6 - $pref::Terrain::texDetail ); + OP_BuildingTexSlider.setValue( 5 - $pref::OpenGL::interiorMipReduction ); + OP_SkyTexSlider.setValue( 5 - $pref::OpenGL::skyMipReduction ); + + // Initialize the Sound Options controls: + // provider menu + %count = alxGetContexti(ALC_PROVIDER_COUNT); + for(%i = 0; %i < %count; %i++) + OP_AudioProviderMenu.add(alxGetContextstr(ALC_PROVIDER_NAME, %i), %i); + %selId = alxGetContexti(ALC_PROVIDER); + OP_AudioProviderMenu.setSelected(%selId); + OP_AudioResetProvider.setActive(false); + + %active = audioIsEnvironmentProvider(alxGetContextstr(ALC_PROVIDER_NAME, %selId)); + OP_AudioEnvironmentTgl.setActive(%active); + + // speaker menu + %count = alxGetContexti(ALC_SPEAKER_COUNT); + for(%i = 0; %i < %count; %i++) + OP_AudioSpeakerMenu.add(alxGetContextstr(ALC_SPEAKER_NAME, %i), %i); + %selId = alxGetContexti(ALC_SPEAKER); + OP_AudioSpeakerMenu.setSelected(%selId); + OP_AudioSpeakerMenu.onSelect(%selId, ""); + + OP_MasterVolumeSlider.setValue( $pref::Audio::masterVolume ); + OP_EffectsVolumeSlider.setValue( $pref::Audio::effectsVolume ); + OP_VoiceBindVolumeSlider.setValue( $pref::Audio::radioVolume ); + OP_GuiVolumeSlider.setValue( $pref::Audio::guiVolume ); + OP_MusicTgl.onAction(); + OP_MusicVolumeSlider.setValue( $pref::Audio::musicVolume ); + OP_MicrophoneEnabledTgl.onAction(); + OP_MicrophoneVolumeSlider.setValue( $pref::Audio::voiceVolume ); + OP_InputBoostSlider.setValue( $pref::Audio::captureGainScale ); + updateInputBoost(); + + // Initialize the Control Options controls: + OP_RemapList.fillList(); + // JOYSTICK SUPPORT WILL BE RE-ENABLED IN THE PATCH + //if ( isJoystickDetected() ) + if ( false ) + { + OP_JoystickTgl.setActive( true ); + OP_ConfigureJoystickBtn.setActive( $pref::Input::JoystickEnabled ); + } + else + { + OP_JoystickTgl.setVisible( false ); // PATCH + OP_JoystickTgl.setActive( false ); + $pref::Input::JoystickEnabled = false; + OP_ConfigureJoystickBtn.setVisible( false ); // PATCH + OP_ConfigureJoystickBtn.setActive( false ); + } + + // Initialize the Network Options controls: + OP_PacketRateSlider.setValue( $pref::Net::PacketRateToClient ); + OP_PacketSizeSlider.setValue( $pref::Net::PacketSize ); + OP_UpdateRateSlider.setValue( $pref::Net::PacketRateToServer ); + if ( !OP_MasterServerMenu.size() ) + OP_MasterServerMenu.init(); + %selId = OP_MasterServerMenu.findText( $pref::Net::DisplayOnMaster ); + if ( %selId == -1 ) + %selId = 1; + OP_MasterServerMenu.setSelected( %selId ); + if ( !OP_RegionMenu.size() ) + OP_RegionMenu.init(); + OP_RegionMenu.setSelected( $pref::Net::RegionMask ); + + // Initialize the Game Options controls: + OP_ZoomSpeedSlider.setValue( 500 - $pref::Player::zoomSpeed ); + OP_LaunchScreenMenu.init(); + + %selId = OP_LaunchScreenMenu.findText( $pref::Shell::LaunchGui ); + if ( %selId == -1 ) + %selId = 1; + OP_LaunchScreenMenu.setText( OP_LaunchScreenMenu.getTextById( %selId ) ); + OP_LaunchScreenMenu.setSelected( %selId ); + + %this.setPane( %this.pane ); +} + +//------------------------------------------------------------------------------ +function OptionsDlg::deviceDependent( %this ) +{ + if ( $SwapIntervalSupported ) + { + OP_VSyncTgl.setValue( $pref::Video::disableVerticalSync ); + OP_VSyncTgl.setActive( true ); + } + else + { + OP_VSyncTgl.setValue( false ); + OP_VSyncTgl.setActive( false ); + } + + OP_TexQualityMenu.init(); + if ( $pref::OpenGL::forcePalettedTexture ) + { + $pref::OpenGL::force16bittexture = false; + %selId = 1; + } + else if ( $pref::OpenGL::force16bittexture ) + %selId = 2; + else + %selId = 3; + OP_TexQualityMenu.setSelected( %selId ); + + OP_CompressMenu.init(); + if ( $TextureCompressionSupported && !$pref::OpenGL::disableARBTextureCompression ) + { + OP_CompressLabel.setVisible( true ); + OP_CompressLabel_Disabled.setVisible( false ); + OP_CompressMenu.setActive( true ); + if ( !$pref::OpenGL::allowCompression ) + OP_CompressMenu.setSelected( 1 ); + else if ( $pref::OpenGL::compressionHint $= "GL_NICEST" ) + OP_CompressMenu.setSelected( 3 ); + else + OP_CompressMenu.setSelected( 2 ); + } + else + { + OP_CompressLabel_Disabled.setVisible( true ); + OP_CompressLabel.setVisible( false ); + OP_CompressMenu.setActive( false ); + OP_CompressMenu.setText( "None" ); + } + + if ( $FogCoordSupported ) + { + OP_IntTexturedFogTgl.setValue( $pref::Interior::TexturedFog ); + OP_IntTexturedFogTgl.setActive( true ); + } + else + { + OP_IntTexturedFogTgl.setValue( true ); + OP_IntTexturedFogTgl.setActive( false ); + } + + OP_AnisotropySlider.setValue( $pref::OpenGL::anisotropy ); + OP_AnisotropySlider.setActive( $AnisotropySupported ); + if ( $AnisotropySupported ) + { + OP_AnisotropyLabel.setVisible( true ); + OP_AnisotropyLabel_Disabled.setVisible( false ); + } + else + { + OP_AnisotropyLabel_Disabled.setVisible( true ); + OP_AnisotropyLabel.setVisible( false ); + } +} + +//------------------------------------------------------------------------------ +function OptionsDlg::onSleep( %this ) +{ + // Restore the cursor state: + if ( !%this.wasCursorOn ) + CursorOff(); + + $enableDirectInput = "0"; + disableDirectInput(); + + OP_VideoDriverMenu.clear(); + OP_ResMenu.clear(); + OP_BPPMenu.clear(); + OP_AudioProviderMenu.clear(); + OP_AudioSpeakerMenu.clear(); + + if ( isObject( ServerConnection ) && isTextureFlushRequired() ) + MessageBoxYesNo( "WARNING", "You have made changes that require Tribes 2 to flush the texture cache. " + @ "Doing this while the game is running can take a long time. " + @ "Do you wish to continue?", + "OptionsDlg.saveSettings();", "returnFromSettings();" ); + else + %this.saveSettings(); +} + +//------------------------------------------------------------------------------ +function isTextureFlushRequired() +{ + if ( $pref::Interior::VertexLighting != OP_VertexLightTgl.getValue() ) + return( true ); + + if ( $pref::OpenGL::mipReduction != 5 - mFloor( OP_ShapeTexSlider.getValue() ) ) + return( true ); + + if ( $pref::OpenGL::interiorMipReduction != 5 - mFloor( OP_BuildingTexSlider.getValue() ) ) + return( true ); + + if ( $pref::OpenGL::skyMipReduction != 5 - mFloor( OP_SkyTexSlider.getValue() ) ) + return( true ); + + if ( $AnisotropySupported && $pref::OpenGL::anisotropy != OP_AnisotropySlider.getValue() ) + return( true ); + + %id = OP_TexQualityMenu.getSelected(); + if ( $pref::OpenGL::forcePalettedTexture ) + { + if ( %id != 1 ) + return( true ); + } + else if ( $pref::OpenGL::force16bittexture ) + { + if ( %id != 2 ) + return( true ); + } + else if ( %id != 3 ) + return( true ); + + if ( $TextureCompressionSupported && !$pref::OpenGL::disableARBTextureCompression ) + { + %id = OP_CompressMenu.getSelected(); + if ( $pref::OpenGL::allowCompression ) + { + if ( $pref::OpenGL::compressionHint $= "GL_FASTEST" ) + { + if ( %id != 2 ) + return( true ); + } + else if ( $pref::OpenGL::compressionHint $= "GL_NICEST" ) + { + if ( %id != 3 ) + return( true ); + } + else if ( %id == 1 ) + return( true ); + } + else if ( %id > 1 ) + return( true ); + } + + return( false ); +} + +//------------------------------------------------------------------------------ +function returnFromSettings() +{ + // to unpause singlePlayerGame when returning from options + if ( isObject( Game ) ) + Game.OptionsDlgSleep(); +} + +//------------------------------------------------------------------------------ +function OptionsDlg::saveSettings( %this ) +{ + // Save off any prefs that don't auto-update: + %flushTextures = false; + + if ( $SwapIntervalSupported && OP_VSyncTgl.getValue() != $pref::Video::disableVerticalSync ) + { + $pref::Video::disableVerticalSync = OP_VSyncTgl.getValue(); + setVerticalSync( !$pref::Video::disableVerticalSync ); + } + + %temp = OP_SkyDetailMenu.getSelected(); + if ( %temp == 5 ) + $pref::SkyOn = false; + else + { + $pref::SkyOn = true; + $pref::numCloudLayers = ( 4 - %temp ); + } + + if ( $FogCoordSupported ) + $pref::Interior::TexturedFog = OP_IntTexturedFogTgl.getValue(); + + if ( $pref::Interior::VertexLighting != OP_VertexLightTgl.getValue() ) + { + $pref::Interior::VertexLighting = OP_VertexLightTgl.getValue(); + %flushTextures = true; + } + + %temp = OP_PlayerRenderMenu.getSelected(); + $pref::Player::renderMyPlayer = %temp & 1; + $pref::Player::renderMyItems = %temp & 2; + + switch ( OP_TexQualityMenu.getSelected() ) + { + case 1: // 8-bit + if ( !$pref::OpenGL::forcePalettedTexture || $pref::OpenGL::force16bittexture ) + { + $pref::OpenGL::forcePalettedTexture = true; + $pref::OpenGL::force16bittexture = false; + %flushTextures = true; + } + case 2: // 16-bit + if ( $pref::OpenGL::forcePalettedTexture || !$pref::OpenGL::force16bittexture ) + { + $pref::OpenGL::forcePalettedTexture = false; + $pref::OpenGL::force16bittexture = true; + %flushTextures = true; + } + case 3: // 32-bit + if ( $pref::OpenGL::forcePalettedTexture || $pref::OpenGL::force16bittexture ) + { + $pref::OpenGL::forcePalettedTexture = false; + $pref::OpenGL::force16bittexture = false; + %flushTextures = true; + } + } + OP_TexQualityMenu.clear(); + + $pref::Terrain::texDetail = 6 - mFloor( OP_TerrainTexSlider.getValue() ); + + %temp = 5 - mFloor( OP_ShapeTexSlider.getValue() ); + if ( $pref::OpenGL::mipReduction != %temp ) + { + $pref::OpenGL::mipReduction = %temp; + setOpenGLMipReduction( $pref::OpenGL::mipReduction ); + %flushTextures = true; + } + + %temp = 5 - mFloor( OP_BuildingTexSlider.getValue() ); + if ( $pref::OpenGL::interiorMipReduction != %temp ) + { + $pref::OpenGL::interiorMipReduction = %temp; + setOpenGLInteriorMipReduction( $pref::OpenGL::interiorMipReduction ); + %flushTextures = true; + } + + %temp = 5 - mFloor( OP_SkyTexSlider.getValue() ); + if ( $pref::OpenGL::skyMipReduction != %temp ) + { + $pref::OpenGL::skyMipReduction = %temp; + setOpenGLSkyMipReduction( $pref::OpenGL::skyMipReduction ); + %flushTextures = true; + } + + if ( $TextureCompressionSupported && !$pref::OpenGL::disableARBTextureCompression ) + { + %temp = OP_CompressMenu.getSelected(); + if ( $pref::OpenGL::allowCompression ) + { + switch ( %temp ) + { + case 2: + if ( $pref::OpenGL::compressionHint !$= "GL_FASTEST" ) + { + $pref::OpenGL::compressionHint = "GL_FASTEST"; + setOpenGLTextureCompressionHint( $pref::OpenGL::compressionHint ); + %flushTextures = true; + } + + case 3: + if ( $pref::OpenGL::compressionHint !$= "GL_NICEST" ) + { + $pref::OpenGL::compressionHint = "GL_NICEST"; + setOpenGLTextureCompressionHint( $pref::OpenGL::compressionHint ); + %flushTextures = true; + } + + default: // None + $pref::OpenGL::allowCompression = false; + %flushTextures = true; + } + } + else if ( %temp > 1 ) + { + $pref::OpenGL::allowCompression = true; + if ( %temp == 3 ) + $pref::OpenGL::compressionHint = "GL_NICEST"; + else + $pref::OpenGL::compressionHint = "GL_FASTEST"; + setOpenGLTextureCompressionHint( $pref::OpenGL::compressionHint ); + %flushTextures = true; + } + } + OP_CompressMenu.clear(); + + if ( $AnisotropySupported ) + { + %temp = OP_AnisotropySlider.getValue(); + if ( $pref::OpenGL::anisotropy != %temp ) + { + $pref::OpenGL::anisotropy = %temp; + setOpenGLAnisotropy( $pref::OpenGL::anisotropy ); + %flushTextures = true; + } + } + + $pref::Terrain::screenError = $max_screenerror - mFloor( OP_TerrainSlider.getValue() ); + $pref::TS::screenError = $max_TSScreenError - mFloor( OP_ShapeSlider.getValue() * ( $max_TSScreenError - $min_TSScreenError ) ); + $pref::TS::detailAdjust = $min_TSDetailAdjust + OP_ShapeSlider.getValue() * ( $max_TSDetailAdjust - $min_TSDetailAdjust ); + $pref::Shadows = OP_ShadowSlider.getValue(); + setShadowDetailLevel( $pref::Shadows ); + $pref::VisibleDistanceMod = OP_VisibleDistanceSlider.getValue(); + + $pref::Audio::musicVolume = OP_MusicVolumeSlider.getValue(); + $pref::Audio::masterVolume = OP_MasterVolumeSlider.getValue(); + $pref::Audio::effectsVolume = OP_EffectsVolumeSlider.getValue(); + alxSetChannelVolume( $EffectAudioType, $pref::Audio::effectsVolume ); + $pref::Audio::voiceVolume = OP_MicrophoneVolumeSlider.getValue(); + alxSetChannelVolume( $VoiceAudioType, $pref::Audio::voiceVolume ); + $pref::Audio::radioVolume = OP_VoiceBindVolumeSlider.getValue(); + alxSetChannelVolume( $ChatAudioType, $pref::Audio::radioVolume ); + $pref::Audio::guiVolume = OP_GuiVolumeSlider.getValue(); + alxSetChannelVolume( $GuiAudioType, $pref::Audio::guiVolume); + $pref::Audio::captureGainScale = OP_InputBoostSlider.getValue(); + if ( !$missionRunning ) + MusicPlayer.stop(); + + $pref::Net::PacketRateToClient = mFloor( OP_PacketRateSlider.getValue() ); + $pref::Net::PacketSize = mFloor( OP_PacketSizeSlider.getValue() ); + $pref::Net::PacketRateToServer = mFloor( OP_UpdateRateSlider.getValue() ); + // check the max rate: + if ( isObject( ServerConnection ) ) + ServerConnection.checkMaxRate(); + if ( isObject( ClientGroup ) ) + { + %count = ClientGroup.getCount(); + for ( %i = 0; %i < %count; %i++ ) + { + %cl = ClientGroup.getObject( %i ); + %cl.checkMaxRate(); + } + } + + $pref::Player::zoomSpeed = 500 - mFloor( OP_ZoomSpeedSlider.getValue() ); + setZoomSpeed( $pref::Player::zoomSpeed ); + + $pref::Shell::LaunchGui = OP_LaunchScreenMenu.getText(); + + export( "$pref::*", "prefs/ClientPrefs.cs", false ); + saveActiveMapFile(); + + if ( %flushTextures ) + { + // Give the Options Dialog a chance to go away: + OptionsDlg.schedule( 0, doTextureFlush ); + } + + returnFromSettings(); +} + +//------------------------------------------------------------------------------ +function OptionsDlg::doTextureFlush( %this ) +{ + MessagePopup( "PLEASE WAIT", "Flushing texture cache...\nThis may take a while" ); + Canvas.repaint(); + flushTextureCache(); + CloseMessagePopup(); +} + +//------------------------------------------------------------------------------ +function OptionsDlg::setPane( %this, %pane ) +{ + if((%this.pane $= "Sound") && !$missionRunning) + MusicPlayer.stop(); + + if ( %this.pane !$= "None" ) + { + %paneCtrl = "OP_" @ %this.pane @ "Pane"; + %paneCtrl.setVisible( false ); + + %tabCtrl = "OP_" @ %this.pane @ "Tab"; + %tabCtrl.setValue( false ); + } + + %paneCtrl = "OP_" @ %pane @ "Pane"; + %paneCtrl.setVisible( true ); + + %tabCtrl = "OP_" @ %pane @ "Tab"; + %tabCtrl.setValue( true ); + + %this.pane = %pane; +} + +//------------------------------------------------------------------------------ +function OptionsDlg::applyGraphicChanges( %this ) +{ + %newDriver = OP_VideoDriverMenu.getText(); + %newRes = OP_ResMenu.getText(); + %newBpp = OP_BPPMenu.getText(); + %newFullScreen = OP_FullScreenTgl.getValue(); + + if ( %newDriver !$= $pref::Video::displayDevice ) + { + setDisplayDevice( %newDriver, firstWord( %newRes ), getWord( %newRes, 1 ), %newBpp, %newFullScreen ); + OptionsDlg::deviceDependent( %this ); + } + else + setScreenMode( firstWord( %newRes ), getWord( %newRes, 1 ), %newBpp, %newFullScreen ); + + OP_ApplyBtn.updateState(); +} + + +//------------------------------------------------------------------------------ +function OP_VideoDriverMenu::onSelect( %this, %id, %text ) +{ + // Attempt to keep the same res and bpp settings: + if ( OP_ResMenu.size() > 0 ) + %prevRes = OP_ResMenu.getText(); + else + %prevRes = getWords( $pref::Video::resolution, 0, 1 ); + + // Check if this device is full-screen only: + if ( isDeviceFullScreenOnly( %this.getText() ) ) + { + OP_FullScreenTgl.setValue( true ); + OP_FullScreenTgl.setActive( false ); + OP_FullScreenTgl.onAction(); + } + else + OP_FullScreenTgl.setActive( true ); + + if ( OP_FullScreenTgl.getValue() ) + { + if ( OP_BPPMenu.size() > 0 ) + %prevBPP = OP_BPPMenu.getText(); + else + %prevBPP = getWord( $pref::Video::resolution, 2 ); + } + + // Fill the resolution and bit depth lists: + OP_ResMenu.init( %this.getText(), OP_FullScreenTgl.getValue() ); + OP_BPPMenu.init( %this.getText() ); + + // Try to select the previous settings: + %selId = OP_ResMenu.findText( %prevRes ); + if ( %selId == -1 ) + %selId = 0; + OP_ResMenu.setSelected( %selId ); + + if ( OP_FullScreenTgl.getValue() ) + { + %selId = OP_BPPMenu.findText( %prevBPP ); + if ( %selId == -1 ) + %selId = 0; + OP_BPPMenu.setSelected( %selId ); + OP_BPPMenu.setText( OP_BPPMenu.getTextById( %selId ) ); + } + else + OP_BPPMenu.setText( "Default" ); + + OP_ApplyBtn.updateState(); +} + +//------------------------------------------------------------------------------ +function OP_ResMenu::init( %this, %device, %fullScreen ) +{ + %this.clear(); + %resList = getResolutionList( %device ); + %resCount = getFieldCount( %resList ); + %deskRes = getDesktopResolution(); + %count = 0; + for ( %i = 0; %i < %resCount; %i++ ) + { + %res = getWords( getField( %resList, %i ), 0, 1 ); + + if ( !%fullScreen ) + { + if ( firstWord( %res ) >= firstWord( %deskRes ) ) + continue; + if ( getWord( %res, 1 ) >= getWord( %deskRes, 1 ) ) + continue; + } + + // Only add to list if it isn't there already: + if ( %this.findText( %res ) == -1 ) + { + %this.add( %res, %count ); + %count++; + } + } +} + +//------------------------------------------------------------------------------ +function OP_ResMenu::onSelect( %this, %id, %text ) +{ + OP_ApplyBtn.updateState(); +} + +//------------------------------------------------------------------------------ +function OP_BPPMenu::init( %this, %device ) +{ + %this.clear(); + + if ( %device $= "Voodoo2" ) + %this.add( "16", 0 ); + else + { + %resList = getResolutionList( %device ); + %resCount = getFieldCount( %resList ); + %count = 0; + for ( %i = 0; %i < %resCount; %i++ ) + { + %bpp = getWord( getField( %resList, %i ), 2 ); + + // Only add to list if it isn't there already: + if ( %this.findText( %bpp ) == -1 ) + { + %this.add( %bpp, %count ); + %count++; + } + } + } +} + +//------------------------------------------------------------------------------ +function OP_BPPMenu::onSelect( %this, %id, %text ) +{ + OP_ApplyBtn.updateState(); +} + +//------------------------------------------------------------------------------ +function OP_FullScreenTgl::onAction( %this ) +{ + // Attempt to maintain current settings: + %selId = OP_ResMenu.getSelected(); + if ( %selId == -1 ) + %selId = 0; + %prevRes = OP_ResMenu.getTextById( %selId ); + + OP_ResMenu.init( OP_VideoDriverMenu.getText(), %this.getValue() ); + + %selId = OP_ResMenu.findText( %prevRes ); + if ( %selId == -1 ) + %selId = 0; + OP_ResMenu.setSelected( %selId ); + + if ( %this.getValue() ) + { + %selId = OP_BPPMenu.findText( getWord( $pref::Video::resolution, 2 ) ); + if ( %selId == - 1 ) + %selId = 0; + OP_BPPMenu.setSelected( %selId ); + OP_BPPMenu.setText( OP_BPPMenu.getTextById( %selId ) ); + OP_BPPMenu.setActive( true ); + } + else + { + OP_BPPMenu.setText( "Default" ); + OP_BPPMenu.setActive( false ); + } + + OP_ApplyBtn.updateState(); +} + +//------------------------------------------------------------------------------ +function OP_ApplyBtn::updateState( %this ) +{ + %active = false; + + if ( OP_VideoDriverMenu.getText() !$= $pref::Video::displayDevice ) + %active = true; + else if ( OP_ResMenu.getText() !$= getWords( $pref::Video::resolution, 0, 1 ) ) + %active = true; + else if ( OP_FullScreenTgl.getValue() != $pref::Video::fullScreen ) + %active = true; + else if ( OP_FullScreenTgl.getValue() ) + { + if ( OP_BPPMenu.getText() !$= getWord( $pref::Video::resolution, 2 ) ) + %active = true; + } + + %this.setActive( %active ); +} + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +// Graphics: +// +function updateGammaCorrection() +{ + $pref::OpenGL::gammaCorrection = OP_GammaSlider.getValue(); + videoSetGammaCorrection( $pref::OpenGL::gammaCorrection ); +} + +//------------------------------------------------------------------------------ +function updateTerrainDetail() +{ + $pref::Terrain::screenError = $max_screenerror - mFloor( OP_TerrainSlider.getValue()); + if ( OP_TerrainSlider.getValue() != $max_screenerror - $pref::Terrain::screenError ) + OP_TerrainSlider.setValue( $max_screenerror - $pref::Terrain::screenError ); +} + +//------------------------------------------------------------------------------ +function OP_SkyDetailMenu::init( %this ) +{ + %this.clear(); + %this.add( "Full Sky", 1 ); + %this.add( "Two Cloud Layers", 2 ); + %this.add( "One Cloud Layer", 3 ); + %this.add( "Sky Box Only", 4 ); + %this.add( "No Sky", 5 ); +} + +//------------------------------------------------------------------------------ +function OP_PlayerRenderMenu::init( %this ) +{ + %this.clear(); + %this.add( "Player and Items", 3 ); + %this.add( "Player only", 1 ); + %this.add( "Items only", 2 ); + %this.add( "Neither Player nor Items", 0 ); +} + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +// Textures: +// +function OP_CompressMenu::init( %this ) +{ + %this.clear(); + %this.add( "None", 1 ); + %this.add( "Fastest", 2 ); + %this.add( "Nicest", 3 ); +} + +//------------------------------------------------------------------------------ +function OP_TexQualityMenu::init( %this ) +{ + %this.clear(); + if ( $PalettedTextureSupported ) + %this.add( "Palletized", 1 ); + %this.add( "16 bit", 2 ); + %this.add( "32 bit", 3 ); +} + +//------------------------------------------------------------------------------ +function OP_TexQualityMenu::onSelect( %this, %id, %text ) +{ + if ( %id == 1 ) + { + // Disable these with palletized textures by default: + OP_EnvMapTgl.setValue( false ); + //OP_EnvMapTgl.setActive( false ); + OP_IntEnvMapTgl.setValue( false ); + //OP_IntEnvMapTgl.setActive( false ); + } +// else +// { +// OP_EnvMapTgl.setActive( true ); +// OP_IntEnvMapTgl.setActive( true ); +// } +} + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +// Audio: +// +function setAudioProvider(%idx) +{ + alxContexti(ALC_PROVIDER, %idx); + $pref::Audio::provider = alxGetContextstr(ALC_PROVIDER_NAME, %idx); + + %active = audioIsEnvironmentProvider($pref::Audio::provider); + OP_AudioEnvironmentTgl.setActive(%active); + + audioUpdateProvider($pref::Audio::provider); + OP_AudioProviderMenu.setSelected(%idx); +} + +//------------------------------------------------------------------------------ +function OP_AudioEnvironmentTgl::onAction(%this) +{ + alxEnableEnvironmental(%this.getValue()); +} + +//------------------------------------------------------------------------------ +function OP_AudioProviderMenu::onSelect(%this, %id, %text) +{ + if(%id != $Audio::originalProvider) + { + if(!%this.seenWarning) + { + MessageBoxOK("Warning", "Changing sound drivers may result in incompatibilities and game oddities. If you experience such oddities, hit \"Reset\" to restore defaults.", ""); + %this.seenWarning = true; + } + OP_AudioResetProvider.setActive(true); + } + setAudioProvider(%id); +} + +//------------------------------------------------------------------------------ +function OP_AudioResetProvider::onAction(%this) +{ + setAudioProvider($Audio::originalProvider); + %this.setActive(false); +} + +//------------------------------------------------------------------------------ +function OP_AudioSpeakerMenu::onSelect(%this, %id, %text) +{ + alxContexti(ALC_SPEAKER, %id); + $pref::Audio::speakerType = alxGetContextstr(ALC_SPEAKER_NAME, %id); +} + +//------------------------------------------------------------------------------ +function OP_MusicTgl::onAction( %this ) +{ + %on = %this.getValue(); + OP_MusicVolumeLabel.setVisible( %on ); + OP_MusicVolumeLabel_Disabled.setVisible( !%on ); + OP_MusicVolumeSlider.setActive( %on ); + $pref::Audio::musicEnabled = %on; + + if ( %on ) + MusicPlayer.play(); + else + MusicPlayer.stop(); +} + +//------------------------------------------------------------------------------ +function updateMusicVolume() +{ + %volume = OP_MusicVolumeSlider.getValue(); + alxSetChannelVolume( $MusicAudioType, %volume ); +} + +//------------------------------------------------------------------------------ +function updateGuiVolume() +{ + %volume = OP_GuiVolumeSlider.getValue(); + alxSetChannelVolume( $GuiAudioType, %volume ); +} + +//------------------------------------------------------------------------------ +function updateMasterVolume() +{ + %volume = OP_MasterVolumeSlider.getValue(); + alxListenerf( AL_GAIN_LINEAR, %volume ); +} + +//------------------------------------------------------------------------------ +function OP_MicrophoneEnabledTgl::onAction( %this ) +{ + %on = %this.getValue(); + OP_RecordTestBtn.setActive( %on ); + OP_MicVolumeLabel.setVisible( %on ); + OP_MicVolumeLabel_Disabled.setVisible( !%on ); + OP_MicrophoneVolumeSlider.setActive( %on ); + OP_InputBoostLabel.setVisible( %on ); + OP_InputBoostLabel_Disabled.setVisible( !%on ); + OP_InputBoostSlider.setActive( %on ); + OP_InputBoostPercentTxt.setVisible( %on ); +} + +//------------------------------------------------------------------------------ +function updateInputBoost() +{ + %val = OP_InputBoostSlider.getValue(); + alxSetCaptureGainScale( %val ); + %val = mFloor(%val * 100); + OP_InputBoostPercentTxt.setValue(%val @ "%"); +} + +//------------------------------------------------------------------------------ +function OP_RecordTestBtn::onAction( %this ) +{ + alxCaptureStart(true); +} + +//------------------------------------------------------------------------------ +function localCaptureStart( %method ) +{ + if(%method $= "record") + { + OP_RecordTestBtn.setActive(false); + OP_RecordTestBtn.setValue(">> Recording <<"); + } + else + { + OP_RecordTestBtn.setActive(false); + OP_RecordTestBtn.setValue(">> Playing <<"); + } +} + +//------------------------------------------------------------------------------ +function localCaptureStop( %method ) +{ + if(%method $= "play") + { + OP_RecordTestBtn.setActive(true); + OP_RecordTestBtn.setValue("Test Record"); + } +} + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +// Driver Info dialog: +// +function DriverInfoDlg::onWake( %this ) +{ + %headerStyle = ""; + %infoString = getVideoDriverInfo(); + %displayText = "" @ %headerStyle @ "VENDOR:" NL + " " @ getField( %infoString, 0 ) NL + "" @ %headerStyle @ "RENDERER:" NL + " " @ getField( %infoString, 1 ) NL + "" @ %headerStyle @ "VERSION " @ getField( %infoString, 2 ) NL + "\n" @ + "" @ %headerStyle @ "SUPPORTED OPENGL EXTENSIONS:" NL + getField( %infoString, 3 ); + + DriverInfoText.setText( %displayText ); +} + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +// Control remapper section: +// +$RemapCount = 0; +$RemapName[$RemapCount] = "Forward"; +$RemapCmd[$RemapCount] = "moveforward"; +$RemapCount++; +$RemapName[$RemapCount] = "Backward"; +$RemapCmd[$RemapCount] = "movebackward"; +$RemapCount++; +$RemapName[$RemapCount] = "Strafe Left"; +$RemapCmd[$RemapCount] = "moveleft"; +$RemapCount++; +$RemapName[$RemapCount] = "Strafe Right"; +$RemapCmd[$RemapCount] = "moveright"; +$RemapCount++; +$RemapName[$RemapCount] = "Turn Left"; +$RemapCmd[$RemapCount] = "turnLeft"; +$RemapCount++; +$RemapName[$RemapCount] = "Turn Right"; +$RemapCmd[$RemapCount] = "turnRight"; +$RemapCount++; +$RemapName[$RemapCount] = "Look Up"; +$RemapCmd[$RemapCount] = "panUp"; +$RemapCount++; +$RemapName[$RemapCount] = "Look Down"; +$RemapCmd[$RemapCount] = "panDown"; +$RemapCount++; +$RemapName[$RemapCount] = "Jump"; +$RemapCmd[$RemapCount] = "jump"; +$RemapCount++; +$RemapName[$RemapCount] = "Jet Pack"; +$RemapCmd[$RemapCount] = "mouseJet"; +$RemapCount++; +$RemapName[$RemapCount] = "Fire Weapon"; +$RemapCmd[$RemapCount] = "mouseFire"; +$RemapCount++; +$RemapName[$RemapCount] = "Zoom"; +$RemapCmd[$RemapCount] = "toggleZoom"; +$RemapCount++; +$RemapName[$RemapCount] = "Cycle Zoom Level"; +$RemapCmd[$RemapCount] = "setZoomFOV"; +$RemapCount++; +$RemapName[$RemapCount] = "Weapon Slot One"; +$RemapCmd[$RemapCount] = "useFirstWeaponSlot"; +$RemapCount++; +$RemapName[$RemapCount] = "Weapon Slot Two"; +$RemapCmd[$RemapCount] = "useSecondWeaponSlot"; +$RemapCount++; +$RemapName[$RemapCount] = "Weapon Slot Three"; +$RemapCmd[$RemapCount] = "useThirdWeaponSlot"; +$RemapCount++; +$RemapName[$RemapCount] = "Weapon Slot Four"; +$RemapCmd[$RemapCount] = "useFourthWeaponSlot"; +$RemapCount++; +$RemapName[$RemapCount] = "Weapon Slot Five"; +$RemapCmd[$RemapCount] = "useFifthWeaponSlot"; +$RemapCount++; +$RemapName[$RemapCount] = "Weapon Slot Six"; +$RemapCmd[$RemapCount] = "useSixthWeaponSlot"; +$RemapCount++; +$RemapName[$RemapCount] = "Blaster"; +$RemapCmd[$RemapCount] = "useBlaster"; +$RemapCount++; +$RemapName[$RemapCount] = "Plasma Rifle"; +$RemapCmd[$RemapCount] = "usePlasma"; +$RemapCount++; +$RemapName[$RemapCount] = "Chaingun"; +$RemapCmd[$RemapCount] = "useChaingun"; +$RemapCount++; +$RemapName[$RemapCount] = "Spinfusor"; +$RemapCmd[$RemapCount] = "useDisc"; +$RemapCount++; +$RemapName[$RemapCount] = "Grenade Launcher"; +$RemapCmd[$RemapCount] = "useGrenadeLauncher"; +$RemapCount++; +$RemapName[$RemapCount] = "Laser Rifle"; +$RemapCmd[$RemapCount] = "useSniperRifle"; +$RemapCount++; +$RemapName[$RemapCount] = "ELF Projector"; +$RemapCmd[$RemapCount] = "useELFGun"; +$RemapCount++; +$RemapName[$RemapCount] = "Fusion Mortar"; +$RemapCmd[$RemapCount] = "useMortar"; +$RemapCount++; +$RemapName[$RemapCount] = "Missile Launcher"; +$RemapCmd[$RemapCount] = "useMissileLauncher"; +$RemapCount++; +$RemapName[$RemapCount] = "Shocklance"; +$RemapCmd[$RemapCount] = "useShockLance"; +$RemapCount++; +$RemapName[$RemapCount] = "Targeting Laser"; +$RemapCmd[$RemapCount] = "useTargetingLaser"; +$RemapCount++; +$RemapName[$RemapCount] = "Previous Weapon"; +$RemapCmd[$RemapCount] = "prevWeapon"; +$RemapCount++; +$RemapName[$RemapCount] = "Next Weapon"; +$RemapCmd[$RemapCount] = "nextWeapon"; +$RemapCount++; +$RemapName[$RemapCount] = "Throw Grenade"; +$RemapCmd[$RemapCount] = "throwGrenade"; +$RemapCount++; +$RemapName[$RemapCount] = "Place Mine"; +$RemapCmd[$RemapCount] = "placeMine"; +$RemapCount++; +$RemapName[$RemapCount] = "Use Pack"; +$RemapCmd[$RemapCount] = "useBackpack"; +$RemapCount++; +$RemapName[$RemapCount] = "Use Health Kit"; +$RemapCmd[$RemapCount] = "useRepairKit"; +$RemapCount++; +$RemapName[$RemapCount] = "Deploy Beacon"; +$RemapCmd[$RemapCount] = "placeBeacon"; +$RemapCount++; +$RemapName[$RemapCount] = "Inventory"; +$RemapCmd[$RemapCount] = "toggleInventoryHud"; +$RemapCount++; +$RemapName[$RemapCount] = "Favorite 1"; +$RemapCmd[$RemapCount] = "selectFavorite1"; +$RemapCount++; +$RemapName[$RemapCount] = "Favorite 2"; +$RemapCmd[$RemapCount] = "selectFavorite2"; +$RemapCount++; +$RemapName[$RemapCount] = "Favorite 3"; +$RemapCmd[$RemapCount] = "selectFavorite3"; +$RemapCount++; +$RemapName[$RemapCount] = "Favorite 4"; +$RemapCmd[$RemapCount] = "selectFavorite4"; +$RemapCount++; +$RemapName[$RemapCount] = "Favorite 5"; +$RemapCmd[$RemapCount] = "selectFavorite5"; +$RemapCount++; +$RemapName[$RemapCount] = "Favorite 6"; +$RemapCmd[$RemapCount] = "selectFavorite6"; +$RemapCount++; +$RemapName[$RemapCount] = "Favorite 7"; +$RemapCmd[$RemapCount] = "selectFavorite7"; +$RemapCount++; +$RemapName[$RemapCount] = "Favorite 8"; +$RemapCmd[$RemapCount] = "selectFavorite8"; +$RemapCount++; +$RemapName[$RemapCount] = "Favorite 9"; +$RemapCmd[$RemapCount] = "selectFavorite9"; +$RemapCount++; +$RemapName[$RemapCount] = "Favorite 10"; +$RemapCmd[$RemapCount] = "selectFavorite10"; +$RemapCount++; +$RemapName[$RemapCount] = "Favorite 11"; +$RemapCmd[$RemapCount] = "selectFavorite11"; +$RemapCount++; +$RemapName[$RemapCount] = "Favorite 12"; +$RemapCmd[$RemapCount] = "selectFavorite12"; +$RemapCount++; +$RemapName[$RemapCount] = "Favorite 13"; +$RemapCmd[$RemapCount] = "selectFavorite13"; +$RemapCount++; +$RemapName[$RemapCount] = "Favorite 14"; +$RemapCmd[$RemapCount] = "selectFavorite14"; +$RemapCount++; +$RemapName[$RemapCount] = "Favorite 15"; +$RemapCmd[$RemapCount] = "selectFavorite15"; +$RemapCount++; +$RemapName[$RemapCount] = "Favorite 16"; +$RemapCmd[$RemapCount] = "selectFavorite16"; +$RemapCount++; +$RemapName[$RemapCount] = "Favorite 17"; +$RemapCmd[$RemapCount] = "selectFavorite17"; +$RemapCount++; +$RemapName[$RemapCount] = "Favorite 18"; +$RemapCmd[$RemapCount] = "selectFavorite18"; +$RemapCount++; +$RemapName[$RemapCount] = "Favorite 19"; +$RemapCmd[$RemapCount] = "selectFavorite19"; +$RemapCount++; +$RemapName[$RemapCount] = "Favorite 20"; +$RemapCmd[$RemapCount] = "selectFavorite20"; +$RemapCount++; +$RemapName[$RemapCount] = "Select Energy Pack"; +$RemapCmd[$RemapCount] = "quickPackEnergyPack"; +$RemapCount++; +$RemapName[$RemapCount] = "Select Repair Pack"; +$RemapCmd[$RemapCount] = "quickPackRepairPack"; +$RemapCount++; +$RemapName[$RemapCount] = "Select Shield Pack"; +$RemapCmd[$RemapCount] = "quickPackShieldPack"; +$RemapCount++; +$RemapName[$RemapCount] = "Select Cloaking Pack"; +$RemapCmd[$RemapCount] = "quickPackCloakPack"; +$RemapCount++; +$RemapName[$RemapCount] = "Select Sensor Jammer"; +$RemapCmd[$RemapCount] = "quickPackJammerPack"; +$RemapCount++; +$RemapName[$RemapCount] = "Select Ammo Pack"; +$RemapCmd[$RemapCount] = "quickPackAmmoPack"; +$RemapCount++; +$RemapName[$RemapCount] = "Select Satchel Charge"; +$RemapCmd[$RemapCount] = "quickPackSatchelCharge"; +$RemapCount++; +$RemapName[$RemapCount] = "Select Inv Station"; +$RemapCmd[$RemapCount] = "quickPackDeployableStation"; +$RemapCount++; +$RemapName[$RemapCount] = "Select Spider Turret"; +$RemapCmd[$RemapCount] = "quickPackIndoorTurret"; +$RemapCount++; +$RemapName[$RemapCount] = "Select Landspike Turret"; +$RemapCmd[$RemapCount] = "quickPackOutdoorTurret"; +$RemapCount++; +$RemapName[$RemapCount] = "Select Motion Sensor"; +$RemapCmd[$RemapCount] = "quickPackMotionSensor"; +$RemapCount++; +$RemapName[$RemapCount] = "Select Deploy Pulse"; +$RemapCmd[$RemapCount] = "quickPackPulse"; +$RemapCount++; +$RemapName[$RemapCount] = "Select Plasma Barrel"; +$RemapCmd[$RemapCount] = "quickPackPlasmaBarrel"; +$RemapCount++; +$RemapName[$RemapCount] = "Select Missile Barrel"; +$RemapCmd[$RemapCount] = "quickPackMissileBarrel"; +$RemapCount++; +$RemapName[$RemapCount] = "Select AA Barrel"; +$RemapCmd[$RemapCount] = "quickPackAABarrel"; +$RemapCount++; +$RemapName[$RemapCount] = "Select Mortar Barrel"; +$RemapCmd[$RemapCount] = "quickPackMortarBarrel"; +$RemapCount++; +$RemapName[$RemapCount] = "Select Elf Barrel"; +$RemapCmd[$RemapCount] = "quickPackElfBarrel"; +$RemapCount++; +$RemapName[$RemapCount] = "Select Grenade"; +$RemapCmd[$RemapCount] = "quickPackGrenade"; +$RemapCount++; +$RemapName[$RemapCount] = "Select Flash Grenade"; +$RemapCmd[$RemapCount] = "quickPackFlashGrenade"; +$RemapCount++; +$RemapName[$RemapCount] = "Select Concussion"; +$RemapCmd[$RemapCount] = "quickPackConcussionGrenade"; +$RemapCount++; +$RemapName[$RemapCount] = "Select Camera"; +$RemapCmd[$RemapCount] = "quickPackCameraGrenade"; +$RemapCount++; +$RemapName[$RemapCount] = "Select Flare Grenade"; +$RemapCmd[$RemapCount] = "quickPackFlareGrenade"; +$RemapCount++; +$RemapName[$RemapCount] = "Command Circuit"; +$RemapCmd[$RemapCount] = "toggleCommanderMap"; +$RemapCount++; +$RemapName[$RemapCount] = "Toggle Task List"; +$RemapCmd[$RemapCount] = "toggleTaskListDlg"; +$RemapCount++; +$RemapName[$RemapCount] = "Accept Task"; +$RemapCmd[$RemapCount] = "fnAcceptTask"; +$RemapCount++; +$RemapName[$RemapCount] = "Decline Task"; +$RemapCmd[$RemapCount] = "fnDeclineTask"; +$RemapCount++; +$RemapName[$RemapCount] = "Task Completed"; +$RemapCmd[$RemapCount] = "fnTaskCompleted"; +$RemapCount++; +$RemapName[$RemapCount] = "Reset Task List"; +$RemapCmd[$RemapCount] = "fnResetTaskList"; +$RemapCount++; +$RemapName[$RemapCount] = "Vote Yes"; +$RemapCmd[$RemapCount] = "voteYes"; +$RemapCount++; +$RemapName[$RemapCount] = "Vote No"; +$RemapCmd[$RemapCount] = "voteNo"; +$RemapCount++; +$RemapName[$RemapCount] = "Voice Chat Menu"; +$RemapCmd[$RemapCount] = "activateChatMenuHud"; +$RemapCount++; +$RemapName[$RemapCount] = "Global Chat"; +$RemapCmd[$RemapCount] = "ToggleMessageHud"; +$RemapCount++; +$RemapName[$RemapCount] = "Team Chat"; +$RemapCmd[$RemapCount] = "TeamMessageHud"; +$RemapCount++; +$RemapName[$RemapCount] = "Resize Chat Hud"; +$RemapCmd[$RemapCount] = "resizeChatHud"; +$RemapCount++; +$RemapName[$RemapCount] = "Toggle Microphone"; +$RemapCmd[$RemapCount] = "voiceCapture"; +$RemapCount++; +$RemapName[$RemapCount] = "Toggle Help Text"; +$RemapCmd[$RemapCount] = "toggleHelpGui"; +$RemapCount++; +$RemapName[$RemapCount] = "Score Screen"; +$RemapCmd[$RemapCount] = "toggleScoreScreen"; +$RemapCount++; +$RemapName[$RemapCount] = "Free Look"; +$RemapCmd[$RemapCount] = "toggleFreeLook"; +$RemapCount++; +$RemapName[$RemapCount] = "Exterior View"; +$RemapCmd[$RemapCount] = "toggleFirstPerson"; +$RemapCount++; +$RemapName[$RemapCount] = "Drop Weapon"; +$RemapCmd[$RemapCount] = "throwWeapon"; +$RemapCount++; +$RemapName[$RemapCount] = "Drop Pack"; +$RemapCmd[$RemapCount] = "throwPack"; +$RemapCount++; +$RemapName[$RemapCount] = "Drop Flag"; +$RemapCmd[$RemapCount] = "throwFlag"; +$RemapCount++; +$RemapName[$RemapCount] = "Suicide"; +$RemapCmd[$RemapCount] = "suicide"; +$RemapCount++; +$RemapName[$RemapCount] = "Toggle Personal Wypts"; +$RemapCmd[$RemapCount] = "toggleHudWaypoints"; +$RemapCount++; +$RemapName[$RemapCount] = "Toggle Mission Wypts"; +$RemapCmd[$RemapCount] = "toggleHudMarkers"; +$RemapCount++; +$RemapName[$RemapCount] = "Toggle Beacons"; +$RemapCmd[$RemapCount] = "toggleHudTargets"; +$RemapCount++; +$RemapName[$RemapCount] = "Toggle Commands"; +$RemapCmd[$RemapCount] = "toggleHudCommands"; +$RemapCount++; +// $RemapName[$RemapCount] = "Start Demo Record"; +// $RemapCmd[$RemapCount] = "startRecordingDemo"; +// $RemapCount++; +// $RemapName[$RemapCount] = "Stop Demo Record"; +// $RemapCmd[$RemapCount] = "stopRecordingDemo"; +// $RemapCount++; +$RemapName[$RemapCount] = "Chat Page Up"; +$RemapCmd[$RemapCount] = "pageMessageHudUp"; +$RemapCount++; +$RemapName[$RemapCount] = "Chat Page Down"; +$RemapCmd[$RemapCount] = "pageMessageHudDown"; +$RemapCount++; + +//------------------------------------------------------------------------------ +function restoreDefaultMappings() +{ + moveMap.delete(); + exec( "scripts/controlDefaults.cs" ); + $pref::Input::ActiveConfig = "MyConfig"; + OP_RemapList.fillList(); +} + +//------------------------------------------------------------------------------ +function isMapFile( %file ) +{ + %fObject = new FileObject(); + if ( !%fObject.openForRead( %file ) ) + return( false ); + + while ( !%fObject.isEOF() ) + { + %line = %fObject.readLine(); + if ( %line $= "// Tribes 2 Input Map File" ) + { + %fObject.close(); + return( true ); + } + } + + %fObject.close(); + return( false ); +} + +//------------------------------------------------------------------------------ +function isValidMapFileSaveName( %file ) +{ + if ( !isWriteableFileName( "base/" @ %file ) ) + return( false ); + + if ( isFile( %file ) ) + return( isMapFile( %file ) ); + + return( true ); +} + +//------------------------------------------------------------------------------ +function loadMapFile( %filename ) +{ + exec( "prefs/" @ %filename @ ".cs" ); + $pref::Input::ActiveConfig = %filename; + OP_RemapList.fillList(); +} + +//------------------------------------------------------------------------------ +function saveActiveMapFile() +{ + if ( isValidMapFileSaveName( "prefs/" @ $pref::Input::ActiveConfig @ ".cs" ) ) + saveMapFile( $pref::Input::ActiveConfig ); + else + ShellGetSaveFilename( "SAVE CONTROL CONFIG", "prefs/*.cs", "isMapFile", "saveMapFile", "" ); +} + +//------------------------------------------------------------------------------ +function saveMapFile( %filename ) +{ + %mapFile = "prefs/" @ %filename @ ".cs"; + if ( !isWriteableFileName( "base/" @ %mapFile ) ) + { + MessageBoxOK( "SAVE FAILED", "That is not a writeable file name. Please choose another file name.", + "ShellGetSaveFilename( \"SAVE CONTROL CONFIG\", \"prefs/*.cs\", \"isMapFile\", \"saveMapFile\", $pref::Input::ActiveConfig );" ); + return; + } + + if ( isFile( %mapFile ) && !isMapFile( %mapFile ) ) + { + MessageBoxOK( "SAVE FAILED", "A file of that name already exists and is not an input configuration file. Please choose another file name.", + "ShellGetSaveFilename( \"SAVE CONTROL CONFIG\", \"prefs/*.cs\", \"isMapFile\", \"saveMapFile\", $pref::Input::ActiveConfig );" ); + return; + } + + moveMap.save( %mapFile ); + + // Write out the console toggle key: + %fObject = new FileObject(); + if ( %fObject.openForAppend( %mapFile ) ) + { + %bind = GlobalActionMap.getBinding( "toggleConsole" ); + %fObject.writeLine( "GlobalActionMap.bind(keyboard, \"" @ getField( %bind, 1 ) @ "\", toggleConsole);" ); + %fObject.close(); + } + %fObject.delete(); + + $pref::Input::ActiveConfig = %filename; +} + +//------------------------------------------------------------------------------ +function getMapDisplayName( %device, %action ) +{ + if ( %device $= "keyboard" ) + return( %action ); + else if ( strstr( %device, "mouse" ) != -1 ) + { + // Substitute "mouse" for "button" in the action string: + %pos = strstr( %action, "button" ); + if ( %pos != -1 ) + { + %mods = getSubStr( %action, 0, %pos ); + %object = getSubStr( %action, %pos, 1000 ); + %instance = getSubStr( %object, strlen( "button" ), 1000 ); + return( %mods @ "mouse" @ ( %instance + 1 ) ); + } + else + error( "Mouse input object other than button passed to getDisplayMapName!" ); + } + else if ( strstr( %device, "joystick" ) != -1 ) + { + // TODO - add POV support here... + // Substitute "joy" for "button" in the action string: + %pos = strstr( %action, "button" ); + if ( %pos != -1 ) + { + %mods = getSubStr( %action, 0, %pos ); + %object = getSubStr( %action, %pos, 1000 ); + %instance = getSubStr( %object, strlen( "button" ), 1000 ); + return( %mods @ "joy" @ ( %instance + 1 ) ); + } + else + { + %pos = strstr( %action, "pov" ); + if ( %pos != -1 ) + { + %mods = getSubStr( %action, 0, %pos ); + %object = getSubStr( %action, %pos, 1000 ); + MessageBoxOK( "WARNING", "Sorry, Joystick POVs are not yet supported." ); + return( "" ); + } + else + { + error( "Unsupported Joystick input object passed to getDisplayMapName!" ); + MessageBoxOK( "ERROR", "That type of input object is not supported." ); + return( "" ); + } + } + } + + return( "??" ); +} + +//------------------------------------------------------------------------------ +function buildFullMapString( %index ) +{ + %temp = moveMap.getBinding( $RemapCmd[%index] ); + %device = getField( %temp, 0 ); + %object = getField( %temp, 1 ); + if ( %device !$= "" && %object !$= "" ) + %mapString = getMapDisplayName( %device, %object ); + else + %mapString = ""; + + return( $RemapName[%index] @ "\t" @ %mapString ); +} + +//------------------------------------------------------------------------------ +function OP_RemapList::fillList( %this ) +{ + %this.clear(); + for ( %i = 0; %i < $RemapCount; %i++ ) + %this.addRow( %i, buildFullMapString( %i ) ); + + // Set the console key: + %bind = GlobalActionMap.getBinding( "toggleConsole" ); + OP_ConsoleKeyBtn.setValue( getField( %bind, 1 ) ); +} + +//------------------------------------------------------------------------------ +function OP_RemapList::onDeleteKey( %this, %rowId ) +{ + clearMapping( %rowId ); + %this.setRowById( %rowId, buildFullMapString( %rowId ) ); +} + +//------------------------------------------------------------------------------ +function OP_RemapList::doRemap( %this ) +{ + %selId = %this.getSelectedId(); + RemapFrame.setTitle( "REMAP \"" @ $RemapName[%selId] @ "\"" ); + RemapInputCtrl.mode = "move"; + RemapInputCtrl.index = %selId; + Canvas.pushDialog( RemapDlg ); +} + +//------------------------------------------------------------------------------ +function OP_ConsoleKeyBtn::doRemap( %this ) +{ + RemapFrame.setTitle( "Remap \"Toggle Console\"" ); + RemapInputCtrl.mode = "consoleKey"; + RemapInputCtrl.index = 0; + Canvas.pushDialog( RemapDlg ); +} + +//------------------------------------------------------------------------------ +function RemapDlg::onWake( %this ) +{ + if ( RemapInputCtrl.mode $= "consoleKey" ) + RemapText.setText( "Press a key to assign it to this action" NL "or Esc to cancel..." ); + else + RemapText.setText( "Press a key or button to assign it to this action" NL "or Esc to cancel..." ); + //CursorOff(); +} + +//------------------------------------------------------------------------------ +function RemapDlg::onSleep( %this ) +{ + //CursorOn(); +} + +//------------------------------------------------------------------------------ +function findRemapCmdIndex( %command ) +{ + for ( %i = 0; %i < $RemapCount; %i++ ) + { + if ( %command $= $RemapCmd[%i] ) + return( %i ); + } + + return( -1 ); +} + +//------------------------------------------------------------------------------ +function clearMapping( %index ) +{ + %fullMapString = moveMap.getBinding( $RemapCmd[%index] ); + %mapCount = getRecordCount( %fullMapString ); + for ( %i = 0; %i < %mapCount; %i++ ) + { + %temp = getRecord( %fullMapString, %i ); + moveMap.unbind( getField( %temp, 0 ), getField( %temp, 1 ) ); + } +} + +//------------------------------------------------------------------------------ +function redoMapping( %device, %action, %oldIndex, %newIndex ) +{ + moveMap.bind( %device, %action, $RemapCmd[%newIndex] ); + OP_RemapList.setRowById( %oldIndex, buildFullMapString( %oldIndex ) ); + OP_RemapList.setRowById( %newIndex, buildFullMapString( %newIndex ) ); +} + +//------------------------------------------------------------------------------ +function redoConsoleMapping( %action, %oldIndex ) +{ + moveMap.unbind( "keyboard", %action ); + GlobalActionMap.bind( "keyboard", %action, "toggleConsole" ); + OP_ConsoleKeyBtn.setValue( %action ); + OP_RemapList.setRowById( %oldIndex, buildFullMapString( %oldIndex ) ); +} + +//------------------------------------------------------------------------------ +function RemapInputCtrl::onInputEvent( %this, %device, %action ) +{ + //error( "** onInputEvent called - device = " @ %device @ ", action = " @ %action @ " **" ); + Canvas.popDialog( RemapDlg ); + + // Tested for the reserved keystrokes: + if ( %device $= "keyboard" ) + { + // Cancel... + if ( %action $= "escape" ) + { + // Do nothing... + return; + } + } + + if ( %this.mode $= "move" ) + { + // First check to see if the given action is already mapped: + %prevMap = moveMap.getCommand( %device, %action ); + if ( %prevMap !$= $RemapCmd[%this.index] ) + { + if ( %prevMap $= "" ) + { + moveMap.bind( %device, %action, $RemapCmd[%this.index] ); + OP_RemapList.setRowById( %this.index, buildFullMapString( %this.index ) ); + } + else + { + %mapName = getMapDisplayName( %device, %action ); + %prevMapIndex = findRemapCmdIndex( %prevMap ); + if ( %prevMapIndex == -1 ) + MessageBoxOK( "REMAP FAILED", "\"" @ %mapName @ "\" is already bound to a non-remappable command!" ); + else + MessageBoxYesNo( "WARNING", + "\"" @ %mapName @ "\" is already bound to \"" + @ $RemapName[%prevMapIndex] @ "\"!\nDo you want to undo this mapping?", + "redoMapping(" @ %device @ ", \"" @ %action @ "\", " @ %prevMapIndex @ ", " @ %this.index @ ");", "" ); + return; + } + } + } + else if ( %this.mode $= "consoleKey" ) + { + if ( %device !$= "keyboard" ) + { + MessageBoxOK( "REMAP FAILED", "This command can only be bound to keys on the keyboard!" ); + return; + } + + %prevMap = GlobalActionMap.getCommand( %device, %action ); + if ( %prevMap !$= "" ) + { + MessageBoxOK( "REMAP FAILED", "\"" @ getMapDisplayName( %device, %action ) @ "\" is already bound to a non-remappable command!" ); + return; + } + + %mvMap = moveMap.getCommand( %device, %action ); + if ( %mvMap $= "" ) + { + GlobalActionMap.bind( %device, %action, "toggleConsole" ); + OP_ConsoleKeyBtn.setValue( %action ); + } + else + { + %mapName = getMapDisplayName( %device, %action ); + %mvMapIndex = findRemapCmdIndex( %mvMap ); + if ( %mvMapIndex == -1 ) + MessageBoxOK( "REMAP FAILED", "\"" @ %mapName @ "\" is already bound to a non-remappable command!" ); + else + MessageBoxYesNo( "WARNING", "\"" @ %mapName @ "\" is already bound to \"" + @ $RemapName[%mvMapIndex] @ "\"!" + NL "Do you want to undo this mapping?", + "redoConsoleMapping(\"" @ %action @ "\", " @ %mvMapIndex @ ");", "" ); + return; + } + } + else + error( "The sky is falling, the sky is falling!" ); +} + +//------------------------------------------------------------------------------ +function OP_JoystickTgl::onAction( %this ) +{ + OP_ConfigureJoystickBtn.setActive( %this.getValue() ); +} + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +$RemapAxisCount = 0; +$RemapAxisName[$RemapAxisCount] = "Look Up/Down"; +$RemapAxisCmd[$RemapAxisCount] = "pitch"; +$RemapAxisCount++; +$RemapAxisName[$RemapAxisCount] = "Turn Left/Right"; +$RemapAxisCmd[$RemapAxisCount] = "yaw"; +$RemapAxisCount++; +$RemapAxisName[$RemapAxisCount] = "Cycle Weapon"; +$RemapAxisCmd[$RemapAxisCount] = "cycleWeaponAxis"; +$RemapAxisCount++; +$RemapAxisName[$RemapAxisCount] = "Move Forward/Backward"; +$RemapAxisCmd[$RemapAxisCount] = "joystickMoveY"; +$RemapAxisCount++; +$RemapAxisName[$RemapAxisCount] = "Move Left/Right"; +$RemapAxisCmd[$RemapAxisCount] = "joystickMoveX"; +$RemapAxisCount++; + +//------------------------------------------------------------------------------ +function MouseConfigDlg::onWake( %this ) +{ + MouseXSlider.setValue( moveMap.getScale( mouse, xaxis ) / 2 ); + MouseYSlider.setValue( moveMap.getScale( mouse, yaxis ) / 2 ); + InvertMouseTgl.setValue( moveMap.isInverted( mouse, yaxis ) ); + + MouseZActionMenu.clear(); + MouseZActionMenu.add( "Nothing", 1 ); + MouseZActionMenu.add( "Cycle Weapon", 2 ); + MouseZActionMenu.add( "Next Weapon Only", 3 ); + + %bind = moveMap.getCommand( "mouse", "zaxis" ); + %selId = 1; + switch$ ( %bind ) + { + case "cycleWeaponAxis": + %selId = 2; + case "cycleNextWeaponOnly": + %selId = 3; + } + MouseZActionMenu.setSelected( %selId ); +} + +//------------------------------------------------------------------------------ +function MouseConfigDlg::onOK( %this ) +{ + %xSens = MouseXSlider.getValue() * 2; + %ySens = MouseYSlider.getValue() * 2; + moveMap.bind( mouse, xaxis, "S", %xSens, "yaw" ); + %yFlags = InvertMouseTgl.getValue() ? "SI" : "S"; + moveMap.bind( mouse, yaxis, %yFlags, %ySens, "pitch" ); + + switch ( MouseZActionMenu.getSelected() ) + { + case 2: + moveMap.bind( mouse, zaxis, cycleWeaponAxis ); + case 3: + moveMap.bind( mouse, zaxis, cycleNextWeaponOnly ); + default: + moveMap.unbind( mouse, zaxis ); + } + + Canvas.popDialog( MouseConfigDlg ); +} + +//------------------------------------------------------------------------------ +function MouseXSlider::sync( %this ) +{ + %thisValue = %this.getValue(); + MouseXText.setValue( "(" @ getSubStr( %thisValue, 0, 4 ) @ ")" ); + if ( $pref::Input::LinkMouseSensitivity ) + { + if ( MouseYSlider.getValue() != %thisValue ) + MouseYSlider.setValue( %thisValue ); + } +} + +//------------------------------------------------------------------------------ +function MouseYSlider::sync( %this ) +{ + %thisValue = %this.getValue(); + MouseYText.setValue( "(" @ getSubStr( %thisValue, 0, 4 ) @ ")" ); + if ( $pref::Input::LinkMouseSensitivity ) + { + if ( MouseXSlider.getValue() != %thisValue ) + MouseXSlider.setValue( %thisValue ); + } +} + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +function JoystickConfigDlg::onWake( %this ) +{ + // Add all of the axis tabs: + %temp = getJoystickAxes( 0 ); + $joyAxisCount = getField( %temp , 0 ); + + for ( %i = 0; %i < $joyAxisCount; %i++ ) + { + %type = getField( %temp, %i + 1 ); + $JoyAxisTab[%i] = new ShellTabButton() { + profile = "ShellTabProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "29" SPC ( 52 + ( %i * 30 ) ); + extent = "100 38"; + minExtent = "48 38"; + visible = "1"; + command = "JoystickConfigDlg.setPane(" @ %i @ ");"; + helpTag = "0"; + text = %type SPC "Axis"; + }; + + switch$ ( %type ) + { + case "X": $JoyAxisTab[%i].type = "xaxis"; + case "Y": $JoyAxisTab[%i].type = "yaxis"; + case "Z": $JoyAxisTab[%i].type = "zaxis"; + case "R": $JoyAxisTab[%i].type = "rxaxis"; + case "U": $JoyAxisTab[%i].type = "ryaxis"; + case "V": $JoyAxisTab[%i].type = "rzaxis"; + } + + JoystickConfigFrame.add( $JoyAxisTab[%i] ); + } + + // Fill the action menu: + JoyAxisActionMenu.clear(); + for ( %i = 0; %i < $RemapAxisCount; %i++ ) + JoyAxisActionMenu.add( $RemapAxisName[%i], %i ); + JoyAxisActionMenu.add( "Nothing", 255 ); + + // Select the first axis: + %this.setPane( %this.pane ); +} + +//------------------------------------------------------------------------------ +function JoystickConfigDlg::onSleep( %this ) +{ + // Save the current pane's settings: + bindJoystickAxis( %this.pane, JoyAxisActionMenu.getSelected() ); + for ( %i = 0; %i < $joyAxisCount; %i++ ) + { + JoystickConfigFrame.remove( $JoyAxisTab[%i] ); + $JoyAxisTab[%i].delete(); + } +} + +//------------------------------------------------------------------------------ +function JoystickConfigDlg::setPane( %this, %pane ) +{ + if ( %this.pane != %pane ) + { + // Save the previous axes' settings: + bindJoystickAxis( %this.pane, JoyAxisActionMenu.getSelected() ); + %this.pane = %pane; + } + + for ( %i = 0; %i < $joyAxisCount; %i++ ) + $JoyAxisTab[%i].setValue( %i == %pane ); + + // Update the config controls: + %axisType = $JoyAxisTab[%pane].type; + %bind = moveMap.getCommand( "joystick", %axisType ); + if ( %bind !$= "" ) + { + for ( %i = 0; %i < $RemapAxisCount; %i++ ) + { + if ( $RemapAxisCmd[%i] $= %bind ) + { + JoyAxisActionMenu.setSelected( %i ); + JoyAxisActionMenu.setText( $RemapAxisName[%i] ); + JoyAxisActionMenu.onSelect( %i, "" ); + break; + } + } + + if ( %i == $RemapAxisCount ) + { + JoyAxisActionMenu.setSelected( 255 ); // 255 is the code for "Nothing" + JoyAxisActionMenu.onSelect( 255, "" ); + } + + %scale = moveMap.getScale( "joystick", %axisType ); + JoyAxisSlider.setValue( %scale / 100 ); + %deadZone = moveMap.getDeadZone( "joystick", %axisType ); + if ( %deadZone $= "0 0" ) + DeadZoneSlider.setValue( 0.0 ); + else + DeadZoneSlider.setValue( abs( firstWord( %deadZone ) ) / %scale ); + InvertJoyAxisTgl.setValue( moveMap.isInverted( "joystick", %axisType ) ); + } + else + { + JoyAxisActionMenu.setSelected( 255 ); // 255 is the code for "Nothing" + JoyAxisActionMenu.onSelect( 255, "" ); + JoyAxisSlider.setValue( 0.5 ); + DeadZoneSlider.setValue( 0.0 ); + InvertJoyAxisTgl.setValue( false ); + } +} + +//------------------------------------------------------------------------------ +function JoyAxisActionMenu::onSelect( %this, %id, %text ) +{ + if ( %id >= $RemapAxisCount ) + { + JoyAxisSlider.setActive( false ); + DeadZoneSlider.setActive( false ); + InvertJoyAxisTgl.setActive( false ); + } + else + { + JoyAxisSlider.setActive( true ); + DeadZoneSlider.setActive( true ); + InvertJoyAxisTgl.setActive( true ); + } +} + +//------------------------------------------------------------------------------ +function JoySensText::update() +{ + %this.setValue( "(" @ getSubStr( JoyAxisSlider.getValue(), 0, 4 ) @ ")" ); +} + +//------------------------------------------------------------------------------ +function DeadZoneText::update() +{ + %val = DeadZoneSlider.getValue(); + %percent = %val * 100; + %temp = strstr( %percent, "." ); + if ( %temp != -1 ) + %percent = getSubStr( %percent, 0, %temp ); + + %this.setValue( "(" @ %percent @ "%)" ); +} + +//------------------------------------------------------------------------------ +function bindJoystickAxis( %axisIndex, %cmdIndex ) +{ + %axis = $JoyAxisTab[%axisIndex].type; + if ( %cmdIndex > $RemapAxisCount ) + { + // Make sure the axis is unbound: + moveMap.unbind( "joystick", %axis ); + return; + } + + %sens = JoyAxisSlider.getValue() * 100; + %delta = DeadZoneSlider.getValue() * %sens; + if ( %delta > 0 ) + { + %deadZone = "-" @ %delta SPC %delta; + if ( InvertJoyAxisTgl.getValue() ) + moveMap.bind( "joystick", %axis, "SDI", %deadZone, %sens, $RemapAxisCmd[%cmdIndex] ); + else + moveMap.bind( "joystick", %axis, "SD", %deadZone, %sens, $RemapAxisCmd[%cmdIndex] ); + } + else + { + if ( InvertJoyAxisTgl.getValue() ) + moveMap.bind( "joystick", %axis, "SI", %sens, $RemapAxisCmd[%cmdIndex] ); + else + moveMap.bind( "joystick", %axis, "S", %sens, $RemapAxisCmd[%cmdIndex] ); + } +} + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +// Network Settings: +// +function OP_MasterServerMenu::init( %this ) +{ + %this.clear(); + // You can change these strings, but NOT THE IDS! + %this.add( "Always", 1 ); + %this.add( "When Not Full", 2 ); + %this.add( "Never", 3 ); +} + +//------------------------------------------------------------------------------ +function OP_MasterServerMenu::onSelect( %this, %id, %text ) +{ + switch( %id ) + { + case 2: + $pref::Net::DisplayOnMaster = "NotFull"; + case 3: + $pref::Net::DisplayOnMaster = "Never"; + default: + $pref::Net::DisplayOnMaster = "Always"; + } +} + +//------------------------------------------------------------------------------ +function OP_RegionMenu::init( %this ) +{ + %this.clear(); + %this.add( "North America East", 1 ); + %this.add( "North America West", 2 ); + %this.add( "South America", 4 ); + %this.add( "Australia", 8 ); + %this.add( "Asia", 16 ); + %this.add( "Europe", 32 ); +} + +//------------------------------------------------------------------------------ +function OP_RegionMenu::onSelect( %this, %id, %text ) +{ + $pref::Net::RegionMask = %id; +} + +//------------------------------------------------------------------------------ +function OP_LaunchScreenMenu::init( %this ) +{ + %this.clear(); + %this.add( "Game", 1 ); + %this.add( "News", 2 ); + %this.add( "Forums", 3 ); + %this.add( "Email", 4 ); + %this.add( "Chat", 5 ); + %this.add( "Browser", 6 ); +} + +//------------------------------------------------------------------------------ +function toggleImmersion() +{ + if( isImmersionEnabled() ) + enableImmersion( $Pref::useImmersion = false ); + else + enableImmersion( $Pref::useImmersion = true ); +} + diff --git a/base/scripts/PantherXL.cs b/base/scripts/PantherXL.cs new file mode 100644 index 0000000..9b9d6fe --- /dev/null +++ b/base/scripts/PantherXL.cs @@ -0,0 +1,33 @@ +//-------------------------------------------------------------------------- +// +// PantherXL.cs +// +// These are the default control bindings for the Mad Catz Panther XL Pro +// +//-------------------------------------------------------------------------- + +moveMap.bind( joystick, xaxis, D, "-0.1 0.1", joystickMoveX ); +moveMap.bind( joystick, yaxis, D, "-0.1 0.1", joystickMoveY ); +moveMap.bind( joystick, rxaxis, I, joystickPitch ); +moveMap.bind( joystick, ryaxis, joystickYaw ); + +moveMap.bind( joystick, button0, mouseFire ); +moveMap.bind( joystick, button1, mouseJet ); +moveMap.bindCmd( joystick, button2, "setFov(30);", "setFov($pref::player::defaultFOV);" ); +moveMap.bind( joystick, button3, jump ); + +moveMap.bindCmd( joystick, upov, "use(Plasma);", "" ); +moveMap.bindCmd( joystick, rpov, "use(Chaingun);", "" ); +moveMap.bindCmd( joystick, dpov, "use(Disc);", "" ); +moveMap.bindCmd( joystick, lpov, "use(GrenadeLauncher);", "" ); + +moveMap.bindCmd( joystick, button4, "use(SniperRifle);", "" ); // Second POV buttons... +moveMap.bindCmd( joystick, button5, "use(ELFGun);", "" ); +moveMap.bindCmd( joystick, button6, "use(Mortar);", "" ); +moveMap.bindCmd( joystick, button7, "use(MissileLauncher);", "" ); + +moveMap.bindCmd( joystick, button8, "use(RepairKit);", "" ); +moveMap.bind( joystick, button9, toggleFirstPerson ); +moveMap.bindCmd( joystick, button10, "prevWeapon();", "" ); +moveMap.bindCmd( joystick, button11, "use(Backpack);", "" ); +moveMap.bindCmd( joystick, button12, "nextWeapon();", "" ); diff --git a/base/scripts/PathEdit.cs b/base/scripts/PathEdit.cs new file mode 100644 index 0000000..5ee5a24 --- /dev/null +++ b/base/scripts/PathEdit.cs @@ -0,0 +1,110 @@ +// +// PathEdit.cs +// +function PathEdit::initInteriorEditor() +{ + echo("interior editor startup..."); + aiEdit.setPathMode(); + new ActionMap(PathEditMap); + PathEditMap.bindCmd(keyboard, g, "PathEdit::grabNode();", ""); + PathEditMap.bindCmd(keyboard, f, "PathEdit::dropNode();", ""); + PathEditMap.bindCmd(keyboard, u, "PathEdit::undoNodeGrab();", ""); + PathEditMap.bindCmd(keyboard, t, "PathEdit::createEdge();", ""); + PathEditMap.bindCmd(keyboard, r, "PathEdit::connectEdge();", ""); + PathEditMap.bindCmd(keyboard, "alt r", "PathEdit::grabEdge();", ""); + PathEditMap.bindCmd(keyboard, "alt t", "PathEdit::deleteEdge();", ""); + PathEditMap.bindCmd(keyboard, "alt g", "PathEdit::deleteNode();", ""); + PathEditMap.bindCmd(keyboard, "alt d", "PathEdit::beginEnd();", ""); + PathEditMap.bindCmd(keyboard, "j", "PathEdit::setJet();", ""); + PathEditMap.bindCmd(keyboard, "alt j", "PathEdit::setNotJet();", ""); + PathEditMap.bindCmd(keyboard, "alt s", "PathEdit::saveGraph();", ""); + PathEditMap.bindCmd(keyboard, "h", "PathEdit::createNode();", ""); + PathEditMap.push(); +} + +//------------------------------------------------------------------------------ + +function PathEdit::closeInteriorEdit() +{ + aiEdit.setUninitMode(); + PathEditMap.pop(); +} + +//------------------------------------------------------------------------------ + +function PathEdit::grabNode() +{ + aiEdit.grabNode(); +} + +//------------------------------------------------- + +function PathEdit::createNode() +{ + aiEdit.createNode(); +} + +//------------------------------------------------- + +function PathEdit::grabEdge() +{ + aiEdit.grabEdge(); +} + +//------------------------------------------------- + +function PathEdit::dropNode() +{ + aiEdit.placeNode(); +} + +//------------------------------------------------- + +function PathEdit::undoNodeGrab() +{ + aiEdit.putBackNode(); +} + +//------------------------------------------------- + +function PathEdit::deleteNode() +{ + aiEdit.deleteNode(); +} + +//------------------------------------------------- + +function PathEdit::deleteEdge() +{ + aiEdit.deleteEdge(); +} + +//------------------------------------------------- + +function PathEdit::createEdge() +{ + aiEdit.createEdge(); +} + +//------------------------------------------------- + +function PathEdit::connectEdge() +{ + aiEdit.connectEdge(); +} + +//------------------------------------------------- + +function PathEdit::setJet() +{ + aiEdit.setJetting(true); +} + +//------------------------------------------------- + +function PathEdit::setNotJet() +{ + aiEdit.setJetting(false); +} + +//------------------------------------------------- diff --git a/base/scripts/RabbitGame.cs b/base/scripts/RabbitGame.cs new file mode 100644 index 0000000..8170ba7 --- /dev/null +++ b/base/scripts/RabbitGame.cs @@ -0,0 +1,699 @@ +//------------------------------------------------------------------- +// Team Rabbit script +// ------------------------------------------------------------------- + +//--- GAME RULES BEGIN --- +//Grab the flag +//Run like crazy +//EVERYONE tries to kill the person with the flag (the Rabbit) +//The longer the Rabbit keeps the flag, the more points he scores +//--- GAME RULES END --- + +package RabbitGame { + +function Flag::objectiveInit(%data, %flag) +{ + $flagStatus = ""; + %flag.carrier = ""; + %flag.originalPosition = %flag.getTransform(); + %flag.isHome = true; + + // create a waypoint to the flag's starting place + %flagWaypoint = new WayPoint() + { + position = %flag.position; + rotation = "1 0 0 0"; + name = "Flag Home"; + dataBlock = "WayPointMarker"; + team = $NonRabbitTeam; + }; + + $AIRabbitFlag = %flag; + + MissionCleanup.add(%flagWaypoint); +} + +}; + +//exec the AI scripts +exec("scripts/aiRabbit.cs"); + +$InvBanList[Rabbit, "TurretOutdoorDeployable"] = 1; +$InvBanList[Rabbit, "TurretIndoorDeployable"] = 1; +$InvBanList[Rabbit, "ElfBarrelPack"] = 1; +$InvBanList[Rabbit, "MortarBarrelPack"] = 1; +$InvBanList[Rabbit, "PlasmaBarrelPack"] = 1; +$InvBanList[Rabbit, "AABarrelPack"] = 1; +$InvBanList[Rabbit, "MissileBarrelPack"] = 1; +$InvBanList[Rabbit, "MissileLauncher"] = 1; +$InvBanList[Rabbit, "Mortar"] = 1; +$InvBanList[Rabbit, "Mine"] = 1; + +function RabbitGame::setUpTeams(%game) +{ + // Force the numTeams variable to one: + DefaultGame::setUpTeams(%game); + %game.numTeams = 1; + setSensorGroupCount(3); + + //team damage should always be off for Rabbit + $teamDamage = 0; + + //make all the sensor groups visible at all times + if (!Game.teamMode) + { + setSensorGroupAlwaysVisMask($NonRabbitTeam, 0xffffffff); + setSensorGroupAlwaysVisMask($RabbitTeam, 0xffffffff); + + // non-rabbits can listen to the rabbit: all others can only listen to self + setSensorGroupListenMask($NonRabbitTeam, (1 << $RabbitTeam) | (1 << $NonRabbitTeam)); + } +} + +function RabbitGame::initGameVars(%game) +{ + %game.playerBonusValue = 1; + %game.playerBonusTime = 3 * 1000; //3 seconds + + %game.teamBonusValue = 1; + %game.teamBonusTime = 15 * 1000; //15 seconds + %game.flagReturnTime = 45 * 1000; //45 seconds + + %game.waypointFrequency = 24000; + %game.waypointDuration = 6000; +} + +$RabbitTeam = 2; +$NonRabbitTeam = 1; + +// ----- These functions supercede those in DefaultGame.cs + +function RabbitGame::allowsProtectedStatics(%game) +{ + return true; +} + +function RabbitGame::clientMissionDropReady(%game, %client) +{ + messageClient(%client, 'MsgClientReady', "", %game.class); + messageClient(%client, 'MsgYourScoreIs', "", 0); + //messageClient(%client, 'MsgYourRankIs', "", -1); + messageClient(%client, 'MsgRabbitFlagStatus', "", $flagStatus); + + messageClient(%client, 'MsgMissionDropInfo', '\c0You are in mission %1 (%2).', $MissionDisplayName, $MissionTypeDisplayName, $ServerName ); + + DefaultGame::clientMissionDropReady(%game,%client); +} + +function RabbitGame::AIHasJoined(%game, %client) +{ + //let everyone know the player has joined the game + //messageAllExcept(%client, -1, 'MsgClientJoinTeam', '%1 has joined the hunt.', %client.name, "", %client, $NonRabbitTeam); +} + +function RabbitGame::clientJoinTeam( %game, %client, %team, %respawn ) +{ + %game.assignClientTeam( %client ); + + // Spawn the player: + %game.spawnPlayer( %client, %respawn ); +} + + +function RabbitGame::assignClientTeam(%game, %client) +{ + // all players start on team 1 + %client.team = $NonRabbitTeam; + + // set player's skin pref here + setTargetSkin(%client.target, %client.skin); + + // Let everybody know you are no longer an observer: + messageAll( 'MsgClientJoinTeam', '\c1%1 has joined the hunt.', %client.name, "", %client, %client.team ); + updateCanListenState( %client ); +} + +function RabbitGame::playerSpawned(%game, %player) +{ + //call the default stuff first... + DefaultGame::playerSpawned(%game, %player); + + //find the rabbit + %clRabbit = -1; + for (%i = 0; %i < ClientGroup.getCount(); %i++) + { + %cl = ClientGroup.getObject(%i); + if (isObject(%cl.player) && isObject(%cl.player.holdingFlag)) + { + %clRabbit = %cl; + break; + } + } + + //now set a waypoint just for that client... + cancel(%player.client.waypointSchedule); + if (isObject(%clRabbit) && !%player.client.isAIControlled()) + %player.client.waypointSchedule = %game.showRabbitWaypointClient(%clRabbit, %player.client); +} + +function RabbitGame::pickPlayerSpawn(%game, %client, %respawn) +{ + // all spawns come from team 1 + return %game.pickTeamSpawn($NonRabbitTeam); +} + +function RabbitGame::createPlayer(%game, %client, %spawnLoc, %respawn) +{ + %client.team = $NonRabbitTeam; + DefaultGame::createPlayer(%game, %client, %spawnLoc, %respawn); +} + +function RabbitGame::recalcScore(%game, %client) +{ + //score is grabs + kills + (totalTime / 15 seconds); + %timeHoldingFlagMS = %client.flagTimeMS; + if (isObject(%client.player.holdingFlag)) + %timeHoldingFlagMS += getSimTime() - %client.startTime; + %client.score = %client.flagGrabs + %client.kills + mFloor(%timeHoldingFlagMS / 15000); + messageClient(%client, 'MsgYourScoreIs', "", %client.score); + %game.recalcTeamRanks(%client); + %game.checkScoreLimit(%client); +} + +function RabbitGame::onClientDamaged(%game, %clVictim, %clAttacker, %damageType, %sourceObject) +{ + //if the victim is the rabbit, and the attacker is not the rabbit, set the damage time... + if (isObject(%clAttacker) && %clAttacker != %clVictim) + { + if (%clVictim.team == $RabbitTeam) + %game.rabbitDamageTime = getSimTime(); + } + + //call the default + DefaultGame::onClientDamaged(%game, %clVictim, %clAttacker, %damageType, %sourceObject); +} + +function RabbitGame::onClientKilled(%game, %clVictim, %clKiller, %damageType, %implement, %damageLoc) +{ + //see if the killer was the rabbit and the victim was someone else... + if (isObject(%clKiller) && (%clKiller != %clVictim) && (%clKiller.team == $RabbitTeam)) + { + %clKiller.kills++; + %game.recalcScore(%clKiller); + } + + DefaultGame::onClientKilled(%game, %clVictim, %clKiller, %damageType, %implement, %damageLoc); +} + +function RabbitGame::playerDroppedFlag(%game, %player) +{ + //set the flag status + %flag = %player.holdingFlag; + %player.holdingFlag = ""; + %flag.carrier = ""; + $flagStatus = ""; + + %player.unmountImage($FlagSlot); + %flag.hide(false); + + //hide the rabbit waypoint + cancel(%game.waypointSchedule); + %game.hideRabbitWaypoint(%player.client); + + //set the client status + %player.client.flagTimeMS += getSimTime() - %player.client.startTime; + %player.client.team = $NonRabbitTeam; + %player.client.setSensorGroup($NonRabbitTeam); + setTargetSensorGroup(%player.getTarget(), $NonRabbitTeam); + + messageAllExcept(%player.client, -1, 'MsgRabbitFlagDropped', '\c2%1 dropped the flag!~wfx/misc/flag_drop.wav', %player.client.name); + // if the player left the mission area, he's already been notified + if(!%player.outArea) + messageClient(%player.client, 'MsgRabbitFlagDropped', '\c2You dropped the flag!~wfx/misc/flag_drop.wav'); + logEcho(%player.client.nameBase@" (pl "@%player@"/cl "@%player.client@") dropped flag"); + + %flag.returnThread = %game.schedule(%game.flagReturnTime, "returnFlag", %flag); +} + +function RabbitGame::playerTouchFlag(%game, %player, %flag) +{ + if ((%flag.carrier $= "") && (%player.getState() !$= "Dead")) + { + %player.client.startTime = getSimTime(); + %player.holdingFlag = %flag; + %flag.carrier = %player; + %player.mountImage(FlagImage, $FlagSlot, true); //, $teamSkin[$RabbitTeam]); + cancel(%flag.returnThread); + %flag.hide(true); + %flag.isHome = false; + $flagStatus = %client.name; + messageAll('MsgRabbitFlagTaken', '\c2%1 has taken the flag!~wfx/misc/flag_snatch.wav', %player.client.name); + logEcho(%player.client.nameBase@" (pl "@%player@"/cl "@%player.client@") took flag"); + %player.client.team = $RabbitTeam; + %player.client.setSensorGroup($RabbitTeam); + setTargetSensorGroup(%player.getTarget(), $RabbitTeam); + + //increase the score + %player.client.flagGrabs++; + %game.recalcScore(%player.client); + %game.schedule(5000, "RabbitFlagCheck", %player); + + //show the rabbit waypoint + %game.rabbitDamageTime = 0; + cancel(%game.waypointSchedule); + %game.showRabbitWaypoint(%player.client); + } +} + +function RabbitGame::rabbitFlagCheck(%game, %player) +{ + // this function calculates the score for the rabbit. It must be done periodically + // since the rabbit's score is based on how long the flag has been in possession. + if((%player.holdingFlag != 0) && (%player.getState() !$= "Dead")) + { + %game.recalcScore(%player.client); + //reschedule this flagcheck for 5 seconds + %game.schedule(5000, "RabbitFlagCheck", %player); + } +} + +function RabbitGame::returnFlag(%game, %flag) +{ + messageAll('MsgRabbitFlagReturned', '\c2The flag was returned to its starting point.~wfx/misc/flag_return.wav'); + logEcho("flag return (timeout)"); + %game.resetFlag(%flag); +} + +function RabbitGame::resetFlag(%game, %flag) +{ + %flag.setVelocity("0 0 0"); + %flag.setTransform(%flag.originalPosition); + %flag.isHome = true; + %flag.carrier = ""; + $flagStatus = ""; + %flag.hide(false); +} + +// ----- These functions are native to Rabbit + +function RabbitGame::timeLimitReached(%game) +{ + logEcho("game over (timelimit)"); + %game.gameOver(); + cycleMissions(); +} + +function RabbitGame::scoreLimitReached(%game) +{ + logEcho("game over (scorelimit)"); + %game.gameOver(); + cycleMissions(); +} + +function RabbitGame::checkScoreLimit(%game, %client) +{ + %scoreLimit = MissionGroup.Rabbit_scoreLimit; + // default of 1200 if scoreLimit not defined (that's 1200 seconds worth - 20 minutes) + if(%scoreLimit $= "") + %scoreLimit = 1200; + if(%client.score >= %scoreLimit) + %game.scoreLimitReached(); +} + +function RabbitGame::gameOver(%game) +{ + //call the default + DefaultGame::gameOver(%game); + + //send the message + messageAll('MsgGameOver', "Match has ended.~wvoice/announcer/ann.gameover.wav" ); + + cancel(%game.rabbitWaypointThread); + messageAll('MsgClearObjHud', ""); + for(%i = 0; %i < ClientGroup.getCount(); %i++) + { + %client = %group.getObject(%i); + %game.resetScore(%client); + cancel(%client.waypointSchedule); + } + + cancel(%game.waypointSchedule); +} + +function RabbitGame::resetScore(%game, %client) +{ + %client.score = 0; + %client.kills = 0; + %client.flagGrabs = 0; + %client.flagTimeMS = 0; +} + +function RabbitGame::enterMissionArea(%game, %playerData, %player) +{ + %player.client.outOfBounds = false; + messageClient(%player.client, 'EnterMissionArea', '\c1You are back in the mission area.'); + logEcho(%player.client.nameBase@" (pl "@%player@"/cl "@%player.client@") entered mission area"); + cancel(%player.alertThread); +} + +function RabbitGame::leaveMissionArea(%game, %playerData, %player) +{ + %player.client.outOfBounds = true; + if (%player.client.team == $RabbitTeam) + messageClient(%player.client, 'LeaveMissionArea', '\c1You have left the mission area. Return or take damage.~wfx/misc/warning_beep.wav'); + else + messageClient(%player.client, 'LeaveMissionArea', '\c1You have left the mission area.~wfx/misc/warning_beep.wav'); + logEcho(%player.client.nameBase@" (pl "@%player@"/cl "@%player.client@") left mission area"); + %player.alertThread = %game.schedule(1000, "AlertPlayer", 3, %player); +} + +function RabbitGame::AlertPlayer(%game, %count, %player) +{ + if (%player.client.team == $RabbitTeam) + { + if(%count > 1) + %player.alertThread = %game.schedule(1000, "AlertPlayer", %count - 1, %player); + else + %player.alertThread = %game.schedule(1000, "MissionAreaDamage", %player); + } + + //keep the thread going for non rabbits, but give the new rabbit time to return to the mission area... + else + %player.alertThread = %game.schedule(1000, "AlertPlayer", 3, %player); +} + +function RabbitGame::MissionAreaDamage(%game, %player) +{ + if(%player.getState() !$= "Dead") { + %player.setDamageFlash(0.1); + %prevHurt = %player.getDamageLevel(); + %player.setDamageLevel(%prevHurt + 0.05); + // a little redundancy to see if the lastest damage killed the player + if(%player.getState() $= "Dead") + %game.onClientKilled(%player.client, 0, $DamageType::OutOfBounds); + else + %player.alertThread = %game.schedule(1000, "MissionAreaDamage", %player); + } + else + { + %game.onClientKilled(%player.client, 0, $DamageType::OutOfBounds); + } +} + +function RabbitGame::dropFlag(%game, %player) +{ + //you can no longer throw the flag in Rabbit... +} + +function RabbitGame::updateScoreHud(%game, %client, %tag) +{ + //tricky stuff here... use two columns if we have more than 15 clients... + %numClients = $TeamRank[0, count]; + if ( %numClients > $ScoreHudMaxVisible ) + %numColumns = 2; + + // Clear the header: + messageClient( %client, 'SetScoreHudHeader', "", "" ); + + // Send subheader: + if (%numColumns == 2) + messageClient(%client, 'SetScoreHudSubheader', "", '\tPLAYER\tSCORE\tTIME\tPLAYER\tSCORE\tTIME'); + else + messageClient(%client, 'SetScoreHudSubheader', "", '\tPLAYER\tSCORE\tTIME'); + + //recalc the score for whoever is holding the flag + if (isObject($AIRabbitFlag.carrier)) + %game.recalcScore($AIRabbitFlag.carrier.client); + + %countMax = %numClients; + if ( %countMax > ( 2 * $ScoreHudMaxVisible ) ) + { + if ( %countMax & 1 ) + %countMax++; + %countMax = %countMax / 2; + } + else if ( %countMax > $ScoreHudMaxVisible ) + %countMax = $ScoreHudMaxVisible; + + for (%index = 0; %index < %countMax; %index++) + { + //get the client info + %col1Client = $TeamRank[0, %index]; + %col1ClientScore = %col1Client.score $= "" ? 0 : %col1Client.score; + %col1Style = ""; + + if (isObject(%col1Client.player.holdingFlag)) + { + %col1ClientTimeMS = %col1Client.flagTimeMS + getSimTime() - %col1Client.startTime; + %col1Style = ""; + } + else + { + %col1ClientTimeMS = %col1Client.flagTimeMS; + if ( %col1Client == %client ) + %col1Style = ""; + } + + if (%col1ClientTimeMS <= 0) + %col1ClientTime = ""; + else + { + %minutes = mFloor(%col1ClientTimeMS / (60 * 1000)); + if (%minutes <= 0) + %minutes = "0"; + %seconds = mFloor(%col1ClientTimeMS / 1000) % 60; + if (%seconds < 10) + %seconds = "0" @ %seconds; + + %col1ClientTime = %minutes @ ":" @ %seconds; + } + + //see if we have two columns + if (%numColumns == 2) + { + %col2Client = ""; + %col2ClientScore = ""; + %col2ClientTime = ""; + %col2Style = ""; + + //get the column 2 client info + %col2Index = %index + %countMax; + if (%col2Index < %numClients) + { + %col2Client = $TeamRank[0, %col2Index]; + %col2ClientScore = %col2Client.score $= "" ? 0 : %col2Client.score; + + if (isObject(%col2Client.player.holdingFlag)) + { + %col2ClientTimeMS = %col2Client.flagTimeMS + getSimTime() - %col2Client.startTime; + %col2Style = ""; + } + else + { + %col2ClientTimeMS = %col2Client.flagTimeMS; + if ( %col2Client == %client ) + %col2Style = ""; + } + + if (%col2ClientTimeMS <= 0) + %col2ClientTime = ""; + else + { + %minutes = mFloor(%col2ClientTimeMS / (60 * 1000)); + if (%minutes <= 0) + %minutes = "0"; + %seconds = mFloor(%col2ClientTimeMS / 1000) % 60; + if (%seconds < 10) + %seconds = "0" @ %seconds; + + %col2ClientTime = %minutes @ ":" @ %seconds; + } + } + } + + //if the client is not an observer, send the message + if (%client.team != 0) + { + if ( %numColumns == 2 ) + messageClient( %client, 'SetLineHud', "", %tag, %index, '%7\t%1%2%3%8%4%5%6', + %col1Client.name, %col1ClientScore, %col1ClientTime, %col2Client.name, %col2ClientScore, %col2ClientTime, %col1Style, %col2Style ); + else + messageClient( %client, 'SetLineHud', "", %tag, %index, '%4\t%1%2%3', + %col1Client.name, %col1ClientScore, %col1ClientTime, %col1Style ); + } + //else for observers, create an anchor around the player name so they can be observed + else + { + if ( %numColumns == 2 ) + { + //this is really crappy, but I need to save 1 tag - can only pass in up to %9, %10 doesn't work... + if (%col2Style $= "") + { + messageClient( %client, 'SetLineHud', "", %tag, %index, '%7\t%1%2%3%4%5%6', + %col1Client.name, %col1ClientScore, %col1ClientTime, + %col2Client.name, %col2ClientScore, %col2ClientTime, + %col1Style, %col1Client, %col2Client ); + } + else if (%col2Style $= "") + { + messageClient( %client, 'SetLineHud', "", %tag, %index, '%7\t%1%2%3%4%5%6', + %col1Client.name, %col1ClientScore, %col1ClientTime, + %col2Client.name, %col2ClientScore, %col2ClientTime, + %col1Style, %col1Client, %col2Client ); + } + else + { + messageClient( %client, 'SetLineHud', "", %tag, %index, '%7\t%1%2%3%4%5%6', + %col1Client.name, %col1ClientScore, %col1ClientTime, + %col2Client.name, %col2ClientScore, %col2ClientTime, + %col1Style, %col1Client, %col2Client ); + } + } + else + messageClient( %client, 'SetLineHud', "", %tag, %index, '%4\t%1%2%3', + %col1Client.name, %col1ClientScore, %col1ClientTime, %col1Style, %col1Client ); + } + } + + //clear the rest of Hud so we don't get old lines hanging around... + messageClient( %client, 'ClearHud', "", %tag, %index ); +} + +function RabbitGame::showRabbitWaypointClient(%game, %clRabbit, %client) +{ + //make sure we have a rabbit + if (!isObject(%clRabbit) || !isObject(%clRabbit.player) || !isObject(%clRabbit.player.holdingFlag)) + return; + + //no waypoints for bots + if (%client.isAIControlled()) + return; + + //scope the client, then set the always vis mask... + %clRabbit.player.scopeToClient(%client); + %visMask = getSensorGroupAlwaysVisMask(%clRabbit.getSensorGroup()); + %visMask |= (1 << %client.getSensorGroup()); + setSensorGroupAlwaysVisMask(%clRabbit.getSensorGroup(), %visMask); + + //now issue a command to kill the target + %client.setTargetId(%clRabbit.target); + commandToClient(%client, 'TaskInfo', %client, -1, false, "Kill the Rabbit!"); + %client.sendTargetTo(%client, true); + + //send the "waypoint is here sound" + messageClient(%client, 'MsgRabbitWaypoint', '~wfx/misc/target_waypoint.wav'); + + //and hide the waypoint + %client.waypointSchedule = %game.schedule(%game.waypointDuration, "hideRabbitWaypointClient", %clRabbit, %client); +} + +function RabbitGame::hideRabbitWaypointClient(%game, %clRabbit, %client) +{ + //no waypoints for bots + if (%client.isAIControlled()) + return; + + //unset the always vis mask... + %visMask = getSensorGroupAlwaysVisMask(%clRabbit.getSensorGroup()); + %visMask &= ~(1 << %client.getSensorGroup()); + setSensorGroupAlwaysVisMask(%clRabbit.getSensorGroup(), %visMask); + + //kill the actually task... + removeClientTargetType(%client, "AssignedTask"); +} + +function RabbitGame::showRabbitWaypoint(%game, %clRabbit) +{ + //make sure we have a rabbit + if (!isObject(%clRabbit) || !isObject(%clRabbit.player) || !isObject(%clRabbit.player.holdingFlag)) + return; + + //only show the rabbit waypoint if the rabbit hasn't been damaged within the frequency period + if (getSimTime() - %game.rabbitDamageTime < %game.waypointFrequency) + { + %game.waypointSchedule = %game.schedule(%game.waypointFrequency, "showRabbitWaypoint", %clRabbit); + return; + } + + //loop through all the clients and flash a waypoint at the rabbits position + for (%i = 0; %i < ClientGroup.getCount(); %i++) + { + %cl = ClientGroup.getObject(%i); + if (%cl.isAIControlled() || %cl == %clRabbit) + continue; + + //scope the client, then set the always vis mask... + %clRabbit.player.scopeToClient(%cl); + %visMask = getSensorGroupAlwaysVisMask(%clRabbit.getSensorGroup()); + %visMask |= (1 << %cl.getSensorGroup()); + setSensorGroupAlwaysVisMask(%clRabbit.getSensorGroup(), %visMask); + + //now issue a command to kill the target + %cl.setTargetId(%clRabbit.target); + commandToClient(%cl, 'TaskInfo', %cl, -1, false, "Kill the Rabbit!"); + %cl.sendTargetTo(%cl, true); + + //send the "waypoint is here sound" + messageClient(%cl, 'MsgRabbitWaypoint', '~wfx/misc/target_waypoint.wav'); + } + + //schedule the time to hide the waypoint + %game.waypointSchedule = %game.schedule(%game.waypointDuration, "hideRabbitWaypoint", %clRabbit); +} + +function RabbitGame::hideRabbitWaypoint(%game, %clRabbit) +{ + //make sure we have a valid client + if (!isObject(%clRabbit)) + return; + + //loop through all the clients and hide the waypoint + for (%i = 0; %i < ClientGroup.getCount(); %i++) + { + %cl = ClientGroup.getObject(%i); + if (%cl.isAIControlled()) + continue; + + //unset the always vis mask... + %visMask = getSensorGroupAlwaysVisMask(%clRabbit.getSensorGroup()); + %visMask &= ~(1 << %cl.getSensorGroup()); + setSensorGroupAlwaysVisMask(%clRabbit.getSensorGroup(), %visMask); + + //kill the actually task... + removeClientTargetType(%cl, "AssignedTask"); + } + + //make sure we have a rabbit before scheduling the next showRabbitWaypoint... + if (isObject(%clRabbit.player) && isObject(%clRabbit.player.holdingFlag)) + %game.waypointSchedule = %game.schedule(%game.waypointFrequency, "showRabbitWaypoint", %clRabbit); +} + +function RabbitGame::updateKillScores(%game, %clVictim, %clKiller, %damageType, %implement) +{ + if(%game.testTurretKill(%implement)) //check for turretkill before awarded a non client points for a kill + %game.awardScoreTurretKill(%clVictim, %implement); + else if (%game.testKill(%clVictim, %clKiller)) //verify victim was an enemy + { + %game.awardScoreKill(%clKiller); + %game.awardScoreDeath(%clVictim); + } + else + { + if (%game.testSuicide(%clVictim, %clKiller, %damageType)) //otherwise test for suicide + { + %game.awardScoreSuicide(%clVictim); + } + else + { + if (%game.testTeamKill(%clVictim, %clKiller)) //otherwise test for a teamkill + %game.awardScoreTeamKill(%clVictim, %clKiller); + } + } +} + +function RabbitGame::applyConcussion(%game, %player) +{ + // MES -- this won't do anything, the function RabbitGame::dropFlag is empty + %game.dropFlag( %player ); +} + diff --git a/base/scripts/SiegeGame.cs b/base/scripts/SiegeGame.cs new file mode 100644 index 0000000..4e2cd77 --- /dev/null +++ b/base/scripts/SiegeGame.cs @@ -0,0 +1,1047 @@ +//--- GAME RULES BEGIN --- +//One team defends base, other team tries to conquer it as quickly as possible +//Game has two rounds: Round 1 ends when base is conquered or time runs out +//Round 2: Teams switch sides, play again -- to win, attackers MUST beat the time set by the attackers in Round 1 +//Touching base switch conquers base +//--- GAME RULES END --- + +//Siege type script for TRIBES 2 +// +//The two teams each take a turn at defense and offense. +// +//If initial defending team's objective is captured, then roles switch +//and new offense team gets same amount of time to attempt to capture the +//objective. +// +//If time runs out before initial defending team's objective is captured, +//then roles switch and new offense team has to try to capture the +//objective before time runs out. +// +//The winner is either the team who captures the objective in least amount of time. +// +// In the mission file, Team 1 will be offense team, and team 2 will be the defense team. +// When the game actually starts, either team could start on offense, and the objects must +// have their team designation set accordingly. +// +// This mission type doesn't have a scoreLimit because, well, it really doesn't +// need one or lend itself to one. + +// ai support +exec("scripts/aiSiege.cs"); + +package SiegeGame { + +function FlipFlop::objectiveInit(%data, %flipflop) +{ + Game.regObjective(%flipflop); + setTargetSkin(%flipflop.getTarget(), $teamSkin[0]); +} + +function SiegeGame::regObjective(%game, %object) +{ + %objSet = nameToID("MissionCleanup/Objectives"); + if(!isObject(%objSet)) + { + %objSet = new SimSet("Objectives"); + MissionCleanup.add(%objSet); + } + %objSet.add(%object); +} + +function FlipFlop::playerTouch(%data, %flipflop, %player) +{ + if(%player.team != Game.offenseTeam) + return; + + %defTeam = %game.offenseTeam == 1 ? 2 : 1; + + // Let the observers know: + messageTeam( 0, 'MsgSiegeTouchFlipFlop', '\c2%1 captured the %2 base!~wfx/misc/flipflop_taken.wav', %player.client.name, $TeamName[%defTeam] ); + // Let the teammates know: + messageTeam( %player.team, 'MsgSiegeTouchFlipFlop', '\c2%1 captured the %2 base!~wfx/misc/flipflop_taken.wav', %player.client.name, $TeamName[%defTeam] ); + // Let the other team know: + %losers = %player.team == 1 ? 2 : 1; + messageTeam( %losers, 'MsgSiegeTouchFlipFlop', '\c2%1 captured the %2 base!~wfx/misc/flipflop_lost.wav', %player.client.name, $TeamName[%defTeam]); + + logEcho(%player.client.nameBase@" (pl "@%player@"/cl "@%player.client@") captured team "@%defTeam@" base"); + Game.allObjectivesCompleted(); +} + +}; + +//--------- Siege SCORING INIT ------------------ +function SiegeGame::initGameVars(%game) +{ + %game.SCORE_PER_SUICIDE = 0; + %game.SCORE_PER_TEAMKILL = 0; + %game.SCORE_PER_DEATH = 0; + + %game.SCORE_PER_KILL = 0; + + %game.SCORE_PER_TURRET_KILL = 0; +} + +function SiegeGame::claimFlipflopResources(%game, %flipflop, %team) +{ + // equipment shouldn't switch teams when flipflop is touched +} + +function SiegeGame::missionLoadDone(%game) +{ + //default version sets up teams - must be called first... + DefaultGame::missionLoadDone(%game); + + //clear the scores + $teamScore[1] = 0; + $teamScore[2] = 0; + + //decide which team is starting first + if (getRandom() > 0.5) + { + %game.offenseTeam = 1; + %defenseTeam = 2; + } + else + { + %game.offenseTeam = 2; + %defenseTeam = 1; + } + + //send the message + messageAll('MsgSiegeStart', '\c2%1 is starting on offense', $teamName[%game.offenseTeam]); + + //if the first offense team is team2, switch the object team designation + if (%game.offenseTeam == 2) + { + %group = nameToID("MissionGroup/Teams"); + %group.swapTeams(); + // search for vehicle pads also + %mcg = nameToID("MissionCleanup"); + %mcg.swapVehiclePads(); + } + + //also ensure the objectives are all on the defending team + %objSet = nameToId("MissionCleanup/Objectives"); + for(%j = 0; %j < %objSet.getCount(); %j++) + { + %obj = %objSet.getObject(%j); + %obj.team = %defenseTeam; + setTargetSensorGroup(%obj.getTarget(), %defenseTeam); + } + + //indicate we're starting the game from the beginning... + %game.firstHalf = true; + %game.timeLimitMS = $Host::TimeLimit * 60 * 1000; + %game.secondHalfCountDown = false; + + // save off turret bases' original barrels + %game.checkTurretBases(); + + MissionGroup.setupPositionMarkers(true); +} + +function SiegeGame::checkTurretBases(%game) +{ + %mGroup = nameToID("MissionGroup/Teams"); + %mGroup.findTurretBase(); +} + +function SimGroup::findTurretBase(%this) +{ + for (%i = 0; %i < %this.getCount(); %i++) + %this.getObject(%i).findTurretBase(); +} + +function InteriorInstance::findTurretBase(%this) +{ + // sorry, we're not looking for interiors +} + +function AIObjective::findTurretBase(%this) +{ + // prevent console error spam +} + +function TSStatic::findTurretBase(%this) +{ + // prevent console error spam +} + +function GameBase::findTurretBase(%this) +{ + // apparently, the initialBarrel attribute gets overwritten whenever the + // barrel gets replaced. :( So we have to save it again under "originalBarrel". + if(%this.getDatablock().getName() $= "TurretBaseLarge") + %this.originalBarrel = %this.initialBarrel; +} + +function TSStatic::findTurretBase(%this) +{ + // prevent console error spam +} + +function SiegeGame::selectSpawnSphere(%game, %team) +{ + //for siege, the team1 drops are offense, team2 drops are defense + %sphereTeam = %game.offenseTeam == %team ? 1 : 2; + + return DefaultGame::selectSpawnSphere(%game, %sphereTeam); +} + +function SiegeGame::startMatch(%game) +{ + DefaultGame::startMatch( %game ); + + %game.startTimeMS = getSimTime(); + + // schedule first timeLimit check for 20 seconds + %game.timeSync = %game.schedule( 20000, "checkTimeLimit"); + %game.timeThread = %game.schedule( %game.timeLimitMS, "timeLimitReached"); + //updateClientTimes(%game.timeLimitMS); + messageAll('MsgSystemClock', "", $Host::TimeLimit, %game.timeLimitMS); + + //make sure the AI is started + AISystemEnabled(true); +} + +function SiegeGame::allObjectivesCompleted(%game) +{ + Cancel( %game.timeSync ); + Cancel( %game.timeThread ); + cancelEndCountdown(); + + //store the elapsed time in the teamScore array... + $teamScore[%game.offenseTeam] = getSimTime() - %game.startTimeMS; + messageAll('MsgSiegeCaptured', '\c2%1 captured the base in %2!', $teamName[%game.offenseTeam], %game.formatTime($teamScore[%game.offenseTeam], true)); + + //set the new timelimit + %game.timeLimitMS = $teamScore[%game.offenseTeam]; + + if (%game.firstHalf) + { + // it's halftime, let everyone know + messageAll('MsgSiegeSwitchSides', ""); + CenterPrintAll( "Switching Sides", 3 ); + } + else + { + // game is over + messageAll('MsgSiegeMisDone', '\c2Mission complete.'); + } + logEcho("objective completed in "@%game.timeLimitMS); + + //setup the second half... + // MES -- per MarkF, scheduling for 0 seconds will prevent player deletion-related crashes + %game.schedule(0, halftime, 'objectives'); +} + +function SiegeGame::timeLimitReached(%game) +{ + cancel( %game.timeThread ); + cancel( %game.timeSync ); + + // if time has run out, the offense team gets no score (note, %game.timeLimitMS doesn't change) + $teamScore[%game.offenseTeam] = 0; + messageAll('MsgSiegeFailed', '\c2%1 failed to capture the base.', $teamName[%game.offenseTeam]); + + if (%game.firstHalf) + { + // it's halftime, let everyone know + CenterPrintAll( "Switching Sides", 3 ); + } + else + { + // game is over + messageAll('MsgSiegeMisDone', '\c2Mission complete.'); + } + logEcho("time limit reached"); + %game.halftime('time'); +} + +function SiegeGame::checkTimeLimit(%game) +{ + //if we're counting down to the beginning of the second half, check back in + if (%game.secondHalfCountDown) + { + %game.timeSync = %game.schedule(1000, "checkTimeLimit"); + return; + } + + %timeElapsedMS = getSimTime() - %game.startTimeMS; + %curTimeLeftMS = %game.timeLimitMS - %timeElapsedMS; + + if (%curTimeLeftMS <= 0) + { + // time's up, put down your pencils + %game.timeLimitReached(); + } + else + { + if(%curTimeLeftMS >= 20000) + %game.timeSync = %game.schedule( 20000, "checkTimeLimit" ); + else + %game.timeSync = %game.schedule( %curTimeLeftMS + 1, "checkTimeLimit" ); + + //now synchronize everyone's clock + messageAll('MsgSystemClock', "", $Host::TimeLimit, %curTimeLeftMS); + } +} + +function SiegeGame::startSecondHalf(%game) +{ + $MatchStarted = true; + %game.secondHalfCountDown = false; + + MessageAll('MsgMissionStart', "\c2Match started"); + + // set the start time. + //the new %game.timeLimitMS would have been set by timeLimitReached() or allObjectivesCompleted() + %game.startTimeMS = getSimTime(); + + %game.timeThread = %game.schedule(%game.timeLimitMS, "timeLimitReached"); + if (%game.timeLimitMS > 20000) + %game.timeSync = %game.schedule(20000, "checkTimeLimit"); + else + %game.timeSync = %game.schedule(%game.timeLimitMS, "checkTimeLimit"); + logEcho("start second half"); + + EndCountdown(%game.timeLimitMS); + + // set all clients control to their player + %count = ClientGroup.getCount(); + for( %i = 0; %i < %count; %i++ ) + { + %cl = ClientGroup.getObject(%i); + if (!isObject(%cl.player)) + commandToClient(%cl, 'setHudMode', 'Observer'); + else + { + %cl.observerMode = ""; + %cl.setControlObject( %cl.player ); + commandToClient(%cl, 'setHudMode', 'Standard'); + } + } + + //now synchronize everyone's clock + updateClientTimes(%game.timeLimitMS); + + //start the bots up again... + AISystemEnabled(true); +} + +function SiegeGame::halftime(%game, %reason) +{ + //stop the game and the bots + $MatchStarted = false; + AISystemEnabled(false); + + if (%game.firstHalf) + { + //switch the game variables + %game.firstHalf = false; + if (%game.offenseTeam == 1) + %game.offenseTeam = 2; + else + %game.offenseTeam = 1; + + //send the message + messageAll('MsgSiegeRolesSwitched', '\c2%1 is now on offense.', $teamName[%game.offenseTeam], %game.offenseTeam); + + //reset stations and vehicles that players were using + %game.resetPlayers(); + // zero out the counts for deployable items (found in defaultGame.cs) + %game.clearDeployableMaxes(); + + // clean up the MissionCleanup group - note, this includes deleting all the player objects + %clean = nameToID("MissionCleanup"); + %clean.housekeeping(); + + // Non static objects placed in original position + resetNonStaticObjPositions(); + + // switch the teams for objects belonging to the teams + %group = nameToID("MissionGroup/Teams"); + %group.swapTeams(); + // search for vehicle pads also + %mcg = nameToID("MissionCleanup"); + %mcg.swapVehiclePads(); + + //restore the objects + %game.restoreObjects(); + + %count = ClientGroup.getCount(); + for(%cl = 0; %cl < %count; %cl++) + { + %client = ClientGroup.getObject(%cl); + if( !%client.isAIControlled() ) + { + clientResetTargets(%client, true); + %client.notReady = true; + } + } + + // drop all players into mission + %game.dropPlayers(); + + //setup the AI for the second half + %game.aiHalfTime(); + + // start the mission again (release players) + %game.halfTimeCountDown($Host::warmupTime); + } + else + { + // let's wrap it all up + %game.gameOver(); + cycleMissions(); + } +} + +function SiegeGame::dropPlayers( %game ) +{ + %count = ClientGroup.getCount(); + for(%cl = 0; %cl < %count; %cl++) + { + %client = ClientGroup.getObject(%cl); + if( !%client.isAIControlled() ) + { + // keep observers in observer mode + if(%client.team == 0) + %client.camera.getDataBlock().setMode(%client.camera, "justJoined"); + else + { + %game.spawnPlayer( %client, false ); + + %client.camera.getDataBlock().setMode( %client.camera, "pre-game", %client.player ); + %client.setControlObject( %client.camera ); + %client.notReady = false; + } + } + } +} + +function SiegeGame::resetPlayers(%game) +{ + // go through the client group and reset anything the players were using + // is most of this stuff really necessary? + %count = ClientGroup.getCount(); + for(%cl = 0; %cl < %count; %cl++) + { + %client = ClientGroup.getObject(%cl); + %player = %client.player; + + // clear the pack icon + messageClient(%client, 'msgPackIconOff', ""); + // if player was firing, stop firing + if(%player.getImageTrigger($WeaponSlot)) + %player.setImageTrigger($WeaponSlot, false); + + // if player had pack activated, deactivate it + if(%player.getImageTrigger($BackpackSlot)) + %player.setImageTrigger($BackpackSlot, false); + + // if player was in a vehicle, get rid of vehicle hud + commandToClient(%client, 'setHudMode', 'Standard', "", 0); + + // clear player's weapons and inventory huds + %client.SetWeaponsHudClearAll(); + %client.SetInventoryHudClearAll(); + + // if player was at a station, deactivate it + if(%player.station) + { + %player.station.triggeredBy = ""; + %player.station.getDataBlock().stationTriggered(%player.station, 0); + if(%player.armorSwitchSchedule) + cancel(%player.armorSwitchSchedule); + } + + // if piloting a vehicle, reset it (assuming it doesn't get deleted) + if(%player.lastVehicle.lastPilot) + %player.lastVehicle.lastPilot = ""; + } +} + +function SimGroup::housekeeping(%this) +{ + // delete selectively in the MissionCleanup group + %count = %this.getCount(); + // have to do this backwards or only half the objects will be deleted + for(%i = (%count - 1); %i > -1; %i--) + { + %detritus = %this.getObject(%i); + if(%detritus.getClassName() $= "SimSet") + { + // I don't think there are any simsets we want to delete + } + else if(%detritus.getName() $= "PZones") + { + // simgroup of physical zones for force fields + // don't delete them + } + //else if (%detritus.getClassName() $= "ScriptObject") + //{ + // // this will be the game type object. + // // DEFINITELY don't want to delete this. + //} + else if(%detritus.getName() $= PosMarker) + { + //Needed to reset non static objects... + } + else if((%detritus.getName() $= "TeamDrops1") || (%detritus.getName() $= "TeamDrops2")) + { + // this will actually be a SimSet named TeamDropsN (1 or 2) + // don't want to delete the spawn sphere groups, so do nothing + } + else if (%detritus.getName() $= "PlayerListGroup") + { + // we don't want to delete PlayerListGroup (SimGroup) + } + else if (%detritus.getDatablock().getName() $= "stationTrigger") + { + //we don't want to delete triggers for stations + } + else if (%detritus.getDatablock().getName() $= "StationVehicle") + { + // vehicle stations automatically get placed in MissionCleanup in a + // position near the vehicle pad. Don't delete it. + } + else if (%detritus.getClassName() $= "Camera") + { + // Cameras should NOT be deleted + } + else + { + // this group of stuff to be deleted should include: + // mines, deployed objects, projectiles, explosions, corpses, + // players, and the like. + %detritus.delete(); + } + } +} + +function SiegeGame::groupSwapTeams(%game, %this) +{ + for(%i = 0; %i < %this.getCount(); %i++) + %this.getObject(%i).swapTeams(); +} + +function SiegeGame::objectSwapTeams(%game, %this) +{ + %defTeam = %game.offenseTeam == 1 ? 2 : 1; + + if(%this.getDatablock().getName() $= "Flipflop") + { + if(getTargetSensorGroup(%this.getTarget()) != %defTeam) + { + setTargetSensorGroup(%this.getTarget(), %defTeam); + %this.team = %defTeam; + } + } + else + { + if(%this.getTarget() != -1) + { + if(getTargetSensorGroup(%this.getTarget()) == %game.offenseTeam) + { + setTargetSensorGroup(%this.getTarget(), %defTeam); + %this.team = %defTeam; + } + else if(getTargetSensorGroup(%this.getTarget()) == %defTeam) + { + setTargetSensorGroup(%this.getTarget(), %game.offenseTeam); + %this.team = %game.offenseTeam; + } + } + if(%this.getClassName() $= "Waypoint") + { + if(%this.team == %defTeam) + %this.team = %game.offenseTeam; + else if(%this.team == %game.offenseTeam) + %this.team = %defTeam; + } + } +} + +function SiegeGame::groupSwapVehiclePads(%game, %this) +{ + for(%i = 0; %i < %this.getCount(); %i++) + %this.getObject(%i).swapVehiclePads(); +} + +function SiegeGame::objectSwapVehiclePads(%game, %this) +{ + %defTeam = %game.offenseTeam == 1 ? 2 : 1; + + if(%this.getDatablock().getName() $= "StationVehicle") + { + if(%this.getTarget() != -1) + { + // swap the teams of both the vehicle pad and the vehicle station + if(getTargetSensorGroup(%this.getTarget()) == %game.offenseTeam) + { + setTargetSensorGroup(%this.getTarget(), %defTeam); + %this.team = %defTeam; + setTargetSensorGroup(%this.pad.getTarget(), %defTeam); + %this.pad.team = %defTeam; + } + else if(getTargetSensorGroup(%this.getTarget()) == %defTeam) + { + setTargetSensorGroup(%this.getTarget(), %game.offenseTeam); + %this.team = %game.offenseTeam; + setTargetSensorGroup(%this.pad.getTarget(), %game.offenseTeam); + %this.pad.team = %game.offenseTeam; + } + } + } +} + +function SiegeGame::restoreObjects(%game) +{ + // restore all the "permanent" mission objects to undamaged state + %group = nameToID("MissionGroup/Teams"); + // SimGroup::objectRestore is defined in DefaultGame.cs -- it simply calls + // %game.groupObjectRestore + %group.objectRestore(); +} + +function SiegeGame::groupObjectRestore(%game, %this) +{ + for(%i = 0; %i < %this.getCount(); %i++) + %this.getObject(%i).objectRestore(); +} + +function SiegeGame::shapeObjectRestore(%game, %object) +{ + //if(%object.getDatablock().getName() $= FlipFlop) + //{ + // messageAll('MsgSiegeObjRestore', "", %object.number, true); + //} + //else if(%object.getDamageLevel()) + if(%object.getDamageLevel()) + { + %object.setDamageLevel(0.0); + %object.setDamageState(Enabled); + } + if(%object.getDatablock().getName() $= "TurretBaseLarge") + { + // check to see if the turret base still has the same type of barrel it had + // at the beginning of the mission + if(%object.getMountedImage(0)) + if(%object.getMountedImage(0).getName() !$= %object.originalBarrel) + { + // pop the "new" barrel + %object.unmountImage(0); + // mount the original barrel + %object.mountImage(%object.originalBarrel, 0, false); + } + } +} + +function InteriorInstance::objectRestore(%this) +{ + // avoid console error spam +} + +function Trigger::objectRestore(%this) +{ + // avoid console error spam +} + +function TSStatic::objectRestore(%this) +{ + // avoid console error spam +} + +function ForceFieldBare::objectRestore(%this) +{ + // avoid console error spam +} + +function SiegeGame::gameOver(%game) +{ + //call the default + DefaultGame::gameOver(%game); + + cancel(%game.timeThread); + + messageAll('MsgClearObjHud', ""); +} + +function SiegeGame::sendDebriefing( %game, %client ) +{ + //if neither team captured + %winnerName = ""; + if ( $teamScore[1] == 0 && $teamScore[2] == 0 ) + %winner = -1; + + //else see if team1 won + else if ( $teamScore[1] > 0 && ( $teamScore[2] == 0 || $teamScore[1] < $teamScore[2] ) ) + { + %winner = 1; + %winnerName = $teamName[1]; + } + + //else see if team2 won + else if ($teamScore[2] > 0 && ($teamScore[1] == 0 || $teamScore[2] < $teamScore[1])) + { + %winner = 2; + %winnerName = $teamName[2]; + } + + //else see if it was a tie (right down to the millisecond - doubtful) + else if ($teamScore[1] == $teamScore[2]) + %winner = 0; + + //send the winner message + if (%winnerName $= 'Storm') + messageClient( %client, 'MsgGameOver', "Match has ended.~wvoice/announcer/ann.stowins.wav" ); + else if (%winnerName $= 'Inferno') + messageClient( %client, 'MsgGameOver', "Match has ended.~wvoice/announcer/ann.infwins.wav" ); + else + messageClient( %client, 'MsgGameOver', "Match has ended.~wvoice/announcer/ann.gameover.wav" ); + + // Mission result: + if (%winner > 0) + { + if (%winner == 1) + { + if ($teamScore[2] == 0) + messageClient(%client, 'MsgDebriefResult', "", '%1 wins!', $TeamName[1]); + else + { + %timeDiffMS = $teamScore[2] - $teamScore[1]; + messageClient(%client, 'MsgDebriefResult', "", '%1 won by capturing the base %2 faster!', $TeamName[1], %game.formatTime(%timeDiffMS, true)); + } + } + else + { + if ($teamScore[1] == 0) + messageClient(%client, 'MsgDebriefResult', "", '%1 wins!', $TeamName[2]); + else + { + %timeDiffMS = $teamScore[1] - $teamScore[2]; + messageClient(%client, 'MsgDebriefResult', "", '%1 won by capturing the base %2 faster!', $TeamName[2], %game.formatTime(%timeDiffMS, true)); + } + } + } + else + messageClient( %client, 'MsgDebriefResult', "", 'The mission ended in a tie.' ); + + // Game summary: + messageClient( %client, 'MsgDebriefAddLine', "", 'SUMMARY:' ); + if ( $teamScore[1] > 0 ) + { + %timeStr = %game.formatTime($teamScore[1], true); + messageClient( %client, 'MsgDebriefAddLine', "", '\t%1 captured the base in %2.', $TeamName[1], %timeStr); + } + else + messageClient( %client, 'MsgDebriefAddLine', "", '\t%1 failed to capture the base.', $TeamName[1]); + + if ( $teamScore[2] > 0 ) + { + %timeStr = %game.formatTime($teamScore[2], true); + messageClient( %client, 'MsgDebriefAddLine', "", '\t%1 captured the base in %2.', $TeamName[2], %timeStr); + } + else + messageClient( %client, 'MsgDebriefAddLine', "", '\t%1 failed to capture the base.', $TeamName[2]); + + // List out the team rosters: + messageClient( %client, 'MsgDebriefAddLine', "", '\n%1\t%2', $TeamName[1], $TeamName[2] ); + %max = $TeamRank[1, count] > $TeamRank[2, count] ? $TeamRank[1, count] : $TeamRank[2, count]; + for ( %line = 0; %line < %max; %line++ ) + { + %plyr1 = $TeamRank[1, %line] $= "" ? "" : $TeamRank[1, %line].name; + %plyr2 = $TeamRank[2, %line] $= "" ? "" : $TeamRank[2, %line].name; + messageClient( %client, 'MsgDebriefAddLine', "", '\t%1\t%2', %plyr1, %plyr2 ); + } + + // Show observers: + %count = ClientGroup.getCount(); + %header = false; + for ( %i = 0; %i < %count; %i++ ) + { + %cl = ClientGroup.getObject( %i ); + if ( %cl.team <= 0 ) + { + if ( !%header ) + { + messageClient( %client, 'MsgDebriefAddLine', "", '\nOBSERVERS' ); + %header = true; + } + + messageClient( %client, 'MsgDebriefAddLine', "", '\t%1', %cl.name ); + } + } +} + +function SiegeGame::formatTime(%game, %tStr, %includeHundredths) +{ + %timeInSeconds = %tStr / 1000; + %mins = mFloor(%timeInSeconds / 60); + if(%mins < 1) + %timeString = "00:"; + else if(%mins < 10) + %timeString = "0" @ %mins @ ":"; + else + %timeString = %mins @ ":"; + + %timeInSeconds -= (%mins * 60); + %secs = mFloor(%timeInSeconds); + if(%secs < 1) + %timeString = %timeString @ "00"; + else if(%secs < 10) + %timeString = %timeString @ "0" @ %secs; + else + %timeString = %timeString @ %secs; + + if (%includeHundredths) + { + %timeString = %timeString @ "."; + %timeInSeconds -= %secs; + %hSecs = mFloor(%timeInSeconds * 100); // will be between 0 and 999 + if(%hSecs < 1) + %timeString = %timeString @ "00"; + else if(%hSecs < 10) + %timeString = %timeString @ "0" @ %hSecs; + else + %timeString = %timeString @ %hSecs; + } + + return %timeString; +} + +function SiegeGame::clientMissionDropReady(%game, %client) +{ + messageClient(%client, 'MsgClientReady', "", %game.class); + + for(%i = 1; %i <= %game.numTeams; %i++) + { + %isOffense = (%i == %game.offenseTeam); + messageClient(%client, 'MsgSiegeAddTeam', "", %i, $teamName[%i], %isOffense); + } + + messageClient(%client, 'MsgMissionDropInfo', '\c0You are in mission %1 (%2).', $MissionDisplayName, $MissionTypeDisplayName, $ServerName ); + DefaultGame::clientMissionDropReady(%game, %client); +} + +function SiegeGame::assignClientTeam(%game, %client, %respawn) +{ + DefaultGame::assignClientTeam(%game, %client, %respawn); + // if player's team is not on top of objective hud, switch lines + messageClient(%client, 'MsgCheckTeamLines', "", %client.team); +} + +function SiegeGame::resetScore(%game, %client) +{ + %client.score = 0; + %client.kills = 0; + %client.deaths = 0; + %client.objScore = 0; + %client.teamKills = 0; + %client.turretKills = 0; + %client.offenseScore = 0; + %client.defenseScore = 0; +} + +//--------------- Scoring functions ----------------- +function SiegeGame::recalcScore(%game, %cl) +{ + %killValue = %cl.kills * %game.SCORE_PER_KILL; + %deathValue = %cl.deaths * %game.SCORE_PER_DEATH; + + if (%killValue - %deathValue == 0) + %killPoints = 0; + else + %killPoints = (%killValue * %killValue) / (%killValue - %deathValue); + + %cl.offenseScore = %killPoints; + %cl.offenseScore += %cl.teamKills * %game.SCORE_PER_TEAMKILL; // -1 + %cl.offenseScore += %cl.objScore; + + %cl.defenseScore = %cl.turretKills * %game.SCORE_PER_TURRET_KILL; // 1 + + %cl.score = %cl.offenseScore + %cl.defenseScore; + %cl.score = mFloor(%cl.score); + %game.recalcTeamRanks(%cl); +} + +function SiegeGame::updateKillScores(%game, %clVictim, %clKiller, %damageType, %implement) +{ + if(%game.testTurretKill(%implement)) //check for turretkill before awarded a non client points for a kill + { + %game.awardScoreTurretKill(%clVictim, %implement); + } + else if (%game.testKill(%clVictim, %clKiller)) //verify victim was an enemy + { + %game.awardScoreKill(%clKiller); + %game.awardScoreDeath(%clVictim); + } + else + { + if (%game.testSuicide(%clVictim, %clKiller, %damageType)) //otherwise test for suicide + { + %game.awardScoreSuicide(%clVictim); + } + else + { + if (%game.testTeamKill(%clVictim, %clKiller)) //otherwise test for a teamkill + %game.awardScoreTeamKill(%clVictim, %clKiller); + } + } +} + +function SiegeGame::testValidRepair(%game, %obj) +{ + return ((%obj.lastDamagedByTeam != %obj.team) && (%obj.repairedBy.team == %obj.team)); +} + +function SiegeGame::genOnRepaired(%game, %obj, %objName) +{ + + if (%game.testValidRepair(%obj)) + { + %repairman = %obj.repairedBy; + messageTeam(%repairman.team, 'msgGenRepaired', '\c0%1 repaired the %2 generator!', %repairman.name, %objName); + } +} + +function SiegeGame::stationOnRepaired(%game, %obj, %objName) +{ + if (%game.testValidRepair(%obj)) + { + %repairman = %obj.repairedBy; + messageTeam(%repairman.team, 'msgStationRepaired', '\c0%1 repaired the %2 inventory station!', %repairman.name, %objName); + } +} + +function SiegeGame::sensorOnRepaired(%game, %obj, %objName) +{ + if (%game.testValidRepair(%obj)) + { + %repairman = %obj.repairedBy; + messageTeam(%repairman.team, 'msgSensorRepaired', '\c0%1 repaired the %2 pulse sensor!', %repairman.name, %objName); + } +} + +function SiegeGame::turretOnRepaired(%game, %obj, %objName) +{ + if (%game.testValidRepair(%obj)) + { + %repairman = %obj.repairedBy; + messageTeam(%repairman.team, 'msgTurretRepaired', '\c0%1 repaired the %2 turret!', %repairman.name, %objName); + } +} + +function SiegeGame::vStationOnRepaired(%game, %obj, %objName) +{ + if (%game.testValidRepair(%obj)) + { + %repairman = %obj.repairedBy; + messageTeam(%repairman.team, 'msgTurretRepaired', '\c0%1 repaired the %2 vehicle station!', %repairman.name, %objName); + } +} + +function SiegeGame::halfTimeCountDown(%game, %time) +{ + %game.secondHalfCountDown = true; + $MatchStarted = false; + + %timeMS = %time * 1000; + %game.schedule(%timeMS, "startSecondHalf"); + notifyMatchStart(%timeMS); + + if(%timeMS > 30000) + schedule(%timeMS - 30000, 0, "notifyMatchStart", 30000); + if(%timeMS > 20000) + schedule(%timeMS - 20000, 0, "notifyMatchStart", 20000); + if(%timeMS > 10000) + schedule(%timeMS - 10000, 0, "notifyMatchStart", 10000); + if(%timeMS > 5000) + schedule(%timeMS - 5000, 0, "notifyMatchStart", 5000); + if(%timeMS > 4000) + schedule(%timeMS - 4000, 0, "notifyMatchStart", 4000); + if(%timeMS > 3000) + schedule(%timeMS - 3000, 0, "notifyMatchStart", 3000); + if(%timeMS > 2000) + schedule(%timeMS - 2000, 0, "notifyMatchStart", 2000); + if(%timeMS > 1000) + schedule(%timeMS - 1000, 0, "notifyMatchStart", 1000); +} + +function SiegeGame::applyConcussion(%game, %player) +{ +} + +function SiegeGame::updateScoreHud(%game, %client, %tag) +{ + %timeElapsedMS = getSimTime() - %game.startTimeMS; + %curTimeLeftMS = %game.timeLimitMS - %timeElapsedMS; + + if (!$MatchStarted) + %curTimeLeftStr = %game.formatTime(%game.timelimitMS, false); + else + %curTimeLeftStr = %game.formatTime(%curTimeLeftMS, false); + + // Send header: + if (%game.firstHalf) + messageClient( %client, 'SetScoreHudHeader', "", '%1 has %2 to capture the base.', + $teamName[%game.offenseTeam], %curTimeLeftStr ); + else + messageClient( %client, 'SetScoreHudHeader', "", '%1 must capture the base within %2 to win.', + $teamName[%game.offenseTeam], %curTimeLeftStr ); + + // Send subheader: + messageClient( %client, 'SetScoreHudSubheader', "", '\t%1 (%2)\t%3 (%4)', + $TeamName[1], $TeamRank[1, count], $TeamName[2], $TeamRank[2, count] ); + + %index = 0; + while (true) + { + if (%index >= $TeamRank[1, count] && %index >= $TeamRank[2, count]) + break; + + //get the team1 client info + %team1Client = ""; + %team1ClientScore = ""; + %col1Style = ""; + if (%index < $TeamRank[1, count]) + { + %team1Client = $TeamRank[1, %index]; + %team1ClientScore = %team1Client.score $= "" ? 0 : %team1Client.score; + if ( %team1Client == %client ) + %col1Style = ""; + } + + //get the team2 client info + %team2Client = ""; + %team2ClientScore = ""; + %col2Style = ""; + if (%index < $TeamRank[2, count]) + { + %team2Client = $TeamRank[2, %index]; + %team2ClientScore = %team2Client.score $= "" ? 0 : %team2Client.score; + if ( %team2Client == %client ) + %col2Style = ""; + } + + + //if the client is not an observer, send the message + if (%client.team != 0) + { + messageClient( %client, 'SetLineHud', "", %tag, %index, '\t%3%1\t%4%2', + %team1Client.name, %team2Client.name, %col1Style, %col2Style ); + } + //else for observers, create an anchor around the player name so they can be observed + else + { + messageClient( %client, 'SetLineHud', "", %tag, %index, '\t%3%1\t%4%2', + %team1Client.name, %team2Client.name, %col1Style, %col2Style, %team1Client, %team2Client ); + } + + %index++; + } + + //clear the rest of Hud so we don't get old lines hanging around... + messageClient( %client, 'ClearHud', "", %tag, %index ); +} diff --git a/base/scripts/SinglePlayerGame.cs b/base/scripts/SinglePlayerGame.cs new file mode 100644 index 0000000..9604a00 --- /dev/null +++ b/base/scripts/SinglePlayerGame.cs @@ -0,0 +1,1164 @@ +// Training Script +//echo("Running Training Script"); + +datablock AudioProfile(TrainingHudUpdateSound) +{ + filename = "gui/objective_notification.wav"; + description = AudioDefault3d; + preload = true; +}; + +datablock AudioProfile(MessageRecieveSound) +{ + filename = "gui/objective_notification.wav"; + description = AudioDefault3d; + preload = true; +}; + +// for training5 +datablock ForceFieldBareData(defaultNoTeamLavaLightField) +{ + fadeMS = 1000; + baseTranslucency = 1; + powerOffTranslucency = 0; + teamPermiable = false; + otherPermiable = false; + color = "1.0 0.4 0.0"; + targetTypeTag = 'ForceField'; + + texture[0] = "skins/forcef1"; + texture[1] = "skins/forcef2"; + texture[2] = "skins/forcef3"; + texture[3] = "skins/forcef4"; + texture[4] = "skins/forcef5"; + + framesPerSec = 10; + numFrames = 5; + scrollSpeed = 15; + umapping = 1.0; + vmapping = 0.15; +}; + +// load the voice text and wav file +exec("scripts/spDialog.cs"); + + +function setSinglePlayerGlobals() +{ + // server settings + //$MPRestoreBotCount = $Host::BotCount; this one is done automatically in server.cs + $MPRestoreBotMatchBotCount = $Host::BotMatchBotCount; + $MPRestoreBotsEnabled = $Host::BotsEnabled; + $MPRestoreMaxBotDifficulty = $Host::MaxBotDifficulty; + $MPRestoreMaxPlayers = $Host::MaxPlayers; + $MPRestoreMinBotDifficulty = $Host::MinBotDifficulty; + $MPRestoreTimeLimit = $Host::TimeLimit; + $MPRestoreTournamentMode = $Host::TournamentMode; + $MPRestorewarmupTime = $Host::warmupTime; + $MPRestoreTeamDamage = $teamDamage; + + //$Host::BotCount = "0"; + $Host::BotMatchBotCount = "0"; + $Host::BotsEnabled = "0"; + $Host::MaxBotDifficulty = "1"; + $Host::MaxPlayers = "64"; + $Host::MinBotDifficulty = "0"; + $Host::TimeLimit = "9999999"; + $Host::TournamentMode = "false"; + $Host::warmupTime = "0"; + + if($pref::trainingDifficulty < 1 || $pref::trainingDifficulty > 3) + $pref::trainingDifficulty = 1; + + if($pref::trainingDifficulty == 1) + $teamDamage = false; + else + $teamDamage = true; + + + // game settings + $MPRestoreteamSkin[1] = $teamSkin[1]; + $MPRestoreteamName[1] = $teamName[1]; + $MPRestoreholoName[1] = $holoName[1]; + $MPRestoreswitchSkin[1] = $switchSkin[1]; + + $MPRestoreteamSkin[2] = $teamSkin[2]; + $MPRestoreteamName[2] = $teamName[2]; + $MPRestoreholoName[2] = $holoName[2]; + $MPRestoreswitchSkin[2] = $switchSkin[2]; + + $playerTeam = 1; + $teamSkin[$playerTeam] = 'swolf'; + $teamName[$playerTeam] = 'StarWolf'; + $holoName[$playerTeam] = "StarWolf"; + $switchSkin[$playerTeam] = 'swolf'; + $playerLivesAtEasy = 3; + + $EnemyTeam = 2; + $teamSkin[$EnemyTeam] = 'Horde'; + $teamName[$EnemyTeam] = 'Bioderm Horde'; +// $holoName[$enemyTeam] = "Bioderm"; +// $switchSkin[$enemyTeam] = 'Bioderm'; + + if($enemyName $= "") + $EnemyName = "Enemy"; + + $trainingDefenseTauntList = "bas.enemy slf.att.attack slf.def.defend wrn.enemy tgt.acquired gbl.brag slf.def.base vqk.help"; + $trainingOffenseTauntList = "slf.att.attack gbl.brag vqk.help att.distract att.attack ene.disarray glb.awesome need.cover"; +} + +function resetSinglePlayerGlobals() +{ + + //error("================ single player global vars reset!"); + // server settings + //$Host::BotCount = $MPRestoreBotCount; + $Host::BotMatchBotCount = $MPRestoreBotMatchBotCount; + $Host::BotsEnabled = $MPRestoreBotsEnabled; + $Host::MaxBotDifficulty = $MPRestoreMaxBotDifficulty; + $Host::MaxPlayers = $MPRestoreMaxPlayers; + $Host::MinBotDifficulty = $MPRestoreMinBotDifficulty; + $Host::TimeLimit = $MPRestoreTimeLimit; + $Host::TournamentMode = $MPRestoreTournamentMode; + $Host::warmupTime = $MPRestorewarmupTime; + $teamDamage = $MPRestoreTeamDamage; + + // game settings + $teamSkin[1] = $MPRestoreteamSkin[1]; + $teamName[1] = $MPRestoreteamName[1]; + $holoName[1] = $MPRestoreholoName[1]; + $switchSkin[1] = $MPRestoreswitchSkin[1]; + + $teamSkin[2] = $MPRestoreteamSkin[2]; + $teamName[2] = $MPRestoreteamName[2]; + $holoName[2] = $MPRestoreholoName[2]; + $switchSkin[2] = $MPRestoreswitchSkin[2]; +} + +// Actors +//======================================================================================= + +function addEnemies() +{ + %num = $numberOfEnemies[$pref::TrainingDifficulty]; + error("Adding " @ %num @" enemies!"); + + %group = nameToId("MissionGroup/Teams/Team2/DropPoints"); + + for(%i = 0; %i < %num; %i++){ + %name = getUniqueEnemyName(); + %voice = "Derm"@getRandom(1,3); + %voicePitch = 1 - ((getRandom(20) - 10)/100); + + //%client = AIConnect($EnemyName@%i, $EnemyTeam, $missionBotSkill[$pref::TrainingDifficulty], true); + %client = AIConnect(%name, $EnemyTeam, $missionBotSkill[$pref::TrainingDifficulty], true, %voice, %voicePitch); + $Enemy[%i] = %client; + %client.race = "Bioderm"; + + setTargetSkin(%client.target, $teamSkin[$enemyTeam]); + //setTargetVoice(%client.target, addTaggedString(%client.voice)); + + //error("Setting race of "@$Enemy[%i]@" to "@$Enemy[%i].race); + if(%group.getObject(%i).Equipment || %group.getObject(%i).specialObjectives) { + %client.equipment = %group.getObject(%i).Equipment; + //error("Client: "@%client@ " has equipment "@%client.equipment); + %client.SpecialObjectives = %group.getObject(%i).SpecialObjectives; + //error("Client: "@%client@ " has specialEd "@%client.SpecialObjectives); + game.equip(%client.player); + } + + // this seems redundant after equip + %client.player.setArmor(%client.armor); + } +} + +// there are times (missions 2 and 4) where bots are not added with +// addEnemies(). there are x waves of bots with y number in each wave +// i do it a couple of times so im going to localize it here rather than +// do it twice or cut and paste it +function spawnWave(%wave) +{ + for(%i=1; %i<=$numberInWave[$pref::TrainingDifficulty]; %i++) { + %name = getUniqueEnemyName(); + %voice = "Derm"@getRandom(1,3); + %voicePitch = 1 - ((getRandom(20) - 10)/100); + %thisAi = aiConnect(%name, $enemyTeam, $missionBotSkill[$pref::TrainingDifficulty], false, %voice, %voicePitch); + //%thisAi = aiConnect("Wave"@%wave@"num"@%i, $enemyTeam, $missionBotSkill[$pref::TrainingDifficulty], false); + // here we differentiate the different drop points for wave spawned bots (these spawned bots are "!offense") + //error("added enemy "@%thisAi); + %thisAi.race = "Bioderm"; + %thisAi.voice = "Derm"@getRandom(3); + setTargetSkin(%thisAI.target, $teamSkin[$enemyTeam]); + setTargetVoice(%thisAI.target, addTaggedString(%thisAI.voice)); + %equipment = pickEquipment(); + game.equip(%thisAi.player, %equipment); + //%client.player.setArmor(%thisAi.armor); + + //create a little group + game.NumberInWave[%wave]++; + %thisAI.MemberOfWave = %wave; + + //anything mission specific that has to be done with this client + missionSpawnedAI(%thisAi); + } + game.spawnWaveTimer = spawnWaveTimer(%wave, false); +} + + +function addPlayersTeam(%num) +{ + //echo($player.team@"<---------players team on addPlayerTeam"); + + getTeammateGlobals(); + + for(%i=0; %i< %num; %i++){ + $Teammate[%i] = %client = AIConnect($TeammateWarnom[%i], $playerTeam, $teammateSkill[%i], true, $teammateVoice[%i]); + + %client.sex = $teammateGender[%i]; + %client.equipment = $teammateEquipment[%i]; + setTargetSkin(%client.target, $teamSkin[$playerTeam]); + game.equip(%client.player); + %client.player.setArmor(%client.armor); + + if (! %client.defaultTasksAdded) + { + %client.defaultTasksAdded = true; + %client.addTask(AIEngageTask); + %client.addTask(AIPickupItemTask); + %client.addTask(AIUseInventoryTask); + %client.addTask(AIEngageTurretTask); + %client.addtask(AIDetectMineTask); + } + + } + + //add Player=============================================================== + $player.lives = $playerLivesAtEasy - $pref::TrainingDifficulty; + + game.spawnPlayer($player, false); + setTargetSkin($player.target, $teamSkin[$playerTeam]); + +} + +function getUniqueEnemyName() +{ + if(!$enemyNameCount) + return; + + %used = false; + %name = pickUniqueEnemyName(); + %used = enemyNameIsUsed(%name); + while(%used) + { + if(%emergency++ > 1000) + { + //error("Too many times in the name while loop...using DEFAULT"); + return $enemyName; + } + %name = pickUniqueEnemyName(); + %used = enemyNameIsUsed(%name); + } + return %name; +} + +function pickUniqueEnemyName() +{ + %random = getRandom(1, $enemyNameCount); + %name = $EnemyNameList[%random]; + //error("returning" SPC %name SPC "from pick"); + return %name; +} + +function enemyNameIsUsed(%name) +{ + %number = game.usedNameCount; + for(%i = 0; %i <= %number; %i++) + { + if(game.usedName[%i] $= %name) + return true; + } + // the name is unused + game.usedName[game.usedNameCount++] = %name; + return false; +} + +function spawnWaveTimer(%wave, %reset) +{ + //error("SpawnTimer ACTIVATED"); + + if(%reset) + { + cancel(game.spawnWaveTimer); + %timeForAction = 60000 * 5; //5 min + } + else %timeForAction = 60000 * 5; //5 min + + game.spawnWaveTimer = schedule(%timeForAction, game, destroyWave, %wave); +} + +function DestroyWave(%wave) +{ + // this group has enemies in it that are dawdling and + // need to be killed to keep the game progressing + %num = clientGroup.getCount(); + for(%i = 0; %i < %num; %i++) + { + %client = clientGroup.getObject(%i); + if(%client.player && %client.MemberOfWave == %wave) + { + %client.player.applyDamage(%client.player.getDataBlock().maxDamage); + enemyWaveMemberKilled(%client); + } + } +} + + +function SinglePlayerGame::onClientKilled(%game, %clVictim, %clKiller, %damageType, %implement) +{ + if(game.missionOver) + return; + %clVictim.dead = true; + if(%clvictim.team == $enemyTeam && getRandom(1,1000) == 69) + doText(Any_jingo02); + missionClientKilled(%clVictim, %clKiller); + if(%clVictim.MemberOfWave) + enemyWaveMemberKilled(%clVictim ); + + Parent::onClientKilled(%game, %clVictim, %clKiller, %damageType, %implement); + cancel(%clVictim.respawnTimer); + + if(%clVictim == $player) { + // dead players are not out of bounds + cancel($player.OOB); + + $player.deaths++; + %num = $player.lives; + if( %num >= 1) { + if(%num == 1) + %textNum = "one life"; + else %textNum = %num SPC "lives"; + messageBoxOk("Restart", "You have" SPC %textNum SPC "remaining.", "canvas.cursorOff(); spawnSinglePlayer();"); + canvas.cursorOn(); + } + else schedule(3000, $player.player, singlePlayerDead); + } +} + +function enemyWaveMemberKilled(%client) +{ + %wave = %client.MemberOfWave; + %remaining = game.numberInWave[%wave]--; + //error("Debug: Script reports that client " @ %client @ " was a member of wave " @ %wave @ " that now has " @ %remaining @ " members remaining."); + if(%remaining == 0) { + missionWaveDestroyed(%wave); + + if (%wave+1 <= $numberOfWaves[$pref::TrainingDifficulty]) + spawnWave(%wave+1); + //else error("Debug: " @ %wave @ " was the last wave."); + } +} + +function SinglePlayerGame::assignClientTeam(%game, %client) +{ + // The players team is set in singlePlayer::clientMissionDropReady + // and the bots are added to a team with aiConnect + // so this is unnecessary +} + +function singlePlayerGame::AIHasJoined() +{ + // Big deal...my missions are crawling with AI + // lets get rid of this mundane console spam +} + +function singlePlayerGame::biodermAssume(%game, %client) +{ + //error(%client SPC "might talk."); + // dont do anything if we have just done this + if(%client.spgSpeaking) + return; + + %probability = 2; + %time = 30; // secs + + // we are going to POSSIBLY talk. flag it for %time secs + %client.spgSpeaking = true; + schedule(%time * 1000, %client, resetSpeakingFlag, %client); + + if(getRandom(%probability) == 1) + trainingBiodermSpeaks(%client); + +} + +function resetSpeakingFlag(%client) +{ + //error(%client SPC "can now speak again."); + %client.spgSpeaking = false; +} + +function trainingBiodermSpeaks(%client) +{ + if(%client.offense) // offense = defense? + %tauntlist = $trainingDefenseTauntList; //yes this seem wrong but its not + else + %tauntlist = $trainingOffenseTauntList; + %num = getWordCount(%tauntList); + %random = getRandom(%num - 1); + %use = getWord(%tauntList, %random); + //echo("Derm taunting:" SPC %use); + + playTargetAudio( %client.target, addTaggedString(%use), AudioClose3d, false ); +} + +function singlePlayerDead() +{ + missionFailed($player.miscMsg[trainingDeathLoss]); + canvas.cursorOn(); + AIMissionEnd(); + $objectiveQ[$enemyTeam].clear(); + cancel($player.distanceCheckSchedule); +} + +function SinglePlayerGame::missionLoadDone(%game) +{ + DefaultGame::missionLoadDone(%game); + + setSinglePlayerGlobals(); + $matchStarted = true; + //this has to happen sometime because game.startMatch never gets called + %game.clearDeployableMaxes(); +} + + +function SinglePlayerGame::notifyMatchStart(%game, %time) +{ + //do nothing +} + + +function SinglePlayerGame::clientMissionDropReady(%game, %client) +{ + DefaultGame::clientMissionDropReady(%game, %client); + + //echo(%client @ " is single player Ready!!!"); + messageClient(%client, 'MsgClientReady', "", %game.class); + + $Player = %client; + $player.race = "Human"; + $player.team = $playerTeam; + $player.setTeam($playerTeam); + setTargetSkin($teammate[%i].target, $teamSkin[$playerTeam]); + + createText($player); + HUDMessageVector.clear(); + messageClient(%client, 'MsgMissionDropInfo', "", $MissionDisplayName, $MissionTypeDisplayName, $ServerName ); + + // We don't start in observer mode, so disable: + commandToClient(%client, 'setHudMode', 'Standard'); + + //custom training keymap + %game.createCustomKeyMap(); + + + addEnemies(); + //echo($player.team@"<---------players team on mission drop ready"); + addPlayersTeam($numberOfTeammates); + + //everybody's in, enable the AI system + AISystemEnabled(true); + + $player.setControlObject( $player.player ); + startCurrentMission(%game); +} + +function SinglePlayerGame::AIInit(%game) +{ + //error("initializing Bot Q's for SinglePlayerGame..."); + for (%i = 0; %i <= %game.numTeams; %i++) + { + if (!isObject($ObjectiveQ[%i])) + { + $ObjectiveQ[%i] = new AIObjectiveQ(); + MissionCleanup.add($ObjectiveQ[%i]); + } + + //error("team " @ %i @ " objectives load..."); + $ObjectiveQ[%i].clear(); + AIInitObjectives(%i, %game); + } + + AIInit(); + + // Bots never throw grenades on Easy skills + if($pref::TrainingDifficulty == 1) + $AIDisableGrenades = true; +} + +// unlike the MP game, sometimes we start with switches (flipFlops) +// already on one team or the other and they are unskinned +function setFlipFlopSkins(%group) +{ + if(!%group) + %group = nameToID("Teams"); + + for(%i = 0; %i < %group.getCount(); %i++) { + %this = %group.getObject(%i); + if(%this.getClassName() $= "SimGroup") + setFlipFlopSkins(%this); + else if(%this.getDataBlock().getName() $= "FlipFlop") + setTargetSkin(%this.getTarget(), $teamSkin[%this.team]); + } +} + + + +function singlePlayerGame::gameOver(%game) +{ + + moveMap.push(); + + ServerConnection.setBlackOut(false, 0); + + $timeScale = 1; + + game.missionOver = true; + + // clear the inventory and weapons hud + error("clearing Inv HUD"); + $player.SetInventoryHudClearAll(); + + // im gonna try dropping all the clients + %count = clientGroup.getCount(); + echo("count=" SPC %count); + for(%i = 0; %i < %count; %i++) { + %client = clientGroup.getObject(%i); + game.client[%i] = %client; + freeClientTarget(%client); + } + for(%i = 0; %i < %count; %i++) { + %client = game.client[%i]; + echo("client=" SPC %client); + if(%client.isAIControlled()) + %client.drop(); + } + + //disable the AI system + AISystemEnabled(false); + + //Deactivate packages...gotta catch'm all + //deactivatepackage(SinglePlayer); + deactivatepackage(Training1); + deactivatepackage(Training2); + deactivatepackage(Training3); + deactivatepackage(Training4); + deactivatepackage(Training5); + deactivatepackage(Training6); + deactivatePackage(singlePlayerMissionAreaEnforce); + + if($player.currentWaypoint) + $player.currentWaypoint.delete(); + + if($player.OOB) + cancel($player.OOB); + + // clear the objective HUD + messageClient($player, 'MsgClearObjHud', ""); + + resetSinglePlayerGlobals(); + + DefaultGame::GameOver(%game); +} + +// Voice line, text, function and audio parsing +//================================================================================= +// this is how we handle ALL the voice distribition and playing +// its NOT pretty +function doText(%name, %extraTime, %priority) +{ + if($player.text[%name, priority] || %priority) + addToQueueNext(%name); + else addToQueueEnd(%name); + + $player.text[%name, extraTime] = %extraTime; + processText(); +} + +function processText(%cont) +{ + //we may need to fudge everysound to get it timed right + %universalSoundFudgingConstant = 400; + + if($currentlyPlaying && !%cont) + return; + + %name = $player.Textque0; + if(%name $= "") + return; + + //echo("processing: "@%name); + if($player.Text[%name, eval] !$= "") + eval($player.text[%name, eval]); + if($player.Text[%name, text] !$= "") { + // the old way: messageClient($player, 0, '\c2%1: %2',$trainerName, $player.Text[%name, line]); + messageClient($player, 0, "\c5"@$player.Text[%name, text]); + serverPlay2d(MessageRecieveSound); + } + if($player.Text[%name, wav] !$= "") { + //messageClient($player, 0, "~w"@$player.Text[%name, wav]); + %audio = alxCreateSource( AudioChat, $player.Text[%name, wav] ); + alxPlay( %audio ); + } + + removeFromQueue(); + + %wavLen = alxGetWaveLen($player.text[%name, wav]); + //echo("got wave length of: "@%wavLen); + //if(%wavLen < 400) + // %wavLen = 400; // you cant go back in time, vge + + %time = %wavLen + $player.text[%name, extraTime] + %universalSoundFudgingConstant; + //echo("total delay time of"@%time); + $currentlyPlaying = schedule(%time , $player.player, processText, true); + schedule(%time, 0, eval, "$currentlyPlaying = false;"); +} + +function removeFromQueue() +{ + %i = 1; + while($player.textque[%i] !$= "") { + $player.textque[%i-1] = $player.textque[%i]; + %i++; + } + $player.textque[%i-1] = ""; +} + + +function addToQueueEnd(%name) +{ + %q = 0; + while($player.Textque[%q] !$= ""){ + %q++; + } + $player.Textque[%q] = %name; +} + +function addToQueueNext(%name) +{ + %q = 0; + while($player.Textque[%q] !$= ""){ + %q++; + } + for(%i=%q; %i>0; %i--) + $player.textque[%i] = $player.textque[%i-1]; + $player.textque0 = %name; +} + +function echoQueue() +{ + echo("Textque -------------------------------"); + %i = 0; + while($player.Textque[%i] !$= "") { + echo(%i@": "@$player.Textque[%i]); + %i++; + } +} + +function clearQueue() +{ + for(%i=0;%i<100; %i++) + $player.textQue[%i] = ""; +} + +//handy waypoint setting tool +//========================================================================= +function setWaypointAt(%location, %name, %team) +{ + %team = (!%team ? $playerTeam : %team); + // if(!%name) + // %name = ""; + if ( isObject( $player.currentWaypoint ) ) + $player.currentWaypoint.delete(); + + $player.currentWaypoint = new WayPoint(TurretTower) { + position = %location; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + team = %team; + name = %name; + }; + MissionCleanup.add($player.currentWaypoint); +} + +//this is just a little consolidation of functions +//its a little gregarious but allows text to live in spdialg.cs +//intent is to make hud updating easier and localization easier too ;) +function updateTrainingObjectiveHud( %objectiveNum ) +{ + + //sound + objectiveHud.setVisible(false); + schedule(400, game, eval, "objectiveHud.setVisible(true);"); + serverPlay2d(TrainingHudUpdateSound); + + //clear old text + messageClient($player, 'MsgSPCurrentObjective1', "", ' '); + messageClient($player, 'MsgSPCurrentObjective2', "", ' '); + + // find the lines from the spdialog file that are now attached to the sp client + %who = $player; + %mission = $currentMission; + for(%x = 1; %x <= 2; %x++) + %newObjectiveLine[%x] = $player.objHud[%mission, %objectiveNum, %x]; + + //add new text + messageClient($player, 'MsgSPCurrentObjective1', "", %newObjectiveLine1); + if(%newObjectiveLine2 !$= "") + messageClient($player, 'MsgSPCurrentObjective2', "", %newObjectiveLine2); +} + + +// Misc/Overwrites +//======================================================================================= + +function isSafe(%object, %radius) +{ + %team = %object.team; + %position = %object.player.getTransform(); + + //check for enemy players + %num = clientGroup.getCount(); + for(%client = 0; %client <= %num; %client++) + { + if(%team != %client.team && %client.player) { + %enemyPos = %client.player.getTransform(); + //okay, just in case we dont have a player for that client + //AND are close to "0 0 0" vge + if(!%enemyPos) + %dist = 100000; + else %dist = vectorDist(%position, %enemyPos); + //error("Debug: Client "@%client@" is "@%dist@" away"); + if ( %dist < %radius){ + //error("Unsafe because of client "@%client@" at a distance of "@%dist@"!!!!"); + return false; + } + } + } + //error("Safe for a radius of "@%radius@"!"); + return true; +} + +function singlePlayerGame::onAIRespawn(%game, %client) +{ + // add the default tasks + + if (! %client.defaultTasksAdded) + { + %client.defaultTasksAdded = true; + %client.addTask(AIEngageTask); + %client.addTask(AIPickupItemTask); + %client.addTask(AIUseInventoryTask); + %client.addTask(AIEngageTurretTask); + %client.addtask(AIDetectMineTask); + if(%client.team == $playerTeam || $pref::trainingDifficulty == 3) + %client.addTask(AITauntCorpseTask); + } +} + + +function singlePlayerGame::onAIKilled(%game, %clVictim, %clAttacker, %damageType, %implement) +{ + // dont respawn AI (this is overwritten in some of the mission packages) +} + + +function singleplayerGame::onClientDamaged(%game, %clVictim, %clAttacker, %damageType, %implement) +{ + //the DefaultGame will set some vars + DefaultGame::onClientDamaged(%game, %clVictim, %clAttacker, %damageType, %implement); + + //now see if both were on the same team + if(%clAttacker && %clAttacker != %clVictim && %clVictim.team == %clAttacker.team) + { + %game.friendlyFireMessage(%clVictim, %clAttacker); + } +} + +function singleplayerGame::onAIDamaged(%game, %clVictim, %clAttacker, %damageType, %implement) +{ + if(%clVictim.team != %clAttacker.team && %clVictim.MemberOfWave) + { + spawnWaveTimer(%clVictim.MemberOfWave, true); + } + + if (%clAttacker && %clAttacker != %clVictim && %clAttacker.team == %clVictim.team) + { + schedule(250, %clVictim, "AIPlayAnimSound", %clVictim, %clAttacker.player.getWorldBoxCenter(), "wrn.watchit", -1, -1, 0); + + //clear the "lastDamageClient" tag so we don't turn on teammates... unless it's uberbob! + %clVictim.lastDamageClient = -1; + } +} + +// find number of players on a team +// why isnt this in a std lib +function getPlayersOnTeam(%team) +{ + %num = clientGroup.getCount(); + for(%i=0; %i<%num; %i++){ + %client = clientGroup.getObject(%i); + if(%client.team == %team && %client.player) + %count++; + } + + return %count; +} + + +//mission completion/falure stuff============================================ +function missionComplete(%text) +{ + $player.endMission = schedule(15000, game, forceFinish); + + messageBoxOk("Victory", %text, "forceFinish();"); + canvas.cursorOn(); + + //AI stop + clearQueue(); + AIMissionEnd(); + $objectiveQ[$enemyTeam].clear(); +} + +function forceFinish() +{ + $timeScale = 1; + //kill the thread if we pressed a button to get here... + cancel($player.endMission); + + //make sure we end the game neatly + Game.gameOver(); + + //immediately disconnect - bringing us back to the main menu... + Disconnect(); + + //we need to get the singlePlayer dialog after leaving + canvas.schedule(1000, "pushDialog", singlePlayerDlg); +} + +function missionFailed(%text) +{ + + $player.endMission = schedule(30000, game, forceFinish); + + MessageBoxYesNo("Failure", %text, "reloadMission();", "forceFinish();"); + + //AI stop + clearQueue(); + AIMissionEnd(); + $objectiveQ[$enemyTeam].clear(); +} + +function reloadMission() +{ + cancel($player.endMission); + Game.gameOver(); + loadMission($currentMission, singlePlayer); + debriefContinue(); +} + + +// silly...we fed it a movemap binding it retuns the capitalized key in (almost) english +function findTrainingControlButtons( %name ) +{ + %controlName = moveMap.getBinding(%name); + if (%controlName $= "") + return "[no key binding]"; + %prettyName = strupr(getMapDisplayName(getWord(%controlName, 0), getWord(%controlName, 1))); + %next = 2; + while( getWord( %controlName, %next ) !$= "" ) { + %extra = "-"@strupr(getWord( %controlName, 2 )); + %prettyName = %prettyName @ %extra; + %next++; + } + return %prettyName; +} + +// just a kinda cool little effect +function firstPersonQuickPan() +{ + if($firstperson) { + toggleFirstPerson($player); + schedule(4000, $player.player, toggleFirstPerson, $player); + } + +} + + +// Player spawning/respawning==================================================== +//since we are going through pickTeamSpawn rather than pickPlayerSpawn +// and for a couple other reasons, we are going to need to manually determine +// if this is a respawn or not. +function spawnSinglePlayer() +{ + $player.lives--; + + game.spawnPlayer($player, true); + $player.setControlObject($player.player); + //messageClient($player, 0, "Respawns Remaining: "@$player.lives); +} + + +function singleplayerGame::observerOnTrigger() +{ + //we dont want the player respawning (yet) + return false; +} + +function SinglePlayerGame::spawnPlayer( %game, %client, %respawn ) +{ + //error("Spawn Player: %client = " @%client@" %respawn = "@%respawn); + %spawnPoint = %game.pickPlayerSpawn( %client, %respawn ); + %game.createPlayer( %client, %spawnPoint, %respawn ); +} + +function singlePlayerGame::playerSpawned(%game, %player) +{ + defaultGame::playerSpawned(%game, %player); +} + +function singleplayerGame::pickPlayerSpawn(%game, %client, %respawn) +{ + // the bots, for some reason, always pass in %respawn as true + // well that's horse pucky, since the bots never respawn in SPG + // so I do this stupid thing + if(%client.isAIcontrolled()) + %respawn = false; + + if(!%client.offense) // this is a wave spawned attack bot + %respawn = true; + + + %game.pickTeamSpawn( %client, %respawn); +} + +function singleplayerGame::pickTeamSpawn(%game, %client, %respawn) +{ + %team = %client.team; + + if(%respawn) { + %group = nameToID("MissionGroup/Teams/team"@%team@"/DropPoints/Respawns"); + if(! isObject(%group)) { + //error("Client" SPC %client SPC "is attempting a respawn with no drop point"); + return "0 0 300"; + } + else %spawnLoc = %group.getObject(game.respawnPoint); + //error("REspawn loc is: " @ %spawnLoc); + } + + else { + %group = nameToID("MissionGroup/Teams/team" @ %team @ "/DropPoints"); + %spawnLoc = %group.getObject(game.spawnLoc[%team]); + //error("spawn loc is: "@game.spawnLoc[%team]); + game.spawnLoc[%team]++; + } + return %spawnLoc.getTransform(); +} + + +function SinglePlayerGame::createCustomKeymap(%game) +{ + new ActionMap(TrainingMap); + TrainingMap.bindCmd( keyboard, "escape", escapeFromGame ); +} + +//======================================================================================= +// Escape dialog functions: +//======================================================================================= +function SinglePlayerEscapeDlg::onWake( %this ) +{ + %this.wasCursorOn = Canvas.isCursorOn(); + if ( !%this.wasCursorOn ) + CursorOn(); + + $timeScale = 0; + + if( OptionsDlg.isAwake()) + { + Canvas.popDialog( OptionsDlg ); + } +} + +function SinglePlayerEscapeDlg::onSleep( %this ) +{ +// spMap.pop(); +// spMap.delete(); +} + + +function SinglePlayerEscapeDlg::leaveGame( %this ) +{ + Canvas.popDialog( SinglePlayerEscapeDlg ); + if ( !%this.wasCursorOn ) + CursorOff(); + MessageBoxYesNo( "LEAVE GAME", $player.miscMsg[LeaveGame], "forceFinish();", "$timeScale = 1;" ); +} + +function SinglePlayerEscapeDlg::gotoSettings( %this ) +{ + Canvas.popDialog( SinglePlayerEscapeDlg ); + if ( !%this.wasCursorOn ) + CursorOff(); + Canvas.pushDialog( OptionsDlg ); +} + +function SinglePlayerEscapeDlg::returnToGame( %this ) +{ + //error( "** CALLING SinglePlayerEscapeDlg::returnToGame **" ); + $timeScale = 1; + Canvas.popDialog( SinglePlayerEscapeDlg ); + CursorOff(); + + + //moveMap.bindCmd( keyboard, "escape", "", "escapeFromGame();" ); + movemap.push(); + trainingmap.push(); +} + + +function singlePlayerGame::OptionsDlgSleep(%game) +{ + Canvas.pushDialog( SinglePlayerEscapeDlg ); + // the player may have changed his keys + // we need to reload the big spdialog string table that + // holds all the text related to the players keymappings + createText($player); +} + +// mission Area package +package singlePlayerMissionAreaEnforce { +// -begin mission area package------------------------------------------------- + +// OOB +function SinglePlayerGame::leaveMissionArea(%game, %playerData, %player) +{ + parent::leaveMissionArea(%game, %playerData, %player); + if(%player == $player.player) { + $player.leftMissionArea++; + %timeAllowed = 30; + $player.OOB = schedule(%timeAllowed *1000, 0, wussOut, %player); + clearQueue(); + doText(Any_offcourse); + MessageClient($player, 0, $player.miscMsg[OOB]); + %player.playerLeftMissionArea = true; + } +} +function SinglePlayerGame::enterMissionArea(%game, %playerData, %player) +{ + parent::enterMissionArea(%game, %playerData, %player); + if(%player == $player.player && %player.playerLeftMissionArea) { + //echo("player back in bounds"); + cancel($player.OOB); + clearQueue(); + doText(Any_alright); + MessageClient($player, 0, $player.miscMsg[InBounds]); + } +} +function wussOut(%player) +{ + clearQueue(); + doText(Any_abort); + missionFailed($player.miscMsg[OOBLoss]); +} + +// -end mission area package------------------------------------------------- +}; + +// Custom Particle effects for training5 + +datablock ParticleData(BeforeT5particle) +{ + dragCoefficient = 0; + gravityCoefficient = -0.017094; + inheritedVelFactor = 0.0176125; + constantAcceleration = -0.8; + lifetimeMS = 1248; + lifetimeVarianceMS = 0; + useInvAlpha = 1; + spinRandomMin = -200; + spinRandomMax = 200; + textureName = "particleTest"; + colors[0] = "1.000000 0.677165 0.000000 1.000000"; + colors[1] = "0.708661 0.507812 0.000000 1.000000"; + colors[2] = "0.000000 0.000000 0.000000 0.000000"; + colors[3] = "1.000000 1.000000 1.000000 1.000000"; + sizes[0] = 0.991882; + sizes[1] = 2.99091; + sizes[2] = 4.98993; + sizes[3] = 1; + times[0] = 0; + times[1] = 0.2; + times[2] = 1; + times[3] = 2; +}; + +datablock ParticleData(AfterT5particle) +{ + dragCoefficient = 0; + gravityCoefficient = -0.017094; + inheritedVelFactor = 0.0176125; + constantAcceleration = -1.1129; + lifetimeMS = 2258; + lifetimeVarianceMS = 604; + useInvAlpha = 1; + spinRandomMin = -200; + spinRandomMax = 200; + textureName = "special/Smoke/smoke_001"; + colors[0] = "1.000000 0.677165 0.000000 1.000000"; + colors[1] = "0.181102 0.181102 0.181102 1.000000"; + colors[2] = "0.000000 0.000000 0.000000 0.000000"; + colors[3] = "1.000000 1.000000 1.000000 1.000000"; + sizes[0] = 0.991882; + sizes[1] = 2.99091; + sizes[2] = 4.98993; + sizes[3] = 1; + times[0] = 0; + times[1] = 0.2; + times[2] = 1; + times[3] = 2; +}; + +datablock ParticleEmitterData(BeforeT5) +{ + ejectionPeriodMS = 16; + periodVarianceMS = 10; + ejectionVelocity = 7.45968; + velocityVariance = 0.25; + ejectionOffset = 0; + thetaMin = 0; + thetaMax = 180; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = 0; + orientParticles= 0; + orientToNormal = 0; + orientOnVelocity = 1; + particles = "BeforeT5particle"; +}; + +datablock ParticleEmitterData(AfterT5) +{ + ejectionPeriodMS = 10; + periodVarianceMS = 0; + ejectionVelocity = 10.25; + velocityVariance = 0.25; + ejectionOffset = 0; + thetaMin = 0; + thetaMax = 180; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = 0; + orientParticles= 0; + orientToNormal = 0; + orientOnVelocity = 1; + particles = "AfterT5particle"; +}; diff --git a/base/scripts/TeamHuntersGame.cs b/base/scripts/TeamHuntersGame.cs new file mode 100644 index 0000000..3a060ac --- /dev/null +++ b/base/scripts/TeamHuntersGame.cs @@ -0,0 +1,586 @@ +//--------------------------------------// +// TeamHuntersGame.cs // +//--------------------------------------// + +// DisplayName = Team Hunters + +//--- GAME RULES BEGIN --- +//Collect flags and bring them to Nexus +//You may pass flags to a Capper +//Capper can collect many flags and try for massive score +//However, any player may score at Nexus +//All scores of team members count toward team score +//--- GAME RULES END --- + +package TeamHuntersGame { + +function Nexus::objectiveInit(%data, %object) +{ + Game.Nexus = %object; + Game.Nexus.playThread(0, "ambient"); + Game.Nexus.setThreadDir(0, true); + //The flash animation plays forwards, then back automatically, so we have to alternate the thread direcction... + Game.Nexus.flashThreadDir = true; +} + +function NexusBase::objectiveInit(%data, %object) +{ + Game.NexusBase = %object; + Game.NexusBase.playthread(0, "ambient"); + Game.NexusBase.setThreadDir(0, true); +} + +function NexusCap::objectiveInit(%data, %object) +{ + Game.NexusCap = %object; + Game.NexusCap.playthread(0, "ambient"); + Game.NexusCap.setThreadDir(0, true); +} + +}; + +//exec the AI scripts +exec("scripts/aiTeamHunters.cs"); + +$InvBanList[TeamHunters, "TurretOutdoorDeployable"] = 1; +$InvBanList[TeamHunters, "TurretIndoorDeployable"] = 1; +$InvBanList[TeamHunters, "ElfBarrelPack"] = 1; +$InvBanList[TeamHunters, "MortarBarrelPack"] = 1; +$InvBanList[TeamHunters, "PlasmaBarrelPack"] = 1; +$InvBanList[TeamHunters, "AABarrelPack"] = 1; +$InvBanList[TeamHunters, "MissileBarrelPack"] = 1; +$InvBanList[TeamHunters, "Mine"] = 1; + +//----------------------------------------------------------------------------- +//Game initialization functions + +function TeamHuntersGame::missionLoadDone(%game) +{ + //default version sets up teams - must be called first... + DefaultGame::missionLoadDone(%game); + + $numRanked = 0; + + //initialize the score and flag count for all the players + %count = ClientGroup.getCount(); + for(%i = 0; %i < %count; %i++) + { + %client = ClientGroup.getObject(%i); + %game.resetScore(%client); + %client.flagCount = 1; + } + $TopClient = ""; + $TopClientScore = 0; + + for(%j = 1; %j < (%game.numTeams + 1); %j++) + $teamScore[%j] = 0; + + //create the Flag group + $FlagGroup = nameToID("MissionCleanup/FlagGroup"); + if ($FlagGroup <= 0) + { + $FlagGroup = new SimGroup("FlagGroup"); + MissionCleanup.add($FlagGroup); + } + + if(nameToId("HuntersYardSaleSet") <= 0) + { + $HuntersYardSaleSet = new SimSet("HuntersYardSaleSet"); + MissionCleanup.add($HuntersYardSaleSet); + } + + // make a game object for the Nexus (functions defined in HuntersGame.cs) + MissionGroup.findNexus(); +} + +function TeamHuntersGame::initGameVars(%game) +{ + %game.SCORE_PER_SUICIDE = -1; + %game.SCORE_PER_TEAMKILL = -1; + %game.SCORE_PER_DEATH = -1; + %game.SCORE_PER_KILL = 1; + %game.SCORE_PER_TURRET_KILL = 1; + + %game.TeamMode = true; + + %game.GreedMode = $Host::TeamHuntersGreedMode; + %game.GreedMinFlags = 8; //min number of flags you must have before you can cap + + %game.HoardMode = $Host::TeamHuntersHoardMode; + %game.HoardStartTime = 5; //time left in the game at which hoard mode will start + %game.HoardDuration = 3; //duration of the hoard period + %game.HoardEndTime = %game.HoardStartTime - %game.HoardDuration; + + %game.yardSaleMin = 10; + + //make sure there is enough time in the match to actually have a hoard mode... + if ($host::timeLimit < %game.hoardStartTime + 1) + %game.hoardMode = false; + + //this is how many milliseconds before a warning is issued for camping near the Nexus + %game.nexusCampingTime = 10000; + + //vars for how long before the flag is deleted, and the fade transition time... + %game.flagLifeTimeMS = 120000; + %game.fadeTimeMS = 2000; + + %game.flagMsgDelayMS = 3000; + %game.oobThrowFlagsDelayMS = 3000; +} + +function TeamHuntersGame::allowsProtectedStatics(%game) +{ + // prevent appropriate equipment from being damaged - invulnerable + return true; +} + +function TeamHuntersGame::setNexusDisabled(%game) +{ + HuntersGame::setNexusDisabled(%game); +} + +function TeamHuntersGame::setNexusEnabled(%game) +{ + HuntersGame::setNexusEnabled(%game); +} + +function TeamHuntersGame::flashNexus(%game) +{ + HuntersGame::flashNexus(%game); +} + +function TeamHuntersGame::NexusSparkEmitter(%game, %client, %cap, %numToScore) +{ + HuntersGame::NexusSparkEmitter(%game, %client, %cap, %numToScore); +} + + +function TeamHuntersGame::resetScore(%game, %client) +{ + %client.score = 0; + %client.suicides = 0; + %client.kills = 0; + %client.teamKills = 0; + %client.deaths = 0; +} + +//NOTE - if we revert to this method of scoring, the function DefaultGame::awardScoreSuicide() no longer increments %client.deaths +// function TeamHuntersGame::recalcScore(%game, %cl) +// { +// if (%cl <= 0) +// return; +// +// %cl.score = 0; +// %cl.score += %cl.kills * %game.SCORE_PER_KILL; +// %cl.score += %cl.deaths * %game.SCORE_PER_DEATH; +// %cl.score += %cl.suicides * %game.SCORE_PER_SUICIDE; +// +// //must send the message to update the HUD +// messageClient(%cl, 'MsgYourScoreIs', "", %cl.score); +// +// %game.recalcTeamRanks(%cl); +// } + +function TeamHuntersGame::recalcScore(%game, %cl) +{ + if (%cl <= 0) + return; + + %killValue = %cl.kills * %game.SCORE_PER_KILL; + %deathValue = %cl.deaths * %game.SCORE_PER_DEATH; + + if (%killValue - %deathValue == 0) + %killPoints = 0; + else + %killPoints = (%killValue * %killValue) / (%killValue - %deathValue); + + %cl.score = %killPoints; + %cl.score += %cl.suicides * %game.SCORE_PER_SUICIDE; + %cl.score = mFloor(%cl.score); + + //must send the message to update the HUD + messageClient(%cl, 'MsgYourScoreIs', "", %cl.score); + + %game.recalcTeamRanks(%cl); +} + +function TeamHuntersGame::startMatch(%game) +{ + HuntersGame::startMatch(%game); +} + +function TeamHuntersGame::setupHoardCountdown(%game) +{ + HuntersGame::setupHoardCountdown(%game); +} + +function TeamHuntersGame::notifyHoardStart(%game, %seconds) +{ + HuntersGame::notifyHoardStart(%game, %seconds); +} + +function TeamHuntersGame::notifyHoardEnd(%game, %seconds) +{ + HuntersGame::notifyHoardEnd(%game, %seconds); +} + +function TeamHuntersGame::updateHoardStatusHUD(%game) +{ + HuntersGame::updateHoardStatusHUD(%game); +} + +//----------------------------------------------------------------------------- +//Player spawn/death functions + +function TeamHuntersGame::assignClientTeam(%game, %client) +{ + DefaultGame::assignClientTeam(%game, %client); +} + +function TeamHuntersGame::createPlayer(%game, %client, %spawnLoc) +{ + HuntersGame::createPlayer(%game, %client, %spawnLoc); +} + +function TeamHuntersGame::pickPlayerSpawn(%game, %client, %respawn) +{ + return %game.pickTeamSpawn(%client.team); +} + +function TeamHuntersGame::playerSpawned(%game, %player, %armor) +{ + HuntersGame::playerSpawned(%game, %player, %armor); + + //reset the enemy damaged time + %player.client.lastEnemyDamagedTime = 0; +} + +function TeamHuntersGame::onClientDamaged(%game, %clVictim, %clAttacker, %damageType, %sourceObject) +{ + //first call the default version + DefaultGame::onClientDamaged(%game, %clVictim, %clAttacker, %damageType, %sourceObject); + + //now see if the attacker was an enemy + if (isObject(%clAttacker) && %clAttacker.team != %clVictim.team) + %clVictim.lastEnemyDamagedTime = getSimTime(); +} + +function TeamHuntersGame::onClientKilled(%game, %clVictim, %clKiller, %damageType, %implement) +{ + //set the flag + %clVictim.isDead = true; + + //to prevent suiciders from dropping flags for their teammates - see if the player + //has taken enemy damage within the last 20 seconds + if ((%game.testSuicide(%clVictim, %clKiller, %damageType) || + (isObject(%clKiller) && %clKiller.team == %clVictim.team)) && + (getSimTime() - %clVictim.lastEnemyDamagedTime > 20000)) + { + %clVictim.flagCount--; + } + + //first, drop all the flags + HuntersGame::dropFlag(%game, %clVictim.player); + + //now call the default game stuff + DefaultGame::onClientKilled(%game, %clVictim, %clKiller, %damageType, %implement); + + messageClient(%clVictim, 'MsgHuntYouHaveFlags', "", 0); +} + +function TeamHuntersGame::onAIFriendlyFire(%game, %clVictim, %clAttacker, %damageType, %implement) +{ + if (%clAttacker && %clAttacker.team == %clVictim.team && %clAttacker != %clVictim) + AIMessageThread("Sorry", %clAttacker, %clVictim); +} + +function TeamHuntersGame::updateKillScores(%game, %clVictim, %clKiller, %damageType, %implement) +{ + if (%game.testKill(%clVictim, %clKiller)) //verify victim was an enemy + { + %game.awardScoreKill(%clKiller); + %game.awardScoreDeath(%clVictim); + } + else if (%game.testSuicide(%clVictim, %clKiller, %damageType)) //otherwise test for suicide + %game.awardScoreSuicide(%clVictim); +} + +function TeamHuntersGame::equip(%game, %player) +{ + HuntersGame::equip(%game, %player); +} + +function TeamHuntersGame::checkTimeLimit(%game) +{ + HuntersGame::checkTimeLimit(%game); +} + +function TeamHuntersGame::timeLimitReached(%game) +{ + HuntersGame::timeLimitReached(%game); +} + +function TeamHuntersGame::checkScoreLimit(%game, %team) +{ + //no such thing as a score limit in Hunters +} + +function TeamHuntersGame::scoreLimitReached(%game) +{ + //no such thing as a score limit in Hunters +} + +function TeamHuntersGame::clientMissionDropReady(%game, %client) +{ + //%client.rank = ClientGroup.getCount(); + messageClient(%client, 'MsgClientReady',"", %game.class); + //messageClient(%client, 'MsgHuntModesSet', "", %game.GreedMode, %game.HoardMode); + messageClient(%client, 'MsgHuntYouHaveFlags', "", 0); + //%game.populateTeamRankArray(%client); + //messageClient(%client, 'MsgHuntTeamRankIs', "", -1); + for(%i = 1; %i <= %game.numTeams; %i++) + messageClient(%client, 'MsgHuntAddTeam', "", %i, $TeamName[%i], $TeamScore[%i]); + + //messageClient(%client, 'MsgHuntGreedStatus', "", %game.GreedMode, %game.GreedMinFlags); + //%curTimeLeftMS = ($Host::TimeLimit * 60 * 1000) + $missionStartTime - getSimTime(); + //messageClient(%client, 'MsgHuntHoardStatus', "", %game.HoardMode, $Host::TimeLimit, %curTimeLeftMS, %game.HoardStartTime, %game.HoardDuration); + + messageClient(%client, 'MsgMissionDropInfo', '\c0You are in mission %1 (%2).', $MissionDisplayName, $MissionTypeDisplayName, $ServerName ); + + DefaultGame::clientMissionDropReady(%game, %client); +} + +function TeamHuntersGame::assignClientTeam(%game, %client, %respawn) +{ + DefaultGame::assignClientTeam(%game, %client, %respawn); + // if player's team is not on top of objective hud, switch lines + messageClient(%client, 'MsgCheckTeamLines', "", %client.team); +} + +function TeamHuntersGame::gameOver(%game) +{ + //call the default + DefaultGame::gameOver(%game); + + //send the winner message + %winner = ""; + if ($teamScore[1] > $teamScore[2]) + %winner = $teamName[1]; + else if ($teamScore[2] > $teamScore[1]) + %winner = $teamName[2]; + + if (%winner $= 'Storm') + messageAll('MsgGameOver', "Match has ended.~wvoice/announcer/ann.stowins.wav" ); + else if (%winner $= 'Inferno') + messageAll('MsgGameOver', "Match has ended.~wvoice/announcer/ann.infwins.wav" ); + else + messageAll('MsgGameOver', "Match has ended.~wvoice/announcer/ann.gameover.wav" ); + + messageAll('MsgClearObjHud', ""); + for(%i = 0; %i < ClientGroup.getCount(); %i ++) + { + %client = ClientGroup.getObject(%i); + Game.resetScore(%client); + cancel(%client.oobSched); + } +} + +function TeamHuntersGame::sendFlagCountMessage(%game, %client) +{ + HuntersGame::sendFlagCountMessage(%game, %client); +} + +function TeamHuntersGame::playerTouchFlag(%game, %player, %flag) +{ + HuntersGame::playerTouchFlag(%game, %player, %flag); +} + +function TeamHuntersGame::updateFlagHoarder(%game) +{ + //in Team Hunters, no waypoint for the flag hoarder... +} + +function TeamHuntersGame::hoardModeActive(%game, %wouldBeActive) +{ + HuntersGame::hoardModeActive(%game, %wouldBeActive); +} + +function TeamHuntersGame::playerDroppedFlag(%game, %player) +{ + HuntersGame::playerDroppedFlag(%game, %player); +} + +//----------------------------------------------------------------------------- +//VOTING functions +function TeamHuntersGame::sendGameVoteMenu( %game, %client, %key ) +{ + // Don't send any options if a vote is already running: + if ( %game.scheduleVote $= "" ) + { + // First send the common options: + DefaultGame::sendGameVoteMenu( %game, %client, %key ); + + // Now send the Hunters-specific options: + if ( %game.GreedMode ) + messageClient( %client, 'MsgVoteItem', "", %key, 'VoteGreedMode', 'disable greed mode', 'Disable GREED Mode' ); + else + messageClient( %client, 'MsgVoteItem', "", %key, 'VoteGreedMode', 'enable greed mode', 'Enable GREED Mode' ); + + if ( %game.HoardMode ) + messageClient( %client, 'MsgVoteItem', "", %key, 'VoteHoardMode', 'disable hoard mode', 'Disable HOARD Mode' ); + else + messageClient( %client, 'MsgVoteItem', "", %key, 'VoteHoardMode', 'enable hoard mode', 'Enable HOARD Mode' ); + } +} + +function TeamHuntersGame::voteGreedMode( %game, %admin, %player ) +{ + HuntersGame::voteGreedMode( %game, %admin, %player ); +} + +function TeamHuntersGame::voteHoardMode( %game, %admin, %player ) +{ + HuntersGame::voteHoardMode( %game, %admin, %player ); +} + +function TeamHuntersGame::throwFlags(%game, %player) +{ + HuntersGame::throwFlags(%game, %player); +} + +function TeamHuntersGame::outOfBoundsThrowFlags(%game, %client) +{ + HuntersGame::outOfBoundsThrowFlags(%game, %client); +} + +function TeamHuntersGame::dropFlag(%game, %player) +{ + HuntersGame::dropFlag(%game, %player); +} + +function TeamHuntersGame::enterMissionArea(%game, %playerData, %player) +{ + HuntersGame::enterMissionArea(%game, %playerData, %player); +} + +function TeamHuntersGame::leaveMissionArea(%game, %playerData, %player) +{ + HuntersGame::leaveMissionArea(%game, %playerData, %player); +} + +function TeamHuntersGame::onEnterTrigger(%game, %triggerName, %data, %obj, %colobj) +{ + HuntersGame::onEnterTrigger(%game, %triggerName, %data, %obj, %colobj); +} + +function TeamHuntersGame::onLeaveTrigger(%game, %triggerName, %data, %obj, %colobj) +{ + HuntersGame::onLeaveTrigger(%game, %triggerName, %data, %obj, %colobj); +} + +function TeamHuntersGame::CampingDamage(%game, %client, %firstWarning) +{ + HuntersGame::CampingDamage(%game, %client, %firstWarning); +} + +function TeamHuntersGame::updateScoreHud(%game, %client, %tag) +{ + // Send header: + messageClient( %client, 'SetScoreHudHeader', "", '\t%1%2\t%3%4', + $teamName[1], $teamScore[1], $teamName[2], $teamScore[2] ); + + // Send subheader: + messageClient( %client, 'SetScoreHudSubheader', "", '\tPLAYER (%1)SCOREFLAGS\tPLAYER (%2)SCOREFLAGS', + $TeamRank[1, count], $TeamRank[2, count] ); + + //find out who on each team has the most flags + %team1ClientMostFlags = -1; + %team1ClientMostFlagsCount = -1; + for (%i = 0; %i < $TeamRank[1, count]; %i++) + { + %cl = $TeamRank[1, %i]; + if (%cl.flagCount > %team1ClientMostFlagsCount) + { + %team1ClientMostFlagsCount = %cl.flagCount; + %team1ClientMostFlags = %cl; + } + } + if (%team1ClientMostFlagsCount <= 1) + %team1ClientMostFlags = -1; + + %team2ClientMostFlags = -1; + %team2ClientMostFlagsCount = -1; + for (%i = 0; %i < $TeamRank[2, count]; %i++) + { + %cl = $TeamRank[2, %i]; + if (%cl.flagCount > %team2ClientMostFlagsCount) + { + %team2ClientMostFlagsCount = %cl.flagCount; + %team2ClientMostFlags = %cl; + } + } + if (%team2ClientMostFlagsCount <= 1) + %team2ClientMostFlags = -1; + + %index = 0; + while (true) + { + if (%index >= $TeamRank[1, count] && %index >= $TeamRank[2, count]) + break; + + //get the team1 client info + %team1Client = ""; + %team1ClientScore = ""; + %team1ClientFlags = ""; + %col1Style = ""; + if (%index < $TeamRank[1, count]) + { + %team1Client = $TeamRank[1, %index]; + %team1ClientScore = %team1Client.score $= "" ? 0 : %team1Client.score; + %team1ClientFlags = %team1Client.flagCount - 1; + if (%team1ClientFlags <= 0) + %team1ClientFlags = ""; + if ( %team1Client == %team1ClientMostFlags ) + %col1Style = ""; + else if ( %team1Client == %client ) + %col1Style = ""; + } + + //get the team2 client info + %team2Client = ""; + %team2ClientScore = ""; + %team2ClientFlags = ""; + %col2Style = ""; + if (%index < $TeamRank[2, count]) + { + %team2Client = $TeamRank[2, %index]; + %team2ClientScore = %team2Client.score $= "" ? 0 : %team2Client.score; + %team2ClientFlags = %team2Client.flagCount - 1; + if (%team2ClientFlags <= 0) + %team2ClientFlags = ""; + if ( %team2Client == %team2ClientMostFlags ) + %col2Style = ""; + else if ( %team2Client == %client ) + %col2Style = ""; + } + + + //if the client is not an observer, send the message + if (%client.team != 0) + { + messageClient( %client, 'SetLineHud', "", %tag, %index, '%7\t%1%2%3\t%8%4%5%6', + %team1Client.name, %team1ClientScore, %team1ClientFlags, %team2Client.name, %team2ClientScore, %team2ClientFlags, %col1Style, %col2Style ); + } + //else for observers, create an anchor around the player name so they can be observed + else + { + messageClient( %client, 'SetLineHud', "", %tag, %index, '%7\t%1%2%3\t%8%4%5%6', + %team1Client.name, %team1ClientScore, %team1ClientFlags, %team2Client.name, %team2ClientScore, %team2ClientFlags, %col1Style, %col2Style, %team1Client, %team2Client ); + } + + %index++; + } + + //clear the rest of Hud so we don't get old lines hanging around... + messageClient( %client, 'ClearHud', "", %tag, %index ); +} diff --git a/base/scripts/Training1.cs b/base/scripts/Training1.cs new file mode 100644 index 0000000..d2650c0 --- /dev/null +++ b/base/scripts/Training1.cs @@ -0,0 +1,1320 @@ +// don't want this executing when building graphs +if($OFFLINE_NAV_BUILD) + return; + +// Script for mission 1 +//=================================================================================== +//error("Training 1 script"); + +// package and callbacks +activatePackage(Training1); + +addMessageCallback('MsgWeaponMount', playerMountWeapon); + +// additional mission Audio +datablock AudioProfile(HudFlashSound) +{ + filename = "gui/buttonover.wav"; + description = AudioDefault3d; + preload = true; +}; + +// additional mission Audio +datablock AudioProfile(HeartbeatSound) +{ + filename = "fx/misc/heartbeat.wav"; + description = Audio2D; + preload = true; + looping = false; +}; + +// variables +$numberOfEnemies[1] = 7; +$numberOfEnemies[2] = 10; +$numberOfEnemies[3] = 14; +$numberOfTeammates = 2; +$missionBotSkill[1] = 0.0; +$missionBotSkill[2] = 0.4; +$missionBotSkill[3] = 0.7; + +game.pilotName = "McWatt"; +game.bombardierName = "Yossarian"; + +//------------------------------------------------------------------------------ +function getTeammateGlobals() +{ + $TeammateWarnom0 = "WildSide"; + $teammateskill0 = 0.5; + $teammateVoice0 = Male3; + $teammateEquipment0 = 0; + $teammateGender0 = Male; + + $TeammateWarnom1 = "Proteus"; + $teammateSkill1 = 0.5; + $teammateVoice1 = Male4; + $teammateEquipment1 = 0; + $teammateGender1 = Male; +} + +game.tower = nameToId("Tower"); +game.tower.threshold1 = 330; +game.tower.threshold2 = 80; + +$victimSet[1] = "0 7 10 11"; +$victimSet[2] = "1 8 12"; +$victimSet[3] = "2 9 13"; + +package Training1 { +//BEGIN TRAINING1 PACKAGE ======================================================================= + +//------------------------------------------------------------------------------ + +function MP3Audio::play(%this) +{ + //too bad...no mp3 in training +} + +function countTurretsAllowed(%type) +{ + return $TeamDeployableMax[%type]; +} + +function toggleScoreScreen(%val) +{ + if ( %val ) + //error("No Score Screen in training......."); + messageClient($player, 0, $player.miscMsg[noScoreScreen]); +} + +function toggleCommanderMap(%val) +{ + if ( %val ) + messageClient($player, 0, $player.miscMsg[noCC]); +} + +function giveall() +{ + error("When the going gets tough...wussies like you start cheating!"); + messageClient($player, 0, "Cheating eh? What\'s next? Camping?"); +} + +function kobayashi_maru() +{ + $testCheats = true; + commandToServer('giveAll'); +} + +// get the ball rolling +//------------------------------------------------------------------------------ +function startCurrentMission() +{ + playGui.add(outerChatHud); + //fade up from black + ServerConnection.setBlackOut(true, 0); + + //can't change settings during the intro... + SinglePlayerEscSettingsBtn.setActive(0); + + updateTrainingObjectiveHud(obj1); + setTeammatesCMapInvisible(true); + $teammate0.player.invincible = true; + $teammate1.player.invincible = true; + resetWildcat(); + + $player.camera = new Camera() + { + dataBlock = Observer; + }; +} + +//------------------------------------------------------------------------------ +function SinglePlayerGame::equip(%game, %player) +{ + //ya start with nothing...NOTHING! + %player.clearInventory(); + for(%i =0; %i<$InventoryHudCount; %i++) + %player.client.setInventoryHudItem($InventoryHudData[%i, itemDataName], 0, 1); + + %set = %player.client.equipment; + //error("equping Player "@%player@" with set"@%set); + switch (%set) + { + case 0: + echo("using default equipment"); + + for(%i =0; %i<$InventoryHudCount; %i++) + %player.client.setInventoryHudItem($InventoryHudData[%i, itemDataName], 0, 1); + + %player.setArmor("Light"); + %player.setInventory(RepairKit,1); + %player.setInventory(Blaster,1); + %player.setInventory(Disc,1); + %player.setInventory(Chaingun, 1); + %player.setInventory(ChaingunAmmo, 100); + %player.setInventory(DiscAmmo, 20); + + %player.use(Disc); + %player.weaponCount = 3; + + case 1: + echo("using case 1 equipment"); + + for(%i =0; %i<$InventoryHudCount; %i++) + %player.client.setInventoryHudItem($InventoryHudData[%i, itemDataName], 0, 1); + + %player.setArmor("Light"); + %player.setInventory(RepairKit,1); + %player.setInventory(Blaster,1); + %player.setInventory(Disc,1); + %player.setInventory(Chaingun, 1); + %player.setInventory(ChaingunAmmo, 100); + %player.setInventory(DiscAmmo, 20); + %player.setInventory(EnergyPack, 1); + + %player.weaponCount = 3; + + case 2: + %player.setArmor(Heavy); + + //%player.setInventory(CloakingPack, 1); + + %player.setInventory(RepairKit,1); + %player.setInventory(Grenade,6); + + %player.setInventory(Plasma, 1); + %player.setInventory(PlasmaAmmo, 25); + %player.setInventory(Disc,1); + %player.setInventory(DiscAmmo, 20); + %player.setInventory(ElfGun, 1); + %player.setInventory(MissileLauncher,1); + %player.setInventory(MissileLauncherAmmo, 10); + %player.setInventory(TargetingLaser, 1); + %player.weaponCount = 4; + %player.use(Disc); + } +} + +// Objectives +//================================================================================= + +//------------------------------------------------------------------------------ +function openingSpiel() +{ + //schedule(11000, 0, updateTrainingObjectiveHud, obj2); + doText(T1_01); + doText(T1_01a); + doText(T1_01b); + doText(T1_01c); + doText(T1_02); + doText(T1_02a); + doText(T1_03); + doText(T1_download01); + doText(T1_03a); + doText(T1_03b, 1000); + doText(T1_03c, 1000); + doText(T1_17, 700); + doText(T1_04, 3000); + doText(T1_05, 3000); + doText(T1_06); + doText(T1_tipEnergy); + doText(T1_08, 2500); + doText(T1_09, 4000); + doText(T1_10, 1000); + doText(T1_11); + doText(T1_10a); + doText(T1_10b); +} + +//------------------------------------------------------------------------------ +function hurryPlayerUp() +{ + doText(Any_abortwarn); + $player.hurryUp = schedule(45000, $player.player, DoText, Any_abort); +} + + +// vehicle: vehicle controls, destination +//------------------------------------------------------------------------------ +function clientCmdVehicleMount() +{ + parent::clientCmdVehicleMount(); + + game.respawnPoint = 3; + + //order chasers to attack (chasers are enemies 3 - 6) + if(!game.mountVehicle){ + game.mountVehicle = true; + //doText(T1_28); + doText(T1_29); + doText(T1_29a); + doText(Any_Waypoint03); + + // and waypoint to MPB + setWaypointAt(nameToId(MPB).position, "Extraction Team"); + updateTrainingObjectiveHud(obj5); + // for now + for( %x = 3; %x <= 6; %x++ ) + if($enemy[%x].player) + $enemy[%x].stepEngage($player); + + } +} + +//------------------------------------------------------------------------------ +function SniperRifle::onCollision(%data,%obj, %col) +{ + //echo("Sniper Rifle Collision"); + if(!game.msgSniperNoPickup && $player.player.weaponCount >= 3) { + game.msgSniperNoPickup = true; + clearQueue(); + doText(T1_24); + //doText(T1_24a); + } + else if(!game.msgSniperPickUp && $player.player.weaponcount < 3) { + game.msgSniperPickUp = true; + game.msgSniperNoPickup = true; + clearQueue(); + doText(T1_TipSniper02); + } + + ItemData::onCollision(%data,%obj,%col); +} + + +//------------------------------------------------------------------------------ +function RepairPatch::onCollision(%data,%obj,%col) +{ + parent::onCollision(%data,%obj,%col); + if(game.repair++ != 3) + return; + + if(%col == $player.player && !game.gotRepairKit) + { + game.gotRepairKit = true; + if(!game.blowOff){ + moveMap.push(); //jic + doText(T1_12a); + spiel2(); + } + } +} + +//------------------------------------------------------------------------------ +function EnergyPack::onCollision(%data,%obj,%col) +{ + parent::onCollision(%data,%obj,%col); + if (!game.EnergyPackPickup) { + game.EnergyPackPickup = true; + clearQueue(); + doText(T1_tipPack01); + doText(T1_tipPack02); + } +} + +//------------------------------------------------------------------------------ +function playerMountWeapon(%tag, %text, %image, %player, %slot) +{ + if( game.firstTime++ < 2) + return; // initial weapon mount doesnt count + + //echo("the problem is the image name: "@%image.getName()); + if(%image.getName() $= "BlasterImage" && !game.msgBlast) { + game.msgBlast = true; + //doText(T1_TipBlaster01); + } + if(%image.getName() $= "ChaingunImage" && !game.msgChain) { + game.msgchain = true; + //doText(T1_TipChaingun); + } + if(%image.getName() $= "DiscImage" && !game.msgDisc) { + game.msgDisc = true; + //doText(T1_TipSpinfusor); + } + if(%image.getName() $= "SniperRifleImage" && !game.msgSnipe) { + game.msgSnipe = true; + doText(T1_TipSniper03); + doText(T1_TipSniper04); + } +} + +//------------------------------------------------------------------------------ +function WeaponImage::onMount(%this,%obj,%slot) +{ + messageClient(%obj.client, 'MsgWeaponMount', "", %this, %obj, %slot); + parent::onMount(%this,%obj,%slot); +} + + +//------------------------------------------------------------------------------ +function spawnSinglePlayer() +{ + resetWildCat(); + parent::spawnSinglePlayer(); +} + +//------------------------------------------------------------------------------ +function resetWildCat() +{ + + if(isObject($player.vehicle)) + $player.vehicle.delete(); + + $player.vehicle = new HoverVehicle(hoverBike) { + position = nameToId(hoverBikeDP).position; + rotation = "0.200891 0.091345 0.975346 17.3161"; + scale = "1 1 1"; + dataBlock = "scoutVehicle"; + }; +} + + +//------------------------------------------------------------------------------ +function spiel2() +{ + game.respawnPoint = 1; + //moveMap.bindCmd( keyboard, "backspace", "", "skipWeaponsCheck();" ); + clearQueue(); + cancel($player.hurryUp); + $player.currentWaypoint.delete(); //? + doText(T1_12b); + doText(T1_TipIFF); + doText(T1_13); + doText(T1_14); + doText(T1_TipBlaster01); + doText(T1_15); + doText(T1_TipChaingun); + doText(T1_16); + doText(T1_TipSpinfusor); + //doText(T1_17); + //doText(T1_TipBlaster02); + //doText(T1_TipJets02); + //doText(T1_18a); + doText(T1_22); + doText(T1_22a); + doText(T1_18, 5000); + doText(ANY_tipNow01); + doText(T1_tipjets01); +} + +function singlePlayerGame::onAIRespawn(%game, %client) +{ + // DONT add the default tasks + //error("default tasks not added"); +} + +//------------------------------------------------------------------------------ +function missionClientKilled(%victim, %killer) +{ + // this is just a bit messy as I added the training difficulty stuff late + + %skill = $pref::trainingDifficulty; + + if(%victim == $player) { + //error("Player victim re engagement"); + for(%i = 0; %i < clientGroup.getCount(); %i++) { + %client = clientGroup.getObject(%i); + if(%client.isAIControlled()) + if(%client.getStepName() $= "AIStepEngage") { + %client.shouldEngageOnPlayerRespawn = true; + //error(%client.name SPC " should Engage On Player Respawn."); + } + } + } + + if(%victim.team != $player.team && %skill < 3) + schedule(3000, $player.player, adviseHealthKit); + + %setDestroyed = checkForSequenceSkillCompletion(%victim); + switch(%setDestroyed) { + case 1: + doText(ANY_Kudo04, 3000); + doText(T1_21); + //doText(T1_22); + //doText(ANY_tipscavenge02, 1000); + doText(ANY_tipscavenge01); + case 2: + doText(ANY_Kudo01, 3000); + game.EngagingEnemy1 = false; + doText(T1_26); + $enemy2.stepEngage($player); + $enemy2.clientDetected($player); + if(%skill > 1) { + $enemy9.stepEngage($player); + $enemy9.clientDetected($player); + } + if(%skill > 2) { + $enemy13.stepEngage($player); + $enemy13.clientDetected($player); + } + + if(%skill == 0) { + //the first test of this went so well we're doing it again + %target = $enemy2.player.getTarget(); + %mask = getTargetAlwaysVisMask(%target); + setTargetAlwaysVisMask(%target, %mask |(1<<1)); + } + + case 3 : + doText(T1_27a); + doText(T1_27b, 1000); + doText(T1_28, 5000); + doText(Any_TipSkiing); + schedule(9000, game, setWaypointAt, nameToId($player.vehicle).getTransform(), "Vehicle" ); + updateTrainingObjectiveHud(obj6); + setTeammatesCMapInvisible(false); + } +} + +//------------------------------------------------------------------------------ +function adviseHealthKit() +{ + if(game.trainingIntro) + return; + if($player.player.getdamageLevel() > 0.3 + && $player.player.getInventory(RepairKit) && game.useHeath++ < 4) { + doText(Any_HealthKit); + } +} + +function checkForSequenceSkillCompletion(%victim) +{ + %set = findVictimSet(%victim); + //how is everbody esle in the set doing + for(%i = 0; %i < getWordCount($victimSet[%set]); %i++){ + %enemy = getWord($victimSet[%set], %i); + if($enemy[%enemy] && $enemy[%enemy].player && $enemy[%enemy] != %victim) { + //error("There is $Enemy"@%enemy@" still in set "@ %set); + return 0; + } + } + return %set; + +} + +function findVictimSet(%victim) +{ + for(%i = 1; %i <= 3; %i++) { + for(%word = 0; %word < getWordCount($victimSet[%i]); %word++) { + %num = getWord($victimSet[%i], %word); + if($enemy[%num] == %victim) { + //error("Victim is member of victim set "@%i); + return %i; + } + } + } +} + +// hokay...we have gone away from the default ai so we have to keep our forced-task +// AI system intact. If the player is killed the AI will forget about him. +// Lets iterate throught the client group and find out who should re-engage the player +// %client.shouldEngageOnPlayerRespawn is set in missionClientKilled +function singlePlayerGame::playerSpawned(%game, %player) +{ + parent::playerSpawned(%game, %player); + + if(%player.client == $player) { + for(%i = 0; %i < clientGroup.getCount(); %i++) { + %client = clientGroup.getObject(%i); + if(%client.isAIControlled()) + if(%client.shouldEngageOnPlayerRespawn) { + //error(%client.name SPC " is re-engaging."); + %client.stepEngage($player); + } + } + } + +} +//------------------------------------------------------------------------------ +function singlePlayerGame::gameOver(%game) +{ + //moveMap.bindCmd( keyboard, "backspace", "", game.returnBinding ); + cancel($Training1Blackout); + cancel($Training1HitGround); + LightMaleHumanArmor.minImpactSpeed = 45; + $player.player.mountVehicle = true; + + if(HelpTextGui.isVisible()) + helpTextGui.setVisible(false); + + //re-enable the use of the settings button... + SinglePlayerEscSettingsBtn.setActive(1); + + Parent::gameOver(); +} + +function autoToggleHelpHud(%state) +{ + if(HelpTextGui.isVisible() != %state) + toggleHelpText(); + +} + + +//------------------------------------------------------------------------------ +function skipIntroCinematic() +{ + messageClient($player, 0, "Skipping intro..."); + clearQueue(); + trainingIntroFlightEnd(); +} + +function skipFlashingHud() +{ + messageClient($player, 0, "Skipping HUD tutorial..."); + clearQueue(); + moveMap.push(); + spiel2(); +} + +function skipWeaponsCheck() +{ + messageClient($player, 0, "Skipping weapons tutorial...."); + clearQueue(); + doText(Any_blowOff3); + setWaypointAt(nameToId(Tower).position, "Tower"); + updateTrainingObjectiveHud(obj4); + queEnemySet(0); + + //moveMap.bindCmd( keyboard, "backspace", "", game.returnBinding ); +} + + + +//------------------------------------------------------------------------------ +function objectiveDistanceChecks() +{ + %playerPosition = $player.player.getTransform(); + if(!%playerPosition) { + $player.distanceCheckSchedule = schedule(5000, game, objectiveDistanceChecks); + return; + } + + %base1distance = vectorDist( %playerPosition, game.tower.position ); + //error("debug distance: tower- "@%base1distance); + if(%base1distance < game.tower.threshold1 && !game.base1t1 ) { + game.base1t1 = true; + if(!$enemy0.dead) { + $enemy0.stepEngage($player); + %skill = $pref::trainingDifficulty; + if(%skill > 1) + $enemy7.stepEngage($player); + if(%skill > 2) { + $enemy10.stepEngage($player); + $enemy11.stepEngage($player); + } + clearQueue(); + doText(Any_Blowoff1); + } + else { + doText(ANY_tipNow02); + doText(T1_tipSkiing01); + doText(T1_tipSkiing02); + doText(T1_tipSkiing03); + } + } + if(%base1distance < game.tower.threshold2) { + if(!game.base1t2) { + game.respawnPoint = 2; + doText(T1_23); + doText(T1_23a); + doText(T1_23b); + schedule(45000, game, queEnemySet, 1); + } + + game.base1t2++; + + } + + //MPB + %mpbDist = vectorDist( %playerPosition, nameToId(MPB).position ); + //echo("debug distance: mpb- "@%mpbdist); + if(%mpbDist < 70 && !game.completed) { + game.completed = true; + clearQueue(); + doText(T1_30, true); + $player.vehicle.setFrozenState(true); + + missionComplete($player.miscMsg[training1win]); + } + + $player.distanceCheckSchedule = schedule(1000, game, objectiveDistanceChecks); +} + +//------------------------------------------------------------------------------ +function queEnemySet(%set) +{ + switch(%set) { + case 0: + %skill = $pref::trainingDifficulty; + if($enemy0.player) { + $enemy0.stepEngage($player); + } + if(%skill > 1 && $enemy7.player) + $enemy7.stepEngage($player); + if(%skill > 2 && $enemy10.player) { + $enemy10.stepEngage($player); + } + if(%skill > 2 && $enemy11.player) { + $enemy11.stepEngage($player); + } + case 1: + doText(T1_25); + doText(T1_25a); + doText(T1_tipTactics); + $enemy1.stepEngage($player); + $enemy1.clientDetected($player); + %skill = $pref::trainingDifficulty; + //messageClient($player, 0, "Debug:"SPC $enemy1 SPC "has just been issued an engage order for" SPC $player); + if(%skill > 1) + $enemy8.stepEngage($player); + $enemy8.clientDetected($player); + if(%skill > 2) { + $enemy12.stepEngage($player); + $enemy12.clientDetected($player); + } + game.engagingEnemy1 = true; + updateTrainingObjectiveHud(obj3); + + //we are going to try some tricky 0000 to make this enemy always visible to sensors + %target = $enemy1.player.getTarget(); + %mask = getTargetAlwaysVisMask(%target); + setTargetAlwaysVisMask(%target, %mask |(1<<1)); + } +} + + +// Training specific functions +//----------------------------------------------------------------------------- +function lockArmorHack() +{ + updateTrainingObjectiveHud(obj2); + movemap.pop(); + //$player.player.setMoveState(true); + //$player.player.schedule(1000,"setMoveState", false); +} + +// yes all thes flashSomethings() couldve been done as one function like I did in training4 +//------------------------------------------------------------------------------ +function flashEnergy() +{ + %time = 1000; + %num = 6; + for(%i=0; %i<%num; %i++) { + schedule(%time*%i, $player.player, "eval", "energyHud.setVisible(false);" ); + + schedule(%time*%i + %time/2, $player.player, "eval", "energyHud.setVisible(true);" ); + $player.schedule(%time*%i, "play2d", HudFlashSound); + } +} + +//------------------------------------------------------------------------------ +function flashHealth() +{ + %time = 900; + %num = 5; + for(%i=0; %i<%num; %i++) { + schedule( %time*%i, $player.player, "eval", "damageHud.setVisible(false);"); + + schedule(%time*%i + %time/2, $player.player, "eval", "damageHud.setVisible(true);"); + $player.schedule(%time*%i, "play2d", HudFlashSound); + } +} + +//------------------------------------------------------------------------------ +function flashWeapon(%slot) +{ + schedule(300, $player.player, use, $WeaponNames[%slot]); + %time = 1000; + %num = 6; + for(%i=0; %i<%num; %i++) { + schedule(%time*%i, $player.player, "eval", "weaponsHud.setActiveWeapon(-1);"); + + schedule(%time*%i + %time/2, $player.player, "eval", "weaponsHud.setActiveWeapon("@%slot@");"); + $player.schedule(%time*%i, "play2d", HudFlashSound); + } +} + +//------------------------------------------------------------------------------ +function flashWeaponsHud() +{ + %time = 1000; + %num = 6; + for(%i=0; %i<%num; %i++) { + schedule( %time*%i, $player.player, "eval", "weaponsHud.setVisible(false);"); + + schedule(%time*%i + %time/2, $player.player, "eval", "weaponsHud.setVisible(true);"); + $player.schedule(%time*%i, "play2d", HudFlashSound); + } +} + +//------------------------------------------------------------------------------ +function flashCompass() +{ + %time = 900; + %num = 5; + for(%i=0; %i<%num; %i++) { + schedule(%time*%i, $player.player, "eval", "HudCompassBack.setVisible(false);"); + schedule(%time*%i, $player.player, "eval", "compass.setVisible(false);"); + + schedule(%time*%i + %time/2, $player.player, "eval", "HudCompassBack.setVisible(true);"); + schedule(%time*%i + %time/2, $player.player, "eval", "compass.setVisible(true);"); + $player.schedule(%time*%i, "play2d", HudFlashSound); + } +} + +//------------------------------------------------------------------------------ +function flashInventory() +{ + %time = 1000; + %num = 6; + for(%i=0; %i<%num; %i++) { + schedule(%time*%i, $player.player, "eval", "inventoryHud.setVisible(false);"); + + schedule(%time*%i + %time/2, $player.player, "eval", "inventoryHud.setVisible(true);"); + $player.schedule(%time*%i, "play2d", HudFlashSound); + } +} + +//------------------------------------------------------------------------------ +function flashPack() +{ + %time = 1000; + %num = 6; + for(%i=0; %i<%num; %i++) { + schedule(%time*%i, $player.player, "eval", "backPackFrame.setVisible(false);"); + + schedule(%time*%i + %time/2, $player.player, "eval", "backPackFrame.setVisible(true);"); + $player.schedule(%time*%i, "play2d", HudFlashSound); + } +} + +//------------------------------------------------------------------------------ +function flashSensor() +{ + %time = 1000; + %num = 6; + for(%i=0; %i<%num; %i++) { + schedule(%time*%i, $player.player, "eval", "sensorHudBack.setVisible(false);"); + + schedule(%time*%i + %time/2, $player.player, "eval", "sensorHudBack.setVisible(true);"); + $player.schedule(%time*%i, "play2d", HudFlashSound); + } +} + +//------------------------------------------------------------------------------ +function flashMessage() +{ + %time = 1000; + %num = 6; + for(%i=0; %i<%num; %i++) { + schedule(%time*%i, $player.player, "eval", "outerChatHud.setVisible(false);"); + + schedule(%time*%i + %time/2, $player.player, "eval", "outerChatHud.setVisible(true);"); + $player.schedule(%time*%i, "play2d", HudFlashSound); + } +} + +//------------------------------------------------------------------------------ +function flashObjective() +{ + %time = 1000; + %num = 6; + for(%i=0; %i<%num; %i++) { + schedule(%time*%i, $player.player, "eval", "objectiveHud.setVisible(false);"); + + schedule(%time*%i + %time/2, $player.player, "eval", "objectiveHud.setVisible(true);"); + $player.schedule(%time*%i, "play2d", HudFlashSound); + } +} + +//------------------------------------------------------------------------------ +function playCinematicSound(%sound) +{ + switch$(%sound) + { + case "MissileLock": + %file = "fx/weapons/missile_launcher_lock.wav"; + %looping = true; + + case "Heartbeat": + %file = "fx/misc/heartbeat.wav"; + %looping = false; + } + + %audiosound = new AudioEmitter() { + filename = %flie; + position = $player.player; + volume = "1"; + isLooping = %looping; + is3D = false; + type = "EffectAudioType"; + }; + $player.currentSound = %audiosound; +} + +function playCinematicMissileLockSound() +{ + %audiosound = new AudioEmitter() { + filename = "fx/weapons/missile_launcher_lock.wav"; + position = $player.player; + volume = "1"; + isLooping = "1"; + is3D = false; + type = "EffectAudioType"; + }; + $player.missileSound = %audiosound; +} + + +//------------------------------------------------------------------------------ +function setTeammatesCMapInvisible(%on) +{ + %arg = (%on ? 0xffffffff : 0); + setTargetNeverVisMask(nameToId(MPB).getTarget(), %arg); + setTargetNeverVisMask($teammate0.player.getTarget(), %arg); + setTargetNeverVisMask($teammate1.player.getTarget(), %arg); + +} + + +// Im gonna do a pseudo-cinematic here so bear with me +//------------------------------------------------------------------------------ +function beginTraining1Intro() +{ + //error("beginning training intro.....wait for it.......now!"); + //messageClient($player, 0, $player.miscMsg[skip]); + //moveMap.bindCmd( keyboard, "backspace", "", "skipIntroCinematic();" ); + + //set the intro started bools + game.playedIntro = true; + game.trainingIntro = true; + + //create the bomber + %introFlyerObject = nameToId(introFlyerDP); + + $player.flyer = new FlyingVehicle(Flyer) { + position = %introFlyerObject.position; + rotation = %introFlyerObject.rotation; + scale = "1 1 1"; + dataBlock = "BomberFlyer"; + }; + + // create, spawn, set the skin, and equip the pilot + //------------------------------------------------------------ + %pilot = aiConnect(game.pilotName,$playerTeam, 0, 0, "Male1", 1.0); + $player.flyer.pilot = %pilot; + + + setTargetSkin(%pilot.target, $teamSkin[$playerTeam]); + %pilot.player.setArmor(light); + + //mount the pilot + %pilot.pilotVehicle = false; + //%pilot.stepMove($player.flyer.position, 0.25, 4); + $player.flyer.mountObject(%pilot.player, 0); + %pilot.setControlObject($player.flyer); + %pilot.setPilotPitchRange(-0.2, 0.05, 0.05); + + // create and mount the bomber + //------------------------------------------------------------ + %bombardier = aiConnect(game.bombardierName, $playerTeam, 0, 0, "Male2", 1.0); + + $player.flyer.bombardier = %bombardier; + setTargetSkin(%bombardier.target, $teamSkin[$playerTeam]); + %bombardier.player.setArmor(Medium); //not that you can tell + + //mount the bombardier + //%bombardier.stepMove($player.flyer.position, 0.25, 4); + $player.flyer.mountObject(%bombardier.player, 1); + + // and put the player in the tailgunners seat + //------------------------------------------------------------ + //it would be nice if the player was facing the same direction as the bomber to start + $player.player.use(Blaster); + $player.flyer.mountObject($player.player, 2); + $player.player.setTransform($player.player.position SPC %introFlyerObject.rotation); + + // and set the camera to third person + if($firstperson) + toggleFirstPerson($player); + + $player.player.invincible = true; + + getTrainingPacifistMap(); + trainingPacifistMap.push(); + + // add enemyMissile Laucher Dude + %MLDude = aiConnect("Oksana Baiul", $enemyTeam); + $missileLauncherDude = %MLDude; + %MLDude.player.scopeToClient($player); + + %MLDude.player.setTransform(nameToID(MissileGuySpot).getTransform()); + %MLDude.race = "Bioderm"; + %MLDude.voice = "Derm2"; + setTargetSkin(%MLDude.target, $teamSkin[$enemyTeam]); + %MLDude.equipment = 2; + game.equip(%MLDude.player); + %MLDude.player.setArmor(%MLDude.armor); + + // then start the flyers move sequence + %pilot.addTask(AITraining1Pilot); + + //fade up from black + $Training1Blackout = ServerConnection.schedule(3000, setBlackOut, false, 4000); +} + +//------------------------------------------------------------------------------ + + +//------------------------------------------------------------------------------ +function trainingIntroFlightEnd() +{ + //put the player back in his body, give him control back, + //a little dramatic flash, start the rest of the mission + game.trainingIntro = false; + $player.player.invincible = false; + serverConnection.setBlackout(false, 5000); + $player.player.setActionThread(cel1); + $player.player.schedule(2000, use, Disc); + trainingPacifistMap.pop(); + + commandToClient($player, 'toggleDashHud'); + if(isObject($player.flyer)) + cleanUpFlyer(); + + if(!$firstPerson) + toggleFirstPerson($player); + + $player.player.setVelocity("0 0 0"); + $player.player.setTransform(nameToId(DP).getTransform()); + moveMap.push(); + //$player.player.setDamageLevel(0.3); + schedule(10000, game, openingspiel); + objectiveDistanceChecks(); + + //moveMap.bindCmd( keyboard, "backspace", "", "skipFlashingHud();" ); + + //re-enable the use of the settings button... + SinglePlayerEscSettingsBtn.setActive(1); +} + +//------------------------------------------------------------------------------ +function ClientCmdSetHudMode(%mode, %type, %node) +{ + parent::ClientCmdSetHudMode(%mode, %type, %node); + TrainingMap.push(); + getTrainingPacifistMap(); + if(game.trainingIntro) + trainingPacifistMap.push(); +} + +//------------------------------------------------------------------------------ +function PlayGui::onWake(%this) +{ + parent::onWake(%this); + //error("Waking training play gui"); + // okay we know the victim...erm...player is looking + // and we hope they have a body so lets do this + if(!game.playedIntro) { + game.PlayGuiAwake = true; + checkForTraining1Intro(); + } + +} + +function checkForTraining1Intro() +{ + if(game.playGuiAwake && $player.player && $currentMission $= "Training1") + beginTraining1Intro(); + else + { +error("DEBUG checkForTraining1Intro() failed!!!"); + schedule(50, game, checkForTraining1Intro); + } +} + +//------------------------------------------------------------------------------ +function Armor::AIonMount(%this, %obj, %vehicle, %node) +{ +} + +function Armor::AIonUnMount(%this, %obj, %vehicle, %node) +{ +} + +function AITraining1Pilot::assume(%task, %client) +{ + %task.setWeightFreq(30); + %task.setMonitorFreq(10); + + +// //next, start the pilot on his way to mounting the vehicle +// %client.pilotVehicle = true; +// %client.stepMove($player.flyer.position, 0.25, $AIModeMountVehicle); +} + +function AITraining1Pilot::weight(%task, %client) +{ + %task.setWeight(10000); +} + +function AITraining1Pilot::monitor(%task, %client) +{ + //messageall(0, " AITraining1Pilot::monitor "@%task.locationIndex); + %group = nameToId(FlightPath); + if(!%task.locationIndex) + %task.locationIndex = 0; + + //HACK ALERT!!! + //since the path for this mission is completely straight, always head for the end of the path + //%location = %group.getObject(%task.locationIndex); + %location = %group.getObject(%group.getCount() - 1); + + //see if we've mounted yet + if(%client.vehicleMounted) + { + %client.setPilotDestination(%location.position); + + //else see if we're close enough to the current destination to choose the next + %pos = %client.vehicleMounted.position; + %pos2D = getWord(%pos, 0) SPC getWord(%pos, 1) SPC "0"; + %dest = %group.getObject(%task.locationIndex).position; + %dest2D = getWord(%dest, 0) SPC getWord(%dest, 1) SPC "0"; + + if (VectorDist(%dest2D, %pos2D) < 20) + { + if(%group.getCount() > %task.locationIndex) { + %task.locationIndex++; + cinematicEvent(%task.locationIndex); + } + //else messageAll(0, "Ride Over"); + } + } + else + %client.stepMove($player.flyer.position, 0.25, $AIModeExpress); +} + +function cinematicEvent(%num) +{ + //messageAll(0, "Doing Cinematic Event: "@%num); + switch(%num) + { + case 1: + doText(any_Warning02); + + case 2: + if(!$firstPerson) + toggleFirstPerson($player); + movemap.schedule(6000, "pop"); + + case 3: + moveMap.pop(); + //error(nameToId(MissileCamera)); + $player.camera.setTransform(nameToId(MissileCamera).getTransform()); + commandToClient($player, 'toggleDashHud', false); + cancel($player.altCheck); + cancel($player.speedCheck); + HideHudHack(false); + toggleCamera(true); + $MissileLauncherDude.player.use(MissileLauncher); + + case 4: + ShoulderMissile.lifeTimeMs = 10000; + $MissileLauncherAimTime = 600; + MissileDudeAimAtTarget($missileLauncherDude, 0); + schedule($MissileLauncherAimTime, 0, "MissileDudeFireMissile", $missileLauncherDude); + + case 7: + if(game.gotMissile) + turnPlayerToObject(game.gotMissile); + else + turnPlayerToObject($missileLauncherDude.player); + + toggleCamera(true); + moveMap.push(); + TrainingPacifistMap.push(); + hideHudHack(true); + playCinematicSound("MissileLock"); + schedule(5700, 0, forcedCinematicPlayerDismount); + schedule( 6100, game, cleanUpFlyer); + //schedule( 8000, game, trainingIntroFlightEnd); + } +} + +function forcedCinematicPlayerDismount() +{ + $player.player.mountVehicle = false; + $player.player.unmount(); + %velocity = $player.player.getVelocity(); + %velX = getWord(%velocity, 0); + %velY = getWord(%velocity, 1); + $player.player.setVelocity(%velX SPC %velY SPC "20"); + $player.player.schedule(300, setDamageFlash, 0.3); + playTargetAudio( $player.target, 'avo.deathCry_01', AudioClose3d, false ); + $player.player.setActionThread(Death1, true); + $player.player.setDamageLevel(0.3); + //$player.flyer.pilot.player.setActionThread(Death10, true); + //$player.flyer.bombardier.player.setActionThread(Death11, true); + + if($firstPerson) + toggleFirstPerson($player); + + LightMaleHumanArmor.minImpactSpeed = 10000; + trainingPlayerHitGround(); + Game.playGrunt = true; + game.expectingImpact = true; +} + +function MissileDudeAimAtTarget(%client, %percent) +{ + %group = nameToId(FlightPath); + %endPos = %group.getObject(4).position; + + //calculate the start position + %startTransform = nameToId(MissileGuySpot).getTransform(); + %startDirection = MatrixMulVector("0 0 0 " @ getWords(%startTransform, 3, 6), "0 1 0"); + %startDirection = VectorNormalize(%startDirection); + %startPos = VectorAdd(getWords(%startTransform, 0, 2), VectorScale(%startDirection, 100)); + + //now calculate the aim position + %vec = VectorSub(%endPos, %startPos); + %length = VectorDist(%endPos, %startPos); + %vec = VectorNormalize(%vec); + %aimPos = VectorAdd(%startPos, VectorScale(%vec, %percent * %length)); + + //now aim the client there + %client.aimAt(%aimPos, 2000); + + //schedule the next aim + if (%percent <= 0.9) + schedule($MissileLauncherAimTime / 10, 0, MissileDudeAimAtTarget, %client, %percent + 0.1); +} + +function MissileDudeFireMissile(%Client) +{ + %client.stop(); + %client.clearStep(); + %client.setEngageTarget(-1); + %client.setTargetObject($player.flyer, 300, "Missile"); + + %wav = "voice/derm2/gbl.woohoo.WAV"; + %audio = alxCreateSource( AudioChat, %wav ); + alxPlay( %audio ); + + + schedule(4000, 0, cinematicEvent, 7); +} + +function turnPlayerToObject(%obj) +{ + error("turningPlayerToObject: "@%obj); + %vec = VectorSub($player.player.position, %obj.position); + %angle = mATan( getWord(%vec, 0), getWord(%vec, 1) ); + %angle = %angle + 3.141529; + %newTransform = $player.player.position SPC "0 0 1" SPC %angle; + $player.player.setTransform(%newTransform); +} + +function cleanUpFlyer() +{ + $player.flyer.applyDamage($player.Flyer.getDataBlock().maxDamage); + $player.currentSound.delete(); + $player.flyer.pilot.schedule(400, drop); + $player.flyer.bombardier.schedule(1400, drop); + $missileLauncherDude.drop(); +} + +function training1Preloads() +{ + navGraph.preload("skins/base.lbioderm", true); + navGraph.preload("skins/Horde.lbioderm", false); + navGraph.preload("skins/sensor_pulse_large", true); + navGraph.preload("skins/base.hmale", true); + navGraph.preload("skins/beagle.hmale", false); + navGraph.preload("skins/base.mmale", true); + navGraph.preload("skins/beagle.mmale", false); + navGraph.preload("skins/base.lmale", false); + navGraph.preload("skins/swolf.mmale", false); + navGraph.preload("skins/beagle.lmale", false); +} + +function MissileLauncherImage::onFire(%data,%obj,%slot) +{ + %p = Parent::onFire(%data, %obj, %slot); + if(!game.gotMissile) + game.gotMissile = %p; +} + +function SinglePlayerGame::missionLoadDone(%game) +{ + Parent::missionLoadDone(%game); + training1Preloads(); +} + +function getTrainingPacifistMap() +{ + new ActionMap(TrainingPacifistMap); + // keys to rebind: + // jump, fire, suicide, jet + TrainingPacifistMap.blockBind( moveMap, jump ); + TrainingPacifistMap.blockBind( moveMap, mouseFire ); + TrainingPacifistMap.blockBind( moveMap, suicide ); + TrainingPacifistMap.blockBind( moveMap, mouseJet ); + + //TrainingPacifistMap.push(); +} + +// function Armor::onImpact(%data, %playerObject, %collidedObject, %vec, %vecLen) +// { +// error("ArmorOnImpact Called"); +// echo(%playerObject); +// if(%playerObject == $player.player && game.expectingImpact) { +// game.expectingImpact = false; +// messageClient($player, 'MsgTrainingHitGround', ""); +// } +// } + +function trainingPlayerHitGround() +{ + //see if we're about to hit the ground + //%mask = $TypeMasks::StaticShapeObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::TerrainObjectType; + %mask = $TypeMasks::StaticShapeObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::TerrainObjectType; + %rayStart = $Player.player.getWorldBoxCenter(); + %rayEnd = getWord(%rayStart, 0) SPC getWord(%rayStart, 1) SPC getWord(%rayStart, 2) - 20; + %foundObject = ContainerRayCast(%rayStart, %rayEnd, %mask, 0); + if (!%foundObject) + { + $Training1HitGround = schedule(1, $player.player, trainingPlayerHitGround); + return; + } + + //play the grunt... + if (Game.playGrunt) + { + Game.playGrunt = false; + playTargetAudio($player.target, 'avo.grunt', AudioClose3d, false); + } + + //make sure we hit within 8 to do the rest + if (VectorDist(getWords(%foundObject, 1, 3), %rayStart) > 8) + { + $Training1HitGround = schedule(1, $player.player, trainingPlayerHitGround); + return; + } + + $player.player.mountVehicle = true; + $player.player.setDamageFlash(0.5); + serverConnection.setBlackout(true, 600); + %heartBeatLengthMS = alxGetWaveLen("fx/misc/heartbeat.wav"); + schedule(1000, Game, alxPlay, HeartBeatSound, 0, 0, 0); + schedule(%heartBeatLengthMS, Game, trainingIntroFlightEnd); +} + +function serverCmdBuildClientTask(%client, %task, %team) +{ + // player shouldnt be able to use the voice commands to do anything +} + +//END TRAINING1 PACKAGE======================================================================= +}; + diff --git a/base/scripts/Training2.cs b/base/scripts/Training2.cs new file mode 100644 index 0000000..acf9b1d --- /dev/null +++ b/base/scripts/Training2.cs @@ -0,0 +1,1351 @@ +// don't want this executing when building graphs +if($OFFLINE_NAV_BUILD) + return; + +// script for training mission 2 +//------------------------------------------------------------- + + +//init +//------------------------------------------------------------- +error("Running Mission 2 Script"); + +activatePackage(Training2); +activatePackage(singlePlayerMissionAreaEnforce); + +$numberOfEnemies[1] = 6; +$numberOfEnemies[2] = 8; +$numberOfEnemies[3] = 11; + +//globals for base defense part +$numberOfWaves[1] = 3; +$numberOfWaves[2] = 4; +$numberOfWaves[3] = 5; +$numberInWave[1] = 2; +$numberInWave[2] = 3; +$numberInWave[3] = 5; + +$numberOfTeammates = 1; +$missionBotSkill[1] = 0.0; +$missionBotSkill[2] = 0.5; +$missionBotSkill[3] = 0.9; + +$victimSet[1] = "0 1 6 8"; +$victimSet[2] = "2 3 9"; +$victimSet[3] = "4 5 7 10"; + +// Team +$TeammateWarnom0 = "Dogkiller"; + +// mount plasma, missile launcher, targeting laser------------------- +addMessageCallback('MsgWeaponMount', playerMountWeapon); + +// touch with pack on +addMessageCallback('MsgItemCollisionHavePack', playerTouchItemHavePack); + +//repair initial pickup +addMessageCallback('MsgPackPickup', playerPickUp); + +//repair self +addMessageCallback('MsgRepairPackPlayerSelfRepair', playerRepairSelf); + +//repair nothing +addMessageCallback('MsgRepairPackNoTarget', noRepair); + +//repair unpowered +addMessageCallback('MsgRepairPackRepairingObj', ObjRepair); + +//enter inv station +addMessageCallback('msgEnterInvStation', StationInvEnter); + +// shield pack +//addMessageCallback('MsgShieldPackOn', playerTurnsOnShield); + + +// for many of the objectives we are going to periodically +// check the players distance vs some object +// you could do this much prettier but its going to be very specific +// so a cut and paste eyesore will be fine +game.sensor = nameToID("MissionGroup/Teams/team2/base1/initialPulseSensor"); +game.base1 = nameToID("MissionGroup/Teams/team2/base1/base"); +game.base1.threshold1 = 240; +game.base1.threshold2 = 190; +game.base2 = nameToID("MissionGroup/Teams/team2/base2/base"); +game.base2.threshold1 = 300; +game.base2.threshold2 = 250; +game.base3 = nameToID("MissionGroup/Teams/team2/base3/base"); +game.base3.threshold1 = 330; +game.base3.threshold2 = 130; + + + +package training2 { +//--Training2 package begin ----------------------------------------------------------------- +function toggleScoreScreen(%val) +{ + if ( %val ) + //error("No Score Screen in training......."); + messageClient($player, 0, $player.miscMsg[noScoreScreen]); +} + +function toggleCommanderMap(%val) +{ + if ( %val ) + messageClient($player, 0, $player.miscMsg[noCC]); +} + +function MP3Audio::play(%this) +{ + //too bad...no mp3 in training +} + +function countTurretsAllowed(%type) +{ + return $TeamDeployableMax[%type]; +} + +function FlipFlop::objectiveInit(%data, %flipflop) +{ +} + +function giveall() +{ + error("When the going gets tough...wussies like you start cheating!"); + messageClient($player, 0, "Cheating eh? What\'s next? Camping?"); +} + +function kobayashi_maru() +{ + $testCheats = true; + commandToServer('giveAll'); +} + +function ClientCmdSetHudMode(%mode, %type, %node) +{ + parent::ClientCmdSetHudMode(%mode, %type, %node); + + movemap.push(); // hopefully this works + TrainingMap.push(); + +} + +function AIEngageTask::assume(%task, %client) +{ + Parent::assume(%task, %client); + + if(%client.team != $playerTeam) + game.biodermAssume(%client); +} + +// get the ball rolling +function startCurrentMission(%game) +{ + + createText( $player); + setFlipFlopSkins(); + schedule(2000, %game, openingSpiel); + //$player.timeLimit = schedule(45000, $player.player, playerHurryUp1); + schedule(2000, %game, objectiveDistanceChecks); + + giveEscortTask($teammate0, $player); + $AIDisableChat = true; + + buildTraining2Team2ObjectiveQs(); + updateTrainingObjectiveHud(obj1); + + createTrainingSpecificBanList(); +} + +function SinglePlayerGame::gameOver(%game) +{ + $InvBanList[SinglePlayer, "TurretOutdoorDeployable"] = ""; + $InvBanList[SinglePlayer, "TurretIndoorDeployable"] = ""; + $InvBanList[SinglePlayer, "ElfBarrelPack"] = ""; + $InvBanList[SinglePlayer, "MortarBarrelPack"] = ""; + $InvBanList[SinglePlayer, "PlasmaBarrelPack"] = ""; + $InvBanList[SinglePlayer, "AABarrelPack"] = ""; + $InvBanList[SinglePlayer, "MissileBarrelPack"] = ""; + $InvBanList[SinglePlayer, "InventoryDeployable"] = ""; + + parent::GameOver(%game); +} + +function giveEscortTask(%bot, %player) +{ + %newObjective = new AIObjective(AIOEscortPlayer) + { + dataBlock = "AIObjectiveMarker"; + weightLevel1 = 10000; + description = "Escort Player"; + targetClientId = $player; + offense = true; + }; + //echo(%newObjective); + MissionCleanup.add(%newObjective); + $ObjectiveQ[$playerTeam].add(%newObjective); + $teammate0.DogKillerEscort = %newObjective; + + schedule(6000, %game, dogKillerSpeaks, 'ChatTaskCover'); +} + +function dogKillerSpeaks(%line) +{ + if(isObject($teammate0.player)) + serverCmdCannedChat($teammate0, %line, true); +} + +function getTeammateGlobals() +{ + $TeammateWarnom0 = "Dogkiller"; + $teammateskill0 = 0.7; + $teammateVoice0 = Male5; + $teammateEquipment0 = 2; + $teammateGender0 = Male; +} + +function SinglePlayerGame::AIChooseGameObjective(%game, %client) +{ + if(! %client.player) + return; + if (%client.team == $playerTeam) + AIChooseObjective(%client); + else + AIChooseObjective(%client, $T2ObjectiveQ[%client.SpecialObjectives]); +} + +function SinglePlayerGame::equip(%game, %player) +{ + //ya start with nothing...NOTHING! + %player.clearInventory(); + + for(%i =0; %i<$InventoryHudCount; %i++) + %player.client.setInventoryHudItem($InventoryHudData[%i, itemDataName], 0, 1); + + %set = %player.client.equipment; + //error("equping Player "@%player@" with set"@%set); + switch (%set) { + + case 0: + %player.setArmor("Medium"); + + %player.setInventory(ShieldPack, 1); + + %player.setInventory(RepairKit,1); + %player.setInventory(Grenade,6); + + %player.setInventory(Plasma, 1); + %player.setInventory(PlasmaAmmo, 25); + %player.setInventory(Disc,1); + %player.setInventory(DiscAmmo, 20); + %player.setInventory(ElfGun, 1); + %player.setInventory(MissileLauncher,1); + %player.setInventory(MissileLauncherAmmo, 10); + %player.setInventory(TargetingLaser, 1); + %player.weaponCount = 4; + %player.use("Disc"); + + case 1: + %player.setArmor("Light"); + + %player.setInventory(EnergyPack, 1); + + %player.setInventory(RepairKit,1); + %player.setInventory(Grenade,6); + + %player.setInventory(Chaingun, 1); + %player.setInventory(ChaingunAmmo, 25); + %player.setInventory(Disc,1); + %player.setInventory(DiscAmmo, 20); + %player.setInventory(ElfGun, 1); + %player.weaponCount = 3; + + %player.use("Disc"); + + case 2: + %player.setArmor("Medium"); + + %player.setInventory(AmmoPack, 1); + + %player.setInventory(RepairKit,2); + %player.setInventory(Grenade,6); + + %player.setInventory(Plasma, 1); + %player.setInventory(PlasmaAmmo, 50); + %player.setInventory(Disc,1); + %player.setInventory(DiscAmmo, 40); + %player.setInventory(ElfGun, 1); + %player.setInventory(MissileLauncher,1); + %player.setInventory(MissileLauncherAmmo, 10); + %player.setInventory(TargetingLaser, 1); + %player.weaponCount = 4; + %player.use("Disc"); + case 3: + //echo("Heavy Inside Attacker"); + + %player.setArmor("Heavy"); + + %player.setInventory(ShieldPack, 1); + + %player.setInventory(RepairKit,1); + %player.setInventory(Grenade,8); + %player.setInventory(Mine,3); + + %player.setInventory(Plasma, 1); + %player.setInventory(PlasmaAmmo, 50); + %player.setInventory(Disc,1); + %player.setInventory(DiscAmmo, 15); + %player.setInventory(Mortar, 1); + %player.setInventory(MortarAmmo, 10); + %player.setInventory(ShockLance,1); + %player.setInventory(Chaingun,1); + %player.setInventory(ChaingunAmmo,200); + %player.setInventory(TargetingLaser, 1); + + %player.use("Mortar"); + %player.weaponCount = 5; + } +} + +// Mission Part 2: Tower Defense-------------------------------------------- +//=========================================================================== + +function missionSpawnedAI(%client) +{ + %client.specialObjectives = 2; + + %wave = %client.memberOfWave; + if(!game.trainingspawnedWaveLine[%wave]) { + game.trainingspawnedWaveLine[%wave] = true; + + switch(%wave) { + case 1: + %turret = nameToId("MissionGroup/Teams/Team2/Base3/TurtleTurret"); + if(%turret.isDisabled || %turret.isDestroyed) + doText(T2_tipDefense02); + else doText(T2_tipDefense03); + case 2: + doText(T2_12); + case 3: + doText(T2_defense06); + checkForAllDead(); + } + } +} + +function pickEquipment() +{ + return 1; +} + +function playerMountWeapon(%tag, %text, %image, %player, %slot) +{ + if( game.firstTime++ < 2 || $pref::trainingDifficulty == 3) + return; // initial weapon mount doesnt count + + //this also turns off after a time so it doesnt show up in real combat + if( game.base1t1) + return; + + //echo("the problem is the image name: "@%image.getName()); + if(%image.getName() $= "PlasmaImage" && !game.msgPlas) { + game.msgPlas = true; + doText(T2_TipPlasma); + //echo("Plasma mount"); + } + if(%image.getName() $= "MissileLauncherImage" && !game.msgMisl) { + game.msgMisl = true; + doText(T2_TipMissile); + //echo("Missile mount"); + } + if(%image.getName() $= "ELFGunImage" && !game.msgElf) { + game.msgElf = true; + doText(T2_TipElf); + //echo("Elf mount"); + } + if(%image.getName() $= "TargetingLaserImage" && !game.msgLaze) { + game.msgLaze = true; + doText(T2_Tiptlaser); + } +} + +function Pack::onCollision(%data, %obj, %col) +{ + //error("ItemData::onCollision("@%data@", "@%obj@", "@%col@")"); + if($player.player.getMountedImage($backPackSlot)){ + messageClient($player, 'MsgItemCollisionHavePack', "", %data, %obj, %col); + } + parent::onCollision(%data,%obj,%col); + +} + +function FlipFlop::playerTouch(%data, %flipFlop, %player) +{ + + if(!Parent::playerTouch(%data, %flipflop, %player)) + return; + + if(!game.msgFlop && %flipFlop == nameToId("Base1/CommandSwitch")) { + game.msgFlop = true; + doText(T2_05b); + doText(T2_05c); + checkObjectives(); + updateTrainingObjectiveHud(obj4); + game.respawnPoint = 1; + } + + schedule(1000, game, checkObjectives); +} + +function shapeBase::throwpack(%this, %data) +{ + if(!game.selfDestructSpeak && %this == $player.player) { + game.selfDestructSpeak = true; + doText(T3_tipEquipment01); + } + parent::throwPack(%this, %data); +} + +function WeaponImage::onMount(%this,%obj,%slot) +{ + messageClient(%obj.client, 'MsgWeaponMount', "", %this, %obj, %slot); + parent::onMount(%this,%obj,%slot); +} + + +// I need to find out exactly what gets called on sensor destruction +function SensorLargePulse::onDestroyed(%dataBlock, %destroyedObj, %prevState) +{ + if(%destroyedObj.getName() $= "InitialPulseSensor" && !game.initialSensorMsg) { + game.initialSensorMsg = true; + doText(T2_02); + updateTrainingObjectiveHud(obj1); + } + Parent::onDestroyed(%data, %destroyObj, %prevState); +} + +function Generator::onDestroyed(%data, %destroyedObj, %prevState) +{ + if(%destroyedObj == nameToId("MissionGroup/Teams/Team2/Base1/Generator") && !game.msgGenDestroyed) + { + game.msgGenDestroyed = true; + doText(T2_TipGens01); + } + Parent::onDestroyed(%data, %destroyObj, %prevState); +} + +function TurretBaseLarge::onDestroyed(%dataBlock, %destroyedObj, %prevState) +{ + //error("Lg*Turret Disabled"); + if(!game.turretsDestroyed) { + doText(Any_Kudo03); + + game.turretsDestroyed = true; + updateTrainingObjectiveHud(obj1); + checkObjectives(); + } + Parent::onDestroyed(%data, %destroyObj, %prevState); +} + +function stationTrigger::onEnterTrigger(%data, %obj, %colObj) +{ + if(%colObj == $player.player) + messageClient(%colObj.client, 'msgEnterInvStation', ""); + + parent::onEnterTrigger(%data, %obj, %colObj); +} + +function createTrainingSpecificBanList() +{ + $InvBanList[SinglePlayer, "TurretOutdoorDeployable"] = 1; + $InvBanList[SinglePlayer, "TurretIndoorDeployable"] = 1; + $InvBanList[SinglePlayer, "ElfBarrelPack"] = 1; + $InvBanList[SinglePlayer, "MortarBarrelPack"] = 1; + $InvBanList[SinglePlayer, "PlasmaBarrelPack"] = 1; + $InvBanList[SinglePlayer, "AABarrelPack"] = 1; + $InvBanList[SinglePlayer, "MissileBarrelPack"] = 1; + $InvBanList[SinglePlayer, "InventoryDeployable"] = 1; +} + +//im putting all the callbacks into the package... just in case +//---------------------------------------------------------------- +function playerTouchItemHavePack(%this, %text, %data, %collided, %collider) +{ + //error("playerTouchItemHavePack("@%this@", "@%text@", "@%data@", "@%collided@", "@%collider@")"); + if(%collider == $player.player && !game.msghavePack && !game.tower3Secure) { + game.msghavePack = true; + doText(T2_TipDropit); + } +} +function RepairPack::onPickUp(%this, %obj, %player) +{ + //error("RepairPack::onPickUp("@%this@", "@%obj@", "@%player@")"); + if( !game.msgRepairPackPickUp && %player == $player.player) { + game.msgRepairPackPickUp = true; + //doText(T2_repairPack, 1500); + doText(T2_tipRepair01); + dotext(T2_TipRepair03); + } +} + +// function playerRepairSelf(%tag, %text) +// { +// if(!game.msgSelf){ +// game.msgSelf = true; +// dotext(T2_TipRepair03); +// } +// } + +function noRepair(%tag, %text) +{ + if(!game.msgRep){ + game.msgRep = true; + doText(T2_TipRepair02); + } +} +function ObjRepair(%tag, %string, %objName, %objID) +{ + if(%objID.getDatablock().classname !$= "generator" && + %objID.isPowered() && game.tower3Secure && !game.tipD2) { + game.tipD2 = true; + //doText(T2_tipDefense02); + } +} + +// function StationInvEnter(%a1, %a2) +// { +// //error("Inv Enter.........."); +// if(!game.msgEnterInv){ +// game.msgEnterInv = true; +// doText(T2_tipInventory); +// //doText(T2_tipDefense01); +// } +// } + +// function playerTurnsOnShield() +// { +// if(!game.msgShield) { +// game.msgShield++; +// doText(T2_TipShieldpack); +// } +// } + +function openingSpiel() +{ + doText(T2_01, 6000); + doText(T2_TipShieldpack); +} + +function SinglePlayerGame::onClientKilled(%game, %clVictim, %clKiller, %damageType, %implement) +{ + if(%damageType == $DamageType::sentryTurret && !game.sentryTurretKill && %clVictim.team != $playerTeam) + { + game.sentryTurretKill = true; + doText(T2_tipDefense05); + } + Parent::onClientKilled(%game, %clVictim, %clKiller, %damageType, %implement); +} + +function missionClientKilled(%clVictim, %killer) +{ + + if(%killer == $player && %clVictim.team == $enemyTeam) + schedule(3000, $player.player, adviseHealthKit); + + if(%killer == $teammate0 && %clVictim.team == $enemyTeam) + %random = getRandom(50); + if(%random == 1) { + schedule(500, game, dogKillerSpeaks, 'ChatBrag'); + } + else if(%random == 2) { + schedule(500, game, dogKillerSpeaks, 'ChatAwesome'); + } + + + %set = checkForSequenceSkillCompletion(%clvictim); + game.victimSetKilled[%set] = true; + + if(%set == 1 && nameToId("base1/CommandSwitch").team != $playerTeam) + if(%killer == $player) + schedule(800, $player.player, doText, Any_Jingo03); //no mercy, remember Ymir + + schedule(3000, game, checkObjectives); +} + +function adviseHealthKit() +{ + if($player.player.getdamageLevel() > 0.3 + && $player.player.getInventory(RepairKit) && !game.useHeath) { + game.useHealth = true; + doText(Any_HealthKit); + } +} + +function checkForSequenceSkillCompletion(%victim) +{ + %set = findVictimSet(%victim); + //how is everbody esle in the set doing + for(%i = 0; %i < getWordCount($victimSet[%set]); %i++){ + %enemy = getWord($victimSet[%set], %i); + if($enemy[%enemy] && $enemy[%enemy].player && $enemy[%enemy] != %victim) { + error("There is $Enemy"@%enemy@" still in set "@ %set); + return 0; + } + } + return %set; + +} + +function findVictimSet(%victim) +{ + for(%i = 1; %i <= 3; %i++) { + for(%word = 0; %word < getWordCount($victimSet[%i]); %word++) { + %num = getWord($victimSet[%i], %word); + if($enemy[%num] == %victim) { + error("Victim is member of victim set "@%i); + return %i; + } + } + } +} + + +function checkObjectives() +{ + if( !isSafe($player, 100) ) { + error("player is not safe"); + schedule(10000, game, checkObjectives); + return; //objectives cannot be met if enemies are near + } + + else if(nameToId("base1/CommandSwitch").team == $playerTeam && !game.train07) { + game.initialSensorMsg = true; //so you cant double back to get the sensorDestoyed msg + game.train07 = true; + schedule(5000, $player, doText, T2_07); + } + else if(game.turretsDestroyed && !game.train10 && game.victimSetKilled2) { + game.train10 = true; + tower2clean(); + } + else if(nameToId("base3/EasternFortification").team == $playerTeam && game.victimSetKilled3 + && !game.tower3Secure) { + game.tower3Secure = true; + + //Dogkiller can now pick up team objectives + AIClearObjective($teammate0.DogKillerEscort); + $teammate0.DogKillerEscort.weightLevel1 = 0; + schedule(6000, game, dogKillerSpeaks, 'ChatSelfDefendBase'); + + doText(T2_10); + doText(T2_10a); + doText(T2_11, 2000); + + // first get the gens up + if( ! nameToId("base3/EasternFortification").isPowered() ) + { + echo("switch is not powered"); + doText(t2_TipDefense02, 1000); + + } + + // now the inventory stuff + doText(T2_inventory01); + doText(T2_tipInventory01); + doText(T2_tipInventory03); + %timeToFirstWave = (2.1 - $pref::trainingDifficulty) * 10000; + schedule(%timeToFirstWave, game, spawnWave, 1); //beginTowerDefense + convertPassedEnemies(); + + updateTrainingObjectiveHud(obj2); + game.respawnPoint = 3; + } +} + +function missionWaveDestroyed() +{ + // there have been cases where this didnt seem to get called + // lets try again + convertPassedEnemies(); +} + + +function tower2clean() +{ + doText(ANY_Waypoint02); + %newWaypoint = "797.596 -652.19 162.924"; + schedule(2000, game, setWaypointAt, %newWaypoint, "Control Switch"); + updateTrainingObjectiveHud(obj3); + game.respawnPoint = 2; +} + +function convertPassedEnemies() +{ + %num = clientGroup.getCount(); + for(%i = 0; %i < %num; %i++) { + %client = clientGroup.getObject(%i); + if(%client.player) { + if(%client.specialObjectives != 2) { + %client.specialObjectives = 2; + // and to make sure the bot doesnt THINK what its + // currently doing is more important + aiUnassignClient(%client); + } + } + } +} + +function singlePlayerGame::pickTeamSpawn(%game, %client, %respawn) +{ + if(game.tower3Secure && %client.team == $enemyTeam) + Training2LaterPickTeamSpawn(%game, %client); + else parent::pickTeamSpawn(%game, %client, %respawn); +} + + +function Training2LaterPickTeamSpawn(%game, %client) +{ + %dp = game.pickRandomDropPoint(%client); + InitContainerRadiusSearch(%dp.position, 2, $TypeMasks::PlayerObjectType); + if( containerSearchNext() ) { + //error("Too close object, picking again?"); + if(game.DPRetries++ > 100) + return "0 0 300"; + else return game.pickTeamSpawn(%client); + } + + else { + game.DPRetries = 0; + return %dp.getTransform(); + } +} + +function singlePlayerGame::pickRandomDropPoint(%game, %client) +{ + //error("picking random point for "@%client); + %group = nameToID("MissionGroup/Teams/team2/DropPoints/Respawns"); + %num = %group.getCount(); + %random = getRandom(1,%num); + %dp = %group.getObject( %random ); + + return %dp; +} + + +function checkForAllDead() +{ + //none of this matters if you're dead + if(!$player.player) { + //error("You have no player!"); + schedule(5000, game, checkForAllDead); + return; + } + + + %num = clientGroup.getCount(); + for(%i = 0; %i < %num; %i++) + { + %client = ClientGroup.getObject(%i); + if(%client.player && %client.team == $enemyTeam) { + //error("Client " @ %client @ " is still alive."); + schedule(5000, game, checkForAllDead); + return; + } + } + //messageAll(0, "Debug: I dont think there are any enemies alive"); + doText(T2_13); + schedule(2000, game, missionComplete, $player.miscMsg[training2win]); +} + +function objectiveDistanceChecks() +{ + %playerPosition = $player.player.getTransform(); + if(!%playerPosition) { + schedule(5000, game, objectiveDistanceChecks); + return; + } + + + %sensorDist = vectorDist(%playerPosition, game.sensor.position); + if(%sensorDist < 250 && !game.sensorText) { + game.sensorText = true; + cancel($player.timeLimit); + doText(T2_01a, 3000); + doText(T2_01b); + doText(T2_tipScanned); + schedule(4000, game, updateTrainingObjectiveHud, obj5); + } + %base1distance = vectorDist( %playerPosition, game.base1.position ); + //error("debug distance: base1- "@%base1distance); + if(%base1distance < game.base1.threshold1 && !game.base1t1 ) + { + game.base1t1 = true; + doText(T2_03); + cancel($player.timeLimit); + } + if(%base1distance < game.base1.threshold2 && !game.base1t2 ) + { + game.base1t2 = true; + doText(T2_04); + doText(T2_04a); + doText(T2_05); + updateTrainingObjectiveHud(obj3); + } + + %base2distance = vectorDist( %playerPosition, game.base2.position ); + //error("debug distance: base2- "@%base2distance); + if(%base2distance < game.base2.threshold1 && !game.base2t1 && !game.turretsDestroyed) + { + game.base2t1 = true; + doText(T2_08); + updateTrainingObjectiveHud(obj6); + } +//error(game.turretsDestroyed); + if(%base2distance < game.base2.threshold2 && !game.base2t2 && !game.turretsDestroyed) + { + game.base2t2 = true; + doText(T2_TipTurret02); + + if( getPlayersOnTeam($playerTeam) < 2) + doText(T2_Cya01); + } + + %base3distance = vectorDist( %playerPosition, game.base3.position ); + //error("debug distance: base3- "@%base3distance); + if(%base3distance < game.base3.threshold1 && !game.base3t1) + { + game.base3t1 = true; + doText(T2_09a); + } + + if(%base3distance < game.base3.threshold2 && !game.base3t2) { + game.base3t2 = true; + doText(T2_09b); + if($player.player.getMountedImage($backpackSlot) $= "ShieldPackImage") + doText(T2_ShieldPack02); + } + + schedule(4000, game, objectiveDistanceChecks); +} + + +function buildTraining2Team2ObjectiveQs() +{ + $T2ObjectiveQ[0] = new AIObjectiveQ(); + MissionCleanup.add($T2ObjectiveQ[0]); + + $T2ObjectiveQ[1] = new AIObjectiveQ(); + MissionCleanup.add($T2ObjectiveQ[1]); + + $T2ObjectiveQ[2] = new AIObjectiveQ(); + MissionCleanup.add($T2ObjectiveQ[2]); + + + //////////////////objectiveQ 0-------------------------------------------------------------- + %newObjective = new AIObjective(AIORepairObject) { + datablock = "AIObjectiveMarker"; + position = "-163.766 126.029 103.831"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "Repair the initial SensorLargePulse"; + targetObject = "InitialPulseSensor"; + targetClientId = "-1"; + targetObjectId = nameToId("InitialPulseSensor"); + location = "-163.766 126.029 103.831"; + weightLevel1 = "4000"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "Light RepairPack"; + buyEquipmentSet = ""; + issuedByHuman = "0"; + issuingClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + }; + MissionCleanup.add(%newObjective); + $T2ObjectiveQ[0].add(%newObjective); + + %newObjective = new AIObjective(AIORepairObject) { + datablock = "AIObjectiveMarker"; + position = "-33.7195 -131.864 133.096"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "Repair the base1 Gen"; + targetObject = "generator"; + targetClientId = "-1"; + targetObjectId = nameToId("base1/generator"); + location = "-33.7195 -131.864 133.096"; + weightLevel1 = "3200"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = ""; + issuedByHuman = "0"; + issuingClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + }; + MissionCleanup.add(%newObjective); + $T2ObjectiveQ[0].add(%newObjective); + + %newObjective = new AIObjective(AIODefendLocation) { + datablock = "AIObjectiveMarker"; + position = "-33.7195 -131.864 133.096"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "Defend the base1 gen"; + targetObject = "generator"; + targetClientId = "-1"; + targetObjectId = nameToId("base1/generator"); + location = "-12 -131.864 133.096"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = ""; + buyEquipmentSet = ""; + issuedByHuman = "0"; + issuingClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + }; + MissionCleanup.add(%newObjective); + $T2ObjectiveQ[0].add(%newObjective); + + %newObjective = new AIObjective(AIODefendLocation) { + datablock = "AIObjectiveMarker"; + position = "-8.82616 -131.779 121.39"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "Defend the base 1 flipflop"; + targetObject = "CommandSwitch"; + targetClientId = "-1"; + targetObjectId = nameToId("CommandSwitch"); + location = "-8.82616 -131.779 121.39"; + weightLevel1 = "3900"; + weightLevel2 = "2000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = ""; + buyEquipmentSet = ""; + issuedByHuman = "0"; + issuingClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + }; + MissionCleanup.add(%newObjective); + $T2ObjectiveQ[0].add(%newObjective); + + %newObjective = new AIObjective(AIOTouchObject) { + datablock = "AIObjectiveMarker"; + position = "-8.82616 -131.779 121.39"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "Capture the base1 FlFlop"; + mode = "TouchFlipFlop"; + targetObject = "CommandSwitch"; + targetClientId = "-1"; + targetObjectId = nameToID("CommandSwitch"); + location = "-8.82616 -131.779 121.39"; + weightLevel1 = "3850"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + equipment = "light"; + desiredEquipment = ""; + buyEquipmentSet = ""; + issuedByHuman = "0"; + issuingClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + }; + MissionCleanup.add(%newObjective); + if($pref::trainingDifficulty != 1) + $T2ObjectiveQ[0].add(%newObjective); + + %newObjective = new AIObjective(AIORepairObject) { + datablock = "AIObjectiveMarker"; + position = "-11.5761 -131.662 172.204"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "Repair the Sensor Pulsation"; + targetObject = "Team2SensorMediumPulse1"; + targetClientId = "-1"; + targetObjectId = nameToId("Team2SensorMediumPulse1"); + location = "-11.5761 -131.662 172.204"; + weightLevel1 = "3100"; + weightLevel2 = "1000"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = ""; + issuedByHuman = "0"; + issuingClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + }; + MissionCleanup.add(%newObjective); + $T2ObjectiveQ[0].add(%newObjective); + + + ///////////////objectiveQ 1--------------------------------------------------------------- + %newObjective = new AIObjective(AIODefendLocation) { + datablock = "AIObjectiveMarker"; + position = "380.576 -301.298 101.843"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "Defend the Base2 Gen"; + targetObject = "generator"; + targetClientId = "-1"; + targetObjectId = nameToId("base2/generator"); + location = "380.576 -301.298 101.843"; + weightLevel1 = "3100"; + weightLevel2 = "1500"; + weightLevel3 = "1000"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = ""; + buyEquipmentSet = ""; + issuedByHuman = "0"; + issuingClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + }; + MissionCleanup.add(%newObjective); + $T2ObjectiveQ[1].add(%newObjective); + + ///////////////objectiveQ 2--------------------------------------------------------------- + %newObjective = new AIObjective(AIORepairObject) { + datablock = "AIObjectiveMarker"; + position = "787.866 -647.605 164.343"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "Repair gen3"; + targetObject = "Generator3"; + targetClientId = "-1"; + targetObjectId = nameToId("Generator3"); + location = "787.866 -647.605 164.343"; + weightLevel1 = "4000"; + weightLevel2 = ""; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = ""; + issuedByHuman = "0"; + issuingClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + }; + MissionCleanup.add(%newObjective); + $T2ObjectiveQ[2].add(%newObjective); + + %newObjective = new AIObjective(AIODefendLocation) { + datablock = "AIObjectiveMarker"; + position = "787.866 -647.605 164.343"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "Defend gen3"; + targetObject = "Generator3"; + targetClientId = "-1"; + targetObjectId = nameToId("Generator3"); + location = "787.866 -647.605 164.343"; + weightLevel1 = "3400"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = ""; + buyEquipmentSet = ""; + issuedByHuman = "0"; + issuingClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + }; + MissionCleanup.add(%newObjective); + $T2ObjectiveQ[2].add(%newObjective); + + %newObjective = new AIObjective(AIOAttackObject) { + datablock = "AIObjectiveMarker"; + position = "785.96 -659.402 138.593"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "Attack the Station Alpha"; + targetObject = "Inventory_Alpha"; + targetClientId = "-1"; + targetObjectId = nameToId("Inventory_Alpha"); + location = "785.96 -659.402 138.593"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = ""; + buyEquipmentSet = ""; + issuedByHuman = "0"; + issuingClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + }; + MissionCleanup.add(%newObjective); + $T2ObjectiveQ[2].add(%newObjective); + + %newObjective = new AIObjective(AIOAttackObject) { + datablock = "AIObjectiveMarker"; + position = "793.435 -647.88 138.499"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "Attack the Station Beta"; + targetObject = "Inventory_Beta"; + targetClientId = "-1"; + targetObjectId = nameToId("Inventory_Beta"); + location = "793.435 -647.88 138.499"; + weightLevel1 = "2900"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = ""; + buyEquipmentSet = ""; + issuedByHuman = "0"; + issuingClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + }; + MissionCleanup.add(%newObjective); + $T2ObjectiveQ[2].add(%newObjective); + + %newObjective = new AIObjective(AIORepairObject) { + datablock = "AIObjectiveMarker"; + position = "792.748 -656.036 143.914"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "Repair the SentryTurret"; + targetObject = "TurtleTurret"; + targetClientId = "-1"; + targetObjectId = nameToId("TurtleTurret"); + location = "792.748 -656.036 143.914"; + weightLevel1 = "3100"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = ""; + issuedByHuman = "0"; + issuingClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + }; + MissionCleanup.add(%newObjective); + $T2ObjectiveQ[2].add(%newObjective); + + %newObjective = new AIObjective(AIOTouchObject) { + datablock = "AIObjectiveMarker"; + position = "797.596 -652.19 164.558"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "Capture the Base3 FlipFlop"; + mode = "TouchFlipFlop"; + targetObject = "EasternFortification"; + targetClientId = "-1"; + targetObjectId = nameToId("EasternFortification"); + location = "797.596 -652.19 164.558"; + weightLevel1 = "3850"; + weightLevel2 = "3400"; + weightLevel3 = "3000"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "Light"; + buyEquipmentSet = ""; + issuedByHuman = "0"; + issuingClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + }; + MissionCleanup.add(%newObjective); + if($pref::trainingDifficulty != 1) + $T2ObjectiveQ[2].add(%newObjective); + + %newObjective = new AIObjective(AIOAttackObject) { + datablock = "AIObjectiveMarker"; + position = "787.866 -647.605 164.343"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "Attack the generatorLarge"; + targetObject = "Generator3"; + targetClientId = "-1"; + targetObjectId = nameToId("Generator3"); + location = "787.866 -647.605 164.343"; + weightLevel1 = "3100"; + weightLevel2 = "1600"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "1"; + defense = "0"; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + issuedByHuman = "0"; + issuingClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + }; + MissionCleanup.add(%newObjective); + $T2ObjectiveQ[2].add(%newObjective); + + %newObjective = new AIObjective(AIORepairObject) { + datablock = "AIObjectiveMarker"; + position = "785.96 -659.402 138.593"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "Repair the StationInventory"; + targetObject = "Inventory_Alpha"; + targetClientId = "-1"; + targetObjectId = nameToId("Inventory_Alpha"); + location = "785.96 -659.402 138.593"; + weightLevel1 = "3500"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuingClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + }; + MissionCleanup.add(%newObjective); + $T2ObjectiveQ[2].add(%newObjective); + + %newObjective = new AIObjective(AIORepairObject) { + datablock = "AIObjectiveMarker"; + position = "793.435 -647.88 138.499"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "Repair the StationInventory"; + targetObject = "Inventory_Beta"; + targetClientId = "-1"; + targetObjectId = nameToId("Inventory_Beta"); + location = "793.435 -647.88 138.499"; + weightLevel1 = "3500"; + weightLevel2 = "1400"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + issuedByHuman = "0"; + issuingClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + }; + MissionCleanup.add(%newObjective); + $T2ObjectiveQ[2].add(%newObjective); + + %newObjective = new AIObjective(AIODefendLocation) { + datablock = "AIObjectiveMarker"; + position = "791.311 -655.22 156.159"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "Defend the Base 3FlipFlop"; + targetObject = "EasternFortification"; + targetClientId = "-1"; + targetObjectId = nameToId("EasternFortification"); + //location = "797.596 -652.19 164.558"; + location = "791.311 -655.22 156.159"; + weightLevel1 = "3900"; + weightLevel2 = "2900"; + weightLevel3 = "300"; + weightLevel4 = "100"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuingClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + }; + MissionCleanup.add(%newObjective); + $T2ObjectiveQ[2].add(%newObjective); + + %newObjective = new AIObjective(AIORepairObject) { + datablock = "AIObjectiveMarker"; + position = "556.144 -411.448 133.224"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "Repair the SensorMediumPulse"; + targetObject = "MidwaySensor"; + targetClientId = "-1"; + targetObjectId = nameToId("MidwaySensor"); + location = "556.144 -411.448 133.224"; + weightLevel1 = "4000"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + equipment = "RepairPack"; + buyEquipmentSet = ""; + issuedByHuman = "0"; + issuedByClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + }; + MissionCleanup.add(%newObjective); + $T2ObjectiveQ[2].add(%newObjective); + + %newObjective = new AIObjective(AIODefendLocation) { + datablock = "AIObjectiveMarker"; + position = "785.96 -659.402 138.593"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + description = "Defend the Downstairs//Stations"; + targetObject = "Inventory_Alpha"; + targetClientId = "-1"; + targetObjectId = nameToId("Inventory_Alpha"); + location = "785.96 -659.402 138.593"; + weightLevel1 = "3700"; + weightLevel2 = "0"; + weightLevel3 = "0"; + weightLevel4 = "0"; + offense = "0"; + defense = "1"; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + issuedByHuman = "0"; + issuingClientId = "-1"; + forceClientId = "-1"; + locked = "0"; + }; + MissionCleanup.add(%newObjective); + $T2ObjectiveQ[2].add(%newObjective); + +} + + +//--Training2 package END ----------------------------------------------------------------- +}; + diff --git a/base/scripts/Training3.cs b/base/scripts/Training3.cs new file mode 100644 index 0000000..77d6980 --- /dev/null +++ b/base/scripts/Training3.cs @@ -0,0 +1,544 @@ +// don't want this executing when building graphs +if($OFFLINE_NAV_BUILD) + return; + +// script fror training mission 3 +//------------------------------------------------------------- + +//init +//------------------------------------------------------------- +echo("Running Mission 3 Script"); +activatePackage(Training3); + + +$numberOfEnemies[1] = 5; +$numberOfEnemies[2] = 7; +$numberOfEnemies[3] = 7; +$numberOfTeammates = 0; +$missionBotSkill[1] = 0.0; +$missionBotSkill[2] = 0.5; +$missionBotSkill[3] = 0.9; +$missionEnemyThreshold[1] = 0; +$missionEnemyThreshold[2] = 3; +$missionEnemyThreshold[3] = 7; + + +//the Scout is very important +$Shrike = nameToId("Ride"); +// activate the wings on the flyer +$Shrike.playThread($ActivateThread, "activate"); + +// for the distance checking +game.base = nameToId("Shield"); +game.baseLocation = game.base.getTransform(); +game.base.threshold = 400; +game.end = nameToId("PlayerDropPoint"); +game.endLocation = game.end.getTransform(); + +addMessageCallback('MsgWeaponMount', playerMountWeapon); + + + +package training3 { +//===============================================begin the training 3 package stuff==== + +function MP3Audio::play(%this) +{ + //too bad...no mp3 in training +} + +// force always scope for testing +function singlePlayerGame::onAIRespawn(%game, %client) +{ + if(! isObject("MissionCleanup/TeamDrops2")) { + //this is the snippet of script from default games that puts teamdrops + // into the mission cleanup group...slightly modified to suit our needs + %dropSet = new SimSet("TeamDrops2"); + MissionCleanup.add(%dropSet); + + %spawns = nameToID("MissionGroup/Teams/team2/TeamDrops"); + if(%spawns != -1) + { + %count = %spawns.getCount(); + for(%i = 0; %i < %count; %i++) + %dropSet.add(%spawns.getObject(%i)); + } + } + + + // error("Forcing AI Scope!!!!!!!!!!!!!"); + // %client.player.scopeToClient($player); + + parent:: onAIRespawn(%game, %client); +} + +function getTeammateGlobals() +{ + echo("You have no teammates in this mission"); +} + +function toggleScoreScreen(%val) +{ + if ( %val ) + //error("No Score Screen in training......."); + messageClient($player, 0, $player.miscMsg[noScoreScreen]); +} + +function toggleCommanderMap(%val) +{ + if ( %val ) + messageClient($player, 0, $player.miscMsg[noCC]); +} + +function giveall() +{ + error("When the going gets tough...wussies like you start cheating!"); + messageClient($player, 0, "Cheating eh? What\'s next? Camping?"); +} + +function kobayashi_maru() +{ + $testcheats = true; + commandToServer('giveAll'); +} + +function AIEngageTask::assume(%task, %client) +{ + Parent::assume(%task, %client); + + if(%client.team != $playerTeam) + game.biodermAssume(%client); +} + +function countTurretsAllowed(%type) +{ + return $TeamDeployableMax[%type]; +} + + +function FlipFlop::objectiveInit(%data, %flipflop) +{ +} + +function ClientCmdSetHudMode(%mode, %type, %node) +{ + parent::ClientCmdSetHudMode(%mode, %type, %node); + TrainingMap.push(); +} + + +// get the ball rolling +function startCurrentMission(%game) +{ + + //just in case + setFlipFlopSkins(); + schedule(5000, %game, opening); + schedule(30000, %game, objectiveDistanceChecks); + updateTrainingObjectiveHud(obj1); + + if($pref::trainingDifficulty == 1) { + nameToId(BackEnterSentry).hide(true); + freeTarget(nameToId(BackEnterSentry).getTarget()); + } +} + +function opening() +{ + if(game.vehicleMount) + return; + doText(T3_01); + //doText(T3_02); + doText(T3_cloaking); + doText(T3_tipCloaking01); + doText(T3_tipCloaking02); +} + +function SinglePlayerGame::equip(%game, %player) +{ + //ya start with nothing...NOTHING! + %player.clearInventory(); + + for(%i =0; %i<$InventoryHudCount; %i++) + %player.client.setInventoryHudItem($InventoryHudData[%i, itemDataName], 0, 1); + + //echo("Light Assassin Config"); + + %player.setArmor("Light"); + + %player.setInventory(CloakingPack, 1); + + %player.setInventory(RepairKit,1); + %player.setInventory(FlashGrenade,5); + %player.setInventory(Mine,3); + + %player.setInventory(Plasma, 1); + %player.setInventory(PlasmaAmmo, 20); + %player.setInventory(Disc,1); + %player.setInventory(DiscAmmo, 15); + %player.setInventory(TargetingLaser, 1); + %player.setInventory(ShockLance,1); + + %player.use("Disc"); + + %player.weaponCount = 3; +} + +// ============================================================================ +function singlePlayerGame::onAIKilled(%game, %clVictim, %clAttacker, %damageType, %implement) +{ + %teamCount = getPlayersOnTeam(%clVictim.team); + //echo("Team count:" SPC %teamCount); + %maintNum = $missionEnemyThreshold[$pref::trainingDifficulty]; + //echo("Maintain:" SPC %maintNum); + + %clVictim.useSpawnSphere = true; + + // this will respawn the AI if + if( %teamCount < %maintNum ) + DefaultGame::onAIKilled(%game, %clVictim, %clAttacker, %damageType, %implement); + +} + +function singleplayerGame::pickTeamSpawn(%game, %client, %respawn) +{ + if(%client.useSpawnSphere) + DefaultGame::pickTeamSpawn(%game, %client.team); + else + parent::pickTeamSpawn(%game, %client, %respawn); +} + + + + +function clientCmdVehicleMount() +{ + if(game.vehicleMount++ == 1) { + doText(Any_Waypoint01, 2000); + //doText(Any_Waypoint03, 4000); + doText(T3_tipPiloting01); + doText(T3_02); + doText(T3_05); + schedule(4000, game, setWaypointAt, game.baseLocation, "Icefell Ridge Base"); + updateTrainingObjectiveHud(obj2); + + game.pilotingTips = schedule(60000, game, PilotingTips); + } + if(game.phase == 4) { + setWaypointAt(game.endLocation, "Extraction Point"); + updateTrainingObjectiveHud(obj3); + doText(T3_11); + doText(T3_12); + game.phase = 5; + + if(!nameToId(AATurretGen).isDisabled()) + doText(t3_12a); + } +} + +function RepairPack::onCollision(%this,%obj,%col) +{ + if($player.player.getInventory(CloakingPack) && $player.player.getDamageLevel() > 0.2 + && !game.msgtipEquip && %col == $player.player) { + game.msgTipEquip = true; + doText(T3_tipEquipment02); + } + + parent::onCollision(%this,%obj,%col); +} + + +// 86 the vehicle removal on dying +function vehicleAbandonTimeOut(%vehicle) +{ +// dont mess it up +} + +function playerMountWeapon(%tag, %text, %image, %player, %slot) +{ + if( game.firstTime++ < 2) + return; // initial weapon mount doesnt count + + if(%image.getName() $= "ShockLanceImage" && !game.msgShock) { + game.msgShock = true; + //doText(T3_TipShockLance); + } +} + +function FlipFlop::playerTouch(%data, %flipFlop, %player ) +{ + + //echo("singlePlayer::playerTouchFlipFlop"); + %client = %player.client; + %flipTeam = %flipflop.team; + + if(%flipTeam == %client.team) + return false; + + nameToId(Shield).delete(); + + //just the sound + messageAll( 'MsgClaimFlipFlop', '~wfx/misc/flipflop_taken.wav', %client.name, Game.cleanWord( %flipflop.name ), $TeamName[%client.team] ); + + if(%player == $player.player) + schedule( 1500, game, flipFlopFlipped); + + objectiveDistanceChecks(); + + //change the skin on the switch to claiming team's logo + setTargetSkin(%flipflop.getTarget(), $teamSkin[%player.team]); + setTargetSensorGroup(%flipflop.getTarget(), %player.team); + + // convert the resources associated with the flipflop + Game.claimFlipflopResources(%flipflop, %client.team); + + Game.AIplayerCaptureFlipFlop(%player, %flipflop); + + return true; +} + +function scoutFlyer::onRemove(%this, %obj) +{ + //error("scoutFlyer::onRemove("@ %obj@") called"); + if(%obj == $Shrike) { + // we dont want the player to die hitting the ground + cancel(game.pilotingTips); + $player.player.invincible = true; + missionFailed($player.miscMsg[training3shrikeLoss]); + } +} + +function WeaponImage::onMount(%this,%obj,%slot) +{ + messageClient(%obj.client, 'MsgWeaponMount', "", %this, %obj, %slot); + Parent::onMount(%this,%obj,%slot); +} + +function GeneratorLarge::onDestroyed(%dataBlock, %destroyedObj, %prevState) +{ + if(%destroyedObj == nameToId("PrisonGen") && !game.msgGenDestroyed) + { + game.msgGenDestroyed = true; + doText(Any_ObjComplete01); + updateTrainingObjectiveHud(obj6); + } + else if(%destroyedObj == nameToId(AATurretGen)) + $player.AAGenWaypoint.delete(); + +} + +// If the forcefield is shot we play this little wav file +function ProjectileData::onCollision(%data, %projectile, %targetObject, %modifier, %position, %normal) +{ + //error("ProjectileData::onCollision("@%data@", "@%projectile@", "@%targetObject@", "@%modifier@", "@%position@", "@%normal@")"); + parent::onCollision(%data, %projectile, %targetObject, %modifier, %position, %normal); + + if(game.msgGenDestroyed) + return; + else if(%targetObject.getDataBlock().getName() $= nameToId(Shield).dataBlock) { + //error("someone shot the force field"); + if(%projectile.sourceObject == $player.player){ + //error("it was you f00"); + if(!game.msgMustDestroyGen) { + game.msgMustDestroyGen = true; + doText(T3_07b); + } + } + } +} + + +function addTraining3Waypoints() +{ + //do the hud updating also + $player.currentWaypoint.delete(); + updateTrainingObjectiveHud(obj5); + + %Training3WaypointsGroup = new simGroup(Training3Waypoints); + MissionCleanup.add(%Training3WaypointsGroup); + + %waypoint = new WayPoint() { + position = nameToId(FF).position; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Control Point"; + team = "0"; + locked = "true"; + }; + %Training3WaypointsGroup.add(%waypoint); + + %waypoint = new WayPoint() { + position = nameToId(BaseGen).getWorldBoxCenter(); + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Main Base Power"; + team = "0"; + locked = "true"; + }; + %Training3WaypointsGroup.add(%waypoint); + + %waypoint = new WayPoint() { + position = nameToId(sensorNetGen).getWorldBoxCenter(); + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Sensor Power"; + team = "0"; + locked = "true"; + }; + %Training3WaypointsGroup.add(%waypoint); + + %waypoint = new WayPoint() { + position = nameToId(AATurretGen).getWorldBoxCenter(); + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "AntiAircraft Turret Power"; + team = "0"; + locked = "true"; + }; + //%Training3WaypointsGroup.add(%waypoint); + $player.AAGenWaypoint = %waypoint; + + %waypoint = new WayPoint() { + position = nameToId(prisonGen).getWorldBoxCenter(); + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Forcefield Power"; + team = "0"; + locked = "true"; + }; + %Training3WaypointsGroup.add(%waypoint); +} + +function RandomPilotingTips() +{ + // this is unused as testers claimed it sounded 'disjointed and random' + + if(pilotingTips()) + game.pilotingTips = schedule(20000, $player.player, RandomPilotingTips); +} + +function pilotingTips() +{ + %num = 2; + if(game.Training3tips == %num) + return false; + %tip = getRandom(1, %num); + if( game.training3TipUsed[%tip] ) + return true; + switch(%tip){ + case 1: + doText(T3_tipfreelook); + case 2: + doText(T3_tipPiloting04); +// case 3: +// doText(T3_tipPiloting02); +// case 4: +// doText(T3_tipUnderwater01); + } + game.training3Tips++; + game.training3TipUsed[%tip] = true; + return true; +} + + +//misc +//------------------------------------------------------------- + +function objectiveDistanceChecks() +{ + %playerPos = $player.player.getTransform(); + if(!%playerPos) { + schedule(2000, game, objectiveDistanceChecks); + return; + } + + %cont = true; + %basedistance = vectorDist( %playerPos, game.baseLocation ); + + if(game.phase == 0 && %basedistance < game.base.threshold ) { + doText(T3_06, 4000); + doText(T3_tipCloaking03); + doText(T3_07); + game.phase = 1; + %cont = false; + cancel(game.pilotingTips); + addTraining3Waypoints(); + game.respawnPoint = 1; + + } + if(game.phase == 5 && vectorDist(%playerPos, game.baseLocation) > 1000 ) + { + game.phase = 6; + serverConnection.setBlackout(true, 3000); + schedule(3000, game, finishMission); + } + + if(%cont) + schedule(2000, game, objectiveDistanceChecks); +} + +function finishMission() +{ + $shrike.setFrozenState(true); + nameToId(AATurretGen).setDamageState(Disabled); //hack! cheating! + doText(T3_13); + //messageAll(0, "Nya, nya, nyanyanay...this missions oh-ohover!"); + missionComplete($player.miscMsg[training3win]); + %cont = false; +} + + +function flipFlopFlipped() +{ + //error("flip flop flipped"); + if(!game.flipFlopped) { + game.flipFlopped = true; + + // if we need a message modify this. + //messageTeam( %client.team, 'MsgClaimFlipFlop', '\c2%1 claimed %2 for %3.~wfx/misc/flipflop_taken.wav', %client.name, Game.cleanWord( %flipflop.name ), $TeamName[%client.team] ); + + doText(T3_09, 8000); + doText(T3_10); + game.phase = 4; + + if(!nameToId(AATurretGen).isDisabled()) + doText(t3_09a); + + // new waypoint at the shrike + setWaypointAt($shrike.getTransform(), "Shrike"); + updateTrainingObjectiveHud(obj4); + + //get rid of the other waypoints + nameToId(Training3Waypoints).delete(); + } +} + +// Mission area is pointless this time out +function SinglePlayerGame::leaveMissionArea(%game, %player) +{ +} +function SinglePlayerGame::enterMissionArea(%game, %player) +{ +} + +//===============================================END the training 3 package stuff==== +}; + + + + diff --git a/base/scripts/Training4.cs b/base/scripts/Training4.cs new file mode 100644 index 0000000..a73617a --- /dev/null +++ b/base/scripts/Training4.cs @@ -0,0 +1,976 @@ +// don't want this executing when building graphs +if($OFFLINE_NAV_BUILD) + return; + +echo("Running Mission 4 Script"); +activatePackage(Training4); +activatePackage(singlePlayerMissionAreaEnforce); + + +//special sound +datablock AudioProfile(HudFlashSound) +{ + filename = "gui/buttonover.wav"; + description = AudioDefault3d; + preload = true; +}; + +$numberOfEnemies[1] = 0; +$numberOfEnemies[2] = 0; +$numberOfEnemies[3] = 0; + +// Mission Variables +$numberOfWaves[1] = 3; +$numberOfWaves[2] = 5; +$numberOfWaves[3] = 7; + +$numberInWave[1] = 3; +$numberInWave[2] = 5; +$numberInWave[3] = 7; + +$delayBeforeFirstWave[1] = 300000; +$delayBeforeFirstWave[2] = 200000; +$delayBeforeFirstWave[3] = 20000; + +$missionBotSkill[1] = 0.0; +$missionBotSkill[2] = 0.5; +$missionBotSkill[3] = 0.8; + +$numberOfTeammates = 2; + +package training4 { +//===============================================begin the training 4 package stuff==== +function getTeammateGlobals() +{ + $TeammateWarnom0 = "Firecrow"; + $teammateskill0 = 0.5; + $teammateVoice0 = Fem3; + $teammateEquipment0 = 0; + $teammateGender0 = Female; + + $TeammateWarnom1 = "Proteus"; + $teammateSkill1 = 0.5; + $teammateVoice1 = Male4; + $teammateEquipment1 = 0; + $teammateGender1 = Male; +} + + +function MP3Audio::play(%this) +{ + //too bad...no mp3 in training +} + + +function ClientCmdSetHudMode(%mode, %type, %node) +{ + parent::ClientCmdSetHudMode(%mode, %type, %node); + TrainingMap.push(); +} + +// get the ball rolling +function startCurrentMission(%game) +{ + game.equip($player.player); + + if($pref::TrainingDifficulty == 3) + updateTrainingObjectiveHud(obj10); + else{ + schedule(5000, game, repairSensorTower); + updateTrainingObjectiveHud(obj1); + } + $player.beginSpawn = schedule($delayBeforeFirstWave[$pref::TrainingDifficulty], %game, spawnWave, 1); + $AIDisableChat = true; + game.missionTime = getSimTime(); + activateskillSpecificTrainingSettings(); +} + +function activateskillSpecificTrainingSettings() +{ + %skill = $pref::TrainingDifficulty; + + // all + nameToId("Team1SensorLargePulse1").setDamageLevel(1.5); + nameToId("Team1SensorLargePulse2").setDamageLevel(1.5); + + //skill 2 & 3 : + //no forcefield, no upstairs Inventory deploy, aaturret(in the mis file) + if(%skill > 1) { + + %invDepObj = findObjByDescription("Deploy Upstairs Station", 1); + removeDescribedObj(%invDepObj, 1); + } + // skill 3: no turret, no destroy turret or upstairs gen objectives + if(%skill > 2) { + nameToId(Team1TurretBaseLarge1).hide(true); + nameToId(GenForceField).delete(); + } +} + +function countTurretsAllowed(%type) +{ + return $TeamDeployableMax[%type]; +} + +function giveall() +{ + error("When the going gets tough...wussies like you start cheating!"); + messageClient($player, 0, "Cheating eh? What\'s next? Camping?"); +} + +function kobayashi_maru() +{ + $testcheats = true; + commandToServer('giveAll'); +} + + +function pickEquipment() +{ + return getRandom(10); +} + +function AIEngageTask::assume(%task, %client) +{ + Parent::assume(%task, %client); + + if(%client.team != $playerTeam) + game.biodermAssume(%client); +} + +function toggleScoreScreen(%val) +{ + if ( %val ) + messageClient($player, 0, $player.miscMsg[noScoreScreen]); +} + +function singlePlayerGame::pickTeamSpawn(%game, %client) +{ + if(%client.team == $player.team) + return parent::pickTeamSpawn(%game, %client); + %dp = game.pickRandomDropPoint(%client); + InitContainerRadiusSearch(%dp.position, 2, $TypeMasks::PlayerObjectType); + if( containerSearchNext() ) { + //echo("Too close object, picking again?"); + if(game.DPRetries++ > 100) + return "0 0 300"; + else return game.pickTeamSpawn(%client); + } + + else { + game.DPRetries = 0; + return %dp.getTransform(); + } +} + +function singlePlayerGame::pickRandomDropPoint(%game, %client) +{ + error("picking random point for "@%client); + %group = nameToID("MissionGroup/Teams/team" @ %client.team @ "/DropPoints"); + %num = %group.getCount(); + %random = getRandom(1,%num); + %dp = %group.getObject( %random ); + + return %dp; +} + +function spawnSinglePlayer() +{ + $player.lives--; + + %spawn = DefaultGame::pickTeamSpawn(game, $playerTeam); + game.createPlayer($player, %spawn); + $player.setControlObject($player.player); + //messageClient($player, 0, "Respawns Remaining: "@$player.lives); + game.equip($player.player, 0); +} + +function Generator::onDisabled(%data, %obj, %prevState) +{ + Parent::onDisabled(%data, %obj, %prevState); + if(%obj == nameToId(BaseGen)) //its our primary gen + { + doText(T4_Warning02); + game.MissionCounter = schedule(60000, 0, MissionFailedTimer); + setWaypointAt(%obj.position, "Repair Generator"); + clockHud.setTime(1); + updateTrainingObjectiveHud(obj5); + } + else if($pref::trainingDifficulty < 2) + { + if (getRandom() < 0.5 ) + doText(T4_ForceFields01); + else doText(T4_FFGenDown01); + } + +} + +function Generator::onEnabled(%data, %obj, %prevState) +{ + Parent::onEnabled(%data, %obj, %prevState); + //error("Gen up somewhere"); + if(%obj == nameToId(BaseGen)) { + cancel(game.MissionCounter); + objectiveHud.trainingTimer.setVisible(false); + updateTrainingObjectiveHud(obj10); + $player.currentWaypoint.delete(); + cancel($player.player.trainingTimerHide); + doText(T4_GenUp); + checkForWin(); + //error("its the main gen"); + + //restore the clock + %time = getSimTime() - game.missionTime; + %dif = %time /60000; + clockHud.setTime(%dif * -1); + } +} + + + +// mortar mount +function playerMountWeapon(%tag, %text, %image, %player, %slot) +{ + if( game.firstTime++ < 2) + return; // initial weapon mount doesnt count + if(%image.getName() $= "MortarImage" && !game.msgMortar) { + game.msgMortar = true; + doText(T4_TipMortar); + } +} + +// station use +function StationInvEnter(%a1, %a2, %data, %obj, %colObj) +{ + if(%colObj != $player.player) + return; + //clearQueue(); + //if(!game.blowoff) + //blowoff(); + if(game.msgEnterInv++ == 1){ + doText(T4_tipDefense05); + } +} + +function stationTrigger::onEnterTrigger(%data, %obj, %colObj) +{ + Parent::onEnterTrigger(%data, %obj, %colObj); + messageClient(%colObj.client, 'msgEnterInvStation', "", %data, %obj, %colObj); +} + + +function serverCmdBuildClientTask(%client, %task, %team) +{ + parent::serverCmdBuildClientTask(%client, %task, %team); + error("serverCmdBuildClientTask(" @%client@", "@%task@", "@%team@")"); + + if($pref::trainingDifficulty > 2) + return; + + //hack: we have to get %objective from the parent function + // this seems to work + %objective = %client.currentAIObjective; + error(%client.currentAIObjective SPC %objective.getName()); + + if ((%objective.getName() $= "AIORepairObject") && + (%objective.targetObjectId.getDataBlock().getName() $= "SensorLargePulse")) { + + //error("repair order issued and forced"); + // force the ai + %objective.weightLevel1 = 10000; + + if(!game.issueRepairOrder && game.expectingRepairOrder) { + game.issueRepairOrder = true; + doText(Any_good, 2000); + cameraSpiel(); + } + } +} + +function CommanderMapGui::onWake(%this) +{ + + parent::onWake(%this); + if(game.firstSpawn) + return; + //error("Waking the command map."); + messageClient($player, 'commandMapWake', ""); +} + +function CommanderTree::onCategoryOpen(%this, %category, %open) +{ + //error("commander tree button pressed"); + parent::onCategoryOpen(%this, %category, %open); + + if(%category $= "Support" && game.ExpectiongSupportButton) { + game.ExpectiongSupportButton = false; + doText(ANY_check01); + doText(T4_03i, 1000); + doText(T4_03j); + } + if(%category $= "Tactical" && game.ExpectiongTacticalButton) { + game.ExpectiongTacticalButton = false; + doText(ANY_check02); + messageClient($player, 0, "Click on the control box after the turrets name to control the turret."); + game.CheckingTurretControl = true; + } +} + +// control turret/camera +//------------------------------------------------------------------------------ +function serverCmdControlObject(%client, %targetId) +{ + parent::serverCmdControlObject(%client, %targetId); + + if(game.firstSpawn) + return; + + error("Training 4 serverCmdControlObject"); + %obj = getTargetObject(%targetId); + echo("what do we get back from the parent funtion ? "@%obj); + %objType = %obj.getDataBlock().getName(); + echo("it is a "@%objType); + + if(game.CheckingTurretControl) { + if(%objType $= "TurretBaseLarge") { + game.CheckingTurretControl = false; + schedule(3000, game, turretSpielEnd); + //error("Debug: You are controlling a turret f00!"); + } + } +// if(game.CheckingCameraControl) { +// if(%objType $= "TurretDeployedCamera") { +// game.CheckingCameraControl = false; +// schedule(3000, $player.player, cameraSpielEnd); +// //error("Debug: You are controlling a camera, w00t!"); +// } +// } +} + +function singlePlayerGame::sensorOnRepaired(%obj, %objName) +{ + //error("singlePlayerGame::sensorOnRepaired called"); + Parent::sensorOnRepaired(%obj, %objName); + if(game.expectingTowerRepair && !game.playedOpening && !game.firstSpawn) + openingSpiel(); +} + +function cameraSpiel() +{ + if(game.firstSpawn) + return; + + doText(T4_tipCamera01); + updateTrainingObjectiveHud(obj3); + $player.player.setInventory(CameraGrenade , 8); // cheating just in case the player is a dufas + game.CheckingCameraControl = true; + +} + +function CameraGrenadeThrown::onThrow(%this, %camGren) +{ + Parent::onThrow(%this, %camGren); + if(game.CheckingCameraControl && !game.firstSpawn) { + messageClient($player, 0, "Go back to the command map to access camera view."); + game.CheckingCameraControl = false; + game.wakeExpectingCamera = true; + updateTrainingObjectiveHud(obj2); + doText(T4_tipCamera02); + } +} + +//like mission 1 and 2 there is a spiel at the begining +function repairSensorTower() +{ + if(game.firstSpawn) + return; + + setWaypointAt(nameToId(Team1SensorLargePulse2).position, "Repair Sensor"); + game.expectingTowerRepair = true; + doText(T4_01); + doText(T4_01b); +} + +function openingSpiel() +{ + if(game.firstSpawn) + return; + + $player.currentWaypoint.delete(); + updateTrainingObjectiveHud(obj7); + + game.playedOpening = true; + //doText(T4_01c); + doText(T4_02a); + doText(T4_03); + doText(T4_02); + //doText(T4_02b); + doText(T4_03a); +} + +function ThreeAEval() +{ + if(game.firstSpawn) + return; + + game.wakeExpectingSquadOrder = true; + updateTrainingObjectiveHud(obj2); +} + +function missionSpawnedAI() +{ + if(!game.firstSpawn) { + game.firstspawn = true; + doText(ANY_warning05); + doText(ANY_warning03); // does a playgui check + + //updateTrainingObjectiveHud(obj5); + } +} + +function singlePlayerPlayGuiCheck() +{ + if(CommanderMapGui.open) + CommanderMapGui.close(); + + updateTrainingObjectiveHud(obj10); +} + + +function missionWaveDestroyed(%wave) +{ + if(%wave == 1) { + doText(T4_06); + doText(T4_tipDefense02); + } + else if(%wave == 2) + doText(T4_08); + + else if( %wave == $numberOfWaves[$pref::TrainingDifficulty] ) { + //MessageAll(0, "The last wave is destroyed. This mission would end."); + game.allEnemiesKilled = true; + checkForWin(); + } +} + +function checkForWin() +{ + if(game.allEnemiesKilled && nameToId(BaseGen).isEnabled()) { + clearQueue(); + doText(T4_10); + doText(T4_11); + schedule(4000, game, missionComplete, $player.miscMsg[training4win]); + } +} + + +function cameraSpielEnd() +{ + if(game.firstSpawn) + return; + + doText(T4_tipCamera03); + doText(T4_tipCamera04, 2000); + doText(T4_controlTurret); + game.CheckingTurretControl = true; + game.wakeExpectingTurret = true; + updateTrainingObjectiveHud(obj4); +} + +function turretSpielEnd() +{ + if(game.firstSpawn) + return; + + doText(T4_tipObjects); + doText(T4_CCend, 4000); + + doText(T4_TipGenerator01, 2000); + doText(T4_TipGenerator01a); + doText(T4_TipGenerator01b); + doText(T4_TipGenerator02, 2000); + + + doText(T4_tipDefense01); +// doText(T4_tipDefense06); +// doText(T4_tipDefense07); +// doText(T4_tipDefense08); +// doText(T4_tipDefense09); + updateTrainingObjectiveHud(obj9); + //game.blowOff = true; //feel free to use the inventory stations +} + + +// turret deployment advice and messages +function singlePlayerFailDeploy(%tag, %message) +{ + %text = detag(%message); + %phrase = getWord(%text, 0) SPC getWord(%text, 1); + //echo(%phrase); + + switch$(%phrase) { + case "\c2Item must": + if(!game.tipDep1) { + game.tipDep1 = true; + doText(T4_tipDeploy01); + } + case "\c2You cannot": + if(!game.tipDep2) { + game.tipDep2 = true; + doText(T4_tipDeploy02); + } + case "\c2Interference from": + if(!game.tipDepT) { + game.tipDepT = true; + doText(T4_tipDepTurret); + } + } +} + + +// not really a callback but this prolly goes here +function cloakingUnitAdded() +{ + if(game.addedCloak++ < 2) { + doText(T4_TipDefense03); + } +} + +function RepairingObj(%tag, %text, %name, %obj) +{ + if(%obj.getDataBlock().getName() $= "SensorLargePulse" && !game.repairingSensor) { + game.repairingSensor = true; + schedule(2000, $player.player, doText, T4_01c); + } +} + +// equipment ======================================================================= +//=================================================================================== + +//there are a plethora of configs in this mission + +function SinglePlayerGame::equip(%game, %player, %set) +{ + if(!isObject(%player)) + return; + + //ya start with nothing...NOTHING! + %player.clearInventory(); + + for(%i =0; %i<$InventoryHudCount; %i++) + %player.client.setInventoryHudItem($InventoryHudData[%i, itemDataName], 0, 1); + + //error("equping Player "@%player@" with set"@%set); + switch (%set) + { + case 0: + //echo("player Heavy"); + + %player.setArmor("Heavy"); + + %player.setInventory(RepairPack, 1); + + %player.setInventory(RepairKit,1); + %player.setInventory(CameraGrenade,8); + %player.setInventory(Mine,3); + + %player.setInventory(Chaingun, 1); + %player.setInventory(ChaingunAmmo, 200); + %player.setInventory(Disc,1); + %player.setInventory(DiscAmmo, 15); + %player.setInventory(Mortar, 1); + %player.setInventory(MortarAmmo, 10); + %player.setInventory(Blaster,1); + %player.setInventory(GrenadeLauncher,1); + %player.setInventory(GrenadeLauncherAmmo,15); + %player.setInventory(TargetingLaser, 1); + + %player.use("Disc"); + %player.weaponCount = 5; + + case 1: + //echo("Light Skirmisher"); + + %player.setArmor("Light"); + + %player.setInventory(EnergyPack, 1); + + %player.setInventory(RepairKit,1); + %player.setInventory(ConcussionGrenade,5); + + %player.setInventory(Blaster,1); + %player.setInventory(Disc,1); + %player.setInventory(DiscAmmo, 15); + %player.setInventory(Chaingun, 1); + %player.setInventory(ChaingunAmmo, 100); + %player.setInventory(TargetingLaser, 1); + + %player.use("Chaingun"); + %player.weaponCount = 3; + + case 2: + //script hook in our equip stuff also + cloakingUnitAdded(); + + //echo("Light Assassin Config"); + + %player.setArmor("Light"); + + %player.setInventory(CloakingPack, 1); + + %player.setInventory(RepairKit,1); + %player.setInventory(FlashGrenade,5); + %player.setInventory(Mine,3); + + %player.setInventory(Plasma, 1); + %player.setInventory(PlasmaAmmo, 20); + %player.setInventory(Disc,1); + %player.setInventory(DiscAmmo, 15); + %player.setInventory(ShockLance,1); + %player.setInventory(TargetingLaser, 1); + + %player.use("Disc"); + %player.weaponCount = 3; + + case 3: + //echo("Light Sniper"); + + %player.setArmor("Light"); + + %player.setInventory(EnergyPack, 1); + + %player.setInventory(RepairKit,1); + %player.setInventory(ConcussionGrenade,5); + + %player.setInventory(Chaingun,1); + %player.setInventory(ChaingunAmmo,100); + %player.setInventory(Disc,1); + %player.setInventory(DiscAmmo, 15); + %player.setInventory(SniperRifle, 1); + %player.setInventory(TargetingLaser, 1); + + %player.use("SniperRifle"); + %player.weaponCount = 3; + + case 4: + echo("Medium Base Rape"); + + %player.setArmor("Medium"); + + %player.setInventory(ShieldPack, 1); + + %player.setInventory(RepairKit,1); + %player.setInventory(Grenade,6); + %player.setInventory(Mine,3); + + %player.setInventory(Plasma, 1); + %player.setInventory(PlasmaAmmo, 40); + %player.setInventory(Disc,1); + %player.setInventory(DiscAmmo, 15); + %player.setInventory(ElfGun, 1); + %player.setInventory(GrenadeLauncher,1); + %player.setInventory(GrenadeLauncherAmmo, 10); + %player.setInventory(TargetingLaser, 1); + + %player.use("GrenadeLauncher"); + %player.weaponCount = 4; + + case 5: + //echo("Medium Killing Machine"); + + %player.setArmor("Medium"); + + %player.setInventory(AmmoPack, 1); + + %player.setInventory(RepairKit,1); + %player.setInventory(Grenade,6); + %player.setInventory(Mine,3); + + %player.setInventory(Plasma, 1); + %player.setInventory(PlasmaAmmo, 40); + %player.setInventory(Disc,1); + %player.setInventory(DiscAmmo, 15); + %player.setInventory(GrenadeLauncher, 1); + %player.setInventory(GrenadeLauncherAmmo, 10); + %player.setInventory(MissileLauncher,1); + %player.setInventory(MissileLauncherAmmo, 10); + %player.setInventory(TargetingLaser, 1); + + %player.use("Plasma"); + %player.weaponCount = 4; + + case 6: + //echo("Medium Wuss"); + + %player.setArmor("Medium"); + + %player.setInventory(EnergyPack, 1); + + %player.setInventory(RepairKit,1); + %player.setInventory(ConcussionGrenade,6); + + %player.setInventory(Blaster, 1); + %player.setInventory(Disc,1); + %player.setInventory(DiscAmmo, 15); + %player.setInventory(Elf, 1); + %player.setInventory(Chaingun,1); + %player.setInventory(ChaingunAmmo, 150); + %player.setInventory(TargetingLaser, 1); + + %player.use("Disc"); + %player.weaponCount = 4; + + case 7: + //echo("Heavy Long Range"); + + %player.setArmor("Heavy"); + + %player.setInventory(EnergyPack, 1); + + %player.setInventory(RepairKit,1); + %player.setInventory(Grenade,8); + %player.setInventory(Mine,3); + + %player.setInventory(Plasma, 1); + %player.setInventory(PlasmaAmmo, 50); + %player.setInventory(Disc,1); + %player.setInventory(DiscAmmo, 15); + %player.setInventory(Mortar, 1); + %player.setInventory(MortarAmmo, 10); + %player.setInventory(MissileLauncher,1); + %player.setInventory(MissileLauncherAmmo, 15); + %player.setInventory(GrenadeLauncher,1); + %player.setInventory(GrenadeLauncherAmmo,15); + %player.setInventory(TargetingLaser, 1); + + %player.use("Mortar"); + %player.weaponCount = 5; + + case 8: + //echo("Default Config"); + + %player.setArmor("Light"); + + %player.setInventory(RepairKit,1); + + %player.setInventory(Blaster,1); + %player.setInventory(Disc,1); + %player.setInventory(DiscAmmo, 15); + %player.setInventory(Chaingun, 1); + %player.setInventory(ChaingunAmmo, 100); + %player.setInventory(TargetingLaser, 1); + + %player.use("Blaster"); + %player.weaponCount = 3; + + case 9: + //echo("Heavy Rate of Fire"); + + %player.setArmor("Heavy"); + + %player.setInventory(AmmoPack, 1); + + %player.setInventory(RepairKit,1); + %player.setInventory(Grenade,8); + %player.setInventory(Mine,3); + + %player.setInventory(Chaingun, 1); + %player.setInventory(ChaingunAmmo, 200); + %player.setInventory(Disc,1); + %player.setInventory(DiscAmmo, 15); + %player.setInventory(Mortar, 1); + %player.setInventory(MortarAmmo, 10); + %player.setInventory(Plasma,1); + %player.setInventory(PlasmaAmmo, 50); + %player.setInventory(GrenadeLauncher,1); + %player.setInventory(GrenadeLauncherAmmo,15); + %player.setInventory(TargetingLaser, 1); + + %player.use("Mortar"); + %player.weaponCount = 5; + + case 10: + //echo("Heavy Inside Attacker"); + + %player.setArmor("Heavy"); + + %player.setInventory(ShieldPack, 1); + + %player.setInventory(RepairKit,1); + %player.setInventory(ConcussionGrenade,8); + %player.setInventory(Mine,3); + + %player.setInventory(Plasma, 1); + %player.setInventory(PlasmaAmmo, 50); + %player.setInventory(Disc,1); + %player.setInventory(DiscAmmo, 15); + %player.setInventory(Mortar, 1); + %player.setInventory(MortarAmmo, 10); + %player.setInventory(ShockLance,1); + %player.setInventory(Chaingun,1); + %player.setInventory(ChaingunAmmo,200); + %player.setInventory(TargetingLaser, 1); + + %player.use("Mortar"); + %player.weaponCount = 5; + } +} + +// silly littly functions +function flashButton(%buttonName) +{ + %time = 800; + %num = 6; + for(%i=0; %i<%num; %i++) { + schedule( %time*%i, $player.player, "eval", %buttonName@".setVisible(false);"); + + schedule(%time*%i + %time/2, $player.player, "eval", %buttonName@".setVisible(true);"); + schedule(%time*%i, $player.player, serverPlay2d, HudFlashSound); + } +} + +function showCommandPulldown(%button) +{ + //this is what I hacked in to make pretty with the showing off of the command tree + commanderTree.openCategory(%button, true); + mentionPulldown(%button); + commanderTree.schedule(3000, openCategory, %button, false); +} + +function affectAllCommandPulldown(%open) +{ + commanderTree.openCategory(Clients, %open); + commanderTree.openCategory(Tactical, %open); + commanderTree.openCategory(Support, %open); + commanderTree.openCategory(Waypoints, %open); + commanderTree.openCategory(Objectives, %open); +} + +function mentionPulldown(%button) +{ + switch$(%button) + { + case "Clients": + doText(T4_03b); + + case "Tactical": + doText(T4_03c); + + case "Support": + doText(T4_03d); + + case "Waypoints": + doText(T4_03e); + + case "Objectives": + doText(T4_03f); + doText(T4_03g); + doText(t4_03h); + } +} + +function training4CommandMapWake() +{ + error("training4CommandMapWake Called"); + if(game.wakeExpectingSquadOrder && !game.firstSpawn) { + game.wakeExpectingSquadOrder = false; + + // commander map waypoint + %pos = nameToId(Base).position; + %obj = createClientTarget(-1, %pos); + %obj.createWaypoint("Nagakhun Base"); + + // cmap objective + commanderTree.registerEntryType("Objectives", getTag('Base'), false, "commander/MiniIcons/com_flag_grey", "255 255 255"); + createTarget(%id, 'Defend', "", "", 'Base', $player.getSensorGroup()); + + affectAllCommandPulldown(false); + + //here we go...drop down the thingies + schedule( 2500, $player.player, showCommandPulldown, Clients); + schedule( 6000, $player.player, showCommandPulldown, Tactical); + schedule(10000, $player.player, showCommandPulldown, Support); + schedule(14000, $player.player, showCommandPulldown, Waypoints); + schedule(18000, $player.player, showCommandPulldown, Objectives); + + //schedule(24000, $player.player, affectAllCommandPulldown, true); + } + else if(game.wakeExpectingTurret && !game.firstSpawn) { + messageClient($player, 0, "Click on \"Tactical Assets\" to view turrets."); + //flashButton(CMDTacticalButton); + game.ExpectiongTacticalButton = true; + game.wakeExpectingTurret = false; + } + else if(game.wakeExpectingCamera && !game.firstSpawn) { + messageClient($player, 0, "Click on the control box to the right of the camera\'s name to control the camera."); + cameraSpielEnd(); + game.wakeExpectingCamera = false; + } +} + +// Objectives ================================================================== +//================================================================================ +function missionFailedTimer() +{ + missionFailed($player.miscMsg[training4GenLoss]); +} + + +function blowoff() +{ + game.blowoff = true; + clearQueue(); + doText(Any_Blowoff02, 2000, 1); + + // okay, the player wants to play huh? + // if we are still waiting for the enemies to spawn at this point + // cancel that and spawn them now...well, soon + if($player.beginSpawn){ + cancel($player.beginSpawn); + %time = getRandom(1, 20); + //error("Blowing off the training: spawning enemies in "@ %time * 1000 @" seconds."); + schedule(%time*1000, game, beginTraining4Enemies); + } + +} + +function findObjbyDescription(%desc, %team) +{ + %q = $objectiveQ[%team]; + for(%i = 0; %i < %q.getCount(); %i++) + { + %objective = %q.getObject(%i); + if(%objective.description $= %desc) + return %objective; + } +} + +function removeDescribedObj( %obj ) +{ + %invDepObj.weightLevel1 = 0; + %invDepObj.weightLevel2 = 0; + %invDepObj.weightLevel3 = 0; + %invDepObj.weightLevel4 = 0; + $ObjectiveQ[1].remove(%invDepObj); + // clear it in case anyone has picked it up + AIClearObjective(%invDepObj); +} + +//===============================================END the training 4 package stuff==== +}; + +// Dialog stuff =================================================================== +//================================================================================= + + + +// Callbacks //================================================================== +//================================================================================ + +//add callbacks +addMessageCallback('MsgDeployFailed', singlePlayerFailDeploy); +addMessageCallback('MsgWeaponMount', playerMountWeapon); +addMessageCallback('msgEnterInvStation', StationInvEnter); +addMessageCallback('MsgRepairPackRepairingObj', RepairingObj); +addMessageCallback('commandMapWake', training4CommandMapWake); + diff --git a/base/scripts/Training5.cs b/base/scripts/Training5.cs new file mode 100644 index 0000000..086d502 --- /dev/null +++ b/base/scripts/Training5.cs @@ -0,0 +1,559 @@ +// don't want this executing when building graphs +if($OFFLINE_NAV_BUILD) + return; + +echo("-----------------Running Training5"); +activatePackage(Training5); + +//BaseExplosion sound +datablock EffectProfile(Training5BaseExplosionEffect) +{ + effectname = "explosions/explosion.xpl27"; + minDistance = 20; + maxDistance = 100; +}; + +datablock AudioProfile(Training5BaseExplosionSound) +{ + filename = "fx/explosions/explosion.xpl27.wav"; + description = AudioDefault3d; + effect = Training5BaseExplosionEffect; + preload = true; +}; + + +//mission variables +$numberOfTeammates = 0; +$numberOfEnemies[1] = 6; +$numberOfEnemies[2] = 6; +$numberOfEnemies[3] = 8; +$missionBotSkill[1] = 0.0; +$missionBotSkill[2] = 0.5; +$missionBotSkill[3] = 0.9; +$missionEnemyThreshold[1] = 1; +$missionEnemyThreshold[2] = 3; +$missionEnemyThreshold[3] = 8; +$bridgeTime[1] = 30; +$bridgeTime[2] = 20; +$bridgeTime[3] = 5; + + +game.targetObject1 = nameToId("ObjectiveGen1"); +game.targetObject2 = nameToId("ObjectiveGen2"); +game.tower = nameToId("MissionGroup/Teams/Team2/tower/tower"); +game.base = nameToId("DBase2"); +game.minimumSafeDistance = 500; +game.West = nameToId(WestBridgeGen); +game.East = nameToId(EastBridgeGen); +game.North = nameToId(NorthBridgeGen); +game.South = nameToId(SouthBridgeGen); + + +package Training5 { +//Training5 package functions begin======================================================= + +function MP3Audio::play(%this) +{ + //too bad...no mp3 in training +} + + +function toggleScoreScreen(%val) +{ + if ( %val ) + //error("No Score Screen in training......."); + messageClient($player, 0, $player.miscMsg[noScoreScreen]); +} + +function ClientCmdSetHudMode(%mode, %type, %node) +{ + parent::ClientCmdSetHudMode(%mode, %type, %node); + TrainingMap.push(); +} + +// get the ball rolling +function startCurrentMission(%game) +{ + setFlipFlopSkins(); + doText(Any_Waypoint01, 2000); + if(getRandom(3) == 1) + doText(Any_warning01); + setWaypointAt(nameToId(TowerSwitch).position, "Periphery Tower Control"); + objectiveDistanceChecks(); + updateTrainingObjectiveHud(obj1); + + // adding a little something for the players followers to do + //training5AddEscort($teammate0); + + // Tower FFs all start off by default + // we cheat and disable their hidden generators + nameToId(CatwalkFFGen).setDamageState(Disabled); + game.West.setDamageState(Disabled); + game.East.setDamageState(Disabled); + game.North.setDamageState(Disabled); + game.South.setDamageState(Disabled); + + // but we start the rotation + %skill = $pref::trainingDifficulty; + //%time = 1000 * (10 - %skill * skill ); + %time = $bridgeTime[%skill] * 1000; + rotateDrawbridgeFFs(%time); + + setUpDifficultySettings($pref::trainingDifficulty); +} + +function setUpDifficultySettings(%skill) +{ + if(%skill < 2) + { + nameToId(DownStairsSentry).hide(true); + nameToId(UpstairsTurret).hide(true); + } + if(%skill == 3) + nameToId(SatchelChargePack).hide(true); +} + +function countTurretsAllowed(%type) +{ + return $TeamDeployableMax[%type]; +} + +function getTeammateGlobals() +{ + echo("You have no teammates in this mission"); +} + +function FlipFlop::objectiveInit(%data, %flipflop) +{ +} + +function giveall() +{ + error("When the going gets tough...wussies like you start cheating!"); + messageClient($player, 0, "Cheating eh? What\'s next? Camping?"); +} + +function kobayashi_maru() +{ + $testCheats = true; + commandToServer('giveAll'); +} + + +// Distance Check ============================================================= +// Ive never done this before :P but im going to use a periodic self-scheduling +// distance checking mechanism in this mission also + +function objectiveDistanceChecks() +{ + %playerLocation = $player.player.position; + if(!%playerLocation) { + schedule(5000, game, objectiveDistanceChecks); + return; + } + +// %baseDist = vectorDist(%playerLocation, %game.base.position); +// if(%baseDist < 600 && !%game.training5SwitchObjective && !%game.turretsWarn){ +// %game.turretsWarn = true; +// doText(Any_warning06); +// } + + %baseDist = vectorDist(%playerLocation, game.base.position); + if(%baseDist < 200 && game.respawnPoint == 1) { + game.respawnPoint = 2; + return; // kill the distCheck + } + + + %dist = vectorDist(%playerLocation, game.tower.position); + //error("Tower Dist = "@%dist); + + if( %dist < 400 && !game.t5distcheck1) { + game.t5distcheck1 = true; + doText(T5_04); + return; + } + + if( %dist > 200 && game.training5SwitchObjective && !game.tipFirepower) { + + %packImage = $player.player.getMountedImage($backPackSlot).getName(); + if(%packImage !$= "SatchelChargeImage" && %packImage !$= "InventoryDeployableImage") { + game.tipFirepower = true; + doText(T5_tipFirepower); + } + + } + + schedule(5000, game, objectiveDistanceChecks); +} + +// cant blow up the gens except with the satchel charge +function GeneratorLarge::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType) +{ + //error("Generator::damageObject called. DamageType = "@%damageType); + if( %targetObject == game.targetObject1 || %targetObject == game.targetObject2 && !game.detonationSequenceStarted){ + if(%damageType && %damageType != $DamageType::SatchelCharge && %damageType != $DamageType::Explosion) { + if(!game.tooSoonMsg) { + game.tooSoonMsg = true; + schedule(15000, game, eval, "game.tooSoonMsg = false;"); + messageClient($player, 0, $player.miscMsg[genAttackNoSatchel]); + // and a little bonus for easy players + if($pref::trainingDifficulty == 1 && + $player.player.getMountedImage($backPackSlot).getName() !$= "SatchelChargeImage" && !game.satchelWaypointSet) { + + %waypoint = new WayPoint() { + position = nameToId(SatchelChargePack).position; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + lockCount = "0"; + homingCount = "0"; + name = "Satchel Charge"; + team = 1; + locked = "true"; + }; + $player.satchelWaypoint = %waypoint; + game.satchelWaypointSet = true; + } + } + error("undestroyed gen failed damage type = "@ %damageType); + return; + } + else %targetObject.applyDamage(%targetObject.getDataBlock().maxDamage); + } + Parent::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType); +} + +function AIEngageTask::assume(%task, %client) +{ + Parent::assume(%task, %client); + + if(%client.team != $playerTeam) + game.biodermAssume(%client); +} + + +// ============================================================================ +function singlePlayerGame::onAIRespawn(%game, %client) +{ + if(! isObject("MissionCleanup/TeamDrops2")) { + //this is the snippet of script from default games that puts teamdrops + // into the mission cleanup group...slightly modified to suit our needs + %dropSet = new SimSet("TeamDrops2"); + MissionCleanup.add(%dropSet); + + %spawns = nameToID("MissionGroup/Teams/team2/TeamDrops"); + if(%spawns != -1) + { + %count = %spawns.getCount(); + for(%i = 0; %i < %count; %i++) + %dropSet.add(%spawns.getObject(%i)); + } + } + + parent:: onAIRespawn(%game, %client); +} + + + +// ============================================================================ +function singlePlayerGame::onAIKilled(%game, %clVictim, %clAttacker, %damageType, %implement) +{ + %teamCount = getPlayersOnTeam(%clVictim.team); + //echo("Team count:" SPC %teamCount); + %maintNum = $missionEnemyThreshold[$pref::trainingDifficulty]; + //echo("Maintain:" SPC %maintNum); + + %clVictim.useSpawnSphere = true; + + // this will respawn the AI if + if( %teamCount < %maintNum ) + DefaultGame::onAIKilled(%game, %clVictim, %clAttacker, %damageType, %implement); + +} + +function SinglePlayerGame::equip(%game, %player, %set) +{ + if(!isObject(%player)) + return; + + %player.clearInventory(); + if(!%set) + %set = %player.client.equipment; + + for(%i =0; %i<$InventoryHudCount; %i++) + %player.client.setInventoryHudItem($InventoryHudData[%i, itemDataName], 0, 1); + + + %player.setArmor("Medium"); + + %player.setInventory(SatchelCharge, 1); + + %player.setInventory(RepairKit, 1); + %player.setInventory(ConcussionGrenade, 8); + %player.setInventory(Mine, 3); + + %player.setInventory(Plasma, 1); + %player.setInventory(PlasmaAmmo, 40); + %player.setInventory(Chaingun, 1); + %player.setInventory(ChaingunAmmo, 200); + %player.setInventory(Disc, 1); + %player.setInventory(DiscAmmo, 15); + %player.setInventory(GrenadeLauncher, 1); + %player.setInventory(GrenadeLauncherAmmo, 15); + %player.setInventory(TargetingLaser, 1); + + %player.use("Disc"); + + %player.weaponCount = 4; + +} + + +//the generator destroyed trigers the detonation sequence +function Generator::onDestroyed(%data, %destroyedObj) +{ + //error("GeneratorLarge::onDestroyed"); + if(%destroyedObj == game.targetObject1 || %destroyedObj == game.targetObject2) + if(!game.detonationSequenceStarted) { + game.detonationSequenceStarted = true; + + error("The satchel waypoint is:" SPC $player.satchelWaypoint); + $player.satchelWaypoint.delete(); + detonationSequence(); + updateTrainingObjectiveHud(obj4); + game.respawnPoint = 3; + + $missionEnemyThreshold[1] = 0; + $missionEnemyThreshold[2] = 0; + $missionEnemyThreshold[3] = 0; + } + + Parent::onDestroyed(%data, %destroyedObj); +} + +function FlipFlop::objectiveInit(%data, %flipflop) +{ + +} + +function FlipFlop::playerTouch(%data, %flipFlop, %player) +{ + //error("singlePlayer::playerTouchFlipFlop Training5"); + //echo("has been touched before? " SPC game.training5SwitchObjective); + + Parent::playerTouch(%data, %flipFlop, %player); + + //This disables the base door FFs + %state = (%flipFlop.team == $playerTeam ? "Disabled" : "Enabled"); + game.targetObject2.setDamageState(%state); + + if(!game.training5SwitchObjective) { + game.training5SwitchObjective = true; + doText(T5_05, 10000); + doText(T5_05b); + doText(T5_05a); + schedule(10000, game, setWaypointAt, game.targetObject2.getWorldBoxCenter(), "Reactor Regulator" ); + schedule(10000, game, updateTrainingObjectiveHud , obj2); + + //start the distance check again + objectiveDistanceChecks(); + game.respawnPoint = 1; + + rotateDrawbridgeFFs(false); + } +} + + +//EndingExplosionStuff========================================================================= + + +function detonationSequence() +{ + // first a little eye candy + %oldEmitter = nameToId(LavaSmoke); + %oldEmitter.delete(); + + %newEmitter = new ParticleEmissionDummy(LavaSmoke) { + position = "-462.4 -366.791 5.12867"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "defaultEmissionDummy"; + emitter = "AfterT5"; + velocity = "1"; + }; + + %detonationTime = 1000 * 90; // 90 is a guess, at least 67 before you cut lines + schedule(3000, game, doText, T5_06); //Get Out Hurry! + schedule(%detonationTime, game, detonateBase ); //BOOM //moved to t5_08d,eval + schedule(%detonationTime - 5000, game, doText, T5_08urgent); //5..4..3..2..1 + schedule(%detonationTime - 9000, game, doText, T5_07); //ComeOn + schedule(%detonationTime - 10000, game, doText, T5_06d); //10 + schedule(%detonationTime - 30000, game, doText, T5_06c); // 30 secs + schedule(%detonationTime - 64000, game, doText, T5_06a); //reaction building fast + schedule(%detonationTime - 60000, game, doText, T5_06b); //1 min + +} + +function detonateBase() +{ + %playerDist = vectorDist($player.player.position, game.base.position); + //BOOM + //schedule(0.33 * %playerDist, game, serverplay2d, Training5BaseExplosionSound); + schedule(0.33 * %playerDist, game, damagePlayersInBlast, game.minimumSafeDistance); + $player.player.setWhiteOut(8); + //messageAll(0, "You were "@%playerDist@"meters away. Minimum safe distance is "@game.minimumSafeDistance); + + if( %playerDist < game.minimumSafeDistance || !$player.player) { + schedule(5000, game, missionFailed, $player.miscMsg[training5loss] ); + moveMap.pop(); + } + else { + //messageAll(0, "You won!"); + schedule(5000, game, doText, T5_09, 3000); + schedule(13000, game, messageBoxOK, "Victory", $player.miscMsg[training5win], "Canvas.popDialog(MessageBoxOKDlg); schedule(1000, game, trainingComplete);"); + moveMap.schedule(13000, "pop"); + } +} + +function trainingComplete() +{ + + %skill = $pref::trainingDifficulty; + switch (%skill) + { + case 2: + %msg = "trainingOverMed"; + case 3: + %msg = "trainingOverHard"; + default: + %msg = "trainingOverEasy"; + } + missionComplete( $player.miscMsg[%msg] ); +} + + +function damagePlayersInBlast(%minDist) +{ + Canvas.popDialog(MessageBoxOKDlg); + Canvas.popDialog(MessageBoxYesNoDlg); + serverPlay2d(Training5BaseExplosionSound); + + %num = ClientGroup.getCount(); + for(%i = 0; %i < %num; %i++) + { + %client = clientGroup.getObject(%i); + if(%client.player) + { + %Dist = vectorDist(%client.player.position, game.base.position); + if(%dist < %minDist) + { + if(%client != $player) + %client.player.scriptKill($DamageType::Explosion); + else { + moveMap.pop(); + + if($firstperson) + toggleFirstPerson($player); + + serverConnection.setBlackout(true, 3000); + %client.player.setActionThread(Death11, true); + %client.player.setDamageFlash(0.75); + } + } + else + $player.player.setWhiteOut(12); + } + } +} + + +// turninig off the Mission area on this one too folks +function SinglePlayerGame::leaveMissionArea(%game, %player) +{ +} +function SinglePlayerGame::enterMissionArea(%game, %player) +{ +} + + +function rotateDrawbridgeFFs(%time) +{ + if(%time == 0) + { + // catwalks on + nameToId(CatwalkFFGen).setDamageState(Enabled); + + // stop rotation + cancel(game.FFRotate); + + // set Enabled All bridges + game.West.setDamageState(Enabled); + game.East.setDamageState(Enabled); + game.North.setDamageState(Enabled); + game.South.setDamageState(Enabled); + + } + else + { + // start these bad boys rotating + + if(game.activeBridgeSet == 1) { + game.West.setDamageState(Enabled); + game.East.setDamageState(Enabled); + game.North.setDamageState(Disabled); + game.South.setDamageState(Disabled); + game.activeBridgeSet = 2; + } + else { + game.West.setDamageState(Disabled); + game.East.setDamageState(Disabled); + game.North.setDamageState(Enabled); + game.South.setDamageState(Enabled); + game.activeBridgeSet = 1; + } + + game.FFRotate = schedule(%time, game, rotateDrawbridgeFFs, %time); + } +} + +// helpful satchel charge instructions +function armSatchelCharge(%satchel) +{ + %deployer = %satchel.sourceObject; + messageClient(%deployer.client, 0, "\c2Satchel Charge Armed! Press" SPC findTrainingControlButtons(useBackPack) SPC"to detonate."); + if(!game.msgSatchelActivate) + { + game.msgSatchelActivate = true; + doText(T5_tipSatchel01); + } + parent::armSatchelCharge(%satchel); +} + +function Pack::onInventory(%data, %obj, %amount) +{ + %oldSatchelCharge = (%obj.thrownChargeId ? true : false); + Parent::onInventory(%data, %obj, %amount); + %nowSatchelCharge = (%obj.thrownChargeId ? true : false); + + if(%oldSatchelCharge && !%nowSatchelCharge) + messageClient(%obj.client, 0, "\c2You got a pack and nullified your satchel charge."); +} + +function singlePlayerGame::onClientKilled(%game, %clVictim, %clKiller, %damageType, %implement) +{ + %hadSatchelCharge = (%clvictim.player.thrownChargeId ? true : false); + if(%hadSatchelCharge) + schedule(1500, game, messageClient, %clVictim, 0, "Your satchel charge has been nullified."); + + Parent::onClientKilled(%game, %clVictim, %clKiller, %damageType, %implement); +} + +function missionClientKilled() +{ + //no console spam +} + +//Training5 package functions end======================================================= +}; + diff --git a/base/scripts/TrainingGui.cs b/base/scripts/TrainingGui.cs new file mode 100644 index 0000000..c00c396 --- /dev/null +++ b/base/scripts/TrainingGui.cs @@ -0,0 +1,258 @@ +//------------------------------------------------------------------------------ +// +// TrainingGui.cs +// +//------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ +function LaunchTraining() +{ + LaunchTabView.viewTab( "TRAINING", TrainingGui, 0 ); +} + +//------------------------------------------------------------------------------ +function TrainingGui::onWake( %this ) +{ + Canvas.pushDialog( LaunchToolbarDlg ); + + %this.soundHandle = 0; + %this.briefEventCount = 0; + %this.briefWAV = ""; + %ct = 1; + %fobject = new FileObject(); + %search = "missions/*.mis"; + TrainingMissionList.clear(); + for ( %file = findFirstFile( %search ); %file !$= ""; %file = findNextFile( %search ) ) + { + %name = fileBase(%file); // get the mission name + + if ( !%fobject.openForRead( %file ) ) + continue; + + %typeList = "None"; + + while( !%fobject.isEOF() ) + { + %line = %fobject.readLine(); + if ( getSubStr( %line, 0, 18 ) $= "// MissionTypes = " ) + { + %typeList = getSubStr( %line, 18, 1000 ); + break; + } + } + + if ( strstr( %typeList, "SinglePlayer" ) != -1 ) + { + // Get the mission display name: + %displayName = %name; + while ( !%fobject.isEOF() ) + { + %line = %fobject.readLine(); + if ( getSubStr( %line, 0, 16 ) $= "// PlanetName = " ) + { + %displayName = getSubStr( %line, 16, 1000 ); + // Strip the date: + %pos = strpos( %displayName, "," ); + if ( %pos != -1 ) + %displayName = getSubStr( %displayName, 0, %pos ); + break; + } + } + + TrainingMissionList.addRow( %ct++, %displayName TAB %name ); + } + + %fobject.close(); + } + + TrainingMissionList.sort( 1 ); + TrainingMissionList.setSelectedRow( 0 ); + if ( $pref::TrainingDifficulty > 0 && $pref::TrainingDifficulty < 4 ) + TrainingDifficultyMenu.setSelected( $pref::TrainingDifficulty ); + else + TrainingDifficultyMenu.setSelected( 1 ); +} + +//------------------------------------------------------------------------------ +function TrainingGui::onSleep( %this ) +{ + %this.stopBriefing(); +} + +//------------------------------------------------------------------------------ +function TrainingGui::setKey( %this ) +{ +} + +//------------------------------------------------------------------------------ +function TrainingGui::onClose( %this ) +{ +} + +//------------------------------------------------------------------------------ +function TrainingDifficultyMenu::onAdd( %this ) +{ + %this.add( "Easy", 1 ); + %this.add( "Medium", 2 ); + %this.add( "Hard", 3 ); +} + +//------------------------------------------------------------------------------ +function TrainingDifficultyMenu::onSelect( %this, %id, %text ) +{ + $pref::TrainingDifficulty = %id; +} + +//------------------------------------------------------------------------------ +function TrainingMissionList::onSelect( %this, %id, %text ) +{ + TrainingGui.stopBriefing(); + %fileName = "missions/" @ getField( %text, 1 ) @ ".mis"; + %file = new FileObject(); + %state = 0; + if ( %file.openForRead( %fileName ) ) + { + // Get the mission briefing text: + while ( !%file.isEOF() ) + { + %line = %file.readLine(); + if ( %state == 0 && %line $= "//--- MISSION BRIEFING BEGIN ---" ) + %state = 1; + else if ( %state > 0 && %line $= "//--- MISSION BRIEFING END ---" ) + break; + else if ( %state == 1 ) + { + %briefText = %briefText @ getSubStr( %line, 2, 1000 ); + %state = 2; + } + else if ( %state == 2 ) + %briefText = %briefText NL getSubStr( %line, 2, 1000 ); + } + + // Get the mission briefing WAV file: + while ( !%file.isEOF() ) + { + %line = %file.readLine(); + if ( getSubStr( %line, 0, 17 ) $= "// BriefingWAV = " ) + { + %briefWAV = getSubStr( %line, 17, 1000 ); + break; + } + } + + // Get the bitmap name: + while ( !%file.isEOF() ) + { + %line = %file.readLine(); + if ( getSubStr( %line, 0, 12 ) $= "// Bitmap = " ) + { + %briefPic = getSubStr( %line, 12, 1000 ); + break; + } + } + + %file.close(); + } + else + error( "Failed to open Single Player mission file " @ %fileName @ "!" ); + + %bmp = "gui/" @ %briefPic @ ".png"; + if ( isFile( "textures/" @ %bmp ) ) + { + TrainingPic.setBitmap( %bmp ); + TrainingPicFrame.setVisible( true ); + } + else + { + TrainingPic.setBitmap( "" ); + TrainingPicFrame.setVisible( false ); + } + + TrainingPlayBtn.setActive( %briefWAV !$= "" ); + TrainingBriefingText.setValue( %briefText ); + TrainingBriefingScroll.scrollToTop(); + TrainingGui.WAVBase = firstWord( %briefWAV ); + TrainingGui.WAVCount = restWords( %briefWAV ); + %file.delete(); + + //if ( TrainingPlayTgl.getValue() ) + // TrainingGui.startBriefing(); +} + +//------------------------------------------------------------------------------ +function TrainingPlayTgl::onAction( %this ) +{ + if ( %this.getValue() ) + { + if ( TrainingMissionList.getSelectedId() != -1 ) + TrainingGui.startBriefing(); + } + else + TrainingGui.stopBriefing(); +} + +//-------------------------------------------------------- +function TrainingGui::toggleBriefing( %this ) +{ + if ( %this.soundHandle $= "" ) + %this.startBriefing(); + else + %this.stopBriefing(); +} + +//-------------------------------------------------------- +function TrainingGui::startBriefing( %this ) +{ + %this.stopBriefing(); + if ( %this.WAVBase !$= "" ) + { + %this.instance = %this.instance $= "" ? 0 : %this.instance; + %this.playNextBriefWAV( %this.WAVBase, 0, %this.WAVCount, %this.instance ); + } +} + +//-------------------------------------------------------- +function TrainingGui::playNextBriefWAV( %this, %wavBase, %id, %count, %instance ) +{ + if ( %instance == %this.instance ) + { + if ( %id < %count ) + { + %wav = "voice/Training/Briefings/" @ %wavBase @ ".brief0" @ ( %id + 1 ) @ ".wav"; + %this.soundHandle = alxCreateSource( AudioGui, %wav ); + alxPlay( %this.soundHandle ); + + // Schedule the next WAV: + %delay = alxGetWaveLen( %wav ) + 500; + %this.schedule( %delay, playNextBriefWAV, %wavBase, %id + 1, %count, %instance ); + } + else + { + // We're all done! + %this.soundHandle = ""; + } + } +} + +//-------------------------------------------------------- +function TrainingGui::stopBriefing( %this ) +{ + if ( %this.soundHandle !$= "" ) + { + alxStop( %this.soundHandle ); + %this.soundHandle = ""; + %this.instance++; + } +} + +//-------------------------------------------------------- +function TrainingGui::startTraining( %this ) +{ + MessagePopup( "STARTING MISSION", "Initializing, please wait..." ); + Canvas.repaint(); + %file = getField( TrainingMissionList.getValue(), 1 ); + $ServerName = "Single Player Training"; + $HostGameType = "SinglePlayer"; + CreateServer( %file, "SinglePlayer" ); + localConnect( "Lone Wolf", "Human Male", "swolf", "Male1" ); +} diff --git a/base/scripts/admin.cs b/base/scripts/admin.cs new file mode 100644 index 0000000..440bf7b --- /dev/null +++ b/base/scripts/admin.cs @@ -0,0 +1,228 @@ +function serverCmdStartNewVote(%client, %typeName, %actionMsg, %arg1, %arg2, %arg3, %arg4, %playerVote) +{ + if ( !%client.isAdmin || ( ( %arg1.isAdmin && ( %client != %arg1 ) ) ) ) + { + %teamSpecific = false; + %gender = (%client.sex $= "Male" ? 'he' : 'she'); + if ( Game.scheduleVote $= "" ) + { + //send a message to everyone about the vote... + if (%playerVote) + { + if((%client.team != %arg1.team && Game.numTeams > 1) && %typeName !$= "VoteAdminPlayer") + { + messageClient(%client, '', "\c2Player votes must be team based."); + return; + } + + // kicking and banning are team specific + if(%typeName $= "VoteKickPlayer" || %typeName $= "VoteBanPlayer") + { + if(%arg1.isSuperAdmin) + { + messageClient(%client, '', '\c2You can not %1 %2, %3 is a Super Admin!', %actionMsg, %arg1.name, %gender); + return; + } + + Game.kickClient = %arg1; + %clientsVoting = 0; + %teamSpecific = Game.numTeams > 1; + if(%arg1.team != 0 && %teamSpecific) + { + for ( %clientIndex = 0; %clientIndex < ClientGroup.getCount(); %clientIndex++ ) + { + %cl = ClientGroup.getObject( %clientIndex ); + + if(%cl.team == %client.team) + { + %clients[%clientsVoting++] = %clientIndex; + messageClient( %client, 'VoteStarted', '\c2%1 initiated a vote to %2 %3.', %client.name, %actionMsg, %arg1.name); + } + } + } + else + messageAll( 'VoteStarted', '\c2%1 initiated a vote to %2 %3.', %client.name, %actionMsg, %arg1.name); + } + else + { + messageAll( 'VoteStarted', '\c2%1 initiated a vote to %2 %3.', %client.name, %actionMsg, %arg1.name); + } + } + else if ( %typeName $= "VoteChangeMission" ) + messageAll( 'VoteStarted', '\c2%1 initiated a vote to %2 %3 (%4).', %client.name, %actionMsg, %arg1, %arg2 ); + else if (%arg1 !$= 0) + { + if (%arg2 !$= 0) + { + if(%typeName $= "VoteTournamentMode") + { + %admin = getAdmin(); + if(%admin > 0) + messageAll( 'VoteStarted', '\c2%1 initiated a vote to %2 Tournament Mode (%3).', %client.name, %actionMsg, %arg1); + else + { + messageClient( %client, 'clientMsg', 'There must be a server admin to play in Tournament Mode.'); + return; + } + } + else + messageAll( 'VoteStarted', '\c2%1 initiated a vote to %2 %3 %4.', %client.name, %actionMsg, %arg1, %arg2); + + } + else + messageAll( 'VoteStarted', '\c2%1 initiated a vote to %2 %3.', %client.name, %actionMsg, %arg1); + } + else + messageAll( 'VoteStarted', '\c2%1 initiated a vote to %2.', %client.name, %actionMsg); + + // open the vote hud for all clients that will participate in this vote + if(%teamSpecific) + { + for(%i = 0; %i < %clientsVoting; %i++) + { + %cl = ClientGroup.getObject(%clients[%i]); + messageClient(%cl, 'openVoteHud', "", %clientsVoting, ($Host::VotePassPercent / 100)); + } + } + else + { + for ( %clientIndex = 0; %clientIndex < ClientGroup.getCount(); %clientIndex++ ) + { + %cl = ClientGroup.getObject( %clientIndex ); + messageClient(%cl, 'openVoteHud', "", $HostGamePlayerCount, ($Host::VotePassPercent / 100)); + } + } + + clearVotes(); + Game.voteType = %typeName; + Game.scheduleVote = schedule( ($Host::VoteTime * 1000), 0, "calcVotes", %typeName, %arg1, %arg2, %arg3, %arg4 ); + %client.vote = true; + messageAll('addYesVote', ""); + + if(!%client.team == 0) + clearBottomPrint(%client); + } + else + messageClient( %client, 'voteAlreadyRunning', '\c2A vote is already in progress.' ); + } + else + { + if ( Game.scheduleVote !$= "" && Game.voteType $= %typeName ) + { + messageAll('closeVoteHud', ""); + cancel(Game.scheduleVote); + Game.scheduleVote = ""; + } + + // if this is a superAdmin, don't kick or ban + if(%arg1 != %client) + { + if(!%arg1.isSuperAdmin) + eval( "Game." @ %typeName @ "(true,\"" @ %arg1 @ "\",\"" @ %arg2 @ "\",\"" @ %arg3 @ "\",\"" @ %arg4 @ "\");" ); + else + messageClient(%client, '', '\c2You can not %1 %2, %3 is a Super Admin!', %actionMsg, %arg1.name, %gender); + } + } +} + +function serverCmdSetPlayerVote(%client, %vote) +{ + // players can only vote once + if(%client.vote $= "") + { + %client.vote = %vote; + if(%client.vote == 1) + messageAll('addYesVote', ""); + else + messageAll('addNoVote', ""); + + commandToClient(%client, 'voteSubmitted', %vote); + } +} + +function calcVotes(%typeName, %arg1, %arg2, %arg3, %arg4) +{ + if(%typeName $= "voteMatchStart") + if($MatchStarted || $countdownStarted) + return; + + for ( %clientIndex = 0; %clientIndex < ClientGroup.getCount(); %clientIndex++ ) + { + %cl = ClientGroup.getObject( %clientIndex ); + messageClient(%cl, 'closeVoteHud', ""); + + if ( %cl.vote !$= "" ) + { + if ( %cl.vote ) + { + Game.votesFor[%cl.team]++; + Game.totalVotesFor++; + } + else + { + Game.votesAgainst[%cl.team]++; + Game.totalVotesAgainst++; + } + } + else + { + Game.votesNone[%cl.team]++; + Game.totalVotesNone++; + } + } + eval( "Game." @ %typeName @ "(false,\"" @ %arg1 @ "\",\"" @ %arg2 @ "\",\"" @ %arg3 @ "\",\"" @ %arg4 @ "\");" ); + Game.scheduleVote = ""; + Game.kickClient = ""; +} + +function clearVotes() +{ + for(%clientIndex = 0; %clientIndex < ClientGroup.getCount(); %clientIndex++) + { + %client = ClientGroup.getObject(%clientIndex); + %client.vote = ""; + messageClient(%client, 'clearVoteHud', ""); + } + + for(%team = 1; %team < 5; %team++) + { + Game.votesFor[%team] = 0; + Game.votesAgainst[%team] = 0; + Game.votesNone[%team] = 0; + Game.totalVotesFor = 0; + Game.totalVotesAgainst = 0; + Game.totalVotesNone = 0; + } +} + +// Tournament mode Stuff----------------------------------- + +function setModeFFA( %mission, %missionType ) +{ + if( $Host::TournamentMode ) + { + $TeamDamage = 1; + $Host::TournamentMode = false; + + if( isObject( Game ) ) + Game.gameOver(); + + loadMission(%mission, %missionType, false); + } +} + +//------------------------------------------------------------------ + +function setModeTournament( %mission, %missionType ) +{ + if( !$Host::TournamentMode ) + { + $TeamDamage = 1; + $Host::TournamentMode = true; + + if( isObject( Game ) ) + Game.gameOver(); + + loadMission(%mission, %missionType, false); + } +} diff --git a/base/scripts/ai.cs b/base/scripts/ai.cs new file mode 100644 index 0000000..c74ab88 --- /dev/null +++ b/base/scripts/ai.cs @@ -0,0 +1,897 @@ +//-----------------------------------// +// AI SCRIPT FUNCTIONS // +//-----------------------------------// + +//first, exec the supporting scripts +exec("scripts/aiDebug.cs"); +exec("scripts/aiDefaultTasks.cs"); +exec("scripts/aiObjectives.cs"); +exec("scripts/aiInventory.cs"); +exec("scripts/aiChat.cs"); +exec("scripts/aiHumanTasks.cs"); +exec("scripts/aiObjectiveBuilder.cs"); +exec("scripts/aiBotProfiles.cs"); + +$AIModeStop = 0; +$AIModeWalk = 1; +$AIModeGainHeight = 2; +$AIModeExpress = 3; +$AIModeMountVehicle = 4; + +$AIClientLOSTimeout = 15000; //how long a client has to remain out of sight of the bot + //before the bot "can't see" the client anymore... + +//-----------------------------------// +//Objective weights - level 1 + +$AIWeightCapFlag[1] = 5000; //range 5100 to 5320 +$AIWeightKillFlagCarrier[1] = 4800; //range 4800 to 5120 +$AIWeightReturnFlag[1] = 5001; //range 5101 to 5321 +$AIWeightDefendFlag[1] = 3900; //range 4000 to 4220 +$AIWeightGrabFlag[1] = 3850; //range 3950 to 4170 + +$AIWeightDefendFlipFlop[1] = 3900; //range 4000 to 4220 +$AIWeightCaptureFlipFlop[1] = 3850; //range 3850 to 4170 + +$AIWeightAttackGenerator[1] = 3100; //range 3200 to 3520 +$AIWeightRepairGenerator[1] = 3200; //range 3300 to 3620 +$AIWeightDefendGenerator[1] = 3100; //range 3200 to 3420 + +$AIWeightMortarTurret[1] = 3400; //range 3500 to 3600 +$AIWeightLazeObject[1] = 3200; //range 3300 to 3400 +$AIWeightRepairTurret[1] = 3100; //range 3200 to 3420 + +$AIWeightAttackInventory[1] = 2900; //range 2800 to 2920 +$AIWeightRepairInventory[1] = 2900; //range 2800 to 2920 + +$AIWeightEscortOffense[1] = 2900; //range 2800 to 2920 +$AIWeightEscortCapper[1] = 3250; //range 3350 to 3470 + +//used to allow a bot to finish tasks once started. +$AIWeightContinueDeploying = 4250; +$AIWeightContinueRepairing = 4250; + +//Objective weights from human +$AIWeightHumanIssuedCommand = 4450; +$AIWeightHumanIssuedEscort = 4425; + +//Objective weights - level 2 +$AIWeightCapFlag[2] = 0; //only one person can ever cap a flag +$AIWeightKillFlagCarrier[2] = 4800; //range 4800 to 5020 +$AIWeightReturnFlag[2] = 4100; //range 4200 to 4320 +$AIWeightDefendFlag[2] = 2000; //range 2100 to 2220 +$AIWeightGrabFlag[2] = 2000; //range 2100 to 2220 + +$AIWeightDefendFlipFlop[2] = 2000; //range 2100 to 2220 +$AIWeightDefendFlipFlop[3] = 1500; //range 1600 to 1720 +$AIWeightDefendFlipFlop[4] = 1000; //range 1100 to 1220 + +$AIWeightAttackGenerator[2] = 1600; //range 1700 to 1920 +$AIWeightRepairGenerator[2] = 1600; //range 1700 to 1920 +$AIWeightDefendGenerator[2] = 1500; //range 1600 to 1720 + +$AIWeightAttackInventory[2] = 1400; //range 1500 to 1720 +$AIWeightRepairInventory[2] = 1400; //range 1500 to 1720 + +$AIWeightMortarTurret[2] = 1000; //range 1100 to 1320 +$AIWeightLazeObject[2] = 0; //no need to have more than one targetter +$AIWeightRepairTurret[2] = 1000; //range 1100 to 1320 + +$AIWeightEscortOffense[2] = 2900; //range 3300 to 3420 +$AIWeightEscortCapper[2] = 3000; //range 3100 to 3220 + + +function AIInit() +{ + AISlicerInit(); + installNavThreats(); + NavDetectForceFields(); +// ShowFPS(); + + //enable the use of grenades + $AIDisableGrenades = false; + $AIDisableChat = false; + + //create the "objective delete set" + if(nameToId("AIBombLocationSet") <= 0) + { + $AIBombLocationSet = new SimSet("AIBombLocationSet"); + MissionCleanup.add($AIBombLocationSet); + } + + //create the Inventory group + if(nameToId("AIStationInventorySet") <= 0) + { + $AIInvStationSet = new SimSet("AIStationInventorySet"); + MissionCleanup.add($AIInvStationSet); + } + + //create the Item group + if (nameToId("AIItemSet") <= 0) + { + $AIItemSet = new SimSet("AIItemSet"); + MissionCleanup.add($AIItemSet); + } + + //create the Item group + if (nameToId("AIGrenadeSet") <= 0) + { + $AIGrenadeSet = new SimSet("AIGrenadeSet"); + MissionCleanup.add($AIGrenadeSet); + } + + //create the weapon group + if (nameToId("AIWeaponSet") <= 0) + { + $AIWeaponSet = new SimSet("AIWeaponSet"); + MissionCleanup.add($AIWeaponSet); + } + + //create the deployed turret group + if (nameToID("AIRemoteTurretSet") <= 0) + { + $AIRemoteTurretSet = new SimSet("AIRemoteTurretSet"); + MissionCleanup.add($AIRemoteTurretSet); + } + + //create the deployed turret group + if (nameToID("AIDeployedMineSet") <= 0) + { + $AIDeployedMineSet = new SimSet("AIDeployedMineSet"); + MissionCleanup.add($AIDeployedMineSet); + } + + //create the deployed turret group + if (nameToID("AIVehicleSet") <= 0) + { + $AIVehicleSet = new SimSet("AIVehicleSet"); + MissionCleanup.add($AIVehicleSet); + } + + %missionGroupFolder = nameToID("MissionGroup"); + %missionGroupFolder.AIMissionInit(); +} + +// this is called at mission load by the specific game type +function AIInitObjectives(%team, %game) +{ + %group = nameToID("MissionGroup/Teams/team" @ %team @ "/AIObjectives"); + if(%group < 0) + return; // opps, there is no Objectives set for this team. + + // add the grouped objectives to the teams Q + %count = %group.getCount(); + for (%i = 0; %i < %count; %i++) + { + %objective = %group.getObject(%i); + if (%objective.getClassName() !$= "AIObjective") + { + %grpCount = %objective.getCount(); + for (%j = 0; %j < %grpCount; %j++) + { + %grpObj = %objective.getObject(%j); + if (%objective.gameType $= "" || %objective.gameType $= "all") + %objType = ""; + else + %objType = %objective.gameType @ "Game"; + + if (%objType $= "" || %objType $= %game.class) + { + %grpObj.group = %objective; + $ObjectiveQ[%team].add(%grpObj); + } + } + } + } + + + // add the non-grouped objectives to the teams Q + %count = %group.getCount(); + for(%i = 0; %i < %count; %i++) + { + %objective = %group.getObject(%i); + + //if the objective is not an "AIObjective", assume it's a group and continue + if (%objective.getClassName() !$= "AIObjective") + continue; + + if (%objective.gameType $= "" || %objective.gameType $= "all") + %objType = ""; + else + %objType = %objective.gameType @ "Game"; + + if (%objType $= "" || %objType $= %game.class) + { + %objective.group = ""; + $ObjectiveQ[%team].add(%objective); + } + } + + // initialize the objectives + %count = $ObjectiveQ[%team].getCount(); + for(%i = 0; %i < %count; %i++) + { + %objective = $ObjectiveQ[%team].getObject(%i); + + //clear out any dynamic fields + %objective.clientLevel1 = ""; + %objective.clientLevel2 = ""; + %objective.clientLevel3 = ""; + %objective.isInvalid = false; + %objective.repairObjective = ""; + + //set the location, if required + if (%objective.position !$= "0 0 0") + %objective.location = %objective.position; + + // find targeted object ID's + if(%objective.targetObject !$= "") + %objective.targetObjectId = NameToId(%objective.targetObject); + else + %objective.targetObjectId = -1; + + if(%objective.targetClientObject !$= "") + %objective.targetClientId = NameToId(%objective.targetClient); + else + %objective.targetClientId = -1; + + if (%objective.position $= "0 0 0") + { + if (%objective.location $= "0 0 0") + { + if (%objective.targetObjectId > 0) + %objective.position = %objective.targetObjectId.position; + } + else + %objective.position = %objective.location; + } + } + + //finally, sort the objectiveQ + $ObjectiveQ[%team].sortByWeight(); +} + +//This function is designed to clear out the objective Q's, and clear the task lists from all the AIs +function AIMissionEnd() +{ + //disable the AI system + AISystemEnabled(false); + + //loop through the client list, and clear the tasks of each bot + %count = ClientGroup.getCount(); + for (%i = 0; %i < %count; %i++) + { + %client = ClientGroup.getObject(%i); + if (%client.isAIControlled()) + { + //cancel the respawn thread + if (%client.respawnThread > 0) + { + cancel(%client.respawnThread); + %client.respawnThread = ""; + } + + //cancel the objective reassessment thread + if (%client.objectiveThread > 0) + { + cancel(%client.objectiveThread); + %client.objectiveThread = ""; + } + + AIUnassignClient(%client); + %client.clearTasks(); + %client.clearStep(); + %client.defaultTasksAdded = false; + %client.missionCycleCleanup(); + } + } + + //clear the objective Q's + for (%i = 0; %i <= Game.numTeams; %i++) + { + if (isObject($ObjectiveQ[%i])) + { + $ObjectiveQ[%i].clear(); + $ObjectiveQ[%i].delete(); + } + $ObjectiveQ[%i] = ""; + } + + //now delete all the sets used by the AI system... + if (isObject($AIBombLocationSet)) + $AIBombLocationSet.delete(); + $AIBombLocationSet = ""; + + if (isObject($AIInvStationSet)) + $AIInvStationSet.delete(); + $AIInvStationSet = ""; + + if (isObject($AIItemSet)) + $AIItemSet.delete(); + $AIItemSet = ""; + + if (isObject($AIGrenadeSet)) + $AIGrenadeSet.delete(); + $AIGrenadeSet = ""; + + if (isObject($AIWeaponSet)) + $AIWeaponSet.delete(); + $AIWeaponSet = ""; + + if (isObject($AIRemoteTurretSet)) + $AIRemoteTurretSet.delete(); + $AIRemoteTurretSet = ""; + + if (isObject($AIDeployedMineSet)) + $AIDeployedMineSet.delete(); + $AIDeployedMineSet = ""; + + if (isObject($AIVehicleSet)) + $AIVehicleSet.delete(); + $AIVehicleSet = ""; +} + +//FUNCTIONS ON EACH OBJECT EXECUTED AT MISSION LOAD TIME +function SimGroup::AIMissionInit(%this) +{ + for(%i = 0; %i < %this.getCount(); %i++) + %this.getObject(%i).AIMissionInit(%this); +} + +function GameBase::AIMissionInit(%this) +{ + %this.getDataBlock().AIMissionInit(%this); +} + +function StationInventory::AIMissionInit(%data, %object) +{ + $AIInvStationSet.add(%object); +} + +function Flag::AIMissionInit(%data, %object) +{ + if (%object.team >= 0) + $AITeamFlag[%object.team] = %object; +} + +function SimObject::AIMissionInit(%this) +{ + //this function is declared to prevent console error msg spam... +} + +function ItemData::AIMissionInit(%data, %object) +{ + $AIItemSet.add(%object); +} + +function AIThrowObject(%object) +{ + $AIItemSet.add(%object); +} + +function AIGrenadeThrown(%object) +{ + $AIGrenadeSet.add(%object); +} + +function AIDeployObject(%client, %object) +{ + //first, set the object id on the client + %client.lastDeployedObject = %object; + + //now see if it was a turret... + %type = %object.getDataBlock().getName(); + if (%type $= "TurretDeployedFloorIndoor" || %type $= "TurretDeployedWallIndoor" || + %type $= "TurretDeployedCeilingIndoor" || %type $= "TurretDeployedOutdoor") + { + $AIRemoteTurretSet.add(%object); + } +} + +function AIDeployMine(%object) +{ + $AIDeployedMineSet.add(%object); +} + +function AIVehicleMounted(%vehicle) +{ + $AIVehicleSet.add(%vehicle); +} + +//OTHER UTILITY FUNCTIONS + +function AIConnection::onAIDrop(%client) +{ + //make sure we're trying to drop an AI + if (!isObject(%client) || !%client.isAIControlled()) + return; + + //clear the ai from any objectives, etc... + AIUnassignClient(%client); + %client.clearTasks(); + %client.clearStep(); + %client.defaultTasksAdded = false; + + //kill the player, which should cause the Game object to perform whatever cleanup is required. + if (isObject(%client.player)) + %client.player.scriptKill(0); + + //do the nav graph cleanup + %client.missionCycleCleanup(); +} + +function AIConnection::endMission(%client) +{ + //cancel the respawn thread, and spawn them manually + cancel(%client.respawnThread); + cancel(%client.objectiveThread); +} + +function AIConnection::startMission(%client) +{ + //assign the team + if (%client.team <= 0) + Game.assignClientTeam(%client); + + //set the client's sensor group... + setTargetSensorGroup( %client.target, %client.team ); + %client.setSensorGroup( %client.team ); + + //sends a message so everyone know the bot is in the game... + Game.AIHasJoined(%client); + + //spawn the bot... + onAIRespawn(%client); +} + +function AIConnection::onAIConnect(%client, %name, %team, %skill, %offense, %voice, %voicePitch) +{ + // Sex/Race defaults + %client.sex = "Male"; + %client.race = "Human"; + %client.armor = "Light"; + + //setup the voice and voicePitch + if (%voice $= "") + %voice = "Bot1"; + %client.voice = %voice; + %client.voiceTag = addTaggedString(%voice); + + if (%voicePitch $= "" || %voicePitch < 0.5 || %voicePitch > 2.0) + %voicePitch = 1.0; + %client.voicePitch = %voicePitch; + + if ( getRandom() > 0.5 ) + %client.skin = addTaggedString( "basebot" ); + else + %client.skin = addTaggedString( "basebbot" ); + + %client.name = addTaggedString( "\cp\c9" @ %name @ "\co" ); + %client.nameBase = %name; + + echo(%client.name); + echo("CADD: " @ %client @ " " @ %client.getAddress()); + $HostGamePlayerCount++; + + //setup the target for use with the sensor net, etc... + %client.target = allocClientTarget(%client, %client.name, "", %client.voiceTag, '_ClientConnection', 0, 0, %client.voicePitch); + + //i need to send a "silent" version of this for single player but still use the callback -jr` + if($currentMissionType $= "SinglePlayer") + messageAllExcept(%client, -1, 'MsgClientJoin', "", %name, %client, %client.target, true); + else + messageAllExcept(%client, -1, 'MsgClientJoin', '\c1%1 joined the game.', %name, %client, %client.target, true); + + //set the initial team - Game.assignClientTeam() should be called later on... + %client.team = %team; + + //assign the skill + %client.setSkillLevel(%skill); + + //assign the affinity + %client.offense = %offense; + + //clear any flags + %client.stop(); // this will clear the players move state + %client.clearStep(); + %client.lastDamageClient = -1; + %client.lastDamageTurret = -1; + %client.setEngageTarget(-1); + %client.setTargetObject(-1); + %client.objective = ""; + + //clear the defaulttasks flag + %client.defaultTasksAdded = false; + + //if the mission is already running, spawn the bot + if ($missionRunning) + %client.startMission(); +} + +// This routes through C++ code so profiler can register it. Also, the console function +// ProfilePatch1() tracks time spent (at MS resolution), # calls, average time per call. +// See console variables $patch1Total (MS so far in routine), $patch1Avg (average MS +// per call), and $patch1Calls (# of calls). +function patchForTimeTest(%client) +{ + if( isObject( Game ) ) + Game.AIChooseGameObjective(%client); +} + +function AIReassessObjective(%client) +{ + ProfilePatch1(patchForTimeTest, %client); + // Game.AIChooseGameObjective(%client); + schedule(5000, %client, "AIReassessObjective", %client); +} + +function onAIRespawn(%client) +{ + %markerObj = Game.pickPlayerSpawn(%client, true); + Game.createPlayer(%client, %markerObj); + + //make sure the player object is the AI's control object - even during the mission warmup time + //the function AISystemEnabled(true/false) will control whether they actually move... + %client.setControlObject(%client.player); + + if (%client.objective) + error("ERROR!!! " @ %client @ " is still assigned to objective: " @ %client.objective); + + //clear the objective and choose a new one + AIUnassignClient(%client); + %client.stop(); + %client.clearStep(); + %client.lastDamageClient = -1; + %client.lastDamageTurret = -1; + %client.setEngageTarget(-1); + %client.setTargetObject(-1); + %client.pilotVehicle = false; + + //set the spawn time + %client.spawnTime = getSimTime(); + %client.respawnThread = ""; + + //timeslice the objective reassessment for the bots + if (%client.objectiveThread <= 0) + { + %curTime = getSimTime(); + %remainder = %curTime % 5000; + %schedTime = $AITimeSliceReassess - %remainder; + if (%schedTime <= 0) + %schedTime += 5000; + %client.objectiveThread = schedule(%schedTime, %client, "AIReassessObjective", %client); + + //set the next time slice "slot" + $AITimeSliceReassess += 300; + if ($AITimeSliceReassess > 5000) + $AITimeSliceReassess -= 5000; + } + + //call the game specific spawn function + Game.onAIRespawn(%client); +} + +function AIClientIsAlive(%client, %duration) +{ + if(%client < 0 || %client.player <= 0) + return false; + if (isObject(%client.player)) + { + %state = %client.player.getState(); + if (%state !$= "Dead" && %state !$= "" && (%duration $= "" || getSimTime() - %client.spawnTime >= %duration)) + return true; + else + return false; + } + else + return false; +} + +//------------------------------ +function AIFindClosestEnemy(%srcClient, %radius, %losTimeout) +{ + //see if there's an enemy near our defense location... + if (isObject(%srcClient.player)) + %srcLocation = %srcClient.player.getWorldBoxCenter(); + else + %srcLocation = "0 0 0"; + return AIFindClosestEnemyToLoc(%srcClient, %srcLocation, %radius, %losTimeout, false, true); +} + +function AIFindClosestEnemyToLoc(%srcClient, %srcLocation, %radius, %losTimeout, %ignoreLOS, %distFromClient) +{ + if (%ignoreLOS $= "") + %ignoreLOS = false; + if (%distFromClient $= "") + %distFromClient = false; + + %count = ClientGroup.getCount(); + %closestClient = -1; + %closestDistance = 32767; + for(%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + + //make sure we find someone who's alive + if (AIClientIsAlive(%cl) && %cl.team != %srcClient.team) + { + %clIsCloaked = false; + if (%cl.player.getInventory("CloakingPack") > 0 && %cl.player.getImageState($BackpackSlot) $= "activate") + %clIsCloaked = true; + + //make sure the client can see the enemy + %hasLOS = %srcClient.hasLOSToClient(%cl); + %losTime = %srcClient.getClientLOSTime(%cl); + if (%ignoreLOS || %hasLOS || (%losTime < %losTimeout && AIClientIsAlive(%cl, %losTime + 1000))) + { + %testPos = %cl.player.getWorldBoxCenter(); + if (%distFromClient) + %distance = %srcClient.getPathDistance(%testPos); + else + %distance = AIGetPathDistance(%srcLocation, %testPos); + if (%distance > 0 && (%radius < 0 || %distance < %radius) && %distance < %closestDistance && (!%clIsCloaked || %distance < 8)) + { + %closestClient = %cl; + %closestDistance = %distance; + } + } + } + } + + return %closestClient SPC %closestDistance; +} + +function AIFindClosestEnemyPilot(%client, %radius, %losTimeout) +{ + //loop through the vehicle set, looking for pilotted vehicles... + %closestPilot = -1; + %closestDist = %radius; + %count = $AIVehicleSet.getCount(); + for (%i = 0; %i < %count; %i++) + { + //first, make sure the vehicle is mounted by pilotted + %vehicle = $AIVehicleSet.getObject(%i); + %pilot = %vehicle.getMountNodeObject(0); + if (%pilot <= 0 || !AIClientIsAlive(%pilot.client)) + continue; + + //make sure the pilot is an enemy + if (%pilot.client.team == %client.team) + continue; + + //see if the pilot has been seen by the client + %hasLOS = %client.hasLOSToClient(%pilot.client); + %losTime = %client.getClientLOSTime(%pilot.client); + if (%hasLOS || (%losTime < %losTimeout && AIClientIsAlive(%pilot.client, %losTime + 1000))) + { + //see if it's the closest + %clientPos = %client.player.getWorldBoxCenter(); + %pilotPos = %pilot.getWorldBoxCenter(); + %dist = VectorDist(%clientPos, %pilotPos); + if (%dist < %closestDist) + { + %closestPilot = %pilot.client; + %closestDist = %dist; + } + } + } + + return %closestPilot SPC %closestDist; +} + +function AIFindAIClientInView(%srcClient, %team, %radius) +{ + //make sure the player is alive + if (! AIClientIsAlive(%srcClient)) + return -1; + + //get various info about the player's eye + %srcEyeTransform = %srcClient.player.getEyeTransform(); + %srcEyePoint = firstWord(%srcEyeTransform) @ " " @ getWord(%srcEyeTransform, 1) @ " " @ getWord(%srcEyeTransform, 2); + %srcEyeVector = VectorNormalize(%srcClient.player.getEyeVector()); + + //see if there's an enemy near our defense location... + %count = ClientGroup.getCount(); + %viewedClient = -1; + %clientDot = -1; + for(%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + + //make sure we find an AI who's alive and not the srcClient + if (%cl != %srcClient && AIClientIsAlive(%cl) && %cl.isAIControlled() && (%team < 0 || %cl.team == %team)) + { + //make sure the player is within range + %clPos = %cl.player.getWorldBoxCenter(); + %distance = VectorDist(%clPos, %srcEyePoint); + if (%radius <= 0 || %distance <= %radius) + { + //create the vector from the srcClient to the client + %clVector = VectorNormalize(VectorSub(%clPos, %srcEyePoint)); + + //see if the dot product is greater than our current, and greater than 0.6 + %dot = VectorDot(%clVector, %srcEyeVector); + + if (%dot > 0.6 && %dot > %clientDot) + { + %viewedClient = %cl; + %clientDot = %dot; + } + } + } + } + + return %viewedClient; +} + +//----------------------------------------------------------------------------- +//AI VEHICLE FUNCTIONS + +function Armor::AIonMount(%this, %obj, %vehicle, %node) +{ + //set the client var... + %client = %obj.client; + %client.turretMounted = -1; + + //make sure the AI was *supposed* to mount the vehicle + if (!%client.isMountingVehicle()) + { + AIDisembarkVehicle(%client); + return; + } + + //get the vehicle's pilot + %pilot = %vehicle.getMountNodeObject(0); + + //make sure the bot is in node 0 if'f the bot is piloting the vehicle + if ((%node == 0 && !%client.pilotVehicle) || (%node > 0 && %client.pilotVehicle)) + { + AIDisembarkVehicle(%client); + return; + } + + //make sure the bot didn't is on the same team as the pilot + if (%pilot > 0 && isObject(%pilot) && %pilot.client.team != %client.team) + { + AIDisembarkVehicle(%client); + return; + } + + //if we're supposed to pilot the vehicle, set the control object + if (%client.pilotVehicle) + %client.setControlObject(%vehicle); + + //each vehicle may be built differently... + if (%vehicle.getDataBlock().getName() $= "AssaultVehicle") + { + //node 1 is this vehicle's turret seat + if (%node == 1) + { + %turret = %vehicle.getMountNodeObject(10); + %skill = %client.getSkillLevel(); + %turret.setSkill(%skill); + %client.turretMounted = %turret; + %turret.setAutoFire(true); + } + } + + else if (%vehicle.getDataBlock().getName() $= "BomberFlyer") + { + //node 1 is this vehicle's turret seat + if (%node == 1) + { + %turret = %vehicle.getMountNodeObject(10); + %skill = %client.getSkillLevel(); + %turret.setSkill(%skill); + %client.turretMounted = %turret; + %client.setTurretMounted(%turret); + %turret.setAutoFire(true); + } + } +} + +function Armor::AIonUnMount(%this, %obj, %vehicle, %node) +{ + //get the client var + %client = %obj.client; + + //reset the control object + if (%client.pilotVehicle) + %client.setControlObject(%client.player); + %client.pilotVehicle = false; + + //if the client had mounted a turret, turn the turret back off + if (%client.turretMounted > 0) + %client.turretMounted.setAutoFire(false); + %client.turretMounted = -1; + %client.setTurretMounted(-1); + + // reset the turret skill level + if(%vehicle.getDataBlock().getName() $= "AssaultVehicle") + if (%node == 1) + %vehicle.getMountNodeObject(10).setSkill(1.0); + + if(%vehicle.getDataBlock().getName() $= "BomberFlyer") + if(%node == 1) + %vehicle.getMountNodeObject(10).setSkill(1.0); +} + +function AIDisembarkVehicle(%client) +{ + if (%client.player.isMounted()) + { + if (%client.pilotVehicle) + %client.setControlObject(%client.player); + %client.pressJump(); + } +} + +function AIProcessVehicle(%client) +{ + //see if we're mounted on a turret, and if that turret has a target + if (%client.turretMounted > 0) + { + %turretDB = %client.turretMounted.getDataBlock(); + + //see if we're in a bomber close to a bomb site... + if (%turretDB.getName() $= "BomberTurret") + { + %clientPos = getWords(%client.player.position, 0, 1) @ " 0"; + %found = false; + %count = $AIBombLocationSet.getCount(); + for (%i = 0; %i < %count; %i++) + { + %bombObj = $AIBombLocationSet.getObject(%i); + %bombLocation = %bombObj.location; + + //make sure the objective was issued by someone in the vehicle + if (%bombObj.issuedByClientId.vehicleMounted == %client.vehicleMounted) + { + //find out where the bomb is going to drop... first, how high up are we... + %bombLocation2D = getWord(%bombLocation, 0) SPC getWord(%bombLocation, 1) SPC "0"; + %height = getWord(%client.vehicleMounted.position, 2) - getWord(%bombLocation, 2); + + //find out how long it'll take the bomb to fall that far... + //assume no initial velocity in the Z axis... + %timeToFall = mSqrt((2.0 * %height) / 9.81); + + //how fast is the vehicle moving in the XY plane... + %myLocation = %client.vehicleMounted.position; + %myLocation2D = getWord(%myLocation, 0) SPC getWord(%myLocation, 1) SPC "0"; + %vel = %client.vehicleMounted.getVelocity(); + %vel2D = getWord(%vel, 0) SPC getWord(%vel, 1) SPC "0"; + + %bombImpact2D = VectorAdd(%myLocation2D, VectorScale(%vel2D, %timeToFall)); + + //see if the bomb inpact position is within 20m of the desired bomb site... + %distToBombsite2D = VectorDist(%bombImpact2D, %bombLocation2D); + if (%height > 20 && %distToBombsite2D < 25) + { + %found = true; + break; + } + } + } + + //see if we found a bomb site + if (%found) + { + %client.turretMounted.selectedWeapon = 2; + %turretDB.onTrigger(%client.turretMounted, 0, true); + return; + } + } + + //we're not bombing, make sure we have the regular weapon selected + %client.turretMounted.selectedWeapon = 1; + if (isObject(%client.turretMounted.getTargetObject())) + %turretDB.onTrigger(%client.turretMounted, 0, true); + else + %turretDB.onTrigger(%client.turretMounted, 0, false); + } +} + +function AIPilotVehicle(%client) +{ + //this is not very well supported, but someone will find a use for this function... +} \ No newline at end of file diff --git a/base/scripts/aiBotProfiles.cs b/base/scripts/aiBotProfiles.cs new file mode 100644 index 0000000..9698212 --- /dev/null +++ b/base/scripts/aiBotProfiles.cs @@ -0,0 +1,551 @@ +function aiConnectByIndex(%index, %team) +{ + if (%index < 0 || $BotProfile[%index, name] $= "") + return; + + if (%team $= "") + %team = -1; + + //initialize the profile, if required + if ($BotProfile[%index, skill] $= "") + $BotProfile[%index, skill] = 0.5; + + return aiConnect($BotProfile[%index, name], %team, $BotProfile[%index, skill], $BotProfile[%index, offense], $BotProfile[%index, voice], $BotProfile[%index, voicePitch]); +} + +function aiConnectByName(%name, %team) +{ + if (%name $= "") + return; + + if (%team $= "") + %team = -1; + + %foundIndex = -1; + %index = 0; + while ($BotProfile[%index, name] !$= "") + { + if ($BotProfile[%index, name] $= %name) + { + %foundIndex = %index; + break; + } + else + %index++; + } + + //see if we found our bot + if (%foundIndex >= 0) + return aiConnectByIndex(%foundIndex, %team); + + //else add a new bot profile + else + { + $BotProfile[%index, name] = %name; + return aiConnectByIndex(%index, %team); + } +} + +function aiBotAlreadyConnected(%name) +{ + %count = ClientGroup.getCount(); + for (%i = 0; %i < %count; %i++) + { + %client = ClientGroup.getObject(%i); + if (%name $= getTaggedString(%client.name)) + return true; + } + + return false; +} + +function aiConnectMultiple(%numToConnect, %minSkill, %maxSkill, %team) +{ + //validate the args + if (%numToConnect <= 0) + return; + + if (%maxSkill < 0) + %maxSkill = 0; + + if (%minSkill >= %maxSkill) + %minSkill = %maxSkill - 0.01; + + if (%team $= "") + %team = -1; + + //loop through the profiles, and set the flags and initialize + %numBotsAlreadyConnected = 0; + %index = 0; + while ($BotProfile[%index, name] !$= "") + { + //initialize the profile if required + if ($BotProfile[%index, skill] $= "") + $BotProfile[%index, skill] = 0.5; + + //if the bot is already playing, it shouldn't be reselected + if (aiBotAlreadyConnected($BotProfile[%index, name])) + { + $BotProfile[%index, canSelect] = false; + %numBotsAlreadyConnected++; + } + else + $BotProfile[%index, canSelect] = true; + + %index++; + } + + //make sure we're not trying to add more bots than we have... + if (%numToConnect > (%index - %numBotsAlreadyConnected)) + %numToConnect = (%index - %numBotsAlreadyConnected); + + //build the array of possible candidates... + %index = 0; + %tableCount = 0; + while ($BotProfile[%index, name] !$= "") + { + %botSkill = $BotProfile[%index, skill]; + + //see if the skill is within range + if ($BotProfile[%index, canSelect] && %botSkill >= %minSkill && %botSkill <= %maxSkill) + { + $BotSelectTable[%tableCount] = %index; + %tableCount++; + $BotProfile[%index, canSelect] = false; + } + + //check the next bot + %index++; + } + + //if we didn't find enough bots, we'll have to search the rest of the profiles... + %searchMinSkill = %minSkill; + while ((%tableCount < %numToConnect) && (%searchMinSkill > 0)) + { + %index = 0; + while ($BotProfile[%index, name] !$= "") + { + %botSkill = $BotProfile[%index, skill]; + + //see if the skill is within range + if ($BotProfile[%index, canSelect] && %botSkill >= (%searchMinSkill - 0.1) && %botSkill <= %searchMinSkill) + { + $BotSelectTable[%tableCount] = %index; + %tableCount++; + $BotProfile[%index, canSelect] = false; + } + + //check the next bot + %index++; + } + + //now lower the search min Skill, and take another pass at a lower skill level + %searchMinSkill = %searchMinSkill - 0.1; + } + + //if we're still short of bots, search the higher skill levels + %searchMaxSkill = %maxSkill; + while ((%tableCount < %numToConnect) && (%searchMaxSkill < 1.0)) + { + %index = 0; + while ($BotProfile[%index, name] !$= "") + { + %botSkill = $BotProfile[%index, skill]; + //see if the skill is within range + if ($BotProfile[%index, canSelect] && %botSkill >= %searchMaxSkill && %botSkill <= (%searchMaxSkill + 0.1)) + { + $BotSelectTable[%tableCount] = %index; + %tableCount++; + $BotProfile[%index, canSelect] = false; + } + + //check the next bot + %index++; + } + + //now raise the search max Skill, and take another pass at a higher skill level + %searchMaxSkill = %searchMaxSkill + 0.1; + } + + //since the numToConnect was capped at the table size, we should have enough bots in the + //table to fulfill the quota + + //loop through five times, picking random indices, and adding them until we've added enough + %numBotsConnected = 0; + for (%i = 0; %i < 5; %i++) + { + for (%j = 0; %j < %numToConnect; %j++) + { + %selectedIndex = mFloor(getRandom() * (%tableCount - 0.1)); + if ($BotSelectTable[%selectedIndex] >= 0) + { + //connect the bot + %botClient = aiConnectByIndex($BotSelectTable[%selectedIndex], %team); + %numBotsConnected++; + + //adjust the skill level, if required + %botSkill = %botClient.getSkillLevel(); + if (%botSkill < %minSkill || %botSkill > %maxSkill) + { + %newSkill = %minSKill + (getRandom() * (%maxSkill - %minSkill)); + %botClient.setSkillLevel(%newSkill); + } + + //clear the table entry to avoid connecting duplicates + $BotSelectTable[%selectedIndex] = -1; + + //see if we've connected enough + if (%numBotsConnected == %numToConnect) + return; + } + } + } + + //at this point, we've looped though the table, and kept hitting duplicates, search the table sequentially + for (%i = 0; %i < %tableCount; %i++) + { + if ($BotSelectTable[%i] >= 0) + { + //connect the bot + %botClient = aiConnectByIndex($BotSelectTable[%i], %team); + %numBotsConnected++; + + //adjust the skill level, if required + %botSkill = %botClient.getSkillLevel(); + if (%botSkill < %minSkill || %botSkill > %maxSkill) + { + %newSkill = %minSKill + (getRandom() * (%maxSkill - %minSkill)); + %botClient.setSkillLevel(%newSkill); + } + + //clear the table entry to avoid connecting duplicates + $BotSelectTable[%i] = -1; + + //see if we've connected enough + if (%numBotsConnected == %numToConnect) + return; + } + } +} + +$BotProfile[0, name] = "Kidney BOT"; +$BotProfile[0, skill] = 0.99; +$BotProfile[0, offense] = true; +$BotProfile[0, voicePitch] = 0.875; +$BotProfile[1, name] = "BOT Milk?"; +$BotProfile[1, skill] = 0.99; +$BotProfile[1, offense] = true; +$BotProfile[1, voicePitch] = 0.89; +$BotProfile[2, name] = "UberBOT"; +$BotProfile[2, skill] = 0.99; +$BotProfile[2, offense] = true; +$BotProfile[2, voicePitch] = 0.95; +$BotProfile[3, name] = "SymBOT"; +$BotProfile[3, skill] = 0.99; +$BotProfile[3, offense] = true; +$BotProfile[3, voicePitch] = 1.1; +$BotProfile[4, name] = "QIX BOT"; +$BotProfile[4, skill] = 0.99; +$BotProfile[4, offense] = false; +$BotProfile[4, voicePitch] = 1.12; +$BotProfile[5, name] = "Rated BOT"; +$BotProfile[5, skill] = 0.99; +$BotProfile[5, offense] = true; +$BotProfile[5, voicePitch] = 0.92; +$BotProfile[6, name] = "Dr.BOTward"; +$BotProfile[6, skill] = 0.99; +$BotProfile[6, offense] = true; +$BotProfile[6, voicePitch] = 0.96; +$BotProfile[7, name] = "Frank BOTzo"; +$BotProfile[7, skill] = 0.99; +$BotProfile[7, offense] = true; +$BotProfile[7, voicePitch] = 0.88; +$BotProfile[8, name] = "Missing BOT"; +$BotProfile[8, skill] = 0.99; +$BotProfile[8, offense] = true; +$BotProfile[8, voicePitch] = 1.125; +$BotProfile[9, name] = "Jett BOT"; +$BotProfile[9, skill] = 0.99; +$BotProfile[9, offense] = false; +$BotProfile[9, voicePitch] = 1.12; +$BotProfile[10, name] = "HexaBOTic"; +$BotProfile[10, skill] = 1.99; +$BotProfile[10, offense] = true; +$BotProfile[10, voicePitch] = 0.895; +$BotProfile[11, name] = "Sne/\kBOT"; +$BotProfile[11, skill] = 0.99; +$BotProfile[11, offense] = true; +$BotProfile[11, voicePitch] = 0.885; +$BotProfile[12, name] = "DiamondBOT"; +$BotProfile[12, skill] = 0.99; +$BotProfile[12, offense] = true; +$BotProfile[12, voicePitch] = 1.05; +$BotProfile[13, name] = "Jimmy BOT"; +$BotProfile[13, skill] = 0.99; +$BotProfile[13, offense] = true; +$BotProfile[13, voicePitch] = 1.09; +$BotProfile[14, name] = "Skeet BOT"; +$BotProfile[14, skill] = 0.99; +$BotProfile[14, offense] = false; +$BotProfile[14, voicePitch] = 1.0; +$BotProfile[15, name] = "BigBOTDawg"; +$BotProfile[15, skill] = 0.99; +$BotProfile[15, offense] = true; +$BotProfile[15, voicePitch] = 0.9; +$BotProfile[16, name] = "BOTIN8R"; +$BotProfile[16, skill] = 0.99; +$BotProfile[16, offense] = true; +$BotProfile[16, voicePitch] = 0.97; +$BotProfile[17, name] = "OrphanKazBOT"; +$BotProfile[17, skill] = 0.99; +$BotProfile[17, offense] = true; +$BotProfile[17, voicePitch] = 0.925; +$BotProfile[18, name] = "Terrible BOT"; +$BotProfile[18, skill] = 0.99; +$BotProfile[18, offense] = true; +$BotProfile[18, voicePitch] = 1.115; +$BotProfile[19, name] = "Mongo BOT"; +$BotProfile[19, skill] = 0.99; +$BotProfile[19, offense] = false; +$BotProfile[19, voicePitch] = 1.12; +$BotProfile[20, name] = "East BOT"; +$BotProfile[20, skill] = 0.99; +$BotProfile[20, offense] = true; +$BotProfile[20, voicePitch] = 1.125; +$BotProfile[21, name] = "Snow LeoBOT"; +$BotProfile[21, skill] = 0.99; +$BotProfile[21, offense] = true; +$BotProfile[21, voicePitch] = 1.05; +$BotProfile[22, name] = "Twitch BOT"; +$BotProfile[22, skill] = 0.99; +$BotProfile[22, offense] = true; +$BotProfile[22, voicePitch] = 0.893; +$BotProfile[23, name] = "ShazBOT"; +$BotProfile[23, skill] = 0.99; +$BotProfile[23, offense] = true; +$BotProfile[23, voicePitch] = 0.879; + +$BotProfile[24, name] = "Fishbait"; +$BotProfile[24, skill] = 0.00; +$BotProfile[24, offense] = true; +$BotProfile[24, voicePitch] = 1.125; +$BotProfile[25, name] = "Skulker"; +$BotProfile[25, skill] = 0.00; +$BotProfile[25, offense] = false; +$BotProfile[25, voicePitch] = 1.1; +$BotProfile[26, name] = "Dogstar"; +$BotProfile[26, skill] = 0.00; +$BotProfile[26, offense] = false; +$BotProfile[26, voicePitch] = 1.02; +$BotProfile[27, name] = "Bonehead"; +$BotProfile[27, skill] = 0.00; +$BotProfile[27, offense] = false; +$BotProfile[27, voicePitch] = 0.975; +$BotProfile[28, name] = "Torus"; +$BotProfile[28, skill] = 0.00; +$BotProfile[28, offense] = false; +$BotProfile[28, voicePitch] = 0.9; +$BotProfile[29, name] = "Glitter"; +$BotProfile[29, skill] = 0.05; +$BotProfile[29, offense] = true; +$BotProfile[29, voicePitch] = 1.1; +$BotProfile[30, name] = "Wirehead"; +$BotProfile[30, skill] = 0.05; +$BotProfile[30, offense] = false; +$BotProfile[30, voicePitch] = 1.03; +$BotProfile[31, name] = "Ironbreath"; +$BotProfile[31, skill] = 0.10; +$BotProfile[31, offense] = false; +$BotProfile[31, voicePitch] = 1.02; +$BotProfile[32, name] = "Hagstomper"; +$BotProfile[32, skill] = 0.10; +$BotProfile[32, offense] = false; +$BotProfile[32, voicePitch] = 0.899; +$BotProfile[33, name] = "Doormat"; +$BotProfile[33, skill] = 0.15; +$BotProfile[33, offense] = false; +$BotProfile[33, voicePitch] = 0.97; +$BotProfile[34, name] = "TickTock"; +$BotProfile[34, skill] = 0.15; +$BotProfile[34, offense] = true; +$BotProfile[34, voicePitch] = 1.07; +$BotProfile[35, name] = "ElectroJag"; +$BotProfile[35, skill] = 0.20; +$BotProfile[35, offense] = false; +$BotProfile[35, voicePitch] = 0.915; +$BotProfile[36, name] = "Jetsam"; +$BotProfile[36, skill] = 0.20; +$BotProfile[36, offense] = false; +$BotProfile[36, voicePitch] = 1.09; +$BotProfile[37, name] = "Newguns"; +$BotProfile[37, skill] = 0.25; +$BotProfile[37, offense] = false; +$BotProfile[37, voicePitch] = 0.885; +$BotProfile[38, name] = "WrongWay"; +$BotProfile[38, skill] = 0.25; +$BotProfile[38, offense] = false; +$BotProfile[38, voicePitch] = 0.875; +$BotProfile[39, name] = "Ragbinder"; +$BotProfile[39, skill] = 0.30; +$BotProfile[39, offense] = true; +$BotProfile[39, voicePitch] = 1.1; +$BotProfile[40, name] = "Retch"; +$BotProfile[40, skill] = 0.30; +$BotProfile[40, offense] = false; +$BotProfile[40, voicePitch] = 1.12; +$BotProfile[41, name] = "Hotfoot"; +$BotProfile[41, skill] = 0.35; +$BotProfile[41, offense] = false; +$BotProfile[41, voicePitch] = 0.93; +$BotProfile[42, name] = "Trail of Rust"; +$BotProfile[42, skill] = 0.35; +$BotProfile[42, offense] = false; +$BotProfile[42, voicePitch] = 0.88; +$BotProfile[43, name] = "Zigzag"; +$BotProfile[43, skill] = 0.40; +$BotProfile[43, offense] = false; +$BotProfile[43, voicePitch] = 0.89; +$BotProfile[44, name] = "Gray Sabot"; +$BotProfile[44, skill] = 0.40; +$BotProfile[44, offense] = true; +$BotProfile[44, voicePitch] = 0.879; +$BotProfile[45, name] = "Hellefleur"; +$BotProfile[45, skill] = 0.45; +$BotProfile[45, offense] = false; +$BotProfile[45, voicePitch] = 1.11; +$BotProfile[46, name] = "Slicer"; +$BotProfile[46, skill] = 0.45; +$BotProfile[46, offense] = false; +$BotProfile[46, voicePitch] = 1.12; +$BotProfile[47, name] = "Rampant"; +$BotProfile[47, skill] = 0.45; +$BotProfile[47, offense] = false; +$BotProfile[47, voicePitch] = 0.935; +$BotProfile[48, name] = "Troglodyte"; +$BotProfile[48, skill] = 0.45; +$BotProfile[48, offense] = true; +$BotProfile[48, voicePitch] = 1.121; +$BotProfile[49, name] = "Evenkill"; +$BotProfile[49, skill] = 0.50; +$BotProfile[49, offense] = false; +$BotProfile[49, voicePitch] = 1.05; +$BotProfile[50, name] = "Simrionic"; +$BotProfile[50, skill] = 0.50; +$BotProfile[50, offense] = false; +$BotProfile[50, voicePitch] = 0.895; +$BotProfile[51, name] = "Cathode Kiss"; +$BotProfile[51, skill] = 0.50; +$BotProfile[51, offense] = false; +$BotProfile[51, voicePitch] = 0.97; +$BotProfile[52, name] = "So Dark"; +$BotProfile[52, skill] = 0.55; +$BotProfile[52, offense] = true; +$BotProfile[52, voicePitch] = 1.01; +$BotProfile[53, name] = "Deathwind"; +$BotProfile[53, skill] = 0.55; +$BotProfile[53, offense] = false; +$BotProfile[53, voicePitch] = 1.12; +$BotProfile[54, name] = "Dharmic Sword"; +$BotProfile[54, skill] = 0.55; +$BotProfile[54, offense] = false; +$BotProfile[54, voicePitch] = 1.0; +$BotProfile[55, name] = "Demonshriek"; +$BotProfile[55, skill] = 0.60; +$BotProfile[55, offense] = false; +$BotProfile[55, voicePitch] = 1.05; +$BotProfile[56, name] = "Terrapin"; +$BotProfile[56, skill] = 0.60; +$BotProfile[56, offense] = true; +$BotProfile[56, voicePitch] = 1.085; +$BotProfile[57, name] = "No-Dachi"; +$BotProfile[57, skill] = 0.60; +$BotProfile[57, offense] = true; +$BotProfile[57, voicePitch] = 0.905; +$BotProfile[58, name] = "Irrelevant Smoke"; +$BotProfile[58, skill] = 0.65; +$BotProfile[58, offense] = false; +$BotProfile[58, voicePitch] = 0.935; +$BotProfile[59, name] = "Red Ghost"; +$BotProfile[59, skill] = 0.65; +$BotProfile[59, offense] = false; +$BotProfile[59, voicePitch] = 1.21; +$BotProfile[60, name] = "Perilous"; +$BotProfile[60, skill] = 0.65; +$BotProfile[60, offense] = true; +$BotProfile[60, voicePitch] = 0.895; +$BotProfile[61, name] = "The Golden"; +$BotProfile[61, skill] = 0.70; +$BotProfile[61, offense] = true; +$BotProfile[61, voicePitch] = 0.88; +$BotProfile[62, name] = "Vanguard"; +$BotProfile[62, skill] = 0.70; +$BotProfile[62, offense] = false; +$BotProfile[62, voicePitch] = 1.1; +$BotProfile[63, name] = "Heretik"; +$BotProfile[63, skill] = 0.70; +$BotProfile[63, offense] = true; +$BotProfile[63, voicePitch] = 0.945; +$BotProfile[64, name] = "Akhiles"; +$BotProfile[64, skill] = 0.75; +$BotProfile[64, offense] = true; +$BotProfile[64, voicePitch] = 0.915; +$BotProfile[65, name] = "Nova-9"; +$BotProfile[65, skill] = 0.75; +$BotProfile[65, offense] = false; +$BotProfile[65, voicePitch] = 1.12; +$BotProfile[66, name] = "Hotspur"; +$BotProfile[66, skill] = 0.75; +$BotProfile[66, offense] = true; +$BotProfile[66, voicePitch] = 1.11; +$BotProfile[67, name] = "DustWitch"; +$BotProfile[67, skill] = 0.80; +$BotProfile[67, offense] = true; +$BotProfile[67, voicePitch] = 0.875; +$BotProfile[68, name] = "Mojo Savage"; +$BotProfile[68, skill] = 0.80; +$BotProfile[68, offense] = true; +$BotProfile[68, voicePitch] = 1.05; +$BotProfile[69, name] = "Velomancer"; +$BotProfile[69, skill] = 0.80; +$BotProfile[69, offense] = false; +$BotProfile[69, voicePitch] = 1.085; +$BotProfile[70, name] = "Mohican"; +$BotProfile[70, skill] = 0.85; +$BotProfile[70, offense] = true; +$BotProfile[70, voicePitch] = 1.045; +$BotProfile[71, name] = "Widowmaker"; +$BotProfile[71, skill] = 0.85; +$BotProfile[71, offense] = true; +$BotProfile[71, voicePitch] = 1.04; +$BotProfile[72, name] = "Punch"; +$BotProfile[72, skill] = 0.85; +$BotProfile[72, offense] = true; +$BotProfile[72, voicePitch] = 0.89; +$BotProfile[73, name] = "Mameluke"; +$BotProfile[73, skill] = 0.90; +$BotProfile[73, offense] = false; +$BotProfile[73, voicePitch] = 0.882; +$BotProfile[74, name] = "King Snake"; +$BotProfile[74, skill] = 0.90; +$BotProfile[74, offense] = true; +$BotProfile[74, voicePitch] = 1.05; +$BotProfile[75, name] = "Sorrow"; +$BotProfile[75, skill] = 0.90; +$BotProfile[75, offense] = true; +$BotProfile[75, voicePitch] = 1.09; +$BotProfile[76, name] = "Devourer"; +$BotProfile[76, skill] = 0.95; +$BotProfile[76, offense] = true; +$BotProfile[76, voicePitch] = 0.929; +$BotProfile[77, name] = "Fated to Glory"; +$BotProfile[77, skill] = 0.95; +$BotProfile[77, offense] = true; +$BotProfile[77, voicePitch] = 0.915; +$BotProfile[78, name] = "Neon Blossom"; +$BotProfile[78, skill] = 0.95; +$BotProfile[78, offense] = false; +$BotProfile[78, voicePitch] = 1.125; +$BotProfile[79, name] = "Shiver"; +$BotProfile[79, skill] = 0.95; +$BotProfile[79, offense] = true; +$BotProfile[79, voicePitch] = 0.875; diff --git a/base/scripts/aiBountyGame.cs b/base/scripts/aiBountyGame.cs new file mode 100644 index 0000000..cb611fd --- /dev/null +++ b/base/scripts/aiBountyGame.cs @@ -0,0 +1,282 @@ +// bounty game support + +function BountyGame::onAIRespawn(%game, %client) +{ + //add the default task + if (! %client.defaultTasksAdded) + { + %client.defaultTasksAdded = true; + %client.addTask(AIPickupItemTask); + %client.addTask(AIUseInventoryTask); + %client.addTask(AITauntCorpseTask); + %client.addTask(AIEngageTurretTask); + %client.addTask(AIDetectMineTask); + %client.addTask(AIBountyPatrolTask); + %client.bountyTask = %client.addTask(AIBountyEngageTask); + } +} + +function BountyGame::AIInit(%game) +{ + AIInit(); +} + +function BountyGame::aiBountyAssignTarget(%game, %client, %target) +{ + if (!isObject(%client.bountyTask)) + %client.bountyTask = %client.addTask(AIBountyEngageTask); + %task = %client.bountyTask; + + %task.baseWeight = $AIWeightKillFlagCarrier[1]; + %task.buyEquipmentSet = "LightEnergySniper"; +} + +function AIBountyEngageTask::assume(%task, %client) +{ + %task.setWeightFreq(15); + %task.setMonitorFreq(15); +} + +function AIBountyEngageTask::retire(%task, %client) +{ + %client.setEngageTarget(-1); +} + +function AIBountyEngageTask::weight(%task, %client) +{ + %player = %client.player; + if (!isObject(%player)) + return; + + %clientPos = %player.getWorldBoxCenter(); + %client.shouldEngage = -1; + + //first, make sure we actually can fight + if (AIEngageOutOfAmmo(%client)) + { + %task.setWeight(0); + return; + } + + //see if anyone has fired on us recently... + %losTimeout = 5000 + ($AIClientLOSTimeout * %client.getSkillLevel()); + if (AIClientIsAlive(%client.lastDamageClient, %losTimeout) && getSimTime() - %client.lastDamageTime < %losTimeout) + { + //see if the attacker is either our target or, we are their target + if (%client.lastDamageClient == %client.objectiveTarget || %client.lastDamageClient.objectiveTarget == %client) + { + %currentTarget = %client.getEngageTarget(); + + //see if this is a new attacker + if (AIClientIsAlive(%currentTarget) && %currentTarget != %client.lastDamageClient) + { + %targPos = %currentTarget.player.getWorldBoxCenter(); + %curTargDist = %client.getPathDistance(%targPos); + + %newTargPos = %client.lastDamageClient.player.getWorldBoxCenter(); + %newTargDist = %client.getPathDistance(%newTargPos); + + //see if the new targ is no more than 30 m further + if (%newTargDist > 0 && %newTargDist < %curTargDist + 30) + %client.shouldEngage = %client.lastDamageClient; + else + %client.shouldEngage = %currentTarget; + } + else + %client.shouldEngage = %client.lastDamageClient; + } + + //otherwise we should run react to an attacker who is not really supposed to be attacking us... + else + %client.setDangerLocation(%client.player.position, 20); + } + + //no one has fired at us recently, see if we're near our objective target... + else + { + //see if we still have sight of the current target + %hasLOS = %client.hasLOSToClient(%client.objectiveTarget); + %losTime = %client.getClientLOSTime(%client.objectiveTarget); + if (%hasLOS || %losTime < %losTimeout) + %client.shouldEngage = %client.objectiveTarget; + else + %client.shouldEngage = -1; + } + + //now set the weight + if (%client.shouldEngage > 0) + %task.setWeight($AIWeightReturnFire); + else + %task.setWeight(0); +} + +function AIBountyEngageTask::monitor(%task, %client) +{ + if (AIClientIsAlive(%client.shouldEngage)) + %client.stepEngage(%client.shouldEngage); +} + +//----------------------------------------------------------------------------- +//AIPatrolTask used to wander around the map (DM and Hunters mainly) looking for something to do... + +function AIBountyPatrolTask::init(%task, %client) +{ +} + +function AIBountyPatrolTask::assume(%task, %client) +{ + %task.setWeightFreq(13); + %task.setMonitorFreq(13); + %task.findLocation = true; + %task.patrolLocation = "0 0 0"; + %task.idleing = false; + %task.idleEndTime = 0; +} + +function AIBountyPatrolTask::retire(%task, %client) +{ +} + +function AIBountyPatrolTask::weight(%task, %client) +{ + %task.setWeight($AIWeightPatrolling); +} + +function AIBountyPatrolTask::monitor(%task, %client) +{ + //this call works in conjunction with AIEngageTask + %client.setEngageTarget(%client.shouldEngage); + + //see if we're close enough to our patrol point + if (%task.idleing) + { + if (getSimTime() > %task.idleEndTime) + { + %task.findLocation = true; + %task.idleing = false; + } + } + + //see if we need to find a place to go... + else if (%task.findLocation) + { + //first, see if we're in need of either health, or ammo + //note: normally, I'd be tempted to put this kind of "looking for health" code + //into the AIPickupItemTask, however, that task will be used in CTF, where you + //don't want people on AIDefendLocation to leave their post to hunt for health, etc... + //AIPickupItemTask only deals with items within a 30m radius around the bot. + //AIPatrolTask will move the bot to the vicinity of an item, then AIPickUpItemTask + //will finish the job... + %foundItemLocation = false; + %damage = %client.player.getDamagePercent(); + if (%damage > 0.7) + { + //search for a health kit + %closestHealth = AIFindSafeItem(%client, "Health"); + if (%closestHealth > 0) + { + %task.patrolLocation = %closestHealth.getWorldBoxCenter(); + %foundItemLocation = true; + } + } + else if (AIEngageOutOfAmmo(%client)) + { + //search for a Ammo or a weapon... + %closestItem = AIFindSafeItem(%client, "Ammo"); + if (%closestItem > 0) + { + %task.patrolLocation = %closestItem.getWorldBoxCenter(); + %foundItemLocation = true; + } + } + + //now see if we don't really have good equipment... + if (!%foundItemLocation && AIEngageWeaponRating(%client) < 20) + { + //search for any useful item + %closestItem = AIFindSafeItem(%client, "Any"); + if (%closestItem > 0) + { + %task.patrolLocation = %closestItem.getWorldBoxCenter(); + %foundItemLocation = true; + } + } + //choose a randomish location only if we're not in need of health or ammo + if (!%foundItemLocation) + { + //find a random item/inventory in the map, and pick a spawn point near it... + %pickGraphNode = false; + %chooseSet = 0; + if ($AIInvStationSet.getCount() > 0) + %chooseSet = $AIInvStationSet; + else if ($AIWeaponSet.getCount() > 0) + %chooseSet = $AIWeaponSet; + else if ($AIItemSet.getCount() > 0) + %chooseSet = $AIItemSet; + + if (!%chooseSet) + %pickGraphNode = true; + + //here we pick whether we choose a random map point, or a point based on an item... + if (getRandom() < 0.3) + %pickGraphNode = true; + + //here we decide whether we should choose a player location... a bit of a cheat but + //it's scaled by the bot skill level + %pickPlayerLocation = false; + %skill = %client.getSkillLevel(); + if (%skill < 1.0) + %skill = %skill / 2.0; + if (getRandom() < (%skill * %skill) && AIClientIsAlive(%client.objectiveTarget)) + { + %task.patrolLocation = %client.objectiveTarget.player.getWorldBoxCenter(); + %pickGraphNode = false; + %pickPlayerLocation = true; + } + + if (!%pickGraphNode && !%pickPlayerLocation) + { + %itemCount = %chooseSet.getCount(); + %item = %chooseSet.getObject(getRandom() * (%itemCount - 0.1)); + %nodeIndex = navGraph.randNode(%item.getWorldBoxCenter(), 10, true, true); + if (%nodeIndex <= 0) + %pickGraphNode = true; + else + %task.patrolLocation = navGraph.randNodeLoc(%nodeIndex); + } + + //see if we failed above or have to pick just a random spot on the graph - use the spawn points... + if (%pickGraphNode) + { + %task.patrolLocation = Game.pickPlayerSpawn(%client, true); + if (%task.patrolLocation == -1) + { + %client.stepIdle(%client.player.getWorldBoxCenter()); + return; + } + } + } + + //now that we have a new location - move towards it + %task.findLocation = false; + %client.stepMove(%task.patrolLocation, 8.0); + } + + //else we're on patrol - see if we're close to our destination + else + { + %client.stepMove(%task.patrolLocation, 8.0); + %distToDest = %client.getPathDistance(%task.patrolLocation); + if (%distToDest > 0 && %distToDest < 10) + { + %task.idleing = true; + %task.idleEndTime = 4000 + getSimTime() + (getRandom() * 6000); + %client.stepIdle(%client.player.getWorldBoxCenter()); + } + } +} + +function aiB() +{ + exec("scripts/aiBountyGame"); +} \ No newline at end of file diff --git a/base/scripts/aiCTF.cs b/base/scripts/aiCTF.cs new file mode 100644 index 0000000..5ff0297 --- /dev/null +++ b/base/scripts/aiCTF.cs @@ -0,0 +1,93 @@ +//----------------------------------------------- +// AI functions for CTF + +function CTFGame::onAIRespawn(%game, %client) +{ + //add the default task + if (! %client.defaultTasksAdded) + { + %client.defaultTasksAdded = true; + %client.addTask(AIEngageTask); + %client.addTask(AIPickupItemTask); + %client.addTask(AITauntCorpseTask); + %client.addtask(AIEngageTurretTask); + %client.addtask(AIDetectMineTask); + } +} + +function CTFGame::AIInit(%game) +{ + // load external objectives files + loadObjectives(); + + for (%i = 1; %i <= %game.numTeams; %i++) + { + if (!isObject($ObjectiveQ[%i])) + { + $ObjectiveQ[%i] = new AIObjectiveQ(); + MissionCleanup.add($ObjectiveQ[%i]); + } + + error("team " @ %i @ " objectives load..."); + $ObjectiveQ[%i].clear(); + AIInitObjectives(%i, %game); + } + + //call the default AIInit() function + AIInit(); +} + +function CTFGame::AIplayerCaptureFlipFlop(%game, %player, %flipFlop) +{ +} + +function CTFGame::AIplayerTouchEnemyFlag(%game, %player, %flag) +{ +} + +function CTFGame::AIplayerTouchOwnFlag(%game, %player, %flag) +{ +} + +function CTFGame::AIflagCap(%game, %player, %flag) +{ + //signal the flag cap event + AIRespondToEvent(%player.client, 'EnemyFlagCaptured', %player.client); + // MES - changed above line - did not pass args in correct order +} + +function CTFGame::AIplayerDroppedFlag(%game, %player, %flag) +{ +} + +function CTFGame::AIflagReset(%game, %flag) +{ +} + +function CTFGame::onAIDamaged(%game, %clVictim, %clAttacker, %damageType, %implement) +{ + if (%clAttacker && %clAttacker != %clVictim && %clAttacker.team == %clVictim.team) + { + schedule(250, %clVictim, "AIPlayAnimSound", %clVictim, %clAttacker.player.getWorldBoxCenter(), "wrn.watchit", -1, -1, 0); + + //clear the "lastDamageClient" tag so we don't turn on teammates... unless it's uberbob! + %clVictim.lastDamageClient = -1; + } +} + +function CTFGame::onAIKilledClient(%game, %clVictim, %clAttacker, %damageType, %implement) +{ + if (%clVictim.team != %clAttacker.team) + DefaultGame::onAIKilledClient(%game, %clVictim, %clAttacker, %damageType, %implement); +} + +function CTFGame::onAIKilled(%game, %clVictim, %clAttacker, %damageType, %implement) +{ + DefaultGame::onAIKilled(%game, %clVictim, %clAttacker, %damageType, %implement); +} + +function CTFGame::onAIFriendlyFire(%game, %clVictim, %clAttacker, %damageType, %implement) +{ + if (%clAttacker && %clAttacker.team == %clVictim.team && %clAttacker != %clVictim) + AIMessageThread("Sorry", %clAttacker, %clVictim); +} diff --git a/base/scripts/aiChat.cs b/base/scripts/aiChat.cs new file mode 100644 index 0000000..7376817 --- /dev/null +++ b/base/scripts/aiChat.cs @@ -0,0 +1,729 @@ +//------------------------------ +//AI Message functions + +function AIFindCommanderAI(%omitClient) +{ + %count = ClientGroup.getCount(); + for (%i = 0; %i < %count; %i++) + { + %client = ClientGroup.getObject(%i); + if (%client != %omitClient && AIClientIsAlive(%client) && %client.isAIControlled()) + return %client; + } + + //didn't find anyone + return -1; +} + +$AIMsgThreadId = 0; +$AIMsgThreadActive = false; + +$AIMsgThreadIndex = 0; +$AIMsgThreadDelay = 0; +$AIMsgThreadTable[0] = ""; + +function AIProcessMessageTable(%threadId) +{ + //make sure we're still on the same thread + if (%threadId != $AIMsgThreadId) + return; + + //get the speaker, the message, and the delay + %speaker = getWord($AIMsgThreadTable[$AIMsgThreadIndex], 0); + %msg = getWord($AIMsgThreadTable[$AIMsgThreadIndex], 1); + %delay = getWord($AIMsgThreadTable[$AIMsgThreadIndex], 2); + + //make sure the speaker is still alive + if (%speaker $= "" || ! AIClientIsAlive(%speaker, $AIMsgThreadDelay)) + AIEndMessageThread(%threadId); + else + { + //play the msg, schedule the next msg, and increment the index + serverCmdCannedChat(%speaker, addTaggedString(%msg), true); + schedule(%delay, 0, "AIProcessMessageTable", %threadId); + $AIMsgThreadDelay = %delay; + $AIMsgThreadIndex++; + } +} + +function AIEndMessageThread(%threadId) +{ + if (%threadId == $AIMsgThreadId) + $AIMsgThreadActive = false; +} + +function AIMessageThreadTemplate(%type, %msg, %clSpeaker, %clListener) +{ + //abort if AI chat has been disabled + if ($AIDisableChat) + return; + + //initialize the params + if (%clListener $= "") + %clListener = 0; + + //abort if we're already in a thread + if ($AIMsgThreadActive) + return; + + //initialize the new thread vars + $AIMsgThreadId++; + $AIMsgThreadActive = true; + $AIMsgThreadIndex = 0; + $AIMsgThreadTable[1] = ""; + + switch$ (%type) + { + case "DefendBase": + if (%clListener < 0) + %clListener = AIFindCommanderAI(%clSpeaker); + + if (%clListener > 0) + { + //we have two people, create a semi-random conversation: + %index = -1; + + //see if we issue a command first + if (getRandom() < 0.30) + { + //which version of "defend our base"? + %randNum = getRandom(); + if (%randNum < 0.33) + $AIMsgThreadTable[%index++] = %clListener @ " ChatCmdDefendBase " @ 1250; + else if (%randNum < 0.66) + $AIMsgThreadTable[%index++] = %clListener @ " ChatCmdDefendReinforce " @ 1500; + else + $AIMsgThreadTable[%index++] = %clListener @ " ChatCmdDefend " @ 1250; + + //do we acknowledge the command first? + if (getRandom() < 0.5) + { + if (getRandom() < 0.5) + $AIMsgThreadTable[%index++] = %clSpeaker @ " ChatCmdAcknowledged " @ 1500; + else + $AIMsgThreadTable[%index++] = %clSpeaker @ " ChatTeamYes " @ 1500; + } + } + + //the actual msg to be used + $AIMsgThreadTable[%index++] = %clSpeaker @ " " @ %msg @ " " @ 1750; + + //do we say "thanks"? + if (getRandom() < 0.3) + { + $AIMsgThreadTable[%index++] = %clListener @ " ChatTeamThanks " @ 1000; + + //do we say "you're welcom?" + if (getRandom() < 0.5) + $AIMsgThreadTable[%index++] = %clSpeaker @ " ChatWelcome " @ 1500; + } + + //end the thread + $AIMsgThreadTable[%index++] = ""; + } + else + { + //just stick with the original + $AIMsgThreadTable[0] = %clSpeaker @ " " @ %msg @ " " @ 1750; + } + + //now process the table + AIProcessMessageTable($AIMsgThreadId); + + case "AttackBase": + if (%clListener < 0) + %clListener = AIFindCommanderAI(%clSpeaker); + + if (%clListener > 0) + { + //we have two people, create a semi-random conversation: + %index = -1; + + //see if we issue a command first + if (getRandom() < 0.30) + { + //which version of "attack the enemy base"? + %randNum = getRandom(); + if (%randNum < 0.33) + $AIMsgThreadTable[%index++] = %clListener @ " ChatCmdAttack " @ 1250; + else if (%randNum < 0.66) + $AIMsgThreadTable[%index++] = %clListener @ " ChatCmdAttackBase " @ 1500; + else + $AIMsgThreadTable[%index++] = %clListener @ " ChatCmdAttackReinforce " @ 1250; + + //do we acknowledge the command first? + if (getRandom() < 0.5) + { + if (getRandom() < 0.5) + $AIMsgThreadTable[%index++] = %clSpeaker @ " ChatCmdAcknowledged " @ 1500; + else + $AIMsgThreadTable[%index++] = %clSpeaker @ " ChatTeamYes " @ 1500; + } + } + + //the actual msg to be used + $AIMsgThreadTable[%index++] = %clSpeaker @ " " @ %msg @ " " @ 1750; + + //do we say "thanks"? + if (getRandom() < 0.3) + { + $AIMsgThreadTable[%index++] = %clListener @ " ChatTeamThanks " @ 1000; + + //do we say "you're welcom?" + if (getRandom() < 0.5) + $AIMsgThreadTable[%index++] = %clSpeaker @ " ChatWelcome " @ 1500; + } + + //end the thread + $AIMsgThreadTable[%index++] = ""; + } + else + { + //just stick with the original + $AIMsgThreadTable[0] = %clSpeaker @ " " @ %msg @ " " @ 1750; + } + + //now process the table + AIProcessMessageTable($AIMsgThreadId); + + case "RepairBase": + if (%clListener < 0) + %clListener = AIFindCommanderAI(%clSpeaker); + + if (%clListener > 0) + { + //we have two people, create a semi-random conversation: + %index = -1; + + //see if we issue a command first + if (getRandom() < 0.30) + { + //which version of "repair"? + $AIMsgThreadTable[%index++] = %clListener @ " ChatRepairBase " @ 1250; + + //do we acknowledge the command first? + if (getRandom() < 0.5) + { + if (getRandom() < 0.5) + $AIMsgThreadTable[%index++] = %clSpeaker @ " ChatCmdAcknowledged " @ 1500; + else + $AIMsgThreadTable[%index++] = %clSpeaker @ " ChatTeamYes " @ 1500; + } + } + + //the actual msg to be used + $AIMsgThreadTable[%index++] = %clSpeaker @ " " @ %msg @ " " @ 1750; + + //do we say "thanks"? + if (getRandom() < 0.3) + { + $AIMsgThreadTable[%index++] = %clListener @ " ChatTeamThanks " @ 1000; + + //do we say "you're welcom?" + if (getRandom() < 0.5) + $AIMsgThreadTable[%index++] = %clSpeaker @ " ChatWelcome " @ 1500; + } + + //end the thread + $AIMsgThreadTable[%index++] = ""; + } + else + { + //just stick with the original + $AIMsgThreadTable[0] = %clSpeaker @ " " @ %msg @ " " @ 1750; + } + + //now process the table + AIProcessMessageTable($AIMsgThreadId); + } +} + +function AIMessageThread(%msg, %clSpeaker, %clListener, %force, %index, %threadId) +{ + //abort if AI chat has been disabled + if ($AIDisableChat) + return; + + //initialize the params + if (%index $= "") + %index = 0; + + if (%clListener $= "") + %clListener = 0; + + if (%force $= "") + %force = false; + + //if this is the initial call, see if we're already in a thread, and if we should force this one + if (%index == 0 && $AIMsgThreadActive && !%force) + { + error("DEBUG msg thread already in progress - aborting: " @ %msg @ " from client: " @ %clSpeaker); + return; + } + + //if this is an ongoing thread, make sure it wasn't pre-empted + if (%index > 0 && %threadId != $AIMsgThreadId) + return; + + //if this is a new thread, set a new thread id + if (%index == 0) + { + $AIMsgThreadId++; + $AIMsgThreadActive = true; + %threadId = $AIMsgThreadId; + } + switch$ (%msg) + { + //this is an example of how to use the chat system without using the table... + case "ChatHi": + serverCmdCannedChat(%clSpeaker, 'ChatHi', true); + %responsePending = false; + if (%index == 0) + { + if (%clListener < 0) + %clListener = AIFindCommanderAI(%clSpeaker); + if (%clListener > 0 && (getRandom() < 0.5)) + { + %responsePending = true; + schedule(1000, 0, "AIMessageThread", %msg, %clListener, 0, false, 1, %threadId); + } + } + if (! %responsePending) + schedule(1000, 0, "AIEndMessageThread", $AIMsgThreadId); + + //this method of using the chat system sets up a table instead... + //the equivalent is commented out below - same effect - table is much better. + case "ChatSelfDefendGenerator": + if (%index == 0) + { + //initialize the table + $AIMsgThreadIndex = 0; + $AIMsgThreadTable[1] = ""; + + %commander = AIFindCommanderAI(%clSpeaker); + if (%commander > 0) + { + $AIMsgThreadTable[0] = %commander @ " ChatCmdDefendBase " @ 1000; + $AIMsgThreadTable[1] = %clSpeaker @ " ChatCmdAcknowledged " @ 1250; + $AIMsgThreadTable[2] = %clSpeaker @ " " @ %msg @ " " @ 1000; + $AIMsgThreadTable[3] = ""; + } + else + $AIMsgThreadTable[0] = %clSpeaker @ " " @ %msg @ " " @ 1000; + + //now process the table + AIProcessMessageTable(%threadId); + } + +// case "ChatSelfDefendGenerator": +// %responsePending = false; +// if (%index == 0) +// { +// //find the commander +// %commander = AIFindCommanderAI(%clSpeaker); +// if (%commander > 0) +// { +// %responsePending = true; +// serverCmdCannedChat(%commander, "ChatCmdDefendBase", true); +// schedule("AIMessageThread(" @ %msg @ ", " @ %clSpeaker @ ", 0, 1, " @ %type @ ", false, " @ %threadId @ ");", 1000); +// } +// else +// serverCmdCannedChat(%commander, "ChatSelfDefendGenerator", true); +// } +// else if (%index == 1) +// { +// //make sure the client is still alive +// if (AIClientIsAlive(%clSpeaker, 1000)) +// { +// %responsePending = true; +// serverCmdCannedChat(%clSpeaker, "ChatCmdAcknowledged", true); +// schedule("AIMessageThread(" @ %msg @ ", " @ %clSpeaker @ ", 0, 2, " @ %type @ ", false, " @ %threadId @ ");", 1000); +// } +// else +// AIEndMessageThread($AIMsgThreadId); +// } +// else if (%index == 2) +// { +// //make sure the client is still alive +// if (AIClientIsAlive(%clSpeaker, 1000)) +// serverCmdCannedChat(%clSpeaker, "ChatSelfDefendGenerator", true); +// else +// AIEndMessageThread($AIMsgThreadId); +// } +// if (! %responsePending) +// schedule("AIEndMessageThread(" @ $AIMsgThreadId @ ");", 1000); + + default: + serverCmdCannedChat(%clSpeaker, addTaggedString(%msg), true); + schedule(1500, 0, "AIEndMessageThread", $AIMsgThreadId); + } +} + +function AIPlay3DSound(%client, %sound) +{ + %player = %client.player; + if (!isObject(%player)) + return; + + playTargetAudio(%client.target, addTaggedString(%sound), AudioClosest3d, true); +} + +function AIPlayAnimSound(%client, %location, %sound, %minCel, %maxCel, %index) +{ + //make sure the client is still alive + if (! AIClientIsAlive(%client, 500)) + return; + + switch (%index) + { + case 0: + //if we can set the client's aim, we can also try the animation + if (%client.aimAt(%location, 2500)) + schedule(250, %client, "AIPlayAnimSound", %client, %location, %sound, %minCel, %maxCel, 1); + else + schedule(750, %client, "AIPlay3DSound", %client, %sound); + + case 1: + //play the animation and schedule the next phase + %randRange = %maxCel - %minCel + 1; + %celNum = %minCel + mFloor(getRandom() * (%randRange - 0.1)); + if (%celNum > 0) + %client.player.setActionThread("cel" @ %celNum); + schedule(500, %client, "AIPlayAnimSound", %client, %location, %sound, %minCel, %maxCel, 2); + + case 2: + //say 'hi' + AIPlay3DSound(%client, %sound); + } +} + +$AIAnimSalute = 1; +$AIAnimWave = 2; + +function AIRespondToEvent(%client, %eventTag, %targetClient) +{ + //record the event time + $EventTagTimeArray[%eventTag] = getSimTime(); + + %clientPos = %client.player.getWorldBoxCenter(); + switch$ (%eventTag) + { + case 'ChatHi' or 'ChatAnimWave': + if (AIClientIsAlive(%targetClient) && %targetClient.isAIControlled()) + { + %setHumanControl = false; + if (!%client.isAIControlled() && %client.controlAI != %targetClient) + %setHumanControl = aiAttemptHumanControl(%client, %targetClient); + if (%setHumanControl) + schedule(250, %targetClient, "AIPlayAnimSound", %targetClient, %clientPos, "gbl.hi", $AIAnimSalute, $AIAnimSalute, 0); + else + schedule(250, %targetClient, "AIPlayAnimSound", %targetClient, %clientPos, "gbl.hi", $AIAnimWave, $AIAnimWave, 0); + } + + case 'ChatBye' or 'ChatTeamDisembark' or 'ChatAnimBye': + if (AIClientIsAlive(%targetClient) && %targetClient.isAIControlled()) + { + schedule(250, %targetClient, "AIPlayAnimSound", %targetClient, %clientPos, "gbl.bye", $AIAnimWave, $AIAnimWave, 0); + + //see if we need to release the bot + if (aiHumanHasControl(%client, %targetClient)) + { + %objective = %targetClient.objective; + if (%objective.issuedByClientId == %client && %objective.targetClientId == %client && %objective.getName() $= "AIOEscortPlayer") + { + AIClearObjective(%objective); + %objective.delete(); + } + aiReleaseHumanControl(%client, %targetClient); + } + } + + case 'ChatTeamYes' or 'ChatGlobalYes' or 'ChatCheer' or 'ChatAnimDance': + if (AIClientIsAlive(%targetClient) && %targetClient.isAIControlled()) + { + //choose the animation range + %minCel = 5; + %maxCel = 8; + if (getRandom() > 0.5) + %sound = "gbl.thanks"; + else + %sound = "gbl.awesome"; + schedule(500, %targetClient, "AIPlayAnimSound", %targetClient, %clientPos, %sound, %minCel, %maxCel, 0); + } + + case 'ChatAnimSalute': + if (AIClientIsAlive(%targetClient) && %targetClient.isAIControlled()) + schedule(500, %targetClient, "AIPlayAnimSound", %targetClient, %clientPos, "gbl.thanks", $AIAnimSalute, $AIAnimSalute, 0); + + case 'ChatAwesome' or 'ChatGoodGame' or 'ChatGreatShot' or 'ChatNice' or 'ChatYouRock' or 'ChatAnimSpec3': + if (AIClientIsAlive(%targetClient) && %targetClient.isAIControlled()) + { + //choose the animation range + %minCel = 5; + %maxCel = 8; + if (getRandom() > 0.5) + %sound = "gbl.thanks"; + else + %sound = "gbl.yes"; + schedule(250, %targetClient, "AIPlayAnimSound", %targetClient, %clientPos, %sound, %minCel, %maxCel, 0); + } + + case 'ChatAww' or 'ChatObnoxious' or 'ChatSarcasm' or 'ChatAnimSpec1' or 'ChatAnimSpec2': + if (AIClientIsAlive(%targetClient) && %targetClient.isAIControlled()) + { + if (%targetClient.controlByHuman == %client) + schedule(1500, %targetClient, "AIPlayAnimSound", %targetClient, %clientPos, "gbl.oops", $AIAnimSalute, $AIAnimSalute, 0); + else + schedule(1500, %targetClient, "AIPlayAnimSound", %targetClient, %clientPos, "gbl.quiet", -1, -1, 0); + } + + case 'ChatBrag' or 'ChatAnimGetSome': + if (AIClientIsAlive(%targetClient) && %targetClient.isAIControlled()) + { + if (%targetClient.controlByHuman == %client) + schedule(1500, %targetClient, "AIPlayAnimSound", %targetClient, %clientPos, "gbl.yes", $AIAnimSalute, $AIAnimSalute, 0); + else + schedule(1500, %targetClient, "AIPlayAnimSound", %targetClient, %clientPos, "gbl.no", -1, -1, 0); + } + + case 'ChatAnimAnnoyed' or 'ChatMove': + if (AIClientIsAlive(%targetClient) && %targetClient.isAIControlled()) + { + if (%targetClient.controlByHuman == %client) + { + schedule(750, %targetClient, "AIPlayAnimSound", %targetClient, %clientPos, "vqk.sorry", $AIAnimSalute, $AIAnimSalute, 0); + %targetClient.schedule(2750, "setDangerLocation", %clientPos , 20); + } + else + schedule(750, %targetClient, "AIPlayAnimSound", %targetClient, %clientPos, "gbl.no", -1, -1, 0); + } + + case 'ChatQuiet': + if (AIClientIsAlive(%targetClient) && %targetClient.isAIControlled()) + { + if (%targetClient.controlByHuman == %client) + schedule(250, %targetClient, "AIPlayAnimSound", %targetClient, %clientPos, "gbl.yes", $AIAnimSalute, $AIAnimSalute, 0); + else + schedule(250, %targetClient, "AIPlayAnimSound", %targetClient, %clientPos, "gbl.no", -1, -1, 0); + } + + case 'ChatWait' or 'ChatShazbot': + if (AIClientIsAlive(%targetClient) && %targetClient.isAIControlled()) + { + if (%targetClient.controlByHuman == %client) + schedule(250, %targetClient, "AIPlayAnimSound", %targetClient, %clientPos, "gbl.yes", $AIAnimSalute, $AIAnimSalute, 0); + else + schedule(250, %targetClient, "AIPlayAnimSound", %targetClient, %clientPos, "gbl.no", -1, -1, 0); + } + + case 'ChatLearn' or 'ChatIsBaseSecure': + schedule(750, %targetClient, "AIPlayAnimSound", %targetClient, %clientPos, "gbl.dunno", -1, -1, 0); + + case 'ChatWelcome' or 'ChatSorry' or 'ChatAnyTime': + schedule(250, %targetClient, "AIPlayAnimSound", %targetClient, %clientPos, "gbl.thanks", $AIAnimWave, $AIAnimWave, 0); + + case 'ChatDunno' or 'ChatDontKnow': + schedule(250, %targetClient, "AIPlayAnimSound", %targetClient, %clientPos, "gbl.yes", -1, -1, 0); + + case 'ChatTeamNo' or 'ChatOops' or 'ChatGlobalNo': + schedule(250, %targetClient, "AIPlayAnimSound", %targetClient, %clientPos, "gbl.shazbot", -1, -1, 0); + + case 'ChatTeamThanks' or 'ChatThanks': + schedule(250, %targetClient, "AIPlayAnimSound", %targetClient, %clientPos, "vqk.anytime", $AIAnimWave, $AIAnimWave, 0); + + case 'ChatWarnShoot': + schedule(250, %targetClient, "AIPlayAnimSound", %targetClient, %clientPos, "vqk.sorry", -1, -1, 0); + + case 'ChatCmdWhat': + //see if the weight for the escort is higher than what he might otherwise be doing + if (AIClientIsAlive(%targetClient) && %targetClient.isAIControlled()) + { + //first, find the chat message + %objective = %targetClient.objective; + if (%objective > 0) + { + if (%objective.chat) + %sound = getWord(%objective.chat, 0) @ "Sound"; + else + { + %type = %objective.getName(); + switch$ (%type) + { + case "AIOAttackLocation": + %sound = "att.base"; + case "AIOAttackObject": + if (%objective.targetObjectId > 0) + { + %objType = %objective.targetObjectId.getDataBlock().getName(); + switch$ (%objType) + { + case "GeneratorLarge": + %sound = "slf.att.generator"; + case "SensorLargePulse": + %sound = "slf.att.sensors"; + case "SensorMediumPulse": + %sound = "slf.att.sensors"; + case "TurretBaseLarge": + %sound = "slf.att.turrets"; + case "StationVehicle": + %sound = "slf.att.vehicle"; + default: + %sound = "slf.att.base"; + } + } + else + %sound = "slf.att.base"; + case "AIODefendLocation": + if (%objective.targetObjectId > 0) + { + %objType = %objective.targetObjectId.getDataBlock().getName(); + switch$ (%objType) + { + case "Flag": + %sound = "slf.def.flag"; + case "GeneratorLarge": + %sound = "slf.def.generator"; + case "SensorLargePulse": + %sound = "slf.def.sensors"; + case "SensorMediumPulse": + %sound = "slf.def.sensors"; + case "TurretBaseLarge": + %sound = "slf.def.turrets"; + case "StationVehicle": + %sound = "slf.def.vehicle"; + default: + %sound = "slf.def.base"; + } + } + else + %sound = "slf.def.defend"; + case "AIOAttackPlayer": + %sound = "slf.att.attack"; + case "AIOEscortPlayer": + %sound = "slf.def.defend"; + case "AIORepairObject": + if (%objective.targetObjectId > 0) + { + %objType = %objective.targetObjectId.getDataBlock().getName(); + switch$ (%objType) + { + case "GeneratorLarge": + %sound = "slf.rep.generator"; + case "SensorLargePulse": + %sound = "slf.rep.sensors"; + case "SensorMediumPulse": + %sound = "slf.rep.sensors"; + case "TurretBaseLarge": + %sound = "slf.rep.turrets"; + case "StationVehicle": + %sound = "slf.rep.vehicle"; + default: + %sound = "slf.rep.equipment"; + } + } + else + %sound = "slf.rep.base"; + case "AIOLazeObject": + %sound = "slf.att.base"; + case "AIOMortarObject": + if (%objective.targetObjectId > 0) + { + %objType = %objective.targetObjectId.getDataBlock().getName(); + switch$ (%objType) + { + case "GeneratorLarge": + %sound = "slf.att.generator"; + case "SensorLargePulse": + %sound = "slf.att.sensors"; + case "SensorMediumPulse": + %sound = "slf.att.sensors"; + case "TurretBaseLarge": + %sound = "slf.att.turrets"; + case "StationVehicle": + %sound = "slf.att.vehicle"; + default: + %sound = "slf.att.base"; + } + } + else + %sound = "slf.att.base"; + case "AIOTouchObject": + if (%objective.mode $= "FlagGrab") + %sound = "slf.att.flag"; + else if (%objective.mode $= "FlagCapture") + %sound = "flg.flag"; + else + %sound = "slf.att.base"; + + case "AIODeployEquipment": + %sound = "slf.tsk.defense"; + + default: + %sound = "gbl.dunno"; + } + } + } + else + %sound = "gbl.dunno"; + + //now that we have a sound, play it with the salute animation + schedule(250, %targetClient, "AIPlayAnimSound", %targetClient, %clientPos, %sound, 1, 1, 0); + } + + //these here are all "self" messages requiring a "thank you" + case 'ChatRepairBase' or 'ChatSelfAttack' or 'ChatSelfAttackBase' or 'ChatSelfAttackFlag' or 'ChatSelfAttackGenerator' or 'ChatSelfAttackSensors' or 'ChatSelfAttackTurrets' or 'ChatSelfAttackVehicle': + schedule(750, %targetClient, "AIPlayAnimSound", %targetClient, %clientPos, "gbl.thanks", 1, 1, 0); + + case 'ChatSelfDefendBase' or 'ChatSelfDefend' or 'ChatSelfDefendFlag' or 'ChatSelfDefendGenerator' or 'ChatSelfDefendNexus' or 'ChatSelfDefendSensors' or 'ChatSelfDefendTurrets' or 'ChatSelfDefendVehicle': + schedule(750, %targetClient, "AIPlayAnimSound", %targetClient, %clientPos, "gbl.thanks", 1, 1, 0); + + case 'ChatSelfRepairBase' or 'ChatSelfRepairEquipment' or 'ChatSelfRepairGenerator' or 'ChatSelfRepair' or 'ChatSelfRepairSensors' or 'ChatSelfRepairTurrets' or 'ChatSelfRepairVehicle': + schedule(750, %targetClient, "AIPlayAnimSound", %targetClient, %clientPos, "gbl.thanks", 1, 1, 0); + + case 'ChatTaskCover' or 'ChatTaskSetupD' or 'ChatTaskOnIt' or 'ChatTaskSetupRemote' or 'ChatTaskSetupSensors' or 'ChatTaskSetupTurrets' or 'ChatTaskVehicle': + schedule(750, %targetClient, "AIPlayAnimSound", %targetClient, %clientPos, "gbl.thanks", 1, 1, 0); + + case 'EnemyFlagCaptured': + //find all the clients within 100 m of the home flag, and get them all to cheer + %flagPos = %client.player.getWorldBoxCenter(); + %count = ClientGroup.getCount(); + for(%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + + //make sure the client is alive, and on the same team + if (%cl.isAIControlled() && %cl.team == %client.team && AIClientIsAlive(%cl)) + { + //see if they're within 100 m + %distance = %cl.getPathDistance(%flagPos); + if (%distance > 0 && %distance < 100) + { + //choose the animation range + %minCel = 5; + %maxCel = 8; + %randTime = mFloor(getRandom() * 1500) + 1; + + //pick a random sound + if (getRandom() > 0.25) + %sound = "gbl.awesome"; + else if (getRandom() > 0.5) + %sound = "gbl.thanks"; + else if (getRandom() > 0.75) + %sound = "gbl.nice"; + else + %sound = "gbl.rock"; + schedule(%randTime, %cl, "AIPlayAnimSound", %cl, %flagPos, %sound, %minCel, %maxCel, 0); + } + } + } + + case 'ChatCmdHunterGiveFlags' or 'ChatCmdGiveMeFlag': + if (AIClientIsAlive(%targetClient) && %targetClient.isAIControlled()) + { + schedule(250, %targetClient, "AIPlayAnimSound", %targetClient, %clientPos, "cmd.acknowledge", $AIAnimSalute, $AIAnimSalute, 0); + schedule(750, %targetClient.player, "serverCmdThrowFlag", %targetClient); + } + + } +} + diff --git a/base/scripts/aiCnH.cs b/base/scripts/aiCnH.cs new file mode 100644 index 0000000..94a8c0f --- /dev/null +++ b/base/scripts/aiCnH.cs @@ -0,0 +1,73 @@ +//----------------------------------------------- +// AI functions for Capture and Hold +function aicnh() +{ + exec("scripts/aiCnH.cs"); +} + +function CnHGame::AIInit(%game) +{ + for (%i = 1; %i <= %game.numTeams; %i++) + { + if (!isObject($ObjectiveQ[%i])) + { + $ObjectiveQ[%i] = new AIObjectiveQ(); + MissionCleanup.add($ObjectiveQ[%i]); + } + + error("team " @ %i @ " objectives load..."); + $ObjectiveQ[%i].clear(); + AIInitObjectives(%i, %game); + } + + //call the default AIInit() function + AIInit(); +} + +function CnHGame::onAIRespawn(%game, %client) +{ + //add the default tasks + if (! %client.defaultTasksAdded) + { + %client.defaultTasksAdded = true; + %client.addTask(AIEngageTask); + %client.addTask(AIPickupItemTask); + %client.addTask(AITauntCorpseTask); + %client.addTask(AIPatrolTask); + %client.addtask(AIEngageTurretTask); + %client.addtask(AIDetectMineTask); + } +} + +function CnHGame::onAIDamaged(%game, %clVictim, %clAttacker, %damageType, %implement) +{ + if (%clAttacker && %clAttacker != %clVictim && %clAttacker.team == %clVictim.team) + { + schedule(250, %clVictim, "AIPlayAnimSound", %clVictim, %clAttacker.player.getWorldBoxCenter(), "wrn.watchit", -1, -1, 0); + + //clear the "lastDamageClient" tag so we don't turn on teammates... unless it's uberbob! + %clVictim.lastDamageClient = -1; + } +} + +function CnHGame::onAIKilledClient(%game, %clVictim, %clAttacker, %damageType, %implement) +{ + if (%clVictim.team != %clAttacker.team) + DefaultGame::onAIKilledClient(%game, %clVictim, %clAttacker, %damageType, %implement); +} + +function CnHGame::onAIKilled(%game, %clVictim, %clAttacker, %damageType, %implement) +{ + DefaultGame::onAIKilled(%game, %clVictim, %clAttacker, %damageType, %implement); +} + +function CnHGame::onAIFriendlyFire(%game, %clVictim, %clAttacker, %damageType, %implement) +{ + if (%clAttacker && %clAttacker.team == %clVictim.team && %clAttacker != %clVictim) + AIMessageThread("Sorry", %clAttacker, %clVictim); +} + +function CnHGame::AIplayerCaptureFlipFlop(%game, %player, %flipFlop) +{ +} + diff --git a/base/scripts/aiDeathMatch.cs b/base/scripts/aiDeathMatch.cs new file mode 100644 index 0000000..1016f04 --- /dev/null +++ b/base/scripts/aiDeathMatch.cs @@ -0,0 +1,22 @@ +function DMGame::AIInit(%game) +{ + //call the default AIInit() function + AIInit(); +} + +function DMGame::onAIRespawn(%game, %client) +{ + //add the default task + if (! %client.defaultTasksAdded) + { + %client.defaultTasksAdded = true; + %client.addTask(AIEngageTask); + %client.addTask(AIPickupItemTask); + %client.addTask(AIUseInventoryTask); + %client.addTask(AITauntCorpseTask); + %client.addTask(AIEngageTurretTask); + %client.addtask(AIDetectMineTask); + %client.addTask(AIPatrolTask); + } +} + diff --git a/base/scripts/aiDebug.cs b/base/scripts/aiDebug.cs new file mode 100644 index 0000000..54bc4ce --- /dev/null +++ b/base/scripts/aiDebug.cs @@ -0,0 +1,1020 @@ +//------------------------------ +//AI Debugging functions + +function aics() +{ + aidebug(-1); + exec("scripts/ai.cs"); +} + +function ga(%pack) +{ + $testcheats = 1; + giveall(); + switch$ (%pack) + { + case "repair": + LocalClientConnection.player.setInventory(RepairPack, 1); + case "charge": + LocalClientConnection.player.setInventory(SatchelCharge, 1); + case "energy": + LocalClientConnection.player.setInventory(EnergyPack, 1); + case "cloak": + LocalClientConnection.player.setInventory(CloakingPack, 1); + case "shield": + LocalClientConnection.player.setInventory(ShieldPack, 1); + case "jammer": + LocalClientConnection.player.setInventory(SensorJammerPack, 1); + } +} + +function aiga(%client) +{ + $TestCheats = 1; + %player = %client.player; + %player.setInventory(RepairKit,999); + %player.setInventory(Mine,999); + %player.setInventory(MineAir,999); + %player.setInventory(MineLand,999); + %player.setInventory(MineSticky,999); + %player.setInventory(Grenade,999); + %player.setInventory(FlashGrenade,999); + %player.setInventory(FlareGrenade,999); + %player.setInventory(ConcussionGrenade,999); + %player.setInventory(CameraGrenade, 999); + %player.setInventory(Blaster,1); + %player.setInventory(Plasma,1); + %player.setInventory(Disc,1); + %player.setInventory(Chaingun, 1); + %player.setInventory(GrenadeLauncher, 1); + %player.setInventory(MissileLauncher, 1); + %player.setInventory(Mortar, 1); + %player.setInventory(MissileLauncherAmmo, 999); + %player.setInventory(GrenadeLauncherAmmo, 999); + %player.setInventory(MortarAmmo, 999); + %player.setInventory(PlasmaAmmo,999); + %player.setInventory(ChaingunAmmo, 999); + %player.setInventory(DiscAmmo, 999); + %player.setInventory(TargetingLaser, 1); + %player.setInventory(ELFGun, 1); + %player.setInventory(SniperRifle, 1); + %player.setInventory(ShockLance, 1); +} + +function aiCome(%from, %to) +{ + if (%to $= "") + %to = 2; + %from.player.setTransform(%to.player.getTransform()); +} + +function listInv(%client) +{ + %player = %client.player; + %count = %player.getInventory(RepairKit); + if (%count > 0) + echo("RepairKit: " @ %count); + %count = %player.getInventory(Mine); + if (%count > 0) + echo("Mine: " @ %count); + %count = %player.getInventory(MineAir); + if (%count > 0) + echo("MineAir: " @ %count); + %count = %player.getInventory(MineLand); + if (%count > 0) + echo("MineLand: " @ %count); + %count = %player.getInventory(MineSticky); + if (%count > 0) + echo("MineSticky: " @ %count); + %count = %player.getInventory(Grenade); + if (%count > 0) + echo("Grenade: " @ %count); + %count = %player.getInventory(FlashGrenade); + if (%count > 0) + echo("FlashGrenade: " @ %count); + %count = %player.getInventory(FlareGrenade); + if (%count > 0) + echo("FlareGrenade: " @ %count); + %count = %player.getInventory(ConcussionGrenade); + if (%count > 0) + echo("ConcussionGrenade: " @ %count); + %count = %player.getInventory(CameraGrenade); + if (%count > 0) + echo("CameraGrenade: " @ %count); + %count = %player.getInventory(Blaster); + if (%count > 0) + echo("Blaster: " @ %count); + %count = %player.getInventory(Plasma); + if (%count > 0) + echo("Plasma: " @ %count); + %count = %player.getInventory(Disc); + if (%count > 0) + echo("Disc: " @ %count); + %count = %player.getInventory(Chaingun); + if (%count > 0) + echo("Chaingun: " @ %count); + %count = %player.getInventory(GrenadeLauncher); + if (%count > 0) + echo("GrenadeLauncher: " @ %count); + %count = %player.getInventory(MissileLauncher); + if (%count > 0) + echo("MissileLauncher: " @ %count); + %count = %player.getInventory(Mortar); + if (%count > 0) + echo("Mortar: " @ %count); + %count = %player.getInventory(MissileLauncherAmmo); + if (%count > 0) + echo("MissileLauncherAmmo: " @ %count); + %count = %player.getInventory(GrenadeLauncherAmmo); + if (%count > 0) + echo("GrenadeLauncherAmmo: " @ %count); + %count = %player.getInventory(MortarAmmo); + if (%count > 0) + echo("MortarAmmo: " @ %count); + %count = %player.getInventory(PlasmaAmmo); + if (%count > 0) + echo("PlasmaAmmo: " @ %count); + %count = %player.getInventory(ChaingunAmmo); + if (%count > 0) + echo("ChaingunAmmo: " @ %count); + %count = %player.getInventory(DiscAmmo); + if (%count > 0) + echo("DiscAmmo: " @ %count); + %count = %player.getInventory(TargetingLaser); + if (%count > 0) + echo("TargetingLaser: " @ %count); + %count = %player.getInventory(ELFGun); + if (%count > 0) + echo("ELFGun: " @ %count); + %count = %player.getInventory(SniperRifle); + if (%count > 0) + echo("SniperRifle: " @ %count); + %count = %player.getInventory(ShockLance); + if (%count > 0) + echo("ShockLance: " @ %count); +} + +function createAIDebugDlg() +{ + if (!isObject("AIDebugViewProfile")) + { + new GuiControlProfile("AIDebugViewProfile") + { + fontType = "Arial Bold"; + fontSize = 12; + fontColor = "255 0 255"; + autoSizeWidth = false; + autoSizeHeight = false; + modal = "false"; + }; + + new GuiControl(aiDebugDlg) + { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "True"; + helpTag = "0"; + + new DebugView(aiDebug) + { + profile = "AIDebugViewProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "8 8"; + extent = "624 464"; + minExtent = "8 8"; + visible = "True"; + setFirstResponder = "False"; + helpTag = "0"; + }; + }; + } +} + +function ToggleAIDebug(%make) +{ + if (%make) + { + if ($AIDebugActive) + { + Canvas.popDialog(aiDebugDlg); + $AIDebugActive = false; + } + else + { + createAIDebugDlg(); + Canvas.pushDialog(aiDebugDlg, 70); + $AIDebugActive = true; + } + } +} + +GlobalActionMap.bind(keyboard, "ctrl tilde", "ToggleAIDebug"); + +//function showFPS() +//{ +// if (isObject(aiDebug)) +// aiDebug.setText(0, "FPS:" SPC $fps::real SPC " $patch1Avg" SPC $Patch1Avg); +// schedule(1000, 0, "ShowFPS"); +//} + +function aiDebug(%client) +{ + if ($AIDebugTeam < 0 && $AIDebugClient < 0) + { + createAIDebugDlg(); + Canvas.pushDialog(aiDebugDlg, 70); + } + + $AIDebugClient = %client; + $AIDebugTeam = -1; + + if (%client > 0) + { + createAIDebugDlg(); + Canvas.pushDialog(aiDebugDlg, 70); + aiDebug.clearText(); + $AIDebugActive = true; + } + else + { + $AIDebugActive = false; + Canvas.popDialog(aiDebugDlg); + } +} + +function aiDebugText(%client, %line, %text) +{ + if (%client != $AIDebugClient) + return; + + aiDebug.setText(%line, %text); +} + +function aiDebugLine(%client, %startPt, %endPt, %color) +{ + if (%client != $AIDebugClient) + return; + + aiDebug.addLine(%startPt, %endPt, %color); +} + +function aiDebugClearLines(%client) +{ + if (%client != $AIDebugClient) + return; + + aiDebug.clearLines(); +} + +function aiGetTaskDesc(%client) +{ + if (!%client.isAIControlled()) + %returnStr = getTaggedString(%client.name) @ ": " @ "HUMAN"; + + else if (%client.objective > 0) + { + if (%client.objective.description !$= "") + %returnStr = %client @ " " @ getTaggedString(%client.name) @ ": " @ %client.objective.description; + else + %returnStr = %client @ " " @ getTaggedString(%client.name) @ ": " @ %client.objective @ " NO DESC"; + } + else + { + %curTask = %client.getTaskName(); + %curStep = %client.getStepName(); + if (%curTask !$= "") + %returnStr = %client @ " " @ getTaggedString(%client.name) @ ": " @ %curTask; + else if (%curStep !$= "") + %returnStr = %client @ " " @ getTaggedString(%client.name) @ ": " @ %curStep; + else + %returnStr = getTaggedString(%client.name) @ ": " @ "UNKNOWN"; + } + + //add in some color info + if (Game.numTeams != 2) + %color = "E"; + else if (%client.team == LocalClientConnection.team) + %color = "F"; + else + %color = "E"; + + return %color @ ":" @ %returnStr; +} + +$AIDebugTeam = -1; +$AIDebugClient = -1; +$AIDebugTasks = true; +Canvas.popDialog(aiDebugDlg); +$AIDebugActive = false; + +function aiEchoObjective(%objective, %lineNum, %group) +{ + %clientAssigned = false; + %indent = " "; + if (%group > 0) + { + %indent = " "; + if (%group.clientLevel[1] > 0 && %group.clientLevel[1].objective == %objective) + { + %assigned1 = getTaggedString(%group.clientLevel[1].name) @ ":" @ %group.clientLevel[1].objectiveWeight; + %clientAssigned = true; + } + else + %assigned1 = " "; + if (%group.clientLevel[2] > 0 && %group.clientLevel[2].objective == %objective) + { + %assigned2 = getTaggedString(%group.clientLevel[2].name); + %clientAssigned = true; + } + else + %assigned2 = " "; + } + else + { + if (%objective.clientLevel[1] > 0) + { + %assigned1 = getTaggedString(%objective.clientLevel[1].name) @ ":" @ %objective.clientLevel[1].objectiveWeight; + %clientAssigned = true; + } + else + %assigned1 = " "; + if (%objective.clientLevel[2] > 0) + { + %assigned2 = getTaggedString(%objective.clientLevel[2].name); + %clientAssigned = true; + } + else + %assigned2 = " "; + } + + %text = %indent @ %objective @ " " @ %objective.weightLevel1 @ " " @ %assigned1 @ " " @ %assigned2 @ " " @ %objective.description; + if (%clientAssigned) + %color = "0 0 1"; + else + %color = "1 0 1"; + aiDebug.setText(%lineNum, %text, %color); +} + +function aiDebugQ(%team, %showTasks) +{ + if ($AIDebugTeam < 0 && $AIDebugClient < 0) + { + createAIDebugDlg(); + Canvas.pushDialog(aiDebugDlg, 70); + $AIDebugActive = true; + } + + $AIDebugTeam = %team; + $AIDebugClient = -1; + + if ($AIDebugTeam < 0) + { + Canvas.popDialog(aiDebugDlg); + $AIDebugActive = false; + return; + } + + if (%showTasks $= "") + %showTasks = $AIDebugTasks; + else + $AIDebugTasks = %showTasks; + + aiDebug.clearText(); + + if (! %showTasks) + return; + + //make sure we have a valid objectiveQ + if (!isObject($ObjectiveQ[%team])) + return; + + %timeStamp = getSimTime(); + %lineNum = 1; + %count = $ObjectiveQ[%team].getCount(); + + //clear the time stamps from all groups + for (%i = 0; %i < %count; %i++) + { + %objective = $ObjectiveQ[%team].getObject(%i); + if (%objective.group > 0) + %objective.group.debugStamp = 0; + } + + //now loop through and echo out all the objectives... + for (%i = 0; %i < %count; %i++) + { + %objective = $ObjectiveQ[%team].getObject(%i); + + //if the objective is part of a group, echo out the entire group first + if (%objective.group > 0) + { + %group = %objective.group; + if (%group.debugStamp != %timeStamp) + { + %group.debugStamp = %timeStamp; + %grpCount = %group.getCount(); + + //first print out the group label + %text = %group @ " GROUP: " @ %group.getName(); + aiDebug.setText(%lineNum, %text); + %lineNum++; + + //now loop through and print out the grouped objectives in the order they appear in the main list + for (%j = 0; %j < %count; %j++) + { + //print them in the order they appear in the main list + %obj = $ObjectiveQ[%team].getObject(%j); + if (%obj.group == %group) + { + aiEchoObjective(%obj, %lineNum, %group); + %lineNum++; + } + } + } + } + + else + { + aiEchoObjective(%objective, %lineNum, 0); + %lineNum++; + } + } +} + +//------------------------------ + +function aioTest() +{ + //clear out the objective Q's + $ObjectiveQ[0].clear(); + $ObjectiveQ[1].clear(); + $ObjectiveQ[2].clear(); + + /////////////////////////////// + // team 1 objectives // + /////////////////////////////// +// %newObjective = new AIObjective(AIORepairObject) { +// position = "0 0 0"; +// rotation = "1 0 0 0"; +// scale = "1 1 1"; +// description = "Repair the generator"; +// targetObject = "Team0GeneratorLarge1"; +// targetClientId = "-1"; +// targetObjectId = nameToId("Team0GeneratorLarge1"); +// location = "0 0 0"; +// weightLevel1 = "3200"; +// weightLevel2 = "1600"; +// weightLevel3 = "0"; +// weightLevel4 = "0"; +// offense = "0"; +// defense = "1"; +// equipment = "RepairPack"; +// buyEquipmentSet = "HeavyRepairSet"; +// issuedByHuman = "0"; +// issuingClientId = "-1"; +// forceClientId = "-1"; +// locked = "0"; +// }; +// $ObjectiveQ[0].add(%newObjective); +// +// %newObjective = new AIObjective(AIODefendLocation) { +// position = "-178 -156 120"; +// rotation = "1 0 0 0"; +// scale = "1 1 1"; +// description = "Defend our generator"; +// targetObject = "Team0GeneratorLarge1"; +// targetClientId = "-1"; +// targetObjectId = "-1"; +// location = "-178 -156 120"; +// weightLevel1 = "3900"; +// weightLevel2 = "2000"; +// weightLevel3 = "0"; +// weightLevel4 = "0"; +// offense = "0"; +// defense = "1"; +// desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; +// buyEquipmentSet = "MediumShieldSet LightShieldSet HeavyShieldSet"; +// chat = ""; +// issuedByHuman = "0"; +// issuingClientId = "-1"; +// forceClientId = "-1"; +// locked = "1"; +// radius = "0"; +// team = "0"; +// }; +// $ObjectiveQ[0].add(%newObjective); + +// %newObjective = new AIObjective(AIODefendLocation) { +// position = "0 0 0"; +// rotation = "1 0 0 0"; +// scale = "1 1 1"; +// description = "Defend the generator"; +// targetObject = "Team0GeneratorLarge1"; +// targetClientId = "-1"; +// targetObjectId = nameToId("Team0GeneratorLarge1"); +// location = "0 0 0"; +// weightLevel1 = "3100"; +// weightLevel2 = "1500"; +// weightLevel3 = "0"; +// weightLevel4 = "0"; +// offense = "0"; +// defense = "1"; +// desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; +// buyEquipmentSet = "HeavyShieldSet"; +// issuedByHuman = "0"; +// issuingClientId = "-1"; +// forceClientId = "-1"; +// locked = "0"; +// }; +// $ObjectiveQ[0].add(%newObjective); +// +// %newObjective = new AIObjective(AIOAttackLocation) +// { +// weightLevel1 = 2000; +// description = "Sniper"; +// location = "50 218 95"; +// offense = true; +// defense = false; +// equipment = "SniperRifle EnergyPack"; +// buyEquipmentSet = "LightEnergySniper"; +// }; +// $ObjectiveQ[0].add(%newObjective); +// +// %newObjective = new AIObjective(AIOLazeObject) +// { +// weightLevel1 = 10000; +// description = "Laze the enemy turret"; +// targetObject = NameToId("Team1Turret"); +// targetClient = %client; //note, used to store the task requester +// offense = true; +// equipment = "TargetingLaser"; +// buyEquipmentSet = "LightEnergySniper"; +// }; +// $ObjectiveQ[0].add(%newObjective); +// +// %newObjective = new AIObjective(AIOMortarObject) +// { +// weightLevel1 = $AIWeightMortarTurret[1]; +// weightLevel2 = $AIWeightMortarTurret[2]; +// description = "Mortar the enemy turret"; +// targetObject = "Team1TurretBaseLarge1"; +// targetObjectId = nameToId("Team1TurretBaseLarge1"); +// location = ""; +// offense = true; +// defense = false; +// equipment = "Mortar MortarAmmo"; +// buyEquipmentSet = "HeavyShieldSet"; +// }; +// $ObjectiveQ[0].add(%newObjective); +// +// %newObjective = new AIObjective(AIORepairObject) +// { +// weightLevel1 = $AIWeightRepairTurret[1]; +// weightLevel2 = $AIWeightRepairTurret[2]; +// description = "Repair the turret"; +// targetObject = NameToId("Team0Turret"); +// location = ""; +// offense = false; +// defense = true; +// equipment = "RepairPack"; +// }; +// $ObjectiveQ[0].add(%newObjective); +// +// %newObjective = new AIObjective(AIOAttackObject) +// { +// weightLevel1 = $AIWeightAttackGenerator[1]; +// weightLevel2 = $AIWeightAttackGenerator[2]; +// description = "Attack the enemy generator"; +// targetObject = NameToId("Team1Generator"); +// location = ""; +// offense = true; +// defense = false; +// equipment = "plasma plasmaAmmo"; +// buyEquipmentSet = "HeavyShieldSet"; +// }; +// $ObjectiveQ[0].add(%newObjective); +// +// %newObjective = new AIObjective(AIORepairObject) +// { +// //weightLevel1 = $AIWeightRepairGenerator[1]; +// weightLevel1 = 10000; +// weightLevel2 = $AIWeightRepairGenerator[2]; +// description = "Repair the generator"; +// targetObject = NameToId("Team0Generator"); +// location = ""; +// offense = false; +// defense = true; +// equipment = "RepairPack"; +// }; +// $ObjectiveQ[0].add(%newObjective); +// +// %newObjective = new AIObjective(AIODefendLocation) +// { +// weightLevel1 = $AIWeightDefendGenerator[1]; +// weightLevel2 = $AIWeightDefendGenerator[2]; +// description = "Defend our generator"; +// //targetObject = NameToId("Team0Generator"); +// location = "-20 -292 46"; +// offense = false; +// defense = true; +// }; +// $ObjectiveQ[0].add(%newObjective); +// %newObjective = new AIObjective(AIOEscortPlayer) +// { +// weightLevel1 = $AIWeightEscortOffense[1]; +// weightLevel2 = $AIWeightEscortOffense[2]; +// targetClientId = 2; +// description = "Escort " @ getTaggedString(LocalClientConnection.name); +// offense = true; +// desiredEquipment = "EnergyPack"; +// buyEquipmentSet = "LightEnergyELF"; +// }; +// $ObjectiveQ[1].add(%newObjective); + + /////////////////////////////// + // team 2 objectives // + /////////////////////////////// +// %newObjective = new AIObjective(AIODefendLocation) { +// position = "196 461 181"; +// rotation = "1 0 0 0"; +// scale = "1 1 1"; +// description = "Missile defense"; +// targetObject = ""; +// targetClientId = "-1"; +// targetObjectId = "-1"; +// location = "196 461 181"; +// weightLevel1 = "3900"; +// weightLevel2 = "2000"; +// weightLevel3 = "0"; +// weightLevel4 = "0"; +// offense = "0"; +// defense = "1"; +// equipment = "MissileLauncher"; +// buyEquipmentSet = "MediumMissileSet HeavyMissileSet"; +// chat = ""; +// issuedByHuman = "0"; +// issuingClientId = "-1"; +// forceClientId = "-1"; +// locked = "1"; +// radius = "0"; +// team = "0"; +// }; +// $ObjectiveQ[2].add(%newObjective); +// +// %newObjective = new AIObjective(AIOAttackLocation) +// { +// weightLevel1 = 12000; +// description = "Sniper"; +// location = "-164 381 134"; +// offense = true; +// defense = false; +// equipment = "SniperRifle EnergyPack"; +// buyEquipmentSet = "LightEnergySniper"; +// }; +// $ObjectiveQ[2].add(%newObjective); +} + +function aiGo(%count) +{ + %offense = true; + for (%i = 0; %i < %count; %i++) + { + aiConnect(friendly @ %i, 1, 0.5, %offense); + aiConnect(enemy @ %i, 2, 0.5, %offense); + %offense = !%offense; + } +} + +function addBots(%count) +{ + if(%count > 0) + { + %count++; + while(%count--) + aiConnect("dude " @ %count); + } +} + +function aiGoTest(%count, %team) +{ + if (%team <= 0) + %team = 1; + + %offense = false; + for (%i = 0; %i < %count; %i++) + { + if (%offense) + aiConnect(Offense @ %i, %team, 0.5, true); + else + aiConnect(Defense @ %i, %team, 0.5, false); + + %offense = !%offense; + } +} + +//------------------------------ + +function aiTest() +{ + //find/create an enemy + %count = ClientGroup.getCount(); + if (%count <= 1) + { + %enemyCl = aiConnect(test, 1, 0.5, false); + } + else + %enemyCl = ClientGroup.getObject(1); + + //create the objective + if (! $testObjective) + { + $testObjective = new AIObjective(AIOAttackPlayer) + { + weightLevel1 = 10000; + description = "Attack the human!"; + targetClient = nameToId(LocalClientConnection); + location = ""; + offense = true; + defense = true; + }; + MissionCleanup.add($testObjective); + } + + //set the enemy inventory + %enemyPl = %enemyCl.player; + %enemyPl.setInventory(RepairKit,1); + %enemyPl.setInventory(Grenade,5); + //%enemyPl.setInventory(Blaster,1); + //%enemyPl.setInventory(Plasma,1); + %enemyPl.setInventory(Disc,1); + %enemyPl.setInventory(Chaingun, 1); + %enemyPl.setInventory(GrenadeLauncher, 1); + //%enemyPl.setInventory(Mortar, 1); + %enemyPl.setInventory(ChaingunAmmo, 100); + %enemyPl.setInventory(DiscAmmo, 15); + %enemyPl.setInventory(PlasmaAmmo,20); + %enemyPl.setInventory(GrenadeLauncherAmmo, 10); + %enemyPl.setInventory(MortarAmmo, 10); + + %enemyPl.setDamageLevel(0.0); + + //set the target inventory + %targetCl = 2; + %targetPl = %targetCl.player; + %targetPl.setInventory(RepairKit,1); + %targetPl.setInventory(Grenade,5); + //%targetPl.setInventory(Blaster,1); + //%targetPl.setInventory(Plasma,1); + %targetPl.setInventory(Disc,1); + %targetPl.setInventory(Chaingun, 1); + %targetPl.setInventory(GrenadeLauncher, 1); + //%targetPl.setInventory(Mortar, 1); + %targetPl.setInventory(ChaingunAmmo, 100); + %targetPl.setInventory(DiscAmmo, 15); + %targetPl.setInventory(PlasmaAmmo,20); + %targetPl.setInventory(GrenadeLauncherAmmo, 10); + %targetPl.setInventory(MortarAmmo, 10); + %targetPl.setDamageLevel(0.0); + + //now force the attack objective + AIForceObjective(%enemyCl, $testObjective); + %enemyCl.stepEngage(2); +} + +function aibump() +{ + %t1 = "-348 -470 142 0 0 1 0"; + %t2 = "-347 -453 142 0 0 1 3.14"; + + %t3 = "-348 -462 142 0 0 1 0"; + 2.player.setTransform(%t3); + + 3.player.setTransform(%t1); + 4.player.setTransform(%t2); + + 3.stepMove(%t2, 0.1); + 4.stepMove(%t1, 0.1); +} + +function aibump2() +{ + %t1 = "-345.082 -464.229 142 0 0 1 0"; + %t2 = "-347 -453 142 0 0 1 3.14"; + %t3 = "-347.22 -463.439 142 0 0 1 1.89"; + 2.player.setTransform(%t3); + + 3.player.setTransform(%t1); + 3.stepMove(%t2, 0.1); +} + +function aiTestDeploys(%client, %objective) +{ + //if we're just starting the test, unassign the client + if (!isObject(%objective)) + { + error("DEBUG begin testing deploy objectives!"); + $AITestDeployObjective = -1; + aiUnassignClient(%client); + } + + //if the client isn't still on the test objective, choose the next one + if (%client.objective != $AITestDeployObjective) + { + //if there's a corresponding "repairObjective" for the deploy, then the deploy succeeded + if (isobject($AITestDeployObjective)) + { + if (!isObject($AITestDeployObjective.repairObjective)) + $AITestDeployObjective.isInvalid = true; + } + + //loop through all the objectives, looking for next deploy ones... + %foundCurrent = !isObject($AITestDeployObjective); + %nextObjective = -1; + %found = false; + %count = $ObjectiveQ[%client.team].getCount(); + for (%i = 0; %i < %count && !%found; %i++) + { + %obj = $ObjectiveQ[%client.team].getObject(%i); + + //see if the objective is a group... + if (%obj.getClassName() !$= "AIObjective") + { + %grpCount = %obj.getCount(); + for (%j = 0; %j < %grpCount && !%found; %j++) + { + %grpObj = %obj.getObject(%j); + if (%grpObj.getName() $= "AIODeployEquipment") + { + if (%foundCurrent) + { + %nextObjective = %grpObj; + %found = true; + } + else if (%grpObj == $AITestDeployObjective) + %foundCurrent = true; + } + } + } + else if (%obj.getName() $= "AIODeployEquipment") + { + //see if this is the next one + if (%foundCurrent) + { + %nextObjective = %obj; + %found = true; + } + else if (%obj == $AITestDeployObjective) + %foundCurrent = true; + } + } + + if (isObject(%nextObjective)) + { + //kill all the turrets for your team... + while (isObject($AIRemoteTurretSet.getObject(0))) + $AIRemoteTurretSet.getObject(0).delete(); + + //remove any associated repairobjective from this deploy + if (isObject(%nextObjective.repairObjective)) + { + AIClearObjective(%nextObjective.repairObjective); + %nextObjective.repairObjective.delete(); + %nextObjective.repairObjective = ""; + } + + //assign the bot to the objective... + error("DEBUG testing objective:" SPC %nextObjective); + $AITestDeployObjective = %nextObjective; + AIUnassignClient(%client); + AIForceObjective(%client, $AITestDeployObjective, 10000); + } + else + { + error("DEBUG testing of deploy objectives is complete:"); + %count = $ObjectiveQ[%client.team].getCount(); + for (%i = 0; %i < %count && !%found; %i++) + { + %obj = $ObjectiveQ[%client.team].getObject(%i); + + //see if the objective is a group... + if (%obj.getClassName() !$= "AIObjective") + { + %grpCount = %obj.getCount(); + for (%j = 0; %j < %grpCount && !%found; %j++) + { + %grpObj = %obj.getObject(%j); + if (%grpObj.getName() $= "AIODeployEquipment") + { + if (%grpObj.isInvalid) + error(%grpObj SPC "is invalid."); + else + error(%grpObj SPC "passed."); + } + } + } + else if (%obj.getName() $= "AIODeployEquipment") + { + if (%obj.isInvalid) + error(%obj SPC "is invalid."); + else + error(%obj SPC "passed."); + } + } + return; + } + } + + //schedule the next call to see if we're still deploying... + schedule(2000, %client.player, "aiTestDeploys", %client, $AITestDeployObjective); +} + +//----------------------------------------------------------------------------- +//AI test pilot task +$TestPilotHeadings[0] = "203 -59 120"; +$TestPilotHeadings[1] = "52 10 120"; +$TestPilotHeadings[2] = "-112 125 120"; +$TestPilotHeadings[3] = "-195 219 120"; +$TestPilotHeadings[4] = "-198 323 120"; +$TestPilotHeadings[5] = "-38 423 120"; +$TestPilotHeadings[6] = "84 445 120"; +$TestPilotHeadings[7] = "290 382 120"; +$TestPilotHeadings[8] = "385 259 120"; +$TestPilotHeadings[9] = "255 6 120"; +$TestPilotHeadings[10] = "219 -49 120"; +$TestPilotHeadings[11] = "222 -168 120"; + +function AITestPilot::assume(%task, %client) +{ + %task.setWeightFreq(30); + %task.setMonitorFreq(10); + + //first, make sure the pilot is in light, and doesn't have an backpacks... + %client.player.throwPack(); + %client.player.setArmor(Light); + + //next, start the pilot on his way to mounting the vehicle + %client.pilotVehicle = true; + %client.stepMove(%task.vehicle.position, 0.25, $AIModeMountVehicle); + + %task.locationIndex = -1; +} + +function AITestPilot::weight(%task, %client) +{ + %task.setWeight(10000); +} + +function AITestPilot::monitor(%task, %client) +{ + //see if we've mounted yet + if (%task.locationIndex == -1) + { + //mount the vehicle + %client.pilotVehicle = true; + %client.stepMove(%task.vehicle.position, 0.25, $AIModeMountVehicle); + + if (isObject(%client.vehicleMounted)) + { + %task.locationIndex++; + %client.setPilotDestination($TestPilotHeadings[%task.locationIndex]); + } + } + + //else see if we're close enough to the current destination to choose the next + else + { + %pos = %client.vehicleMounted.position; + %pos2D = getWord(%pos, 0) SPC getWord(%pos, 1) SPC "0"; + %dest = $TestPilotHeadings[%task.locationIndex]; + %dest2D = getWord(%dest, 0) SPC getWord(%dest, 1) SPC "0"; + + if (VectorDist(%dest2D, %pos2D) < 20) + { + if ($TestPilotHeadings[%task.locationIndex + 1] !$= "") + { + %task.locationIndex++; + %client.setPilotDestination($TestPilotHeadings[%task.locationIndex]); + } + else + %client.setPilotAim($TestPilotHeadings[0]); + } + } +} + +function testPilot(%client, %vehicle) +{ + %client.clearTasks(); + + if (%vehicle $= "") + %vehicle = LocalClientConnection.vehicleMounted; + + %client.pilotTask = %client.addTask(AITestPilot); + %client.pilotTask.vehicle = %vehicle; +} + diff --git a/base/scripts/aiDefaultTasks.cs b/base/scripts/aiDefaultTasks.cs new file mode 100644 index 0000000..4035ec1 --- /dev/null +++ b/base/scripts/aiDefaultTasks.cs @@ -0,0 +1,992 @@ +//All tasks for deathmatch, hunters, and tasks that coincide with the current objective task live here... + +//Weights for tasks that override the objective task: must be between 4300 and 4700 +$AIWeightVehicleMountedEscort = 4700; +$AIWeightReturnTurretFire = 4675; +$AIWeightNeedItemBadly = 4650; +$AIWeightReturnFire = 4600; +$AIWeightDetectMine = 4500; +$AIWeightTauntVictim = 4400; +$AIWeightNeedItem = 4350; +$AIWeightDestroyTurret = 4300; + +//Weights that allow the objective task to continue: must be 3000 or less +$AIWeightFoundEnemy = 3000; +$AIWeightFoundItem = 2500; +$AIWeightFoundToughEnemy = 1000; +$AIWeightPatrolling = 2000; + +//Hunters weights... +$AIHuntersWeightMustCap = 4690; +$AIHuntersWeightShouldCap = 4425; +$AIHuntersWeightMustEngage = 4450; +$AIHuntersWeightShouldEngage = 4325; +$AIHuntersWeightPickupFlag = 4425; + +//Rabbit weights... +$AIRabbitWeightDefault = 4625; +$AIRabbitWeightNeedInv = 4325; + +//----------------------------------------------------------------------------- +//AIEngageTask is responsible for anything to do with engaging an enemy + +function AIEngageWhoWillWin(%client1, %client2) +{ + //assume both clients are alive - gather some info + if (%client1.isAIControlled()) + %skill1 = %client1.getSkillLevel(); + else + %skill1 = 0.5; + + if (%client2.isAIControlled()) + %skill2 = %client2.getSkillLevel(); + else + %skill2 = 0.5; + + %damage1 = %client1.player.getDamagePercent(); + %damage2 = %client2.player.getDamagePercent(); + + //first compare health + %tolerance1 = 0.5 + ((%skill1 - %skill2) * 0.3); + %tolerance2 = 0.5 + ((%skill2 - %skill1) * 0.3); + if (%damage1 - %damage2 > %tolerance1) + return %client2; + else if (%damage2 - %damage1 > %tolerance2) + return %client1; + + //health not a problem, see how the equipment compares for the two... + %weaponry1 = AIEngageWeaponRating(%client1); + %weaponry2 = AIEngageWeaponRating(%client2); + %effective = 20; + if (%weaponry1 < %effective && %weaponry2 >= %effective) + return %client2; + else if (%weaponry1 >= %effective && %weaponry2 < %effective) + return %client1; + + //no other criteria for now... return -1 to indicate a tie... + return -1; +} + +function AIEngageTask::init(%task, %client) +{ +} + +function AIEngageTask::assume(%task, %client) +{ + %task.setWeightFreq(9); + %task.setMonitorFreq(9); + %task.searching = false; + if (isObject(%client.shouldEngage.player)) + %task.searchLocation = %client.shouldEngage.player.getWorldBoxCenter(); +} + +function AIEngageTask::retire(%task, %client) +{ +} + +function AIEngageTask::weight(%task, %client) +{ + %player = %client.player; + if (!isObject(%player)) + return; + + %clientPos = %player.getWorldBoxCenter(); + %currentTarget = %client.shouldEngage; + if (!AIClientIsAlive(%currentTarget)) + %currentTarget = %client.getEngageTarget(); + %client.shouldEngage = -1; + %mustEngage = false; + %tougherEnemy = false; + + //first, make sure we actually can engage + if (AIEngageOutOfAmmo(%client)) + { + %client.shouldEngage = -1; + %task.setWeight(0); + return; + } + + //see if anyone has fired on us recently... + %losTimeout = 5000 + ($AIClientLOSTimeout * %client.getSkillLevel()); + if (AIClientIsAlive(%client.lastDamageClient, %losTimeout) && getSimTime() - %client.lastDamageTime < %losTimeout) + { + //see if we should turn on the new attacker + if (AIClientIsAlive(%currentTarget)) + { + %targPos = %currentTarget.player.getWorldBoxCenter(); + %curTargDist = %client.getPathDistance(%targPos); + + %newTargPos = %client.lastDamageClient.player.getWorldBoxCenter(); + %newTargDist = %client.getPathDistance(%newTargPos); + + //see if the new targ is no more than 30 m further + if (%newTargDist > 0 && %newTargDist < %curTargDist + 30) + { + %client.shouldEngage = %client.lastDamageClient; + %mustEngage = true; + } + } + else + { + %client.shouldEngage = %client.lastDamageClient; + %mustEngage = true; + } + } + + //no one has fired at us recently, see if we're near an enemy + else + { + %result = AIFindClosestEnemy(%client, 100, %losTimeout); + %closestEnemy = getWord(%result, 0); + %closestdist = getWord(%result, 1); + if (%closestEnemy > 0) + { + //see if we're right on top of them + %targPos = %closestEnemy.player.getWorldBoxCenter(); + %dist = %client.getPathDistance(%targPos); + + if (%dist > 0 && %dist < 20) + { + %client.shouldEngage = %closestEnemy; + %mustEngage = true; + } + + //else choose them only if we're not already attacking someone + else if (%currentTarget <= 0) + { + %client.shouldEngage = %closestEnemy; + %mustEngage = false; + + //Make sure the odds are not overwhelmingly in favor of the enemy... + if (AIEngageWhoWillWin(%client, %closestEnemy) == %closestEnemy) + %tougherEnemy = true; + } + } + } + + //if we still haven't found a new target, keep fighting the old one + if (%client.shouldEngage <= 0) + { + if (AIClientIsAlive(%currentTarget)) + { + //see if we still have sight of the current target + %hasLOS = %client.hasLOSToClient(%currentTarget); + %losTime = %client.getClientLOSTime(%currentTarget); + if (%hasLOS || %losTime < %losTimeout) + %client.shouldEngage = %currentTarget; + else + %client.shouldEngage = -1; + } + else + %client.shouldEngage = -1; + %mustEngage = false; + } + + //finally, set the weight + if (%client.shouldEngage > 0) + { + if (%mustEngage) + %task.setWeight($AIWeightReturnFire); + else if (%tougherEnemy) + %task.setWeight($AIWeightFoundToughEnemy); + else + %task.setWeight($AIWeightFoundEnemy); + } + else + %task.setWeight(0); +} + +function AIEngageTask::monitor(%task, %client) +{ + if (!AIClientIsAlive(%client.shouldEngage)) + { + %client.stop(); + %client.clearStep(); + %client.setEngageTarget(-1); + return; + } + + %hasLOS = %client.hasLOSToClient(%client.shouldEngage); + %losTime = %client.getClientLOSTime(%client.shouldEngage); + //%detectLocation = %client.getDetectLocation(%client.shouldEngage); + %detectPeriod = %client.getDetectPeriod(); + + //if we can see the target, engage... + if (%hasLOS || %losTime < %detectPeriod) + { + %client.stepEngage(%client.shouldEngage); + %task.searching = false; + %task.searchLocation = %client.shouldEngage.player.getWorldBoxCenter(); + } + + //else if we haven't for approx 5 sec... move to the last known location + else + { + //clear the engage target + %client.setEngageTarget(-1); + + if (! %task.searching) + { + %dist = VectorDist(%client.player.getWorldBoxCenter(), %task.searchLocation); + if (%dist < 4) + { + %client.stepIdle(%task.searchLocation); + %task.searching = true; + } + else + %client.stepMove(%task.searchLocation, 4.0); + } + } +} + +//----------------------------------------------------------------------------- +//AIPickupItemTask is responsible for anything to do with picking up an item + +function AIPickupItemTask::init(%task, %client) +{ +} + +function AIPickupItemTask::assume(%task, %client) +{ + %task.setWeightFreq(10); + %task.setMonitorFreq(10); + + %task.pickUpItem = -1; +} + +function AIPickupItemTask::retire(%task, %client) +{ +} + +function AIPickupItemTask::weight(%task, %client) +{ + //if we're already picking up an item, make sure it's still valid, then keep the weight the same... + if (%task.pickupItem > 0) + { + if (isObject(%task.pickupItem) && !%task.pickupItem.isHidden() && AICouldUseItem(%client, %task.pickupItem)) + return; + else + %task.pickupItem = -1; + } + + //otherwise, search for objects + //first, see if we can pick up health + %player = %client.player; + if (!isObject(%player)) + return; + + %damage = %player.getDamagePercent(); + %healthRad = %damage * 100; + %closestHealth = -1; + %closestHealthDist = %healthRad; + %closestHealthLOS = false; + %closestItem = -1; + %closestItemDist = 32767; + %closestItemLOS = false; + + //loop through the item list, looking for things to pick up + %itemCount = $AIItemSet.getCount(); + for (%i = 0; %i < %itemCount; %i++) + { + %item = $AIItemSet.getObject(%i); + if (!%item.isHidden()) + { + %dist = %client.getPathDistance(%item.getWorldBoxCenter()); + if ((%item.getDataBlock().getName() $= "RepairKit" || %item.getDataBlock().getName() $= "RepairPatch") && %damage > 0.3) + { + if (%dist > 0 && %dist < %closestHealthDist) + { + %closestHealth = %item; + %closestHealthDist = %dist; + + //check for LOS + %mask = $TypeMasks::TerrainObjectType | $TypeMasks::InteriorObjectType; + %closestHealthLOS = !containerRayCast(%client.player.getWorldBoxCenter(), %item.getWorldBoxCenter(), %mask, 0); + } + } + else + { + //only pick up stuff within 35m + if (%dist < 35) + { + if (AICouldUseItem(%client, %item)) + { + if (%dist < %closestItemDist) + { + %closestItem = %item; + %closestItemDist = %dist; + + //check for LOS + %mask = $TypeMasks::TerrainObjectType | $TypeMasks::InteriorObjectType; + %closestItemLOS = !containerRayCast(%client.player.getWorldBoxCenter(), %item.getWorldBoxCenter(), %mask, 0); + } + } + } + } + } + } + + //now set the weight + if (%closestHealth > 0) + { + //only choose an item if it's at least 25 m closer than health... + //and we're not engageing someone or not that badly in need + %currentTarget = %client.getEngageTarget(); + if (%closestItem > 0 && %closetItemDist < %closestHealthDist - 25 && (%damage < 0.6 || %currentTarget <= 0) && %closestItemLOS) + { + %task.pickupItem = %closestItem; + if (AIEngageOutOfAmmo(%client)) + %task.setWeight($AIWeightNeedItemBadly); + else if (%closestItemDist < 10 && %closestItemLOS) + %task.setWeight($AIWeightNeedItem); + else if (%closestItemLOS) + %task.setWeight($AIWeightFoundItem); + else + %task.setWeight(0); + } + else + { + if (%damage > 0.8) + { + %task.pickupItem = %closestHealth; + %task.setWeight($AIWeightNeedItemBadly); + } + else if (%closestHealthLOS) + { + %task.pickupItem = %closestHealth; + %task.setWeight($AIWeightNeedItem); + } + else + %task.setWeight(0); + } + } + else if (%closestItem > 0) + { + %task.pickupItem = %closestItem; + if (AIEngageOutOfAmmo(%client)) + %task.setWeight($AIWeightNeedItemBadly); + else if (%closestItemDist < 10 && %closestItemLOS) + %task.setWeight($AIWeightNeedItem); + else if (%closestItemLOS) + %task.setWeight($AIWeightFoundItem); + else + %task.setWeight(0); + } + else + %task.setWeight(0); +} + +function AIPickupItemTask::monitor(%task, %client) +{ + //move to the pickup location + if (isObject(%task.pickupItem)) + %client.stepMove(%task.pickupItem.getWorldBoxCenter(), 0.25); + + //this call works in conjunction with AIEngageTask + %client.setEngageTarget(%client.shouldEngage); +} + +//----------------------------------------------------------------------------- +//AIUseInventoryTask will cause them to use an inv station if they're low +//on ammo. This task should be used only for DM and Hunters - most objectives +//have their own logic for when to use an inv station... + +function AIUseInventoryTask::init(%task, %client) +{ +} + +function AIUseInventoryTask::assume(%task, %client) +{ + %task.setWeightFreq(15); + %task.setMonitorFreq(5); + + //mark the current time for the buy inventory state machine + %task.buyInvTime = getSimTime(); +} + +function AIUseInventoryTask::retire(%task, %client) +{ + //reset the state machine time stamp... + %task.buyInvTime = getSimTime(); +} + +function AIUseInventoryTask::weight(%task, %client) +{ + //first, see if we can pick up health + %player = %client.player; + if (!isObject(%player)) + return; + + %damage = %player.getDamagePercent(); + %weaponry = AIEngageWeaponRating(%client); + + //first, see if we need equipment or health + if (%damage < 0.3 && %weaponry >= 40) + { + %task.setWeight(0); + return; + } + + //don't use inv stations if we're not that badly damaged, and we're in the middle of a fight + if (%damage < 0.6 && %client.getEngageTarget() > 0 && !AIEngageOutOfAmmo(%client)) + { + %task.setWeight(0); + return; + } + + //if we're already buying, continue + if (%task.buyInvTime == %client.buyInvTime) + { + //set the weight - if our damage is above 0.8 or our we're out of ammo + if (%damage > 0.8 || AIEngageOutOfAmmo(%client)) + %task.setWeight($AIWeightNeedItemBadly); + else + %task.setWeight($AIWeightNeedItem); + return; + } + + //we need to search for an inv station near us... + %result = AIFindClosestInventory(%client, false); + %closestInv = getWord(%result, 0); + %closestDist = getWord(%result, 1); + + //only use inv stations if we're right near them... patrolTask will get us nearer if required + if (%closestDist > 35) + { + %task.setWeight(0); + return; + } + //If they don't have LOS to the inv station, they should only use it if they need something badly + %mask = $TypeMasks::TerrainObjectType | $TypeMasks::InteriorObjectType; + %hasLOS = !containerRayCast(%client.player.getWorldBoxCenter(), %closestInv.getWorldBoxCenter(), %mask, 0); + + //set the weight... + %task.closestInv = %closestInv; + if (%damage > 0.8 || AIEngageOutOfAmmo(%client)) + %task.setWeight($AIWeightNeedItemBadly); + else if (%closestDist < 20 && %hasLOS && (AIEngageWeaponRating(%client) <= 30 || %damage > 0.4)) + %task.setWeight($AIWeightNeedItem); + else if (%hasLOS) + %task.setWeight($AIWeightFoundItem); + else + %task.setWeight(0); +} + +function AIUseInventoryTask::monitor(%task, %client) +{ + //make sure we still need equipment + %player = %client.player; + if (!isObject(%player)) + return; + + %damage = %player.getDamagePercent(); + %weaponry = AIEngageWeaponRating(%client); + if (%damage < 0.3 && %weaponry >= 40) + { + %task.buyInvTime = getSimTime(); + return; + } + + //pick a random set based on armor... + %randNum = getRandom(); + if (%randNum < 0.4) + %buySet = "LightEnergyDefault MediumEnergySet HeavyEnergySet"; + else if (%randNum < 0.7) + %buySet = "LightShieldSet MediumShieldSet HeavyShieldSet"; + else + %buySet = "LightEnergyELF MediumRepairSet HeavyAmmoSet"; + + //reset the simTime if we're not still in progress + %result = AIBuyInventory(%client, "", %buySet, %task.buyInvTime); + if (%result !$= "InProgress") + %task.buyInvTime = getSimTime(); + + + //this call works in conjunction with AIEngageTask + %client.setEngageTarget(%client.shouldEngage); +} + +//----------------------------------------------------------------------------- +//AITauntCorpseTask is should happen only after an enemy is freshly killed + +function AITauntCorpseTask::init(%task, %client) +{ +} + +function AITauntCorpseTask::assume(%task, %client) +{ + %task.setWeightFreq(11); + %task.setMonitorFreq(11); +} + +function AITauntCorpseTask::retire(%task, %client) +{ +} + +function AITauntCorpseTask::weight(%task, %client) +{ + %task.corpse = %client.getVictimCorpse(); + if (%task.corpse > 0 && getSimTime() - %client.getVictimTime() < 15000) + { + //see if we're already taunting, and if it's time to stop + if ((%task.tauntTime > %client.getVictimTime()) && (getSimTime() - %task.tauntTime > 5000)) + %task.corpse = -1; + else + { + //if the corpse is within 50m, taunt + %distToCorpse = %client.getPathDistance(%task.corpse.getWorldBoxCenter()); + if (%dist < 0 || %distToCorpse > 50) + %task.corpse = -1; + } + } + else + %task.corpse = -1; + + //set the weight + if (%task.corpse > 0) + { + //don't taunt someone if there's an enemy right near by... + %result = AIFindClosestEnemy(%client, 40, 15000); + %closestEnemy = getWord(%result, 0); + %closestdist = getWord(%result, 1); + if (%closestEnemy > 0) + %task.setWeight(0); + else + %task.setWeight($AIWeightTauntVictim); + } + else + %task.setWeight(0); +} + +$AITauntChat[0] = "gbl.aww"; +$AITauntChat[1] = "gbl.brag"; +$AITauntChat[2] = "gbl.obnoxious"; +$AITauntChat[3] = "gbl.sarcasm"; +$AITauntChat[4] = "gbl.when"; +function AITauntCorpseTask::monitor(%task, %client) +{ + //make sure we still have a corpse, and are not fighting anyone + if (%client.getEngageTarget() <= 0 && %task.corpse > 0 && isObject(%task.corpse)) + { + %clientPos = %client.player.getWorldBoxCenter(); + %corpsePos = %task.corpse.getWorldBoxCenter(); + %distToCorpse = VectorDist(%clientPos, %corpsePos); + if (%distToCorpse < 2.0) + { + //start the taunt! + if (%task.tauntTime < %client.getVictimTime()) + { + %task.tauntTime = getSimTime(); + %client.stop(); + + if (getRandom() > 0.2) + { + //pick the sound and taunt cels + %sound = $AITauntChat[mFloor(getRandom() * 3.99)]; + %minCel = 2; + %maxCel = 8; + schedule(250, %client, "AIPlayAnimSound", %client, %corpsePos, %sound, %minCel, %maxCel, 0); + } + //say 'bye' :) + else + schedule(250, %client, "AIPlayAnimSound", %client, %corpsePos, "gbl.bye", 2, 2, 0); + } + } + else + %client.stepMove(%task.corpse.getWorldBoxCenter(), 1.75); + } +} + +//----------------------------------------------------------------------------- +//AIPatrolTask used to wander around the map (DM and Hunters mainly) looking for something to do... + +function AIPatrolTask::init(%task, %client) +{ +} + +function AIPatrolTask::assume(%task, %client) +{ + %task.setWeightFreq(13); + %task.setMonitorFreq(13); + %task.findLocation = true; + %task.patrolLocation = "0 0 0"; + %task.idleing = false; + %task.idleEndTime = 0; +} + +function AIPatrolTask::retire(%task, %client) +{ +} + +function AIPatrolTask::weight(%task, %client) +{ + %task.setWeight($AIWeightPatrolling); +} + +function AIPatrolTask::monitor(%task, %client) +{ + //this call works in conjunction with AIEngageTask + %client.setEngageTarget(%client.shouldEngage); + + //see if we're close enough to our patrol point + if (%task.idleing) + { + if (getSimTime() > %task.idleEndTime) + { + %task.findLocation = true; + %task.idleing = false; + } + } + + //see if we need to find a place to go... + else if (%task.findLocation) + { + //first, see if we're in need of either health, or ammo + //note: normally, I'd be tempted to put this kind of "looking for health" code + //into the AIPickupItemTask, however, that task will be used in CTF, where you + //don't want people on AIDefendLocation to leave their post to hunt for health, etc... + //AIPickupItemTask only deals with items within a 30m radius around the bot. + //AIPatrolTask will move the bot to the vicinity of an item, then AIPickUpItemTask + //will finish the job... + %foundItemLocation = false; + %damage = %client.player.getDamagePercent(); + if (%damage > 0.7) + { + //search for a health kit + %closestHealth = AIFindSafeItem(%client, "Health"); + if (%closestHealth > 0) + { + %task.patrolLocation = %closestHealth.getWorldBoxCenter(); + %foundItemLocation = true; + } + } + else if (AIEngageOutOfAmmo(%client)) + { + //search for a Ammo or a weapon... + %closestItem = AIFindSafeItem(%client, "Ammo"); + if (%closestItem > 0) + { + %task.patrolLocation = %closestItem.getWorldBoxCenter(); + %foundItemLocation = true; + } + } + + //now see if we don't really have good equipment... + if (!%foundItemLocation && AIEngageWeaponRating(%client) < 20) + { + //search for any useful item + %closestItem = AIFindSafeItem(%client, "Any"); + if (%closestItem > 0) + { + %task.patrolLocation = %closestItem.getWorldBoxCenter(); + %foundItemLocation = true; + } + } + //choose a randomish location only if we're not in need of health or ammo + if (!%foundItemLocation) + { + //find a random item/inventory in the map, and pick a spawn point near it... + %pickGraphNode = false; + %chooseSet = 0; + if ($AIInvStationSet.getCount() > 0) + %chooseSet = $AIInvStationSet; + else if ($AIWeaponSet.getCount() > 0) + %chooseSet = $AIWeaponSet; + else if ($AIItemSet.getCount() > 0) + %chooseSet = $AIItemSet; + + if (!%chooseSet) + %pickGraphNode = true; + + //here we pick whether we choose a random map point, or a point based on an item... + if (getRandom() < 0.3) + %pickGraphNode = true; + + //here we decide whether we should choose a player location... a bit of a cheat but + //it's scaled by the bot skill level + %pickPlayerLocation = false; + %skill = %client.getSkillLevel(); + if (%skill < 1.0) + %skill = %skill / 2.0; + if (getRandom() < (%skill * %skill) && ClientGroup.getCount() > 1) + { + //find a random client + %count = ClientGroup.getCount(); + %index = (getRandom() * (%count - 0.1)); + %cl = ClientGroup.getObject(%index); + if (%cl != %client && AIClientIsAlive(%cl)) + { + %task.patrolLocation = %cl.player.getWorldBoxCenter(); + %pickGraphNode = false; + %pickPlayerLocation = true; + } + } + + if (!%pickGraphNode && !%pickPlayerLocation) + { + %itemCount = %chooseSet.getCount(); + %item = %chooseSet.getObject(getRandom() * (%itemCount - 0.1)); + %nodeIndex = navGraph.randNode(%item.getWorldBoxCenter(), 10, true, true); + if (%nodeIndex <= 0) + %pickGraphNode = true; + else + %task.patrolLocation = navGraph.randNodeLoc(%nodeIndex); + } + + //see if we failed above or have to pick just a random spot on the graph - use the spawn points... + if (%pickGraphNode) + { + %task.patrolLocation = Game.pickPlayerSpawn(%client, true); + if (%task.patrolLocation == -1) + { + %client.stepIdle(%client.player.getWorldBoxCenter()); + return; + } + } + } + + //now that we have a new location - move towards it + %task.findLocation = false; + %client.stepMove(%task.patrolLocation, 8.0); + } + + //else we're on patrol - see if we're close to our destination + else + { + %client.stepMove(%task.patrolLocation, 8.0); + %distToDest = %client.getPathDistance(%task.patrolLocation); + if (%distToDest > 0 && %distToDest < 10) + { + %task.idleing = true; + %task.idleEndTime = 4000 + getSimTime() + (getRandom() * 6000); + %client.stepIdle(%client.player.getWorldBoxCenter()); + } + } +} + +//----------------------------------------------------------------------------- +//AIEngageTurretTask is responsible for returning turret fire... + +function AIEngageTurretTask::init(%task, %client) +{ +} + +function AIEngageTurretTask::assume(%task, %client) +{ + %task.setWeightFreq(4); + %task.setMonitorFreq(4); +} + +function AIEngageTurretTask::retire(%task, %client) +{ + %client.engageTurret = -1; + %client.setEngagetarget(-1); +} + +function AIEngageTurretTask::weight(%task, %client) +{ + //see if we're still fighting a turret + %elapsedTime = getSimTime() - %task.startAttackTime; + if (isObject(%task.engageTurret) && %task.engageTurret.getDataBlock().getClassName() $= "TurretData") + { + if (%task.engageTurret == %client.lastdamageTurret) + { + if (%task.engageTurret.isEnabled() && getSimTime() - %client.lastDamageTurretTime < 5000) + %task.setWeight($AIWeightReturnTurretFire); + else + %task.setWeight($AIWeightDestroyTurret); + } + else if (AIClientIsAlive(%client, %elapsedTime)) + { + //if another turret is shooting us, disable this one first... + if (isObject(%client.lastDamageTurret) && %client.lastDamageTurret.getDataBlock().getClassName() $= "TurretData") + { + if (%task.engageTurret.isEnabled()) + %task.setWeight($AIWeightReturnTurretFire); + else + { + //see if we need to switch to the new turret + if (%client.lastDamageTurret.isEnabled() && %client.lastDamageTurretTime < 5000) + { + %task.engageTurret = %client.lastDamageTurret; + %task.attackInitted = false; + %task.setWeight($AIWeightDestroyTurret); + } + + else + %task.setWeight($AIWeightReturnTurretFire); + } + } + else + { + if (%task.engageTurret.isEnabled() && getSimTime() - %client.lastDamageTurretTime < 5000) + %task.setWeight($AIWeightReturnTurretFire); + else + %task.setWeight($AIWeightDestroyTurret); + } + } + + //else we died since - clear out the vars + else + { + %task.engageTurret = -1; + %task.setWeight(0); + } + } + + //else see if we have a new target + else if (isObject(%client.lastDamageTurret) && %client.lastDamageTurret.getDataBlock().getClassName() $= "TurretData") + { + %task.engageTurret = %client.lastDamageTurret; + %task.attackInitted = false; + + if (%client.lastDamageTurret.isEnabled() && %client.lastDamageTurretTime < 5000) + %task.setWeight($AIWeightReturnTurretFire); + else + %task.setWeight($AIWeightDestroyTurret); + } + + //else no turret to attack... (later, do a query to find turrets before they attack) + else + { + %task.engageTurret = -1; + %task.setWeight(0); + } + +} + +function AIEngageTurretTask::monitor(%task, %client) +{ + if (isObject(%task.engageTurret) && %task.engageTurret.getDataBlock().getClassName() $= "TurretData") + { + //set the AI to fire at the turret + %client.setEngageTarget(-1); + %client.setTargetObject(%task.engageTurret); + + %clientPos = %client.player.getWorldBoxCenter(); + %turretPos = %task.engageTurret.getWorldBoxCenter(); + + //control the movement - first, hide, then wait, then attack + if (!%task.attackInitted) + { + %task.attackInitted = true; + %task.startAttackTime = getSimTime(); + %task.hideLocation = %client.getHideLocation(%turretPos, 40.0, %clientPos, 4.0); + %client.stepMove(%task.hideLocation, 2.0); + } + else if (getSimTime() - %task.startAttackTime > 5000) + { + %client.stepMove(%task.engageTurret.getWorldBoxCenter(), 8.0); + } + } +} + +//----------------------------------------------------------------------------- +//AIAvoidMineTask is responsible for detecting/destroying enemy mines... + +function AIDetectMineTask::init(%task, %client) +{ +} + +function AIDetectMineTask::assume(%task, %client) +{ + %task.setWeightFreq(7); + %task.setMonitorFreq(7); +} + +function AIDetectMineTask::retire(%task, %client) +{ + %task.engageMine = -1; + %task.attackInitted = false; + %client.setTargetObject(-1); +} + +function AIDetectMineTask::weight(%task, %client) +{ + //crappy hack, but they need the proper weapon before they can destroy a mine... + %player = %client.player; + if (!isObject(%player)) + return; + + %hasPlasma = (%player.getInventory("Plasma") > 0) && (%player.getInventory("PlasmaAmmo") > 0); + %hasDisc = (%player.getInventory("Disc") > 0) && (%player.getInventory("DiscAmmo") > 0); + + if (!%hasPlasma && !%hasDisc) + { + %task.setWeight(0); + return; + } + + //if we're already attacking a mine, + if (%task.engageMine > 0 && isObject(%task.engageMine)) + { + %task.setWeight($AIWeightDetectMine); + return; + } + //see if we're within the viscinity of a new (enemy) mine + %task.engageMine = -1; + %closestMine = -1; + %closestDist = 15; //initialize so only mines within 15 m will be detected... + %mineCount = $AIDeployedMineSet.getCount(); + for (%i = 0; %i < %mineCount; %i++) + { + %mine = $AIDeployedMineSet.getObject(%i); + %mineTeam = %mine.sourceObject.team; + + %minePos = %mine.getWorldBoxCenter(); + %clPos = %client.player.getWorldBoxCenter(); + + //see if the mine is the closest... + %mineDist = VectorDist(%minePos, %clPos); + if (%mineDist < %closestDist) + { + //now see if we're more or less heading towards the mine... + %clVelocity = %client.player.getVelocity(); + %clVelocity = getWord(%clVelocity, 0) SPC getWord(%clVelocity, 1) SPC "0"; + %mineVector = VectorSub(%minePos, %clPos); + %mineVector = getWord(%mineVector, 0) SPC getWord(%mineVector, 1) SPC "0"; + if (VectorLen(%clVelocity) > 2.0 && VectorLen(%mineVector > 2.0)) + { + %clNormal = VectorNormalize(%clVelocity); + %mineNormal = VectorNormalize(%mineVector); + if (VectorDot(%clNormal, %mineNormal) > 0.3) + { + %closestMine = %mine; + %closestDist = %mineDist; + } + } + } + } + + //see if we found a mine to attack + if (%closestMine > 0) + { + %task.engageMine = %closestMine; + %task.attackInitted = false; + %task.setWeight($AIWeightDetectMine); + } + else + %task.setWeight(0); +} + +function AIDetectMineTask::monitor(%task, %client) +{ + if (%task.engageMine > 0 && isObject(%task.engageMine)) + { + if (!%task.attackInitted) + { + %task.attackInitted = true; + %client.stepRangeObject(%task.engageMine, "DefaultRepairBeam", 6, 12); + %client.setEngageTarget(-1); + %client.setTargetObject(-1); + } + + else if (%client.getStepStatus() $= "Finished") + { + %client.stop(); + %client.setTargetObject(%task.engageMine); + } + } +} + +//----------------------------------------------------------------------------- diff --git a/base/scripts/aiHumanTasks.cs b/base/scripts/aiHumanTasks.cs new file mode 100644 index 0000000..3137a82 --- /dev/null +++ b/base/scripts/aiHumanTasks.cs @@ -0,0 +1,292 @@ + +function aiAddHumanObjective(%client, %objective, %targetClient, %fromCmdMap) +{ + //first, make sure the objective Q for the given team exists + if (!isObject($ObjectiveQ[%client.team])) + return 0; + + //if a target client is specified, create a link if we can... + if (%targetClient > 0) + { + if (aiHumanHasControl(%client, %targetClient) || (%targetClient.isAIControlled() && !aiAlreadyControlled(%targetClient))) + aiSetHumanControl(%client, %targetClient); + else + return 0; + } + + //special (hacky) case here for AIOBombLocation objectives + if (%objective.getName() $= "AIOBombLocation") + { + if (!isObject($AIBombLocationSet)) + return 0; + + %objective.team = %client.team; + $AIBombLocationSet.add(%objective); + return %objective; + } + + //parse the type of objective, and see if it already exists... + %useThisObjective = -1; + %objQ = $ObjectiveQ[%client.team]; + if (%objective.getName() $= "AIOEscortPlayer" || %objective.getName() $= "AIOAttackPlayer") + { + //first, make sure the objective is legit + if (!AIClientIsAlive(%objective.targetClientId)) + return 0; + + //fill in the description: + %objective.description = %objective.getName() SPC getTaggedString(%objective.targetClientId.name); + + //now see if the objective already exists... + %count = %objQ.getCount(); + for (%i = 0; %i < %count; %i++) + { + %obj = %objQ.getObject(%i); + if (%obj.getName() $= %objective.getName()) + { + //if we've found a previously existing version, use it instead of the new objective + if (%obj.issuedByClientId == %client && %obj.targetClientId == %objective.targetClientId) + { + %useThisObjective = %obj; + break; + } + } + } + } + + else if (%objective.getName() $= "AIODefendLocation" || %objective.getName() $= "AIOAttackLocation") + { + //make sure it's a valid objective + if (%objective.location $= "" || %objective.location $= "0 0 0") + return 0; + + //fill in the description: + %objective.description = %objective.getName() @ " at" SPC %objective.location; + + //look for a duplicate... + %count = %objQ.getCount(); + for (%i = 0; %i < %count; %i++) + { + %obj = %objQ.getObject(%i); + if (%obj.getName() $= %objective.getName()) + { + if (%obj.issuedByClientId == %client && VectorDist(%objective.location, %obj.location) < 30) + { + %useThisObjective = %obj; + break; + } + } + } + } + + else if (%objective.getName() $= "AIOAttackObject" || %objective.getName() $= "AIORepairObject" || + %objective.getName() $= "AIOLazeObject" || %objective.getName() $= "AIOMortarObject" || + %objective.getName() $= "AIOTouchObject") + { + //make sure it's a valid objective + if (!isObject(%objective.targetObjectId)) + return 0; + + //fill in the description: + %objective.description = %objective.getName() SPC %objective.targetObjectId.getDataBlock().getName(); + + //look for a duplicate... + %count = %objQ.getCount(); + for (%i = 0; %i < %count; %i++) + { + %obj = %objQ.getObject(%i); + if (%obj.getName() $= %objective.getName()) + { + if (%obj.issuedByClientId == %client && %objective.targetObjectId == %obj.targetObjectId) + { + %useThisObjective = %obj; + break; + } + } + } + } + else if (%objective.getName() $= "AIODeployEquipment") + { + //make sure it's a valid objective + if (%objective.location $= "" || %objective.location $= "0 0 0" || %objective.equipment $= "") + return 0; + + //fill in the description: + %objective.description = %objective.getName() SPC %objective.equipment SPC "at" SPC %objective.location; + + //look for a duplicate... + %count = %objQ.getCount(); + for (%i = 0; %i < %count; %i++) + { + %obj = %objQ.getObject(%i); + if (%obj.getName() $= %objective.getName()) + { + if (%obj.issuedByClientId == %client && VectorDist(%objective.location, %obj.location) < 8 && %objective.equipment == %obj.equipment) + { + %useThisObjective = %obj; + break; + } + } + } + } + + //if we found a previously added objective, delete the submitted one + if (%useThisObjective > 0) + { + %objective.delete(); + } + + //otherwise add it to the objective Q + else + { + %useThisObjective = %objective; + $ObjectiveQ[%client.team].add(%useThisObjective); + %objective.shouldAcknowledge = true; + //now that it's been added, see if anyone picks it up within 10 seconds + schedule(10000, %objective, "AIReassessHumanObjective", %objective); + } + + //now see if we're supposed to force the target to the objective + //the link will have already been checked at the top... + if (%targetClient > 0) + { + //if we were previously assigned to an objective which was forced on this client, we need to delete it... + %prevObjective = %targetClient.objective; + if (%prevObjective != %useThisObjective && %prevObjective.issuedByClientId == %targetClient.controlByHuman) + { + AIClearObjective(%prevObjective); + %prevObjective.delete(); + } + + //if the command is an escort command, issue it at the forced escort weight instead + %forcedWeight = $AIWeightHumanIssuedCommand; + if (%useThisObjective.getName() $= "AIOEscortPlayer") + %forcedWeight = $AIWeightHumanIssuedEscort; + + //reweight the client's objective + %testWeight = 0; + if (isObject(%client.objective)) + %testWeight = %client.objective.weight(%client, %client.objectiveLevel, 0, %inventoryStr); + if (%testWeight <= 0 || %testWeight > %client.objectiveWeight) + %client.objectiveWeight = %testWeight; + + //see if we should force the objective + if (%targetClient.objectiveWeight <= %forcedWeight) + { + AIForceObjective(%targetClient, %useThisObjective, %forcedWeight); + + //clearing the prev objective will undo the link - re-do it here + aiSetHumanControl(%client, %targetClient); + + //send the "command accepted response" + if (!%fromCmdMap) + { + if (isObject(%client.player) && VectorDist(%targetClient.player.position, %client.player.position) <= 40) + schedule(250, %targetClient.player, "AIPlayAnimSound", %targetClient, %client.player.getWorldBoxCenter(), "cmd.acknowledge", 1, 1, 0); + } + else + serverCmdAcceptTask(%targetClient, %client, -1, %useThisObjective.ackDescription); + } + else + { + //send the "command declined response" + if (!%fromCmdMap) + { + if (isObject(%client.player) && VectorDist(%targetClient.player.position, %client.player.position) <= 40) + { + schedule(250, %targetClient.player, "AIPlayAnimSound", %targetClient, %client.player.getWorldBoxCenter(), "cmd.decline", -1, -1, 0); + schedule(2000, %client.player, "AIRespondToEvent", %client, 'ChatCmdWhat', %targetClient); + } + } + else + serverCmdDeclineTask(%targetClient, %client, %useThisObjective.ackDescription); + } + } + + //return the objective used, so the calling function can know whether to delete the parameter one... + return %useThisObjective; +} + +function AIReassessHumanObjective(%objective) +{ + if (%objective.issuedByHuman) + { + //see if there's anyone still assigned to this objective + if (!AIClientIsAlive(%objective.clientLevel1) && !AIClientIsAlive(%objective.clientLevel2) && !AIClientIsAlive(%objective.clientLevel3)) + { + AIClearObjective(%objective); + %objective.delete(); + } + + //else reassess this objective in another 10 seconds + else + schedule(10000, %objective, "AIReassessHumanObjective", %objective); + } +} + +function aiAttemptHumanControl(%humanClient, %aiClient) +{ + if (!aiAlreadyControlled(%aiClient)) + { + aiSetHumanControl(%humanClient, %aiClient); + return true; + } + else + return false; +} + +function aiHumanHasControl(%humanClient, %aiClient) +{ + if (AIClientIsAlive(%humanClient) && AIClientIsAlive(%aiClient)) + if (%humanClient.controlAI == %aiClient && %aiClient.controlByHuman == %humanClient) + return true; + + return false; +} + +function aiAlreadyControlled(%aiClient) +{ + if (AIClientIsAlive(%aiClient) && AIClientIsAlive(%aiClient.controlByHuman)) + if (%aiClient.controlByHuman.controlAI == %aiClient) + return true; + + return false; +} + +function aiReleaseHumanControl(%humanClient, %aiClient) +{ + //make sure they were actually linked + if (!aiHumanHasControl(%humanClient, %aiClient)) + return; + + aiBreakHumanControl(%humanClient, %aiClient); +} + +function aiSetHumanControl(%humanClient, %aiClient) +{ + //make sure it's from a human to an ai + if (%humanClient.isAIControlled() || !%aiClient.isAIControlled()) + return; + + //these checks should be redundant, but... + if (%humanClient.controlAI > 0) + aiBreakHumanControl(%humanClient, %humanClient.controlAI); + + if (%aiClient.controlByHuman > 0) + aiBreakHumanControl(%aiClient.controlByHuman, %aiClient); + + //create the link + %humanClient.controlAI = %aiClient; + %aiClient.controlByHuman = %humanClient; +} + +function aiBreakHumanControl(%humanClient, %aiClient) +{ + //make sure they were actually linked + if (!aiHumanHasControl(%humanClient, %aiClient)) + return; + + //for now, just break the link, and worry about unassigning objectives later... + %humanClient.controlAI = ""; + %aiClient.controlByHuman = ""; +} \ No newline at end of file diff --git a/base/scripts/aiHunters.cs b/base/scripts/aiHunters.cs new file mode 100644 index 0000000..6176fb6 --- /dev/null +++ b/base/scripts/aiHunters.cs @@ -0,0 +1,445 @@ +//----------------------------------------------- +// AI functions for Hunters +//--------------------------------------------------------------------------- + +// globals +$AIHuntersFlagSearchRadius = 300; +$AIHuntersCloseFlagDist = 40; +$AIHuntersAttackClientFlagCount = 10; +$AIHuntersMinFlagsToCap = 3; + +//--------------------------------------------------------------------------- + +function HuntersGame::onAIRespawn(%game, %client) +{ + //add the default task + if (! %client.defaultTasksAdded) + { + %client.defaultTasksAdded = true; + %client.addTask(AIEngageTask); + %client.addTask(AIPickupItemTask); + %client.addTask(AIUseInventoryTask); + %client.addTask(AITauntCorpseTask); + %client.addTask(AIEngageTurretTask); + %client.addtask(AIDetectMineTask); + %client.addTask(AIPatrolTask); + %client.huntersTask = %client.addTask(AIHuntersTask); + } +} + +//--------------------------------------------------------------------------- + +function HuntersGame::AIInit(%game) +{ + //call the default AIInit() function + AIInit(); +} + +//--------------------------------------------------------------------------- +//AIHuntersTask functions +//--------------------------------------------------------------------------- +function AIHuntersTask::init(%task, %client) +{ +} + +//--------------------------------------------------------------------------- + +function AIHuntersTask::assume(%task, %client) +{ + %task.setWeightFreq(10); + %task.setMonitorFreq(10); + %task.pickupFlag = -1; + %task.engageTarget = -1; + %task.capFlags = false; +} + +function AIHuntersTask::retire(%task, %client) +{ + %task.pickupFlag = -1; + %task.engageTarget = -1; + %task.capFlags = false; +} + +//--------------------------------------------------------------------------- + +function AIHuntersTask::weight(%task, %client) +{ + // init flag search vars + %player = %client.player; + if (!isObject(%player)) + return; + + %clientPos = %player.getWorldBoxCenter(); + %task.pickupFlag = -1; + %task.engageTarget = -1; + %task.capFlags = false; + + //find the closest flag + %flagVars = AIFindClosestFlag(%client, $AIHuntersFlagSearchRadius); + %closestFlag = getWord(%flagVars, 0); + %closestFlagDist = getWord(%flagVars, 1); + + //find the dist to the nexus + %nexusPos = Game.Nexus.getId().getWorldBoxCenter(); + %nexusDist = %client.getPathDistance(%nexusPos); + if (%nexusDist < 0) + %nexusDist = 32767; + + //find the dist to the closest health + %healthDist = 32767; + %damage = %client.player.getDamagePercent(); + if (%damage > 0.7) + { + //search for a health kit + %closestHealth = AIFindSafeItem(%client, "Health"); + if (%closestHealth > 0) + { + %healthDist = %client.getPathDistance(%closestHealth); + if (%healthDist < 0) + %healthDist = 32767; + } + + //else search for an inventory station + else + { + %result = AIFindClosestInventory(%client, false); + %closestInv = getWord(%result, 0); + %closestDist = getWord(%result, 1); + if (%closestInv > 0) + %healthDist = %closestDist; + } + } + + //see if we need to cap - make sure we're actually able first + %mustCap = false; + %shouldCap = false; + %numToScore = %client.flagCount - 1; + %hoardModeOn = Game.hoardModeActive(); + if ((!Game.greedMode || %numToScore >= Game.greedMinFlags) && !Game.hoardModeActive() && %numToScore >= $AIHuntersMinFlagsToCap) + { + //find out how many points would be scored + %potentialScore = (%numToScore * (%numToScore + 1)) / 2; + + //find out how many flags we need to take the lead... + %needFlagsForLead = 0; + %highestScore = 0; + %clientIsInLead = false; + if (Game.teamMode) + { + %teamCount = Game.numTeams; + for (%i = 1; %i <= %teamCount; %i++) + { + if ($teamScore[%i] > %highestScore) + %highestScore = $teamScore[%i]; + } + + //see if we're in the lead... + if (%highestScore == $teamScore[%client.team]) + %clientIsInLead = true; + else + { + %tempScore = $teamScore[%client.team] + %potentialScore; + %flagValue = %numToScore + 1; + while (%tempScore < %highestScore) + { + %tempScore += %flagValue; + %flagValue++; + %needFlagsForLead++; + } + } + } + else + { + %clientCount = ClientGroup.getCount(); + for (%i = 0; %i < %clientCount; %i++) + { + %cl = ClientGroup.getObject(%i); + if (%cl.score > %highestScore) + %highestScore = %cl.score; + } + + //see if we're in the lead + if (%highestScore == %client.score) + %clientIsInLead = true; + else + { + %tempScore = %client.score + %potentialScore; + %flagValue = %numToScore + 1; + while (%tempScore < %highestScore) + { + %tempScore += %flagValue; + %flagValue++; + %needFlagsForLead++; + } + } + } + + //the current target is more dangerous than the closest enemy + %currentTarget = %client.getEngageTarget(); + if (AIClientIsAlive(%currentTarget)) + { + %closestEnemy = %currentTarget; + %closestEnemydist = %client.getPathDistance(%currentTarget.player.position); + if (%closestEnemyDist < 0) + %closestEnemyDist = 32767; + } + else + { + %losTimeout = 5000 + ($AIClientLOSTimeout * %client.getSkillLevel()); + %result = AIFindClosestEnemy(%client, $AIHuntersCloseFlagDist, %losTimeout); + %closestEnemy = getWord(%result, 0); + %closestEnemydist = getWord(%result, 1); + } + + //find out how much time is left... + %curTimeLeftMS = ($Host::TimeLimit * 60 * 1000) + $missionStartTime - getSimTime(); + + //If there's a tough or equal enemy nearby, or no flags, think about capping + //ie. never cap if there are flags nearby and no enemies... + if ((AIClientIsAlive(%closestEnemy) && AIEngageWhoWillWin(%closestEnemy, %client) != %client) || + (!isObject(%closestFlag) || %closestFlagDist > $AIHuntersCloseFlagDist)) + { + //if we've got enough to take the lead, and there are no flags in the vicinity + if ((!%clientIsInLead && %needFlagsForLead == 0) || %highestScore == 0) + %mustCap = true; + + //else if we're about to get our butt kicked and we're much closer to the nexus than to health... + else if ((AIClientIsAlive(%closestEnemy) && AIEngageWhoWillWin(%closestEnemy, %client) == %closestEnemy) && + (%healthDist - %nexusDist > 100)) + { + %mustCap = true; + } + + //else if there's no time left in the mission, cap whatever we've got now... + else if (%curTimeLeftMS <= 30000) + %mustCap = true; + + //else we don't need to cap - see if we should to play it smart + else + { + //if we'd need more than just a couple to take the lead... + %waitForFlagsTolerance = %client.getSkillLevel() * $AIHuntersMinFlagsToCap * 2; + if (%needFlagsForLead == 0 || (%needFlagsForLead > %waitForFlagsTolerance)) + { + %numEnemyFlags = 0; + %clientCount = ClientGroup.getCount(); + for (%i = 0; %i < %clientCount; %i++) + { + %cl = ClientGroup.getObject(%i); + if (%cl != %client && %cl.flagCount > %numEnemyFlags) + %numEnemyFlags = %cl.flagCount; + } + + //if we're in the lead, or no one has the flags we need, or it's team mode, + //decide whether to cap based on skill level + if (%needFlagsForLead == 0 || %numEnemyFlags < %needFlagsForLead || Game.teamMode) + { + if (%numToScore >= $AIHuntersMinFlagsToCap + (%client.getSkillLevel() * %client.getSkillLevel() * 15)) + %shouldCap = true; + } + } + } + } + + //now that we've checked all the possibilities, see if we should or must cap + if (%mustCap || %shouldCap) + { + if (%mustCap) + %task.setWeight($AIHuntersWeightMustCap); + else + %task.setWeight($AIHuntersWeightShouldCap); + + %task.capFlags = true; + return; + } + } + + //if we've made it this far, we either can't cap, or there's no need to cap... + + //if we're engaging someone that's going to kill us, return 0 and let the patrol take over... + %currentTarget = %client.getEngageTarget(); + if ((AIClientIsAlive(%currentTarget) && AIEngageWhoWillWin(%currentTarget, %client) == %currentTarget) && %healthDist < 300) + { + %task.setWeight(0); + return; + } + + //find the closest player with the most flags (that we have los to) + %losTimeout = 5000 + ($AIClientLOSTimeout * %client.getSkillLevel()); + %bestClientToEngage = findClientWithMostFlags(%client, %losTimeout); + %bestClientDist = 32767; + if (AIClientIsAlive(%bestClientToEngage)) + { + %bestClientDist = %client.getPathDistance(%bestClientToEngage.player.position); + if (%bestClientDist < 0) + %bestClientDist = 32767; + } + + //see if there's a flag + if (isObject(%closestFlag)) + { + //see if there's a client to shoot + if (AIClientIsAlive(%bestClientToEngage)) + { + //calc weight base on closesness to the nearest flag vs. and number of flags the client has... + %engageDistFactor = 30 + %bestClientDist - (%bestClientToEngage.flagCount * 5); + if (%closestFlagDist < %engageDistFactor) + { + %task.pickupFlag = %closestFlag; + %task.engageTarget = %bestClientToEngage; + %task.setWeight($AIHuntersWeightPickupFlag); + } + + //otherwise, ignore the flag, and go for the client + else + { + %task.pickupFlag = -1; + %task.engageTarget = %bestClientToEngage; + %task.setWeight($AIHuntersWeightMustEngage); + } + } + + //else no one to attack + else + { + %task.pickupFlag = %closestFlag; + %task.engageTarget = -1; + %task.setWeight($AIHuntersWeightPickupFlag); + } + } + + //else no flag, see if we have someone to attack + else if (AIClientIsAlive(%bestClientToEngage)) + { + %task.pickupFlag = -1; + %task.engageTarget = %bestClientToEngage; + %task.setWeight($AIHuntersWeightShouldEngage); + } + + //nothing hunter's related to do... + else + { + %task.pickupFlag = -1; + %task.engageTarget = -1; + %task.setWeight(0); + } +} + +//--------------------------------------------------------------------------- + +function AIHuntersTask::monitor(%task, %client) +{ + //see if we should cap + if (%task.capFlags) + { + %nexusPos = Game.Nexus.getId().getWorldBoxCenter(); + %client.stepMove(%nexusPos, 0.25); + } + + //see if we've got a flag to pick up and/or someone to engage + else if (isObject(%task.pickupFlag)) + { + %client.stepMove(%task.pickupFlag.getWorldBoxCenter(), 0.25); + + if (AIClientIsAlive(%task.engageTarget)) + %client.setEngageTarget(%task.engageTarget); + } + + //else see if there's just someone to engage + else if (AIClientIsAlive(%task.engageTarget)) + %client.stepEngage(%task.engageTarget); + + //if we're not engaging someone related to the hunters task, engage whoever the AIEngageTask wants... + else + %client.setEngageTarget(%client.shouldEngage); +} + +//--------------------------------------------------------------------------- +// AIHunters utility functions +//--------------------------------------------------------------------------- + +function AIFindClosestFlag(%client, %radius) +{ + %closestFlag = -1; + %closestDist = %radius; + %flagCount = $FlagGroup.getCount(); + for (%i = 0; %i < %flagCount; %i++) + { + %flag = $FlagGroup.getObject(%i); + %flagPos = %flag.getWorldBoxCenter(); + %dist = %client.getPathDistance(%flagPos); + + if (%dist > 0 && %dist < %closestDist) + { + %closestDist = %dist; + %closestFlag = %flag; + } + } + return %closestFlag @ " " @ %closestDist; +} + +//--------------------------------------------------------------------------- + +function findClientWithMostFlags(%srcClient, %losTimeout) +{ + %clientCount = 0; + %closestClient = -1; + %highestFlagFactor = -1; //take both distance and flag count into consideration + + %count = ClientGroup.getCount(); + for(%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + + //make sure we find someone who's alive, and on an opposing team + if (AIClientIsAlive(%cl) && %cl.team != %srcClient.team) + { + %clIsCloaked = false; + if (%cl.player.getInventory("CloakingPack") > 0 && %cl.player.getImageState($BackpackSlot) $= "activate") + %clIsCloaked = true; + + //make sure the client can see the enemy + %hasLOS = %srcClient.hasLOSToClient(%cl); + %losTime = %srcClient.getClientLOSTime(%cl); + if (%hasLOS || (%losTime < %losTimeout && AIClientIsAlive(%cl, %losTime + 1000))) + { + %testPos = %cl.player.getWorldBoxCenter(); + %distance = %srcClient.getPathDistance(%testPos); + if (%distance < 0) + %distance = 32767; + + //calculate the flag factor + %flagFactor = (100 - %distance) + (%cl.flagCount * 5); + + //see if it's the most suitable client... + if (%flagFactor > %highestFlagFactor && (!%clIsCloaked || %distance < 8)) + { + %closestClient = %cl; + %highestFlagFactor = %flagFactor; + } + } + } + } + + return %closestClient; +} + +//--------------------------------------------------------------------------- + +function aih() +{ + exec("scripts/aiHunters.cs"); +} + +function aiHlist() +{ + $timescale = 0.01; + %count = ClientGroup.getCount(); + for (%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + if (%cl.isAIControlled()) + error(%cl SPC getTaggedString(%cl.name) SPC "score:" SPC %cl.score SPC "flags:" SPC %cl.flagCount - 1 SPC "capFlags:" SPC %cl.huntersTask.capFlags); + } +} + diff --git a/base/scripts/aiInventory.cs b/base/scripts/aiInventory.cs new file mode 100644 index 0000000..0c1d4d7 --- /dev/null +++ b/base/scripts/aiInventory.cs @@ -0,0 +1,1455 @@ +//------------------------------ +//AI Inventory functions + +function AINeedEquipment(%equipmentList, %client) +{ + %index = 0; + %item = getWord(%equipmentList, %index); + + //first, see if we're testing the armor class as well... + if (%item $= "Heavy" || %item $= "Medium" || %item $= "Light") + { + if (%client.player.getArmorSize() !$= %item) + return true; + %index++; + %item = getWord(%equipmentList, %index); + } + + while (%item !$= "") + { + if (%client.player.getInventory(%item) == 0) + return true; + + //get the next item + %index++; + %item = getWord(%equipmentList, %index); + } + + //made it through the list without needing anything + return false; +} + +function AIBuyInventory(%client, %requiredEquipment, %equipmentSets, %buyInvTime) +{ + //make sure we have a live player + %player = %client.player; + if (!isObject(%player)) + return "Failed"; + + if (! AIClientIsAlive(%client)) + return "Failed"; + + //see if we've already initialized our state machine + if (%client.buyInvTime == %buyInvTime) + return AIProcessBuyInventory(%client); + + //if the closest inv station is not a remote, buy the first available set... + %result = AIFindClosestInventory(%client, false); + %closestInv = getWord(%result, 0); + %closestDist = getWord(%result, 1); + if (%closestInv <= 0) + return "Failed"; + + //see if the closest inv station was a remote + %buyingSet = false; + %usingRemote = false; + if (%closestInv.getDataBlock().getName() $= "DeployedStationInventory") + { + //see if we can buy at least the required equipment from the set + if (%requiredEquipment !$= "") + { + if (! AIMustUseRegularInvStation(%requiredEquipment, %client)) + %canUseRemote = true; + else + %canUseRemote = false; + } + else + { + %inventorySet = AIFindSameArmorEquipSet(%equipmentSets, %client); + if (%inventorySet !$= "") + %canUseRemote = true; + else + %canUseRemote = false; + } + + //if we can't use a remote, we need to look for a regular inv station + if (! %canUseRemote) + { + %result = AIFindClosestInventory(%client, true); + %closestInv = getWord(%result, 0); + %closestDist = getWord(%result, 1); + if (%closestInv <= 0) + return "Failed"; + } + else + %usingRemote = true; + } + + //at this point we've found the closest inv, see which set/list we need to buy + if (!%usingRemote) + { + //choose the equipment first equipment set + if (%equipmentSets !$= "") + { + %inventorySet = getWord(%equipmentSets, 0); + %buyingSet = true; + } + else + { + %inventorySet = %requiredEquipment; + %buyingSet = false; + } + } + else + { + %inventorySet = AIFindSameArmorEquipSet(%equipmentSets, %client); + if (%inventorySet $= "") + { + %inventorySet = %requiredEquipment; + %buyingSet = false; + } + else + %buyingSet = true; + } + + //init some vars for the state machine... + %client.buyInvTime = %buyInvTime; //used to mark the begining of the inv buy session + %client.invToUse = %closestInv; //used if we need to go to an alternate inv station + %client.invWaitTime = ""; //used to track how long we've been waiting + %client.invBuyList = %inventorySet; //the list/set of items we're going to buy... + %client.buyingSet = %buyingSet; //whether it's a list or a set... + %client.isSeekingInv = false; + + //now process the state machine + return AIProcessBuyInventory(%client); +} + +function AIProcessBuyInventory(%client) +{ + //get some vars + %player = %client.player; + if (!isObject(%player)) + return "Failed"; + + %closestInv = %client.invToUse; + %inventorySet = %client.invBuyList; + %buyingSet = %client.buyingSet; + + //make sure it's still valid, enabled, and on our team + if (! (%closestInv > 0 && isObject(%closestInv) && + (%closestInv.team <= 0 || %closestInv.team == %client.team) && %closestInv.isEnabled())) + { + //reset the state machine + %client.buyInvTime = 0; + return "InProgress"; + } + + //make sure the inventory station is not blocked + %invLocation = %closestInv.getWorldBoxCenter(); + InitContainerRadiusSearch(%invLocation, 2, $TypeMasks::PlayerObjectType); + %objSrch = containerSearchNext(); + if (%objSrch == %client.player) + %objSrch = containerSearchNext(); + + //the closestInv is busy... + if (%objSrch > 0) + { + //have the AI range the inv + if (%client.seekingInv $= "" || %client.seekingInv != %closestInv) + { + %client.invWaitTime = ""; + %client.seekingInv = %closestInv; + %client.stepRangeObject(%closestInv, "DefaultRepairBeam", 5, 10); + } + + //inv is still busy - see if we're within range + else if (%client.getStepStatus() $= "Finished") + { + //initialize the wait time + if (%client.invWaitTime $= "") + %client.invWaitTime = getSimTime() + 5000 + (getRandom() * 10000); + + //else see if we've waited long enough + else if (getSimTime() > %client.invWaitTime) + { + schedule(250, %client, "AIPlayAnimSound", %client, %objSrch.getWorldBoxCenter(), "vqk.move", -1, -1, 0); + %client.invWaitTime = getSimTime() + 5000 + (getRandom() * 10000); + } + } + else + { + //in case we got bumped, and are ranging the target again... + %client.invWaitTime = ""; + } + } + + //else if we've triggered the inv, automatically give us the equipment... + else if (isObject(%closestInv) && isObject(%closestInv.trigger) && VectorDist(%closestInv.trigger.getWorldBoxCenter(), %player.getWorldBoxCenter()) < 1.5) + { + //first stop... + %client.stop(); + + %index = 0; + if (%buyingSet) + { + //first, clear the players inventory + %player.clearInventory(); + %item = $AIEquipmentSet[%inventorySet, %index]; + } + else + %item = getWord(%inventorySet, %index); + + + //armor must always be bought first + if (%item $= "Light" || %item $= "Medium" || %item $= "Heavy") + { + %player.setArmor(%item); + %index++; + } + + //set the data block after the armor had been upgraded + %playerDataBlock = %player.getDataBlock(); + + //next, loop through the inventory set, and buy each item + if (%buyingSet) + %item = $AIEquipmentSet[%inventorySet, %index]; + else + %item = getWord(%inventorySet, %index); + while (%item !$= "") + { + //set the inventory amount to the maximum quantity available + if (%player.getInventory(AmmoPack) > 0) + %ammoPackQuantity = AmmoPack.max[%item]; + else + %ammoPackQuantity = 0; + + %quantity = %player.getDataBlock().max[%item] + %ammoPackQuantity; + if ($InvBanList[$CurrentMissionType, %item]) + %quantity = 0; + %player.setInventory(%item, %quantity); + + //get the next item + %index++; + if (%buyingSet) + %item = $AIEquipmentSet[%inventorySet, %index]; + else + %item = getWord(%inventorySet, %index); + } + + //put a weapon in the bot's hand... + %player.cycleWeapon(); + + //return a success + return "Finished"; + } + + //else, keep moving towards the inv station + else + { + if (isObject(%closestInv) && isObject(%closestInv.trigger)) + { + //quite possibly we may need to deal with what happens if a bot doesn't have a path to the inv... + //the current premise is that no inventory stations are "unpathable"... + //if (%client.isSeekingInv) + //{ + // %dist = %client.getPathDistance(%closestInv.trigger.getWorldBoxCenter()); + // if (%dist < 0) + // error("DEBUG Tinman - still need to handle bot stuck trying to get to an inv!"); + //} + + %client.stepMove(%closestInv.trigger.getWorldBoxCenter(), 1.5); + %client.isSeekingInv = true; + } + return "InProgress"; + } +} + +function AIFindSameArmorEquipSet(%equipmentSets, %client) +{ + %clientArmor = %client.player.getArmorSize(); + %index = 0; + %set = getWord(%equipmentSets, %index); + while (%set !$= "") + { + if ($AIEquipmentSet[%set, 0] $= %clientArmor) + return %set; + + //get the next equipment set in the list of sets + %index++; + %set = getWord(%equipmentSets, %index); + } + return ""; +} + +function AIMustUseRegularInvStation(%equipmentList, %client) +{ + %clientArmor = %client.player.getArmorSize(); + + //first, see if the set contains an item not available + %needRemoteInv = false; + %index = 0; + %item = getWord(%equipmentList, 0); + while (%item !$= "") + { + if (%item $= "InventoryDeployable" || (%clientArmor !$= "Light" && %item $= "SniperRifle") || + (%clientArmor $= "Light" && (%item $= "Mortar" || %item $= "MissileLauncher"))) + { + return true; + } + else + { + %index++; + %item = getWord(%equipmentList, %index); + } + } + if (%needRemoteInv) + return true; + + + //otherwise, see if the set begins with an armor class + %needArmor = %equipmentList[0]; + if (%needArmor !$= "Light" && %needArmor !$= "Medium" && %needArmor !$= "Heavy") + return false; + + //also including looking for an inventory set + if (%needArmor != %client.player.getArmorSize()) + return true; + + //we must be fine... + return false; +} + +function AICouldUseItem(%client, %item) +{ + if(!AIClientIsAlive(%client)) + return false; + + %player = %client.player; + if (!isObject(%player)) + return false; + + %playerDataBlock = %client.player.getDataBlock(); + %armor = %player.getArmorSize(); + %type = %item.getDataBlock().getName(); + + //check packs first + if (%type $= "RepairPack" || %type $= "EnergyPack" || %type $= "ShieldPack" || + %type $= "CloakingPack" || %type $= "AmmoPack") + { + if (%client.player.getMountedImage($BackpackSlot) <= 0) + return true; + else + return false; + } + + //check ammo + %quantity = mFloor(%playerDataBlock.max[%type] * 0.7); + if (%player.getInventory(%type) < %quantity) + { + if (%type $= "ChainGunAmmo" && %player.getInventory("ChainGun") > 0) + return true; + if (%type $= "PlasmaAmmo" && %player.getInventory("Plasma") > 0) + return true; + if (%type $= "DiscAmmo" && %player.getInventory("Disc") > 0) + return true; + if (%type $= "GrenadeLauncher" && %player.getInventory("GrenadeLauncherAmmo") > 0) + return true; + if (%type $= "MortarAmmo" && %player.getInventory("Mortar") > 0) + return true; + + //check mines and grenades as well + if (%type $= "Grenade" || %type $= "FlashGrenade" || %type $= "ConcussionGrenade") + return true; + } + + //see if we can carry another weapon... + if (AICanPickupWeapon(%client, %type)) + return true; + + //guess we didn't find anything useful... (should still check for mines and grenades) + return false; +} + +function AIEngageOutofAmmo(%client) +{ + //this function only cares about weapons used in engagement... + //no mortars, or missiles + %player = %client.player; + if (!isObject(%player)) + return false; + + %ammoWeapons = 0; + %energyWeapons = 0; + + //get our inventory + %hasBlaster = (%player.getInventory("Blaster") > 0); + %hasPlasma = (%player.getInventory("Plasma") > 0); + %hasChain = (%player.getInventory("Chaingun") > 0); + %hasDisc = (%player.getInventory("Disc") > 0); + %hasGrenade = (%player.getInventory("GrenadeLauncher") > 0); + %hasSniper = (%player.getInventory("SniperRifle") > 0) && (%player.getInventory("EnergyPack") > 0); + %hasELF = (%player.getInventory("ELFGun") > 0); + %hasMortar = (%player.getInventory("Mortar") > 0); + %hasMissile = (%player.getInventory("MissileLauncher") > 0); + + if(%hasBlaster || %hasSniper || %hasElf) + return false; + else + { + // we only have ammo type weapons + if(%hasDisc && (%player.getInventory("DiscAmmo") > 0)) + return false; + else if(%hasChain && (%player.getInventory("ChainGunAmmo") > 0)) + return false; + else if(%hasGrenade && (%player.getInventory("GrenadeLauncherAmmo") > 0)) + return false; + else if(%hasPlasma && (%player.getInventory("PlasmaAmmo") > 0)) + return false; + } + return true; // were out! +} + +function AICanPickupWeapon(%client, %weapon) +{ + //first, make sure it's not a weapon we already have... + %player = %client.player; + if (!isObject(%player)) + return false; + + %armor = %player.getArmorSize(); + if (%player.getInventory(%weapon) > 0) + return false; + + //make sure the %weapon given is a weapon they can use for engagement + if (%weapon !$= "Blaster" && %weapon !$= "Plasma" && %weapon !$= "Chaingun" && %weapon !$= "Disc" && + %weapon !$= "GrenadeLauncher" && %weapon !$= "SniperRifle" && %weapon !$= "ELFGun") + { + return false; + } + + %weaponCount = 0; + if (%player.getInventory("Blaster") > 0) + %weaponCount++; + if (%player.getInventory("Plasma") > 0) + %weaponCount++; + if (%player.getInventory("Chaingun") > 0) + %weaponCount++; + if (%player.getInventory("Disc") > 0) + %weaponCount++; + if (%player.getInventory("GrenadeLauncher") > 0) + %weaponCount++; + if (%player.getInventory("SniperRifle") > 0) + %weaponCount++; + if (%player.getInventory("ELFGun") > 0) + %weaponCount++; + if (%player.getInventory("Mortar") > 0) + %weaponCount++; + if (%player.getInventory("MissileLauncher") > 0) + %weaponCount++; + if (%player.getInventory("ShockLance") > 0) + %weaponCount++; + + if ((%armor $= "Light" && %weaponCount < 3) || (%armor $= "Medium" && %weaponCount < 4) || + (%armor $= "Heavy" && %weaponCount < 5)) + { + if ((%type $= "Mortar" && %armor !$= "Heavy") || (%type $= "MissileLauncher" && %armor $= "Light") || + (%type $= "SniperRifle" && %armor !$= "Light")) + return false; + else + return true; + } + + //else we're full of weapons already... + return false; +} + +function AIEngageWeaponRating(%client) +{ + %player = %client.player; + if (!isObject(%player)) + return; + + %playerDataBlock = %client.player.getDataBlock(); + + //get our inventory + %hasBlaster = (%player.getInventory("Blaster") > 0); + %hasPlasma = (%player.getInventory("Plasma") > 0 && %player.getInventory("PlasmaAmmo") >= 1); + %hasChain = (%player.getInventory("Chaingun") > 0 && %player.getInventory("ChaingunAmmo") >= 1); + %hasDisc = (%player.getInventory("Disc") > 0 && %player.getInventory("DiscAmmo") >= 1); + %hasGrenade = (%player.getInventory("GrenadeLauncher") > 0 && %player.getInventory("GrenadeLauncherAmmo") >= 1); + %hasSniper = (%player.getInventory("SniperRifle") > 0) && (%player.getInventory("EnergyPack") > 0); + %hasELF = (%player.getInventory("ELFGun") > 0); + + //check ammo + %quantity = mFloor(%playerDataBlock.max[%type] * 0.7); + + %rating = 0; + if (%hasBlaster) + %rating += 9; + if (%hasSniper) + %rating += 9; + if (%hasElf) + %rating += 9; + + if (%hasDisc) + { + %quantity = %player.getInventory("DiscAmmo") / %playerDataBlock.max["DiscAmmo"]; + %rating += 15 + (15 * %quantity); + } + if (%hasPlasma) + { + %quantity = %player.getInventory("PlasmaAmmo") / %playerDataBlock.max["PlasmaAmmo"]; + %rating += 15 + (15 * %quantity); + } + if (%hasChain) + { + %quantity = %player.getInventory("ChainGunAmmo") / %playerDataBlock.max["ChainGunAmmo"]; + %rating += 15 + (15 * %quantity); + } + +//not really an effective weapon for hand to hand... +// if (%hasGrenade) +// { +// %quantity = %player.getInventory("GrenadeLauncherAmmo") / %playerDataBlock.max["GrenadeLauncherAmmo"]; +// %rating += 10 + (15 * %quantity); +// } + + //note a rating of 20+ means at least two energy weapons, or an ammo weapon with at least 1/3 ammo... + return %rating; +} + +function AIFindSafeItem(%client, %needType) +{ + %player = %client.player; + if (!isObject(%player)) + return -1; + + %closestItem = -1; + %closestDist = 32767; + + %itemCount = $AIItemSet.getCount(); + for (%i = 0; %i < %itemCount; %i++) + { + %item = $AIItemSet.getObject(%i); + if (%item.isHidden()) + continue; + + %type = %item.getDataBlock().getName(); + if ((%needType $= "Health" && (%type $= "RepairKit" || %type $= "RepairPatch") && %player.getDamagePercent() > 0) || + (%needType $= "Ammo" && (%type $= "ChainGunAmmo" || %type $= "PlasmaAmmo" || %type $= "DiscAmmo" || + %type $= "GrenadeLauncherAmmo" || %type $= "MortarAmmo") && AICouldUseItem(%client, %item)) || + (%needType $= "Ammo" && AICanPickupWeapon(%type)) || + ((%needType $= "" || %needType $= "Any") && AICouldUseItem(%client, %item))) + { + //first, see if it's close to us... + %distance = %client.getPathDistance(%item.getTransform()); + if (%distance > 0 && %distance < %closestDist) + { + //now see if it's got bad enemies near it... + %clientCount = ClientGroup.getCount(); + for (%j = 0; %j < %clientCount; %j++) + { + %cl = ClientGroup.getObject(%j); + if (%cl == %client || %cl.team == %client.team || !AIClientIsAlive(%cl)) + continue; + + //if the enemy is stronger, see if they're close to the item + if (AIEngageWhoWillWin(%client, %cl) == %cl) + { + %tempDist = %client.getPathDistance(%item.getWorldBoxCenter()); + if (%tempDist > 0 && %tempDist < %distance + 50) + continue; + } + + //either no enemy, or a weaker one... + %closestItem = %item; + %closestDist = %distance; + } + } + } + } + + return %closestItem; +} + +function AIChooseObjectWeapon(%client, %targetObject, %distToTarg, %mode, %canUseEnergyStr, %environmentStr) +{ + //get our inventory + %player = %client.player; + if (!isObject(%player)) + return; + + if (!isObject(%targetObject)) + return; + + %canUseEnergy = (%canUseEnergyStr $= "true"); + %inWater = (%environmentStr $= "water"); + %hasBlaster = (%player.getInventory("Blaster") > 0) && %canUseEnergy; + %hasPlasma = (%player.getInventory("Plasma") > 0) && (%player.getInventory("PlasmaAmmo") > 0) && !%inWater; + %hasChain = (%player.getInventory("Chaingun") > 0) && (%player.getInventory("ChaingunAmmo") > 0); + %hasDisc = (%player.getInventory("Disc") > 0) && (%player.getInventory("DiscAmmo") > 0); + %hasGrenade = (%player.getInventory("GrenadeLauncher") > 0) && (%player.getInventory("GrenadeLauncherAmmo") > 0); + %hasMortar = (%player.getInventory("Mortar") > 0) && (%player.getInventory("MortarAmmo") > 0); + %hasRepairPack = (%player.getInventory("RepairPack") > 0) && %canUseEnergy; + %hasTargetingLaser = (%player.getInventory("TargetingLaser") > 0) && %canUseEnergy; + %hasMissile = (%player.getInventory("MissileLauncher") > 0) && (%player.getInventory("MissileLauncherAmmo") > 0); + + //see if we're destroying the object + if (%mode $= "Destroy") + { + if ((%targetObject.getDataBlock().getClassName() $= "TurretData" || + %targetObject.getDataBlock().getName() $= "MineDeployed") && %distToTarg < 50) + { + if (%hasPlasma) + %useWeapon = "Plasma"; + else if (%hasDisc) + %useWeapon = "Disc"; + else if (%hasBlaster) + %useWeapon = "Blaster"; + else if (%hasChain) + %useWeapon = "Chaingun"; + else + %useWeapon = "NoAmmo"; + } + else if (%distToTarg < 40) + { + if (%hasPlasma) + %useWeapon = "Plasma"; + else if (%hasChain) + %useWeapon = "Chaingun"; + else if (%hasBlaster) + %useWeapon = "Blaster"; + else if (%hasDisc) + %useWeapon = "Disc"; + else + %useWeapon = "NoAmmo"; + } + else + %useWeapon = "NoAmmo"; + } + + //else See if we're repairing the object + else if (%mode $= "Repair") + { + if (%hasRepairPack) + %useWeapon = "RepairPack"; + else + %useWeapon = "NoAmmo"; + } + + //else see if we're lazing the object + else if (%mode $= "Laze") + { + if (%hasTargetingLaser) + %useWeapon = "TargetingLaser"; + else + %useWeapon = "NoAmmo"; + } + + //else see if we're mortaring the object + else if (%mode $= "Mortar") + { + if (%hasMortar) + %useWeapon = "Mortar"; + else + %useWeapon = "NoAmmo"; + } + + //else see if we're rocketing the object + else if (%mode $= "Missile" || %mode $= "MissileNoLock") + { + if (%hasMissile) + %useWeapon = "MissileLauncher"; + else + %useWeapon = "NoAmmo"; + } + + //now select the weapon + switch$ (%useWeapon) + { + case "Blaster": + %client.player.use("Blaster"); + %client.setWeaponInfo("EnergyBolt", 25, 50, 1, 0.1); + + case "Plasma": + %client.player.use("Plasma"); + %client.setWeaponInfo("PlasmaBolt", 25, 50); + + case "Chaingun": + %client.player.use("Chaingun"); + %client.setWeaponInfo("ChaingunBullet", 30, 75, 150); + + case "Disc": + %client.player.use("Disc"); + %client.setWeaponInfo("DiscProjectile", 30, 75); + + case "GrenadeLauncher": + %client.player.use("GrenadeLauncher"); + %client.setWeaponInfo("BasicGrenade", 40, 75); + + case "Mortar": + %client.player.use("Mortar"); + %client.setWeaponInfo("MortarShot", 100, 350); + + case "RepairPack": + if (%player.getImageState($BackpackSlot) $= "Idle") + %client.player.use("RepairPack"); + %client.setWeaponInfo("DefaultRepairBeam", 40, 75, 300, 0.1); + + case "TargetingLaser": + %client.player.use("TargetingLaser"); + %client.setWeaponInfo("BasicTargeter", 20, 300, 300, 0.1); + + case "MissileLauncher": + %client.player.use("MissileLauncher"); + %client.setWeaponInfo("ShoulderMissile", 80, 300); + + case "NoAmmo": + %client.setWeaponInfo("NoAmmo", 30, 75); + } +} + +function AIChooseEngageWeapon(%client, %targetClient, %distToTarg, %canUseEnergyStr, %environmentStr) +{ + //get some status + %player = %client.player; + if (!isObject(%player)) + return; + + %enemy = %targetClient.player; + if (!isObject(%enemy)) + return; + + %canUseEnergy = (%canUseEnergyStr $= "true"); + %inWater = (%environmentStr $= "water"); + %outdoors = (%environmentStr $= "outdoors"); + %targVelocity = %targetClient.player.getVelocity(); + %targEnergy = %targetClient.player.getEnergyPercent(); + %targDamage = %targetClient.player.getDamagePercent(); + %myEnergy = %player.getEnergyPercent(); + %myDamage = %player.getDamagePercent(); + + //get our inventory + %hasBlaster = (%player.getInventory("Blaster") > 0) && %canUseEnergy; + %hasPlasma = (%player.getInventory("Plasma") > 0) && (%player.getInventory("PlasmaAmmo") > 0) && !%inWater; + %hasChain = (%player.getInventory("Chaingun") > 0) && (%player.getInventory("ChaingunAmmo") > 0); + %hasDisc = (%player.getInventory("Disc") > 0) && (%player.getInventory("DiscAmmo") > 0); + %hasGrenade = (%player.getInventory("GrenadeLauncher") > 0) && (%player.getInventory("GrenadeLauncherAmmo") > 0); + %hasSniper = (%player.getInventory("SniperRifle") > 0) && (%player.getInventory("EnergyPack") > 0) && %canUseEnergy && !%inWater; + %hasELF = (%player.getInventory("ELFGun") > 0) && %canUseEnergy && !%inWater; + %hasMortar = (%player.getInventory("Mortar") > 0) && (%player.getInventory("MortarAmmo") > 0); + %hasMissile = (%player.getInventory("MissileLauncher") > 0) && (%player.getInventory("MissileLauncherAmmo") > 0); + %hasShockLance = (%player.getInventory("ShockLance") > 0) && %canUseEnergy && !%inWater; + + //choose the weapon + %useWeapon = "NoAmmo"; + + //first, see if it's a pilot we're shooting + if (%dist > 50 && %enemy.isMounted() && %hasMissile) + { + %useWeapon = "MissileLauncher"; + } + else if (%distToTarg < 5 && %hasShockLance) + { + %useWeapon = "ShockLance"; + } + else if (%distToTarg < 15) + { + if (%hasELF && %myEnergy > 0.5 && %targEnergy > 0.3 && %myDamage < %targDamage && %targetZ > %myZ + 20) + %useWeapon = "ELFGun"; + else if (%hasPlasma) + %useWeapon = "Plasma"; + else if (%hasChain) + %useWeapon = "Chaingun"; + else if (%hasBlaster) + %useWeapon = "Blaster"; + else if (%hasELF && %targEnergy > 0.2) + %useWeapon = "ELFGun"; + else if (%hasDisc) + %useWeapon = "Disc"; + else if (%hasShockLance) + %useWeapon = "ShockLance"; + } + else if (%distToTarg < 35) + { + if (%hasELF && %targEnergy > 0.4 && (%myDamage < 0.3 || %myDamage - %targDamage < 0.2) && %targetZ > %myZ + 20) + %useWeapon = "ELFGun"; + else if (!%outdoors && %hasPlasma) + %useWeapon = "Plasma"; + else if (%hasChain && %hasDisc) + { + %speed = VectorDist("0 0 0", %targVelocity); + %myZ = getWord(%player.getTransform(), 2); + %targetZ = getWord(%enemy.getTransform(), 2); + %targetZVel = getWord(%targVelocity, 2); + + if (%speed > 15.0 || %targetZ > %myZ || %targetZVel > 1.0) + %useWeapon = "Chaingun"; + else + %useWeapon = "Disc"; + } + else if (%hasPlasma) + %useWeapon = "Plasma"; + else if (%hasChain) + %useWeapon = "Chaingun"; + else if (%hasDisc) + %useWeapon = "Disc"; + else if (%hasBlaster) + %useWeapon = "Blaster"; + } + else if (%distToTarg < 60) + { + if (%hasGrenade) + %useWeapon = "GrenadeLauncher"; + else if (%hasSniper && %myEnergy > 0.6) + %useWeapon = "SniperRifle"; + + } + else if (%distToTarg < 80) + { + if (%hasSniper && %myEnergy > 0.4) + %useWeapon = "SniperRifle"; + else if (%hasDisc) + %useWeapon = "Disc"; + else if (%hasChain) + %useWeapon = "Chaingun"; + else if (%hasBlaster) + %useWeapon = "Blaster"; + } + else + { + if (%hasSniper) + %useWeapon = "SniperRifle"; + } + + //now make sure we actually selected something + if (%useWeapon $= "NoAmmo") + { + if (%hasDisc) + %useWeapon = "Disc"; + else if (%hasChain) + %useWeapon = "Chaingun"; + else if (%hasPlasma) + %useWeapon = "Plasma"; + else if (%hasBlaster) + %useWeapon = "Blaster"; + else if (%hasELF) + %useWeapon = "ELFGun"; + else if (%hasSniper) + %useWeapon = "SniperRifle"; + else if (%hasShockLance) + %useWeapon = "ShockLance"; + else if (%hasGrenade) + %useWeapon = "GrenadeLauncher"; + else if (%hasMissile) + %useWeapon = "MissileLauncher"; + } + + //now select the weapon + switch$ (%useWeapon) + { + case "Blaster": + %client.player.use("Blaster"); + %client.setWeaponInfo("EnergyBolt", 25, 50, 1, 0.1); + + case "Plasma": + %client.player.use("Plasma"); + %client.setWeaponInfo("PlasmaBolt", 25, 50); + + case "Chaingun": + %client.player.use("Chaingun"); + %client.setWeaponInfo("ChaingunBullet", 30, 75, 150); + + case "Disc": + %client.player.use("Disc"); + %client.setWeaponInfo("DiscProjectile", 30, 75); + + case "GrenadeLauncher": + %client.player.use("GrenadeLauncher"); + %client.setWeaponInfo("BasicGrenade", 40, 75); + + case "SniperRifle": + %client.player.use("SniperRifle"); + %client.setWeaponInfo("BasicSniperShot", 80, 350, 1, 0.75, 0.5); + + case "ELFGun": + %client.player.use("ELFGun"); + %client.setWeaponInfo("BasicELF", 25, 45, 90, 0.1); + + case "ShockLance": + %client.player.use("ShockLance"); + %client.setWeaponInfo("BasicShocker", 0.5, 8, 1, 0.1); + + case "MissileLauncher": + %client.player.use("MissileLauncher"); + %client.setWeaponInfo("ShoulderMissile", 80, 350); + + case "NoAmmo": + %client.setWeaponInfo("NoAmmo", 30, 75); + } +} + +//function is called once per frame, to handle packs, healthkits, grenades, etc... +function AIProcessEngagement(%client, %target, %type, %projectile) +{ + //make sure we're still alive + if (! AIClientIsAlive(%client)) + return; + + //clear the pressFire + %client.pressFire(-1); + + //see if we have to use a repairkit + %player = %client.player; + if (!isObject(%player)) + return; + + if (%client.getSkillLevel() > 0.1 && %player.getDamagePercent() > 0.3 && %player.getInventory("RepairKit") > 0) + { + //add in a "skill" value to delay the using of the repair kit for up to 10 seconds... + %elapsedTime = getSimTime() - %client.lastDamageTime; + %skillValue = (1.0 - %client.getSkillLevel()) * (1.0 - %client.getSkillLevel()); + if (%elapsedTime > (%skillValue * 20000)) + %player.use("RepairKit"); + } + + //see if we've been blinded + if (%player.getWhiteOut() > 0.6) + %client.setBlinded(2000); + + //else see if there's a grenade in the vicinity... + else + { + %count = $AIGrenadeSet.getCount(); + for (%i = 0; %i < %count; %i++) + { + %grenade = $AIGrenadeSet.getObject(%i); + + //make sure the grenade isn't ours + if (%grenade.sourceObject.client != %client) + { + //see if it's within 15 m + if (VectorDist(%grenade.position, %client.player.position) < 15) + { + %client.setDangerLocation(%grenade.position, 20); + break; + } + } + } + } + + //if we're being hunted by a seeker projectile, throw a flare grenade + if (%player.getInventory("FlareGrenade") > 0) + { + %missileCount = MissileSet.getCount(); + for (%i = 0; %i < %missileCount; %i++) + { + %missile = MissileSet.getObject(%i); + if (%missile.getTargetObject() == %player) + { + //see if the missile is within range + if (VectorDist(%missile.getTransform(), %player.getTransform()) < 50) + { + %player.throwStrength = 1.5; + %player.use("FlareGrenade"); + break; + } + } + } + } + + //see what we're fighting + switch$ (%type) + { + case "player": + //make sure the target is alive + if (AIClientIsAlive(%target)) + { + //if the target is in range, and within 10-40 m, and heading in this direction, toss a grenade + if (!$AIDisableGrenades && %client.getSkillLevel() >= 0.3) + { + if (%player.getInventory("Grenade") > 0) + %grenadeType = "Grenade"; + else if (%player.getInventory("FlashGrenade") > 0) + %grenadeType = "FlashGrenade"; + else if (%player.getInventory("ConcussionGrenade") > 0) + %grenadeType = "ConcussionGrenade"; + else %grenadeType = ""; + if (%grenadeType !$= "" && %client.targetInSight()) + { + //see if the predicted location of the target is within 10m + %targPos = %target.player.getWorldBoxCenter(); + %clientPos = %player.getWorldBoxCenter(); + + //make sure we're not *way* above the target + if (getWord(%clientPos, 2) - getWord(%targPos, 2) < 3) + { + %dist = VectorDist(%targPos, %clientPos); + %direction = VectorDot(VectorSub(%clientPos, %targPos), %target.player.getVelocity()); + %facing = VectorDot(VectorSub(%client.getAimLocation(), %clientPos), VectorSub(%targPos, %clientPos)); + if (%dist > 20 && %dist < 45 && (%direction > 0.9 || %direction < -0.9) && (%facing > 0.9)) + { + %player.throwStrength = 1.0; + %player.use(%grenadeType); + } + } + } + } + + //see if we have a shield pack that we need to use + if (%player.getInventory("ShieldPack") > 0) + { + if (%projectile > 0 && %player.getImageState($BackpackSlot) $= "Idle") + { + %player.use("Backpack"); + } + else if (%projectile <= 0 && %player.getImageState($BackpackSlot) $= "activate") + { + %player.use("Backpack"); + } + } + } + + case "object": + %hasGrenade = %player.getInventory("Grenade"); + if (%hasGrenade && %client.targetInRange()) + { + %targPos = %target.getWorldBoxCenter(); + %myPos = %player.getWorldBoxCenter(); + %dist = VectorDist(%targPos, %myPos); + if (%dist > 5 && %dist < 20) + { + %player.throwStrength = 1.0; + %player.use("Grenade"); + } + } + + case "none": + //use the repair pack if we have one + if (%player.getDamagePercent() > 0 && %player.getInventory(RepairPack) > 0) + { + if (%player.getImageState($BackpackSlot) $= "Idle") + %client.player.use("RepairPack"); + else + //sustain the fire for 30 frames - this callback is timesliced... + %client.pressFire(30); + } + } +} + +function AIFindClosestInventory(%client, %armorChange) +{ + %closestInv = -1; + %closestDist = 32767; + + %depCount = 0; + %depGroup = nameToID("MissionCleanup/Deployables"); + if (%depGroup > 0) + %depCount = %depGroup.getCount(); + + // there exists a deployed station, lets find it + if(!%armorChange && %depCount > 0) + { + for(%i = 0; %i < %depCount; %i++) + { + %obj = %depGroup.getObject(%i); + + if(%obj.getDataBlock().getName() $= "DeployedStationInventory" && %obj.team == %client.team && %obj.isEnabled()) + { + %distance = %client.getPathDistance(%obj.getTransform()); + if (%distance > 0 && %distance < %closestDist) + { + %closestInv = %obj; + %closestDist = %distance; + } + } + } + } + + // still check if there is one that is closer + %invCount = $AIInvStationSet.getCount(); + for (%i = 0; %i < %invCount; %i++) + { + %invStation = $AIInvStationSet.getObject(%i); + if (%invStation.team <= 0 || %invStation.team == %client.team) + { + //error("DEBUG: found an inventory station: " @ %invStation @ " status: " @ %invStation.isPowered()); + //make sure the station is powered + if (!%invStation.isDisabled() && %invStation.isPowered()) + { + %dist = %client.getPathDistance(%invStation.getTransform()); + if (%dist > 0 && %dist < %closestDist) + { + %closestInv = %invStation; + %closestDist = %dist; + } + } + } + } + + return %closestInv @ " " @ %closestDist; +} + +//------------------------------ +//find the closest inventories for the objective weight functions +function AIFindClosestInventories(%client) +{ + %closestInv = -1; + %closestDist = 32767; + %closestRemoteInv = -1; + %closestRemoteDist = 32767; + + %depCount = 0; + %depGroup = nameToID("MissionCleanup/Deployables"); + + //first, search for the nearest deployable inventory station + if (isObject(%depGroup)) + { + %depCount = %depGroup.getCount(); + for (%i = 0; %i < %depCount; %i++) + { + %obj = %depGroup.getObject(%i); + + if (%obj.getDataBlock().getName() $= "DeployedStationInventory" && %obj.team == %client.team && %obj.isEnabled()) + { + %distance = %client.getPathDistance(%obj.getTransform()); + if (%distance > 0 && %distance < %closestRemoteDist) + { + %closestRemoteInv = %obj; + %closestRemoteDist = %distance; + } + } + } + } + + // now find the closest regular inventory station + %invCount = $AIInvStationSet.getCount(); + for (%i = 0; %i < %invCount; %i++) + { + %invStation = $AIInvStationSet.getObject(%i); + if (%invStation.team <= 0 || %invStation.team == %client.team) + { + //make sure the station is powered + if (!%invStation.isDisabled() && %invStation.isPowered()) + { + %dist = %client.getPathDistance(%invStation.getTransform()); + if (%dist > 0 && %dist < %closestDist) + { + %closestInv = %invStation; + %closestDist = %dist; + } + } + } + } + + //if the regular inv station is closer than the deployed, don't bother with the remote + if (%closestDist < %closestRemoteDist) + %returnStr = %closestInv SPC %closestDist; + else + %returnStr = %closestInv SPC %closestDist SPC %closestRemoteInv SPC %closestRemoteDist; + + return %returnStr; +} + +//------------------------------ +//AI Equipment Configs +$EquipConfigIndex = -1; +$AIEquipmentSet[HeavyAmmoSet, $EquipConfigIndex++] = "Heavy"; +$AIEquipmentSet[HeavyAmmoSet, $EquipConfigIndex++] = "AmmoPack"; +$AIEquipmentSet[HeavyAmmoSet, $EquipConfigIndex++] = "Plasma"; +$AIEquipmentSet[HeavyAmmoSet, $EquipConfigIndex++] = "PlasmaAmmo"; +$AIEquipmentSet[HeavyAmmoSet, $EquipConfigIndex++] = "Chaingun"; +$AIEquipmentSet[HeavyAmmoSet, $EquipConfigIndex++] = "ChaingunAmmo"; +$AIEquipmentSet[HeavyAmmoSet, $EquipConfigIndex++] = "Disc"; +$AIEquipmentSet[HeavyAmmoSet, $EquipConfigIndex++] = "DiscAmmo"; +$AIEquipmentSet[HeavyAmmoSet, $EquipConfigIndex++] = "GrenadeLauncher"; +$AIEquipmentSet[HeavyAmmoSet, $EquipConfigIndex++] = "GrenadeLauncherAmmo"; +$AIEquipmentSet[HeavyAmmoSet, $EquipConfigIndex++] = "Mortar"; +$AIEquipmentSet[HeavyAmmoSet, $EquipConfigIndex++] = "MortarAmmo"; +$AIEquipmentSet[HeavyAmmoSet, $EquipConfigIndex++] = "RepairKit"; +$AIEquipmentSet[HeavyAmmoSet, $EquipConfigIndex++] = "Grenade"; +$AIEquipmentSet[HeavyAmmoSet, $EquipConfigIndex++] = "Mine"; + +$EquipConfigIndex = -1; +$AIEquipmentSet[HeavyShieldSet, $EquipConfigIndex++] = "Heavy"; +$AIEquipmentSet[HeavyShieldSet, $EquipConfigIndex++] = "ShieldPack"; +$AIEquipmentSet[HeavyShieldSet, $EquipConfigIndex++] = "Plasma"; +$AIEquipmentSet[HeavyShieldSet, $EquipConfigIndex++] = "PlasmaAmmo"; +$AIEquipmentSet[HeavyShieldSet, $EquipConfigIndex++] = "Chaingun"; +$AIEquipmentSet[HeavyShieldSet, $EquipConfigIndex++] = "ChaingunAmmo"; +$AIEquipmentSet[HeavyShieldSet, $EquipConfigIndex++] = "Disc"; +$AIEquipmentSet[HeavyShieldSet, $EquipConfigIndex++] = "DiscAmmo"; +$AIEquipmentSet[HeavyShieldSet, $EquipConfigIndex++] = "GrenadeLauncher"; +$AIEquipmentSet[HeavyShieldSet, $EquipConfigIndex++] = "GrenadeLauncherAmmo"; +$AIEquipmentSet[HeavyShieldSet, $EquipConfigIndex++] = "Mortar"; +$AIEquipmentSet[HeavyShieldSet, $EquipConfigIndex++] = "MortarAmmo"; +$AIEquipmentSet[HeavyShieldSet, $EquipConfigIndex++] = "RepairKit"; +$AIEquipmentSet[HeavyShieldSet, $EquipConfigIndex++] = "Grenade"; +$AIEquipmentSet[HeavyShieldSet, $EquipConfigIndex++] = "Mine"; + +$EquipConfigIndex = -1; +$AIEquipmentSet[HeavyEnergySet, $EquipConfigIndex++] = "Heavy"; +$AIEquipmentSet[HeavyEnergySet, $EquipConfigIndex++] = "EnergyPack"; +$AIEquipmentSet[HeavyEnergySet, $EquipConfigIndex++] = "Plasma"; +$AIEquipmentSet[HeavyEnergySet, $EquipConfigIndex++] = "PlasmaAmmo"; +$AIEquipmentSet[HeavyEnergySet, $EquipConfigIndex++] = "Disc"; +$AIEquipmentSet[HeavyEnergySet, $EquipConfigIndex++] = "DiscAmmo"; +$AIEquipmentSet[HeavyEnergySet, $EquipConfigIndex++] = "GrenadeLauncher"; +$AIEquipmentSet[HeavyEnergySet, $EquipConfigIndex++] = "GrenadeLauncherAmmo"; +$AIEquipmentSet[HeavyEnergySet, $EquipConfigIndex++] = "ELFGun"; +$AIEquipmentSet[HeavyEnergySet, $EquipConfigIndex++] = "Mortar"; +$AIEquipmentSet[HeavyEnergySet, $EquipConfigIndex++] = "MortarAmmo"; +$AIEquipmentSet[HeavyEnergySet, $EquipConfigIndex++] = "RepairKit"; +$AIEquipmentSet[HeavyEnergySet, $EquipConfigIndex++] = "Grenade"; +$AIEquipmentSet[HeavyEnergySet, $EquipConfigIndex++] = "Mine"; + +$EquipConfigIndex = -1; +$AIEquipmentSet[HeavyRepairSet, $EquipConfigIndex++] = "Heavy"; +$AIEquipmentSet[HeavyRepairSet, $EquipConfigIndex++] = "RepairPack"; +$AIEquipmentSet[HeavyRepairSet, $EquipConfigIndex++] = "Chaingun"; +$AIEquipmentSet[HeavyRepairSet, $EquipConfigIndex++] = "ChaingunAmmo"; +$AIEquipmentSet[HeavyRepairSet, $EquipConfigIndex++] = "Disc"; +$AIEquipmentSet[HeavyRepairSet, $EquipConfigIndex++] = "DiscAmmo"; +$AIEquipmentSet[HeavyRepairSet, $EquipConfigIndex++] = "GrenadeLauncher"; +$AIEquipmentSet[HeavyRepairSet, $EquipConfigIndex++] = "GrenadeLauncherAmmo"; +$AIEquipmentSet[HeavyRepairSet, $EquipConfigIndex++] = "ELFGun"; +$AIEquipmentSet[HeavyRepairSet, $EquipConfigIndex++] = "Mortar"; +$AIEquipmentSet[HeavyRepairSet, $EquipConfigIndex++] = "MortarAmmo"; +$AIEquipmentSet[HeavyRepairSet, $EquipConfigIndex++] = "RepairKit"; +$AIEquipmentSet[HeavyRepairSet, $EquipConfigIndex++] = "Grenade"; +$AIEquipmentSet[HeavyRepairSet, $EquipConfigIndex++] = "Mine"; + +$EquipConfigIndex = -1; +$AIEquipmentSet[HeavyIndoorTurretSet, $EquipConfigIndex++] = "Heavy"; +$AIEquipmentSet[HeavyIndoorTurretSet, $EquipConfigIndex++] = "TurretIndoorDeployable"; +$AIEquipmentSet[HeavyIndoorTurretSet, $EquipConfigIndex++] = "Chaingun"; +$AIEquipmentSet[HeavyIndoorTurretSet, $EquipConfigIndex++] = "ChaingunAmmo"; +$AIEquipmentSet[HeavyIndoorTurretSet, $EquipConfigIndex++] = "Disc"; +$AIEquipmentSet[HeavyIndoorTurretSet, $EquipConfigIndex++] = "DiscAmmo"; +$AIEquipmentSet[HeavyIndoorTurretSet, $EquipConfigIndex++] = "GrenadeLauncher"; +$AIEquipmentSet[HeavyIndoorTurretSet, $EquipConfigIndex++] = "GrenadeLauncherAmmo"; +$AIEquipmentSet[HeavyIndoorTurretSet, $EquipConfigIndex++] = "ELFGun"; +$AIEquipmentSet[HeavyIndoorTurretSet, $EquipConfigIndex++] = "TargetingLaser"; +$AIEquipmentSet[HeavyIndoorTurretSet, $EquipConfigIndex++] = "RepairKit"; +$AIEquipmentSet[HeavyIndoorTurretSet, $EquipConfigIndex++] = "Grenade"; +$AIEquipmentSet[HeavyIndoorTurretSet, $EquipConfigIndex++] = "Mine"; + +$EquipConfigIndex = -1; +$AIEquipmentSet[HeavyInventorySet, $EquipConfigIndex++] = "Heavy"; +$AIEquipmentSet[HeavyInventorySet, $EquipConfigIndex++] = "InventoryDeployable"; +$AIEquipmentSet[HeavyInventorySet, $EquipConfigIndex++] = "Chaingun"; +$AIEquipmentSet[HeavyInventorySet, $EquipConfigIndex++] = "ChaingunAmmo"; +$AIEquipmentSet[HeavyInventorySet, $EquipConfigIndex++] = "Disc"; +$AIEquipmentSet[HeavyInventorySet, $EquipConfigIndex++] = "DiscAmmo"; +$AIEquipmentSet[HeavyInventorySet, $EquipConfigIndex++] = "GrenadeLauncher"; +$AIEquipmentSet[HeavyInventorySet, $EquipConfigIndex++] = "GrenadeLauncherAmmo"; +$AIEquipmentSet[HeavyInventorySet, $EquipConfigIndex++] = "ELFGun"; +$AIEquipmentSet[HeavyInventorySet, $EquipConfigIndex++] = "TargetingLaser"; +$AIEquipmentSet[HeavyInventorySet, $EquipConfigIndex++] = "RepairKit"; +$AIEquipmentSet[HeavyInventorySet, $EquipConfigIndex++] = "Grenade"; +$AIEquipmentSet[HeavyInventorySet, $EquipConfigIndex++] = "Mine"; + +//------------------------------ + +$EquipConfigIndex = -1; +$AIEquipmentSet[MediumRepairSet, $EquipConfigIndex++] = "Medium"; +$AIEquipmentSet[MediumRepairSet, $EquipConfigIndex++] = "RepairPack"; +$AIEquipmentSet[MediumRepairSet, $EquipConfigIndex++] = "Plasma"; +$AIEquipmentSet[MediumRepairSet, $EquipConfigIndex++] = "PlasmaAmmo"; +$AIEquipmentSet[MediumRepairSet, $EquipConfigIndex++] = "Chaingun"; +$AIEquipmentSet[MediumRepairSet, $EquipConfigIndex++] = "ChaingunAmmo"; +$AIEquipmentSet[MediumRepairSet, $EquipConfigIndex++] = "Disc"; +$AIEquipmentSet[MediumRepairSet, $EquipConfigIndex++] = "DiscAmmo"; +$AIEquipmentSet[MediumRepairSet, $EquipConfigIndex++] = "GrenadeLauncher"; +$AIEquipmentSet[MediumRepairSet, $EquipConfigIndex++] = "GrenadeLauncherAmmo"; +$AIEquipmentSet[MediumRepairSet, $EquipConfigIndex++] = "TargetingLaser"; +$AIEquipmentSet[MediumRepairSet, $EquipConfigIndex++] = "RepairKit"; +$AIEquipmentSet[MediumRepairSet, $EquipConfigIndex++] = "Grenade"; +$AIEquipmentSet[MediumRepairSet, $EquipConfigIndex++] = "Mine"; + +$EquipConfigIndex = -1; +$AIEquipmentSet[MediumShieldSet, $EquipConfigIndex++] = "Medium"; +$AIEquipmentSet[MediumShieldSet, $EquipConfigIndex++] = "ShieldPack"; +$AIEquipmentSet[MediumShieldSet, $EquipConfigIndex++] = "Plasma"; +$AIEquipmentSet[MediumShieldSet, $EquipConfigIndex++] = "PlasmaAmmo"; +$AIEquipmentSet[MediumShieldSet, $EquipConfigIndex++] = "Chaingun"; +$AIEquipmentSet[MediumShieldSet, $EquipConfigIndex++] = "ChaingunAmmo"; +$AIEquipmentSet[MediumShieldSet, $EquipConfigIndex++] = "Disc"; +$AIEquipmentSet[MediumShieldSet, $EquipConfigIndex++] = "DiscAmmo"; +$AIEquipmentSet[MediumShieldSet, $EquipConfigIndex++] = "GrenadeLauncher"; +$AIEquipmentSet[MediumShieldSet, $EquipConfigIndex++] = "GrenadeLauncherAmmo"; +$AIEquipmentSet[MediumShieldSet, $EquipConfigIndex++] = "TargetingLaser"; +$AIEquipmentSet[MediumShieldSet, $EquipConfigIndex++] = "RepairKit"; +$AIEquipmentSet[MediumShieldSet, $EquipConfigIndex++] = "Grenade"; +$AIEquipmentSet[MediumShieldSet, $EquipConfigIndex++] = "Mine"; + +$EquipConfigIndex = -1; +$AIEquipmentSet[MediumEnergySet, $EquipConfigIndex++] = "Medium"; +$AIEquipmentSet[MediumEnergySet, $EquipConfigIndex++] = "EnergyPack"; +$AIEquipmentSet[MediumEnergySet, $EquipConfigIndex++] = "Chaingun"; +$AIEquipmentSet[MediumEnergySet, $EquipConfigIndex++] = "ChaingunAmmo"; +$AIEquipmentSet[MediumEnergySet, $EquipConfigIndex++] = "Disc"; +$AIEquipmentSet[MediumEnergySet, $EquipConfigIndex++] = "DiscAmmo"; +$AIEquipmentSet[MediumEnergySet, $EquipConfigIndex++] = "GrenadeLauncher"; +$AIEquipmentSet[MediumEnergySet, $EquipConfigIndex++] = "GrenadeLauncherAmmo"; +$AIEquipmentSet[MediumEnergySet, $EquipConfigIndex++] = "ELFGun"; +$AIEquipmentSet[MediumEnergySet, $EquipConfigIndex++] = "TargetingLaser"; +$AIEquipmentSet[MediumEnergySet, $EquipConfigIndex++] = "RepairKit"; +$AIEquipmentSet[MediumEnergySet, $EquipConfigIndex++] = "Grenade"; +$AIEquipmentSet[MediumEnergySet, $EquipConfigIndex++] = "Mine"; + +$EquipConfigIndex = -1; +$AIEquipmentSet[MediumMissileSet, $EquipConfigIndex++] = "Medium"; +$AIEquipmentSet[MediumMissileSet, $EquipConfigIndex++] = "EnergyPack"; +$AIEquipmentSet[MediumMissileSet, $EquipConfigIndex++] = "Chaingun"; +$AIEquipmentSet[MediumMissileSet, $EquipConfigIndex++] = "ChaingunAmmo"; +$AIEquipmentSet[MediumMissileSet, $EquipConfigIndex++] = "Disc"; +$AIEquipmentSet[MediumMissileSet, $EquipConfigIndex++] = "DiscAmmo"; +$AIEquipmentSet[MediumMissileSet, $EquipConfigIndex++] = "MissileLauncher"; +$AIEquipmentSet[MediumMissileSet, $EquipConfigIndex++] = "MissileLauncherAmmo"; +$AIEquipmentSet[MediumMissileSet, $EquipConfigIndex++] = "ELFGun"; +$AIEquipmentSet[MediumMissileSet, $EquipConfigIndex++] = "TargetingLaser"; +$AIEquipmentSet[MediumMissileSet, $EquipConfigIndex++] = "RepairKit"; +$AIEquipmentSet[MediumMissileSet, $EquipConfigIndex++] = "Grenade"; +$AIEquipmentSet[MediumMissileSet, $EquipConfigIndex++] = "Mine"; + +$EquipConfigIndex = -1; +$AIEquipmentSet[MediumOutdoorTurretSet, $EquipConfigIndex++] = "Medium"; +$AIEquipmentSet[MediumOutdoorTurretSet, $EquipConfigIndex++] = "TurretOutdoorDeployable"; +$AIEquipmentSet[MediumOutdoorTurretSet, $EquipConfigIndex++] = "Chaingun"; +$AIEquipmentSet[MediumOutdoorTurretSet, $EquipConfigIndex++] = "ChaingunAmmo"; +$AIEquipmentSet[MediumOutdoorTurretSet, $EquipConfigIndex++] = "Disc"; +$AIEquipmentSet[MediumOutdoorTurretSet, $EquipConfigIndex++] = "DiscAmmo"; +$AIEquipmentSet[MediumOutdoorTurretSet, $EquipConfigIndex++] = "GrenadeLauncher"; +$AIEquipmentSet[MediumOutdoorTurretSet, $EquipConfigIndex++] = "GrenadeLauncherAmmo"; +$AIEquipmentSet[MediumOutdoorTurretSet, $EquipConfigIndex++] = "ELFGun"; +$AIEquipmentSet[MediumOutdoorTurretSet, $EquipConfigIndex++] = "RepairKit"; +$AIEquipmentSet[MediumOutdoorTurretSet, $EquipConfigIndex++] = "Grenade"; +$AIEquipmentSet[MediumOutdoorTurretSet, $EquipConfigIndex++] = "Mine"; + +$EquipConfigIndex = -1; +$AIEquipmentSet[MediumIndoorTurretSet, $EquipConfigIndex++] = "Medium"; +$AIEquipmentSet[MediumIndoorTurretSet, $EquipConfigIndex++] = "TurretIndoorDeployable"; +$AIEquipmentSet[MediumIndoorTurretSet, $EquipConfigIndex++] = "Chaingun"; +$AIEquipmentSet[MediumIndoorTurretSet, $EquipConfigIndex++] = "ChaingunAmmo"; +$AIEquipmentSet[MediumIndoorTurretSet, $EquipConfigIndex++] = "Disc"; +$AIEquipmentSet[MediumIndoorTurretSet, $EquipConfigIndex++] = "DiscAmmo"; +$AIEquipmentSet[MediumIndoorTurretSet, $EquipConfigIndex++] = "GrenadeLauncher"; +$AIEquipmentSet[MediumIndoorTurretSet, $EquipConfigIndex++] = "GrenadeLauncherAmmo"; +$AIEquipmentSet[MediumIndoorTurretSet, $EquipConfigIndex++] = "ELFGun"; +$AIEquipmentSet[MediumIndoorTurretSet, $EquipConfigIndex++] = "TargetingLaser"; +$AIEquipmentSet[MediumIndoorTurretSet, $EquipConfigIndex++] = "RepairKit"; +$AIEquipmentSet[MediumIndoorTurretSet, $EquipConfigIndex++] = "Grenade"; +$AIEquipmentSet[MediumIndoorTurretSet, $EquipConfigIndex++] = "Mine"; + +$EquipConfigIndex = -1; +$AIEquipmentSet[MediumInventorySet, $EquipConfigIndex++] = "Medium"; +$AIEquipmentSet[MediumInventorySet, $EquipConfigIndex++] = "InventoryDeployable"; +$AIEquipmentSet[MediumInventorySet, $EquipConfigIndex++] = "Chaingun"; +$AIEquipmentSet[MediumInventorySet, $EquipConfigIndex++] = "ChaingunAmmo"; +$AIEquipmentSet[MediumInventorySet, $EquipConfigIndex++] = "Disc"; +$AIEquipmentSet[MediumInventorySet, $EquipConfigIndex++] = "DiscAmmo"; +$AIEquipmentSet[MediumInventorySet, $EquipConfigIndex++] = "GrenadeLauncher"; +$AIEquipmentSet[MediumInventorySet, $EquipConfigIndex++] = "GrenadeLauncherAmmo"; +$AIEquipmentSet[MediumInventorySet, $EquipConfigIndex++] = "ELFGun"; +$AIEquipmentSet[MediumInventorySet, $EquipConfigIndex++] = "TargetingLaser"; +$AIEquipmentSet[MediumInventorySet, $EquipConfigIndex++] = "RepairKit"; +$AIEquipmentSet[MediumInventorySet, $EquipConfigIndex++] = "Grenade"; +$AIEquipmentSet[MediumInventorySet, $EquipConfigIndex++] = "Mine"; + +//------------------------------ + +$EquipConfigIndex = -1; +$AIEquipmentSet[LightEnergyDefault, $EquipConfigIndex++] = "Light"; +$AIEquipmentSet[LightEnergyDefault, $EquipConfigIndex++] = "EnergyPack"; +$AIEquipmentSet[LightEnergyDefault, $EquipConfigIndex++] = "Chaingun"; +$AIEquipmentSet[LightEnergyDefault, $EquipConfigIndex++] = "ChaingunAmmo"; +$AIEquipmentSet[LightEnergyDefault, $EquipConfigIndex++] = "Disc"; +$AIEquipmentSet[LightEnergyDefault, $EquipConfigIndex++] = "DiscAmmo"; +$AIEquipmentSet[LightEnergyDefault, $EquipConfigIndex++] = "GrenadeLauncher"; +$AIEquipmentSet[LightEnergyDefault, $EquipConfigIndex++] = "GrenadeLauncherAmmo"; +$AIEquipmentSet[LightEnergyDefault, $EquipConfigIndex++] = "TargetingLaser"; +$AIEquipmentSet[LightEnergyDefault, $EquipConfigIndex++] = "RepairKit"; +$AIEquipmentSet[LightEnergyDefault, $EquipConfigIndex++] = "Grenade"; +$AIEquipmentSet[LightEnergyDefault, $EquipConfigIndex++] = "Mine"; + +$EquipConfigIndex = -1; +$AIEquipmentSet[LightEnergySniper, $EquipConfigIndex++] = "Light"; +$AIEquipmentSet[LightEnergySniper, $EquipConfigIndex++] = "EnergyPack"; +$AIEquipmentSet[LightEnergySniper, $EquipConfigIndex++] = "Disc"; +$AIEquipmentSet[LightEnergySniper, $EquipConfigIndex++] = "DiscAmmo"; +$AIEquipmentSet[LightEnergySniper, $EquipConfigIndex++] = "GrenadeLauncher"; +$AIEquipmentSet[LightEnergySniper, $EquipConfigIndex++] = "GrenadeLauncherAmmo"; +$AIEquipmentSet[LightEnergySniper, $EquipConfigIndex++] = "SniperRifle"; +$AIEquipmentSet[LightEnergySniper, $EquipConfigIndex++] = "TargetingLaser"; +$AIEquipmentSet[LightEnergySniper, $EquipConfigIndex++] = "RepairKit"; +$AIEquipmentSet[LightEnergySniper, $EquipConfigIndex++] = "Grenade"; +$AIEquipmentSet[LightEnergySniper, $EquipConfigIndex++] = "Mine"; + +$EquipConfigIndex = -1; +$AIEquipmentSet[LightEnergyELF, $EquipConfigIndex++] = "Light"; +$AIEquipmentSet[LightEnergyELF, $EquipConfigIndex++] = "EnergyPack"; +$AIEquipmentSet[LightEnergyELF, $EquipConfigIndex++] = "Chaingun"; +$AIEquipmentSet[LightEnergyELF, $EquipConfigIndex++] = "ChaingunAmmo"; +$AIEquipmentSet[LightEnergyELF, $EquipConfigIndex++] = "Disc"; +$AIEquipmentSet[LightEnergyELF, $EquipConfigIndex++] = "DiscAmmo"; +$AIEquipmentSet[LightEnergyELF, $EquipConfigIndex++] = "ELFGun"; +$AIEquipmentSet[LightEnergyELF, $EquipConfigIndex++] = "TargetingLaser"; +$AIEquipmentSet[LightEnergyELF, $EquipConfigIndex++] = "RepairKit"; +$AIEquipmentSet[LightEnergyELF, $EquipConfigIndex++] = "Grenade"; +$AIEquipmentSet[LightEnergyELF, $EquipConfigIndex++] = "Mine"; + +$EquipConfigIndex = -1; +$AIEquipmentSet[LightShieldSet, $EquipConfigIndex++] = "Light"; +$AIEquipmentSet[LightShieldSet, $EquipConfigIndex++] = "ShieldPack"; +$AIEquipmentSet[LightShieldSet, $EquipConfigIndex++] = "Plasma"; +$AIEquipmentSet[LightShieldSet, $EquipConfigIndex++] = "PlasmaAmmo"; +$AIEquipmentSet[LightShieldSet, $EquipConfigIndex++] = "Disc"; +$AIEquipmentSet[LightShieldSet, $EquipConfigIndex++] = "DiscAmmo"; +$AIEquipmentSet[LightShieldSet, $EquipConfigIndex++] = "GrenadeLauncher"; +$AIEquipmentSet[LightShieldSet, $EquipConfigIndex++] = "GrenadeLauncherAmmo"; +$AIEquipmentSet[LightShieldSet, $EquipConfigIndex++] = "TargetingLaser"; +$AIEquipmentSet[LightShieldSet, $EquipConfigIndex++] = "RepairKit"; +$AIEquipmentSet[LightShieldSet, $EquipConfigIndex++] = "Grenade"; +$AIEquipmentSet[LightShieldSet, $EquipConfigIndex++] = "Mine"; + +$EquipConfigIndex = -1; +$AIEquipmentSet[LightCloakSet, $EquipConfigIndex++] = "Light"; +$AIEquipmentSet[LightCloakSet, $EquipConfigIndex++] = "CloakingPack"; +$AIEquipmentSet[LightCloakSet, $EquipConfigIndex++] = "Plasma"; +$AIEquipmentSet[LightCloakSet, $EquipConfigIndex++] = "PlasmaAmmo"; +$AIEquipmentSet[LightCloakSet, $EquipConfigIndex++] = "Disc"; +$AIEquipmentSet[LightCloakSet, $EquipConfigIndex++] = "DiscAmmo"; +$AIEquipmentSet[LightCloakSet, $EquipConfigIndex++] = "GrenadeLauncher"; +$AIEquipmentSet[LightCloakSet, $EquipConfigIndex++] = "GrenadeLauncherAmmo"; +$AIEquipmentSet[LightCloakSet, $EquipConfigIndex++] = "TargetingLaser"; +$AIEquipmentSet[LightCloakSet, $EquipConfigIndex++] = "RepairKit"; +$AIEquipmentSet[LightCloakSet, $EquipConfigIndex++] = "FlashGrenade"; +$AIEquipmentSet[LightCloakSet, $EquipConfigIndex++] = "Mine"; + +$EquipConfigIndex = -1; +$AIEquipmentSet[LightRepairSet, $EquipConfigIndex++] = "Light"; +$AIEquipmentSet[LightRepairSet, $EquipConfigIndex++] = "RepairPack"; +$AIEquipmentSet[LightRepairSet, $EquipConfigIndex++] = "Chaingun"; +$AIEquipmentSet[LightRepairSet, $EquipConfigIndex++] = "ChaingunAmmo"; +$AIEquipmentSet[LightRepairSet, $EquipConfigIndex++] = "Disc"; +$AIEquipmentSet[LightRepairSet, $EquipConfigIndex++] = "DiscAmmo"; +$AIEquipmentSet[LightRepairSet, $EquipConfigIndex++] = "GrenadeLauncher"; +$AIEquipmentSet[LightRepairSet, $EquipConfigIndex++] = "GrenadeLauncherAmmo"; +$AIEquipmentSet[LightRepairSet, $EquipConfigIndex++] = "TargetingLaser"; +$AIEquipmentSet[LightRepairSet, $EquipConfigIndex++] = "RepairKit"; +$AIEquipmentSet[LightRepairSet, $EquipConfigIndex++] = "Grenade"; +$AIEquipmentSet[LightRepairSet, $EquipConfigIndex++] = "Mine"; + +$EquipConfigIndex = -1; +$AIEquipmentSet[LightSniperChain, $EquipConfigIndex++] = "Light"; +$AIEquipmentSet[LightSniperChain, $EquipConfigIndex++] = "EnergyPack"; +$AIEquipmentSet[LightSniperChain, $EquipConfigIndex++] = "Disc"; +$AIEquipmentSet[LightSniperChain, $EquipConfigIndex++] = "DiscAmmo"; +$AIEquipmentSet[LightSniperChain, $EquipConfigIndex++] = "Chaingun"; +$AIEquipmentSet[LightSniperChain, $EquipConfigIndex++] = "ChaingunAmmo"; +$AIEquipmentSet[LightSniperChain, $EquipConfigIndex++] = "SniperRifle"; +$AIEquipmentSet[LightSniperChain, $EquipConfigIndex++] = "TargetingLaser"; +$AIEquipmentSet[LightSniperChain, $EquipConfigIndex++] = "RepairKit"; +$AIEquipmentSet[LightSniperChain, $EquipConfigIndex++] = "Grenade"; +$AIEquipmentSet[LightSniperChain, $EquipConfigIndex++] = "Mine"; diff --git a/base/scripts/aiObjectiveBuilder.cs b/base/scripts/aiObjectiveBuilder.cs new file mode 100644 index 0000000..b1e9bd0 --- /dev/null +++ b/base/scripts/aiObjectiveBuilder.cs @@ -0,0 +1,645 @@ +// used to automatically create all objectives for a mission + +function AIgeneratorObjectiveInit(%object) +{ + if(%object.isUnderTerrain) + return; // no objectives for generators that act as a simple power sources + + if(%object.team > 0) + { + %homeTeam = %object.team; + if(%homeTeam == 1) + %enemyTeam = 2; + else + %enemyTeam = 1; + + addAIObjective(%enemyTeam, createDefaultAttack(%object, $AIWeightAttackGenerator[1], $AIWeightAttackGenerator[2])); + addAIObjective(%homeTeam, createDefaultRepair(%object, $AIWeightRepairGenerator[1], $AIWeightRepairGenerator[2])); + addAIObjective(%homeTeam, createDefaultDefend(%object, $AIWeightDefendGenerator[1], $AIWeightDefendGenerator[2])); + } + else + { + addAIObjective(1, createDefaultRepair(%object, $AIWeightRepairGenerator[1], $AIWeightRepairGenerator[2])); + addAIObjective(1, createDefaultAttack(%object, $AIWeightAttackGenerator[1], $AIWeightAttackGenerator[2])); + addAIObjective(1, createDefaultDefend(%object, $AIWeightDefendGenerator[1], $AIWeightDefendGenerator[2])); + addAIObjective(2, createDefaultRepair(%object, $AIWeightRepairGenerator[1], $AIWeightRepairGenerator[2])); + addAIObjective(2, createDefaultAttack(%object, $AIWeightAttackGenerator[1], $AIWeightAttackGenerator[2])); + addAIObjective(2, createDefaultDefend(%object, $AIWeightDefendGenerator[1], $AIWeightDefendGenerator[2])); + } +} + +//-------------------------------------------------------------------------------------------------------- + +function AIsensorObjectiveInit(%object) +{ + if(%object.team > 0) + { + %homeTeam = %object.team; + if(%homeTeam == 1) + %enemyTeam = 2; + else + %enemyTeam = 1; + + addAIObjective(%homeTeam, createDefaultRepair(%object, $AIWeightRepairTurret[1], $AIWeightRepairTurret[2])); + addAIObjective(%enemyTeam, createDefaultMortar(%object, $AIWeightMortarTurret[1], $AIWeightMortarTurret[2])); + } + else + { + addAIObjective(1, createDefaultRepair(%object, $AIWeightRepairTurret[1], $AIWeightRepairTurret[2])); + addAIObjective(1, createDefaultMortar(%object, $AIWeightMortarTurret[1], $AIWeightMortarTurret[2])); + addAIObjective(2, createDefaultRepair(%object, $AIWeightRepairTurret[1], $AIWeightRepairTurret[2])); + addAIObjective(2, createDefaultMortar(%object, $AIWeightMortarTurret[1], $AIWeightMortarTurret[2])); + } +} + +//-------------------------------------------------------------------------------------------------------- + +function AIflipflopObjectiveInit(%object) +{ + // this will always start out neutral (Team 0) + addAIObjective(1, createDefaultDefend(%object, $AIWeightDefendFlipFlop[1], $AIWeightDefendFlipFlop[2])); + addAIObjective(1, createDefaultTouch(%object, $AIWeightCaptureFlipFlop[1], $AIWeightCaptureFlipFlop[2])); + addAIObjective(2, createDefaultDefend(%object, $AIWeightDefendFlipFlop[1], $AIWeightDefendFlipFlop[2])); + addAIObjective(2, createDefaultTouch(%object, $AIWeightCaptureFlipFlop[1], $AIWeightCaptureFlipFlop[2])); +} + +//-------------------------------------------------------------------------------------------------------- + +function AIturretObjectiveInit(%object) +{ + if(%object.team > 0) + { + %homeTeam = %object.team; + if(%homeTeam == 1) + %enemyTeam = 2; + else + %enemyTeam = 1; + + addAIObjective(%homeTeam, createDefaultRepair(%object, $AIWeightRepairTurret[1], $AIWeightRepairTurret[2])); + + // attack for indoor turrets, mortar for outside turrets + if(%object.getDataBlock().getName() $= "SentryTurret") + addAIObjective(%enemyTeam, createDefaultAttack(%object, $AIWeightAttackInventory[1], $AIWeightAttackInventory[2])); + else + addAIObjective(%enemyTeam, createDefaultMortar(%object, $AIWeightMortarTurret[1], $AIWeightMortarTurret[2])); + } + else + { + addAIObjective(1, createDefaultRepair(%object, $AIWeightRepairTurret[1], $AIWeightRepairTurret[2])); + addAIObjective(1, createDefaultMortar(%object, $AIWeightMortarTurret[1], $AIWeightMortarTurret[2])); + addAIObjective(2, createDefaultRepair(%object, $AIWeightRepairTurret[1], $AIWeightRepairTurret[2])); + addAIObjective(2, createDefaultMortar(%object, $AIWeightMortarTurret[1], $AIWeightMortarTurret[2])); + } +} + +//-------------------------------------------------------------------------------------------------------- + +function AIinventoryObjectiveInit(%object) +{ + if(%object.team > 0) + { + %homeTeam = %object.team; + if(%homeTeam == 1) + %enemyTeam = 2; + else + %enemyTeam = 1; + + addAIObjective(%homeTeam, createDefaultRepair(%object, $AIWeightRepairInventory[1], $AIWeightRepairInventory[2])); + addAIObjective(%enemyTeam, createDefaultAttack(%object, $AIWeightAttackInventory[1], $AIWeightAttackInventory[2])); + } + else + { + addAIObjective(1, createDefaultRepair(%object, $AIWeightRepairInventory[1], $AIWeightRepairInventory[2])); + addAIObjective(1, createDefaultAttack(%object, $AIWeightAttackInventory[1], $AIWeightAttackInventory[2])); + addAIObjective(2, createDefaultRepair(%object, $AIWeightRepairInventory[1], $AIWeightRepairInventory[2])); + addAIObjective(2, createDefaultAttack(%object, $AIWeightAttackInventory[1], $AIWeightAttackInventory[2])); + } +} + +//-------------------------------------------------------------------------------------------------------- + +function createDefaultTouch(%object, %weight1, %weight2) +{ + %objective = new AIObjective(AIOTouchObject) + { + dataBlock = "AIObjectiveMarker"; + description = "Capture the " @ %object.getName(); + weightLevel1 = %weight1; + weightLevel2 = %weight2; + mode = "TouchFlipFlop"; + targetObject = %object.getName(); + targetClientId = -1; + targetObjectId = -1; + offense = true; + location = %object.getWorldBoxCenter(); + desiredEquipment = "Light EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + }; + + if(%object.missionTypesList !$= "") + %objective.gameType = %object.missionTypesList; + + %objective.position = %objective.location; + return %objective; +} + +//-------------------------------------------------------------------------------------------------------- + +function createDefaultMortar(%object, %weight1, %weight2) +{ + %objective = new AIObjective(AIOMortarObject) + { + dataBlock = "AIObjectiveMarker"; + description = "Mortar the " @ %object.getDataBlock().getName(); + targetObject = %object.getName(); + targetObjectId = %object; + targetClientId = -1; + weightLevel1 = %weight1; + weightLevel2 = %weight2; + location = %object.getWorldBoxCenter(); + offense = true; + equipment = "Mortar MortarAmmo"; + buyEquipmentSet = "HeavyAmmoSet"; + }; + + if(%object.missionTypesList !$= "") + %objective.gameType = %object.missionTypesList; + + %objective.position = %objective.location; + return %objective; +} + +//-------------------------------------------------------------------------------------------------------- + +function createDefaultRepair(%object, %weight1, %weight2) +{ + %objective = new AIObjective(AIORepairObject) + { + dataBlock = "AIObjectiveMarker"; + description = "Repair the " @ %object.getDataBlock().getName(); + targetObject = %object.getName(); + targetObjectId = %object; + targetClientId = -1; + weightLevel1 = %weight1; + weightLevel2 = %weight2; + location = %object.getWorldBoxCenter(); + defense = true; + equipment = "RepairPack"; + buyEquipmentSet = "MediumRepairSet"; + }; + + if(%object.missionTypesList !$= "") + %objective.gameType = %object.missionTypesList; + + %objective.position = %objective.location; + return %objective; +} + +//-------------------------------------------------------------------------------------------------------- + +function createDefaultAttack(%object, %weight1, %weight2) +{ + %objective = new AIObjective(AIOAttackObject) + { + dataBlock = "AIObjectiveMarker"; + description = "Attack the " @ %object.getDataBlock().getName(); + targetObject = %object.getName(); + targetObjectId = %object; + targetClientId = -1; + weightLevel1 = %weight1; + weightLevel2 = %weight2; + location = %object.getWorldBoxCenter(); + offense = true; + desiredEquipment = "ShieldPack"; + buyEquipmentSet = "HeavyAmmoSet"; + }; + + if(%object.missionTypesList !$= "") + %objective.gameType = %object.missionTypesList; + + %objective.position = %objective.location; + return %objective; +} + +//-------------------------------------------------------------------------------------------------------- + +function createDefaultDefend(%object, %weight1, %weight2) +{ + %objective = new AIObjective(AIODefendLocation) + { + dataBlock = "AIObjectiveMarker"; + description = "Defend the " @ %object.getDataBlock().getName(); + targetObject = %object.getName(); + targetObjectId = %object; + targetClientId = -1; + weightLevel1 = %weight1; + weightLevel2 = %weight2; + location = %object.getWorldBoxCenter(); + defense = true; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + }; + + if(%object.missionTypesList !$= "") + %objective.gameType = %object.missionTypesList; + + %objective.position = %objective.location; + return %objective; +} + +//-------------------------------------------------------------------------------------------------------- + +function AIflagObjectiveInit(%flag) +{ + %homeTeam = %flag.team; + + if(%homeTeam == 1) + %enemyTeam = 2; + else + %enemyTeam = 1; + + if(%flag.missionTypesList !$= "") + { + %missionSpecific = true; + %misType = %flag.missionTypesList; + } + + %newObjective = new AIObjective(AIODefendLocation) + { + dataBlock = "AIObjectiveMarker"; + weightLevel1 = $AIWeightDefendFlag[1]; + weightLevel2 = $AIWeightDefendFlag[2]; + description = "Defend our flag"; + targetObject = %flag.getName(); + targetObjectId = %flag; + targetClientId = -1; + location = %flag.getWorldBoxCenter(); + defense = true; + desiredEquipment = "ShieldPack Plasma PlasmaAmmo"; + buyEquipmentSet = "HeavyShieldSet"; + chat = "ChatSelfDefendFlag DefendBase"; + }; + + if(%missionSpecific) + %newObjective.gameType = %misType; + else + %newObjective.gameType = "all"; + + %newObjective.position = %newObjective.location; + addAIObjective(%homeTeam, %newObjective); + + %newObjective = new AIObjective(AIOTouchObject) + { + dataBlock = "AIObjectiveMarker"; + weightLevel1 = $AIWeightGrabFlag[1]; + weightLevel2 = $AIWeightGrabFlag[2]; + description = "Grab the enemy flag"; + targetObject = %flag.getName(); + targetObjectId = %flag; + targetClientId = -1; + location = %flag.getWorldBoxCenter(); + mode = "FlagGrab"; + offense = true; + desiredEquipment = "Light EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + }; + + if(%missionSpecific) + %newObjective.gameType = %misType; + else + %newObjective.gameType = "all"; + + %newObjective.position = %newObjective.location; + addAIObjective(%enemyTeam, %newObjective); + + //NOTE: for this objective, we need to fill in the targetClientId when the flag is taken + %newObjective = new AIObjective(AIOAttackPlayer) + { + dataBlock = "AIObjectiveMarker"; + weightLevel1 = $AIWeightKillFlagCarrier[1]; + weightLevel2 = $AIWeightKillFlagCarrier[2]; + description = "Kill the enemy flag carrier"; + mode = "FlagCarrier"; + targetObject = %flag.getName(); + targetObjectId = -1; + targetClientId = -1; + offense = true; + desiredEquipment = "Light EnergyPack"; + buyEquipmentSet = "LightEnergySniper"; + }; + + if(%missionSpecific) + %newObjective.gameType = %misType; + else + %newObjective.gameType = "all"; + + %newObjective.position = %flag.getWorldBoxCenter(); + addAIObjective(%homeTeam, %newObjective); + + //NOTE: for this objective, we need to fill in the location when the flag is grabbed + %newObjective = new AIObjective(AIOTouchObject) + { + dataBlock = "AIObjectiveMarker"; + weightLevel1 = $AIWeightCapFlag[1]; + weightLevel2 = $AIWeightCapFlag[2]; + description = "Capture the flag!"; + targetObject = %flag.getName(); + targetObjectId = %flag; + targetClientId = -1; + mode = "FlagCapture"; + offense = true; + defense = true; + }; + + if(%missionSpecific) + %newObjective.gameType = %misType; + else + %newObjective.gameType = "all"; + + %newObjective.position = %flag.getWorldBoxCenter(); + addAIObjective(%enemyTeam, %newObjective); + + %newObjective = new AIObjective(AIOTouchObject) + { + dataBlock = "AIObjectiveMarker"; + weightLevel1 = $AIWeightReturnFlag[1]; + weightLevel2 = $AIWeightReturnFlag[2]; + description = "Return our flag"; + targetObject = %flag.getName(); + targetObjectId = %flag; + targetClientId = -1; + location = %flag.getWorldBoxCenter(); + mode = "FlagDropped"; + offense = true; + defense = true; + }; + + if(%missionSpecific) + %newObjective.gameType = %misType; + else + %newObjective.gameType = "all"; + + %newObjective.position = %newObjective.location; + addAIObjective(%homeTeam, %newObjective); + + %newObjective = new AIObjective(AIOTouchObject) + { + dataBlock = "AIObjectiveMarker"; + weightLevel1 = $AIWeightReturnFlag[1]; + weightLevel2 = $AIWeightReturnFlag[2]; + description = "Grab the dropped enemy flag"; + targetObject = %flag.getName(); + targetObjectId = %flag; + targetClientId = -1; + mode = "FlagDropped"; + offense = true; + defense = true; + }; + + if(%missionSpecific) + %newObjective.gameType = %misType; + else + %newObjective.gameType = "all"; + + %newObjective.position = %flag.getWorldBoxCenter(); + addAIObjective(%enemyTeam, %newObjective); +} + +//-------------------------------------------------------------------------------------------------------- + +function addAIObjective(%team, %objective) +{ + if(AIObjectiveExists(%objective, %team) == false) + nameToId("MissionGroup/Teams/team" @ %team @ "/AIObjectives").add(%objective); + else + %objective.delete(); +} + +//-------------------------------------------------------------------------------------------------------- + +function AICreateObjectives() +{ + messageBoxOkCancel("Build Objectives", "Are you sure you want to build all mission objectives?", "AIBuildObjectives();"); +} + +function AIBuildObjectives() +{ + // make sure there exists our objectives group + for(%i = 0; %i <= Game.numTeams; %i++) + { + %objGroup = nameToId("MissionGroup/Teams/team" @ %i @ "/AIObjectives"); + %teamGroup = nameToID("MissionGroup/Teams/team" @ %i); + + if(%objGroup <= 0) + { + %set = new SimGroup(AIObjectives); + %teamGroup.add(%set); + } + else + { + // there already exists a folder for AIobjectives + // remove any objectives that are not locked + %count = 0; + while(%objGroup.getCount() && (%count != %objGroup.getCount())) + { + %obj = %objGroup.getObject(%count); + if(!%obj.locked) + %objGroup.remove(%obj); + else + %count++; + } + } + } + + for(%k = 0; %k <= Game.numTeams; %k++) + { + %teamGroup = nameToID("MissionGroup/Teams/team" @ %k); + %teamGroup.AIobjectiveInit(false); + } +} + +//-------------------------------------------------------------------------------------------------------- + +function SimGroup::AIobjectiveInit(%this) +{ + for(%i = 0; %i < %this.getCount(); %i++) + %this.getObject(%i).AIobjectiveInit(); +} + +//-------------------------------------------------------------------------------------------------------- + +function GameBase::AIobjectiveInit(%this) +{ + %this.getDataBlock().AIobjectiveInit(%this); +} + +//-------------------------------------------------------------------------------------------------------- + +function AssignName(%object) +{ + %root = %object.getDataBlock().getName(); + if (%root $= "") + %root = "Unknown"; + + if (%object.team >= 0) + %newName = "Team" @ %object.team @ %root; + else + %newName = "Unnamed" @ %root; + %i = 1; + while (isObject(%newName @ %i)) + %i++; + %object.setName(%newName @ %i); +} + +//-------------------------------------------------------------------------------------------------------- + +function StationInventory::AIobjectiveInit(%data, %object) +{ + if(%object.getName() $= "") + AssignName(%object); + + AIinventoryObjectiveInit(%object); +} + +//-------------------------------------------------------------------------------------------------------- + +function Generator::AIobjectiveInit(%data, %object) +{ + if(%object.getName() $= "") + AssignName(%object); + + if(!%object.isUnderTerrain) + AIgeneratorObjectiveInit(%object); +} + +//-------------------------------------------------------------------------------------------------------- + +function TurretData::AIobjectiveInit(%data, %object) +{ + if(%object.getName() $= "") + AssignName(%object); + + AIturretObjectiveInit(%object); +} + +//-------------------------------------------------------------------------------------------------------- + +function Sensor::AIobjectiveInit(%data, %object) +{ + if(%object.getName() $= "") + AssignName(%object); + + AIsensorObjectiveInit(%object); +} + +//-------------------------------------------------------------------------------------------------------- + +function Flag::AIobjectiveInit(%data, %object) +{ + if(%object.getName() $= "") + AssignName(%object); + + AIflagObjectiveInit(%object); +} + +//-------------------------------------------------------------------------------------------------------- + +function FlipFlop::AIobjectiveInit(%data, %object) +{ + if(%object.getName() $= "") + AssignName(%object); + + AIflipflopObjectiveInit(%object); +} + +//-------------------------------------------------------------------------------------------------------- + +function saveObjectives() +{ + for(%i = 1; %i <= 2; %i++) + saveObjectives(%i); +} + +//-------------------------------------------------------------------------------------------------------- + +function saveObjectiveFile(%team) +{ + // check for read-only + %fileName = $CurrentMission @ "team" @ %team @ ".cs"; + %file = "base/missions/" @ %fileName; + + if(!isWriteableFileName(%file)) + { + error("Objectives file '" @ %fileName @ "' is not writeable."); + return; + } + + // ok, were good to save. + %objectives = nameToId("MissionGroup/Teams/team" @ %team @ "/AIObjectives"); + %objectives.save("missions/" @ %fileName); +} + +//-------------------------------------------------------------------------------------------------------- + +function LoadObjectives(%numTeams) +{ + for(%i = 1; %i <= %numTeams; %i++) + loadObjectivesFile(%i); +} + +//-------------------------------------------------------------------------------------------------------- + +function LoadObjectivesFile(%team) +{ + %file = $CurrentMission @ "team" @ %team; + exec("missions/" @ %file); + %newObjSet = nameToId("MissionCleanup/AIObjectives"); + + if(%newObjSet > 0) + { + %group = NameToId("MissionGroup/Teams/team" @ %team); + %oldObjSet = NameToId("MissionGroup/Teams/team" @ %team @ "/AIObjectives"); + + if(%oldObjSet > 0) + { + %oldObjSet.delete(); + %group.add(%newObjSet); + } + } + else + error("no objectives file for team" @ %team @ ". Loading defaults..."); +} + +//-------------------------------------------------------------------------------------------------------- + +function AIObjectiveExists(%newObjective, %team) +{ + %objGroup = nameToId("MissionGroup/Teams/team" @ %team @ "/AIObjectives"); + %objCount = %objGroup.getCount(); + %exists = false; + + for(%i = 0; %i < %objCount; %i++) + { + %obj = %objGroup.getObject(%i); + + if(%obj.getName() $= %newObjective.getName()) + { + if((%obj.getName() $= "AIOMortarObject") || + (%obj.getName() $= "AIORepairObject") || + (%obj.getName() $= "AIOAttackObject") || + (%obj.getName() $= "AIODefendLocation")) + { + if(%obj.targetObjectId == %newObjective.targetObjectId) + %exists = true; + } + else if((%obj.getName() $= "AIOTouchObject") || + (%obj.getName() $= "AIOAttackPlayer")) + { + if(%obj.mode $= %newObjective.mode) + if(%obj.description $= %newObjective.description) + %exists = true; + } + } + } + return %exists; +} diff --git a/base/scripts/aiObjectives.cs b/base/scripts/aiObjectives.cs new file mode 100644 index 0000000..2ec6ee2 --- /dev/null +++ b/base/scripts/aiObjectives.cs @@ -0,0 +1,3790 @@ +//------------------------------ +//AI Objective Q functions... + +$ObjectiveClientsSet = 0; +function AIObjectiveFindClients(%objective) +{ + //create and clear the set + if (! $ObjectiveClientsSet) + { + $ObjectiveClientsSet = new SimSet(); + MissionCleanup.add($ObjectiveClientSet); + } + $ObjectiveClientsSet.clear(); + + %clientCount = 0; + %count = ClientGroup.getCount(); + for(%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + if (%cl.objective == %objective) + $ObjectiveClientsSet.add(%cl); + } + return $ObjectiveClientsSet.getCount(); +} + +function AIObjectiveGetClosestClient(%location, %team) +{ + if (%location $= "") + return -1; + + if (%team $= "") + %team = 0; + + %closestClient = -1; + %closestDistance = 32767; + %count = ClientGroup.getCount(); + for(%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + if (%cl.isAIControlled() && (%cl.team == %team || %team == 0) && AIClientIsAlive(%cl)) + { + %testPos = %cl.player.getWorldBoxCenter(); + %distance = VectorDist(%location, %testPos); + if (%distance < %closestDistance) + { + %closestDistance = %distance; + %closestClient = %cl; + } + } + } + + return %closestClient; +} + +function AICountObjectives(%team) +{ + %objCount = 0; + %count = $ObjectiveQ[%team].getCount(); + for (%i = 0; %i < %count; %i++) + { + %grp = $ObjectiveQ[%team].getObject(%i); + if (%grp.getClassName() !$= "AIObjective") + %objCount += %grp.getCount(); + else + %objCount++; + } + error("DEBUG" SPC %team SPC "has" SPC %objCount SPC "objectives."); +} + +function AIAddTableObjective(%objective, %weight, %level, %bump, %position) +{ + $objTable[%position, objective] = %objective; + $objTable[%position, weight] = %weight; + $objTable[%position, level] = %level; + $objTable[%position, bump] = %bump; + $objTableCount = %position + 1; +} + +function AIChooseObjective(%client, %useThisObjectiveQ) +{ + //pick which objectiveQ to use, or use the default + if (%useThisObjectiveQ <= 0 && %client.team < 0) + return; + + if (%useThisObjectiveQ <= 0) + %useThisObjectiveQ = $ObjectiveQ[%client.team]; + + if (!isObject(%useThisObjectiveQ) || %useThisObjectiveQ.getCount() <= 0) + return; + + //since most objectives check for inventory, find the closest inventory stations first + %inventoryStr = AIFindClosestInventories(%client); + + //find the most appropriate objective + if (!%client.objective) + { + //note, the table is never empty, during the course of this function + AIAddTableObjective(0, 0, 0, 0, 0); + } + else + { + //should re-evaluate the current objective weight - but never decrease the weight!!! + %testWeight = %client.objective.weight(%client, %client.objectiveLevel, 0, %inventoryStr); + if (%testWeight <= 0 || %testWeight > %client.objectiveWeight) + %client.objectiveWeight = %testWeight; + + if (%client.objectiveWeight > 0) + AIAddTableObjective(%client.objective, %client.objectiveWeight, %client.objectiveLevel, 0, 0); + else + AIAddTableObjective(0, 0, 0, 0, 0); + } + + %objCount = %useThisObjectiveQ.getCount(); + for (%i = 0; %i < %objCount; %i++) + { + %objective = %useThisObjectiveQ.getObject(%i); + + //don't re-evaluate the client's own + if (%objective == %client.objective) + continue; + + //try this objective at each of the 4 weight levels to see if it is weighted higher + for (%level = 1; %level <= 4; %level++) + { + %minWeight = 0; + %bumpWeight = 0; + %bumpClient = ""; + + //we can bump clients off the objective for the first three levels + if (%level <= 3) + { + //if the objective is part of a group, check the whole group + if (%objective.group > 0) + { + %bumpClient = %objective.group.clientLevel[%level]; + %bumpWeight = %bumpClient.objectiveWeight; + } + else + { + %bumpClient = %objective.clientLevel[%level]; + %bumpWeight = %bumpClient.objectiveWeight; + } + } + + //find the minimum weight the objective must have to be considered + %minWeight = (%bumpWeight > $objTable[0, weight] ? %bumpWeight : $objTable[0, weight]); + + //evaluate the weight + %weight = %objective.weight(%client, %level, %minWeight, %inventoryStr); + + //make sure we got a valid weight + if (%weight <= 0) + break; + + //if it's the highest so far, it now replaces anything else in the table + if (%weight > $objTable[0, weight]) + { + //never bump someone unless you out- weight them + if (%weight > %bumpWeight) + { + AIAddTableObjective(%objective, %weight, %level, %bumpClient, 0); + + //no need to keep checking the other levels + break; + } + } + + //else if it's equal to the highest objective we've seen so far, and higher from our current objective + else if (%weight == $objTable[0, weight] && %weight > %client.objectiveWeight) + { + //never bump someone unless you outweigh them + if (%weight > %bumpWeight) + { + //if this wouldn't require us to bump someone, or the table is empty + if (%bumpWeight <= 0 || $objTable[0, weight] <= 0) + { + //if the table currently contains objectives which would require bumping someone, clear it + if ($objTable[0, bump] > 0) + %position = 0; + else + %position = $objTableCount; + + //add it to the table + AIAddTableObjective(%objective, %weight, %level, %bumpClient, %position); + + //no need to keep checking the other levels + break; + } + + //otherwise, the table is not empty, and this would require us to bump someone + //only add it if everything else in the table would also require us to bump someone + else if ($objTable[0, bump] > 0) + { + AIAddTableObjective(%objective, %weight, %level, %bumpClient, $objTableCount); + + //no need to keep checking the other levels + break; + } + } + } + + //else it must have been less than our highest objective so far- again, no need to keep checking other levels... + else + break; + } + } + + //if we have a table of possible objectives which are higher than our current- choose one at random + if ($objTableCount > 0 && $objTable[0, objective] != %client.objective) + { + //choose the new one + %index = mFloor(getRandom() * ($objTableCount - 0.01)); + + //clear the old objective + if (%client.objective) + { + if (%client.objectiveLevel <= 3) + { + if (%client.objective.group > 0) + { + if (%client.objective.group.clientLevel[%client.objectiveLevel] == %client) + %client.objective.group.clientLevel[%client.objectiveLevel] = ""; + } + else + { + if (%client.objective.clientLevel[%client.objectiveLevel] == %client) + %client.objective.clientLevel[%client.objectiveLevel] = ""; + } + } + %client.objective.unassignClient(%client); + } + + //assign the new + %chooseObjective = $objTable[%index, objective]; + %client.objective = %chooseObjective; + %client.objectiveWeight = $objTable[%index, weight]; + %client.objectiveLevel = $objTable[%index, level]; + if (%client.objectiveLevel <= 3) + { + if (%chooseObjective.group > 0) + %chooseObjective.group.clientLevel[%client.objectiveLevel] = %client; + else + %chooseObjective.clientLevel[%client.objectiveLevel] = %client; + } + %chooseObjective.assignClient(%client); + + //see if this objective needs to be acknowledged + if (%chooseObjective.shouldAcknowledge && %chooseObjective.issuedByHuman && isObject(%chooseObjective.issuedByClientId)) + { + //cancel any pending acknowledgements - a bot probably just got bumped off this objective + cancel(%chooseObjective.ackSchedule); + %chooseObjective.ackSchedule = schedule(5500, %chooseObjective, "AIAcknowledgeObjective", %client, %chooseObjective); + } + + //if we had to bump someone off this objective, + %bumpClient = $objTable[%index, bump]; + if (%bumpClient > 0) + { + //unassign the bumped client and choose a new objective + AIUnassignClient(%bumpClient); + Game.AIChooseGameObjective(%bumpClient); + } + } + + //debuging - refresh aidebugq() if required + //if ($AIDebugTeam >= 0) + // aiDebugQ($AIDebugTeam); +} + +function AIAcknowledgeObjective(%client, %objective) +{ + %objective.shouldAcknowledge = false; + //make sure the client is still assigned to this objective + if (%client.objective == %objective) + serverCmdAcceptTask(%client, %objective.issuedByClientId, -1, %objective.ackDescription); +} + +function AIForceObjective(%client, %newObjective, %useWeight) +{ + //if we found a new objective, release the old, and assign the new + if (%newObjective && %newObjective != %client.objective) + { + //see if someone was already assigned to this objective + if (%newObjective.group > 0) + %prevClient = newObjective.group.clientLevel[1]; + else + %prevClient = newObjective.clientLevel[1]; + if (%prevClient > 0) + AIUnassignClient(%prevClient); + + //see if we should override the weight + if (%useWeight < %newObjective.weightLevel1) + %useWeight = %newObjective.weightLevel1; + + //release the client, and force the assignment + AIUnassignClient(%client); + %client.objective = %newObjective; + %client.objectiveWeight = %useWeight; + %client.objectiveLevel = 1; + if (%newObjective.group > 0) + %newObjective.group.clientLevel[1] = %client; + else + %newObjective.clientLevel[1] = %client; + %newObjective.forceClientId = %client; + %newObjective.assignClient(%client); + + //don't acknowledge anything that's been forced... + %newObjective.shouldAcknowledge = false; + + //now reassign the prev client + if (%prevClient) + Game.AIChooseGameObjective(%prevClient); + } + + //debuging - refresh aidebugq() if required + //if ($AIDebugTeam >= 0) + // aiDebugQ($AIDebugTeam); +} + +function AIUnassignClient(%client) +{ + //first, dissolve any link with a human + aiReleaseHumanControl(%client.controlByHuman, %client); + + if (%client.objective) + { + if (%client.objectiveLevel <= 3) + { + if (%client.objective.group > 0) + { + //make sure the clientLevel was actually this client + if (%client.objective.group.clientLevel[%client.objectiveLevel] == %client) + %client.objective.group.clientLevel[%client.objectiveLevel] = ""; + } + else + { + if (%client.objective.clientLevel[%client.objectiveLevel] == %client) + %client.objective.clientLevel[%client.objectiveLevel] = ""; + } + } + %client.objective.unassignClient(%client); + %client.objective = ""; + %client.objectiveWeight = 0; + } + + //debuging - refresh aidebugq() if required + //if ($AIDebugTeam >= 0) + // aiDebugQ($AIDebugTeam); +} + +function AIClearObjective(%objective) +{ + %count = ClientGroup.getCount(); + for(%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + if (%cl.objective == %objective) + AIUnassignClient(%cl); + } + + //debuging - refresh aidebugq() if required + //if ($AIDebugTeam >= 0) + // aiDebugQ($AIDebugTeam); +} + +//------------------------------ +//TASKS AND OBJECTIVES + +function AIDefendLocation::initFromObjective(%task, %objective, %client) +{ + //initialize the task vars from the objective + %task.baseWeight = %client.objectiveWeight; + %task.targetObject = %objective.targetObjectId; + if (%objective.Location !$= "") + %task.location = %objective.location; + else + %task.location = %objective.targetObjectId.getWorldBoxCenter(); + + %task.equipment = %objective.equipment; + %task.buyEquipmentSet = %objective.buyEquipmentSet; + %task.desiredEquipment = %objective.desiredEquipment; + %task.issuedByClient = %objective.issuedByClientId; + %task.chat = %objective.chat; + + //initialize other task vars + %task.sendMsg = true; + %task.sendMsgTime = 0; + + %task.engageTarget = -1; +} + +function AIDefendLocation::assume(%task, %client) +{ + %task.setWeightFreq(15); + %task.setMonitorFreq(15); + %client.inPerimeter = false; + %client.needEquipment = AINeedEquipment(%task.equipment, %client); + + //even if we don't *need* equipemnt, see if we should buy some... + if (! %client.needEquipment && %task.buyEquipmentSet !$= "") + { + //see if we could benefit from inventory + %needArmor = AIMustUseRegularInvStation(%task.desiredEquipment, %client); + %result = AIFindClosestInventory(%client, %needArmor); + %closestInv = getWord(%result, 0); + %closestDist = getWord(%result, 1); + if (AINeedEquipment(%task.desiredEquipment, %client) && %closestInv > 0) + { + %result = AIFindClosestEnemy(%client, 200, $AIClientLOSTimeout); + %closestEnemy = getWord(%result, 0); + %closestEnemydist = getWord(%result, 1); + + if (%closestEnemy <= 0 || (%closestEnemyDist > %closestDist * 1.5)) + %client.needEquipment = true; + } + } + + //mark the current time for the buy inventory state machine + %task.buyInvTime = getSimTime(); + + //set a flag to determine if the objective should be re-aquired when the object is destroyed + %task.reassignOnDestroyed = false; +} + +function AIDefendLocation::retire(%task, %client) +{ + %task.engageVehicle = -1; + %client.setTargetObject(-1); +} + +function AIDefendLocation::weight(%task, %client) +{ + //update the task weight + if (%task == %client.objectiveTask) + %task.baseWeight = %client.objectiveWeight; + + %player = %client.player; + if (!isObject(%player)) + return; + + %hasMissile = (%player.getInventory("MissileLauncher") > 0) && (%player.getInventory("MissileLauncherAmmo") > 0); + + //if we're defending with a missile launcher, our first priority is to take out vehicles... + //see if we're already attacking a vehicle... + if (%task.engageVehicle > 0 && isObject(%task.engageVehicle) && %hasMissile) + { + //set the weight + %task.setWeight(%task.baseWeight); + return; + } + + //search for a new vehicle to attack + %task.engageVehicle = -1; + %losTimeout = 5000 + ($AIClientLOSTimeout * %client.getSkillLevel()); + %result = AIFindClosestEnemyPilot(%client, 300, %losTimeout); + %pilot = getWord(%result, 0); + %pilotDist = getWord(%result, 1); + + //if we've got missiles, and a vehicle to attack... + if (%hasMissile && AIClientIsAlive(%pilot)) + { + %task.engageVehicle = %pilot.vehicleMounted; + %client.needEquipment = false; + } + + //otherwise look for a regular enemy to fight... + else + { + %result = AIFindClosestEnemyToLoc(%client, %task.location, 100, %losTimeout); + %closestEnemy = getWord(%result, 0); + %closestdist = getWord(%result, 1); + + //see if we found someone + if (%closestEnemy > 0) + %task.engageTarget = %closestEnemy; + else + { + %task.engageTarget = -1; + + //see if someone is near me... + %result = AIFindClosestEnemy(%client, 100, %losTimeout); + %closestEnemy = getWord(%result, 0); + %closestdist = getWord(%result, 1); + if (%closestEnemy <= 0 || %closestDist > 70) + %client.setEngageTarget(-1); + } + } + + //set the weight + %task.setWeight(%task.baseWeight); +} + +function AIDefendLocation::monitor(%task, %client) +{ + //first, buy the equipment + if (%client.needEquipment) + { + %task.setMonitorFreq(5); + if (%task.equipment !$= "") + %equipmentList = %task.equipment; + else + %equipmentList = %task.desiredEquipment; + %result = AIBuyInventory(%client, %equipmentList, %task.buyEquipmentSet, %task.buyInvTime); + if (%result $= "InProgress") + return; + else if (%result $= "Finished") + { + %task.setMonitorFreq(15); + %client.needEquipment = false; + } + else if (%result $= "Failed") + { + //if this task is the objective task, choose a new objective + if (%task == %client.objectiveTask) + { + AIUnassignClient(%client); + Game.AIChooseGameObjective(%client); + } + return; + } + } + //if we made it past the inventory buying, reset the inv time + %task.buyInvTime = getSimTime(); + + //chat + if (%task.sendMsg) + { + if (%task.sendMsgTime == 0) + %task.sendMsgTime = getSimTime(); + else if (getSimTime() - %task.sendMsgTime > 7000) + { + %task.sendMsg = false; + if (%client.isAIControlled()) + { + if (%task.chat !$= "") + { + %chatMsg = getWord(%task.chat, 0); + %chatTemplate = getWord(%task.chat, 1); + if (%chatTemplate !$= "") + AIMessageThreadTemplate(%chatTemplate, %chatMsg, %client, -1); + else + AIMessageThread(%task.chat, %client, -1); + } + else if (%task.targetObject > 0) + { + %type = %task.targetObject.getDataBlock().getName(); + if (%type $= "Flag") + AIMessageThreadTemplate("DefendBase", "ChatSelfDefendFlag", %client, -1); + else if (%type $= "GeneratorLarge") + AIMessageThreadTemplate("DefendBase", "ChatSelfDefendGenerator", %client, -1); + else if (%type $= "StationVehicle") + AIMessageThreadTemplate("DefendBase", "ChatSelfDefendVehicle", %client, -1); + else if (%type $= "SensorLargePulse") + AIMessageThreadTemplate("DefendBase", "ChatSelfDefendSensors", %client, -1); + else if (%type $= "SensorMediumPulse") + AIMessageThreadTemplate("DefendBase", "ChatSelfDefendSensors", %client, -1); + else if (%type $= "TurretBaseLarge") + AIMessageThreadTemplate("DefendBase", "ChatSelfDefendTurrets", %client, -1); + } + } + } + } + + //if the defend location task has an object, set the "reset" flag + if (%task == %client.objectiveTask && isObject(%task.targetObject)) + { + if (%task.targetObject.getDamageState() !$= "Destroyed") + %task.reassignOnDestroyed = true; + else + { + if (%task.reassignOnDestroyed) + { + AIUnassignClient(%client); + Game.AIChooseGameObjective(%client); + return; + } + } + } + + //first, check for a vehicle to engage + if (%task.engageVehicle > 0 && isObject(%task.engageVehicle)) + { + %client.stop(); + %client.clearStep(); + %client.setEngageTarget(-1); + %client.setTargetObject(%task.engageVehicle, 300, "Missile"); + } + else + { + //clear the target vehicle... + %client.setTargetObject(-1); + + //see if we're engaging a player + if (%client.getEngageTarget() > 0) + { + //too far, or killed the enemy - return home + if (%client.getStepStatus() !$= "InProgress" || %distance > 75) + { + %client.setEngageTarget(-1); + %client.stepMove(%task.location, 8.0); + } + } + + //else see if we have a target to begin attacking + else if (%task.engageTarget > 0) + %client.stepEngage(%task.engageTarget); + + //else move to a random location around where we are defending + else if (%client.getStepName() !$= "AIStepIdlePatrol") + { + %dist = VectorDist(%client.player.getWorldBoxCenter(), %task.location); + if (%dist < 10) + { + //dissolve the human control link and re-evaluate the weight + if (%task == %client.objectiveTask) + { + if (aiHumanHasControl(%task.issuedByClient, %client)) + { + aiReleaseHumanControl(%client.controlByHuman, %client); + + //should re-evaluate the current objective weight + %inventoryStr = AIFindClosestInventories(%client); + %client.objectiveWeight = %client.objective.weight(%client, %client.objectiveLevel, 0, %inventoryStr); + } + } + + %client.stepIdle(%task.location); + } + else + %client.stepMove(%task.location, 8.0); + } + } + + //see if we're supposed to be engaging anyone... + if (!AIClientIsAlive(%client.getEngageTarget()) && AIClientIsAlive(%client.shouldEngage)) + %client.setEngageTarget(%client.shouldEngage); +} + +//------------------------------ + +function AIAttackLocation::initFromObjective(%task, %objective, %client) +{ + //initialize the task vars from the objective + %task.baseWeight = %client.objectiveWeight; + %task.location = %objective.location; + %task.equipment = %objective.equipment; + %task.buyEquipmentSet = %objective.buyEquipmentSet; + %task.desiredEquipment = %objective.desiredEquipment; + %task.issuedByClient = %objective.issuedByClientId; + %task.chat = %objective.chat; + + //initialize other task vars + %task.sendMsg = true; + %task.sendMsgTime = 0; + %task.engageTarget = -1; +} + +function AIAttackLocation::assume(%task, %client) +{ + %task.setWeightFreq(30); + %task.setMonitorFreq(30); + %client.needEquipment = AINeedEquipment(%task.equipment, %client); + + //even if we don't *need* equipemnt, see if we should buy some... + if (! %client.needEquipment && %task.buyEquipmentSet !$= "") + { + //see if we could benefit from inventory + %needArmor = AIMustUseRegularInvStation(%task.desiredEquipment, %client); + %result = AIFindClosestInventory(%client, %needArmor); + %closestInv = getWord(%result, 0); + %closestDist = getWord(%result, 1); + if (AINeedEquipment(%task.desiredEquipment, %client) && %closestInv > 0) + { + %result = AIFindClosestEnemyToLoc(%client, %task.location, 50, $AIClientLOSTimeout); + %closestEnemy = getWord(%result, 0); + + if (%closestEnemy <= 0) + %client.needEquipment = true; + } + } + + //mark the current time for the buy inventory state machine + %task.buyInvTime = getSimTime(); + + %task.snipeLocation = ""; + %task.hideLocation = ""; + %task.moveToPosition = true; + %task.moveToSnipe = false; + %task.nextSnipeTime = 0; +} + +function AIAttackLocation::retire(%task, %client) +{ +} + +function AIAttackLocation::weight(%task, %client) +{ + //update the task weight + if (%task == %client.objectiveTask) + %task.baseWeight = %client.objectiveWeight; + + //if we're a sniper, we're going to cheat, and see if there are clients near the attack location + %losTimeout = 5000 + ($AIClientLOSTimeout * %client.getSkillLevel()); + %distToLoc = VectorDist(%client.player.getWorldBoxCenter(), %task.location); + if (%client.player.getInventory(SniperRifle) > 0 && %client.player.getInventory(EnergyPack) > 0 && %distToLoc > 60) + %result = AIFindClosestEnemyToLoc(%client, %task.location, 50, $AIClientLOSTimeout, true); + + //otherwise, do the search normally. (cheat ignores LOS)... + else + %result = AIFindClosestEnemyToLoc(%client, %task.location, 50, %losTimeout, false); + + %closestEnemy = getWord(%result, 0); + %closestdist = getWord(%result, 1); + %task.setWeight(%task.baseWeight); + + //see if we found someone + if (%closestEnemy > 0) + %task.engageTarget = %closestEnemy; + else + %task.engageTarget = -1; +} + +function AIAttackLocation::monitor(%task, %client) +{ + //first, buy the equipment + if (%client.needEquipment) + { + %task.setMonitorFreq(5); + if (%task.equipment !$= "") + %equipmentList = %task.equipment; + else + %equipmentList = %task.desiredEquipment; + %result = AIBuyInventory(%client, %equipmentList, %task.buyEquipmentSet, %task.buyInvTime); + if (%result $= "InProgress") + return; + else if (%result $= "Finished") + { + %task.setMonitorFreq(30); + %client.needEquipment = false; + } + else if (%result $= "Failed") + { + //if this task is the objective task, choose a new objective + if (%task == %client.objectiveTask) + { + AIUnassignClient(%client); + Game.AIChooseGameObjective(%client); + } + return; + } + } + //if we made it past the inventory buying, reset the inv time + %task.buyInvTime = getSimTime(); + + //chat + if (%task.sendMsg) + { + if (%task.sendMsgTime == 0) + %task.sendMsgTime = getSimTime(); + else if (getSimTime() - %task.sendMsgTime > 7000) + { + %task.sendMsg = false; + if (%client.isAIControlled()) + { + if (%task.chat !$= "") + { + %chatMsg = getWord(%task.chat, 0); + %chatTemplate = getWord(%task.chat, 1); + if (%chatTemplate !$= "") + AIMessageThreadTemplate(%chatTemplate, %chatMsg, %client, -1); + else + AIMessageThread(%task.chat, %client, -1); + } + else + AIMessageThreadTemplate("AttackBase", "ChatSelfAttack", %client, -1); + } + } + } + + //how far are we from the location we're defending + %myPos = %client.player.getWorldBoxCenter(); + %distance = %client.getPathDistance(%task.location); + if (%distance < 0) + %distance = 32767; + + if (%client.player.getInventory(SniperRifle) > 0 && %client.player.getInventory(EnergyPack) > 0) + { + //first, find an LOS location + if (%task.snipeLocation $= "") + { + %task.snipeLocation = %client.getLOSLocation(%task.location, 150, 250); + %task.hideLocation = %client.getHideLocation(%task.location, VectorDist(%task.location, %task.snipeLocation), %task.snipeLocation, 1); + %client.stepMove(%task.hideLocation, 4.0); + %task.moveToPosition = true; + } + else + { + //see if we can acquire a target + %energy = %client.player.getEnergyPercent(); + %distToSnipe = VectorDist(%task.snipelocation, %client.player.getWorldBoxCenter()); + %distToHide = VectorDist(%task.hidelocation, %client.player.getWorldBoxCenter()); + + //until we're in position, we can move using the AIModeExpress, after that, we only want to walk... + if (%task.moveToPosition) + { + if (%distToHide < 4.0) + { + //dissolve the human control link + if (%task == %client.objectiveTask) + { + if (aiHumanHasControl(%task.issuedByClient, %client)) + { + aiReleaseHumanControl(%client.controlByHuman, %client); + + //should re-evaluate the current objective weight + %inventoryStr = AIFindClosestInventories(%client); + %client.objectiveWeight = %client.objective.weight(%client, %client.objectiveLevel, 0, %inventoryStr); + } + } + + %task.moveToPosition = false; + } + } + + else if (%task.moveToSnipe) + { + if (%energy > 0.75 && %client.getStepStatus() $= "Finished") + { + %client.stepMove(%task.snipeLocation, 4.0, $AIModeWalk); + %client.setEngageTarget(%task.engageTarget); + } + else if (%energy < 0.4) + { + %client.setEngageTarget(-1); + %client.stepMove(%task.hideLocation, 4.0); + %task.nextSnipeTime = getSimTime() + 4000 + (getRandom() * 4000); + %task.moveToSnipe = false; + } + } + + else if (%energy > 0.5 && %task.engageTarget > 0 && getSimTime() > %task.nextSnipeTime) + { + %client.stepRangeObject(%task.engageTarget.player.getWorldBoxCenter(), "BasicSniperShot", 150, 250, %task.snipelocation); + %client.aimAt(%task.engageTarget.player.getWorldBoxCenter(), 8000); + %task.moveToSnipe = true; + } + } + } + else + { + //else see if we have a target to begin attacking + if (%client.getEngageTarget() <= 0 && %task.engageTarget > 0) + %client.stepEngage(%task.engageTarget); + + //else move to the location we're defending + else if (%client.getEngageTarget() <= 0) + { + %client.stepMove(%task.location, 8.0); + if (VectorDist(%client.player.position, %task.location) < 10) + { + //dissolve the human control link + if (%task == %client.objectiveTask) + { + if (aiHumanHasControl(%task.issuedByClient, %client)) + { + aiReleaseHumanControl(%client.controlByHuman, %client); + + //should re-evaluate the current objective weight + %inventoryStr = AIFindClosestInventories(%client); + %client.objectiveWeight = %client.objective.weight(%client, %client.objectiveLevel, 0, %inventoryStr); + } + } + } + } + } + + //see if we're supposed to be engaging anyone... + if (!AIClientIsAlive(%client.getEngageTarget()) && AIClientIsAlive(%client.shouldEngage)) + %client.setEngageTarget(%client.shouldEngage); +} + +//------------------------------ + +function AIAttackPlayer::initFromObjective(%task, %objective, %client) +{ + %task.baseWeight = %client.objectiveWeight; + %task.targetClient = %objective.targetClientId; + %task.equipment = %objective.equipment; + %task.buyEquipmentSet = %objective.buyEquipmentSet; + %task.desiredEquipment = %objective.desiredEquipment; + %task.issuedByClient = %objective.issuedByClientId; +} + +function AIAttackPlayer::assume(%task, %client) +{ + %task.setWeightFreq(15); + %task.setMonitorFreq(15); + %client.needEquipment = AINeedEquipment(%task.equipment, %client); + if (! %client.needEquipment) + %client.stepEngage(%task.targetClient); + + //even if we don't *need* equipemnt, see if we should buy some... + if (! %client.needEquipment && %task.buyEquipmentSet !$= "") + { + //see if we could benefit from inventory + %needArmor = AIMustUseRegularInvStation(%task.desiredEquipment, %client); + %result = AIFindClosestInventory(%client, %needArmor); + %closestInv = getWord(%result, 0); + %closestDist = getWord(%result, 1); + if (AINeedEquipment(%task.desiredEquipment, %client) && %closestInv > 0) + { + %distToTarg = %client.getPathDistance(%task.targetClient.player.getWorldBoxCenter()); + if (%distToTarg < 0 || %distToTarg > 100) + %client.needEquipment = true; + } + } + + //mark the current time for the buy inventory state machine + %task.buyInvTime = getSimTime(); +} + +function AIAttackPlayer::retire(%task, %client) +{ + //dissolve the human control link + if (%task == %client.objectiveTask) + aiReleaseHumanControl(%client.controlByHuman, %client); +} + +function AIAttackPlayer::weight(%task, %client) +{ + //update the task weight + if (%task == %client.objectiveTask) + %task.baseWeight = %client.objectiveWeight; + + %task.setWeight(%task.baseWeight); +} + +function AIAttackPlayer::monitor(%task, %client) +{ + //first, buy the equipment + if (%client.needEquipment) + { + %task.setMonitorFreq(5); + if (%task.equipment !$= "") + %equipmentList = %task.equipment; + else + %equipmentList = %task.desiredEquipment; + %result = AIBuyInventory(%client, %equipmentList, %task.buyEquipmentSet, %task.buyInvTime); + if (%result $= "InProgress") + return; + else if (%result $= "Finished") + { + %task.setMonitorFreq(15); + %client.needEquipment = false; + %client.stepEngage(%task.targetClient); + } + else if (%result $= "Failed") + { + //if this task is the objective task, choose a new objective + if (%task == %client.objectiveTask) + { + AIUnassignClient(%client); + Game.AIChooseGameObjective(%client); + } + return; + } + } + //if we made it past the inventory buying, reset the inv time + %task.buyInvTime = getSimTime(); + + //cheap hack for now... make the bot always know where you are... + %client.clientDetected(%task.targetClient); + + //make sure we're still attacking... + if (%client.getStepName() !$= "AIStepEngage") + %client.stepEngage(%task.targetClient); + + //make sure we're still attacking the right target + %client.setEngageTarget(%task.targetClient); + + if (%client.getStepStatus() !$= "InProgress" && %task == %client.objectiveTask) + { + AIUnassignClient(%client); + Game.AIChooseGameObjective(%client); + } +} + +//------------------------------ + +function AITouchObject::initFromObjective(%task, %objective, %client) +{ + %task.baseWeight = %client.objectiveWeight; + %task.targetObject = %objective.targetObjectId; + %task.mode = %objective.mode; + if (%objective.mode $= "FlagCapture") + %task.location = %objective.location; + else if(%objective.mode $= "TouchFlipFlop") + %task.location = %objective.location; + else + %task.location = ""; + %task.equipment = %objective.equipment; + %task.buyEquipmentSet = %objective.buyEquipmentSet; + %task.desiredEquipment = %objective.desiredEquipment; + %task.issuedByClient = %objective.issuedByClientId; + + %task.sendMsgTime = 0; + if (%task.mode $= "FlagGrab") + %task.sendMsg = true; + else + %task.sendMsg = false; +} + +function AITouchObject::assume(%task, %client) +{ + %task.setWeightFreq(15); + %task.setMonitorFreq(15); + %task.engageTarget = 0; + %client.needEquipment = AINeedEquipment(%task.equipment, %client); + + //even if we don't *need* equipemnt, see if we should buy some... + if (! %client.needEquipment && (%task.mode $= "FlagGrab" || %task.mode $= "TouchFlipFlop") && %task.buyEquipmentSet !$= "") + { + //see if we could benefit from inventory + %needArmor = AIMustUseRegularInvStation(%task.desiredEquipment, %client); + %result = AIFindClosestInventory(%client, %needArmor); + %closestInv = getWord(%result, 0); + %closestDist = getWord(%result, 1); + if (AINeedEquipment(%task.desiredEquipment, %client) && %closestInv > 0) + { + //find where we are + %clientPos = %client.player.getWorldBoxCenter(); + %distToObject = %client.getPathDistance(%task.location); + if (%distToObject < 0 || %closestDist < %distToObject) + %client.needEquipment = true; + } + } + + //mark the current time for the buy inventory state machine + %task.buyInvTime = getSimTime(); +} + +function AITouchObject::retire(%task, %client) +{ +} + +function AITouchObject::weight(%task, %client) +{ + //update the task weight + if (%task == %client.objectiveTask) + %task.baseWeight = %client.objectiveWeight; + + //see if we can find someone to shoot at... + if (%client.getEngageTarget() <= 0) + { + %losTimeout = 5000 + ($AIClientLOSTimeout * %client.getSkillLevel()); + %myLocation = %client.player.getWorldBoxCenter(); + %result = AIFindClosestEnemy(%client, 40, %losTimeout); + %task.engageTarget = getWord(%result, 0); + } + + %task.setWeight(%task.baseWeight); +} + +function AITouchObject::monitor(%task, %client) +{ + //first, buy the equipment + if (%client.needEquipment) + { + %task.setMonitorFreq(5); + if (%task.equipment !$= "") + %equipmentList = %task.equipment; + else + %equipmentList = %task.desiredEquipment; + %result = AIBuyInventory(%client, %equipmentList, %task.buyEquipmentSet, %task.buyInvTime); + if (%result $= "InProgress") + return; + else if (%result $= "Finished") + { + %task.setMonitorFreq(15); + %client.needEquipment = false; + } + else if (%result $= "Failed") + { + //if this task is the objective task, choose a new objective + if (%task == %client.objectiveTask) + { + AIUnassignClient(%client); + Game.AIChooseGameObjective(%client); + } + return; + } + } + //if we made it past the inventory buying, reset the inv time + %task.buyInvTime = getSimTime(); + + //chat + if (%task.sendMsg) + { + if (%task.sendMsgTime == 0) + %task.sendMsgTime = getSimTime(); + else if (getSimTime() - %task.sendMsgTime > 7000) + { + %task.sendMsg = false; + if (%client.isAIControlled()) + { + if (%task.mode $= "FlagGrab") + AIMessageThreadTemplate("AttackBase", "ChatSelfAttackFlag", %client, -1); + } + } + } + + //keep updating the position, in case the flag is flying through the air... + if (%task.location !$= "") + %touchPos = %task.location; + else + %touchPos = %task.targetObject.getWorldBoxCenter(); + + //see if we need to engage a new target + %engageTarget = %client.getEngageTarget(); + if (!AIClientIsAlive(%engageTarget) && %task.engageTarget > 0) + %client.setEngageTarget(%task.engageTarget); + + //else see if we should abandon the engagement + else if (AIClientIsAlive(%engageTarget)) + { + %myPos = %client.player.getWorldBoxCenter(); + %testPos = %engageTarget.player.getWorldBoxCenter(); + %distance = %client.getPathDistance(%testPos); + if (%distance < 0 || %distance > 70) + %client.setEngageTarget(-1); + } + + //see if we have completed our objective + if (%task == %client.objectiveTask) + { + %completed = false; + switch$ (%task.mode) + { + case "TouchFlipFlop": + if (%task.targetObject.team == %client.team) + %completed = true; + case "FlagGrab": + if (!%task.targetObject.isHome) + %completed = true; + case "FlagDropped": + if ((%task.targetObject.isHome) || (%task.targetObject.carrier !$= "")) + %completed = true; + case "FlagCapture": + if (%task.targetObject.carrier != %client.player) + %completed = true; + } + if (%completed) + { + AIUnassignClient(%client); + Game.AIChooseGameObjective(%client); + return; + } + } + + if (%task.mode $= "FlagCapture") + { + %homeFlag = $AITeamFlag[%client.team]; + + //if we're within range of the flag's home position, and the flag isn't home, start idling... + if (VectorDist(%client.player.position, %touchPos) < 40 && !%homeFlag.isHome) + { + if (%client.getStepName() !$= "AIStepIdlePatrol") + %client.stepIdle(%touchPos); + } + else + %client.stepMove(%touchPos, 0.25); + } + else + %client.stepMove(%touchPos, 0.25); + + if (VectorDist(%client.player.position, %touchPos) < 10) + { + //dissolve the human control link + if (%task == %client.objectiveTask) + { + if (aiHumanHasControl(%task.issuedByClient, %client)) + { + aiReleaseHumanControl(%client.controlByHuman, %client); + + //should re-evaluate the current objective weight + %inventoryStr = AIFindClosestInventories(%client); + %client.objectiveWeight = %client.objective.weight(%client, %client.objectiveLevel, 0, %inventoryStr); + } + } + } + + //see if we're supposed to be engaging anyone... + if (!AIClientIsAlive(%client.getEngageTarget()) && AIClientIsAlive(%client.shouldEngage)) + %client.setEngageTarget(%client.shouldEngage); +} + +//------------------------------ + +function AIEscortPlayer::initFromObjective(%task, %objective, %client) +{ + %task.baseWeight = %client.objectiveWeight; + %task.targetClient = %objective.targetClientId; + %task.equipment = %objective.equipment; + %task.buyEquipmentSet = %objective.buyEquipmentSet; + %task.desiredEquipment = %objective.desiredEquipment; + %task.issuedByClient = %objective.issuedByClientId; + %task.forceClient = %objective.forceClientId; +} + +function AIEscortPlayer::assume(%task, %client) +{ + %task.setWeightFreq(15); + %task.setMonitorFreq(15); + %task.rangedTarget = false; + if (%task == %client.objectiveTask && %client == %task.forceClient && %task.issuedByClient == %task.targetClient) + { + %client.needEquipment = false; + %client.mountVehicle = false; + } + else + { + %client.needEquipment = AINeedEquipment(%task.equipment, %client); + if (! %client.needEquipment) + %client.stepEscort(%task.targetClient); + + //even if we don't *need* equipemnt, see if we should buy some... + if (! %client.needEquipment && %task.buyEquipmentSet !$= "") + { + //see if we could benefit from inventory + %needArmor = AIMustUseRegularInvStation(%task.desiredEquipment, %client); + %result = AIFindClosestInventory(%client, %needArmor); + %closestInv = getWord(%result, 0); + %closestDist = getWord(%result, 1); + if (AINeedEquipment(%task.desiredEquipment, %client) && %closestInv > 0) + { + //find where we are + %clientPos = %client.player.getWorldBoxCenter(); + %targPos = %task.targetClient.player.getWorldBoxCenter(); + %distToTarg = %client.getPathDistance(%targPos); + + if (%closestDist < 50 && (%distToTarg < 0 || %distToTarg > 100)) + %client.needEquipment = true; + } + } + } + + //mark the current time for the buy inventory state machine + %task.buyInvTime = getSimTime(); +} + +function AIEscortPlayer::retire(%task, %client) +{ + %client.clearStep(); + if(%client.player.isMounted()) + AIDisembarkVehicle(%client); + + //clear the target object + %client.setTargetObject(-1); +} + +function AIEscortPlayer::weight(%task, %client) +{ + //update the task weight + if (%task == %client.objectiveTask) + %task.baseWeight = %client.objectiveWeight; + + //always shoot at the closest person to the client being escorted + if (AIClientIsAlive(%task.targetClient)) + { + %targetPos = %task.targetClient.player.getWorldBoxCenter(); + %losTimeout = 5000 + ($AIClientLOSTimeout * %client.getSkillLevel()); + %result = AIFindClosestEnemyToLoc(%client, %targetPos, 50, %losTimeout); + %task.engageTarget = getWord(%result, 0); + if (!AIClientIsAlive(%task.engageTarget)) + { + if (AIClientIsAlive(%task.targetClient.lastDamageClient, %losTimeout) && getSimTime() - %task.targetClient.lastDamageTime < %losTimeout) + %task.engageTarget = %task.targetClient.lastDamageClient; + } + if (!AIClientIsAlive(%task.engageTarget)) + { + %myPos = %client.player.getWorldBoxCenter(); + %result = AIFindClosestEnemy(%client, 50, %losTimeout); + %task.engageTarget = getWord(%result, 0); + } + } + + //if both us and the person we're escorting are in a vehicle, set the weight high! + if (%task.targetClient.player.isMounted() && %client.player.isMounted()) + { + %vehicle = %client.vehicleMounted; + if (%vehicle > 0 && isObject(%vehicle) && %vehicle.getDamagePercent() < 0.8) + %task.setWeight($AIWeightVehicleMountedEscort); + else + %task.setWeight(%task.baseWeight); + } + else + %task.setWeight(%task.baseWeight); + + //find out if our escortee is lazing a target... + %task.missileTarget = -1; + %targetCount = ServerTargetSet.getCount(); + for (%i = 0; %i < %targetCount; %i++) + { + %targ = ServerTargetSet.getObject(%i); + if (%targ.sourceObject == %task.targetClient.player) + { + //find out which item is being targetted... + %targPoint = %targ.getTargetPoint(); + InitContainerRadiusSearch(%targPoint, 10, $TypeMasks::TurretObjectType | $TypeMasks::StaticShapeObjectType); + %task.missileTarget = containerSearchNext(); + break; + } + } +} + +function AIEscortPlayer::monitor(%task, %client) +{ + //first, buy the equipment + if (%client.needEquipment) + { + %task.setMonitorFreq(5); + if (%task.equipment !$= "") + %equipmentList = %task.equipment; + else + %equipmentList = %task.desiredEquipment; + %result = AIBuyInventory(%client, %equipmentList, %task.buyEquipmentSet, %task.buyInvTime); + if (%result $= "InProgress") + return; + else if (%result $= "Finished") + { + %task.setMonitorFreq(15); + %client.needEquipment = false; + %client.stepEscort(%task.targetClient); + %task.buyInvTime = getSimTime(); + } + else if (%result $= "Failed") + { + //if this task is the objective task, choose a new objective + if (%task == %client.objectiveTask) + { + AIUnassignClient(%client); + Game.AIChooseGameObjective(%client); + } + return; + } + } + + //see if our target is mounted in a vehicle... + if (%task.targetClient.player.isMounted()) + { + + //find the passenger seat the bot will take + %vehicle = %task.targetClient.vehicleMounted; + %node = findAIEmptySeat(%vehicle, %client.player); + + //make sure there is an empty seat + if (%node < 0 && %client.vehicleMounted != %task.targetClient.vehicleMounted) + { + if (%task == %client.objectiveTask) + { + AIUnassignClient(%client); + Game.AIChooseGameObjective(%client); + } + return; + } + + //find the passenger seat location... + %slotPosition = %vehicle.getSlotTransform(%node); + + //make sure we're in the correct armor - assault tanks cannot have a heavy... + if (%task.targetClient.vehicleMounted.getDataBlock().getName() $= "AssaultVehicle") + { + //if the bot is in a heavy, break off the escort... + if (%client.player.getArmorSize() $= "Heavy") + { + if (%task == %client.objectiveTask) + { + AIUnassignClient(%client); + Game.AIChooseGameObjective(%client); + } + return; + } + + //throw away any packs that won't fit + if (%client.player.getInventory(InventoryDeployable) > 0) + %client.player.throwPack(); + else if (%client.player.getInventory(TurretIndoorDeployable) > 0) + %client.player.throwPack(); + else if (%client.player.getInventory(TurretOutdoorDeployable) > 0) + %client.player.throwPack(); + } + + if (%client.player.isMounted()) + { + //make sure it's the same vehicle :) + if (%client.vehicleMounted != %vehicle) + AIDisembarkVehicle(%client); + } + else + { + //mount the vehicle + %client.stepMove(%slotPosition, 0.25, $AIModeMountVehicle); + } + } + else + { + //disembark if we're mounted, but our target isn't (anymore) + if (%client.player.isMounted()) + AIDisembarkVehicle(%client); + } + + //see if we're supposed to be mortaring/missiling something... + %hasMortar = (%client.player.getInventory("Mortar") > 0) && (%client.player.getInventory("MortarAmmo") > 0); + %hasMissile = (%client.player.getInventory("MissileLauncher") > 0) && (%client.player.getInventory("MissileLauncherAmmo") > 0); + if (!isObject(%task.engageTarget) && isobject(%task.missileTarget) && %task.missileTarget.getDamageState() !$= "Destroyed" && (%hasMortar || %hasMissile)) + { + if (%task.rangedTarget) + { + %client.stop(); + %client.clearStep(); + %client.setEngageTarget(-1); + if (%hasMortar) + %client.setTargetObject(%task.missileTarget, 250, "Mortar"); + else + %client.setTargetObject(%task.missileTarget, 500, "MissileNoLock"); + } + else if (%client.getStepName() !$= "AIStepRangeObject") + { + if (%hasMortar) + %client.stepRangeObject(%task.missileTarget, "MortarShot", 100, 200); + else + %client.stepRangeObject(%task.missileTarget, "BasicTargeter", 50, 500); + } + else if (%client.getStepStatus() $= "Finished") + %task.rangedTarget = true; + } + else + { + %task.rangedTarget = false; + %client.setTargetObject(-1); + if (%client.getStepName() !$= "AIStepEscort") + %client.stepEscort(%task.targetClient); + } + + //make sure we're still shooting... + %client.setEngageTarget(%task.engageTarget); + + //see if we're supposed to be engaging anyone... + if (!AIClientIsAlive(%client.getEngageTarget()) && AIClientIsAlive(%client.shouldEngage)) + %client.setEngageTarget(%client.shouldEngage); +} + +//------------------------------ + +function AIAttackObject::initFromObjective(%task, %objective, %client) +{ + %task.baseWeight = %client.objectiveWeight; + %task.targetObject = %objective.targetObjectId; + %task.equipment = %objective.equipment; + %task.buyEquipmentSet = %objective.buyEquipmentSet; + %task.desiredEquipment = %objective.desiredEquipment; + %task.issuedByClient = %objective.issuedByClientId; + + //initialize other task vars + %task.sendMsg = true; + %task.sendMsgTime = 0; +} + +function AIAttackObject::assume(%task, %client) +{ + %task.setWeightFreq(15); + %task.setMonitorFreq(5); + %client.needEquipment = AINeedEquipment(%task.equipment, %client); + + //even if we don't *need* equipemnt, see if we should buy some... + if (! %client.needEquipment && %task.buyEquipmentSet !$= "") + { + //see if we could benefit from inventory + %needArmor = AIMustUseRegularInvStation(%task.desiredEquipment, %client); + %result = AIFindClosestInventory(%client, %needArmor); + %closestInv = getWord(%result, 0); + %closestDist = getWord(%result, 1); + if (AINeedEquipment(%task.desiredEquipment, %client) && %closestInv > 0) + { + //find where we are + %clientPos = %client.player.getWorldBoxCenter(); + %objPos = %task.targetObject.getWorldBoxCenter(); + %distToObject = %client.getPathDistance(%objPos); + + if (%distToObject < 0 || %closestDist < %distToObject) + %client.needEquipment = true; + } + } + + //mark the current time for the buy inventory state machine + %task.buyInvTime = getSimTime(); +} + +function AIAttackObject::retire(%task, %client) +{ + %client.setTargetObject(-1); +} + +function AIAttackObject::weight(%task, %client) +{ + //update the task weight + if (%task == %client.objectiveTask) + %task.baseWeight = %client.objectiveWeight; + + //let the monitor decide when to stop attacking + %task.setWeight(%task.baseWeight); +} + +function AIAttackObject::monitor(%task, %client) +{ + //first, buy the equipment + if (%client.needEquipment) + { + %task.setMonitorFreq(5); + if (%task.equipment !$= "") + %equipmentList = %task.equipment; + else + %equipmentList = %task.desiredEquipment; + %result = AIBuyInventory(%client, %equipmentList, %task.buyEquipmentSet, %task.buyInvTime); + if (%result $= "InProgress") + return; + else if (%result $= "Finished") + { + %task.setMonitorFreq(15); + %client.needEquipment = false; + } + else if (%result $= "Failed") + { + //if this task is the objective task, choose a new objective + if (%task == %client.objectiveTask) + { + AIUnassignClient(%client); + Game.AIChooseGameObjective(%client); + } + return; + } + } + //if we made it past the inventory buying, reset the inv time + %task.buyInvTime = getSimTime(); + + //chat + if (%task.sendMsg) + { + if (%task.sendMsgTime == 0) + %task.sendMsgTime = getSimTime(); + else if (getSimTime() - %task.sendMsgTime > 7000) + { + %task.sendMsg = false; + if (%client.isAIControlled()) + { + if (%task.chat !$= "") + { + %chatMsg = getWord(%task.chat, 0); + %chatTemplate = getWord(%task.chat, 1); + if (%chatTemplate !$= "") + AIMessageThreadTemplate(%chatTemplate, %chatMsg, %client, -1); + else + AIMessageThread(%task.chat, %client, -1); + } + else if (%task.targetObject > 0) + { + %type = %task.targetObject.getDataBlock().getName(); + if (%type $= "GeneratorLarge") + AIMessageThreadTemplate("AttackBase", "ChatSelfAttackGenerator", %client, -1); + else if (%type $= "SensorLargePulse") + AIMessageThreadTemplate("AttackBase", "ChatSelfAttackSensors", %client, -1); + else if (%type $= "SensorMediumPulse") + AIMessageThreadTemplate("AttackBase", "ChatSelfAttackSensors", %client, -1); + else if (%type $= "TurretBaseLarge") + AIMessageThreadTemplate("AttackBase", "ChatSelfAttackTurrets", %client, -1); + else if (%type $= "StationVehicle") + AIMessageThreadTemplate("AttackBase", "ChatSelfAttackVehicle", %client, -1); + } + } + } + } + + //set the target object + if (isObject(%task.targetObject) && %task.targetObject.getDamageState() !$= "Destroyed") + { + %client.setTargetObject(%task.targetObject, 40, "Destroy"); + + //move towards the object until we're within range + if (! %client.targetInRange()) + %client.stepMove(%task.targetObject.getWorldBoxCenter(), 8.0); + else + { + //dissolve the human control link + if (%task == %client.objectiveTask) + aiReleaseHumanControl(%client.controlByHuman, %client); + + %client.stop(); + } + } + else + { + %client.setTargetObject(-1); + %client.stop(); + + //if this task is the objective task, choose a new objective + if (%task == %client.objectiveTask) + { + AIUnassignClient(%client); + Game.AIChooseGameObjective(%client); + } + } +} + +//------------------------------ + +function AIRepairObject::initFromObjective(%task, %objective, %client) +{ + %task.baseWeight = %client.objectiveWeight; + %task.targetObject = %objective.targetObjectId; + //need to force this objective to only require a repair pack + //%task.equipment = %objective.equipment; + %task.equipment = "RepairPack"; + %task.buyEquipmentSet = %objective.buyEquipmentSet; + %task.desiredEquipment = %objective.desiredEquipment; + %task.issuedByClient = %objective.issuedByClientId; + + %task.deployed = %objective.deployed; + if (%task.deployed) + { + %task.location = %objective.position; + %task.deployDirection = MatrixMulVector("0 0 0 " @ getWords(%objective.getTransform(), 3, 6), "0 1 0"); + %task.deployDirection = VectorNormalize(%task.deployDirection); + } +} + +function AIRepairObject::assume(%task, %client) +{ + %task.setWeightFreq(15); + %task.setMonitorFreq(15); + %client.needEquipment = AINeedEquipment(%task.equipment, %client); + + //clear the target object, and range it + %client.setTargetObject(-1); + if (! %client.needEquipment) + { + if (%task.deployed) + { + %task.repairLocation = VectorAdd(%task.location,VectorScale(%task.deployDirection, -4.0)); + %client.stepMove(%task.repairLocation, 0.25); + } + else + %client.stepRangeObject(%task.targetObject, "DefaultRepairBeam", 3, 8); + } + + //mark the current time for the buy inventory state machine + %task.buyInvTime = getSimTime(); + %task.needToRangeTime = 0; + %task.pickupRepairPack = -1; + %task.usingInv = false; + + //set a tag to help the repairPack.cs script fudge acquiring a target + %client.repairObject = %task.targetObject; +} + +function AIRepairObject::retire(%task, %client) +{ + %client.setTargetObject(-1); + %client.repairObject = -1; +} + +function AIRepairObject::weight(%task, %client) +{ + //update the task weight + if (%task == %client.objectiveTask) + %task.baseWeight = %client.objectiveWeight; + + //let the monitor decide when to stop repairing + %task.setWeight(%task.baseWeight); +} + +function AIRepairObject::monitor(%task, %client) +{ + //first, buy the equipment + if (%client.needEquipment) + { + %task.setMonitorFreq(5); + + //first, see if we still need a repair pack + if (%client.player.getInventory(RepairPack) > 0) + { + %client.needEquipment = false; + %task.setMonitorFreq(15); + + //if this is to repair a deployed object, walk to the deploy point... + if (%task.deployed) + { + %task.repairLocation = VectorAdd(%task.location,VectorScale(%task.deployDirection, -4.0)); + %client.stepMove(%task.repairLocation, 0.25); + } + //otherwise, we'll need to range it... + else + %client.stepRangeObject(%task.targetObject, "DefaultRepairBeam", 3, 8); + } + else + { + // check to see if there's a repair pack nearby + %closestRepairPack = -1; + %closestRepairDist = 32767; + + //search the AIItemSet for a repair pack (someone might have dropped one...) + %itemCount = $AIItemSet.getCount(); + for (%i = 0; %i < %itemCount; %i++) + { + %item = $AIItemSet.getObject(%i); + if (%item.getDataBlock().getName() $= "RepairPack" && !%item.isHidden()) + { + %dist = %client.getPathDistance(%item.getWorldBoxCenter()); + if (%dist > 0 && %dist < %closestRepairDist) + { + %closestRepairPack = %item; + %closestRepairDist = %dist; + } + } + } + + //choose whether we're picking up the closest pack, or buying from an inv station... + if ((isObject(%closestRepairPack) && %closestRepairPack != %task.pickupRepairPack) || (%task.buyInvTime != %client.buyInvTime)) + { + %task.pickupRepairPack = %closestRepairPack; + + //initialize the inv buying + %task.buyInvTime = getSimTime(); + AIBuyInventory(%client, "RepairPack", %task.buyEquipmentSet, %task.buyInvTime); + + //now decide which is closer + if (isObject(%closestRepairPack)) + { + if (isObject(%client.invToUse)) + { + %dist = %client.getPathDistance(%item.position); + if (%dist > %closestRepairDist) + %task.usingInv = true; + else + %task.usingInv = false; + } + else + %task.usingInv = false; + } + else + %task.usingInv = true; + } + + //now see if we found a closer repair pack + if (!%task.usingInv) + { + %client.stepMove(%task.pickupRepairPack.position, 0.25); + %distToPack = %client.getPathDistance(%task.pickupRepairPack.position); + if (%distToPack < 10 && %client.player.getMountedImage($BackpackSlot) > 0) + %client.player.throwPack(); + + //and we're finished until we actually have a repair pack... + return; + } + else + { + %result = AIBuyInventory(%client, "RepairPack", %task.buyEquipmentSet, %task.buyInvTime); + if (%result $= "InProgress") + return; + else if (%result $= "Finished") + { + %client.needEquipment = false; + %task.setMonitorFreq(15); + + //if this is to repair a deployed object, walk to the deploy point... + if (%task.deployed) + { + %task.repairLocation = VectorAdd(%task.location,VectorScale(%task.deployDirection, -4.0)); + %client.stepMove(%task.repairLocation, 0.25); + } + //otherwise, we'll need to range it... + else + %client.stepRangeObject(%task.targetObject, "DefaultRepairBeam", 3, 8); + } + else if (%result $= "Failed") + { + //if this task is the objective task, choose a new objective + if (%task == %client.objectiveTask) + { + AIUnassignClient(%client); + Game.AIChooseGameObjective(%client); + } + return; + } + } + } + } + //if we made it past the inventory buying, reset the inv time + %task.buyInvTime = getSimTime(); + + //chat + if (%task.sendMsg) + { + if (%task.sendMsgTime == 0) + %task.sendMsgTime = getSimTime(); + else if (getSimTime() - %task.sendMsgTime > 7000) + { + %task.sendMsg = false; + if (%client.isAIControlled()) + { + if (%task.chat !$= "") + { + %chatMsg = getWord(%task.chat, 0); + %chatTemplate = getWord(%task.chat, 1); + if (%chatTemplate !$= "") + AIMessageThreadTemplate(%chatTemplate, %chatMsg, %client, -1); + else + AIMessageThread(%task.chat, %client, -1); + } + else if (%task.targetObject > 0) + { + %type = %task.targetObject.getDataBlock().getName(); + if (%type $= "GeneratorLarge") + AIMessageThreadTemplate("RepairBase", "ChatSelfRepairGenerator", %client, -1); + else if (%type $= "StationVehicle") + AIMessageThreadTemplate("RepairBase", "ChatSelfRepairVehicle", %client, -1); + else if (%type $= "SensorLargePulse") + AIMessageThreadTemplate("RepairBase", "ChatSelfRepairSensors", %client, -1); + else if (%type $= "SensorMediumPulse") + AIMessageThreadTemplate("RepairBase", "ChatSelfRepairSensors", %client, -1); + else if (%type $= "TurretBaseLarge") + AIMessageThreadTemplate("RepairBase", "ChatSelfRepairTurrets", %client, -1); + } + } + } + } + + //set the target object + if (%task.targetObject.getDamagePercent() > 0) + { + //make sure we still have equipment + %client.needEquipment = AINeedEquipment(%task.equipment, %client); + if (%client.needEquipment) + { + //if this task is the objective task, choose a new objective + if (%task == %client.objectiveTask) + { + AIUnassignClient(%client); + Game.AIChooseGameObjective(%client); + return; + } + } + + if (%task.deployed) + { + //see if we're within range of the deploy location + %clLoc = %client.player.position; + %distance = VectorDist(%clLoc, %task.repairLocation); + %dist2D = VectorDist(%client.player.position, getWords(%task.repairLocation, 0, 1) SPC getWord(%client.player.position, 2)); + + //set the aim when we get near the target... this will be overwritten when we're actually trying to deploy + if (%distance < 10 && %dist2D < 10) + %client.aimAt(%task.location, 1000); + + //see if we're at the deploy location + if ((%client.pathDistRemaining(20) > %distance + 0.25) || %dist2D > 0.3) + { + %client.setTargetObject(-1); + %client.stepMove(%task.repairLocation, 0.25); + } + else + { + %client.stop(); + %client.setTargetObject(%task.targetObject, 8.0, "Repair"); + } + } + else + { + %currentTime = getSimTime(); + if (%currentTime > %task.needToRangeTime) + { + //force a rangeObject every 10 seconds... + %task.needToRangeTime = %currentTime + 6000; + %client.setTargetObject(-1); + %client.stepRangeObject(%task.targetObject, "DefaultRepairBeam", 3, 8); + } + + //if we've ranged the object, start repairing, else unset the object + else if (%client.getStepStatus() $= "Finished") + { + //dissolve the human control link + if (%task == %client.objectiveTask) + aiReleaseHumanControl(%client.controlByHuman, %client); + + %client.setTargetObject(%task.targetObject, 8.0, "Repair"); + } + else + %client.setTargetObject(-1); + } + } + else + { + %client.setTargetObject(-1); + + //if this task is the objective task, choose a new objective + if (%task == %client.objectiveTask) + { + AIUnassignClient(%client); + Game.AIChooseGameObjective(%client); + } + } +} + +//------------------------------ + +function AILazeObject::initFromObjective(%task, %objective, %client) +{ + %task.baseWeight = %client.objectiveWeight; + %task.targetObject = %objective.targetObjectId; + %task.equipment = %objective.equipment; + %task.buyEquipmentSet = %objective.buyEquipmentSet; + %task.desiredEquipment = %objective.desiredEquipment; + %task.issuedByClient = %objective.issuedByClientId; + %task.msgAck = true; + %task.msgFire = true; +} + +function AILazeObject::assume(%task, %client) +{ + %task.setWeightFreq(30); + %task.setMonitorFreq(30); + %client.needEquipment = AINeedEquipment(%task.equipment, %client); + + //clear the target object, and range it + %client.setTargetObject(-1); + if (! %client.needEquipment) + %client.stepRangeObject(%task.targetObject, "BasicTargeter", 80, 300, %task.issuedByClient.player.getWorldBoxCenter()); + + //set up some task vars + %task.celebrate = false; + %task.waitTimerMS = 0; + + //mark the current time for the buy inventory state machine + %task.buyInvTime = getSimTime(); +} + +function AILazeObject::retire(%task, %client) +{ + %client.setTargetObject(-1); +} + +function AILazeObject::weight(%task, %client) +{ + //update the task weight + if (%task == %client.objectiveTask) + %task.baseWeight = %client.objectiveWeight; + + //let the monitor decide when to stop lazing + %task.setWeight(%task.baseWeight); +} + +function AILazeObject::monitor(%task, %client) +{ + //first, buy the equipment + if (%client.needEquipment) + { + %task.setMonitorFreq(5); + if (%task.equipment !$= "") + %equipmentList = %task.equipment; + else + %equipmentList = %task.desiredEquipment; + %result = AIBuyInventory(%client, %equipmentList, %task.buyEquipmentSet, %task.buyInvTime); + if (%result $= "InProgress") + return; + else if (%result $= "Finished") + { + %task.setMonitorFreq(30); + %client.needEquipment = false; + %client.stepRangeObject(%task.targetObject, "BasicTargeter", 80, 300); + } + else if (%result $= "Failed") + { + //if this task is the objective task, choose a new objective + if (%task == %client.objectiveTask) + { + AIUnassignClient(%client); + Game.AIChooseGameObjective(%client); + } + return; + } + } + //if we made it past the inventory buying, reset the inv time + %task.buyInvTime = getSimTime(); + + //set the target object + if (isObject(%task.targetObject) && %task.targetObject.getDamageState() !$= "Destroyed") + { + //make sure we still have equipment + %client.needEquipment = AINeedEquipment(%task.equipment, %client); + if (%client.needEquipment) + { + //if this task is the objective task, choose a new objective + if (%task == %client.objectiveTask) + { + AIUnassignClient(%client); + Game.AIChooseGameObjective(%client); + return; + } + } + + //look to see if anyone else is also targetting... + %foundTarget = false; + %numTargets = ServerTargetSet.getCount(); + for (%i = 0; %i < %numTargets; %i++) + { + %targ = ServerTargetSet.getObject(%i); + if (%targ.sourceObject != %client.player) + { + %targDist = VectorDist(%targ.getTargetPoint(), %task.targetObject.getWorldBoxCenter()); + if (%targDist < 10) + { + %foundTarget = true; + break; + } + } + } + + if (%foundTarget) + { + //if this task is the objective task, choose a new objective + if (%task == %client.objectiveTask) + AIUnassignClient(%client); + } + + else if (%client.getStepStatus() $= "Finished") + { + //dissolve the human control link + if (%task == %client.objectiveTask) + aiReleaseHumanControl(%client.controlByHuman, %client); + + %client.setTargetObject(%task.targetObject, 300, "Laze"); + %task.celebrate = true; + %task.waitTimerMS = 0; + + //make sure we only say "fire..." once + if (%task.msgFire) + { + AIMessageThread("FireOnTarget", %client, -1); + %task.msgFire = false; + } + } + else + { + %client.aimAt(%task.targetObject.getWorldBoxCenter(), 1000); + %client.setTargetObject(-1); + } + } + else + { + %client.setTargetObject(-1); + + if (%task.celebrate) + { + if (%task.waitTimerMS == 0) + { + //add in a "woohoo"! :) + //choose the animation range + %minCel = 3; + %maxCel = 8; + + //pick a random sound + if (getRandom() > 0.25) + %sound = "gbl.awesome"; + else if (getRandom() > 0.5) + %sound = "gbl.thanks"; + else if (getRandom() > 0.75) + %sound = "gbl.nice"; + else + %sound = "gbl.rock"; + %randTime = mFloor(getRandom() * 500) + 1; + schedule(%randTime, %client, "AIPlayAnimSound", %client, %task.targetObject.getWorldBoxCenter(), %sound, %minCel, %maxCel, 0); + + //set the timer + %task.waitTimerMS = getSimTime(); + } + + //else see if the celebration period is over + else if (getSimTime() - %task.waitTimerMS > 3000) + %task.celebrate = false; + } + else + { + //if this task is the objective task, choose a new objective + if (%task == %client.objectiveTask) + { + AIUnassignClient(%client); + Game.AIChooseGameObjective(%client); + } + } + } +} + +//------------------------------ + +function AIMortarObject::initFromObjective(%task, %objective, %client) +{ + %task.baseWeight = %client.objectiveWeight; + %task.targetObject = %objective.targetObjectId; + %task.equipment = %objective.equipment; + %task.buyEquipmentSet = %objective.buyEquipmentSet; + %task.desiredEquipment = %objective.desiredEquipment; + %task.issuedByClient = %objective.issuedByClientId; + %task.mode = %task.targetObject.getDataBlock().getName(); + + %task.sendMsgTime = 0; + %task.sendMsg = true; +} + +function AIMortarObject::assume(%task, %client) +{ + %task.setWeightFreq(30); + %task.setMonitorFreq(30); + %task.state = moveToRange; + %task.waitForTargetter = true; + %task.celebrate = false; + %task.waitTimerMS = 0; + %task.targetAcquired = false; + %task.sayAcquired = true; + %client.needEquipment = AINeedEquipment(%task.equipment, %client); + + //even if we don't *need* equipemnt, see if we should buy some... + if (! %client.needEquipment && %task.buyEquipmentSet !$= "") + { + //see if we could benefit from inventory + %needArmor = AIMustUseRegularInvStation(%task.desiredEquipment, %client); + %result = AIFindClosestInventory(%client, %needArmor); + %closestInv = getWord(%result, 0); + %closestDist = getWord(%result, 1); + if (AINeedEquipment(%task.desiredEquipment, %client) && %closestInv > 0) + { + //find where we are + %clientPos = %client.player.getWorldBoxCenter(); + %objPos = %task.targetObject.getWorldBoxCenter(); + %distToObject = %client.getPathDistance(%objPos); + + if (%distToObject < 0 || %closestDist < %distToObject) + %client.needEquipment = true; + } + } + + //mark the current time for the buy inventory state machine + %task.buyInvTime = getSimTime(); +} + +function AIMortarObject::retire(%task, %client) +{ + %client.setTargetObject(-1); + + //remove the associated lazeObjective + if (%task.targetterObjective) + { + AIClearObjective(%task.targetterObjective); + %task.targetterObjective.delete(); + %task.targetterObjective = ""; + } +} + +function AIMortarObject::weight(%task, %client) +{ + //update the task weight + if (%task == %client.objectiveTask) + %task.baseWeight = %client.objectiveWeight; + + //let the monitor decide when to stop mortaring + %task.setWeight(%task.baseWeight); +} + +function AIMortarObject::monitor(%task, %client) +{ + //first, buy the equipment + if (%client.needEquipment) + { + %task.setMonitorFreq(5); + if (%task.equipment !$= "") + %equipmentList = %task.equipment; + else + %equipmentList = %task.desiredEquipment; + %result = AIBuyInventory(%client, %equipmentList, %task.buyEquipmentSet, %task.buyInvTime); + if (%result $= "InProgress") + return; + else if (%result $= "Finished") + { + %task.setMonitorFreq(30); + %client.needEquipment = false; + } + else if (%result $= "Failed") + { + //if this task is the objective task, choose a new objective + if (%task == %client.objectiveTask) + { + AIUnassignClient(%client); + Game.AIChooseGameObjective(%client); + } + return; + } + } + //if we made it past the inventory buying, reset the inv time + %task.buyInvTime = getSimTime(); + + //chat + if (%task.sendMsg) + { + if (%task.sendMsgTime == 0) + %task.sendMsgTime = getSimTime(); + else if (getSimTime() - %task.sendMsgTime > 7000) + { + %task.sendMsg = false; + if (%client.isAIControlled()) + { + if (%task.chat !$= "") + { + %chatMsg = getWord(%task.chat, 0); + %chatTemplate = getWord(%task.chat, 1); + if (%chatTemplate !$= "") + AIMessageThreadTemplate(%chatTemplate, %chatMsg, %client, -1); + else + AIMessageThread(%task.chat, %client, -1); + } + else if (%task.targetObject > 0) + { + %type = %task.targetObject.getDataBlock().getName(); + if (%type $= "GeneratorLarge") + AIMessageThreadTemplate("AttackBase", "ChatSelfAttackGenerator", %client, -1); + else if (%type $= "SensorLargePulse") + AIMessageThreadTemplate("AttackBase", "ChatSelfAttackSensors", %client, -1); + else if (%type $= "SensorMediumPulse") + AIMessageThreadTemplate("AttackBase", "ChatSelfAttackSensors", %client, -1); + else if (%type $= "TurretBaseLarge") + AIMessageThreadTemplate("AttackBase", "ChatSelfAttackTurrets", %client, -1); + else if (%type $= "StationVehicle") + AIMessageThreadTemplate("AttackBase", "ChatSelfAttackVehicle", %client, -1); + } + } + } + } + + //make sure we still have something to destroy + if (isObject(%task.targetObject) && %task.targetObject.getDamageState() !$= "Destroyed") + { + %clientPos = %client.player.getWorldBoxCenter(); + %targetPos = %task.targetObject.getWorldBoxCenter(); + %distance = %client.getPathDistance(%targetPos); + if (%distance < 0) + %distance = 32767; + + //make sure we still have equipment + %client.needEquipment = AINeedEquipment(%task.equipment, %client); + if (%client.needEquipment) + { + //if this task is the objective task, choose a new objective + if (%task == %client.objectiveTask) + { + AIUnassignClient(%client); + Game.AIChooseGameObjective(%client); + return; + } + } + + //next move to within 220 + else if (%distance > 220) + { + %client.setTargetObject(-1); + %client.stepMove(%task.targetObject.getWorldBoxCenter(), 15); + } + + //now start ask for someone to laze the target, and start a 20 sec timer + else if (%task.waitForTargetter) + { + //see if we've started the timer + if (%task.waitTimerMS == 0) + { + //range the object + %client.stepRangeObject(%task.targetObject, "MortarShot", 100, 200); + + //now ask for a targeter... + %targetType = %task.targetObject.getDataBlock().getName(); + if (%targetType $= "TurretBaseLarge") + AIMessageThread("ChatCmdTargetTurret", %client, -1); + else if (%targetType $= "SensorLargePulse") + AIMessageThread("ChatCmdTargetSensors", %client, -1); + else if (%targetType $= "SensorMediumPulse") + AIMessageThread("ChatCmdTargetSensors", %client, -1); + else + AIMessageThread("ChatNeedTarget", %client, -1); + + %task.waitTimerMS = getSimTime(); + + //create the objective + if (! %task.targetterObjective) + { + %task.targetterObjective = new AIObjective(AIOLazeObject) + { + dataBlock = "AIObjectiveMarker"; + weightLevel1 = $AIWeightLazeObject[1]; + weightLevel2 = $AIWeightLazeObject[2]; + description = "Laze the " @ %task.targetObject.getName(); + targetObjectId = %task.targetObject; + issuedByClientId = %client; + offense = true; + equipment = "TargetingLaser"; + }; + MissionCleanup.add(%task.targetterObjective); + $ObjectiveQ[%client.team].add(%task.targetterObjective); + } + %task.targetterObjective.lastLazedTime = 0; + + //remove the escort (want a targetter instead) + if (%client.escort) + { + AIClearObjective(%client.escort); + %client.escort.delete(); + %client.escort = ""; + } + } + else + { + %elapsedTime = getSimTime() - %task.waitTimerMS; + if (%task.targetterObjective.group > 0) + %targetter = %task.targetterObjective.group.clientLevel[1]; + else + %targetter = %task.targetterObjective.clientLevel[1]; + + //see if we can find a target near our objective + %task.targetAcquired = false; + %numTargets = ServerTargetSet.getCount(); + for (%i = 0; %i < %numTargets; %i++) + { + %targ = ServerTargetSet.getObject(%i); + %targDist = VectorDist(%targ.getTargetPoint(), %task.targetObject.getWorldBoxCenter()); + if (%targDist < 20) + { + %task.targetAcquired = true; + break; + } + } + + if (%task.targetAcquired) + { + %task.waitForTargetter = false; + %task.waitTimerMS = 0; + %task.celebrate = true; + %task.sayAcquired = false; + AIMessageThread("ChatTargetAcquired", %client, -1); + } + + //else see if we've run out of time + else if ((! %targetter || ! %targetter.isAIControlled()) && %elapsedTime > 20000) + { + %task.waitForTargetter = false; + %task.waitTimerMS = 0; + %task.celebrate = true; + } + } + } + + //now we should finally be attacking with or without a targetter + //eventually, the target will be destroyed, or we'll run out of ammo... + else + { + //dissolve the human control link + if (%task == %client.objectiveTask) + aiReleaseHumanControl(%client.controlByHuman, %client); + + //see if we didn't acquired a spotter along the way + if (%task.targetterObjective.group > 0) + %targetter = %task.targetterObjective.group.clientLevel[1]; + else + %targetter = %task.targetterObjective.clientLevel[1]; + if (! %task.targetAcquired && AIClientIsAlive(%targetter) && %targetter.isAIControlled()) + { + %client.setTargetObject(-1); + %task.waitForTargetter = true; + } + else + { + //see if we can find a target near our objective + if (! %task.targetAcquired) + { + %numTargets = ServerTargetSet.getCount(); + for (%i = 0; %i < %numTargets; %i++) + { + %targ = ServerTargetSet.getObject(%i); + %targDist = VectorDist(%targ.getTargetPoint(), %task.targetObject.getWorldBoxCenter()); + if (%targDist < 20) + { + %task.targetAcquired = true; + break; + } + } + //see if we found a target (must be by a human) + if (%task.targetAcquired && %task.sayAcquired) + { + %task.sayAcquired = false; + AIMessageThread("ChatTargetAcquired", %client, -1); + } + } + + //set the target object, and keep attacking it + if (%client.getStepStatus() $= "Finished") + %client.setTargetObject(%task.targetObject, 250, "Mortar"); + else + %client.setTargetObject(-1); + } + } + } + + //the target must have been destroyed :) + else + { + //dissolve the human control link + if (%task == %client.objectiveTask) + aiReleaseHumanControl(%client.controlByHuman, %client); + + %client.setTargetObject(-1); + %client.clearStep(); + %client.stop(); + + if (%task.celebrate) + { + if (%task.waitTimerMS == 0) + { + //client animation "woohoo"! :) + //choose the animation range + %minCel = 3; + %maxCel = 8; + + //pick a random sound + if (getRandom() > 0.25) + %sound = "gbl.awesome"; + else if (getRandom() > 0.5) + %sound = "gbl.thanks"; + else if (getRandom() > 0.75) + %sound = "gbl.nice"; + else + %sound = "gbl.rock"; + %randTime = mFloor(getRandom() * 500) + 1; + schedule(%randTime, %client, "AIPlayAnimSound", %client, %task.targetObject.getWorldBoxCenter(), %sound, %minCel, %maxCel, 0); + + //team message + AIMessageThread("ChatEnemyTurretsDestroyed", %client, -1); + + //set the timer + %task.waitTimerMS = getSimTime(); + } + + //else see if the celebration period is over + else if (getSimTime() - %task.waitTimerMS > 3000) + %task.celebrate = false; + } + else + { + //if this task is the objective task, choose a new objective + if (%task == %client.objectiveTask) + { + AIUnassignClient(%client); + Game.AIChooseGameObjective(%client); + } + } + } +} + +//------------------------------ + +function AIDeployEquipment::initFromObjective(%task, %objective, %client) +{ + //initialize the task vars from the objective + %task.baseWeight = %client.objectiveWeight; + %task.location = %objective.location; + %task.equipment = %objective.equipment; + %task.buyEquipmentSet = %objective.buyEquipmentSet; + %task.desiredEquipment = %objective.desiredEquipment; + %task.issuedByClient = %objective.issuedByClientId; + %task.chat = %objective.chat; + + //initialize other task vars + %task.sendMsg = true; + %task.sendMsgTime = 0; + + //use the Y-axis of the rotation as the desired direction of deployement, + //and calculate a walk to point 3 m behind the deploy point. + %task.deployDirection = MatrixMulVector("0 0 0 " @ getWords(%objective.getTransform(), 3, 6), "0 1 0"); + %task.deployDirection = VectorNormalize(%task.deployDirection); +} + +function AIDeployEquipment::assume(%task, %client) +{ + %task.setWeightFreq(15); + %task.setMonitorFreq(15); + + %client.needEquipment = AINeedEquipment(%task.equipment, %client); + + //mark the current time for the buy inventory state machine + %task.buyInvTime = getSimTime(); + + %task.passes = 0; + %task.deployAttempts = 0; + %task.checkObstructed = false; + %task.waitMove = 0; +} + +function AIDeployEquipment::retire(%task, %client) +{ +} + +function AIDeployEquipment::weight(%task, %client) +{ + //update the task weight + if (%task == %client.objectiveTask) + %task.baseWeight = %client.objectiveWeight; + + %task.setWeight(%task.baseWeight); +} + +function findTurretDeployPoint(%client, %location, %attempt) +{ + %player = %client.player; + if (!isObject(%player)) + return "0 0 0"; + + %feetPos = posFromTransform(%player.getTransform()); + %temp = VectorSub(%location, %feetPos); + %temp2 = getWord(%temp, 0) @ " " @ getWord(%temp, 1) @ " 0"; + %facingVector = VectorNormalize(%temp2); + %aimPoint = VectorAdd(%feetPos, %facingVector); + //assume that there will be 10 attempts + %height = getWord(%location, 2) + 1.0 - (0.2 * %attempt); + %aimAt = getWord(%aimPoint, 0) @ " " @ getWord(%aimPoint, 1) @ " " @ %height; + return %aimAt; +} + +function AIDeployEquipment::monitor(%task, %client) +{ + //first, buy the equipment + if (%client.needEquipment) + { + %task.setMonitorFreq(5); + if (%task.equipment !$= "") + %equipmentList = %task.equipment; + else + %equipmentList = %task.desiredEquipment; + %result = AIBuyInventory(%client, %equipmentList, %task.buyEquipmentSet, %task.buyInvTime); + if (%result $= "InProgress") + return; + else if (%result $= "Finished") + { + %task.setMonitorFreq(30); + %client.needEquipment = false; + //if we made it past the inventory buying, reset the inv time + %task.buyInvTime = getSimTime(); + } + else if (%result $= "Failed") + { + //if this task is the objective task, choose a new objective + if (%task == %client.objectiveTask) + { + AIUnassignClient(%client); + Game.AIChooseGameObjective(%client); + } + return; + } + } + + //chat + if (%task.sendMsg) + { + if (%task.sendMsgTime == 0) + %task.sendMsgTime = getSimTime(); + else if (getSimTime() - %task.sendMsgTime > 7000) + { + %task.sendMsg = false; + if (%client.isAIControlled()) + { + if (%task.chat !$= "") + { + %chatMsg = getWord(%task.chat, 0); + %chatTemplate = getWord(%task.chat, 1); + if (%chatTemplate !$= "") + AIMessageThreadTemplate(%chatTemplate, %chatMsg, %client, -1); + else + AIMessageThread(%task.chat, %client, -1); + } + } + } + } + + //see if we're supposed to be engaging anyone... + if (AIClientIsAlive(%client.shouldEngage)) + { + %hasLOS = %client.hasLOSToClient(%client.shouldEngage); + %losTime = %client.getClientLOSTime(%client.shouldEngage); + if (%hasLOS || %losTime < 1000) + %client.setEngageTarget(%client.shouldEngage); + else + %client.setEngageTarget(-1); + } + else + %client.setEngageTarget(-1); + + //calculate the deployFromLocation + %factor = -1 * (3 - (%task.passes * 0.5)); + %task.deployFromLocation = VectorAdd(%task.location,VectorScale(%task.deployDirection, %factor)); + + //see if we're within range of the deploy location + %clLoc = %client.player.position; + %distance = VectorDist(%clLoc, %task.deployFromLocation); + %dist2D = VectorDist(%client.player.position, getWords(%task.deployFromLocation, 0, 1) SPC getWord(%client.player.position, 2)); + + //set the aim when we get near the target... this will be overwritten when we're actually trying to deploy + if (%distance < 10 && %dist2D < 10) + %client.aimAt(%task.location, 1000); + + if ((%client.pathDistRemaining(20) > %distance + 0.25) || %dist2D > 0.3) + { + %task.deployAttempts = 0; + %task.checkObstructed = false; + %task.waitMove = 0; + %client.stepMove(%task.deployFromLocation, 0.25); + %task.setMonitorFreq(15); + return; + } + + if (%task.deployAttempts < 10 && %task.passes < 5 && !AIClientIsAlive(%client.getEngageTarget())) + { + //dissolve the human control link + if (%task == %client.objectiveTask) + aiReleaseHumanControl(%client.controlByHuman, %client); + + %task.setMonitorFreq(3); + %client.stop(); + if (%task.deployAttempts == 0) + %deployPoint = %task.location; + else + %deployPoint = findTurretDeployPoint(%client, %task.location, %task.deployAttempts); + if(%deployPoint !$= "") + { + // we have possible point + %task.deployAttempts++; + %client.aimAt(%deployPoint, 2000); + + //try to deploy the backpack + %client.deployPack = true; + %client.lastDeployedObject = -1; + %client.player.use(Backpack); + + // check if pack deployed + if (isObject(%client.lastDeployedObject)) + { + //see if there's a "repairObject" objective for the newly deployed thingy... + if (%task == %client.objectiveTask) + { + %deployedObject = %client.lastDeployedObject; + + //search the current objective group and search for a "repair Object" task... + %objective = %client.objective; + + //delete any previously associated "AIORepairObject" objective + if (isObject(%objective.repairObjective)) + { + AIClearObjective(%objective.repairObjective); + %objective.repairObjective.delete(); + %objective.repairObjective = ""; + } + + //add the repair objective + %objective.repairObjective = new AIObjective(AIORepairObject) + { + dataBlock = "AIObjectiveMarker"; + weightLevel1 = %objective.weightLevel1 - 60; + weightLevel2 = 0; + description = "Repair the " @ %deployedObject.getDataBlock().getName(); + targetObjectId = %deployedObject; + issuedByClientId = %client; + offense = false; + defense = true; + equipment = "RepairPack"; + }; + %objective.repairObjective.deployed = true; + %objective.repairObjective.setTransform(%objective.getTransform()); + %objective.repairObjective.group = %objective.group; + MissionCleanup.add(%objective.repairObjective); + $ObjectiveQ[%client.team].add(%objective.repairObjective); + + //finally, unassign the client so he'll go do something else... + AIUnassignClient(%client); + Game.AIChooseGameObjective(%client); + } + + //finished + return; + } + } + } + else if (!%task.checkObstructed) + { + %task.checkObstructed = true; + + //see if anything is in our way + InitContainerRadiusSearch(%task.location, 4, $TypeMasks::MoveableObjectType | $TypeMasks::VehicleObjectType | + $TypeMasks::PlayerObjectType); + %objSrch = containerSearchNext(); + if (%objSrch == %client.player) + %objSrch = containerSearchNext(); + if (%objSrch) + AIMessageThread("ChatMove", %client, -1); + } + else if (%task.waitMove < 5 && %task.passes < 5) + { + %task.waitMove++; + + //try another pass at deploying + if (%task.waitMove == 5) + { + %task.waitMove = 0; + %task.passes++; + %task.deployAttempts = 0; + + //see if we're *right* underneath the deploy point + %deployDist2D = VectorDist(getWords(%client.player.position, 0, 1) @ "0", getWords(%task.location, 0, 1) @ "0"); + if (%deployDist2D < 0.25) + { + %client.pressjump(); + %client.deployPack = true; + %client.player.use(Backpack); + + // check if pack deployed + if(%client.player.getMountedImage($BackpackSlot) == 0) + { + //don't add a "repairObject" objective for ceiling turrets + if (%task == %client.objectiveTask) + { + AIUnassignClient(%client); + Game.AIChooseGameObjective(%client); + } + } + } + } + } + else + { + //find a new assignment - and remove this one from the Queue + if (%task == %client.objectiveTask) + { + error(%client SPC "from team" SPC %client.team SPC "is invalidating objective:" SPC %client.objective SPC "UNABLE TO DEPLOY EQUIPMENT"); + %client.objective.isInvalid = true; + AIUnassignClient(%client); + Game.AIChooseGameObjective(%client); + } + } +} + +//------------------------------ +//AI Objective functions +function ClientHasAffinity(%objective, %client) +{ + if (%objective.offense && %client.offense) + return true; + else if (%objective.defense && !%client.offense) + return true; + else + return false; +} + +function ClientHasRequiredEquipment(%objective, %client) +{ + return true; +} + +function AIODefault::weight(%objective, %client, %level, %inventoryStr) +{ + //make sure the player is still alive!!!!! + if (! AIClientIsAlive(%client)) + return 0; + + //set the base weight + switch (%level) + { + case 1: + %weight = %objective.weightLevel1; + case 2: + %weight = %objective.weightLevel2; + case 3: + %weight = %objective.weightLevel3; + default: + %weight = %objective.weightLevel4; + } + + //check Affinity + if (ClientHasAffinity(%objective, %client)) + %weight += 40; + + //if the objective doesn't require any equipment, it automatically get's the +100... + if (%objective.equipment $= "" && %objective.desiredEquipment $= "") + %weight += 100; + else + { + //check equipment requirement + %needEquipment = AINeedEquipment(%objective.equipment, %client); + + //check Required equipment + if (%objective.equipment !$= "" && !%needEquipment) + %weight += 100; + + //figure out the percentage of desired equipment the bot has + else if (%objective.desiredEquipment !$= "") + { + %count = getWordCount(%objective.desiredEquipment); + %itemCount = 0; + for (%i = 0; %i < %count; %i++) + { + %item = getWord(%objective.desiredEquipment, %i); + if (!AINeedEquipment(%item, %client)) + %itemCount++; + } + + //add to the weight + %weight += mFloor((%itemCount / %count) * 75); + } + } + + //find the distance to target + if (%objective.targetClientId !$= "" || %objective.targetObjectId !$= "") + { + if (AIClientIsAlive(%objective.targetClientId)) + { + %targetPos = %objective.targetClientId.player.getWorldBoxCenter(); + } + else if (VectorDist(%objective.location, "0 0 0") > 1) + %targetPos = %objective.location; + else + { + if(%objective.targetObjectId > 0) + %targetPos = %objective.targetObjectId.getWorldBoxCenter(); + } + } + + //make sure the destination is accessible + %distance = %client.getPathDistance(%targetPos); + if (%distance < 0) + return 0; + + %closestInvIsRemote = (getWordCount(%inventoryStr) == 4); + %closestInv = getWord(%inventoryStr, 0); + %closestDist = getWord(%inventoryStr, 1); + %closestRemoteInv = getWord(%inventoryStr, 2); + %closestRemoteDist = getWord(%inventoryStr, 3); + + //if we need equipment, the distance is from the client, to an inv, then to the target + if (%needEquipment) + { + //if we need a regular inventory station, and one doesn't exist, exit + if (!isObject(%closestInv) && %needArmor) + return 0; + + //find the closest inv based on whether we require armor (from a regular inv station) + if (!%closestInvIsRemote) + { + %needArmor = false; + %weightDist = %closestDist; + %weightInv = %closestInv; + } + else + { + %needArmor = AIMustUseRegularInvStation(%objective.equipment, %client); + if (%needArmor) + { + %weightDist = %closestDist; + %weightInv = %closestInv; + } + else + { + %weightDist = %closestRemoteDist; + %weightInv = %closestRemoteInv; + } + } + + //if we don't need armor, and there's no inventory station, see if the equipment we need + //is something we can pick up off the ground (likely this would be a repair pack...) + if (%weightDist >= 32767) + { + %itemType = getWord(%objective.equipment, 0); + %found = false; + %itemCount = $AIItemSet.getCount(); + for (%i = 0; %i < %itemCount; %i++) + { + %item = $AIItemSet.getObject(%i); + if (%item.getDataBlock().getName() $= %itemType && !%item.isHidden()) + { + %weightDist = %client.getPathDistance(%item.getWorldBoxCenter()); + if (%weightDist > 0) + { + %weightInv = %item; //set the var so the distance function will work... + %found = true; + break; + } + } + } + if (! %found) + return 0; + } + + //now find the distance used for weighting the objective + %tempDist = AIGetPathDistance(%targetPos, %weightInv.getWorldBoxCenter()); + if (%tempDist < 0) + %tempDist = 32767; + %distance = %weightDist + %tempDist; + } + + //see if we're within 200 m + if (%distance < 200) + %weight += 30; + + //see if we're within 90 m + if (%distance < 90) + %weight += 30; + + //see if we're within 45 m + if (%distance < 45) + %weight += 30; + + //see if we're within 20 m + if (%distance < 20) + %weight += 30; + + //final return, since we've made it through all the rest + return %weight; +} + +function AIODefault::QuickWeight(%objective, %client, %level, %minWeight) +{ + //can't do a quick weight when re-evaluating a client's current objective + if (%client.objective == %objective) + return true; + + //do a quick check to disqualify this objective if it can't meet the minimum weight + switch (%level) + { + case 1: + %testWeight = %objective.weightLevel1; + case 2: + %testWeight = %objective.weightLevel2; + case 3: + %testWeight = %objective.weightLevel3; + default: + %testWeight = %objective.weightLevel4; + } + if (%testWeight + 260 < %minWeight) + return false; + else + return true; +} + +//------------------------------ + +function AIODefendLocation::weight(%this, %client, %level, %minWeight, %inventoryStr) +{ + // if were playing CnH, check who owns this + if (%this.targetObjectId > 0) + { + if (!isObject(%this.targetObjectId) || %this.targetObjectId.isHidden() || %this.targetObjectId.team != %client.team) + return 0; + } + + //make sure the player is still alive!!!!! + if (! AIClientIsAlive(%client)) + return 0; + + //do a quick check to disqualify this objective if it can't meet the minimum weight + if (!AIODefault::QuickWeight(%this, %client, %level, %minWeight)) + { + if (%this.targetObjectId > 0 && %this.issuedByClientId == %client.controlByHuman) + { + if ($AIWeightHumanIssuedCommand < %minWeight) + return 0; + } + else + return 0; + } + + %weight = AIODefault::weight(%this, %client, %level, %inventoryStr); + + //if the object has been destroyed, reduce the weight + if (%this.targetObjectId > 0) + { + + //see if we were forced on the objective + if (%this.issuedByClientId == %client.controlByHuman && %weight < $AIWeightHumanIssuedCommand) + %weight = $AIWeightHumanIssuedCommand; + + //else see if the object has been destroyed + else if (!isObject(%this.targetObjectId) || %this.targetObjectId.getDamageState() $= "Destroyed") + %weight -= 320; + } + + return %weight; +} + +function AIODefendLocation::assignClient(%this, %client) +{ + %client.objectiveTask = %client.addTask(AIDefendLocation); + %client.objectiveTask.initFromObjective(%this, %client); +} + +function AIODefendLocation::unassignClient(%this, %client) +{ + %client.removeTask(%client.objectiveTask); + %client.objectiveTask = ""; +} + +//------------------------------ + +function AIOAttackLocation::weight(%this, %client, %level, %minWeight, %inventoryStr) +{ + //make sure the player is still alive!!!!! + if (! AIClientIsAlive(%client)) + return 0; + + //now, if this bot is linked to a human who has issued this command, up the weight + if (%this.issuedByClientId == %client.controlByHuman) + { + //make sure we have the potential to reach the minWeight + if (!AIODefault::QuickWeight(%this, %client, %level, %minWeight)) + { + if ($AIWeightHumanIssuedCommand < %minWeight) + return 0; + else + %weight = $AIWeightHumanIssuedCommand; + } + else + { + // calculate the default... + %weight = AIODefault::weight(%this, %client, %level, %inventoryStr); + if (%weight < $AIWeightHumanIssuedCommand) + %weight = $AIWeightHumanIssuedCommand; + } + } + else + { + //make sure we have the potential to reach the minWeight + if (!AIODefault::QuickWeight(%this, %client, %level, %minWeight)) + return 0; + + // calculate the default... + %weight = AIODefault::weight(%this, %client, %level, %inventoryStr); + } + + return %weight; +} + +function AIOAttackLocation::assignClient(%this, %client) +{ + %client.objectiveTask = %client.addTask(AIAttackLocation); + %client.objectiveTask.initFromObjective(%this, %client); +} + +function AIOAttackLocation::unassignClient(%this, %client) +{ + %client.removeTask(%client.objectiveTask); + %client.objectiveTask = ""; +} + +//------------------------------ + +function AIOTouchObject::weight(%this, %client, %level, %minWeight, %inventoryStr) +{ + //make sure the player is still alive!!!!! + if (! AIClientIsAlive(%client)) + return 0; + + if (!AIODefault::QuickWeight(%this, %client, %level, %minWeight)) + return 0; + + switch$ (%this.mode) + { + case "TouchFlipFlop": + if(%this.targetObjectId.team == %client.team || %this.targetObjectId.isHidden()) + return 0; + else + return AIODefault::weight(%this, %client, %level, %inventoryStr); + case "FlagGrab": + if (! %this.targetObjectId.isHome) + return 0; + else + return AIODefault::weight(%this, %client, %level, %inventoryStr); + case "FlagDropped": + if ((%this.targetObjectId.isHome) || (%this.targetObjectId.carrier !$= "")) + return 0; + else + return AIODefault::weight(%this, %client, %level, %inventoryStr); + case "FlagCapture": + if (%this.targetObjectId.carrier != %client.player) + return 0; + else + { + //find our home flag location + %homeTeam = %client.team; + %homeFlag = $AITeamFlag[%homeTeam]; + %this.location = %homeFlag.originalPosition; + return AIODefault::weight(%this, %client, %level, %inventoryStr); + } + } + return 0; +} + +function AIOTouchObject::assignClient(%this, %client) +{ + %client.objectiveTask = %client.addTask(AITouchObject); + %client.objectiveTask.initFromObjective(%this, %client); + + //create an AIOEscortPlayer objective to help out, if required + if (%this.mode $= "FlagGrab") + { + %client.escort = new AIObjective(AIOEscortPlayer) + { + dataBlock = "AIObjectiveMarker"; + weightLevel1 = $AIWeightEscortOffense[1]; + weightLevel2 = $AIWeightEscortOffense[2]; + description = "Escort " @ getTaggedString(%client.name); + targetClientId = %client; + offense = true; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyELF"; + }; + MissionCleanup.add(%client.escort); + $ObjectiveQ[%client.team].add(%client.escort); + } + + else if (%this.mode $= "FlagCapture") + { + %client.escort = new AIObjective(AIOEscortPlayer) + { + dataBlock = "AIObjectiveMarker"; + weightLevel1 = $AIWeightEscortCapper[1]; + weightLevel2 = $AIWeightEscortCapper[2]; + description = "Escort " @ getTaggedString(%client.name); + targetClientId = %client; + offense = true; + desiredEquipment = "EnergyPack"; + buyEquipmentSet = "LightEnergyDefault"; + }; + MissionCleanup.add(%client.escort); + $ObjectiveQ[%client.team].add(%client.escort); + } +} + +function AIOTouchObject::unassignClient(%this, %client) +{ + //kill the escort objective + if (%client.escort) + { + AIClearObjective(%client.escort); + %client.escort.delete(); + %client.escort = ""; + } + + %client.removeTask(%client.objectiveTask); + %client.objectiveTask = ""; +} + +//------------------------------ + +function AIOAttackPlayer::weight(%this, %client, %level, %minWeight, %inventoryStr) +{ + //make sure the player is still alive!!!!! + if (! AIClientIsAlive(%client)) + return 0; + + //if we're attacking the flag carrier, make sure a flag carrier exists + if (%this.mode $= "FlagCarrier") + { + if (%this.targetObjectId.carrier $= "") + return 0; + else + %this.targetClientId = %this.targetObjectId.carrier.client; + } + + //now, if this bot is linked to a human who has issued this command, up the weight + if (%this.issuedByClientId == %client.controlByHuman) + { + //make sure we have the potential to reach the minWeight + if (!AIODefault::QuickWeight(%this, %client, %level, %minWeight)) + { + if ($AIWeightHumanIssuedCommand < %minWeight) + return 0; + else + %weight = $AIWeightHumanIssuedCommand; + } + else + { + // calculate the default... + %weight = AIODefault::weight(%this, %client, %level, %inventoryStr); + if (%weight < $AIWeightHumanIssuedCommand) + %weight = $AIWeightHumanIssuedCommand; + } + } + else + { + //make sure we have the potential to reach the minWeight + if (!AIODefault::QuickWeight(%this, %client, %level, %minWeight)) + return 0; + + // calculate the default... + %weight = AIODefault::weight(%this, %client, %level, %inventoryStr); + } + + return %weight; +} + +function AIOAttackPlayer::assignClient(%this, %client) +{ + %client.objectiveTask = %client.addTask(AIAttackPlayer); + %client.objectiveTask.initFromObjective(%this, %client); +} + +function AIOAttackPlayer::unassignClient(%this, %client) +{ + %client.removeTask(%client.objectiveTask); + %client.objectiveTask = ""; +} + +//------------------------------ + +function AIOEscortPlayer::weight(%this, %client, %level, %minWeight, %inventoryStr) +{ + //make sure the player is still alive!!!!! + if (! AIClientIsAlive(%client) || ! AIClientIsAlive(%this.targetClientId)) + return 0; + + //can't escort yourself + if (%client == %this.targetClientId) + return 0; + + //make sure the class is appropriate + if (%this.forceClientId <= 0 && %this.issuedByClientId != %client.controlByHuman) + { + %targArmor = %this.targetClientId.player.getArmorSize(); + %myArmor = %client.player.getArmorSize(); + + if ((%targArmor $= "Light" && %myArmor !$= "Light") || %myArmor $= "Heavy") + return 0; + } + + //can't bump a forced client from level 1 + if (%this.forceClientId > 0 && %this.forceClientId != %client && %level == 1) + return 0; + + //if this bot is linked to a human who has issued this command, up the weight + if (%this.issuedByClientId == %client.controlByHuman) + { + //make sure we have the potential to reach the minWeight + if (!AIODefault::QuickWeight(%this, %client, %level, %minWeight)) + { + if ($AIWeightHumanIssuedEscort < %minWeight) + return 0; + else + %weight = $AIWeightHumanIssuedEscort; + } + else + { + // calculate the default... + %weight = AIODefault::weight(%this, %client, %level, %inventoryStr); + if (%weight < $AIWeightHumanIssuedEscort) + %weight = $AIWeightHumanIssuedEscort; + } + } + else + { + //make sure we have the potential to reach the minWeight + if (!AIODefault::QuickWeight(%this, %client, %level, %minWeight)) + return 0; + + // calculate the default... + %weight = AIODefault::weight(%this, %client, %level, %inventoryStr); + } + + return %weight; +} + +function AIOEscortPlayer::assignClient(%this, %client) +{ + %client.objectiveTask = %client.addTask(AIEscortPlayer); + %client.objectiveTask.initFromObjective(%this, %client); +} + +function AIOEscortPlayer::unassignClient(%this, %client) +{ + %client.removeTask(%client.objectiveTask); + %client.objectiveTask = ""; +} + +//------------------------------ + +function AIOAttackObject::weight(%this, %client, %level, %minWeight, %inventoryStr) +{ + // if were playing CnH, check who owns this + if (!isObject(%this.targetObjectId) || %this.targetObjectId.isHidden() || %this.targetObjectId.team == %client.team) + return 0; + + //make sure the player is still alive!!!!! + if (! AIClientIsAlive(%client)) + return 0; + + //no need to attack if the object is already destroyed + if (!isObject(%this.targetObjectId) || %this.targetObjectId.getDamageState() $= "Destroyed") + return 0; + else + { + //if this bot is linked to a human who has issued this command, up the weight + if (%this.issuedByClientId == %client.controlByHuman) + { + //make sure we have the potential to reach the minWeight + if (!AIODefault::QuickWeight(%this, %client, %level, %minWeight)) + { + if ($AIWeightHumanIssuedCommand < %minWeight) + return 0; + else + %weight = $AIWeightHumanIssuedCommand; + } + else + { + // calculate the default... + %weight = AIODefault::weight(%this, %client, %level, %inventoryStr); + if (%weight < $AIWeightHumanIssuedCommand) + %weight = $AIWeightHumanIssuedCommand; + } + } + else + { + //make sure we have the potential to reach the minWeight + if (!AIODefault::QuickWeight(%this, %client, %level, %minWeight)) + return 0; + + // calculate the default... + %weight = AIODefault::weight(%this, %client, %level, %inventoryStr); + } + + return %weight; + } +} + +function AIOAttackObject::assignClient(%this, %client) +{ + %client.objectiveTask = %client.addTask(AIAttackObject); + %client.objectiveTask.initFromObjective(%this, %client); +} + +function AIOAttackObject::unassignClient(%this, %client) +{ + %client.removeTask(%client.objectiveTask); + %client.objectiveTask = ""; +} + +//------------------------------ + +function AIORepairObject::weight(%this, %client, %level, %minWeight, %inventoryStr) +{ + // if were playing CnH, check who owns this + if (!isObject(%this.targetObjectId) || %this.targetObjectId.isHidden() || %this.targetObjectId.team != %client.team) + return 0; + + //make sure the player is still alive!!!!! + if (! AIClientIsAlive(%client)) + return 0; + + //no need to repair if the object isn't in need + if (!isObject(%this.targetObjectId) || %this.targetObjectId.getDamagePercent() <= 0) + return 0; + else + { + //if this bot is linked to a human who has issued this command, up the weight + if (%this.issuedByClientId == %client.controlByHuman) + { + //make sure we have the potential to reach the minWeight + if (!AIODefault::QuickWeight(%this, %client, %level, %minWeight)) + { + if ($AIWeightHumanIssuedCommand < %minWeight) + return 0; + else + %weight = $AIWeightHumanIssuedCommand; + } + else + { + // calculate the default... + %weight = AIODefault::weight(%this, %client, %level, %inventoryStr); + if (%weight < $AIWeightHumanIssuedCommand) + %weight = $AIWeightHumanIssuedCommand; + } + } + else + { + //make sure we have the potential to reach the minWeight + if (!AIODefault::QuickWeight(%this, %client, %level, %minWeight)) + return 0; + + // calculate the default... + %weight = AIODefault::weight(%this, %client, %level, %inventoryStr); + } + + return %weight; + } +} + +function AIORepairObject::assignClient(%this, %client) +{ + %client.objectiveTask = %client.addTask(AIRepairObject); + %client.objectiveTask.initFromObjective(%this, %client); +} + +function AIORepairObject::unassignClient(%this, %client) +{ + %client.removeTask(%client.objectiveTask); + %client.objectiveTask = ""; +} + +//------------------------------ + +function AIOLazeObject::weight(%this, %client, %level, %minWeight, %inventoryStr) +{ + //make sure the player is still alive!!!!! + if (! AIClientIsAlive(%client)) + return 0; + + //see if it's already being lazed + %numTargets = ServerTargetSet.getCount(); + for (%i = 0; %i < %numTargets; %i++) + { + %targ = ServerTargetSet.getObject(%i); + if (%targ.sourceObject != %client.player) + { + %targDist = VectorDist(%targ.getTargetPoint(), %this.targetObjectId.getWorldBoxCenter()); + if (%targDist < 10) + { + %this.lastLazedTime = getSimTime(); + %this.lastLazedClient = %targ.sourceObject.client; + break; + } + } + } + + //no need to laze if the object is already destroyed + if (!isObject(%this.targetObjectId) || %this.targetObjectId.getDamageState() $= "Destroyed") + return 0; + else if (%this.targetObjectId.isHidden() || %this.targetObjectId.team != %client.team) + return 0; + else if (getSimTime() - %this.lastLazedTime <= 15000 && %this.lastLazedClient != %client) + return 0; + else + { + //set the base weight + switch (%level) + { + case 1: + %weight = %this.weightLevel1; + case 2: + %weight = %this.weightLevel2; + case 3: + %weight = %this.weightLevel3; + default: + %weight = %this.weightLevel4; + } + + //check Affinity + if (ClientHasAffinity(%this, %client)) + %weight += 100; + + //for now, do not deviate from the current assignment to laze a target, if you don't + //already have a targeting laser. + %needEquipment = AINeedEquipment(%this.equipment, %client); + if (!%needEquipment) + %weight += 100; + else if (!aiHumanHasControl(%client.controlByHuman, %client)) + return 0; + + //see if this client is close to the issuing client + if (%this.issuedByClientId > 0) + { + if (! AIClientIsAlive(%this.issuedByClientId)) + return 0; + + %distance = %client.getPathDistance(%this.issuedByClientId.player.getWorldBoxCenter()); + if (%distance < 0) + %distance = 32767; + + //see if we're within 200 m + if (%distance < 200) + %weight += 30; + + //see if we're within 90 m + if (%distance < 90) + %weight += 30; + + //see if we're within 45 m + if (%distance < 45) + %weight += 30; + } + + //now, if this bot is linked to a human who has issued this command, up the weight + if (%this.issuedByClientId == %client.controlByHuman && %weight < $AIWeightHumanIssuedCommand) + %weight = $AIWeightHumanIssuedCommand; + + return %weight; + } +} + +function AIOLazeObject::assignClient(%this, %client) +{ + %client.objectiveTask = %client.addTask(AILazeObject); + %client.objectiveTask.initFromObjective(%this, %client); +} + +function AIOLazeObject::unassignClient(%this, %client) +{ + %client.removeTask(%client.objectiveTask); + %client.objectiveTask = ""; +} + +//------------------------------ + +function AIOMortarObject::weight(%this, %client, %level, %minWeight, %inventoryStr) +{ + // if were playing CnH, check who owns this + if (!isObject(%this.targetObjectId) || %this.targetObjectId.isHidden() || %this.targetObjectId.team == %client.team) + return 0; + + //make sure the player is still alive!!!!! + if (! AIClientIsAlive(%client)) + return 0; + + //no need to attack if the object is already destroyed + if (%this.targetObjectId.getDamageState() $= "Destroyed") + return 0; + else + { + //if this bot is linked to a human who has issued this command, up the weight + if (%this.issuedByClientId == %client.controlByHuman) + { + //make sure we have the potential to reach the minWeight + if (!AIODefault::QuickWeight(%this, %client, %level, %minWeight)) + { + if ($AIWeightHumanIssuedCommand < %minWeight) + return 0; + else + %weight = $AIWeightHumanIssuedCommand; + } + else + { + // calculate the default... + %weight = AIODefault::weight(%this, %client, %level, %inventoryStr); + if (%weight < $AIWeightHumanIssuedCommand) + %weight = $AIWeightHumanIssuedCommand; + } + } + else + { + //make sure we have the potential to reach the minWeight + if (!AIODefault::QuickWeight(%this, %client, %level, %minWeight)) + return 0; + + // calculate the default... + %weight = AIODefault::weight(%this, %client, %level, %inventoryStr); + } + + return %weight; + } +} + +function AIOMortarObject::assignClient(%this, %client) +{ + %client.objectiveTask = %client.addTask(AIMortarObject); + %client.objectiveTask.initFromObjective(%this, %client); + + //create the escort objective (require a targeting laser in this case...) + %client.escort = new AIObjective(AIOEscortPlayer) + { + dataBlock = "AIObjectiveMarker"; + weightLevel1 = $AIWeightEscortOffense[1]; + weightLevel2 = $AIWeightEscortOffense[2]; + description = "Escort " @ getTaggedString(%client.name); + targetClientId = %client; + offense = true; + equipment = "TargetingLaser"; + buyEquipmentSet = "LightEnergyDefault"; + }; + MissionCleanup.add(%client.escort); + $ObjectiveQ[%client.team].add(%client.escort); +} + +function AIOMortarObject::unassignClient(%this, %client) +{ + //kill the escort objective + if (%client.escort) + { + AIClearObjective(%client.escort); + %client.escort.delete(); + %client.escort = ""; + } + + %client.removeTask(%client.objectiveTask); + %client.objectiveTask = ""; +} + +//------------------------------------------------------------------------ +//If the function ShapeBaseImageData::testInvalidDeployConditions() changes at all, those changes need to be reflected here +function AIODeployEquipment::weight(%this, %client, %level, %minWeight, %inventoryStr) +{ + //make sure the player is still alive!!!!! + if (! AIClientIsAlive(%client)) + return 0; + + //make sure the deploy objective is valid + if (%this.isInvalid) + return 0; + + //first, make sure we haven't deployed too many... + if ($TeamDeployedCount[%client.team, %this.equipment] >= $TeamDeployableMax[%this.equipment]) + return 0; + + //now make sure there are no other items in the way... + InitContainerRadiusSearch(%this.location, $MinDeployableDistance, $TypeMasks::VehicleObjectType | + $TypeMasks::MoveableObjectType | + $TypeMasks::StaticShapeObjectType | + $TypeMasks::TSStaticShapeObjectType | + $TypeMasks::ForceFieldObjectType | + $TypeMasks::ItemObjectType | + $TypeMasks::PlayerObjectType | + $TypeMasks::TurretObjectType); + %objSearch = containerSearchNext(); + + //make sure we're not invalidating the deploy location with the client's own player object + if (%objSearch == %client.player) + %objSearch = containerSearchNext(); + + //did we find an object which would block deploying the equipment? + if (isObject(%objSearch)) + return 0; + + //now run individual checks based on the equipment type... + if (%this.equipment $= "TurretIndoorDeployable") + { + //check if there's another turret close to the deploy location + InitContainerRadiusSearch(%this.location, $TurretIndoorSpaceRadius, $TypeMasks::StaticShapeObjectType); + %found = containerSearchNext(); + if (isObject(%found)) + { + %foundName = %found.getDataBlock().getName(); + if ((%foundName $= TurretDeployedFloorIndoor) || (%foundName $= "TurretDeployedWallIndoor") || (%foundName $= "TurretDeployedCeilingIndoor") || (%foundName $= "TurretDeployedOutdoor")) + return 0; + } + + //now see if there are too many turrets in the area... + %highestDensity = 0; + InitContainerRadiusSearch(%this.location, $TurretIndoorSphereRadius, $TypeMasks::StaticShapeObjectType); + %found = containerSearchNext(); + while (isObject(%found)) + { + %foundName = %found.getDataBlock().getName(); + if ((%foundName $= "TurretDeployedFloorIndoor") || (%foundName $= "TurretDeployedWallIndoor") || (%foundName $= "TurretDeployedCeilingIndoor") || (%foundName $= "TurretDeployedOutdoor")) + { + //found one + %numTurretsNearby++; + + %nearbyDensity = testNearbyDensity(%found, $TurretIndoorSphereRadius); + if (%nearbyDensity > %highestDensity) + %highestDensity = %nearbyDensity; + } + %found = containerSearchNext(); + } + + if (%numTurretsNearby > %highestDensity) + %highestDensity = %numTurretsNearby; + + //now see if the area is already saturated + if (%highestDensity > $TurretIndoorMaxPerSphere) + return 0; + } + + else if (%this.equipment $= "TurretOutdoorDeployable") + { + //check if there's another turret close to the deploy location + InitContainerRadiusSearch(%this.location, $TurretOutdoorSpaceRadius, $TypeMasks::StaticShapeObjectType); + %found = containerSearchNext(); + if (isObject(%found)) + { + %foundName = %found.getDataBlock().getName(); + if ((%foundName $= "TurretDeployedFloorIndoor") || (%foundName $= "TurretDeployedWallIndoor") || (%foundName $= "TurretDeployedCeilingIndoor") || (%foundName $= "TurretDeployedOutdoor")) + return 0; + } + + //now see if there are too many turrets in the area... + %highestDensity = 0; + InitContainerRadiusSearch(%this.location, $TurretOutdoorSphereRadius, $TypeMasks::StaticShapeObjectType); + %found = containerSearchNext(); + while (isObject(%found)) + { + %foundName = %found.getDataBlock().getName(); + if ((%foundName $= "TurretDeployedFloorIndoor") || (%foundName $= "TurretDeployedWallIndoor") || (%foundName $= "TurretDeployedCeilingIndoor") || (%foundName $= "TurretDeployedOutdoor")) + { + //found one + %numTurretsNearby++; + + %nearbyDensity = testNearbyDensity(%found, $TurretOutdoorSphereRadius); + if (%nearbyDensity > %highestDensity) + %highestDensity = %nearbyDensity; + } + %found = containerSearchNext(); + } + + if (%numTurretsNearby > %highestDensity) + %highestDensity = %numTurretsNearby; + + //now see if the area is already saturated + if (%highestDensity > $TurretOutdoorMaxPerSphere) + return 0; + } + + //check equipment requirement + %needEquipment = AINeedEquipment(%this.equipment, %client); + + //if don't need equipment, see if we've past the "point of no return", and should continue regardless + if (! %needEquipment) + { + %needArmor = AIMustUseRegularInvStation(%this.equipment, %client); + %result = AIFindClosestInventory(%client, %needArmor); + %closestInv = getWord(%result, 0); + %closestDist = getWord(%result, 1); + + //if we're too far from the inv to go back, or we're too close to the deploy location, force continue + if (%closestDist > 50 && VectorDist(%client.player.getWorldBoxCenter(), %task.location) < 50) + { + %weight = AIODefault::weight(%this, %client, %level, %inventoryStr); + if (%weight < $AIWeightContinueDeploying) + %weight = $AIWeightContinueDeploying; + return %weight; + } + } + + //if this bot is linked to a human who has issued this command, up the weight + if (%this.issuedByClientId == %client.controlByHuman) + { + //make sure we have the potential to reach the minWeight + if (!AIODefault::QuickWeight(%this, %client, %level, %minWeight)) + { + if ($AIWeightHumanIssuedCommand < %minWeight) + return 0; + else + %weight = $AIWeightHumanIssuedCommand; + } + else + { + // calculate the default... + %weight = AIODefault::weight(%this, %client, %level, %inventoryStr); + if (%weight < $AIWeightHumanIssuedCommand) + %weight = $AIWeightHumanIssuedCommand; + } + } + else + { + //make sure we have the potential to reach the minWeight + if (!AIODefault::QuickWeight(%this, %client, %level, %minWeight)) + return 0; + + // calculate the default... + %weight = AIODefault::weight(%this, %client, %level, %inventoryStr); + } + + return %weight; +} + +function AIODeployEquipment::assignClient(%this, %client) +{ + %client.objectiveTask = %client.addTask(AIDeployEquipment); + %task = %client.objectiveTask; + %task.initFromObjective(%this, %client); +} + +function AIODeployEquipment::unassignClient(%this, %client) +{ + %client.removeTask(%client.objectiveTask); + %client.objectiveTask = ""; +} + +//------------------------------------------------------------------------ diff --git a/base/scripts/aiRabbit.cs b/base/scripts/aiRabbit.cs new file mode 100644 index 0000000..d1306c0 --- /dev/null +++ b/base/scripts/aiRabbit.cs @@ -0,0 +1,200 @@ +//----------------------------------------------- +// AI functions for Rabbit +//--------------------------------------------------------------------------- + +//--------------------------------------------------------------------------- + +function RabbitGame::onAIRespawn(%game, %client) +{ + //add the default task + if (! %client.defaultTasksAdded) + { + %client.defaultTasksAdded = true; + %client.addTask(AIPickupItemTask); + %client.addTask(AIUseInventoryTask); + %client.addTask(AITauntCorpseTask); + %client.rabbitTask = %client.addTask(AIRabbitTask); + } +} + +//--------------------------------------------------------------------------- + +function RabbitGame::AIInit(%game) +{ + //call the default AIInit() function + AIInit(); +} + +//--------------------------------------------------------------------------- +//AIRabbitTask functions +//--------------------------------------------------------------------------- +function AIRabbitTask::init(%task, %client) +{ +} + +//--------------------------------------------------------------------------- + +function AIRabbitTask::assume(%task, %client) +{ + %task.setWeightFreq(20); + %task.setMonitorFreq(20); + %task.findLocation = true; +} + +function AIRabbitTask::retire(%task, %client) +{ +} + +//--------------------------------------------------------------------------- + +function AIRabbitTask::weight(%task, %client) +{ + %player = %client.player; + + //see if I have the flag + if ($AIRabbitFlag.carrier == %player) + %task.setWeight($AIRabbitWeightDefault); + + //else see if I'm close to the flag + else + { + if (isObject($AIRabbitFlag.carrier)) + %distToFlag = %client.getPathDistance($AIRabbitFlag.carrier.getWorldBoxCenter()); + else + %distToFlag = %client.getPathDistance($AIRabbitFlag.getWorldBoxCenter()); + + //if the flag is pretty close, or the inv station is quite far... + if (%distToFlag > 0 && %distToFlag < 50) + %task.setWeight($AIRabbitWeightDefault); + else + %task.setWeight($AIRabbitWeightNeedInv); + } +} + +//--------------------------------------------------------------------------- + +function AIRabbitTask::monitor(%task, %client) +{ + %player = %client.player; + + //if we have the flag - run + if ($AIRabbitFlag.carrier == %player) + { + if (%task.findLocation) + { + %damage = %player.getDamagePercent(); + if (%damage > 0.3) + { + //search for a health kit + %closestHealth = AIFindSafeItem(%client, "Health"); + if (%closestHealth > 0) + { + %task.seekLocation = %closestHealth.getWorldBoxCenter(); + %foundItemLocation = true; + } + } + else if (!%foundItemLocation && AIEngageOutOfAmmo(%client)) + { + //search for a Ammo or a weapon... + %closestItem = AIFindSafeItem(%client, "Ammo"); + if (%closestItem > 0) + { + %task.seekLocation = %closestItem.getWorldBoxCenter(); + %foundItemLocation = true; + } + } + + //now see if we don't really have good equipment... + else if (!%foundItemLocation && AIEngageWeaponRating(%client) < 20) + { + //search for any useful item + %closestItem = AIFindSafeItem(%client, "Any"); + if (%closestItem > 0) + { + %task.seekLocation = %closestItem.getWorldBoxCenter(); + %foundItemLocation = true; + } + } + + //else, search for any spot on the map that isn't covered with enemies... + else + { + //try 10 times + %task.seekLocation = %player.position; + %farthestLocation = ""; + %farthestDist = 0; + %occupiedLocation = ""; + + for (%i = 0; %i < 10; %i++) + { + %testLocation = Game.pickPlayerSpawn(%client, true); + if (%testLocation == -1) + break; + + %dist = %client.getPathDistance(%testLocation); + if (%dist < 0 || %dist > %farthestDist) + { + //see if it's unoccupied... + %result = AIFindClosestEnemyToLoc(%client, %task.location, 50, $AIClientLOSTimeout, true); + %closestEnemy = getWord(%result, 0); + %closestdist = getWord(%result, 1); + + if (!AIClientIsAlive(%closestEnemy)) + %farthestLocation = %testLocation; + else + %occupiedLocation = %testLocation; + } + } + + if (%farthestLocation $= "") + %task.seekLocation = %occupiedLocation; + else + %task.seekLocation = %farthestLocation; + } + + //set the flag and go there + %task.findLocation = false; + %client.stepMove(%task.seekLocation, 8); + } + else + { + //keep going there... + %client.stepMove(%task.seekLocation, 8); + + //see if we've arrived + %distToDest = %client.getPathDistance(%task.seekLocation); + if (%distToDest > 0 && %distToDest < 10) + { + %task.findLocation = true; + } + } + + //don't forget to shoot back at whoever shot me last + if (%client.lastDamageClient != %client) + %client.setEngageTarget(%client.lastDamageClient); + } + + //else if someone else has the flag - shoot them + else if (isObject($AIRabbitFlag.carrier)) + { + %client.clientDetected($AIRabbitFlag.carrier.client); + %client.stepEngage($AIRabbitFlag.carrier.client); + } + + //else the flag has been dropped + else + { + %client.stepMove($AIRabbitFlag.position, 0.25); + %client.setEngageTarget(-1); + } +} + +//--------------------------------------------------------------------------- +// AIRabbit utility functions +//--------------------------------------------------------------------------- +function air() +{ + exec("scripts/aiRabbit.cs"); +} + + diff --git a/base/scripts/aiSiege.cs b/base/scripts/aiSiege.cs new file mode 100644 index 0000000..05b30d5 --- /dev/null +++ b/base/scripts/aiSiege.cs @@ -0,0 +1,85 @@ +// +// aiSiege.cs +// + +function SiegeGame::onAIRespawn(%game, %client) +{ + //add the default tasks + if (! %client.defaultTasksAdded) + { + %client.defaultTasksAdded = true; + %client.addTask(AIEngageTask); + %client.addTask(AIPickupItemTask); + %client.addTask(AITauntCorpseTask); + %client.addTask(AIEngageTurretTask); + %client.addtask(AIDetectMineTask); + } +} + +function SiegeGame::AIInit(%game) +{ + for (%i = 0; %i <= %game.numTeams; %i++) + { + if (!isObject($ObjectiveQ[%i])) + { + $ObjectiveQ[%i] = new AIObjectiveQ(); + MissionCleanup.add($ObjectiveQ[%i]); + } + + error("team " @ %i @ " objectives load..."); + $ObjectiveQ[%i].clear(); + AIInitObjectives(%i, %game); + } + + //call the default AIInit() function + AIInit(); +} + +function SiegeGame::AIChooseGameObjective(%game, %client) +{ + //the objectives on team1 are all offense objectives, team2 has the defensive ones.. + if (%client.team == %game.offenseTeam) + AIChooseObjective(%client, $ObjectiveQ[1]); + else + AIChooseObjective(%client, $ObjectiveQ[2]); +} + +function SiegeGame::AIHalfTime(%game) +{ + //clear all the bots, and clean up all the sets, objective qs, etc... + AIMissionEnd(); + + //reset everything from scratch + %game.aiInit(); + + //respawn all the bots + for (%i = 0; %i < ClientGroup.getCount(); %i++) + { + %cl = ClientGroup.getObject(%i); + if (%cl.isAIControlled()) + onAIRespawn(%cl); + } +} + +function SiegeGame::onAIDamaged(%game, %clVictim, %clAttacker, %damageType, %implement) +{ + if (%clAttacker && %clAttacker != %clVictim && %clAttacker.team == %clVictim.team) + { + schedule(250, %clVictim, "AIPlayAnimSound", %clVictim, %clAttacker.player.getWorldBoxCenter(), "wrn.watchit", -1, -1, 0); + + //clear the "lastDamageClient" tag so we don't turn on teammates... unless it's uberbob! + %clVictim.lastDamageClient = -1; + } +} + +function SiegeGame::onAIKilledClient(%game, %clVictim, %clAttacker, %damageType, %implement) +{ + if (%clVictim.team != %clAttacker.team) + DefaultGame::onAIKilledClient(%game, %clVictim, %clAttacker, %damageType, %implement); +} + +function SiegeGame::onAIFriendlyFire(%game, %clVictim, %clAttacker, %damageType, %implement) +{ + if (%clAttacker && %clAttacker.team == %clVictim.team && %clAttacker != %clVictim) + AIMessageThread("Sorry", %clAttacker, %clVictim); +} diff --git a/base/scripts/aiTeamHunters.cs b/base/scripts/aiTeamHunters.cs new file mode 100644 index 0000000..832219a --- /dev/null +++ b/base/scripts/aiTeamHunters.cs @@ -0,0 +1,41 @@ +exec("scripts/aiHunters.cs"); + +//---------------------------------------------------------------------------// +//AI functions for playing TEAM HUNTERS + +function TeamHuntersGame::AIInit(%game) +{ + for (%i = 1; %i <= %game.numTeams; %i++) + { + if (!isObject($ObjectiveQ[%i])) + { + $ObjectiveQ[%i] = new AIObjectiveQ(); + MissionCleanup.add($ObjectiveQ[%i]); + } + + error("team " @ %i @ " objectives load..."); + $ObjectiveQ[%i].clear(); + AIInitObjectives(%i, %game); + } + + //call the default AIInit() function + AIInit(); +} + +function TeamHuntersGame::onAIRespawn(%game, %client) +{ + HuntersGame::onAIRespawn(%game, %client); +} + +function TeamHuntersGame::onAIDamaged(%game, %clVictim, %clAttacker, %damageType, %implement) +{ + if (%clAttacker && %clAttacker != %clVictim && %clAttacker.team == %clVictim.team) + { + schedule(250, %clVictim, "AIPlayAnimSound", %clVictim, %clAttacker.player.getWorldBoxCenter(), "wrn.watchit", -1, -1, 0); + + //clear the "lastDamageClient" tag so we don't turn on teammates... unless it's uberbob! + %clVictim.lastDamageClient = -1; + } +} + + diff --git a/base/scripts/autoexec/scripts.txt b/base/scripts/autoexec/scripts.txt new file mode 100644 index 0000000..1597cd2 --- /dev/null +++ b/base/scripts/autoexec/scripts.txt @@ -0,0 +1 @@ +Any scripts (.cs files) placed in this folder will be loaded (exec'd) automatically. \ No newline at end of file diff --git a/base/scripts/camera.cs b/base/scripts/camera.cs new file mode 100644 index 0000000..ff8e7fa --- /dev/null +++ b/base/scripts/camera.cs @@ -0,0 +1,584 @@ +$Camera::movementSpeed = 40; + +datablock CameraData(Observer) +{ + mode = "observerStatic"; + firstPersonOnly = true; +}; + +function Observer::onTrigger(%data,%obj,%trigger,%state) +{ + // state = 0 means that a trigger key was released + if (%state == 0) + return; + + //first, give the game the opportunity to prevent the observer action + if (!Game.ObserverOnTrigger(%data, %obj, %trigger, %state)) + return; + + //now observer functions if you press the "throw" + if (%trigger >= 4) + return; + + //trigger types: 0:fire 1:altTrigger 2:jump 3:jet 4:throw + %client = %obj.getControllingClient(); + switch$ (%obj.mode) + { + case "justJoined": + //press FIRE + if (%trigger == 0) + { + // clear intro message + clearBottomPrint( %client ); + + //spawn the player + commandToClient(%client, 'setHudMode', 'Standard'); + Game.assignClientTeam(%client); + Game.spawnPlayer( %client, $MatchStarted ); + + if( $MatchStarted ) + { + %client.camera.setFlyMode(); + %client.setControlObject( %client.player ); + } + else + { + %client.camera.getDataBlock().setMode( %client.camera, "pre-game", %client.player ); + %client.setControlObject( %client.camera ); + } + } + + //press JET + else if (%trigger == 3) + { + //cycle throw the static observer spawn points + %markerObj = Game.pickObserverSpawn(%client, true); + %transform = %markerObj.getTransform(); + %obj.setTransform(%transform); + %obj.setFlyMode(); + } + + //press JUMP + else if (%trigger == 2) + { + //switch the observer mode to observing clients + if (isObject(%client.observeFlyClient)) + serverCmdObserveClient(%client, %client.observeFlyClient); + else + serverCmdObserveClient(%client, -1); + + displayObserverHud(%client, %client.observeClient); + messageClient(%client.observeClient, 'Observer', '\c1%1 is now observing you.', %client.name); + } + + case "playerDeath": + // Attached to a dead player - spawn regardless of trigger type + if(!%client.waitRespawn && getSimTime() > %client.suicideRespawnTime) + { + commandToClient(%client, 'setHudMode', 'Standard'); + Game.spawnPlayer( %client, true ); + %client.camera.setFlyMode(); + %client.setControlObject(%client.player); + } + + case "PreviewMode": + if (%trigger == 0) + { + commandToClient(%client, 'setHudMode', 'Standard'); + if( %client.lastTeam ) + Game.clientJoinTeam( %client, %client.lastTeam ); + else + { + Game.assignClientTeam( %client, true ); + + // Spawn the player: + Game.spawnPlayer( %client, false ); + } + + %client.camera.setFlyMode(); + %client.setControlObject( %client.player ); + } + + case "toggleCameraFly": + // this is the default camera mode + + case "observerFly": + // Free-flying observer camera + + if (%trigger == 0) + { + if( !$Host::TournamentMode && $MatchStarted ) + { + // reset observer params + clearBottomPrint(%client); + commandToClient(%client, 'setHudMode', 'Standard'); + + if( %client.lastTeam !$= "" && %client.lastTeam != 0 && Game.numTeams > 1) + { + Game.clientJoinTeam( %client, %client.lastTeam, $MatchStarted ); + %client.camera.setFlyMode(); + %client.setControlObject( %client.player ); + } + else + { + + Game.assignClientTeam( %client ); + + // Spawn the player: + Game.spawnPlayer( %client, true ); + %client.camera.setFlyMode(); + %client.setControlObject( %client.player ); + ClearBottomPrint( %client ); + } + } + else if( !$Host::TournamentMode ) + { + + clearBottomPrint(%client); + Game.assignClientTeam( %client ); + + // Spawn the player: + Game.spawnPlayer( %client, false ); + %client.camera.getDataBlock().setMode( %client.camera, "pre-game", %client.player ); + %client.setControlObject( %client.camera ); + } + } + //press JET + else if (%trigger == 3) + { + %markerObj = Game.pickObserverSpawn(%client, true); + %transform = %markerObj.getTransform(); + %obj.setTransform(%transform); + %obj.setFlyMode(); + } + + //press JUMP + else if (%trigger == 2) + { + //switch the observer mode to observing clients + if (isObject(%client.observeFlyClient)) + serverCmdObserveClient(%client, %client.observeFlyClient); + else + serverCmdObserveClient(%client, -1); + displayObserverHud(%client, %client.observeClient); + messageClient(%client.observeClient, 'Observer', '\c1%1 is now observing you.', %client.name); + } + + case "observerStatic": + // Non-moving observer camera + %next = (%trigger == 3 ? true : false); + %markerObj = Game.pickObserverSpawn(%client, %next); + %transform = %markerObj.getTransform(); + %obj.setTransform(%transform); + %obj.setFlyMode(); + + case "observerTimeout": + // Player didn't respawn quickly enough + if (%trigger == 0) + { + clearBottomPrint(%client); + commandToClient(%client, 'setHudMode', 'Standard'); + if( %client.lastTeam ) + Game.clientJoinTeam( %client, %client.lastTeam, true ); + else + { + Game.assignClientTeam( %client ); + + // Spawn the player: + Game.spawnPlayer( %client, true ); + } + + %client.camera.setFlyMode(); + %client.setControlObject( %client.player ); + } + + //press JET + else if (%trigger == 3) + { + %markerObj = Game.pickObserverSpawn(%client, true); + %transform = %markerObj.getTransform(); + %obj.setTransform(%transform); + %obj.setFlyMode(); + } + + //press JUMP + else if (%trigger == 2) + { + //switch the observer mode to observing clients + if (isObject(%client.observeFlyClient)) + serverCmdObserveClient(%client, %client.observeFlyClient); + else + serverCmdObserveClient(%client, -1); + displayObserverHud(%client, %client.observeClient); + messageClient(%client.observeClient, 'Observer', '\c1%1 is now observing you.', %client.name); + } + + case "observerFollow": + // Observer attached to a moving object (assume player for now...) + //press FIRE - cycle to next client + if (%trigger == 0) + { + %nextClient = findNextObserveClient(%client); + %prevObsClient = %client.observeClient; + if (%nextClient > 0 && %nextClient != %client.observeClient) + { + //set the new object + %transform = %nextClient.player.getTransform(); + %obj.setOrbitMode(%nextClient.player, %transform, 0.5, 4.5, 4.5); + %client.observeClient = %nextClient; + + //send the message(s) + displayObserverHud(%client, %nextClient); + messageClient(%nextClient, 'Observer', '\c1%1 is now observing you.', %client.name); + messageClient(%prevObsClient, 'ObserverEnd', '\c1%1 is no longer observing you.', %client.name); + } + } + + //press JET - cycle to prev client + else if (%trigger == 3) + { + %prevClient = findPrevObserveClient(%client); + %prevObsClient = %client.observeClient; + if (%prevClient > 0 && %prevClient != %client.observeClient) + { + //set the new object + %transform = %prevClient.player.getTransform(); + %obj.setOrbitMode(%prevClient.player, %transform, 0.5, 4.5, 4.5); + %client.observeClient = %prevClient; + + //send the message(s) + displayObserverHud(%client, %prevClient); + messageClient(%prevClient, 'Observer', '\c1%1 is now observing you.', %client.name); + messageClient(%prevObsClient, 'ObserverEnd', '\c1%1 is no longer observing you.', %client.name); + } + } + + //press JUMP + else if (%trigger == 2) + { + //toggle back to observer fly mode + %obj.mode = "observerFly"; + %obj.setFlyMode(); + updateObserverFlyHud(%client); + messageClient(%client.observeClient, 'ObserverEnd', '\c1%1 is no longer observing you.', %client.name); + } + + case "pre-game": + if(!$Host::TournamentMode || $CountdownStarted) + return; + + if(%client.notReady) + { + %client.notReady = ""; + MessageAll( 0, '\c1%1 is READY.', %client.name ); + if(%client.notReadyCount < 3) + centerprint( %client, "\nWaiting for match start (FIRE if not ready)", 0, 3); + else + centerprint( %client, "\nWaiting for match start", 0, 3); + } + else + { + %client.notReadyCount++; + if(%client.notReadyCount < 4) + { + %client.notReady = true; + MessageAll( 0, '\c1%1 is not READY.', %client.name ); + centerprint( %client, "\nPress FIRE when ready.", 0, 3 ); + } + return; + } + CheckTourneyMatchStart(); + } +} + +function Observer::setMode(%data, %obj, %mode, %targetObj) +{ + if(%mode $= "") + return; + %client = %obj.getControllingClient(); + switch$ (%mode) { + case "justJoined": + commandToClient(%client, 'setHudMode', 'Observer'); + %markerObj = Game.pickObserverSpawn(%client, true); + %transform = %markerObj.getTransform(); + %obj.setTransform(%transform); + %obj.setFlyMode(); + + case "pre-game": + commandToClient(%client, 'setHudMode', 'Observer'); + %obj.setOrbitMode( %targetObj, %targetObj.getWorldBoxCenter() @ " 0.5 0.5 0.5 1", 0.5, 4.5, 4.5, true); + + case "observerFly": + // Free-flying observer camera + commandToClient(%client, 'setHudMode', 'Observer'); + %markerObj = Game.pickObserverSpawn(%client, true); + %transform = %markerObj.getTransform(); + %obj.setTransform(%transform); + %obj.setFlyMode(); + + case "observerStatic": + // Non-moving observer camera + %markerObj = Game.pickObserverSpawn(%client, true); + %transform = %markerObj.getTransform(); + %obj.setTransform(%transform); + + case "observerFollow": + // Observer attached to a moving object (assume player for now...) + %transform = %targetObj.getTransform(); + %obj.setOrbitMode(%targetObj, %transform, 0.5, 4.5, 4.5); + + case "observerTimeout": + commandToClient(%client, 'setHudMode', 'Observer'); + %markerObj = Game.pickObserverSpawn(%client, true); + %transform = %markerObj.getTransform(); + %obj.setTransform(%transform); + %obj.setFlyMode(); + } + %obj.mode = %mode; +} + +function findNextObserveClient(%client) +{ + %index = -1; + %count = ClientGroup.getCount(); + if (%count <= 1) + return -1; + + for (%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + if (%cl == %client.observeClient) + { + %index = %i; + break; + } + } + + //now find the next client (note, if not found, %index still == -1) + %index++; + if (%index >= %count) + %index = 0; + + %newClient = -1; + for (%i = %index; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + if (%cl != %client && %cl.player > 0) + { + %newClient = %cl; + break; + } + } + + //if we didn't find anyone, search from the beginning again + if (%newClient < 0) + { + for (%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + if (%cl != %client && %cl.player > 0) + { + %newClient = %cl; + break; + } + } + } + + //if we still haven't found anyone (new), give up.. + if (%newClient < 0 || %newClient.player == %player) + return -1; +} + +function findPrevObserveClient(%client) +{ + %index = -1; + %count = ClientGroup.getCount(); + if (%count <= 1) + return -1; + + for (%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + if (%cl == %client.observeClient) + { + %index = %i; + break; + } + } + + //now find the prev client + %index--; + if (%index < 0) + %index = %count - 1; + + %newClient = -1; + for (%i = %index; %i >= 0; %i--) + { + %cl = ClientGroup.getObject(%i); + if (%cl != %client && %cl.player > 0) + { + %newClient = %cl; + break; + } + } + + //if we didn't find anyone, search from the end again + if (%newClient < 0) + { + for (%i = %count - 1; %i >= 0; %i--) + { + %cl = ClientGroup.getObject(%i); + if (%cl != %client && %cl.player > 0) + { + %newClient = %cl; + break; + } + } + } + + //if we still haven't found anyone (new), give up.. + if (%newClient < 0 || %newClient.player == %player) + return -1; +} + +function observeClient(%client) +{ + if( $testcheats ) + { + //pass in -1 to choose any client... + commandToServer('observeClient', %client); + } +} + +function serverCmdObserveClient(%client, %target) +{ + //clear the observer fly mode var... + %client.observeFlyClient = -1; + + //cancel any scheduled update + cancel(%client.obsHudSchedule); + + // must be an observer when observing other clients + if( %client.getControlObject() != %client.camera) + return; + + //can't observer yourself + if (%client == %target) + return; + + %count = ClientGroup.getCount(); + + //can't go into observer mode if you're the only client + if (%count <= 1) + return; + + //make sure the target actually exists + if (%target > 0) + { + %found = false; + for (%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + if (%cl == %target) + { + %found = true; + break; + } + } + + if (!%found) + return; + } + + else + { + %client.observeClient = -1; + %target = findNextObserveClient(%client); + if (%target <= 0) + return; + } + + //send the message + if (%client.camera.mode !$= "observerFollow") + { + if (isObject(%client.player)) + %client.player.scriptKill(0); + + //messageAllExcept(%client, -1, 'ClientNowObserver', '\c1%1 is now an observer.', %client.name); + //messageClient(%client, 'YouNowObserver', '\c1You are now observing %1.', %target.name); + } + + %client.camera.getDataBlock().setMode(%client.camera, "observerFollow", %target.player); + %client.setControlObject(%client.camera); + + //tag is used if a client who is being observed dies... + %client.observeClient = %target; +} + +function updateObserverFlyHud(%client) +{ + //just in case there are two threads going... + cancel(%client.obsHudSchedule); + %client.observeFlyClient = -1; + + //make sure the client is supposed to be in observer fly mode... + if (!isObject(%client) || %client.team != 0 || %client.getControlObject() != %client.camera || %client.camera.mode $= "observerFollow") + return; + + //get various info about the player's eye + %srcEyeTransform = %client.camera.getTransform(); + %srcEyePoint = firstWord(%srcEyeTransform) @ " " @ getWord(%srcEyeTransform, 1) @ " " @ getWord(%srcEyeTransform, 2); + + %srcEyeVector = MatrixMulVector("0 0 0 " @ getWords(%srcEyeTransform, 3, 6), "0 1 0"); + %srcEyeVector = VectorNormalize(%srcEyeVector); + + //see if there's an enemy near our defense location... + %clientCount = 0; + %count = ClientGroup.getCount(); + %viewedClient = -1; + %clientDot = -1; + for(%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + + //make sure we find an AI who's alive and not the client + if (%cl != %client && isObject(%cl.player)) + { + //make sure the player is within range + %clPos = %cl.player.getWorldBoxCenter(); + %distance = VectorDist(%clPos, %srcEyePoint); + if (%distance <= 30) + { + //create the vector from the client to the client + %clVector = VectorNormalize(VectorSub(%clPos, %srcEyePoint)); + + //see if the dot product is greater than our current, and greater than 0.6 + %dot = VectorDot(%clVector, %srcEyeVector); + + if (%dot > 0.6 && %dot > %clientDot) + { + //make sure we're not looking through walls... + %mask = $TypeMasks::TerrainObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::StaticShapeObjectType; + %losResult = containerRayCast(%srcEyePoint, %clPos, %mask); + %losObject = GetWord(%losResult, 0); + if (!isObject(%losObject)) + { + %viewedClient = %cl; + %clientDot = %dot; + } + } + } + } + } + + if (isObject(%viewedClient)) + displayObserverHud(%client, 0, %viewedClient); + else + displayObserverHud(%client, 0); + + %client.observeFlyClient = %viewedClient; + + //schedule the next... + %client.obsHudSchedule = schedule(500, %client, updateObserverFlyHud, %client); +} + diff --git a/base/scripts/cannedChatItems.cs b/base/scripts/cannedChatItems.cs new file mode 100644 index 0000000..5c27b15 --- /dev/null +++ b/base/scripts/cannedChatItems.cs @@ -0,0 +1,277 @@ +//-------------------------------------------------------------------------- +// +// cannedChatItems.cs +// +//-------------------------------------------------------------------------- + +$MinChatItemId = 0; +$MaxChatItemId = 0; + +if ( !isObject( CannedChatItems ) ) + new SimGroup( CannedChatItems ); + +//-------------------------------------------------------------------------- +function installChatItem( %command, %text, %audioFile, %animCel, %teamOnly, %defaultkeys, %play3D ) +{ + %cmdId = getSubStr( %command, 1, strlen( %command ) - 1 ); + %name = getTaggedString(%command); + //echo( "** cmdId = " @ %cmdId @ " **" ); + if ( !isObject( $ChatTable[%cmdId] ) ) + { + if ( %animCel == 0 ) + %animation = ""; + else + %animation = "cel" @ %animCel; + + //error("defvoicebinds="@$defaultVoiceBinds@",keyPress="@%keyPress@",keyCmd="@%keyCmd); + $ChatTable[%cmdId] = new CannedChatItem() + { + name = %name; + text = %text; + audioFile = %audioFile; + animation = %animation; + teamOnly = %teamOnly; + defaultKeys = %defaultkeys; + play3D = %play3D; + }; + CannedChatItems.add( $ChatTable[%cmdId] ); + + if ( $MinChatItemId == 0 || %cmdId < $MinChatItemId ) + $MinChatItemId = %cmdId; + if ( %cmdId > $MaxChatItemId ) + $MaxChatItemId = %cmdId; + } +} + +//-------------------------------------------------------------------------- +function installChatItemCallback( %command, %callback ) +{ + %cmdId = getSubStr( %command, 1, strlen( %command ) - 1 ); + + // make sure there is a chat item created + if(isObject($ChatTable[%cmdId])) + { + for(%i = 0; (%aCallback = $ChatCallbacks[%cmdId, %i]) !$= ""; %i++) + { + // dont allow multiple instances + if(%aCallback == %callback) + return; + } + + $ChatCallbacks[%cmdId, %i] = %callback; + } +} + +function processChatItemCallbacks( %command ) +{ + %cmdId = getSubStr( %command, 1, strlen( %command ) - 1 ); + + // make sure an actual chat item + if(isObject($ChatTable[%cmdId])) + for(%i = 0; (%callback = $ChatCallbacks[%cmdId, %i]) !$= ""; %i++) + call(%callback, $ChatTable[%cmdId]); +} + +//-------------------------------------------------------------------------- +// ANIMATIONS +installChatItem( 'ChatAnimAnnoyed', "", "vqk.move", 4, false, "VGAA", true ); +installChatItem( 'ChatAnimGetSome', "", "gbl.brag", 3, false, "VGAG", true ); +installChatItem( 'ChatAnimDance', "", "gbl.woohoo", 5, false, "VGAD", true ); +installChatItem( 'ChatAnimSalute', "", "slf.tsk.generic", 1, false, "VGAS", true ); +installChatItem( 'ChatAnimWave', "", "gbl.hi", 2, false, "VGAW", true ); +installChatItem( 'ChatAnimSpec1', "", "gbl.obnoxious", 6, false, "VGAZ", true ); +installChatItem( 'ChatAnimSpec2', "", "gbl.aww", 7, false, "VGAX", true ); +installChatItem( 'ChatAnimSpec3', "", "gbl.awesome", 8, false, "VGAC", true ); + +//-------------------------------------------------------------------------- +// ATTACK +installChatItem( 'ChatCmdAttack', "Attack!", "att.attack", 0, true, "VAA", false ); +installChatItem( 'ChatCmdAttackBase', "Attack the enemy base!", "att.base", 0, true, "VAB", false ); +installChatItem( 'ChatCmdAttackChase', "Recover our flag!", "att.chase", 0, true, "VAC", false ); +installChatItem( 'ChatCmdAttackDistract', "Disrupt the enemy defense!", "att.distract", 0, true, "VAD", false ); +installChatItem( 'ChatCmdAttackFlag', "Get the enemy flag!", "att.flag", 0, true, "VAF", false ); +installChatItem( 'ChatCmdAttackGenerator', "Destroy the enemy generator!", "att.generator", 0, true, "VAG", false ); +installChatItem( 'ChatCmdAttackObjective', "Attack the objective!", "att.objective", 0, true, "VAO", false ); +installChatItem( 'ChatCmdAttackReinforce', "Reinforce the offense!", "att.reinforcements", 0, true, "VAR", false ); +installChatItem( 'ChatCmdAttackSensors', "Destroy enemy sensors!", "att.sensors", 0, true, "VAS", false ); +installChatItem( 'ChatCmdAttackTurrets', "Destroy enemy turrets!", "att.turrets", 0, true, "VAT", false ); +installChatItem( 'ChatCmdAttackWait', "Wait for my signal before attacking!", "att.wait", 0, true, "VAW", false ); +installChatItem( 'ChatCmdAttackVehicle', "Destroy the enemy vehicle!", "att.vehicle", 0, true, "VAV", false ); + +//-------------------------------------------------------------------------- +// BASE +installChatItem( 'ChatBaseTaken', "Our base is taken.", "bas.taken", 0, true, "VBT", false ); +installChatItem( 'ChatEnemyInBase', "The enemy's in our base.", "bas.enemy", 0, true, "VBE", false ); +installChatItem( 'ChatBaseClear', "Our base is clear.", "bas.clear", 0, true, "VBC", false ); +installChatItem( 'ChatCmdRetakeBase', "Retake our base!", "bas.retake", 0, true, "VBR", false ); +installChatItem( 'ChatBaseSecure', "Our base is secure.", "bas.secure", 0, true, "VBS", false ); + +//-------------------------------------------------------------------------- +// DEFENSE +installChatItem( 'ChatCmdDefendBase', "Defend our base!", "def.base", 0, true, "VDB", false ); +installChatItem( 'ChatCmdDefendCarrier', "Cover our flag carrier!", "def.carrier", 0, true, "VDC", false ); +installChatItem( 'ChatCmdDefendEntrances', "Defend the entrances!", "def.entrances", 0, true, "VDE", false ); +installChatItem( 'ChatCmdDefendFlag', "Defend our flag!", "def.flag", 0, true, "VDF", false ); +installChatItem( 'ChatCmdDefendGenerator', "Protect the generator!", "def.generator", 0, true, "VDG", false ); +installChatItem( 'ChatCmdDefendMe', "Cover me!", "def.me", 0, true, "VDM", false ); +installChatItem( 'ChatCmdDefendObjective', "Defend the objective!", "def.objective", 0, true, "VDO", false ); +installChatItem( 'ChatCmdDefendReinforce', "Reinforce our defense!", "def.reinforce", 0, true, "VDR", false ); +installChatItem( 'ChatCmdDefendSensors', "Defend our sensors!", "def.sensors", 0, true, "VDS", false ); +installChatItem( 'ChatCmdDefendTurrets', "Defend our turrets!", "def.turrets", 0, true, "VDT", false ); +installChatItem( 'ChatCmdDefendVehicle', "Defend our vehicle!", "def.vehicle", 0, true, "VDV", false ); +installChatItem( 'ChatCmdDefendNexus', "Defend the nexus!", "def.nexus", 0, true, "VDN", false ); + +//-------------------------------------------------------------------------- +// COMMAND RESPONSE +installChatItem( 'ChatCmdAcknowledged', "Command acknowledged.", "cmd.acknowledge", 0, true, "VCA", false ); +installChatItem( 'ChatCmdWhat', "What's your assignment?", "cmd.bot", 0, true, "VCW", false ); +installChatItem( 'ChatCmdCompleted', "Command completed.", "cmd.completed", 0, true, "VCC", false ); +installChatItem( 'ChatCmdDeclined', "Command declined.", "cmd.decline", 0, true, "VCD", false ); + +//-------------------------------------------------------------------------- +// ENEMY STATUS +installChatItem( 'ChatEnemyBaseDisabled', "Enemy base is disabled.", "ene.base", 0, true, "VEB", false ); +installChatItem( 'ChatEnemyDisarray', "The enemy is disrupted. Attack!", "ene.disarray", 0, true, "VED", false ); +installChatItem( 'ChatEnemyGeneratorDestroyed', "Enemy generator destroyed.", "ene.generator", 0, true, "VEG", false ); +installChatItem( 'ChatEnemyRemotesDestroyed', "Enemy remote equipment destroyed.", "ene.remotes", 0, true, "VER", false ); +installChatItem( 'ChatEnemySensorsDestroyed', "Enemy sensors destroyed.", "ene.sensors", 0, true, "VES", false ); +installChatItem( 'ChatEnemyTurretsDestroyed', "Enemy turrets destroyed.", "ene.turrets", 0, true, "VET", false ); +installChatItem( 'ChatEnemyVehicleDestroyed', "Enemy vehicle station destroyed.", "ene.vehicle", 0, true, "VEV", false ); + +//-------------------------------------------------------------------------- +// FLAG +installChatItem( 'ChatFlagGotIt', "I have the enemy flag!", "flg.flag", 0, true, "VFF", false ); +installChatItem( 'ChatCmdGiveMeFlag', "Give me the flag!", "flg.give", 0, true, "VFG", false ); +installChatItem( 'ChatCmdReturnFlag', "Retrieve our flag!", "flg.retrieve", 0, true, "VFR", false ); +installChatItem( 'ChatFlagSecure', "Our flag is secure.", "flg.secure", 0, true, "VFS", false ); +installChatItem( 'ChatCmdTakeFlag', "Take the flag from me!", "flg.take", 0, true, "VFT", false ); +installChatItem( 'ChatCmdHunterGiveFlags', "Give your flags to me!", "flg.huntergive", 0, true, "VFO", false ); +installChatItem( 'ChatCmdHunterTakeFlags', "Take my flags!", "flg.huntertake", 0, true, "VFP", false ); + +//-------------------------------------------------------------------------- +// GLOBAL COMPLIMENTS +installChatItem( 'ChatAwesome', "Awesome!", "gbl.awesome", 0, false, "VGCA", false ); +installChatItem( 'ChatGoodGame', "Good game!", "gbl.goodgame", 0, false, "VGCG", false ); +installChatItem( 'ChatNice', "Nice move!", "gbl.nice", 0, false, "VGCN", false ); +installChatItem( 'ChatYouRock', "You rock!", "gbl.rock", 0, false, "VGCR", false ); +installChatItem( 'ChatGreatShot', "Great shot!", "gbl.shooting", 0, false , "VGCS"); + +//-------------------------------------------------------------------------- +// GLOBAL +installChatItem( 'ChatHi', "Hi.", "gbl.hi", 0, false, "VGH", false ); +installChatItem( 'ChatBye', "Bye.", "gbl.bye", 0, false, "VGB", false ); +installChatItem( 'ChatGlobalYes', "Yes.", "gbl.yes", 0, false, "VGY", false ); +installChatItem( 'ChatGlobalNo', "No.", "gbl.no", 0, false, "VGN", false ); +installChatItem( 'ChatAnyTime', "Any time.", "gbl.anytime", 0, false, "VGRA", false ); +installChatItem( 'ChatDontKnow', "I don't know.", "gbl.dunno", 0, false, "VGRD", false ); +installChatItem( 'ChatOops', "Oops!", "gbl.oops", 0, false, "VGO", false ); +installChatItem( 'ChatQuiet', "Quiet!", "gbl.quiet", 0, false, "VGQ", false ); +installChatItem( 'ChatShazbot', "Shazbot!", "gbl.shazbot", 0, false, "VGS", false ); +installChatItem( 'ChatCheer', "Woohoo!", "gbl.woohoo", 0, false, "VGW", false ); +installChatItem( 'ChatThanks', "Thanks.", "gbl.thanks", 0, false, "VGRT", false ); +installChatItem( 'ChatWait', "Wait a sec.", "gbl.wait", 0, false, "VGRW", false ); + +//-------------------------------------------------------------------------- +// TRASH TALK +installChatItem( 'ChatAww', "Aww, that's too bad!", "gbl.aww", 0, false, "VGTA", false ); +installChatItem( 'ChatBrag', "I am the greatest!", "gbl.brag", 0, false, "VGTG", false ); +installChatItem( 'ChatObnoxious', "That's the best you can do?", "gbl.obnoxious", 0, false, "VGTB", false ); +installChatItem( 'ChatSarcasm', "THAT was graceful!", "gbl.sarcasm", 0, false, "VGTT", false ); +installChatItem( 'ChatLearn', "When ya gonna learn?", "gbl.when", 0, false, "VGTW", false ); + +//-------------------------------------------------------------------------- +// NEED +installChatItem( 'ChatNeedBombardier', "Need a bombardier.", "need.bombardier", 0, true, "VNB", false ); +installChatItem( 'ChatNeedCover', "Need covering fire.", "need.cover", 0, true, "VNC", false ); +installChatItem( 'ChatNeedDriver', "Need driver for ground vehicle.", "need.driver", 0, true, "VND", false ); +installChatItem( 'ChatNeedEscort', "Vehicle needs escort.", "need.escort", 0, true, "VNE", false ); +installChatItem( 'ChatNeedPilot', "Need pilot for turbograv.", "need.flyer", 0, true, "VNP", false ); +installChatItem( 'ChatNeedPassengers', "Gunship ready! Need a ride?", "need.gunship", 0, true, "VNG", false ); +installChatItem( 'ChatNeedHold', "Hold that vehicle! I'm coming!", "need.hold", 0, true, "VNH", false ); +installChatItem( 'ChatNeedRide', "I need a ride!", "need.ride", 0, true, "VNR", false ); +installChatItem( 'ChatNeedSupport', "Need vehicle support!", "need.support", 0, true, "VNS", false ); +installChatItem( 'ChatNeedTailgunner', "Need a tailgunner.", "need.tailgunner", 0, true, "VNT", false ); +installChatItem( 'ChatNeedDestination', "Where to?", "need.where", 0, true, "VNW", false ); + +//-------------------------------------------------------------------------- +// REPAIR +installChatItem( 'ChatRepairBase', "Repair our base!", "rep.base", 0, true, "VRB", false ); +installChatItem( 'ChatRepairGenerator', "Repair our generator!", "rep.generator", 0, true, "VRG", false ); +installChatItem( 'ChatRepairMe', "Repair me!", "rep.me", 0, true, "VRM", false ); +installChatItem( 'ChatRepairSensors', "Repair our sensors!", "rep.sensors", 0, true, "VRS", false ); +installChatItem( 'ChatRepairTurrets', "Repair our turrets!", "rep.turrets", 0, true, "VRT", false ); +installChatItem( 'ChatRepairVehicle', "Repair our vehicle station!", "rep.vehicle", 0, true, "VRV", false ); + +//-------------------------------------------------------------------------- +// SELF ATTACK +installChatItem( 'ChatSelfAttack', "I will attack.", "slf.att.attack", 0, true, "VSAA", false ); +installChatItem( 'ChatSelfAttackBase', "I'll attack the enemy base.", "slf.att.base", 0, true, "VSAB", false ); +installChatItem( 'ChatSelfAttackFlag', "I'll go for the enemy flag.", "slf.att.flag", 0, true, "VSAF", false ); +installChatItem( 'ChatSelfAttackGenerator', "I'll attack the enemy generator.", "slf.att.generator", 0, true, "VSAG", false ); +installChatItem( 'ChatSelfAttackSensors', "I'll attack the enemy sensors.", "slf.att.sensors", 0, true, "VSAS", false ); +installChatItem( 'ChatSelfAttackTurrets', "I'll attack the enemy turrets.", "slf.att.turrets", 0, true, "VSAT", false ); +installChatItem( 'ChatSelfAttackVehicle', "I'll attack the enemy vehicle station.", "slf.att.vehicle", 0, true, "VSAV", false ); + +//-------------------------------------------------------------------------- +// SELF DEFEND +installChatItem( 'ChatSelfDefendBase', "I'll defend our base.", "slf.def.base", 0, true, "VSDB", false ); +installChatItem( 'ChatSelfDefend', "I'm defending.", "slf.def.defend", 0, true, "VSDD", false ); +installChatItem( 'ChatSelfDefendFlag', "I'll defend our flag.", "slf.def.flag", 0, true, "VSDF", false ); +installChatItem( 'ChatSelfDefendGenerator', "I'll defend our generator.", "slf.def.generator", 0, true, "VSDG", false ); +installChatItem( 'ChatSelfDefendNexus', "I'll defend the nexus.", "slf.def.nexus", 0, true, "VSDN", false ); +installChatItem( 'ChatSelfDefendSensors', "I'll defend our sensors.", "slf.def.sensors", 0, true, "VSDS", false ); +installChatItem( 'ChatSelfDefendTurrets', "I'll defend our turrets.", "slf.def.turrets", 0, true, "VSDT", false ); +installChatItem( 'ChatSelfDefendVehicle', "I'll defend our vehicle bay.", "slf.def.vehicle", 0, true, "VSDV", false ); + +//-------------------------------------------------------------------------- +// SELF REPAIR +installChatItem( 'ChatSelfRepairBase', "I'll repair our base.", "slf.rep.base", 0, true, "VSRB", false ); +installChatItem( 'ChatSelfRepairEquipment', "I'll repair our equipment.", "slf.rep.equipment", 0, true, "VSRE", false ); +installChatItem( 'ChatSelfRepairGenerator', "I'll repair our generator.", "slf.rep.generator", 0, true, "VSRG", false ); +installChatItem( 'ChatSelfRepair', "I'm on repairs.", "slf.rep.repairing", 0, true, "VSRR", false ); +installChatItem( 'ChatSelfRepairSensors', "I'll repair our sensors.", "slf.rep.sensors", 0, true, "VSRS", false ); +installChatItem( 'ChatSelfRepairTurrets', "I'll repair our turrets.", "slf.rep.turrets", 0, true, "VSRT", false ); +installChatItem( 'ChatSelfRepairVehicle', "I'll repair our vehicle station.", "slf.rep.vehicle", 0, true, "VSRV", false ); + +//-------------------------------------------------------------------------- +// SELF TASK +installChatItem( 'ChatTaskCover', "I'll cover you.", "slf.tsk.cover", 0, true, "VSTC", false ); +installChatItem( 'ChatTaskSetupD', "I'll set up defenses.", "slf.tsk.defense", 0, true, "VSTD", false ); +installChatItem( 'ChatTaskOnIt', "I'm on it.", "slf.tsk.generic", 0, true, "VSTO", false ); +installChatItem( 'ChatTaskSetupRemote', "I'll deploy remote equipment.", "slf.tsk.remotes", 0, true, "VSTR", false ); +installChatItem( 'ChatTaskSetupSensors', "I'll deploy sensors.", "slf.tsk.sensors", 0, true, "VSTS", false ); +installChatItem( 'ChatTaskSetupTurrets', "I'll deploy turrets.", "slf.tsk.turrets", 0, true, "VSTT", false ); +installChatItem( 'ChatTaskVehicle', "I'll get a vehicle ready.", "slf.tsk.vehicle", 0, true, "VSTV", false ); + +//-------------------------------------------------------------------------- +// TARGET +installChatItem( 'ChatTargetAcquired', "Target acquired.", "tgt.acquired", 0, true, "VTA", false ); +installChatItem( 'ChatCmdTargetBase', "Target the enemy base! I'm in position.", "tgt.base", 0, true, "VTB", false ); +installChatItem( 'ChatTargetDestroyed', "Target destroyed!", "tgt.destroyed", 0, true, "VTD", false ); +installChatItem( 'ChatCmdTargetFlag', "Target their flag! I'm in position.", "tgt.flag", 0, true, "VTF", false ); +installChatItem( 'ChatTargetFire', "Fire on my target!", "tgt.my", 0, true, "VTM", false ); +installChatItem( 'ChatTargetNeed', "Need a target painted!", "tgt.need", 0, true, "VTN", false ); +installChatItem( 'ChatCmdTargetSensors', "Target their sensors! I'm in position.", "tgt.sensors", 0, true, "VTS", false ); +installChatItem( 'ChatCmdTargetTurret', "Target their turret! I'm in position.", "tgt.turret", 0, true, "VTT", false ); +installChatItem( 'ChatCmdTargetWait', "Wait! I'll be in range soon.", "tgt.wait", 0, true, "VTW", false ); + +//-------------------------------------------------------------------------- +// WARNING +installChatItem( 'ChatWarnBomber', "Incoming bomber!", "wrn.bomber", 0, true, "VWB", false ); +installChatItem( 'ChatWarnEnemies', "Incoming hostiles!", "wrn.enemy", 0, true, "VWE", false ); +installChatItem( 'ChatWarnVehicles', "Incoming vehicles!", "wrn.vehicles", 0, true, "VWV", false ); +installChatItem( 'ChatWarnShoot', "Watch where you're shooting!", "wrn.watchit", 0, true, "VWW", false ); + +//-------------------------------------------------------------------------- +// VERY QUICK +installChatItem( 'ChatWelcome', "Any time.", "vqk.anytime", 0, true, "VVA", false ); +installChatItem( 'ChatIsBaseSecure', "Is our base secure?", "vqk.base", 0, true, "VVB", false ); +installChatItem( 'ChatCeaseFire', "Cease fire!", "vqk.ceasefire", 0, true, "VVC", false ); +installChatItem( 'ChatDunno', "I don't know.", "vqk.dunno", 0, true, "VVD", false ); +installChatItem( 'ChatHelp', "HELP!", "vqk.help", 0, true, "VVH", false ); +installChatItem( 'ChatMove', "Move, please!", "vqk.move", 0, true, "VVM", false ); +installChatItem( 'ChatTeamNo', "No.", "vqk.no", 0, true, "VVN", false ); +installChatItem( 'ChatSorry', "Sorry.", "vqk.sorry", 0, true, "VVS", false ); +installChatItem( 'ChatTeamThanks', "Thanks.", "vqk.thanks", 0, true, "VVT", false ); +installChatItem( 'ChatTeamWait', "Wait, please.", "vqk.wait", 0, true, "VVW", false ); +installChatItem( 'ChatTeamYes', "Yes.", "vqk.yes", 0, true, "VVY", false ); diff --git a/base/scripts/chatMenuHud.cs b/base/scripts/chatMenuHud.cs new file mode 100644 index 0000000..67f6172 --- /dev/null +++ b/base/scripts/chatMenuHud.cs @@ -0,0 +1,235 @@ +//------------------------------------------------------------------------------ +// +// chatMenuHud.cs +// +//------------------------------------------------------------------------------ + +if ( isFile( "prefs/customVoiceBinds.cs" ) ) + $defaultVoiceBinds = false; +else + $defaultVoiceBinds = true; + +// Load in all of the installed chat items: +exec( "scripts/cannedChatItems.cs" ); + + +//------------------------------------------------------------------------------ +// Chat menu loading function: +new SimSet( ChatMenuList ); // Store all of the chat menu maps here so that we can delete them later: +function activateChatMenu( %filename ) +{ + if ( isFile( %filename ) ) + { + // Clear the old chat menu: + ChatMenuList.clear(); + + // Create the root of the new menu: + $RootChatMenu = new ActionMap(); + ChatMenuList.add( $RootChatMenu ); + $CurrentChatMenu = $RootChatMenu; + $CurrentChatMenu.optionCount = 0; + $CurrentChatMenu.bindCmd(keyboard, escape, "cancelChatMenu();", ""); + + // Build the new chat menu: + exec( %filename ); + } + else + error( "Chat menu file \"" @ %filename @ "\" not found!" ); +} + +//------------------------------------------------------------------------------ +// Chat menu building functions: +function startChatMenu(%heading) +{ + %key = firstWord(%heading); + %text = restWords(%heading); + %menu = new ActionMap(); + ChatMenuList.add( %menu ); + %cm = $CurrentChatMenu; + %cm.bindCmd(keyboard, %key, "setChatMenu(\"" @ %text @ "\", " @ %menu @ ");", ""); + %cm.option[%cm.optionCount] = %key @ ": " @ %text; + %cm.command[%cm.optionCount] = %menu; // Save this off here for later... + %cm.isMenu[%cm.optionCount] = 1; + %cm.optionCount++; + %menu.parent = %cm; + %menu.bindCmd(keyboard, escape, "cancelChatMenu();", ""); + %menu.optionCount = 0; + $CurrentChatMenu = %menu; +} + +function endChatMenu() +{ + $CurrentChatMenu = $CurrentChatMenu.parent; +} + +function addChat(%keyDesc, %command) +{ + %key = firstWord(%keyDesc); + %text = restWords(%keyDesc); + %cm = $CurrentChatMenu; + %cm.bindCmd(keyboard, %key, "issueChatCmd(" @ %cm @ "," @ %cm.optionCount @ ");", ""); + %cm.option[%cm.optionCount] = %key @ ": " @ %text; + %cm.command[%cm.optionCount] = %command; + %cm.isMenu[%cm.optionCount] = 0; + %cm.optionCount++; +} + + +//------------------------------------------------------------------------------ +// Chat menu hud functions: +$ChatMenuHudLineCount = 0; +function activateChatMenuHud( %make ) +{ + if(%make && !TaskHudDlg.isVisible()) + showChatMenuHud(); +} + +function showChatMenuHud() +{ + Canvas.pushDialog(ChatMenuHudDlg); + ChatMenuHudDlg.setVisible(true); + setChatMenu(Root, $RootChatMenu); +} + +function cancelChatMenu() +{ + $CurrentChatMenu.pop(); + $CurrentChatMenu = $RootChatMenu; + Canvas.popDialog(ChatMenuHudDlg); + ChatMenuHudDlg.setVisible(false); +} + +function setChatMenu( %name, %menu ) +{ + for ( %i = 0; %i < $ChatMenuHudLineCount; %i++ ) + chatMenuHud.remove( $ChatMenuHudText[%i] ); + + $ChatMenuHudLineCount = %menu.optionCount + 1; + chatMenuHud.extent = "170" SPC ( $ChatMenuHudLineCount * 15 ) + 8; + + // First add the menu title line: + $ChatMenuHudText[0] = new GuiTextCtrl() + { + profile = "GuiHudVoiceMenuProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "5 3"; + extent = "165 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "\c2" @ %name @ " Menu:"; + }; + chatMenuHud.add( $ChatMenuHudText[0] ); + + // Now add all of the menu options: + for ( %option = 0; %option < %menu.optionCount; %option++ ) + { + %yOffset = ( %option * 15 ) + 18; + + if ( %menu.isMenu[%option] == 1 ) + { + $ChatMenuHudText[%option + 1] = new GuiTextCtrl() + { + profile = "GuiHudVoiceMenuProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "5 " @ %yOffset; + extent = "165 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = " " @ %menu.option[%option]; + }; + } + else + { + $ChatMenuHudText[%option + 1] = new GuiTextCtrl() + { + profile = "GuiHudVoiceCommandProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "5 " @ %yOffset; + extent = "165 20"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = " " @ %menu.option[%option]; + }; + } + + chatMenuHud.add( $ChatMenuHudText[%option + 1] ); + } + + //bind "anykey" to closing the chat menu, so if you press an invalid entry, you don't accidently + //open the commander map or something... + %menu.bindCmd(keyboard, "anykey", "cancelChatMenu();", ""); + + // Pop the old menu map and push the new menu's map: + $CurrentChatMenu.pop(); + $CurrentChatMenu = %menu; + %menu.push(); +} + +function issueChatCmd( %menu, %index ) +{ + processChatItemCallbacks( %menu.command[%index] ); + commandToServer( 'CannedChat', %menu.command[%index], false ); + cancelChatMenu(); +} + + +//------------------------------------------------------------------------------ +// Canned chat handler: +function serverCmdCannedChat( %client, %command, %fromAI ) +{ + %cmdCode = getWord( %command, 0 ); + %cmdId = getSubStr( %cmdCode, 1, strlen( %command ) - 1 ); + %cmdString = getWord( %command, 1 ); + if ( %cmdString $= "" ) + %cmdString = getTaggedString( %cmdCode ); + + if ( !isObject( $ChatTable[%cmdId] ) ) + { + error( %cmdString @ " is not a recognized canned chat command." ); + return; + } + + // Build the message string: + %chatItem = $ChatTable[%cmdId]; + //%wavFile = "voice/" @ %client.voice @ "/" @ %chatItem.audioFile @ ".wav"; + + //if there is text + if (%chatItem.text !$= "" || !%chatItem.play3D) + { + %message = %chatItem.text @ "~w" @ %chatItem.audioFile; + + if ( %chatItem.teamOnly ) + cannedChatMessageTeam( %client, %client.team, '\c3%1: %2', %client.name, %message, %chatItem.defaultKeys ); + else + cannedChatMessageAll( %client, '\c4%1: %2', %client.name, %message, %chatItem.defaultKeys ); + } + + //if no text, see if the audio is to be played in 3D... + else if (%chatItem.play3D) + playTargetAudio(%client.target, addTaggedString(%chatItem.audioFile), AudioClosest3d, true); + + if( %chatItem.animation !$= "" ) + serverCmdPlayAnim(%client, %chatItem.animation); + + // Let the AI respond to the canned chat messages (from humans only) + if (!%fromAI) + CreateVoiceServerTask(%client, %cmdCode); +} + +if ( $defaultVoiceBinds ) + activateChatMenu( "scripts/voiceBinds.cs" ); +else + activateChatMenu( "prefs/customVoiceBinds.cs" ); + diff --git a/base/scripts/client.cs b/base/scripts/client.cs new file mode 100644 index 0000000..00c0955 --- /dev/null +++ b/base/scripts/client.cs @@ -0,0 +1,1906 @@ +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- + +function SAD(%password) +{ + if(%password !$= "") + commandToServer('SAD', %password); +} + +function SADSetPassword(%password) +{ + commandToServer('SADSetPassword', %password); +} + +function use(%data) +{ + // %data is currently the datablock name of the item + commandToServer('use',%data); +} + +function throw(%data) +{ + // %data is currently the datablock name of the item + commandToServer('throw',%data); +} + +function giveAll() +{ + commandToServer('giveAll'); +} + +function clientCmdSetPlayContent() +{ + if ( $LaunchMode $= "InteriorView" ) + Canvas.setContent( interiorPreviewGui ); + else + Canvas.setContent( Playgui ); +} + +function clientCmdPickTeamMenu( %teamA, %teamB ) +{ + ClientCmdSetHudMode("PickTeam"); + PickTeamAButton.text = %teamA; + PickTeamBButton.text = %teamB; + PickTeamFrame.setTitle( "Pick Team" ); + + Canvas.pushDialog( PickTeamDlg ); +} + +function clientCmdProcessPickTeam( %option ) +{ + if( %option <= 4 ) + CommandToServer( 'clientPickedTeam', %option ); + else if( %option == 5 ) + disconnect(); + + Canvas.popDialog( PickTeamDlg ); +} + +new MessageVector(HudMessageVector); + +$LastHudTarget = 0; + +function addMessageHudLine(%text) +{ + //first, see if we're "scrolled up"... + %textHeight = chatHud.profile.fontSize; + if (%textHeight <= 0) + %textHeight = 12; + %chatScrollHeight = getWord(chatHud.getGroup().getGroup().extent, 1); + %chatPosition = getWord(chatHud.extent, 1) - %chatScrollHeight + getWord(chatHud.position, 1); + %linesToScroll = mFloor((%chatPosition / %textHeight) + 0.5); + if (%linesToScroll > 0) + %origPosition = chatHud.position; + + //add the message... + while(HudMessageVector.getNumLines() && (HudMessageVector.getNumLines() >= $pref::HudMessageLogSize)) + { + %tag = HudMessageVector.getLineTag(0); + if(%tag != 0) + %tag.delete(); + HudMessageVector.popFrontLine(); + } + HudMessageVector.pushBackLine(%text, $LastHudTarget); + $LastHudTarget = 0; + + //now that we've added the message, see if we need to reset the position + if (%linesToScroll > 0) + { + chatPageDown.setVisible(true); + ChatPageDown.position = ( firstWord( outerChatHud.extent ) - 20 ) @ " " @ ( $chatScrollLenY[$chatHudLength] - 6 ); + chatHud.position = %origPosition; + } + else + chatPageDown.setVisible(false); + +} + +function pageUpMessageHud() +{ + //find out the text line height + %textHeight = chatHud.profile.fontSize; + if (%textHeight <= 0) + %textHeight = 12; + + //find out how many lines per page are visible + %chatScrollHeight = getWord(chatHud.getGroup().getGroup().extent, 1); + if (%chatScrollHeight <= 0) + return; + + %pageLines = mFloor(%chatScrollHeight / %textHeight) - 1; + if (%pageLines <= 0) + %pageLines = 1; + + //see how many lines we actually can scroll up: + %chatPosition = -1 * getWord(chatHud.position, 1); + %linesToScroll = mFloor((%chatPosition / %textHeight) + 0.5); + if (%linesToScroll <= 0) + return; + + if (%linesToScroll > %pageLines) + %scrollLines = %pageLines; + else + %scrollLines = %linesToScroll; + + //now set the position + chatHud.position = firstWord(chatHud.position) SPC (getWord(chatHud.position, 1) + (%scrollLines * %textHeight)); + + //display the pageup icon + ChatPageDown.position = ( firstWord( outerChatHud.extent ) - 20 ) @ " " @ ( $chatScrollLenY[$pref::chatHudLength] - 6 ); + chatPageDown.setVisible(true); +} + +function pageDownMessageHud() +{ + //find out the text line height + %textHeight = chatHud.profile.fontSize; + if (%textHeight <= 0) + %textHeight = 12; + + //find out how many lines per page are visible + %chatScrollHeight = getWord(chatHud.getGroup().getGroup().extent, 1); + if (%chatScrollHeight <= 0) + return; + + %pageLines = mFloor(%chatScrollHeight / %textHeight) - 1; + if (%pageLines <= 0) + %pageLines = 1; + + //see how many lines we actually can scroll down: + %chatPosition = getWord(chatHud.extent, 1) - %chatScrollHeight + getWord(chatHud.position, 1); + %linesToScroll = mFloor((%chatPosition / %textHeight) + 0.5); + if (%linesToScroll <= 0) + return; + + if (%linesToScroll > %pageLines) + %scrollLines = %pageLines; + else + %scrollLines = %linesToScroll; + + //now set the position + chatHud.position = firstWord(chatHud.position) SPC (getWord(chatHud.position, 1) - (%scrollLines * %textHeight)); + + //see if we have should (still) display the pagedown icon + if (%scrollLines < %linesToScroll) + { + chatPageDown.setVisible(true); + ChatPageDown.position = ( firstWord( outerChatHud.extent ) - 20 ) @ " " @ ( $chatScrollLenY[$Pref::chatHudLength] - 6 ); + } + else + chatPageDown.setVisible(false); +} + +$cursorControlled = true; + +function CursorOff() +{ + if ( $cursorControlled ) + lockMouse(true); + Canvas.cursorOff(); +} + +function CursorOn() +{ + if ( $cursorControlled ) + lockMouse(false); + Canvas.cursorOn(); + Canvas.setCursor(DefaultCursor); +} + +function toggleCursorControl() +{ + // If the user manually toggles the mouse control, lock or unlock for them + if ( $cursorControlled ) + $cursorControlled = false; + else + $cursorControlled = true; + lockMouse($cursorControlled); +} + +if ( $platform $= "linux" ) + GlobalActionMap.bindCmd(keyboard, "ctrl g", "", "toggleCursorControl();"); + +function PlayGui::onWake(%this) +{ + // Make sure the shell hum is off: + if ( $HudHandle['shellScreen'] !$= "" ) + { + alxStop( $HudHandle['shellScreen'] ); + $HudHandle['shellScreen'] = ""; + } + + $enableDirectInput = "1"; + enableDirectInput(); + + // chat hud dialog + Canvas.pushDialog( MainChatHud ); + chatHud.attach(HudMessageVector); + + // just update the action map here, the huds should be properly setup + updateActionMaps(); + + // hack city - these controls are floating around and need to be clamped + schedule(0, 0, "refreshCenterTextCtrl"); + schedule(0, 0, "refreshBottomTextCtrl"); + + CursorOff(); +} + +function refreshBottomTextCtrl() +{ + BottomPrintText.position = "0 0"; +} + +function refreshCenterTextCtrl() +{ + CenterPrintText.position = "0 0"; +} + +function PlayGui::onSleep(%this) +{ + Canvas.popDialog( MainChatHud ); + + //pop all possible keymaps + moveMap.pop(); + if ( isObject( passengerKeys ) ) + passengerKeys.pop(); + flyingCameraMove.pop(); + + CursorOn(); +} + +function onConnectRequestRejected( %msg ) +{ + switch$(%msg) + { + case "CR_INVALID_CONNECT_PACKET": + %error = "Network error - badly formed network packet - this should not happen!"; + case "CR_AUTHENTICATION_FAILED": + %error = "Failed to authenticate with server. Please restart TRIBES 2 and try again."; + case "CR_YOUAREBANNED": + %error = "You are not allowed to play on this server."; + case "CR_SERVERFULL": + %error = "This server is full."; + default: + %error = "Connection error. Please try another server. Error code: (" @ %msg @ ")"; + } + DisconnectedCleanup(); + MessageBoxOK( "REJECTED", %error); +} + +function onChallengeRequestRejected( %msg ) +{ + CloseMessagePopup(); + DisconnectedCleanup(); + switch$(%msg) + { + case "PASSWORD": + if ( $JoinGamePassword $= "" ) + Canvas.pushDialog( PasswordDlg ); + else + { + $JoinGamePassword = ""; + MessageBoxOK( "REJECTED", "That password is incorrect."); + } + return; + case "CHR_PROTOCOL": + %error = "Incompatible protocol version: You must upgrade your game version to play on this server."; + case "CHR_NOT_AUTHENTICATED": + %error = "This is an online server - you must be logged in to play on it."; + case "CHR_INVALID_SERVER_PACKET": + %error = "Invalid server response packet. This should not happen."; + case "WS_PeerAuthServer_ExpiredClientCertificate": + %error = "Authentication error - please restart TRIBES 2 and try again."; + default: + %error = "Connection challenge error. Please try another server. Error code: (" @ %msg @ ")"; + } + MessageBoxOK( "REJECTED", %error ); +} + +function onConnectRequestTimedOut() +{ + DisconnectedCleanup(); + MessageBoxOK( "TIMED OUT", "Your connection to the server timed out." ); +} + +function onConnectionToServerTimedOut() +{ + DisconnectedCleanup(); + MessageBoxOK( "TIMED OUT", "Your connection to the server timed out."); +} + +function onConnectionToServerLost( %msg ) +{ + DisconnectedCleanup(); + MessageBoxOK( "DISCONNECT", "Your connection to the server was lost." NL %msg); +} + +// Client voting functions: +function startNewVote(%name, %actionMsg, %arg1, %arg2, %arg3, %arg4, %playerVote) +{ + if ( %arg1 $= "" ) + %arg1 = 0; + if ( %arg2 $= "" ) + %arg2 = 0; + if ( %arg3 $= "" ) + %arg3 = 0; + if ( %arg4 $= "" ) + %arg4 = 0; + if ( %playerVote $= "" ) + %playerVote = 0; + + commandToServer('startNewVote', %name, %actionMsg, %arg1, %arg2, %arg3, %arg4, %playerVote); +} + +function setPlayerVote(%vote) +{ + commandToServer('setPlayerVote', %vote); +} + +function ClientCmdVoteSubmitted(%type) +{ + clientCmdClearBottomPrint(); + + if(%type) + alxPlay(VoteAgainstSound, 0, 0, 0); + else + alxPlay(VoteForSound, 0, 0, 0); +} +// End client voting functions. + +function clientCmdSetVoiceCodec(%codec) +{ + if (%codec $= ".v12" || %codec $= ".v24" || %codec $= ".v29") + $Audio::voiceCodec = %codec; + else + $Audio::voiceCodec = ""; + echo("Got setVoiceCodec: " @ %codec); + alxCaptureInit(); +} + +function clientCmdEndBomberSight() +{ + PlayGui.remove($bombSightHud); +} + +function clientCmdSetBeaconNames(%target, %marker, %vehicle) +{ + setBeaconNames(%target, %marker, %vehicle); +} + +function clientCmdStartBomberSight() +{ + $bombSightHud = new HudBombSight(bombSightName) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "286 206"; + extent = "67 67"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + minDisplayHeight = "20"; + }; + PlayGui.add($bombSightHud); +} + +function tempShowSpeed(%client) +{ + if(!$tmpSpeedShow) + $tmpSpeedShow = true; + else + $tmpSpeedShow = false; + commandToClient(%client, 'toggleSpeed', %client, $tmpSpeedShow); +} + +function clientCmdToggleSpeed(%client, %toggle) +{ + if(%toggle) { + %tempSpeedHud = new GuiTextCtrl(tmpSpeed) { + profile = "GuiTempSpeedProfile"; + horizSizing = "center"; + vertSizing = "top"; + position = "175 200"; + extent = "120 50"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + }; + PlayGui.add(%tempSpeedHud); + %client.updateTempSpeed(%client); + } + else { + cancel(%client.tmpSpeedCheck); + tmpSpeed.delete(); + } +} + +function GameConnection::updateTempSpeed(%client) +{ + commandToClient(%client, 'getTempSpeed'); + %client.tmpSpeedCheck = %client.schedule(100, "updateTempSpeed", %client); +} + +function clientCmdGetTempSpeed() +{ + %vel = getControlObjectSpeed(); + tmpSpeed.setValue(%vel); +} + +function clientCmdInitLoadClientFavorites() +{ + loadFavorite($pref::FavCurrentSelect); +} + +function clientCmdToggleDashHud(%val) +{ + if(!%val) { + if(isObject(vDiagramHud)) + { + vDiagramHud.delete(); + cancel(dashboardHud.speedCheck); + vSpeedBox.delete(); + } + if(isObject(vOverheadHud)) + vOverheadHud.delete(); + if(isObject(vEnergyFrame)) + vEnergyFrame.delete(); + if(isObject(vDamageFrame)) + vDamageFrame.delete(); + if(isObject(vAltitudeBox)) + { + cancel(dashboardHud.altitudeCheck); + vAltitudeBox.delete(); + } + if(isObject(vWeaponOne)) + vWeaponOne.delete(); + if(isObject(vWeaponTwo)) + vWeaponTwo.delete(); + if(isObject(vWeaponThree)) + vWeaponThree.delete(); + if(isObject(vWeapHiliteOne)) + vWeapHiliteOne.delete(); + if(isObject(vWeapHiliteTwo)) + vWeapHiliteTwo.delete(); + if(isObject(vWeapHiliteThree)) + vWeapHiliteThree.delete(); + if(isObject(vPassengerHud)) + vPassengerHud.delete(); + if(isObject(bombardierHud)) + bombardierHud.delete(); + if(isObject(turreteerHud)) + turreteerHud.delete(); + // reset in case of vehicle-specific reticle + reticleHud.setBitmap(""); + reticleFrameHud.setVisible(false); + } + dashboardHud.setVisible(%val); +} + +function clientCmdShowVehicleGauges(%vehType, %node) +{ + //if(!((%vehType $= "Bomber" || %vehType $= "Assault") && %node > 0)) + if(%node == 0) + { + // common elements that show up on all vehicle pilot HUDs + dashboardHud.diagram = new HudBitmapCtrl(vDiagramHud) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "200 10"; + extent = "176 108"; + minExtent = "8 8"; + visible = "1"; + bitmap = "gui/hud_veh_new_dash.png"; + opacity = "0.8"; + }; + dashboardHud.add(dashboardHud.diagram); + + dashboardHud.vehDiagram = new HudBitmapCtrl(vOverheadHud) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "256 0"; + extent = "128 128"; + minExtent = "8 8"; + visible = "1"; + bitmap = ""; + opacity = "1.0"; + }; + dashboardHud.add(dashboardHud.vehDiagram); + + dashboardHud.nrgBar = new HudBitmapCtrl(vEnergyFrame) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "160 80"; + extent = "118 19"; + minExtent = "8 8"; + visible = "1"; + bitmap = "gui/hud_veh_new_dashpiece_5.png"; + opacity = "0.8"; + + new HudEnergy(vEnergyBar) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "0 0"; + extent = "118 19"; + minExtent = "8 8"; + visible = "1"; + fillColor = "0.353000 0.373000 0.933000 0.800000"; + frameColor = "0.000000 1.000000 0.000000 1.000000"; + autoCenter = "0"; + autoResize = "0"; + displayMounted = true; + bitmap = "gui/hud_veh_new_dashpiece_5.png"; + verticalFill = false; + subRegion = "4 5 98 10"; + pulseRate = "500"; + pulseThreshold = "0.3"; + //modColor = "1.000000 0.500000 0.000000 1.000000"; + }; + }; + dashboardHud.add(dashboardHud.nrgBar); + + dashboardHud.dmgBar = new HudBitmapCtrl(vDamageFrame) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "361 80"; + extent = "118 19"; + minExtent = "8 8"; + visible = "1"; + bitmap = "gui/hud_veh_new_dashpiece_4.png"; + opacity = "0.8"; + + new HudDamage(vDamageBar) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "0 0"; + extent = "118 19"; + minExtent = "8 8"; + visible = "1"; + fillColor = "0.000000 1.0000 0.000000 0.800000"; + frameColor = "0.000000 1.000000 0.000000 0.000000"; + bitmap = "gui/hud_veh_new_dashpiece_4.png"; + verticalFill = false; + displayMounted = true; + opacity = "0.8"; + subRegion = "18 5 97 10"; + pulseRate = "500"; + pulseThreshold = "0.3"; + //modColor = "1.000000 0.500000 0.000000 1.000000"; + }; + }; + dashboardHud.add(dashboardHud.dmgBar); + + dashboardHud.speedBox = new GuiControl(vSpeedBox) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "210 47"; + extent = "40 40"; + minExtent = "8 8"; + visible = "1"; + + new GuiTextCtrl(vSpeedText) { + profile = "GuiDashTextProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "3 15"; + extent = "18 15"; + minExtent = "8 8"; + visible = "1"; + text = "test"; + }; + new GuiTextCtrl(vSpeedTxtLbl) { + profile = "GuiDashTextProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "18 15"; + extent = "27 15"; + minExtent = "8 8"; + visible = "1"; + text = "KPH"; + }; + }; + dashboardHud.add(dashboardHud.speedBox); + + dashboardHud.updateSpeed(); + } + + switch$ (%vehType) { + case "Shrike" : + vOverheadHud.setBitmap("gui/hud_veh_icon_shrike.png"); + // add altitude box for flying vehicles + dashboardHud.altBox = new HudBitmapCtrl(vAltitudeBox) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "371 56"; + extent = "68 22"; + minExtent = "8 8"; + bitmap = "gui/hud_veh_new_dashpiece_1.png"; + visible = "1"; + opacity = "0.8"; + + new GuiTextCtrl(vAltitudeText) { + profile = "GuiDashTextProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "19 5"; + extent = "18 15"; + minExtent = "8 8"; + visible = "1"; + text = "test"; + }; + new GuiTextCtrl(vAltitudeTxtLbl) { + profile = "GuiDashTextProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "40 5"; + extent = "12 15"; + minExtent = "8 8"; + visible = "1"; + text = "M"; + }; + }; + dashboardHud.add(dashboardHud.altBox); + dashboardHud.updateAltitude(); + // add right-hand weapons box and highlight + dashboardHud.weapon = new GuiControl(vWeapHiliteOne) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "358 22"; + extent = "80 33"; + minExtent = "8 8"; + visible = "1"; + + new HudBitmapCtrl(vWeapBkgdOne) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "0 0"; + extent = "82 40"; + minExtent = "8 8"; + bitmap = "gui/hud_veh_new_dashpiece_2.png"; + visible = "1"; + opacity = "0.8"; + + new HudBitmapCtrl(vWeapIconOne) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "28 6"; + extent = "25 25"; + minExtent = "8 8"; + bitmap = "gui/hud_blaster.png"; + visible = "1"; + opacity = "0.8"; + }; + }; + }; + dashboardHud.add(dashboardHud.weapon); + // change to shrike reticle + reticleHud.setBitmap("gui/hud_ret_shrike.png"); + reticleFrameHud.setVisible(false); + + case "Bomber" : + if(%node == 1) + { + // bombardier hud + dashboardHud.bHud = new GuiControl(bombardierHud) { + profile = "GuiDefaultProfile"; + horizSizing = "center"; + vertSizing = "top"; + position = "200 75"; + extent = "240 50"; + minExtent = "8 8"; + visible = "1"; + + new HudBitmapCtrl(vWeap1Hilite) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "18 9"; + extent = "80 44"; + minExtent = "8 8"; + visible = "1"; + bitmap = "gui/hud_veh_new_hilite_left.png"; + opacity = "0.3"; + }; + new HudBitmapCtrl(vWeap2Hilite) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "141 9"; + extent = "80 44"; + minExtent = "8 8"; + visible = "0"; + bitmap = "gui/hud_veh_new_hilite_right.png"; + opacity = "0.3"; + }; + new HudBitmapCtrl(vWeap3Hilite) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "99 9"; + extent = "40 44"; + minExtent = "8 8"; + visible = "0"; + bitmap = "gui/hud_veh_new_hilite_middle.png"; + opacity = "0.3"; + }; + + new HudBitmapCtrl(bombardierFrame) { + profile = "GuiDashBoxProfile"; + horizSizing = "center"; + vertSizing = "bottom"; + position = "20 8"; + extent = "200 40"; + minExtent = "8 8"; + visible = "1"; + bitmap = "gui/hud_veh_new_bombardier_dash.png"; + opacity = "1.0"; + + new HudBitmapCtrl(vWeaponOne) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "28 5"; + extent = "25 25"; + minExtent = "8 8"; + visible = "1"; + bitmap = "gui/hud_blaster.png"; + }; + + new HudBitmapCtrl(vWeaponTwo) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "87 6"; + extent = "25 25"; + minExtent = "8 8"; + visible = "1"; + bitmap = "gui/hud_targetlaser.png"; + }; + + new HudBitmapCtrl(vWeaponThree) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "147 6"; + extent = "25 25"; + minExtent = "8 8"; + visible = "1"; + bitmap = "gui/hud_veh_bomb.png"; + }; + }; + }; + dashboardHud.add(dashboardHud.bHud); + + dashboardHud.nrgBar = new HudBitmapCtrl(vEnergyFrame) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "110 95"; + extent = "118 19"; + minExtent = "8 8"; + visible = "1"; + flipVertical = true; + bitmap = "gui/hud_veh_new_dashpiece_5.png"; + opacity = "0.8"; + + new HudEnergy(vEnergyBar) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "0 0"; + extent = "118 19"; + minExtent = "8 8"; + visible = "1"; + fillColor = "0.353000 0.373000 0.933000 0.800000"; + frameColor = "0.000000 1.000000 0.000000 1.000000"; + autoCenter = "0"; + autoResize = "0"; + displayMounted = true; + bitmap = "gui/hud_veh_new_dashpiece_5.png"; + verticalFill = false; + subRegion = "4 5 98 10"; + pulseRate = "500"; + pulseThreshold = "0.3"; + //modColor = "1.000000 0.500000 0.000000 1.000000"; + }; + }; + dashboardHud.add(dashboardHud.nrgBar); + + dashboardHud.dmgBar = new HudBitmapCtrl(vDamageFrame) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "410 95"; + extent = "118 19"; + minExtent = "8 8"; + visible = "1"; + flipVertical = true; + bitmap = "gui/hud_veh_new_dashpiece_4.png"; + opacity = "0.8"; + + new HudDamage(vDamageBar) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "0 0"; + extent = "118 19"; + minExtent = "8 8"; + visible = "1"; + fillColor = "0.000000 1.0000 0.000000 0.800000"; + frameColor = "0.000000 1.000000 0.000000 0.000000"; + bitmap = "gui/hud_veh_new_dashpiece_4.png"; + verticalFill = false; + displayMounted = true; + opacity = "0.8"; + subRegion = "18 5 97 10"; + pulseRate = "500"; + pulseThreshold = "0.3"; + //modColor = "1.000000 0.500000 0.000000 1.000000"; + }; + }; + dashboardHud.add(dashboardHud.dmgBar); + $numVWeapons = 3; + reticleHud.setBitmap("gui/hud_ret_shrike.png"); + reticleFrameHud.setVisible(false); + } + else if(%node == 0) + { + // pilot dashboard hud + vOverheadHud.setBitmap("gui/hud_veh_icon_bomber.png"); + // add altitude box for flying vehicles + dashboardHud.altBox = new HudBitmapCtrl(vAltitudeBox) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "371 56"; + extent = "68 22"; + minExtent = "8 8"; + bitmap = "gui/hud_veh_new_dashpiece_1.png"; + visible = "1"; + opacity = "0.8"; + + new GuiTextCtrl(vAltitudeText) { + profile = "GuiDashTextProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "19 5"; + extent = "18 15"; + minExtent = "8 8"; + visible = "1"; + text = "test"; + }; + new GuiTextCtrl(vAltitudeTxtLbl) { + profile = "GuiDashTextProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "40 5"; + extent = "12 15"; + minExtent = "8 8"; + visible = "1"; + text = "M"; + }; + }; + dashboardHud.add(dashboardHud.altBox); + dashboardHud.updateAltitude(); + } + else + { + // tailgunner hud + dashboardHud.vehDiagram = new HudBitmapCtrl(vOverheadHud) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "256 0"; + extent = "128 128"; + minExtent = "8 8"; + visible = "1"; + bitmap = "gui/hud_veh_icon_bomber.png"; + opacity = "1.0"; + }; + dashboardHud.add(dashboardHud.vehDiagram); + + dashboardHud.nrgBar = new HudBitmapCtrl(vEnergyFrame) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "177 50"; + extent = "118 19"; + minExtent = "8 8"; + visible = "1"; + bitmap = "gui/hud_veh_new_dashpiece_5.png"; + flipVertical = true; + opacity = "0.8"; + + new HudEnergy(vEnergyBar) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "0 0"; + extent = "118 19"; + minExtent = "8 8"; + visible = "1"; + fillColor = "0.353000 0.373000 0.933000 0.800000"; + frameColor = "0.000000 1.000000 0.000000 1.000000"; + autoCenter = "0"; + autoResize = "0"; + displayMounted = true; + bitmap = "gui/hud_veh_new_dashpiece_5.png"; + verticalFill = false; + subRegion = "4 5 98 10"; + pulseRate = "500"; + pulseThreshold = "0.3"; + }; + }; + dashboardHud.add(dashboardHud.nrgBar); + + dashboardHud.dmgBar = new HudBitmapCtrl(vDamageFrame) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "345 50"; + extent = "118 19"; + minExtent = "8 8"; + visible = "1"; + bitmap = "gui/hud_veh_new_dashpiece_4.png"; + flipVertical = true; + opacity = "0.8"; + + new HudDamage(vDamageBar) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "0 0"; + extent = "118 19"; + minExtent = "8 8"; + visible = "1"; + fillColor = "0.000000 1.0000 0.000000 0.800000"; + frameColor = "0.000000 1.000000 0.000000 0.000000"; + bitmap = "gui/hud_veh_new_dashpiece_4.png"; + verticalFill = false; + displayMounted = true; + opacity = "0.8"; + subRegion = "18 5 97 10"; + pulseRate = "500"; + pulseThreshold = "0.3"; + }; + }; + dashboardHud.add(dashboardHud.dmgBar); + } + if(%node != 1) + { + // passenger slot "dots" + vOverheadHud.passengerHud = new GuiControl(vPassengerHud) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "0 0"; + extent = "101 101"; + minExtent = "8 8"; + visible = "1"; + + new GuiBitmapCtrl(vPassenger0Slot) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "59 24"; + extent = "10 10"; + minExtent = "3 3"; + visible = "0"; + bitmap = "gui/hud_veh_seatdot.png"; + }; + new GuiBitmapCtrl(vPassenger1Slot) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "59 39"; + extent = "10 10"; + minExtent = "3 3"; + visible = "0"; + bitmap = "gui/hud_veh_seatdot.png"; + }; + new GuiBitmapCtrl(vPassenger2Slot) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "59 84"; + extent = "10 10"; + minExtent = "3 3"; + visible = "0"; + bitmap = "gui/hud_veh_seatdot.png"; + }; + }; + vOverheadHud.add(vOverheadHud.passengerHud); + } + case "HAPC" : + if(%node == 0) + { + vOverheadHud.setBitmap("gui/hud_veh_icon_hapc.png"); + // add altitude box for flying vehicles + dashboardHud.altBox = new HudBitmapCtrl(vAltitudeBox) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "371 56"; + extent = "68 22"; + minExtent = "8 8"; + bitmap = "gui/hud_veh_new_dashpiece_1.png"; + visible = "1"; + opacity = "0.8"; + + new GuiTextCtrl(vAltitudeText) { + profile = "GuiDashTextProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "19 5"; + extent = "18 15"; + minExtent = "8 8"; + visible = "1"; + text = "test"; + }; + new GuiTextCtrl(vAltitudeTxtLbl) { + profile = "GuiDashTextProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "40 5"; + extent = "12 15"; + minExtent = "8 8"; + visible = "1"; + text = "M"; + }; + }; + dashboardHud.add(dashboardHud.altBox); + updateVehicleAltitude(); + dashboardHud.updateAltitude(); + + } + else + { + // passenger hud + dashboardHud.vehDiagram = new HudBitmapCtrl(vOverheadHud) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "256 0"; + extent = "128 128"; + minExtent = "8 8"; + visible = "1"; + bitmap = "gui/hud_veh_icon_hapc.png"; + opacity = "1.0"; + }; + dashboardHud.add(dashboardHud.vehDiagram); + + dashboardHud.nrgBar = new HudBitmapCtrl(vEnergyFrame) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "180 30"; + extent = "118 19"; + minExtent = "8 8"; + visible = "1"; + bitmap = "gui/hud_veh_new_dashpiece_5.png"; + flipVertical = true; + opacity = "0.8"; + + new HudEnergy(vEnergyBar) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "0 0"; + extent = "118 19"; + minExtent = "8 8"; + visible = "1"; + fillColor = "0.353000 0.373000 0.933000 0.800000"; + frameColor = "0.000000 1.000000 0.000000 1.000000"; + autoCenter = "0"; + autoResize = "0"; + displayMounted = true; + bitmap = "gui/hud_veh_new_dashpiece_5.png"; + verticalFill = false; + subRegion = "4 5 98 10"; + pulseRate = "500"; + pulseThreshold = "0.3"; + }; + }; + dashboardHud.add(dashboardHud.nrgBar); + + dashboardHud.dmgBar = new HudBitmapCtrl(vDamageFrame) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "342 30"; + extent = "118 19"; + minExtent = "8 8"; + visible = "1"; + bitmap = "gui/hud_veh_new_dashpiece_4.png"; + flipVertical = true; + opacity = "0.8"; + + new HudDamage(vDamageBar) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "0 0"; + extent = "118 19"; + minExtent = "8 8"; + visible = "1"; + fillColor = "0.000000 1.0000 0.000000 0.800000"; + frameColor = "0.000000 1.000000 0.000000 0.000000"; + bitmap = "gui/hud_veh_new_dashpiece_4.png"; + verticalFill = false; + displayMounted = true; + opacity = "0.8"; + subRegion = "18 5 97 10"; + pulseRate = "500"; + pulseThreshold = "0.3"; + }; + }; + dashboardHud.add(dashboardHud.dmgBar); + } + // passenger slot "dots" + vOverheadHud.passengerHud = new GuiControl(vPassengerHud) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "0 0"; + extent = "101 101"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiBitmapCtrl(vPassenger0Slot) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "59 65"; + extent = "10 10"; + minExtent = "3 3"; + visible = "0"; + setFirstResponder = "0"; + modal = "1"; + bitmap = "gui/hud_veh_seatdot.png"; + wrap = "0"; + }; + new GuiBitmapCtrl(vPassenger1Slot) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "59 84"; + extent = "10 10"; + minExtent = "3 3"; + visible = "0"; + setFirstResponder = "0"; + modal = "1"; + bitmap = "gui/hud_veh_seatdot.png"; + wrap = "0"; + }; + new GuiBitmapCtrl(vPassenger2Slot) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "38 29"; + extent = "10 10"; + minExtent = "3 3"; + visible = "0"; + setFirstResponder = "0"; + modal = "1"; + bitmap = "gui/hud_veh_seatdot.png"; + wrap = "0"; + }; + new GuiBitmapCtrl(vPassenger3Slot) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "38 50"; + extent = "10 10"; + minExtent = "3 3"; + visible = "0"; + setFirstResponder = "0"; + modal = "1"; + bitmap = "gui/hud_veh_seatdot.png"; + wrap = "0"; + }; + new GuiBitmapCtrl(vPassenger4Slot) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "80 50"; + extent = "10 10"; + minExtent = "3 3"; + visible = "0"; + setFirstResponder = "0"; + modal = "1"; + bitmap = "gui/hud_veh_seatdot.png"; + wrap = "0"; + }; + new GuiBitmapCtrl(vPassenger5Slot) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "80 29"; + extent = "10 10"; + minExtent = "3 3"; + visible = "0"; + setFirstResponder = "0"; + modal = "1"; + bitmap = "gui/hud_veh_seatdot.png"; + wrap = "0"; + }; + }; + vOverheadHud.add(vOverheadHud.passengerHud); + + case "Assault" : + if(%node == 1) + { + // turreteer hud + dashboardHud.tHud = new GuiControl(turreteerHud) { + profile = "GuiDefaultProfile"; + horizSizing = "center"; + vertSizing = "top"; + position = "225 70"; + extent = "240 50"; + minExtent = "8 8"; + visible = "1"; + + new HudBitmapCtrl(vWeap1Hilite) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "10 11"; + extent = "80 44"; + minExtent = "8 8"; + visible = "1"; + bitmap = "gui/hud_veh_new_hilite_left.png"; + opacity = "0.4"; + }; + new HudBitmapCtrl(vWeap2Hilite) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "103 11"; + extent = "80 44"; + minExtent = "8 8"; + visible = "0"; + bitmap = "gui/hud_veh_new_hilite_right.png"; + opacity = "0.4"; + }; + + new HudBitmapCtrl(turreteerFrame) { + profile = "GuiDashBoxProfile"; + horizSizing = "center"; + vertSizing = "bottom"; + position = "20 8"; + extent = "152 36"; + minExtent = "8 8"; + visible = "1"; + bitmap = "gui/hud_veh_new_tankgunner_dash.png"; + opacity = "0.8"; + + new HudBitmapCtrl(vWeaponOne) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "25 8"; + extent = "25 25"; + minExtent = "8 8"; + visible = "1"; + bitmap = "gui/hud_chaingun.png"; + }; + + new HudBitmapCtrl(vWeaponTwo) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "99 8"; + extent = "25 25"; + minExtent = "8 8"; + visible = "1"; + bitmap = "gui/hud_mortor.png"; + }; + }; + }; + dashboardHud.add(dashboardHud.tHud); + + dashboardHud.nrgBar = new HudBitmapCtrl(vEnergyFrame) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "134 95"; + extent = "118 19"; + minExtent = "8 8"; + visible = "1"; + flipVertical = true; + bitmap = "gui/hud_veh_new_dashpiece_5.png"; + opacity = "0.8"; + + new HudEnergy(vEnergyBar) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "0 0"; + extent = "118 19"; + minExtent = "8 8"; + visible = "1"; + fillColor = "0.353000 0.373000 0.933000 0.800000"; + frameColor = "0.000000 1.000000 0.000000 1.000000"; + autoCenter = "0"; + autoResize = "0"; + displayMounted = true; + bitmap = "gui/hud_veh_new_dashpiece_5.png"; + verticalFill = false; + subRegion = "4 5 98 10"; + pulseRate = "500"; + pulseThreshold = "0.3"; + //modColor = "1.000000 0.500000 0.000000 1.000000"; + }; + }; + dashboardHud.add(dashboardHud.nrgBar); + + dashboardHud.dmgBar = new HudBitmapCtrl(vDamageFrame) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "390 95"; + extent = "118 19"; + minExtent = "8 8"; + visible = "1"; + flipVertical = true; + bitmap = "gui/hud_veh_new_dashpiece_4.png"; + opacity = "0.8"; + + new HudDamage(vDamageBar) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "0 0"; + extent = "118 19"; + minExtent = "8 8"; + visible = "1"; + fillColor = "0.000000 1.0000 0.000000 0.800000"; + frameColor = "0.000000 1.000000 0.000000 0.000000"; + bitmap = "gui/hud_veh_new_dashpiece_4.png"; + verticalFill = false; + displayMounted = true; + opacity = "0.8"; + subRegion = "18 5 97 10"; + pulseRate = "500"; + pulseThreshold = "0.3"; + //modColor = "1.000000 0.500000 0.000000 1.000000"; + }; + }; + dashboardHud.add(dashboardHud.dmgBar); + + $numVWeapons = 2; + // add tank chaingun reticle + reticleHud.setBitmap("gui/hud_ret_tankchaingun.png"); + reticleFrameHud.setVisible(false); + } + else + { + // node 0 == driver + vOverheadHud.setBitmap("gui/hud_veh_icon_assault.png"); + // passenger slot "dots" + vOverheadHud.passengerHud = new GuiControl(vPassengerHud) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "0 0"; + extent = "101 101"; + minExtent = "8 8"; + visible = "1"; + + new GuiBitmapCtrl(vPassenger0Slot) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "64 30"; + extent = "10 10"; + minExtent = "3 3"; + visible = "0"; + bitmap = "gui/hud_veh_seatdot.png"; + }; + new GuiBitmapCtrl(vPassenger1Slot) { + profile = "GuiDashBoxProfile"; + horizSizing = "right"; + vertSizing = "top"; + position = "53 53"; + extent = "10 10"; + minExtent = "3 3"; + visible = "0"; + bitmap = "gui/hud_veh_seatdot.png"; + }; + }; + vOverheadHud.add(vOverheadHud.passengerHud); + } + + case "Hoverbike" : + vOverheadHud.setBitmap("gui/hud_veh_icon_hoverbike.png"); + + case "MPB" : + vOverheadHud.setBitmap("gui/hud_veh_icon_mpb.png"); + + } + if(%node == 0) + vDiagramHud.setVisible(true); + else + if(isObject(vDiagramHud)) + vDiagramHud.setVisible(false); +} + +function GuiControl::updateAltitude(%this) +{ + %alt = getControlObjectAltitude(); + vAltitudeText.setValue(%alt); + %this.altitudeCheck = %this.schedule(500, "updateAltitude"); +} + +function GuiControl::updateSpeed(%this) +{ + %vel = getControlObjectSpeed(); + // convert from m/s to km/h + %cVel = mFloor(%vel * 3.6); // m/s * (3600/1000) = km/h + vSpeedText.setValue(%cVel); + %this.speedCheck = %this.schedule(500, "updateSpeed"); +} + +//function clientCmdShowVehicleWeapons(%vehicleType) +//{ + // all vehicle weapons are energy based; a -1 displays an infinity symbol + // for that weapon's ammo amount + //switch$ (%vehicleType) + //{ + // case "ScoutFlyer": + // // blaster + // vWeaponsBox.addWeapon(0, -1); + // case "BomberFlyer": + // // plasma, bomb and targeting laser + // vWeaponsBox.addWeapon(1, -1); + // vWeaponsBox.addWeapon(3, -1); + // vWeaponsBox.addWeapon(4, -1); + // case "AssaultVehicle": + // vWeaponsBox.addWeapon(1, -1); + // vWeaponsBox.addWeapon(3, -1); + //} + //vWeaponsBox.setVisible(true); +//} + +// if set, then static shapes with data member 'noIndividualDamage' set will +// not display their damage bars +function clientCmdProtectingStaticObjects(%val) +{ + NavHud.protectedStatics = %val; +} + +function clientCmdCheckPassengers(%pString) +{ + // since each slot is represented by a "1" or a "0" followed by a space, the length + // of the string divided by 2 is equal to the number of slots in the vehicle + %numSlots = strlen(%pString) / 2; + for(%i = 0; %i < %numSlots; %i++) + { + %pass = "vPassenger" @ %i @ "Slot"; + if(isObject(%pass)) + if(getWord(%pString, %i) $= "1") + %pass.setVisible(true); + else + %pass.setVisible(false); + } +} + +function clientCmdShowPassenger(%slot, %full) +{ + %dotNum = "vPassenger" @ %slot @ "Slot"; + if(isObject(%dotNum)) + %dotNum.setVisible(%full); +} + +function clientCmdClearPassengers() +{ + for(%i = 1; %i < 6; %i++) + { + %pass = "vPassenger" @ %i @ "Slot"; + %pass.setVisible(false); + } +} + +addMessageCallback( 'MsgMissionDropInfo', handleDropInfoMessage ); +addMessageCallback( 'MsgTeamList', handleTeamListMessage ); +addMessageCallback( 'LeaveMissionArea', HandleLeaveMissionAreaAlarmMessage ); +addMessageCallback( 'EnterMissionArea', HandleEnterMissionAreaAlarmMessage ); +addMessageCallback( 'msgBountyStreakBonus', HandleBountyStreakMessage ); +addMessageCallback( 'onClientKicked', handleIveBeenKicked ); +addMessageCallback( 'onClientBanned', handleIveBeenBanned ); +addMessageCallback( 'msgDeploySensorRed', clientDeploySensorRed ); +addMessageCallback( 'msgDeploySensorGrn', clientDeploySensorGrn ); +addMessageCallback( 'msgDeploySensorOff', clientDeploySensorOff ); +addMessageCallback( 'msgPackIconOff', clientPackIconOff ); +addMessageCallback( 'MsgForceObserver', HandleForceObserver ); + +function HandleForceObserver( %msgType, %msgString ) +{ + +} + +function handleIveBeenBanned(%msgType, %msgString) +{ + DisconnectedCleanup(); + MessageBoxOk( "DISCONNECT", "You have been banned from this server.", "Disconnect();"); +} + +function handleIveBeenKicked(%msgType, %msgString) +{ + DisconnectedCleanup(); + MessageBoxOk( "DISCONNECT", "You have been kicked out of the game.", "Disconnect();"); +} + +function clientDeploySensorRed() +{ + deploySensor.color = "255 0 0"; + deploySensor.setVisible(true); +} + +function clientDeploySensorGrn() +{ + deploySensor.color = "0 255 0"; + deploySensor.setVisible(true); +} + +function clientDeploySensorOff() +{ + deploySensor.setVisible(false); +} + +function clientPackIconOff() +{ + backpackIcon.setBitmap(""); + backpackFrame.setVisible(false); + backpackText.setValue(""); + backpackText.setVisible(false); + backpackFrame.pack = false; +} + +function HandleBountyStreakMessage(%msgType, %msgString, %client, %streak, %award) +{ + %delay = alxGetWaveLen("fx/misc/bounty_bonus.wav"); + %overlap = 0.50; + + alxPlay(BountyBellSound, 0, 0, 0); //first bell + for (%loop = 1; %loop < %award; %loop++) //any repetitions, overlapped. + schedule((%delay * %loop) * %overlap, 0, "alxPlay", BountyBellSound, 0, 0, 0); +} + +function HandleLeaveMissionAreaAlarmMessage(%msgType, %msgString) +{ + //Tinman - sounds are now sent by the individual game script + //if(ServerConnection.OutOfBoundsHandle $= "") + // ServerConnection.OutOfBoundsHandle = alxPlay(OutOfBoundsSound, 0, 0, 0); +} + +function HandleEnterMissionAreaAlarmMessage(%msgType, %msgString) +{ + //Tinman - sounds are now sent by the individual game script + //if(ServerConnection.OutOfBoundsHandle !$= "") + // alxStop(ServerConnection.OutOfBoundsHandle); + // + //ServerConnection.OutOfBoundsHandle = ""; +} + +function handleDropInfoMessage( %msgType, %msgString, %map, %gameType, %serverName ) +{ + $clServerName = %serverName; + $clMissionName = %map; + $clMissionType = %gameType; +} + +function handleTeamListMessage( %msgType, %msgString, %teamCount, %teamList ) +{ + // Save off the team names: + $clTeamCount = %teamCount; + for ( %i = 0; %i < %teamCount; %i++ ) + $clTeamScore[%i + 1, 0] = getRecord( %teamList, %i ); + + // Initialize the lobby: + LobbyPlayerList.initColumns(); +} + +//---------------------------------------------------------------------------- + +function clientCmdStartEffect( %effect ) +{ + // Put in iterations + StartEffect( %effect ); +} + +function clientCmdStopEffect( %effect ) +{ + StopEffect( %effect ); +} + +function clientCmdPickTeam() +{ + +} + +function clientCmdMissionStartPhase1(%seq, %missionName, %musicTrack) +{ + echo( "got client StartPhase1..." ); + + // Reset the loading progress controls: + LoadingProgress.setValue( 0 ); + DB_LoadingProgress.setValue( 0 ); + LoadingProgressTxt.setValue( "LOADING MISSION" ); + DB_LoadingProgressTxt.setValue( "LOADING MISSION" ); + + clientCmdPlayMusic(%musicTrack); + commandToServer('MissionStartPhase1Done', %seq); + clientCmdResetCommandMap(); +} + +function clientCmdMissionStartPhase2(%seq) +{ + // clean some stuff up. + MessageHud.close(); + purgeResources(); + cls(); + commandToServer('MissionStartPhase2Done', %seq); +} + +function clientCmdMissionStartPhase3(%seq, %missionName) +{ + $MSeq = %seq; + + //Reset Inventory Hud... + if($Hud['inventoryScreen'] !$= "") + { + %favList = $Hud['inventoryScreen'].data[0, 1].type TAB $Hud['inventoryScreen'].data[0, 1].getValue(); + for ( %i = 1; %i < $Hud['inventoryScreen'].count; %i++ ) + if($Hud['inventoryScreen'].data[%i, 1].getValue() $= invalid) + %favList = %favList TAB $Hud['inventoryScreen'].data[%i, 1].type TAB "EMPTY"; + else + %favList = %favList TAB $Hud['inventoryScreen'].data[%i, 1].type TAB $Hud['inventoryScreen'].data[%i, 1].getValue(); + commandToServer( 'setClientFav', %favList ); + } + else + commandToServer( 'setClientFav', $pref::Favorite[$pref::FavCurrentSelect]); + + // needed? + $MissionName = %missionName; + //commandToServer( 'getScores' ); + + // only show dialog if actually lights + if(lightScene("sceneLightingComplete", $LaunchMode $= "SceneLight" ? "forceWritable" : "")) + { + error("beginning SceneLighting...."); + schedule(1, 0, "updateLightingProgress"); + $lightingMission = true; + LoadingProgress.setValue( 0 ); + DB_LoadingProgress.setValue( 0 ); + LoadingProgressTxt.setValue( "LIGHTING MISSION" ); + DB_LoadingProgressTxt.setValue( "LIGHTING MISSION" ); + $missionLightStarted = true; + Canvas.repaint(); + } +} + +function clientCmdMissionEnd(%seq) +{ + alxStopAll(); + // disable mission lighting if it's going (since the interiors will be gone in a sec) + $lightingMission = false; + $sceneLighting::terminateLighting = true; +} + +function clientCmdSetPowerAudioProfiles(%up, %down) +{ + setPowerAudioProfiles(%up, %down); +} + +function ghostAlwaysStarted(%ghostCount) +{ + echo( "starting to ghost " @ %ghostCount @ " server objects...."); + + LoadingProgress.setValue( 0 ); + DB_LoadingProgress.setValue( 0 ); + LoadingProgressTxt.setValue( "LOADING OBJECTS" ); + DB_LoadingProgressTxt.setValue( "LOADING OBJECTS" ); + Canvas.repaint(); + $ghostCount = %ghostCount; + $ghostsRecvd = 0; +} + +function ghostAlwaysObjectReceived() +{ + $ghostsRecvd++; + %pct = $ghostsRecvd / $ghostCount; + LoadingProgress.setValue( %pct ); + DB_LoadingProgress.setValue( %pct ); + Canvas.repaint(); +} + +function updateLightingProgress() +{ + if( $SceneLighting::lightingProgress == 0) + { + if($sceneLightStarted) + { + $sceneLightStarted = false; + } + else + $SceneLighting::lightingProgress = 1; + } + + LoadingProgress.setValue( $SceneLighting::lightingProgress ); + DB_LoadingProgress.setValue( $SceneLighting::lightingProgress ); + if($lightingMission) + $lightingProgressThread = schedule(1, 0, "updateLightingProgress"); +} + +function sceneLightingComplete() +{ + LoadingProgress.setValue( 1 ); + DB_LoadingProgress.setValue( 1 ); + + echo("Scenelighting done..."); + $lightingMission = false; + + cleanUpHuds(); + + if($LaunchMode $= "SceneLight") + { + quit(); + return; + } + + clientCmdResetHud(); + %numChannels = $pref::Audio::microphoneEnabled ? $pref::audio::voiceChannels : 0; + commandToServer('SetVoiceChannels', %numChannels); + commandToServer('MissionStartPhase3Done', $MSeq); +} + +function ClientReceivedDataBlock(%index, %total) +{ + %pct = %index / %total; + LoadingProgress.setValue( %pct ); + LoadingProgress.setValue( %pct ); + Canvas.repaint(); +} + +function GameConnection::setLagIcon(%conn, %state) +{ + if(%conn.getAddress() $= "Local") + return; + + if (%state $= "true") + $showLagIcon = true; + else + $showLagIcon = false; + + //if both icons are not visible, then don't do anything... (probably the F2 score or inv screen is up...) + if (!clockHud.isVisible() && !lagHudIndicator.isVisible()) + return; + + if (%state $= "true") + { + clockHud.setVisible(false); + lagHudIndicator.setVisible(true); + } + else + { + clockHud.setVisible(true); + lagHudIndicator.setVisible(false); + } + + sensorHud.update(); +} + +function GameConnection::onTargetLocked( %con, %state ) +{ + if( %state $= "true" ) + { + if( !%con.targetTone ) + %con.targetTone = alxPlay( "sLockedTone", 0, 0, 0 ); + } + else + { + if( %con.targetTone $= "" ) + return; + + if( %con.targetTone ) + alxStop( %con.targetTone ); + + %con.targetTone = ""; + } +} + +function GameConnection::onTrackingTarget( %con, %state ) +{ + if( %state $= "true" ) + { + if( !%con.trackingTargetTone ) + %con.trackingTargetTone = alxPlay( "sSearchingTone", 0, 0, 0 ); + } + else + { + if( %con.trackingTargetTone $= "" ) + return; + + if( %con.trackingTargetTone ) + alxStop( %con.trackingTargetTone ); + + %con.TrackingTargetTone = ""; + } +} + +function GameConnection::onLockWarning( %con, %state ) +{ + if( %state $= "true" ) + { + if( !%con.lockWarningTone ) + %con.lockWarningTone = alxPlay( "sMissileLockWarningTone", 0, 0, 0 ); + + } + else + { + if( %con.lockWarningTone $= "" ) + return; + + if( %con.lockWarningTone ) + alxStop( %con.lockWarningTone ); + + %con.lockWarningTone = ""; + } +} + +function GameConnection::onHomeWarning( %con, %state ) +{ + if( %state $= "true" ) + { + if( !%con.homeWarningTone ) + %con.homeWarningTone = alxPlay( "sMissileHomingWarningTone", 0, 0, 0 ); + } + else + { + if( %con.homeWarningTone $= "" ) + return; + + if( %con.homeWarningTone ) + alxStop( %con.homeWarningTone ); + + %con.homeWarningTone = ""; + } +} + +function GameConnection::initialControlSet(%this) +{ + if ( $LaunchMode $= "InteriorView" ) + { + Canvas.setContent( InteriorPreviewGui ); + return; + } + + if( Canvas.getContent() != PlayGui.getId() ) + { + Canvas.setContent( PlayGui ); + Canvas.pushDialog( MainChatHud ); + CommandToServer('PlayContentSet'); + } +} + + diff --git a/base/scripts/clientAudio.cs b/base/scripts/clientAudio.cs new file mode 100644 index 0000000..5b36aee --- /dev/null +++ b/base/scripts/clientAudio.cs @@ -0,0 +1,413 @@ +//-------------------------------------------------------------------------- +// +// +// +//-------------------------------------------------------------------------- + +// ordered list of providers +$AudioProviders[0, name] = "Creative Labs EAX 2 (TM)"; +$AudioProviders[0, isHardware] = true; +$AudioProviders[0, enableEnvironment] = true; + +$AudioProviders[1, name] = "Creative Labs EAX (TM)"; +$AudioProviders[1, isHardware] = true; +$AudioProviders[1, enableEnvironment] = true; + +$AudioProviders[2, name] = "DirectSound3D Hardware Support"; +$AudioProviders[2, isHardware] = true; +$AudioProviders[2, enableEvironment] = false; + +$AudioProviders[3, name] = "Miles Fast 2D Positional Audio"; +$AudioProviders[3, isHardware] = false; +$AudioProviders[3, enableEvironment] = false; + +// defaults +$Audio::voiceCodec = ".v12"; +$Audio::defaultDriver = "miles"; +$Audio::innerFalloffScale = "1.0"; +$Audio::dynamicMemorySize = (1 << 20); + +function audioIsHardwareProvider(%provider) +{ + for(%i = 0; $AudioProviders[%i, name] !$= ""; %i++) + if(%provider $= $AudioProviders[%i, name]) + return($AudioProviders[%i, isHardware]); + return(false); +} + +function audioIsEnvironmentProvider(%provider) +{ + for(%i = 0; $AudioProviders[%i, name] !$= ""; %i++) + if(%provider $= $AudioProviders[%i, name]) + return($AudioProviders[%i, enableEnvironment]); + return(false); +} + +function audioUpdateProvider(%provider) +{ + // check if should be using hardware settings by default + alxDisableOuterFalloffs(false); + for(%i = 0; $AudioProviders[%i, name] !$= ""; %i++) + { + if(%provider $= $AudioProviders[%i, name]) + { + // hardware + if($AudioProviders[%i, isHardware]) + { + alxDisableOuterFalloffs(true); + alxSetInnerFalloffScale($Audio::innerFalloffScale); + } + + // environment + %enable = $pref::Audio::environmentEnabled && audioIsEnvironmentProvider(%provider); + alxEnableEnvironmental(%enable); + + break; + } + } +} + +function initAudio() +{ + $Audio::originalProvider = alxGetContexti(ALC_PROVIDER); + + %providerName = alxGetContextstr(ALC_PROVIDER_NAME, $Audio::originalProvider); + audioUpdateProvider(%providerName); + + // voice? + if($pref::Audio::enableVoiceCapture) + $Audio::captureInitialized = alxCaptureInit(); + + // Set volume based on prefs: + alxListenerf( AL_GAIN_LINEAR, $pref::Audio::masterVolume ); + alxContexti( ALC_BUFFER_DYNAMIC_MEMORY_SIZE, $Audio::dynamicMemorySize ); + + alxSetChannelVolume( $EffectAudioType, $pref::Audio::effectsVolume ); + alxSetChannelVolume( $VoiceAudioType, $pref::Audio::voiceVolume ); + alxSetChannelVolume( $ChatAudioType, $pref::Audio::radioVolume ); + alxSetChannelVolume( $MusicAudioType, $pref::Audio::musicVolume ); + alxSetChannelVolume( $GuiAudioType, $pref::Audio::guiVolume ); + alxSetChannelVolume( $RadioAudioType, $pref::Audio::radioVolume ); + + alxSetCaptureGainScale( $pref::Audio::captureGainScale ); +} + +if($Audio::initialized) + initAudio(); + +//-------------------------------------------------------------------------- +// MP3-Music player +new ScriptObject(MusicPlayer) +{ + class = MP3Audio; + currentTrack = ""; + repeat = true; +}; + +function MP3Audio::stop(%this) +{ + alxStopMusic(); +} + +function getRandomTrack() +{ + %val = mFloor(getRandom(0, 4)); + switch(%val) + { + case 0: + return "lush"; + case 1: + return "volcanic"; + case 2: + return "badlands"; + case 3: + return "ice"; + case 4: + return "desert"; + } +} + +function MP3Audio::play(%this) +{ + if(%this.currentTrack $= "") + %this.currentTrack = getRandomTrack(); + %this.playTrack(%this.currentTrack); +} + +function MP3Audio::playTrack(%this, %trackName) +{ + %this.currentTrack = %trackName; + if($pref::Audio::musicEnabled) + alxPlayMusic("base\\music\\" @ %trackName @ ".mp3"); +} + +function finishedMusicStream(%stopped) +{ + if(%stopped $= "true") + return; + + if(MusicPlayer.repeat) + MusicPlayer.playTrack(MusicPlayer.currentTrack); +} + +function clientCmdPlayMusic(%trackname) +{ + if(%trackname !$= "") + MusicPlayer.playTrack(%trackName); +} + +function clientCmdStopMusic() +{ + MusicPlayer.stop(); +} + +//-------------------------------------- +// Audio Profiles +// +new AudioDescription(AudioGui) +{ + volume = 1.0; + isLooping= false; + is3D = false; + type = $GuiAudioType; +}; + +new AudioDescription(AudioChat) +{ + volume = 1.0; + isLooping= false; + is3D = false; + type = $ChatAudioType; +}; + +new AudioDescription(AudioGuiLoop) +{ + volume = 1.0; + isLooping= true; + is3D = false; + type = $GuiAudioType; +}; + +new AudioProfile(sButtonDown) +{ + filename = "gui/buttonDown.wav"; + description = "audioGui"; + preload = true; +}; + +new AudioProfile(sButtonOver) +{ + filename = "gui/buttonOver.wav"; + description = "audioGui"; + preload = true; +}; + +new AudioProfile(sGotMail) +{ + filename = "gui/youvegotmail.wav"; + description = "audioGui"; + preload = true; +}; + +new AudioProfile(sLaunchMenuOpen) +{ + filename = "gui/launchMenuOpen.wav"; + description = "audioGui"; + preload = true; +}; + +new AudioProfile(sLaunchMenuOver) +{ + filename = "gui/buttonOver.wav"; + description = "audioGui"; + preload = true; +}; + +new AudioProfile(VoteForSound) +{ + filename = "gui/buttonOver.wav"; + description = "audioGui"; + preload = true; +}; +new AudioProfile(VoteAgainstSound) +{ + filename = "gui/buttonOver.wav"; + description = "audioGui"; + preload = true; +}; + +new AudioProfile(TaskAcceptedSound) +{ + filename = "fx/misc/command_accept.wav"; + description = "audioGui"; + preload = true; +}; +new AudioProfile(TaskDeclinedSound) +{ + filename = "fx/misc/command_deny.wav"; + description = "audioGui"; + preload = true; +}; + +new AudioProfile(TaskCompletedSound) +{ + filename = "fx/misc/command_complete.wav"; + description = "audioGui"; + preload = true; +}; + +//-------------------------------------------------------------------------- +//-------------------------------------- Shapebase lock/homing tones... +new AudioDescription(AudioLockTones) +{ + volume = 1.0; + isLooping= true; + is3D = false; + type = $EffectAudioType; +}; + +new AudioProfile(sSearchingTone) +// Sound that the FIRER hears when SEEKING a "hot" target +{ + filename = "fx/weapons/missile_firer_search.wav"; + description = "audioLockTones"; + preload = true; +}; + +new AudioProfile(sLockedTone) +// Sound that the FIRER hears when a "hot" target is LOCKED +{ + filename = "fx/weapons/missile_firer_lock.wav"; + description = "audioLockTones"; + preload = true; +}; + +new AudioProfile(sMissileLockWarningTone) +// Sound that the TARGET hears when a LOCK has been achieved +{ + filename = "fx/weapons/missile_target_lock.wav"; + description = "audioLockTones"; + preload = true; +}; + +new AudioProfile(sMissileHomingWarningTone) +// Sound that the TARGET hears when a missile has been locked onto the target and is IN THE AIR +{ + filename = "fx/weapons/missile_target_inbound.wav"; + description = "audioLockTones"; + preload = true; +}; + +//-------------------------------------------------------------------------- +new AudioProfile(HudInventoryHumSound) +{ + filename = "gui/inventory_hum.wav"; + description = "AudioGuiLoop"; + preload = true; +}; + +new AudioProfile(HudInventoryActivateSound) +{ + filename = "gui/inventory_on.wav"; + description = "AudioGui"; + preload = true; +}; + +new AudioProfile(HudInventoryDeactivateSound) +{ + filename = "gui/inventory_off.wav"; + description = "AudioGui"; + preload = true; +}; + +new AudioProfile(CommandMapHumSound) +{ + filename = "gui/command_hum.wav"; + description = "AudioGuiLoop"; + preload = true; +}; + +new AudioProfile(CommandMapActivateSound) +{ + filename = "gui/command_on.wav"; + description = "AudioGui"; + preload = true; +}; + +new AudioProfile(CommandMapDeactivateSound) +{ + filename = "gui/command_off.wav"; + description = "AudioGui"; + preload = true; +}; + +new AudioProfile(ShellScreenHumSound) +{ + filename = "gui/shell_hum.wav"; + description = "AudioGuiLoop"; + preload = true; +}; + +new AudioProfile(LoadingScreenSound) +{ + filename = "gui/loading_hum.wav"; + description = "AudioGuiLoop"; + preload = true; +}; + +new AudioProfile(VotePassSound) +{ + filename = "fx/misc/vote_passes.wav"; + description = "AudioGui"; + preload = true; +}; + +new AudioProfile(VoteNotPassSound) +{ + filename = "fx/misc/vote_fails.wav"; + description = "AudioGui"; + preload = true; +}; + +new AudioProfile(AdminForceSound) +{ + filename = "fx/misc/bounty_completed.wav"; + description = "AudioGui"; + preload = true; +}; + +new AudioProfile(VoteInitiatedSound) +{ + filename = "fx/misc/vote_initiated.wav"; + description = "AudioGui"; + preload = true; +}; + +// Tinman - not being used anymore... +// new AudioProfile(OutOfBoundsSound) +// { +// filename = "gui/vote_nopass.wav"; +// description = "AudioGuiLoop"; +// preload = true; +// }; + +new AudioProfile(BountyBellSound) +{ + filename = "fx/misc/bounty_bonus.wav"; + description = "AudioGui"; + preload = true; +}; + +new AudioProfile(SiegeSwitchSides) +{ + filename = "fx/misc/siege_switching.wav"; + description = "AudioGui"; + preload = true; +}; + +new AudioProfile(ObjectiveCompleted) +{ + filename = "fx/misc/bounty_bonus.wav"; + description = "AudioGui"; + preload = true; +}; diff --git a/base/scripts/clientDefaults.cs b/base/scripts/clientDefaults.cs new file mode 100644 index 0000000..61160ba --- /dev/null +++ b/base/scripts/clientDefaults.cs @@ -0,0 +1,145 @@ +$JoinGamePort = 28000; +$pref::Audio::drivers = "Miles"; +$pref::Audio::enableVoiceCapture = 1; +$pref::Audio::forceMaxDistanceUpdate = 0; +$pref::Audio::voiceChannels = 2; +$pref::Audio::activeDriver = "default"; +$pref::Audio::environmentEnabled = 0; +$pref::Audio::microphoneEnabled = 1; +$pref::Audio::musicEnabled = 1; +$pref::Audio::musicVolume = 0.8; +$pref::Audio::masterVolume = 0.8; +$pref::Audio::effectsVolume = 1.0; +$pref::Audio::voiceVolume = 1.0; +$pref::Audio::guiVolume = 0.8; +$pref::Audio::radioVolume = 0.8; +$pref::Audio::captureGainScale = 1.0; +$pref::currentChatMenu = "defaultChatMenu"; +$pref::Email::Column0 = 30; +$pref::Email::Column1 = 250; +$pref::Email::Column2 = 250; +$pref::Email::Column3 = 150; +$pref::Email::SortColumnKey = 3; +$pref::Email::SortInc = 1; +$pref::EnableBadWordFilter = 1; +$pref::FavNames0 = "SCOUT ASSASSIN"; +$pref::FavNames1 = "SCOUT SNIPER"; +$pref::FavNames2 = "SCOUT DEFENSE"; +$pref::FavNames3 = "ASSAULT OFFENSE"; +$pref::FavNames4 = "ASSAULT DEPLOYER"; +$pref::FavNames5 = "ASSAULT DEFENSE"; +$pref::FavNames6 = "TAILGUNNER"; +$pref::FavNames7 = "JUGGERNAUT OFFENSE"; +$pref::FavNames8 = "JUGGERNAUT DEPLOYER"; +$pref::FavNames9 = "JUGGERNAUT DEFENSE"; +$pref::FavNames10 = "SCOUT FLAG CHASER"; +$pref::FavNames11 = "ASSAULT DESTROYER"; +$pref::FavNames12 = "LANDSPIKE DEPLOYER"; +$pref::FavNames13 = "INVENTORY DEPLOYER"; +$pref::FavNames14 = "FORWARD ASSAULT"; +$pref::FavNames15 = "EARLY WARNING"; +$pref::FavNames16 = "DECOY"; +$pref::FavNames17 = "HEAVY LOVE"; +$pref::FavNames18 = "FLAG DEFENDER"; +$pref::FavNames19 = "INFILTRATOR"; +$pref::Favorite0 = "armor\tScout\tweapon\tPlasma Rifle\tweapon\tChaingun\tweapon\tShocklance\tpack\tCloak Pack\tGrenade\tWhiteout Grenade\tMine\tMine"; +$pref::Favorite1 = "armor\tScout\tweapon\tLaser Rifle\tweapon\tSpinfusor\tweapon\tGrenade Launcher\tpack\tEnergy Pack\tGrenade\tFlare Grenade\tMine\tMine"; +$pref::Favorite2 = "armor\tScout\tweapon\tBlaster\tweapon\tSpinfusor\tweapon\tPlasma Rifle\tpack\tShield Pack\tGrenade\tGrenade\tMine\tMine"; +$pref::Favorite3 = "armor\tAssault\tweapon\tPlasma Rifle\tweapon\tSpinfusor\tweapon\tGrenade Launcher\tweapon\tChaingun\tpack\tShield Pack\tGrenade\tGrenade\tMine\tMine"; +$pref::Favorite4 = "armor\tAssault\tweapon\tPlasma Rifle\tweapon\tBlaster\tweapon\tSpinfusor\tweapon\tMissile Launcher\tpack\tInventory Station\tGrenade\tDeployable Camera\tMine\tMine"; +$pref::Favorite5 = "armor\tAssault\tweapon\tChaingun\tweapon\tSpinfusor\tweapon\tMissile Launcher\tweapon\tELF Projector\tpack\tShield Pack\tGrenade\tConcussion Grenade\tMine\tMine"; +$pref::Favorite6 = "armor\tAssault\tweapon\tChaingun\tweapon\tGrenade Launcher\tweapon\tBlaster\tweapon\tMissile Launcher\tpack\tAmmunition Pack\tGrenade\tFlare Grenade\tMine\tMine"; +$pref::Favorite7 = "armor\tJuggernaut\tweapon\tPlasma Rifle\tweapon\tSpinfusor\tweapon\tGrenade Launcher\tweapon\tFusion Mortar\tweapon\tMissile Launcher\tpack\tAmmunition Pack\tGrenade\tGrenade\tMine\tMine"; +$pref::Favorite8 = "armor\tJuggernaut\tweapon\tChaingun\tweapon\tMissile Launcher\tweapon\tFusion Mortar\tweapon\tPlasma Rifle\tweapon\tBlaster\tpack\tInventory Station\tGrenade\tDeployable Camera\tMine\tMine"; +$pref::Favorite9 = "armor\tJuggernaut\tweapon\tBlaster\tweapon\tPlasma Rifle\tweapon\tGrenade Launcher\tweapon\tMissile Launcher\tweapon\tFusion Mortar\tpack\tShield Pack\tGrenade\tConcussion Grenade\tMine\tMine"; +$pref::Favorite10 = "armor\tScout\tweapon\tChaingun\tweapon\tGrenade Launcher\tweapon\tELF Projector\tpack\tEnergy Pack\tGrenade\tConcussion Grenade\tMine\tMine"; +$pref::Favorite11 = "armor\tAssault\tweapon\tBlaster\tweapon\tPlasma Rifle\tweapon\tSpinfusor\tweapon\tGrenade Launcher\tpack\tShield Pack\tGrenade\tGrenade\tMine\tMine"; +$pref::Favorite12 = "armor\tAssault\tweapon\tChaingun\tweapon\tSpinfusor\tweapon\tPlasma Rifle\tweapon\tGrenade Launcher\tpack\tLandspike Turret\tGrenade\tGrenade\tMine\tMine"; +$pref::Favorite13 = "armor\tAssault\tweapon\tPlasma Rifle\tweapon\tSpinfusor\tweapon\tGrenade Launcher\tweapon\tChaingun\tpack\tInventory Station\tGrenade\tGrenade\tMine\tMine"; +$pref::Favorite14 = "armor\tAssault\tweapon\tELF Projector\tweapon\tGrenade Launcher\tweapon\tSpinfusor\tweapon\tMissile Launcher\tpack\tEnergy Pack\tGrenade\tWhiteout Grenade\tMine\tMine"; +$pref::Favorite15 = "armor\tAssault\tweapon\tChaingun\tweapon\tSpinfusor\tweapon\tGrenade Launcher\tweapon\tELF Projector\tpack\tPulse Sensor Pack\tGrenade\tConcussion Grenade\tMine\tMine"; +$pref::Favorite16 = "armor\tScout\tweapon\tChaingun\tweapon\tGrenade Launcher\tweapon\tSpinfusor\tpack\tSensor Jammer Pack\tGrenade\tWhiteout Grenade\tMine\tMine"; +$pref::Favorite17 = "armor\tJuggernaut\tweapon\tChaingun\tweapon\tSpinfusor\tweapon\tPlasma Rifle\tweapon\tFusion Mortar\tweapon\tMissile Launcher\tpack\tShield Pack\tGrenade\tConcussion Grenade\tMine\tMine"; +$pref::Favorite18 = "armor\tJuggernaut\tweapon\tSpinfusor\tweapon\tGrenade Launcher\tweapon\tFusion Mortar\tweapon\tPlasma Rifle\tweapon\tChaingun\tpack\tShield Pack\tGrenade\tGrenade\tMine\tMine"; +$pref::Favorite19 = "armor\tScout\tweapon\tChaingun\tweapon\tSpinfusor\tweapon\tShocklance\tpack\tSatchel Charge\tGrenade\tDeployable Camera\tMine\tMine"; +$pref::Forum::Column0 = 290; +$pref::Forum::Column1 = 265; +$pref::Forum::Column2 = 159; +$pref::Forum::CacheSize = 100; +$pref::HudMessageLogSize = 40; +$pref::Input::ActiveConfig = "MyConfig"; +$pref::Input::LinkMouseSensitivity = 1; +$pref::Input::MouseEnabled = 0; +$pref::Input::JoystickEnabled = 0; +$pref::Input::KeyboardTurnSpeed = 0.1; +$pref::Interior::TexturedFog = 0; +$pref::IRCClient::server = "198.74.38.141"; +$pref::IRCClient::serverport = 6668; +$pref::IRCClient::autoreconnect = 1; +$pref::IRCClient::showjoinleave = 1; +$pref::IRCClient::awaymsg = "Don't be alarmed. I'm going to step away from my computer."; +$pref::IRCClient::banmsg = "You, and three generations of your offspring, are banned from this channel."; +$pref::IRCClient::kickmsg = "Alright, you're outta here!"; +$pref::Lobby::Column1 = 120; +$pref::Lobby::Column2 = 120; +$pref::Lobby::Column3 = 50; +$pref::Lobby::Column4 = 50; +$pref::Lobby::Column5 = 50; +$pref::Lobby::SortColumnKey = 3; +$pref::Lobby::SortInc = 0; +$pref::Net::simPacketLoss = 0; +$pref::Net::simPing = 0; +$pref::Net::DisplayOnMaster = "Always"; +$pref::Net::RegionMask = 2; +$pref::Net::CheckEmail = 0; +$pref::Net::DisconnectChat = 0; +$pref::Net::LagThreshold = 400; +$pref::overrideTeamSkins = 0; +$pref::Player::Count = 0; +$pref::Player::Current = 0; +$pref::Player::defaultFov = 90; +$pref::Player::zoomSpeed = 0; +$pref::RememberPassword = 0; +$pref::sceneLighting::cacheSize = 60000; +$pref::sceneLighting::purgeMethod = "maxSize"; +$pref::sceneLighting::cacheLighting = 1; +$pref::sceneLighting::terrainGenerateLevel = 1; +$pref::ServerBrowser::activeFilter = 0; +$pref::ServerBrowser::Column0 = "0 183"; +$pref::ServerBrowser::Column1 = "1 30"; +$pref::ServerBrowser::Column2 = "2 30"; +$pref::ServerBrowser::Column3 = "3 45"; +$pref::ServerBrowser::Column4 = "5 143"; +$pref::ServerBrowser::Column5 = "7 56"; +$pref::ServerBrowser::Column6 = "8 56"; +$pref::ServerBrowser::Column7 = "9 155"; +$pref::ServerBrowser::Column8 = "4 89"; +$pref::ServerBrowser::Column9 = "6 74"; +$pref::ServerBrowser::Column10 = "10 70"; +$pref::ServerBrowser::FavoriteCount = 0; +$pref::ServerBrowser::SortColumnKey = 0; +$pref::ServerBrowser::SortInc = 1; +$pref::ServerBrowser::InfoWindowOpen = 0; +$pref::ServerBrowser::InfoWindowPos = "145 105"; +$pref::ServerBrowser::InfoWindowExtent = "350 270"; +$pref::Shell::lastBackground = 0; +$pref::Terrain::DynamicLights = 1; +$pref::toggleVehicleView = 0; +$pref::Topics::Column0 = 245; +$pref::Topics::Column1 = 50; +$pref::Topics::Column2 = 125; +$pref::Topics::Column3 = 134; +$pref::Topics::SortColumnKey = 3; +$pref::Topics::SortInc = 0; +$pref::Video::displayDevice = "OpenGL"; +$pref::chatHudLength = 1; +$pref::useImmersion = 1; +$pref::Video::allowOpenGL = 1; +$pref::Video::allowD3D = 1; +$pref::Video::preferOpenGL = 1; +$pref::Video::appliedPref = 0; +$pref::Video::disableVerticalSync = 1; +$pref::VisibleDistanceMod = 1.0; +$pref::OpenGL::force16BitTexture = "0"; +$pref::OpenGL::forcePalettedTexture = "1"; +$pref::OpenGL::maxHardwareLights = 3; diff --git a/base/scripts/clientTasks.cs b/base/scripts/clientTasks.cs new file mode 100644 index 0000000..98dffd6 --- /dev/null +++ b/base/scripts/clientTasks.cs @@ -0,0 +1,339 @@ +//------------------------------------------------------------------------------ +// Client tasks +//------------------------------------------------------------------------------ +$MAX_OUTSTANDING_TASKS = 10; + +function clientCmdResetTaskList() +{ + if((TaskList.currentTask != -1) && isObject(TaskList.currentTask)) + { + TaskList.currentTask.delete(); + TaskList.currentTask = -1; + } + TaskList.currentTask = -1; + + TaskList.reset(); +} + +//-------------------------------------------------------------------------- +function clientCmdTaskInfo(%client, %aiObjtive, %team, %description) +{ + // copy the info + TaskList.currentTaskClient = %client; + TaskList.currentAIObjective = %aiObjective; + TaskList.currentTaskIsTeam = %team; + TaskList.currentTaskDescription = detag(%description); +} + +function clientAcceptTask(%task) +{ + %task.sendToServer(); + + commandToServer('AcceptTask', %task.client, %task.AIObjective, %task.description); + TaskList.removeTask(%task, true); + + //play the audio + alxPlay(TaskAcceptedSound, 0, 0, 0); +} + +function clientDeclineTask(%task) +{ + commandToServer('DeclineTask', %task.client, %task.description, %task.team); + TaskList.removeTask(%task, false); + + //play the audio + alxPlay(TaskDeclinedSound, 0, 0, 0); +} + +function clientTaskCompleted() +{ + if((TaskList.currentTask != -1) && isObject(TaskList.currentTask)) + { + commandToServer('CompletedTask', TaskList.currentTask.client, TaskList.currentTask.description); + + TaskList.currentTask.delete(); + TaskList.currentTask = -1; + + //play the audio + alxPlay(TaskDeclinedSound, 0, 0, 0); + } +} + +//------------------------------------------------------------------------------ +// HUD information +//------------------------------------------------------------------------------ +function clientCmdPotentialTeamTask(%description) +{ + addMessageHudLine("\c2Team:\cr " @ detag(%description) @ "."); +} + +function clientCmdPotentialTask(%from, %description) +{ + addMessageHudLine("\c3" @ detag(%from) @ ":\cr " @ detag(%description) @ "."); +} + +function clientCmdTaskDeclined(%from, %description) +{ + addMessageHudLine(detag(%from) @ " refused your task '" @ detag(%description) @ "'."); +} + +function clientCmdTaskAccepted(%from, %description) +{ + addMessageHudLine(detag(%from) @ " accepted your task '" @ detag(%description) @ "'."); +} + +function clientCmdTaskCompleted(%from, %description) +{ + addMessageHudLine(detag(%from) @ " completed your task '" @ detag(%description) @ "'."); +} + +function clientCmdAcceptedTask(%description) +{ + addMessageHudLine("\c3Your current task is:\cr " @ %description); +} + +//------------------------------------------------------------------------------ +function clientAcceptCurrentTask() +{ + %task = TaskList.getCurrentTask(); + if(%task != -1) + clientAcceptTask(%task); +} + +function clientDeclineCurrentTask() +{ + %task = TaskList.getCurrentTask(); + if(%task != -1) + clientDeclineTask(%task); +} + +//-------------------------------------------------------------------------- +// TaskList: +//-------------------------------------------------------------------------- +function TaskList::onAdd(%this) +{ + %this.ownedTasks = -1; + %this.currentTask = -1; + %this.reset(); + + // install some chat callbacks + installChatItemCallback('ChatCmdAcknowledged', clientAcceptCurrentTask); + installChatItemCallback('ChatCmdCompleted', clientTaskCompleted); + installChatItemCallback('ChatCmdDeclined', clientDeclineCurrentTask); +} + +function TaskList::reset(%this) +{ + %this.currentTaskClient = -1; + %this.currentAIObjective = -1; + %this.currentTaskIsTeam = false; + %this.currentTaskDescription = ""; + + if((%this.ownedTasks != -1) && isObject(%this.ownedTasks)) + %this.ownedTasks.delete(); + + %this.ownedTasks = new SimGroup(); + + %this.currentIndex = 1; + %this.clear(); +} + +function TaskList::onRemove(%this) +{ + if((%this.ownedTasks != -1) && isObject(%this.ownedTasks)) + %this.ownedTasks.delete(); +} + +function TaskList::handleDyingTask(%this, %task) +{ + %this.ownedTasks.add(%task); +} + +//-------------------------------------------------------------------------- +function TaskList::getLastTask(%this) +{ + %count = %this.rowCount(); + if(%count == 0) + return(-1); + return(%this.getRowId(%count - 1)); +} + +function TaskList::getCurrentTask(%this) +{ + if(%this.isVisible()) + { + %id = %this.getSelectedId(); + if(%id != -1) + return(%id); + } + + return(%this.getLastTask()); +} + +function TaskList::addTask(%this, %task) +{ + // remove any duplicate... + %count = %this.rowCount(); + for(%i = 0; %i < %count; %i++) + { + %oldTask = %this.getRowId(%i); + if((%oldTask.client == %task.client) && (detag(%oldTask.description) $= detag(%task.description))) + { + %this.removeTask(%oldTask, false); + break; + } + } + + // need to remove the oldest task? + if(%this.rowCount() == $MAX_OUTSTANDING_TASKS) + %this.removeTask(%this.getRowId(0), false); + + %this.addRow(%task, %task.clientName @ "\t" @ detag(%task.description), %this.rowCount()); +} + +function TaskList::removeTask(%this, %task, %close) +{ + %row = %this.getRowNumById(%task); + if(%row == -1) + return; + + %select = %this.getSelectedId() == %task; + + if(isObject(%task)) + %task.delete(); + %this.removeRow(%row); + + if(%select && (%this.rowCount() != 0)) + { + if(%row == %this.rowCount()) + %row = %row - 1; + %this.setSelectedRow(%row); + } + + if(%close && %this.isVisible()) + showTaskHudDlg(false); +} + +function TaskList::updateSelected(%this, %show) +{ + %task = %this.getSelectedId(); + if(%task == -1) + return; + + if(%show) + { + %task.addPotentialTask(); + if(CommanderMapGui.open) + CommanderMap.selectClientTarget(%task, true); + else + NavHud.keepClientTargetAlive(%task); + } + else + { + if(CommanderMapGui.open) + CommanderMap.selectClientTarget(%task, false); + else + NavHud.keepClientTargetAlive(0); + } +} + +function TaskList::selectLatest(%this) +{ + %this.setSelectedRow(-1); + %id = %this.getLastTask(); + if(%id == -1) + return; + + %this.setSelectedById(%id); + %this.updateSelected(true); +} + +function TaskList::selectPrevious(%this) +{ + %id = %this.getSelectedId(); + if(%id == -1) + { + %this.selectLatest(); + return; + } + + %row = %this.getRowNumById(%id); + if(%row == 0) + %row = %this.rowCount() - 1; + else + %row -= 1; + %this.setSelectedRow(%row); + %this.updateSelected(true); +} + +function TaskList::selectNext(%this) +{ + %id = %this.getSelectedId(); + if(%id == -1) + { + %this.selectLatest(); + return; + } + + %row = %this.getRowNumById(%id); + if(%row == (%this.rowCount() - 1)) + %row = 0; + else + %row += 1; + %this.setSelectedRow(%row); + %this.updateSelected(true); +} + +//-------------------------------------------------------------------------- +function showTaskHudDlg(%show) +{ + if(%show) + { + if(!TaskHudDlg.isVisible()) + { + TaskHudDlg.setVisible(true); + Canvas.pushDialog(TaskHudDlg); + } + } + else + { + if(TaskHudDlg.isVisible()) + { + TaskHudDlg.setVisible(false); + Canvas.popDialog(TaskHudDlg); + } + } +} + +//-------------------------------------------------------------------------- +// - toggle 'visible' so this, and other, controls can determine if it is up +function toggleTaskListDlg(%val) +{ + if(%val) + { + if(ChatMenuHudDlg.isVisible() || TaskHudDlg.isVisible()) + showTaskHudDlg(false); + else + showTaskHudDlg(true); + } +} + + +new ActionMap(TaskHudMap); +TaskHudMap.bindCmd(keyboard, "up", "TaskList.selectPrevious();", ""); +TaskHudMap.bindCmd(keyboard, "down", "TaskList.selectNext();", ""); +TaskHudMap.bindCmd(keyboard, "escape", "if(TaskHudDlg.isVisible()) showTaskHudDlg(false);", ""); + +function TaskHudDlg::onWake(%this) +{ + TaskHudMap.push(); + TaskList.setVisible(true); + TaskList.selectLatest(); +} + +function TaskHudDlg::onSleep(%this) +{ + TaskHudMap.pop(); + TaskList.setVisible(false); + TaskList.updateSelected(false); +} \ No newline at end of file diff --git a/base/scripts/commanderMap.cs b/base/scripts/commanderMap.cs new file mode 100644 index 0000000..3faa536 --- /dev/null +++ b/base/scripts/commanderMap.cs @@ -0,0 +1,983 @@ +//-------------------------------------------------------------------------- +// ActionMap: +//-------------------------------------------------------------------------- +$CommanderMap::useMovementKeys = false; + +// help overlay toggle +function toggleCmdMapHelpGui( %val ) +{ + if ( %val) + toggleCmdMapHelpText(); +} + +// shortcuts to buttons: top buttons +function toggleAction(%control) +{ + %control.setValue(!%control.getValue()); + %control.onAction(); +} + +function bindAction(%fromMap, %command, %bindCmd, %bind1, %bind2 ) +{ + if(!isObject(%fromMap)) + return(false); + + %bind = %fromMap.getBinding(%command); + if(%bind $= "") + return(false); + + // only allow keyboard + %device = getField(%bind, 0); + if(%device !$= "keyboard") + return(false); + + %action = getField(%bind, 1); + + // bind or bindcmd? + if(%bindCmd) + CommanderKeyMap.bindCmd( %device, %action, %bind1, %bind2 ); + else + CommanderKeyMap.bind( %device, %action, %bind1 ); + + return(true); +} + +function createCommanderKeyMap() +{ + if(isObject(CommanderKeyMap)) + CommanderKeyMap.delete(); + + new ActionMap(CommanderKeyMap); + + // copy in all the binds we want from the moveMap + CommanderKeyMap.copyBind( moveMap, ToggleMessageHud ); + CommanderKeyMap.copyBind( moveMap, TeamMessageHud ); + CommanderKeyMap.copyBind( moveMap, resizeChatHud ); + CommanderKeyMap.copyBind( moveMap, pageMessageHudUp ); + CommanderKeyMap.copyBind( moveMap, pageMessageHudDown ); + CommanderKeyMap.copyBind( moveMap, activateChatMenuHud ); + + // Miscellaneous other binds: + CommanderKeyMap.copyBind( moveMap, voteYes ); + CommanderKeyMap.copyBind( moveMap, voteNo ); + CommanderKeyMap.copyBind( moveMap, toggleCommanderMap ); + CommanderKeyMap.copyBind( moveMap, toggleHelpGui ); + CommanderKeyMap.copyBind( moveMap, toggleScoreScreen); + CommanderKeyMap.copyBind( moveMap, startRecordingDemo ); + CommanderKeyMap.copyBind( moveMap, stopRecordingDemo ); + CommanderKeyMap.copyBind( moveMap, voiceCapture ); + CommanderKeyMap.bindCmd( keyboard, escape, "", "escapeFromGame();" ); + + // grab help key from movemap + if(!bindAction( moveMap, toggleHelpGui, false, toggleCmdMapHelpGui )) + CommanderKeyMap.bind( keyboard, F1, toggleCmdMapHelpGui ); + + // Bind the command assignment/response keys as well: + CommanderKeyMap.copyBind( moveMap, toggleTaskListDlg ); + CommanderKeyMap.copyBind( moveMap, fnAcceptTask ); + CommanderKeyMap.copyBind( moveMap, fnDeclineTask ); + CommanderKeyMap.copyBind( moveMap, fnTaskCompleted ); + CommanderKeyMap.copyBind( moveMap, fnResetTaskList ); + + // button shortcuts + CommanderKeyMap.bindCmd( keyboard, 1, "toggleAction(CMDPlayersButton);", "" ); + CommanderKeyMap.bindCmd( keyboard, 2, "toggleAction(CMDTacticalButton);", "" ); + CommanderKeyMap.bindCmd( keyboard, 3, "toggleAction(CMDDeployedTacticalButton);", "" ); + CommanderKeyMap.bindCmd( keyboard, 4, "toggleAction(CMDMiscButton);", "" ); + CommanderKeyMap.bindCmd( keyboard, 5, "toggleAction(CMDDeployedMiscButton);", "" ); + CommanderKeyMap.bindCmd( keyboard, 6, "toggleAction(CMDWaypointsButton);", "" ); + CommanderKeyMap.bindCmd( keyboard, 7, "toggleAction(CMDObjectivesButton);", "" ); + + // bottom buttons + CommanderKeyMap.bindCmd( keyboard, w, "toggleAction(CMDShowSensorsButton);", "" ); + CommanderKeyMap.bindCmd( keyboard, space, "cycleMouseMode();", "" ); + CommanderKeyMap.bindCmd( keyboard, q, "toggleAction(CMDCenterButton);", "" ); + CommanderKeyMap.bindCmd( keyboard, t, "toggleAction(CMDTextButton);", "" ); + CommanderKeyMap.bindCmd( keyboard, b, "toggleAction(CMDCameraButton);", "" ); + + // camera control (always arrows) + CommanderKeyMap.bindCmd( keyboard, left, "CommanderMap.cameraMove(left, true);", "commanderMap.cameraMove(left, false);" ); + CommanderKeyMap.bindCmd( keyboard, right, "CommanderMap.cameraMove(right, true);", "commanderMap.cameraMove(right, false);" ); + CommanderKeyMap.bindCmd( keyboard, up, "CommanderMap.cameraMove(up, true);", "commanderMap.cameraMove(up, false);" ); + CommanderKeyMap.bindCmd( keyboard, down, "CommanderMap.cameraMove(down, true);", "commanderMap.cameraMove(down, false);" ); + CommanderKeyMap.bindCmd( keyboard, numpadadd, "CommanderMap.cameraMove(in, true);", "commanderMap.cameraMove(in, false);" ); + CommanderKeyMap.bindCmd( keyboard, numpadminus, "CommanderMap.cameraMove(out, true);", "commanderMap.cameraMove(out, false);" ); + + CommanderKeyMap.bindCmd( keyboard, a, "CommanderMap.cameraMove(in, true);", "commanderMap.cameraMove(in, false);" ); + CommanderKeyMap.bindCmd( keyboard, z, "CommanderMap.cameraMove(out, true);", "commanderMap.cameraMove(out, false);" ); + + // steal the movement keys? (more likely than others to be a duplicate binding) + if($CommanderMap::useMovementKeys) + { + bindAction( moveMap, moveleft, true, "CommanderMap.cameraMove(left, true);", "commanderMap.cameraMove(left, false);" ); + bindAction( moveMap, moveright, true, "CommanderMap.cameraMove(right, true);", "commanderMap.cameraMove(right, false);" ); + bindAction( moveMap, moveforward, true, "CommanderMap.cameraMove(up, true);", "commanderMap.cameraMove(up, false);" ); + bindAction( moveMap, movebackward, true, "CommanderMap.cameraMove(down, true);", "commanderMap.cameraMove(down, false);" ); + } + else + { + CommanderKeyMap.bindCmd( keyboard, s, "CommanderMap.cameraMove(left, true);", "commanderMap.cameraMove(left, false);" ); + CommanderKeyMap.bindCmd( keyboard, f, "CommanderMap.cameraMove(right, true);", "commanderMap.cameraMove(right, false);" ); + CommanderKeyMap.bindCmd( keyboard, e, "CommanderMap.cameraMove(up, true);", "commanderMap.cameraMove(up, false);" ); + CommanderKeyMap.bindCmd( keyboard, d, "CommanderMap.cameraMove(down, true);", "commanderMap.cameraMove(down, false);" ); + } +} + +//-------------------------------------------------------------------------- +// Default Icons: +new CommanderIconData(CMDDefaultIcon) +{ + selectImage = "animation base_select true true looping 100"; + hilightImage = "animation base_select true true flipflop 100"; +}; + +new CommanderIconData(CMDAssignedTaskIcon) +{ + baseImage = "static diamond_not_selected true true"; + selectImage = "animation assigned_task_anim false true looping 100"; + hilightImage = "animation assigned_task_anim false true looping 100"; +}; + +new CommanderIconData(CMDPotentialTaskIcon) +{ + baseImage = "static diamond_not_selected true true"; + selectImage = "animation assigned_task_anim false true looping 100"; + hilightImage = "animation assigned_task_anim false true looping 100"; +}; + +new CommanderIconData(CMDWaypointIcon) +{ + baseImage = "animation waypoint_anim false false looping 100"; +}; + +//-------------------------------------------------------------------------- +// CommanderMapGui: +//-------------------------------------------------------------------------- +function clientCmdResetCommandMap() +{ + CommanderMapGui.reset(); +} + +function CommanderMapGui::onWake(%this) +{ + clientCmdControlObjectReset(); + + commandToServer('ScopeCommanderMap', true); + + createCommanderKeyMap(); + CommanderKeyMap.push(); + + if ( $HudHandle['CommandScreen'] ) + alxStop( $HudHandle['CommandScreen'] ); + alxPlay(CommandMapActivateSound, 0, 0, 0); + $HudHandle['CommandScreen'] = alxPlay(CommandMapHumSound, 0, 0, 0); + CursorOn(); + + CMDTextButton.setValue(CommanderMap.renderText); + + // follow the player the first time + if(%this.firstWake) + { + CommanderMap.selectControlObject(); + CommanderMap.followLastSelected(); + %this.firstWake = false; + } + + if(CommanderTV.open) + CommanderTV.watchTarget(CommanderTV.target); + + // chat hud dialog + Canvas.pushDialog(MainChatHud); + chatHud.attach(HudMessageVector); + + %this.open = true; +} + +function CommanderMapGui::onSleep(%this) +{ + %this.open = false; + + commandToServer('ScopeCommanderMap', false); + CursorOff(); + + if(CMContextPopup.visible == true) + CMContextPopup.reset(); + + CommanderKeyMap.pop(); + Canvas.popDialog(MainChatHud); + + alxStop($HudHandle['CommandScreen']); + alxPlay(CommandMapDeactivateSound, 0, 0, 0); + $HudHandle['CommandScreen'] = ""; + + // will reset the control object on this client.. should only be sent + // if this gui is being removed outside of CommanderMapGui::close() + if(CommanderTV.open && CommanderTV.attached) + commandToServer('AttachCommanderCamera', -1); +} + +function CommanderMapGui::open(%this) +{ + if(%this.open) + return; + + commandToServer('SetPDAPose', true); + Canvas.setContent(%this); +} + +function CommanderMapGui::close(%this) +{ + if(!%this.open) + return; + + // only need to have control object reset if still attached to an object +// if(CommanderTV.open && CommanderTV.attached) +// { + commandToServer('ResetControlObject'); + + // reset the attached state since we will not be getting an attached response + CommanderTV.attached = false; +// } +// else +// clientCmdControlObjectReset(); + + commandToServer('SetPDAPose', false); +} + +function CommanderMapGui::toggle(%this) +{ + if(%this.open) + %this.close(); + else + %this.open(); +} + +function CommanderMapGui::onAdd(%this) +{ + %this.open = false; + + new GuiControl(CMContextPopupDlg) + { + profile = "GuiModelessDialogProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + + new GuiCommanderMapPopupMenu(CMContextPopup) + { + profile = "CommanderPopupProfile"; + position = "0 0"; + extent = "0 0"; + minExtent = "0 0"; + maxPopupHeight = "200"; + }; + }; + + CMContextPopup.numEntries = 0; + CMContextPopup.actionMap = -1; + CMContextPopup.focusedEntry = -1; + CMContextPopup.visible = false; + CMContextPopup.target = -1; +} + +function CommanderMapGui::reset(%this) +{ + clientCmdControlObjectReset(); + CommanderMap.openAllCategories(); + CommanderMap.resetCamera(); + CommanderTV.watchTarget(-1); + + // remove all tasks and clean task list + clientCmdResetTaskList(); + + // reset waypoints + if(isObject($ClientWaypoints)) + $ClientWaypoints.delete(); + + $ClientWaypoints = new SimGroup(); + ServerConnection.add($ClientWaypoints); + + %this.firstWake = true; + CommanderTree.currentWaypointID = 0; +} + +function CommanderMapGui::openCameraControl(%this, %open) +{ + %step = getWord(CommanderTV.extent, 1); + %x = getWord(CommanderTreeContainer.position, 0); + %y = getWord(CommanderTreeContainer.position, 1); + %w = getWord(CommanderTreeContainer.extent, 0); + %h = getWord(CommanderTreeContainer.extent, 1); + + if(%open) + %h = %h - %step; + else + %h = %h + %step; + + CommanderTreeContainer.resize(%x, %y, %w, %h); + CommanderTV.setVisible(%open); + + CommanderTV.open = %open; + CommanderTV.watchTarget(CommanderTV.target); + + if(!CommanderTV.open) + commandToServer('AttachCommanderCamera', -1); +} + +//-------------------------------------------------------------------------- +// CMContextPopup: +//-------------------------------------------------------------------------- +function CMContextPopup::reset(%this) +{ + if(%this.actionMap != -1) + { + %this.actionMap.pop(); + %this.actionMap.delete(); + } + + for(%i = 0; %i < %this.numEntries; %i++) + { + %this.entryKeys[%i] = ""; + %this.entryCommands[%i] = ""; + } + + %this.visible = false; + %this.numEntries = 0; + %this.actionMap = -1; + if(%this.focusedEntry != -1) + %this.focusedEntry.lockFocus(false); + %this.focusedEntry = -1; + + %this.forceClose(); + Canvas.popDialog(CMContextPopupDlg); + + // need to delete the target if it was not used + if(isObject(%this.target)) + { + if(%this.target.getTargetId() != -1) + %this.target.delete(); + %this.target = -1; + } +} + +function CMContextPopup::display(%this) +{ + if(%this.numEntries == 0) + return; + + %this.actionMap = new ActionMap(); + + for(%i = 0; %i < %this.numEntries; %i++) + if(%this.entryKeys[%i] !$= "") + %this.actionMap.bindCmd(keyboard, %this.entryKeys[%i], "", %this @ ".onKeySelect(" @ %i @ ");"); + + %this.actionMap.bindCmd(keyboard, escape, "", %this @ ".reset();"); + %this.actionMap.push(); + + if(%this.focusedEntry != -1) + %this.focusedEntry.lockFocus(true); + %this.visible = true; + + Canvas.pushDialog(CMContextPopupDlg); + %this.forceOnAction(); +} + +function CMContextPopup::addEntry(%this, %key, %text, %command) +{ + %idx = %this.numEntries; + %this.entryKeys[%idx] = %key; + %this.entryCommands[%idx] = %command; + %this.numEntries++; + + %this.add(%text, %idx); +} + +function CMContextPopup::onKeySelect(%this, %index) +{ + %this.onSelect(%index, %this.getTextById(%index)); +} + +function CMContextPopup::onSelect(%this, %index, %value) +{ + CommanderTree.processCommand(%this.entryCommands[%index], %this.target, %this.typeTag); + %this.reset(); +} + +function CMContextPopup::onCancel( %this ) +{ + %this.reset(); +} + +//------------------------------------------------------------------------------ +// CommanderTree: +//------------------------------------------------------------------------------ +function CommanderTree::onAdd(%this) +{ + %this.headerHeight = 20; + %this.entryHeight = 20; + + %this.reset(); + + %this.addCategory("Clients", "Teammates", "clients"); + %this.addCategory("Tactical", "Tactical Assets", "targets"); + %this.addCategory("DTactical", "Deployed Tactical", "targets"); + %this.addCategory("Support", "Support Assets", "targets"); + %this.addCategory("DSupport", "Deployed Support", "targets"); + %this.addCategory("Waypoints", "Waypoints", "waypoints"); + %this.addCategory("Objectives", "Objectives", "targets"); + + // targetType entries use registered info if no ShapeBaseData exists + %this.registerEntryType("Clients", getTag('_ClientConnection'), false, "commander/MiniIcons/com_player_grey", "255 255 255"); + %this.registerEntryType("Waypoints", $CMD_WAYPOINTTYPEID, false, "commander/MiniIcons/com_waypoint_grey", "0 255 0"); + %this.registerEntryType("Waypoints", $CMD_ASSIGNEDTASKTYPEID, false, "commander/MiniIcons/com_waypoint_grey", "0 0 255"); + +// %this.registerEntryType("Waypoints", $CMD_POTENTIALTASKTYPEID, false, "commander/MiniIcons/com_waypoint_grey", "255 255 0"); +} + +function CommanderTree::onCategoryOpen(%this, %category, %open) +{ + switch$ (%category) + { + case "Clients": + CMDPlayersButton.setValue(%open); + case "Tactical": + CMDTacticalButton.setValue(%open); + case "DTactical": + CMDDeployedTacticalButton.setValue(%open); + case "Support": + CMDMiscButton.setValue(%open); + case "DSupport": + CMDDeployedMiscButton.setValue(%open); + case "Waypoints": + CMDWaypointsButton.setValue(%open); + case "Objectives": + CMDObjectivesButton.setValue(%open); + } +} + +function CommanderTree::controlObject(%this, %targetId) +{ + commandToServer('ControlObject', %targetId); +} + +//------------------------------------------------------------------------------ +// CommanderMap: +//------------------------------------------------------------------------------ +function GuiCommanderMap::onAdd(%this) +{ + %this.setMouseMode(select); + %this.setTargetTypeVisible($CMD_POTENTIALTASKTYPEID, true); + %this.setTargetTypeVisible($CMD_ASSIGNEDTASKTYPEID, true); +} + +function GuiCommanderMap::onSelect(%this, %targetId, %nameTag, %typeTag, %select) +{ + if(%select) + { + if(CommanderTV.target != %targetId) + CommanderTV.watchTarget(%targetId); + } + else + CommanderTV.watchTarget(-1); +} + +function GuiCommanderMap::openCategory(%this, %ctrl, %name, %open) +{ + %ctrl.setValue(%open); + CommanderTree.openCategory(%name, %open); +} + +function GuiCommanderMap::openAllCategories(%this) +{ + %this.openCategory(CMDPlayersButton, "Clients", 1); + %this.openCategory(CMDTacticalButton, "Tactical", 1); + %this.openCategory(CMDDeployedTacticalButton, "DTactical", 1); + %this.openCategory(CMDMiscButton, "Support", 1); + %this.openCategory(CMDDeployedMiscButton, "DSupport", 1); + %this.openCategory(CMDWaypointsButton, "Waypoints", 1); + %this.openCategory(CMDObjectivesButton, "Objectives", 1); +} + +//------------------------------------------------------------------------------ +// Issuing commands +//------------------------------------------------------------------------------ +// misc. tasks (sensor group -1 is considered friendly with these) +$CommandTask['PotentialTask', 0, text] = "\c1A\crccept"; +$CommandTask['PotentialTask', 0, tag] = 'TaskAccepted'; +$CommandTask['PotentialTask', 0, hotkey] = "a"; +$CommandTask['PotentialTask', 1, text] = "\c1D\crecline"; +$CommandTask['PotentialTask', 1, tag] = 'TaskDeclined'; +$CommandTask['PotentialTask', 1, hotkey] = "d"; + +$CommandTask['AssignedTask', 0, text] = "\c1C\crompleted"; +$CommandTask['AssignedTask', 0, tag] = 'TaskCompleted'; +$CommandTask['AssignedTask', 0, hotkey] = "c"; +$CommandTask['AssignedTask', 1, text] = "\c1R\cremove"; +$CommandTask['AssignedTask', 1, tag] = 'TaskRemoved'; +$CommandTask['AssignedTask', 1, hotkey] = "d"; + +$CommandTask['Location', 0, text] = "\c1D\crefend"; +$CommandTask['Location', 0, tag] = 'DefendLocation'; +$CommandTask['Location', 0, hotkey] = "d"; +$CommandTask['Location', 1, text] = "\c1M\creet (at)"; +$CommandTask['Location', 1, tag] = 'MeetLocation'; +$CommandTask['Location', 1, hotkey] = "m"; +$CommandTask['Location', 2, text] = "\c1B\cromb (at)"; +$CommandTask['Location', 2, tag] = 'BombLocation'; +$CommandTask['Location', 2, hotkey] = "b"; +$CommandTask['Location', 3, text] = "\c1A\crttack"; +$CommandTask['Location', 3, tag] = 'AttackLocation'; +$CommandTask['Location', 3, hotkey] = "a"; +$CommandTask['Location', 4, text] = "Deploy \c1I\crnventory"; +$CommandTask['Location', 4, tag] = 'DeployEquipment'; +$CommandTask['Location', 4, hotkey] = "i"; +$CommandTask['Location', 5, text] = "Deploy \c1T\crurrets"; +$CommandTask['Location', 5, tag] = 'DeployTurret'; +$CommandTask['Location', 5, hotkey] = "t"; +$CommandTask['Location', 6, text] = "Deploy \c1S\crensors"; +$CommandTask['Location', 6, tag] = 'DeploySensor'; +$CommandTask['Location', 6, hotkey] = "s"; +$CommandTask['Location', 7, text] = "Create \c1W\craypoint"; +$CommandTask['Location', 7, tag] = 'CreateWayPoint'; +$CommandTask['Location', 7, hotkey] = "w"; + +$CommandTask['Waypoint', 0, text] = "\c1D\crelete waypoint"; +$CommandTask['Waypoint', 0, tag] = 'DeleteWayPoint'; +$CommandTask['Waypoint', 0, hotkey] = "d"; + +// object tasks +$CommandTask['Player', 0, text] = "\c1E\crscort"; +$CommandTask['Player', 0, tag] = 'EscortPlayer'; +$CommandTask['Player', 0, hotkey] = "e"; +$CommandTask['Player', 1, text] = "\c1R\crepair"; +$CommandTask['Player', 1, tag] = 'RepairPlayer'; +$CommandTask['Player', 1, hotkey] = "r"; +$CommandTask['Player', 2, text] = "\c1A\crttack"; +$CommandTask['Player', 2, tag] = 'AttackPlayer'; +$CommandTask['Player', 2, hotkey] = "a"; +$CommandTask['Player', 2, enemy] = true; + +$CommandTask['Flag', 0, text] = "\c1D\crefend"; +$CommandTask['Flag', 0, tag] = 'DefendFlag'; +$CommandTask['Flag', 0, hotkey] = "d"; +$CommandTask['Flag', 1, text] = "\c1R\creturn"; +$CommandTask['Flag', 1, tag] = 'ReturnFlag'; +$CommandTask['Flag', 1, hotkey] = "r"; +$CommandTask['Flag', 2, text] = "\c1C\crapture"; +$CommandTask['Flag', 2, tag] = 'CaptureFlag'; +$CommandTask['Flag', 2, hotkey] = "c"; +$CommandTask['Flag', 2, enemy] = true; + +$CommandTask['Objective', 0, text] = "\c1C\crapture"; +$CommandTask['Objective', 0, tag] = 'CaptureObjective'; +$CommandTask['Objective', 0, hotkey] = "c"; +$CommandTask['Objective', 1, text] = "\c1D\crefend"; +$CommandTask['Objective', 1, tag] = 'DefendObjective'; +$CommandTask['Objective', 1, hotkey] = "d"; + +$CommandTask['Object', 0, text] = "\c1R\crepair"; +$CommandTask['Object', 0, tag] = 'RepairObject'; +$CommandTask['Object', 0, hotkey] = "r"; +$CommandTask['Object', 1, text] = "\c1D\crefend"; +$CommandTask['Object', 1, tag] = 'DefendObject'; +$CommandTask['Object', 1, hotkey] = "d"; +$CommandTask['Object', 2, text] = "\c1A\crttack"; +$CommandTask['Object', 2, tag] = 'AttackObject'; +$CommandTask['Object', 2, hotkey] = "a"; +$CommandTask['Object', 2, enemy] = true; +$CommandTask['Object', 3, text] = "\c1L\craze"; +$CommandTask['Object', 3, tag] = 'LazeObject'; +$CommandTask['Object', 3, hotkey] = "l"; +$CommandTask['Object', 3, enemy] = true; +$CommandTask['Object', 4, text] = "\c1M\crortar"; +$CommandTask['Object', 4, tag] = 'MortarObject'; +$CommandTask['Object', 4, hotkey] = "m"; +$CommandTask['Object', 4, enemy] = true; +$CommandTask['Object', 5, text] = "\c1B\cromb"; +$CommandTask['Object', 5, tag] = 'BombObject'; +$CommandTask['Object', 5, hotkey] = "b"; +$CommandTask['Object', 5, enemy] = true; + +function GuiCommanderMap::issueCommand(%this, %target, %typeTag, %nameTag, %sensorGroup, %mousePos) +{ + CMContextPopup.position = %mousePos; + CMContextPopup.clear(); + + CMContextPopup.target = %target; + CMContextPopup.typeTag = %typeTag; + CMContextPopup.nameTag = %nameTag; + CMContextPopup.sensorGroup = %sensorGroup; + + %taskType = %this.getCommandType(%typeTag); + if(%taskType $= "") + { + // script created target? + if(%target.getTargetId() == -1) + %target.delete(); + CMDContextPopup.target = -1; + return; + } + + %this.buildPopupCommands(%taskType, %sensorGroup); + CMContextPopup.display(); +} + +function GuiCommanderMap::getCommandType(%this, %typeTag) +{ + // special case (waypoints, location, tasks...) + if(%typeTag < 0) + { + if(%typeTag == $CMD_LOCATIONTYPEID) + return('Location'); + else if(%typeTag == $CMD_WAYPOINTTYPEID) + return('Waypoint'); + else if(%typeTag == $CMD_POTENTIALTASKTYPEID) + return('PotentialTask'); + else if(%typeTag == $CMD_ASSIGNEDTASKTYPEID) + return('AssignedTask'); + return(""); + } + + // the handled types here (default is 'Object') + switch$(getTaggedString(%typeTag)) + { + case "_ClientConnection": + return('Player'); + case "Flag": + return('Flag'); + case "Objective": + return('Objective'); + } + return('Object'); +} + +function GuiCommanderMap::buildPopupCommands(%this, %taskType, %sensorGroup) +{ + %enemy = (%sensorGroup != ServerConnection.getSensorGroup()) && (%sensorGroup != -1); + for(%i = 0; $CommandTask[%taskType, %i, text] !$= ""; %i++) + { + if(%enemy == $CommandTask[%taskType, %i, enemy]) + { + CMContextPopup.addEntry($CommandTask[%taskType, %i, hotkey], + $CommandTask[%taskType, %i, text], + $CommandTask[%taskType, %i, tag]); + } + } +} + +//-------------------------------------------------------------------------- +// Command processing +//-------------------------------------------------------------------------- +function CommanderTree::processCommand(%this, %command, %target, %typeTag) +{ + // special case? + if(%typeTag < 0) + { + switch$(getTaggedString(%command)) + { + // waypoints: tree owns the waypoint targets + case "CreateWayPoint": + %name = "Waypoint " @ %this.currentWaypointID++; + %target.createWaypoint(%name); + %id = %target.getTargetId(); + if(%id != -1) + { + $ClientWaypoints.add(%target); + CMContextPopup.target = -1; + } + return; + + case "DeleteWayPoint": + %target.delete(); + CMContextPopup.target = -1; + return; + + // tasks: + case "TaskAccepted": + clientAcceptTask(%target); + return; + + case "TaskDeclined": + clientDeclineTask(%target); + return; + + case "TaskCompleted": + clientTaskCompleted(); + return; + + case "TaskRemoved": + %target.delete(); + CMContextPopup.target = -1; + return; + } + } + + %numClients = %this.getNumTargets("Clients"); + %numSelected = %this.getNumSelectedTargets("Clients"); + + if((%numSelected == 0) || (%numSelected == %numClients)) + %team = true; + else + %team = false; + + %target.sendToServer(); + commandToServer('BuildClientTask', %command, %team); + + if(%team) + { + commandToServer('SendTaskToTeam'); + } + else + { + for(%i = 0; %i < %numSelected; %i++) + { + %targetId = %this.getSelectedTarget("Clients", %i); + commandToServer('SendTaskToClientTarget', %targetId); + } + } + + // delete target? + if(%target.getTargetId() == -1) + { + CMContextPopup.target = -1; + %target.delete(); + } +} + +//------------------------------------------------------------------------------ +function CommanderTV::watchTarget(%this, %targetId) +{ + if(%targetId < 0) + %targetId = -1; + + if(%this.attached) + commandToServer('AttachCommanderCamera', -1); + + %this.target = %targetId; + + if(%this.open && (%this.target != -1)) + commandToServer('AttachCommanderCamera', %this.target); +} + +function clientCmdCameraAttachResponse(%attached) +{ + CommanderTV.attached = %attached; +} + +//------------------------------------------------------------------------------ +// CommanderTV control +//------------------------------------------------------------------------------ +new ActionMap(CommanderTVControl); +CommanderTVControl.bind(mouse, xaxis, yaw); +CommanderTVControl.bind(mouse, yaxis, pitch); + +function CommanderTV_ButtonPress(%val) +{ + if(%val) + { + CommanderTVControl.push(); + CursorOff(); + } + else + { + CommanderTVControl.pop(); + GlobalActionMap.unbind(mouse, button0); + + if(CommanderMapGui.open) + { + CursorOn(); + Canvas.setCursor(CMDCursorArrow); + } + } +} + +function CommanderTVScreen::onMouseEnter(%this, %mod, %pos, %count) +{ + GlobalActionMap.bind(mouse, button0, CommanderTV_ButtonPress); +} + +function CommanderTVScreen::onMouseLeave(%this, %mod, %pos, %count) +{ + GlobalActionMap.unbind(mouse, button0); +} + +//------------------------------------------------------------------------------ +// Buttons: play button down sounds here so script onAction call plays sound as well +//------------------------------------------------------------------------------ +// top buttons: +function CMDPlayersButton::onAction(%this) +{ + CommanderTree.openCategory("Clients", %this.getValue()); + alxPlay(sButtonDown, 0, 0, 0); +} + +function CMDTacticalButton::onAction(%this) +{ + CommanderTree.openCategory("Tactical", %this.getValue()); + alxPlay(sButtonDown, 0, 0, 0); +} + +function CMDDeployedTacticalButton::onAction(%this) +{ + CommanderTree.openCategory("DTactical", %this.getValue()); + alxPlay(sButtonDown, 0, 0, 0); +} + +function CMDMiscButton::onAction(%this) +{ + CommanderTree.openCategory("Support", %this.getValue()); + alxPlay(sButtonDown, 0, 0, 0); +} + +function CMDDeployedMiscButton::onAction(%this) +{ + CommanderTree.openCategory("DSupport", %this.getValue()); + alxPlay(sButtonDown, 0, 0, 0); +} + +function CMDWaypointsButton::onAction(%this) +{ + CommanderTree.openCategory("Waypoints", %this.getValue()); + alxPlay(sButtonDown, 0, 0, 0); +} + +function CMDObjectivesButton::onAction(%this) +{ + CommanderTree.openCategory("Objectives", %this.getValue()); + alxPlay(sButtonDown, 0, 0, 0); +} + +// bottom buttons: +function CMDShowSensorsButton::onAction(%this) +{ + CommanderMap.renderSensors = %this.getValue(); + alxPlay(sButtonDown, 0, 0, 0); +} + +// there should be, at most, one depressed mouse mode button +function setMouseMode(%mode) +{ + switch$(%mode) + { + case "select": + CMDMoveSelectButton.setValue(false); + CMDZoomButton.setValue(false); + + case "move": + CMDMoveSelectButton.setValue(true); + CMDZoomButton.setValue(false); + + case "zoom": + CMDMoveSelectButton.setValue(false); + CMDZoomButton.setValue(true); + } + + CommanderMap.setMouseMode(%mode); + alxPlay(sButtonDown, 0, 0, 0); +} + +function cycleMouseMode() +{ + switch$(CommanderMap.getMouseMode()) + { + case "select": + setMouseMode("move"); + case "move": + setMouseMode("zoom"); + case "zoom": + setMouseMode("select"); + } +} + +function CMDMoveSelectButton::onAction(%this) +{ + if(%this.getValue()) + setMouseMode(move); + else + setMouseMode(select); +} + +function CMDZoomButton::onAction(%this) +{ + if(%this.getValue()) + setMouseMode(zoom); + else + setMouseMode(select); +} + +function CMDCenterButton::onAction(%this) +{ + CommanderMap.followLastSelected(); + alxPlay(sButtonDown, 0, 0, 0); +} + +function CMDTextButton::onAction(%this) +{ + CommanderMap.renderText = %this.getValue(); + alxPlay(sButtonDown, 0, 0, 0); +} + +function CMDCameraButton::onAction(%this) +{ + CommanderMapGui.openCameraControl(%this.getValue()); + alxPlay(sButtonDown, 0, 0, 0); +} + +//--------------------------------------------------------------------------- +// - the server may be down and client will not be able to get out of this object +// by using the escape key; so, schedule a timeout period to reset +$ServerResponseTimeout = 1500; + +function processControlObjectEscape() +{ + if($ScheduledEscapeTask) + return; + + $ScheduledEscapeTask = schedule($ServerResonseTimeout, 0, clientCmdControlObjectReset); + commandToServer('ResetControlObject'); +} + +function clientCmdControlObjectResponse(%ack, %info) +{ + // if ack'd then %info is the tag for the object otherwise it is a decline message + if(%ack == true) + { + new ActionMap(ControlActionMap); + ControlActionMap.bindCmd(keyboard, escape, "processControlObjectEscape();", ""); + + $PlayerIsControllingObject = true; + clientCmdSetHudMode("Object", %info); + + // at this point, we are not attached to an object + CommanderTV.attached = false; + Canvas.setContent(PlayGui); + } + else + addMessageHudLine("\c3Failed to control object: \cr" @ %info); +} + +function clientCmdControlObjectReset() +{ + if($ScheduledEscapeTask) + { + cancel($ScheduledEscapeTask); + $ScheduledEscapeTask = 0; + } + + if(isObject(ControlActionMap)) + ControlActionMap.delete(); + + if ($PlayerIsControllingObject) + { + $PlayerIsControllingObject = false; + ClientCmdSetHudMode("Standard"); + } + + if(CommanderMapGui.open) + Canvas.setContent(PlayGui); +} diff --git a/base/scripts/commanderMapHelpText.cs b/base/scripts/commanderMapHelpText.cs new file mode 100644 index 0000000..5ed68c1 --- /dev/null +++ b/base/scripts/commanderMapHelpText.cs @@ -0,0 +1,25 @@ +$cmdMapHelpTextShown = false; + +function toggleCmdMapHelpText() +{ + if(CmdMapHelpTextGui.visible) + CmdMapHelpTextGui.setVisible(false); + else { + if(!$cmdMapHelpTextShown) { + teamButtonText.setValue("Left click to select, right click to give commands."); + tacticalButtonText.setValue("Turrets and friendly vehicles. Click the square after a turret's name to control it."); + supportButtonText.setValue("Your team's stations, generators, cameras, and sensors."); + waypointButtonText.setValue("All waypoints."); + objectiveButtonText.setValue("All flags and switches."); + handToolText.setValue("Toggles between hand (for moving the map) and pointer (for selecting objects and dragging selection)."); + zoomToolText.setValue("When this tool is on, left click to zoom in and right click to zoom out."); + centerToolText.setValue("Centers your view on selected object. If nothing is selected, centers the view on mission area."); + textToolText.setValue("Toggles map text labels on and off."); + cameraToolText.setValue("Gives you a small camera view of the area around selected object. Waypoints and enemy objects can not be viewed."); + sensorToolText.setValue("Toggles all sensor spheres on/off so you can check your team's sensor coverage."); + generalHelpText.setValue("Right click any object to display commands. Click on the command or type the highlighted letter to issue it to your team. To command an individual, click on the player's name, then issue the command."); + $cmdMapHelpTextShown = true; + } + CmdMapHelpTextGui.setVisible(true); + } +} diff --git a/base/scripts/commanderMapIcons.cs b/base/scripts/commanderMapIcons.cs new file mode 100644 index 0000000..5aeca6e --- /dev/null +++ b/base/scripts/commanderMapIcons.cs @@ -0,0 +1,112 @@ +// "type image overlay modulate {anim flags} {anim speed}" +datablock CommanderIconData(CMDPlayerIcon) +{ + baseImage = "static com_player_grey_24x false true"; + selectImage = "static com_player_grey_24x_glow true true"; + hilightImage = "static com_player_grey_24x_glow true true"; +}; + +datablock CommanderIconData(CMDGeneratorIcon) +{ + baseImage = "static com_icon_generator false true"; + selectImage = "static com_icon_generator_glow true true"; + hilightImage = "static com_icon_generator_glow true true"; +}; + +datablock CommanderIconData(CMDSolarGeneratorIcon) +{ + baseImage = "static com_icon_solar_gen false true"; + selectImage = "static com_icon_solar_gen_glow true true"; + hilightImage = "static com_icon_solar_gen_glow true true"; +}; + +datablock CommanderIconData(CMDHoverScoutIcon) +{ + baseImage = "static com_icon_landscout false true"; + selectImage = "static com_icon_landscout_glow true true"; + hilightImage = "static com_icon_landscout_glow true true"; +}; + +datablock CommanderIconData(CMDFlyingScoutIcon) +{ + baseImage = "static com_icon_scout false true"; + selectImage = "static com_icon_scout_glow true true"; + hilightImage = "static com_icon_scout_glow true true"; +}; + +datablock CommanderIconData(CMDFlyingBomberIcon) +{ + baseImage = "static com_icon_bomber false true"; + selectImage = "static com_icon_bomber_glow true true"; + hilightImage = "static com_icon_bomber_glow true true"; +}; + +datablock CommanderIconData(CMDFlyingHAPCIcon) +{ + baseImage = "static com_icon_hapc false true"; + selectImage = "static com_icon_hapc_glow true true"; + hilightImage = "static com_icon_hapc_glow true true"; +}; + +datablock CommanderIconData(CMDGroundTankIcon) +{ + baseImage = "static com_icon_tank false true"; + selectImage = "static com_icon_tank_glow true true"; + hilightImage = "static com_icon_tank_glow true true"; +}; + +datablock CommanderIconData(CMDTurretIcon) +{ + baseImage = "static com_icon_turret false true"; + selectImage = "static com_icon_turret_glow true true"; + hilightImage = "static com_icon_turret_glow true true"; +}; + +datablock CommanderIconData(CMDCameraIcon) +{ + baseImage = "static com_icon_camera false true"; + selectImage = "static com_icon_camera true true"; + hilightImage = "static com_icon_camera true true"; +}; + +datablock CommanderIconData(CMDFlagIcon) +{ + baseImage = "static com_icon_flag_outside false true"; + selectImage = "static com_icon_flag_outside_glow true true"; + hilightImage = "static com_icon_flag_outside_glow true true"; +}; + +datablock CommanderIconData(CMDGroundMPBIcon) +{ + baseImage = "static com_icon_mpb false true"; + selectImage = "static com_icon_mpb_glow true true"; + hilightImage = "static com_icon_mpb_glow true true"; +}; + +datablock CommanderIconData(CMDSwitchIcon) +{ + baseImage = "static com_icon_genericswitch false true"; + selectImage = "static com_icon_genericswitch_glow true true"; + hilightImage = "static com_icon_genericswitch_glow true true"; +}; + +datablock CommanderIconData(CMDStationIcon) +{ + baseImage = "static com_icon_inventory false true"; + selectImage = "static com_icon_inventory_glow true true"; + hilightImage = "static com_icon_inventory_glow true true"; +}; + +datablock CommanderIconData(CMDVehicleStationIcon) +{ + baseImage = "static com_icon_vehicle_inventory false true"; + selectImage = "static com_icon_vehicle_inventory_glow true true"; + hilightImage = "static com_icon_vehicle_inventory_glow true true"; +}; + +datablock CommanderIconData(CMDSensorIcon) +{ + baseImage = "static com_icon_sensor false true"; + selectImage = "static com_icon_sensor_glow true true"; + hilightImage = "static com_icon_sensor_glow true true"; +}; diff --git a/base/scripts/commanderProfiles.cs b/base/scripts/commanderProfiles.cs new file mode 100644 index 0000000..43fdf11 --- /dev/null +++ b/base/scripts/commanderProfiles.cs @@ -0,0 +1,120 @@ +//------------------------------------------------------------------------------ +// Cursors +//------------------------------------------------------------------------------ +new GuiCursor(CMDCursorArrow) +{ + hotSpot = "6 1"; + bitmapName = "commander/cursors/com_cursor_arrow_icon"; +}; + +new GuiCursor(CMDCursorHandOpen) +{ + hotSpot = "13 14"; + bitmapName = "commander/cursors/com_handopen_icon"; +}; + +new GuiCursor(CMDCursorHandClosed) +{ + hotSpot = "13 14"; + bitmapName = "commander/cursors/com_handclose_icon"; +}; + +new GuiCursor(CMDCursorZoom) +{ + hotSpot = "8 7"; + bitmapName = "commander/cursors/com_maglass_icon"; +}; + +new GuiCursor(CMDCursorSelectAdd) +{ + hotSpot = "11 11"; + bitmapName = "commander/cursors/com_pointer_pos_icon"; +}; + +new GuiCursor(CMDCursorSelectRemove) +{ + hotSpot = "11 11"; + bitmapName = "commander/cursors/com_pointer_icon"; +}; + +//------------------------------------------------------------------------------ +// Audio +//------------------------------------------------------------------------------ + +new AudioDescription(AudioLoop2D) +{ + volume = "1.0"; + isLooping = true; + is3D = false; + type = $GuiAudioType; +}; + +new AudioProfile(sStatic) +{ + filename = "fx/misc/static.wav"; + description = AudioLoop2D; + preload = true; +}; + +//------------------------------------------------------------------------------ +// Profiles +//------------------------------------------------------------------------------ +new GuiControlProfile("CommanderTreeContentProfile") +{ + opaque = true; + fillColor = "140 140 140"; + border = false; +}; + +new GuiControlProfile("CommanderScrollContentProfile") +{ + opaque = true; + fillColor = "0 0 0"; + border = false; +}; + +new GuiControlProfile("CommanderButtonProfile") +{ + opaque = false; + fontType = $ShellButtonFont; + fontSize = $ShellButtonFontSize; + fontColor = "8 19 6"; + fontColorHL = "25 68 56"; + fontColorNA = "98 98 98"; + fixedExtent = true; + justify = "center"; + bitmap = "gui/shll_button"; + textOffset = "0 11"; + soundButtonOver = sButtonOver; + tab = false; + canKeyFocus = false; +}; + +new GuiControlProfile("CommanderGuiProfile") +{ + opaque = true; + fillColor = "0 0 0"; +}; + +new GuiControlProfile("CommanderPopupProfile") +{ + fontType = "Arial Bold"; + fontSize = 14; + opaque = true; + fillColor = "65 141 148"; + border = true; + borderColor= "105 181 188"; + justify = center; + + fontColors[0] = "255 255 255"; // text color + fontColors[1] = "255 255 0"; // hotkey color +}; + +new GuiControlProfile("CommanderTreeProfile") +{ + fontColors[0] = "220 220 220"; // CategoryNormal + fontColors[1] = "230 169 0"; // CategoryHilight + fontColors[2] = "170 170 170"; // CategoryEmpty + fontColors[3] = "255 255 0"; // ClientNoneEntry + fontColors[4] = "255 255 255"; // TargetEntry +}; \ No newline at end of file diff --git a/base/scripts/commonDialogs.cs b/base/scripts/commonDialogs.cs new file mode 100644 index 0000000..708bdc3 --- /dev/null +++ b/base/scripts/commonDialogs.cs @@ -0,0 +1,213 @@ +//------------------------------------------------------------------------------ +// +// commonDialogs.cs +// +//------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ +// MessageBox OK dialog: +//------------------------------------------------------------------------------ +function MessageBoxOK( %title, %message, %callback ) +{ + MBOKFrame.setTitle( %title ); + MBOKText.setText( "" @ %message ); + MessageBoxOKDlg.callback = %callback; + Canvas.pushDialog( MessageBoxOKDlg ); +} + +//------------------------------------------------------------------------------ +function MessageBoxOKDlg::onWake( %this ) +{ + %this.mouseOn = Canvas.isCursorOn(); + if ( !%this.mouseOn ) + CursorOn(); +} + +//------------------------------------------------------------------------------ +function MessageBoxOKDlg::onSleep( %this ) +{ + if ( !%this.mouseOn ) + CursorOff(); + %this.callback = ""; +} + +//------------------------------------------------------------------------------ +// MessageBox OK/Cancel dialog: +//------------------------------------------------------------------------------ +function MessageBoxOKCancel( %title, %message, %callback, %cancelCallback ) +{ + MBOKCancelFrame.setTitle( %title ); + MBOKCancelText.setText( "" @ %message ); + MessageBoxOKCancelDlg.callback = %callback; + MessageBoxOKCancelDlg.cancelCallback = %cancelCallback; + Canvas.pushDialog( MessageBoxOKCancelDlg ); +} + +//------------------------------------------------------------------------------ +function MessageBoxOKCancelDlg::onWake( %this ) +{ + %this.mouseOn = Canvas.isCursorOn(); + if ( !%this.mouseOn ) + CursorOn(); +} + +//------------------------------------------------------------------------------ +function MessageBoxOKCancelDlg::onSleep( %this ) +{ + if ( !%this.mouseOn ) + CursorOff(); + %this.callback = ""; +} + +//------------------------------------------------------------------------------ +// MessageBox Yes/No dialog: +//------------------------------------------------------------------------------ +function MessageBoxYesNo( %title, %message, %yesCallback, %noCallback ) +{ + MBYesNoFrame.setTitle( %title ); + MBYesNoText.setText( "" @ %message ); + MessageBoxYesNoDlg.yesCallBack = %yesCallback; + MessageBoxYesNoDlg.noCallback = %noCallBack; + Canvas.pushDialog( MessageBoxYesNoDlg ); +} + +//------------------------------------------------------------------------------ +function MessageBoxYesNoDlg::onWake( %this ) +{ + %this.mouseOn = Canvas.isCursorOn(); + if ( !%this.mouseOn ) + CursorOn(); +} + +//------------------------------------------------------------------------------ +function MessageBoxYesNoDlg::onSleep( %this ) +{ + if ( !%this.mouseOn ) + CursorOff(); + %this.yesCallback = ""; + %this.noCallback = ""; +} + +//------------------------------------------------------------------------------ +// Message popup dialog: +//------------------------------------------------------------------------------ +function MessagePopup( %title, %message, %delay ) +{ + // Currently two lines max. + MessagePopFrame.setTitle( %title ); + MessagePopText.setText( "" @ %message ); + Canvas.pushDialog( MessagePopupDlg ); + if ( %delay !$= "" ) + schedule( %delay, 0, CloseMessagePopup ); +} + +//------------------------------------------------------------------------------ +function CloseMessagePopup() +{ + Canvas.popDialog( MessagePopupDlg ); +} + +//------------------------------------------------------------------------------ +// Pick Team dialog: +//------------------------------------------------------------------------------ +function PickTeamDlg::onWake( %this ) +{ + %this.mouseOn = Canvas.isCursorOn(); + if ( !%this.mouseOn ) + CursorOn(); +} + +//------------------------------------------------------------------------------ +function PickTeamDlg::onSleep( %this ) +{ + if ( !%this.mouseOn ) + CursorOff(); +} + +//------------------------------------------------------------------------------ +// ex: ShellGetLoadFilename( "stuff\*.*", isLoadable, loadStuff ); +// -- only adds files that pass isLoadable +// -- calls 'loadStuff(%filename)' on dblclick or ok +//------------------------------------------------------------------------------ +function ShellGetLoadFilename( %title, %fileSpec, %validate, %callback ) +{ + $loadFileCommand = %callback @ "( getField( LOAD_FileList.getValue(), 0 ) );"; + if ( %title $= "" ) + LOAD_Title.setTitle( "LOAD FILE" ); + else + LOAD_Title.setTitle( %title ); + LOAD_LoadBtn.setActive( false ); + Canvas.pushDialog( ShellLoadFileDlg ); + fillLoadSaveList( LOAD_FileList, %fileSpec, %validate, false ); +} + +//------------------------------------------------------------------------------ +function fillLoadSaveList( %ctrl, %fileSpec, %validate, %isSave ) +{ + %ctrl.clear(); + %id = 0; + for ( %file = findFirstFile( %fileSpec ); %file !$= ""; %file = findNextFile( %fileSpec ) ) + { + if ( %validate $= "" || call( %validate, %file ) ) + { + %ctrl.addRow( %id, fileBase( %file ) TAB %file ); + if ( %isSave ) + { + if ( !isWriteableFileName( "base/" @ %file ) ) + %ctrl.setRowActive( %id, false ); + } + %id++; + } + } +} + +//------------------------------------------------------------------------------ +function LOAD_FileList::onSelect( %this, %id, %text ) +{ + LOAD_LoadBtn.setActive( true ); +} + +//------------------------------------------------------------------------------ +// ex: ShellGetSaveFilename( "stuff\*.*", isLoadable, saveStuff, currentName ); +// -- only adds files to list that pass isLoadable +// -- calls 'saveStuff(%filename)' on dblclick or ok +//------------------------------------------------------------------------------ +function ShellGetSaveFilename( %title, %fileSpec, %validate, %callback, %current ) +{ + SAVE_FileName.setValue( %current ); + $saveFileCommand = "if ( SAVE_FileName.getValue() !$= \"\" ) " @ %callback @ "( SAVE_FileName.getValue() );"; + if ( %title $= "" ) + SAVE_Title.setTitle( "SAVE FILE" ); + else + SAVE_Title.setTitle( %title ); + + // Right now this validation stuff is worthless... + //SAVE_SaveBtn.setActive( isWriteableFileName( "base/" @ %current @ $loadSaveExt ) ); + Canvas.pushDialog( ShellSaveFileDlg ); + fillLoadSaveList( SAVE_FileList, %fileSpec, %validate, true ); +} + +//------------------------------------------------------------------------------ +function SAVE_FileList::onSelect( %this, %id, %text ) +{ + if ( %this.isRowActive( %id ) ) + SAVE_FileName.setValue( getField( %this.getValue(), 0 ) ); +} + +//------------------------------------------------------------------------------ +function SAVE_FileList::onDoubleClick( %this ) +{ + %id = %this.getSelectedId(); + if ( %this.isRowActive( %id ) ) + { + eval( $saveFileCommand ); + Canvas.popDialog( ShellSaveFileDlg ); + } +} + +//------------------------------------------------------------------------------ +function SAVE_FileName::checkValid( %this ) +{ + // Right now this validation stuff is worthless... + //SAVE_SaveBtn.setActive( isWriteableFileName( "base/" @ %this.getValue() @ $loadSaveExt ) ); +} diff --git a/base/scripts/controlDefaults.cs b/base/scripts/controlDefaults.cs new file mode 100644 index 0000000..edea3a5 --- /dev/null +++ b/base/scripts/controlDefaults.cs @@ -0,0 +1,1330 @@ +if ( isObject( moveMap ) ) + moveMap.delete(); +new ActionMap(moveMap); + +//------------------------------------------------------------------------------ +// Utility remap functions: +//------------------------------------------------------------------------------ +function ActionMap::copyBind( %this, %otherMap, %command ) +{ + if ( !isObject( %otherMap ) ) + { + error( "ActionMap::copyBind - \"" @ %otherMap @ "\" is not an object!" ); + return; + } + + %bind = %otherMap.getBinding( %command ); + if ( %bind !$= "" ) + { + %device = getField( %bind, 0 ); + %action = getField( %bind, 1 ); + %flags = %otherMap.isInverted( %device, %action ) ? "SDI" : "SD"; + %deadZone = %otherMap.getDeadZone( %device, %action ); + %scale = %otherMap.getScale( %device, %action ); + %this.bind( %device, %action, %flags, %deadZone, %scale, %command ); + } +} + +//------------------------------------------------------------------------------ +function ActionMap::blockBind( %this, %otherMap, %command ) +{ + if ( !isObject( %otherMap ) ) + { + error( "ActionMap::copyBind - \"" @ %otherMap @ "\" is not an object!" ); + return; + } + + %bind = %otherMap.getBinding( %command ); + if ( %bind !$= "" ) + %this.bind( getField( %bind, 0 ), getField( %bind, 1 ), "" ); +} + +//------------------------------------------------------------------------------ +// NON-REMAPPABLE BINDS: +function escapeFromGame() +{ + if(TaskHudDlg.isVisible()) + showTaskHudDlg(false); + + if ( $currentMissionType $= "SinglePlayer" ) + Canvas.pushDialog( SinglePlayerEscapeDlg ); + else + Canvas.setContent( LobbyGui ); +} + +function toggleEditor(%make) +{ + if(%make) + { + if(Canvas.getContent() == Editor.getId()) + Editor.close(); + else + Editor.open(); + } +} + +moveMap.bindCmd( keyboard, "escape", "", "escapeFromGame();" ); +moveMap.bind( keyboard, "alt e", toggleEditor ); + +//------------------------------------------------------------------------------ +$movementSpeed = 1; +function setSpeed(%speed) +{ + if(%speed) + $movementSpeed = %speed; +} + +function moveleft(%val) +{ + $mvLeftAction = %val; +} + +function moveright(%val) +{ + $mvRightAction = %val; +} + +function moveforward(%val) +{ + $mvForwardAction = %val; +} + +function movebackward(%val) +{ + $mvBackwardAction = %val; +} + +function moveup(%val) +{ + $mvUpAction = %val; +} + +function movedown(%val) +{ + $mvDownAction = %val; +} + +function turnLeft( %val ) +{ + $mvYawRightSpeed = %val ? $pref::Input::KeyboardTurnSpeed : 0; +} + +function turnRight( %val ) +{ + $mvYawLeftSpeed = %val ? $pref::Input::KeyboardTurnSpeed : 0; +} + +function panUp( %val ) +{ + $mvPitchDownSpeed = %val ? $pref::Input::KeyboardTurnSpeed : 0; +} + +function panDown( %val ) +{ + $mvPitchUpSpeed = %val ? $pref::Input::KeyboardTurnSpeed : 0; +} + +// based on a default camera fov of 90' +function getMouseAdjustAmount(%val) +{ + return(%val * ($cameraFov / 90) * 0.01); +} + +function yaw(%val) +{ + $mvYaw += getMouseAdjustAmount(%val); +} + +function pitch(%val) +{ + $mvPitch += getMouseAdjustAmount(%val); +} + +moveMap.bind( keyboard, s, moveleft ); +moveMap.bind( keyboard, f, moveright ); +moveMap.bind( keyboard, e, moveforward ); +moveMap.bind( keyboard, d, movebackward ); + +function toggleDepth(%val) +{ + if (%val) { + $testDepth = !$testDepth; + } +} + +function snLine(%val) { if(%val) snapLine(); } +function snToggle(%val) { if(%val) snapToggle(); } + +moveMap.bind( mouse, xaxis, yaw ); +moveMap.bind( mouse, yaxis, pitch ); +moveMap.bind( keyboard, space, jump ); +moveMap.bind( mouse, button0, mouseFire ); +moveMap.bind( mouse, button1, mouseJet ); +//moveMap.bind( keyboard, "shift a", altTrigger ); + +//------------------------------------------------------------------------------ +// MESSAGE HUD FUNCTIONS: +function pageMessageHudUp( %val ) +{ + if ( %val ) + pageUpMessageHud(); +} + +function pageMessageHudDown( %val ) +{ + if ( %val ) + pageDownMessageHud(); +} + +moveMap.bind( keyboard, "pageUp", pageMessageHudUp ); +moveMap.bind( keyboard, "pageDown", pageMessageHudDown ); + +//------------------------------------------------------------------------------ +// VOICE CAPTURE FUNCTIONS: +function voiceCapStart() +{ + vcRecordingHud.setVisible(true); + voiceCommHud.setVisible(true); + resizeVoiceCommWindow(); + alxCaptureStart(); +} + +function voiceCapStop() +{ + vcRecordingHud.setVisible(false); + if($numTalking < 1) + voiceCommHud.setVisible(false); + alxCaptureStop(); +} + +function voiceCapture( %val ) +{ + if ( %val ) + voiceCapStart(); + else + voiceCapStop(); +} + +moveMap.bind(keyboard, x, voiceCapture); + +//------------------------------------------------------------------------------ +// WEAPON CYCLING FUNCTIONS: +function prevWeapon( %val ) +{ + if ( %val ) + commandToServer( 'cycleWeapon', "prev" ); +} + +function nextWeapon( %val ) +{ + if ( %val ) + commandToServer( 'cycleWeapon', "next" ); +} + +function cycleWeaponAxis( %val ) +{ + if ( %val < 0 ) + commandToServer( 'cycleWeapon', "next" ); + else + commandToServer( 'cycleWeapon', "prev" ); +} + +function cycleNextWeaponOnly( %val ) +{ + if ( %val < 0 ) + commandToServer( 'cycleWeapon', "next" ); +} + +moveMap.bind( keyboard, "shift w", prevWeapon ); +moveMap.bind( keyboard, w, nextWeapon ); +moveMap.bind( mouse, zaxis, cycleWeaponAxis ); + +function toggleFreeLook( %val ) +{ + if ( %val ) + $mvFreeLook = true; + else + $mvFreeLook = false; +} + +function useRepairKit( %val ) +{ + if ( %val ) + use( RepairKit ); +} + +function useBackPack( %val ) +{ + if ( %val ) + commandToServer( 'startUseBackpack', BackPack ); + else + commandToServer( 'endUseBackpack', BackPack ); +} + +function ServerCmdStartUseBackpack( %client, %data ) +{ + %client.deployPack = false; + %client.getControlObject().use( %data ); +} + +function ServerCmdEndUseBackpack( %client ) +{ + %client.deployPack = true; +} + +moveMap.bind( keyboard, z, toggleFreeLook ); +moveMap.bind( keyboard, q, useRepairKit ); +moveMap.bind( keyboard, r, useBackpack ); + +//------------------------------------------------------------------------------ +// WEAPON SLOT SELECTION FUNCTIONS: +function useFirstWeaponSlot( %val ) +{ + if ( %val ) + commandToServer( 'selectWeaponSlot', 0 ); +} + +function useSecondWeaponSlot( %val ) +{ + if ( %val ) + commandToServer( 'selectWeaponSlot', 1 ); +} + +function useThirdWeaponSlot( %val ) +{ + if ( %val ) + commandToServer( 'selectWeaponSlot', 2 ); +} + +function useFourthWeaponSlot( %val ) +{ + if ( %val ) + commandToServer( 'selectWeaponSlot', 3 ); +} + +function useFifthWeaponSlot( %val ) +{ + if ( %val ) + commandToServer( 'selectWeaponSlot', 4 ); +} + +function useSixthWeaponSlot( %val ) +{ + if ( %val ) + commandToServer( 'selectWeaponSlot', 5 ); +} + +moveMap.bind( keyboard, "1", useFirstWeaponSlot ); +moveMap.bind( keyboard, "2", useSecondWeaponSlot ); +moveMap.bind( keyboard, "3", useThirdWeaponSlot ); +moveMap.bind( keyboard, "4", useFourthWeaponSlot ); +moveMap.bind( keyboard, "5", useFifthWeaponSlot ); +moveMap.bind( keyboard, "6", useSixthWeaponSlot ); + +//------------------------------------------------------------------------------ +// DIRECT WEAPON SELECTION FUNCTIONS: +function useBlaster( %val ) +{ + if ( %val ) + use( Blaster ); +} + +function usePlasma( %val ) +{ + if ( %val ) + use( Plasma ); +} + +function useChaingun( %val ) +{ + if ( %val ) + use( Chaingun ); +} + +function useDisc( %val ) +{ + if ( %val ) + use( Disc ); +} + +function useGrenadeLauncher( %val ) +{ + if ( %val ) + use( GrenadeLauncher ); +} + +function useSniperRifle( %val ) +{ + if ( %val ) + use( SniperRifle ); +} + +function useELFGun( %val ) +{ + if ( %val ) + use( ELFGun ); +} + +function useMortar( %val ) +{ + if ( %val ) + use( Mortar ); +} + +function useMissileLauncher( %val ) +{ + if ( %val ) + use( MissileLauncher ); +} + +function useTargetingLaser( %val ) +{ + if ( %val ) + use( TargetingLaser ); +} + +function useShockLance( %val ) +{ + if ( %val ) + use( ShockLance ); +} + +function throwGrenade( %val ) +{ + if ( %val ) + commandToServer( 'startThrowCount' ); + else + commandToServer( 'endThrowCount' ); + $mvTriggerCount4++; +} + +function placeMine( %val ) +{ + if ( %val ) + commandToServer( 'startThrowCount' ); + else + commandToServer( 'endThrowCount' ); + $mvTriggerCount5++; +} + +function placeBeacon( %val ) +{ + if ( %val ) + use( Beacon); +} + +moveMap.bind( keyboard, g, throwGrenade ); +moveMap.bind( keyboard, b, placeMine ); +moveMap.bind( keyboard, h, placeBeacon ); +moveMap.bind( keyboard, l, useTargetingLaser ); + +function throwWeapon( %val ) +{ + if ( %val ) + commandToServer( 'throwWeapon' ); +} + +function throwPack( %val ) +{ + if ( %val ) + commandToServer('throwPack'); +} + +function throwFlag( %val ) +{ + if ( %val ) + commandToServer('throwFlag'); +} + +moveMap.bind( keyboard, "ctrl w", throwWeapon ); +moveMap.bind( keyboard, "ctrl r", throwPack ); +moveMap.bind( keyboard, "ctrl f", throwFlag ); + +function resizeChatHud( %val ) +{ + if ( %val ) + MainChatHud.nextChatHudLen(); +} + +moveMap.bind( keyboard, "p", resizeChatHud ); + +//------------------------------------------------------------------------------ +// ZOOM FUNCTIONS: +if($pref::player::currentFOV $= "") + $pref::player::currentFOV = 45; + +function setZoomFOV(%val) +{ + if(%val) + calcZoomFOV(); +} + +function toggleZoom( %val ) +{ + if ( %val ) + { + if(ZoomHud.isVisible()) + { + cancel(ZoomHud.hideThread); + hideZoomHud(); + } + $ZoomOn = true; + setFov( $pref::player::currentFOV ); + } + else + { + $ZoomOn = false; + setFov( $pref::player::defaultFov ); + } +} + +moveMap.bind(keyboard, t, setZoomFOV); +moveMap.bind(keyboard, a, toggleZoom); + +//------------------------------------------------------------------------------ +// INVENTORY FAVORITE FUNCTIONS: +function toggleInventoryHud( %val ) +{ + if ( %val ) + toggleCursorHuds('inventoryScreen'); +} + +function selectFavorite1( %val ) +{ + if ( %val ) + loadFavorite( 0, 1 ); +} + +function selectFavorite2( %val ) +{ + if ( %val ) + loadFavorite( 1, 1 ); +} + +function selectFavorite3( %val ) +{ + if ( %val ) + loadFavorite( 2, 1 ); +} + +function selectFavorite4( %val ) +{ + if ( %val ) + loadFavorite( 3, 1 ); +} + +function selectFavorite5( %val ) +{ + if ( %val ) + loadFavorite( 4, 1 ); +} + +function selectFavorite6( %val ) +{ + if ( %val ) + loadFavorite( 5, 1 ); +} + +function selectFavorite7( %val ) +{ + if ( %val ) + loadFavorite( 6, 1 ); +} + +function selectFavorite8( %val ) +{ + if ( %val ) + loadFavorite( 7, 1 ); +} + +function selectFavorite9( %val ) +{ + if ( %val ) + loadFavorite( 8, 1 ); +} + +function selectFavorite10( %val ) +{ + if ( %val ) + loadFavorite( 9, 1 ); +} + +function selectFavorite11( %val ) +{ + if ( %val ) + loadFavorite( 10, 1 ); +} + +function selectFavorite12( %val ) +{ + if ( %val ) + loadFavorite( 11, 1 ); +} + +function selectFavorite13( %val ) +{ + if ( %val ) + loadFavorite( 12, 1 ); +} + +function selectFavorite14( %val ) +{ + if ( %val ) + loadFavorite( 13, 1 ); +} + +function selectFavorite15( %val ) +{ + if ( %val ) + loadFavorite( 14, 1 ); +} + +function selectFavorite16( %val ) +{ + if ( %val ) + loadFavorite( 15, 1 ); +} + +function selectFavorite17( %val ) +{ + if ( %val ) + loadFavorite( 16, 1 ); +} + +function selectFavorite18( %val ) +{ + if ( %val ) + loadFavorite( 17, 1 ); +} + +function selectFavorite19( %val ) +{ + if ( %val ) + loadFavorite( 18, 1 ); +} + +function selectFavorite20( %val ) +{ + if ( %val ) + loadFavorite( 19, 1 ); +} + +moveMap.bind( keyboard, numpadenter, toggleInventoryHud ); +moveMap.bind( keyboard, numpad1, selectFavorite1 ); +moveMap.bind( keyboard, numpad2, selectFavorite2 ); +moveMap.bind( keyboard, numpad3, selectFavorite3 ); +moveMap.bind( keyboard, numpad4, selectFavorite4 ); +moveMap.bind( keyboard, numpad5, selectFavorite5 ); +moveMap.bind( keyboard, numpad6, selectFavorite6 ); +moveMap.bind( keyboard, numpad7, selectFavorite7 ); +moveMap.bind( keyboard, numpad8, selectFavorite8 ); +moveMap.bind( keyboard, numpad9, selectFavorite9 ); +moveMap.bind( keyboard, numpad0, selectFavorite10 ); + +moveMap.bind( keyboard, "shift numpad1", selectFavorite11 ); +moveMap.bind( keyboard, "shift numpad2", selectFavorite12 ); +moveMap.bind( keyboard, "shift numpad3", selectFavorite13 ); +moveMap.bind( keyboard, "shift numpad4", selectFavorite14 ); +moveMap.bind( keyboard, "shift numpad5", selectFavorite15 ); +moveMap.bind( keyboard, "shift numpad6", selectFavorite16 ); +moveMap.bind( keyboard, "shift numpad7", selectFavorite17 ); +moveMap.bind( keyboard, "shift numpad8", selectFavorite18 ); +moveMap.bind( keyboard, "shift numpad9", selectFavorite19 ); +moveMap.bind( keyboard, "shift numpad0", selectFavorite20 ); + +moveMap.bind( keyboard, "ctrl numpad0", quickPackEnergyPack ); +moveMap.bind( keyboard, "ctrl numpad1", quickPackRepairPack ); +moveMap.bind( keyboard, "ctrl numpad2", quickPackShieldPack ); +moveMap.bind( keyboard, "ctrl numpad3", quickPackCloakPack ); +moveMap.bind( keyboard, "ctrl numpad4", quickPackJammerPack ); +moveMap.bind( keyboard, "ctrl numpad5", quickPackAmmoPack ); +moveMap.bind( keyboard, "ctrl numpad6", quickPackSatchelCharge ); +moveMap.bind( keyboard, "ctrl numpad7", quickPackDeployableStation ); +moveMap.bind( keyboard, "ctrl numpad8", quickPackIndoorTurret ); +moveMap.bind( keyboard, "ctrl numpad9", quickPackOutdoorTurret ); +moveMap.bind( keyboard, "ctrl numpaddivide", quickPackMotionSensor ); +moveMap.bind( keyboard, "ctrl numpadmult", quickPackPulse ); + +function quickPackRepairPack(%val) +{ + if(%val) + addQuickPackFavorite("Repair Pack"); +} + +function quickPackEnergyPack(%val) +{ + if(%val) + addQuickPackFavorite("Energy Pack"); +} + +function quickPackShieldPack(%val) +{ + if(%val) + addQuickPackFavorite("Shield Pack"); +} + +function quickPackCloakPack(%val) +{ + if(%val) + addQuickPackFavorite("Cloak Pack"); +} + +function quickPackJammerPack(%val) +{ + if(%val) + addQuickPackFavorite("Sensor Jammer Pack"); +} + +function quickPackAmmoPack(%val) +{ + if(%val) + addQuickPackFavorite("Ammunition Pack"); +} + +function quickPackSatchelCharge(%val) +{ + if(%val) + addQuickPackFavorite("Satchel Charge"); +} + +function quickPackDeployableStation(%val) +{ + if(%val) + addQuickPackFavorite("Inventory Station"); +} + +function quickPackIndoorTurret(%val) +{ + if(%val) + addQuickPackFavorite("Spider Clamp Turret"); +} + +function quickPackOutdoorTurret(%val) +{ + if(%val) + addQuickPackFavorite("Landspike Turret"); +} + +function quickPackMotionSensor(%val) +{ + if(%val) + addQuickPackFavorite("Motion Sensor Pack"); +} + +function quickPackPulse(%val) +{ + if(%val) + addQuickPackFavorite("Pulse Sensor Pack"); +} + +function quickPackMortarBarrel(%val) +{ + if(%val) + addQuickPackFavorite("Mortar Turret Barrel"); +} + +function quickPackElfBarrel(%val) +{ + if(%val) + addQuickPackFavorite("ELF Turret Barrel"); +} + +function quickPackAABarrel(%val) +{ + if(%val) + addQuickPackFavorite("AA Turret Barrel"); +} + +function quickPackPlasmaBarrel(%val) +{ + if(%val) + addQuickPackFavorite("Plasma Turret Barrel"); +} + +function quickPackMissileBarrel(%val) +{ + if(%val) + addQuickPackFavorite("Missile Turret Barrel"); +} + +function quickPackFlashGrenade(%val) +{ + if(%val) + addQuickPackFavorite("Whiteout Grenade", grenade); +} + +function quickPackConcussionGrenade(%val) +{ + if(%val) + addQuickPackFavorite("Concussion Grenade", grenade); +} + +function quickPackGrenade(%val) +{ + if(%val) + addQuickPackFavorite("Grenade", grenade); +} + +function quickPackFlareGrenade(%val) +{ + if(%val) + addQuickPackFavorite("Flare Grenade", grenade); +} + +function quickPackCameraGrenade(%val) +{ + if(%val) + addQuickPackFavorite("Deployable Camera", grenade); +} + +moveMap.bind( keyboard, tab, toggleFirstPerson ); +moveMap.bind( keyboard, u, ToggleMessageHud ); +moveMap.bind( keyboard, y, TeamMessageHud ); +moveMap.bind( keyboard, v, activateChatMenuHud ); + +function toggleCommanderMap( %val ) +{ + if ( %val ) + { + showTaskHudDlg(false); + CommanderMapGui.toggle(); + } +} + +moveMap.bind( keyboard, c, toggleCommanderMap ); +moveMap.bind( keyboard, "ctrl k", suicide ); + +function report(%val) +{ + if(%val) + commandToServer('report'); +} + +function suicide(%val) +{ + if (%val) + commandToServer('suicide'); +} + +function toggleFirstPerson(%val) +{ + if (%val) + { + $firstPerson = !$firstPerson; + hudFirstPersonToggled(); + } +} + +function toggleCamera(%val) +{ + if (%val) + commandToServer('ToggleCamera'); +} + +function dropPlayerAtCamera(%val) +{ + if (%val) + commandToServer('DropPlayerAtCamera'); +} + +function dropCameraAtPlayer(%val) +{ + if (%val) + commandToServer('dropCameraAtPlayer'); +} + +function dropPlayerAtCamera(%val) +{ + if (%val) + commandToServer('DropPlayerAtCamera'); +} + +function togglePlayerRace(%val) +{ + if (%val) + commandToServer('ToggleRace'); +} + +function togglePlayerGender(%val) +{ + if (%val) + commandToServer('ToggleGender'); +} + +function togglePlayerArmor(%val) +{ + if (%val) + commandToServer('ToggleArmor'); +} + +function jump(%val) +{ + $mvTriggerCount2++; +} + +// moveMap.bind(keyboard, "alt c", playCel); +// moveMap.bind(keyboard, "alt a", toggleArmor); +// moveMap.bind(keyboard, "alt d", playDeath); + +//function playCel(%val) +//{ +// if (%val) +// commandToServer('playCel',%anim); +//} + +//function playDeath(%val) +//{ +// if (%val) +// commandToServer('playDeath',%anim); +//} + +function mouseFire(%val) +{ + $mvTriggerCount0++; +} + +function mouseJet(%val) +{ + $mvTriggerCount3++; // Fire +} + +function altTrigger(%val) +{ + $mvTriggerCount1++; // Alt Trigger +} + +function testLOSTarget() +{ + ServerConnection.sendLOSTarget(); + commandToServer('TestLOS'); +} + +function serverCmdTestLOS(%client) +{ + %client.sendTargetTo(%client); + %msg = 'This is a simple test.'; + messageClient(%client, 'TestMsg', %msg); +} + +//------------------------------------------------------------------------------ +function toggleHelpGui( %val ) +{ + if ( %val ) + toggleHelpText(); +} + +function toggleScoreScreen( %val ) +{ + if ( %val ) + toggleCursorHuds('scoreScreen'); +} + +moveMap.bind( keyboard, F1, toggleHelpGui ); +moveMap.bind( keyboard, F2, toggleScoreScreen ); + +//------------------------------------------------------------------------------ +// DEMO RECORD FUNCTIONS: +function startRecordingDemo( %val ) +{ +// if ( %val ) +// beginDemoRecord(); + error( "** This function has temporarily been disabled! **" ); +} + +function stopRecordingDemo( %val ) +{ +// if ( %val ) +// stopRecord(); + error( "** This function has temporarily been disabled! **" ); +} + +//moveMap.bind( keyboard, F3, startRecordingDemo ); +//moveMap.bind( keyboard, F4, stopRecordingDemo ); + +//------------------------------------------------------------------------------ +// NAV HUD DISPLAY FUNCTIONS: +function toggleHudWaypoints(%val) +{ + if(%val) + navHud.setMarkerTypeVisible(ClientWaypoint, !navHud.isMarkerTypeVisible(ClientWaypoint)); +} + +function toggleHudMarkers(%val) +{ + if(%val) + navHud.setMarkerTypeVisible(MissionWaypoint, !navHud.isMarkerTypeVisible(MissionWaypoint)); +} + +function toggleHudTargets(%val) +{ + if(%val) + { + %visible = navHud.isMarkerTypeVisible(Target); + PlayGui.beaconsVisible = !%visible; + navHud.setMarkerTypeVisible(Target, !%visible); + } +} + +function toggleHudCommands(%val) +{ + if(%val) + { + %visible = navHud.isMarkerTypeVisible(PotentialTask); + navHud.setMarkerTypeVisible(PotentialTask, !%visible); + navHud.setMarkerTypeVisible(AssignedTask, !%visible); + } +} + +moveMap.bind( keyboard, F6, toggleHudWaypoints ); +moveMap.bind( keyboard, F7, toggleHudMarkers ); +moveMap.bind( keyboard, F8, toggleHudCommands ); +moveMap.bind( keyboard, F9, toggleHudTargets ); + +//------------------------------------------------------------------------------ +// TASK FUNCTIONS: +function fnAcceptTask( %val ) +{ + if ( %val ) + clientAcceptCurrentTask(); +} + +function fnDeclineTask( %val ) +{ + if ( %val ) + clientDeclineCurrentTask(); +} + +function fnTaskCompleted( %val ) +{ + if ( %val ) + clientTaskCompleted(); +} + +function fnResetTaskList( %val ) +{ + if ( %val ) + TaskList.reset(); +} + +// tasks +moveMap.bind( keyboard, n, toggleTaskListDlg ); +moveMap.bind( keyboard, "enter", fnAcceptTask ); +moveMap.bind( keyboard, "backspace", fnDeclineTask ); +moveMap.bind( keyboard, "shift c", fnTaskCompleted ); +moveMap.bind( keyboard, "shift x", fnResetTaskList ); + +//------------------------------------------------------------------------------ +// VOTING FUNCTIONS: +function voteYes( %val ) +{ + if ( %val ) + setPlayerVote( true ); +} + +function voteNo( %val ) +{ + if ( %val ) + setPlayerVote( false ); +} + +moveMap.bind( keyboard, insert, voteYes ); +moveMap.bind( keyboard, delete, voteNo ); + +/////////////////////// +//Vehicle Keys +/////////////////////// +function clientCmdSetWeaponryVehicleKeys() +{ + %bind = moveMap.getBinding( nextWeapon ); + passengerKeys.bind( getField( %bind, 0 ), getField( %bind, 1 ), nextVehicleWeapon ); + + %bind = moveMap.getBinding( prevWeapon ); + passengerKeys.bind( getField( %bind, 0 ), getField( %bind, 1 ), prevVehicleWeapon ); + + %bind = moveMap.getBinding( cycleWeaponAxis ); + passengerKeys.bind( getField( %bind, 0 ), getField( %bind, 1 ), cycleVehicleWeapon ); + + %bind = moveMap.getBinding( cycleNextWeaponOnly ); + passengerKeys.bind( getField( %bind, 0 ), getField( %bind, 1 ), cycleNextVehicleWeaponOnly ); + + passengerKeys.bind( keyboard, 1, useWeaponOne ); + passengerKeys.bind( keyboard, 2, useWeaponTwo ); + passengerKeys.bind( keyboard, 3, useWeaponThree ); +} + +function clientCmdSetPilotVehicleKeys() +{ + passengerKeys.copyBind( moveMap, toggleFirstPerson ); + passengerKeys.copyBind( moveMap, toggleFreeLook ); + passengerKeys.copyBind( moveMap, mouseJet ); + + // Use the InvertVehicleYAxis pref: + if ( $pref::Vehicle::InvertYAxis ) + { + %bind = moveMap.getBinding( pitch ); + %device = getField( %bind, 0 ); + %action = getField( %bind, 1 ); + %flags = moveMap.isInverted( %device, %action ) ? "SD" : "SDI"; + %deadZone = moveMap.getDeadZone( %device, %action ); + %scale = moveMap.getScale( %device, %action ); + passengerKeys.bind( %device, %action, %flags, %deadZone, %scale, pitch ); + } +} + +function clientCmdSetPassengerVehicleKeys() +{ + passengerKeys.copyBind( moveMap, toggleZoom ); + passengerKeys.copyBind( moveMap, setZoomFOV ); +} + +function clientCmdSetDefaultVehicleKeys(%inVehicle) +{ + if ( %inVehicle ) + { + if ( isObject( passengerKeys ) ) + { + passengerKeys.pop(); + passengerKeys.delete(); + } + new ActionMap( passengerKeys ); + + // Bind all of the movement keys: + passengerKeys.copyBind( moveMap, moveleft ); + passengerKeys.copyBind( moveMap, moveright ); + passengerKeys.copyBind( moveMap, moveforward ); + passengerKeys.copyBind( moveMap, movebackward ); + passengerKeys.copyBind( moveMap, mouseFire ); + passengerKeys.copyBind( moveMap, yaw ); + passengerKeys.copyBind( moveMap, pitch ); + passengerKeys.copyBind( moveMap, turnLeft ); + passengerKeys.copyBind( moveMap, turnRight ); + passengerKeys.copyBind( moveMap, panUp ); + passengerKeys.copyBind( moveMap, panDown ); + passengerKeys.copyBind( moveMap, jump ); + passengerKeys.copyBind( moveMap, setZoomFOV ); + passengerKeys.copyBind( moveMap, toggleZoom ); + + // Bind the chat keys as well: + passengerKeys.copyBind( moveMap, ToggleMessageHud ); + passengerKeys.copyBind( moveMap, TeamMessageHud ); + passengerKeys.copyBind( moveMap, resizeChatHud ); + passengerKeys.copyBind( moveMap, pageMessageHudUp ); + passengerKeys.copyBind( moveMap, pageMessageHudDown ); + passengerKeys.copyBind( moveMap, activateChatMenuHud ); + passengerKeys.copyBind( moveMap, voiceCapture ); + + // Miscellaneous other binds: + passengerKeys.copyBind( moveMap, useBackpack ); + passengerKeys.copyBind( moveMap, useRepairKit ); + passengerKeys.copyBind( moveMap, suicide ); + passengerKeys.copyBind( moveMap, voteYes ); + passengerKeys.copyBind( moveMap, voteNo ); + passengerKeys.copyBind( moveMap, toggleCommanderMap ); + passengerKeys.bindCmd( keyboard, escape, "", "escapeFromGame();" ); + + // Bind the weapon keys as well: + passengerKeys.copyBind( moveMap, nextWeapon ); + passengerKeys.copyBind( moveMap, prevWeapon ); + passengerKeys.copyBind( moveMap, cycleWeaponAxis ); + passengerKeys.copyBind( moveMap, cycleNextWeaponOnly ); + + passengerKeys.copyBind( moveMap, useFirstWeaponSlot ); + passengerKeys.copyBind( moveMap, useSecondWeaponSlot ); + passengerKeys.copyBind( moveMap, useThirdWeaponSlot ); + passengerKeys.copyBind( moveMap, useFourthWeaponSlot ); + passengerKeys.copyBind( moveMap, useFifthWeaponSlot ); + passengerKeys.copyBind( moveMap, useSixthWeaponSlot ); + + // Bind individual weapons as well: + passengerKeys.copyBind( moveMap, useBlaster ); + passengerKeys.copyBind( moveMap, usePlasma ); + passengerKeys.copyBind( moveMap, useChaingun ); + passengerKeys.copyBind( moveMap, useDisc ); + passengerKeys.copyBind( moveMap, useGrenadeLauncher ); + passengerKeys.copyBind( moveMap, useSniperRifle ); + passengerKeys.copyBind( moveMap, useELFGun ); + passengerKeys.copyBind( moveMap, useMortar ); + passengerKeys.copyBind( moveMap, useMissileLauncher ); + passengerKeys.copyBind( moveMap, useTargetingLaser ); + passengerKeys.copyBind( moveMap, useShockLance ); + passengerKeys.copyBind( moveMap, throwGrenade ); + passengerKeys.copyBind( moveMap, placeMine ); + + // Bind the command assignment/response keys as well: + passengerKeys.copyBind( moveMap, toggleTaskListDlg ); + passengerKeys.copyBind( moveMap, fnAcceptTask ); + passengerKeys.copyBind( moveMap, fnDeclineTask ); + passengerKeys.copyBind( moveMap, fnTaskCompleted ); + passengerKeys.copyBind( moveMap, fnResetTaskList ); + } + else if ( isObject( passengerKeys ) ) + { + passengerKeys.pop(); + passengerKeys.delete(); + } +} + +function useWeaponOne(%val) +{ + if(%val) + commandToServer('setVehicleWeapon', 1); +} + +function useWeaponTwo(%val) +{ + if(%val) + commandToServer('setVehicleWeapon', 2); +} + +function useWeaponThree(%val) +{ + if(%val) + commandToServer('setVehicleWeapon', 3); +} + +function serverCmdSetVehicleWeapon(%client, %num) +{ + %turret = %client.player.getControlObject(); + if(%turret.getDataBlock().numWeapons < %num) + return; + %turret.selectedWeapon = %num; + + //%hudNum = %turret.getDataBlock().getHudNum(%num); + //%client.setVWeaponsHudActive(%hudNum); + %client.setVWeaponsHudActive(%num); + + // set the active image on the client's obj + if(%num == 1) + %client.setObjectActiveImage(%turret, 2); + else if(%num == 2) + %client.setObjectActiveImage(%turret, 4); + else + %client.setObjectActiveImage(%turret, 6); + + // if firing then set the proper image trigger + if(%turret.fireTrigger) + { + if(%num == 1) + { + %turret.setImageTrigger(4, false); + if(%turret.getImageTrigger(6)) + { + %turret.setImageTrigger(6, false); + ShapeBaseImageData::deconstruct(%turret.getMountedImage(6), %turret); + } + %turret.setImageTrigger(2, true); + } + else if( %num == 2) + { + %turret.setImageTrigger(2, false); + if(%turret.getImageTrigger(6)) + { + %turret.setImageTrigger(6, false); + ShapeBaseImageData::deconstruct(%turret.getMountedImage(6), %turret); + } + %turret.setImageTrigger(4, true); + } + else + { + %turret.setImageTrigger(2, false); + %turret.setImageTrigger(4, false); + } + + } + +} + +function nextVehicleWeapon(%val) +{ + if ( %val ) + commandToServer('switchVehicleWeapon', "next"); +} + +function prevVehicleWeapon(%val) +{ + if ( %val ) + commandToServer('switchVehicleWeapon', "prev"); +} + +function cycleVehicleWeapon( %val ) +{ + if ( %val < 0 ) + commandToServer( 'switchVehicleWeapon', "next" ); + else + commandToServer( 'switchVehicleWeapon', "prev" ); +} + +function cycleNextVehicleWeaponOnly( %val ) +{ + if ( %val < 0 ) + commandToServer( 'switchVehicleWeapon', "next" ); +} + +function serverCmdSwitchVehicleWeapon(%client, %dir) +{ + %turret = %client.player.getControlObject(); + %weaponNum = %turret.selectedWeapon; + if(%dir $= "next") + { + if(%weaponNum++ > %turret.getDataBlock().numWeapons) + %weaponNum = 1; + } + else + { + if(%weaponNum-- < 1) + %weaponNum = %turret.getDataBlock().numWeapons; + } + serverCmdSetVehicleWeapon(%client, %weaponNum); +} + + +/////////////////////// +//Station +/////////////////////// +function clientCmdSetStationKeys(%inStation) +{ + if ( %inStation ) + { + if ( isObject( stationMap ) ) + { + stationMap.pop(); + stationMap.delete(); + } + new ActionMap( stationMap ); + stationMap.blockBind( moveMap, toggleInventoryHud ); + stationMap.bind( keyboard, escape, "" ); + stationMap.push(); + } + else if ( isObject( stationMap ) ) + { + stationMap.pop(); + stationMap.delete(); + } +} + +$MFDebugRenderMode = 0; +function cycleDebugRenderMode() +{ + if($MFDebugRenderMode == 0) + { + show(); + GLEnableOutline(true); + $MFDebugRenderMode = 1; + } + else if ($MFDebugRenderMode == 1) + { + GLEnableOutline(false); + setInteriorRenderMode(7); + $MFDebugRenderMode = 2; + } + else if ($MFDebugRenderMode == 2) + { + setInteriorRenderMode(0); + GLEnableOutline(false); + showTri(); + $MFDebugRenderMode = 0; + } +} + +// Since the toggle console key is remappable, put it here: +GlobalActionMap.bind(keyboard, "grave", toggleConsole); diff --git a/base/scripts/creditsGui.cs b/base/scripts/creditsGui.cs new file mode 100644 index 0000000..27dec3d --- /dev/null +++ b/base/scripts/creditsGui.cs @@ -0,0 +1,130 @@ +function LaunchCredits() +{ + Canvas.setContent(CreditsGui); +} + +function cancelCredits() +{ + //delete the action map + CreditsActionMap.pop(); + + //kill the schedules + cancel($CreditsScrollSchedule); + cancel($CreditsSlideShow); + + //kill the music + MusicPlayer.stop(); + + //load the launch gui back... + Canvas.setContent(LaunchGui); + + //delete the contents of the ML ctrl so as to free up memory... + Credits_Text.setText(""); + + //restore the mouse + ConsoleDlg.mouseOn = true; + cursorOn(); +} + +function CreditsGui::onWake(%this) +{ + //create an action map to use "esc" to exit the credits screen... + if (!isObject(CreditsActionMap)) + { + new ActionMap(CreditsActionMap); + CreditsActionMap.bindCmd(keyboard, anykey, "cancelCredits();", ""); + CreditsActionMap.bindCmd(keyboard, space, "cancelCredits();", ""); + CreditsActionMap.bindCmd(keyboard, escape, "cancelCredits();", ""); + CreditsActionMap.bindCmd(mouse, button0, "$CreditsPaused = true;", "$CreditsPaused = false;"); + CreditsActionMap.bindCmd(mouse, button1, "$CreditsSpeedUp = true;", "$CreditsSpeedUp = false;"); + CreditsActionMap.bindCmd(mouse, button2, "creditsNextPic();", ""); + } + CreditsActionMap.push(); + + //hide the mouse + cursorOff(); + + //build the ML text ctrl... + exec("scripts/creditsText.cs"); + + $CreditsPicIndex = 1; + CREDITS_Pic.setBitmap("gui/Cred_" @ $CreditsPicIndex @ ".png"); + + //music array + $CreditsMusic[0] = "badlands"; + $CreditsMusic[1] = "desert"; + $CreditsMusic[2] = "ice"; + $CreditsMusic[3] = "lush"; + $CreditsMusic[4] = "volcanic"; + + //start the credits from the beginning + $CreditsOffset = 0.0; + %screenHeight = getWord(getResolution(), 1); + Credits_Text.resize(getWord(Credits_Text.position, 0), + mFloor(%screenHeight / 2) - 125, + getWord(Credits_Text.extent, 0), + getWord(Credits_Text.extent, 1)); + + //start the scrolling + $CreditsPaused = false; + $CreditsSpeedUp = false; + $CreditsScrollSchedule = schedule(3000, 0, scrollTheCredits); + + //start cycling the bitmaps + $CreditsSlideShow = schedule(5000, 0, creditsNextPic); + + //start some music + %chooseTrack = mFloor(getRandom() * 4.99); + MusicPlayer.playTrack($CreditsMusic[%chooseTrack]); +} + +function addCreditsLine(%text, %lastLine) +{ + CREDITS_Text.addText(%text @ "\n", %lastline); +} + +function scrollTheCredits() +{ + //make sure we're not paused + if (!$CreditsPaused) + { + //if we've scrolled off the top, set the position back down to the bottom + %parentCtrl = CREDITS_Text.getGroup(); + if (getWord(Credits_Text.position, 1) + getWord(Credits_Text.extent, 1) < 0) + { + Credits_Text.position = getWord(Credits_Text.position, 0) SPC getWord(%parentCtrl.extent, 1); + $CreditsOffset = getWord(Credits_Text.position, 1); + } + + if ($CreditsSpeedUp) + %valueToScroll = 10; + else + %valueToScroll = 1; + + //scroll the control up a bit + Credits_Text.resize(getWord(Credits_Text.position, 0), + getWord(Credits_Text.position, 1) - %valueToScroll, + getWord(Credits_Text.extent, 0), + getWord(Credits_Text.extent, 1)); + } + + //schedule the next scroll... + $CreditsScrollSchedule = schedule(10, 0, scrollTheCredits); +} + +function creditsNextPic() +{ + cancel($CreditsSlideShow); + if (!$CreditsPaused) + { + $CreditsPicIndex += 1; + if ($CreditsPicIndex > 46) + $CreditsPicindex = 1; + + //set the bitmap + CREDITS_Pic.setBitmap("gui/Cred_" @ $CreditsPicIndex @ ".png"); + } + + //schedule the next bitmap + $CreditsSlideShow = schedule(5000, 0, creditsNextPic); +} \ No newline at end of file diff --git a/base/scripts/creditsText.cs b/base/scripts/creditsText.cs new file mode 100644 index 0000000..e928aaa --- /dev/null +++ b/base/scripts/creditsText.cs @@ -0,0 +1,1667 @@ +// Credits list +addCreditsLine(""); +addCreditsLine(""); +addCreditsLine(""); +addCreditsLine(""); +addCreditsLine(""); +addCreditsLine(""); +addCreditsLine(""); +addCreditsLine(""); +addCreditsLine(""); +addCreditsLine(""); +addCreditsLine(""); +addCreditsLine(""); +addCreditsLine(""); +addCreditsLine("Producer/Director"); +addCreditsLine("Dave \"QIX\" Georgeson"); +addCreditsLine(""); +addCreditsLine("Associate Producer"); +addCreditsLine("Daryl \"Snow Leopard\" Nichols, Jr."); +addCreditsLine(""); +addCreditsLine("Lead Programmer"); +addCreditsLine("Mark \"Got Milk?\" Frohnmayer"); +addCreditsLine(""); +addCreditsLine("Software Engineers"); +addCreditsLine("John \"Sne/\\ker\" Alden"); +addCreditsLine("Kelly \"East\" Asay"); +addCreditsLine("Shawn \"Raf\" Eastley"); +addCreditsLine("Clark \"Shark\" Fagot"); +addCreditsLine("John \"ÜberBob\" Folliard"); +addCreditsLine("Brad \"BigDevDawg\" Heinz"); +addCreditsLine("\"Missing\" Lincoln Hutton"); +addCreditsLine("Greg \"Jett\" Lancaster"); +addCreditsLine("Dave \"Symlink\" Moore"); +addCreditsLine("Brian \"Twitch\" Ramage"); +addCreditsLine("Mitch \"Skeet\" Shaw"); +addCreditsLine("Tinman \"Kidney Thief\""); +addCreditsLine(""); +addCreditsLine("Designers"); +addCreditsLine("Eric \"Rated z\" Lanz"); +addCreditsLine("Dave \"Diamondback\" Meddish"); +addCreditsLine("Jesse \"DrAwkward\" Russell"); +addCreditsLine(""); +addCreditsLine("Art Direction"); +addCreditsLine("Craig \"jimmy\" Maitlen"); +addCreditsLine(""); +addCreditsLine("Artists"); +addCreditsLine("Robert \"Pelias Maximus\" Caracol"); +addCreditsLine("Ian \"ETCmodel02\" Christy "); +addCreditsLine("Jade \"FrankRizzo\" Dhabolt"); +addCreditsLine("Jon \"OrphanKazrak\" Lanz"); +addCreditsLine("Dave \"OldDawg\" Lauck"); +addCreditsLine("Matthew \"Rickets\" Reynolds"); +addCreditsLine("Paul \"Decoy\" Rheinfelder"); +addCreditsLine("Thomas \"TOMIN8R\" VanVelkinburgh"); +addCreditsLine(""); +addCreditsLine("Writer"); +addCreditsLine("Blake \"Hexabolic\" Hutchins"); +addCreditsLine(""); +addCreditsLine("HTML Community"); +addCreditsLine("Pat McCarthy"); +addCreditsLine("Joe Gartska"); +addCreditsLine(""); +addCreditsLine("Director of Quality Assurance"); +addCreditsLine("Gary \"Koros\" Stevens"); +addCreditsLine(""); +addCreditsLine("Compatibility Lab Supervisor"); +addCreditsLine("Pat \"3 Legged Dingo\" Callahan"); +addCreditsLine(""); +addCreditsLine("QA Supervisor, Core Game"); +addCreditsLine("Ken \"Sunshine\" Eaton"); +addCreditsLine(""); +addCreditsLine("Quality Assurance"); +addCreditsLine("Abhishake \"Harley\" Behl"); +addCreditsLine("Angus \"Chewtoy\" Campbell"); +addCreditsLine("Aaron \"Boomer1111\" Denke"); +addCreditsLine("Trent \"RabidSquirrel\" Donelson"); +addCreditsLine("Jonalee \"cHiLaKwEeN\" Gil"); +addCreditsLine("Phil \"Philtre\" Kuhlmey"); +addCreditsLine("Craig \"NEK\" Marshall"); +addCreditsLine("Sean \"Baby Emu\" Meichle"); +addCreditsLine("David \"Plik\" Peterson"); +addCreditsLine("Robert \"Mortal Wombat\" Quattrone"); +addCreditsLine("Connor \"der Todesritter\" Salisbury"); +addCreditsLine("Joe \"Callahan\" Smith"); +addCreditsLine("Mark \"SurferMark\" Storie"); +addCreditsLine("Sue \"Othello\" Ung"); +addCreditsLine("Cody \"Infirmo\" Yarbrough"); +addCreditsLine("Drew \"Mongo\" Zilm"); +addCreditsLine(""); +addCreditsLine("QA Internationalization:"); +addCreditsLine("Lloyd \"Tank\" Madden"); +addCreditsLine("Frank \"Schnack\" Matzke"); +addCreditsLine("Markus \"Beule\" Rafflenbeul"); +addCreditsLine(""); +addCreditsLine("Motion Capture Team"); +addCreditsLine("Technical Director: Troy McFarland"); +addCreditsLine("Performer: Cosmo Hom"); +addCreditsLine(""); +addCreditsLine("Movie Intro"); +addCreditsLine("Robert Borth"); +addCreditsLine("Mike Price"); +addCreditsLine(""); +addCreditsLine("Installer"); +addCreditsLine("Chris Mahnken"); +addCreditsLine(""); +addCreditsLine("Special Thanks"); +addCreditsLine("Mark Brenneman"); +addCreditsLine("Nels Bruckner"); +addCreditsLine("Barry Drew"); +addCreditsLine("Tim Gift"); +addCreditsLine("Gerald Harrison"); +addCreditsLine("Shannon Holder"); +addCreditsLine("Jared Keller"); +addCreditsLine("Ti Kwa"); +addCreditsLine("Joe Maruschak"); +addCreditsLine("Rick Overman"); +addCreditsLine("Helen Pai"); +addCreditsLine("Scott Rudi"); +addCreditsLine("Shawn Sharp"); +addCreditsLine("Neal Skorpen"); +addCreditsLine("Weston Tracy"); +addCreditsLine("Pete Walker"); +addCreditsLine("Maren Wyatt"); +addCreditsLine("Scott Youngblood"); +addCreditsLine(""); +addCreditsLine("zlib Development Team"); +addCreditsLine("libPNG Development Team"); +addCreditsLine(""); +addCreditsLine("Business Unit Manager for Sierra Studios"); +addCreditsLine("Mark Hood"); +addCreditsLine(""); +addCreditsLine("Brand Manager"); +addCreditsLine("Lee Rossini"); +addCreditsLine(""); +addCreditsLine("European Brand Manager"); +addCreditsLine("Djamil Kemal"); +addCreditsLine(""); +addCreditsLine("Europe/Asia Marketing Manager"); +addCreditsLine("Michael Fuller"); +addCreditsLine(""); +addCreditsLine("Asia Brand Manager"); +addCreditsLine("Deana Erickson"); +addCreditsLine(""); +addCreditsLine("Director of Marketing"); +addCreditsLine("Koren Buckner"); +addCreditsLine(""); +addCreditsLine("VP of Marketing"); +addCreditsLine("Jim Veevaert"); +addCreditsLine(""); +addCreditsLine("Channel Promotions"); +addCreditsLine("Michael Whitehead"); +addCreditsLine(""); +addCreditsLine("Web Development Mgr."); +addCreditsLine("Guy Welch"); +addCreditsLine(""); +addCreditsLine("Marketing Assistant"); +addCreditsLine("Michael Cowan"); +addCreditsLine(""); +addCreditsLine("Public Relations Mgr."); +addCreditsLine("Hillary Crowley "); +addCreditsLine(""); +addCreditsLine("Director"); +addCreditsLine("Creative Services"); +addCreditsLine("Laura Kleinhofs "); +addCreditsLine(""); +addCreditsLine("Creative Director For"); +addCreditsLine("Creative Services"); +addCreditsLine("Brandon Walker"); +addCreditsLine(""); +addCreditsLine("Sr. Account Manager"); +addCreditsLine("Creative Services"); +addCreditsLine("Kevin Lamb"); +addCreditsLine(""); +addCreditsLine("Package Design"); +addCreditsLine("Moore Design Group"); +addCreditsLine(""); +addCreditsLine("Production Manager"); +addCreditsLine("Sheri-Lou Stannard"); +addCreditsLine(""); +addCreditsLine("Manual Layout"); +addCreditsLine("Kim McGovern"); +addCreditsLine(""); +addCreditsLine("Sound Effects"); +addCreditsLine("EFX/Wilshire Studios"); +addCreditsLine("CS Productions Inc."); +addCreditsLine(""); +addCreditsLine("Voice Recording"); +addCreditsLine("Bad Animals"); +addCreditsLine(""); +addCreditsLine("Voice Processing"); +addCreditsLine("CS Productions Inc."); +addCreditsLine(""); +addCreditsLine("Music"); +addCreditsLine("Tim Clarke and Score! Studios"); +addCreditsLine(""); +addCreditsLine("Sierra On-Line Multiplayer Services"); +addCreditsLine("Aaron Hunt"); +addCreditsLine("Erik De Bonte"); +addCreditsLine("Bill Dewey"); +addCreditsLine("Colen Garoutte-Carson"); +addCreditsLine("Max Klaiser"); +addCreditsLine("Brent LaPoint"); +addCreditsLine("Neeraj Murarka"); +addCreditsLine("Mike Nicolino"); +addCreditsLine("Lee Olds"); +addCreditsLine("Ross Perez"); +addCreditsLine("Darren Robinson"); +addCreditsLine("Brian Rothstein"); +addCreditsLine("Jeff Routledge"); +addCreditsLine("Dean Webster"); +addCreditsLine("Kelly Zmak"); +addCreditsLine(""); +addCreditsLine("Voice Talent"); +addCreditsLine("John Armstrong"); +addCreditsLine("Mark Berry"); +addCreditsLine("Kiamalise Budak"); +addCreditsLine("Kymberli Colbourne"); +addCreditsLine("Craig English"); +addCreditsLine("Kit Harris"); +addCreditsLine("Jay Hopper"); +addCreditsLine("Mike Madeoy"); +addCreditsLine("Dex Manley"); +addCreditsLine("Kate Myre"); +addCreditsLine("Matt Reidy"); +addCreditsLine("Gary Schwartz"); +addCreditsLine("Jen Taylor"); +addCreditsLine(""); +addCreditsLine("Linux Port"); +addCreditsLine("Loki Software, Inc."); +addCreditsLine(""); +addCreditsLine("Loki President"); +addCreditsLine("Scott \"Highlander\" Draeker"); +addCreditsLine(""); +addCreditsLine("Linux Installer"); +addCreditsLine("Stephane \"Megastep\" Peter"); +addCreditsLine(""); +addCreditsLine("Linux Programming"); +addCreditsLine("Michael \"Briareos\" Vance"); +addCreditsLine("Joe \"TsaoTsao\" Valenzuela"); +addCreditsLine("Sam \"Hercules\" Lantinga"); +addCreditsLine(""); +addCreditsLine("Linux Q/A and Support"); +addCreditsLine("Andy \"Yoda\" Mecham"); +addCreditsLine("Mike \"Heimdall\" Phillips"); +addCreditsLine(""); +addCreditsLine("Linux Manual"); +addCreditsLine("Kayt \"Sigyn\" Sorhaindo"); +addCreditsLine(""); +addCreditsLine("Loki Artwork"); +addCreditsLine("Jason \"Pais\" Kim"); +addCreditsLine(""); +addCreditsLine("Loki System Support"); +addCreditsLine("Rafael \"Raistlin\" Barrero"); +addCreditsLine(""); +addCreditsLine("Loki Business Manager"); +addCreditsLine("Yvonne \"YDS\" De Sollar"); +addCreditsLine(""); +addCreditsLine("Loki Customer Support"); +addCreditsLine("Brandon \"Particle\" Carter"); +addCreditsLine(""); +addCreditsLine("Loki Beta Testers"); +addCreditsLine("James \"idcmp\" Atwill"); +addCreditsLine("Brandon \"bbeattie\" Beattie"); +addCreditsLine("Fionn Behrens"); +addCreditsLine("Jonathan \"Suraklyn\" Bowser"); +addCreditsLine("Patrick \"Phineas\" Calhoun"); +addCreditsLine("Wayne \"ttol\" Chang"); +addCreditsLine("Nash \"twostar\" Clemens"); +addCreditsLine("Mike \"madcat\" Delaney"); +addCreditsLine("Matthew \"DivineHawk\" Eaton"); +addCreditsLine("Rodney \"meff\" Gordon II"); +addCreditsLine("Pavan \"Phantom\" Gupta"); +addCreditsLine("Christopher \"Malkier\" Hahn"); +addCreditsLine("John \"OverCode\" Hall"); +addCreditsLine("Jesse \"Abysmal\" Hanna"); +addCreditsLine("Steven \"Ashari\" Hatfield"); +addCreditsLine("David \"NeoTron\" Hedbor"); +addCreditsLine("Matt \"malloc_master\" Helsley"); +addCreditsLine("Simon \"red_one\" Hill"); +addCreditsLine("Gareth \"3D-Guru\" Hughes"); +addCreditsLine("Zephaniah E. Hull"); +addCreditsLine("Guy \"Guido\" Hutchison"); +addCreditsLine("Joshua Kleiner"); +addCreditsLine("Geoff \"Rambo\" Lewis"); +addCreditsLine("Jason \"Deadman\" Lundy"); +addCreditsLine("Gregory \"Centove\" McLean"); +addCreditsLine("Patrick \"WormBoy\" McNeill"); +addCreditsLine("Jeff \"Judecca\" Mrochuk"); +addCreditsLine("Patrick \"linuxpunkr...\" Mullen"); +addCreditsLine("Prof. Dr. Nao"); +addCreditsLine("Jody \"Dweebs\" Newell"); +addCreditsLine("Bob \"Shapecharge\" O'Brien"); +addCreditsLine("Kyle \"JebusSaveMe\" Olsen"); +addCreditsLine("John \"joe\" Osborne"); +addCreditsLine("Chris \"Super-K\" Osgood"); +addCreditsLine("Jon \"Railroad\" Revie"); +addCreditsLine("Michael \"M00k3y\" Ritner"); +addCreditsLine("Aron \"Govt.Cheese\" Rosenberg"); +addCreditsLine("Yuri \"Mystro\" Sagalov"); +addCreditsLine("Marinus \"foser\" Schraal"); +addCreditsLine("SKILL5"); +addCreditsLine("Ryan Stotts"); +addCreditsLine("Dan \"XFree86\" Temple"); +addCreditsLine("Terry \"keerf\" Warner"); +addCreditsLine("Chris \"UmytBnxt\" Watkins"); +addCreditsLine("Michael \"themime\" Whitten"); +addCreditsLine(""); +addCreditsLine("GLSetup Team"); +addCreditsLine("Chris Hecker"); +addCreditsLine("Rob Felter"); +addCreditsLine(""); +addCreditsLine(""); +addCreditsLine("Thanks to all the wives, girlfriends and children of the hardworking Dev Team members. Your patience and sacrifice has allowed us to complete a project of which we are all tremendously proud. None of it would have been possible without you."); +addCreditsLine(""); +addCreditsLine(""); +addCreditsLine("Meta Testers"); +addCreditsLine("Alex Flagg"); +addCreditsLine("Alex \"LogRoller\" Ogilvie"); +addCreditsLine("Adam Mitter"); +addCreditsLine("Alan \"Otter\" Ragg"); +addCreditsLine("Alex \"SaGe\" Chappuis"); +addCreditsLine("Alexandre \"[cF]Alex\" Clerc-Gagnoux"); +addCreditsLine("Allen \"TheRedDread\" Drennan"); +addCreditsLine("Andreas Jalsovec"); +addCreditsLine("Anton Wiegert"); +addCreditsLine("Arden H. \"TF Pookie\" Nguyen"); +addCreditsLine("Bart \"=DB=Seven\" Smith"); +addCreditsLine("Ben \"Diox\" May"); +addCreditsLine("Ben \"Hypn0tik\" Tamler"); +addCreditsLine("Ben \"Stan\" Gray"); +addCreditsLine("Bodhi \"Heliometus Max\" Daher"); +addCreditsLine("Brad \"Bort\" Klann"); +addCreditsLine("Bret D. \"Bacchus\" Wilson"); +addCreditsLine("Brian \"Aftershock\" Parker"); +addCreditsLine("Carl Anderson"); +addCreditsLine("Charlie Schillberg"); +addCreditsLine("Chason \"Phantom Stranger\" Ellis"); +addCreditsLine("Chris \"Pie4Foo\" Abele"); +addCreditsLine("Chris \"Tythan\" Caviness"); +addCreditsLine("Chris \"Fubar\" Duncan"); +addCreditsLine("Christian \"S3 Crucifix\" Peth"); +addCreditsLine("Colin \"Dark Wraith\" Howitt"); +addCreditsLine("Cory \"Omega Man\" Altheide"); +addCreditsLine("\"Cowboy\" Ben Alman"); +addCreditsLine("Crystal McHale"); +addCreditsLine("Dan \"Avatar\" Lyons"); +addCreditsLine("Daniel \"|5150|Keyser\" Gallegos"); +addCreditsLine("Daniel \"Emp\" Arnold"); +addCreditsLine("Daniel \"Snaggs\" Soderstrom"); +addCreditsLine("Daniel \"Trebz\" Nolan"); +addCreditsLine("Daniel \"Wizard_TPG\" Neilsen"); +addCreditsLine("Daniel \"Zero\" Nichols"); +addCreditsLine("Daniel \"Spooger\" Patton"); +addCreditsLine("Danny \"OmegaRed\" Cotton"); +addCreditsLine("Darion \"Shadower\" Lowenstein"); +addCreditsLine("Darren \"Fidelio\" Mitchell"); +addCreditsLine("Dave \"Tycho\" Fried"); +addCreditsLine("David \"DOX\" Oxwell"); +addCreditsLine("David \"Killdawg\" DeBoer"); +addCreditsLine("David MacIntosh"); +addCreditsLine("Dean \"VolcoM\" Sykes"); +addCreditsLine("Dean Tate"); +addCreditsLine("Dennis \"Chickenboo\" Fox"); +addCreditsLine("Erik \"Mustard\" de Jong"); +addCreditsLine("Gabor \"Dezso a HUN\" Orban"); +addCreditsLine("Gabriel \"Warwitch\" David"); +addCreditsLine("Gavin \"Suds\" Henrick"); +addCreditsLine("Gino \"tAngGSI\" Gard"); +addCreditsLine("Glenn \"IcyHot\" Wisbey"); +addCreditsLine("Gregory \"Brak Panda\" Pesochin"); +addCreditsLine("Gregory \"Strife\" Hill"); +addCreditsLine("Hannes \"Skace\" Wagner"); +addCreditsLine("Ian \"Kowboy\" Gonsalves"); +addCreditsLine("Ian Threadgold"); +addCreditsLine("J Alex \"Blackheart\" Wheeler"); +addCreditsLine("James \"Warbird\" Gentry III"); +addCreditsLine("James C. \"Lothos\" Hanna"); +addCreditsLine("Jason \"Circuit\" Jenkins"); +addCreditsLine("Jason \"Iron Chef\" Goodowens"); +addCreditsLine("Jason \"Lumberjack\" De Arte"); +addCreditsLine("Jeff \"Hellsfury\" Shaw"); +addCreditsLine("Jeremy \"Xevious\" Burke"); +addCreditsLine("Jerry \"Tycho Brahe\" Holkins"); +addCreditsLine("Joe \"Quadrature\" Downs"); +addCreditsLine("Joe Bell Grant"); +addCreditsLine("Joern \"[TD] Pangur\" Schnautz"); +addCreditsLine("John \"Dr.Jones\" Burnett"); +addCreditsLine("Jon \"Ratorasniki\" Naiman"); +addCreditsLine("Jonathan \"Chaser\" Bale"); +addCreditsLine("Joost \"jschuur\" Schuur"); +addCreditsLine("Josh \"Red Sirus\" Hoey"); +addCreditsLine("Kevin \"Rifter\" Rank"); +addCreditsLine("Kevin \"Kevlar\" Middleton"); +addCreditsLine("Kyle \"{DP}AzN^DoG\" Godfrey"); +addCreditsLine("Kyle \"Wiggy\" Bennett"); +addCreditsLine("Laura \"Dolph Lundgren\" Schreiner"); +addCreditsLine("Lorne \"Writer\" Laliberte"); +addCreditsLine("Mac \"McNaughton\" Miller"); +addCreditsLine("Mario \"Lone Gunman\" Batlle"); +addCreditsLine("Mark \"Ferret-of-Death\" Siciliano"); +addCreditsLine("Mark \"Old Skul\" Szabo"); +addCreditsLine("Mark \"Panama Jack\" Dickenson"); +addCreditsLine("Markus Rafflenbeul"); +addCreditsLine("Mat Bettinson"); +addCreditsLine("Matt \"{SiR}SoulJAH\" Culp"); +addCreditsLine("Matt \"Colosus\" DeWald"); +addCreditsLine("Matt Sobotka"); +addCreditsLine("Matthew \"4u2c\" McKeown"); +addCreditsLine("Mattijs \"3bird\" Jonker"); +addCreditsLine("Michael \"Optimizer\" Hamlett"); +addCreditsLine("Michael \"Rave\" Mogill"); +addCreditsLine("Michael A Nance"); +addCreditsLine("Michael James \"Tenabrae\" Edwards"); +addCreditsLine("Mike \"Ragman\" Hillebrecht"); +addCreditsLine("Mike \"Gabriel\" Krahulik"); +addCreditsLine("Mike \"Gangreen\" Burton"); +addCreditsLine("Moussa Khan"); +addCreditsLine("N. David \"MlakMavet\" Griffin"); +addCreditsLine("Nathan \"[HvC]NaTeDoGG\" Sweet"); +addCreditsLine("Nick \"Enhanced Panda\" Orlich"); +addCreditsLine("Nick \"Leb\" Petska"); +addCreditsLine("Nick S. \"Enlightened One\" Pasto"); +addCreditsLine("Nickita \"FSB-SPY\" Bogolyubov"); +addCreditsLine("Olivier \"[cf] OroX\" Roulx"); +addCreditsLine("Omar Yehia"); +addCreditsLine("Pamela A. \"Diva\" Holmberg"); +addCreditsLine("Paul \"RuinatioN\" Wright"); +addCreditsLine("Paul \"Teknoice\" Morris"); +addCreditsLine("Penny \"Killer Girl\" Miller"); +addCreditsLine("Peter \"dev\" Kazmierow"); +addCreditsLine("Ric \"Dr Chmod\" Moseley"); +addCreditsLine("\"NoFix\""); +addCreditsLine("Rob \"Coyote\" Duffy"); +addCreditsLine("Robert Huebner"); +addCreditsLine("Rod Chrenek"); +addCreditsLine("Ron Oliver II"); +addCreditsLine("Ross \"Bytor\" Carlson"); +addCreditsLine("Roy \"Cannonfodder\" Greenhalgh"); +addCreditsLine("Ryan \"Kelster\" Kelly"); +addCreditsLine("Ryan \"Onyxwulf\" Gilfillan"); +addCreditsLine("Ryan \"StoneWolf\" Thernes"); +addCreditsLine("Scott \"Smedly\" Medlin"); +addCreditsLine("Sean \"Pubknight\" Bryson "); +addCreditsLine("Sebastien \"[cF]PreD\" Guillemet"); +addCreditsLine("Shane \"Mental Trousers\" Taylor"); +addCreditsLine("Shane \"Santa\" Beaumont"); +addCreditsLine("Shane \"Shaneman\" Evans"); +addCreditsLine("Stefan Grufman"); +addCreditsLine("Stephen \"Cato\" Farquhar"); +addCreditsLine("Stephen \"SL83\" Limowski"); +addCreditsLine("Steve \"Presto\" Eisner"); +addCreditsLine("Taylor \"Emo1313\" Suchan"); +addCreditsLine("Thomas \"Mantis\" Kumpik, Jr."); +addCreditsLine("Tim \"Zear\" Hammock"); +addCreditsLine("Todd \"Fuzzy Lumpkins\" Sjoblom"); +addCreditsLine("Tom \"Falcon\" Vogt"); +addCreditsLine("Tyler \"Raskal\" Jacobson"); +addCreditsLine("Tyler \"Sty\" Frans"); +addCreditsLine("Tyler Wilson"); +addCreditsLine("Werner Poetzelberger"); +addCreditsLine("Willem \"Talita\" Bison"); +addCreditsLine("William \"Altaic\" Knop"); +addCreditsLine(""); +addCreditsLine("Beta Testers"); +addCreditsLine("Aaron Brown"); +addCreditsLine("Aaron Butler"); +addCreditsLine("Aaron Reed"); +addCreditsLine("Aaron Scott Reed"); +addCreditsLine("Aaron Semeniuk"); +addCreditsLine("Aaron Wisner"); +addCreditsLine("Aaron Younger"); +addCreditsLine("Adam B. Argo"); +addCreditsLine("Adam Becker"); +addCreditsLine("Adam Corvin"); +addCreditsLine("Adam England"); +addCreditsLine("Adam King"); +addCreditsLine("Adam Kleifield "); +addCreditsLine("Adam McCreight"); +addCreditsLine("Adam Mitter"); +addCreditsLine("Adam S. Pedersen"); +addCreditsLine("Adam Toering"); +addCreditsLine("Adam Williams"); +addCreditsLine("Adrian Telfer"); +addCreditsLine("Akihiro Inoue"); +addCreditsLine("Al Harrington"); +addCreditsLine("Alan Peng"); +addCreditsLine("Alan Ragg"); +addCreditsLine("Alayton Norgard"); +addCreditsLine("Alberto Petrozzi"); +addCreditsLine("Alden Tan"); +addCreditsLine("Alex Chappuis"); +addCreditsLine("Alex Flagg"); +addCreditsLine("Alex Gourley"); +addCreditsLine("Alex Jakes JR"); +addCreditsLine("Alex Jeng"); +addCreditsLine("Alex Ogilvie"); +addCreditsLine("Alex Porter"); +addCreditsLine("Alex Taylor"); +addCreditsLine("Alex Zanfir"); +addCreditsLine("Alexander Baldoria"); +addCreditsLine("Alexander Flagg"); +addCreditsLine("Alexander Marschal"); +addCreditsLine("Alexander van Rijn"); +addCreditsLine("Alexandr Koshelev"); +addCreditsLine("Alexandre Clerc-Gagnoux"); +addCreditsLine("Alexandre Pomi"); +addCreditsLine("Alexandre Ramos"); +addCreditsLine("Alexei Sapsford"); +addCreditsLine("Allen Drennan"); +addCreditsLine("Allen Grusecki"); +addCreditsLine("Amir Assali"); +addCreditsLine("Amir Grad"); +addCreditsLine("Anatoly Ropotov"); +addCreditsLine("Andre Koch"); +addCreditsLine("Andrea Primadei"); +addCreditsLine("Andreas Leondidis"); +addCreditsLine("Andrew Baum"); +addCreditsLine("Andrew Fort"); +addCreditsLine("Andrew Price"); +addCreditsLine("Andrew Stockman"); +addCreditsLine("Andy Chong"); +addCreditsLine("Andy Swanson"); +addCreditsLine("Angus Campbell"); +addCreditsLine("Anthony Bermudez"); +addCreditsLine("Anthony Mills"); +addCreditsLine("Antonio Ferrari"); +addCreditsLine("Antti Hätinen"); +addCreditsLine("Arden H Nguyen"); +addCreditsLine("Arthur Troncoso"); +addCreditsLine("Ata Yavalar"); +addCreditsLine("Attila Fur"); +addCreditsLine("Audie Martin"); +addCreditsLine("Barbara J. Webb"); +addCreditsLine("Baret Julien"); +addCreditsLine("Baron Wolt"); +addCreditsLine("Bart Haesaerts"); +addCreditsLine("Bart Maegh"); +addCreditsLine("Bart Peiren"); +addCreditsLine("Bart Smith"); +addCreditsLine("Bart Waeterschoot"); +addCreditsLine("Beau Hale"); +addCreditsLine("Ben Anderson"); +addCreditsLine("Ben Cantwell"); +addCreditsLine("Ben Cuthbert"); +addCreditsLine("Ben De Decker"); +addCreditsLine("Ben Dobbs"); +addCreditsLine("Ben Floren"); +addCreditsLine("Ben Gray"); +addCreditsLine("Ben Lawton"); +addCreditsLine("Ben Martel"); +addCreditsLine("Ben May"); +addCreditsLine("Ben Pierson"); +addCreditsLine("Ben Stone"); +addCreditsLine("Ben Tamler"); +addCreditsLine("Benjamin Alman"); +addCreditsLine("Benjamin Denholm"); +addCreditsLine("Benjamin Luck"); +addCreditsLine("Benoît Dewaele"); +addCreditsLine("Bernd Berheide"); +addCreditsLine("Bernhard Seiser"); +addCreditsLine("Bill Eccleston"); +addCreditsLine("Bill Lewis"); +addCreditsLine("Bill Rodenbaugh"); +addCreditsLine("Bjorn Sleypen"); +addCreditsLine("Bo McCoy"); +addCreditsLine("Bodhi Daher"); +addCreditsLine("Boris Stock"); +addCreditsLine("Brad Butcher"); +addCreditsLine("Brad Conner"); +addCreditsLine("Brad DeLong"); +addCreditsLine("Brad Goehring"); +addCreditsLine("Brad Herman"); +addCreditsLine("Brad Klann"); +addCreditsLine("Bram Noëz"); +addCreditsLine("Brandon Cantrell"); +addCreditsLine("Brandon Knez"); +addCreditsLine("Brandon W. Easley"); +addCreditsLine("Brandy Straatman"); +addCreditsLine("Bret D. Wilson"); +addCreditsLine("Brett Carlson"); +addCreditsLine("Bri Pas"); +addCreditsLine("Brian Barnes"); +addCreditsLine("Brian Charles Moses"); +addCreditsLine("Brian Helms"); +addCreditsLine("Brian Hon"); +addCreditsLine("Brian Lorey"); +addCreditsLine("Brian Mercer"); +addCreditsLine("Brian Nakash"); +addCreditsLine("Brian Parker"); +addCreditsLine("Brian Vitale"); +addCreditsLine("Brian Walsh"); +addCreditsLine("Brian Weberling"); +addCreditsLine("Brian Wright"); +addCreditsLine("Brice Gharst"); +addCreditsLine("Brion Miller"); +addCreditsLine("Bruce Oberleitner"); +addCreditsLine("Bryan Heard"); +addCreditsLine("Bryan Stroop"); +addCreditsLine("Buddy Pritchard"); +addCreditsLine("C. Henrique Olifiers"); +addCreditsLine("C. Kyle Bennett"); +addCreditsLine("C.D. Thurman"); +addCreditsLine("Caleb Cauthon"); +addCreditsLine("Camere Danilo"); +addCreditsLine("Camille Castel"); +addCreditsLine("Carl Anderson"); +addCreditsLine("Carl Andersson"); +addCreditsLine("Carl Buckley"); +addCreditsLine("Carl Chambers"); +addCreditsLine("Carla Louisa Andrews"); +addCreditsLine("Carlos Delgado"); +addCreditsLine("Carolyn Manis"); +addCreditsLine("Casey O'Connor"); +addCreditsLine("Casper Lund"); +addCreditsLine("Cedric Hourcade"); +addCreditsLine("Chad Jolly"); +addCreditsLine("Channon Wong"); +addCreditsLine("Charl Theron"); +addCreditsLine("Charles Cresswell"); +addCreditsLine("Charles F. Gast"); +addCreditsLine("Charles Koelemay"); +addCreditsLine("Charlie VanDyke"); +addCreditsLine("Chason Ellis"); +addCreditsLine("Choi Byeong-Ho"); +addCreditsLine("Chow Yun"); +addCreditsLine("Chris Abele"); +addCreditsLine("Chris Aster"); +addCreditsLine("Chris Becton"); +addCreditsLine("Chris Boucher"); +addCreditsLine("Chris Boyd"); +addCreditsLine("Chris Browning"); +addCreditsLine("Chris Buckler"); +addCreditsLine("Chris Cacioppo"); +addCreditsLine("Chris Calande"); +addCreditsLine("Chris Cauthen"); +addCreditsLine("Chris Caviness"); +addCreditsLine("Chris Cullen"); +addCreditsLine("Chris Dettmann"); +addCreditsLine("Chris Duncan"); +addCreditsLine("Chris Farmer"); +addCreditsLine("Chris Fields"); +addCreditsLine("Chris Frederick"); +addCreditsLine("Chris Hersey"); +addCreditsLine("Chris Hewitt"); +addCreditsLine("Chris Holfeld"); +addCreditsLine("Chris Houston"); +addCreditsLine("Chris Jones"); +addCreditsLine("Chris Joyce"); +addCreditsLine("Chris Kissinger"); +addCreditsLine("Chris Mahnken"); +addCreditsLine("Chris Mermagen"); +addCreditsLine("Chris Walker"); +addCreditsLine("Chris Weatherwax"); +addCreditsLine("Chris Weeks"); +addCreditsLine("Chris Willis"); +addCreditsLine("Chris Wilson"); +addCreditsLine("Chris Youren"); +addCreditsLine("Christian D. Loftus"); +addCreditsLine("Christian Davis"); +addCreditsLine("Christian Peth"); +addCreditsLine("Christoher Rex Prangnell"); +addCreditsLine("Christoph Hagenbrock"); +addCreditsLine("Christoph Schwayer"); +addCreditsLine("Christopher Clarke"); +addCreditsLine("Christopher Donahue"); +addCreditsLine("Christopher Duffield"); +addCreditsLine("Christopher Forbes Davidson"); +addCreditsLine("Christopher Gray"); +addCreditsLine("Christopher J. Burden"); +addCreditsLine("Christopher Jones"); +addCreditsLine("Christopher Tan"); +addCreditsLine("Chuang Li-chung"); +addCreditsLine("Chuck Houlette"); +addCreditsLine("Chum Chancharadeth"); +addCreditsLine("Clarence Jones"); +addCreditsLine("Clark Bradley"); +addCreditsLine("Clay Reyer"); +addCreditsLine("Clay Taylor"); +addCreditsLine("Clayton Griffin"); +addCreditsLine("Cliff Yaun"); +addCreditsLine("Clint Gallon"); +addCreditsLine("Cody Edwards"); +addCreditsLine("Colin Howitt"); +addCreditsLine("Colin Korbelas"); +addCreditsLine("Colin Laughlin"); +addCreditsLine("Colin murray"); +addCreditsLine("Collin Theseira"); +addCreditsLine("Cory Altheide"); +addCreditsLine("Cory Hill"); +addCreditsLine("Cory Miller"); +addCreditsLine("Craig Beers"); +addCreditsLine("Craig Paterson"); +addCreditsLine("Crystal McHale"); +addCreditsLine("Curtis Campbell"); +addCreditsLine("Curtis Rock"); +addCreditsLine("Daire Garvey"); +addCreditsLine("Dallas Harris"); +addCreditsLine("Damien Webber"); +addCreditsLine("Damien Webber"); +addCreditsLine("Dan Ilan"); +addCreditsLine("Dan Kolta"); +addCreditsLine("Dan Lyons"); +addCreditsLine("Dan Peters"); +addCreditsLine("Dan Schmierer"); +addCreditsLine("Dan Sego"); +addCreditsLine("Dane Barber"); +addCreditsLine("Daniel Chenoweth"); +addCreditsLine("Daniel Costantini"); +addCreditsLine("Daniel Gallegos"); +addCreditsLine("Daniel J. Patton"); +addCreditsLine("Daniel Medini"); +addCreditsLine("Daniel Neilsen"); +addCreditsLine("Daniel Nolan"); +addCreditsLine("Daniel Palmer"); +addCreditsLine("Daniel Smith"); +addCreditsLine("Daniel Soderstrom"); +addCreditsLine("Danny Cotton"); +addCreditsLine("Danny Van Bronkhorst"); +addCreditsLine("Darion Lowenstein"); +addCreditsLine("Darko Miodrag"); +addCreditsLine("Darragh O' Toole"); +addCreditsLine("Darren Asato"); +addCreditsLine("Darren Menzies"); +addCreditsLine("Darren Mitchell"); +addCreditsLine("Darren Sorrell"); +addCreditsLine("Darren Tabor"); +addCreditsLine("Dave Benedict"); +addCreditsLine("Dave Calame"); +addCreditsLine("Dave Fried"); +addCreditsLine("Dave Schwinger"); +addCreditsLine("Dave Warner"); +addCreditsLine("Dave Wight"); +addCreditsLine("David Bonds"); +addCreditsLine("David Chubb"); +addCreditsLine("David De Boer"); +addCreditsLine("David Higgins"); +addCreditsLine("David Lindberg"); +addCreditsLine("David Liu"); +addCreditsLine("David Oxwell"); +addCreditsLine("David Paukstys"); +addCreditsLine("David Peterson"); +addCreditsLine("David Quinn"); +addCreditsLine("David Richards"); +addCreditsLine("David Stetz"); +addCreditsLine("David W. Atchley"); +addCreditsLine("Dean Sykes"); +addCreditsLine("Deffi"); +addCreditsLine("Denish Puspparajah"); +addCreditsLine("Dennis Fox"); +addCreditsLine("Dennis Goedbloed"); +addCreditsLine("Dennis Gurock"); +addCreditsLine("Dennis Oden"); +addCreditsLine("Dennis Price"); +addCreditsLine("Dennis vd Broek"); +addCreditsLine("Derek Bao"); +addCreditsLine("Derek McGee"); +addCreditsLine("Derek Millar"); +addCreditsLine("Derek Mulder"); +addCreditsLine("Derrick T. Woolworth"); +addCreditsLine("Devin Blair"); +addCreditsLine("Devin C. Glenn"); +addCreditsLine("Devin L. Ganger"); +addCreditsLine("Dimitri Gunsing"); +addCreditsLine("Dion Clapperton"); +addCreditsLine("Dirk Lambert"); +addCreditsLine("Dirk Moerenhout"); +addCreditsLine("Dominic Carus"); +addCreditsLine("Donald Ho"); +addCreditsLine("Donald Mills"); +addCreditsLine("Duncan Law"); +addCreditsLine("Duncan McLeod"); +addCreditsLine("Dustin Lesan"); +addCreditsLine("Dustin Miller"); +addCreditsLine("Dyanne Lee"); +addCreditsLine("Ed Molnar"); +addCreditsLine("Ed Sin"); +addCreditsLine("Eddie Manso"); +addCreditsLine("Eddie Pierce"); +addCreditsLine("Editorial GameSurf"); +addCreditsLine("Edric Borja"); +addCreditsLine("Eduardo Amaro"); +addCreditsLine("Edward Van Brunt"); +addCreditsLine("Elliot Naiman"); +addCreditsLine("Emanuele"); +addCreditsLine("Emiliano Saurin"); +addCreditsLine("Ephraim Brodsky"); +addCreditsLine("Erbil Salihoglu"); +addCreditsLine("Eric Bultman"); +addCreditsLine("Eric Hudzikiewicz"); +addCreditsLine("Eric Iovan"); +addCreditsLine("Eric Manko"); +addCreditsLine("Eric Ray"); +addCreditsLine("Eric Ross"); +addCreditsLine("Eric Soulvie"); +addCreditsLine("Eric Stankelis"); +addCreditsLine("Eric Takamoto"); +addCreditsLine("Eric Toledo"); +addCreditsLine("Erick Apeles"); +addCreditsLine("Erik de Jong"); +addCreditsLine("Erik Gulbrandsen"); +addCreditsLine("Ernie Page"); +addCreditsLine("Erwin Esener"); +addCreditsLine("Espen Andresen"); +addCreditsLine("Eugene Goh"); +addCreditsLine("Everett Whiteway"); +addCreditsLine("Fabian Ianigro"); +addCreditsLine("Faizaan Ghauri"); +addCreditsLine("Fiona Stevens"); +addCreditsLine("Francesco Sorrentino"); +addCreditsLine("Francis To"); +addCreditsLine("Frank Canedy"); +addCreditsLine("Frank Collins"); +addCreditsLine("Frank Hop"); +addCreditsLine("Frank McGee"); +addCreditsLine("Franz Töfferl"); +addCreditsLine("Fred Cheng"); +addCreditsLine("Fred Hill"); +addCreditsLine("Frederik Kruse Hannibal"); +addCreditsLine("Fulvio Tagliento"); +addCreditsLine("Gabe Othman"); +addCreditsLine("Gabor Orban"); +addCreditsLine("Gabriel David"); +addCreditsLine("Gary Caine"); +addCreditsLine("Gary J. Talley"); +addCreditsLine("Gary McWilliams"); +addCreditsLine("Gary Milante"); +addCreditsLine("Gary Schweisthal"); +addCreditsLine("Gavin Henrick"); +addCreditsLine("Geoff Dodd"); +addCreditsLine("Geoffrey Forman"); +addCreditsLine("George Campbell"); +addCreditsLine("George Ganas"); +addCreditsLine("George Wingard"); +addCreditsLine("Gilberto Barbicinti"); +addCreditsLine("Gino Gard"); +addCreditsLine("Glenn Reasor"); +addCreditsLine("Glenn Wisbey"); +addCreditsLine("Gordon Lee"); +addCreditsLine("Gordon Mak"); +addCreditsLine("Gordon Wilcox"); +addCreditsLine("Goty Liu"); +addCreditsLine("Greg Barnett"); +addCreditsLine("Greg Gilleland"); +addCreditsLine("Greg Habetler"); +addCreditsLine("Greg Milton"); +addCreditsLine("Greg Romaszka"); +addCreditsLine("Greg Walk"); +addCreditsLine("Gregory Hill"); +addCreditsLine("Gregory Peng"); +addCreditsLine("Gregory Pesochin"); +addCreditsLine("Greigg Stein"); +addCreditsLine("Guillaume Neron"); +addCreditsLine("Gunnar Schumann"); +addCreditsLine("Guy Mirisciotta"); +addCreditsLine("H.Yamao"); +addCreditsLine("Hamed Khoojinian"); +addCreditsLine("Hannes Wagner"); +addCreditsLine("Hans David Lemons"); +addCreditsLine("Harold Brown"); +addCreditsLine("Harry Glaser"); +addCreditsLine("Harry Kambouropoulos"); +addCreditsLine("Hashish HasnaIn"); +addCreditsLine("Heath Fischer"); +addCreditsLine("Helge Nesøen"); +addCreditsLine("Hendrik Bauer"); +addCreditsLine("Hendrik Strobel"); +addCreditsLine("Henk Schaefer"); +addCreditsLine("Henry Lee"); +addCreditsLine("Henry Martins"); +addCreditsLine("Hugh Norton-Smith"); +addCreditsLine("Hugh Spencer"); +addCreditsLine("Hunter Luisi"); +addCreditsLine("Ian Glenn"); +addCreditsLine("Ian Redden"); +addCreditsLine("Ian Threadgold"); +addCreditsLine("Igor Bachinsky"); +addCreditsLine("Issac Rosser"); +addCreditsLine("Iwan Khouw"); +addCreditsLine("J. Scott Randall"); +addCreditsLine("Jaap de Heer"); +addCreditsLine("Jack Mamais"); +addCreditsLine("Jaesson Yeo"); +addCreditsLine("James Balough"); +addCreditsLine("James Batty"); +addCreditsLine("James C. Hanna"); +addCreditsLine("James Ell"); +addCreditsLine("James Gentry III"); +addCreditsLine("James Logan"); +addCreditsLine("James Molson"); +addCreditsLine("James Ramsey"); +addCreditsLine("James Tucker"); +addCreditsLine("James Weisgerber"); +addCreditsLine("Jamie Reep"); +addCreditsLine("Jan Siarov"); +addCreditsLine("Jani Sundstrom"); +addCreditsLine("Janne Puonti"); +addCreditsLine("Jared Black"); +addCreditsLine("Jared Keller"); +addCreditsLine("Jarle Hauglum"); +addCreditsLine("Jason Alday"); +addCreditsLine("Jason Alombro"); +addCreditsLine("Jason Bergman"); +addCreditsLine("Jason Cross"); +addCreditsLine("Jason De Arte"); +addCreditsLine("Jason Fleming"); +addCreditsLine("Jason Gill"); +addCreditsLine("Jason Goodfellow"); +addCreditsLine("Jason Goodowens"); +addCreditsLine("Jason Jenkins"); +addCreditsLine("Jason Kinnear"); +addCreditsLine("Jason Kochan"); +addCreditsLine("Jason Newington"); +addCreditsLine("Jason Robert Nelson"); +addCreditsLine("Jason Widy"); +addCreditsLine("Javier Jiménez"); +addCreditsLine("Jay Johnson"); +addCreditsLine("Jay Weitekamp"); +addCreditsLine("Jeff Buckland"); +addCreditsLine("Jeff Chang"); +addCreditsLine("Jeff Day"); +addCreditsLine("Jeff Dotson"); +addCreditsLine("Jeff Drouet"); +addCreditsLine("Jeff Greth"); +addCreditsLine("Jeff Hedges"); +addCreditsLine("Jeff Lofgren"); +addCreditsLine("Jeff Shauger"); +addCreditsLine("Jeff Shaw"); +addCreditsLine("Jeff Streeter"); +addCreditsLine("Jeff Tom"); +addCreditsLine("Jeffrey A. Tindle"); +addCreditsLine("Jeffrey Rudolph"); +addCreditsLine("Jelle Twerda"); +addCreditsLine("Jens Larsson"); +addCreditsLine("Jeppe Christensen"); +addCreditsLine("Jeremy Burke"); +addCreditsLine("Jeremy Chookas"); +addCreditsLine("Jeremy Klemm"); +addCreditsLine("Jeremy Rogers"); +addCreditsLine("Jeremy Werkheiser"); +addCreditsLine("Jeroen Rasschaert"); +addCreditsLine("Jerry Annin"); +addCreditsLine("Jerry Holkins"); +addCreditsLine("Jerry Qassar"); +addCreditsLine("Jesse Maher"); +addCreditsLine("Jesse Smith"); +addCreditsLine("Jim Andrews"); +addCreditsLine("Jim Dale"); +addCreditsLine("Jim Gosney"); +addCreditsLine("Jim Richardson"); +addCreditsLine("Jimmy Chandler"); +addCreditsLine("Jimmy van der Have"); +addCreditsLine("Joe Diamond"); +addCreditsLine("Joe Dopp"); +addCreditsLine("Joe Downs"); +addCreditsLine("Joe Falcomata"); +addCreditsLine("Joe Kennedy"); +addCreditsLine("Joe Mauga"); +addCreditsLine("Joe McGuire"); +addCreditsLine("Joe Prowell"); +addCreditsLine("Joe Seifert"); +addCreditsLine("Joel Bruick"); +addCreditsLine("Joern Schnautz"); +addCreditsLine("Joey Snailham"); +addCreditsLine("Johan Köhne"); +addCreditsLine("John Bialick"); +addCreditsLine("John Buckingham"); +addCreditsLine("John Burnett"); +addCreditsLine("John Cain"); +addCreditsLine("John Colin Hanna"); +addCreditsLine("John Davis"); +addCreditsLine("John DeBruyn"); +addCreditsLine("John Dodds"); +addCreditsLine("John Finér"); +addCreditsLine("John Hazelden"); +addCreditsLine("John Hemaloto"); +addCreditsLine("John K. Ogi"); +addCreditsLine("John Kilmartin"); +addCreditsLine("John Kok Chung Yoong"); +addCreditsLine("John Mattison"); +addCreditsLine("John Nielsen"); +addCreditsLine("John Reque"); +addCreditsLine("John Rodriguez"); +addCreditsLine("John Tackman"); +addCreditsLine("John Titus"); +addCreditsLine("John Wolf"); +addCreditsLine("Johnny Christensen"); +addCreditsLine("Jon Callirgos"); +addCreditsLine("Jon Naiman"); +addCreditsLine("Jon Norris"); +addCreditsLine("Jon Pudge"); +addCreditsLine("Jon Simon"); +addCreditsLine("Jonas Hansen"); +addCreditsLine("Jonathan Bale"); +addCreditsLine("Jonathan Fingas"); +addCreditsLine("Jonathan Hill"); +addCreditsLine("Jonathan Hilmer"); +addCreditsLine("Jonathan Parker"); +addCreditsLine("Jonathan Peters"); +addCreditsLine("Jonathan Reed"); +addCreditsLine("Jonathan Slark"); +addCreditsLine("Jonathan W. Hebert"); +addCreditsLine("Jonathan Whitehouse"); +addCreditsLine("Jone Kajan"); +addCreditsLine("Jordan Cheetin"); +addCreditsLine("Jordan Mercier"); +addCreditsLine("Joscha Dzielak"); +addCreditsLine("Jose Magana"); +addCreditsLine("Josef Jahn"); +addCreditsLine("Joseph Downs"); +addCreditsLine("Joseph Liu"); +addCreditsLine("Joseph Walling"); +addCreditsLine("Josh Hoey"); +addCreditsLine("Joshua Geary"); +addCreditsLine("Juan Pablo Erices"); +addCreditsLine("Jurgen De Vos"); +addCreditsLine("Justin Darity"); +addCreditsLine("Justin Forward"); +addCreditsLine("Justin Meske"); +addCreditsLine("Justin Talley"); +addCreditsLine("Karen Cobb"); +addCreditsLine("Karen Holland"); +addCreditsLine("Kar-Hai Chu"); +addCreditsLine("Kari Gardner"); +addCreditsLine("Karl Heck"); +addCreditsLine("Karl Seguin"); +addCreditsLine("Karre Knudsen"); +addCreditsLine("Keith Allen Brown"); +addCreditsLine("Keith Hampe"); +addCreditsLine("Keith Lehman"); +addCreditsLine("Keith Lu"); +addCreditsLine("Kelly Christians"); +addCreditsLine("Kelvin Kim"); +addCreditsLine("Ken Herritt"); +addCreditsLine("Ken Holst"); +addCreditsLine("Kenneth Goh"); +addCreditsLine("Kenric Tam"); +addCreditsLine("Kent Daniels"); +addCreditsLine("Kenzo Iwanaga"); +addCreditsLine("Keoni van't Groenewout"); +addCreditsLine("Kevin Christian"); +addCreditsLine("Kevin Fuhst"); +addCreditsLine("Kevin Lee"); +addCreditsLine("Kevin Middleton"); +addCreditsLine("Kevin R. McGaffey"); +addCreditsLine("Kevin Rank"); +addCreditsLine("Kevin Tanghe"); +addCreditsLine("Kibeom Song"); +addCreditsLine("Kim Anderson"); +addCreditsLine("Kim Dae Uk"); +addCreditsLine("Kishan Shri"); +addCreditsLine("Kody Dickerson"); +addCreditsLine("Kohei Iwanaga"); +addCreditsLine("Kolya Rice"); +addCreditsLine("Kris Bugbee"); +addCreditsLine("Kris Thomson"); +addCreditsLine("Kristian Christensen"); +addCreditsLine("Kristo Kurtén"); +addCreditsLine("Kurt Sund"); +addCreditsLine("Kwabena Otchere"); +addCreditsLine("Kyle Doris"); +addCreditsLine("Kyle Godfrey"); +addCreditsLine("Kyle Job"); +addCreditsLine("Kyle Leveque"); +addCreditsLine("Kyle Morrison"); +addCreditsLine("Lance Tegner"); +addCreditsLine("Lars Jelstad"); +addCreditsLine("Laura Schreiner"); +addCreditsLine("Lawrence Chung"); +addCreditsLine("Lawrence Jupina"); +addCreditsLine("Lee Weaver"); +addCreditsLine("Leif Anderson"); +addCreditsLine("Leonard Pak"); +addCreditsLine("Leslie Ho Bee Chew"); +addCreditsLine("Liam Byrne"); +addCreditsLine("Lian Bredenkamp"); +addCreditsLine("Lim Eui Taek"); +addCreditsLine("Liviu Stan"); +addCreditsLine("Lon Chen"); +addCreditsLine("Lord Olav Rekve III"); +addCreditsLine("Loren Oldham"); +addCreditsLine("Lorne Laliberte"); +addCreditsLine("Louie Ramones"); +addCreditsLine("Lucas Goodwin"); +addCreditsLine("Lucas Tvrdik"); +addCreditsLine("Luis Zapata"); +addCreditsLine("Luiz Ricardo Malheiros"); +addCreditsLine("Luke McBeath"); +addCreditsLine("Manu De Gersem"); +addCreditsLine("Marc Broekhoven"); +addCreditsLine("Marc Bunin"); +addCreditsLine("Marc Chang"); +addCreditsLine("Marc Cobelens"); +addCreditsLine("Marc Elvy"); +addCreditsLine("Marc Rehder"); +addCreditsLine("Marco Amato"); +addCreditsLine("Marco Casati"); +addCreditsLine("Marcus Hurst"); +addCreditsLine("Marcus Miller"); +addCreditsLine("Mariano Porta"); +addCreditsLine("Mario Batlle"); +addCreditsLine("Mario Olivier"); +addCreditsLine("Maritza Kvalsvik"); +addCreditsLine("Marius Andre Aasly"); +addCreditsLine("Mark Brieden"); +addCreditsLine("Mark Caldwell"); +addCreditsLine("Mark de Jong"); +addCreditsLine("Mark Dickenson"); +addCreditsLine("Mark Fiore"); +addCreditsLine("Mark Hephner"); +addCreditsLine("Mark Siciliano"); +addCreditsLine("Mark Steurer"); +addCreditsLine("Mark Szabo"); +addCreditsLine("Mark Yocom"); +addCreditsLine("Markus Cichy"); +addCreditsLine("Markus Eisenblaetter"); +addCreditsLine("Markus Eskermo"); +addCreditsLine("Markus Roth"); +addCreditsLine("Martin Kremer"); +addCreditsLine("Martin Parker"); +addCreditsLine("Mat Bettinson"); +addCreditsLine("Mathew Zauher"); +addCreditsLine("Mathias Lindfeldt"); +addCreditsLine("Mathieu Bouchard"); +addCreditsLine("Matt Berkland"); +addCreditsLine("Matt Brunmeier"); +addCreditsLine("Matt Chandronait"); +addCreditsLine("Matt Cohen"); +addCreditsLine("Matt Collins"); +addCreditsLine("Matt Craw"); +addCreditsLine("Matt Culp"); +addCreditsLine("Matt Davis"); +addCreditsLine("Matt DeWald"); +addCreditsLine("Matt Grange"); +addCreditsLine("Matt Green"); +addCreditsLine("Matt McCall"); +addCreditsLine("Matt Timlin"); +addCreditsLine("Matt Vilcsak"); +addCreditsLine("Matt Wilson"); +addCreditsLine("Matthew A. Clarke"); +addCreditsLine("Matthew Frolick"); +addCreditsLine("Matthew Jenkins"); +addCreditsLine("Matthew Keen"); +addCreditsLine("Matthew Keith"); +addCreditsLine("Matthew McKeown"); +addCreditsLine("Matthew Williams"); +addCreditsLine("Matthias Schneidt"); +addCreditsLine("Maurice Kambach"); +addCreditsLine("Maurice Tan"); +addCreditsLine("Mauro Artou"); +addCreditsLine("Max Robins"); +addCreditsLine("Melissa Webb"); +addCreditsLine("Meredith Marine"); +addCreditsLine("Michael A Pratt"); +addCreditsLine("Michael Carroll"); +addCreditsLine("Michael Dunne"); +addCreditsLine("Michael Ennis"); +addCreditsLine("Michael Hamlett"); +addCreditsLine("Michael Jacovina"); +addCreditsLine("Michael Johnston"); +addCreditsLine("Michael Kenney"); +addCreditsLine("Michael Parks"); +addCreditsLine("Michael Strong"); +addCreditsLine("Michael Tan It Han"); +addCreditsLine("Michael Valera"); +addCreditsLine("Michael van Huystee"); +addCreditsLine("Michael Voigt"); +addCreditsLine("Michael Waldvogle"); +addCreditsLine("Michael Wichter"); +addCreditsLine("micheal thornton"); +addCreditsLine("Mickey Borchardt"); +addCreditsLine("Miguel Schneeberger"); +addCreditsLine("Mika Hyvonen"); +addCreditsLine("Mikael Garde Nielsen"); +addCreditsLine("Mike Benton"); +addCreditsLine("Mike Burton"); +addCreditsLine("Mike Comroe"); +addCreditsLine("Mike Cutillo"); +addCreditsLine("Mike Dally"); +addCreditsLine("Mike Fedorov"); +addCreditsLine("Mike Hillebrecht"); +addCreditsLine("Mike Large"); +addCreditsLine("Mike Leeder"); +addCreditsLine("Mike Mann"); +addCreditsLine("Mike Plavin"); +addCreditsLine("Mike Ransom"); +addCreditsLine("Mike Swanson"); +addCreditsLine("Mike Weiss"); +addCreditsLine("Mikkel Johansen"); +addCreditsLine("Ming Jack Po"); +addCreditsLine("Minos Dounias"); +addCreditsLine("Moonja Choi"); +addCreditsLine("Morghan Laswell"); +addCreditsLine("Motohiko Kimura"); +addCreditsLine("Moussa Khan"); +addCreditsLine("Myles Angell"); +addCreditsLine("N. David Griffin"); +addCreditsLine("Naoki Yokoyama"); +addCreditsLine("Nate Timperley"); +addCreditsLine("Nathan Clark"); +addCreditsLine("Nathan Sweet"); +addCreditsLine("Neal Sample"); +addCreditsLine("Neale Guy"); +addCreditsLine("Neil Crabaugh"); +addCreditsLine("Neil Witkin"); +addCreditsLine("Nelson Billedo"); +addCreditsLine("Nemar Velasquez"); +addCreditsLine("Niall Chadwick"); +addCreditsLine("Nic Minnis"); +addCreditsLine("Nicholas Chea"); +addCreditsLine("Nicholas Paufler"); +addCreditsLine("Nick Berthet"); +addCreditsLine("Nick Bogolyubov"); +addCreditsLine("Nick Carr"); +addCreditsLine("Nick Goebel"); +addCreditsLine("Nick Martini"); +addCreditsLine("Nick Orlich"); +addCreditsLine("Nick Petska"); +addCreditsLine("Nick Rose"); +addCreditsLine("Nick S. Pasto"); +addCreditsLine("Nico Schlichting"); +addCreditsLine("Nicolas Roux"); +addCreditsLine("Niklas Westerlund"); +addCreditsLine("Nikolai Sagun"); +addCreditsLine("Octavian Busuioc"); +addCreditsLine("Ola Olsson"); +addCreditsLine("Olivier Roulx"); +addCreditsLine("Omar Yehia"); +addCreditsLine("Or Yerushalmi"); +addCreditsLine("Orlando Rojas"); +addCreditsLine("Oscar Bossi"); +addCreditsLine("P. Bryan Edge-Salois"); +addCreditsLine("P.J. Allen"); +addCreditsLine("Pamela A. Holmberg"); +addCreditsLine("Pamela McClean"); +addCreditsLine("Paolo Neé"); +addCreditsLine("Paolo Petrini"); +addCreditsLine("Pär Nordenstam"); +addCreditsLine("Pascal Buettikofer"); +addCreditsLine("Pascal Woudenberg"); +addCreditsLine("Pat Callahan"); +addCreditsLine("Pat Donovan"); +addCreditsLine("Patricio Foieri"); +addCreditsLine("Patrick Bryant"); +addCreditsLine("Patrick Fitzsimons"); +addCreditsLine("Patrick Kramer"); +addCreditsLine("Patrick Peters"); +addCreditsLine("Patrick Thomas"); +addCreditsLine("Patrick Zerr"); +addCreditsLine("Patrizia Bischof"); +addCreditsLine("Paul Adriance"); +addCreditsLine("Paul Barnes"); +addCreditsLine("Paul Doucet"); +addCreditsLine("Paul Grimes"); +addCreditsLine("Paul Hormis"); +addCreditsLine("Paul J. Paella"); +addCreditsLine("Paul Jeacock"); +addCreditsLine("Paul Magyar"); +addCreditsLine("Paul McClelland"); +addCreditsLine("Paul Morris"); +addCreditsLine("Paul Polzer"); +addCreditsLine("Paul Prestopnik"); +addCreditsLine("Paul Ruhan"); +addCreditsLine("Paul Tousignant"); +addCreditsLine("Paul Warren"); +addCreditsLine("Paul Wedgwood"); +addCreditsLine("Paul Williams"); +addCreditsLine("Paul Wright"); +addCreditsLine("Penny Miller"); +addCreditsLine("Per Kristiansen"); +addCreditsLine("Per Vestersgaard-Andersen"); +addCreditsLine("Pete Harris"); +addCreditsLine("Peter Baker"); +addCreditsLine("Peter Brindöpke"); +addCreditsLine("Peter Brock Madsen"); +addCreditsLine("Peter Davis"); +addCreditsLine("Peter Kazmierow"); +addCreditsLine("Peter Mayberry"); +addCreditsLine("Peter Pistorius"); +addCreditsLine("Peter Romano"); +addCreditsLine("Peter Vaisvil"); +addCreditsLine("Peter Wittig"); +addCreditsLine("Petter Eriksson"); +addCreditsLine("Petteri Taipale"); +addCreditsLine("Phil & Rebecca Carey"); +addCreditsLine("Phil Pappas"); +addCreditsLine("Philip Charles Maslied"); +addCreditsLine("Philip Schultz"); +addCreditsLine("Phill Curiale"); +addCreditsLine("Phillip Ervin"); +addCreditsLine("Phillip Kono"); +addCreditsLine("Phillip Ploesser"); +addCreditsLine("phillip stewart"); +addCreditsLine("Pöchhacker Lee"); +addCreditsLine("Prasad Galpoththawela"); +addCreditsLine("Radu Lucian"); +addCreditsLine("Rafi Zaguri"); +addCreditsLine("Ragnar Lonn"); +addCreditsLine("Ramiro Salgado Echeverria"); +addCreditsLine("Raphael Choo Boon Leck"); +addCreditsLine("Rasmus Have"); +addCreditsLine("Rene Bortko"); +addCreditsLine("Rene Wesselius"); +addCreditsLine("Ren-Wey Yang"); +addCreditsLine("Res Ngata"); +addCreditsLine("Reto Baumann"); +addCreditsLine("Ric Moseley"); +addCreditsLine("Richard Casto"); +addCreditsLine("Richard Cole"); +addCreditsLine("Richard Egglestone"); +addCreditsLine("Richard Freeouf"); +addCreditsLine("Richard Low"); +addCreditsLine("Richard McCarthy"); +addCreditsLine("Richard Shackleton"); +addCreditsLine("Richard Thurlow"); +addCreditsLine("Rick Buford"); +addCreditsLine("Ricky Fernandez"); +addCreditsLine("Rino Nielsen"); +addCreditsLine("Rob Cundiff"); +addCreditsLine("Rob Duffy"); +addCreditsLine("Rob Jones"); +addCreditsLine("Rob Rynda"); +addCreditsLine("Rob Tyre"); +addCreditsLine("Rob Weller"); +addCreditsLine("Robert Apsel"); +addCreditsLine("Robert Cass"); +addCreditsLine("Robert Hinkle"); +addCreditsLine("Robert Jahnel"); +addCreditsLine("Robert Layser"); +addCreditsLine("Robert LeBlanc"); +addCreditsLine("Robert Polzer"); +addCreditsLine("Robert Villasana"); +addCreditsLine("Roberto Toldo"); +addCreditsLine("Rocco Borg"); +addCreditsLine("Rod Chrenek"); +addCreditsLine("Rogelio Olguin"); +addCreditsLine("Roger Sewell"); +addCreditsLine("Roland Chabbey"); +addCreditsLine("Ron Anshel"); +addCreditsLine("Ronen Lazarovitch"); +addCreditsLine("Ross A. Carlson"); +addCreditsLine("Ross Carlson"); +addCreditsLine("Ross Litchfield"); +addCreditsLine("Roy Greenhalgh"); +addCreditsLine("Rozsonits László"); +addCreditsLine("Rozsonits Tibor"); +addCreditsLine("Ruben Eikeland"); +addCreditsLine("Ruben Pauwels"); +addCreditsLine("Rune Fjeld Olsen"); +addCreditsLine("Rune Håkansson"); +addCreditsLine("Rune Warhuus"); +addCreditsLine("Russ Davies"); +addCreditsLine("Russell Mein"); +addCreditsLine("Russell Thompson"); +addCreditsLine("Ryan Bailey"); +addCreditsLine("Ryan Counts"); +addCreditsLine("Ryan Gilfillan"); +addCreditsLine("Ryan Hopsecker"); +addCreditsLine("Ryan Kelly"); +addCreditsLine("Ryan Lee"); +addCreditsLine("Ryan Schoonmaker"); +addCreditsLine("Ryan Thernes"); +addCreditsLine("Sam Mackrill"); +addCreditsLine("Sam Tanis"); +addCreditsLine("Sam Whitehead"); +addCreditsLine("Samuel Heffley"); +addCreditsLine("Samuel L Jones"); +addCreditsLine("Sarah Johnstone"); +addCreditsLine("Scott Abeyta"); +addCreditsLine("Scott Allison"); +addCreditsLine("Scott Bair"); +addCreditsLine("Scott Dennis"); +addCreditsLine("Scott Egashira"); +addCreditsLine("Scott Estabrook"); +addCreditsLine("Scott Jenkins"); +addCreditsLine("Scott Kennedy"); +addCreditsLine("Scott McCulloch"); +addCreditsLine("Scott Medlin"); +addCreditsLine("Scott Miller"); +addCreditsLine("Scott Pearson"); +addCreditsLine("Scott Stahl"); +addCreditsLine("Scotty Theriot"); +addCreditsLine("Sean Brezniak"); +addCreditsLine("Sean Bryson"); +addCreditsLine("Sean Claflin"); +addCreditsLine("Sean Dawson"); +addCreditsLine("Sean Fitzsimons"); +addCreditsLine("Sean M. Davis"); +addCreditsLine("Sean Parramore"); +addCreditsLine("Sean Polzer"); +addCreditsLine("Sean Stanley"); +addCreditsLine("Sean Swayze"); +addCreditsLine("Sean Uezu"); +addCreditsLine("Sebastian Stange"); +addCreditsLine("Sebastien Guillemet"); +addCreditsLine("Sebastien Jesionka"); +addCreditsLine("Sergey Kovrov"); +addCreditsLine("Seth Buntain"); +addCreditsLine("Seth Thompson"); +addCreditsLine("Shae Pritchard-Martinez"); +addCreditsLine("Shane Beaumont"); +addCreditsLine("Shane Evans"); +addCreditsLine("Shane Froebel"); +addCreditsLine("Shane Taylor"); +addCreditsLine("Shaun Newsome"); +addCreditsLine("Shawn Christenson"); +addCreditsLine("Shelby Townsend"); +addCreditsLine("Si Donbavand"); +addCreditsLine("Simon Gooding"); +addCreditsLine("Simon Malo"); +addCreditsLine("Simon Muir"); +addCreditsLine("Simon Pedersen"); +addCreditsLine("Sing Wu"); +addCreditsLine("Sjaak Ursinus"); +addCreditsLine("Skip McIlvaine"); +addCreditsLine("Sohail Bhamani"); +addCreditsLine("Spencer Tsai"); +addCreditsLine("Stacey A Ross"); +addCreditsLine("Stan C Audle"); +addCreditsLine("Stan Ilin"); +addCreditsLine("Stan James"); +addCreditsLine("Stef Johannes Henderson"); +addCreditsLine("Stefan Grufman"); +addCreditsLine("Stefan Kiesel"); +addCreditsLine("Stefano Petrullo"); +addCreditsLine("Stefano Zanola"); +addCreditsLine("Steffen Knapp"); +addCreditsLine("Stephan Brezinsky"); +addCreditsLine("Stephen Cimprich"); +addCreditsLine("Stephen Le Petit"); +addCreditsLine("Stephen Limowski"); +addCreditsLine("Stephen Lynch"); +addCreditsLine("Stephen Summerell"); +addCreditsLine("Steve Bailey"); +addCreditsLine("Steve Batham"); +addCreditsLine("Steve Carrion"); +addCreditsLine("Steve Gibson"); +addCreditsLine("Steve Nixon"); +addCreditsLine("Steve Pompel"); +addCreditsLine("Steve Saulle"); +addCreditsLine("Steve Smith"); +addCreditsLine("Steve Stryd"); +addCreditsLine("Steve Tory"); +addCreditsLine("Steven E. Adams"); +addCreditsLine("Steven Grossman"); +addCreditsLine("Steven Kats"); +addCreditsLine("Steven Knox"); +addCreditsLine("Steven Kusewicz"); +addCreditsLine("Stewart Laufer"); +addCreditsLine("Stewart Tosh"); +addCreditsLine("Stuart Ross Robertson"); +addCreditsLine("T.J. Allard"); +addCreditsLine("Takafumi Kobayashi"); +addCreditsLine("Takashi Morikawa"); +addCreditsLine("Tal Muskal"); +addCreditsLine("Tal Nelson"); +addCreditsLine("Tan Peng Koon"); +addCreditsLine("Tanner Burgess"); +addCreditsLine("Taylor Stewart"); +addCreditsLine("Taylor Suchan"); +addCreditsLine("Teck Wong"); +addCreditsLine("Terje Alexander Barth"); +addCreditsLine("Tero Heija"); +addCreditsLine("Theresa Petersen"); +addCreditsLine("Thomas Dönnecke"); +addCreditsLine("Thomas From"); +addCreditsLine("Thomas Goemaere"); +addCreditsLine("Thomas Hardy"); +addCreditsLine("Thomas Kumpik, Jr."); +addCreditsLine("Thomas Prinz"); +addCreditsLine("Thomas R. Bissell III"); +addCreditsLine("Thomas Ribbeck"); +addCreditsLine("Tiffany Diaz"); +addCreditsLine("Tim Engelman"); +addCreditsLine("Tim Hammock"); +addCreditsLine("Tim Kautz"); +addCreditsLine("Tim ONeil"); +addCreditsLine("Tim Rider"); +addCreditsLine("Tim Smith"); +addCreditsLine("Tim Thompson"); +addCreditsLine("Tim Yeung"); +addCreditsLine("Timen Wuestman"); +addCreditsLine("Timothy C. Stanton"); +addCreditsLine("Timothy Lewis"); +addCreditsLine("Todd Northcutt"); +addCreditsLine("Todd Sjoblom"); +addCreditsLine("Tom Beijar Johansson"); +addCreditsLine("Tom Carel"); +addCreditsLine("Tom Ellis"); +addCreditsLine("Tom Fulton"); +addCreditsLine("Tom Gordon"); +addCreditsLine("Tom Roger Tranø"); +addCreditsLine("Tom Szabo"); +addCreditsLine("Tom Vogt"); +addCreditsLine("Tomi Partanen"); +addCreditsLine("Toni Ahonen"); +addCreditsLine("Tony Caskanette"); +addCreditsLine("Torbjørn Østlund"); +addCreditsLine("Travis Ramme"); +addCreditsLine("Trent Donelson"); +addCreditsLine("Trevor Lanz"); +addCreditsLine("Trevor McGuire"); +addCreditsLine("Troy H. Benson"); +addCreditsLine("Troy Lee"); +addCreditsLine("Tyler Endicott"); +addCreditsLine("Tyler Frans"); +addCreditsLine("Tyler Jacobson"); +addCreditsLine("Tyler Jensen"); +addCreditsLine("Tyler Lott"); +addCreditsLine("Uli Muller"); +addCreditsLine("Verner Fortelius"); +addCreditsLine("Vic Stelter"); +addCreditsLine("Vidar Almås Pettersen"); +addCreditsLine("Ville Halonen"); +addCreditsLine("Vincent Cunniffe"); +addCreditsLine("Vitor Coelho"); +addCreditsLine("Wai wong"); +addCreditsLine("Wasif Azmat"); +addCreditsLine("Wayne Opai"); +addCreditsLine("Wayne Tory"); +addCreditsLine("Wayne Wallace"); +addCreditsLine("Werner Pötzelberger"); +addCreditsLine("Wes Sanders"); +addCreditsLine("Will Belknap"); +addCreditsLine("Will Erickson"); +addCreditsLine("Will Preisch"); +addCreditsLine("Willem Bison"); +addCreditsLine("William Everett"); +addCreditsLine("William Goldberg"); +addCreditsLine("William Helm"); +addCreditsLine("William Houston"); +addCreditsLine("William Klimke"); +addCreditsLine("William Knop"); +addCreditsLine("William Moss"); +addCreditsLine("William Prideaux-Brune"); +addCreditsLine("William Sherriff"); +addCreditsLine("Wilson Bilkovich"); +addCreditsLine("Wing Hon Lai"); +addCreditsLine("Wu Yiheng"); +addCreditsLine("Yanai Sachs"); +addCreditsLine("YeongJin Bae"); +addCreditsLine("Yongchan Jee"); +addCreditsLine("Yves Peckstadt"); +addCreditsLine("Zach McCuin"); +addCreditsLine("Zachary Charles "); +addCreditsLine("Zachary Denholm"); +addCreditsLine("Zion Mizrahi"); +addCreditsLine("Zsolt Vincze"); +addCreditsLine(""); +addCreditsLine("Operation Big Booze"); +addCreditsLine("Phil \"Vlad\" Pappas"); +addCreditsLine("Greg \"Satan\" Romaszka"); +addCreditsLine("Steve \"Cpt.Wussie!!!\" Snow"); +addCreditsLine(""); +addCreditsLine(""); +addCreditsLine("Credits Screen By"); +addCreditsLine("Kidney Thief :)", true); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/base/scripts/damageTypes.cs b/base/scripts/damageTypes.cs new file mode 100644 index 0000000..93e65e5 --- /dev/null +++ b/base/scripts/damageTypes.cs @@ -0,0 +1,520 @@ +//-------------------------------------------------------------------------- +// TYPES OF ALLOWED DAMAGE +//-------------------------------------------------------------------------- + +$DamageType::Default = 0; +$DamageType::Blaster = 1; +$DamageType::Plasma = 2; +$DamageType::Bullet = 3; +$DamageType::Disc = 4; +$DamageType::Grenade = 5; +$DamageType::Laser = 6; // NOTE: This value is referenced directly in code. DO NOT CHANGE! +$DamageType::ELF = 7; +$DamageType::Mortar = 8; +$DamageType::Missile = 9; +$DamageType::ShockLance = 10; +$DamageType::Mine = 11; +$DamageType::Explosion = 12; +$DamageType::Impact = 13; +$DamageType::Ground = 14; +$DamageType::Turret = 15; + +$DamageType::PlasmaTurret = 16; +$DamageType::AATurret = 17; +$DamageType::ElfTurret = 18; +$DamageType::MortarTurret = 19; +$DamageType::MissileTurret = 20; +$DamageType::IndoorDepTurret = 21; +$DamageType::OutdoorDepTurret = 22; +$DamageType::SentryTurret = 23; + +$DamageType::OutOfBounds = 24; +$DamageType::Lava = 25; + +$DamageType::ShrikeBlaster = 26; +$DamageType::BellyTurret = 27; +$DamageType::BomberBombs = 28; +$DamageType::TankChaingun = 29; +$DamageType::TankMortar = 30; +$DamageType::SatchelCharge = 31; +$DamageType::MPBMissile = 32; +$DamageType::Lightning = 33; +$DamageType::VehicleSpawn = 34; + +// DMM -- added so MPBs that blow up under water get a message +$DamageType::Water = 97; + +//Tinman - used in Hunters for cheap bastards ;) +$DamageType::NexusCamping = 98; + +// MES -- added so CTRL-K can get a distinctive message +$DamageType::Suicide = 99; + +// Etc, etc. + +$DamageTypeText[0] = "default"; +$DamageTypeText[1] = "blaster"; +$DamageTypeText[2] = "plasma"; +$DamageTypeText[3] = "chaingun"; +$DamageTypeText[4] = "disc"; +$DamageTypeText[5] = "grenade"; +$DamageTypeText[6] = "laser"; +$DamageTypeText[7] = "ELF"; +$DamageTypeText[8] = "mortar"; +$DamageTypeText[9] = "missile"; +$DamageTypeText[10] = "shocklance"; +$DamageTypeText[11] = "mine"; +$DamageTypeText[12] = "explosion"; +$DamageTypeText[13] = "impact"; +$DamageTypeText[14] = "ground"; +$DamageTypeText[15] = "turret"; +$DamageTypeText[16] = "plasma turret"; +$DamageTypeText[17] = "AA turret"; +$DamageTypeText[18] = "ELF turret"; +$DamageTypeText[19] = "mortar turret"; +$DamageTypeText[20] = "missile turret"; +$DamageTypeText[21] = "clamp turret"; +$DamageTypeText[22] = "spike turret"; +$DamageTypeText[23] = "sentry turret"; +$DamageTypeText[24] = "out of bounds"; +$DamageTypeText[25] = "lava"; +$DamageTypeText[26] = "shrike blaster"; +$DamageTypeText[27] = "belly turret"; +$DamageTypeText[28] = "bomber bomb"; +$DamageTypeText[29] = "tank chaingun"; +$DamageTypeText[30] = "tank mortar"; +$DamageTypeText[31] = "satchel charge"; +$DamageTypeText[32] = "MPB missile"; +$DamageTypeText[33] = "lighting"; +$DamageTypeText[98] = "nexus camping"; +$DamageTypeText[99] = "suicide"; + + +// ##### PLEASE DO NOT REORDER THE DAMAGE PROFILE TABLES BELOW ##### +// (They are set up in the same order as the "Weapons Matrix.xls" sheet for ease of reference when balancing) + +//---------------------------------------------------------------------------- +// VEHICLE DAMAGE PROFILES +//---------------------------------------------------------------------------- +datablock SimDataBlock(AirVehicleDamageProfile) +{ + shieldDamageScale[$DamageType::Blaster] = 1.0; + shieldDamageScale[$DamageType::Bullet] = 1.0; + shieldDamageScale[$DamageType::ELF] = 1.0; + shieldDamageScale[$DamageType::ShockLance] = 0.5; + shieldDamageScale[$DamageType::Laser] = 1.0; + shieldDamageScale[$DamageType::ShrikeBlaster] = 3.5; + shieldDamageScale[$DamageType::BellyTurret] = 2.0; + shieldDamageScale[$DamageType::AATurret] = 3.0; + shieldDamageScale[$DamageType::IndoorDepTurret] = 2.25; + shieldDamageScale[$DamageType::OutdoorDepTurret] = 2.25; + shieldDamageScale[$DamageType::SentryTurret] = 2.25; + shieldDamageScale[$DamageType::Disc] = 1.0; + shieldDamageScale[$DamageType::Grenade] = 1.0; + shieldDamageScale[$DamageType::Mine] = 3.0; + shieldDamageScale[$DamageType::Missile] = 3.0; + shieldDamageScale[$DamageType::Mortar] = 2.0; + shieldDamageScale[$DamageType::Plasma] = 1.0; + shieldDamageScale[$DamageType::BomberBombs] = 3.0; + shieldDamageScale[$DamageType::TankChaingun] = 3.0; + shieldDamageScale[$DamageType::TankMortar] = 2.0; + shieldDamageScale[$DamageType::MissileTurret] = 3.0; + shieldDamageScale[$DamageType::MortarTurret] = 2.0; + shieldDamageScale[$DamageType::PlasmaTurret] = 2.0; + shieldDamageScale[$DamageType::SatchelCharge] = 3.5; + shieldDamageScale[$DamageType::Default] = 1.0; + shieldDamageScale[$DamageType::Impact] = 1.0; + shieldDamageScale[$DamageType::Ground] = 1.0; + shieldDamageScale[$DamageType::Explosion] = 3.0; + shieldDamageScale[$DamageType::Lightning] = 10.0; + + damageScale[$DamageType::Blaster] = 0.75; + damageScale[$DamageType::Bullet] = 0.75; + damageScale[$DamageType::ELF] = 0.0; + damageScale[$DamageType::ShockLance] = 0.50; + damageScale[$DamageType::Laser] = 1.0; + damageScale[$DamageType::ShrikeBlaster] = 2.5; + damageScale[$DamageType::BellyTurret] = 1.2; + damageScale[$DamageType::AATurret] = 1.5; + damageScale[$DamageType::IndoorDepTurret] = 1.25; + damageScale[$DamageType::OutdoorDepTurret] = 1.25; + damageScale[$DamageType::SentryTurret] = 1.25; + damageScale[$DamageType::Disc] = 1.0; + damageScale[$DamageType::Grenade] = 0.75; + damageScale[$DamageType::Mine] = 4.0; + damageScale[$DamageType::Missile] = 1.5; + damageScale[$DamageType::Mortar] = 2.0; + damageScale[$DamageType::Plasma] = 0.5; + damageScale[$DamageType::BomberBombs] = 2.0; + damageScale[$DamageType::TankChaingun] = 2.0; + damageScale[$DamageType::TankMortar] = 2.0; + damageScale[$DamageType::MissileTurret] = 1.5; + damageScale[$DamageType::MortarTurret] = 2.0; + damageScale[$DamageType::PlasmaTurret] = 2.0; + damageScale[$DamageType::SatchelCharge] = 3.5; + damageScale[$DamageType::Default] = 1.0; + damageScale[$DamageType::Impact] = 1.0; + damageScale[$DamageType::Ground] = 1.0; + damageScale[$DamageType::Explosion] = 2.0; + damageScale[$DamageType::Lightning] = 10.0; +}; + +datablock SimDataBlock(GravCycleDamageProfile) +{ + shieldDamageScale[$DamageType::Blaster] = 2.0; + shieldDamageScale[$DamageType::Bullet] = 2.5; + shieldDamageScale[$DamageType::ELF] = 1.0; + shieldDamageScale[$DamageType::ShockLance] = 1.0; + shieldDamageScale[$DamageType::Laser] = 4.0; + shieldDamageScale[$DamageType::ShrikeBlaster] = 5.0; + shieldDamageScale[$DamageType::BellyTurret] = 2.0; + shieldDamageScale[$DamageType::AATurret] = 2.0; + shieldDamageScale[$DamageType::IndoorDepTurret] = 2.5; + shieldDamageScale[$DamageType::OutdoorDepTurret] = 2.5; + shieldDamageScale[$DamageType::Disc] = 2.5; + shieldDamageScale[$DamageType::Grenade] = 2.0; + shieldDamageScale[$DamageType::Mine] = 3.5; + shieldDamageScale[$DamageType::Missile] = 4.0; + shieldDamageScale[$DamageType::Mortar] = 2.0; + shieldDamageScale[$DamageType::Plasma] = 1.6; + shieldDamageScale[$DamageType::BomberBombs] = 2.0; + shieldDamageScale[$DamageType::TankChaingun] = 2.0; + shieldDamageScale[$DamageType::TankMortar] = 2.0; + shieldDamageScale[$DamageType::MissileTurret] = 4.0; + shieldDamageScale[$DamageType::MortarTurret] = 2.0; + shieldDamageScale[$DamageType::PlasmaTurret] = 2.0; + shieldDamageScale[$DamageType::SatchelCharge] = 3.0; + shieldDamageScale[$DamageType::Default] = 1.0; + shieldDamageScale[$DamageType::Impact] = 1.0; + shieldDamageScale[$DamageType::Ground] = 1.0; + shieldDamageScale[$DamageType::Explosion] = 2.0; + shieldDamageScale[$DamageType::Lightning] = 5.0; + + damageScale[$DamageType::Blaster] = 1.5; + damageScale[$DamageType::Bullet] = 1.2; + damageScale[$DamageType::ELF] = 0.0; + damageScale[$DamageType::ShockLance] = 0.50; + damageScale[$DamageType::Laser] = 2.0; + damageScale[$DamageType::ShrikeBlaster] = 2.5; + damageScale[$DamageType::BellyTurret] = 1.5; + damageScale[$DamageType::AATurret] = 1.0; + damageScale[$DamageType::IndoorDepTurret] = 1.0; + damageScale[$DamageType::OutdoorDepTurret] = 1.0; + damageScale[$DamageType::Disc] = 1.25; + damageScale[$DamageType::Grenade] = 1.0; + damageScale[$DamageType::Mine] = 4.0; + damageScale[$DamageType::Missile] = 1.2; + damageScale[$DamageType::Mortar] = 1.0; + damageScale[$DamageType::Plasma] = 1.2; + damageScale[$DamageType::BomberBombs] = 1.0; + damageScale[$DamageType::TankChaingun] = 1.0; + damageScale[$DamageType::TankMortar] = 1.0; + damageScale[$DamageType::MissileTurret] = 1.2; + damageScale[$DamageType::MortarTurret] = 1.0; + damageScale[$DamageType::PlasmaTurret] = 1.0; + damageScale[$DamageType::SatchelCharge] = 2.2; + damageScale[$DamageType::Default] = 1.0; + damageScale[$DamageType::Impact] = 1.0; + damageScale[$DamageType::Ground] = 1.0; + damageScale[$DamageType::Explosion] = 1.0; + damageScale[$DamageType::Lightning] = 5.0; +}; + +datablock SimDataBlock(GroundVehicleDamageProfile) +{ + shieldDamageScale[$DamageType::Blaster] = 0.6; + shieldDamageScale[$DamageType::Bullet] = 0.75; + shieldDamageScale[$DamageType::ELF] = 1.0; + shieldDamageScale[$DamageType::ShockLance] = 0.5; + shieldDamageScale[$DamageType::Laser] = 1.0; + shieldDamageScale[$DamageType::ShrikeBlaster] = 1.75; + shieldDamageScale[$DamageType::BellyTurret] = 1.25; + shieldDamageScale[$DamageType::AATurret] = 0.8; + shieldDamageScale[$DamageType::IndoorDepTurret] = 1.0; + shieldDamageScale[$DamageType::OutdoorDepTurret] = 1.0; + shieldDamageScale[$DamageType::Disc] = 0.8; + shieldDamageScale[$DamageType::Grenade] = 0.8; + shieldDamageScale[$DamageType::Mine] = 3.25; + shieldDamageScale[$DamageType::Missile] = 2.0; + shieldDamageScale[$DamageType::Mortar] = 0.8; + shieldDamageScale[$DamageType::Plasma] = 1.0; + shieldDamageScale[$DamageType::BomberBombs] = 1.5; + shieldDamageScale[$DamageType::TankChaingun] = 1.5; + shieldDamageScale[$DamageType::TankMortar] = 1.4; + shieldDamageScale[$DamageType::MissileTurret] = 1.25; + shieldDamageScale[$DamageType::MortarTurret] = 1.0; + shieldDamageScale[$DamageType::PlasmaTurret] = 1.25; + shieldDamageScale[$DamageType::SatchelCharge] = 2.0; + shieldDamageScale[$DamageType::Default] = 1.0; + shieldDamageScale[$DamageType::Impact] = 1.0; + shieldDamageScale[$DamageType::Ground] = 1.0; + shieldDamageScale[$DamageType::Explosion] = 2.0; + shieldDamageScale[$DamageType::Lightning] = 10.0; + + damageScale[$DamageType::Blaster] = 0.75; + damageScale[$DamageType::Bullet] = 0.75; + damageScale[$DamageType::ELF] = 0.0; + damageScale[$DamageType::ShockLance] = 0.50; + damageScale[$DamageType::Laser] = 1.0; + damageScale[$DamageType::ShrikeBlaster] = 2.0; + damageScale[$DamageType::BellyTurret] = 1.0; + damageScale[$DamageType::AATurret] = 1.0; + damageScale[$DamageType::IndoorDepTurret] = 1.0; + damageScale[$DamageType::OutdoorDepTurret] = 1.0; + damageScale[$DamageType::Disc] = 1.0; + damageScale[$DamageType::Grenade] = 1.0; + damageScale[$DamageType::Mine] = 2.25; + damageScale[$DamageType::Missile] = 1.25; + damageScale[$DamageType::Mortar] = 1.0; + damageScale[$DamageType::Plasma] = 0.5; + damageScale[$DamageType::BomberBombs] = 1.0; + damageScale[$DamageType::TankChaingun] = 0.75; + damageScale[$DamageType::TankMortar] = 1.0; + damageScale[$DamageType::MissileTurret] = 1.25; + damageScale[$DamageType::MortarTurret] = 1.0; + damageScale[$DamageType::PlasmaTurret] = 1.0; + damageScale[$DamageType::SatchelCharge] = 2.0; + damageScale[$DamageType::Default] = 1.0; + damageScale[$DamageType::Impact] = 1.0; + damageScale[$DamageType::Ground] = 1.0; + damageScale[$DamageType::Explosion] = 1.0; + damageScale[$DamageType::Lightning] = 10.0; +}; + +//---------------------------------------------------------------------------- +// TURRET DAMAGE PROFILES +//---------------------------------------------------------------------------- + +datablock SimDataBlock(TurretDamageProfile) +{ + shieldDamageScale[$DamageType::Blaster] = 0.8; + shieldDamageScale[$DamageType::Bullet] = 0.8; + shieldDamageScale[$DamageType::ELF] = 1.0; + shieldDamageScale[$DamageType::ShockLance] = 0.5; + shieldDamageScale[$DamageType::Laser] = 1.0; + shieldDamageScale[$DamageType::ShrikeBlaster] = 3.0; + shieldDamageScale[$DamageType::BellyTurret] = 2.0; + shieldDamageScale[$DamageType::AATurret] = 1.0; + shieldDamageScale[$DamageType::IndoorDepTurret] = 1.0; + shieldDamageScale[$DamageType::OutdoorDepTurret] = 1.0; + shieldDamageScale[$DamageType::SentryTurret] = 1.0; + shieldDamageScale[$DamageType::Disc] = 1.0; + shieldDamageScale[$DamageType::Grenade] = 1.5; + shieldDamageScale[$DamageType::Mine] = 3.0; + shieldDamageScale[$DamageType::Missile] = 3.0; + shieldDamageScale[$DamageType::Mortar] = 3.0; + shieldDamageScale[$DamageType::Plasma] = 1.0; + shieldDamageScale[$DamageType::BomberBombs] = 2.0; + shieldDamageScale[$DamageType::TankChaingun] = 1.5; + shieldDamageScale[$DamageType::TankMortar] = 3.0; + shieldDamageScale[$DamageType::MissileTurret] = 3.0; + shieldDamageScale[$DamageType::MortarTurret] = 3.0; + shieldDamageScale[$DamageType::PlasmaTurret] = 2.0; + shieldDamageScale[$DamageType::SatchelCharge] = 4.5; + shieldDamageScale[$DamageType::Default] = 1.0; + shieldDamageScale[$DamageType::Impact] = 1.0; + shieldDamageScale[$DamageType::Ground] = 1.0; + shieldDamageScale[$DamageType::Explosion] = 2.0; + shieldDamageScale[$DamageType::Lightning] = 5.0; + + damageScale[$DamageType::Blaster] = 0.8; + damageScale[$DamageType::Bullet] = 0.9; + damageScale[$DamageType::ELF] = 0.0; + damageScale[$DamageType::ShockLance] = 0.50; + damageScale[$DamageType::Laser] = 1.0; + damageScale[$DamageType::ShrikeBlaster] = 1.0; + damageScale[$DamageType::BellyTurret] = 0.6; + damageScale[$DamageType::AATurret] = 1.0; + damageScale[$DamageType::IndoorDepTurret] = 1.0; + damageScale[$DamageType::OutdoorDepTurret] = 1.0; + damageScale[$DamageType::SentryTurret] = 1.0; + damageScale[$DamageType::Disc] = 1.1; + damageScale[$DamageType::Grenade] = 1.0; + damageScale[$DamageType::Mine] = 1.5; + damageScale[$DamageType::Missile] = 1.25; + damageScale[$DamageType::Mortar] = 1.25; + damageScale[$DamageType::Plasma] = 0.75; + damageScale[$DamageType::BomberBombs] = 1.0; + damageScale[$DamageType::TankChaingun] = 1.25; + damageScale[$DamageType::TankMortar] = 1.25; + damageScale[$DamageType::MissileTurret] = 1.25; + damageScale[$DamageType::MortarTurret] = 1.25; + damageScale[$DamageType::PlasmaTurret] = 1.25; + damageScale[$DamageType::SatchelCharge] = 1.5; + damageScale[$DamageType::Default] = 1.0; + damageScale[$DamageType::Impact] = 1.0; + damageScale[$DamageType::Ground] = 1.0; + damageScale[$DamageType::Explosion] = 1.0; + damageScale[$DamageType::Lightning] = 5.0; +}; + +//---------------------------------------------------------------------------- +// STATIC SHAPE DAMAGE PROFILES +//---------------------------------------------------------------------------- + +datablock SimDataBlock(StaticShapeDamageProfile) +{ + shieldDamageScale[$DamageType::Blaster] = 0.8; + shieldDamageScale[$DamageType::Bullet] = 1.0; + shieldDamageScale[$DamageType::ELF] = 1.0; + shieldDamageScale[$DamageType::ShockLance] = 1.0; + shieldDamageScale[$DamageType::Laser] = 1.0; + shieldDamageScale[$DamageType::ShrikeBlaster] = 2.0; + shieldDamageScale[$DamageType::BellyTurret] = 1.5; + shieldDamageScale[$DamageType::AATurret] = 1.0; + shieldDamageScale[$DamageType::IndoorDepTurret] = 1.0; + shieldDamageScale[$DamageType::OutdoorDepTurret] = 1.0; + shieldDamageScale[$DamageType::Turret] = 1.0; + shieldDamageScale[$DamageType::SentryTurret] = 1.0; + shieldDamageScale[$DamageType::Disc] = 1.0; + shieldDamageScale[$DamageType::Grenade] = 1.2; + shieldDamageScale[$DamageType::Mine] = 2.0; + shieldDamageScale[$DamageType::Missile] = 3.0; + shieldDamageScale[$DamageType::Mortar] = 3.0; + shieldDamageScale[$DamageType::Plasma] = 1.5; + shieldDamageScale[$DamageType::BomberBombs] = 2.0; + shieldDamageScale[$DamageType::TankChaingun] = 1.5; + shieldDamageScale[$DamageType::TankMortar] = 3.0; + shieldDamageScale[$DamageType::MissileTurret] = 3.0; + shieldDamageScale[$DamageType::MortarTurret] = 3.0; + shieldDamageScale[$DamageType::PlasmaTurret] = 2.0; + shieldDamageScale[$DamageType::SatchelCharge] = 6.0; + shieldDamageScale[$DamageType::Default] = 1.0; + shieldDamageScale[$DamageType::Impact] = 1.0; + shieldDamageScale[$DamageType::Ground] = 1.0; + shieldDamageScale[$DamageType::Explosion] = 2.0; + shieldDamageScale[$DamageType::Lightning] = 5.0; + + damageScale[$DamageType::Blaster] = 1.0; + damageScale[$DamageType::Bullet] = 1.0; + damageScale[$DamageType::ELF] = 0.0; + damageScale[$DamageType::ShockLance] = 1.0; + damageScale[$DamageType::Laser] = 1.0; + damageScale[$DamageType::ShrikeBlaster] = 2.0; + damageScale[$DamageType::BellyTurret] = 1.2; + damageScale[$DamageType::AATurret] = 1.0; + damageScale[$DamageType::IndoorDepTurret] = 1.0; + damageScale[$DamageType::OutdoorDepTurret] = 1.0; + damageScale[$DamageType::SentryTurret] = 1.0; + damageScale[$DamageType::Disc] = 1.15; + damageScale[$DamageType::Grenade] = 1.2; + damageScale[$DamageType::Mine] = 2.0; + damageScale[$DamageType::Missile] = 2.0; + damageScale[$DamageType::Mortar] = 2.0; + damageScale[$DamageType::Plasma] = 1.25; + damageScale[$DamageType::BomberBombs] = 1.0; + damageScale[$DamageType::TankChaingun] = 1.0; + damageScale[$DamageType::TankMortar] = 2.0; + damageScale[$DamageType::MissileTurret] = 2.0; + damageScale[$DamageType::MortarTurret] = 2.0; + damageScale[$DamageType::PlasmaTurret] = 2.0; + damageScale[$DamageType::SatchelCharge] = 4.0; + damageScale[$DamageType::Default] = 1.0; + damageScale[$DamageType::Impact] = 1.0; + damageScale[$DamageType::Ground] = 1.0; + damageScale[$DamageType::Explosion] = 1.0; + damageScale[$DamageType::Lightning] = 5.0; +}; + +//---------------------------------------------------------------------------- +// PLAYER DAMAGE PROFILES +//---------------------------------------------------------------------------- + +datablock SimDataBlock(LightPlayerDamageProfile) +{ + damageScale[$DamageType::Blaster] = 1.3; + damageScale[$DamageType::Bullet] = 1.2; + damageScale[$DamageType::ELF] = 0.75; + damageScale[$DamageType::ShockLance] = 1.0; + damageScale[$DamageType::Laser] = 1.12; + damageScale[$DamageType::ShrikeBlaster] = 1.0; + damageScale[$DamageType::BellyTurret] = 1.0; + damageScale[$DamageType::AATurret] = 0.7; + damageScale[$DamageType::IndoorDepTurret] = 1.3; + damageScale[$DamageType::OutdoorDepTurret] = 1.3; + damageScale[$DamageType::SentryTurret] = 1.0; + damageScale[$DamageType::Disc] = 1.0; + damageScale[$DamageType::Grenade] = 1.2; + damageScale[$DamageType::Mine] = 1.2; + damageScale[$DamageType::Missile] = 1.0; + damageScale[$DamageType::Mortar] = 1.3; + damageScale[$DamageType::Plasma] = 1.0; + damageScale[$DamageType::BomberBombs] = 3.0; + damageScale[$DamageType::TankChaingun] = 1.0; + damageScale[$DamageType::TankMortar] = 1.0; + damageScale[$DamageType::MissileTurret] = 1.0; + damageScale[$DamageType::MortarTurret] = 1.3; + damageScale[$DamageType::PlasmaTurret] = 1.0; + damageScale[$DamageType::SatchelCharge] = 3.0; + damageScale[$DamageType::Default] = 1.0; + damageScale[$DamageType::Impact] = 1.0; + damageScale[$DamageType::Ground] = 1.0; + damageScale[$DamageType::Explosion] = 1.2; + damageScale[$DamageType::Lightning] = 1.0; +}; + +datablock SimDataBlock(MediumPlayerDamageProfile) +{ + damageScale[$DamageType::Blaster] = 1.0; + damageScale[$DamageType::Bullet] = 1.0; + damageScale[$DamageType::ELF] = 0.75; + damageScale[$DamageType::ShockLance] = 1.0; + damageScale[$DamageType::Laser] = 1.2; + damageScale[$DamageType::ShrikeBlaster] = 1.0; + damageScale[$DamageType::BellyTurret] = 1.0; + damageScale[$DamageType::AATurret] = 0.7; + damageScale[$DamageType::IndoorDepTurret] = 1.0; + damageScale[$DamageType::OutdoorDepTurret] = 1.0; + damageScale[$DamageType::SentryTurret] = 1.0; + damageScale[$DamageType::Disc] = 1.0; + damageScale[$DamageType::Grenade] = 1.0; + damageScale[$DamageType::Mine] = 1.0; + damageScale[$DamageType::Missile] = 1.0; + damageScale[$DamageType::Mortar] = 1.0; + damageScale[$DamageType::Plasma] = 0.6; + damageScale[$DamageType::BomberBombs] = 3.0; + damageScale[$DamageType::TankChaingun] = 1.0; + damageScale[$DamageType::TankMortar] = 1.0; + damageScale[$DamageType::MissileTurret] = 1.0; + damageScale[$DamageType::MortarTurret] = 1.0; + damageScale[$DamageType::PlasmaTurret] = 1.0; + damageScale[$DamageType::SatchelCharge] = 3.0; + damageScale[$DamageType::Default] = 1.0; + damageScale[$DamageType::Impact] = 1.0; + damageScale[$DamageType::Ground] = 1.0; + damageScale[$DamageType::Explosion] = 1.0; + damageScale[$DamageType::Lightning] = 1.2; +}; + +datablock SimDataBlock(HeavyPlayerDamageProfile) +{ + damageScale[$DamageType::Blaster] = 0.7; + damageScale[$DamageType::Bullet] = 0.6; + damageScale[$DamageType::ELF] = 0.75; + damageScale[$DamageType::ShockLance] = 1.0; + damageScale[$DamageType::Laser] = 1.2; + damageScale[$DamageType::ShrikeBlaster] = 1.0; + damageScale[$DamageType::BellyTurret] = 1.0; + damageScale[$DamageType::AATurret] = 0.7; + damageScale[$DamageType::IndoorDepTurret] = 0.7; + damageScale[$DamageType::OutdoorDepTurret] = 0.7; + damageScale[$DamageType::SentryTurret] = 1.0; + damageScale[$DamageType::Disc] = 0.6; + damageScale[$DamageType::Grenade] = 0.8; + damageScale[$DamageType::Mine] = 0.8; + damageScale[$DamageType::Missile] = 0.6; + damageScale[$DamageType::Mortar] = 0.7; + damageScale[$DamageType::Plasma] = 0.4; + damageScale[$DamageType::BomberBombs] = 3.0; + damageScale[$DamageType::TankChaingun] = 1.0; + damageScale[$DamageType::TankMortar] = 0.7; + damageScale[$DamageType::MissileTurret] = 1.0; + damageScale[$DamageType::MortarTurret] = 1.0; + damageScale[$DamageType::PlasmaTurret] = 1.0; + damageScale[$DamageType::SatchelCharge] = 3.0; + damageScale[$DamageType::Default] = 1.0; + damageScale[$DamageType::Impact] = 1.0; + damageScale[$DamageType::Ground] = 1.0; + damageScale[$DamageType::Explosion] = 0.6; + damageScale[$DamageType::Lightning] = 1.4; +}; diff --git a/base/scripts/deathMessages.cs b/base/scripts/deathMessages.cs new file mode 100644 index 0000000..1ed3e5d --- /dev/null +++ b/base/scripts/deathMessages.cs @@ -0,0 +1,366 @@ + + +///////////////////////////////////////////////////////////////////////////////////////////////// +// %1 = Victim's name // +// %2 = Victim's gender (value will be either "him" or "her") // +// %3 = Victim's possessive gender (value will be either "his" or "her") // +// %4 = Killer's name // +// %5 = Killer's gender (value will be either "him" or "her") // +// %6 = Killer's possessive gender (value will be either "his" or "her") // +// %7 = implement that killed the victim (value is the object number of the bullet, disc, etc) // +///////////////////////////////////////////////////////////////////////////////////////////////// + +$DeathMessageCampingCount = 1; +$DeathMessageCamping[0] = '\c0%1 was killed for camping near the Nexus.'; + + //Out of Bounds deaths +$DeathMessageOOBCount = 1; +$DeathMessageOOB[0] = '\c0%1 was killed for loitering outside the mission area.'; + +$DeathMessageLavaCount = 4; +$DeathMessageLava[0] = '\c0%1\'s last thought before falling into the lava : \'Oops\'.'; +$DeathMessageLava[1] = '\c0%1 makes the supreme sacrifice to the lava gods.'; +$DeathMessageLava[2] = '\c0%1 looks surprised by the lava - but only briefly.'; +$DeathMessageLava[3] = '\c0%1 wimps out by jumping into the lava and trying to make it look like an accident.'; + +$DeathMessageLightningCount = 3; +$DeathMessageLightning[0] = '\c0%1 was killed by lightning!'; +$DeathMessageLightning[1] = '\c0%1 caught a lightning bolt!'; +$DeathMessageLightning[2] = '\c0%1 stuck %3 finger in Mother Nature\'s light socket.'; + +//these used when a player presses ctrl-k +$DeathMessageSuicideCount = 5; +$DeathMessageSuicide[0] = '\c0%1 blows %3 own head off!'; +$DeathMessageSuicide[1] = '\c0%1 ends it all. Cue violin music.'; +$DeathMessageSuicide[2] = '\c0%1 kills %2self.'; +$DeathMessageSuicide[3] = '\c0%1 goes for the quick and dirty respawn.'; +$DeathMessageSuicide[4] = '\c0%1 self-destructs in a fit of ennui.'; + +$DeathMessageVehPadCount = 1; +$DeathMessageVehPad[0] = '\c0%1 got caught in a vehicle\'s spawn field.'; + +//these used when a player kills himself (other than by using ctrl - k) +$DeathMessageSelfKillCount = 5; +$DeathMessageSelfKill[$DamageType::Blaster, 0] = '\c0%1 kills %2self with a blaster.'; +$DeathMessageSelfKill[$DamageType::Blaster, 1] = '\c0%1 makes a note to watch out for blaster ricochets.'; +$DeathMessageSelfKill[$DamageType::Blaster, 2] = '\c0%1\'s blaster kills its hapless owner.'; +$DeathMessageSelfKill[$DamageType::Blaster, 3] = '\c0%1 deftly guns %2self down with %3 own blaster.'; +$DeathMessageSelfKill[$DamageType::Blaster, 4] = '\c0%1 has a fatal encounter with %3 own blaster.'; + +$DeathMessageSelfKill[$DamageType::Plasma, 0] = '\c0%1 kills %2self with plasma.'; +$DeathMessageSelfKill[$DamageType::Plasma, 1] = '\c0%1 turns %2self into plasma-charred briquettes.'; +$DeathMessageSelfKill[$DamageType::Plasma, 2] = '\c0%1 swallows a white-hot mouthful of %3 own plasma.'; +$DeathMessageSelfKill[$DamageType::Plasma, 3] = '\c0%1 immolates %2self.'; +$DeathMessageSelfKill[$DamageType::Plasma, 4] = '\c0%1 experiences the joy of cooking %2self.'; + +$DeathMessageSelfKill[$DamageType::Disc, 0] = '\c0%1 kills %2self with a disc.'; +$DeathMessageSelfKill[$DamageType::Disc, 1] = '\c0%1 catches %3 own spinfusor disc.'; +$DeathMessageSelfKill[$DamageType::Disc, 2] = '\c0%1 heroically falls on %3 own disc.'; +$DeathMessageSelfKill[$DamageType::Disc, 3] = '\c0%1 helpfully jumps into %3 own disc\'s explosion.'; +$DeathMessageSelfKill[$DamageType::Disc, 4] = '\c0%1 plays Russian roulette with %3 spinfusor.'; + +$DeathMessageSelfKill[$DamageType::Grenade, 0] = '\c0%1 destroys %2self with a grenade!'; //applies to hand grenades *and* grenade launcher grenades +$DeathMessageSelfKill[$DamageType::Grenade, 1] = '\c0%1 took a bad bounce from %3 own grenade!'; +$DeathMessageSelfKill[$DamageType::Grenade, 2] = '\c0%1 pulled the pin a shade early.'; +$DeathMessageSelfKill[$DamageType::Grenade, 3] = '\c0%1\'s own grenade turns on %2.'; +$DeathMessageSelfKill[$DamageType::Grenade, 4] = '\c0%1 blows %2self up real good.'; + +$DeathMessageSelfKill[$DamageType::Mortar, 0] = '\c0%1 kills %2self with a mortar!'; +$DeathMessageSelfKill[$DamageType::Mortar, 1] = '\c0%1 hugs %3 own big green boomie.'; +$DeathMessageSelfKill[$DamageType::Mortar, 2] = '\c0%1 mortars %2self all over the map.'; +$DeathMessageSelfKill[$DamageType::Mortar, 3] = '\c0%1 experiences %3 mortar\'s payload up close.'; +$DeathMessageSelfKill[$DamageType::Mortar, 4] = '\c0%1 suffered the wrath of %3 own mortar.'; + +$DeathMessageSelfKill[$DamageType::Missile, 0] = '\c0%1 kills %2self with a missile!'; +$DeathMessageSelfKill[$DamageType::Missile, 1] = '\c0%1 runs a missile up %3 own tailpipe.'; +$DeathMessageSelfKill[$DamageType::Missile, 2] = '\c0%1 tests the missile\'s shaped charge on %2self.'; +$DeathMessageSelfKill[$DamageType::Missile, 3] = '\c0%1 achieved missile lock on %2self.'; +$DeathMessageSelfKill[$DamageType::Missile, 4] = '\c0%1 gracefully smoked %2self with a missile!'; + +$DeathMessageSelfKill[$DamageType::Mine, 0] = '\c0%1 kills %2self with a mine!'; +$DeathMessageSelfKill[$DamageType::Mine, 1] = '\c0%1\'s mine violently reminds %2 of its existence.'; +$DeathMessageSelfKill[$DamageType::Mine, 2] = '\c0%1 plants a decisive foot on %3 own mine!'; +$DeathMessageSelfKill[$DamageType::Mine, 3] = '\c0%1 fatally trips on %3 own mine!'; +$DeathMessageSelfKill[$DamageType::Mine, 4] = '\c0%1 makes a note not to run over %3 own mines.'; + +$DeathMessageSelfKill[$DamageType::SatchelCharge, 0] = '\c0%1 goes out with a bang!'; //applies to most explosion types +$DeathMessageSelfKill[$DamageType::SatchelCharge, 1] = '\c0%1 fall down...go boom.'; +$DeathMessageSelfKill[$DamageType::SatchelCharge, 2] = '\c0%1 explodes in that fatal kind of way.'; +$DeathMessageSelfKill[$DamageType::SatchelCharge, 3] = '\c0%1 experiences explosive decompression!'; +$DeathMessageSelfKill[$DamageType::SatchelCharge, 4] = '\c0%1 splashes all over the map.'; + +$DeathMessageSelfKill[$DamageType::Ground, 0] = '\c0%1 lands too hard.'; +$DeathMessageSelfKill[$DamageType::Ground, 1] = '\c0%1 finds gravity unforgiving.'; +$DeathMessageSelfKill[$DamageType::Ground, 2] = '\c0%1 craters on impact.'; +$DeathMessageSelfKill[$DamageType::Ground, 3] = '\c0%1 pancakes upon landing.'; +$DeathMessageSelfKill[$DamageType::Ground, 4] = '\c0%1 loses a game of chicken with the ground.'; + + +//used when a player is killed by a teammate +$DeathMessageTeamKillCount = 1; +$DeathMessageTeamKill[$DamageType::Blaster, 0] = '\c0%4 TEAMKILLED %1 with a blaster!'; +$DeathMessageTeamKill[$DamageType::Plasma, 0] = '\c0%4 TEAMKILLED %1 with a plasma rifle!'; +$DeathMessageTeamKill[$DamageType::Bullet, 0] = '\c0%4 TEAMKILLED %1 with a chaingun!'; +$DeathMessageTeamKill[$DamageType::Disc, 0] = '\c0%4 TEAMKILLED %1 with a spinfusor!'; +$DeathMessageTeamKill[$DamageType::Grenade, 0] = '\c0%4 TEAMKILLED %1 with a grenade!'; +$DeathMessageTeamKill[$DamageType::Laser, 0] = '\c0%4 TEAMKILLED %1 with a laser rifle!'; +$DeathMessageTeamKill[$DamageType::Elf, 0] = '\c0%4 TEAMKILLED %1 with an ELF projector!'; +$DeathMessageTeamKill[$DamageType::Mortar, 0] = '\c0%4 TEAMKILLED %1 with a mortar!'; +$DeathMessageTeamKill[$DamageType::Missile, 0] = '\c0%4 TEAMKILLED %1 with a missile!'; +$DeathMessageTeamKill[$DamageType::Shocklance, 0] = '\c0%4 TEAMKILLED %1 with a shocklance!'; +$DeathMessageTeamKill[$DamageType::Mine, 0] = '\c0%4 TEAMKILLED %1 with a mine!'; +$DeathMessageTeamKill[$DamageType::SatchelCharge, 0] = '\c0%4 blew up TEAMMATE %1!'; +$DeathMessageTeamKill[$DamageType::Impact, 0] = '\c0%4 runs down TEAMMATE %1!'; + + + +//these used when a player is killed by an enemy +$DeathMessageCount = 5; +$DeathMessage[$DamageType::Blaster, 0] = '\c0%4 kills %1 with a blaster.'; +$DeathMessage[$DamageType::Blaster, 1] = '\c0%4 pings %1 to death.'; +$DeathMessage[$DamageType::Blaster, 2] = '\c0%1 gets a pointer in blaster use from %4.'; +$DeathMessage[$DamageType::Blaster, 3] = '\c0%4 fatally embarrasses %1 with %6 pea shooter.'; +$DeathMessage[$DamageType::Blaster, 4] = '\c0%4 unleashes a terminal blaster barrage into %1.'; + +$DeathMessage[$DamageType::Plasma, 0] = '\c0%4 roasts %1 with the plasma rifle.'; +$DeathMessage[$DamageType::Plasma, 1] = '\c0%4 gooses %1 with an extra-friendly burst of plasma.'; +$DeathMessage[$DamageType::Plasma, 2] = '\c0%4 entices %1 to try a faceful of plasma.'; +$DeathMessage[$DamageType::Plasma, 3] = '\c0%4 introduces %1 to the plasma immolation dance.'; +$DeathMessage[$DamageType::Plasma, 4] = '\c0%4 slaps The Hot Kiss of Death on %1.'; + +$DeathMessage[$DamageType::Bullet, 0] = '\c0%4 rips %1 up with the chaingun.'; +$DeathMessage[$DamageType::Bullet, 1] = '\c0%4 happily chews %1 into pieces with %6 chaingun.'; +$DeathMessage[$DamageType::Bullet, 2] = '\c0%4 administers a dose of Vitamin Lead to %1.'; +$DeathMessage[$DamageType::Bullet, 3] = '\c0%1 suffers a serious hosing from %4\'s chaingun.'; +$DeathMessage[$DamageType::Bullet, 4] = '\c0%4 bestows the blessings of %6 chaingun on %1.'; + +$DeathMessage[$DamageType::Disc, 0] = '\c0%4 demolishes %1 with the spinfusor.'; +$DeathMessage[$DamageType::Disc, 1] = '\c0%4 serves %1 a blue plate special.'; +$DeathMessage[$DamageType::Disc, 2] = '\c0%4 shares a little blue friend with %1.'; +$DeathMessage[$DamageType::Disc, 3] = '\c0%4 puts a little spin into %1.'; +$DeathMessage[$DamageType::Disc, 4] = '\c0%1 becomes one of %4\'s greatest hits.'; + +$DeathMessage[$DamageType::Grenade, 0] = '\c0%4 eliminates %1 with a grenade.'; //applies to hand grenades *and* grenade launcher grenades +$DeathMessage[$DamageType::Grenade, 1] = '\c0%4 blows up %1 real good!'; +$DeathMessage[$DamageType::Grenade, 2] = '\c0%1 gets annihilated by %4\'s grenade.'; +$DeathMessage[$DamageType::Grenade, 3] = '\c0%1 receives a kaboom lesson from %4.'; +$DeathMessage[$DamageType::Grenade, 4] = '\c0%4 turns %1 into grenade salad.'; + +$DeathMessage[$DamageType::Laser, 0] = '\c0%1 becomes %4\'s latest pincushion.'; +$DeathMessage[$DamageType::Laser, 1] = '\c0%4 picks off %1 with %6 laser rifle.'; +$DeathMessage[$DamageType::Laser, 2] = '\c0%4 uses %1 as the targeting dummy in a sniping demonstration.'; +$DeathMessage[$DamageType::Laser, 3] = '\c0%4 pokes a shiny new hole in %1 with %6 laser rifle.'; +$DeathMessage[$DamageType::Laser, 4] = '\c0%4 caresses %1 with a couple hundred megajoules of laser.'; + +$DeathMessage[$DamageType::Elf, 0] = '\c0%4 fries %1 with the ELF projector.'; +$DeathMessage[$DamageType::Elf, 1] = '\c0%4 bug zaps %1 with %6 ELF.'; +$DeathMessage[$DamageType::Elf, 2] = '\c0%1 learns the shocking truth about %4\'s ELF skills.'; +$DeathMessage[$DamageType::Elf, 3] = '\c0%4 electrocutes %1 without a sponge.'; +$DeathMessage[$DamageType::Elf, 4] = '\c0%4\'s ELF projector leaves %1 a crispy critter.'; + +$DeathMessage[$DamageType::Mortar, 0] = '\c0%4 obliterates %1 with the mortar.'; +$DeathMessage[$DamageType::Mortar, 1] = '\c0%4 drops a mortar round right in %1\'s lap.'; +$DeathMessage[$DamageType::Mortar, 2] = '\c0%4 delivers a mortar payload straight to %1.'; +$DeathMessage[$DamageType::Mortar, 3] = '\c0%4 offers a little "heavy love" to %1.'; +$DeathMessage[$DamageType::Mortar, 4] = '\c0%1 stumbles into %4\'s mortar reticle.'; + +$DeathMessage[$DamageType::Missile, 0] = '\c0%4 intercepts %1 with a missile.'; +$DeathMessage[$DamageType::Missile, 1] = '\c0%4 watches %6 missile touch %1 and go boom.'; +$DeathMessage[$DamageType::Missile, 2] = '\c0%4 got sweet tone on %1.'; +$DeathMessage[$DamageType::Missile, 3] = '\c0By now, %1 has realized %4\'s missile killed %2.'; +$DeathMessage[$DamageType::Missile, 4] = '\c0%4\'s missile rains little pieces of %1 all over the ground.'; + +$DeathMessage[$DamageType::Shocklance, 0] = '\c0%4 reaps a harvest of %1 with the shocklance.'; +$DeathMessage[$DamageType::Shocklance, 1] = '\c0%4 feeds %1 the business end of %6 shocklance.'; +$DeathMessage[$DamageType::Shocklance, 2] = '\c0%4 stops %1 dead with the shocklance.'; +$DeathMessage[$DamageType::Shocklance, 3] = '\c0%4 eliminates %1 in close combat.'; +$DeathMessage[$DamageType::Shocklance, 4] = '\c0%4 ruins %1\'s day with one zap of a shocklance.'; + +$DeathMessage[$DamageType::Mine, 0] = '\c0%4 kills %1 with a mine.'; +$DeathMessage[$DamageType::Mine, 1] = '\c0%1 doesn\'t see %4\'s mine in time.'; +$DeathMessage[$DamageType::Mine, 2] = '\c0%4 gets a sapper kill on %1.'; +$DeathMessage[$DamageType::Mine, 3] = '\c0%1 puts his foot on %4\'s mine.'; +$DeathMessage[$DamageType::Mine, 4] = '\c0One small step for %1, one giant mine kill for %4.'; + +$DeathMessage[$DamageType::SatchelCharge, 0] = '\c0%4 buys %1 a ticket to the moon.'; //satchel charge only +$DeathMessage[$DamageType::SatchelCharge, 1] = '\c0%4 blows %1 into low orbit.'; +$DeathMessage[$DamageType::SatchelCharge, 2] = '\c0%4 makes %1 a hugely explosive offer.'; +$DeathMessage[$DamageType::SatchelCharge, 3] = '\c0%4 turns %1 into a cloud of satchel-vaporized armor.'; +$DeathMessage[$DamageType::SatchelCharge, 4] = '\c0%4\'s satchel charge leaves %1 nothin\' but smokin\' boots.'; + +$DeathMessageHeadshotCount = 3; +$DeathMessageHeadshot[$DamageType::Laser, 0] = '\c0%4 drills right through %1\'s braincase with %6 laser.'; +$DeathMessageHeadshot[$DamageType::Laser, 1] = '\c0%4 pops %1\'s head like a cheap balloon.'; +$DeathMessageHeadshot[$DamageType::Laser, 2] = '\c0%1 loses %3 head over %4\'s laser skill.'; + + +//These used when a player is run over by a vehicle +$DeathMessageVehicleCount = 5; +$DeathMessageVehicle[0] = '\c0%4 runs down %1.'; +$DeathMessageVehicle[1] = '\c0%1 acquires that run-down feeling from %4.'; +$DeathMessageVehicle[2] = '\c0%4 transforms %1 into tribal roadkill.'; +$DeathMessageVehicle[3] = '\c0%1 makes a painfully close examination of %4\'s front bumper.'; +$DeathMessageVehicle[4] = '\c0%1\'s messy death leaves a mark on %4\'s vehicle finish.'; + +$DeathMessageVehicleUnmannedCount = 3; +$DeathMessageVehicleUnmanned[0] = '\c0%1 gets in the way of a runaway vehicle.'; +$DeathMessageVehicleUnmanned[1] = '\c0An unmanned vehicle kills the pathetic %1.'; +$DeathMessageVehicleUnmanned[2] = '\c0%1 is struck down by an empty vehicle.'; + +//These used when a player is killed by a nearby equipment explosion +$DeathMessageExplosionCount = 3; +$DeathMessageExplosion[0] = '\c0%1 was killed by exploding equipment!'; +$DeathMessageExplosion[1] = '\c0%1 stood a little too close to the action!'; +$DeathMessageExplosion[2] = '\c0%1 learns how to be collateral damage.'; + +//These used when an automated turret kills an enemy player +$DeathMessageTurretKillCount = 3; +$DeathMessageTurretKill[$DamageType::PlasmaTurret, 0] = '\c0%1 is killed by a plasma turret.'; +$DeathMessageTurretKill[$DamageType::PlasmaTurret, 1] = '\c0%1\'s body now marks the location of a plasma turret.'; +$DeathMessageTurretKill[$DamageType::PlasmaTurret, 2] = '\c0%1 is fried by a plasma turret.'; + +$DeathMessageTurretKill[$DamageType::AATurret, 0] = '\c0%1 is killed by an AA turret.'; +$DeathMessageTurretKill[$DamageType::AATurret, 1] = '\c0%1 is shot down by an AA turret.'; +$DeathMessageTurretKill[$DamageType::AATurret, 2] = '\c0%1 takes fatal flak from an AA turret.'; + +$DeathMessageTurretKill[$DamageType::ElfTurret, 0] = '\c0%1 is killed by an ELF turret.'; +$DeathMessageTurretKill[$DamageType::ElfTurret, 1] = '\c0%1 is zapped by an ELF turret.'; +$DeathMessageTurretKill[$DamageType::ElfTurret, 2] = '\c0%1 is short-circuited by an ELF turret.'; + +$DeathMessageTurretKill[$DamageType::MortarTurret, 0] = '\c0%1 is killed by a mortar turret.'; +$DeathMessageTurretKill[$DamageType::MortarTurret, 1] = '\c0%1 enjoys a mortar turret\'s attention.'; +$DeathMessageTurretKill[$DamageType::MortarTurret, 2] = '\c0%1 is blown to kibble by a mortar turret.'; + +$DeathMessageTurretKill[$DamageType::MissileTurret, 0] = '\c0%1 is killed by a missile turret.'; +$DeathMessageTurretKill[$DamageType::MissileTurret, 1] = '\c0%1 is shot down by a missile turret.'; +$DeathMessageTurretKill[$DamageType::MissileTurret, 2] = '\c0%1 is blown away by a missile turret.'; + +$DeathMessageTurretKill[$DamageType::IndoorDepTurret, 0] = '\c0%1 is killed by a clamp turret.'; +$DeathMessageTurretKill[$DamageType::IndoorDepTurret, 1] = '\c0%1 gets burned by a clamp turret.'; +$DeathMessageTurretKill[$DamageType::IndoorDepTurret, 2] = '\c0A clamp turret eliminates %1.'; + +$DeathMessageTurretKill[$DamageType::OutdoorDepTurret, 0] = '\c0A spike turret neatly drills %1.'; +$DeathMessageTurretKill[$DamageType::OutdoorDepTurret, 1] = '\c0%1 gets taken out by a spike turret.'; +$DeathMessageTurretKill[$DamageType::OutdoorDepTurret, 2] = '\c0%1 dies under a spike turret\'s love.'; + +$DeathMessageTurretKill[$DamageType::SentryTurret, 0] = '\c0%1 didn\'t see that Sentry turret, but it saw %2...'; +$DeathMessageTurretKill[$DamageType::SentryTurret, 1] = '\c0%1 needs to watch for Sentry turrets.'; +$DeathMessageTurretKill[$DamageType::SentryTurret, 2] = '\c0%1 now understands how Sentry turrets work.'; + + +//used when a player is killed by a teammate controlling a turret +$DeathMessageCTurretTeamKillCount = 1; +$DeathMessageCTurretTeamKill[$DamageType::PlasmaTurret, 0] = '\c0%4 TEAMKILLED %1 with a plasma turret!'; + +$DeathMessageCTurretTeamKill[$DamageType::AATurret, 0] = '\c0%4 TEAMKILLED %1 with an AA turret!'; + +$DeathMessageCTurretTeamKill[$DamageType::ELFTurret, 0] = '\c0%4 TEAMKILLED %1 with an ELF turret!'; + +$DeathMessageCTurretTeamKill[$DamageType::MortarTurret, 0] = '\c0%4 TEAMKILLED %1 with a mortar turret!'; + +$DeathMessageCTurretTeamKill[$DamageType::MissileTurret, 0] = '\c0%4 TEAMKILLED %1 with a missile turret!'; + +$DeathMessageCTurretTeamKill[$DamageType::IndoorDepTurret, 0] = '\c0%4 TEAMKILLED %1 with a clamp turret!'; + +$DeathMessageCTurretTeamKill[$DamageType::OutdoorDepTurret, 0] = '\c0%4 TEAMKILLED %1 with a spike turret!'; + +$DeathMessageCTurretTeamKill[$DamageType::SentryTurret, 0] = '\c0%4 TEAMKILLED %1 with a sentry turret!'; + +$DeathMessageCTurretTeamKill[$DamageType::BomberBombs, 0] = '\c0%4 TEAMKILLED %1 in a bombastic explosion of raining death.'; + +$DeathMessageCTurretTeamKill[$DamageType::BellyTurret, 0] = '\c0%4 TEAMKILLED %1 by annihilating him from a belly turret.'; + +$DeathMessageCTurretTeamKill[$DamageType::TankChainGun, 0] = '\c0%4 TEAMKILLED %1 with his tank\'s chaingun.'; + +$DeathMessageCTurretTeamKill[$DamageType::TankMortar, 0] = '\c0%4 TEAMKILLED %1 by lobbing the BIG green death from a tank.'; + +$DeathMessageCTurretTeamKill[$DamageType::ShrikeBlaster, 0] = '\c0%4 TEAMKILLED %1 by strafing from a Shrike.'; + +$DeathMessageCTurretTeamKill[$DamageType::MPBMissile, 0] = '\c0%4 TEAMKILLED %1 when the MPB locked onto him.'; + + + +//used when a player is killed by an uncontrolled, friendly turret +$DeathMessageCTurretAccdtlKillCount = 1; +$DeathMessageCTurretAccdtlKill[$DamageType::PlasmaTurret, 0] = '\c0%1 got in the way of a plasma turret!'; + +$DeathMessageCTurretAccdtlKill[$DamageType::AATurret, 0] = '\c0%1 got in the way of an AA turret!'; + +$DeathMessageCTurretAccdtlKill[$DamageType::ELFTurret, 0] = '\c0%1 got in the way of an ELF turret!'; + +$DeathMessageCTurretAccdtlKill[$DamageType::MortarTurret, 0] = '\c0%1 got in the way of a mortar turret!'; + +$DeathMessageCTurretAccdtlKill[$DamageType::MissileTurret, 0] = '\c0%1 got in the way of a missile turret!'; + +$DeathMessageCTurretAccdtlKill[$DamageType::IndoorDepTurret, 0] = '\c0%1 got in the way of a clamp turret!'; + +$DeathMessageCTurretAccdtlKill[$DamageType::OutdoorDepTurret, 0] = '\c0%1 got in the way of a spike turret!'; + +$DeathMessageCTurretAccdtlKill[$DamageType::SentryTurret, 0] = '\c0%1 got in the way of a Sentry turret!'; + + +//these messages for owned or controlled turrets +$DeathMessageCTurretKillCount = 3; +$DeathMessageCTurretKill[$DamageType::PlasmaTurret, 0] = '\c0%4 torches %1 with a plasma turret!'; +$DeathMessageCTurretKill[$DamageType::PlasmaTurret, 1] = '\c0%4 fries %1 with a plasma turret!'; +$DeathMessageCTurretKill[$DamageType::PlasmaTurret, 2] = '\c0%4 lights up %1 with a plasma turret!'; + +$DeathMessageCTurretKill[$DamageType::AATurret, 0] = '\c0%4 shoots down %1 with an AA turret.'; +$DeathMessageCTurretKill[$DamageType::AATurret, 1] = '\c0%1 gets shot down by %1\'s AA turret.'; +$DeathMessageCTurretKill[$DamageType::AATurret, 2] = '\c0%4 takes out %1 with an AA turret.'; + +$DeathMessageCTurretKill[$DamageType::ElfTurret, 0] = '\c0%1 gets zapped by ELF gunner %4.'; +$DeathMessageCTurretKill[$DamageType::ElfTurret, 1] = '\c0%1 gets barbecued by ELF gunner %4.'; +$DeathMessageCTurretKill[$DamageType::ElfTurret, 2] = '\c0%1 gets shocked by ELF gunner %4.'; + +$DeathMessageCTurretKill[$DamageType::MortarTurret, 0] = '\c0%1 is annihilated by %4\'s mortar turret.'; +$DeathMessageCTurretKill[$DamageType::MortarTurret, 1] = '\c0%1 is blown away by %4\'s mortar turret.'; +$DeathMessageCTurretKill[$DamageType::MortarTurret, 2] = '\c0%1 is pureed by %4\'s mortar turret.'; + +$DeathMessageCTurretKill[$DamageType::MissileTurret, 0] = '\c0%4 shows %1 a new world of pain with a missile turret.'; +$DeathMessageCTurretKill[$DamageType::MissileTurret, 1] = '\c0%4 pops %1 with a missile turret.'; +$DeathMessageCTurretKill[$DamageType::MissileTurret, 2] = '\c0%4\'s missile turret lights up %1\'s, uh, ex-life.'; + +$DeathMessageCTurretKill[$DamageType::IndoorDepTurret, 0] = '\c0%1 is chewed up and spat out by %4\'s clamp turret.'; +$DeathMessageCTurretKill[$DamageType::IndoorDepTurret, 1] = '\c0%1 is knocked out by %4\'s clamp turret.'; +$DeathMessageCTurretKill[$DamageType::IndoorDepTurret, 2] = '\c0%4\'s clamp turret drills %1 nicely.'; + +$DeathMessageCTurretKill[$DamageType::OutdoorDepTurret, 0] = '\c0%1 is chewed up by %4\'s spike turret.'; +$DeathMessageCTurretKill[$DamageType::OutdoorDepTurret, 1] = '\c0%1 feels the burn from %4\'s spike turret.'; +$DeathMessageCTurretKill[$DamageType::OutdoorDepTurret, 2] = '\c0%1 is nailed by %4\'s spike turret.'; + +$DeathMessageCTurretKill[$DamageType::SentryTurret, 0] = '\c0%4 caught %1 by surprise with a turret.'; +$DeathMessageCTurretKill[$DamageType::SentryTurret, 1] = '\c0%4\'s turret took out %1.'; +$DeathMessageCTurretKill[$DamageType::SentryTurret, 2] = '\c0%4 blasted %1 with a turret.'; + +$DeathMessageCTurretKill[$DamageType::BomberBombs, 0] = '\c0%1 catches %4\'s bomb in both teeth.'; +$DeathMessageCTurretKill[$DamageType::BomberBombs, 1] = '\c0%4 leaves %1 a smoking bomb crater.'; +$DeathMessageCTurretKill[$DamageType::BomberBombs, 2] = '\c0%4 bombs %1 back to the 20th century.'; + +$DeathMessageCTurretKill[$DamageType::BellyTurret, 0] = '\c0%1 eats a big helping of %4\'s belly turret bolt.'; +$DeathMessageCTurretKill[$DamageType::BellyTurret, 1] = '\c0%4 plants a belly turret bolt in %1\'s belly.'; +$DeathMessageCTurretKill[$DamageType::BellyTurret, 2] = '\c0%1 fails to evade %4\'s deft bomber strafing.'; + +$DeathMessageCTurretKill[$DamageType::TankChainGun, 0] = '\c0%1 enjoys the rich, metallic taste of %4\'s tank slug.'; +$DeathMessageCTurretKill[$DamageType::TankChainGun, 1] = '\c0%4\'s tank chaingun plays sweet music all over %1.'; +$DeathMessageCTurretKill[$DamageType::TankChainGun, 2] = '\c0%1 receives a stellar exit wound from %4\'s tank slug.'; + +$DeathMessageCTurretKill[$DamageType::TankMortars, 0] = '\c0Whoops! %1 + %4\'s tank mortar = Dead %1.'; +$DeathMessageCTurretKill[$DamageType::TankMortars, 1] = '\c0%1 learns the happy explosion dance from %4\'s tank mortar.'; +$DeathMessageCTurretKill[$DamageType::TankMortars, 2] = '\c0%4\'s tank mortar has a blast with %1.'; + +$DeathMessageCTurretKill[$DamageType::ShrikeBlaster, 0] = '\c0%1 lunches on a Shrike blaster sandwich, courtesy of %4.'; +$DeathMessageCTurretKill[$DamageType::ShrikeBlaster, 1] = '\c0%4\'s Shrike blaster catches %1 with %3 pants down.'; +$DeathMessageCTurretKill[$DamageType::ShrikeBlaster, 2] = '\c0%1 gets drilled big-time by %4\'s Shrike blaster.'; + +$DeathMessageCTurretKill[$DamageType::MPBMissile, 0] = '\c0%1 intersects nicely with %4\'s MPB Missile.'; +$DeathMessageCTurretKill[$DamageType::MPBMissile, 1] = '\c0%4\'s MPB Missile makes armored chowder out of %1.'; +$DeathMessageCTurretKill[$DamageType::MPBMissile, 2] = '\c0%1 has a brief, explosive fling with %4\'s MPB Missile.'; + +$DeathMessageTurretSelfKillCount = 3; +$DeathMessageTurretSelfKill[0] = '\c0%1 somehow kills %2self with a turret.'; +$DeathMessageTurretSelfKill[1] = '\c0%1 apparently didn\'t know the turret was loaded.'; +$DeathMessageTurretSelfKill[2] = '\c0%1 helps his team by killing himself with a turret.'; + + + diff --git a/base/scripts/debuggerGui.cs b/base/scripts/debuggerGui.cs new file mode 100644 index 0000000..3eade80 --- /dev/null +++ b/base/scripts/debuggerGui.cs @@ -0,0 +1,532 @@ + +// debugger is just a simple TCP object +if (!isObject(TCPDebugger)) + new TCPObject(TCPDebugger); + +//-------------------------------------------------------------- +// TCP function defs +//-------------------------------------------------------------- + +function DebuggerConsoleView::print(%this, %line) +{ + %row = %this.addRow(0, %line); + %this.scrollVisible(%row); +} + +function TCPDebugger::onLine(%this, %line) +{ + echo("Got line=>" @ %line); + %cmd = firstWord(%line); + %rest = restWords(%line); + + if(%cmd $= "PASS") + %this.handlePass(%rest); + else if(%cmd $= "COUT") + %this.handleLineOut(%rest); + else if(%cmd $= "FILELISTOUT") + %this.handleFileList(%rest); + else if(%cmd $= "BREAKLISTOUT") + %this.handleBreakList(%rest); + else if(%cmd $= "BREAK") + %this.handleBreak(%rest); + else if(%cmd $= "RUNNING") + %this.handleRunning(); + else if(%cmd $= "EVALOUT") + %this.handleEvalOut(%rest); + else + %this.handleError(%line); +} + +//-------------------------------------------------------------- +// handlers for messages from the server +//-------------------------------------------------------------- + +function TCPDebugger::handlePass(%this, %message) +{ + if(%message $= "WrongPass") + { + DebuggerConsoleView.print("Disconnected - wrong password."); + %this.disconnect(); + } + else if(%message $= "Connected.") + { + DebuggerConsoleView.print("Connected."); + DebuggerStatus.setValue("CONNECTED"); + %this.send("FILELIST\r\n"); + } +} + +function TCPDebugger::handleLineOut(%this, %line) +{ + DebuggerConsoleView.print(%line); +} + +function TCPDebugger::handleFileList(%this, %line) +{ + DebuggerFilePopup.clear(); + %word = 0; + while((%file = getWord(%line, %word)) !$= "") + { + %word++; + DebuggerFilePopup.add(%file, %word); + } +} + +function TCPDebugger::handleBreakList(%this, %line) +{ + %file = getWord(%line, 0); + if(%file != $DebuggerFile) + return; + %pairs = getWord(%line, 1); + %curLine = 1; + DebuggerFileView.clearBreakPositions(); + + //set the possible break positions + for(%i = 0; %i < %pairs; %i++) + { + %skip = getWord(%line, %i * 2 + 2); + %breaks = getWord(%line, %i * 2 + 3); + %curLine += %skip; + for(%j = 0; %j < %breaks; %j++) + { + DebuggerFileView.setBreakPosition(%curLine); + %curLine++; + } + } + + //now set the actual break points... + for (%i = 0; %i < DebuggerBreakPoints.rowCount(); %i++) + { + %breakText = DebuggerBreakPoints.getRowText(%i); + %breakLine = getField(%breakText, 0); + %breakFile = getField(%breakText, 1); + if (%breakFile == $DebuggerFile) + DebuggerFileView.setBreak(%breakLine); + } +} + +function TCPDebugger::handleBreak(%this, %line) +{ + DebuggerStatus.setValue("BREAK"); + + // query all the watches + for(%i = 0; %i < DebuggerWatchView.rowCount(); %i++) + { + %id = DebuggerWatchView.getRowId(%i); + %row = DebuggerWatchView.getRowTextById(%id); + %expr = getField(%row, 0); + %this.send("EVAL " @ %id @ " 0 " @ %expr @ "\r\n"); + } + + // update the call stack window + DebuggerCallStack.clear(); + + %file = getWord(%line, 0); + %lineNumber = getWord(%line, 1); + %funcName = getWord(%line, 2); + + DbgOpenFile(%file, %lineNumber, true); + + %nextWord = 3; + %rowId = 0; + %id = 0; + while(1) + { + DebuggerCallStack.setRowById(%id, %file @ "\t" @ %lineNumber @ "\t" @ %funcName); + %id++; + %file = getWord(%line, %nextWord); + %lineNumber = getWord(%line, %nextWord + 1); + %funcName = getWord(%line, %nextWord + 2); + %nextWord += 3; + if(%file $= "") + break; + } +} + +function TCPDebugger::handleRunning(%this) +{ + DebuggerFileView.setCurrentLine(-1, true); + DebuggerCallStack.clear(); + DebuggerStatus.setValue("RUNNING..."); +} + +function TCPDebugger::handleEvalOut(%this, %line) +{ + %id = firstWord(%line); + %value = restWords(%line); + + //see if it's the cursor watch, or from the watch window + if (%id < 0) + DebuggerCursorWatch.setText(DebuggerCursorWatch.expr SPC "=" SPC %value); + else + { + %row = DebuggerWatchView.getRowTextById(%id); + if(%row $= "") + return; + %expr = getField(%row, 0); + DebuggerWatchView.setRowById(%id, %expr @ "\t" @ %value); + } +} + +function TCPDebugger::handleError(%this, %line) +{ + DebuggerConsoleView.print("ERROR - bogus message: " @ %line); +} + +//-------------------------------------------------------------- +// handlers for connection related functions +//-------------------------------------------------------------- + +function TCPDebugger::onDNSResolve(%this) +{ + +} + +function TCPDebugger::onConnecting(%this) +{ +} + +function TCPDebugger::onConnected(%this) +{ + // send the password on connect. + // %this.send(%this.password @ "\r\n"); + // tinman - this function never get's called - instead + // send the password immediately... +} + +function TCPDebugger::onConnectFailed(%this) +{ + +} + +function TCPDebugger::onDisconnect(%this) +{ + +} + +function DebuggerFilePopup::onSelect(%this, %id, %text) +{ + DbgOpenFile(%text, 0, false); +} + +//-------------------------------------------------------------- +// Gui glue functions +//-------------------------------------------------------------- + +$DbgWatchSeq = 1; +function DbgWatchDialogAdd() +{ + %expr = WatchDialogExpression.getValue(); + if (%expr !$= "") + { + DebuggerWatchView.setRowById($DbgWatchSeq, %expr @"\t(unknown)"); + TCPDebugger.send("EVAL " @ $DbgWatchSeq @ " 0 " @ %expr @ "\r\n"); + $DbgWatchSeq++; + } + //don't forget to close the dialog + Canvas.popDialog(DebuggerWatchDlg); +} + +function DbgWatchDialogEdit() +{ + %newValue = EditWatchDialogValue.getValue(); + %id = DebuggerWatchView.getSelectedId(); + if (%id >= 0) + { + %row = DebuggerWatchView.getRowTextById(%id); + %expr = getField(%row, 0); + if (%newValue $= "") + %assignment = %expr @ " = \"\""; + else + %assignment = %expr @ " = " @ %newValue; + TCPDebugger.send("EVAL " @ %id @ " 0 " @ %assignment @ "\r\n"); + } + + //don't forget to close the dialog + Canvas.popDialog(DebuggerEditWatchDlg); +} + +function DbgSetCursorWatch(%expr) +{ + DebuggerCursorWatch.expr = %expr; + if (DebuggerCursorWatch.expr $= "") + DebuggerCursorWatch.setText(""); + else + TCPDebugger.send("EVAL -1 0 " @ DebuggerCursorWatch.expr @ "\r\n"); +} + +function DebuggerCallStack::onAction(%this) +{ + %id = %this.getSelectedId(); + if(%id == -1) + return; + %text = %this.getRowTextById(%id); + %file = getField(%text, 0); + %line = getField(%text, 1); + + DbgOpenFile(%file, %line, %id == 0); +} + +function DbgConnect() +{ + %address = DebuggerConnectAddress.getValue(); + %port = DebuggerConnectPort.getValue(); + %password = DebuggerConnectPassword.getValue(); + + if ((%address !$= "" ) && (%port !$= "" ) && (%password !$= "" )) + { + TCPDebugger.connect(%address @ ":" @ %port); + TCPDebugger.schedule(5000, send, %password @ "\r\n"); + TCPDebugger.password = %password; + } + + //don't forget to close the dialog + Canvas.popDialog(DebuggerConnectDlg); +} + +function DbgBreakConditionSet() +{ + %condition = BreakCondition.getValue(); + %passct = BreakPassCount.getValue(); + %clear = BreakClear.getValue(); + if (%condition $= "") + %condition = "true"; + if (%passct $= "") + %passct = "0"; + if (%clear $= "") + %clear = "false"; + + //set the condition + %id = DebuggerBreakPoints.getSelectedId(); + if(%id != -1) + { + %bkp = DebuggerBreakPoints.getRowTextById(%id); + + DbgSetBreakPoint(getField(%bkp, 1), getField(%bkp, 0), %clear, %passct, %condition); + } + //don't forget to close the dialog + Canvas.popDialog(DebuggerBreakConditionDlg); +} + +function DbgOpenFile(%file, %line, %selectLine) +{ + if (%file !$= "") + { + //open the file in the file view + if (DebuggerFileView.open(%file)) + { + DebuggerFileView.setCurrentLine(%line, %selectLine); + if (%file !$= $DebuggerFile) + { + TCPDebugger.send("BREAKLIST " @ %file @ "\r\n"); + $DebuggerFile = %file; + } + } + } +} + +function DbgFileViewFind() +{ + %searchString = DebuggerFindStringText.getValue(); + %result = DebuggerFileView.findString(%searchString); + + //don't forget to close the dialog + Canvas.popDialog(DebuggerFindDlg); +} + +function DbgFileBreakPoints(%file, %points) +{ + DebuggerFileView.breakPoints(%file, %points); +} + +// BRKSET:file line clear passct expr - set a breakpoint on the file,line +function DbgSetBreakPoint(%file, %line, %clear, %passct, %expr) +{ + if(!%clear) + { + if(%file == $DebuggerFile) + DebuggerFileView.setBreak(%line); + } + DebuggerBreakPoints.addBreak(%file, %line, %clear, %passct, %expr); + TCPDebugger.send("BRKSET " @ %file @ " " @ %line @ " " @ %clear @ " " @ %passct @ " " @ %expr @ "\r\n"); +} + +function DbgRemoveBreakPoint(%file, %line) +{ + if(%file == $DebuggerFile) + DebuggerFileView.removeBreak(%line); + TCPDebugger.send("BRKCLR " @ %file @ " " @ %line @ "\r\n"); + DebuggerBreakPoints.removeBreak(%file, %line); +} + +$DbgBreakId = 0; + +function DebuggerBreakPoints::addBreak(%this, %file, %line, %clear, %passct, %expr) +{ + // columns 0 = line, 1 = file, 2 = expr + %textLine = %line @ "\t" @ %file @ "\t" @ %expr @ "\t" @ %passct @ "\t" @ %clear; + %selId = %this.getSelectedId(); + %selText = %this.getRowTextById(%selId); + if(getField(%selText, 0) $= %line && getField(%selText, 1) $= %file) + { + %this.setRowById(%selId, %textLine); + } + else + { + %this.addRow($DbgBreakId, %textLine); + $DbgBreakId++; + } +} + +function DebuggerBreakPoints::removeBreak(%this, %file, %line) +{ + for(%i = 0; %i < %this.rowCount(); %i++) + { + %id = %this.getRowId(%i); + %text = %this.getRowTextById(%id); + if(getField(%text, 0) $= %line && getField(%text, 1) $= %file) + { + %this.removeRowById(%id); + return; + } + } +} + +function DbgDeleteSelectedBreak() +{ + %selectedBreak = DebuggerBreakPoints.getSelectedId(); + %rowNum = DebuggerBreakPoints.getRowNumById(%selectedWatch); + if (%rowNum >= 0) + { + %breakText = DebuggerBreakPoints.getRowText(%rowNum); + %breakLine = getField(%breakText, 0); + %breakFile = getField(%breakText, 1); + DbgRemoveBreakPoint(%breakFile, %breakLine); + } +} + +function DebuggerBreakPoints::clearBreaks(%this) +{ + while(%this.rowCount()) + { + %id = %this.getRowId(0); + %text = %this.getRowTextById(%id); + %file = getField(%text, 1); + %line = getField(%text, 0); + DbgRemoveBreakPoint(%file, %line); + } +} + +function DebuggerBreakPoints::onAction(%this) +{ + %id = %this.getSelectedId(); + if(%id == -1) + return; + %text = %this.getRowTextById(%id); + %line = getField(%text, 0); + %file = getField(%text, 1); + + DbgOpenFile(%file, %line, 0); +} + +function DebuggerFileView::onRemoveBreakPoint(%this, %line) +{ + %file = $DebuggerFile; + DbgRemoveBreakPoint(%file, %line); +} + +function DebuggerFileView::onSetBreakPoint(%this, %line) +{ + %file = $DebuggerFile; + DbgSetBreakPoint(%file, %line, 0, 0, true); +} + +function DbgConsoleEntryReturn() +{ + %msg = DbgConsoleEntry.getValue(); + if (%msg !$= "") + { + DebuggerConsoleView.print("%" @ %msg); + if (DebuggerStatus.getValue() $= "NOT CONNECTED") + DebuggerConsoleView.print("*** Not connected."); + else if (DebuggerStatus.getValue() $= "BREAK") + DebuggerConsoleView.print("*** Target is in BREAK mode."); + else + TCPDebugger.send("CEVAL " @ %msg @ "\r\n"); + + } + DbgConsoleEntry.setValue(""); +} + +function DbgConsolePrint(%status) +{ + DebuggerConsoleView.print(%status); +} + +function DbgStackAddFrame(%file, %line, %funcName) +{ + if ((%file !$= "") && (%line !$= "") && (%funcName !$= "")) + DebuggerCallStack.add(%file, %line, %funcName); +} + +function DbgStackGetFrame() +{ + return DebuggerCallStack.getFrame(); +} + +function DbgStackClear() +{ + DebuggerCallStack.clear(); +} + +function DbgSetWatch(%expr) +{ + if (%expr !$= "") + DebuggerWatchView.set(%expr); +} + +function DbgDeleteSelectedWatch() +{ + %selectedWatch = DebuggerWatchView.getSelectedId(); + %rowNum = DebuggerWatchView.getRowNumById(%selectedWatch); + DebuggerWatchView.removeRow(%rowNum); +} + +function DbgRefreshWatches() +{ + // query all the watches + for(%i = 0; %i < DebuggerWatchView.rowCount(); %i++) + { + %id = DebuggerWatchView.getRowId(%i); + %row = DebuggerWatchView.getRowTextById(%id); + %expr = getField(%row, 0); + TCPDebugger.send("EVAL " @ %id @ " 0 " @ %expr @ "\r\n"); + } +} + +function DbgClearWatches() +{ + DebuggerWatchView.clear(); +} + +function dbgStepIn() +{ + TCPDebugger.send("STEPIN\r\n"); +} + +function dbgStepOut() +{ + TCPDebugger.send("STEPOUT\r\n"); +} + +function dbgStepOver() +{ + TCPDebugger.send("STEPOVER\r\n"); +} + +function dbgContinue() +{ + TCPDebugger.send("CONTINUE\r\n"); +} + +DebuggerConsoleView.setActive(false); diff --git a/base/scripts/defaultGame.cs b/base/scripts/defaultGame.cs new file mode 100644 index 0000000..c3a8323 --- /dev/null +++ b/base/scripts/defaultGame.cs @@ -0,0 +1,3053 @@ +//$MissionName is the file name of the mission +//$MapName is the displayed name(no underscore,spaces) +//$GameType (CTF,Hunters) + + +function DefaultGame::activatePackages(%game) +{ + // activate the default package for the game type + activatePackage(DefaultGame); + if(isPackage(%game.class) && %game.class !$= DefaultGame) + activatePackage(%game.class); +} + +function DefaultGame::deactivatePackages(%game) +{ + deactivatePackage(DefaultGame); + if(isPackage(%game.class) && %game.class !$= DefaultGame) + deactivatePackage(%game.class); +} + +package DefaultGame { + +function FlipFlop::objectiveInit(%data, %flipflop) +{ + // add this flipflop to missioncleanup + %flipflopSet = nameToID("MissionCleanup/FlipFlops"); + if(%flipflopSet <= 0) { + %flipflopSet = new SimSet("FlipFlops"); + MissionCleanup.add(%flipflopSet); + } + %flipflopSet.add(%flipflop); + + // see if there's a holo projector associated with this flipflop + // search the flipflop's folder for a holo projector + // if one exists, associate it with the flipflop + + %flipflop.projector = 0; + %folder = %flipflop.getGroup(); + for(%i = 0; %i < %folder.getCount(); %i++) + { + %proj = %folder.getObject(%i); + // weird, but line below prevents console error + if(%proj.getClassName() !$= "SimGroup" && %proj.getClassName() !$= "InteriorInstance") + if(%proj.getDatablock().getName() $= "LogoProjector") + { + %flipflop.projector = %proj; + %flipflop.projector.holo = 0; + break; + } + } + + // may have been hidden + %target = %flipFlop.getTarget(); + if(%target != -1) + { + // set flipflop to base skin + setTargetSkin(%target, $teamSkin[0]); + + // make this always visible in the commander map + setTargetAlwaysVisMask(%target, 0xffffffff); + + // make this always visible in the commander list + setTargetRenderMask(%target, getTargetRenderMask(%target) | $TargetInfo::CommanderListRender); + } +} + +function FlipFlop::playerTouch(%data, %flipflop, %player) +{ + %client = %player.client; + %flipTeam = %flipflop.team; + + if(%flipTeam == %client.team) + return false; + + // Let the observers know: + messageTeam( 0, 'MsgClaimFlipFlop', '\c2%1 claimed %2 for %3.~wfx/misc/flipflop_taken.wav', %client.name, Game.cleanWord( %flipflop.name ), $TeamName[%client.team] ); + // Let the teammates know: + messageTeam( %client.team, 'MsgClaimFlipFlop', '\c2%1 claimed %2 for %3.~wfx/misc/flipflop_taken.wav', %client.name, Game.cleanWord( %flipflop.name ), $TeamName[%client.team] ); + // Let the other team know: + %losers = %client.team == 1 ? 2 : 1; + messageTeam( %losers, 'MsgClaimFlipFlop', '\c2%1 claimed %2 for %3.~wfx/misc/flipflop_lost.wav', %client.name, Game.cleanWord( %flipflop.name ), $TeamName[%client.team] ); + + logEcho(%client.nameBase@" (pl "@%player@"/cl "@%client@") claimed flipflop "@%flipflop@" for team "@%client.team); + + //change the skin on the switch to claiming team's logo + setTargetSkin(%flipflop.getTarget(), $teamSkin[%player.team]); + setTargetSensorGroup(%flipflop.getTarget(), %player.team); + + // if there is a "projector" associated with this flipflop, put the claiming team's logo there + if(%flipflop.projector > 0) + { + %projector = %flipflop.projector; + // axe the old projected holo, if one exists + if(%projector.holo > 0) + %projector.holo.delete(); + %newHolo = $holoName[%client.team] @ "Logo"; + + %projTransform = %projector.getTransform(); + // below two functions are from deployables.cs + %projRot = rotFromTransform(%projTransform); + %projPos = posFromTransform(%projTransform); + // place the holo above the projector (default 10 meters) + %hHeight = %projector.holoHeight; + if(%hHeight $= "") + %hHeight = 10; + %holoZ = getWord(%projPos, 2) + %hHeight; + %holoPos = firstWord(%projPos) SPC getWord(%projPos,1) SPC %holoZ; + + %holo = new StaticShape() + { + rotation = %projRot; + position = %holoPos; + dataBlock = %newHolo; + }; + // dump the hologram into MissionCleanup + MissionCleanup.add(%holo); + // associate the holo with the projector + %projector.holo = %holo; + } + + // convert the resources associated with the flipflop + Game.claimFlipflopResources(%flipflop, %client.team); + + if(Game.countFlips()) + for(%i = 1; %i <= Game.numTeams; %i++) + { + %teamHeld = Game.countFlipsHeld(%i); + messageAll('MsgFlipFlopsHeld', "", %i, %teamHeld); + } + + //call the ai function + Game.AIplayerCaptureFlipFlop(%player, %flipflop); + return true; +} + +}; + +//--------- DEFAULT SCORING, SUPERCEDE IN GAMETYPE FILE ------------------ + +function DefaultGame::initGameVars(%game) +{ + %game.SCORE_PER_SUICIDE = 0; + %game.SCORE_PER_TEAMKILL = 0; + %game.SCORE_PER_DEATH = 0; + + %game.SCORE_PER_KILL = 0; + + %game.SCORE_PER_TURRET_KILL = 0; +} + +//-- tracking --- +// .deaths .kills .suicides .teamKills .turretKills + +function DefaultGame::claimFlipflopResources(%game, %flipflop, %team) +{ + %group = %flipflop.getGroup(); + %group.setTeam(%team); + + // make this always visible in the commander map (gets reset when sensor group gets changed) + setTargetAlwaysVisMask(%flipflop.getTarget(), 0xffffffff); +} + +//------------------------------------------------------------------------------ +function DefaultGame::selectSpawnSphere(%game, %team) +{ + // - walks the objects in the 'teamdrops' group for this team + // - find a random spawn point which has a running sum less more than + // 0->total sphere weight + + %teamDropsGroup = "MissionCleanup/TeamDrops" @ %team; + + %group = nameToID(%teamDropsGroup); + if (%group != -1) + { + %count = %group.getCount(); + if (%count != 0) + { + // Get total weight of those spheres not filtered by mission types list- + %overallWeight = 0; + for (%i = 0; %i < %count; %i++) + { + %sphereObj = %group.getObject(%i); + if ( ! %sphereObj.isHidden() ) + %overallWeight += %sphereObj.sphereWeight; + } + + if (%overallWeight > 0) + { + // Subtract a little from this as hedge against any rounding offness- + %randSum = getRandom(%overallWeight) - 0.05; + // echo("randSum = " @ %randSum); + + for (%i = 0; %i < %count; %i++) + { + %sphereObj = %group.getObject(%i); + if (! %sphereObj.isHidden()) + { + %randSum -= %sphereObj.sphereWeight; + if (%randSum <= 0) + { + // echo("Chose sphere " @ %i); + return %group.getObject(%i); // Found our sphere + } + } + } + error("Random spawn sphere selection didn't work"); + } + else + error("No non-hidden spawnspheres were found in " @ %teamDropsGroup); + } + else + error("No spawnspheres found in " @ %teamDropsGroup); + } + else + error(%teamDropsGroup @ " not found in selectSpawnSphere()."); + + return -1; +} + +function DefaultGame::selectSpawnZone(%game, %sphere) +{ + // determines if this should spawn inside or outside + %overallWeight = %sphere.indoorWeight + %sphere.outdoorWeight; + %index = mFloor(getRandom() * (%overallWeight - 0.1)) + 1; + if ((%index - %sphere.indoorWeight) > 0) + return false; //do not pick an indoor spawn + else + return true; //pick an indoor spawn +} + +function DefaultGame::selectSpawnFacing(%game, %src, %target, %zone) +{ + //this used only when spawn loc is not on an interior. This points spawning player to the ctr of spawnshpere + %target = setWord(%target, 2, 0); + %src = setWord(%src, 2, 0); + + if(VectorDist(%target, %src) == 0) + return " 0 0 1 0 "; + %vec = VectorNormalize(VectorSub(%target, %src)); + %angle = mAcos(getWord(%vec, 1)); + + if(%src < %target) + return(" 0 0 1 " @ %angle); + else + return(" 0 0 1 " @ -%angle); +} + +function DefaultGame::pickTeamSpawn(%game, %team) +{ + // early exit if no nav graph + if (!navGraphExists()) + { + echo("No navigation graph is present. Build one."); + return -1; + } + + for (%attempt = 0; %attempt < 20; %attempt++) + { + // finds a random spawn sphere + // selects inside/outside on this random sphere + // if the navgraph exists, then uses it to grab a random node as spawn + // location/rotation + %sphere = %game.selectSpawnSphere(%team); + if (%sphere == -1) + { + echo("No spawn spheres found for team " @ %team); + return -1; + } + + %zone = %game.selectSpawnZone(%sphere); + %useIndoor = %zone; + %useOutdoor = !%zone; + if (%zone) + %area = "indoor"; + else + %area = "outdoor"; + + %radius = %sphere.radius; + %sphereTrans = %sphere.getTransform(); + %sphereCtr = getWord(%sphereTrans, 0) @ " " @ getWord(%sphereTrans, 1) @ " " @ getWord(%sphereTrans, 2); //don't need full transform here, just x, y, z + //echo("Selected Sphere is " @ %sphereCtr @ " with a radius of " @ %radius @ " meters. Selecting from " @ %area @ " zone."); + + %avoidThese = $TypeMasks::VehicleObjectType | $TypeMasks::MoveableObjectType | + $TypeMasks::PlayerObjectType | $TypeMasks::TurretObjectType; + + for (%tries = 0; %tries < 10; %tries++) + { + %nodeIndex = navGraph.randNode(%sphereCtr, %radius, %useIndoor, %useOutdoor); + if (%nodeIndex >= 0) + { + %loc = navGraph.randNodeLoc(%nodeIndex); + %adjUp = VectorAdd(%loc, "0 0 1.0"); // don't go much below + + if (ContainerBoxEmpty( %avoidThese, %adjUp, 2.0)) + break; + } + } + + if (%nodeIndex >= 0) + { + %loc = navGraph.randNodeLoc(%nodeIndex); + if (%zone) + { + %trns = %loc @ " 0 0 1 0"; + %spawnLoc = whereToLook(%trns); + } + else + { + %rot = %game.selectSpawnFacing(%loc, %sphereCtr, %zone); + %spawnLoc = %loc @ %rot; + } + return %spawnLoc; + } + } +} + +//------------------------------------------------------------ + +function DefaultGame::pickObserverSpawn(%game, %client, %next) +{ + %group = nameToID("MissionGroup/ObserverDropPoints"); + %count = %group.getCount(); + if(!%count || %group == -1) + { + echo("no observer spawn points found"); + return -1; + } + + if(%client.lastObserverSpawn == -1) + { + %client.lastObserverSpawn = 0; + return(%group.getObject(%client.lastObserverSpawn)); + } + + if(%next == true) + %spawnIdx = %client.lastObserverSpawn + 1; + else + %spawnIdx = %client.lastObserverSpawn - 1; + + if(%spawnIdx < 0) + %spawnIdx = %count - 1; + else if(%spawnIdx >= %count) + %spawnIdx = 0; + + %client.lastObserverSpawn = %spawnIdx; + //echo("Observer spawn point found"); + return %group.getObject(%spawnIdx); +} + +//------------------------------------------------------------ +function DefaultGame::spawnPlayer( %game, %client, %respawn ) +{ + %client.lastSpawnPoint = %game.pickPlayerSpawn( %client, false ); + %client.suicidePickRespawnTime = getSimTime() + 20000; + %game.createPlayer( %client, %client.lastSpawnPoint, %respawn ); +} + +//------------------------------------------------------------ +function DefaultGame::playerSpawned(%game, %player) +{ + if( %player.client.respawnTimer ) + cancel(%player.client.respawnTimer); + + %player.client.observerStartTime = ""; + %game.equip(%player); + + //set the spawn time (for use by the AI system) + %player.client.spawnTime = getSimTime(); + +// jff: this should probably be checking the team of the client + //update anyone observing this client + %count = ClientGroup.getCount(); + for (%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + if (%cl.camera.mode $= "observerFollow" && %cl.observeClient == %player.client) + { + %transform = %player.getTransform(); + %cl.camera.setOrbitMode(%player, %transform, 0.5, 4.5, 4.5); + %cl.camera.targetObj = %player; + } + } +} + +function DefaultGame::equip(%game, %player) +{ + for(%i =0; %i<$InventoryHudCount; %i++) + %player.client.setInventoryHudItem($InventoryHudData[%i, itemDataName], 0, 1); + + //%player.setArmor("Light"); + %player.setInventory(RepairKit,1); + %player.setInventory(Grenade,6); + %player.setInventory(Blaster,1); + %player.setInventory(Disc,1); + %player.setInventory(Chaingun, 1); + %player.setInventory(ChaingunAmmo, 100); + %player.setInventory(DiscAmmo, 20); + %player.setInventory(Beacon, 3); + %player.setInventory(TargetingLaser, 1); + %player.weaponCount = 3; + + %player.use("Blaster"); +} + +//------------------------------------------------------------ +function DefaultGame::pickPlayerSpawn(%game, %client, %respawn) +{ + // place this client on his own team, '%respawn' does not ever seem to be used + //we no longer care whether it is a respawn since all spawns use same points. + return %game.pickTeamSpawn(%client.team); +} + +//------------------------------------------------------------ +function DefaultGame::createPlayer(%game, %client, %spawnLoc, %respawn) +{ + // clients and cameras can exist in team 0, but players should not + if(%client.team == 0) + error("Players should not be added to team0!"); + + if( %client.player > 0 ) + error( "Attempting to create an angus ghost!" ); + + // defaultplayerarmor is in 'players.cs' + if(%spawnLoc == -1) + %spawnLoc = "0 0 300 1 0 0 0"; + //else + // echo("Spawning player at " @ %spawnLoc); + + // copied from player.cs + if (%client.race $= "Bioderm") + // Only have male bioderms. + %armor = $DefaultPlayerArmor @ "Male" @ %client.race @ Armor; + else + %armor = $DefaultPlayerArmor @ %client.sex @ %client.race @ Armor; + %client.armor = $DefaultPlayerArmor; + + %player = new Player() { + //dataBlock = $DefaultPlayerArmor; + dataBlock = %armor; + }; + + + if(%respawn) + { + %player.setInvincible(true); + %player.setCloaked(true); + %player.setInvincibleMode($InvincibleTime,0.02); + %player.respawnCloakThread = %player.schedule($InvincibleTime * 1000, "setRespawnCloakOff"); + %player.schedule($InvincibleTime * 1000, "setInvincible", false); + } + + %player.setTransform( %spawnLoc ); + MissionCleanup.add(%player); + + // setup some info + %player.setOwnerClient(%client); + %player.team = %client.team; + %client.outOfBounds = false; + %player.setEnergyLevel(60); + %client.player = %player; + + // updates client's target info for this player + %player.setTarget(%client.target); + setTargetDataBlock(%client.target, %player.getDatablock()); + setTargetSensorData(%client.target, PlayerSensor); + setTargetSensorGroup(%client.target, %client.team); + %client.setSensorGroup(%client.team); + + //make sure the player has been added to the team rank array... + %game.populateTeamRankArray(%client); + + %game.playerSpawned(%client.player); +} + +function Player::setRespawnCloakOff(%player) +{ + %player.setCloaked(false); + %player.respawnCloakThread = ""; +} + +//------------------------------------------------------------ + +function DefaultGame::startMatch(%game) +{ + echo("START MATCH"); + MessageAll('MsgMissionStart', "\c2Match started!"); + + //the match has been started, clear the team rank array, and repopulate it... + for (%i = 0; %i < 32; %i++) + %game.clearTeamRankArray(%i); + + //used in BountyGame, prolly in a few others as well... + $matchStarted = true; + + %game.clearDeployableMaxes(); + + $missionStartTime = getSimTime(); + %curTimeLeftMS = ($Host::TimeLimit * 60 * 1000); + + // schedule first timeLimit check for 20 seconds + if(%game.class !$= "SiegeGame") + { + %game.timeCheck = %game.schedule(20000, "checkTimeLimit"); + } + + //schedule the end of match countdown + EndCountdown($Host::TimeLimit * 60 * 1000); + + //reset everyone's score and add them to the team rank array + for (%i = 0; %i < ClientGroup.getCount(); %i++) + { + %cl = ClientGroup.getObject(%i); + %game.resetScore(%cl); + %game.populateTeamRankArray(%cl); + } + + // set all clients control to their player + %count = ClientGroup.getCount(); + for( %i = 0; %i < %count; %i++ ) + { + %cl = ClientGroup.getObject(%i); + + // Siege game will set the clock differently + if(%game.class !$= "SiegeGame") + messageClient(%cl, 'MsgSystemClock', "", $Host::TimeLimit, %curTimeLeftMS); + + if( !$Host::TournamentMode && %cl.matchStartReady && %cl.camera.mode $= "pre-game") + { + commandToClient(%cl, 'setHudMode', 'Standard'); + %cl.setControlObject( %cl.player ); + } + else + { + if( %cl.matchStartReady ) + { + if(%cl.camera.mode $= "pre-game") + { + %cl.observerMode = ""; + commandToClient(%cl, 'setHudMode', 'Standard'); + + if(isObject(%cl.player)) + %cl.setControlObject( %cl.player ); + else + echo("can't set control for client: " @ %cl @ ", no player object found!"); + } + else + %cl.observerMode = "observerFly"; + } + } + } + + // on with the show this is it! + AISystemEnabled( true ); +} + +function DefaultGame::gameOver( %game ) +{ + //set the bool + $missionRunning = false; + + CancelCountdown(); + CancelEndCountdown(); + + //loop through all the clients, and do any cleanup... + %count = ClientGroup.getCount(); + for (%i = 0; %i < %count; %i++) + { + %client = ClientGroup.getObject(%i); + %player = %client.player; + %client.lastTeam = %client.team; + + if ( !%client.isAiControlled() ) + { + %client.endMission(); + messageClient( %client, 'MsgClearDebrief', "" ); + %game.sendDebriefing( %client ); + } + } + + // Default game does nothing... except lets the AI know the mission is over + AIMissionEnd(); +} + +//------------------------------------------------------------------------------ +function DefaultGame::sendDebriefing( %game, %client ) +{ + if ( %game.numTeams == 1 ) + { + // Mission result: + %winner = $TeamRank[0, 0]; + if ( %winner.score > 0 ) + messageClient( %client, 'MsgDebriefResult', "", '%1 wins!', $TeamRank[0, 0].name ); + else + messageClient( %client, 'MsgDebriefResult', "", 'Nobody wins.' ); + + // Player scores: + %count = $TeamRank[0, count]; + messageClient( %client, 'MsgDebriefAddLine', "", 'PLAYER\tSCORE\tKILLS' ); + for ( %i = 0; %i < %count; %i++ ) + { + %cl = $TeamRank[0, %i]; + if ( %cl.score $= "" ) + %score = 0; + else + %score = %cl.score; + if ( %cl.kills $= "" ) + %kills = 0; + else + %kills = %cl.kills; + messageClient( %client, 'MsgDebriefAddLine', "", '\t%1\t%2\t%3', %cl.name, %score, %kills ); + } + } + else + { + %topScore = ""; + %topCount = 0; + for ( %team = 1; %team <= %game.numTeams; %team++ ) + { + if ( %topScore $= "" || $TeamScore[%team] > %topScore ) + { + %topScore = $TeamScore[%team]; + %firstTeam = %team; + %topCount = 1; + } + else if ( $TeamScore[%team] == %topScore ) + { + %secondTeam = %team; + %topCount++; + } + } + + // Mission result: + if ( %topCount == 1 ) + messageClient( %client, 'MsgDebriefResult', "", 'Team %1 wins!', $TeamName[%firstTeam] ); + else if ( %topCount == 2 ) + messageClient( %client, 'MsgDebriefResult', "", 'Team %1 and Team %2 tie!', $TeamName[%firstTeam], $TeamName[%secondTeam] ); + else + messageClient( %client, 'MsgDebriefResult', "", 'The mission ended in a tie.' ); + + // Team scores: + messageClient( %client, 'MsgDebriefAddLine', "", 'TEAM\tSCORE' ); + for ( %team = 1; %team - 1 < %game.numTeams; %team++ ) + { + if ( $TeamScore[%team] $= "" ) + %score = 0; + else + %score = $TeamScore[%team]; + messageClient( %client, 'MsgDebriefAddLine', "", '\t%1\t%2', $TeamName[%team], %score ); + } + + // Player scores: + messageClient( %client, 'MsgDebriefAddLine', "", '\nPLAYER\tTEAM\tSCORE\tKILLS' ); + for ( %team = 1; %team - 1 < %game.numTeams; %team++ ) + %count[%team] = 0; + + %notDone = true; + while ( %notDone ) + { + // Get the highest remaining score: + %highScore = ""; + for ( %team = 1; %team <= %game.numTeams; %team++ ) + { + if ( %count[%team] < $TeamRank[%team, count] && ( %highScore $= "" || $TeamRank[%team, %count[%team]].score > %highScore ) ) + { + %highScore = $TeamRank[%team, %count[%team]].score; + %highTeam = %team; + } + } + + // Send the debrief line: + %cl = $TeamRank[%highTeam, %count[%highTeam]]; + %score = %cl.score $= "" ? 0 : %cl.score; + %kills = %cl.kills $= "" ? 0 : %cl.kills; + messageClient( %client, 'MsgDebriefAddLine', "", '\t%1\t%2\t%3\t%4', %cl.name, $TeamName[%cl.team], %score, %kills ); + + %count[%highTeam]++; + %notDone = false; + for ( %team = 1; %team - 1 < %game.numTeams; %team++ ) + { + if ( %count[%team] < $TeamRank[%team, count] ) + { + %notDone = true; + break; + } + } + } + } + + //now go through an list all the observers: + %count = ClientGroup.getCount(); + %printedHeader = false; + for (%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + if (%cl.team <= 0) + { + //print the header only if we actually find an observer + if (!%printedHeader) + { + %printedHeader = true; + messageClient(%client, 'MsgDebriefAddLine', "", '\nOBSERVERS\tSCORE'); + } + + //print out the client + %score = %cl.score $= "" ? 0 : %cl.score; + messageClient( %client, 'MsgDebriefAddLine', "", '\t%1\t%2', %cl.name, %score); + } + } +} + +//------------------------------------------------------------ +// jff: 'numDeathMsgLines' is set in 'message.cs' which seems to conflict with this +$numDeathMsgs = 2; + +function DefaultGame::clearDeployableMaxes(%game) +{ + for(%i = 0; %i <= %game.numTeams; %i++) + { + $TeamDeployedCount[%i, TurretIndoorDeployable] = 0; + $TeamDeployedCount[%i, TurretOutdoorDeployable] = 0; + $TeamDeployedCount[%i, PulseSensorDeployable] = 0; + $TeamDeployedCount[%i, MotionSensorDeployable] = 0; + $TeamDeployedCount[%i, InventoryDeployable] = 0; + $TeamDeployedCount[%i, DeployedCamera] = 0; + $TeamDeployedCount[%i, MineDeployed] = 0; + $TeamDeployedCount[%i, TargetBeacon] = 0; + $TeamDeployedCount[%i, MarkerBeacon] = 0; + } +} + +// called from player scripts +function DefaultGame::onClientDamaged(%game, %clVictim, %clAttacker, %damageType, %sourceObject) +{ + //set the vars if it was a turret + if (isObject(%sourceObject)) + { + %sourceClassType = %sourceObject.getDataBlock().getClassName(); + %sourceType = %sourceObject.getDataBlock().getName(); + } + if (%sourceClassType $= "TurretData") + { + // jff: are there special turret types which makes this needed? + // tinman: yes, we don't want bots stopping to fire on the big outdoor turrets, which they + // will just get mowed down. deployables only. + if (%sourceType $= "TurretDeployedFloorIndoor" || %sourceType $= "TurretDeployedWallIndoor" || + %sourceType $= "TurretDeployedCeilingIndoor" || %sourceType $= "TurretDeployedOutdoor") + { + %clVictim.lastDamageTurretTime = getSimTime(); + %clVictim.lastDamageTurret = %sourceObject; + } + } + else if (%sourceClassType $= "PlayerData") + { + //now see if both were on the same team + if(%clAttacker && %clAttacker != %clVictim && %clVictim.team == %clAttacker.team) + { + if (%game.numTeams > 1 && %clAttacker.player.causedRecentDamage != %clVictim.player) //is a teamgame & player just damaged a teammate + { + %clAttacker.player.causedRecentDamage = %clVictim.player; + %clAttacker.player.schedule(1000, "causedRecentDamage", ""); //allow friendly fire message every x ms + %game.friendlyFireMessage(%clVictim, %clAttacker); + } + } + if (%clAttacker && %clAttacker != %clVictim) + { + %clVictim.lastDamageTime = getSimTime(); + %clVictim.lastDamageClient = %clAttacker; + if (%clVictim.isAIControlled()) + %clVictim.clientDetected(%clAttacker); + } + } + + //call the game specific AI routines... + if (isObject(%clVictim) && %clVictim.isAIControlled()) + %game.onAIDamaged(%clVictim, %clAttacker, %damageType, %sourceObject); + if (isObject(%clAttacker) && %clAttacker.isAIControlled()) + %game.onAIFriendlyFire(%clVictim, %clAttacker, %damageType, %sourceObject); +} + +function DefaultGame::friendlyFireMessage(%game, %damaged, %damager) +{ + messageClient(%damaged, 'MsgDamagedByTeam', '\c1You were harmed by teammate %1', %damager.name); + messageClient(%damager, 'MsgDamagedTeam', '\c1You just harmed teammate %1.', %damaged.name); +} + +function DefaultGame::clearWaitRespawn(%game, %client) +{ + %client.waitRespawn = 0; +} + +// called from player scripts +function DefaultGame::onClientKilled(%game, %clVictim, %clKiller, %damageType, %implement, %damageLocation) +{ + %plVictim = %clVictim.player; + %plKiller = %clKiller.player; + %clVictim.plyrPointOfDeath = %plVictim.position; + %clVictim.plyrDiedHoldingFlag = %plVictim.holdingFlag; + %clVictim.waitRespawn = 1; + + cancel( %plVictim.reCloak ); + cancel(%clVictim.respawnTimer); + %clVictim.respawnTimer = %game.schedule(($Host::PlayerRespawnTimeout * 1000), "forceObserver", %clVictim, "spawnTimeout" ); + + // reset the alarm for out of bounds + if(%clVictim.outOfBounds) + messageClient(%clVictim, 'EnterMissionArea', ""); + + if (%damageType == $DamageType::suicide) + %respawnDelay = 10; + else + %respawnDelay = 2; + + + %game.schedule(%respawnDelay*1000, "clearWaitRespawn", %clVictim); + // if victim had an undetonated satchel charge pack, get rid of it + if(%plVictim.thrownChargeId != 0) + if(!%plVictim.thrownChargeId.kaboom) + %plVictim.thrownChargeId.delete(); + + if(%plVictim.lastVehicle !$= "") + { + schedule(15000, %plVictim.lastVehicle,"vehicleAbandonTimeOut", %plVictim.lastVehicle); + %plVictim.lastVehicle.lastPilot = ""; + } + + // unmount pilot or remove sight from bomber + if(%plVictim.isMounted()) + { + if(%plVictim.vehicleTurret) + %plVictim.vehicleTurret.getDataBlock().playerDismount(%plVictim.vehicleTurret); + else + { + %plVictim.getDataBlock().doDismount(%plVictim, true); + %plVictim.mountVehicle = false; + } + } + + if(%plVictim.inStation) + commandToClient(%plVictim.client,'setStationKeys', false); + %clVictim.camera.mode = "playerDeath"; + + // reset who triggered this station and cancel outstanding armor switch thread + if(%plVictim.station) + { + %plVictim.station.triggeredBy = ""; + %plVictim.station.getDataBlock().stationTriggered(%plVictim.station,0); + if(%plVictim.armorSwitchSchedule) + cancel(%plVictim.armorSwitchSchedule); + } + + //Close huds if player dies... + messageClient(%clVictim, 'CloseHud', "", 'inventoryScreen'); + messageClient(%clVictim, 'CloseHud', "", 'vehicleHud'); + commandToClient(%clVictim, 'setHudMode', 'Standard', "", 0); + + // $weaponslot from item.cs + %plVictim.setRepairRate(0); + %plVictim.setImageTrigger($WeaponSlot, false); + + playDeathAnimation(%plVictim, %damageLocation, %damageType); + playDeathCry(%plVictim); + + //%ridx = mFloor(getRandom() * ($numDeathMsgs - 0.01)); + %victimName = %clVictim.name; + + %game.displayDeathMessages(%clVictim, %clKiller, %damageType, %implement); + %game.updateKillScores(%clVictim, %clKiller, %damageType, %implement); + + // toss whatever is being carried, '$flagslot' from item.cs + // MES - had to move this to after death message display because of Rabbit game type + for(%index = 0 ; %index < 8; %index++) + { + %image = %plVictim.getMountedImage(%index); + if(%image) + { + if(%index == $FlagSlot) + %plVictim.throwObject(%plVictim.holdingFlag); + else + %plVictim.throw(%image.item); + } + } + + // target manager update + setTargetDataBlock(%clVictim.target, 0); + setTargetSensorData(%clVictim.target, 0); + + // clear the hud + %clVictim.SetWeaponsHudClearAll(); + %clVictim.SetInventoryHudClearAll(); + %clVictim.setAmmoHudCount(-1); + + // clear out weapons, inventory and pack huds + messageClient(%clVictim, 'msgDeploySensorOff', ""); //make sure the deploy hud gets shut off + messageClient(%clVictim, 'msgPackIconOff', ""); // clear the pack icon + + //clear the deployable HUD + %plVictim.client.deployPack = false; + cancel(%plVictim.deployCheckThread); + deactivateDeploySensor(%plVictim); + + //if the killer was an AI... + if (isObject(%clKiller) && %clKiller.isAIControlled()) + %game.onAIKilledClient(%clVictim, %clKiller, %damageType, %implement); + + + // reset control object on this player: also sets 'playgui' as content + serverCmdResetControlObject(%clVictim); + + // set control object to the camera + %clVictim.player = 0; + %transform = %plVictim.getTransform(); + + //note, AI's don't have a camera... + if (isObject(%clVictim.camera)) + { + %clVictim.camera.setTransform(%transform); + %clVictim.camera.setOrbitMode(%plVictim, %plVictim.getTransform(), 0.5, 4.5, 4.5); + %clVictim.setControlObject(%clVictim.camera); + } + + //hook in the AI specific code for when a client dies + if (%clVictim.isAIControlled()) + { + aiReleaseHumanControl(%clVictim.controlByHuman, %clVictim); + %game.onAIKilled(%clVictim, %clKiller, %damageType, %implement); + } + else + aiReleaseHumanControl(%clVictim, %clVictim.controlAI); + + //if the death was a suicide, prevent respawning for 5 seconds... + %clVictim.lastDeathSuicide = false; + if (%damageType == $DamageType::Suicide) + { + %clVictim.lastDeathSuicide = true; + %clVictim.suicideRespawnTime = getSimTime() + 5000; + } +} + +function DefaultGame::forceObserver( %game, %client, %reason ) +{ + //make sure we have a valid client... + if (%client <= 0) + return; + + // first kill this player + if(%client.player) + %client.player.scriptKill(0); + + if( %client.respawnTimer ) + cancel(%client.respawnTimer); + + %client.respawnTimer = ""; + + // remove them from the team rank array + %game.removeFromTeamRankArray(%client); + + // place them in observer mode + %client.lastObserverSpawn = -1; + %client.observerStartTime = getSimTime(); + %adminForce = 0; + + switch$ ( %reason ) + { + case "playerChoose": + %client.camera.getDataBlock().setMode( %client.camera, "observerFly" ); + messageClient(%client, 'MsgClientJoinTeam', '\c2You have become an observer.', %client.name, $teamName[0], %client, 0 ); + logEcho(%client.nameBase@" (cl "@%client@") entered observer mode"); + %client.lastTeam = %client.team; + + case "AdminForce": + %client.camera.getDataBlock().setMode( %client.camera, "observerFly" ); + messageClient(%client, 'MsgClientJoinTeam', '\c2You have been forced into observer mode by the admin.', %client.name, $teamName[0], %client, 0 ); + logEcho(%client.nameBase@" (cl "@%client@") was forced into observer mode by admin"); + %client.lastTeam = %client.team; + %adminForce = 1; + + if($Host::TournamentMode) + { + if(!$matchStarted) + { + if(%client.camera.Mode $= "pickingTeam") + { + commandToClient( %client, 'processPickTeam'); + clearBottomPrint( %client ); + } + else + { + clearCenterPrint(%client); + %client.notReady = true; + } + } + } + + case "spawnTimeout": + %client.camera.getDataBlock().setMode( %client.camera, "observerTimeout" ); + messageClient(%client, 'MsgClientJoinTeam', '\c2You have been placed in observer mode due to delay in respawning.', %client.name, $teamName[0], %client, 0 ); + logEcho(%client.nameBase@" (cl "@%client@") was placed in observer mode due to spawn delay"); + // save the team the player was on - only if this was a delay in respawning + %client.lastTeam = %client.team; + } + + // switch client to team 0 (observer) + %client.team = 0; + %client.player.team = 0; + setTargetSensorGroup( %client.target, %client.team ); + %client.setSensorGroup( %client.team ); + + // set their control to the obs. cam + %client.setControlObject( %client.camera ); + commandToClient(%client, 'setHudMode', 'Observer'); + + // display the hud + //displayObserverHud(%client, 0); + updateObserverFlyHud(%client); + + + // message everyone about this event + if( !%adminForce ) + messageAllExcept(%client, -1, 'MsgClientJoinTeam', '\c2%1 has become an observer.', %client.name, $teamName[0], %client, 0 ); + else + messageAllExcept(%client, -1, 'MsgClientJoinTeam', '\c2The admin has forced %1 to become an observer.', %client.name, 0 ); + + updateCanListenState( %client ); + + // call the onEvent for this game type + %game.onClientEnterObserverMode(%client); //Bounty uses this to remove this client from others' hit lists +} + +function DefaultGame::displayDeathMessages(%game, %clVictim, %clKiller, %damageType, %implement) +{ + %victimGender = (%clVictim.sex $= "Male" ? 'him' : 'her'); + %victimPoss = (%clVictim.sex $= "Male" ? 'his' : 'her'); + %killerGender = (%clKiller.sex $= "Male" ? 'him' : 'her'); + %killerPoss = (%clKiller.sex $= "Male" ? 'his' : 'her'); + %victimName = %clVictim.name; + %killerName = %clKiller.name; + //error("DamageType = " @ %damageType @ ", implement = " @ %implement @ ", implement class = " @ %implement.getClassName() @ ", is controlled = " @ %implement.getControllingClient()); + + if(%damageType == $DamageType::Explosion) + { + messageAll('msgExplosionKill', $DeathMessageExplosion[mFloor(getRandom() * $DeathMessageExplosionCount)], %victimName, %victimGender, %victimPoss, %killerName, %killerGender, %killerPoss, %damageType); + logEcho(%clVictim.nameBase@" (pl "@%clVictim.player@"/cl "@%clVictim@") killed by a nearby explosion."); + } + else if(%damageType == $DamageType::Suicide) //player presses cntrl-k + { + messageAll('msgSuicide', $DeathMessageSuicide[mFloor(getRandom() * $DeathMessageSuicideCount)], %victimName, %victimGender, %victimPoss, %killerName, %killerGender, %killerPoss, %damageType); + logEcho(%clVictim.nameBase@" (pl "@%clVictim.player@"/cl "@%clVictim@") committed suicide (CTRL-K)"); + } + else if(%damageType == $DamageType::VehicleSpawn) + { + messageAll('msgVehicleSpawnKill', $DeathMessageVehPad[mFloor(getRandom() * $DeathMessageVehPadCount)], %victimName, %victimGender, %victimPoss, %killerName, %killerGender, %killerPoss, %damageType); + logEcho(%clVictim.nameBase@" (pl "@%clVictim.player@"/cl "@%clVictim@") killed by vehicle spawn"); + } + else if(%damageType == $DamageType::Impact) // run down by vehicle + { + %controller = %implement.getControllingClient(); + if(%controller > 0) + { + %killerGender = (%controller.sex $= "Male" ? 'him' : 'her'); + %killerPoss = (%controller.sex $= "Male" ? 'his' : 'her'); + %killerName = %controller.name; + messageAll('msgVehicleKill', $DeathMessageVehicle[mFloor(getRandom() * $DeathMessageVehicleCount)], %victimName, %victimGender, %victimPoss, %killerName ,%killerGender, %killerPoss, %damageType); + logEcho(%clVictim.nameBase@" (pl "@%clVictim.player@"/cl "@%clVictim@") killed by a vehicle controlled by "@%controller); + } + else + { + messageAll('msgVehicleKill', $DeathMessageVehicleUnmanned[mFloor(getRandom() * $DeathMessageVehicleUnmannedCount)], %victimName, %victimGender, %victimPoss, %killerName, %killerGender, %killerPoss, %damageType); + logEcho(%clVictim.nameBase@" (pl "@%clVictim.player@"/cl "@%clVictim@") killed by a vehicle (unmanned)"); + } + } + else if (isObject(%implement) && (%implement.getClassName() $= "Turret" || %implement.getClassName() $= "VehicleTurret")) //player killed by a turret + { + if (%implement.getControllingClient() != 0) //is turret being controlled? + { + %controller = %implement.getControllingClient(); + %killerGender = (%controller.sex $= "Male" ? 'him' : 'her'); + %killerPoss = (%controller.sex $= "Male" ? 'his' : 'her'); + %killerName = %controller.name; + + if (%controller == %clVictim) + messageAll('msgTurretSelfKill', $DeathMessageTurretSelfKill[mFloor(getRandom() * $DeathMessageTurretSelfKillCount)],%victimName, %victimGender, %victimPoss, %killerName, %killerGender, %killerPoss, %damageType); + else if (%controller.team == %clVictim.team) //controller TK'd a friendly + messageAll('msgCTurretKill', $DeathMessageCTurretTeamKill[%damageType, mFloor(getRandom() * $DeathMessageCTurretTeamKillCount)],%victimName, %victimGender, %victimPoss, %killerName, %killerGender, %killerPoss, %damageType); + else //controller killed an enemy + messageAll('msgCTurretKill', $DeathMessageCTurretKill[%damageType, mFloor(getRandom() * $DeathMessageCTurretKillCount)],%victimName, %victimGender, %victimPoss, %killerName, %killerGender, %killerPoss, %damageType); + logEcho(%clVictim.nameBase@" (pl "@%clVictim.player@"/cl "@%clVictim@") killed by a turret controlled by "@%controller); + } + // use the handle associated with the deployed object to verify valid owner + else if (isObject(%implement.owner)) + { + %owner = %implement.owner; + //error("Owner is " @ %owner @ " Handle is " @ %implement.ownerHandle); + //error("Turret is still owned"); + //turret is uncontrolled, but is owned - treat the same as controlled. + %killerGender = (%owner.sex $= "Male" ? 'him' : 'her'); + %killerPoss = (%owner.sex $= "Male" ? 'his' : 'her'); + %killerName = %owner.name; + + if (%owner.team == %clVictim.team) //player got in the way of a teammates deployed but uncontrolled turret. + messageAll('msgCTurretKill', $DeathMessageCTurretAccdtlKill[%damageType,mFloor(getRandom() * $DeathMessageCTurretAccdtlKillCount)],%victimName, %victimGender, %victimPoss, %killerName, %killerGender, %killerPoss, %damageType); + else //deployed, uncontrolled turret killed an enemy + messageAll('msgCTurretKill', $DeathMessageCTurretKill[%damageType,mFloor(getRandom() * $DeathMessageCTurretKillCount)],%victimName, %victimGender, %victimPoss, %killerName, %killerGender, %killerPoss, %damageType); + logEcho(%clVictim.nameBase@" (pl "@%clVictim.player@"/cl "@%clVictim@") was killed by turret (automated)"); + } + else //turret is not a placed (owned) turret (or owner is no longer on it's team), and is not being controlled + { + messageAll('msgTurretKill', $DeathMessageTurretKill[%damageType,mFloor(getRandom() * $DeathMessageTurretKillCount)],%victimName, %victimGender, %victimPoss, %killerName, %killerGender, %killerPoss, %damageType); + logEcho(%clVictim.nameBase@" (pl "@%clVictim.player@"/cl "@%clVictim@") killed by turret"); + } + } + else if((%clKiller == %clVictim) || (%damageType == $DamageType::Ground)) //player killed himself or fell to death + { + messageAll('msgSelfKill', $DeathMessageSelfKill[%damageType,mFloor(getRandom() * $DeathMessageSelfKillCount)], %victimName, %victimGender, %victimPoss, %killerName, %killerGender, %killerPoss, %damageType); + logEcho(%clVictim.nameBase@" (pl "@%clVictim.player@"/cl "@%clVictim@") killed self ("@$DamageTypeText[%damageType]@")"); + } + + else if (%damageType == $DamageType::OutOfBounds) //killer died due to Out-of-Bounds damage + { + messageAll('msgOOBKill', $DeathMessageOOB[mFloor(getRandom() * $DeathMessageOOBCount)], %victimName, %victimGender, %victimPoss, %killerName, %killerGender, %killerPoss, %damageType); + logEcho(%clVictim.nameBase@" (pl "@%clVictim.player@"/cl "@%clVictim@") killed by out-of-bounds damage"); + } + + else if (%damageType == $DamageType::NexusCamping) //Victim died from camping near the nexus... + { + messageAll('msgCampKill', $DeathMessageCamping[mFloor(getRandom() * $DeathMessageCampingCount)], %victimName, %victimGender, %victimPoss, %killerName, %killerGender, %killerPoss, %damageType); + logEcho(%clVictim.nameBase@" (pl "@%clVictim.player@"/cl "@%clVictim@") killed for nexus camping"); + } + + else if(%clKiller.team == %clVictim.team) //was a TK + { + messageAll('msgTeamKill', $DeathMessageTeamKill[%damageType, mFloor(getRandom() * $DeathMessageTeamKillCount)], %victimName, %victimGender, %victimPoss, %killerName, %killerGender, %killerPoss, %damageType); + logEcho(%clVictim.nameBase@" (pl "@%clVictim.player@"/cl "@%clVictim@") teamkilled by "@%clKiller.nameBase@" (pl "@%clKiller.player@"/cl "@%clKiller@")"); + } + + else if (%damageType == $DamageType::Lava) //player died by falling in lava + { + messageAll('msgLavaKill', $DeathMessageLava[mFloor(getRandom() * $DeathMessageLavaCount)], %victimName, %victimGender, %victimPoss, %killerName, %killerGender, %killerPoss, %damageType); + logEcho(%clVictim.nameBase@" (pl "@%clVictim.player@"/cl "@%clVictim@") killed by lava"); + } + else if ( %damageType == $DamageType::Lightning ) // player was struck by lightning + { + messageAll('msgLightningKill', $DeathMessageLightning[mFloor(getRandom() * $DeathMessageLightningCount)], %victimName, %victimGender, %victimPoss, %killerName, %killerGender, %killerPoss, %damageType); + logEcho(%clVictim.nameBase@" (pl "@%clVictim.player@"/cl "@%clVictim@") killed by lightning"); + } + else //was a legitimate enemy kill + { + if(%damageType == 6 && (%clVictim.headShot)) + { + // laser headshot just occurred + messageAll('MsgHeadshotKill', $DeathMessageHeadshot[%damageType, mFloor(getRandom() * $DeathMessageHeadshotCount)], %victimName, %victimGender, %victimPoss, %killerName, %killerGender, %killerPoss, %damageType); + + } + else + messageAll('MsgLegitKill', $DeathMessage[%damageType, mFloor(getRandom() * $DeathMessageCount)], %victimName, %victimGender, %victimPoss, %killerName, %killerGender, %killerPoss, %damageType); + logEcho(%clVictim.nameBase@" (pl "@%clVictim.player@"/cl "@%clVictim@") killed by "@%clKiller.nameBase@" (pl "@%clKiller.player@"/cl "@%clKiller@") using "@$DamageTypeText[%damageType]); + } +} + +function DefaultGame::assignClientTeam(%game, %client, %respawn ) +{ + // this function is overwritten in non-team mission types (e.g. DM) + // so these lines won't do anything + //if(!%game.numTeams) + //{ + // setTargetSkin(%client.target, %client.skin); + // return; + //} + + // camera is responsible for creating a player + // - counts the number of players per team + // - puts this player on the least player count team + // - sets the client's skin to the servers default + + %numPlayers = ClientGroup.getCount(); + for(%i = 0; %i <= %game.numTeams; %i++) + %numTeamPlayers[%i] = 0; + + for(%i = 0; %i < %numPlayers; %i = %i + 1) + { + %cl = ClientGroup.getObject(%i); + if(%cl != %client) + %numTeamPlayers[%cl.team]++; + } + %leastPlayers = %numTeamPlayers[1]; + %leastTeam = 1; + for(%i = 2; %i <= %game.numTeams; %i++) + { + if( (%numTeamPlayers[%i] < %leastPlayers) || + ( (%numTeamPlayers[%i] == %leastPlayers) && + ($teamScore[%i] < $teamScore[%leastTeam] ) )) + { + %leastTeam = %i; + %leastPlayers = %numTeamPlayers[%i]; + } + } + + %client.team = %leastTeam; + %client.lastTeam = %team; + + // Assign the team skin: + if ( %client.isAIControlled() ) + { + if ( %leastTeam & 1 ) + setTargetSkin( %client.target, 'basebot' ); + else + setTargetSkin( %client.target, 'basebbot' ); + } + else + setTargetSkin( %client.target, $teamSkin[%client.team] ); + //setTargetSkin( %client.target, %client.skin ); + + // might as well standardize the messages + //messageAllExcept( %client, -1, 'MsgClientJoinTeam', '\c1%1 joined %2.', %client.name, $teamName[%leastTeam], %client, %leastTeam ); + //messageClient( %client, 'MsgClientJoinTeam', '\c1You joined the %2 team.', $client.name, $teamName[%client.team], %client, %client.team ); + messageAllExcept( %client, -1, 'MsgClientJoinTeam', '\c1%1 joined %2.', %client.name, $teamName[%client.team], %client, %client.team ); + messageClient( %client, 'MsgClientJoinTeam', '\c1You joined the %2 team.', %client.name, $teamName[%client.team], %client, %client.team ); + + updateCanListenState( %client ); + + logEcho(%client.nameBase@" (cl "@%client@") joined team "@%client.team); +} + +function DefaultGame::clientJoinTeam( %game, %client, %team, %respawn ) +{ + if ( %team < 1 || %team > %game.numTeams ) + return; + + if( %respawn $= "" ) + %respawn = 1; + + %client.team = %team; + %client.lastTeam = %team; + setTargetSkin( %client.target, $teamSkin[%team] ); + setTargetSensorGroup( %client.target, %team ); + %client.setSensorGroup( %team ); + + // Spawn the player: + %game.spawnPlayer( %client, %respawn ); + + messageAllExcept( %client, -1, 'MsgClientJoinTeam', '\c1%1 joined %2.', %client.name, $teamName[%team], %client, %team ); + messageClient( %client, 'MsgClientJoinTeam', '\c1You joined the %2 team.', $client.name, $teamName[%client.team], %client, %client.team ); + + updateCanListenState( %client ); + + logEcho(%client.nameBase@" (cl "@%client@") joined team "@%client.team); +} + +function DefaultGame::AIChangeTeam(%game, %client, %newTeam) +{ + //make sure we're trying to drop an AI + if (!isObject(%client) || !%client.isAIControlled()) + return; + + //clear the ai from any objectives, etc... + AIUnassignClient(%client); + %client.clearTasks(); + %client.clearStep(); + %client.defaultTasksAdded = false; + + //kill the player, which should cause the Game object to perform whatever cleanup is required. + if (isObject(%client.player)) + %client.player.scriptKill(0); + + //clean up the team rank array + %game.removeFromTeamRankArray(%client); + + //assign the new team + %client.team = %newTeam; + if (%newTeam < 0) + Game.assignClientTeam(%client); + + messageAllExcept( %client, -1, 'MsgClientJoinTeam', '\c1bot %1 has switched to team %2.', %client.name, $teamName[%client.team], %client, %client.team ); +} + +function DefaultGame::clientChangeTeam(%game, %client, %team, %fromObs) +{ + //first, remove the client from the team rank array + //the player will be added to the new team array as soon as he respawns... + %game.removeFromTeamRankArray(%client); + + %pl = %client.player; + if(isObject(%pl)) + { + if(%pl.isMounted()) + %pl.getDataBlock().doDismount(%pl); + %pl.scriptKill(0); + } + + // reset the client's targets and tasks only + clientResetTargets(%client, true); + + // give this client a new handle to disassociate ownership of deployed objects + if( %team $= "" && (%team > 0 && %team <= %game.numTeams)) + { + if( %client.team == 1 ) + %client.team = 2; + else + %client.team = 1; + } + else + %client.team = %team; + + // Set the client's skin: + if (!%client.isAIControlled()) + setTargetSkin( %client.target, $teamSkin[%client.team] ); + setTargetSensorGroup( %client.target, %client.team ); + %client.setSensorGroup( %client.team ); + + // Spawn the player: + %client.lastSpawnPoint = %game.pickPlayerSpawn( %client ); + + %game.createPlayer( %client, %client.lastSpawnPoint, $MatchStarted ); + + if($MatchStarted) + %client.setControlObject(%client.player); + else + { + %client.camera.getDataBlock().setMode(%client.camera, "pre-game", %client.player); + %client.setControlObject(%client.camera); + } + + // call the onEvent for this game type + %game.onClientEnterObserverMode(%client); //Bounty uses this to remove this client from others' hit lists + + if(%fromObs $= "" || !%fromObs) + { + messageAllExcept( %client, -1, 'MsgClientJoinTeam', '\c1%1 switched to team %2.', %client.name, $teamName[%client.team], %client, %client.team ); + messageClient( %client, 'MsgClientJoinTeam', '\c1You switched to team %2.', $client.name, $teamName[%client.team], %client, %client.team ); + } + else + { + messageAllExcept( %client, -1, 'MsgClientJoinTeam', '\c1%1 joined team %2.', %client.name, $teamName[%team], %client, %team ); + messageClient( %client, 'MsgClientJoinTeam', '\c1You joined team %2.', $client.name, $teamName[%client.team], %client, %client.team ); + } + + updateCanListenState( %client ); + + // MES - switch objective hud lines when client switches teams + messageClient(%client, 'MsgCheckTeamLines', "", %client.team); + logEcho(%client.nameBase@" (cl "@%client@") switched to team "@%client.team); +} + +// missioncleanup and missiongroup are checked prior to entering game code +function DefaultGame::missionLoadDone(%game) +{ + // walks through the mission group and sets the power stuff up + // - groups get initialized with power count 0 then iterated to + // increment powercount if an object within is powered + // - powers objects up/down + //MissionGroup.objectiveInit(); + MissionGroup.clearPower(); + MissionGroup.powerInit(0); + + %game.initGameVars(); //set up scoring variables and other game specific globals + + // make team0 visible/friendly to all + setSensorGroupAlwaysVisMask(0, 0xffffffff); + setSensorGroupFriendlyMask(0, 0xffffffff); + + // update colors: + // - enemy teams are red + // - same team is green + // - team 0 is white + for(%i = 0; %i < 32; %i++) + { + %team = (1 << %i); + setSensorGroupColor(%i, %team, "0 255 0 255"); + setSensorGroupColor(%i, ~%team, "255 0 0 255"); + setSensorGroupColor(%i, 1, "255 255 255 255"); + + // setup the team targets (alwyas friendly and visible to same team) + setTargetAlwaysVisMask(%i, %team); + setTargetFriendlyMask(%i, %team); + } + + //set up the teams + %game.setUpTeams(); + + //clear out the team rank array... + for (%i = 0; %i < 32; %i++) + $TeamRank[%i, count] = ""; + + // objectiveInit has to take place after setupTeams -- objective HUD relies on flags + // having their team set + MissionGroup.objectiveInit(); + + //initialize the AI system + %game.aiInit(); + + //need to reset the teams if we switch from say, CTF to Bounty... + // assign the bots team + if ($currentMissionType !$= $previousMissionType) + { + $previousMissionType = $currentMissionType; + for(%i = 0; %i < ClientGroup.getCount(); %i++) + { + %cl = ClientGroup.getObject(%i); + if (%cl.isAIControlled()) + %game.assignClientTeam(%cl); + } + } + + //Save off respawn or Siege Team switch information... + if(%game.class !$= "SiegeGame") + MissionGroup.setupPositionMarkers(true); + echo("Default game mission load done."); +} + +function DefaultGame::onClientLeaveGame(%game, %client) +{ + // if there is a player attached to this client, kill it + if( isObject(%client.player)) + %client.player.scriptKill(0); + + //cancel a scheduled call... + cancel(%client.respawnTimer); + %client.respawnTimer = ""; + + //remove them from the team rank arrays + %game.removeFromTeamRankArray(%client); + logEcho(%client.nameBase@" (cl "@%client@") dropped"); +} + +function DefaultGame::clientMissionDropReady(%game, %client) +{ + //synchronize the clock HUD + messageClient(%client, 'MsgSystemClock', "", 0, 0); + + %game.sendClientTeamList( %client ); + %game.setupClientHuds( %client ); + + if($CurrentMissionType $= "SinglePlayer") + { + //CommandToClient( %client, 'setPlayContent'); + return; + } + + %observer = false; + if( !$Host::TournamentMode ) + { + if( %client.camera.mode $= "observerFly" || %client.camera.mode $= "justJoined") + { + %observer = true; + commandToClient(%client, 'setHudMode', 'Observer'); + %client.setControlObject( %client.camera ); + //displayObserverHud( %client, 0 ); + updateObserverFlyHud(%client); + } + + if( !%observer ) + { + if(!$MatchStarted && !$CountdownStarted) // server has not started anything yet + { + %client.setControlObject( %client.camera ); + commandToClient(%client, 'setHudMode', 'Observer'); + } + else if(!$MatchStarted && $CountdownStarted) // server has started the countdown + { + commandToClient(%client, 'setHudMode', 'Observer'); + %client.setControlObject( %client.camera ); + } + else + { + commandToClient(%client, 'setHudMode', 'Standard'); // the game has already started + %client.setControlObject( %client.player ); + } + } + } + else + { + // set all players into obs mode. setting the control object will handle further procedures... + %client.camera.getDataBlock().setMode( %client.camera, "ObserverFly" ); + commandToClient(%client, 'setHudMode', 'Observer'); + %client.setControlObject( %client.camera ); + } + + // were ready to go. + %client.matchStartReady = true; + echo("Client" SPC %client SPC "is ready."); +} + +function DefaultGame::sendClientTeamList(%game, %client) +{ + // Send the client the current team list: + %teamCount = %game.numTeams; + for ( %i = 0; %i < %teamCount; %i++ ) + { + if ( %i > 0 ) + %teamList = %teamList @ "\n"; + + %teamList = %teamList @ detag( getTaggedString( $teamName[%i + 1] ) ); + } + messageClient( %client, 'MsgTeamList', "", %teamCount, %teamList ); +} + +function DefaultGame::setupClientHuds(%game, %client) +{ + // tell the client to setup the huds... + for(%i =0; %i<$WeaponsHudCount; %i++) + %client.setWeaponsHudBitmap(%i, $WeaponsHudData[%i, itemDataName], $WeaponsHudData[%i, bitmapName]); + for(%i =0; %i<$InventoryHudCount; %i++) + %client.setInventoryHudBitmap($InventoryHudData[%i, slot], $InventoryHudData[%i, itemDataName], $InventoryHudData[%i, bitmapName]); + + %client.setWeaponsHudBackGroundBmp("gui/hud_new_panel.png"); + %client.setWeaponsHudHighLightBmp("gui/hud_new_weaponselect.png"); + %client.setWeaponsHudInfiniteAmmoBmp("gui/hud_infinity.png"); + %client.setInventoryHudBackGroundBmp("gui/hud_new_panel.png"); + + // tell the client if we are protecting statics (so no health bar will be displayed) + commandToClient(%client, 'protectingStaticObjects', %game.allowsProtectedStatics()); + commandToClient(%client, 'setPowerAudioProfiles', sPowerUp.getId(), sPowerDown.getId()); +} + +function DefaultGame::testDrop( %game, %client ) +{ + %game.clientJoinTeam( %client, 1, false ); + %client.camera.getDataBlock().setMode( %client.camera, "pre-game", %client.player ); + %client.setControlObject( %client.camera ); + CommandToClient( %client, 'setPlayContent' ); +} + +function DefaultGame::onClientEnterObserverMode( %game, %client ) +{ + // Default game doesn't care... +} + +// from 'item.cs' +function DefaultGame::playerTouchFlag(%game, %player, %flag) +{ + messageAll('MsgPlayerTouchFlag', 'Player %1 touched flag %2', %player, %flag); +} + +// from 'item.cs' +function DefaultGame::playerDroppedFlag(%game, %player, %flag) +{ + messageAll('MsgPlayerDroppedFlag', 'Player %1 dropped flag %2', %player, %flag); +} + +// from 'staticShape.cs' +function DefaultGame::flagStandCollision(%game, %dataBlock, %obj, %colObj) +{ + // for retreiveGame +} + +function DefaultGame::notifyMineDeployed(%game, %mine) +{ + //do nothign in the default game... +} + +// from 'staticshape.cs' +function DefaultGame::findProjector(%game, %flipflop) +{ + // search the flipflop's folder for a holo projector + // if one exists, associate it with the flipflop + %flipflop.projector = 0; + %folder = %flipflop.getGroup(); + for(%i = 0; %i < %folder.getCount(); %i++) + { + %proj = %folder.getObject(%i); + if(%proj.getDatablock().getName() $= "LogoProjector") + { + %flipflop.projector = %proj; + %flipflop.projector.holo = 0; + break; + } + } +} + +//****************************************************************************** +//* DefaultGame Trigger - Functions * +//****************************************************************************** + +/// -Trigger- ////////////////////////////////////////////////////////////////// +//Function -- onEnterTrigger (%game, %name, %data, %obj, %colObj) +// %game = Current game type object +// %name = Trigger name - defined when trigger is created +// %data = Trigger Data Block +// %obj = Trigger Object +// %colObj = Object that collided with the trigger +//Decription -- Called when trigger has been triggered +//////////////////////////////////////////////////////////////////////////////// +// from 'trigger.cs' +function DefaultGame::onEnterTrigger(%game, %triggerName, %data, %obj, %colobj) +{ + //Do Nothing +} + +/// -Trigger- ////////////////////////////////////////////////////////////////// +//Function -- onLeaveTrigger (%game, %name, %data, %obj, %colObj) +// %game = Current game type object +// %name = Trigger name - defined when trigger is created +// %data = Trigger Data Block +// %obj = Trigger Object +// %colObj = Object that collided with the trigger +//Decription -- Called when trigger has been untriggered +//////////////////////////////////////////////////////////////////////////////// +// from 'trigger.cs' +function DefaultGame::onLeaveTrigger(%game, %triggerName, %data, %obj, %colobj) +{ + //Do Nothing +} + +/// -Trigger- ////////////////////////////////////////////////////////////////// +//Function -- onTickTrigger(%game, %name, %data, %obj) +// %game = Current game type object +// %name = Trigger name - defined when trigger is created +// %data = Trigger Data Block +// %obj = Trigger Object +//Decription -- Called every tick if triggered +//////////////////////////////////////////////////////////////////////////////// +// from 'trigger.cs' +function DefaultGame::onTickTrigger(%game, %triggerName, %data, %obj) +{ + //Do Nothing +} + + +function DefaultGame::setUpTeams(%game) +{ + %group = nameToID("MissionGroup/Teams"); + if(%group == -1) + return; + + // create a team0 if it does not exist + %team = nameToID("MissionGroup/Teams/team0"); + if(%team == -1) + { + %team = new SimGroup("team0"); + %group.add(%team); + } + + // 'team0' is not counted as a team here + %game.numTeams = 0; + while(%team != -1) + { + // create drop set and add all spawnsphere objects into it + %dropSet = new SimSet("TeamDrops" @ %game.numTeams); + MissionCleanup.add(%dropSet); + + %spawns = nameToID("MissionGroup/Teams/team" @ %game.numTeams @ "/SpawnSpheres"); + if(%spawns != -1) + { + %count = %spawns.getCount(); + for(%i = 0; %i < %count; %i++) + %dropSet.add(%spawns.getObject(%i)); + } + + // set the 'team' field for all the objects in this team + %team.setTeam(%game.numTeams); + + clearVehicleCount(%team+1); + // get next group + %team = nameToID("MissionGroup/Teams/team" @ %game.numTeams + 1); + if (%team != -1) + %game.numTeams++; + } + + // set the number of sensor groups (including team0) that are processed + setSensorGroupCount(%game.numTeams + 1); +} + +function SimGroup::setTeam(%this, %team) +{ + for (%i = 0; %i < %this.getCount(); %i++) + { + %obj = %this.getObject(%i); + switch$ (%obj.getClassName()) + { + case SpawnSphere : + if($MatchStarted) + { + // find out what team the spawnsphere used to belong to + %found = false; + for(%l = 1; %l <= Game.numTeams; %l++) + { + %drops = nameToId("MissionCleanup/TeamDrops" @ %l); + for(%j = 0; %j < %drops.getCount(); %j++) + { + %current = %drops.getObject(%j); + if(%current == %obj) + %found = %l; + } + } + if(%team != %found) + Game.claimSpawn(%obj, %team, %found); + else + error("spawn "@%obj@" is already on team "@%team@"!"); + } + else + Game.claimSpawn(%obj, %team, ""); + case SimGroup : %obj.setTeam(%team); + default : %obj.team = %team; + } + + if(%obj.getType() & $TypeMasks::GameBaseObjectType) + { + // eeck.. please go away when scripts get cleaned... + if(%obj.getDataBlock().getName() $= "StationVehiclePad") + %obj = %obj.station; + + %target = %obj.getTarget(); + if(%target != -1) + setTargetSensorGroup(%target, %team); + } + } +} + +function DefaultGame::claimSpawn(%game, %obj, %newTeam, %oldTeam) +{ + if(%newTeam == %oldTeam) + return; + + %newSpawnGroup = nameToId("MissionCleanup/TeamDrops" @ %newTeam); + if(%oldTeam !$= "") + { + %oldSpawnGroup = nameToId("MissionCleanup/TeamDrops" @ %oldTeam); + %oldSpawnGroup.remove(%obj); + } + %newSpawnGroup.add(%obj); +} + +// recursive function to assign teams to all mission objects + +function SimGroup::swapTeams(%this) +{ + // used in Siege only + Game.groupSwapTeams(%this); +} + +function ShapeBase::swapTeams(%this) +{ + // used in Siege only + Game.objectSwapTeams(%this); +} + +function GameBase::swapTeams(%this) +{ + // used in Siege only + Game.objectSwapTeams(%this); +} + +function TSStatic::swapTeams(%this) +{ + // used in Siege only + // do nothing +} + +function InteriorInstance::swapTeams(%this) +{ + // used in Siege only + // do nothing -- interiors don't switch teams +} + +function SimGroup::swapVehiclePads(%this) +{ + // used in Siege only + Game.groupSwapVehiclePads(%this); +} + +function ShapeBase::swapVehiclePads(%this) +{ + // used in Siege only + Game.objectSwapVehiclePads(%this); +} + +function GameBase::swapVehiclePads(%this) +{ + // used in Siege only + // do nothing -- only searching for vehicle pads +} + +function InteriorInstance::swapVehiclePads(%this) +{ + // used in Siege only + // do nothing -- only searching for vehicle pads +} + +function SimSet::swapVehiclePads(%this) +{ + // used in Siege only + // do nothing -- only searching for vehicle pads +} + +function PhysicalZone::swapVehiclePads(%this) +{ + // used in Siege only + // do nothing -- only searching for vehicle pads +} + +function SimGroup::objectRestore(%this) +{ + // used in Siege only + Game.groupObjectRestore(%this); +} + +function ShapeBase::objectRestore(%object) +{ + // only used for Siege + Game.shapeObjectRestore(%object); +} + +function Turret::objectRestore(%object) +{ + // only used for Siege + Game.shapeObjectRestore(%object); +} + +function AIObjective::objectRestore(%object) +{ + // only used for Siege + // don't do anything for AI Objectives +} + +function DefaultGame::checkObjectives(%game) +{ + //any special objectives that can be met by gametype + //none for default game +} + +//--------------------------------------------------- + +function DefaultGame::checkTimeLimit(%game, %forced) +{ + // Don't add extra checks: + if ( %forced ) + cancel( %game.timeCheck ); + + // if there is no time limit, check back in a minute to see if it's been set + if(($Host::TimeLimit $= "") || $Host::TimeLimit == 0) + { + %game.timeCheck = %game.schedule(20000, "checkTimeLimit"); + return; + } + + %curTimeLeftMS = ($Host::TimeLimit * 60 * 1000) + $missionStartTime - getSimTime(); + + if (%curTimeLeftMS <= 0) + { + // time's up, put down your pencils + %game.timeLimitReached(); + } + else + { + if(%curTimeLeftMS >= 20000) + %game.timeCheck = %game.schedule(20000, "checkTimeLimit"); + else + %game.timeCheck = %game.schedule(%curTimeLeftMS + 1, "checkTimeLimit"); + + //now synchronize everyone's clock + messageAll('MsgSystemClock', "", $Host::TimeLimit, %curTimeLeftMS); + } +} + +function listplayers() +{ + for(%i = 0; %i < ClientGroup.getCount(); %i++) + { + %cl = ClientGroup.getObject(%i); + %status = ""; + if(%cl.isAiControlled()) + %status = "Bot "; + if(%cl.isSmurf) + %status = "Alias "; + if(%cl.isAdmin) + %status = %status @ "Admin "; + if(%cl.isSuperAdmin) + %status = %status @ "SuperAdmin "; + if(%status $= "") + %status = ""; + echo("client: " @ %cl @ " player: " @ %cl.player @ " name: " @ %cl.nameBase @ " team: " @ %cl.team @ " status: " @ %status); + } +} + +function logEcho(%msg) +{ + if($LogEchoEnabled) + echo("LOG: " @ %msg); +} + +function DefaultGame::clearTeamRankArray(%game, %team) +{ + %count = $TeamRank[%team, count]; + for (%i = 0; %i < %count; %i++) + $TeamRank[%team, %i] = ""; + $TeamRank[%team, count] = 0; +} + +function DefaultGame::populateTeamRankArray(%game, %client) +{ + //this function should be called *after* the client has been added to a team... + if (%client <= 0 || %client.team <= 0) + return; + + //find the team + if (%game.numTeams == 1) + %team = 0; + else + %team = %client.team; + + //find the number of teammates already ranked... + %count = $TeamRank[%team, count]; + if (%count $= "") + { + $TeamRank[%team, count] = 0; + %count = 0; + } + + //make sure we're not already in the array + for (%i = 0; %i < %count; %i++) + { + if ($TeamRank[%team, %i] == %client) + return; + } + + //add the client in at the bottom of the list, and increment the count + $TeamRank[%team, %count] = %client; + $TeamRank[%team, count] = $TeamRank[%team, count] + 1; + + //now recalculate the team rank for this player + %game.recalcTeamRanks(%client); +} + +function DefaultGame::removeFromTeamRankArray(%game, %client) +{ + //note, this should be called *before* the client actually switches teams or drops... + if (%client <= 0 || %client.team <= 0) + return; + + //find the correct team + if (%game.numTeams == 1) + %team = 0; + else + %team = %client.team; + + //now search throught the team rank array, looking for this client + %count = $TeamRank[%team, count]; + for (%i = 0; %i < %count; %i++) + { + if ($TeamRank[%team, %i] == %client) + { + //we've found the client in the array, now loop through, and move everyone else up a rank + for (%j = %i + 1; %j < %count; %j++) + { + %cl = $TeamRank[%team, %j]; + $TeamRank[%team, %j - 1] = %cl; + messageClient(%cl, 'MsgYourRankIs', "", %j); + } + + //now decriment the team rank array count, and break + $TeamRank[%team, count] = $TeamRank[%team, count] - 1; + break; + } + } +} + +function DefaultGame::recalcTeamRanks(%game, %client) +{ + if (%client <= 0 || %client.team <= 0) + return; + + // this is a little confusing -- someone's actual numerical rank is always + // one number higher than his index in the $TeamRank array + // (e.g. person ranked 1st has index of 0) + + // TINMAN: I'm going to remove the %client.teamRank field - the index in the + // $TeamRank array already contains their rank - safer to search the array than + // to maintiain the information in a separate variable... + + //find the team, the client in the team array + if (%game.numTeams == 1) + %team = 0; + else + %team = %client.team; + + %count = $TeamRank[%team, count]; + %index = -1; + for (%i = 0; %i < %count; %i++) + { + if ($TeamRank[%team, %i] == %client) + { + %index = %i; + break; + } + } + + //if they weren't found in the array, return + if (%index < 0) + return; + + //make sure far down the array as they should be... + %tempIndex = %index; + %swapped = false; + while (true) + { + if (%tempIndex <= 0) + break; + + %tempIndex--; + %tempClient = $TeamRank[%team, %tempIndex]; + + //see if we should swap the two + if (%client.score > %tempClient.score) + { + %swapped = true; + %index = %tempIndex; + $TeamRank[%team, %tempIndex] = %client; + $TeamRank[%team, %tempIndex + 1] = %tempClient; + messageClient(%tempClient, 'MsgYourRankIs', "", %tempIndex + 2); + } + } + + //if we've swapped up at least once, we obviously won't need to swap down as well... + if (%swapped) + { + messageClient(%client, 'MsgYourRankIs', "", %index + 1); + return; + } + + //since we didnt' swap up, see if we need to swap down... + %tempIndex = %index; + %swapped = false; + while (true) + { + if (%tempIndex >= %count - 1) + break; + + %tempIndex++; + %tempClient = $TeamRank[%team, %tempIndex]; + + //see if we should swap the two + if (%client.score < %tempClient.score) + { + %swapped = true; + %index = %tempIndex; + $TeamRank[%team, %tempIndex] = %client; + $TeamRank[%team, %tempIndex - 1] = %tempClient; + messageClient(%tempClient, 'MsgYourRankIs', "", %tempIndex); + } + } + + //send the message (regardless of whether a swap happened or not) + messageClient(%client, 'MsgYourRankIs', "", %index + 1); +} + +function DefaultGame::recalcScore(%game, %cl) +{ + %game.recalcTeamRanks(%cl); +} + +function DefaultGame::testKill(%game, %victimID, %killerID) +{ + return ((%killerID !=0) && (%victimID.team != %killerID.team)); +} + +function DefaultGame::testSuicide(%game, %victimID, %killerID, %damageType) +{ + return ((%victimID == %killerID) || (%damageType == $DamageType::Ground) || (%damageType == $DamageType::Suicide)); +} + +function DefaultGame::testTeamKill(%game, %victimID, %killerID) +{ + return (%killerID.team == %victimID.team); +} + +function DefaultGame::testTurretKill(%game, %implement) +{ + if(%implement == 0) + return false; + else + return (%implement.getClassName() $= "Turret"); +} + +// function DefaultGame::awardScoreFlagCap(%game, %cl) +// { +// %cl.flagCaps++; +// $TeamScore[%cl.team] += %game.SCORE_PER_TEAM_FLAG_CAP; +// messageAll('MsgCTFTeamScore', "", %cl.team, $TeamScore[%cl.team]); +// +// if (%game.SCORE_PER_PLYR_FLAG_CAP > 1) +// %plural = "s"; +// else +// %plural = ""; +// +// if (%game.SCORE_PER_PLYR_FLAG_CAP != 0) +// messageClient(%cl, 'scoreFlaCapMsg', 'You received %1 point%2 for capturing the flag.', %game.SCORE_PER_PLYR_FLAG_CAP, %plural); +// %game.recalcScore(%cl); +// } + + +function DefaultGame::testOOBDeath(%game, %damageType) +{ + return (%damageType == $DamageType::OutOfBounds); +} + +function DefaultGame::awardScoreTurretKill(%game, %victimID, %implement) +{ + if ((%killer = %implement.getControllingClient()) != 0) //award whoever might be controlling the turret + { + if (%killer == %victimID) + %game.awardScoreSuicide(%victimID); + else if (%killer.team == %victimID.team) //player controlling a turret killed a teammate + { + %killer.teamKills++; + %game.awardScoreTurretTeamKill(%victimID, %killer); + %game.awardScoreDeath(%victimID); + } + else + { + %killer.turretKills++; + %game.recalcScore(%killer); + %game.awardScoreDeath(%victimID); + } + } + else if ((%killer = %implement.owner) != 0) //if it isn't controlled, award score to whoever deployed it + { + if (%killer.team == %victimID.team) + { + %game.awardScoreDeath(%victimID); + } + else + { + %killer.turretKills++; + %game.recalcScore(%killer); + %game.awardScoreDeath(%victimID); + } + } + //default is, no one was controlling it, no one owned it. No score given. +} + +function DefaultGame::awardScoreDeath(%game, %victimID) +{ + %victimID.deaths++; + if ( %game.SCORE_PER_DEATH != 0 ) + { +// %plural = (abs(%game.SCORE_PER_DEATH) != 1 ? "s" : ""); +// messageClient(%victimID, 'MsgScoreDeath', '\c0You have been penalized %1 point%2 for dying.', abs(%game.SCORE_PER_DEATH), %plural); + %game.recalcScore(%victimID); + } +} + +function DefaultGame::awardScoreKill(%game, %killerID) +{ + %killerID.kills++; + %game.recalcScore(%killerID); +} + +function DefaultGame::awardScoreSuicide(%game, %victimID) +{ + %victimID.suicides++; +// if (%game.SCORE_PER_SUICIDE != 0) +// messageClient(%victimID, 'MsgScoreSuicide', '\c0You have been penalized for killing yourself.'); + %game.recalcScore(%victimID); +} + +function DefaultGame::awardScoreTeamkill(%game, %victimID, %killerID) +{ + %killerID.teamKills++; + if (%game.SCORE_PER_TEAMKILL != 0) + messageClient(%killerID, 'MsgScoreTeamkill', '\c0You have been penalized for killing teammate %1.', %victimID.name); + %game.recalcScore(%killerID); +} + +function DefaultGame::awardScoreTurretTeamKill(%game, %victimID, %killerID) +{ + %killerID.teamKills++; + if (%game.SCORE_PER_TEAMKILL != 0) + messageClient(%killerID, 'MsgScoreTeamkill', '\c0You have been penalized for killing your teammate %1, with a turret.', %victimID.name); + %game.recalcScore(%killerID); +} + + +function DefaultGame::objectRepaired(%game, %obj, %objName) +{ + %item = %obj.getDataBlock().getName(); + //echo("Item repaired is a " @ %item); + switch$ (%item) + { + case generatorLarge : + %game.genOnRepaired(%obj, %objName); + case stationInventory : + %game.stationOnRepaired(%obj, %objName); + case sensorMediumPulse : + %game.sensorOnRepaired(%obj, %objName); + case sensorLargePulse : + %game.sensorOnRepaired(%obj, %objName); + case turretBaseLarge : + %game.turretOnRepaired(%obj, %objName); + case stationVehicle : %game.vStationOnRepaired(%obj, %objName); + default: //unused by current gametypes. Add more checks here if desired + } +} + +function DefaultGame::allowsProtectedStatics(%game) +{ + return false; +} + +// jff: why is game object doing this? +//Return a simple string with no extras +function DefaultGame::cleanWord(%game, %this) +{ + %length = strlen(%this); + for(%i = 0; %i < %length; %i++) + { + %char = getSubStr(%this, %i, 1); + if(%char $= "_") + { + %next = getSubStr(%this, (%i+1), 1); + if(%next $= "_") + { + %char = "'"; //apostrophe (2 chars) + %i++; + } + else + %char = " "; //space + } + %clean = (%clean @ %char); + } +} + +function DefaultGame::stationOnEnterTrigger(%game, %data, %obj, %colObj) +{ + return true; +} + +function DefaultGame::WeaponOnUse(%game, %data, %obj) +{ + return true; +} + +function DefaultGame::HandInvOnUse(%game, %data, %obj) +{ + return true; +} + +function DefaultGame::WeaponOnInventory(%game, %this, %obj, %amount) +{ + return true; +} + +function DefaultGame::ObserverOnTrigger(%game, %data, %obj, %trigger, %state) +{ + return true; +} + +// jff: why is the game being notified that a weapon is being thrown? hot potato gametype? +function DefaultGame::ShapeThrowWeapon(%game, %this) +{ + return true; +} + +function DefaultGame::leaveMissionArea(%game, %playerData, %player) +{ + %player.client.outOfBounds = true; + messageClient(%player.client, 'LeaveMissionArea', '\c1You left the mission area.~wfx/misc/warning_beep.wav'); +} + +function DefaultGame::enterMissionArea(%game, %playerData, %player) +{ + %player.client.outOfBounds = false; + messageClient(%player.client, 'EnterMissionArea', '\c1You are back in the mission area.'); +} + +//------------------------------------------------------------------------------ +// AI stubs: +//------------------------------------------------------------------------------ + +function DefaultGame::onAIDamaged(%game, %clVictim, %clAttacker, %damageType, %sourceObject) +{ +} + +function DefaultGame::onAIFriendlyFire(%game, %clVictim, %clAttacker, %damageType, %sourceObject) +{ +} + +function DefaultGame::onAIKilled(%game, %clVictim, %clKiller, %damageType, %implement) +{ + //unassign the client from any objectives + AIUnassignClient(%clVictim); + + //break the link, if this ai is controlled + aiReleaseHumanControl(%clVictim.controlByHuman, %clVictim); + + //and schedule the respawn + %clVictim.respawnThread = schedule(5000, %clVictim, "onAIRespawn", %clVictim); +} + +function DefaultGame::onAIKilledClient(%game, %clVictim, %clAttacker, %damageType, %implement) +{ + %clAttacker.setVictim(%clVictim, %clVictim.player); +} + +//------------------------------------------------------------------------------ +// Voting stuff: +//------------------------------------------------------------------------------ +function DefaultGame::sendGamePlayerPopupMenu( %game, %client, %targetClient, %key ) +{ + %isAdmin = ( %client.isAdmin || %client.isSuperAdmin ); + %isTargetSelf = ( %client == %targetClient ); + %isTargetAdmin = ( %targetClient.isAdmin || %targetClient.isSuperAdmin ); + %isTargetBot = %targetClient.isAIControlled(); + %isTargetObserver = ( %targetClient.team == 0 ); + %outrankTarget = false; + if ( %client.isSuperAdmin ) + %outrankTarget = !%targetClient.isSuperAdmin; + else if ( %client.isAdmin ) + %outrankTarget = !%targetClient.isAdmin; + + //mute options + if ( !%isTargetSelf ) + { + if ( %client.muted[%targetClient] ) + messageClient( %client, 'MsgPlayerPopupItem', "", %key, "MutePlayer", "", 'Unmute', 1); + else + messageClient( %client, 'MsgPlayerPopupItem', "", %key, "MutePlayer", "", 'Mute', 1); + + //if ( !%isTargetBot ) + if ( !%isTargetBot && %client.canListenTo( %targetClient ) ) + { + if ( %client.getListenState( %targetClient ) ) + messageClient( %client, 'MsgPlayerPopupItem', "", %key, "ListenPlayer", "", 'Disable Voice Com', 9 ); + else + messageClient( %client, 'MsgPlayerPopupItem', "", %key, "ListenPlayer", "", 'Enable Voice Com', 9 ); + } + } + + // regular vote options on players + if ( %game.scheduleVote $= "" && !%isAdmin && !%isTargetAdmin ) + { + if ( $Host::allowAdminPlayerVotes && !%isTargetBot ) + messageClient( %client, 'MsgPlayerPopupItem', "", %key, "AdminPlayer", "", 'Vote to Make Admin', 2 ); + + if ( !%isTargetSelf ) + { + messageClient( %client, 'MsgPlayerPopupItem', "", %key, "KickPlayer", "", 'Vote to Kick', 3 ); + + if ( !%isTargetBot ) + messageClient( %client, 'MsgPlayerPopupItem', "", %key, "BanPlayer", "", 'Vote to Ban', 4 ); + } + } + + // Admin only options on players: + else if ( %isAdmin ) + { + if ( !%isTargetBot && !%isTargetAdmin ) + messageClient( %client, 'MsgPlayerPopupItem', "", %key, "AdminPlayer", "", 'Make Admin', 2 ); + + if ( !%isTargetSelf && %outrankTarget ) + { + messageClient( %client, 'MsgPlayerPopupItem', "", %key, "KickPlayer", "", 'Kick', 3 ); + + if ( !%isTargetBot ) + { + messageClient( %client, 'MsgPlayerPopupItem', "", %key, "BanPlayer", "", 'Ban', 4 ); + + if ( !%isTargetObserver ) + messageClient( %client, 'MsgPlayerPopupItem', "", %key, "ToObserver", "", 'Force observer', 5 ); + } + } + + if ( %isTargetSelf || %outrankTarget ) + { + if ( %game.numTeams > 1 ) + { + if ( %isTargetObserver ) + { + %action = %isTargetSelf ? "Join " : "Change to "; + %str1 = %action @ getTaggedString( $TeamName[1] ); + %str2 = %action @ getTaggedString( $TeamName[2] ); + + messageClient( %client, 'MsgPlayerPopupItem', "", %key, "ChangeTeam", "", %str1, 6 ); + messageClient( %client, 'MsgPlayerPopupItem', "", %key, "ChangeTeam", "", %str2, 7 ); + } + else + { + %changeTo = %targetClient.team == 1 ? 2 : 1; + %str = "Switch to " @ getTaggedString( $TeamName[%changeTo] ); + %caseId = 5 + %changeTo; + + messageClient( %client, 'MsgPlayerPopupItem', "", %key, "ChangeTeam", "", %str, %caseId ); + } + } + else if ( %isTargetObserver ) + { + %str = %isTargetSelf ? 'Join the Game' : 'Add to Game'; + messageClient( %client, 'MsgPlayerPopupItem', "", %key, "JoinGame", "", %str, 8 ); + } + } + } +} + +//------------------------------------------------------------------------------ +function DefaultGame::sendGameVoteMenu( %game, %client, %key ) +{ + %multipleTeams = %game.numTeams > 1; + + // no one is going anywhere until this thing starts + if($MatchStarted) + { + // Client options: + if ( %client.team != 0 ) + { + if ( %multipleTeams ) + if( !$Host::TournamentMode ) + messageClient( %client, 'MsgVoteItem', "", %key, 'ChooseTeam', "", 'Change your Team' ); + messageClient( %client, 'MsgVoteItem', "", %key, 'MakeObserver', "", 'Become an Observer' ); + } + else + { + if(!%multipleTeams && !$Host::TournamentMode) + messageClient( %client, 'MsgVoteItem', "", %key, 'JoinGame', "", 'Join the Game' ); + } + + //%totalSlots = $Host::maxPlayers - ($HostGamePlayerCount + $HostGameBotCount); + // if( $HostGameBotCount > 0 && %totalSlots > 0 && %client.isAdmin) + //messageClient( %client, 'MsgVoteItem', "", %key, 'Addbot', "", 'Add a Bot' ); + } + + if ( %game.scheduleVote $= "" ) + { + if(!%client.isAdmin) + { + // Actual vote options: + messageClient( %client, 'MsgVoteItem', "", %key, 'VoteChangeMission', 'change the mission to', 'Vote to Change the Mission' ); + + if( $Host::TournamentMode ) + { + messageClient( %client, 'MsgVoteItem', "", %key, 'VoteFFAMode', 'Change server to Free For All.', 'Vote Free For All Mode' ); + + if(!$MatchStarted && !$CountdownStarted) + messageClient( %client, 'MsgVoteItem', "", %key, 'VoteMatchStart', 'Start Match', 'Vote to Start the Match' ); + } + else + messageClient( %client, 'MsgVoteItem', "", %key, 'VoteTournamentMode', 'Change server to Tournament.', 'Vote Tournament Mode' ); + + if ( %multipleTeams ) + { + if(!$MatchStarted && !$Host::TournamentMode) + messageClient( %client, 'MsgVoteItem', "", %key, 'ChooseTeam', "", 'Change your Team' ); + + if ( $teamDamage ) + messageClient( %client, 'MsgVoteItem', "", %key, 'VoteTeamDamage', 'disable team damage', 'Vote to Disable Team Damage' ); + else + messageClient( %client, 'MsgVoteItem', "", %key, 'VoteTeamDamage', 'enable team damage', 'Vote to Enable Team Damage' ); + } + } + else + { + // Actual vote options: + messageClient( %client, 'MsgVoteItem', "", %key, 'VoteChangeMission', 'change the mission to', 'Change the Mission' ); + + if( $Host::TournamentMode ) + { + messageClient( %client, 'MsgVoteItem', "", %key, 'VoteFFAMode', 'Change server to Free For All.', 'Free For All Mode' ); + + if(!$MatchStarted && !$CountdownStarted) + messageClient( %client, 'MsgVoteItem', "", %key, 'VoteMatchStart', 'Start Match', 'Start Match' ); + } + else + messageClient( %client, 'MsgVoteItem', "", %key, 'VoteTournamentMode', 'Change server to Tournament.', 'Tournament Mode' ); + + if ( %multipleTeams ) + { + if(!$MatchStarted) + messageClient( %client, 'MsgVoteItem', "", %key, 'ChooseTeam', "", 'Choose Team' ); + + if ( $teamDamage ) + messageClient( %client, 'MsgVoteItem', "", %key, 'VoteTeamDamage', 'disable team damage', 'Disable Team Damage' ); + else + messageClient( %client, 'MsgVoteItem', "", %key, 'VoteTeamDamage', 'enable team damage', 'Enable Team Damage' ); + } + } + } + + // Admin only options: + if ( %client.isAdmin ) + { + messageClient( %client, 'MsgVoteItem', "", %key, 'VoteChangeTimeLimit', 'change the time limit', 'Change the Time Limit' ); + messageClient( %client, 'MsgVoteItem', "", %key, 'VoteResetServer', 'reset server defaults', 'Reset the Server' ); + } +} + +//------------------------------------------------------------------------------ +function DefaultGame::sendGameTeamList( %game, %client, %key ) +{ + %teamCount = %game.numTeams; + if ( %teamCount < 2 ) + { + warn( "Team menu requested for one-team game!" ); + return; + } + + for ( %team = 1; %team - 1 < %teamCount; %team++ ) + messageClient( %client, 'MsgVoteItem', "", %key, %team, "", detag( getTaggedString( $teamName[%team] ) ) ); +} + +//------------------------------------------------------------------------------ +function DefaultGame::sendTimeLimitList( %game, %client, %key ) +{ + messageClient( %client, 'MsgVoteItem', "", %key, 10, "", '10 minutes' ); + messageClient( %client, 'MsgVoteItem', "", %key, 15, "", '15 minutes' ); + messageClient( %client, 'MsgVoteItem', "", %key, 20, "", '20 minutes' ); + messageClient( %client, 'MsgVoteItem', "", %key, 25, "", '25 minutes' ); + messageClient( %client, 'MsgVoteItem', "", %key, 30, "", '30 minutes' ); + messageClient( %client, 'MsgVoteItem', "", %key, 45, "", '45 minutes' ); + messageClient( %client, 'MsgVoteItem', "", %key, 60, "", '60 minutes' ); + messageClient( %client, 'MsgVoteItem', "", %key, 999, "", 'No time limit' ); +} + +//------------------------------------------------------------------------------ +// all global votes here +function DefaultGame::voteChangeMission(%game, %admin, %missionDisplayName, %typeDisplayName, %mission, %missionType) +{ + if(%admin) + { + messageAll('MsgAdminChangeMission', '\c2The Admin has changed the mission to %1 (%2).', %missionDisplayName, %typeDisplayName ); + logEcho("mission changed to "@%missionDisplayName@"/"@%typeDisplayName@" (admin)"); + %game.gameOver(); + loadMission(%mission, %missionType, false); + } + else + { + %totalVotes = %game.totalVotesFor + %game.totalVotesAgainst; + if(%totalVotes > 0 && (%game.totalVotesFor / (ClientGroup.getCount() - $HostGameBotCount)) > ($Host::VotePasspercent / 100)) + { + messageAll('MsgVotePassed', '\c2The mission was changed to %1 (%2) by vote.', %missionDisplayName, %typeDisplayName ); + logEcho("mission changed to "@%missionDisplayName@"/"@%typeDisplayName@" (vote)"); + %game.gameOver(); + loadMission(%mission, %missionType, false); + } + else + messageAll('MsgVoteFailed', '\c2Change mission vote did not pass: %1 percent.', mFloor(%game.totalVotesFor/(ClientGroup.getCount() - $HostGameBotCount) * 100)); + } +} + +//------------------------------------------------------------------------------ +function DefaultGame::voteTeamDamage(%game, %admin) +{ + %setto = ""; + %cause = ""; + if(%admin) + { + if($teamDamage) + { + messageAll('MsgAdminForce', '\c2The Admin has disabled team damage.'); + $teamDamage = 0; + %setto = "disabled"; + } + else + { + messageAll('MsgAdminForce', '\c2The Admin has enabled team damage.'); + $teamDamage = 1; + %setto = "enabled"; + } + %cause = "(admin)"; + } + else + { + %totalVotes = %game.totalVotesFor + %game.totalVotesAgainst; + if(%totalVotes > 0 && (%game.totalVotesFor / (ClientGroup.getCount() - $HostGameBotCount)) > ($Host::VotePasspercent / 100)) + { + if($teamDamage) + { + messageAll('MsgVotePassed', '\c2Team damage was disabled by vote.'); + $teamDamage = 0; + %setto = "disabled"; + } + else + { + messageAll('MsgVotePassed', '\c2Team damage was enabled by vote.'); + $teamDamage = 1; + %setto = "enabled"; + } + %cause = "(vote)"; + } + else + { + if($teamDamage) + messageAll('MsgVoteFailed', '\c2Disable team damage vote did not pass: %1 percent.', mFloor(%game.totalVotesFor/(ClientGroup.getCount() - $HostGameBotCount) * 100)); + else + messageAll('MsgVoteFailed', '\c2Enable team damage vote did not pass: %1 percent.', mFloor(%game.totalVotesFor/(ClientGroup.getCount() - $HostGameBotCount) * 100)); + } + } + if(%setto !$= "") + logEcho("team damage "@%setto SPC %cause); +} + +//------------------------------------------------------------------------------ +function DefaultGame::voteTournamentMode( %game, %admin, %missionDisplayName, %typeDisplayName, %mission, %missionType ) +{ + %cause = ""; + if (%admin) + { + messageAll( 'MsgAdminForce', '\c2The Admin has switched the server to Tournament mode (%1).', %missionDisplayName ); + setModeTournament( %mission, %missionType ); + %cause = "(admin)"; + } + else + { + %totalVotes = %game.totalVotesFor + %game.totalVotesAgainst; + if(%totalVotes > 0 && (%game.totalVotesFor / (ClientGroup.getCount() - $HostGameBotCount)) > ($Host::VotePasspercent / 100)) + { + messageAll('MsgVotePassed', '\c2Server switched to Tournament mode by vote (%1): %2 percent.', %missionDisplayName, mFloor(%game.totalVotesFor/(ClientGroup.getCount() - $HostGameBotCount) * 100)); + setModeTournament( %mission, %missionType ); + %cause = "(vote)"; + } + else + messageAll('MsgVoteFailed', '\c2Tournament mode vote did not pass: %1 percent.', mFloor(%game.totalVotesFor/(ClientGroup.getCount() - $HostGameBotCount) * 100)); + } + if(%cause !$= "") + logEcho("tournament mode set "@%cause); +} + +//------------------------------------------------------------------------------ +function DefaultGame::voteMatchStart( %game, %admin) +{ + %cause = ""; + %ready = forceTourneyMatchStart(); + if(%admin) + { + if(!%ready) + { + messageClient( %client, 'msgClient', "\c2No players are ready yet."); + return; + } + else + { + messageAll('msgMissionStart', 'The admin has forced the match to start.'); + %cause = "(admin)"; + startTourneyCountdown(); + } + } + else + { + if(!%ready) + { + messageAll( 'msgClient', "\c2Vote passed to start Match, but no players are ready yet."); + return; + } + else + { + %totalVotes = %game.totalVotesFor + %game.totalVotesAgainst; + if(%totalVotes > 0 && (%game.totalVotesFor / (ClientGroup.getCount() - $HostGameBotCount)) > ($Host::VotePasspercent / 100)) + { + messageAll('MsgVotePassed', '\c2The match has been started by vote: %1 percent.', mFloor(%game.totalVotesFor/(ClientGroup.getCount() - $HostGameBotCount) * 100)); + startTourneyCountdown(); + } + else + messageAll('MsgVoteFailed', '\c2Start Match vote did not pass: %1 percent.', mFloor(%game.totalVotesFor/(ClientGroup.getCount() - $HostGameBotCount) * 100)); + } + } + + if(%cause !$= "") + logEcho("start match "@%cause); +} + +//------------------------------------------------------------------------------ +function DefaultGame::voteFFAMode( %game, %admin, %client ) +{ + %cause = ""; + %name = getTaggedString(%client.name); + + if (%admin) + { + messageAll('MsgAdminForce', "\c2The Admin has switched the server to Free For All mode.", %client); + setModeFFA($CurrentMission, $CurrentMissionType); + %cause = "(admin)"; + } + else + { + %totalVotes = %game.totalVotesFor + %game.totalVotesAgainst; + if(%totalVotes > 0 && (%game.totalVotesFor / (ClientGroup.getCount() - $HostGameBotCount)) > ($Host::VotePasspercent / 100)) + { + messageAll('MsgVotePassed', "\c2Server switched to Free For All mode by vote.", %client); + setModeFFA($CurrentMission, $CurrentMissionType); + %cause = "(vote)"; + } + else + messageAll('MsgVoteFailed', '\c2Free For All mode vote did not pass: %1 percent.', mFloor(%game.totalVotesFor/(ClientGroup.getCount() - $HostGameBotCount) * 100)); + } + if(%cause !$= "") + logEcho("free for all set "@%cause); +} + +//------------------------------------------------------------------------------ +function DefaultGame::voteChangeTimeLimit( %game, %admin, %newLimit ) +{ + %cause = ""; + if ( %admin ) + { + messageAll( 'AdminSetTimeLimit', '\c2The Admin changed the mission time limit to %1 minutes.', %newLimit ); + $Host::TimeLimit = %newLimit; + %cause = "(admin)"; + } + else + { + %totalVotes = %game.totalVotesFor + %game.totalVotesAgainst; + if(%totalVotes > 0 && (%game.totalVotesFor / (ClientGroup.getCount() - $HostGameBotCount)) > ($Host::VotePasspercent / 100)) + { + messageAll('MsgVotePassed', '\c2The mission time limit was set to %1 minutes by vote.', %newLimit); + $Host::TimeLimit = %newLimit; + %cause = "(vote)"; + } + else + messageAll('MsgVoteFailed', '\c2The vote to change the mission time limit did not pass: %1 percent.', mFloor(%game.totalVotesFor/(ClientGroup.getCount() - $HostGameBotCount) * 100)); + } + + //if the time limit was actually changed... + if(%cause !$= "") + { + logEcho("time limit set to "@%newLimit SPC %cause); + + //if the match has been started, reset the end of match countdown + if ($matchStarted) + { + //schedule the end of match countdown + %elapsedTimeMS = getSimTime() - $missionStartTime; + %curTimeLeftMS = ($Host::TimeLimit * 60 * 1000) - %elapsedTimeMS; + //error("time limit="@$Host::TimeLimit@", elapsed="@(%elapsedTimeMS / 60000)@", curtimeleftms="@%curTimeLeftMS); + CancelEndCountdown(); + EndCountdown(%curTimeLeftMS); + %game.checkTimeLimit(true); + } + } +} + +//------------------------------------------------------------------------------ +function DefaultGame::voteResetServer( %game, %admin, %client ) +{ + %cause = ""; + if ( %admin ) + { + messageAll( 'AdminResetServer', '\c2The Admin has reset the server.' ); + resetServerDefaults(); + %cause = "(admin)"; + } + else + { + %totalVotes = %game.totalVotesFor + %game.totalVotesAgainst; + if(%totalVotes > 0 && (%game.totalVotesFor / (ClientGroup.getCount() - $HostGameBotCount)) > ($Host::VotePasspercent / 100)) + { + messageAll('MsgVotePassed', '\c2The Server has been reset by vote.' ); + resetServerDefaults(); + %cause = "(vote)"; + } + else + messageAll('MsgVoteFailed', '\c2The vote to reset Server to defaults did not pass: %1 percent.', mFloor(%game.totalVotesFor/(ClientGroup.getCount() - $HostGameBotCount) * 100)); + } + if(%cause !$= "") + logEcho("server reset "@%cause); +} + +//------------------------------------------------------------------------------ +// all team based votes here +function DefaultGame::voteKickPlayer(%game, %admin, %client) +{ + %cause = ""; + %name = %client.nameBase; + if(%admin) + { + kick(%client, %admin); + %cause = "(admin)"; + } + else + { + %team = %client.team; + %totalVotes = %game.votesFor[%team] + %game.votesAgainst[%team]; + if(%totalVotes > 0 && (%game.votesFor[%team] / %totalVotes) > ($Host::VotePasspercent / 100)) + { + kick(%client, %admin); + %cause = "(vote)"; + } + else + messageAll('MsgVoteFailed', '\c2Kick player vote did not pass'); + } + if(%cause !$= "") + logEcho(%name@" (cl "@%client@") kicked "@%cause); +} + +//------------------------------------------------------------------------------ +function DefaultGame::voteBanPlayer(%game, %admin, %client) +{ + %cause = ""; + %name = %client.nameBase; + if(%admin) + { + ban(%client, %admin); + %cause = "(admin)"; + } + else + { + %team = %client.team; + %totalVotes = %game.votesFor[%team] + %game.votesAgainst[%team]; + if((%totalVotes > 0) && (%game.votesFor[%team] / %totalVotes) > ($Host::VotePasspercent / 100)) + { + ban(%client, %admin); + %cause = "(vote)"; + } + else + messageAll('MsgVoteFailed', '\c2Ban player vote did not pass.'); + } + if(%cause !$= "") + logEcho(%name@" (cl "@%client@") banned "@%cause); +} + +//------------------------------------------------------------------------------ +function DefaultGame::voteAdminPlayer(%game, %admin, %client) +{ + %cause = ""; + %name = getTaggedString(%client.name); + + if (%admin) + { + messageAll('MsgAdminAdminPlayer', "\c2The Admin made " @ %name @ " an admin.", %client); + %client.isAdmin = 1; + %cause = "(admin)"; + } + else + { + %totalVotes = %game.totalVotesFor + %game.totalVotesAgainst; + if(%totalVotes > 0 && (%game.totalVotesFor / (ClientGroup.getCount() - $HostGameBotCount)) > ($Host::VotePasspercent / 100)) + { + messageAll('MsgAdminPlayer', "\c2" @ %name @ " was made an admin by vote."); + %client.isAdmin = 1; + %cause = "(vote)"; + } + else + messageAll('MsgVoteFailed', '\c2Admin vote did not pass.'); + } + if(%cause !$= "") + logEcho(%client.nameBase@" (cl "@%client@") made admin "@%cause); +} + +//------------------------------------------------------------------------------ +function DefaultGame::processGameLink(%game, %client, %arg1, %arg2, %arg3, %arg4, %arg5) +{ + //the default behavior when clicking on a game link is to start observing that client + %targetClient = %arg1; + if ((%client.team == 0) && isObject(%targetClient) && (%targetClient.team != 0)) + { + %prevObsClient = %client.observeClient; + serverCmdObserveClient(%client, %targetClient); + displayObserverHud(%client, %targetClient); + if (%targetClient != %prevObsClient) + { + messageClient(%targetClient, 'Observer', '\c1%1 is now observing you.', %client.name); + messageClient(%prevObsClient, 'ObserverEnd', '\c1%1 is no longer observing you.', %client.name); + } + } +} + +//------------------------------------------------------------------------------ +$ScoreHudMaxVisible = 19; +function DefaultGame::updateScoreHud(%game, %client, %tag) +{ + if (Game.numTeams > 1) + { + // Send header: + messageClient( %client, 'SetScoreHudHeader', "", '\t%1%2\t%3%4', + $TeamName[1], $TeamScore[1], $TeamName[2], $TeamScore[2] ); + + // Send subheader: + messageClient( %client, 'SetScoreHudSubheader', "", '\tPLAYERS (%1)SCORE\tPLAYERS (%2)SCORE', + $TeamRank[1, count], $TeamRank[2, count] ); + + %index = 0; + while ( true ) + { + if ( %index >= $TeamRank[1, count] && %index >= $TeamRank[2, count] ) + break; + + //get the team1 client info + %team1Client = ""; + %team1ClientScore = ""; + if ( %index < $TeamRank[1, count] ) + { + %team1Client = $TeamRank[1, %index]; + %team1ClientScore = %team1Client.score $= "" ? 0 : %team1Client.score; + %col1Style = %team1Client == %client ? "" : ""; + } + + //get the team2 client info + %team2Client = ""; + %team2ClientScore = ""; + if ( %index < $TeamRank[2, count] ) + { + %team2Client = $TeamRank[2, %index]; + %team2ClientScore = %team2Client.score $= "" ? 0 : %team2Client.score; + %col2Style = %team2Client == %client ? "" : ""; + } + + //if the client is not an observer, send the message + if (%client.team != 0) + { + messageClient( %client, 'SetLineHud', "", %tag, %index, '\t%5%1%2\t%6%3%4', + %team1Client.name, %team1ClientScore, %team2Client.name, %team2ClientScore, %col1Style, %col2Style ); + } + //else for observers, create an anchor around the player name so they can be observed + else + { + messageClient( %client, 'SetLineHud', "", %tag, %index, '\t%5%1%2\t%6%3%4', + %team1Client.name, %team1ClientScore, %team2Client.name, %team2ClientScore, %col1Style, %col2Style, %team1Client, %team2Client ); + } + + %index++; + } + + //clear the rest of Hud so we don't get old lines hanging around... + messageClient( %client, 'ClearHud', "", %tag, %index ); + } + else + { + //tricky stuff here... use two columns if we have more than 15 clients... + %numClients = $TeamRank[0, count]; + if ( %numClients > $ScoreHudMaxVisible ) + %numColumns = 2; + + // Clear header: + messageClient( %client, 'SetScoreHudHeader', "", "" ); + + // Send header: + if (%numColumns == 2) + messageClient(%client, 'SetScoreHudSubheader', "", '\tPLAYERSCORE\tPLAYERSCORE'); + else + messageClient(%client, 'SetScoreHudSubheader', "", '\tPLAYERSCORE'); + + %countMax = %numClients; + if ( %countMax > ( 2 * $ScoreHudMaxVisible ) ) + { + if ( %countMax & 1 ) + %countMax++; + %countMax = %countMax / 2; + } + else if ( %countMax > $ScoreHudMaxVisible ) + %countMax = $ScoreHudMaxVisible; + + for ( %index = 0; %index < %countMax; %index++ ) + { + //get the client info + %col1Client = $TeamRank[0, %index]; + %col1ClientScore = %col1Client.score $= "" ? 0 : %col1Client.score; + %col1Style = %col1Client == %client ? "" : ""; + + //see if we have two columns + if ( %numColumns == 2 ) + { + %col2Client = ""; + %col2ClientScore = ""; + %col2Style = ""; + + //get the column 2 client info + %col2Index = %index + %countMax; + if ( %col2Index < %numClients ) + { + %col2Client = $TeamRank[0, %col2Index]; + %col2ClientScore = %col2Client.score $= "" ? 0 : %col2Client.score; + %col2Style = %col2Client == %client ? "" : ""; + } + } + + //if the client is not an observer, send the message + if (%client.team != 0) + { + if ( %numColumns == 2 ) + messageClient(%client, 'SetLineHud', "", %tag, %index, '\t%5%1%2\t%6%3%4', + %col1Client.name, %col1ClientScore, %col2Client.name, %col2ClientScore, %col1Style, %col2Style ); + else + messageClient( %client, 'SetLineHud', "", %tag, %index, '\t%3%1%2', + %col1Client.name, %col1ClientScore, %col1Style ); + } + //else for observers, create an anchor around the player name so they can be observed + else + { + if ( %numColumns == 2 ) + messageClient(%client, 'SetLineHud', "", %tag, %index, '\t%5%1%2\t%6%3%4', + %col1Client.name, %col1ClientScore, %col2Client.name, %col2ClientScore, %col1Style, %col2Style, %col1Client, %col2Client ); + else + messageClient( %client, 'SetLineHud', "", %tag, %index, '\t%3%1%2', + %col1Client.name, %col1ClientScore, %col1Style, %col1Client ); + } + } + + //clear the rest of Hud so we don't get old lines hanging around... + messageClient( %client, 'ClearHud', "", %tag, %index ); + } +} + +//------------------------------------------------------------------------------ +function UpdateClientTimes(%time) +{ + %secondsLeft = %time / 1000; + messageAll('MsgSystemClock', "", (%secondsLeft / 60), %time); +} + +//------------------------------------------------------------------------------ +function notifyMatchStart(%time) +{ + %seconds = mFloor(%time / 1000); + if (%seconds > 2) + MessageAll('MsgMissionStart', '\c2Match starts in %1 seconds.~wfx/misc/hunters_%1.wav', %seconds); + else if (%seconds == 2) + MessageAll('MsgMissionStart', '\c2Match starts in 2 seconds.~wvoice/announcer/ann.match_begins.wav'); + else if (%seconds == 1) + MessageAll('MsgMissionStart', '\c2Match starts in 1 second.'); + UpdateClientTimes(%time); +} + +//------------------------------------------------------------------------------ +function notifyMatchEnd(%time) +{ + %seconds = mFloor(%time / 1000); + if (%seconds > 1) + MessageAll('MsgMissionEnd', '\c2Match ends in %1 seconds.~wfx/misc/hunters_%1.wav', %seconds); + else if (%seconds == 1) + MessageAll('MsgMissionEnd', '\c2Match ends in 1 second.~wfx/misc/hunters_1.wav'); + UpdateClientTimes(%time); +} + +//------------------------------------------------------------------------------ +//AI FUNCTIONS +function DefaultGame::AIChooseGameObjective(%game, %client) +{ + AIChooseObjective(%client); +} + +//------------------------------------------------------------------------------ +function DefaultGame::getServerStatusString(%game) +{ + %status = %game.numTeams; + for ( %team = 1; %team - 1 < %game.numTeams; %team++ ) + { + %score = isObject( $teamScore[%team] ) ? $teamScore[%team] : 0; + %teamStr = getTaggedString( $teamName[%team] ) TAB %score; + %status = %status NL %teamStr; + } + + %status = %status NL ClientGroup.getCount(); + for ( %i = 0; %i < ClientGroup.getCount(); %i++ ) + { + %cl = ClientGroup.getObject( %i ); + %score = %cl.score $= "" ? 0 : %cl.score; + %playerStr = getTaggedString( %cl.name ) TAB getTaggedString( $teamName[%cl.team] ) TAB %score; + %status = %status NL %playerStr; + } + return( %status ); +} + +//------------------------------------------------------------------------------ +function DefaultGame::OptionsDlgSleep( %game ) +{ + // ignore in the default game... +} + diff --git a/base/scripts/deployables.cs b/base/scripts/deployables.cs new file mode 100644 index 0000000..4eb4341 --- /dev/null +++ b/base/scripts/deployables.cs @@ -0,0 +1,1196 @@ +// deployable objects script +// +// remote pulse sensor, remote motion sensor, remote turrets (indoor +// and outdoor), remote inventory station, remote ammo station +// Note: cameras are treated as grenades, not "regular" deployables + +$TurretIndoorSpaceRadius = 20; // deployed turrets must be this many meters apart +$TurretIndoorSphereRadius = 50; // radius for turret frequency check +$TurretIndoorMaxPerSphere = 4; // # of turrets allowed in above radius + +$TurretOutdoorSpaceRadius = 25; // deployed turrets must be this many meters apart +$TurretOutdoorSphereRadius = 60; // radius for turret frequency check +$TurretOutdoorMaxPerSphere = 4; // # of turrets allowed in above radius + +$TeamDeployableMax[InventoryDeployable] = 5; +$TeamDeployableMax[TurretIndoorDeployable] = 10; +$TeamDeployableMax[TurretOutdoorDeployable] = 10; +$TeamDeployableMax[PulseSensorDeployable] = 15; +$TeamDeployableMax[MotionSensorDeployable] = 15; + +$TeamDeployableMin[TurretIndoorDeployable] = 4; +$TeamDeployableMin[TurretOutdoorDeployable] = 4; + +$NotDeployableReason::None = 0; +$NotDeployableReason::MaxDeployed = 1; +$NotDeployableReason::NoSurfaceFound = 2; +$NotDeployableReason::SlopeTooGreat = 3; +$NotDeployableReason::SelfTooClose = 4; +$NotDeployableReason::ObjectTooClose = 5; +$NotDeployableReason::NoTerrainFound = 6; +$NotDeployableReason::NoInteriorFound = 7; +$NotDeployableReason::TurretTooClose = 8; +$NotDeployableReason::TurretSaturation = 9; + +$MinDeployableDistance = 0.5; +$MaxDeployableDistance = 4.0; //meters from body + + +// -------------------------------------------- +// sound datablocks +// -------------------------------------------- + +datablock AudioProfile(TurretDeploySound) +{ + fileName = "fx/packs/turret_place.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(SensorDeploySound) +{ + fileName = "fx/powered/sensor_activate.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(MotionSensorDeploySound) +{ + fileName = "fx/powered/motion_sensor_activate.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(StationDeploySound) +{ + fileName = "fx/packs/inventory_deploy.wav"; + description = AudioClose3d; + preload = true; +}; + +// -------------------------------------------- +// deployable debris definition + +datablock DebrisData( DeployableDebris ) +{ + explodeOnMaxBounce = false; + + elasticity = 0.40; + friction = 0.5; + + lifetime = 17.0; + lifetimeVariance = 0.0; + + minSpinSpeed = 60; + maxSpinSpeed = 600; + + numBounces = 10; + bounceVariance = 0; + + staticOnMaxBounce = true; + + useRadiusMass = true; + baseRadius = 0.2; + + velocity = 5.0; + velocityVariance = 2.5; + +}; + + +// -------------------------------------------- +// deployable inventory station + +datablock StaticShapeData(DeployedStationInventory) : StaticShapeDamageProfile +{ + className = Station; + shapeFile = "deploy_inventory.dts"; + maxDamage = 0.70; + destroyedLevel = 0.70; + disabledLevel = 0.42; + explosion = DeployablesExplosion; + + dynamicType = $TypeMasks::StationObjectType; + isShielded = true; + energyPerDamagePoint = 110; + maxEnergy = 50; + rechargeRate = 0.20; + renderWhenDestroyed = false; + doesRepair = true; + + cmdCategory = "DSupport"; + cmdIcon = CMDStationIcon; + cmdMiniIconName = "commander/MiniIcons/com_inventory_grey"; + targetNameTag = 'Deployable'; + targetTypeTag = 'Station'; + + debrisShapeName = "debris_generic_small.dts"; + debris = DeployableDebris; +}; + +datablock ShapeBaseImageData(InventoryDeployableImage) +{ + mass = 15; + emap = true; + + shapeFile = "pack_deploy_inventory.dts"; + item = InventoryDeployable; + mountPoint = 1; + offset = "0 0 0"; + deployed = DeployedStationInventory; + + stateName[0] = "Idle"; + stateTransitionOnTriggerDown[0] = "Activate"; + + stateName[1] = "Activate"; + stateScript[1] = "onActivate"; + stateTransitionOnTriggerUp[1] = "Idle"; + + isLarge = true; + maxDepSlope = 30; + deploySound = StationDeploySound; +}; + +datablock ItemData(InventoryDeployable) +{ + className = Pack; + catagory = "Deployables"; + shapeFile = "pack_deploy_inventory.dts"; + mass = 3.0; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 1; + rotate = false; + image = "InventoryDeployableImage"; + pickUpName = "an inventory pack"; + + computeCRC = true; + emap = true; + +}; + +// -------------------------------------------- +// deployable motion sensor + +datablock SensorData(DeployMotionSensorObj) +{ + detects = true; + detectsUsingLOS = true; + detectsActiveJammed = false; + detectsPassiveJammed = true; + detectsCloaked = true; + detectionPings = false; + detectMinVelocity = 2; + detectRadius = 60; +}; + +datablock StaticShapeData(DeployedMotionSensor) : StaticShapeDamageProfile +{ + className = Sensor; + shapeFile = "deploy_sensor_motion.dts"; + maxDamage = 0.6; + destroyedLevel = 0.6; + disabledLevel = 0.4; + explosion = DeployablesExplosion; + dynamicType = $TypeMasks::SensorObjectType; + + cmdCategory = "DSupport"; + cmdIcon = CMDSensorIcon; + cmdMiniIconName = "commander/MiniIcons/com_deploymotionsensor"; + targetNameTag = 'Deployable Motion'; + targetTypeTag = 'Sensor'; + sensorData = DeployMotionSensorObj; + sensorRadius = DeployMotionSensorObj.detectRadius; + sensorColor = "9 136 255"; + deployAmbientThread = true; + + debrisShapeName = "debris_generic_small.dts"; + debris = DeployableDebris; +}; + +datablock ShapeBaseImageData(MotionSensorDeployableImage) +{ + shapeFile = "pack_deploy_sensor_motion.dts"; + item = MotionSensorDeployable; + mountPoint = 1; + offset = "0 0 0"; + deployed = DeployedMotionSensor; + + stateName[0] = "Idle"; + stateTransitionOnTriggerDown[0] = "Activate"; + + stateName[1] = "Activate"; + stateScript[1] = "onActivate"; + stateTransitionOnTriggerUp[1] = "Idle"; + + maxDepSlope = 360; + deploySound = MotionSensorDeploySound; + emap = true; +}; + +datablock ItemData(MotionSensorDeployable) +{ + className = Pack; + catagory = "Deployables"; + shapeFile = "pack_deploy_sensor_motion.dts"; + mass = 2.0; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 1; + rotate = false; + image = "MotionSensorDeployableImage"; + pickUpName = "a motion sensor pack"; + + computeCRC = true; + emap = true; + + //maxSensors = 3; + maxSensors = 2; +}; + +// -------------------------------------------- +// deployable pulse sensor + +datablock SensorData(DeployPulseSensorObj) +{ + detects = true; + detectsUsingLOS = true; + detectsPassiveJammed = false; + detectsCloaked = false; + detectionPings = true; + detectRadius = 120; +}; + +datablock StaticShapeData(DeployedPulseSensor) : StaticShapeDamageProfile +{ + className = Sensor; + shapeFile = "deploy_sensor_pulse.dts"; + maxDamage = 0.6; + destroyedLevel = 0.6; + disabledLevel = 0.4; + explosion = DeployablesExplosion; + dynamicType = $TypeMasks::SensorObjectType; + + cmdCategory = "DSupport"; + cmdIcon = CMDSensorIcon; + cmdMiniIconName = "commander/MiniIcons/com_deploypulsesensor"; + targetNameTag = 'Deployable'; + targetTypeTag = 'Pulse Sensor'; + sensorData = DeployPulseSensorObj; + sensorRadius = DeployPulseSensorObj.detectRadius; + sensorColor = "255 194 9"; + deployAmbientThread = true; + + debrisShapeName = "debris_generic_small.dts"; + debris = DeployableDebris; +}; + +datablock ShapeBaseImageData(PulseSensorDeployableImage) +{ + shapeFile = "pack_deploy_sensor_pulse.dts"; + item = PulseSensorDeployable; + mountPoint = 1; + offset = "0 0 0"; + deployed = DeployedPulseSensor; + + stateName[0] = "Idle"; + stateTransitionOnTriggerDown[0] = "Activate"; + + stateName[1] = "Activate"; + stateScript[1] = "onActivate"; + stateTransitionOnTriggerUp[1] = "Idle"; + deploySound = SensorDeploySound; + + maxDepSlope = 40; + emap = true; +}; + +datablock ItemData(PulseSensorDeployable) +{ + className = Pack; + catagory = "Deployables"; + shapeFile = "pack_deploy_sensor_pulse.dts"; + mass = 2.0; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 1; + rotate = false; + image = "PulseSensorDeployableImage"; + pickUpName = "a pulse sensor pack"; + + computeCRC = true; + emap = true; + + maxSensors = 2; +}; + +// -------------------------------------------- +// deployable outdoor turret + +datablock ShapeBaseImageData(TurretOutdoorDeployableImage) +{ + mass = 15; + + shapeFile = "pack_deploy_turreto.dts"; + item = TurretOutdoorDeployable; + mountPoint = 1; + offset = "0 0 0"; + deployed = TurretDeployedOutdoor; + + stateName[0] = "Idle"; + stateTransitionOnTriggerDown[0] = "Activate"; + + stateName[1] = "Activate"; + stateScript[1] = "onActivate"; + stateTransitionOnTriggerUp[1] = "Idle"; + + maxDamage = 4.5; + destroyedLevel = 4.5; + disabledLevel = 4.0; + + isLarge = true; + emap = true; + + maxDepSlope = 40; + deploySound = TurretDeploySound; +}; + +datablock ItemData(TurretOutdoorDeployable) +{ + className = Pack; + catagory = "Deployables"; + shapeFile = "pack_deploy_turreto.dts"; + mass = 3.0; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 1; + rotate = false; + image = "TurretOutdoorDeployableImage"; + pickUpName = "an outdoor turret pack"; + + computeCRC = true; + emap = true; + +}; + +// -------------------------------------------- +// deployable indoor turret (3 varieties -- floor, wall and ceiling) + +datablock ShapeBaseImageData(TurretIndoorDeployableImage) +{ + mass = 15; + + shapeFile = "pack_deploy_turreti.dts"; + item = TurretIndoorDeployable; + mountPoint = 1; + offset = "0 0 0"; + + stateName[0] = "Idle"; + stateTransitionOnTriggerDown[0] = "Activate"; + + stateName[1] = "Activate"; + stateScript[1] = "onActivate"; + stateTransitionOnTriggerUp[1] = "Idle"; + + isLarge = true; + emap = true; + + maxDepSlope = 360; + deploySound = TurretDeploySound; +}; + +datablock ItemData(TurretIndoorDeployable) +{ + className = Pack; + catagory = "Deployables"; + shapeFile = "pack_deploy_turreti.dts"; + mass = 3.0; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 1; + rotate = false; + image = "TurretIndoorDeployableImage"; + pickUpName = "an indoor turret pack"; + + computeCRC = true; + emap = true; + +}; + +// -------------------------------------------- +// miscellaneous yet handy functions + +function posFromTransform(%transform) +{ + // the first three words of an object's transform are the object's position + %position = getWord(%transform, 0) @ " " @ getWord(%transform, 1) @ " " @ getWord(%transform, 2); + return %position; +} + +function rotFromTransform(%transform) +{ + // the last four words of an object's transform are the object's rotation + %rotation = getWord(%transform, 3) @ " " @ getWord(%transform, 4) @ " " @ getWord(%transform, 5) @ " " @ getWord(%transform, 6); + return %rotation; +} + +function posFromRaycast(%transform) +{ + // the 2nd, 3rd, and 4th words returned from a successful raycast call are the position of the point + %position = getWord(%transform, 1) @ " " @ getWord(%transform, 2) @ " " @ getWord(%transform, 3); + return %position; +} + +function normalFromRaycast(%transform) +{ + // the 5th, 6th and 7th words returned from a successful raycast call are the normal of the surface + %norm = getWord(%transform, 4) @ " " @ getWord(%transform, 5) @ " " @ getWord(%transform, 6); + return %norm; +} + +function addToDeployGroup(%object) +{ + // all deployables should go into a special group for AI purposes + %depGroup = nameToID("MissionCleanup/Deployables"); + if(%depGroup <= 0) { + %depGroup = new SimGroup("Deployables"); + MissionCleanup.add(%depGroup); + } + %depGroup.add(%object); +} + +function Deployables::searchView(%obj, %searchRange, %mask) +{ + // get the eye vector and eye transform of the player + %eyeVec = %obj.getEyeVector(); + %eyeTrans = %obj.getEyeTransform(); + + // extract the position of the player's camera from the eye transform (first 3 words) + %eyePos = posFromTransform(%eyeTrans); + + // normalize the eye vector + %nEyeVec = VectorNormalize(%eyeVec); + + // scale (lengthen) the normalized eye vector according to the search range + %scEyeVec = VectorScale(%nEyeVec, %searchRange); + + // add the scaled & normalized eye vector to the position of the camera + %eyeEnd = VectorAdd(%eyePos, %scEyeVec); + + // see if anything gets hit + %searchResult = containerRayCast(%eyePos, %eyeEnd, %mask, 0); + + return %searchResult; +} + +//-----------------------// +// Deployable Procedures // +//-----------------------// + +//------------------------------------------------- +function ShapeBaseImageData::testMaxDeployed(%item, %plyr) +{ + if(%item.item $= TurretOutdoorDeployable || %item.item $= TurretIndoorDeployable) + %itemCount = countTurretsAllowed(%item.item); + else + %itemCount = $TeamDeployableMax[%item.item]; + + return $TeamDeployedCount[%plyr.team, %item.item] >= %itemCount; +} + +//------------------------------------------------- +function ShapeBaseImageData::testNoSurfaceInRange(%item, %plyr) +{ + return ! Deployables::searchView(%plyr, $MaxDeployableDistance, $TypeMasks::TerrainObjectType | $TypeMasks::InteriorObjectType); +} + +//------------------------------------------------- +function ShapeBaseImageData::testSlopeTooGreat(%item) +{ + if (%item.surface) + { + return getTerrainAngle(%item.surfaceNrm) > %item.maxDepSlope; + } +} + +//------------------------------------------------- +function ShapeBaseImageData::testSelfTooClose(%item, %plyr) +{ + InitContainerRadiusSearch(%item.surfacePt, $MinDeployableDistance, $TypeMasks::PlayerObjectType); + + return containerSearchNext() == %plyr; +} + +//------------------------------------------------- +function ShapeBaseImageData::testObjectTooClose(%item) +{ + return !ContainerBoxEmpty ( + $TypeMasks::VehicleObjectType | $TypeMasks::MoveableObjectType | + $TypeMasks::StaticShapeObjectType | $TypeMasks::StaticTSObjectType | + $TypeMasks::ForceFieldObjectType | $TypeMasks::ItemObjectType | + $TypeMasks::PlayerObjectType | $TypeMasks::TurretObjectType, + %item.surfacePt, $MinDeployableDistance); +} + + +//------------------------------------------------- +function TurretOutdoorDeployableImage::testNoTerrainFound(%item) +{ + return %item.surface.getClassName() !$= TerrainBlock; +} + +function ShapeBaseImageData::testNoTerrainFound(%item, %surface) +{ + //don't check this for non-Landspike turret deployables +} + +//------------------------------------------------- +function TurretIndoorDeployableImage::testNoInteriorFound(%item) +{ + return %item.surface.getClassName() !$= InteriorInstance; +} + +function ShapeBaseImageData::testNoInteriorFound(%item, %surface) +{ + //don't check this for non-Clasping turret deployables +} + +//------------------------------------------------- +function TurretIndoorDeployableImage::testTurretTooClose(%item, %plyr) +{ + InitContainerRadiusSearch(%item.surfacePt, $TurretIndoorSpaceRadius, $TypeMasks::StaticShapeObjectType); + + // old function was only checking whether the first object found was a turret -- also wasn't checking + // which team the object was on + %turretInRange = false; + while((%found = containerSearchNext()) != 0) + { + %foundName = %found.getDataBlock().getName(); + if((%foundname $= TurretDeployedFloorIndoor) || (%foundName $= TurretDeployedWallIndoor) || (%foundName $= TurretDeployedCeilingIndoor) || (%foundName $= TurretDeployedOutdoor)) + if (%found.team == %plyr.team) + { + %turretInRange = true; + break; + } + } + return %turretInRange; +} + +function TurretOutdoorDeployableImage::testTurretTooClose(%item, %plyr) +{ + InitContainerRadiusSearch(%item.surfacePt, $TurretOutdoorSpaceRadius, $TypeMasks::StaticShapeObjectType); + + // old function was only checking whether the first object found was a turret -- also wasn't checking + // which team the object was on + %turretInRange = false; + while((%found = containerSearchNext()) != 0) + { + %foundName = %found.getDataBlock().getName(); + if((%foundname $= TurretDeployedFloorIndoor) || (%foundName $= TurretDeployedWallIndoor) || (%foundName $= TurretDeployedCeilingIndoor) || (%foundName $= TurretDeployedOutdoor)) + if (%found.team == %plyr.team) + { + %turretInRange = true; + break; + } + } + return %turretInRange; +} + +function ShapeBaseImageData::testTurretTooClose(%item, %plyr) +{ + //don't check this for non-turret deployables +} + +//------------------------------------------------- +function TurretIndoorDeployableImage::testTurretSaturation(%item) +{ + %highestDensity = 0; + InitContainerRadiusSearch(%item.surfacePt, $TurretIndoorSphereRadius, $TypeMasks::StaticShapeObjectType); + %found = containerSearchNext(); + while(%found) + { + %foundName = %found.getDataBlock().getName(); + if ((%foundName $= TurretDeployedFloorIndoor) || (%foundName $= TurretDeployedWallIndoor) || (%foundName $= TurretDeployedCeilingIndoor) || (%foundName $= TurretDeployedOutdoor)) + { + //found one + %numTurretsNearby++; + + %nearbyDensity = testNearbyDensity(%found, $TurretIndoorSphereRadius); + if (%nearbyDensity > %highestDensity) + %highestDensity = %nearbyDensity; + } + %found = containerSearchNext(); + } + + if (%numTurretsNearby > %highestDensity) + %highestDensity = %numTurretsNearby; + return %highestDensity > $TurretIndoorMaxPerSphere; +} + +function TurretOutdoorDeployableImage::testTurretSaturation(%item) +{ + %highestDensity = 0; + InitContainerRadiusSearch(%item.surfacePt, $TurretOutdoorSphereRadius, $TypeMasks::StaticShapeObjectType); + %found = containerSearchNext(); + while(%found) + { + %foundName = %found.getDataBlock().getName(); + if ((%foundName $= TurretDeployedFloorIndoor) || (%foundName $= TurretDeployedWallIndoor) || (%foundName $= TurretDeployedCeilingIndoor) || (%foundName $= TurretDeployedOutdoor)) + { + //found one + %numTurretsNearby++; + + %nearbyDensity = testNearbyDensity(%found, $TurretOutdoorSphereRadius); + if (%nearbyDensity > %highestDensity) + %highestDensity = %nearbyDensity; + } + %found = containerSearchNext(); + } + + if (%numTurretsNearby > %highestDensity) + %highestDensity = %numTurretsNearby; + return %highestDensity > $TurretOutdoorMaxPerSphere; +} + +function ShapeBaseImageData::testTurretSaturation(%item, %surfacePt) +{ + //don't check this for non-turret deployables +} + +function testNearbyDensity(%item, %radius) +{ + //this checks how many turrets are in adjacent spheres in case placing a new one overloads them. + %surfacePt = posFromTransform(%item.getTransform()); + %turretCount = 0; + + InitContainerRadiusSearch(%surfacePt, %radius, $TypeMasks::StaticShapeObjectType); + %found = containerSearchNext(); + while(%found) + { + %foundName = %found.getDataBlock().getName(); + if ((%foundName $= TurretDeployedFloorIndoor) || (%foundName $= TurretDeployedWallIndoor) || (%foundName $= TurretDeployedCeilingIndoor) || (%foundName $= TurretDeployedOutdoor)) + %turretCount++; + %found = containerSearchNext(); + } + return %turretCount; +} + +//------------------------------------------------- +//if this function, or any of the included tests are changed, those changes need to be reflected in function: +//AIODeployEquipment::weight(%this, %client, %level), found in aiObjectives.cs --tinman +function ShapeBaseImageData::testInvalidDeployConditions(%item, %plyr, %slot) +{ + cancel(%plyr.deployCheckThread); + %disqualified = $NotDeployableReason::None; //default + + %surface = Deployables::searchView(%plyr, + $MaxDeployableDistance, + ($TypeMasks::TerrainObjectType | + $TypeMasks::InteriorObjectType)); + if (%surface) + { + %surfacePt = posFromRaycast(%surface); + %surfaceNrm = normalFromRaycast(%surface); + + // Check that point to see if anything is objstructing it... + %eyeTrans = %plyr.getEyeTransform(); + %eyePos = posFromTransform(%eyeTrans); + + %searchResult = containerRayCast(%eyePos, %surfacePt, -1, %plyr); + if (!%searchResult) + { + %item.surface = %surface; + %item.surfacePt = %surfacePt; + %item.surfaceNrm = %surfaceNrm; + } + else + { + if (%surfacePt $= posFromRaycast(%searchResult)) + { + %item.surface = %surface; + %item.surfacePt = %surfacePt; + %item.surfaceNrm = %surfaceNrm; + } + else + { + // Don't set the item + %disqualified = $NotDeployableReason::ObjectTooClose; + } + } + } + + + if (%item.testMaxDeployed(%plyr)) + %disqualified = $NotDeployableReason::MaxDeployed; + + else if (%item.testNoSurfaceInRange(%plyr)) + %disqualified = $NotDeployableReason::NoSurfaceFound; + + else if (%item.testNoTerrainFound(%surface)) + %disqualified = $NotDeployableReason::NoTerrainFound; + + else if (%item.testNoInteriorFound()) + %disqualified = $NotDeployableReason::NoInteriorFound; + + else if (%item.testSlopeTooGreat(%surface, %surfaceNrm)) + %disqualified = $NotDeployableReason::SlopeTooGreat; + + else if (%item.testSelfTooClose(%plyr, %surfacePt)) + %disqualified = $NotDeployableReason::SelfTooClose; + + else if (%item.testObjectTooClose(%surfacePt)) + %disqualified = $NotDeployableReason::ObjectTooClose; + + else if (%item.testTurretTooClose(%plyr)) + %disqualified = $NotDeployableReason::TurretTooClose; + + else if (%item.testTurretSaturation()) + %disqualified = $NotDeployableReason::TurretSaturation; + + + if (%plyr.getMountedImage($BackpackSlot) == %item) //player still have the item? + { + if (%disqualified) + activateDeploySensorRed(%plyr); + else + activateDeploySensorGrn(%plyr); + + if (%plyr.client.deployPack == true) + %item.attemptDeploy(%plyr, %slot, %disqualified); + else + %plyr.deployCheckThread = %item.schedule(50, "testInvalidDeployConditions", %plyr, %slot); //update checks every 50 milliseconds + } + else + deactivateDeploySensor(%plyr); +} + +function ShapeBaseImageData::attemptDeploy(%item, %plyr, %slot, %disqualified) +{ + deactivateDeploySensor(%plyr); + Deployables::displayErrorMsg(%item, %plyr, %slot, %disqualified); +} + +function activateDeploySensorRed(%pl) +{ + if(%pl.deploySensor !$= "red") + { + messageClient(%pl.client, 'msgDeploySensorRed', ""); + %pl.deploySensor = "red"; + } +} + +function activateDeploySensorGrn(%pl) +{ + if(%pl.deploySensor !$= "green") + { + messageClient(%pl.client, 'msgDeploySensorGrn', ""); + %pl.deploySensor = "green"; + } +} + +function deactivateDeploySensor(%pl) +{ + if (%pl.deploySensor !$= "") + { + messageClient(%pl.client, 'msgDeploySensorOff', ""); + %pl.deploySensor = ""; + } +} + +function Deployables::displayErrorMsg(%item, %plyr, %slot, %error) +{ + deactivateDeploySensor(%plyr); + + %errorSnd = '~wfx/misc/misc.error.wav'; + switch (%error) + { + case $NotDeployableReason::None: + %item.onDeploy(%plyr, %slot); + messageClient(%plyr.client, 'MsgTeamDeploySuccess', ""); + return; + + case $NotDeployableReason::NoSurfaceFound: + %msg = '\c2Item must be placed within reach.%1'; + + case $NotDeployableReason::MaxDeployed: + %msg = '\c2Your team\'s control network has reached its capacity for this item.%1'; + + case $NotDeployableReason::SlopeTooGreat: + %msg = '\c2Surface is too steep to place this item on.%1'; + + case $NotDeployableReason::SelfTooClose: + %msg = '\c2You are too close to the surface you are trying to place the item on.%1'; + + case $NotDeployableReason::ObjectTooClose: + %msg = '\c2You cannot place this item so close to another object.%1'; + + case $NotDeployableReason::NoTerrainFound: + %msg = '\c2You must place this on outdoor terrain.%1'; + + case $NotDeployableReason::NoInteriorFound: + %msg = '\c2You must place this on a solid surface.%1'; + + case $NotDeployableReason::TurretTooClose: + %msg = '\c2Interference from a nearby turret prevents placement here.%1'; + + case $NotDeployableReason::TurretSaturation: + %msg = '\c2There are too many turrets nearby.%1'; + + default: + %msg = '\c2Deploy failed.'; + } + messageClient(%plyr.client, 'MsgDeployFailed', %msg, %errorSnd); +} + +function ShapeBaseImageData::onActivate(%data, %obj, %slot) +{ + //Tinman - apparently, anything that uses the generic onActivate() method is a deployable. + //repair packs, cloak packs, shield, etc... all overload this method... + %data.testInvalidDeployConditions(%obj, %slot); + + //whether the test passed or not, reset the image trigger (deployables don't have an on/off toggleable state) + %obj.setImageTrigger(%slot, false); +} + +function ShapeBaseImageData::onDeploy(%item, %plyr, %slot) +{ + if(%item.item $= "MotionSensorDeployable" || %item.item $= "PulseSensorDeployable") + { + %plyr.deploySensors--; + %plyr.client.updateSensorPackText(%plyr.deploySensors); + if(%plyr.deploySensors <= 0) + { + // take the deployable off the player's back and out of inventory + %plyr.unmountImage(%slot); + %plyr.decInventory(%item.item, 1); + } + } + else + { + // take the deployable off the player's back and out of inventory + %plyr.unmountImage(%slot); + %plyr.decInventory(%item.item, 1); + } + + // create the actual deployable + %rot = %item.getInitialRotation(%plyr); + if(%item.deployed.className $= "DeployedTurret") + %className = "Turret"; + else + %className = "StaticShape"; + + %deplObj = new (%className)() { + dataBlock = %item.deployed; + }; + + + // set orientation + if(%className $= "Turret") + %deplObj.setDeployRotation(%item.surfacePt, %item.surfaceNrm); + else + %deplObj.setTransform(%item.surfacePt SPC %rot); + + // set team, owner, and handle + %deplObj.team = %plyr.client.Team; + %deplObj.owner = %plyr.client; + + // set the sensor group if it needs one + if(%deplObj.getTarget() != -1) + setTargetSensorGroup(%deplObj.getTarget(), %plyr.client.team); + + // place the deployable in the MissionCleanup/Deployables group (AI reasons) + addToDeployGroup(%deplObj); + + //let the AI know as well... + AIDeployObject(%plyr.client, %deplObj); + + // play the deploy sound + serverPlay3D(%item.deploySound, %deplObj.getTransform()); + + // increment the team count for this deployed object + + $TeamDeployedCount[%plyr.team, %item.item]++; + %deplObj.deploy(); + return %deplObj; +} + +function ShapeBaseImageData::getInitialRotation(%item, %plyr) +{ + return rotFromTransform(%plyr.getTransform()); +} + +function MotionSensorDeployableImage::getInitialRotation(%item, %plyr) +{ + %rotAxis = vectorNormalize(vectorCross(%item.surfaceNrm, "0 0 1")); + if (getWord(%item.surfaceNrm, 2) == 1 || getWord(%item.surfaceNrm, 2) == -1) + %rotAxis = vectorNormalize(vectorCross(%item.surfaceNrm, "0 1 0")); + return %rotAxis SPC mACos(vectorDot(%item.surfaceNrm, "0 0 1")); +} + +function MotionSensorDeployable::onPickup(%this, %pack, %player, %amount) +{ + // %this = Sensor pack datablock + // %pack = Sensor pack object number + // %player = player + // %amount = amount picked up (1) + + if(%pack.sensors $= "") + { + // assume that this is a pack that has been placed in a mission + // this case was handled in ::onInventory below (max sensors); + } + else + { + // find out how many sensor were in the pack + %player.deploySensors = %pack.sensors; + %player.client.updateSensorPackText(%player.deploySensors); + } +} + +function MotionSensorDeployable::onThrow(%this,%pack,%player) +{ + // %this = Sensor pack datablock + // %pack = Sensor pack object number + // %player = player + + %player.throwSensorPack = 1; + %pack.sensors = %player.deploySensors; + %player.deploySensors = 0; + %player.client.updateSensorPackText(%player.deploySensors); + // do the normal ItemData::onThrow stuff -- sound and schedule deletion + serverPlay3D(ItemThrowSound, %player.getTransform()); + %pack.schedulePop(); +} + +function MotionSensorDeployable::onInventory(%this,%player,%value) +{ + // %this = Sensor pack datablock + // %player = player + // %value = 1 if gaining a pack, 0 if losing a pack + + if(%player.getClassName() $= "Player") + { + if(%value) + { + // player picked up or bought a motion sensor pack + %player.deploySensors = %this.maxSensors; + %player.client.updateSensorPackText(%player.deploySensors); + } + else + { + // player dropped or sold a motion sensor pack + if(%player.throwSensorPack) + { + // player threw the pack + %player.throwSensorPack = 0; + // everything handled in ::onThrow above + } + else + { + //the pack was sold at an inventory station, or unmounted because the player + // used all the sensors + %player.deploySensors = 0; + %player.client.updateSensorPackText(%player.deploySensors); + } + } + } + Pack::onInventory(%this,%player,%value); +} + +function PulseSensorDeployable::onPickup(%this, %pack, %player, %amount) +{ + // %this = Sensor pack datablock + // %pack = Sensor pack object number + // %player = player + // %amount = amount picked up (1) + + if(%pack.sensors $= "") + { + // assume that this is a pack that has been placed in a mission + // this case was handled in ::onInventory below (max sensors); + } + else + { + // find out how many sensor were in the pack + %player.deploySensors = %pack.sensors; + %player.client.updateSensorPackText(%player.deploySensors); + } +} + +function PulseSensorDeployable::onThrow(%this,%pack,%player) +{ + // %this = Sensor pack datablock + // %pack = Sensor pack object number + // %player = player + + %player.throwSensorPack = 1; + %pack.sensors = %player.deploySensors; + %player.deploySensors = 0; + %player.client.updateSensorPackText(%player.deploySensors); + // do the normal ItemData::onThrow stuff -- sound and schedule deletion + serverPlay3D(ItemThrowSound, %player.getTransform()); + %pack.schedulePop(); +} + +function PulseSensorDeployable::onInventory(%this,%player,%value) +{ + // %this = Sensor pack datablock + // %player = player + // %value = 1 if gaining a pack, 0 if losing a pack + + if(%player.getClassName() $= "Player") + { + if(%value) + { + // player picked up or bought a motion sensor pack + %player.deploySensors = %this.maxSensors; + %player.client.updateSensorPackText(%player.deploySensors); + } + else + { + // player dropped or sold a motion sensor pack + if(%player.throwSensorPack) + { + // player threw the pack + %player.throwSensorPack = 0; + // everything handled in ::onThrow above + } + else + { + //the pack was sold at an inventory station, or unmounted because the player + // used all the sensors + %player.deploySensors = 0; + %player.client.updateSensorPackText(%player.deploySensors); + } + } + } + Pack::onInventory(%this,%player,%value); +} + +function TurretIndoorDeployableImage::getInitialRotation(%item, %plyr) +{ + %surfaceAngle = getTerrainAngle(%item.surfaceNrm); + if(%surfaceAngle > 155) + %item.deployed = TurretDeployedCeilingIndoor; + else if(%surfaceAngle > 45) + %item.deployed = TurretDeployedWallIndoor; + else + %item.deployed = TurretDeployedFloorIndoor; +} + +function TurretIndoorDeployable::onPickup(%this, %obj, %shape, %amount) +{ + // created to prevent console errors +} + +function TurretOutdoorDeployable::onPickup(%this, %obj, %shape, %amount) +{ + // created to prevent console errors +} + +function InventoryDeployable::onPickup(%this, %obj, %shape, %amount) +{ + // created to prevent console errors +} + +// --------------------------------------------------------------------------------------- +// deployed station functions +function DeployedStationInventory::onEndSequence(%data, %obj, %thread) +{ + Parent::onEndSequence(%data, %obj, %thread); + if(%thread == $DeployThread) + { + %trigger = new Trigger() + { + dataBlock = stationTrigger; + polyhedron = "-0.75 0.0 0.1 1.5 0.0 0.0 0.0 -1.5 0.0 0.0 0.0 2.3"; + }; + MissionCleanup.add(%trigger); + %trigger.setTransform(%obj.getTransform()); + + // associate the trigger with the station + %trigger.station = %obj; + %trigger.mainObj = %obj; + %trigger.disableObj = %obj; + %obj.trigger = %trigger; + } +} + +//-------------------------------------------------------------------------- +//DeployedMotionSensor: +//-------------------------------------------------------------------------- + +function DeployedMotionSensor::onDestroyed(%this, %obj, %prevState) +{ + //%obj.hide(true); + Parent::onDestroyed(%this, %obj, %prevState); + $TeamDeployedCount[%obj.team, MotionSensorDeployable]--; + %obj.schedule(500, "delete"); +} + +//-------------------------------------------------------------------------- +//DeployedPulseSensor: +//-------------------------------------------------------------------------- +function PulseSensorDeployableImage::onActivate(%data, %obj, %slot) +{ + %data.testInvalidDeployConditions(%obj, %slot); +} + +function DeployedPulseSensor::onDestroyed(%this, %obj, %prevState) +{ + Parent::onDestroyed(%this, %obj, %prevState); + $TeamDeployedCount[%obj.team, PulseSensorDeployable]--; + %obj.schedule(300, "delete"); +} + +// --------------------------------------------------------------------------------------- +// deployed turret functions + +function DeployedTurret::onAdd(%data, %obj) +{ + Parent::onAdd(%data, %obj); + // auto-mount the barrel + %obj.mountImage(%data.barrel, 0, false); +} + +function DeployedTurret::onDestroyed(%this, %obj, %prevState) +{ + Parent::onDestroyed(%this, %obj, %prevState); + %turType = %this.getName(); + // either it'll be an outdoor turret, or one of the three types of indoor turret + // (floor, ceiling, wall) + if(%turType $= "TurretDeployedOutdoor") + %turType = "TurretOutdoorDeployable"; + else + %turType = "TurretIndoorDeployable"; + + // decrement team count + $TeamDeployedCount[%obj.team, %turType]--; + + %obj.schedule(700, "delete"); +} + +function countTurretsAllowed(%type) +{ + for(%j = 1; %j < Game.numTeams; %j++) + %teamPlayerCount[%j] = 0; + %numClients = ClientGroup.getCount(); + for(%i = 0; %i < %numClients; %i++) + { + %cl = ClientGroup.getObject(%i); + if(%cl.team > 0) + %teamPlayerCount[%cl.team]++; + } + // the bigger team determines the number of turrets allowed + %maxPlayers = %teamPlayerCount[1] > %teamPlayerCount[2] ? %teamPlayerCount[1] : %teamPlayerCount[2]; + // each team can have 1 turret of each type (indoor/outdoor) for every 2 players + // minimum and maximums are defined in deployables.cs + %teamTurretMax = mFloor(%maxPlayers / 2); + if(%teamTurretMax < $TeamDeployableMin[%type]) + %teamTurretMax = $TeamDeployableMin[%type]; + else if(%teamTurretMax > $TeamDeployableMax[%type]) + %teamTurretMax = $TeamDeployableMax[%type]; + + return %teamTurretMax; +} + diff --git a/base/scripts/depthSort.cs b/base/scripts/depthSort.cs new file mode 100644 index 0000000..89eade8 --- /dev/null +++ b/base/scripts/depthSort.cs @@ -0,0 +1,64 @@ + +moveMap.bindCmd(keyboard,o,"","toggleDepthTest();"); +moveMap.bindCmd(keyboard,j,"","toggleDepthSort();"); +moveMap.bindCmd(keyboard,k,"","toggleRenderDepth();"); +moveMap.bindCmd(keyboard,l,"","toggleHoldDepthTest();"); + +function toggleDepthTest() +{ + if ($Collision::testDepthSortList) + { + $Collision::testDepthSortList = false; + echo("Turning OFF testing of DepthSortList"); + } + else + { + $Collision::testDepthSortList = true; + echo("Turning ON testing of DepthSortList"); + } +} + +function toggleDepthSort() +{ + if ($Collision::depthSort) + { + $Collision::depthSort = false; + echo("Turning OFF depth sort on depthSortList"); + } + else + { + $Collision::depthSort = true; + echo("Turning ON depth sort on depthSortList"); + } +} + +function toggleRenderDepth() +{ + if ($Collision::depthRender) + { + $Collision::depthRender = false; + echo("Turning OFF depth rendering on DepthSortList"); + } + else + { + $Collision::depthRender = true; + echo("Turning ON depth rendering on DepthSortList"); + } +} + +function toggleHoldDepthTest() +{ + if ($Collision::renderAlways) + { + $Collision::renderAlways = false; + $Collision::testDepthSortList = true; + } + else + { + $Collision::renderAlways = true; + $Collision::testDepthSortList = false; + } +} + +// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- // + diff --git a/base/scripts/editorRender.cs b/base/scripts/editorRender.cs new file mode 100644 index 0000000..24b256b --- /dev/null +++ b/base/scripts/editorRender.cs @@ -0,0 +1,50 @@ +//------------------------------------------------------------------------------ +// Console onEditorRender functions: +//------------------------------------------------------------------------------ +// Functions: +// - renderSphere([pos], [radius], ); +// - renderCircle([pos], [normal], [radius], ); +// - renderTriangle([pnt], [pnt], [pnt]); +// - renderLine([start], [end], ); +// +// Variables: +// - consoleFrameColor - line prims are rendered with this +// - consoleFillColor +// - consoleSphereLevel - level of polyhedron subdivision +// - consoleCircleSegments +// - consoleLineWidth +//------------------------------------------------------------------------------ + +function SpawnSphere::onEditorRender(%this, %editor, %selected, %expanded) +{ + if(%selected $= "true") + { + %editor.consoleFrameColor = "255 0 0"; + %editor.consoleFillColor = "0 0 0 0"; + %editor.renderSphere(%this.getWorldBoxCenter(), %this.radius, 1); + } +} + +function AudioEmitter::onEditorRender(%this, %editor, %selected, %expanded) +{ + if(%selected $= "true" && %this.is3D && !%this.useProfileDescription) + { + %editor.consoleFillColor = "0 0 0 0"; + + %editor.consoleFrameColor = "255 0 0"; + %editor.renderSphere(%this.getTransform(), %this.minDistance, 1); + + %editor.consoleFrameColor = "0 0 255"; + %editor.renderSphere(%this.getTransform(), %this.maxDistance, 1); + } +} + +//function Item::onEditorRender(%this, %editor, %selected, %expanded) +//{ +// if(%this.getDataBlock().getName() $= "MineDeployed") +// { +// %editor.consoleFillColor = "0 0 0 0"; +// %editor.consoleFrameColor = "255 0 0"; +// %editor.renderSphere(%this.getWorldBoxCenter(), 6, 1); +// } +//} \ No newline at end of file diff --git a/base/scripts/environmentals.cs b/base/scripts/environmentals.cs new file mode 100644 index 0000000..c254362 --- /dev/null +++ b/base/scripts/environmentals.cs @@ -0,0 +1,53 @@ +// Used by interiors: ------------------------------------------------------ +datablock AudioProfile(Universal_Base_1) +{ + filename = "fx/environment/base_1.wav"; + description = AudioLooping2d; +}; + +datablock AudioProfile(Universal_Base_2) +{ + filename = "fx/environment/base_2.wav"; + description = AudioLooping2d; +}; + +datablock AudioProfile(Universal_Base_3) +{ + filename = "fx/environment/base_3.wav"; + description = AudioLooping2d; +}; + +datablock AudioProfile(Universal_Base_Pulse_1) +{ + filename = "fx/environment/base_pulse_1.wav"; + description = AudioLooping2d; +}; + +datablock AudioProfile(Universal_Base_Pulse_2) +{ + filename = "fx/environment/base_pulse_2.wav"; + description = AudioLooping2d; +}; + +datablock AudioProfile(sPowerUp) +{ + filename = "fx/powered/base_power_on.wav"; + description = Audio2d; + preload = true; +}; + +datablock AudioProfile(sPowerDown) +{ + filename = "fx/powered/base_power_off.wav"; + description = Audio2d; + preload = true; +}; + + + + + + + + + diff --git a/base/scripts/forceField.cs b/base/scripts/forceField.cs new file mode 100644 index 0000000..94fce53 --- /dev/null +++ b/base/scripts/forceField.cs @@ -0,0 +1,223 @@ +//-------------------------------------------------------------------------- +// Force fields: +// +// accept the following commands: +// open() +// close() +// +//-------------------------------------------------------------------------- + + +datablock ForceFieldBareData(defaultForceFieldBare) +{ + fadeMS = 1000; + baseTranslucency = 0.30; + powerOffTranslucency = 0.0; + teamPermiable = false; + otherPermiable = false; + color = "0.0 0.55 0.99"; + powerOffColor = "0.0 0.0 0.0"; + targetNameTag = 'Force Field'; + targetTypeTag = 'ForceField'; + + texture[0] = "skins/forcef1"; + texture[1] = "skins/forcef2"; + texture[2] = "skins/forcef3"; + texture[3] = "skins/forcef4"; + texture[4] = "skins/forcef5"; + + framesPerSec = 10; + numFrames = 5; + scrollSpeed = 15; + umapping = 1.0; + vmapping = 0.15; +}; + + +datablock ForceFieldBareData(defaultTeamSlowFieldBare) +{ + fadeMS = 1000; + baseTranslucency = 0.3; + powerOffTranslucency = 0.0; + teamPermiable = true; + otherPermiable = false; + color = "0.28 0.89 0.31"; + powerOffColor = "0.0 0.0 0.0"; + targetTypeTag = 'ForceField'; + + texture[0] = "skins/forcef1"; + texture[1] = "skins/forcef2"; + texture[2] = "skins/forcef3"; + texture[3] = "skins/forcef4"; + texture[4] = "skins/forcef5"; + + framesPerSec = 10; + numFrames = 5; + scrollSpeed = 15; + umapping = 1.0; + vmapping = 0.15; +}; + +datablock ForceFieldBareData(defaultAllSlowFieldBare) +{ + fadeMS = 1000; + baseTranslucency = 0.30; + powerOffTranslucency = 0.0; + teamPermiable = true; + otherPermiable = true; + color = "1.0 0.4 0.0"; + powerOffColor = "0.0 0.0 0.0"; + targetTypeTag = 'ForceField'; + + texture[0] = "skins/forcef1"; + texture[1] = "skins/forcef2"; + texture[2] = "skins/forcef3"; + texture[3] = "skins/forcef4"; + texture[4] = "skins/forcef5"; + + framesPerSec = 10; + numFrames = 5; + scrollSpeed = 15; + umapping = 1.0; + vmapping = 0.15; +}; + +datablock ForceFieldBareData(defaultNoTeamSlowFieldBare) +{ + fadeMS = 1000; + baseTranslucency = 0.30; + powerOffTranslucency = 0.0; + teamPermiable = false; + otherPermiable = true; + color = "1.0 0.0 0.0"; + powerOffColor = "0.0 0.0 0.0"; + targetTypeTag = 'ForceField'; + + texture[0] = "skins/forcef1"; + texture[1] = "skins/forcef2"; + texture[2] = "skins/forcef3"; + texture[3] = "skins/forcef4"; + texture[4] = "skins/forcef5"; + + framesPerSec = 10; + numFrames = 5; + scrollSpeed = 15; + umapping = 1.0; + vmapping = 0.15; +}; + +datablock ForceFieldBareData(defaultSolidFieldBare) +{ + fadeMS = 1000; + baseTranslucency = 0.30; + powerOffTranslucency = 0.0; + teamPermiable = false; + otherPermiable = false; + color = "1.0 0.0 0.0"; + powerOffColor = "0.0 0.0 0.0"; + targetTypeTag = 'ForceField'; + + texture[0] = "skins/forcef1"; + texture[1] = "skins/forcef2"; + texture[2] = "skins/forcef3"; + texture[3] = "skins/forcef4"; + texture[4] = "skins/forcef5"; + + framesPerSec = 10; + numFrames = 5; + scrollSpeed = 15; + umapping = 1.0; + vmapping = 0.15; +}; + + +function ForceFieldBare::onTrigger(%this, %triggerId, %on) +{ + // Default behavior for a field: + // if triggered: go to open state (last waypoint) + // if untriggered: go to closed state (first waypoint) + + if (%on == 1) { + %this.triggerCount++; + } else { + if (%this.triggerCount > 0) + %this.triggerCount--; + } + + if (%this.triggerCount > 0) { + %this.open(); + } else { + %this.close(); + } +} + +function ForceFieldBareData::gainPower(%data, %obj) +{ + Parent::gainPower(%data, %obj); + %obj.close(); + // activate the field's physical zone + %pzGroup = nameToID("MissionCleanup/PZones"); + if(%pzGroup > 0) { + %ffp = -1; + for(%i = 0; %i < %pzGroup.getCount(); %i++) { + %pz = %pzGroup.getObject(%i); + if(%pz.ffield == %obj) { + %ffp = %pz; + break; + } + } + if(%ffp > 0) { + %ffp.activate(); + } + } + //else + // error("No PZones group to search!"); +} + +function ForceFieldBareData::losePower(%data, %obj) +{ + Parent::losePower(%data, %obj); + %obj.open(); + // deactivate the field's physical zone + %pzGroup = nameToID("MissionCleanup/PZones"); + if(%pzGroup > 0) { + %ffp = -1; + for(%i = 0; %i < %pzGroup.getCount(); %i++) { + %pz = %pzGroup.getObject(%i); + if(%pz.ffield == %obj) { + %ffp = %pz; + break; + } + } + if(%ffp > 0) { + %ffp.deactivate(); + } + } + //else + // error(""); +} + +function ForceFieldBareData::onAdd(%data, %obj) +{ + Parent::onAdd(%data, %obj); + + %pz = new PhysicalZone() { + position = %obj.position; + rotation = %obj.rotation; + scale = %obj.scale; + polyhedron = "0.000000 1.0000000 0.0000000 1.0000000 0.0000000 0.0000000 0.0000000 -1.0000000 0.0000000 0.0000000 0.0000000 1.0000000"; + velocityMod = 0.1; + gravityMod = 1.0; + appliedForce = "0 0 0"; + ffield = %obj; + }; + %pzGroup = nameToID("MissionCleanup/PZones"); + if(%pzGroup <= 0) { + %pzGroup = new SimGroup("PZones"); + MissionCleanup.add(%pzGroup); + } + %pzGroup.add(%pz); + //MissionCleanupGroup.add(%pz); +} + + diff --git a/base/scripts/gameBase.cs b/base/scripts/gameBase.cs new file mode 100644 index 0000000..215ea4c --- /dev/null +++ b/base/scripts/gameBase.cs @@ -0,0 +1,101 @@ + +function GameBaseData::onAdd(%data, %obj) +{ + if(%data.targetTypeTag !$= "") + %obj.target = createTarget(%obj, %data.targetNameTag, "", "", %data.targetTypeTag, 0, 0); + else + %obj.target = -1; +} + +function GameBaseData::onRemove(%data, %obj) +{ + %target = %obj.getTarget(); + + // first 32 targets are team targets + if(%target >= 32) + freeTarget(%target); +} + +function InteriorInstance::damage() +{ +} + +function TerrainBlock::damage() +{ +} + +function ForceFieldBare::damage() +{ +} + +function GameBaseData::shouldApplyImpulse(%data, %obj) +{ + return %data.shouldApplyImpulse; +} + + +function ShapeBaseData::onAdd(%data, %obj) +{ + Parent::onAdd(%data, %obj); + // if it's a deployed object, schedule the ambient thread to play in a little while + if(%data.deployAmbientThread) + %obj.schedule(750, "playThread", $AmbientThread, "ambient"); + // check for ambient animation that should always be played + if(%data.alwaysAmbient) + %obj.playThread($AmbientThread, "ambient"); +} + +function SimObject::setOwnerClient(%obj, %cl) +{ + %obj.client = %cl; +} + +function SimObject::getOwnerClient(%obj) +{ + if(isObject(%obj)) + return %obj.client; + return 0; +} + // recursive objective init functions for mission group + +function SimGroup::objectiveInit(%this) +{ + for (%i = 0; %i < %this.getCount(); %i++) + %this.getObject(%i).objectiveInit(); +} + +function SimObject::objectiveInit(%this) +{ +} + +function GameBase::objectiveInit(%this) +{ + //error("Initializing object " @ %this @ ", " @ %this.getDataBlock().getName()); + %this.getDataBlock().objectiveInit(%this); +} + +// tag strings are ignored if they start with an underscore +function GameBase::getGameName(%this) +{ + %name = ""; + + if(%this.nameTag !$= "") + %name = %this.nameTag; + else + { + %name = getTaggedString(%this.getDataBlock().targetNameTag); + if((%name !$= "") && (getSubStr(%name, 0, 1) $= "_")) + %name = ""; + } + + %type = getTaggedString(%this.getDataBlock().targetTypeTag); + if((%type !$= "") && (getSubStr(%type, 0, 1) !$= "_")) + { + if(%name !$= "") + return(%name @ " " @ %type); + else + return(%type); + } + + return(%name); +} diff --git a/base/scripts/gameCanvas.cs b/base/scripts/gameCanvas.cs new file mode 100644 index 0000000..277986f --- /dev/null +++ b/base/scripts/gameCanvas.cs @@ -0,0 +1,47 @@ +function SimSet::removeStable(%this, %object) +{ + if(%this.getCount() < 2) + { + %this.remove(%object); + return; + } + %last = %this.getObject(%this.getCount() - 1); + %this.remove(%object); + %this.pushToBack(%last); +} + +if(!isObject(GameDialogSet)) +{ + new SimSet(GameDialogSet); + RootGroup.add(GameDialogSet); +} + +function GuiCanvas::setGameMode(%this, %on) +{ + if(%this.gameMode == %on) + return; + + %this.gameMode = %on; + if(%this.gameMode) + { + %this.setContent(%this.gameContent); + for(%i = 0; %i < GameDialogSet.getCount(); %i++) + %this.pushDialog(GameDialogSet.getObject(%i)); + } + else + Canvas.setContent(LobbyGui); +} + +function GuiCanvas::pushGameDialog(%this, %dialog) +{ + GameDialogSet.add(%dialog); + if(%this.gameMode) + %this.pushDialog(%dialog); +} + +function GuiCanvas::popGameDialog(%this, %dialog) +{ + GameDialogSet.removeStable(%dialog); + if(%this.gameMode) + %this.popDialog(%dialog); +} \ No newline at end of file diff --git a/base/scripts/graphBuild.cs b/base/scripts/graphBuild.cs new file mode 100644 index 0000000..aab1514 --- /dev/null +++ b/base/scripts/graphBuild.cs @@ -0,0 +1,39 @@ +// offline graph building + +$MAXNODECOUNT = 5000; + +function makeJettableGraphOffline(%NAVorSPAWN) +{ + if (%NAVorSPAWN $= "Spawn") + echo("--> Building Spawn Graph"); + else + echo("--> Building Nav Graph"); + + // Inform what we're generating- + navGraph.setGenMode(%NAVorSPAWN); + + // Upload ground and floor data- + navGraph::exteriorInspect(); + navGraph::generateInterior(); + + // navGraph.makeGraph(); + // navGraph.findBridges(); + // navGraph.pushBridges(); + + navGraph.assemble(); + navGraph.cullIslands(); + + navGraph.makeGraph(); + navGraph.pushBridges(); + navGraph.makeTables(); + + return false; +} + +function doTablebuildOffline() +{ + navGraph.prepLOS("0 0 0"); + while(navGraph.makeLOS()) + %percent++; +} + diff --git a/base/scripts/helpGuiText.cs b/base/scripts/helpGuiText.cs new file mode 100644 index 0000000..cfa7028 --- /dev/null +++ b/base/scripts/helpGuiText.cs @@ -0,0 +1,24 @@ +$helpTextShown = false; + +function toggleHelpText() +{ + // if HUD has been altered, do not show helpTextGui + if(helpTextGui.visible) + helpTextGui.setVisible(false); + else + { + if(!$helpTextShown) + { + objHudText.setValue("Displays important information about the current mission."); + chatHudText.setValue("Chat messages from other players are displayed here."); + energyHudText.setValue("Your armor's available energy. Heat (the red bar) increases as you use jets."); + compassHudText.setValue("Compass spins as you turn. Clock shows mission time. If the center is flashing red, you've been detected."); + damageHudText.setValue("You are dead if this reaches zero."); + reticleHudText.setValue("Your weapon fire hits approximately in the center of this."); + inventoryHudText.setValue("Shows (left to right) number of grenades, mines, health kits and beacons."); + weaponsHudText.setValue("Shows your available weapons, plus a targeting laser."); + $helpTextShown = true; + } + helpTextGui.setVisible(true); + } +} diff --git a/base/scripts/hud.cs b/base/scripts/hud.cs new file mode 100644 index 0000000..c45225b --- /dev/null +++ b/base/scripts/hud.cs @@ -0,0 +1,1700 @@ +function createObserverMoveMap() +{ + if ( isObject( flyingCameraMove ) ) + flyingCameraMove.delete(); + + new ActionMap( flyingCameraMove ); + flyingCameraMove.bind( keyboard, s, moveleft ); + flyingCameraMove.bind( keyboard, f, moveright ); + flyingCameraMove.bind( keyboard, e, moveforward ); + flyingCameraMove.bind( keyboard, d, movebackward ); + flyingCameraMove.bind( keyboard, t, moveup ); + flyingCameraMove.bind( keyboard, b, movedown ); + + // allow hud activation + flyingCameraMove.copyBind( moveMap, toggleScoreScreen ); + flyingCameraMove.copyBind( moveMap, toggleCommanderMap ); + flyingCameraMove.copyBind( moveMap, TeamMessageHud ); + flyingCameraMove.copyBind( moveMap, toggleMessageHud ); + flyingCameraMove.copyBind( moveMap, toggleInventoryHud ); + flyingCameraMove.copyBind( moveMap, voteYes ); + flyingCameraMove.copyBind( moveMap, voteNo ); + flyingCameraMove.copyBind( moveMap, activateChatMenuHud ); + + // Bind the command assignment/response keys as well: + flyingCameraMove.copyBind( moveMap, toggleTaskListDlg ); + flyingCameraMove.copyBind( moveMap, fnAcceptTask ); + flyingCameraMove.copyBind( moveMap, fnDeclineTask ); + flyingCameraMove.copyBind( moveMap, fnTaskCompleted ); + flyingCameraMove.copyBind( moveMap, fnResetTaskList ); + + // misc + flyingCameraMove.copyBind( moveMap, voiceCapture ); + + // inventory binds + flyingCameraMove.copyBind( moveMap, toggleInventoryHud ); + flyingCameraMove.copyBind( moveMap, selectFavorite1 ); + flyingCameraMove.copyBind( moveMap, selectFavorite2 ); + flyingCameraMove.copyBind( moveMap, selectFavorite3 ); + flyingCameraMove.copyBind( moveMap, selectFavorite4 ); + flyingCameraMove.copyBind( moveMap, selectFavorite5 ); + flyingCameraMove.copyBind( moveMap, selectFavorite6 ); + flyingCameraMove.copyBind( moveMap, selectFavorite7 ); + flyingCameraMove.copyBind( moveMap, selectFavorite8 ); + flyingCameraMove.copyBind( moveMap, selectFavorite9 ); + flyingCameraMove.copyBind( moveMap, selectFavorite10 ); + + flyingCameraMove.copyBind( moveMap, selectFavorite11 ); + flyingCameraMove.copyBind( moveMap, selectFavorite12 ); + flyingCameraMove.copyBind( moveMap, selectFavorite13 ); + flyingCameraMove.copyBind( moveMap, selectFavorite14 ); + flyingCameraMove.copyBind( moveMap, selectFavorite15 ); + flyingCameraMove.copyBind( moveMap, selectFavorite16 ); + flyingCameraMove.copyBind( moveMap, selectFavorite17 ); + flyingCameraMove.copyBind( moveMap, selectFavorite18 ); + flyingCameraMove.copyBind( moveMap, selectFavorite19 ); + flyingCameraMove.copyBind( moveMap, selectFavorite20 ); + + flyingCameraMove.copyBind( moveMap, quickPackEnergyPack ); + flyingCameraMove.copyBind( moveMap, quickPackRepairPack ); + flyingCameraMove.copyBind( moveMap, quickPackShieldPack ); + flyingCameraMove.copyBind( moveMap, quickPackCloakPack ); + flyingCameraMove.copyBind( moveMap, quickPackJammerPack ); + flyingCameraMove.copyBind( moveMap, quickPackAmmoPack ); + flyingCameraMove.copyBind( moveMap, quickPackSatchelCharge ); + flyingCameraMove.copyBind( moveMap, quickPackDeployableStation ); + flyingCameraMove.copyBind( moveMap, quickPackIndoorTurret ); + flyingCameraMove.copyBind( moveMap, quickPackOutdoorTurret ); + flyingCameraMove.copyBind( moveMap, quickPackMotionSensor ); + flyingCameraMove.copyBind( moveMap, quickPackPulse ); + + //preserve the fire, jump, and jet buttons + flyingCameraMove.copyBind( moveMap, mouseFire ); + flyingCameraMove.copyBind( moveMap, mouseJet ); + flyingCameraMove.copyBind( moveMap, jump ); + flyingCameraMove.copyBind( moveMap, yaw ); + flyingCameraMove.copyBind( moveMap, pitch ); + + flyingCameraMove.bindCmd( keyboard, escape, "", "escapeFromGame();" ); +} +createObserverMoveMap(); + +//-------------------------------------------------------------------------- +function GameConnection::sensorPing(%this, %ping) +{ + sensorHud.ping = %ping; + sensorHud.update(); +} + +function GameConnection::sensorJammed(%this, %jam) +{ + sensorHud.jam = %jam; + sensorHud.update(); +} + +function SensorHud::update(%this) +{ + // dont change anything if lag is up + if(lagHudIndicator.isVisible()) + { + %this.setVisible(false); + sensorHudBack.setVisible(false); + return; + } + + if(!%this.ping && !%this.jam) + { + %this.setVisible(false); + sensorHudBack.setVisible(true); + return; + } + + %this.setVisible(true); + sensorHudBack.setVisible(false); + + if(%this.jam) + %this.color = %this.jamColor; + else + %this.color = %this.pingColor; +} + +// - anything which should be reset on new server/mission +function clientCmdResetHud() +{ + deploySensor.setVisible(false); + controlObjectText.setVisible(false); + lagHudIndicator.setVisible(false); + + sensorHud.jam = false; + sensorHud.ping = false; + sensorHud.update(); +} + +//-------------------------------------------------------------------------- +function GameConnection::syncHudClock(%client, %time) +{ + commandToClient(%client, 'syncHudClock', %time); +} + +function clientCmdSyncHudClock(%time) +{ + clockHud.setTime(%time); +} + +//-------------------------------------------------------------------------- +$vehicleReticle[AssaultVehicle, 1, bitmap] = "gui/hud_ret_tankchaingun.png"; +$vehicleReticle[AssaultVehicle, 1, frame] = true; +$vehicleReticle[AssaultVehicle, 2, bitmap] = "gui/hud_ret_tankmortar.png"; +$vehicleReticle[AssaultVehicle, 2, frame] = true; + +$vehicleReticle[BomberFlyer, 1, bitmap] = "gui/hud_ret_shrike.png"; +$vehicleReticle[BomberFlyer, 1, frame] = false; +$vehicleReticle[BomberFlyer, 2, bitmap] = ""; +$vehicleReticle[BomberFlyer, 2, frame] = false; +$vehicleReticle[BomberFlyer, 3, bitmap] = "gui/hud_ret_targlaser.png"; +$vehicleReticle[BomberFlyer, 3, frame] = false; + +function GameConnection::setVWeaponsHudActive(%client, %slot) +{ + %veh = %client.player.getObjectMount(); + %vehType = %veh.getDatablock().getName(); + commandToClient(%client, 'setVWeaponsHudActive', %slot, %vehType); +} + +function clientCmdSetVWeaponsHudActive(%num, %vType) +{ + //vWeaponsBox.setActiveWeapon(%num); + if(%num > $numVWeapons) + %num = $numVWeapons; + + for(%i = 1; %i <= $numVWeapons; %i++) + { + %oldHilite = "vWeap" @ %i @ "Hilite"; + %oldHilite.setVisible(false); + } + %newHilite = "vWeap" @ %num @ "Hilite"; + %newHilite.setVisible(true); + + // set the bitmap and frame for the reticle + reticleHud.setBitmap($vehicleReticle[%vType, %num, bitmap]); + reticleFrameHud.setVisible($vehicleReticle[%vType, %num, frame]); +} + +function GameConnection::setVWeaponsHudClearAll(%client) +{ + commandToClient(%client, 'setVWeaponsHudClearAll'); +} + +function clientCmdSetVWeaponsHudClearAll() +{ + //vWeaponsBox.clearAll(); +} + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +function GameConnection::setWeaponsHudBitmap(%client, %slot, %name, %bitmap) +{ + commandToClient(%client, 'setWeaponsHudBitmap',%slot,%name,%bitmap); +} + +//---------------------------------------------------------------------------- +function clientCmdSetWeaponsHudBitmap(%slot, %name, %bitmap) +{ + $WeaponNames[%slot] = %name; + weaponsHud.setWeaponBitmap(%slot,%bitmap); +} + +//---------------------------------------------------------------------------- +function GameConnection::setWeaponsHudItem(%client, %name, %ammoAmount, %addItem) +{ + //error("GC:SWHI name="@%name@",ammoAmount="@%ammoAmount@",addItem="@%addItem); +// for(%i = 0; %i < $WeaponsHudCount; %i++) +// if($WeaponsHudData[%i, itemDataName] $= %name) +// { +// if($WeaponsHudData[%i, ammoDataName] !$= "") { +// %ammoInv = %client.player.inv[$WeaponsHudData[%i, ammoDataName]]; +// //error(" ----- player has " @ %ammoInv SPC $WeaponsHudData[%i, ammoDataName]); +// //error("SWHI:Setting weapon "@%name@" ("@%i@") ammo to " @ %ammoInv); +// commandToClient(%client, 'setWeaponsHudItem',%i,%ammoInv, %addItem); +// } +// else { +// //error("SWHI:Setting weapon "@%name@" ("@%i@") ammo to infinite"); +// commandToClient(%client, 'setWeaponsHudItem',%i,-1, %addItem); +// } +// break; +// } + + + // My try... + for(%i = 0; %i < $WeaponsHudCount; %i++) + if($WeaponsHudData[%i, itemDataName] $= %name) + { + if($WeaponsHudData[%i, ammoDataName] !$= "") { + %ammoInv = %client.player.inv[$WeaponsHudData[%i, ammoDataName]]; + //error(" ----- player has " @ %ammoInv SPC $WeaponsHudData[%i, ammoDataName]); + //error("SWHI:Setting weapon "@%name@" ("@%i@") ammo to " @ %ammoInv); + commandToClient(%client, 'setWeaponsHudItem',%i,%ammoInv, %addItem); + } + else { + //error("SWHI:Setting weapon "@%name@" ("@%i@") ammo to infinite"); + commandToClient(%client, 'setWeaponsHudItem',%i,-1, %addItem); + } + break; + } +} + +//---------------------------------------------------------------------------- +function clientCmdSetWeaponsHudItem(%slot, %ammoAmount, %addItem) +{ + if(%addItem) { + //error("adding weapon to hud in slot " @ %slot @ " with ammo " @ %ammoAmount); + weaponsHud.addWeapon(%slot, %ammoAmount); + } + else { + //error("removing weapon from hud"); + weaponsHud.removeWeapon(%slot); + } +} + +//---------------------------------------------------------------------------- +function GameConnection::setWeaponsHudAmmo(%client, %name, %ammoAmount) +{ + for(%i = 0; %i < $WeaponsHudCount; %i++) + if($WeaponsHudData[%i, ammoDataName] $= %name) + { + //error("SWHA:Setting ammo "@%name@" for weapon "@%i@" to " @ %ammoAmount); + commandToClient(%client, 'setWeaponsHudAmmo',%i, %ammoAmount); + break; + } +} + +//---------------------------------------------------------------------------- +function clientCmdSetWeaponsHudAmmo(%slot, %ammoAmount) +{ + weaponsHud.setAmmo(%slot, %ammoAmount); +} + +//---------------------------------------------------------------------------- +function GameConnection::setWeaponsHudActive(%client, %name, %clearActive) +{ + if(%clearActive) { + //error("clearing active weapon"); + commandToClient(%client, 'setWeaponsHudActive', -1); + } + else + for(%i = 0; %i < $WeaponsHudCount; %i++) + if($WeaponsHudData[%i, itemDataName] $= %name) + { + //error("Setting weapon "@%name@" ("@%i@") active"); + commandToClient(%client, 'setWeaponsHudActive',%i); + break; + } +} + +//---------------------------------------------------------------------------- +function clientCmdSetWeaponsHudActive(%slot) +{ + weaponsHud.setActiveWeapon(%slot); + switch$($WeaponNames[%slot]) + { + case "Blaster": + reticleHud.setBitmap("gui/ret_blaster.png"); + reticleFrameHud.setVisible(true); + case "Plasma": + reticleHud.setBitmap("gui/ret_plasma.png"); + reticleFrameHud.setVisible(true); + case "Chaingun": + reticleHud.setBitmap("gui/ret_chaingun.png"); + reticleFrameHud.setVisible(true); + case "Disc": + reticleHud.setBitmap("gui/ret_disc.png"); + reticleFrameHud.setVisible(true); + case "GrenadeLauncher": + reticleHud.setBitmap("gui/ret_grenade.png"); + reticleFrameHud.setVisible(true); + case "SniperRifle": + reticleHud.setBitmap("gui/hud_ret_sniper.png"); + reticleFrameHud.setVisible(false); + case "ELFGun": + reticleHud.setBitmap("gui/ret_elf.png"); + reticleFrameHud.setVisible(true); + case "Mortar": + reticleHud.setBitmap("gui/ret_mortor.png"); + reticleFrameHud.setVisible(true); + case "MissileLauncher": + reticleHud.setBitmap("gui/ret_missile.png"); + reticleFrameHud.setVisible(true); + case "ShockLance": + reticleHud.setBitmap("gui/hud_ret_shocklance.png"); + reticleFrameHud.setVisible(false); + case "TargetingLaser": + reticleHud.setBitmap("gui/hud_ret_targlaser.png"); + reticleFrameHud.setVisible(false); + } +} + +function clientCmdSetRepairReticle() +{ + reticleHud.setBitmap("gui/ret_chaingun.png"); + reticleFrameHud.setVisible(true); +} + +//---------------------------------------------------------------------------- +function GameConnection::setWeaponsHudBackGroundBmp(%client, %name) +{ + commandToClient(%client, 'setWeaponsHudBackGroundBmp',%name); +} + +//---------------------------------------------------------------------------- +function clientCmdSetWeaponsHudBackGroundBmp(%name) +{ + weaponsHud.setBackGroundBitmap(%name); +} + +//---------------------------------------------------------------------------- +function GameConnection::setWeaponsHudHighLightBmp(%client, %name) +{ + commandToClient(%client, 'setWeaponsHudHighLightBmp',%name); +} + +//---------------------------------------------------------------------------- +function clientCmdSetWeaponsHudHighLightBmp(%name) +{ + weaponsHud.setHighLightBitmap(%name); +} + +//---------------------------------------------------------------------------- +function GameConnection::setWeaponsHudInfiniteAmmoBmp(%client, %name) +{ + commandToClient(%client, 'setWeaponsHudInfiniteAmmoBmp',%name); +} + +//---------------------------------------------------------------------------- +function clientCmdSetWeaponsHudInfiniteAmmoBmp(%name) +{ + weaponsHud.setInfiniteAmmoBitmap(%name); +} +//---------------------------------------------------------------------------- +function GameConnection::setWeaponsHudClearAll(%client) +{ + commandToClient(%client, 'setWeaponsHudClearAll'); +} + +//---------------------------------------------------------------------------- +function clientCmdSetWeaponsHudClearAll() +{ + weaponsHud.clearAll(); +} + +function GameConnection::clearBackpackIcon(%client) +{ + commandToClient(%client, 'setBackpackHudItem', 0, 0); +} + +//---------------------------------------------------------------------------- +// Ammo Hud +//---------------------------------------------------------------------------- +function GameConnection::setAmmoHudCount(%client, %amount) +{ + commandToClient(%client, 'setAmmoHudCount', %amount); +} + +//---------------------------------------------------------------------------- +function clientCmdSetAmmoHudCount(%amount) +{ + if(%amount == -1) + ammoHud.setValue(""); + else + ammoHud.setValue(%amount); +} + +//---------------------------------------------------------------------------- +// Backpack Hud +//---------------------------------------------------------------------------- + +$BackpackHudData[0, itemDataName] = "AmmoPack"; +$BackpackHudData[0, bitmapName] = "gui/hud_new_packammo.png"; +$BackpackHudData[1, itemDataName] = "CloakingPack"; +$BackpackHudData[1, bitmapName] = "gui/hud_new_packcloak.png"; +$BackpackHudData[2, itemDataName] = "EnergyPack"; +$BackpackHudData[2, bitmapName] = "gui/hud_new_packenergy.png"; +$BackpackHudData[3, itemDataName] = "RepairPack"; +$BackpackHudData[3, bitmapName] = "gui/hud_new_packrepair.png"; +$BackpackHudData[4, itemDataName] = "SatchelCharge"; +$BackpackHudData[4, bitmapName] = "gui/hud_new_packsatchel.png"; +$BackpackHudData[5, itemDataName] = "ShieldPack"; +$BackpackHudData[5, bitmapName] = "gui/hud_new_packshield.png"; +$BackpackHudData[6, itemDataName] = "InventoryDeployable"; +$BackpackHudData[6, bitmapName] = "gui/hud_new_packinventory.png"; +$BackpackHudData[7, itemDataName] = "MotionSensorDeployable"; +$BackpackHudData[7, bitmapName] = "gui/hud_new_packmotionsens.png"; +$BackpackHudData[8, itemDataName] = "PulseSensorDeployable"; +$BackpackHudData[8, bitmapName] = "gui/hud_new_packradar.png"; +$BackpackHudData[9, itemDataName] = "TurretOutdoorDeployable"; +$BackpackHudData[9, bitmapName] = "gui/hud_new_packturretout.png"; +$BackpackHudData[10, itemDataName] = "TurretIndoorDeployable"; +$BackpackHudData[10, bitmapName] = "gui/hud_new_packturretin.png"; +$BackpackHudData[11, itemDataName] = "SensorJammerPack"; +$BackpackHudData[11, bitmapName] = "gui/hud_new_packsensjam.png"; +$BackpackHudData[12, itemDataName] = "AABarrelPack"; +$BackpackHudData[12, bitmapName] = "gui/hud_new_packturret.png"; +$BackpackHudData[13, itemDataName] = "FusionBarrelPack"; +$BackpackHudData[13, bitmapName] = "gui/hud_new_packturret.png"; +$BackpackHudData[14, itemDataName] = "MissileBarrelPack"; +$BackpackHudData[14, bitmapName] = "gui/hud_new_packturret.png"; +$BackpackHudData[15, itemDataName] = "PlasmaBarrelPack"; +$BackpackHudData[15, bitmapName] = "gui/hud_new_packturret.png"; +$BackpackHudData[16, itemDataName] = "ELFBarrelPack"; +$BackpackHudData[16, bitmapName] = "gui/hud_new_packturret.png"; +$BackpackHudData[17, itemDataName] = "MortarBarrelPack"; +$BackpackHudData[17, bitmapName] = "gui/hud_new_packturret.png"; + +$BackpackHudCount = 18; + +function GameConnection::setBackpackHudItem(%client, %name, %addItem) +{ + for(%i = 0; %i < $BackpackHudCount; %i++) + if($BackpackHudData[%i, itemDataName] $= %name) + commandToClient(%client, 'setBackpackHudItem', %i, %addItem); +} + +function clientCmdSetBackpackHudItem(%num, %addItem) +{ + if(%addItem) + { + backpackIcon.setBitmap($BackpackHudData[%num, bitmapName]); + backpackFrame.setVisible(true); + backpackIcon.setVisible(true); + backpackFrame.pack = true; + } + else + { + backpackIcon.setBitmap(""); + backpackFrame.setVisible(false); + backpackText.setValue(""); + backpackText.setVisible(false); + backpackFrame.pack = false; + } +} + +function GameConnection::updateSensorPackText(%client, %num) +{ + commandToClient(%client, 'updatePackText', %num); +} + +function clientCmdUpdatePackText(%num) +{ + backpackText.setValue(%num); + if(%num == 0) + backpackText.setVisible(false); + else + backpackText.setVisible(true); +} + +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- +$InventoryHudData[0, bitmapName] = "gui/hud_handgren.png"; +$InventoryHudData[0, itemDataName] = Grenade; +$InventoryHudData[0, ammoDataName] = Grenade; +$InventoryHudData[0, slot] = 0; +$InventoryHudData[1, bitmapName] = "gui/hud_mine.png"; +$InventoryHudData[1, itemDataName] = Mine; +$InventoryHudData[1, ammoDataName] = Mine; +$InventoryHudData[1, slot] = 1; +$InventoryHudData[2, bitmapName] = "gui/hud_medpack.png"; +$InventoryHudData[2, itemDataName] = RepairKit; +$InventoryHudData[2, ammoDataName] = RepairKit; +$InventoryHudData[2, slot] = 3; +$InventoryHudData[3, bitmapName] = "gui/hud_handgren.png"; +$InventoryHudData[3, itemDataName] = FlashGrenade; +$InventoryHudData[3, ammoDataName] = FlashGrenade; +$InventoryHudData[3, slot] = 0; +$InventoryHudData[4, bitmapName] = "gui/hud_handgren.png"; +$InventoryHudData[4, itemDataName] = ConcussionGrenade; +$InventoryHudData[4, ammoDataName] = ConcussionGrenade; +$InventoryHudData[4, slot] = 0; +$InventoryHudData[5, bitmapName] = "gui/hud_handgren.png"; +$InventoryHudData[5, itemDataName] = FlareGrenade; +$InventoryHudData[5, ammoDataName] = FlareGrenade; +$InventoryHudData[5, slot] = 0; +$InventoryHudData[6, bitmapName] = "gui/hud_handgren.png"; +$InventoryHudData[6, itemDataName] = CameraGrenade; +$InventoryHudData[6, ammoDataName] = CameraGrenade; +$InventoryHudData[6, slot] = 0; +$InventoryHudData[7, bitmapName] = "gui/hud_beacon.png"; +$InventoryHudData[7, itemDataName] = Beacon; +$InventoryHudData[7, ammoDataName] = Beacon; +$InventoryHudData[7, slot] = 2; + +$InventoryHudCount = 8; + +//---------------------------------------------------------------------------- +// Inventory Hud +//---------------------------------------------------------------------------- +//------------------------------------------------------------------------- --- +function GameConnection::setInventoryHudBitmap(%client, %slot, %name, %bitmap) +{ + commandToClient(%client, 'setInventoryHudBitmap',%slot,%name,%bitmap); +} + +//---------------------------------------------------------------------------- +function clientCmdSetInventoryHudBitmap(%slot, %name, %bitmap) +{ + inventoryHud.setInventoryBitmap(%slot,%bitmap); +} + +//---------------------------------------------------------------------------- +function GameConnection::setInventoryHudItem(%client, %name, %amount, %addItem) +{ + for(%i = 0; %i < $InventoryHudCount; %i++) + if($InventoryHudData[%i, itemDataName] $= %name) + { + if($InventoryHudData[%i, ammoDataName] !$= "") + commandToClient(%client, 'setInventoryHudItem',$InventoryHudData[%i, slot],%amount, %addItem); + else + commandToClient(%client, 'setInventoryHudItem',$InventoryHudData[%i, slot],-1, %addItem); + break; + } +} + +//---------------------------------------------------------------------------- +function clientCmdSetInventoryHudItem(%slot, %amount, %addItem) +{ + if(%addItem) + inventoryHud.addInventory(%slot, %amount); + else + inventoryHud.removeInventory(%slot); +} + +//---------------------------------------------------------------------------- +function GameConnection::setInventoryHudAmount(%client, %name, %amount) +{ + for(%i = 0; %i < $InventoryHudCount; %i++) + if($InventoryHudData[%i, ammoDataName] $= %name) + { + commandToClient(%client, 'setInventoryHudAmount',$InventoryHudData[%i, slot], %amount); + break; + } +} + +//---------------------------------------------------------------------------- +function clientCmdSetInventoryHudAmount(%slot, %amount) +{ + inventoryHud.setAmount(%slot, %amount); +} + +//---------------------------------------------------------------------------- +function GameConnection::setInventoryHudBackGroundBmp(%client, %name) +{ + commandToClient(%client, 'setInventoryHudBackGroundBmp',%name); +} + +//---------------------------------------------------------------------------- +function clientCmdSetInventoryHudBackGroundBmp(%name) +{ + inventoryHud.setBackGroundBitmap(%name); +} + +//---------------------------------------------------------------------------- +function GameConnection::setInventoryHudClearAll(%client) +{ + commandToClient(%client, 'setInventoryHudClearAll'); +} + +//---------------------------------------------------------------------------- +function clientCmdSetInventoryHudClearAll() +{ + inventoryHud.clearAll(); + backpackIcon.setBitmap(""); + backpackFrame.setVisible(false); +} + + +//---------------------------------------------------------------------------- +// MessageHud +function MessageHud::open(%this) +{ + %offset = 6; + + if(%this.isVisible()) + return; + + if(%this.isTeamMsg) + %text = "TEAM:"; + else + %text = "GLOBAL:"; + + MessageHud_Text.setValue(%text); + + %windowPos = "8 " @ ( getWord( outerChatHud.position, 1 ) + getWord( outerChatHud.extent, 1 ) + 1 ); + %windowExt = getWord( OuterChatHud.extent, 0 ) @ " " @ getWord( MessageHud_Frame.extent, 1 ); + + if( MainVoteHud.isVisible() ) + { + %votePos = firstWord( MainVoteHud.position ) @ " " @ ( getWord( OuterChatHud.extent, 1 ) + getWord( messageHud_Frame.extent, 1 ) + 10 ); + MainVoteHud.position = %votePos; + } + + if( voiceCommHud.isVisible() ) + { + %vCommPos = firstWord( voiceCommHud.position ) SPC ( getWord( OuterChatHud.extent, 1 ) + getWord( messageHud_Frame.extent, 1 ) + 18 ); + voiceCommHud.position = %vCommPos; + } + + %textExtent = getWord(MessageHud_Text.extent, 0); + %ctrlExtent = getWord(MessageHud_Frame.extent, 0); + + Canvas.pushDialog(%this); + + messageHud_Frame.position = %windowPos; + messageHud_Frame.extent = %windowExt; + MessageHud_Edit.position = setWord(MessageHud_Edit.position, 0, %textExtent + %offset); + MessageHud_Edit.extent = setWord(MessageHud_Edit.extent, 0, %ctrlExtent - %textExtent - (2 * %offset)); + + %this.setVisible(true); + MessageHud_Edit.makeFirstResponder(true); +} + +//------------------------------------------------------------------------------ +function MessageHud::close(%this) +{ + if(!%this.isVisible()) + return; + + // readjust vote hud if open + if( MainVoteHud.isVisible() ) + { + %tempY = getWord(outerChatHud.position, 1) + getWord(outerChatHud.extent, 1) + 2; + %mainVoteX = firstWord(mainVoteHud.position); + %voteHudPos = %mainVoteX SPC %tempY; + mainVoteHud.position = %voteHudPos; + } + // put voice comm hud back where it was (if it moved) + %vTempY = getWord(outerChatHud.position, 1) + getWord(outerChatHud.extent, 1) + 12; + %mainCommX = firstWord(voiceCommHud.position); + %commHudPos = %mainCommX SPC %vTempY; + voiceCommHud.position = %commHudPos; + + Canvas.popDialog(%this); + %this.setVisible(false); + MessageHud_Edit.setValue(""); +} + +//------------------------------------------------------------------------------ +function MessageHud::toggleState(%this) +{ + if(%this.isVisible()) + %this.close(); + else + %this.open(); +} + +//------------------------------------------------------------------------------ +function MessageHud_Edit::onEscape(%this) +{ + MessageHud.close(); +} + +//------------------------------------------------------------------------------ +function MessageHud_Edit::eval(%this) +{ + %text = trim(%this.getValue()); + if(%text !$= "") + { + if(MessageHud.isTeamMsg) + commandToServer('teamMessageSent', %text); + else + commandToServer('messageSent', %text); + } + + MessageHud.close(); +} + +//------------------------------------------------------------------------------ +// main chat hud +function MainChatHud::onWake( %this ) +{ + // set the chat hud to the users pref + %this.setChatHudLength( $Pref::ChatHudLength ); +} + +// chat hud sizes +$outerChatLenY[1] = 72; +$outerChatLenY[2] = 140; +$outerChatLenY[3] = 200; + +// size for scroll +$chatScrollLenY[1] = 64; +$chatScrollLenY[2] = 128; +$chatScrollLenY[3] = 192; + +//------------------------------------------------------------------------------ +function MainChatHud::setChatHudLength( %this, %length ) +{ + %outerChatLenX = firstWord(outerChatHud.extent); + %chatScrollLenX = firstWord(chatScrollHud.extent); + %OCHextent = %outerChatLenX SPC $outerChatLenY[%length]; + %CSHextent = %chatScrollLenX SPC $chatScrollLenY[%length]; + + outerChatHud.extent = %OCHextent; + chatScrollHud.extent = %CSHextent; + + %totalLines = HudMessageVector.getNumLines(); + %posLines = %length * 4; + %linesOver = ( %totalLines - %posLines ) * 14; + ChatPageDown.position = ( firstWord( outerChatHud.extent ) - 20 ) @ " " @ ( $chatScrollLenY[%length] - 6 ); + + if( ( %linesOver > 0 ) && !%sizeIncrease ) + { + %linesOver = %totalLines - %posLines; + %posAdjust = %linesOver * ChatHud.profile.fontSize + 3; + + %newPos = "0" @ " " @ ( -1 * %posAdjust ); + ChatHud.position = %newPos; + } + else if( %sizeIncrease && ( %linesOver > 0 ) ) + { + %curPos = getWord( ChatHud.position, 1 ); + %newY = %curPos + ( 4 * 14 ); + %newPos = "0 " @ %newY; + ChatHud.position = %newPos; + } + else if( %linesOver <= 0 ) + { + ChatHud.position = "0 0"; + } + + // adjust votehud and voicecommhud to be just beneath chathud + %tempY = getWord(outerChatHud.position, 1) + getWord(outerChatHud.extent, 1) + 2; + %vTempY = %tempY + 10; + %mainVoteX = firstWord(mainVoteHud.position); + %vCommX = firstWord(voiceCommHud.position); + %voteHudPos = %mainVoteX SPC %tempY; + %vCommPos = %vCommX SPC %vTempY; + mainVoteHud.position = %voteHudPos; + voiceCommHud.position = %vCommPos; + ChatHud.resize(firstWord(ChatHud.position), getWord(ChatHud.position, 1), firstWord(ChatHud.extent), getWord(ChatHud.extent, 1)); +} + +//------------------------------------------------------------------------------ +function MainChatHud::nextChatHudLen( %this ) +{ + $pref::chatHudLength++; + if($pref::chatHudLength == 4) + { + $pref::chatHudLength = 1; + %sizeIncrease = false; + ChatPageDown.position = ( firstWord( outerChatHud.extent ) - 20 ) @ " 50"; + } + else + %sizeIncrease = true; + + %outerChatLenX = firstWord(outerChatHud.extent); + %chatScrollLenX = firstWord(chatScrollHud.extent); + %OCHextent = %outerChatLenX SPC $outerChatLenY[$pref::chatHudLength]; + %CSHextent = %chatScrollLenX SPC $chatScrollLenY[$pref::chatHudLength]; + + outerChatHud.extent = %OCHextent; + chatScrollHud.extent = %CSHextent; + + %totalLines = HudMessageVector.getNumLines(); + %posLines = $pref::chatHudLength * 4; + %linesOver = ( %totalLines - %posLines ) * 14; + ChatPageDown.position = ( firstWord( outerChatHud.extent ) - 20 ) @ " " @ ( $chatScrollLenY[$pref::chatHudLength] - 6 ); + + if( ( %linesOver > 0 ) && !%sizeIncrease ) + { + %linesOver = %totalLines - %posLines; + %posAdjust = %linesOver * ChatHud.profile.fontSize + 3; + + %newPos = "0" @ " " @ ( -1 * %posAdjust ); + ChatHud.position = %newPos; + } + else if( %sizeIncrease && ( %linesOver > 0 ) ) + { + %curPos = getWord( ChatHud.position, 1 ); + %newY = %curPos + ( 4 * 14 ); + %newPos = "0 " @ %newY; + ChatHud.position = %newPos; + } + else if( %linesOver <= 0 ) + { + ChatHud.position = "0 0"; + } + + // adjust votehud to be just beneath chathud + %tempY = getWord(outerChatHud.position, 1) + getWord(outerChatHud.extent, 1) + 2; + %vTempY = %tempY + 10; + %mainVoteX = firstWord(mainVoteHud.position); + %vCommX = firstWord(voiceCommHud.position); + %voteHudPos = %mainVoteX SPC %tempY; + %vCommPos = %vCommX SPC %vTempY; + mainVoteHud.position = %voteHudPos; + voiceCommHud.position = %vCommPos; + ChatHud.resize(firstWord(ChatHud.position), getWord(ChatHud.position, 1), firstWord(ChatHud.extent), getWord(ChatHud.extent, 1)); +} + +//---------------------------------------------------------------------------- +// MessageHud key handlers +function ToggleMessageHud(%make) +{ + if(%make) + { + MessageHud.isTeamMsg = false; + MessageHud.toggleState(); + } +} + +//------------------------------------------------------------------------------ +function TeamMessageHud(%make) +{ + if(%make) + { + MessageHud.isTeamMsg = true; + MessageHud.toggleState(); + } +} + +//---------------------------------------------------------------------------- +// MessageHud message handlers +function serverCmdTeamMessageSent(%client, %text) +{ + if(strlen(%text) >= $Host::MaxMessageLen) + %text = getSubStr(%text, 0, $Host::MaxMessageLen); + chatMessageTeam(%client, %client.team, '\c3%1: %2', %client.name, %text); +} + +//------------------------------------------------------------------------------ +function serverCmdMessageSent(%client, %text) +{ + if(strlen(%text) >= $Host::MaxMessageLen) + %text = getSubStr(%text, 0, $Host::MaxMessageLen); + chatMessageAll(%client, '\c4%1: %2', %client.name, %text); +} + +//-------------------------------------------------------------------------- +function toggleHuds(%tag) +{ + if($Hud[%tag] && $Hud[%tag].pushed) + hideHud(%tag); + else + showHud(%tag); +} + +//------------------------------------------------------------------------------ + +//modes are standard, pilot, passenger, object, observer +$HudMode = "Observer"; +$HudModeType = "HoverBike"; +$HudModeNode = 0; +function ClientCmdSetHudMode(%mode, %type, %node) +{ + $HudMode = detag(%mode); + $HudModeType = detag(%type); + $HudModeNode = %node; + + clientCmdDisplayHuds(); +} + +//------------------------------------------------------------------------------ +$ControlObjectReticle[AABarrelLarge, bitmap] = "ret_chaingun"; +$ControlObjectReticle[AABarrelLarge, frame] = true; +$ControlObjectReticle[ELFBarrelLarge, bitmap] = "ret_elf"; +$ControlObjectReticle[ELFBarrelLarge, frame] = true; +$ControlObjectReticle[DeployableIndoorBarrel, bitmap] = "ret_blaster"; +$ControlObjectReticle[DeployableIndoorBarrel, frame] = true; +$ControlObjectReticle[MissileBarrelLarge, bitmap] = "ret_missile"; +$ControlObjectReticle[MissileBarrelLarge, frame] = true; +$ControlObjectReticle[MortarBarrelLarge, bitmap] = "ret_mortor"; // mortor? hahaha +$ControlObjectReticle[MortarBarrelLarge, frame] = true; +$ControlObjectReticle[DeployableOutdoorBarrel, bitmap] = "ret_blaster"; +$ControlObjectReticle[DeployableOutdoorBarrel, frame] = true; +$ControlObjectReticle[PlasmaBarrelLarge, bitmap] = "ret_plasma"; +$ControlObjectReticle[PlasmaBarrelLarge, frame] = true; +$ControlObjectReticle[SentryTurretBarrel, bitmap] = "ret_blaster"; +$ControlObjectReticle[SentryTurretBarrel, frame] = true; + +function setControlObjectReticle(%type) +{ + if($ControlObjectReticle[%type, bitmap] !$= "") + { + reticleHud.setBitmap("gui/" @ $ControlObjectReticle[%type, bitmap]); + reticleFrameHud.setVisible($ControlObjectReticle[%type, frame]); + + retCenterHud.setVisible(true); + } + else + retCenterHud.setVisible(false); +} + +function updateActionMaps() +{ + //pop the action maps... + if (isObject(moveMap)) + moveMap.pop(); + if (isObject(passengerKeys)) + passengerKeys.pop(); + if (isObject(flyingCameraMove)) + flyingCameraMove.pop(); + if (isObject(ControlActionMap)) + ControlActionMap.pop(); + + // push the proper map + switch$ ($HudMode) + { + case "Pilot": + passengerKeys.push(); + + case "Passenger": + moveMap.push(); + + case "Object": + moveMap.push(); + ControlActionMap.push(); + + case "Observer": + flyingCameraMove.push(); + + case "PickTeam": + // no mapping + + //case 'Standard': + default: + moveMap.push(); + } +} + +//------------------------------------------------------------------------------ +function ClientCmdDisplayHuds() +{ + if ( $LaunchMode $= "InteriorView" ) + return; + + // only update action maps if playGui is current content + %content = Canvas.getContent(); + if(isObject(%content) && (%content.getName() $= "PlayGui")) + updateActionMaps(); + + ammoHud.setVisible(false); + objectiveHud.setVisible(false); + inventoryHud.setVisible(false); + backpackFrame.setVisible(false); + weaponsHud.setVisible(false); + retCenterHud.setVisible(false); + HudClusterBack.setVisible(false); + outerChatHud.setVisible(false); + clockHud.setVisible(false); + lagHudIndicator.setVisible(false); + controlObjectText.setVisible(false); + clientCmdToggleDashHud(false); + + switch$ ($HudMode) + { + case "Pilot": + clientCmdShowVehicleGauges($HudModeType, $HudModeNode); + clientCmdToggleDashHud(true); + retCenterHud.setVisible(true); + HudClusterBack.setVisible(true); + outerChatHud.setVisible(true); + if (!$showLagIcon) + clockHud.setVisible(true); + else + lagHudIndicator.setVisible(true); + + case "Passenger": + clientCmdShowVehicleGauges($HudModeType, $HudModeNode); + clientCmdToggleDashHud(true); + ammoHud.setVisible(true); + objectiveHud.setVisible(true); + inventoryHud.setVisible(true); + weaponsHud.setVisible(true); + if(backpackFrame.pack) + backpackFrame.setVisible(true); + retCenterHud.setVisible(true); + HudClusterBack.setVisible(true); + outerChatHud.setVisible(true); + if (!$showLagIcon) + clockHud.setVisible(true); + else + lagHudIndicator.setVisible(true); + clientCmdSetWeaponsHudActive(0); + + case "Object": + ammoHud.setVisible(true); + HudClusterBack.setVisible(true); + outerChatHud.setVisible(true); + controlObjectText.setVisible(true); + if (!$showLagIcon) + clockHud.setVisible(true); + else + lagHudIndicator.setVisible(true); + + setControlObjectReticle($HudModeType); + + case "Observer": + objectiveHud.setVisible(true); + HudClusterBack.setVisible(true); + outerChatHud.setVisible(true); + if (!$showLagIcon) + clockHud.setVisible(true); + else + lagHudIndicator.setVisible(true); + + case "PickTeam": + ammoHud.setVisible(false); + objectiveHud.setVisible(false); + inventoryHud.setVisible(false); + backpackFrame.setVisible(false); + weaponsHud.setVisible(false); + retCenterHud.setVisible(false); + HudClusterBack.setVisible(false); + outerChatHud.setVisible(false); + controlObjectText.setVisible(false); + clockHud.setVisible(false); + + //case 'Standard': + default: + ammoHud.setVisible(true); + objectiveHud.setVisible(true); + inventoryHud.setVisible(true); + weaponsHud.setVisible(true); + if(backpackFrame.pack) + backpackFrame.setVisible(true); + retCenterHud.setVisible(true); + HudClusterBack.setVisible(true); + outerChatHud.setVisible(true); + if (!$showLagIcon) + clockHud.setVisible(true); + else + lagHudIndicator.setVisible(true); + + if(voteHud.voting) + mainVoteHud.setVisible(1); + else + mainVoteHud.setVisible(0); + + clientCmdSetWeaponsHudActive(0); + } +} + +function clientCmdTogglePlayHuds(%val) +{ + ammoHud.setVisible(%val); + objectiveHud.setVisible(%val); + inventoryHud.setVisible(%val); + if(backpackFrame.pack) + backpackFrame.setVisible(%val); + weaponsHud.setVisible(%val); + retCenterHud.setVisible(%val); + HudClusterBack.setVisible(%val); + outerChatHud.setVisible(%val); + + if (%val) + { + if (!$showLagIcon) + clockHud.setVisible(true); + else + lagHudIndicator.setVisible(true); + } + else + { + clockHud.setVisible(false); + lagHudIndicator.setVisible(false); + } + + if(%val) + { + if(voteHud.voting) + mainVoteHud.setVisible(1); + } + else + mainVoteHud.setVisible(0); +} + +//------------------------------------------------------------------------------ +// - check if anything currently up needs the cursor to be enabled +function keepCursorOn() +{ + return(CommanderMapGui.open || $ConsoleActive); +} + +//------------------------------------------------------------------------------ +function toggleCursorHuds(%tag) +{ + if($Hud[%tag] !$= "" && $Hud[%tag].pushed) + { + if (Canvas.isCursorOn() && !keepCursorOn()) + CursorOff(); + hideHud(%tag); + clientCmdTogglePlayHuds(true); + } + else + { + if (!Canvas.isCursorOn()) + CursorOn(); + showHud(%tag); + clientCmdTogglePlayHuds(false); + } +} + +//------------------------------------------------------------------------------ +function showHud(%tag) +{ + commandToServer('ShowHud', %tag); +} + +//------------------------------------------------------------------------------ +function serverCmdShowHud(%client, %tag) +{ + %tagName = getWord(%tag, 1); + %tag = getWord(%tag, 0); + messageClient(%client, 'OpenHud', "", %tag); + switch$ (%tag) + { + case 'inventoryScreen': + %client.numFavsCount = 0; + inventoryScreen::updateHud(1,%client,%tag); + case 'vehicleHud': + vehicleHud::updateHud(1,%client,%tag); + case 'scoreScreen': + updateScoreHudThread(%client, %tag); + } +} + +//------------------------------------------------------------------------------ +function updateScoreHudThread(%client, %tag) +{ + Game.updateScoreHud(%client, %tag); + cancel(%client.scoreHudThread); + %client.scoreHudThread = schedule(3000, %client, "updateScoreHudThread", %client, %tag); +} + +//------------------------------------------------------------------------------ +function hideHud(%tag) +{ + commandToServer('HideHud', %tag); +} + +//------------------------------------------------------------------------------ +function serverCmdHideHud(%client, %tag) +{ + %tag = getWord(%tag, 0); + messageClient(%client, 'CloseHud', "", %tag); + switch$ (%tag) + { + case 'scoreScreen': + cancel(%client.scoreHudThread); + %client.scoreHudThread = ""; + } +} + +//------------------------------------------------------------------------------ +addMessageCallback('OpenHud', openHud); +addMessageCallback('CloseHud', closeHud); +addMessageCallback('ClearHud', clearHud); +addMessageCallback('SetLineHud', setLineHud); +addMessageCallback('RemoveLineHud', removeLineHud); + +//------------------------------------------------------------------------------ +function openHud(%msgType, %msgString, %tag) +{ + // Vehicle hud can only be pushed on the PlayGui: + if ( %tag $= 'vehicleHud' && Canvas.getContent() != PlayGui.getId() ) + return; + + %tagName = getWord(%tag, 1); + %tag = getWord(%tag, 0); + if($Hud[%tag] $= "") + { + %tagName.loadHud(%tag); + %tagName.setupHud(%tag); + } + Canvas.pushDialog($Hud[%tag]); + $Hud[%tag].pushed = 1; +} + +//------------------------------------------------------------------------------ +function closeHud(%msgType, %msgString, %tag) +{ + %tag = getWord(%tag, 0); + if($Hud[%tag].pushed) + { + $Hud[%tag].setVisible(false); + Canvas.popDialog($Hud[%tag]); + $Hud[%tag].pushed = 0; + if (Canvas.isCursorOn() && !keepCursorOn()) + CursorOff(); + } +} + +//------------------------------------------------------------------------------ +function clearHud(%msgType, %msgString, %tag, %a0) +{ + %tag = getWord(%tag, 0); + %startingLine = detag(%a0); + + while ($Hud[%tag].data[%startingLine, 0] !$= "") + { + for(%i = 0; %i < $Hud[%tag].numCol; %i++) + { + $Hud[%tag].childGui.remove($Hud[%tag].data[%startingLine, %i]); + $Hud[%tag].data[%startingLine, %i] = ""; + } + + //don't forget to resize + if (%tag $= 'scoreScreen') + { + %prevExtent = $Hud[%tag].childGui.extent; + $Hud[%tag].childGui.extent = firstWord(%prevExtent) SPC (getWord(%prevExtent, 1) - 24); + } + + %startingLine++; + } +} + +//------------------------------------------------------------------------------ +function removeLineHud(%msgType, %msgString, %hudName, %lineNumber, %a0, %a1, %a2, %a3) +{ + %tag = getWord(%hudName, 0); + %lineNum = detag(%lineNumber); + if($Hud[%tag].data[%lineNum,0] !$= "") + for(%i = 0; %i < $Hud[%tag].numCol; %i++) + { + $Hud[%tag].childGui.remove($Hud[%tag].data[%lineNum, %i]); + $Hud[%tag].data[%lineNum, %i] = ""; + } + + //don't forget to resize + if (%tag $= 'scoreScreen') + { + %prevExtent = $Hud[%tag].childGui.extent; + $Hud[%tag].childGui.extent = firstWord(%prevExtent) SPC (getWord(%prevExtent, 1) - 24); + } +} + +//------------------------------------------------------------------------------ +function setLineHud(%msgType, %msgString, %hudName, %lineNumber, %a0, %a1, %a2, %a3, %a4) +{ + %tag = getWord(%hudName, 0); + %lineNum = detag(%lineNumber); + + if(!isObject($Hud[%tag].data[%lineNum, 0])) + { + $Hud[%tag].numCol = addLine(%tag, %lineNum, %a0, %a1, %a2, %a3); + for(%i = 0; %i < $Hud[%tag].numCol; %i++) + $Hud[%tag].childGui.add($Hud[%tag].data[%lineNum, %i]); + } + + for(%i = 0; %i < $Hud[%tag].numCol; %i++) + $Hud[%tag].data[%lineNum, %i].hudSetValue(detag(%a[%i]),detag(%a4)); +} + +//------------------------------------------------------------------------------ +function GuiButtonCtrl::hudSetValue(%obj, %text) +{ + %obj.setValue(%text); +} + +//------------------------------------------------------------------------------ +function GuiTextCtrl::hudSetValue(%obj, %text) +{ + %obj.setValue(%text); +} + +//------------------------------------------------------------------------------ +function GuiMLTextCtrl::hudSetValue(%obj, %text) +{ + %obj.setValue(%text); +} + +//------------------------------------------------------------------------------ +function GuiPopUpMenuCtrl::hudSetValue(%obj, %text, %textOverFlow) +{ + if(%textOverFlow !$= "") + %text = %text @ %textOverFlow; + %obj.clear(); + %value = getField(%text,0); + %startVal = 1; + if(%value $= "noSelect") + { + %obj.replaceText(false); + %value = getField(%text,1); + %startVal = 2; + } + else + %obj.replaceText(true); + + %obj.setValue(%value); + if(getFieldCount(%text) > 1) + { + %obj.setActive(true); + for(%i = %startVal; %i < getFieldCount(%text); %i++) + %obj.add(getField(%text, %i), %i); + } + else + %obj.setActive(false); +} + +//------------------------------------------------------------------------------ +function ShellTabButton::hudSetValue( %obj, %text ) +{ + %obj.setText( %text ); +} + +//------------------------------------------------------------------------------ +function addLine(%tag, %lineNum, %a0, %a1, %a2, %a3) +{ + %colNum = 0; + if(isObject($Hud[%tag])) + %colNum = $Hud[%tag].addLine(%tag, %lineNum, detag(%a2), detag(%a3)); + return %colNum; +} + +//------------------------------------------------------------------------------ +function INV_Menu::onSelect( %obj, %index, %text ) +{ + %favList = $Hud['inventoryScreen'].data[0, 1].type TAB $Hud['inventoryScreen'].data[0, 1].getValue(); + for ( %i = 1; %i < $Hud['inventoryScreen'].count; %i++ ) + %favList = %favList TAB $Hud['inventoryScreen'].data[%i, 1].type TAB $Hud['inventoryScreen'].data[%i, 1].getValue(); + commandToServer( 'setClientFav', %favList ); +} + +//------------------------------------------------------------------------------ +function INV_ListMenu::onSelect( %obj, %id, %text, %force ) +{ + // Deselect the current tab ( because it was on the OLD list ): + if ( InventoryScreen.selId !$= "" ) + { + $Hud['inventoryScreen'].staticData[0, InventoryScreen.selId].setValue( false ); + InventoryScreen.selId = ""; + } + + $pref::FavCurrentList = %id; + %favListStart = %id * 10; + + // Select the currently selected favorite if it is now visible: + %tab = $pref::FavCurrentSelect - ( $pref::FavCurrentList * 10 ) + 1; + if ( %tab > 0 && %tab < 11 ) + { + InventoryScreen.selId = %tab; + $Hud['inventoryScreen'].staticData[0, %tab].setValue( true ); + } + + %obj.clear(); + %obj.setValue( %text ); + %count = 10; + %list = 0; + for ( %index = 0; $pref::FavNames[%index] !$= ""; %index++ ) + { + if ( %index >= %count - 1 ) + { + if ( %count != %favListStart + 10 ) + %obj.add( "Favorites " @ %index - 8 @ " - " @ %index + 1, %list ); + + %count += 10; + %list++; + } + } + + for ( %i = 0; %i < 10; %i++ ) + { + $Hud['inventoryScreen'].staticData[0, %i + 1].command = "InventoryScreen.onTabSelect(" @ %favListStart + %i @ ");"; + $Hud['inventoryScreen'].staticData[0, %i + 1].setText( strupr( $pref::FavNames[%favListStart + %i] ) ); + } +} + +//------------------------------------------------------------------------------ +function serverCmdSetClientFav(%client, %text) +{ + if ( getWord( getField( %text, 0 ), 0 ) $= armor ) + { + %client.curFavList = %text; + %validList = checkInventory( %client, %text ); + %client.favorites[0] = getField( %text, 1 ); + %armor = getArmorDatablock( %client, $NameToInv[getField( %validList,1 )] ); + %weaponCount = 0; + %packCount = 0; + %grenadeCount = 0; + %mineCount = 0; + %count = 1; + %client.weaponIndex = ""; + %client.packIndex = ""; + %client.grenadeIndex = ""; + %client.mineIndex = ""; + + for(%i = 3; %i < getFieldCount(%validList); %i = %i + 2) + { + %setItem = false; + switch$ (getField(%validList,%i-1)) + { + case weapon: + if(%weaponCount < %armor.maxWeapons) + { + if(!%weaponCount) + %client.weaponIndex = %count; + else + %client.weaponIndex = %client.weaponIndex TAB %count; + %weaponCount++; + %setItem = true; + } + case pack: + if(%packCount < 1) + { + %client.packIndex = %count; + %packCount++; + %setItem = true; + } + case grenade: + if(%grenadeCount < %armor.maxGrenades) + { + if(!%grenadeCount) + %client.grenadeIndex = %count; + else + %client.grenadeIndex = %client.grenadeIndex TAB %count; + %grenadeCount++; + %setItem = true; + } + case mine: + if(%mineCount < %armor.maxMines) + { + if(!%mineCount) + %client.mineIndex = %count; + else + %client.mineIndex = %client.mineIndex TAB %count; + %mineCount++; + %setItem = true; + } + } + if(%setItem) + { + %client.favorites[%count] = getField(%validList, %i); + %count++; + } + } + %client.numFavs = %count; + %client.numFavsCount = 0; + inventoryScreen::updateHud(1, %client, 'inventoryScreen'); + } +} + +//------------------------------------------------------------------------------ +function getCenterPos(%tag) +{ + %TerExtDivX = getWord(PlayGui.extent, 0) / 2; + %TerExtDivY = getWord(PlayGui.extent, 1) / 2; + + %HudExtDivX = getWord($Hud[%tag].extent,0) / 2; + %HudExtDivY = getWord($Hud[%tag].extent,1) / 2; + + %pos = %TerExtDivX - %HudExtDivX @ " " @ %TerExtDivY - %HudExtDivY; + return %pos; +} + +//------------------------------------------------------------------------------ +function hideZoomHud() +{ + ZoomHud.setVisible(false); + ZoomHud.hideThread = 0; +} + +function calcZoomFOV() +{ + if($pref::player::currentFOV == $pref::player::defaultFov / 2) + $pref::player::currentFOV = $pref::player::defaultFov / 5; + else + $pref::player::currentFOV = $pref::player::currentFOV / 2; + + if($pref::player::currentFOV < 4) + $pref::player::currentFOV = $pref::player::defaultFov / 2; + + if(!$ZoomOn) + { + %pos = getZoomCenter($pref::player::defaultFov / $pref::player::currentFOV); + %extent = getZoomExtent($pref::player::defaultFov / $pref::player::currentFOV); + ZoomHud.resize(getWord(%pos, 0), getWord(%pos, 1), getWord(%extent, 0), getWord(%extent, 1)); + if(ZoomHud.hideThread != 0) + cancel(ZoomHud.hideThread); + ZoomHud.hideThread = schedule(5000, 0, hideZoomHud); + ZoomHud.setVisible(true); + } + else + setFov( $pref::player::currentFOV ); +} + +//------------------------------------------------------------------------------ +function getZoomCenter(%power) +{ + %power += (%power/4); + %TerExtDivX = mFloor(getWord(PlayGui.extent, 0) / 2); + %TerExtDivY = mFloor(getWord(PlayGui.extent, 1) / 2); + + %HudExtDivX = mFloor((getWord(PlayGui.extent, 0) / %power)/2); + %HudExtDivY = mFloor((getWord(PlayGui.extent, 1) / %power)/2); + + %pos = %TerExtDivX - %HudExtDivX @ " " @ %TerExtDivY - %HudExtDivY; + return %pos; +} + +//------------------------------------------------------------------------------ +function getZoomExtent(%power) +{ + %power += (%power/4); + %HudExtDivX = mFloor(getWord(PlayGui.extent, 0) / %power); + %HudExtDivY = mFloor(getWord(PlayGui.extent, 1) / %power); + + %val = %HudExtDivX @ " " @ %HudExtDivY; + + return %val; +} + +//------------------------------------------------------------------------------ +function hideAllHuds() +{ + objectiveHud.setVisible( false ); + outerChatHud.setVisible( false ); + energyHud.setVisible( false ); + damageHud.setVisible( false ); + sensorHudBack.setVisible( false ); + controlObjectText.setVisible( false ); +} + +//------------------------------------------------------------------------------ +function restoreAllHuds() +{ + objectiveHud.setVisible( true ); + outerChatHud.setVisible( true ); + energyHud.setVisible( true ); + damageHud.setVisible( true ); + sensorHudBack.setVisible( true ); +} + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +// voting hud stuff +///////////////////////////////////////////////// +addMessageCallback('clearVoteHud', clearVoteHud); +addMessageCallback('addYesVote', addYesVote); +addMessageCallback('addNoVote', addNoVote); +addMessageCallback('openVoteHud', openVoteHud); +addMessageCallback('closeVoteHud', closeVoteHud); +addMessageCallback('VoteStarted', initVote); + +//------------------------------------------------------------------------------ +function initVote(%msgType, %msgString) +{ + if(!$BottomPrintActive) + { + %yBind = strUpr(getField(moveMap.getBinding(voteYes), 1)); + %nBind = strUpr(getField(moveMap.getBinding(voteNo), 1)); + + %message = detag(%msgString) @ "\nPress " @ %yBind @ " to vote YES or " @ %nBind @ " to vote NO."; + clientCmdBottomPrint(%message, 10, 2); + } +} + +function openVoteHud(%msgType, %msgString, %numClients, %passPercent) +{ + alxPlay(VoteInitiatedSound, 0, 0, 0); + voteHud.voting = true; + + voteHud.totalVotes = 0; + voteHud.size = %numClients; + voteHud.quorum = (%numClients / 2); + + if(voteHud.quorum < 1) + voteHud.quorum = 1; + + voteHud.pass = voteHud.quorum * %passPercent; + + voteHud.setPassValue(%passPercent); + passHash.position = firstWord( mainVoteHud.extent) * %passPercent + 1 @ " -1"; + + if( MessageHud.isVisible() ) + { + %votePos = firstWord( MainVoteHud.position ) @ " " @ ( getWord( OuterChatHud.extent, 1 ) + getWord( messageHud_Frame.extent, 1 ) + 12 ); + MainVoteHud.position = %votePos; + } + else + { + %tempY = getWord(outerChatHud.position, 1) + getWord(outerChatHud.extent, 1) + 2; + %mainVoteX = firstWord(mainVoteHud.position); + %voteHudPos = %mainVoteX SPC %tempY; + mainVoteHud.position = %voteHudPos; + } + + voteHud.setVisible(true); + mainVoteHud.setVisible(true); +} + +function stripBind(%string) +{ + return getSubstr(%string, 9, 90); +} + +//------------------------------------------------------------------------------ +function CloseVoteHud(%msgType, %msgString) +{ + voteHud.setVisible(false); + mainVoteHud.setVisible(false); + voteHud.yesCount = 0; + voteHud.noCount = 0; + voteHud.voting = false; +} + +//------------------------------------------------------------------------------ +function addYesVote(%msgType, %msgString) +{ + voteHud.yesCount++; + voteHud.totalVotes++; + + if(voteHud.isVisible()) + { + voteHud.setYesValue(voteHud.yesCount / voteHud.size); + } +} + +//------------------------------------------------------------------------------ +function addNoVote(%msgType, %msgString) +{ + voteHud.noCount++; + voteHud.totalVotes++; + + if(voteHud.isVisible()) + voteHud.setNoValue(voteHud.noCount / voteHud.size); +} + +//------------------------------------------------------------------------------ +function clearVoteHud(%msgType, %msgString) +{ + voteHud.setYesValue(0.0); + voteHud.setNoValue(0.0); +} + +//------------------------------------------------------------------------------ +function cleanUpHuds() +{ + if($Hud['inventoryScreen'] !$= "") + { + for(%lineNum = 0; $Hud['inventoryScreen'].data[%lineNum, 0] !$= ""; %lineNum++) + for(%i = 0; %i < $Hud['inventoryScreen'].numCol; %i++) + { + $Hud['inventoryScreen'].childGui.remove($Hud['inventoryScreen'].data[%lineNum, %i]); + $Hud['inventoryScreen'].data[%lineNum, %i] = ""; + } + } +} + +function displayObserverHud(%client, %targetClient, %potentialClient) +{ + if (%targetClient > 0) + bottomPrint(%client, "\nYou are now observing: " @ getTaggedString(%targetClient.name), 0, 3); + else if (%potentialClient > 0) + bottomPrint(%client, "\nObserver Fly Mode\n" @ getTaggedString(%potentialClient.name), 0, 3); + else + bottomPrint(%client, "\nObserver Fly Mode", 0, 3); +} + +function hudFirstPersonToggled() +{ + ammoHud.setVisible($firstPerson); +} \ No newline at end of file diff --git a/base/scripts/inventory.cs b/base/scripts/inventory.cs new file mode 100644 index 0000000..46bf048 --- /dev/null +++ b/base/scripts/inventory.cs @@ -0,0 +1,559 @@ +//---------------------------------------------------------------------------- + +// Item Datablocks +// image = Name of mounted image datablock +// onUse(%this,%object) + +// Item Image Datablocks +// item = Name of item inventory datablock + +// ShapeBase Datablocks +// max[Item] = Maximum amount that can be caried + +// ShapeBase Objects +// inv[Item] = Count of item in inventory +//---------------------------------------------------------------------------- + +$TestCheats = 0; + +function serverCmdUse(%client,%data) +{ + // Item names from the client must converted + // into DataBlocks + // %data = ItemDataBlock[%item]; + +// else if(%data $= Mine) +// { +// for(%x = 0; $InvMine[%x] !$= ""; %x++) +// { +// echo("MINE INV: ",$NameToInv[$InvMine[%x]]); +// if(%client.player.inv[$NameToInv[$InvMine[%x]]]) +// { +// echo("MINE INV FOUND: ",$NameToInv[$InvMine[%x]]); +// %data = $NameToInv[$InvMine[%x]]; +// break; +// } +// } +// } + %client.getControlObject().use(%data); +} + +function serverCmdThrow(%client,%data) +{ + // Item names from the client must converted + // into DataBlocks + // %data = ItemDataBlock[%item]; + %client.getControlObject().throw(%data); +} + +function serverCmdThrowWeapon(%client,%data) +{ + // Item names from the client must converted + // into DataBlocks + // %data = ItemDataBlock[%item]; + %client.getControlObject().throwWeapon(); +} + +function serverCmdThrowPack(%client,%data) +{ + %client.getControlObject().throwPack(); +} + +function serverCmdTogglePack(%client,%data) +{ + // this function is apparently never called + %client.getControlObject().togglePack(); +} + +function serverCmdThrowFlag(%client) +{ + //Game.playerDroppedFlag(%client.player); + Game.dropFlag(%client.player); +} + +function serverCmdSelectWeaponSlot( %client, %data ) +{ + %client.getControlObject().selectWeaponSlot( %data ); +} + +function serverCmdCycleWeapon( %client, %data ) +{ + %client.getControlObject().cycleWeapon( %data ); +} + +function serverCmdStartThrowCount(%client, %data) +{ + %client.player.throwStart = getSimTime(); +} + +function serverCmdEndThrowCount(%client, %data) +{ + if(%client.player.throwStart == 0) + return; + + // throwStrength will be how many seconds the key was held + %throwStrength = (getSimTime() - %client.player.throwStart) / 300; + // trim the time to fit between 0.5 and 1.5 + if(%throwStrength > 1.5) + %throwStrength = 1.5; + else if(%throwStrength < 0.5) + %throwStrength = 0.5; + + %throwScale = %throwStrength / 2; + %client.player.throwStrength = %throwScale; + + %client.player.throwStart = 0; +} + +//---------------------------------------------------------------------------- + +function ShapeBase::throwWeapon(%this) +{ + if(Game.shapeThrowWeapon(%this)) { + %image = %this.getMountedImage($WeaponSlot); + %this.throw(%image.item); + %this.client.setWeaponsHudItem(%image.item, 0, 0); + } +} + +function ShapeBase::throwPack(%this) +{ + %image = %this.getMountedImage($BackpackSlot); + %this.throw(%image.item); + %this.client.setBackpackHudItem(%image.item, 0); +} + +function ShapeBase::throw(%this,%data) +{ + if (%this.inv[%data.getName()] > 0) { + // Throw item first... + %this.throwItem(%data); + %this.decInventory(%data,1); + return true; + } + return false; +} + +function ShapeBase::use(%this, %data) +{ + //if(%data.class $= "Weapon") { + // error("ShapeBase::use " @ %data); + //} + if(%data $= Grenade) + { + // figure out which grenade type you're using + for(%x = 0; $InvGrenade[%x] !$= ""; %x++) { + if(%this.inv[$NameToInv[$InvGrenade[%x]]] > 0) + { + %data = $NameToInv[$InvGrenade[%x]]; + break; + } + } + } + else if(%data $= "Backpack") { + %pack = %this.getMountedImage($BackpackSlot); + // if you don't have a pack but have placed a satchel charge, detonate it + if(!%pack && (%this.thrownChargeId > 0) && %this.thrownChargeId.armed ) + { + %this.playAudio( 0, SatchelChargeExplosionSound ); + schedule( 800, %this, "detonateSatchelCharge", %this ); + return true; + } + } + else if(%data $= Beacon) + { + %data.onUse(%this); + if (%this.inv[%data.getName()] > 0) + return true; + } + // default case + if (%this.inv[%data.getName()] > 0) { + %data.onUse(%this); + return true; + } + return false; +} + +function ShapeBase::pickup(%this,%obj,%amount) +{ + %data = %obj.getDatablock(); + %delta = %this.incInventory(%data,%amount); + if (%delta) + %data.onPickup(%obj,%this,%delta); + return %delta; +} + +function ShapeBase::hasInventory(%this, %data) +{ + // changed because it was preventing weapons cycling correctly (MES) + return (%this.inv[%data] > 0); +} + +function ShapeBase::maxInventory(%this,%data) +{ + if($TestCheats) + return 999; + else + return %this.getDatablock().max[%data.getName()]; +} + +function ShapeBase::incInventory(%this,%data,%amount) +{ + %max = %this.maxInventory(%data); + %cv = %this.inv[%data.getName()]; + if (%cv < %max) { + if (%cv + %amount > %max) + %amount = %max - %cv; + %this.setInventory(%data,%cv + %amount); + %data.incCatagory(%this); // Inc the players weapon count + return %amount; + } + return 0; +} + +function ShapeBase::decInventory(%this,%data,%amount) +{ + %name = %data.getName(); + %cv = %this.inv[%name]; + if (%cv > 0) { + if (%cv < %amount) + %amount = %cv; + %this.setInventory(%data,%cv - %amount, true); + %data.decCatagory(%this); // Dec the players weapon count + return %amount; + } + return 0; +} + +function SimObject::decCatagory(%this) +{ + //function was added to reduce console err msg spam +} + +function SimObject::incCatagory(%this) +{ + //function was added to reduce console err msg spam +} + +function ShapeBase::setInventory(%this,%data,%value,%force) +{ + %name = %data.getName(); + if (%value < 0) + %value = 0; + else + { + if (!%force) + { + // Impose inventory limits + %max = %this.maxInventory(%data); + if (%value > %max) + %value = %max; + } + } + if (%this.inv[%name] != %value) + { + %this.inv[%name] = %value; + %data.onInventory(%this,%value); + + if ( %data.className $= "Weapon" ) + { + if ( %this.weaponSlotCount $= "" ) + %this.weaponSlotCount = 0; + + %cur = -1; + for ( %slot = 0; %slot < %this.weaponSlotCount; %slot++ ) + { + if ( %this.weaponSlot[%slot] $= %name ) + { + %cur = %slot; + break; + } + } + + if ( %cur == -1 ) + { + // Put this weapon in the next weapon slot: + if ( %this.weaponSlot[%this.weaponSlotCount - 1] $= "TargetingLaser" ) + { + %this.weaponSlot[%this.weaponSlotCount - 1] = %name; + %this.weaponSlot[%this.weaponSlotCount] = "TargetingLaser"; + } + else + %this.weaponSlot[%this.weaponSlotCount] = %name; + %this.weaponSlotCount++; + } + else + { + // Remove the weapon from the weapon slot: + for ( %i = %cur; %i < %this.weaponSlotCount - 1; %i++ ) + %this.weaponSlot[%i] = %this.weaponSlot[%i + 1]; + %this.weaponSlot[%i] = ""; + %this.weaponSlotCount--; + } + } + + %this.getDataBlock().onInventory(%data,%value); + } + return %value; +} + +function ShapeBase::getInventory(%this,%data) +{ + return %this.inv[%data.getName()]; +} + +function ShapeBase::hasAmmo( %this, %weapon ) +{ + switch$ ( %weapon ) + { + case Blaster: + return( true ); + case Plasma: + return( %this.getInventory( PlasmaAmmo ) > 0 ); + case Chaingun: + return( %this.getInventory( ChaingunAmmo ) > 0 ); + case Disc: + return( %this.getInventory( DiscAmmo ) > 0 ); + case GrenadeLauncher: + return( %this.getInventory( GrenadeLauncherAmmo ) > 0 ); + case SniperRifle: + return( %this.getInventory( EnergyPack ) ); + case ELFGun: + return( true ); + case Mortar: + return( %this.getInventory( MortarAmmo ) > 0 ); + case MissileLauncher: + return( %this.getInventory( MissileLauncherAmmo ) > 0 ); + case ShockLance: + return( true ); + // This is our kinda hacky way to keep from cycling to the targeting laser: + case TargetingLaser: + return( false ); + default: + warn( "\"" @ %weapon @ "\" is not recognized as a weapon!" ); + return( false ); + } +} + +function SimObject::onInventory(%this, %obj) +{ + //function was added to reduce console error msg spam +} + +function ShapeBase::throwItem(%this,%data) +{ + %item = new Item() { + dataBlock = %data; + rotation = "0 0 1 " @ (getRandom() * 360); + }; + MissionCleanup.add(%item); + %this.throwObject(%item); +} + +function ShapeBase::throwObject(%this,%obj) +{ + //if the object is being thrown by a corpse, use a random vector + if (%this.getState() $= "Dead") + { + %vec = (-1.0 + getRandom() * 2.0) SPC (-1.0 + getRandom() * 2.0) SPC getRandom(); + %vec = vectorScale(%vec, 10); + } + + // else Initial vel based on the dir the player is looking + else + { + %eye = %this.getEyeVector(); + %vec = vectorScale(%eye, 20); + } + + // Add a vertical component to give the item a better arc + %dot = vectorDot("0 0 1",%eye); + if (%dot < 0) + %dot = -%dot; + %vec = vectorAdd(%vec,vectorScale("0 0 8",1 - %dot)); + + // Add player's velocity + %vec = vectorAdd(%vec,%this.getVelocity()); + %pos = getBoxCenter(%this.getWorldBox()); + + //since flags have a huge mass (so when you shoot them, they don't bounce too far) + //we need to up the %vec so that you can still throw them... + if (%obj.getDataBlock().getName() $= "Flag") + %vec = vectorScale(%vec, 40); + + // + %obj.setTransform(%pos); + %obj.applyImpulse(%pos,%vec); + %obj.setCollisionTimeout(%this); + %data = %obj.getDatablock(); + %data.onThrow(%obj,%this); + + //call the AI hook + AIThrowObject(%obj); +} + +function ShapeBase::clearInventory(%this) +{ + %this.setInventory(RepairKit,0); + + %this.setInventory(Mine,0); + //%this.setInventory(MineAir,0); + //%this.setInventory(MineLand,0); + //%this.setInventory(MineSticky,0); + + %this.setInventory(Grenade,0); + %this.setInventory(FlashGrenade,0); + %this.setInventory(ConcussionGrenade,0); + %this.setInventory(FlareGrenade,0); + %this.setInventory(CameraGrenade, 0); + + %this.setInventory(Blaster,0); + %this.setInventory(Plasma,0); + %this.setInventory(Disc,0); + %this.setInventory(Chaingun, 0); + %this.setInventory(Mortar, 0); + %this.setInventory(GrenadeLauncher, 0); + %this.setInventory(MissileLauncher, 0); + %this.setInventory(SniperRifle, 0); + %this.setInventory(TargetingLaser, 0); + %this.setInventory(ELFGun, 0); + %this.setInventory(ShockLance, 0); + + %this.setInventory(PlasmaAmmo,0); + %this.setInventory(ChaingunAmmo, 0); + %this.setInventory(DiscAmmo, 0); + %this.setInventory(GrenadeLauncherAmmo, 0); + %this.setInventory(MissileLauncherAmmo, 0); + %this.setInventory(MortarAmmo, 0); + %this.setInventory(Beacon, 0); + + // take away any pack the player has + %curPack = %this.getMountedImage($BackpackSlot); + if(%curPack > 0) + %this.setInventory(%curPack.item, 0); + +} + +//---------------------------------------------------------------------------- +function ShapeBase::cycleWeapon( %this, %data ) +{ + if ( %this.weaponSlotCount == 0 ) + return; + + %slot = -1; + if ( %this.getMountedImage($WeaponSlot) != 0 ) + { + %curWeapon = %this.getMountedImage($WeaponSlot).item.getName(); + for ( %i = 0; %i < %this.weaponSlotCount; %i++ ) + { + //error("curWeaponName == " @ %curWeaponName); + if ( %curWeapon $= %this.weaponSlot[%i] ) + { + %slot = %i; + break; + } + } + } + + if ( %data $= "prev" ) + { + // Previous weapon... + if ( %slot == 0 || %slot == -1 ) + { + %i = %this.weaponSlotCount - 1; + %slot = 0; + } + else + %i = %slot - 1; + } + else + { + // Next weapon... + if ( %slot == ( %this.weaponSlotCount - 1 ) || %slot == -1 ) + { + %i = 0; + %slot = ( %this.weaponSlotCount - 1 ); + } + else + %i = %slot + 1; + } + + %newSlot = -1; + while ( %i != %slot ) + { + if ( %this.weaponSlot[%i] !$= "" + && %this.hasInventory( %this.weaponSlot[%i] ) + && %this.hasAmmo( %this.weaponSlot[%i] ) ) + { + // player has this weapon and it has ammo or doesn't need ammo + %newSlot = %i; + break; + } + + if ( %data $= "prev" ) + { + if ( %i == 0 ) + %i = %this.weaponSlotCount - 1; + else + %i--; + } + else + { + if ( %i == ( %this.weaponSlotCount - 1 ) ) + %i = 0; + else + %i++; + } + } + + if ( %newSlot != -1 ) + %this.use( %this.weaponSlot[%newSlot] ); +} + +//---------------------------------------------------------------------------- +function ShapeBase::selectWeaponSlot( %this, %data ) +{ + if ( %data < 0 || %data > %this.weaponSlotCount + || %this.weaponSlot[%data] $= "" || %this.weaponSlot[%data] $= "TargetingLaser" ) + return; + + %this.use( %this.weaponSlot[%data] ); +} + +//---------------------------------------------------------------------------- + +function serverCmdGiveAll(%client) +{ + if($TestCheats) + { + %player = %client.player; + %player.setInventory(RepairKit,999); + %player.setInventory(Mine,999); + //%player.setInventory(MineAir,999); + //%player.setInventory(MineLand,999); + //%player.setInventory(MineSticky,999); + %player.setInventory(Grenade,999); + %player.setInventory(FlashGrenade,999); + %player.setInventory(FlareGrenade,999); + %player.setInventory(ConcussionGrenade,999); + %player.setInventory(CameraGrenade, 999); + %player.setInventory(Blaster,1); + %player.setInventory(Plasma,1); + %player.setInventory(Chaingun, 1); + %player.setInventory(Disc,1); + %player.setInventory(GrenadeLauncher, 1); + %player.setInventory(SniperRifle, 1); + %player.setInventory(ELFGun, 1); + %player.setInventory(Mortar, 1); + %player.setInventory(MissileLauncher, 1); + %player.setInventory(ShockLance, 1); + %player.setInventory(TargetingLaser, 1); + %player.setInventory(MissileLauncherAmmo, 999); + %player.setInventory(GrenadeLauncherAmmo, 999); + %player.setInventory(MortarAmmo, 999); + %player.setInventory(PlasmaAmmo,999); + %player.setInventory(ChaingunAmmo, 999); + %player.setInventory(DiscAmmo, 999); + %player.setInventory(Beacon, 999); + } +} \ No newline at end of file diff --git a/base/scripts/inventoryHud.cs b/base/scripts/inventoryHud.cs new file mode 100644 index 0000000..9fea250 --- /dev/null +++ b/base/scripts/inventoryHud.cs @@ -0,0 +1,1011 @@ +//------------------------------------------------------------------------------ +function setUpFavPrefs() +{ + if($pref::FavCurrentSelect $= "") + $pref::FavCurrentSelect = 0; + for(%i = 0; %i < 10; %i++) + { + if($pref::FavNames[%i] $= "") + $pref::FavNames[%i] = "Favorite " @ %i + 1; + if($pref::Favorite[%i] $= "") + $pref::Favorite[%i] = "armor\tLight Armor"; + } + if($pref::FavCurrentList $= "") + $pref::FavCurrentList = 0; +} + +$FavCurrent = 0; +setUpFavPrefs(); + +$InvArmor[0] = "Scout"; +$InvArmor[1] = "Assault"; +$InvArmor[2] = "Juggernaut"; + +$NameToInv["Scout"] = "Light"; +$NameToInv["Assault"] = "Medium"; +$NameToInv["Juggernaut"] = "Heavy"; + + +$InvWeapon[0] = "Blaster"; +$InvWeapon[1] = "Plasma Rifle"; +$InvWeapon[2] = "Chaingun"; +$InvWeapon[3] = "Spinfusor"; +$InvWeapon[4] = "Grenade Launcher"; +$InvWeapon[5] = "Laser Rifle"; +$InvWeapon[6] = "ELF Projector"; +$InvWeapon[7] = "Fusion Mortar"; +$InvWeapon[8] = "Missile Launcher"; +$InvWeapon[9] = "Shocklance"; +//$InvWeapon[10] = "Targeting Laser"; + +$NameToInv["Blaster"] = "Blaster"; +$NameToInv["Plasma Rifle"] = "Plasma"; +$NameToInv["Chaingun"] = "Chaingun"; +$NameToInv["Spinfusor"] = "Disc"; +$NameToInv["Grenade Launcher"] = "GrenadeLauncher"; +$NameToInv["Laser Rifle"] = "SniperRifle"; +$NameToInv["ELF Projector"] = "ELFGun"; +$NameToInv["Fusion Mortar"] = "Mortar"; +$NameToInv["Missile Launcher"] = "MissileLauncher"; +$NameToInv["Shocklance"] = "ShockLance"; +//$NameToInv["Targeting Laser"] = "TargetingLaser"; + + +$InvPack[0] = "Energy Pack"; +$InvPack[1] = "Repair Pack"; +$InvPack[2] = "Shield Pack"; +$InvPack[3] = "Cloak Pack"; +$InvPack[4] = "Sensor Jammer Pack"; +$InvPack[5] = "Ammunition Pack"; +$InvPack[6] = "Satchel Charge"; +$InvPack[7] = "Motion Sensor Pack"; +$InvPack[8] = "Pulse Sensor Pack"; +$InvPack[9] = "Inventory Station"; +$InvPack[10] = "Landspike Turret"; +$InvPack[11] = "Spider Clamp Turret"; +$InvPack[12] = "ELF Turret Barrel"; +$InvPack[13] = "Mortar Turret Barrel"; +$InvPack[14] = "Plasma Turret Barrel"; +$InvPack[15] = "AA Turret Barrel"; +$InvPack[16] = "Missile Turret Barrel"; + +// non-team mission pack choices (DM, Hunters, Rabbit) + +$NTInvPack[0] = "Energy Pack"; +$NTInvPack[1] = "Repair Pack"; +$NTInvPack[2] = "Shield Pack"; +$NTInvPack[3] = "Cloak Pack"; +$NTInvPack[4] = "Sensor Jammer Pack"; +$NTInvPack[5] = "Ammunition Pack"; +$NTInvPack[6] = "Satchel Charge"; +$NTInvPack[7] = "Motion Sensor Pack"; +$NTInvPack[8] = "Pulse Sensor Pack"; +$NTInvPack[9] = "Inventory Station"; + +$NameToInv["Energy Pack"] = "EnergyPack"; +$NameToInv["Repair Pack"] = "RepairPack"; +$NameToInv["Shield Pack"] = "ShieldPack"; +$NameToInv["Cloak Pack"] = "CloakingPack"; +$NameToInv["Sensor Jammer Pack"] = "SensorJammerPack"; +$NameToInv["Ammunition Pack"] = "AmmoPack"; +$NameToInv["Satchel Charge"] = "SatchelCharge"; +$NameToInv["Motion Sensor Pack"] = "MotionSensorDeployable"; +$NameToInv["Pulse Sensor Pack"] = "PulseSensorDeployable"; +$NameToInv["Inventory Station"] = "InventoryDeployable"; +$NameToInv["Landspike Turret"] = "TurretOutdoorDeployable"; +$NameToInv["Spider Clamp Turret"] = "TurretIndoorDeployable"; +$NameToInv["ELF Turret Barrel"] = "ELFBarrelPack"; +$NameToInv["Mortar Turret Barrel"] = "MortarBarrelPack"; +$NameToInv["Plasma Turret Barrel"] = "PlasmaBarrelPack"; +$NameToInv["AA Turret Barrel"] = "AABarrelPack"; +$NameToInv["Missile Turret Barrel"] = "MissileBarrelPack"; + + +$InvGrenade[0] = "Grenade"; +$InvGrenade[1] = "Whiteout Grenade"; +$InvGrenade[2] = "Concussion Grenade"; +$InvGrenade[3] = "Flare Grenade"; +$InvGrenade[4] = "Deployable Camera"; + +$NameToInv["Grenade"] = "Grenade"; +$NameToInv["Whiteout Grenade"] = "FlashGrenade"; +$NameToInv["Concussion Grenade"] = "ConcussionGrenade"; +$NameToInv["Flare Grenade"] = "FlareGrenade"; +$NameToInv["Deployable Camera"] = "CameraGrenade"; + + +$InvMine[0] = "Mine"; + +$NameToInv["Mine"] = "Mine"; + +//$InvBanList[DeployInv, "ElfBarrelPack"] = 1; +//$InvBanList[DeployInv, "MortarBarrelPack"] = 1; +//$InvBanList[DeployInv, "PlasmaBarrelPack"] = 1; +//$InvBanList[DeployInv, "AABarrelPack"] = 1; +//$InvBanList[DeployInv, "MissileBarrelPack"] = 1; +$InvBanList[DeployInv, "InventoryDeployable"] = 1; + +//------------------------------------------------------------------------------ +function InventoryScreen::loadHud( %this, %tag ) +{ + $Hud[%tag] = InventoryScreen; + $Hud[%tag].childGui = INV_Root; + $Hud[%tag].parent = INV_Root; +} + +//------------------------------------------------------------------------------ +function InventoryScreen::setupHud( %this, %tag ) +{ + %favListStart = $pref::FavCurrentList * 10; + %this.selId = $pref::FavCurrentSelect - %favListStart + 1; + + // Add the list menu: + $Hud[%tag].staticData[0, 0] = new ShellPopupMenu(INV_ListMenu) + { + profile = "ShellPopupProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "16 313"; + extent = "170 36"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + maxPopupHeight = "220"; + text = ""; + }; + + // Add favorite tabs: + for( %i = 0; %i < 10; %i++ ) + { + %yOffset = ( %i * 30 ) + 10; + $Hud[%tag].staticData[0, %i + 1] = new ShellTabButton() { + profile = "ShellTabProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 " @ %yOffset; + extent = "206 38"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + command = "InventoryScreen.onTabSelect(" @ %favListStart + %i @ ");"; + text = strupr( $pref::FavNames[%favListStart + %i] ); + }; + $Hud[%tag].staticData[0, %i + 1].setValue( ( %favListStart + %i ) == $pref::FavCurrentSelect ); + + $Hud[%tag].parent.add( $Hud[%tag].staticData[0, %i + 1] ); + } + + %text = "Favorites " @ %favListStart + 1 SPC "-" SPC %favListStart + 10; + $Hud[%tag].staticData[0, 0].onSelect( $pref::FavCurrentList, %text, true ); + + $Hud[%tag].parent.add( $Hud[%tag].staticData[0, 0] ); + + // Add the SAVE button: + $Hud[%tag].staticData[1, 0] = new ShellBitmapButton() + { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "409 295"; + extent = "75 38"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + command = "saveFavorite();"; + text = "SAVE"; + }; + + // Add the name edit control: + $Hud[%tag].staticData[1, 1] = new ShellTextEditCtrl() + { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "217 295"; + extent = "196 38"; + minExtent = "8 8"; + visible = "1"; + altCommand = "saveFavorite()"; + setFirstResponder = "1"; + modal = "1"; + helpTag = "0"; + historySize = "0"; + maxLength = "16"; + }; + + $Hud[%tag].staticData[1, 1].setValue( $pref::FavNames[$pref::FavCurrentSelect] ); + + $Hud[%tag].parent.add( $Hud[%tag].staticData[1, 0] ); + $Hud[%tag].parent.add( $Hud[%tag].staticData[1, 1] ); +} + +//------------------------------------------------------------------------------ +function InventoryScreen::addLine( %this, %tag, %lineNum, %type, %count ) +{ + $Hud[%tag].count = %count; + + // Add label: + %yOffset = ( %lineNum * 30 ) + 28; + $Hud[%tag].data[%lineNum, 0] = new GuiTextCtrl() + { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "228 " @ %yOffset; + extent = "80 22"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = ""; + }; + + // Add drop menu: + $Hud[%tag].data[%lineNum, 1] = new ShellPopupMenu(INV_Menu) + { + profile = "ShellPopupProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "305 " @ %yOffset - 9; + extent = "180 36"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + maxPopupHeight = "200"; + text = ""; + type = %type; + }; + + return 2; +} + +//------------------------------------------------------------------------------ +function InventoryScreen::updateHud( %this, %client, %tag ) +{ + %noSniperRifle = true; + %armor = getArmorDatablock( %client, $NameToInv[%client.favorites[0]] ); + if ( %client.lastArmor !$= %armor ) + { + %client.lastArmor = %armor; + for ( %x = 0; %x < %client.lastNumFavs; %x++ ) + messageClient( %client, 'RemoveLineHud', "", 'inventoryScreen', %x ); + %setLastNum = true; + } + + %cmt = $CurrentMissionType; +//Create - ARMOR - List + %armorList = %client.favorites[0]; + for ( %y = 0; $InvArmor[%y] !$= ""; %y++ ) + if ( $InvArmor[%y] !$= %client.favorites[0] ) + %armorList = %armorList TAB $InvArmor[%y]; + +//Create - WEAPON - List + for ( %y = 0; $InvWeapon[%y] !$= ""; %y++ ) + { + %notFound = true; + for ( %i = 0; %i < getFieldCount( %client.weaponIndex ); %i++ ) + { + %WInv = $NameToInv[$InvWeapon[%y]]; + if ( ( $InvWeapon[%y] $= %client.favorites[getField( %client.weaponIndex,%i )] ) || !%armor.max[%WInv] ) + { + %notFound = false; + break; + } + else if ( "SniperRifle" $= $NameToInv[%client.favorites[getField( %client.weaponIndex,%i )]] ) + { + %noSniperRifle = false; + %packList = "noSelect\tEnergy Pack\tEnergy Pack must be used when \tLaser Rifle is selected!"; + %client.favorites[getField(%client.packIndex,0)] = "Energy Pack"; + } + } + + if ( !($InvBanList[%cmt, %WInv]) ) + { + if ( %notFound && %weaponList $= "" ) + %weaponList = $InvWeapon[%y]; + else if ( %notFound ) + %weaponList = %weaponList TAB $InvWeapon[%y]; + } + } + +//Create - PACK - List + if ( %noSniperRifle ) + { + if ( getFieldCount( %client.packIndex ) ) + %packList = %client.favorites[getField( %client.packIndex, 0 )]; + else + { + %packList = "EMPTY"; + %client.numFavs++; + } + for ( %y = 0; $InvPack[%y] !$= ""; %y++ ) + { + %PInv = $NameToInv[$InvPack[%y]]; + if ( ( $InvPack[%y] !$= %client.favorites[getField( %client.packIndex, 0 )]) && + %armor.max[%PInv] && !($InvBanList[%cmt, %PInv])) + %packList = %packList TAB $Invpack[%y]; + } + } +//Create - GRENADE - List + for ( %y = 0; $InvGrenade[%y] !$= ""; %y++ ) + { + %notFound = true; + for(%i = 0; %i < getFieldCount( %client.grenadeIndex ); %i++) + { + %GInv = $NameToInv[$InvGrenade[%y]]; + if ( ( $InvGrenade[%y] $= %client.favorites[getField( %client.grenadeIndex, %i )] ) || !%armor.max[%GInv] ) + { + %notFound = false; + break; + } + } + if ( !($InvBanList[%cmt, %GInv]) ) + { + if ( %notFound && %grenadeList $= "" ) + %grenadeList = $InvGrenade[%y]; + else if ( %notFound ) + %grenadeList = %grenadeList TAB $InvGrenade[%y]; + } + } + +//Create - MINE - List + for ( %y = 0; $InvMine[%y] !$= "" ; %y++ ) + { + %notFound = true; + %MInv = $NameToInv[$InvMine[%y]]; + for ( %i = 0; %i < getFieldCount( %client.mineIndex ); %i++ ) + if ( ( $InvMine[%y] $= %client.favorites[getField( %client.mineIndex, %i )] ) || !%armor.max[%MInv] ) + { + %notFound = false; + break; + } + + if ( !($InvBanList[%cmt, %MInv]) ) + { + if ( %notFound && %mineList $= "" ) + %mineList = $InvMine[%y]; + else if ( %notFound ) + %mineList = %mineList TAB $InvMine[%y]; + } + } + %client.numFavsCount++; + messageClient( %client, 'SetLineHud', "", %tag, 0, "Armor:", %armorList, armor, %client.numFavsCount ); + %lineCount = 1; + + for ( %x = 0; %x < %armor.maxWeapons; %x++ ) + { + %client.numFavsCount++; + if ( %x < getFieldCount( %client.weaponIndex ) ) + { + %list = %client.favorites[getField( %client.weaponIndex,%x )]; + if ( %list $= Invalid ) + { + %client.favorites[%client.numFavs] = "INVALID"; + %client.weaponIndex = %client.weaponIndex TAB %client.numFavs; + } + } + else + { + %list = "EMPTY"; + %client.favorites[%client.numFavs] = "EMPTY"; + %client.weaponIndex = %client.weaponIndex TAB %client.numFavs; + %client.numFavs++; + } + if ( %list $= empty ) + %list = %list TAB %weaponList; + else + %list = %list TAB %weaponList TAB "EMPTY"; + messageClient( %client, 'SetLineHud', "", %tag, %x + %lineCount, "Weapon Slot " @ %x + 1 @ ": ", %list , weapon, %client.numFavsCount ); + } + %lineCount = %lineCount + %armor.maxWeapons; + + %client.numFavsCount++; + if ( getField( %packList, 0 ) !$= empty && %noSniperRifle ) + %packList = %packList TAB "EMPTY"; + %packText = %packList; + %packOverFlow = ""; + if ( strlen( %packList ) > 255 ) + { + %packText = getSubStr( %packList, 0, 255 ); + %packOverFlow = getSubStr( %packList, 255, 512 ); + } + messageClient( %client, 'SetLineHud', "", %tag, %lineCount, "Pack:", %packText, pack, %client.numFavsCount, %packOverFlow ); + %lineCount++; + + for( %x = 0; %x < %armor.maxGrenades; %x++ ) + { + %client.numFavsCount++; + if ( %x < getFieldCount( %client.grenadeIndex ) ) + { + %list = %client.favorites[getField( %client.grenadeIndex, %x )]; + if (%list $= Invalid) + { + %client.favorites[%client.numFavs] = "INVALID"; + %client.grenadeIndex = %client.grenadeIndex TAB %client.numFavs; + } + } + else + { + %list = "EMPTY"; + %client.favorites[%client.numFavs] = "EMPTY"; + %client.grenadeIndex = %client.grenadeIndex TAB %client.numFavs; + %client.numFavs++; + } + + if ( %list $= empty ) + %list = %list TAB %grenadeList; + else + %list = %list TAB %grenadeList TAB "EMPTY"; + + messageClient( %client, 'SetLineHud', "", %tag, %x + %lineCount, "Grenade:", %list, grenade, %client.numFavsCount ); + } + %lineCount = %lineCount + %armor.maxGrenades; + + for ( %x = 0; %x < %armor.maxMines; %x++ ) + { + %client.numFavsCount++; + if ( %x < getFieldCount( %client.mineIndex ) ) + { + %list = %client.favorites[getField( %client.mineIndex, %x )]; + if ( %list $= Invalid ) + { + %client.favorites[%client.numFavs] = "INVALID"; + %client.mineIndex = %client.mineIndex TAB %client.numFavs; + } + } + else + { + %list = "EMPTY"; + %client.favorites[%client.numFavs] = "EMPTY"; + %client.mineIndex = %client.mineIndex TAB %client.numFavs; + %client.numFavs++; + } + + if ( %list !$= Invalid ) + { + if ( %list $= empty ) + %list = %list TAB %mineList; + else if ( %mineList !$= "" ) + %list = %list TAB %mineList TAB "EMPTY"; + else + %list = %list TAB "EMPTY"; + } + + messageClient( %client, 'SetLineHud', "", %tag, %x + %lineCount, "Mine:", %list, mine, %client.numFavsCount ); + } + + if ( %setLastNum ) + %client.lastNumFavs = %client.numFavs; +} + +//------------------------------------------------------------------------------ +function buyFavorites(%client) +{ + // don't forget -- for many functions, anything done here also needs to be done + // below in buyDeployableFavorites !!! + %client.player.clearInventory(); + %client.setWeaponsHudClearAll(); + %cmt = $CurrentMissionType; + + %curArmor = %client.player.getDatablock(); + %curDmgPct = getDamagePercent(%curArmor.maxDamage, %client.player.getDamageLevel()); + + // armor + %client.armor = $NameToInv[%client.favorites[0]]; + %client.player.setArmor( %client.armor ); + %newArmor = %client.player.getDataBlock(); + + %client.player.setDamageLevel(%curDmgPct * %newArmor.maxDamage); + + // weapons + for(%i = 0; %i < getFieldCount( %client.weaponIndex ); %i++) + { + %inv = $NameToInv[%client.favorites[getField( %client.weaponIndex, %i )]]; + %client.player.setInventory( %inv, 1 ); + switch$ ( %inv ) + { + case Plasma: + %client.player.setInventory( PlasmaAmmo, 400 ); + case Disc: + %client.player.setInventory( DiscAmmo, 400 ); + case GrenadeLauncher: + %client.player.setInventory( GrenadeLauncherAmmo, 400 ); + case Mortar: + %client.player.setInventory( MortarAmmo, 400 ); + case MissileLauncher: + %client.player.setInventory( MissileLauncherAmmo, 400 ); + case Chaingun: + %client.player.setInventory( ChaingunAmmo, 400 ); + } + } + %client.player.weaponCount = getFieldCount( %client.weaponIndex ); + + // pack + %pCh = $NameToInv[%client.favorites[%client.packIndex]]; + if ( %pCh $= "" ) + %client.clearBackpackIcon(); + else + %client.player.setInventory( %pCh, 1 ); + + // if this pack is a deployable that has a team limit, warn the purchaser + // if it's a deployable turret, the limit depends on the number of players (deployables.cs) + if(%pCh $= "TurretIndoorDeployable" || %pCh $= "TurretOutdoorDeployable") + %maxDep = countTurretsAllowed(%pCh); + else + %maxDep = $TeamDeployableMax[%pCh]; + + if(%maxDep !$= "") + { + %depSoFar = $TeamDeployedCount[%client.player.team, %pCh]; + %packName = %client.favorites[%client.packIndex]; + + if(Game.numTeams > 1) + %msTxt = "Your team has "@%depSoFar@" of "@%maxDep SPC %packName@"s deployed."; + else + %msTxt = "You have deployed "@%depSoFar@" of "@%maxDep SPC %packName@"s."; + + messageClient(%client, 'MsgTeamDepObjCount', %msTxt); + } + + // grenades + for ( %i = 0; %i < getFieldCount( %client.grenadeIndex ); %i++ ) + %client.player.setInventory( $NameToInv[%client.favorites[getField( %client.grenadeIndex,%i )]], 30 ); + + // if player is buying cameras, show how many are already deployed + if(%client.favorites[%client.grenadeIndex] $= "Deployable Camera") + { + %maxDep = $TeamDeployableMax[DeployedCamera]; + %depSoFar = $TeamDeployedCount[%client.player.team, DeployedCamera]; + if(Game.numTeams > 1) + %msTxt = "Your team has "@%depSoFar@" of "@%maxDep@" Deployable Cameras placed."; + else + %msTxt = "You have placed "@%depSoFar@" of "@%maxDep@" Deployable Cameras."; + messageClient(%client, 'MsgTeamDepObjCount', %msTxt); + } + + // mines + for ( %i = 0; %i < getFieldCount( %client.mineIndex ); %i++ ) + %client.player.setInventory( $NameToInv[%client.favorites[getField( %client.mineIndex,%i )]], 30 ); + + // miscellaneous stuff -- Repair Kit, Beacons, Targeting Laser + if ( !($InvBanList[%cmt, RepairKit]) ) + %client.player.setInventory( RepairKit, 1 ); + if ( !($InvBanList[%cmt, Beacon]) ) + %client.player.setInventory( Beacon, 400 ); + if ( !($InvBanList[%cmt, TargetingLaser]) ) + %client.player.setInventory( TargetingLaser, 1 ); + + // ammo pack pass -- hack! hack! + if( %pCh $= "AmmoPack" ) + invAmmoPackPass(%client); +} + +//------------------------------------------------------------------------------ +function buyDeployableFavorites(%client) +{ + %player = %client.player; + %prevPack = %player.getMountedImage($BackpackSlot); + %player.clearInventory(); + %client.setWeaponsHudClearAll(); + %cmt = $CurrentMissionType; + + // players cannot buy armor from deployable inventory stations + %weapCount = 0; + for ( %i = 0; %i < getFieldCount( %client.weaponIndex ); %i++ ) + { + %inv = $NameToInv[%client.favorites[getField( %client.weaponIndex, %i )]]; + if ( !($InvBanList[DeployInv, %inv]) ) + { + %player.setInventory( %inv, 1 ); + // increment weapon count if current armor can hold this weapon + if(%player.getDatablock().max[%inv] > 0) + %weapCount++; + switch$ ( %inv ) + { + case Plasma: + %player.setInventory( PlasmaAmmo,400 ); + case Disc: + %player.setInventory( DiscAmmo, 400 ); + case GrenadeLauncher: + %player.setInventory( GrenadeLauncherAmmo, 400 ); + case Mortar: + %player.setInventory( MortarAmmo, 400 ); + case MissileLauncher: + %player.setInventory( MissileLauncherAmmo, 400 ); + case Chaingun: + %player.setInventory( ChaingunAmmo, 400 ); + } + if(%weapCount >= %player.getDatablock().maxWeapons) + break; + } + } + %player.weaponCount = %weapCount; + // give player the grenades and mines they chose, beacons, and a repair kit + for ( %i = 0; %i < getFieldCount( %client.grenadeIndex ); %i++) + { + %GInv = $NameToInv[%client.favorites[getField( %client.grenadeIndex, %i )]]; + if ( !($InvBanList[DeployInv, %GInv]) ) + %player.setInventory( %GInv, 30 ); + } + + // if player is buying cameras, show how many are already deployed + if(%client.favorites[%client.grenadeIndex] $= "Deployable Camera") + { + %maxDep = $TeamDeployableMax[DeployedCamera]; + %depSoFar = $TeamDeployedCount[%client.player.team, DeployedCamera]; + if(Game.numTeams > 1) + %msTxt = "Your team has "@%depSoFar@" of "@%maxDep@" Deployable Cameras placed."; + else + %msTxt = "You have placed "@%depSoFar@" of "@%maxDep@" Deployable Cameras."; + messageClient(%client, 'MsgTeamDepObjCount', %msTxt); + } + + for ( %i = 0; %i < getFieldCount( %client.mineIndex ); %i++ ) + { + %MInv = $NameToInv[%client.favorites[getField( %client.mineIndex, %i )]]; + if ( !($InvBanList[DeployInv, %MInv]) ) + %player.setInventory( %MInv, 30 ); + } + if ( !($InvBanList[DeployInv, Beacon]) && !($InvBanList[%cmt, Beacon]) ) + %player.setInventory( Beacon, 400 ); + if ( !($InvBanList[DeployInv, RepairKit]) && !($InvBanList[%cmt, RepairKit]) ) + %player.setInventory( RepairKit, 1 ); + if ( !($InvBanList[DeployInv, TargetingLaser]) && !($InvBanList[%cmt, TargetingLaser]) ) + %player.setInventory( TargetingLaser, 1 ); + + // players cannot buy deployable station packs from a deployable inventory station + %packChoice = $NameToInv[%client.favorites[%client.packIndex]]; + if ( !($InvBanList[DeployInv, %packChoice]) ) + %player.setInventory( %packChoice, 1 ); + + // if this pack is a deployable that has a team limit, warn the purchaser + // if it's a deployable turret, the limit depends on the number of players (deployables.cs) + if(%packChoice $= "TurretIndoorDeployable" || %packChoice $= "TurretOutdoorDeployable") + %maxDep = countTurretsAllowed(%packChoice); + else + %maxDep = $TeamDeployableMax[%packChoice]; + if((%maxDep !$= "") && (%packChoice !$= "InventoryDeployable")) + { + %depSoFar = $TeamDeployedCount[%client.player.team, %packChoice]; + %packName = %client.favorites[%client.packIndex]; + + if(Game.numTeams > 1) + %msTxt = "Your team has "@%depSoFar@" of "@%maxDep SPC %packName@"s deployed."; + else + %msTxt = "You have deployed "@%depSoFar@" of "@%maxDep SPC %packName@"s."; + + messageClient(%client, 'MsgTeamDepObjCount', %msTxt); + } + + if(%prevPack > 0) + { + // if player had a "forbidden" pack (such as a deployable inventory station) + // BEFORE visiting a deployed inventory station AND still has that pack chosen + // as a favorite, give it back + if((%packChoice $= %prevPack.item) && ($InvBanList[DeployInv, %packChoice])) + %player.setInventory( %prevPack.item, 1 ); + } + + if(%packChoice $= "AmmoPack") + invAmmoPackPass(%client); +} + +function invAmmoPackPass(%client) +{ + // "normal" ammo stuff (everything but mines and grenades) + for ( %idx = 0; %idx < $numAmmoItems; %idx++ ) + { + %ammo = $AmmoItem[%idx]; + %client.player.incInventory(%ammo, AmmoPack.max[%ammo]); + } + //our good friends, the grenade family *SIGH* + // first find out what type of grenade the player has selected + %grenFav = %client.favorites[getField(%client.grenadeIndex, 0)]; + if((%grenFav !$= "EMPTY") && (%grenFav !$= "INVALID")) + %client.player.incInventory($NameToInv[%grenFav], AmmoPack.max[$NameToInv[%grenFav]]); + // now the same check for mines + %mineFav = %client.favorites[getField(%client.mineIndex, 0)]; + if((%mineFav !$= "EMPTY") && (%mineFav !$= "INVALID") && !($InvBanList[%cmt, Mine])) + %client.player.incInventory($NameToInv[%mineFav], AmmoPack.max[$NameToInv[%mineFav]]); +} + +//------------------------------------------------------------------------------ +function loadFavorite( %index, %echo ) +{ + $pref::FavCurrentSelect = %index; + %list = mFloor( %index / 10 ); + + if ( isObject( $Hud['inventoryScreen'] ) ) + { + // Deselect the old tab: + if ( InventoryScreen.selId !$= "" ) + $Hud['inventoryScreen'].staticData[0, InventoryScreen.selId].setValue( false ); + + // Make sure we are looking at the same list: + if ( $pref::FavCurrentList != %list ) + { + %favListStart = %list * 10; + %text = "Favorites " @ %favListStart + 1 SPC "-" SPC %favListStart + 10; + $Hud['inventoryScreen'].staticData[0, 0].onSelect( %list, %text, true ); + } + + // Select the new tab: + %tab = $pref::FavCurrentSelect - ( $pref::FavCurrentList * 10 ) + 1; + InventoryScreen.selId = %tab; + $Hud['inventoryScreen'].staticData[0, %tab].setValue( true ); + + // Update the Edit Name field: + $Hud['inventoryScreen'].staticData[1, 1].setValue( $pref::FavNames[%index] ); + } + + if ( %echo ) + addMessageHudLine( "Inventory set \"" @ $pref::FavNames[%index] @ "\" selected." ); + + commandToServer( 'setClientFav', $pref::Favorite[%index] ); +} + +//------------------------------------------------------------------------------ +function saveFavorite() +{ + if ( $pref::FavCurrentSelect !$= "" ) + { + %favName = $Hud['inventoryScreen'].staticData[1, 1].getValue(); + $pref::FavNames[$pref::FavCurrentSelect] = %favName; + $Hud['inventoryScreen'].staticData[0, $pref::FavCurrentSelect - ($pref::FavCurrentList * 10) + 1].setText( strupr( %favName ) ); + //$Hud[%tag].staticData[1, 1].setValue( %favName ); + %favList = $Hud['inventoryScreen'].data[0, 1].type TAB $Hud['inventoryScreen'].data[0, 1].getValue(); + for ( %i = 1; %i < $Hud['inventoryScreen'].count; %i++ ) + { + %name = $Hud['inventoryScreen'].data[%i, 1].getValue(); + if ( %name $= invalid ) + %name = "EMPTY"; + %favList = %favList TAB $Hud['inventoryScreen'].data[%i, 1].type TAB %name; + } + $pref::Favorite[$pref::FavCurrentSelect] = %favList; + echo("exporting pref::* to ClientPrefs.cs"); + export("$pref::*", "prefs/ClientPrefs.cs", False); + } +// else +// addMessageHudLine("Must First Select A Favorite Button."); +} + +//------------------------------------------------------------------------------ +function addQuickPackFavorite( %pack, %item ) +{ + // this has been such a success it has been changed to handle grenades + // and other equipment as well as packs so everything seems to be called 'pack' + // including the function itself. The default IS pack + + if(%item $= "") + %item = "Pack"; + %packFailMsg = "You cannot use that equipment with your selected loadout."; + if ( $Hud['inventoryScreen'].staticData[1, 1].getValue() $= "" ) + { + //if the player hasnt brought up the inv screen we use his current fav + %currentFav = $pref::Favorite[$pref::FavCurrentSelect]; + //echo(%currentFav); + + for ( %i = 0; %i < getFieldCount( %currentFav ); %i++ ) + { + %type = getField( %currentFav, %i ); + %equipment = getField( %currentFav, %i++ ); + + %invalidPack = checkPackValidity(%pack, %equipment, %item ); + if(%invalidPack) + { + addMessageHudLine( %packFailMsg ); + return; + + } + // Success-------------------------------------------------- + if ( %type $= %item ) + %favList = %favList @ %type TAB %pack @ "\t"; + else + %favList = %favList @ %type TAB %equipment @ "\t"; + } + //echo(%favList); + } + else + { + //otherwise we go with whats on the invScreen (even if its asleep) + %armor = $Hud['inventoryScreen'].data[0, 1].getValue(); + + // check pack validity with armor + %invalidPack = checkPackValidity(%pack, %armor, %item ); + if(%invalidPack) + { + addMessageHudLine( %packFailMsg ); + return; + + } + %favList = $Hud['inventoryScreen'].data[0, 1].type TAB %armor; + for ( %i = 1; %i < $Hud['inventoryScreen'].count; %i++ ) + { + //echo( $Hud['inventoryScreen'].Data[%i, 1].type); + %type = $Hud['inventoryScreen'].data[%i, 1].type; + %equipment = $Hud['inventoryScreen'].data[%i, 1].getValue(); + + if(%type $= %item) + %equipment = %pack; + + // Special Cases again------------------------------------------------ + %invalidPack = checkPackValidity(%pack, %equipment, %item ); + if(%invalidPack) + { + addMessageHudLine( %packFailMsg ); + return; + + } + + %favList = %favList TAB %type TAB %equipment; + } + //echo(%favList); + } + commandToServer( 'setClientFav', %favList ); + + //we message the player real nice like + addMessageHudLine( "Inventory updated to " @ %pack @ "." ); +} + +function checkPackValidity(%pack, %equipment, %item) +{ + //echo("validityChecking:" SPC %pack SPC %equipment); + + // this is mostly for ease of mod makers + // this is the base restrictions stuff + // for your mod just overwrite this function and + // change the restrictions and onlyUses + + // you must have #1 to use #2 + //%restrict[#1, #2] = true; + + %restrict["Scout", "Inventory Station"] = true; + %restrict["Scout", "Landspike Turret"] = true; + %restrict["Scout", "Spider Clamp Turret"] = true; + %restrict["Scout", "ELF Turret Barrel"] = true; + %restrict["Scout", "Mortar Turret Barrel"] = true; + %restrict["Scout", "AA Turret Barrel"] = true; + %restrict["Scout", "Plasma Turret Barrel"] = true; + %restrict["Scout", "Missile Turret Barrel"] = true; + %restrict["Assault", "Cloak Pack"] = true; + %restrict["Juggernaut", "Cloak Pack"] = true; + + // you can only use #1 if you have a #2 of type #3 + //%require[#1] = #2 TAB #3; + + %require["Laser Rifle"] = "Pack" TAB "Energy Pack"; + + + if(%restrict[%equipment, %pack] ) + return true; + + else if(%require[%equipment] !$="" ) + { + if(%item $= getField(%require[%equipment], 0) ) + { + if(%pack !$= getField(%require[%equipment], 1) ) + return true; + } + } +} + + +//------------------------------------------------------------------------------ +function setDefaultInventory(%client) +{ + commandToClient(%client,'InitLoadClientFavorites'); +} + +//------------------------------------------------------------------------------ +function checkInventory( %client, %text ) +{ + %armor = getArmorDatablock( %client, $NameToInv[getField( %text, 1 )] ); + %list = getField( %text, 0 ) TAB getField( %text, 1 ); + %cmt = $CurrentMissionType; + for( %i = 3; %i < getFieldCount( %text ); %i = %i + 2 ) + { + %inv = $NameToInv[getField(%text,%i)]; + if ( (( %armor.max[%inv] && !($InvBanList[%cmt, %inv]) ) || + getField( %text, %i ) $= Empty || getField( %text, %i ) $= Invalid) + && (($InvTotalCount[getField( %text, %i - 1 )] - $BanCount[getField( %text, %i - 1 )]) > 0)) + %list = %list TAB getField( %text, %i - 1 ) TAB getField( %text, %i ); + else if( $InvBanList[%cmt, %inv] || %inv $= empty || %inv $= "") + %list = %list TAB getField( %text, %i - 1 ) TAB "INVALID"; + } + return %list; +} + +//------------------------------------------------------------------------------ +function getArmorDatablock(%client, %size) +{ + if ( %client.race $= "Bioderm" ) + %armor = %size @ "Male" @ %client.race @ Armor; + else + %armor = %size @ %client.sex @ %client.race @ Armor; + return %armor; +} + +//------------------------------------------------------------------------------ +function InventoryScreen::onWake(%this) +{ + if ( $HudHandle['inventoryScreen'] !$= "" ) + alxStop( $HudHandle['inventoryScreen'] ); + alxPlay(HudInventoryActivateSound, 0, 0, 0); + $HudHandle['inventoryScreen'] = alxPlay(HudInventoryHumSound, 0, 0, 0); + + if ( isObject( hudMap ) ) + { + hudMap.pop(); + hudMap.delete(); + } + new ActionMap( hudMap ); + hudMap.blockBind( moveMap, toggleScoreScreen ); + hudMap.blockBind( moveMap, toggleCommanderMap ); + hudMap.bindCmd( keyboard, escape, "", "InventoryScreen.onDone();" ); + hudMap.push(); +} + +//------------------------------------------------------------------------------ +function InventoryScreen::onSleep() +{ + hudMap.pop(); + hudMap.delete(); + alxStop($HudHandle['inventoryScreen']); + alxPlay(HudInventoryDeactivateSound, 0, 0, 0); + $HudHandle['inventoryScreen'] = ""; +} + +//------------------------------------------------------------------------------ +function InventoryScreen::onDone( %this ) +{ + toggleCursorHuds( 'inventoryScreen' ); +} + +//------------------------------------------------------------------------------ +function InventoryScreen::onTabSelect( %this, %favId ) +{ + loadFavorite( %favId, 0 ); +} + +function createInvBanCount() +{ + $BanCount["Armor"] = 0; + $BanCount["Weapon"] = 0; + $BanCount["Pack"] = 0; + $BanCount["Grenade"] = 0; + $BanCount["Mine"] = 0; + + for(%i = 0; $InvArmor[%i] !$= ""; %i++) + if($InvBanList[$CurrentMissionType, $NameToInv[$InvArmor[%i]]]) + $BanCount["Armor"]++; + $InvTotalCount["Armor"] = %i; + + for(%i = 0; $InvWeapon[%i] !$= ""; %i++) + if($InvBanList[$CurrentMissionType, $NameToInv[$InvWeapon[%i]]]) + $BanCount["Weapon"]++; + $InvTotalCount["Weapon"] = %i; + + for(%i = 0; $InvPack[%i] !$= ""; %i++) + if($InvBanList[$CurrentMissionType, $NameToInv[$InvPack[%i]]]) + $BanCount["Pack"]++; + $InvTotalCount["Pack"] = %i; + + for(%i = 0; $InvGrenade[%i] !$= ""; %i++) + if($InvBanList[$CurrentMissionType, $NameToInv[$InvGrenade[%i]]]) + $BanCount["Grenade"]++; + $InvTotalCount["Grenade"] = %i; + + for(%i = 0; $InvMine[%i] !$= ""; %i++) + if($InvBanList[$CurrentMissionType, $NameToInv[$InvMine[%i]]]) + $BanCount["Mine"]++; + $InvTotalCount["Mine"] = %i; +} \ No newline at end of file diff --git a/base/scripts/item.cs b/base/scripts/item.cs new file mode 100644 index 0000000..9106378 --- /dev/null +++ b/base/scripts/item.cs @@ -0,0 +1,705 @@ +//---------------------------------------------------------------------------- + +// When first mounted (assuming there is ammo): +// SingleShot activate -> ready +// Spinning activate -> idle (spin 0) +// Sustained activate -> ready +// DiscLauncher activate -> reload -> spinup -> ready +// +// Normal operation: +// SingleShot ready -> fire -> reload -> ready +// Spinning idle (spin 0) -> spinup -> ready -> fire -> spindown -> idle +// Sustained ready -> fire -> reload -> ready +// DiscLauncher ready -> fire -> reload -> spinup -> ready + +// Image properties +// emap +// preload +// shapeFile +// mountPoint +// offset +// rotation +// firstPerson +// mass +// usesEnergy +// minEnergy +// accuFire +// lightType +// lightTime +// lightRadius +// lightColor + +// Image state variables +// stateName +// stateTransitionOnLoaded +// stateTransitionOnNotLoaded +// stateTransitionOnAmmo +// stateTransitionOnNoAmmo +// stateTransitionOnTriggerUp +// stateTransitionOnTriggerDown +// stateTransitionOnTimeout +// stateTimeoutValue +// stateFire +// stateEnergyDrain +// stateAllowImageChange +// stateScaleAnimation +// stateDirection +// stateLoadedFlag +// stateSpinThread +// stateRecoil +// stateSequence +// stateSound +// stateScript +// stateEmitter +// stateEmitterTime +// stateEmitterNode + +//---------------------------------------------------------------------------- + +$ItemRespawnTime = 30000; +$ItemPopTime = 30 * 1000; // 30 seconds + +$WeaponSlot = 0; +$AuxiliarySlot = 1; +$BackpackSlot = 2; +$FlagSlot = 3; + +//---------------------------------------------------------------------------- +datablock EffectProfile(ItemPickupEffect) +{ + effectname = "packs/packs.pickupPack"; + minDistance = 2.5; +}; + +datablock AudioProfile(ItemPickupSound) +{ + filename = "fx/packs/packs.pickuppack.wav"; + description = AudioClosest3d; + effect = ItemPickupEffect; + preload = true; +}; + +datablock AudioProfile(ItemThrowSound) +{ + filename = "fx/packs/packs.throwpack.wav"; + description = AudioClosest3d; + preload = true; +}; + +datablock AudioProfile(RepairPatchSound) +{ + filename = "fx/misc/health_patch.wav"; + description = AudioClosest3d; + preload = true; + effect = ItemPickupEffect; + preload = true; +}; + +function ItemData::create(%block) +{ + if(%block $= "flag") + %obj = new Item() { + className = FlagObj; + dataBlock = %block; + static = false; + rotate = false; + }; + else + %obj = new Item() { + dataBlock = %block; + static = true; + //rotate = true; + // don't make "placed items" rotate + rotate = false; + }; + return(%obj); +} + +//-------------------------------------------------------------------------- +function Item::schedulePop(%this) +{ + %itemFadeTime = 1000; // items will take 1 second (1000 milliseconds) to fade out + %this.startFade(%itemFadeTime, $ItemPopTime - %itemFadeTime, true); + %this.schedule($ItemPopTime, "delete"); +} + +function Item::respawn(%this) +{ + %this.startFade(0, 0, true); + %this.schedule($ItemRespawnTime + 100, "startFade", 1000, 0, false); + %this.hide(true); + %this.schedule($ItemRespawnTime, "hide", false); +} + +//-------------------------------------------------------------------------- +function ItemData::onThrow(%data,%obj,%shape) +{ + serverPlay3D(ItemThrowSound, %obj.getTransform()); + // don't schedule a delete for satchelCharges when they're deployed + if(!%data.noTimeout) + %obj.schedulePop(); +} + +function ItemData::onInventory(%data,%shape,%value) +{ + if (!%value) { + // If we don't have any more of these items, make sure + // we don't have an image mounted. + %slot = %shape.getMountSlot(%data.image); + if (%slot != -1) + %shape.unmountImage(%slot); + } +} + +function ItemData::onEnterLiquid(%data, %obj, %coverage, %type) +{ + if(%data.isInvincible) + return; + + switch(%type) + { + case 0: + //Water + case 1: + //Ocean Water + case 2: + //River Water + case 3: + //Stagnant Water + case 4: + //Lava + %obj.delete(); + case 5: + //Hot Lava + %obj.delete(); + case 6: + //Crusty Lava + %obj.delete(); + case 7: + //Quick Sand + } +} + +function ItemData::onLeaveLiquid(%data, %obj, %type) +{ + // dummy +} + +function ItemData::onCollision(%data,%obj,%col) +{ + // Default behavior for items is to get picked + // by the colliding object. + if (%col.getDataBlock().className $= Armor && %col.getState() !$= "Dead") + { + if (%col.isMounted()) + return; + + if (%col.pickup(%obj, 1)) + { + if (%col.client) + { + messageClient(%col.client, 'MsgItemPickup', '\c0You picked up %1.', %data.pickUpName); + serverPlay3D(ItemPickupSound, %col.getTransform()); + } + if (%obj.isStatic()) + %obj.respawn(); + else + %obj.delete(); + } + } +} + +//---------------------------------------------------------------------------- +datablock ItemData(RepairKit) +{ + className = HandInventory; + catagory = "Misc"; + shapeFile = "repair_kit.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2.0; + pickUpName = "a repair kit"; + alwaysAmbient = true; + + computeCRC = true; + emap = true; + +}; + +function RepairKit::onUse(%data,%obj) +{ + // Don't use the kit unless we're damaged + if (%obj.getDamageLevel() != 0) { + %obj.decInventory(%data,1); + %obj.applyRepair(0.2); + messageClient(%obj.client, 'MsgRepairKitUsed', '\c2Repair Kit Used.'); + } +} + +//---------------------------------------------------------------------------- + +datablock ItemData(RepairPatch) +{ + catagory = "Misc"; + shapeFile = "repair_patch.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2.0; + pickUpName = "a repair patch"; + alwaysAmbient = true; + + computeCRC = true; + emap = true; + +}; + +function RepairPatch::onCollision(%data,%obj,%col) +{ + if ( %col.getDataBlock().className $= Armor + && %col.getDamageLevel() != 0 + && %col.getState() !$= "Dead" ) + { + if (%col.isMounted()) + return; + + %col.playAudio(0, RepairPatchSound); + %col.applyRepair(0.125); + %obj.respawn(); + if (%col.client > 0) + messageClient(%col.client, 'MsgItemPickup', '\c0You picked up %1.', %data.pickUpName); + } +} + +//---------------------------------------------------------------------------- +// Flag: +//---------------------------------------------------------------------------- +datablock ShapeBaseImageData(FlagImage) +{ + shapeFile = "flag.dts"; + item = Flag; + mountPoint = 2; + offset = "0 0 0"; + + lightType = "PulsingLight"; + lightColor = "0.5 0.5 0.5 1.0"; + lightTime = "1000"; + lightRadius = "3"; + cloakable = false; +}; + +datablock ItemData(Flag) +{ + catagory = "Objectives"; + shapefile = "flag.dts"; + mass = 55; + elasticity = 0.2; + //friction = 0.6; + friction = 5.6; + pickupRadius = 3; + pickUpName = "a flag"; + computeCRC = true; + + lightType = "PulsingLight"; + lightColor = "0.5 0.5 0.5 1.0"; + lightTime = "1000"; + lightRadius = "3"; + + isInvincible = true; + cmdCategory = "Objectives"; + cmdIcon = CMDFlagIcon; + cmdMiniIconName = "commander/MiniIcons/com_flag_grey"; + targetTypeTag = 'Flag'; + + //used in CTF to mark the flag during a stalemate... + hudImageNameFriendly[1] = "commander/MiniIcons/com_flag_grey"; + hudImageNameEnemy[1] = "commander/MiniIcons/com_flag_grey"; + hudRenderModulated[1] = true; + hudRenderAlways[1] = true; + hudRenderCenter[1] = true; + hudRenderDistance[1] = true; + hudRenderName[1] = true; +}; + +//---------------------------------------------------------------------------- +function Flag::onThrow(%data,%obj,%src) +{ + Game.playerDroppedFlag(%src); +} + +function Flag::onAdd(%this, %obj) +{ + // make sure flags play "flapping" ambient thread + Parent::onAdd(%this, %obj); + %obj.playThread($AmbientThread, "ambient"); +} + +function Flag::onCollision(%data,%obj,%col) +{ + if (%col.getDataBlock().className $= Armor) + { + if (%col.isMounted()) + return; + + // a player hit the flag + Game.playerTouchFlag(%col, %obj); + } +} + +//---------------------------------------------------------------------------- +// HuntersFlag: +//---------------------------------------------------------------------------- +datablock ShapeBaseImageData(HuntersFlagImage) +{ + shapeFile = "Huntersflag.dts"; + item = Flag; + mountPoint = 2; + offset = "0 0 0"; + + lightType = "PulsingLight"; + lightColor = "0.5 0.5 0.5 1.0"; + lightTime = "1000"; + lightRadius = "3"; +}; + +// 1: red +// 2: blue +// 4: yellow +// 8: green +datablock ItemData(HuntersFlag1) +{ + className = HuntersFlag; + + shapefile = "Huntersflag.dts"; + mass = 75; + elasticity = 0.2; + //friction = 0.6; + friction = 5.6; + pickupRadius = 3; + isInvincible = true; + pickUpName = "a flag"; + computeCRC = true; + + lightType = "PulsingLight"; + lightColor = "0.8 0.2 0.2 1.0"; + lightTime = "1000"; + lightRadius = "3"; +}; + +datablock ItemData(HuntersFlag2) : HuntersFlag1 +{ + lightColor = "0.2 0.2 0.8 1.0"; +}; + +datablock ItemData(HuntersFlag4) : HuntersFlag1 +{ + lightColor = "0.8 0.8 0.2 1.0"; +}; + +datablock ItemData(HuntersFlag8) : HuntersFlag1 +{ + lightColor = "0.2 0.8 0.2 1.0"; +}; + +function HuntersFlag::onRemove(%data, %obj) +{ + // dont want target removed... +} + +function HuntersFlag::onThrow(%data,%obj,%src) +{ + Game.playerDroppedFlag(%src); +} + +function HuntersFlag::onCollision(%data,%obj,%col) +{ + if (%col.getDataBlock().className $= Armor) + { + if (%col.isMounted()) + return; + + // a player hit the flag + Game.playerTouchFlag(%col, %obj); + } +} + +//---------------------------------------------------------------------------- +// Nexus: +//---------------------------------------------------------------------------- +datablock ItemData(Nexus) +{ + catagory = "Objectives"; + shapefile = "nexus_effect.dts"; + mass = 10; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + icon = "CMDNexusIcon"; + targetTypeTag = 'Nexus'; + + computeCRC = true; + +}; + +datablock ParticleData(NexusParticleDenied) +{ + dragCoeffiecient = 0.4; + gravityCoefficient = 3.0; + inheritedVelFactor = 0.0; + + lifetimeMS = 1200; + lifetimeVarianceMS = 400; + + textureName = "particleTest"; + + useInvAlpha = false; + spinRandomMin = -200.0; + spinRandomMax = 200.0; + + colors[0] = "0.3 0.0 0.0 1.0"; + colors[1] = "0.5 0.0 0.0 0.5"; + colors[2] = "0.7 0.0 0.0 0.0"; + sizes[0] = 0.2; + sizes[1] = 0.1; + sizes[2] = 0.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(NexusParticleDeniedEmitter) +{ + ejectionPeriodMS = 2; + ejectionOffset = 0.2; + periodVarianceMS = 0.5; + ejectionVelocity = 10.0; + velocityVariance = 4.0; + thetaMin = 0.0; + thetaMax = 30.0; + lifetimeMS = 0; + + particles = "NexusParticleDenied"; +}; + +datablock ParticleData(NexusParticleCap) +{ + dragCoeffiecient = 0.4; + gravityCoefficient = 3.0; + inheritedVelFactor = 0.0; + + lifetimeMS = 1200; + lifetimeVarianceMS = 400; + + textureName = "particleTest"; + + useInvAlpha = false; + spinRandomMin = -200.0; + spinRandomMax = 200.0; + + colors[0] = "0.5 0.8 0.2 1.0"; + colors[1] = "0.6 0.9 0.3 1.0"; + colors[2] = "0.7 1.0 0.4 1.0"; + sizes[0] = 0.2; + sizes[1] = 0.1; + sizes[2] = 0.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(NexusParticleCapEmitter) +{ + ejectionPeriodMS = 2; + ejectionOffset = 0.5; + periodVarianceMS = 0.5; + ejectionVelocity = 10.0; + velocityVariance = 4.0; + thetaMin = 0.0; + thetaMax = 30.0; + lifetimeMS = 0; + + particles = "NexusParticleCap"; +}; + +//---------------------------------------------------------------------------- + +function getVector(%string, %num) +{ + %start = %num * 3; + return getWords(%string,%start, %start + 2); +} + +// -------------------------------------------- +// explosion datablock +// -------------------------------------------- + +datablock EffectProfile(DeployableExplosionEffect) +{ + effectname = "explosions/explosion.xpl10"; + minDistance = 10; + maxDistance = 50; +}; + +datablock AudioProfile(DeployablesExplosionSound) +{ + filename = "fx/explosions/deployables_explosion.wav"; + description = AudioExplosion3d; + preload = true; + effect = DeployableExplosionEffect; +}; + +datablock ExplosionData(DeployablesExplosion) +{ + soundProfile = DeployablesExplosionSound; + faceViewer = true; + + explosionShape = "effect_plasma_explosion.dts"; + sizes[0] = "0.2 0.2 0.2"; + sizes[1] = "0.3 0.3 0.3"; +}; + +$TeamDeployableMax[TargetBeacon] = 10; +$TeamDeployableMax[MarkerBeacon] = 20; + +datablock ItemData(Beacon) +{ + className = HandInventory; + catagory = "Misc"; + shapeFile = "beacon.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.8; + pickupRadius = 1; + pickUpName = "a deployable beacon"; + + computeCRC = true; + +}; + +datablock StaticShapeData(DeployedBeacon) : StaticShapeDamageProfile +{ + shapeFile = "beacon.dts"; + explosion = DeployablesExplosion; + maxDamage = 0.45; + disabledLevel = 0.45; + destroyedLevel = 0.45; + beacon = true; + targetNameTag = 'beacon'; + + dynamicType = $TypeMasks::SensorObjectType; + + debrisShapeName = "debris_generic_small.dts"; + debris = SmallShapeDebris; +}; + +function DeployedBeacon::onDestroyed(%data, %obj, %prevState) +{ + if(%obj.isBeaconType(friend)) + %bType = "MarkerBeacon"; + else + %bType = "TargetBeacon"; + $TeamDeployedCount[%obj.team, %bType]--; + %obj.schedule(500, delete); +} + +function Beacon::onUse(%data, %obj) +{ + // look for 3 meters along player's viewpoint for interior or terrain + %searchRange = 3.0; + %mask = $TypeMasks::TerrainObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::StaticShapeObjectType; + // get the eye vector and eye transform of the player + %eyeVec = %obj.getEyeVector(); + %eyeTrans = %obj.getEyeTransform(); + // extract the position of the player's camera from the eye transform (first 3 words) + %eyePos = posFromTransform(%eyeTrans); + // normalize the eye vector + %nEyeVec = VectorNormalize(%eyeVec); + // scale (lengthen) the normalized eye vector according to the search range + %scEyeVec = VectorScale(%nEyeVec, %searchRange); + // add the scaled & normalized eye vector to the position of the camera + %eyeEnd = VectorAdd(%eyePos, %scEyeVec); + // see if anything gets hit + %searchResult = containerRayCast(%eyePos, %eyeEnd, %mask, 0); + if(!%searchResult ) + { + // no terrain/interior collision within search range + if(%obj.inv[%data.getName()] > 0) + messageClient(%obj.client, 'MsgBeaconNoSurface', '\c2Cannot place beacon. Too far from surface.'); + return 0; + } + else + { + %searchObj = GetWord(%searchResult, 0); + if(%searchObj.getType() & $TypeMasks::StaticShapeObjectType) + { + // if there's already a beacon where player is aiming, switch its type + // otherwise, player can't deploy a beacon there + if(%searchObj.getDataBlock().getName() $= DeployedBeacon) + switchBeaconType(%searchObj); + else + messageClient(%obj.client, 'MsgBeaconNoSurface', '\c2Cannot place beacon. Not a valid surface.'); + return 0; + } + else if(%obj.inv[%data.getName()] <= 0) + return 0; + } + // newly deployed beacons default to "target" type + if($TeamDeployedCount[%obj.team, TargetBeacon] >= $TeamDeployableMax[TargetBeacon]) + { + messageClient(%obj.client, 'MsgDeployFailed', '\c2Your team\'s control network has reached its capacity for this item.~wfx/misc/misc.error.wav'); + return 0; + } + %terrPt = posFromRaycast(%searchResult); + %terrNrm = normalFromRaycast(%searchResult); + + %intAngle = getTerrainAngle(%terrNrm); // getTerrainAngle() function found in staticShape.cs + %rotAxis = vectorNormalize(vectorCross(%terrNrm, "0 0 1")); + if (getWord(%terrNrm, 2) == 1 || getWord(%terrNrm, 2) == -1) + %rotAxis = vectorNormalize(vectorCross(%terrNrm, "0 1 0")); + %rotation = %rotAxis @ " " @ %intAngle; + + %obj.decInventory(%data, 1); + %depBeac = new ScopeAlwaysShape() { + dataBlock = "DeployedBeacon"; + position = VectorAdd(%terrPt, VectorScale(%terrNrm, 0.05)); + rotation = %rotation; + }; + $TeamDeployedCount[%obj.team, TargetBeacon]++; + + %depBeac.playThread($AmbientThread, "ambient"); + %depBeac.team = %obj.team; + %depBeac.sourceObject = %obj; + + // give it a team target + %depBeac.setTarget(%depBeac.team); + MissionCleanup.add(%depBeac); +} + +function switchBeaconType(%beacon) +{ + if(%beacon.isBeaconType(friend)) + { + // switch from marker beacon to target beacon + if($TeamDeployedCount[%beacon.team, TargetBeacon] >= $TeamDeployableMax[TargetBeacon]) + { + messageClient(%beacon.sourceObject.client, 'MsgDeployFailed', '\c2Your team\'s control network has reached its capacity for this item.~wfx/misc/misc.error.wav'); + return 0; + } + %beacon.setBeaconType(enemy); + $TeamDeployedCount[%beacon.team, MarkerBeacon]--; + $TeamDeployedCount[%beacon.team, TargetBeacon]++; + } + else + { + // switch from target beacon to marker beacon + if($TeamDeployedCount[%beacon.team, MarkerBeacon] >= $TeamDeployableMax[MarkerBeacon]) + { + messageClient(%beacon.sourceObject.client, 'MsgDeployFailed', '\c2Your team\'s control network has reached its capacity for this item.~wfx/misc/misc.error.wav'); + return 0; + } + %beacon.setBeaconType(friend); + $TeamDeployedCount[%beacon.team, TargetBeacon]--; + $TeamDeployedCount[%beacon.team, MarkerBeacon]++; + } +} \ No newline at end of file diff --git a/base/scripts/joystickBind.cs b/base/scripts/joystickBind.cs new file mode 100644 index 0000000..1769d0b --- /dev/null +++ b/base/scripts/joystickBind.cs @@ -0,0 +1,29 @@ +//-------------------------------------------------------------------------- +// +// joystickBind.cs +// +//-------------------------------------------------------------------------- + +// Joystick functions: +function joystickMoveX(%val) +{ + $mvLeftAction = ( %val < 0.0 ); + $mvRightAction = ( %val > 0.0 ); +} + +function joystickMoveY(%val) +{ + $mvForwardAction = ( %val < 0.0 ); + $mvBackwardAction = ( %val > 0.0 ); +} + +function joystickYaw(%val) +{ + // Let the mapping system do all the scaling/inversion... + $mvYaw += %val; +} + +function joystickPitch(%val) +{ + $mvPitch += %val; +} diff --git a/base/scripts/lightning.cs b/base/scripts/lightning.cs new file mode 100644 index 0000000..b83cc06 --- /dev/null +++ b/base/scripts/lightning.cs @@ -0,0 +1,80 @@ +//-------------------------------------------------------------------------- +// +// +// +//-------------------------------------------------------------------------- + +//-------------------------------------------------------------------------- +//-------------------------------------- Sounds +// +datablock AudioDescription(ThunderDescription) +{ + volume = 1.0; + isLooping= false; + is3D = true; + minDistance= 100.0; + MaxDistance= 6400.0; + type = $EffectAudioType; +}; + +datablock AudioProfile(thunderCrash1) +{ + filename = "fx/environment/ctmelody1.wav"; + description = ThunderDescription; +}; + +datablock AudioProfile(thunderCrash2) +{ + filename = "fx/environment/ctmelody2.wav"; + description = ThunderDescription; +}; + +datablock AudioProfile(thunderCrash3) +{ + filename = "fx/environment/ctmelody3.wav"; + description = ThunderDescription; +}; + +datablock AudioProfile(thunderCrash4) +{ + filename = "fx/environment/ctmelody4.wav"; + description = ThunderDescription; +}; + +datablock AudioProfile(LightningHitSound) +{ + filename = "fx/misc/lightning_impact.wav"; + description = AudioExplosion3d; +}; + +//-------------------------------------------------------------------------- +//-------------------------------------- Default storm... +// +// Note to datablock editors: The lightning will randomly choose from the arrays +// to build a strike. There are 8 slots for thunder sounds. Make sure all 8 slots +// are filled. If necessary, duplicate the sounds/textures into the extra slots. +// + +datablock LightningData(DefaultStorm) +{ + directDamageType = $DamageType::Lightning; + directDamage = 0.4; + + strikeTextures[0] = "special/skyLightning"; + + strikeSound = LightningHitSound; + + thunderSounds[0] = thunderCrash1; + thunderSounds[1] = thunderCrash2; + thunderSounds[2] = thunderCrash3; + thunderSounds[3] = thunderCrash4; + thunderSounds[4] = thunderCrash1; + thunderSounds[5] = thunderCrash2; + thunderSounds[6] = thunderCrash3; + thunderSounds[7] = thunderCrash4; +}; + +function LightningData::applyDamage(%data, %lightningObj, %targetObject, %position, %normal) +{ + %targetObject.damage(%lightningObj, %position, %data.directDamage, %data.directDamageType); +} diff --git a/base/scripts/liquidProfiles.cs b/base/scripts/liquidProfiles.cs new file mode 100644 index 0000000..eb44db8 --- /dev/null +++ b/base/scripts/liquidProfiles.cs @@ -0,0 +1,330 @@ +//----------------------------------------------------------------------------- +// Liquid Texture Lists +// +new LiquidProfile(water) +{ + liquidType = "water"; + viscosity = "6"; + density = "1"; + submergeColor = 2/10 @ " " @ 6/10 @ " " @ 6/10 @ " " @ 3/10; + surfaceTextures = "4"; + surfaceTex0 = "liquidTiles/islandWater01.png"; + surfaceTex1 = "liquidTiles/islandWater02.png"; + surfaceTex2 = "liquidTiles/islandWater03.png"; + surfaceTex3 = "liquidTiles/islandWater04.png"; + surfaceTex4 = ""; + surfaceTex5 = ""; + surfaceTex6 = ""; + surfaceTex7 = ""; + effectTextures = "2"; + effectTex0 = "liquidTiles/modulation03.png"; + effectTex1 = "liquidTiles/modulation04.png"; + effectTex2 = ""; + effectTex3 = ""; + effectTex4 = ""; + effectTex5 = ""; + effectTex6 = ""; + effectTex7 = ""; + modulatorTextures = "2"; + modulatorTex0 = "liquidTiles/modulation03.png"; + modulatorTex1 = "liquidTiles/modulation04.png"; + modulatorTex2 = ""; + modulatorTex3 = ""; + waveAmplitude = ".75"; + surfacePattern = "serpentine"; + surfaceAngle = "30"; + surfaceScale = ".05 .05"; + effectPattern = "circular"; + effectAngle = "-60"; + effectScale = ".1 .1"; + modulatorPattern = "serpentine"; + modulatorAngle = "-30"; + modulatorScale = ".07 -.07"; +}; + +new LiquidProfile(oceanWater) +{ + liquidType = "oceanWater"; + viscosity = "6"; + density = "1"; + submergeColor = 2/10 @ " " @ 6/10 @ " " @ 6/10 @ " " @ 3/10; + surfaceTextures = "4"; + surfaceTex0 = "liquidTiles/islandWater01.png"; + surfaceTex1 = "liquidTiles/islandWater02.png"; + surfaceTex2 = "liquidTiles/islandWater03.png"; + surfaceTex3 = "liquidTiles/islandWater04.png"; + surfaceTex4 = ""; + surfaceTex5 = ""; + surfaceTex6 = ""; + surfaceTex7 = ""; + effectTextures = "2"; + effectTex0 = "liquidTiles/modulation03.png"; + effectTex1 = "liquidTiles/modulation04.png"; + effectTex2 = ""; + effectTex3 = ""; + effectTex4 = ""; + effectTex5 = ""; + effectTex6 = ""; + effectTex7 = ""; + modulatorTextures = "2"; + modulatorTex0 = "liquidTiles/modulation03.png"; + modulatorTex1 = "liquidTiles/modulation04.png"; + modulatorTex2 = ""; + modulatorTex3 = ""; + waveAmplitude = ".75"; + surfacePattern = "serpentine"; + surfaceAngle = "30"; + surfaceScale = ".05 .05"; + effectPattern = "circular"; + effectAngle = "-60"; + effectScale = ".1 .1"; + modulatorPattern = "serpentine"; + modulatorAngle = "-30"; + modulatorScale = ".07 -.07"; +}; + +new LiquidProfile(riverWater) +{ + liquidType = "riverWater"; + viscosity = "6"; + density = "1"; + submergeColor = 2/10 @ " " @ 6/10 @ " " @ 6/10 @ " " @ 3/10; + surfaceTextures = "4"; + surfaceTex0 = "liquidTiles/lushWater01.png"; + surfaceTex1 = "liquidTiles/lushWater02.png"; + surfaceTex2 = "liquidTiles/lushWater03.png"; + surfaceTex3 = "liquidTiles/lushWater04.png"; + surfaceTex4 = ""; + surfaceTex5 = ""; + surfaceTex6 = ""; + surfaceTex7 = ""; + effectTextures = "2"; + effectTex0 = "liquidTiles/modulation03.png"; + effectTex1 = "liquidTiles/modulation04.png"; + effectTex2 = ""; + effectTex3 = ""; + effectTex4 = ""; + effectTex5 = ""; + effectTex6 = ""; + effectTex7 = ""; + modulatorTextures = "2"; + modulatorTex0 = "liquidTiles/modulation03.png"; + modulatorTex1 = "liquidTiles/modulation04.png"; + modulatorTex2 = ""; + modulatorTex3 = ""; + waveAmplitude = ".5"; + surfacePattern = "serpentine"; + surfaceAngle = "30"; + surfaceScale = ".05 .05"; + effectPattern = "circular"; + effectAngle = "-60"; + effectScale = ".1 .1"; + modulatorPattern = "serpentine"; + modulatorAngle = "-30"; + modulatorScale = ".07 -.07"; +}; + +new LiquidProfile(stagnantWater) +{ + liquidType = "stagnantWater"; + viscosity = "6"; + density = "1"; + submergeColor = 2/10 @ " " @ 6/10 @ " " @ 6/10 @ " " @ 3/10; + surfaceTextures = "4"; + surfaceTex0 = "liquidTiles/lushWater01_algae.png"; + surfaceTex1 = "liquidTiles/lushWater02_algae.png"; + surfaceTex2 = "liquidTiles/lushWater03_algae.png"; + surfaceTex3 = "liquidTiles/lushWater04_algae.png"; + surfaceTex4 = ""; + surfaceTex5 = ""; + surfaceTex6 = ""; + surfaceTex7 = ""; + effectTextures = "2"; + effectTex0 = "liquidTiles/modulation03.png"; + effectTex1 = "liquidTiles/modulation04.png"; + effectTex2 = ""; + effectTex3 = ""; + effectTex4 = ""; + effectTex5 = ""; + effectTex6 = ""; + effectTex7 = ""; + modulatorTextures = "2"; + modulatorTex0 = "liquidTiles/modulation03.png"; + modulatorTex1 = "liquidTiles/modulation04.png"; + modulatorTex2 = ""; + modulatorTex3 = ""; + waveAmplitude = ".25"; + surfacePattern = "circular"; + surfaceAngle = "30"; + surfaceScale = ".05 .05"; + effectPattern = "circular"; + effectAngle = "-60"; + effectScale = ".1 .1"; + modulatorPattern = "serpentine"; + modulatorAngle = "-30"; + modulatorScale = ".07 -.07"; +}; + +new LiquidProfile(lava) +{ + liquidType = "lava"; + viscosity = "15"; + density = "1"; + submergeColor = 2/10 @ " " @ 6/10 @ " " @ 6/10 @ " " @ 3/10; + surfaceTextures = "4"; + surfaceTex0 = "terrainTiles/lavarockhot1.png"; + surfaceTex1 = "terrainTiles/lavarockhot2.png"; + surfaceTex2 = "terrainTiles/lavarockhot3.png"; + surfaceTex3 = "terrainTiles/lavarockhot4.png"; + surfaceTex4 = ""; + surfaceTex5 = ""; + surfaceTex6 = ""; + surfaceTex7 = ""; + effectTextures = "0"; + effectTex0 = ""; + effectTex1 = ""; + effectTex2 = ""; + effectTex3 = ""; + effectTex4 = ""; + effectTex5 = ""; + effectTex6 = ""; + effectTex7 = ""; + modulatorTextures = "0"; + modulatorTex0 = ""; + modulatorTex1 = ""; + modulatorTex2 = ""; + modulatorTex3 = ""; + waveAmplitude = ".15"; + surfacePattern = "circular"; + surfaceAngle = "30"; + surfaceScale = ".05 .05"; + effectPattern = "circular"; + effectAngle = "-60"; + effectScale = ".1 .1"; + modulatorPattern = "none"; + modulatorAngle = "0"; + modulatorScale = "0 0"; +}; + +new LiquidProfile(hotLava) +{ + liquidType = "hotLava"; + viscosity = "15"; + density = "1"; + submergeColor = 2/10 @ " " @ 6/10 @ " " @ 6/10 @ " " @ 3/10; + surfaceTextures = "4"; + surfaceTex0 = "terrainTiles/lavarockhot1.png"; + surfaceTex1 = "terrainTiles/lavarockhot2.png"; + surfaceTex2 = "terrainTiles/lavarockhot3.png"; + surfaceTex3 = "terrainTiles/lavarockhot4.png"; + surfaceTex4 = ""; + surfaceTex5 = ""; + surfaceTex6 = ""; + surfaceTex7 = ""; + effectTextures = "0"; + effectTex0 = ""; + effectTex1 = ""; + effectTex2 = ""; + effectTex3 = ""; + effectTex4 = ""; + effectTex5 = ""; + effectTex6 = ""; + effectTex7 = ""; + modulatorTextures = "0"; + modulatorTex0 = ""; + modulatorTex1 = ""; + modulatorTex2 = ""; + modulatorTex3 = ""; + waveAmplitude = ".15"; + surfacePattern = "circular"; + surfaceAngle = "30"; + surfaceScale = ".05 .05"; + effectPattern = "circular"; + effectAngle = "-60"; + effectScale = ".1 .1"; + modulatorPattern = "none"; + modulatorAngle = "0"; + modulatorScale = "0 0"; +}; + +new LiquidProfile(crustyLava) +{ + liquidType = "lava"; + viscosity = "15"; + density = "1"; + submergeColor = 2/10 @ " " @ 6/10 @ " " @ 6/10 @ " " @ 3/10; + surfaceTextures = "4"; + surfaceTex0 = "terrainTiles/muddyash1.png"; + surfaceTex1 = "terrainTiles/muddyash2.png"; + surfaceTex2 = "terrainTiles/muddyash3.png"; + surfaceTex3 = "terrainTiles/muddyash4.png"; + surfaceTex4 = ""; + surfaceTex5 = ""; + surfaceTex6 = ""; + surfaceTex7 = ""; + effectTextures = "0"; + effectTex0 = ""; + effectTex1 = ""; + effectTex2 = ""; + effectTex3 = ""; + effectTex4 = ""; + effectTex5 = ""; + effectTex6 = ""; + effectTex7 = ""; + modulatorTextures = "0"; + modulatorTex0 = ""; + modulatorTex1 = ""; + modulatorTex2 = ""; + modulatorTex3 = ""; + waveAmplitude = ".05"; + surfacePattern = "circular"; + surfaceAngle = "30"; + surfaceScale = ".05 .05"; + effectPattern = "circular"; + effectAngle = "-60"; + effectScale = ".02 .02"; + modulatorPattern = "none"; + modulatorAngle = "0"; + modulatorScale = "0 0"; +}; + +new LiquidProfile(quicksand) +{ + liquidType = "quicksand"; + viscosity = "15"; + density = "1"; + submergeColor = 2/10 @ " " @ 6/10 @ " " @ 6/10 @ " " @ 3/10; + surfaceTextures = "4"; + surfaceTex0 = "terrainTiles/mossDirt1.png"; + surfaceTex1 = "terrainTiles/mossDirt2.png"; + surfaceTex2 = "terrainTiles/mossDirt3.png"; + surfaceTex3 = "terrainTiles/mossDirt4.png"; + surfaceTex4 = ""; + surfaceTex5 = ""; + surfaceTex6 = ""; + surfaceTex7 = ""; + effectTextures = "0"; + effectTex0 = ""; + effectTex1 = ""; + effectTex2 = ""; + effectTex3 = ""; + effectTex4 = ""; + effectTex5 = ""; + effectTex6 = ""; + effectTex7 = ""; + modulatorTextures = "0"; + modulatorTex0 = ""; + modulatorTex1 = ""; + modulatorTex2 = ""; + modulatorTex3 = ""; + waveAmplitude = ".025"; + surfacePattern = "circular"; + surfaceAngle = "30"; + surfaceScale = ".02 .02"; + effectPattern = "circular"; + effectAngle = "-60"; + effectScale = ".01 .01"; + modulatorPattern = "none"; + modulatorAngle = "0"; + modulatorScale = "0 0"; +}; diff --git a/base/scripts/loadingGui.cs b/base/scripts/loadingGui.cs new file mode 100644 index 0000000..35fb63e --- /dev/null +++ b/base/scripts/loadingGui.cs @@ -0,0 +1,340 @@ +//------------------------------------------------------------------------------ +// +// LoadingGui.cs +// +//------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ +function LoadingGui::onAdd(%this) +{ + %this.qLineCount = 0; +} + +//------------------------------------------------------------------------------ +function LoadingGui::onWake(%this) +{ + if ( $HudHandle['shellScreen'] !$= "" ) + { + alxStop($HudHandle['shellScreen']); + $HudHandle['shellScreen'] = ""; + } + $HudHandle['loadingScreen'] = alxPlay(LoadingScreenSound, 0, 0, 0); +} + +//------------------------------------------------------------------------------ +function LoadingGui::onSleep(%this) +{ + // Clear the load info: + if ( %this.qLineCount !$= "" ) + { + for ( %line = 0; %line < %this.qLineCount; %line++ ) + %this.qLine[%line] = ""; + } + %this.qLineCount = 0; + + LOAD_MapPic.setBitmap( "gui/Loading.png" ); + LOAD_MapName.setText( "" ); + LOAD_MapText.setText( "" ); + LOAD_MissionType.setText( "" ); + LOAD_GameText.setText( "" ); + LoadingProgress.setValue( 0 ); + + alxStop($HudHandle['loadingScreen']); +} + +//------------------------------------------------------------------------------ +function clearLoadInfo() +{ + for ( %line = 0; %line < $LoadQuoteLineCount; %line++ ) + $LoadQuoteLine[%line] = ""; + $LoadQuoteLineCount = 0; + + for ( %line = 0; %line < $LoadObjLineCount; %line++ ) + $LoadObjLine[%line] = ""; + $LoadObjLineCount = 0; + + for ( %line = 0; %line < $LoadRuleLineCount; %line++ ) + $LoadRuleLine[%line] = ""; + $LoadRuleLineCount = 0; +} + +//------------------------------------------------------------------------------ +function buildLoadInfo( %mission, %missionType ) +{ + clearLoadInfo(); + $CurrentMission = %mission; + $MissionDisplayName = %mission; + $MissionTypeDisplayName = %missionType; + + // Extract the map quote and objectives from the .mis file: + %mapFile = "missions/" @ %mission @ ".mis"; + %file = new FileObject(); + if ( %file.openForRead( %mapFile ) ) + { + %state = "none"; + while ( !%file.isEOF() ) + { + %line = %file.readLine(); + + if ( %state $= "none" ) + { + if ( getSubStr( %line, 0, 17 ) $= "// DisplayName = " ) + $MissionDisplayName = getSubStr( %line, 17, 1000 ); + else if ( %line $= "//--- MISSION QUOTE BEGIN ---" ) + %state = "quote"; + else if ( %line $= "//--- MISSION STRING BEGIN ---" ) + %state = "objectives"; + else if ( %missionType $= "SinglePlayer" ) + { + if ( getSubStr( %line, 0, 16 ) $= "// PlanetName = " ) + $MissionTypeDisplayName = getSubStr( %line, 16, 1000 ); + else if ( %line $= "//--- MISSION BLURB BEGIN ---" ) + %state = "blurb"; + } + } + else if ( %state $= "quote" ) + { + if ( %line $= "//--- MISSION QUOTE END ---" ) + %state = "none"; + else + { + $LoadQuoteLine[$LoadQuoteLineCount] = getSubStr( %line, 2, 1000 ); + $LoadQuoteLineCount++; + } + } + else if ( %state $= "objectives" ) + { + if ( %line $= "//--- MISSION STRING END ---" ) + { + if ( %missionType $= "SinglePlayer" ) + %state = "none"; + else + { + // Once we've got the end of the mission string, we are through. + %state = "done"; + break; + } + } + else + { + %pos = strstr( %line, "]" ); + if ( %pos == -1 ) + { + $LoadObjLine[$LoadObjLineCount] = getSubStr( %line, 2, 1000 ); + $LoadObjLineCount++; + } + else if ( %pos > 3 ) + { + // Filter objective lines by mission type: + %typeList = getSubStr( %line, 3, %pos - 3 ); + if ( strstr( %typeList, %missionType ) != -1 ) + { + $LoadObjLine[$LoadObjLineCount] = getSubStr( %line, %pos + 1, 1000 ); + $LoadObjLineCount++; + } + } + else + error( "Invalid mission objective line - \"" @ %line @ "\"" ); + } + } + else if ( %state $= "blurb" ) + { + if ( %line $= "//--- MISSION BLURB END ---" ) + { + %state = "done"; + break; + } + else + { + $LoadRuleLine[$LoadRuleLineCount] = getSubStr( %line, 2, 1000 ); + $LoadRuleLineCount++; + } + } + } + %file.close(); + } + + // Extract the rules of engagement from the Game.cs file: + if ( %missionType !$= "SinglePlayer" ) + { + %gameFile = "scripts/" @ %missionType @ "Game.cs"; + if ( %file.openForRead( %gameFile ) ) + { + %state = "none"; + while ( !%file.isEOF() ) + { + %line = %file.readLine(); + if ( %state $= "none" ) + { + if ( getSubStr( %line, 0, 17 ) $= "// DisplayName = " ) + $MissionTypeDisplayName = getSubStr( %line, 17, 1000 ); + if ( %line $= "//--- GAME RULES BEGIN ---" ) + %state = "rules"; + } + else if ( %state $= "rules" ) + { + if ( %line $= "//--- GAME RULES END ---" ) + { + %state = "done"; + break; + } + else + { + $LoadRuleLine[$LoadRuleLineCount] = getSubStr( %line, 2, 1000 ); + $LoadRuleLineCount++; + } + } + } + %file.close(); + } + } + + %file.delete(); +} + +//------------------------------------------------------------------------------ +function dumpLoadInfo() +{ + echo( "Mission = \"" @ $MissionDisplayName @ "\", Mission Type = \"" @ $MissionTypeDisplayName @ "\"" ); + echo( "MISSION QUOTE: ( " @ $LoadQuoteLineCount @ " lines )" ); + for ( %line = 0; %line < $LoadQuoteLineCount; %line++ ) + echo( $LoadQuoteLine[%line] ); + + echo( " " ); + + echo( "MISSION STRING: ( " @ $LoadObjLineCount @ " lines )" ); + for ( %line = 0; %line < $LoadObjLineCount; %line++ ) + echo( $LoadObjLine[%line] ); + + echo( " " ); + + echo( "GAME RULES: ( " @ $LoadRuleLineCount @ " lines )" ); + for ( %line = 0; %line < $LoadRuleLineCount; %line++ ) + echo( $LoadRuleLine[%line] ); +} + +//------------------------------------------------------------------------------ +function sendLoadInfoToClient( %client ) +{ + //error( "** SENDING LOAD INFO TO CLIENT " @ %client @ "! **" ); + %singlePlayer = $CurrentMissionType $= "SinglePlayer"; + messageClient( %client, 'MsgLoadInfo', "", $CurrentMission, $MissionDisplayName, $MissionTypeDisplayName ); + + // Send map quote: + for ( %line = 0; %line < $LoadQuoteLineCount; %line++ ) + { + if ( $LoadQuoteLine[%line] !$= "" ) + messageClient( %client, 'MsgLoadQuoteLine', "", $LoadQuoteLine[%line] ); + } + + // Send map objectives: + if ( %singlePlayer ) + { + switch ( $pref::TrainingDifficulty ) + { + case 2: %diff = "Medium"; + case 3: %diff = "Hard"; + default: %diff = "Easy"; + } + messageClient( %client, 'MsgLoadObjectiveLine', "", "DIFFICULTY: " @ %diff ); + } + + for ( %line = 0; %line < $LoadObjLineCount; %line++ ) + { + if ( $LoadObjLine[%line] !$= "" ) + messageClient( %client, 'MsgLoadObjectiveLine', "", $LoadObjLine[%line], !%singlePlayer ); + } + + // Send rules of engagement: + if ( !%singlePlayer ) + messageClient( %client, 'MsgLoadRulesLine', "", "RULES OF ENGAGEMENT:", false ); + + for ( %line = 0; %line < $LoadRuleLineCount; %line++ ) + { + if ( $LoadRuleLine[%line] !$= "" ) + messageClient( %client, 'MsgLoadRulesLine', "", $LoadRuleLine[%line], !%singlePlayer ); + } + + messageClient( %client, 'MsgLoadInfoDone' ); +} + +//------------------------------------------------------------------------------ +addMessageCallback( 'MsgLoadInfo', handleLoadInfoMessage ); +addMessageCallback( 'MsgLoadQuoteLine', handleLoadQuoteLineMessage ); +addMessageCallback( 'MsgLoadObjectiveLine', handleLoadObjectiveLineMessage ); +addMessageCallback( 'MsgLoadRulesLine', handleLoadRulesLineMessage ); +addMessageCallback( 'MsgLoadInfoDone', handleLoadInfoDoneMessage ); + +//------------------------------------------------------------------------------ +function handleLoadInfoMessage( %msgType, %msgString, %bitmapName, %mapName, %missionType ) +{ + // Clear all of the loading info lines: + for ( %line = 0; %line < LoadingGui.qLineCount; %line++ ) + LoadingGui.qLine[%line] = ""; + LoadingGui.qLineCount = 0; + + for ( %line = 0; %line < LobbyGui.objLineCount; %line++ ) + LobbyGui.objLine[%line] = ""; + LobbyGui.objLineCount = 0; + + %loadBmp = "gui/load_" @ %bitmapName @ ".png"; + if ( !isFile( "textures/" @ %loadBmp ) ) + %loadBmp = "gui/loading.png"; + LOAD_MapPic.setBitmap( %loadBmp ); + LOAD_MapName.setText( %mapName ); + LOAD_MissionType.setText( %missionType ); + LOAD_MapText.setText( "" ); + LOAD_GameText.setText( "" ); +} + +//------------------------------------------------------------------------------ +function handleLoadQuoteLineMessage( %msgType, %msgString, %line ) +{ + LoadingGui.qLine[LoadingGui.qLineCount] = %line; + LoadingGui.qLineCount++; + + %text = ""; + for ( %line = 0; %line < LoadingGui.qLineCount - 1; %line++ ) + %text = %text @ LoadingGui.qLine[%line] @ "\n"; + %text = %text @ ""; + %text = %text @ LoadingGui.qLine[%line] @ "\n"; // tag line + + LOAD_MapText.setText( %text ); +} + +//------------------------------------------------------------------------------ +function handleLoadObjectiveLineMessage( %msgType, %msgString, %line, %bulletStyle ) +{ + LobbyGui.objLine[LobbyGui.objLineCount] = %line; + LobbyGui.objLineCount++; + + if ( %bulletStyle ) + %line = "" @ %line @ ""; + + %newText = LOAD_MapText.getText(); + if ( %newText $= "" ) // In case there's no quote + %newText = %line; + else + %newText = %newText NL %line; + LOAD_MapText.setText( %newText ); +} + +//------------------------------------------------------------------------------ +function handleLoadRulesLineMessage( %msgType, %msgString, %line, %bulletStyle ) +{ + if ( %bulletStyle ) + %line = "" @ %line @ ""; + + %newText = LOAD_GameText.getText(); + if ( %newText $= "" ) + %newText = %line; + else + %newText = %newText NL %line; + LOAD_GameText.setText( %newText ); +} + +//------------------------------------------------------------------------------ +function handleLoadInfoDoneMessage( %msgType, %msgString ) +{ + // TODO - make this signal the game that it's okay to go to the Loading screen now. +} \ No newline at end of file diff --git a/base/scripts/markers.cs b/base/scripts/markers.cs new file mode 100644 index 0000000..d512eac --- /dev/null +++ b/base/scripts/markers.cs @@ -0,0 +1,58 @@ +//------------------------------------------------------------------------------ +//* Markers +//------------------------------------------------------------------------------ + +datablock MissionMarkerData(WayPointMarker) +{ + catagory = "Misc"; + shapeFile = "octahedron.dts"; +}; + +datablock MissionMarkerData(SpawnSphereMarker) +{ + catagory = "Misc"; + shapeFile = "octahedron.dts"; +}; + +datablock MissionMarkerData(AIObjectiveMarker) +{ + catagory = "Misc"; + shapeFile = "octahedron.dts"; +}; + +datablock MissionMarkerData(FlagMarker) +{ + shapeFile = "octahedron.dts"; + hudImageNameFriendly[0] = "small_triangle"; + hudImageNameEnemy[0] = "small_triangle"; + hudRenderModulated[0] = true; + hudRenderAlways[0] = true; + hudRenderCenter[0] = true; + hudRenderDistance[0] = true; + hudRenderName[0] = true; +}; + +//------------------------------------------------------------------------------ +// - serveral marker types may share MissionMarker datablock type +function MissionMarkerData::create(%block) +{ + switch$(%block) + { + case "WayPointMarker": + %obj = new WayPoint() { + dataBlock = %block; + }; + return(%obj); + case "SpawnSphereMarker": + %obj = new SpawnSphere() { + datablock = %block; + }; + return(%obj); + case "AIObjectiveMarker": + %obj = new AIObjective() { + datablock = %block; + }; + return(%obj); + } + return(-1); +} \ No newline at end of file diff --git a/base/scripts/message.cs b/base/scripts/message.cs new file mode 100644 index 0000000..1b772de --- /dev/null +++ b/base/scripts/message.cs @@ -0,0 +1,612 @@ +$numDeathMsgLines = 10; +$currentDeathMsgLine = 0; +$deathMsgTimeOut = 5 * 1000; +$MaxMessageWavLength = 5200; + +function addMessageCallback(%msgType, %func) +{ + for(%i = 0; (%afunc = $MSGCB[%msgType, %i]) !$= ""; %i++) + { + // only add each callback once + if(%afunc $= %func) + return; + } + $MSGCB[%msgType, %i] = %func; +} + +function messagePump(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7 ,%a8, %a9, %a10) +{ + clientCmdServerMessage(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10); +} + +function clientCmdServerMessage(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10) +{ + %tag = getWord(%msgType, 0); + for(%i = 0; (%func = $MSGCB["", %i]) !$= ""; %i++) + call(%func, %msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10); + + if(%tag !$= "") + for(%i = 0; (%func = $MSGCB[%tag, %i]) !$= ""; %i++) + call(%func, %msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10); +} + +function defaultMessageCallback(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10) +{ + if ( %msgString $= "" ) + return; + + %message = detag( %msgString ); + // search for wav tag marker + %wavStart = strstr( %message, "~w" ); + if ( %wavStart != -1 ) + { + %wav = getSubStr( %message, %wavStart + 2, 1000 ); + %wavLengthMS = alxGetWaveLen( %wav ); + if ( %wavLengthMS <= $MaxMessageWavLength ) + { + %handle = alxCreateSource( AudioChat, %wav ); + alxPlay( %handle ); + } + else + error( "WAV file \"" @ %wav @ "\" is too long! **" ); + + %message = getSubStr( %message, 0, %wavStart ); + if ( %message !$= "" ) + addMessageHudLine( %message ); + } + else + addMessageHudLine( %message ); + //else if (strstr(%message, "~x") != -1) + //{ + // %mess = getSubStr(%message, 2, 1000); + // addDeathMsgHudLine(%mess); + //} +} + +function getPlayerPrefs( %player ) +{ + // test against %player.guid + + // For now, mute smurfs and listen to real players: + commandToServer( 'ListenTo', %player.clientId, !%player.isSmurf, false ); + + // MES -- queryClientPlayerDatabase function call causes console error + + //if(queryClientPlayerDatabase(%player.guid, "muted")) + //{ + // %player.chatMuted = true; + // addMessageHudLine("Spamming punk \c3" @ %player.name @ "\cr joined and has been auto muted!"); + //} +} + +//-------------------------------------------------------------------------- +function handleClientJoin(%msgType, %msgString, %clientName, %clientId, %targetId, %isAI, %isAdmin, %isSuperAdmin, %isSmurf, %guid) +{ + logEcho("got client join: " @ detag(%clientName) @ " : " @ %clientId); + + //create the player list group, and add it to the ClientConnectionGroup... + if(!isObject("PlayerListGroup")) + { + %newGroup = new SimGroup("PlayerListGroup"); + ClientConnectionGroup.add(%newGroup); + } + + %player = new ScriptObject() + { + className = "PlayerRep"; + name = detag(%clientName); + guid = %guid; + clientId = %clientId; + targetId = %targetId; + teamId = 0; // start unassigned + score = 0; + ping = 0; + packetLoss = 0; + chatMuted = false; + canListen = false; + voiceEnabled = false; + isListening = false; + isBot = %isAI; + isAdmin = %isAdmin; + isSuperAdmin = %isSuperAdmin; + isSmurf = %isSmurf; + }; + PlayerListGroup.add(%player); + $PlayerList[%clientId] = %player; + + if ( !%isAI ) + getPlayerPrefs(%player); + lobbyUpdatePlayer( %clientId ); +} + +function handleClientDrop( %msgType, %msgString, %clientName, %clientId ) +{ + logEcho("got client drop: " @ detag(%clientName) @ " : " @ %clientId); + + %player = $PlayerList[%clientId]; + if( %player ) + { + %player.delete(); + $PlayerList[%clientId] = ""; + lobbyRemovePlayer( %clientId ); + } +} + +function handleClientJoinTeam( %msgType, %msgString, %clientName, %teamName, %clientId, %teamId ) +{ + %player = $PlayerList[%clientId]; + if( %player ) + { + %player.teamId = %teamId; + lobbyUpdatePlayer( %clientId ); + } +} + +function handleClientNameChanged( %msgType, %msgString, %oldName, %newName, %clientId ) +{ + %player = $PlayerList[%clientId]; + if( %player ) + %player.name = detag( %newName ); +} + +addMessageCallback("", defaultMessageCallback); +addMessageCallback('MsgClientJoin', handleClientJoin); +addMessageCallback('MsgClientDrop', handleClientDrop); +addMessageCallback('MsgClientJoinTeam', handleClientJoinTeam); +addMessageCallback('MsgClientNameChanged', handleClientNameChanged); + +//--------------------------------------------------------------------------- +// Client chat'n +//--------------------------------------------------------------------------- +function isClientChatMuted(%client) +{ + %player = $PlayerList[%client]; + if(%player) + return(%player.chatMuted ? true : false); + return(true); +} + +//--------------------------------------------------------------------------- +function clientCmdChatMessage(%sender, %voice, %pitch, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10) +{ + %message = detag( %msgString ); + + if ( ( %message $= "" ) || isClientChatMuted( %sender ) ) + return; + + // search for wav tag marker + %wavStart = strstr( %message, "~w" ); + if ( %wavStart == -1 ) + addMessageHudLine( %message ); + else + { + %wav = getSubStr(%message, %wavStart + 2, 1000); + if (%voice !$= "") + %wavFile = "voice/" @ %voice @ "/" @ %wav @ ".wav"; + else + %wavFile = %wav; + + //only play voice files that are < 5000ms in length + if (%pitch < 0.5 || %pitch > 2.0) + %pitch = 1.0; + %wavLengthMS = alxGetWaveLen(%wavFile) * %pitch; + if (%wavLengthMS < $MaxMessageWavLength ) + { + if ( $ClientChatHandle[%sender] != 0 ) + alxStop( $ClientChatHandle[%sender] ); + $ClientChatHandle[%sender] = alxCreateSource( AudioChat, %wavFile ); + + //pitch the handle + if (%pitch != 1.0) + alxSourcef($ClientChatHandle[%sender], "AL_PITCH", %pitch); + alxPlay( $ClientChatHandle[%sender] ); + } + else + error( "** WAV file \"" @ %wavFile @ "\" is too long! **" ); + + %message = getSubStr(%message, 0, %wavStart); + addMessageHudLine(%message); + } +} + +//--------------------------------------------------------------------------- +function clientCmdCannedChatMessage( %sender, %msgString, %name, %string, %keys, %voiceTag, %pitch ) +{ + %message = detag( %msgString ); + %voice = detag( %voiceTag ); + if ( $defaultVoiceBinds ) + clientCmdChatMessage( %sender, %voice, %pitch, "[" @ %keys @ "]" SPC %message ); + else + clientCmdChatMessage( %sender, %voice, %pitch, %message ); +} + +//--------------------------------------------------------------------------- +// silly spam protection... +$SPAM_PROTECTION_PERIOD = 10000; +$SPAM_MESSAGE_THRESHOLD = 4; +$SPAM_PENALTY_PERIOD = 10000; +$SPAM_MESSAGE = '\c3FLOOD PROTECTION:\cr You must wait another %1 seconds.'; + +function GameConnection::spamMessageTimeout(%this) +{ + if(%this.spamMessageCount > 0) + %this.spamMessageCount--; +} + +function GameConnection::spamReset(%this) +{ + %this.isSpamming = false; +} + +function spamAlert(%client) +{ + if($Host::FloodProtectionEnabled != true) + return(false); + + if(!%client.isSpamming && (%client.spamMessageCount >= $SPAM_MESSAGE_THRESHOLD)) + { + %client.spamProtectStart = getSimTime(); + %client.isSpamming = true; + %client.schedule($SPAM_PENALTY_PERIOD, spamReset); + } + + if(%client.isSpamming) + { + %wait = mFloor(($SPAM_PENALTY_PERIOD - (getSimTime() - %client.spamProtectStart)) / 1000); + messageClient(%client, "", $SPAM_MESSAGE, %wait); + return(true); + } + + %client.spamMessageCount++; + %client.schedule($SPAM_PROTECTION_PERIOD, spamMessageTimeout); + return(false); +} + +function chatMessageClient( %client, %sender, %voiceTag, %voicePitch, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10 ) +{ + //see if the client has muted the sender + if ( !%client.muted[%sender] ) + commandToClient( %client, 'ChatMessage', %sender, %voiceTag, %voicePitch, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10 ); +} + +function cannedChatMessageClient( %client, %sender, %msgString, %name, %string, %keys ) +{ + if ( !%client.muted[%sender] ) + commandToClient( %client, 'CannedChatMessage', %sender, %msgString, %name, %string, %keys, %sender.voiceTag, %sender.voicePitch ); +} + +function chatMessageTeam( %sender, %team, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10 ) +{ + if ( ( %msgString $= "" ) || spamAlert( %sender ) ) + return; + %count = ClientGroup.getCount(); + for ( %i = 0; %i < %count; %i++ ) + { + %obj = ClientGroup.getObject( %i ); + if ( %obj.team == %sender.team ) + chatMessageClient( %obj, %sender, %sender.voiceTag, %sender.voicePitch, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10 ); + } +} + +function cannedChatMessageTeam( %sender, %team, %msgString, %name, %string, %keys ) +{ + if ( ( %msgString $= "" ) || spamAlert( %sender ) ) + return; + + %count = ClientGroup.getCount(); + for ( %i = 0; %i < %count; %i++ ) + { + %obj = ClientGroup.getObject( %i ); + if ( %obj.team == %sender.team ) + cannedChatMessageClient( %obj, %sender, %msgString, %name, %string, %keys ); + } +} + +function chatMessageAll( %sender, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10 ) +{ + if ( ( %msgString $= "" ) || spamAlert( %sender ) ) + return; + %count = ClientGroup.getCount(); + for ( %i = 0; %i < %count; %i++ ) + { + %obj = ClientGroup.getObject( %i ); + if(%sender.team != 0) + chatMessageClient( %obj, %sender, %sender.voiceTag, %sender.voicePitch, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10 ); + else + { + // message sender is an observer -- only send message to other observers + if(%obj.team == %sender.team) + chatMessageClient( %obj, %sender, %sender.voiceTag, %sender.voicePitch, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10 ); + } + } +} + +function cannedChatMessageAll( %sender, %msgString, %name, %string, %keys ) +{ + if ( ( %msgString $= "" ) || spamAlert( %sender ) ) + return; + + %count = ClientGroup.getCount(); + for ( %i = 0; %i < %count; %i++ ) + cannedChatMessageClient( ClientGroup.getObject(%i), %sender, %msgString, %name, %string, %keys ); +} + +//--------------------------------------------------------------------------- +function messageClient(%client, %msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13) +{ + commandToClient(%client, 'ServerMessage', %msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13); +} + +function messageTeam(%team, %msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13) +{ + %count = ClientGroup.getCount(); + for(%cl= 0; %cl < %count; %cl++) + { + %recipient = ClientGroup.getObject(%cl); + if(%recipient.team == %team) + messageClient(%recipient, %msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13); + } +} + +function messageTeamExcept(%client, %msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13) +{ + %team = %client.team; + %count = ClientGroup.getCount(); + for(%cl= 0; %cl < %count; %cl++) + { + %recipient = ClientGroup.getObject(%cl); + if((%recipient.team == %team) && (%recipient != %client)) + messageClient(%recipient, %msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13); + } +} + +function messageAll(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13) +{ + %count = ClientGroup.getCount(); + for(%cl = 0; %cl < %count; %cl++) + { + %client = ClientGroup.getObject(%cl); + messageClient(%client, %msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13); + } +} + +function messageAllExcept(%client, %team, %msgtype, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13) +{ + //can exclude a client, a team or both. A -1 value in either field will ignore that exclusion, so + //messageAllExcept(-1, -1, $Mesblah, 'Blah!'); will message everyone (since there shouldn't be a client -1 or client on team -1). + %count = ClientGroup.getCount(); + for(%cl= 0; %cl < %count; %cl++) + { + %recipient = ClientGroup.getObject(%cl); + if((%recipient != %client) && (%recipient.team != %team)) + messageClient(%recipient, %msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13); + } +} + +//##################################################### +////--------------------------------------------------------------------------- +//// Command Message +////--------------------------------------------------------------------------- +// +//function clientCmdServerCommandMessage(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10) +//{ +// commandMsgHud.addLine(detag(%msgString)); +//} +// +//function commandMessageClient(%client, %msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10) +//{ +// commandToClient(%client, 'ServerCommandMessage', %msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10); +//} +// +//function commandMessageTeam(%team, %msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10) +//{ +// %count = ClientGroup.getCount(); +// for(%cl= 0; %cl < %count; %cl++) +// { +// %recipient = ClientGroup.getObject(%cl); +// if(%recipient.team == %team) +// commandMessageClient(%recipient, %msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10); +// } +//} +// +//function commandMessageTeamExcept(%client, %msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10) +//{ +// %team = %client.team; +// %count = ClientGroup.getCount(); +// for(%cl= 0; %cl < %count; %cl++) +// { +// %recipient = ClientGroup.getObject(%cl); +// if((%recipient.team == %team) && (%recipient != %client)) +// commandMessageClient(%recipient, %msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10); +// } +//} +//##################################################### + +//modified defaultgame and added deathmessages.cs to handle this - EL +// addMessageCallback('MsgSuicide', suicideMessage); +// +// function suicideMessage(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10) +// { +// %victim = detag(%a1); +// %suicideMsg = %victim @ " hits CTRL-K. What a wimp!"; +// addDeathMsgHudLine(%suicideMsg); +// } + +//modified defaultgame and added deathmessages.cs to handle this - EL +// addMessageCallback('MsgSelfKill', selfKillMessage); +// +// function selfKillMessage(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10) +// { +// %victim = detag(%a1); +// %gender = detag(%a2); +// // gender will be HIM or HER +// %poss = detag(%a3); +// // poss will be HIS or HER (possessive) +// %damageType = detag(%a4); +// switch$ (%damageType) { +// case $DamageType::Plasma : +// %suicideMsg = %victim @ " gets a taste of " @ %poss @ " own plasma."; +// case $DamageType::Bullet : +// %suicideMsg = %victim @ " shoots " @ %gender @ "self in the foot."; +// case $DamageType::Disc : +// %suicideMsg = %victim @ " blasts " @ %gender @ "self with a disc."; +// case $DamageType::Grenade : +// %suicideMsg = %victim @ " eats " @ %poss @ " own grenade."; +// case $DamageType::Mortar : +// %suicideMsg = %victim @ " launches a mortar too close to home."; +// case $DamageType::Missile : +// %suicideMsg = %victim @ " blows " @ %gender @ "self up with a missile."; +// case $DamageType::Explosion : +// %suicideMsg = %victim @ " gets too close to an explosion."; +// case $DamageType::Ground : +// %suicideMsg = %victim @ " hits the ground hard."; +// default: +// %suicideMsg = %victim @ " kills " @ %gender @ "self."; +// } +// addDeathMsgHudLine(%suicideMsg); +// } + +//modified defaultgame and added deathmessages.cs to handle this - EL +// addMessageCallback('MsgPlayerTeamKill', playerTeamKillMessage); +// +// function playerTeamKillMessage(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10) +// { +// %victim = detag(%a1); +// %killer = detag(%a2); +// %killPoss = detag(%a3); +// %teamKillMsg = %killer @ " mows down " @ %killPoss @ " teammate " @ %victim @ "."; +// addDeathMsgHudLine(%teamKillMsg); +// } + +//modified defaultgame and added deathmessages.cs to handle this - EL +// addMessageCallback('MsgPlayerIsKilled', playerIsKilledMessage); +// +// function playerIsKilledMessage(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10) +// { +// %victim = detag(%a1); +// %killer = detag(%a2); +// %vicGen = detag(%a3); +// %vicPoss = detag(%a4); +// //%kilGen = detag(%a5); +// //%kilPoss = detag(%a6); +// // vicGen and kilGen will be HIM or HER +// // vicPoss and kilPoss will be HIS or HER +// %damType = detag(%a5); +// switch$ (%damType) { +// case $DamageType::Blaster : +// %dMsg = %killer @ " blasts the life out of " @ %victim @ "."; +// case $DamageType::Plasma : +// %dMsg = %killer @ " gives " @ %victim @ " a plasma transfusion."; +// case $DamageType::Bullet : +// %dMsg = %killer @ " gives " @ %victim @ " " @ %vicPoss @ " daily dose of lead."; +// case $DamageType::Disc : +// %dMsg = %killer @ " gives " @ %victim @ " a Stormhammer salute."; +// case $DamageType::Grenade : +// %dMsg = %killer @ " takes " @ %victim @ " out with a grenade."; +// case $DamageType::Laser : +// %dMsg = %killer @ " picks off " @ %victim @ " with a sniper shot."; +// case $DamageType::ELF : +// %dMsg = %killer @ " drains " @ %victim @ "\'s life force."; +// case $DamageType::Mortar : +// %dMsg = %killer @ " mortars " @ %victim @ " into oblivion."; +// case $DamageType::Missile : +// %dMsg = %killer @ "\'s missile catches up with " @ %victim @ "."; +// case $DamageType::ShockLance : +// %dMsg = %killer @ " assassinates " @ %victim @ "."; +// case $DamageType::Mine : +// %dMsg = %killer @ "\'s mine takes out " @ %victim @ "."; +// case $DamageType::Explosion : +// %dMsg = %killer @ " blows up " @ %victim @ "."; +// case $DamageType::Impact : +// %dMsg = %killer @ " runs over " @ %victim @ "."; +// case $DamageType::Turret : +// %dMsg = %killer @ "\'s turret kills " @ %victim @ "."; +// default: +// %dMsg = %victim @ " falls victim to " @ %killer @ "."; +// } +// addDeathMsgHudLine(%dMsg); +// } + +//function addDeathMsgHudLine(%msg) +//{ +// if(!isObject(deathMsgHud)){ +// %dmHudX = firstWord(getResolution()) - 245; +// %dmHudY = (getWord(objectiveHud.extent, 1) + getWord(objectiveHud.position, 1)) + 10; +// %dmhPos = %dmHudX @ " " @ %dmHudY; +// //error("y coords = " @ getWord(objectiveHud.extent, 1) @ " + " @ getWord(objectiveHud.position, 1) @ " + 10"); +// %dmHud = new GuiControl(deathMsgHud) { +// profile = "GuiDeathMsgHudProfile"; +// horizSizing = "left"; +// vertSizing = "bottom"; +// position = %dmhPos; +// extent = "240 170"; +// visible = "1"; +// modal = "0"; +// }; +// PlayGui.add(%dmHud); +// } +// %msgName = "deathMsg" @ $currentDeathMsgLine; +// if(nameToId(%msgName) > 0) +// %msgName.delete(); +// %msgYCoord = ($currentDeathMsgLine * 15); +// %msgCoords = "3 " @ %msgYCoord; +// // calculate how many lines the message will need to use +// %multiLine = false; +// if(strLen(%msg) > 52) { +// %multiLine = true; +// // find first space before character 52 and break the line there +// %lBr = -1; +// for(%i = 51; %i > 0; %i--) +// if(getSubStr(%msg, %i, 1) $= " ") { +// %lBr = %i; +// break; +// } +// if(%lBr > -1) { +// %msg1 = getSubStr(%msg, 0, %lBr); +// %msg2 = getSubStr(%msg, %lBr + 1, strLen(%msg)); +// //error("Message line 1: |" @ %msg1 @ "|"); +// //error("Message line 2: |" @ %msg2 @ "|"); +// } +// } +// else +// %msg1 = %msg; +// %addDeathMsg = new GuiTextCtrl(%msgName) { +// profile = "DeathMsgTextProfile"; +// horizSizing = "left"; +// vertSizing = "bottom"; +// position = %msgCoords; +// extent = "235 15"; +// minExtent = "8 8"; +// visible = "1"; +// helpTag = "0"; +// text = ""; +// }; +// deathMsgHud.add(%msgName); +// %msgName.setValue(%msg1); +// $currentDeathMsgLine++; +// %msgName.schedule($deathMsgTimeOut, "delete"); +// if(%multiLine) { +// %msgName2 = "deathMsg" @ ($currentDeathMsgLine + 1); +// if(nameToId(%msgName2) > 0) +// %msgName2.delete(); +// %msgYCoord = ($currentDeathMsgLine * 15); +// %msgCoords = "3 " @ %msgYCoord; +// %addDeathMsg2 = new GuiTextCtrl(%msgName2) { +// profile = "DeathMsgTextProfile"; +// horizSizing = "left"; +// vertSizing = "bottom"; +// position = %msgCoords; +// extent = "235 15"; +// minExtent = "8 8"; +// visible = "1"; +// helpTag = "0"; +// text = ""; +// }; +// deathMsgHud.add(%msgName2); +// %msgName2.setValue(%msg2); +// $currentDeathMsgLine++; +// %msgName2.schedule($deathMsgTimeOut, "delete"); +// } +// if($currentDeathMsgLine >= $numDeathMsgLines) +// $currentDeathMsgLine = 0; +//} \ No newline at end of file diff --git a/base/scripts/navGraph.cs b/base/scripts/navGraph.cs new file mode 100644 index 0000000..c92ef34 --- /dev/null +++ b/base/scripts/navGraph.cs @@ -0,0 +1,159 @@ +// +// functions for ai nav graph +// + +$OFFLINE_NAV_BUILD = false; + +function NavGraph::generateInterior() +{ + %p = new FloorPlan(); + %p.generate(); + %p.upload(); + %p.delete(); +} + +//---------------------------------------------------------------------------- + +function NavGraph::exteriorInspect() +{ + %eInspector = new GroundPlan(); + + %area = MissionArea.getArea(); + %minx = getWord(%area, 0); + %miny = getWord(%area, 1); + %extentx = getWord(%area, 2); + %extenty = getWord(%area, 3); + %point = %minx @ " " @ %miny; + %extents = %extentx @ " " @ %extenty; + + %eInspector.inspect(%point, %extents); // this does the upload as well + %eInspector.delete(); +} + +//---------------------------------------------------------------------------- + +function BuildNavigationGraph(%type) +{ + exec("scripts/graphBuild.cs"); + + echo("Building Navigation Graph..."); + + // disable asserts + $FP::DisableAsserts = true; + $OFFLINE_NAV_BUILD = true; + + if(%type $= "nav") + { + makeJettableGraphOffline(Nav); + doTablebuildOffline(); + } + else if(%type $= "spn") + makeJettableGraphOffline(Spawn); + else + echo("unknown type for nav build!"); + + navGraph.saveGraph(); + writeNavMetrics(); +} + +function NavigationGraph::navBuildComplete() +{ + echo( "Navigation Graph build complete." ); + + if( $OFFLINE_NAV_BUILD ) + { + quit(); + } +} + +// this will keep mod authors happy since they can create new +// traversable shapes, and it will be handled by the navigation system +function FloorPlan::staticShapeListConstruct(%this) +{ + %group = nameToId("MissionGroup"); + %group.findStaticShapes(%this); +} + +function FloorPlan::gameBaseListConstruct(%this) +{ + %group = nameToId("MissionGroup"); + %group.findGameBaseItems(%this); +} + +function SimGroup::findGameBaseItems(%this, %floorPlan) +{ + for(%i = 0; %i < %this.getCount(); %i++) + %this.getObject(%i).findGameBaseItems(%floorPlan); +} + +function GameBase::findGameBaseItems(%this, %floorPlan) +{ + %floorPlan.addHintPoint(%this.getWorldBoxCenter()); +} + +function SimGroup::findStaticShapes(%this, %floorPlan) +{ + for(%i = 0; %i < %this.getCount(); %i++) + %this.getObject(%i).findStaticShapes(%floorPlan); +} + +function GameBase::findStaticShapes(%this, %floorPlan) +{ + %this.getDataBlock().findStaticShapes(%this, %floorPlan); +} + +function StationInventory::findStaticShapes(%data, %object, %floorPlan) +{ + %floorPlan.addStaticCenter(%object); +} + +function StationVehiclePad::findStaticShapes(%data, %object, %floorPlan) +{ + %floorPlan.addStaticGeom(%object); +} + +function installNavThreats() +{ + %group = nameToId("MissionGroup"); + %group.findTurretThreats(); +} + +function SimObject::findTurretThreats(%this) +{ + //declared here +} + +function SimGroup::findTurretThreats(%this) +{ + for(%i = 0; %i < %this.getCount(); %i++) + %this.getObject(%i).findTurretThreats(); +} + +function GameBase::findTurretThreats(%this) +{ + %this.getDataBlock().findTurretThreats(%this); +} + +function TurretData::findTurretThreats(%data, %turret) +{ + %attackRadius = %turret.getMountedImage(0).attackRadius; + NavGraph.installThreat(%turret, %turret.team, %attackRadius); +} + +function fpStart(%useSpecial) +{ + $fp = new FloorPlan(); + $fp::special = %useSpecial; + $fp.generate(); +} + +function fpEnd() +{ + if($fp > 0) + $fp.delete(); +} + +function writeNavMetrics() +{ + navGraph.dumpInfo2File(); +} \ No newline at end of file diff --git a/base/scripts/objectiveHud.cs b/base/scripts/objectiveHud.cs new file mode 100644 index 0000000..ddf430a --- /dev/null +++ b/base/scripts/objectiveHud.cs @@ -0,0 +1,1103 @@ +// Mission type-dependent objective HUDs + +///// -MISSION START- ////////////////////////////////////////////////////////////// +addMessageCallback('MsgClientReady', clientReadyMSG); + +function clientReadyMSG(%msgType, %msgString, %gameType, %a2, %a3, %a4, %a5, %a6) +{ + clearObjHudMSG(); + setupObjHud(%gameType); +} + +addMessageCallback('MsgClearObjHud', clearObjHudMSG); + +function clearObjHudMSG(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + // clear the separator lines + objectiveHud.setSeparators(""); + objectiveHud.disableHorzSeparator(); + + + //remove everything in the objective Hud + while (objectiveHud.getCount() > 0) + objectiveHud.getObject(0).delete(); +} + +function setupObjHud(%gameType) +{ + switch$ (%gameType) + { + case BountyGame: + // set separators + objectiveHud.setSeparators("56 156"); + objectiveHud.disableHorzSeparator(); + + // Your score label ("SCORE") + objectiveHud.scoreLabel = new GuiTextCtrl() { + profile = "GuiTextObjGreenLeftProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 3"; + extent = "50 16"; + visible = "1"; + text = "SCORE"; + }; + // Your score + objectiveHud.yourScore = new GuiTextCtrl() { + profile = "GuiTextObjGreenCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "60 3"; + extent = "90 16"; + visible = "1"; + }; + // Target label ("TARGET") + objectiveHud.targetLabel = new GuiTextCtrl() { + profile = "GuiTextObjGreenLeftProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 19"; + extent = "50 16"; + visible = "1"; + text = "TARGET"; + }; + // your target's name + objectiveHud.yourTarget = new GuiTextCtrl() { + profile = "GuiTextObjGreenCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "60 19"; + extent = "90 16"; + visible = "1"; + }; + + objectiveHud.add(objectiveHud.scoreLabel); + objectiveHud.add(objectiveHud.yourScore); + objectiveHud.add(objectiveHud.targetLabel); + objectiveHud.add(objectiveHud.yourTarget); + + case CnHGame: + // set separators + objectiveHud.setSeparators("96 162 202"); + objectiveHud.enableHorzSeparator(); + + // Team names + objectiveHud.teamName[1] = new GuiTextCtrl() { + profile = "GuiTextObjGreenLeftProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 3"; + extent = "90 16"; + visible = "1"; + }; + objectiveHud.teamName[2] = new GuiTextCtrl() { + profile = "GuiTextObjHudLeftProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 19"; + extent = "90 16"; + visible = "1"; + }; + // Team scores + objectiveHud.teamScore[1] = new GuiTextCtrl() { + profile = "GuiTextObjGreenCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "100 3"; + extent = "50 16"; + visible = "1"; + }; + objectiveHud.teamScore[2] = new GuiTextCtrl() { + profile = "GuiTextObjHudCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "100 19"; + extent = "50 16"; + visible = "1"; + }; + // Hold label ("HOLD") + objectiveHud.holdLabel[1] = new GuiTextCtrl() { + profile = "GuiTextObjGreenCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "165 3"; + extent = "35 16"; + visible = "1"; + text = "HOLD"; + }; + objectiveHud.holdLabel[2] = new GuiTextCtrl() { + profile = "GuiTextObjHudCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "165 19"; + extent = "35 16"; + visible = "1"; + text = "HOLD"; + }; + // number of points held + objectiveHud.numHeld[1] = new GuiTextCtrl() { + profile = "GuiTextObjGreenCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "205 3"; + extent = "30 16"; + visible = "1"; + }; + objectiveHud.numHeld[2] = new GuiTextCtrl() { + profile = "GuiTextObjHudCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "205 19"; + extent = "30 16"; + visible = "1"; + }; + + for(%i = 1; %i <= 2; %i++) + { + objectiveHud.add(objectiveHud.teamName[%i]); + objectiveHud.add(objectiveHud.teamScore[%i]); + objectiveHud.add(objectiveHud.holdLabel[%i]); + objectiveHud.add(objectiveHud.numHeld[%i]); + } + + case CTFGame: + // set separators + objectiveHud.setSeparators("72 97 130"); + objectiveHud.enableHorzSeparator(); + + // Team names + objectiveHud.teamName[1] = new GuiTextCtrl() { + profile = "GuiTextObjGreenLeftProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 3"; + extent = "65 16"; + visible = "1"; + }; + objectiveHud.teamName[2] = new GuiTextCtrl() { + profile = "GuiTextObjHudLeftProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 19"; + extent = "65 16"; + visible = "1"; + }; + // Team scores + objectiveHud.teamScore[1] = new GuiTextCtrl() { + profile = "GuiTextObjGreenCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "75 3"; + extent = "20 16"; + visible = "1"; + }; + objectiveHud.teamScore[2] = new GuiTextCtrl() { + profile = "GuiTextObjHudCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "75 19"; + extent = "20 16"; + visible = "1"; + }; + // Flag label ("FLAG") + objectiveHud.flagLabel[1] = new GuiTextCtrl() { + profile = "GuiTextObjGreenCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "100 3"; + extent = "30 16"; + visible = "1"; + text = "FLAG"; + }; + objectiveHud.flagLabel[2] = new GuiTextCtrl() { + profile = "GuiTextObjHudCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "100 19"; + extent = "30 16"; + visible = "1"; + text = "FLAG"; + }; + // flag location (at base/in field/player carrying it) + objectiveHud.flagLocation[1] = new GuiTextCtrl() { + profile = "GuiTextObjGreenLeftProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "135 3"; + extent = "105 16"; + visible = "1"; + }; + objectiveHud.flagLocation[2] = new GuiTextCtrl() { + profile = "GuiTextObjHudLeftProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "135 19"; + extent = "105 16"; + visible = "1"; + }; + + for(%i = 1; %i <= 2; %i++) + { + objectiveHud.add(objectiveHud.teamName[%i]); + objectiveHud.add(objectiveHud.teamScore[%i]); + objectiveHud.add(objectiveHud.flagLabel[%i]); + objectiveHud.add(objectiveHud.flagLocation[%i]); + } + + case DMGame: + // set separators + objectiveHud.setSeparators("56 96 156"); + objectiveHud.disableHorzSeparator(); + + // Your score label ("SCORE") + objectiveHud.scoreLabel = new GuiTextCtrl() { + profile = "GuiTextObjGreenLeftProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 3"; + extent = "50 16"; + visible = "1"; + text = "SCORE"; + }; + // Your score + objectiveHud.yourScore = new GuiTextCtrl() { + profile = "GuiTextObjGreenCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "60 3"; + extent = "30 16"; + visible = "1"; + }; + // Your kills label ("KILLS") + objectiveHud.killsLabel = new GuiTextCtrl() { + profile = "GuiTextObjGreenLeftProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 19"; + extent = "50 16"; + visible = "1"; + text = "KILLS"; + }; + // Your kills + objectiveHud.yourKills = new GuiTextCtrl() { + profile = "GuiTextObjGreenCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "60 19"; + extent = "30 16"; + visible = "1"; + }; + // Your deaths label ("DEATHS") + objectiveHud.deathsLabel = new GuiTextCtrl() { + profile = "GuiTextObjGreenLeftProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "100 19"; + extent = "50 16"; + visible = "1"; + text = "DEATHS"; + }; + // Your deaths + objectiveHud.yourDeaths = new GuiTextCtrl() { + profile = "GuiTextObjGreenCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "160 19"; + extent = "30 16"; + visible = "1"; + }; + + objectiveHud.add(objectiveHud.scoreLabel); + objectiveHud.add(objectiveHud.yourScore); + objectiveHud.add(objectiveHud.killsLabel); + objectiveHud.add(objectiveHud.yourKills); + objectiveHud.add(objectiveHud.deathsLabel); + objectiveHud.add(objectiveHud.yourDeaths); + + case DnDGame: + + case HuntersGame: + // set separators + objectiveHud.setSeparators("96 132"); + objectiveHud.disableHorzSeparator(); + + // Your score label ("SCORE") + objectiveHud.scoreLabel = new GuiTextCtrl() { + profile = "GuiTextObjGreenLeftProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 3"; + extent = "90 16"; + visible = "1"; + text = "SCORE"; + }; + // Your score + objectiveHud.yourScore = new GuiTextCtrl() { + profile = "GuiTextObjGreenCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "100 3"; + extent = "30 16"; + visible = "1"; + }; + // flags label ("FLAGS") + objectiveHud.flagLabel = new GuiTextCtrl() { + profile = "GuiTextObjGreenLeftProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 19"; + extent = "90 16"; + visible = "1"; + text = "FLAGS"; + }; + // number of flags + objectiveHud.yourFlags = new GuiTextCtrl() { + profile = "GuiTextObjGreenCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "100 19"; + extent = "30 16"; + visible = "1"; + }; + + objectiveHud.add(objectiveHud.scoreLabel); + objectiveHud.add(objectiveHud.yourScore); + objectiveHud.add(objectiveHud.flagLabel); + objectiveHud.add(objectiveHud.yourFlags); + + case RabbitGame: + // set separators + objectiveHud.setSeparators("56 156"); + objectiveHud.disableHorzSeparator(); + + // Your score label ("SCORE") + objectiveHud.scoreLabel = new GuiTextCtrl() { + profile = "GuiTextObjGreenLeftProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 3"; + extent = "50 16"; + visible = "1"; + text = "SCORE"; + }; + // Your score + objectiveHud.yourScore = new GuiTextCtrl() { + profile = "GuiTextObjGreenCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "60 3"; + extent = "90 16"; + visible = "1"; + }; + // Rabbit label ("RABBIT") + objectiveHud.rabbitLabel = new GuiTextCtrl() { + profile = "GuiTextObjGreenLeftProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 19"; + extent = "50 16"; + visible = "1"; + text = "RABBIT"; + }; + // rabbit name + objectiveHud.rabbitName = new GuiTextCtrl() { + profile = "GuiTextObjGreenCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "60 19"; + extent = "90 16"; + visible = "1"; + }; + + objectiveHud.add(objectiveHud.scoreLabel); + objectiveHud.add(objectiveHud.yourScore); + objectiveHud.add(objectiveHud.rabbitLabel); + objectiveHud.add(objectiveHud.rabbitName); + + case SiegeGame: + // set separators + objectiveHud.setSeparators("96 122 177"); + objectiveHud.enableHorzSeparator(); + + // Team names + objectiveHud.teamName[1] = new GuiTextCtrl() { + profile = "GuiTextObjGreenLeftProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 3"; + extent = "90 16"; + visible = "1"; + }; + objectiveHud.teamName[2] = new GuiTextCtrl() { + profile = "GuiTextObjHudLeftProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 19"; + extent = "90 16"; + visible = "1"; + }; + // Team scores + objectiveHud.teamScore[1] = new GuiTextCtrl() { + profile = "GuiTextObjGreenCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "100 3"; + extent = "20 16"; + visible = "1"; + }; + objectiveHud.teamScore[2] = new GuiTextCtrl() { + profile = "GuiTextObjGreenCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "100 19"; + extent = "20 16"; + visible = "1"; + }; + // Role label ("PROTECT" or "DESTROY") + objectiveHud.roleLabel[1] = new GuiTextCtrl() { + profile = "GuiTextObjGreenCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "125 3"; + extent = "50 16"; + visible = "1"; + }; + objectiveHud.roleLabel[2] = new GuiTextCtrl() { + profile = "GuiTextObjHudCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "125 19"; + extent = "50 16"; + visible = "1"; + }; + // number of objectives to protect/destroy + objectiveHud.objectives[1] = new GuiTextCtrl() { + profile = "GuiTextObjGreenCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "180 3"; + extent = "60 16"; + visible = "1"; + }; + objectiveHud.objectives[2] = new GuiTextCtrl() { + profile = "GuiTextObjHudCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "180 19"; + extent = "60 16"; + visible = "1"; + }; + + for(%i = 1; %i <= 2; %i++) + { + objectiveHud.add(objectiveHud.teamName[%i]); + objectiveHud.add(objectiveHud.teamScore[%i]); + objectiveHud.add(objectiveHud.roleLabel[%i]); + objectiveHud.add(objectiveHud.objectives[%i]); + } + + case TeamHuntersGame: + // set separators + objectiveHud.setSeparators("57 83 197"); + objectiveHud.enableHorzSeparator(); + + // flags label ("FLAGS") + objectiveHud.flagLabel = new GuiTextCtrl() { + profile = "GuiTextObjGreenLeftProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 3"; + extent = "50 16"; + visible = "1"; + text = "FLAGS"; + }; + // number of flags + objectiveHud.yourFlags = new GuiTextCtrl() { + profile = "GuiTextObjGreenCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "60 3"; + extent = "20 16"; + visible = "1"; + }; + // team names + objectiveHud.teamName[1] = new GuiTextCtrl() { + profile = "GuiTextObjGreenCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "85 3"; + extent = "110 16"; + visible = "1"; + }; + objectiveHud.teamName[2] = new GuiTextCtrl() { + profile = "GuiTextObjHudCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "85 19"; + extent = "110 16"; + visible = "1"; + }; + // team scores + objectiveHud.teamScore[1] = new GuiTextCtrl() { + profile = "GuiTextObjGreenCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "200 3"; + extent = "40 16"; + visible = "1"; + }; + objectiveHud.teamScore[2] = new GuiTextCtrl() { + profile = "GuiTextObjHudCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "200 19"; + extent = "40 16"; + visible = "1"; + }; + + objectiveHud.add(objectiveHud.flagLabel); + objectiveHud.add(objectiveHud.yourFlags); + for(%i = 1; %i <= 2; %i++) + { + objectiveHud.add(objectiveHud.teamName[%i]); + objectiveHud.add(objectiveHud.teamScore[%i]); + } + + case SinglePlayerGame: + // no separator lines + objectiveHud.setSeparators(""); + objectiveHud.disableHorzSeparator(); + + // two lines to print objectives + objectiveHud.spText[1] = new GuiTextCtrl() { + profile = "GuiTextObjHudLeftProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 3"; + extent = "235 16"; + visible = "1"; + }; + objectiveHud.spText[2] = new GuiTextCtrl() { + profile = "GuiTextObjHudLeftProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "4 19"; + extent = "235 16"; + visible = "1"; + }; + objectiveHud.add(objectiveHud.spText[1]); + objectiveHud.add(objectiveHud.spText[2]); + } + + chatPageDown.setVisible(false); +} + +addMessageCallback('MsgCheckTeamLines', checkTeamLines); + +function checkTeamLines(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + %team = detag(%a1); + + if(%team == 1) + %other = 2; + else if(%team == 2) + %other = 1; + else + return; + + %tY = getWord(objectiveHud.teamName[%team].position, 1); + %oY = getWord(objectiveHud.teamName[%other].position, 1); + + // if player's team is lower on objective hud than other team is, switch them + if(%tY > %oY) + swapTeamLines(); +} + +function swapTeamLines() +{ + // if player's team is on the bottom of the objective hud, swap them so that it's on top + %bLeft = "GuiTextObjHudLeftProfile"; + %bCenter = "GuiTextObjHudCenterProfile"; + %gLeft = "GuiTextObjGreenLeftProfile"; + %gCenter = "GuiTextObjGreenCenterProfile"; + + %teamOneY = getWord(objectiveHud.teamName[1].position, 1); + %teamTwoY = getWord(objectiveHud.teamName[2].position, 1); + if(%teamOneY > %teamTwoY) + { + // if team one was on the second line, now it'll be on the first + %newTop = 1; + %newBottom = 2; + } + else + { + // if team one was on the first line, now it'll be on the second + %newTop = 2; + %newBottom = 1; + } + + // these are present in every team-based mission type + %nameX = firstWord(objectiveHud.teamName[1].position); + objectiveHud.teamName[1].position = %nameX SPC %teamTwoY; + objectiveHud.teamName[2].position = %nameX SPC %teamOneY; + objectiveHud.teamName[%newTop].setProfile(%gLeft); + objectiveHud.teamName[%newBottom].setProfile(%bLeft); + + %scoreX = firstWord(objectiveHud.teamScore[1].position); + objectiveHud.teamScore[1].position = %scoreX SPC %teamTwoY; + objectiveHud.teamScore[2].position = %scoreX SPC %teamOneY; + objectiveHud.teamScore[%newTop].setProfile(%gCenter); + objectiveHud.teamScore[%newBottom].setProfile(%bCenter); + + if(isObject(objectiveHud.flagLocation[1])) + { + // CTF + %locatX = firstWord(objectiveHud.flagLocation[1].position); + objectiveHud.flagLocation[1].position = %locatX SPC %teamTwoY; + objectiveHud.flagLocation[2].position = %locatX SPC %teamOneY; + // swap profiles so top line is green (don't bother with labels) + objectiveHud.flagLocation[%newTop].setProfile(%gLeft); + objectiveHud.flagLocation[%newBottom].setProfile(%bLeft); + } + if(isObject(objectiveHud.numHeld[1])) + { + // CnH + %locatX = firstWord(objectiveHud.numHeld[1].position); + objectiveHud.numHeld[1].position = %locatX SPC %teamTwoY; + objectiveHud.numHeld[2].position = %locatX SPC %teamOneY; + // swap profiles so top line is green (don't bother with labels) + objectiveHud.numHeld[%newTop].setProfile(%gCenter); + objectiveHud.numHeld[%newbottom].setProfile(%bCenter); + } + if(isObject(objectiveHud.objectives[1])) + { + // Siege + %locX = firstWord(objectiveHud.roleLabel[1].position); + objectiveHud.roleLabel[1].position = %locX SPC %teamTwoY; + objectiveHud.roleLabel[2].position = %locX SPC %teamOneY; + %locatX = firstWord(objectiveHud.objectives[1].position); + objectiveHud.objectives[1].position = %locatX SPC %teamTwoY; + objectiveHud.objectives[2].position = %locatX SPC %teamOneY; + // swap profiles so top line is green (don't forget role label) + objectiveHud.roleLabel[%newTop].setProfile(%gCenter); + objectiveHud.roleLabel[%newbottom].setProfile(%bCenter); + objectiveHud.objectives[%newTop].setProfile(%gCenter); + objectiveHud.objectives[%newbottom].setProfile(%bCenter); + } +} + +//----------------------------------------------------------------------------- +//CLOCK HUD Callback +addMessageCallback('MsgSystemClock', setSystemClock); + +function setSystemClock(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + $Hud::TimeLimit = detag(%a1); + %timeLeftMS = detag(%a2); + clockHud.setTime(%timeLeftMS / (60 * 1000)); +} + +//----------------------------------------------------------------------------- +//Generic msg callbacks... + +addMessageCallback('MsgYourScoreIs', YourScoreIs); + +function YourScoreIs(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + if ( isObject( objectiveHud.yourScore ) ) + objectiveHud.yourScore.setValue( detag(%a1) ); +} + +addMessageCallback('MsgTeamScoreIs', teamScoreIs); + +function teamScoreIs(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + %teamNum = detag(%a1); + %score = detag(%a2); + + if(%score $= "") + %score = 0; + + objectiveHud.teamScore[%teamNum].setValue(%score); +} + +addMessageCallback('MsgYourRankIs', yourRankIs); + +function yourRankIs(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + // the rank (+1) adjustment is taken care of server-side... + %rank = detag(%a1); + // no longer displayed in objective hud +} + +///////////////////////////////////////////////////////////////////////////////////////// +// Bounty - Hud Messages +///////////////////////////////////////////////////////////////////////////////////////// + +addMessageCallback('msgBountyTargetIs', bountyTargetIs); + +function bountyTargetIs(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + %hit = detag(%a1); + if(%hit $= "") + %hit = ""; + + objectiveHud.yourTarget.setValue(%hit); +} + +addMessageCallback('msgBountyTargetDropped', bountyTargetDropped); +addMessageCallback('msgBountyTargetEntObs', bountyTargetDropped); + +function bountyTargetDropped(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + objectiveHud.yourTarget.setValue(""); +} + +//addMessageCallback('msgBountyObjRem', bountyObjRem); + +function bountyObjRem(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + %objRem = detag(%a1); + + // this is no longer on the objective hud +} + +///////////////////////////////////////////////////////////////////////////////////////// +// CnH - Hud Messages +///////////////////////////////////////////////////////////////////////////////////////// + +addMessageCallback('MsgCnHAddTeam', cnhAddTeam); + +function cnhAddTeam(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + %teamNum = detag(%a1); + %teamName = detag(%a2); + %score = detag(%a3); + if(%score $= "") + %score = 0; + %sLimit = detag(%a4); + %held = detag(%a5); + + objectiveHud.teamName[%teamNum].setValue(%teamName); + objectiveHud.teamScore[%teamNum].setValue(%score@"/"@%sLimit); + objectiveHud.numHeld[%teamNum].setValue(%held); +} + +//addMessageCallback('MsgFlipFlopInit', hudFlipFlopInit); + +//function hudFlipFlopInit(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +//{ +// %flipNum = detag(%a1); +// %flipName = Game.cleanWord(detag(%a2)); +// %status = detag(%a3); +// if(%flipName $= "") +// %flipname = "FlipFlop " @ %flipNum; +//} + +addMessageCallback('MsgFlipFlopsHeld', hudFlipFlopsHeld); + +function hudFlipFlopsHeld(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + %teamNum = detag(%a1); + %held = detag(%a2); + + objectiveHud.numHeld[%teamNum].setValue(%held); +} + +addMessageCallback('MsgCnHTeamCap', cnhTeamCap); + +function cnhTeamCap(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + %teamNum = detag(%a4); + %score = detag(%a5); + %sLimit = detag(%a6); + %string = %score @ "/" @ %sLimit; + + objectiveHud.teamScore[%teamNum].setValue(%string); +} + +///////////////////////////////////////////////////////////////////////////////////////// +// CTF - Gui Hud Control +///////////////////////////////////////////////////////////////////////////////////////// + +addMessageCallback('MsgCTFAddTeam', ctfAddTeam); + +function ctfAddTeam(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + %teamNum = detag(%a1); + %teamName = detag(%a2); + %flagStatus = detag(%a3); + %score = detag(%a4); + + objectiveHud.teamName[%teamNum].setValue(%teamName); + objectiveHud.teamScore[%teamNum].setValue(%score); + objectiveHud.flagLocation[%teamNum].setValue(%flagStatus); +} + +addMessageCallback('MsgCTFFlagTaken', ctfFlagTaken); + +function ctfFlagTaken(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + %index = detag(%a3); + %taker = detag(%a4); + + objectiveHud.flagLocation[%index].setValue(%taker); +} + +addMessageCallback('MsgCTFFlagDropped', ctfFlagDropped); + +function ctfFlagDropped(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + %index = detag(%a3); + objectiveHud.flagLocation[%index].setValue(""); +} + +addMessageCallback('MsgCTFFlagCapped', ctfFlagCapped); + +function ctfFlagCapped(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + %index = detag(%a3); + objectiveHud.flagLocation[%index].setValue(""); +} + +addMessageCallback('MsgCTFFlagReturned', ctfFlagReturned); + +function ctfFlagReturned(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + %index = detag(%a3); + objectiveHud.flagLocation[%index].setValue(""); +} + +///////////////////////////////////////////////////////////////////////////////////////// +// Deathmatch - Hud Messages +///////////////////////////////////////////////////////////////////////////////////////// + +addMessageCallback('MsgDMPlayerDies', dmPlayerDies); + +function dmPlayerDies(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + %deaths = detag(%a1); + objectiveHud.yourDeaths.setValue(%deaths); +} + +addMessageCallback('MsgDMKill', dmKill); + +function dmKill(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + %kills = detag(%a1); + objectiveHud.yourKills.setValue(%kills); +} + +///////////////////////////////////////////////////////////////////////////////////////// +// Hunters - Hud Messages +///////////////////////////////////////////////////////////////////////////////////////// + +addMessageCallback('MsgHuntAddTeam', huntAddTeam); + +function huntAddTeam(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + %teamNum = detag(%a1); + %teamName = detag(%a2); + %score = detag(%a3); + + objectiveHud.teamName[%teamNum].setValue(%teamName); + objectiveHud.teamScore[%teamNum].setValue(%score); +} + +addMessageCallback('MsgHuntGreedStatus', huntGreedStatus); + +function huntGreedStatus(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + %greedStatus = detag(%a1); + %greedAmount = detag(%a2); + // no longer displayed in objective hud +} + +addMessageCallback('MsgHuntHoardStatus', hunthoardStatus); + +function huntHoardStatus(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + $Hud::HoardMode = detag(%a1); + $HUD::TimeLimit = detag(%a2); + %timeLeftMS = detag(%a3); + $HUD::HoardStartTime = detag(%a4); + $HUD::HoardDuration = detag(%a5); + // no longer displayed in objective hud +} + +function updateHoardStatusHUD(%timeLeftMS) +{ + // no longer displayed in objective hud +} + +addMessageCallback('MsgHuntYouHaveFlags', huntYouHaveFlags); + +function huntYouHaveFlags(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + %numFlags = detag(%a1); + objectiveHud.yourFlags.setValue(%numFlags); +} + +///////////////////////////////////////////////////////////////////////////////////////// +// Rabbit - Hud Messages +///////////////////////////////////////////////////////////////////////////////////////// + +addMessageCallback('MsgRabbitFlagTaken', rabbitFlagTaken); + +function rabbitFlagTaken(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + %bunny = detag(%a1); + objectiveHud.rabbitName.setValue(%bunny); +} + +addMessageCallback('MsgRabbitFlagDropped', rabbitFlagDropped); + +function rabbitFlagDropped(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + objectiveHud.rabbitName.setValue(""); +} + +addMessageCallback('MsgRabbitFlagReturned', rabbitFlagReturned); + +function rabbitFlagReturned(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + objectiveHud.rabbitName.setValue(""); +} + +addMessageCallback('MsgRabbitFlagStatus', rabbitFlagStatus); + +function rabbitFlagStatus(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + %flagStatus = detag(%a1); + objectiveHud.rabbitName.setValue(%flagStatus); +}///////////////////////////////////////////////////////////////////////////////////////// +// Siege - Hud Messages +///////////////////////////////////////////////////////////////////////////////////////// + +addMessageCallback('MsgSiegeAddTeam', siegeAddTeam); + +function siegeAddTeam(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + %teamNum = detag(%a1); + %teamName = detag(%a2); + if(detag(%a3)) + %role = "CAPTURE"; + else + %role = "PROTECT"; + + objectiveHud.teamName[%teamNum].setValue(%teamName); + objectiveHud.roleLabel[%teamNum].setValue(%role); +} + +addMessageCallback('MsgSiegeRolesSwitched', siegeRolesSwitched); + +function siegeRolesSwitched(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + %newOff = detag(%a2); + %newDef = %newOff == 1 ? 2: 1; + + objectiveHud.roleLabel[%newDef].setValue("PROTECT"); + objectiveHud.roleLabel[%newOff].setValue("CAPTURE"); + //objectiveHud.objectives[%newDef].setValue("1"); + //objectiveHud.objectives[%newOff].setValue("0"); +} + +addMessageCallback('MsgSiegeSwitchSides', siegeSwitchSides); + +function siegeSwitchSides(%msgType, %msgString, %a1, %a2) +{ + alxPlay( SiegeSwitchSides, 0, 0, 0); +} + +///////////////////////////////////////////////////////////////////////////////////////// +// DnD - Hud Messages +///////////////////////////////////////////////////////////////////////////////////////// + +addMessageCallback('MsgDnDAddTeam', dndAddTeam); + +function dndAddTeam(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + %teamNum = detag(%a1); + %teamName = detag(%a2); + %score = detag(%a3); + %yOffset = (%teamNum * 15) + 30; + // team name + objectiveHud.data[0, %teamNum + 1] = new GuiTextCtrl() { + profile = "GuiTextObjHudLeftProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "8 " @ %yOffset; + extent = "150 15"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = %teamName; + }; + // number of intact objectives + objectiveHud.data[1, %teamNum + 1] = new GuiTextCtrl() { + profile = "GuiTextObjHudCenterProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "200 " @ %yOffset; + extent = "55 15"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = %score; + }; + + objectiveHud.add(objectiveHud.data[0, %teamNum + 1]); + objectiveHud.add(objectiveHud.data[1, %teamNum + 1]); + $numberTeams = %teamNum; +} + +addMessageCallback('MsgDnDTeamObjLeft', dndTeamObjLeft); + +function dndTeamObjLeft(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + %teamNum = detag(%a1); + %numLeft = detag(%a2); + objectiveHud.data[1, (%teamNum + 1)].setValue(%numLeft); + +} + +///////////////////////////////////////////////////////////////////////////////////////// +// Single Player Game - Hud Messages +///////////////////////////////////////////////////////////////////////////////////////// + +//addMessageCallback('MsgSPYourRankIs', spYourRankIs); + +function spYourRankIs(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + //%rank = detag(%a1); + //objectiveHud.data[1,1].setValue(%rank); +} + +addMessageCallback('MsgSPCurrentObjective1', spCurrentObjective1); + +function spCurrentObjective1(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + %obj = detag(%a1); + objectiveHud.spText[1].setValue(%obj); +} + +addMessageCallback('MsgSPCurrentObjective2', spCurrentObjective2); + +function spCurrentObjective2(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +{ + %obj = detag(%a1); + objectiveHud.spText[2].setValue(%obj); +} + +//addMessageCallback('MsgSPCurrentObjective3', spCurrentObjective3); + +//function spCurrentObjective3(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6) +//{ +// %obj = detag(%a1); +// objectiveHud.data[0,4].setValue(%obj); +//} + diff --git a/base/scripts/pack.cs b/base/scripts/pack.cs new file mode 100644 index 0000000..4f8e7fa --- /dev/null +++ b/base/scripts/pack.cs @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------------- + +datablock AudioProfile(TurretPackActivateSound) +{ + filename = "fx/packs/turret_place.wav"; + description = AudioClose3D; + preload = true; +}; + + +//---------------------------------------------------------------------------- + +function Pack::onUse(%data,%obj) +{ + if (%obj.getMountedImage($BackpackSlot) != %data.image.getId()) + %obj.mountImage(%data.image,$BackpackSlot); + else + { + // Toggle the image trigger. + %obj.setImageTrigger($BackpackSlot, + !%obj.getImageTrigger($BackpackSlot)); + } +} + +function Pack::onInventory(%data,%obj,%amount) +{ + //only do this for players + if(%obj.getClassName() !$= "Player") + return; + + // Auto-mount the packs on players + if((%oldPack = %obj.getMountedImage($BackpackSlot)) != 0) + %obj.setInventory(%oldPack.item, 0); + if (%amount && %obj.getDatablock().className $= Armor) + { + // if you picked up another pack after you placed a satchel charge but + // before you detonated it, delete the charge + if(%obj.thrownChargeId > 0) + { + %obj.thrownChargeId.delete(); + %obj.thrownChargeId = 0; + } + %obj.mountImage(%data.image,$BackpackSlot); + %obj.client.setBackpackHudItem(%data.getName(), 1); + } + if(%amount == 0) + %obj.client.setBackpackHudItem(%data.getName(), 0); + ItemData::onInventory(%data,%obj,%amount); +} + +//---------------------------------------------------------------------------- + +// --- Upgrade packs +exec("scripts/packs/ammopack.cs"); +exec("scripts/packs/cloakingpack.cs"); +exec("scripts/packs/energypack.cs"); +exec("scripts/packs/repairpack.cs"); +exec("scripts/packs/shieldpack.cs"); +exec("scripts/packs/satchelCharge.cs"); +exec("scripts/packs/sensorjammerpack.cs"); + +// --- Turret barrel packs +exec("scripts/packs/aabarrelpack.cs"); +exec("scripts/packs/missilebarrelpack.cs"); +exec("scripts/packs/mortarbarrelpack.cs"); +exec("scripts/packs/plasmabarrelpack.cs"); +exec("scripts/packs/ELFbarrelpack.cs"); diff --git a/base/scripts/packs/ELFbarrelPack.cs b/base/scripts/packs/ELFbarrelPack.cs new file mode 100644 index 0000000..1a87eb2 --- /dev/null +++ b/base/scripts/packs/ELFbarrelPack.cs @@ -0,0 +1,61 @@ +//-------------------------------------------------------------------------- +// +// ELF barrel pack +// +//-------------------------------------------------------------------------- + +datablock ShapeBaseImageData(ELFBarrelPackImage) +{ + mass = 15; + + shapeFile = "pack_barrel_elf.dts"; + item = ELFBarrelPack; + mountPoint = 1; + offset = "0 0 0"; + turretBarrel = "ELFBarrelLarge"; + + stateName[0] = "Idle"; + stateTransitionOnTriggerDown[0] = "Activate"; + + stateName[1] = "Activate"; + stateScript[1] = "onActivate"; + stateTransitionOnTriggerUp[1] = "Deactivate"; + + stateName[2] = "Deactivate"; + stateScript[2] = "onDeactivate"; + stateTransitionOnTimeOut[2] = "Idle"; + + isLarge = true; +}; + +datablock ItemData(ELFBarrelPack) +{ + className = Pack; + catagory = "Packs"; + shapeFile = "pack_barrel_elf.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + rotate = true; + image = "ELFBarrelPackImage"; + pickUpName = "an ELF barrel pack"; + + computeCRC = true; + +}; + +function ELFBarrelPackImage::onActivate(%data, %obj, %slot) +{ + checkTurretMount(%data, %obj, %slot); +} + +function ELFBarrelPackImage::onDeactivate(%data, %obj, %slot) +{ + %obj.setImageTrigger($BackpackSlot, false); +} + +function ELFBarrelPack::onPickup(%this, %obj, %shape, %amount) +{ + // created to prevent console errors +} \ No newline at end of file diff --git a/base/scripts/packs/aabarrelPack.cs b/base/scripts/packs/aabarrelPack.cs new file mode 100644 index 0000000..87f3423 --- /dev/null +++ b/base/scripts/packs/aabarrelPack.cs @@ -0,0 +1,63 @@ +//-------------------------------------------------------------------------- +// +// +// +//-------------------------------------------------------------------------- + +datablock ShapeBaseImageData(AABarrelPackImage) +{ + mass = 15; + + shapeFile = "pack_barrel_aa.dts"; + item = AABarrelPack; + mountPoint = 1; + offset = "0 0 0"; + turretBarrel = "AABarrelLarge"; + + stateName[0] = "Idle"; + stateTransitionOnTriggerDown[0] = "Activate"; + + stateName[1] = "Activate"; + stateScript[1] = "onActivate"; + stateTransitionOnTriggerUp[1] = "Deactivate"; + + stateName[2] = "Deactivate"; + stateScript[2] = "onDeactivate"; + stateTransitionOnTimeOut[2] = "Idle"; + + isLarge = true; +}; + +datablock ItemData(AABarrelPack) +{ + className = Pack; + catagory = "Packs"; + shapeFile = "pack_barrel_aa.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + rotate = true; + image = "AABarrelPackImage"; + pickUpName = "an anti-aircraft barrel pack"; + + computeCRC = true; + +}; + +//AABarrelPackImage.turretBarrel = "AABarrelLarge"; + +function AABarrelPackImage::onActivate(%data, %obj, %slot) +{ + checkTurretMount(%data, %obj, %slot); +} + +function AABarrelPackImage::onDeactivate(%data, %obj, %slot) +{ + %obj.setImageTrigger($BackpackSlot, false); +} + +function AABarrelPack::onPickup(%this, %obj, %shape, %amount) +{ + // created to prevent console errors +} \ No newline at end of file diff --git a/base/scripts/packs/ammopack.cs b/base/scripts/packs/ammopack.cs new file mode 100644 index 0000000..3d53437 --- /dev/null +++ b/base/scripts/packs/ammopack.cs @@ -0,0 +1,311 @@ +// ------------------------------------------------------------------ +// AMMO PACK +// can be used by any armor type +// uses no energy, does not have to be activated +// increases the max amount of non-energy ammo carried + +// put vars here for ammo max counts with ammo pack + +$AmmoItem[0] = PlasmaAmmo; +$AmmoItem[1] = ChaingunAmmo; +$AmmoItem[2] = DiscAmmo; +$AmmoItem[3] = GrenadeLauncherAmmo; +$AmmoItem[4] = MortarAmmo; +$AmmoItem[5] = MissileLauncherAmmo; +$AmmoItem[6] = RepairKit; + +$numAmmoItems = 7; + +$grenAmmoType[0] = Grenade; +$grenAmmoType[1] = ConcussionGrenade; +$grenAmmoType[2] = FlashGrenade; +$grenAmmoType[3] = FlareGrenade; + +$numGrenTypes = 4; + +datablock ShapeBaseImageData(AmmoPackImage) +{ + shapeFile = "pack_upgrade_ammo.dts"; + item = AmmoPack; + mountPoint = 1; + offset = "0 0 0"; +}; + +datablock ItemData(AmmoPack) +{ + className = Pack; + catagory = "Packs"; + shapeFile = "pack_upgrade_ammo.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + rotate = true; + image = "AmmoPackImage"; + pickUpName = "an ammo pack"; + + computeCRC = true; + + +// lightType = "PulsingLight"; +// lightColor = "0.2 0.4 0.0 1.0"; +// lightTime = "1200"; +// lightRadius = "1.0"; + + max[PlasmaAmmo] = 30; + max[ChaingunAmmo] = 150; + max[DiscAmmo] = 15; + max[GrenadeLauncherAmmo] = 15; + max[MortarAmmo] = 10; + max[MissileLauncherAmmo] = 4; + max[Grenade] = 10; + max[ConcussionGrenade] = 10; + max[FlashGrenade] = 10; + max[FlareGrenade] = 10; + max[Mine] = 5; + max[RepairKit] = 1; +}; + +function AmmoPack::onPickup(%this,%pack,%player,%amount) +{ + // %this = AmmoPack datablock + // %pack = AmmoPack object number + // %player = player + // %amount = 1 + + for (%idx = 0; %idx < $numAmmoItems; %idx++) + { + %ammo = $AmmoItem[%idx]; + if (%pack.inv[%ammo] > 0) + { + %amount = %pack.getInventory(%ammo); + %player.incInventory(%ammo,%amount); + %pack.setInventory(%ammo,0); + } + else if(%pack.inv[%ammo] == -1) + { + // this particular type of ammo has already been exhausted for this pack; + // don't give the player any + } + else + { + // Assume it's full if no inventory has been assigned + %player.incInventory(%ammo,%this.max[%ammo]); + } + } + // now check what type grenades (if any) player is carrying + %gFound = false; + for (%i = 0; %i < $numGrenTypes; %i++) + { + %gType = $grenAmmoType[%i]; + if(%player.inv[%gType] > 0) + { + %gFound = true; + %playerGrenType = %gType; + break; + } + } + // if player doesn't have any grenades at all, give 'em whatever the ammo pack has + if(!%gFound) + { + %given = false; + for(%j = 0; %j < $numGrenTypes; %j++) + { + %packGren = $grenAmmoType[%j]; + if(%pack.inv[%packGren] > 0) + { + // pack has some of these grenades + %player.incInventory(%packGren, %pack.getInventory(%packGren)); + %pack.setInventory(%packGren, 0); + %given = true; + break; + } + else if(%pack.inv[%packGren] == -1) + { + // the pack doesn't have any of this type of grenades + } + else + { + // pack has full complement of this grenade type + %player.incInventory(%packGren, %this.max[%packGren]); + %given = true; + } + if(%given) + break; + } + } + else + { + // player had some amount of grenades before picking up pack + if(%pack.inv[%playerGrenType] > 0) + { + // pack has 1 or more of this type of grenade + %player.incInventory(%playerGrenType, %pack.getInventory(%playerGrenType)); + %pack.setInventory(%playerGrenType, 0); + } + else if(%pack.inv[%playerGrenType] == -1) + { + // sorry Chester, the pack is out of these grenades. + } + else + { + // pack is uninitialized for this grenade type -- meaning it has full count + %player.incInventory(%playerGrenType, %this.max[%playerGrenType]); + } + } + // now see if player had mines selected and if they're allowed in this mission type + %mineFav = %player.client.favorites[getField(%player.client.mineIndex, 0)]; + if ( ( $InvBanList[$CurrentMissionType, "Mine"] !$= "1" ) + && !( ( %mineFav $= "EMPTY" ) || ( %mineFav $= "INVALID" ) ) ) + { + // player has selected mines, and they are legal in this mission type + if(%pack.inv[Mine] > 0) + { + // and the pack has some mines in it! bonus! + %player.incInventory(Mine, %pack.getInventory(Mine)); + %pack.setInventory(Mine, 0); + } + else if(%pack.inv[Mine] == -1) + { + // no mines left in the pack. do nothing. + } + else + { + // assume it's full of mines if no inventory has been assigned + %player.incInventory(Mine,%this.max[Mine]); + } + } +} + +function AmmoPack::onThrow(%this,%pack,%player) +{ + // %this = AmmoPack datablock + // %pack = AmmoPack object number + // %player = player + + %player.throwAmmoPack = 1; + dropAmmoPack(%pack, %player); + // do the normal ItemData::onThrow stuff -- sound and schedule deletion + serverPlay3D(ItemThrowSound, %player.getTransform()); + %pack.schedulePop(); +} + +function AmmoPack::onInventory(%this,%player,%value) +{ + // %this = AmmoPack + // %player = player + // %value = 1 if gaining a pack, 0 if losing a pack + + // the below test is necessary because this function is called everytime the ammo + // pack gains or loses an item + if(%player.getClassName() $= "Player") + { + if(!%value) + if(%player.throwAmmoPack == 1) + { + %player.throwAmmoPack = 0; + // ammo stuff already handled by AmmoPack::onThrow + } + else + { + // ammo pack was sold at inventory station -- no need to worry about + // setting the ammo in the pack object (it doesn't exist any more) + dropAmmoPack(-1, %player); + } + } + Pack::onInventory(%this,%player,%value); +} + +function dropAmmoPack(%packObj, %player) +{ + // %packObj = Ammo Pack object number if pack is being thrown, -1 if sold at inv station + // %player = player object + + for(%i = 0; %i < $numAmmoItems; %i++) + { + %ammo = $AmmoItem[%i]; + // %pAmmo == how much of this ammo type the player has + %pAmmo = %player.getInventory(%ammo); + // %pMax == how much of this ammo type the player's datablock says can be carried + %pMax = %player.getDatablock().max[%ammo]; + if(%pAmmo > %pMax) + { + // if player has more of this ammo type than datablock's max... + if(%packObj > 0) + { + // put ammo that player can't carry anymore in pack + %packObj.setInventory(%ammo, %pAmmo - %pMax); + } + // set player to max for this ammo type + %player.setInventory(%ammo, %pMax); + } + else + { + if(%packObj > 0) + { + // the pack gets -1 of this ammo type -- else it'll assume it's full + // can't use setInventory() because it won't allow values less than 1 + %packObj.inv[%ammo] = -1; + } + } + } + // and, of course, a pass for the grenades. Whee. + %gotGren = false; + // check to see what kind of grenades the player has. + for(%j = 0; %j < $numGrenTypes; %j++) + { + %gType = $grenAmmoType[%j]; + if(%player.inv[%gType] > 0) + { + %gotGren = true; + %playerGren = %gType; + break; + } + else + { + // ammo pack only carries type of grenades that player who bought it (or picked + // it up) had at the time -- all else are zeroed out (value of -1) + if(%packObj > 0) + %packObj.inv[%gType] = -1; + } + } + if(%gotGren) + { + %pAmmo = %player.getInventory(%playerGren); + %pMax = %player.getDatablock().max[%playerGren]; + if(%pAmmo > %pMax) + { + if(%packObj > 0) + %packObj.setInventory(%playerGren, %pAmmo - %pMax); + %player.setInventory(%playerGren, %pMax); + } + else + if(%packObj > 0) + %packObj.inv[%playerGren] = -1; + } + else + { + // player doesn't have any grenades at all. nothing needs to be done here. + } + // crap. forgot the mines. + if(%player.getInventory(Mine) > %player.getDatablock().max[Mine]) + { + // if player has more mines than datablock's max... + if(%packObj > 0) + { + // put mines that player can't carry anymore in pack + %packObj.setInventory(Mine, %player.getInventory(Mine) - %player.getDatablock().max[Mine]); + } + // set player to max mines + %player.setInventory(Mine, %player.getDatablock().max[Mine]); + } + else + { + if(%packObj > 0) + { + // the pack gets -1 for mines -- else it'll assume it's full + // can't use setInventory() because it won't allow values less than 1 + %packObj.inv[Mine] = -1; + } + } +} \ No newline at end of file diff --git a/base/scripts/packs/cloakingpack.cs b/base/scripts/packs/cloakingpack.cs new file mode 100644 index 0000000..ecc14a1 --- /dev/null +++ b/base/scripts/packs/cloakingpack.cs @@ -0,0 +1,155 @@ +// ------------------------------------------------------------------ +// CLOAKING PACK +// +// When activated, this pack cloaks the user from all visual detection +// by other players and cameras. This is a local effect only (someone standing +// next to the cloaked player will still be visible). Motion sensors will +// still detect a (moving) cloaked player. +// +// When not activated, the pack creates a localized passive sensor dampening +// field. The user will not be visible to any non-motion-detecting sensor. +// +//Only light armors may equip with this item. + + +datablock AudioProfile(CloakingPackActivateSound) +{ + filename = "fx/packs/cloak_on.wav"; + description = CloseLooping3d; + preload = true; +}; + +datablock ShapeBaseImageData(CloakingPackImage) +{ + shapeFile = "pack_upgrade_cloaking.dts"; + item = CloakingPack; + mountPoint = 1; + offset = "0 0 0"; + + usesEnergy = true; + minEnergy = 3; + + stateName[0] = "Idle"; + stateTransitionOnTriggerDown[0] = "Activate"; + + stateName[1] = "Activate"; + stateScript[1] = "onActivate"; + stateSequence[1] = "fire"; + stateSound[1] = CloakingPackActivateSound; + stateEnergyDrain[1] = 12; + stateTransitionOnTriggerUp[1] = "Deactivate"; + stateTransitionOnNoAmmo[1] = "Deactivate"; + + stateName[2] = "Deactivate"; + stateScript[2] = "onDeactivate"; + stateTransitionOnTimeout[2] = "Idle"; +}; + +datablock ItemData(CloakingPack) +{ + className = Pack; + catagory = "Packs"; + shapeFile = "pack_upgrade_cloaking.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + rotate = true; + image = "CloakingPackImage"; + pickUpName = "a cloaking pack"; + + computeCRC = true; + +}; + +function CloakingPackImage::onMount(%data, %obj, %node) +{ + // player is sensor-invisible while wearing pack (except to motion sensors) + %obj.setPassiveJammed(true); +} + +function CloakingPackImage::onUnmount(%data, %obj, %node) +{ + %obj.setPassiveJammed(false); + %obj.setCloaked(false); + %obj.setImageTrigger(%node, false); +} + +// make player completely invisible to all players/sensors (except motion) +function CloakingPackImage::onActivate(%data, %obj, %slot) +{ + if(%obj.reCloak !$= "") + { + Cancel(%obj.reCloak); + %obj.reCloak = ""; + } + + if(%obj.client.armor $= "Light") + { + // can the player currently cloak (function returns "true" or reason for failure)? + if(%obj.canCloak() $= "true") + { + messageClient(%obj.client, 'MsgCloakingPackOn', '\c2Cloaking pack on.'); + %obj.setCloaked(true); + } + else + { + // notify player that they cannot cloak + messageClient(%obj.client, 'MsgCloakingPackFailed', '\c2Jamming field prevents cloaking.'); + %obj.setImageTrigger(%slot, false); + } + } + else + { + // hopefully avoid some loopholes + messageClient(%obj.client, 'MsgCloakingPackInvalid', '\c2Cloaking available for light armors only.'); + %obj.setImageTrigger(%slot, false); + } +} + +function CloakingPackImage::onDeactivate(%data, %obj, %slot) +{ + if(%obj.reCloak !$= "") + { + Cancel(%obj.reCloak); + %obj.reCloak = ""; + } + + // if pack is not on then dont bother... + if(%obj.getImageState($BackpackSlot) $= "activate") + messageClient(%obj.client, 'MsgCloakingPackOff', '\c2Cloaking pack off.'); + + %obj.setCloaked(false); + %obj.setImageTrigger(%slot, false); +} + +function CloakingPack::onPickup(%this, %obj, %shape, %amount) +{ + // created to prevent console errors +} + +function ShapeBaseData::onForceUncloak(%this, %obj, %reason) +{ + // dummy +} + +function Armor::onForceUncloak(%this, %obj, %reason) +{ + %pack = %obj.getMountedImage($BackpackSlot); + if((%pack <= 0) || (%pack.item !$= "CloakingPack")) + return; + + if(%obj.getImageState($BackpackSlot) $= "activate") + { + // cancel recloak thread + if(%obj.reCloak !$= "") + { + Cancel(%obj.reCloak); + %obj.reCloak = ""; + } + + messageClient(%obj.client, 'MsgCloakingPackOff', '\c2Cloaking pack off. Jammed.'); + %obj.setCloaked(false); + %obj.setImageTrigger($BackpackSlot, false); + } +} \ No newline at end of file diff --git a/base/scripts/packs/energypack.cs b/base/scripts/packs/energypack.cs new file mode 100644 index 0000000..8ecd0ea --- /dev/null +++ b/base/scripts/packs/energypack.cs @@ -0,0 +1,51 @@ +// ------------------------------------------------------------------ +// ENERGY PACK +// can be used by any armor type +// does not have to be activated +// increases the user's energy recharge rate + +datablock ShapeBaseImageData(EnergyPackImage) +{ + shapeFile = "pack_upgrade_energy.dts"; + item = EnergyPack; + mountPoint = 1; + offset = "0 0 0"; + rechargeRateBoost = 0.15; + + stateName[0] = "default"; + stateSequence[0] = "activation"; +}; + +datablock ItemData(EnergyPack) +{ + className = Pack; + catagory = "Packs"; + shapeFile = "pack_upgrade_energy.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + rotate = true; + image = "EnergyPackImage"; + pickUpName = "an energy pack"; + + computeCRC = true; + +}; + +function EnergyPackImage::onMount(%data, %obj, %node) +{ + %obj.setRechargeRate(%obj.getRechargeRate() + %data.rechargeRateBoost); + %obj.hasEnergyPack = true; // set for sniper check +} + +function EnergyPackImage::onUnmount(%data, %obj, %node) +{ + %obj.setRechargeRate(%obj.getRechargeRate() - %data.rechargeRateBoost); + %obj.hasEnergyPack = ""; +} + +function EnergyPack::onPickup(%this, %obj, %shape, %amount) +{ + // created to prevent console errors +} \ No newline at end of file diff --git a/base/scripts/packs/missilebarrelPack.cs b/base/scripts/packs/missilebarrelPack.cs new file mode 100644 index 0000000..eb31474 --- /dev/null +++ b/base/scripts/packs/missilebarrelPack.cs @@ -0,0 +1,65 @@ +//-------------------------------------------------------------------------- +// +// +// +//-------------------------------------------------------------------------- + +datablock ShapeBaseImageData(MissileBarrelPackImage) +{ + mass = 15; + + className = TurretPack; + + shapeFile = "pack_barrel_missile.dts"; + item = MissileBarrelPack; + mountPoint = 1; + offset = "0 0 0"; + turretBarrel = "MissileBarrelLarge"; + + stateName[0] = "Idle"; + stateTransitionOnTriggerDown[0] = "Activate"; + + stateName[1] = "Activate"; + stateScript[1] = "onActivate"; + stateTransitionOnTriggerUp[1] = "Deactivate"; + + stateName[2] = "Deactivate"; + stateScript[2] = "onDeactivate"; + stateTransitionOnTimeOut[2] = "Idle"; + + isLarge = true; +}; + +datablock ItemData(MissileBarrelPack) +{ + className = Pack; + catagory = "Packs"; + shapeFile = "pack_barrel_missile.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + rotate = true; + image = "MissileBarrelPackImage"; + pickUpName = "a missile barrel pack"; + + computeCRC = true; + +}; + +//MissileBarrelPackImage.turretBarrel = "MissileBarrelLarge"; + +function MissileBarrelPackImage::onActivate(%data, %obj, %slot) +{ + checkTurretMount(%data, %obj, %slot); +} + +function MissileBarrelPackImage::onDeactivate(%data, %obj, %slot) +{ + %obj.setImageTrigger($BackpackSlot, false); +} + +function MissileBarrelPack::onPickup(%this, %obj, %shape, %amount) +{ + // created to prevent console errors +} \ No newline at end of file diff --git a/base/scripts/packs/mortarBarrelPack.cs b/base/scripts/packs/mortarBarrelPack.cs new file mode 100644 index 0000000..c3cc6bc --- /dev/null +++ b/base/scripts/packs/mortarBarrelPack.cs @@ -0,0 +1,63 @@ +//-------------------------------------------------------------------------- +// +// +// +//-------------------------------------------------------------------------- + +datablock ShapeBaseImageData(MortarBarrelPackImage) +{ + mass = 15; + + className = TurretPack; + + shapeFile = "pack_barrel_mortar.dts"; + item = MortarBarrelPack; + mountPoint = 1; + offset = "0 0 0"; + turretBarrel = "MortarBarrelLarge"; + + stateName[0] = "Idle"; + stateTransitionOnTriggerDown[0] = "Activate"; + + stateName[1] = "Activate"; + stateScript[1] = "onActivate"; + stateTransitionOnTriggerUp[1] = "Deactivate"; + + stateName[2] = "Deactivate"; + stateScript[2] = "onDeactivate"; + stateTransitionOnTimeOut[2] = "Idle"; + + isLarge = true; +}; + +datablock ItemData(MortarBarrelPack) +{ + className = Pack; + catagory = "Packs"; + shapeFile = "pack_barrel_mortar.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + rotate = true; + image = "MortarBarrelPackImage"; + pickUpName = "a mortar barrel pack"; + + computeCRC = true; + +}; + +function MortarBarrelPackImage::onActivate(%data, %obj, %slot) +{ + checkTurretMount(%data, %obj, %slot); +} + +function MortarBarrelPackImage::onDeactivate(%data, %obj, %slot) +{ + %obj.setImageTrigger($BackpackSlot, false); +} + +function MortarBarrelPack::onPickup(%this, %obj, %shape, %amount) +{ + // created to prevent console errors +} \ No newline at end of file diff --git a/base/scripts/packs/plasmabarrelPack.cs b/base/scripts/packs/plasmabarrelPack.cs new file mode 100644 index 0000000..e8ced69 --- /dev/null +++ b/base/scripts/packs/plasmabarrelPack.cs @@ -0,0 +1,61 @@ +//-------------------------------------------------------------------------- +// +// Plasma barrel pack +// +//-------------------------------------------------------------------------- + +datablock ShapeBaseImageData(PlasmaBarrelPackImage) +{ + mass = 15; + + shapeFile = "pack_barrel_fusion.dts"; + item = PlasmaBarrelPack; + mountPoint = 1; + offset = "0 0 0"; + turretBarrel = "PlasmaBarrelLarge"; + + stateName[0] = "Idle"; + stateTransitionOnTriggerDown[0] = "Activate"; + + stateName[1] = "Activate"; + stateScript[1] = "onActivate"; + stateTransitionOnTriggerUp[1] = "Deactivate"; + + stateName[2] = "Deactivate"; + stateScript[2] = "onDeactivate"; + stateTransitionOnTimeOut[2] = "Idle"; + + isLarge = true; +}; + +datablock ItemData(PlasmaBarrelPack) +{ + className = Pack; + catagory = "Packs"; + shapeFile = "pack_barrel_fusion.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + rotate = true; + image = "PlasmaBarrelPackImage"; + pickUpName = "a plasma barrel pack"; + + computeCRC = true; + +}; + +function PlasmaBarrelPackImage::onActivate(%data, %obj, %slot) +{ + checkTurretMount(%data, %obj, %slot); +} + +function PlasmaBarrelPackImage::onDeactivate(%data, %obj, %slot) +{ + %obj.setImageTrigger($BackpackSlot, false); +} + +function PlasmaBarrelPack::onPickup(%this, %obj, %shape, %amount) +{ + // created to prevent console errors +} \ No newline at end of file diff --git a/base/scripts/packs/repairpack.cs b/base/scripts/packs/repairpack.cs new file mode 100644 index 0000000..5415df2 --- /dev/null +++ b/base/scripts/packs/repairpack.cs @@ -0,0 +1,591 @@ +//-------------------------------------------------------------------------- +// Repair Pack +// can be used by any armor type +// when activated, gives user a "repair gun" that can be used to +// repair a damaged object or player. If there is no target in +// range for the repair gun, the user is repaired. + +//-------------------------------------------------------------------------- +// Sounds + +datablock AudioProfile(RepairPackActivateSound) +{ + filename = "fx/packs/packs.repairPackOn.wav"; + description = AudioClosest3d; + preload = true; +}; + +datablock AudioProfile(RepairPackFireSound) +{ + filename = "fx/packs/repair_use.wav"; + description = CloseLooping3d; + preload = true; +}; + +//-------------------------------------------------------------------------- +// Projectile + +datablock RepairProjectileData(DefaultRepairBeam) +{ + sound = RepairPackFireSound; + + beamRange = 10; + beamWidth = 0.15; + numSegments = 20; + texRepeat = 0.20; + blurFreq = 10.0; + blurLifetime = 1.0; + cutoffAngle = 25.0; + + textures[0] = "special/redbump2"; + textures[1] = "special/redflare"; + +}; + + +//------------------------------------------------------------------------- +// shapebase datablocks + +datablock ShapeBaseImageData(RepairPackImage) +{ + shapeFile = "pack_upgrade_repair.dts"; + item = RepairPack; + mountPoint = 1; + offset = "0 0 0"; + emap = true; + + gun = RepairGunImage; + + stateName[0] = "Idle"; + stateTransitionOnTriggerDown[0] = "Activate"; + + stateName[1] = "Activate"; + stateScript[1] = "onActivate"; + stateSequence[1] = "fire"; + stateSound[1] = RepairPackActivateSound; + stateTransitionOnTriggerUp[1] = "Deactivate"; + + stateName[2] = "Deactivate"; + stateScript[2] = "onDeactivate"; + stateTransitionOnTimeout[2] = "Idle"; +}; + +datablock ItemData(RepairPack) +{ + className = Pack; + catagory = "Packs"; + shapeFile = "pack_upgrade_repair.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + rotate = true; + image = "RepairPackImage"; + pickUpName = "a repair pack"; + + computeCRC = true; + emap = true; +}; + +//-------------------------------------------------------------------------- +// Repair Gun + +datablock ShapeBaseImageData(RepairGunImage) +{ + shapeFile = "weapon_repair.dts"; + offset = "0 0 0"; + + usesEnergy = true; + minEnergy = 3; + cutOffEnergy = 3.1; + emap = true; + + repairFactorPlayer = 0.002; // <--- attention DaveG! + repairFactorObject = 0.004; // <--- attention DaveG! + + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.25; + + stateName[1] = "ActivateReady"; + stateScript[1] = "onActivateReady"; + stateSpinThread[1] = Stop; + stateTransitionOnAmmo[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "ActivateReady"; + + stateName[2] = "Ready"; + stateSpinThread[2] = Stop; + stateTransitionOnNoAmmo[2] = "Deactivate"; + stateTransitionOnTriggerDown[2] = "Validate"; + + stateName[3] = "Validate"; + stateTransitionOnTimeout[3] = "Validate"; + stateTimeoutValue[3] = 0.2; + stateEnergyDrain[3] = 3; + stateSpinThread[3] = SpinUp; + stateScript[3] = "onValidate"; + stateIgnoreLoadedForReady[3] = true; + stateTransitionOnLoaded[3] = "Repair"; + stateTransitionOnNoAmmo[3] = "Deactivate"; + stateTransitionOnTriggerUp[3] = "Deactivate"; + + stateName[4] = "Repair"; + stateSound[4] = RepairPackFireSound; + stateScript[4] = "onRepair"; + stateSpinThread[4] = FullSpeed; + stateAllowImageChange[4] = false; + stateSequence[4] = "activate"; + stateFire[4] = true; + stateEnergyDrain[4] = 9; + stateTimeoutValue[4] = 0.2; + stateTransitionOnTimeOut[4] = "Repair"; + stateTransitionOnNoAmmo[4] = "Deactivate"; + stateTransitionOnTriggerUp[4] = "Deactivate"; + stateTransitionOnNotLoaded[4] = "Validate"; + + stateName[5] = "Deactivate"; + stateScript[5] = "onDeactivate"; + stateSpinThread[5] = SpinDown; + stateSequence[5] = "activate"; + stateDirection[5] = false; + stateTimeoutValue[5] = 0.2; + stateTransitionOnTimeout[5] = "ActivateReady"; +}; + +function RepairPackImage::onUnmount(%data, %obj, %node) +{ + // dismount the repair gun if the player had it mounted + // need the extra "if" statement to avoid a console error message + if(%obj.getMountedImage($WeaponSlot)) + if(%obj.getMountedImage($WeaponSlot).getName() $= "RepairGunImage") + %obj.unmountImage($WeaponSlot); + // if the player was repairing something when the pack was thrown, stop repairing it + if(%obj.repairing != 0) + stopRepairing(%obj); +} + +function RepairPackImage::onActivate(%data, %obj, %slot) +{ + // don't activate the pack if player is piloting a vehicle + if(%obj.isPilot()) + { + %obj.setImageTrigger(%slot, false); + return; + } + + if(%obj.getMountedImage($WeaponSlot).getName() !$= "RepairGunImage") + { + messageClient(%obj.client, 'MsgRepairPackOn', '\c2Repair pack activated.'); + + // unmount any weapon the player may have been holding + if(%obj.getMountedImage($WeaponSlot)) + %obj.unmountImage($WeaponSlot); + + // make sure player's arm thread is "look" + %obj.setArmThread(look); + + // mount the repair gun + %obj.mountImage(RepairGunImage, $WeaponSlot); + // clientCmdsetRepairReticle found in hud.cs + commandToClient(%obj.client, 'setRepairReticle'); + } +} + +function RepairPackImage::onDeactivate(%data, %obj, %slot) +{ + //called when the player hits the "pack" key again (toggle) + %obj.setImageTrigger(%slot, false); + // if repair gun was mounted, unmount it + if(%obj.getMountedImage($WeaponSlot).getName() $= "RepairGunImage") + %obj.unmountImage($WeaponSlot); +} + +function RepairGunImage::onMount(%this,%obj,%slot) +{ + %obj.setImageAmmo(%slot,true); +} + +function RepairGunImage::onUnmount(%this,%obj,%slot) +{ + // called when player switches to another weapon + + // stop repairing whatever player was repairing + if(%obj.repairing) + stopRepairing(%obj); + + %obj.setImageTrigger(%slot, false); + // "turn off" the repair pack -- player needs to hit the "pack" key to + // activate the repair gun again + %obj.setImageTrigger($BackpackSlot, false); +} + +function RepairGunImage::onActivateReady(%this,%obj,%slot) +{ + %obj.errMsgSent = false; + %obj.selfRepairing = false; + %obj.repairing = 0; + %obj.setImageLoaded(%slot, false); +} + +function RepairGunImage::onValidate(%this,%obj,%slot) +{ + // this = repairgunimage datablock + // obj = player wielding the repair gun + // slot = weapon slot + + if(%obj.getEnergyLevel() <= %this.cutOffEnergy) + { + stopRepairing(%obj); + return; + } + %repGun = %obj.getMountedImage(%slot); + // muzVec is the vector coming from the repair gun's "muzzle" + %muzVec = %obj.getMuzzleVector(%slot); + // muzNVec = normalized muzVec + %muzNVec = VectorNormalize(%muzVec); + %repairRange = DefaultRepairBeam.beamRange; + // scale muzNVec to the range the repair beam can reach + %muzScaled = VectorScale(%muzNVec, %repairRange); + // muzPoint = the actual point of the gun's "muzzle" + %muzPoint = %obj.getMuzzlePoint(%slot); + // rangeEnd = muzzle point + length of beam + %rangeEnd = VectorAdd(%muzPoint, %muzScaled); + // search for just about anything that can be damaged as well as interiors + %searchMasks = $TypeMasks::PlayerObjectType | $TypeMasks::VehicleObjectType | + $TypeMasks::StaticShapeObjectType | $TypeMasks::TurretObjectType | $TypeMasks::InteriorObjectType; + // search for objects within the beam's range that fit the masks above + %scanTarg = ContainerRayCast(%muzPoint, %rangeEnd, %searchMasks, %obj); + // screen out interiors + if(%scanTarg && !(%scanTarg.getType() & $TypeMasks::InteriorObjectType)) + { + // a target in range was found + %repTgt = firstWord(%scanTarg); + // is the prospective target damaged? + if(%repTgt.getDamageLevel()) + { + // yes, it's damaged + if(%repTgt != %obj.repairing) + { + if(isObject(%obj.repairing)) + stopRepairing(%obj); + + %obj.repairing = %repTgt; + } + // setting imageLoaded to true sends us to repair state (function onRepair) + %obj.setImageLoaded(%slot, true); + } + else + { + // there is a target in range, but it's not damaged + if(!%obj.errMsgSent) + { + // if the target isn't damaged, send a message to that effect only once + messageClient(%obj.client, 'MsgRepairPackNotDamaged', '\c2Target is not damaged.', %repTgt); + %obj.errMsgSent = true; + } + // if player was repairing something, stop the repairs -- we're done + if(%obj.repairing) + stopRepairing(%obj); + } + } + + //AI hack - too many things influence the aiming, so I'm going to force the repair object for bots only + else if (%obj.client.isAIControlled() && isObject(%obj.client.repairObject)) + { + %repTgt = %obj.client.repairObject; + %repPoint = %repTgt.getAIRepairPoint(); + if (%repPoint $= "0 0 0") + %repPoint = %repTgt.getWorldBoxCenter(); + %repTgtVector = VectorNormalize(VectorSub(%muzPoint, %repPoint)); + %aimVector = VectorNormalize(VectorSub(%muzPoint, %rangeEnd)); + + //if the dot product is very close (ie. we're aiming in the right direction) + if (VectorDot(%repTgtVector, %aimVector) > 0.85) + { + //do an LOS to make sure nothing is in the way... + %scanTarg = ContainerRayCast(%muzPoint, %repPoint, %searchMasks, %obj); + if (firstWord(%scanTarg) == %repTgt) + { + // yes, it's damaged + + if(isObject(%obj.repairing)) + stopRepairing(%obj); + + %obj.repairing = %repTgt; + // setting imageLoaded to true sends us to repair state (function onRepair) + %obj.setImageLoaded(%slot, true); + } + } + } + else if(%obj.getDamageLevel()) + { + // there is no target in range, but the player is damaged + // check to see if we were repairing something before -- if so, stop repairing old target + if(%obj.repairing != 0) + if(%obj.repairing != %obj) + stopRepairing(%obj); + if(isObject(%obj.repairing)) + stopRepairing(%obj); + + %obj.repairing = %obj; + // quick, to onRepair! + %obj.setImageLoaded(%slot, true); + } + else + { + // there is no target in range, and the player isn't damaged + if(!%obj.errMsgSent) + { + // send an error message only once + messageClient(%obj.client, 'MsgRepairPackNoTarget', '\c2No target to repair.'); + %obj.errMsgSent = true; + } + stopRepairing(%obj); + } +} + +function RepairGunImage::onRepair(%this,%obj,%slot) +{ + // this = repairgunimage datablock + // obj = player wielding the repair gun + // slot = weapon slot + + if(%obj.getEnergyLevel() <= %this.cutOffEnergy) + { + stopRepairing(%obj); + return; + } + // reset the flag that indicates an error message has been sent + %obj.errMsgSent = false; + %target = %obj.repairing; + if(!%target) + { + // no target -- whoops! never mind + stopRepairing(%obj); + } + else + { + %target.repairedBy = %obj.client; //keep track of who last repaired this item + if(%obj.repairing == %obj) + { + // player is self-repairing + if(%obj.getDamageLevel()) + { + if(!%obj.selfRepairing) + { + // no need for a projectile, just send a message and up the repair rate + messageClient(%obj.client, 'MsgRepairPackPlayerSelfRepair', '\c2Repairing self.'); + %obj.selfRepairing = true; + startRepairing(%obj, true); + } + } + else + { + messageClient(%obj.client, 'MsgRepairPackSelfDone', '\c2Repairs completed on self.'); + stopRepairing(%obj); + %obj.errMsgSent = true; + } + } + else + { + // make sure we still have a target -- more vector fun!!! + %muzVec = %obj.getMuzzleVector(%slot); + %muzNVec = VectorNormalize(%muzVec); + %repairRange = DefaultRepairBeam.beamRange; + %muzScaled = VectorScale(%muzNVec, %repairRange); + %muzPoint = %obj.getMuzzlePoint(%slot); + %rangeEnd = VectorAdd(%muzPoint, %muzScaled); + + %searchMasks = $TypeMasks::PlayerObjectType | $TypeMasks::VehicleObjectType | + $TypeMasks::StaticShapeObjectType | $TypeMasks::TurretObjectType; + + //AI hack to help "fudge" the repairing stuff... + if (%obj.client.isAIControlled() && isObject(%obj.client.repairObject) && %obj.client.repairObject == %obj.repairing) + { + %repTgt = %obj.client.repairObject; + %repPoint = %repTgt.getAIRepairPoint(); + if (%repPoint $= "0 0 0") + %repPoint = %repTgt.getWorldBoxCenter(); + %repTgtVector = VectorNormalize(VectorSub(%muzPoint, %repPoint)); + %aimVector = VectorNormalize(VectorSub(%muzPoint, %rangeEnd)); + + //if the dot product is very close (ie. we're aiming in the right direction) + if (VectorDot(%repTgtVector, %aimVector) > 0.85) + %scanTarg = ContainerRayCast(%muzPoint, %repPoint, %searchMasks, %obj); + } + else + %scanTarg = ContainerRayCast(%muzPoint, %rangeEnd, %searchMasks, %obj); + + if(%scanTarg) + { + // there's still a target out there + %repTgt = firstWord(%scanTarg); + // is the target damaged? + if(%repTgt.getDamageLevel()) + { + if(%repTgt != %obj.repairing) + { + // the target is not the same as the one we were just repairing + // stop repairing old target, start repairing new target + stopRepairing(%obj); + if(isObject(%obj.repairing)) + stopRepairing(%obj); + + %obj.repairing = %repTgt; + // extract the name of what player is repairing based on what it is + // if it's a player, it's the player's name (duh) + // if it's an object, look for a nametag + // if object has no nametag, just say what it is (e.g. generatorLarge) + if(%repTgt.getClassName() $= Player) + %tgtName = getTaggedString(%repTgt.client.name); + else if(%repTgt.getGameName() !$= "") + %tgtName = %repTgt.getGameName(); + else + %tgtName = %repTgt.getDatablock().getName(); + messageClient(%obj.client, 'MsgRepairPackRepairingObj', '\c2Repairing %1.', %tgtName, %repTgt); + startRepairing(%obj, false); + } + else + { + // it's the same target as last time + // changed to fix "2 players can't repair same object" bug + if(%obj.repairProjectile == 0) + { + if(%repTgt.getClassName() $= Player) + %tgtName = getTaggedString(%repTgt.client.name); + else if(%repTgt.getGameName() !$= "") + %tgtName = %repTgt.getGameName(); + else + %tgtName = %repTgt.getDatablock().getName(); + messageClient(%obj.client, 'MsgRepairPackRepairingObj', '\c2Repairing %1.', %tgtName, %repTgt); + startRepairing(%obj, false); + } + } + } + else + { + %rateOfRepair = %this.repairFactorObject; + if(%repTgt.getClassName() $= Player) + { + %tgtName = getTaggedString(%repTgt.client.name); + %rateOfRepair = %this.repairFactorPlayer; + } + else if(%repTgt.getGameName() !$= "") + %tgtName = %repTgt.getGameName(); + else + %tgtName = %repTgt.getDatablock().getName(); + if(%repTgt != %obj.repairing) + { + // it isn't the same object we were repairing previously + messageClient(%obj.client, 'MsgRepairPackNotDamaged', '\c2%1 is not damaged.', %tgtName); + } + else + { + // same target, but not damaged -- we must be done + messageClient(%obj.client, 'MsgRepairPackDone', '\c2Repairs completed.'); + Game.objectRepaired(%repTgt, %tgtName); + } + %obj.errMsgSent = true; + stopRepairing(%obj); + } + } + else + { + // whoops, we lost our target + messageClient(%obj.client, 'MsgRepairPackLostTarget', '\c2Repair target no longer in range.'); + stopRepairing(%obj); + } + } + } +} + +function RepairGunImage::onDeactivate(%this,%obj,%slot) +{ + stopRepairing(%obj); +} + +function stopRepairing(%player) +{ + // %player = the player who was using the repair pack + + if(%player.selfRepairing) + { + // there is no projectile for self-repairing + %player.setRepairRate(%player.getRepairRate() - %player.repairingRate); + %player.selfRepairing = false; + } + else if(%player.repairing > 0) + { + // player was repairing something else + //if(%player.repairing.beingRepaired > 0) + //{ + // don't decrement this stuff if it's already at 0 -- though it shouldn't be + //%player.repairing.beingRepaired--; + %player.repairing.setRepairRate(%player.repairing.getRepairRate() - %player.repairingRate); + //} + if(%player.repairProjectile > 0) + { + // is there a repair projectile? delete it + %player.repairProjectile.delete(); + %player.repairProjectile = 0; + } + } + %player.repairing = 0; + %player.repairingRate = 0; + %player.setImageTrigger($WeaponSlot, false); + %player.setImageLoaded($WeaponSlot, false); +} + +function startRepairing(%player, %self) +{ + // %player = the player who was using the repair pack + // %self = boolean -- is player repairing him/herself? + + if(%self) + { + // one repair, hold the projectile + %player.setRepairRate(%player.getRepairRate() + RepairGunImage.repairFactorPlayer); + %player.selfRepairing = true; + %player.repairingRate = RepairGunImage.repairFactorPlayer; + } + else + { + //if(%player.repairing.beingRepaired $= "") + // %player.repairing.beingRepaired = 1; + //else + // %player.repairing.beingRepaired++; + + //AI hack... + if (%player.client.isAIControlled() && %player.client.repairObject == %player.repairing) + { + %initialPosition = %player.getMuzzlePoint($WeaponSlot); + %initialDirection = VectorSub(%initialPosition, %player.repairing.getWorldBoxCenter()); + } + else + { + %initialDirection = %player.getMuzzleVector($WeaponSlot); + %initialPosition = %player.getMuzzlePoint($WeaponSlot); + } + if(%player.repairing.getClassName() $= Player) + %repRate = RepairGunImage.repairFactorPlayer; + else + %repRate = RepairGunImage.repairFactorObject; + %player.repairing.setRepairRate(%player.repairing.getRepairRate() + %repRate); + + %player.repairingRate = %repRate; + %player.repairProjectile = new RepairProjectile() { + dataBlock = DefaultRepairBeam; + initialDirection = %initialDirection; + initialPosition = %initialPosition; + sourceObject = %player; + sourceSlot = $WeaponSlot; + targetObject = %player.repairing; + }; + MissionCleanup.add(%player.repairProjectile); + } +} + +function RepairPack::onPickup(%this, %obj, %shape, %amount) +{ + // created to prevent console errors +} \ No newline at end of file diff --git a/base/scripts/packs/satchelCharge.cs b/base/scripts/packs/satchelCharge.cs new file mode 100644 index 0000000..03338fb --- /dev/null +++ b/base/scripts/packs/satchelCharge.cs @@ -0,0 +1,450 @@ +//-------------------------------------------------------------------------- +// Satchel Charge pack +// can be used by any armor type +// when activated, throws the pack -- when activated again (before +// picking up another pack), detonates with a BIG explosion. + +//-------------------------------------------------------------------------- +// Sounds + +datablock AudioProfile(SatchelChargeActivateSound) +{ + filename = "fx/packs/satchel_pack_activate.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(SatchelChargeExplosionSound) +{ + filename = "fx/packs/satchel_pack_detonate.wav"; + description = AudioBIGExplosion3d; + preload = true; +}; + + +//---------------------------------------------------------------------------- +// Satchel Debris +//---------------------------------------------------------------------------- +datablock ParticleData( SDebrisSmokeParticle ) +{ + dragCoeffiecient = 1.0; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + + lifetimeMS = 1000; + lifetimeVarianceMS = 100; + + textureName = "particleTest"; + + useInvAlpha = true; + + spinRandomMin = -60.0; + spinRandomMax = 60.0; + + colors[0] = "0.4 0.4 0.4 1.0"; + colors[1] = "0.3 0.3 0.3 0.5"; + colors[2] = "0.0 0.0 0.0 0.0"; + sizes[0] = 0.0; + sizes[1] = 2.0; + sizes[2] = 3.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData( SDebrisSmokeEmitter ) +{ + ejectionPeriodMS = 7; + periodVarianceMS = 1; + + ejectionVelocity = 1.0; // A little oomph at the back end + velocityVariance = 0.2; + + thetaMin = 0.0; + thetaMax = 40.0; + + particles = "SDebrisSmokeParticle"; +}; + + +datablock DebrisData( SatchelDebris ) +{ + emitters[0] = SDebrisSmokeEmitter; + + explodeOnMaxBounce = true; + + elasticity = 0.4; + friction = 0.2; + + lifetime = 0.3; + lifetimeVariance = 0.02; +}; + +//-------------------------------------------------------------------------- +// Satchel Explosion Particle effects +//-------------------------------------- +datablock ParticleData(SatchelExplosionSmoke) +{ + dragCoeffiecient = 0.4; + gravityCoefficient = -0.0; // rises slowly + inheritedVelFactor = 0.025; + + lifetimeMS = 2000; + lifetimeVarianceMS = 0; + + textureName = "particleTest"; + + useInvAlpha = true; + spinRandomMin = -200.0; + spinRandomMax = 200.0; + + textureName = "special/Smoke/smoke_001"; + + colors[0] = "1.0 0.7 0.0 1.0"; + colors[1] = "0.2 0.2 0.2 0.5"; + colors[2] = "0.0 0.0 0.0 0.0"; + sizes[0] = 7.0; + sizes[1] = 17.0; + sizes[2] = 2.0; + times[0] = 0.0; + times[1] = 0.4; + times[2] = 1.0; + +}; + +datablock ParticleEmitterData(SatchelExplosionSmokeEmitter) +{ + ejectionPeriodMS = 10; + periodVarianceMS = 0; + + ejectionVelocity = 14.25; + velocityVariance = 2.25; + + thetaMin = 0.0; + thetaMax = 180.0; + + lifetimeMS = 200; + + particles = "SatchelExplosionSmoke"; +}; + + + +datablock ParticleData(SatchelSparks) +{ + dragCoefficient = 1; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + constantAcceleration = 0.0; + lifetimeMS = 500; + lifetimeVarianceMS = 150; + textureName = "special/bigSpark"; + colors[0] = "0.56 0.36 0.26 1.0"; + colors[1] = "0.56 0.36 0.26 1.0"; + colors[2] = "1.0 0.36 0.26 0.0"; + sizes[0] = 0.5; + sizes[1] = 0.5; + sizes[2] = 0.75; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + +}; + +datablock ParticleEmitterData(SatchelSparksEmitter) +{ + ejectionPeriodMS = 1; + periodVarianceMS = 0; + ejectionVelocity = 40; + velocityVariance = 20.0; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 180; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 200; + particles = "SatchelSparks"; +}; + + + +//--------------------------------------------------------------------------- +// Explosion +//--------------------------------------------------------------------------- + +datablock ExplosionData(SatchelSubExplosion) +{ + explosionShape = "disc_explosion.dts"; + faceViewer = true; + explosionScale = "0.5 0.5 0.5"; + + debris = SatchelDebris; + debrisThetaMin = 10; + debrisThetaMax = 80; + debrisNum = 8; + debrisVelocity = 60.0; + debrisVelocityVariance = 15.0; + + lifetimeMS = 1000; + delayMS = 0; + + emitter[0] = SatchelExplosionSmokeEmitter; + emitter[1] = SatchelSparksEmitter; + + offset = 0.0; + + playSpeed = 1.5; + + sizes[0] = "1.5 1.5 1.5"; + sizes[1] = "3.0 3.0 3.0"; + times[0] = 0.0; + times[1] = 1.0; +}; + +datablock ExplosionData(SatchelSubExplosion2) +{ + explosionShape = "disc_explosion.dts"; + faceViewer = true; + explosionScale = "0.7 0.7 0.7"; + + debris = SatchelDebris; + debrisThetaMin = 10; + debrisThetaMax = 170; + debrisNum = 8; + debrisVelocity = 60.0; + debrisVelocityVariance = 15.0; + + lifetimeMS = 1000; + delayMS = 50; + + emitter[0] = SatchelExplosionSmokeEmitter; + emitter[1] = SatchelSparksEmitter; + + offset = 9.0; + + playSpeed = 1.5; + + sizes[0] = "1.5 1.5 1.5"; + sizes[1] = "1.5 1.5 1.5"; + times[0] = 0.0; + times[1] = 1.0; +}; + +datablock ExplosionData(SatchelSubExplosion3) +{ + explosionShape = "disc_explosion.dts"; + faceViewer = true; + explosionScale = "1.0 1.0 1.0"; + + debris = SatchelDebris; + debrisThetaMin = 10; + debrisThetaMax = 170; + debrisNum = 8; + debrisVelocity = 60.0; + debrisVelocityVariance = 15.0; + + lifetimeMS = 2000; + delayMS = 100; + + emitter[0] = SatchelExplosionSmokeEmitter; + emitter[1] = SatchelSparksEmitter; + + offset = 9.0; + + playSpeed = 2.5; + + sizes[0] = "1.0 1.0 1.0"; + sizes[1] = "1.0 1.0 1.0"; + times[0] = 0.0; + times[1] = 1.0; +}; + +datablock ExplosionData(SatchelMainExplosion) +{ + subExplosion[0] = SatchelSubExplosion; + subExplosion[1] = SatchelSubExplosion2; + subExplosion[2] = SatchelSubExplosion3; +}; + + + +//-------------------------------------------------------------------------- +// Projectile + +//------------------------------------------------------------------------- +// shapebase datablocks +datablock ShapeBaseImageData(SatchelChargeImage) +{ + shapeFile = "pack_upgrade_satchel.dts"; + item = SatchelCharge; + mountPoint = 1; + offset = "0 0 0"; + emap = true; +}; + +datablock ItemData(SatchelCharge) +{ + className = Pack; + catagory = "Packs"; + image = SatchelChargeImage; + shapeFile = "pack_upgrade_satchel.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + rotate = true; + pickUpName = "a satchel charge pack"; + + computeCRC = true; +}; + +datablock ItemData(SatchelChargeThrown) +{ + shapeFile = "pack_upgrade_satchel.dts"; + explosion = SatchelMainExplosion; + mass = 1.2; + elasticity = 0.1; + friction = 0.9; + rotate = false; + pickupRadius = 0; + noTimeout = true; + armDelay = 3000; + maxDamage = 0.6; + + kickBackStrength = 4000; + + computeCRC = true; +}; + +//-------------------------------------------------------------------------- + +function SatchelCharge::onUse(%this, %obj) +{ + %item = new Item() { + dataBlock = SatchelChargeThrown; + rotation = "0 0 1 " @ (getRandom() * 360); + }; + MissionCleanup.add(%item); + // take pack out of inventory and unmount image + %obj.decInventory(SatchelCharge, 1); + %obj.throwObject(%item); + //error("throwing satchel charge #" @ %item); + %obj.thrownChargeId = %item; + %item.sourceObject = %obj; + %item.armed = false; + %item.damaged = 0.0; + %item.thwart = false; + // arm itself 3 seconds after being thrown + schedule(%item.getDatablock().armDelay, %item, "armSatchelCharge", %item); + messageClient(%obj.client, 'MsgSatchelChargePlaced', "\c2Satchel charge deployed."); +} + +function armSatchelCharge(%satchel) +{ + //error("satchel charge #" @ %satchel @ " armed!"); + %satchel.armed = true; + // "deet deet deet" sound + %satchel.playAudio(1, SatchelChargeActivateSound); + // also need to play "antenna extending" animation + %satchel.playThread(0, "deploy"); + %satchel.playThread(1, "activate"); +} + +function detonateSatchelCharge(%player) +{ + %satchelCharge = %player.thrownChargeId; + // can't detonate the satchel charge if it isn't armed + if(!%satchelCharge.armed) + return; + + //error("Detonating satchel charge #" @ %satchelCharge @ " for player #" @ %player); + + if(%satchelCharge.getDamageState() !$= Destroyed) + %satchelCharge.setDamageState(Destroyed); + + if(isObject(%player)) + %player.thrownChargeId = 0; +} + +function SatchelChargeThrown::onEnterLiquid(%data, %obj, %coverage, %type) +{ + // lava types + if(%type >=4 && %type <= 6) + { + if(%obj.getDamageState() !$= "Destroyed") + { + %obj.armed = true; + detonateSatchelCharge(%obj.sourceObject); + return; + } + } + + // quickSand + if(%type == 7) + if(isObject(%obj.sourceObject)) + %obj.sourceObject.thrownChargeId = 0; + + Parent::onEnterLiquid(%data, %obj, %coverage, %type); +} + +function SatchelChargeImage::onMount(%data, %obj, %node) +{ + %obj.thrownChargeId = 0; +} + +function SatchelChargeImage::onUnmount(%data, %obj, %node) +{ +} + +function SatchelChargeThrown::onDestroyed(%this, %object, %lastState) +{ + if(%object.kaboom) + return; + else + { + %object.kaboom = true; + + // the "thwart" flag is set if the charge is destroyed with weapons rather + // than detonated. A less damaging explosion, but visually the same scale. + if(%object.thwart) + { + %dmgRadius = 10; + %dmgMod = 0.3; + %expImpulse = 1000; + } + else + { + messageClient(%object.sourceObject.client, 'msgSatchelChargeDetonate', "\c2Satchel Charge Detonated!"); + %dmgRadius = 20; + %dmgMod = 1.0; + %expImpulse = 2500; + } + + RadiusExplosion(%object, %object.getPosition(), %dmgRadius, %dmgMod, %expImpulse, %object.sourceObject, $DamageType::SatchelCharge); + + %object.schedule(500, "delete"); + } +} + +function SatchelChargeThrown::onCollision(%data,%obj,%col) +{ +} + +function SatchelChargeThrown::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType) +{ + %targetObject.damaged += %amount; + + if(%targetObject.damaged >= %targetObject.getDataBlock().maxDamage && + %satchelCharge.getDamageState() !$= Destroyed) + { + %targetObject.thwart = true; + %targetObject.setDamageState(Destroyed); + } +} + +function SatchelCharge::onPickup(%this, %obj, %shape, %amount) +{ + // created to prevent console errors +} \ No newline at end of file diff --git a/base/scripts/packs/sensorjammerpack.cs b/base/scripts/packs/sensorjammerpack.cs new file mode 100644 index 0000000..e0c122e --- /dev/null +++ b/base/scripts/packs/sensorjammerpack.cs @@ -0,0 +1,101 @@ +// ------------------------------------------------------------------ +// SENSOR JAMMER PACK +// +// When activated, the sensor jammer pack emits a sensor-jamming field of +// 20m radius. Any players within this field are completely invisible to +// all sensors, turrets and cameras. +// +// When not activated, the pack has no effect. +// + + +datablock AudioProfile(SensorJammerActivateSound) +{ + filename = "fx/packs/sensorjammerpack_on.wav"; + description = ClosestLooping3d; + preload = true; +}; + +datablock ShapeBaseImageData(SensorJammerPackImage) +{ + shapeFile = "pack_upgrade_sensorjammer.dts"; + item = SensorJammerPack; + mountPoint = 1; + offset = "0 0 0"; + + usesEnergy = true; + minEnergy = 3; + + stateName[0] = "Idle"; + stateTransitionOnTriggerDown[0] = "Activate"; + + stateName[1] = "Activate"; + stateScript[1] = "onActivate"; + stateSequence[1] = "fire"; + stateSound[1] = SensorJammerActivateSound; + stateEnergyDrain[1] = 10.5; + stateTransitionOnTriggerUp[1] = "Deactivate"; + stateTransitionOnNoAmmo[1] = "Deactivate"; + + stateName[2] = "Deactivate"; + stateScript[2] = "onDeactivate"; + stateTransitionOnTimeout[2] = "Idle"; +}; + +datablock ItemData(SensorJammerPack) +{ + className = Pack; + catagory = "Packs"; + shapeFile = "pack_upgrade_sensorjammer.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + rotate = true; + image = "SensorJammerPackImage"; + pickUpName = "a sensor jammer pack"; + + computeCRC = true; +}; + +datablock SensorData(JammerSensorObject) +{ + // same detection info as 'PlayerObject' sensorData + detects = true; + detectsUsingLOS = true; + detectsPassiveJammed = true; + detectRadius = 2000; + detectionPings = false; + detectsFOVOnly = true; + detectFOVPercent = 1.3; + useObjectFOV = true; + + jams = true; + jamsOnlyGroup = true; + jamsUsingLOS = true; + jamRadius = 30; +}; + +function SensorJammerPackImage::onUnmount(%data, %obj, %slot) +{ + setTargetSensorData(%obj.client.target, PlayerSensor); + %obj.setImageTrigger(%slot, false); +} + +function SensorJammerPackImage::onActivate(%data, %obj, %slot) +{ + messageClient(%obj.client, 'MsgSensorJammerPackOn', '\c2Sensor jammer pack on.'); + setTargetSensorData(%obj.client.target, JammerSensorObject); +} + +function SensorJammerPackImage::onDeactivate(%data, %obj, %slot) +{ + messageClient(%obj.client, 'MsgSensorJammerPackOff', '\c2Sensor jammer pack off.'); + setTargetSensorData(%obj.client.target, PlayerSensor); + %obj.setImageTrigger(%slot, false); +} + +function SensorJammerPack::onPickup(%this, %obj, %shape, %amount) +{ + // created to prevent console errors +} diff --git a/base/scripts/packs/shieldpack.cs b/base/scripts/packs/shieldpack.cs new file mode 100644 index 0000000..ae80f6c --- /dev/null +++ b/base/scripts/packs/shieldpack.cs @@ -0,0 +1,82 @@ +// ------------------------------------------------------------------ +// SHIELD PACK +// can be used by any armor type +// while activated, absorbs damage at cost of energy + +datablock AudioProfile(ShieldPackActivateSound) +{ + filename = "fx/packs/shield_on.wav"; + description = ClosestLooping3d; + preload = true; +}; + +datablock ShapeBaseImageData(ShieldPackImage) +{ + shapeFile = "pack_upgrade_shield.dts"; + item = ShieldPack; + mountPoint = 1; + offset = "0 0 0"; + + usesEnergy = true; + minEnergy = 3; + + stateName[0] = "Idle"; + stateTransitionOnTriggerDown[0] = "Activate"; + + stateName[1] = "Activate"; + stateScript[1] = "onActivate"; + stateSequence[1] = "fire"; + stateSound[1] = ShieldPackActivateSound; + stateEnergyDrain[1] = 9; + stateTransitionOnTriggerUp[1] = "Deactivate"; + stateTransitionOnNoAmmo[1] = "Deactivate"; + + stateName[2] = "Deactivate"; + stateScript[2] = "onDeactivate"; + stateTransitionOnTimeout[2] = "Idle"; +}; + +datablock ItemData(ShieldPack) +{ + className = Pack; + catagory = "Packs"; + shapeFile = "pack_upgrade_shield.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + rotate = true; + image = "ShieldPackImage"; + pickUpName = "a shield pack"; + + computeCRC = true; +}; + +function ShieldPackImage::onMount(%data, %obj, %node) +{ +} + +function ShieldPackImage::onUnmount(%data, %obj, %node) +{ + %obj.setImageTrigger(%node, false); + %obj.isShielded = ""; +} + +function ShieldPackImage::onActivate(%data, %obj, %slot) +{ + messageClient(%obj.client, 'MsgShieldPackOn', '\c2Shield pack on.'); + %obj.isShielded = true; +} + +function ShieldPackImage::onDeactivate(%data, %obj, %slot) +{ + messageClient(%obj.client, 'MsgShieldPackOff', '\c2Shield pack off.'); + %obj.setImageTrigger(%slot,false); + %obj.isShielded = ""; +} + +function ShieldPack::onPickup(%this, %obj, %shape, %amount) +{ + // created to prevent console errors +} + diff --git a/base/scripts/particleDummies.cs b/base/scripts/particleDummies.cs new file mode 100644 index 0000000..526407c --- /dev/null +++ b/base/scripts/particleDummies.cs @@ -0,0 +1,21 @@ +//-------------------------------------------------------------------------- +// +// +// +//-------------------------------------------------------------------------- + +datablock ParticleEmissionDummyData(defaultEmissionDummy) +{ + timeMultiple = 1.0; +}; + +datablock ParticleEmissionDummyData(halftimeEmissionDummy) +{ + timeMultiple = 0.5; +}; + +datablock ParticleEmissionDummyData(doubleTimeEmissionDummy) +{ + timeMultiple = 2.0; +}; + diff --git a/base/scripts/particleEmitter.cs b/base/scripts/particleEmitter.cs new file mode 100644 index 0000000..8e251ab --- /dev/null +++ b/base/scripts/particleEmitter.cs @@ -0,0 +1,114 @@ +//-------------------------------------------------------------------------- +// ParticleEmitter data: +// A note about the phiReferenceVel, it will only be useful in cases in +// which the axis of the emitter is not changed over the life of the emission +// i.e., a linear projectile say, or an explosion that sits in one place. A +// grenade, for instance, wouldn't necessarily give the desired result (though +// it might in certain cases). +// One more note: overrideAdvances should probably only be turned on for emitters +// that are attached to explosions. It prevents the emitter from advancing a particle +// to the boundary of the update it was created in. Its useful for explosion emitters, +// which fake a 1000 ms update, and never update again, since we sometimes want those +// particles to pop up with exactly the same position. On a projectile, it's likely +// to cause non-random looking particle "clumps" if there's a low frame rate condition +// on the client. +// +//-------------------------------------------------------------------------- + +//-------------------------------------------------------------------------- +//-------------------------------------- Particles +// +datablock ParticleData(DefaultParticle) +{ + dragCoefficient = 0.0; // Not affected by drag + gravityCoefficient = 0.0; // ...or gravity + windCoefficient = 1.0; + + inheritedVelFactor = 0.0; // Do not inherit emitters velocity + constantAcceleration = 0.0; // No constant accel along initial velocity + + lifetimeMS = 1000; // lasts 1 second + lifetimeVarianceMS = 0; // ...exactly + + textureName = "particleTest"; + + colors[0] = "1 1 1 1"; // All white, no blending + colors[1] = "1 1 1 1"; + colors[2] = "1 1 1 1"; + colors[3] = "1 1 1 1"; + + sizes[0] = 1; // One meter across + sizes[1] = 1; + sizes[2] = 1; + sizes[3] = 1; + + times[0] = 0.0; // Linear blend from color[0] to color[1] + times[1] = 1.0; // Note that times[0] is always 0 + times[2] = 2.0; // even when set in the data block. + times[3] = 2.0; +}; + +datablock ParticleData(FallingParticleRed) +{ + dragCoefficient = 1.5; + gravityCoefficient = 0.2; + + inheritedVelFactor = 0.2; + constantAcceleration = 0.0; + + lifetimeMS = 1250; + lifetimeVarianceMS = 0; + + textureName = "particleTest"; + + colors[0] = "0.46 0.36 0.26 1.0"; + colors[1] = "0.46 0.36 0.26 0.0"; + sizes[0] = 0.35; + sizes[1] = 0.30; +}; + + +//-------------------------------------------------------------------------- +//-------------------------------------- Emitters +// +datablock ParticleEmitterData(DefaultEmitter) +{ + ejectionPeriodMS = 100; // 10 Particles Per second + periodVarianceMS = 0; // ...exactly + + ejectionVelocity = 2.0; // From 1.0 - 3.0 meters per sec + velocityVariance = 1.0; + + ejectionOffset = 0.0; // Emit at the emitter origin + + thetaMin = 0.0; // All theta angles + thetaMax = 90.0; + + phiReferenceVel = 0.0; // All phi angles + phiVariance = 360.0; + + overrideAdvances = false; + + particles = "DefaultParticle"; +}; + +datablock ParticleEmitterData(ReverseEmitter) +{ + ejectionPeriodMS = 25; + periodVarianceMS = 5; + + ejectionVelocity = 1.1; // From 1.0 - 3.0 meters per sec + velocityVariance = 1.0; + + ejectionOffset = 0.0; + + thetaMin = 0.0; + thetaMax = 10.0; + + phiReferenceVel = 0; + phiVariance = 360; + + overrideAdvances = false; + + particles = "FallingParticleRed"; +}; \ No newline at end of file diff --git a/base/scripts/pathedObject.cs b/base/scripts/pathedObject.cs new file mode 100644 index 0000000..b656eb0 --- /dev/null +++ b/base/scripts/pathedObject.cs @@ -0,0 +1,78 @@ +//-------------------------------------------------------------------------- +// Pathed objects: +// +// accept the following commands: +// goForward() +// goBackward() +// goToWaypoint(waypoint) +// doCollideReverse() +// +// respond to the following queries +// getNumWaypoints() +// +// generate the following events +// onTriggerTick +// onStop +// onCollide (For non-displacing objects only) +// +//-------------------------------------------------------------------------- + +datablock PathedObjectData(defaultPathFollow) +{ + displaceObjects = "false"; + reversalPauseMS = 1000; +}; + +datablock PathedObjectData(displaceOnCollision) +{ + displaceObjects = "true"; + reversalPauseMS = 1000; +}; + +function PathedObject::onTrigger(%this, %triggerId, %on) +{ + // Default behavior for a door: + // if triggered: go to open state (last waypoint) + // if untriggered: go to closed state (first waypoint) + + if (%on $= "true") { + %this.triggerCount++; + } else { + if (%this.triggerCount > 0) + %this.triggerCount--; + } + + if (%this.triggerCount > 0) + %this.goForward(); + else + %this.goBackward(); +} + +// Commented out functions are implemented in code for efficiency, placed here for +// parameter description... +// +//function PathedObject::onTriggerTick(%this, %triggerId) +//{ +// // Do nothing +//} +// +//function PathedObject::onStop(%this, %position) +//{ +// // Do nothing by default. +// // Possible values for %position: +// // Start +// // End +// // # (Waypoint number) +//} +// +//function PathedObject::onCollide(%this, %position) +//{ +// %myBlock = %this.getDataBlock(); +// +// if (%myBlock.displaceObjects) { +// error(%this @ ": displacing pathed objects should never call onCollide"); +// return; +// } +// +// %this.doCollideReverse(); +//}\ diff --git a/base/scripts/player.cs b/base/scripts/player.cs new file mode 100644 index 0000000..713cdbc --- /dev/null +++ b/base/scripts/player.cs @@ -0,0 +1,2988 @@ +//---------------------------------------------------------------------------- +//---------------------------------------------------------------------------- + +$InvincibleTime = 6; +// Load dts shapes and merge animations +exec("shapes/light_male.cs"); +exec("shapes/medium_male.cs"); +exec("shapes/heavy_male.cs"); +exec("shapes/light_female.cs"); +exec("shapes/medium_female.cs"); +exec("shapes/bioderm_light.cs"); +exec("shapes/bioderm_medium.cs"); +exec("shapes/bioderm_heavy.cs"); + +$CorpseTimeoutValue = 22 * 1000; + +//Damage Rate for entering Liquid +$DamageLava = 0.0325; +$DamageHotLava = 0.0325; +$DamageCrustyLava = 0.0325; + +$PlayerDeathAnim::TorsoFrontFallForward = 1; +$PlayerDeathAnim::TorsoFrontFallBack = 2; +$PlayerDeathAnim::TorsoBackFallForward = 3; +$PlayerDeathAnim::TorsoLeftSpinDeath = 4; +$PlayerDeathAnim::TorsoRightSpinDeath = 5; +$PlayerDeathAnim::LegsLeftGimp = 6; +$PlayerDeathAnim::LegsRightGimp = 7; +$PlayerDeathAnim::TorsoBackFallForward = 8; +$PlayerDeathAnim::HeadFrontDirect = 9; +$PlayerDeathAnim::HeadBackFallForward = 10; +$PlayerDeathAnim::ExplosionBlowBack = 11; + +datablock SensorData(PlayerSensor) +{ + detects = true; + detectsUsingLOS = true; + detectsPassiveJammed = true; + detectRadius = 2000; + detectionPings = false; + detectsFOVOnly = true; + detectFOVPercent = 1.3; + useObjectFOV = true; +}; + +//---------------------------------------------------------------------------- + +datablock EffectProfile(ArmorJetEffect) +{ + effectname = "armor/thrust"; + minDistance = 5.0; + maxDistance = 10.0; +}; + +datablock EffectProfile(ImpactSoftEffect) +{ + effectname = "armor/light_land_soft"; + minDistance = 5.0; + maxDistance = 10.0; +}; + +datablock EffectProfile(ImpactHardEffect) +{ + effectname = "armor/light_land_hard"; + minDistance = 5.0; + maxDistance = 10.0; +}; + +datablock EffectProfile(ImpactMetalEffect) +{ + effectname = "armor/light_land_metal"; + minDistance = 5.0; + maxDistance = 10.0; +}; + +datablock EffectProfile(ImpactSnowEffect) +{ + effectname = "armor/light_land_snow"; + minDistance = 5.0; + maxDistance = 10.0; +}; + +datablock EffectProfile(CorpseLootingEffect) +{ + effectname = "weapons/generic_switch"; + minDistance = 2.5; +}; + +datablock EffectProfile(MountVehicleEffect) +{ + effectname = "vehicles/mount_dis"; + minDistance = 20; +}; + +datablock EffectProfile(UnmountVehicleEffect) +{ + effectname = "weapons/generic_switch"; + minDistance = 20; +}; + +//---------------------------------------------------------------------------- + +datablock AudioProfile( DeathCrySound ) +{ + fileName = ""; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile( PainCrySound ) +{ + fileName = ""; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(ArmorJetSound) +{ + filename = "fx/armor/thrust.wav"; + description = CloseLooping3d; + preload = true; + effect = ArmorJetEffect; +}; + +datablock AudioProfile(ArmorWetJetSound) +{ + filename = "fx/armor/thrust_uw.wav"; + description = CloseLooping3d; + preload = true; + effect = ArmorJetEffect; +}; + +datablock AudioProfile(MountVehicleSound) +{ + filename = "fx/vehicles/mount_dis.wav"; + description = AudioClose3d; + preload = true; + effect = MountVehicleEffect; +}; + +datablock AudioProfile(UnmountVehicleSound) +{ + filename = "fx/vehicles/mount.wav"; + description = AudioClose3d; + preload = true; + effect = UnmountVehicleEffect; +}; + +datablock AudioProfile(CorpseLootingSound) +{ + fileName = "fx/weapons/generic_switch.wav"; + description = AudioClosest3d; + preload = true; + effect = CorpseLootingEffect; +}; + +datablock AudioProfile(ArmorMoveBubblesSound) +{ + filename = "fx/armor/bubbletrail2.wav"; + description = CloseLooping3d; + preload = true; +}; + +datablock AudioProfile(WaterBreathMaleSound) +{ + filename = "fx/armor/breath_uw.wav"; + description = ClosestLooping3d; + preload = true; +}; + +datablock AudioProfile(WaterBreathFemaleSound) +{ + filename = "fx/armor/breath_fem_uw.wav"; + description = ClosestLooping3d; + preload = true; +}; + +datablock AudioProfile(waterBreathBiodermSound) +{ + filename = "fx/armor/breath_bio_uw.wav"; + description = ClosestLooping3d; + preload = true; +}; + +datablock AudioProfile(SkiAllSoftSound) +{ + filename = "fx/armor/ski_soft.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(SkiAllHardSound) +{ + filename = "fx/armor/ski_soft.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(SkiAllMetalSound) +{ + filename = "fx/armor/ski_soft.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(SkiAllSnowSound) +{ + filename = "fx/armor/ski_soft.wav"; + description = AudioClosest3d; + preload = true; +}; + +//SOUNDS ----- LIGHT ARMOR-------- +datablock AudioProfile(LFootLightSoftSound) +{ + filename = "fx/armor/light_LF_soft.wav"; + description = AudioClosest3d; + preload = true; +}; + +datablock AudioProfile(RFootLightSoftSound) +{ + filename = "fx/armor/light_RF_soft.wav"; + description = AudioClosest3d; + preload = true; +}; + +datablock AudioProfile(LFootLightHardSound) +{ + filename = "fx/armor/light_LF_hard.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(RFootLightHardSound) +{ + filename = "fx/armor/light_RF_hard.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(LFootLightMetalSound) +{ + filename = "fx/armor/light_LF_metal.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(RFootLightMetalSound) +{ + filename = "fx/armor/light_RF_metal.wav"; + description = AudioClose3d; + preload = true; +}; +datablock AudioProfile(LFootLightSnowSound) +{ + filename = "fx/armor/light_LF_snow.wav"; + description = AudioClosest3d; + preload = true; +}; + +datablock AudioProfile(RFootLightSnowSound) +{ + filename = "fx/armor/light_RF_snow.wav"; + description = AudioClosest3d; + preload = true; +}; + +datablock AudioProfile(LFootLightShallowSplashSound) +{ + filename = "fx/armor/light_LF_water.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(RFootLightShallowSplashSound) +{ + filename = "fx/armor/light_RF_water.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(LFootLightWadingSound) +{ + filename = "fx/armor/light_LF_wade.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(RFootLightWadingSound) +{ + filename = "fx/armor/light_RF_wade.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(LFootLightUnderwaterSound) +{ + filename = "fx/armor/light_LF_uw.wav"; + description = AudioClosest3d; + preload = true; +}; + +datablock AudioProfile(RFootLightUnderwaterSound) +{ + filename = "fx/armor/light_RF_uw.wav"; + description = AudioClosest3d; + preload = true; +}; + +datablock AudioProfile(LFootLightBubblesSound) +{ + filename = "fx/armor/light_LF_bubbles.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(RFootLightBubblesSound) +{ + filename = "fx/armor/light_RF_bubbles.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(ImpactLightSoftSound) +{ + filename = "fx/armor/light_land_soft.wav"; + description = AudioClose3d; + preload = true; + effect = ImpactSoftEffect; +}; + +datablock AudioProfile(ImpactLightHardSound) +{ + filename = "fx/armor/light_land_hard.wav"; + description = AudioClose3d; + preload = true; + effect = ImpactHardEffect; +}; + +datablock AudioProfile(ImpactLightMetalSound) +{ + filename = "fx/armor/light_land_metal.wav"; + description = AudioClose3d; + preload = true; + effect = ImpactMetalEffect; +}; + +datablock AudioProfile(ImpactLightSnowSound) +{ + filename = "fx/armor/light_land_snow.wav"; + description = AudioClosest3d; + preload = true; + effect = ImpactSnowEffect; +}; + +datablock AudioProfile(ImpactLightWaterEasySound) +{ + filename = "fx/armor/general_water_smallsplash2.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(ImpactLightWaterMediumSound) +{ + filename = "fx/armor/general_water_medsplash.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(ImpactLightWaterHardSound) +{ + filename = "fx/armor/general_water_bigsplash.wav"; + description = AudioDefault3d; + preload = true; +}; + +datablock AudioProfile(ExitingWaterLightSound) +{ + filename = "fx/armor/general_water_exit2.wav"; + description = AudioClose3d; + preload = true; +}; + +//SOUNDS ----- Medium ARMOR-------- +datablock AudioProfile(LFootMediumSoftSound) +{ + filename = "fx/armor/med_LF_soft.wav"; + description = AudioClosest3d; + preload = true; +}; + +datablock AudioProfile(RFootMediumSoftSound) +{ + filename = "fx/armor/med_RF_soft.wav"; + description = AudioClosest3d; + preload = true; +}; + +datablock AudioProfile(LFootMediumHardSound) +{ + filename = "fx/armor/med_LF_hard.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(RFootMediumHardSound) +{ + filename = "fx/armor/med_RF_hard.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(LFootMediumMetalSound) +{ + filename = "fx/armor/med_LF_metal.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(RFootMediumMetalSound) +{ + filename = "fx/armor/med_RF_metal.wav"; + description = AudioClose3d; + preload = true; +}; +datablock AudioProfile(LFootMediumSnowSound) +{ + filename = "fx/armor/med_LF_snow.wav"; + description = AudioClosest3d; + preload = true; +}; + +datablock AudioProfile(RFootMediumSnowSound) +{ + filename = "fx/armor/med_RF_snow.wav"; + description = AudioClosest3d; + preload = true; +}; + +datablock AudioProfile(LFootMediumShallowSplashSound) +{ + filename = "fx/armor/med_LF_water.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(RFootMediumShallowSplashSound) +{ + filename = "fx/armor/med_RF_water.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(LFootMediumWadingSound) +{ + filename = "fx/armor/med_LF_uw.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(RFootMediumWadingSound) +{ + filename = "fx/armor/med_RF_uw.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(LFootMediumUnderwaterSound) +{ + filename = "fx/armor/med_LF_uw.wav"; + description = AudioClosest3d; + preload = true; +}; + +datablock AudioProfile(RFootMediumUnderwaterSound) +{ + filename = "fx/armor/med_RF_uw.wav"; + description = AudioClosest3d; + preload = true; +}; + +datablock AudioProfile(LFootMediumBubblesSound) +{ + filename = "fx/armor/light_LF_bubbles.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(RFootMediumBubblesSound) +{ + filename = "fx/armor/light_RF_bubbles.wav"; + description = AudioClose3d; + preload = true; +}; +datablock AudioProfile(ImpactMediumSoftSound) +{ + filename = "fx/armor/med_land_soft.wav"; + description = AudioClosest3d; + preload = true; + effect = ImpactSoftEffect; +}; + +datablock AudioProfile(ImpactMediumHardSound) +{ + filename = "fx/armor/med_land_hard.wav"; + description = AudioClose3d; + preload = true; + effect = ImpactHardEffect; +}; + +datablock AudioProfile(ImpactMediumMetalSound) +{ + filename = "fx/armor/med_land_metal.wav"; + description = AudioClose3d; + preload = true; + effect = ImpactMetalEffect; +}; + +datablock AudioProfile(ImpactMediumSnowSound) +{ + filename = "fx/armor/med_land_snow.wav"; + description = AudioClosest3d; + preload = true; + effect = ImpactSnowEffect; +}; + +datablock AudioProfile(ImpactMediumWaterEasySound) +{ + filename = "fx/armor/general_water_smallsplash.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(ImpactMediumWaterMediumSound) +{ + filename = "fx/armor/general_water_medsplash.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(ImpactMediumWaterHardSound) +{ + filename = "fx/armor/general_water_bigsplash.wav"; + description = AudioDefault3d; + preload = true; +}; + +datablock AudioProfile(ExitingWaterMediumSound) +{ + filename = "fx/armor/general_water_exit.wav"; + description = AudioClose3d; + preload = true; +}; + +//SOUNDS ----- HEAVY ARMOR-------- +datablock AudioProfile(LFootHeavySoftSound) +{ + filename = "fx/armor/heavy_LF_soft.wav"; + description = AudioClosest3d; + preload = true; +}; + +datablock AudioProfile(RFootHeavySoftSound) +{ + filename = "fx/armor/heavy_RF_soft.wav"; + description = AudioClosest3d; + preload = true; +}; + +datablock AudioProfile(LFootHeavyHardSound) +{ + filename = "fx/armor/heavy_LF_hard.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(RFootHeavyHardSound) +{ + filename = "fx/armor/heavy_RF_hard.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(LFootHeavyMetalSound) +{ + filename = "fx/armor/heavy_LF_metal.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(RFootHeavyMetalSound) +{ + filename = "fx/armor/heavy_RF_metal.wav"; + description = AudioClose3d; + preload = true; +}; +datablock AudioProfile(LFootHeavySnowSound) +{ + filename = "fx/armor/heavy_LF_snow.wav"; + description = AudioClosest3d; + preload = true; +}; + +datablock AudioProfile(RFootHeavySnowSound) +{ + filename = "fx/armor/heavy_RF_snow.wav"; + description = AudioClosest3d; + preload = true; +}; + +datablock AudioProfile(LFootHeavyShallowSplashSound) +{ + filename = "fx/armor/heavy_LF_water.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(RFootHeavyShallowSplashSound) +{ + filename = "fx/armor/heavy_RF_water.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(LFootHeavyWadingSound) +{ + filename = "fx/armor/heavy_LF_uw.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(RFootHeavyWadingSound) +{ + filename = "fx/armor/heavy_RF_uw.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(LFootHeavyUnderwaterSound) +{ + filename = "fx/armor/heavy_LF_uw.wav"; + description = AudioClosest3d; + preload = true; +}; + +datablock AudioProfile(RFootHeavyUnderwaterSound) +{ + filename = "fx/armor/heavy_RF_uw.wav"; + description = AudioClosest3d; + preload = true; +}; + +datablock AudioProfile(LFootHeavyBubblesSound) +{ + filename = "fx/armor/light_LF_bubbles.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(RFootHeavyBubblesSound) +{ + filename = "fx/armor/light_RF_bubbles.wav"; + description = AudioClose3d; + preload = true; +}; +datablock AudioProfile(ImpactHeavySoftSound) +{ + filename = "fx/armor/heavy_land_soft.wav"; + description = AudioClose3d; + preload = true; + effect = ImpactSoftEffect; +}; + +datablock AudioProfile(ImpactHeavyHardSound) +{ + filename = "fx/armor/heavy_land_hard.wav"; + description = AudioClose3d; + preload = true; + effect = ImpactHardEffect; +}; + +datablock AudioProfile(ImpactHeavyMetalSound) +{ + filename = "fx/armor/heavy_land_metal.wav"; + description = AudioClose3d; + preload = true; + effect = ImpactMetalEffect; +}; + +datablock AudioProfile(ImpactHeavySnowSound) +{ + filename = "fx/armor/heavy_land_snow.wav"; + description = AudioClosest3d; + preload = true; + effect = ImpactSnowEffect; +}; + +datablock AudioProfile(ImpactHeavyWaterEasySound) +{ + filename = "fx/armor/general_water_smallsplash.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(ImpactHeavyWaterMediumSound) +{ + filename = "fx/armor/general_water_medsplash.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(ImpactHeavyWaterHardSound) +{ + filename = "fx/armor/general_water_bigsplash.wav"; + description = AudioDefault3d; + preload = true; +}; + +datablock AudioProfile(ExitingWaterHeavySound) +{ + filename = "fx/armor/general_water_exit2.wav"; + description = AudioClose3d; + preload = true; +}; + +//---------------------------------------------------------------------------- +// Splash +//---------------------------------------------------------------------------- + +datablock ParticleData(PlayerSplashMist) +{ + dragCoefficient = 2.0; + gravityCoefficient = -0.05; + inheritedVelFactor = 0.0; + constantAcceleration = 0.0; + lifetimeMS = 400; + lifetimeVarianceMS = 100; + useInvAlpha = false; + spinRandomMin = -90.0; + spinRandomMax = 500.0; + textureName = "particleTest"; + colors[0] = "0.7 0.8 1.0 1.0"; + colors[1] = "0.7 0.8 1.0 0.5"; + colors[2] = "0.7 0.8 1.0 0.0"; + sizes[0] = 0.5; + sizes[1] = 0.5; + sizes[2] = 0.8; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(PlayerSplashMistEmitter) +{ + ejectionPeriodMS = 5; + periodVarianceMS = 0; + ejectionVelocity = 3.0; + velocityVariance = 2.0; + ejectionOffset = 0.0; + thetaMin = 85; + thetaMax = 85; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + lifetimeMS = 250; + particles = "PlayerSplashMist"; +}; + + +datablock ParticleData(PlayerBubbleParticle) +{ + dragCoefficient = 0.0; + gravityCoefficient = -0.50; + inheritedVelFactor = 0.0; + constantAcceleration = 0.0; + lifetimeMS = 400; + lifetimeVarianceMS = 100; + useInvAlpha = false; + textureName = "special/bubbles"; + colors[0] = "0.7 0.8 1.0 0.4"; + colors[1] = "0.7 0.8 1.0 0.4"; + colors[2] = "0.7 0.8 1.0 0.0"; + sizes[0] = 0.1; + sizes[1] = 0.3; + sizes[2] = 0.3; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(PlayerBubbleEmitter) +{ + ejectionPeriodMS = 1; + periodVarianceMS = 0; + ejectionVelocity = 2.0; + ejectionOffset = 0.5; + velocityVariance = 0.5; + thetaMin = 0; + thetaMax = 80; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + particles = "PlayerBubbleParticle"; +}; + +datablock ParticleData(PlayerFoamParticle) +{ + dragCoefficient = 2.0; + gravityCoefficient = -0.05; + inheritedVelFactor = 0.0; + constantAcceleration = 0.0; + lifetimeMS = 400; + lifetimeVarianceMS = 100; + useInvAlpha = false; + spinRandomMin = -90.0; + spinRandomMax = 500.0; + textureName = "particleTest"; + colors[0] = "0.7 0.8 1.0 0.20"; + colors[1] = "0.7 0.8 1.0 0.20"; + colors[2] = "0.7 0.8 1.0 0.00"; + sizes[0] = 0.2; + sizes[1] = 0.4; + sizes[2] = 1.6; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(PlayerFoamEmitter) +{ + ejectionPeriodMS = 10; + periodVarianceMS = 0; + ejectionVelocity = 3.0; + velocityVariance = 1.0; + ejectionOffset = 0.0; + thetaMin = 85; + thetaMax = 85; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + particles = "PlayerFoamParticle"; +}; + + +datablock ParticleData( PlayerFoamDropletsParticle ) +{ + dragCoefficient = 1; + gravityCoefficient = 0.2; + inheritedVelFactor = 0.2; + constantAcceleration = -0.0; + lifetimeMS = 600; + lifetimeVarianceMS = 0; + textureName = "special/droplet"; + colors[0] = "0.7 0.8 1.0 1.0"; + colors[1] = "0.7 0.8 1.0 0.5"; + colors[2] = "0.7 0.8 1.0 0.0"; + sizes[0] = 0.8; + sizes[1] = 0.3; + sizes[2] = 0.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData( PlayerFoamDropletsEmitter ) +{ + ejectionPeriodMS = 7; + periodVarianceMS = 0; + ejectionVelocity = 2; + velocityVariance = 1.0; + ejectionOffset = 0.0; + thetaMin = 60; + thetaMax = 80; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + particles = "PlayerFoamDropletsParticle"; +}; + + + +datablock ParticleData( PlayerSplashParticle ) +{ + dragCoefficient = 1; + gravityCoefficient = 0.2; + inheritedVelFactor = 0.2; + constantAcceleration = -0.0; + lifetimeMS = 600; + lifetimeVarianceMS = 0; + textureName = "special/droplet"; + colors[0] = "0.7 0.8 1.0 1.0"; + colors[1] = "0.7 0.8 1.0 0.5"; + colors[2] = "0.7 0.8 1.0 0.0"; + sizes[0] = 0.5; + sizes[1] = 0.5; + sizes[2] = 0.5; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData( PlayerSplashEmitter ) +{ + ejectionPeriodMS = 1; + periodVarianceMS = 0; + ejectionVelocity = 3; + velocityVariance = 1.0; + ejectionOffset = 0.0; + thetaMin = 60; + thetaMax = 80; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 100; + particles = "PlayerSplashParticle"; +}; + +datablock SplashData(PlayerSplash) +{ + numSegments = 15; + ejectionFreq = 15; + ejectionAngle = 40; + ringLifetime = 0.5; + lifetimeMS = 300; + velocity = 4.0; + startRadius = 0.0; + acceleration = -3.0; + texWrap = 5.0; + + texture = "special/water2"; + + emitter[0] = PlayerSplashEmitter; + emitter[1] = PlayerSplashMistEmitter; + + colors[0] = "0.7 0.8 1.0 0.0"; + colors[1] = "0.7 0.8 1.0 0.3"; + colors[2] = "0.7 0.8 1.0 0.7"; + colors[3] = "0.7 0.8 1.0 0.0"; + times[0] = 0.0; + times[1] = 0.4; + times[2] = 0.8; + times[3] = 1.0; +}; + +//---------------------------------------------------------------------------- + +datablock ParticleData(HumanArmorJetParticle) +{ + dragCoefficient = 1.5; + gravityCoefficient = 0; + inheritedVelFactor = 0.2; + constantAcceleration = 0.0; + lifetimeMS = 150; + lifetimeVarianceMS = 0; + textureName = "particleTest"; + colors[0] = "0.32 0.47 0.47 1.0"; + colors[1] = "0.32 0.47 0.47 0"; + sizes[0] = 0.40; + sizes[1] = 0.15; +}; + +datablock ParticleEmitterData(HumanArmorJetEmitter) +{ + ejectionPeriodMS = 3; + periodVarianceMS = 0; + ejectionVelocity = 3; + velocityVariance = 2.9; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 5; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + particles = "HumanArmorJetParticle"; +}; + +//---------------------------------------------------------------------------- +// Foot puffs +//---------------------------------------------------------------------------- +datablock ParticleData(LightPuff) +{ + dragCoefficient = 2.0; + gravityCoefficient = -0.01; + inheritedVelFactor = 0.0; + constantAcceleration = 0.0; + lifetimeMS = 500; + lifetimeVarianceMS = 100; + useInvAlpha = true; + spinRandomMin = -35.0; + spinRandomMax = 35.0; + textureName = "particleTest"; + colors[0] = "0.46 0.36 0.26 0.4"; + colors[1] = "0.46 0.46 0.36 0.0"; + sizes[0] = 0.4; + sizes[1] = 1.0; +}; + +datablock ParticleEmitterData(LightPuffEmitter) +{ + ejectionPeriodMS = 35; + periodVarianceMS = 10; + ejectionVelocity = 0.1; + velocityVariance = 0.05; + ejectionOffset = 0.0; + thetaMin = 5; + thetaMax = 20; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + useEmitterColors = true; + particles = "LightPuff"; +}; + +//---------------------------------------------------------------------------- +// Liftoff dust +//---------------------------------------------------------------------------- +datablock ParticleData(LiftoffDust) +{ + dragCoefficient = 1.0; + gravityCoefficient = -0.01; + inheritedVelFactor = 0.0; + constantAcceleration = 0.0; + lifetimeMS = 1000; + lifetimeVarianceMS = 100; + useInvAlpha = true; + spinRandomMin = -90.0; + spinRandomMax = 500.0; + textureName = "particleTest"; + colors[0] = "0.46 0.36 0.26 0.0"; + colors[1] = "0.46 0.46 0.36 0.4"; + colors[2] = "0.46 0.46 0.36 0.0"; + sizes[0] = 0.2; + sizes[1] = 0.6; + sizes[2] = 1.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(LiftoffDustEmitter) +{ + ejectionPeriodMS = 5; + periodVarianceMS = 0; + ejectionVelocity = 2.0; + velocityVariance = 0.0; + ejectionOffset = 0.0; + thetaMin = 90; + thetaMax = 90; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + useEmitterColors = true; + particles = "LiftoffDust"; +}; + +//---------------------------------------------------------------------------- + +datablock ParticleData(BiodermArmorJetParticle) : HumanArmorJetParticle +{ + colors[0] = "0.50 0.48 0.36 1.0"; + colors[1] = "0.50 0.48 0.36 0"; +}; + +datablock ParticleEmitterData(BiodermArmorJetEmitter) : HumanArmorJetEmitter +{ + particles = "BiodermArmorJetParticle"; +}; + + +//---------------------------------------------------------------------------- +datablock DecalData(LightMaleFootprint) +{ + sizeX = 0.125; + sizeY = 0.25; + textureName = "special/footprints/L_male"; +}; + +datablock DebrisData( PlayerDebris ) +{ + explodeOnMaxBounce = false; + + elasticity = 0.15; + friction = 0.5; + + lifetime = 4.0; + lifetimeVariance = 0.0; + + minSpinSpeed = 40; + maxSpinSpeed = 600; + + numBounces = 5; + bounceVariance = 0; + + staticOnMaxBounce = true; + gravModifier = 1.0; + + useRadiusMass = true; + baseRadius = 1; + + velocity = 20.0; + velocityVariance = 12.0; +}; + +datablock PlayerData(LightMaleHumanArmor) : LightPlayerDamageProfile +{ + emap = true; + + className = Armor; + shapeFile = "light_male.dts"; + cameraMaxDist = 3; + computeCRC = true; + + canObserve = true; + cmdCategory = "Clients"; + cmdIcon = CMDPlayerIcon; + cmdMiniIconName = "commander/MiniIcons/com_player_grey"; + + hudImageNameFriendly[0] = "gui/hud_playertriangle.png"; + hudImageNameEnemy[0] = "gui/hud_playertriangle_enemy.png"; + hudRenderModulated[0] = true; + + hudImageNameFriendly[1] = "commander/MiniIcons/com_flag_grey"; + hudImageNameEnemy[1] = "commander/MiniIcons/com_flag_grey"; + hudRenderModulated[1] = true; + hudRenderAlways[1] = true; + hudRenderCenter[1] = true; + hudRenderDistance[1] = true; + + hudImageNameFriendly[2] = "commander/MiniIcons/com_flag_grey"; + hudImageNameEnemy[2] = "commander/MiniIcons/com_flag_grey"; + hudRenderModulated[2] = true; + hudRenderAlways[2] = true; + hudRenderCenter[2] = true; + hudRenderDistance[2] = true; + + cameraDefaultFov = 90.0; + cameraMinFov = 5.0; + cameraMaxFov = 120.0; + + debrisShapeName = "debris_player.dts"; + debris = playerDebris; + + aiAvoidThis = true; + + minLookAngle = -1.4; + maxLookAngle = 1.4; + maxFreelookAngle = 3.0; + + mass = 90; + drag = 0.3; + maxdrag = 0.4; + density = 10; + maxDamage = 0.66; + maxEnergy = 60; + repairRate = 0.0033; + energyPerDamagePoint = 75.0; // shield energy required to block one point of damage + + rechargeRate = 0.256; + jetForce = 26.2 * 90; + jetEnergyDrain = 0.8; + minJetEnergy = 1; + maxJetHorizontalPercentage = 0.8; + + runForce = 48 * 90; + runEnergyDrain = 0; + minRunEnergy = 0; + maxForwardSpeed = 14; + maxBackwardSpeed = 13; + maxSideSpeed = 13; + + jumpForce = 8.3 * 90; + jumpEnergyDrain = 0; + minJumpEnergy = 0; + jumpDelay = 0; + + + recoverDelay = 9; + recoverRunForceScale = 1.2; + + minImpactSpeed = 45; + speedDamageScale = 0.004; + + jetSound = ArmorJetSound; + wetJetSound = ArmorJetSound; + jetEmitter = HumanArmorJetEmitter; + + boundingBox = "1.2 1.2 2.3"; + pickupRadius = 0.75; + + // damage location details + boxNormalHeadPercentage = 0.83; + boxNormalTorsoPercentage = 0.49; + boxHeadLeftPercentage = 0; + boxHeadRightPercentage = 1; + boxHeadBackPercentage = 0; + boxHeadFrontPercentage = 1; + + //Foot Prints + decalData = LightMaleFootprint; + decalOffset = 0.25; + + footPuffEmitter = LightPuffEmitter; + footPuffNumParts = 15; + footPuffRadius = 0.25; + + dustEmitter = LiftoffDustEmitter; + + splash = PlayerSplash; + splashVelocity = 4.0; + splashAngle = 67.0; + splashFreqMod = 300.0; + splashVelEpsilon = 0.60; + bubbleEmitTime = 0.4; + splashEmitter[0] = PlayerFoamDropletsEmitter; + splashEmitter[1] = PlayerFoamEmitter; + splashEmitter[2] = PlayerBubbleEmitter; + mediumSplashSoundVelocity = 25.0; + hardSplashSoundVelocity = 35.0; + exitSplashSoundVelocity = 12.0; + + // Controls over slope of runnable/jumpable surfaces + runSurfaceAngle = 70; + jumpSurfaceAngle = 80; + + minJumpSpeed = 20; + maxJumpSpeed = 30; + + maxJetForwardSpeed = 30; + horizMaxSpeed = 68; + horizResistSpeed = 33; + horizResistFactor = 0.35; + + upMaxSpeed = 80; + upResistSpeed = 25; + upResistFactor = 0.3; + + // heat inc'ers and dec'ers + heatDecayPerSec = 1.0 / 6.0; // takes 6 seconds to clear heat sig. + heatIncreasePerSec = 1.0 / 3.0; // takes 3 seconds of constant jet to get full heat sig. + + footstepSplashHeight = 0.35; + //Footstep Sounds + LFootSoftSound = LFootLightSoftSound; + RFootSoftSound = RFootLightSoftSound; + LFootHardSound = LFootLightHardSound; + RFootHardSound = RFootLightHardSound; + LFootMetalSound = LFootLightMetalSound; + RFootMetalSound = RFootLightMetalSound; + LFootSnowSound = LFootLightSnowSound; + RFootSnowSound = RFootLightSnowSound; + LFootShallowSound = LFootLightShallowSplashSound; + RFootShallowSound = RFootLightShallowSplashSound; + LFootWadingSound = LFootLightWadingSound; + RFootWadingSound = RFootLightWadingSound; + LFootUnderwaterSound = LFootLightUnderwaterSound; + RFootUnderwaterSound = RFootLightUnderwaterSound; + LFootBubblesSound = LFootLightBubblesSound; + RFootBubblesSound = RFootLightBubblesSound; + movingBubblesSound = ArmorMoveBubblesSound; + waterBreathSound = WaterBreathMaleSound; + + impactSoftSound = ImpactLightSoftSound; + impactHardSound = ImpactLightHardSound; + impactMetalSound = ImpactLightMetalSound; + impactSnowSound = ImpactLightSnowSound; + + skiSoftSound = SkiAllSoftSound; + skiHardSound = SkiAllHardSound; + skiMetalSound = SkiAllMetalSound; + skiSnowSound = SkiAllSnowSound; + + impactWaterEasy = ImpactLightWaterEasySound; + impactWaterMedium = ImpactLightWaterMediumSound; + impactWaterHard = ImpactLightWaterHardSound; + + groundImpactMinSpeed = 10.0; + groundImpactShakeFreq = "4.0 4.0 4.0"; + groundImpactShakeAmp = "1.0 1.0 1.0"; + groundImpactShakeDuration = 0.8; + groundImpactShakeFalloff = 10.0; + + exitingWater = ExitingWaterLightSound; + + maxWeapons = 3; // Max number of different weapons the player can have + maxGrenades = 1; // Max number of different grenades the player can have + maxMines = 1; // Max number of different mines the player can have + + // Inventory restrictions + max[RepairKit] = 1; + max[Mine] = 3; + max[Grenade] = 5; + max[Blaster] = 1; + max[Plasma] = 1; + max[PlasmaAmmo] = 20; + max[Disc] = 1; + max[DiscAmmo] = 15; + max[SniperRifle] = 1; + max[GrenadeLauncher] = 1; + max[GrenadeLauncherAmmo]= 10; + max[Mortar] = 0; + max[MortarAmmo] = 0; + max[MissileLauncher] = 0; + max[MissileLauncherAmmo]= 0; + max[Chaingun] = 1; + max[ChaingunAmmo] = 100; + max[RepairGun] = 1; + max[CloakingPack] = 1; + max[SensorJammerPack] = 1; + max[EnergyPack] = 1; + max[RepairPack] = 1; + max[ShieldPack] = 1; + max[AmmoPack] = 1; + //max[ReflectionPack] = 1; + //max[RepulsorPack] = 1; + //max[EnvironmentPack] = 1; + max[SatchelCharge] = 1; + max[MortarBarrelPack] = 0; + max[MissileBarrelPack] = 0; + max[AABarrelPack] = 0; + max[PlasmaBarrelPack] = 0; + max[ELFBarrelPack] = 0; + max[InventoryDeployable]= 0; + //max[AmmoDeployable] = 0; + max[MotionSensorDeployable] = 1; + max[PulseSensorDeployable] = 1; + max[TurretOutdoorDeployable] = 0; + max[TurretIndoorDeployable] = 0; + //max[MineAir] = 3; + //max[MineLand] = 3; + //max[MineSticky] = 3; + max[FlashGrenade] = 5; + max[ConcussionGrenade] = 5; + max[FlareGrenade] = 5; + max[TargetingLaser] = 1; + max[ELFGun] = 1; + max[ShockLance] = 1; + max[CameraGrenade] = 5; + max[Beacon] = 3; + //max[Rock] = 1; + + observeParameters = "0.5 4.5 4.5"; +}; + + +//---------------------------------------------------------------------------- + +datablock DecalData(MediumMaleFootprint) +{ + sizeX = 0.125; + sizeY = 0.25; + textureName = "special/footprints/M_male"; +}; + +datablock PlayerData(MediumMaleHumanArmor) : MediumPlayerDamageProfile +{ + emap = true; + + className = Armor; + shapeFile = "medium_male.dts"; + cameraMaxDist = 3; + computeCRC = true; + + debrisShapeName = "debris_player.dts"; + debris = playerDebris; + + canObserve = true; + cmdCategory = "Clients"; + cmdIcon = CMDPlayerIcon; + cmdMiniIconName = "commander/MiniIcons/com_player_grey"; + + hudImageNameFriendly[0] = "gui/hud_playertriangle.png"; + hudImageNameEnemy[0] = "gui/hud_playertriangle_enemy.png"; + hudRenderModulated[0] = true; + + hudImageNameFriendly[1] = "commander/MiniIcons/com_flag_grey"; + hudImageNameEnemy[1] = "commander/MiniIcons/com_flag_grey"; + hudRenderModulated[1] = true; + hudRenderAlways[1] = true; + hudRenderCenter[1] = true; + hudRenderDistance[1] = true; + + hudImageNameFriendly[2] = "commander/MiniIcons/com_flag_grey"; + hudImageNameEnemy[2] = "commander/MiniIcons/com_flag_grey"; + hudRenderModulated[2] = true; + hudRenderAlways[2] = true; + hudRenderCenter[2] = true; + hudRenderDistance[2] = true; + + aiAvoidThis = true; + + minLookAngle = -1.4; + maxLookAngle = 1.4; + maxFreelookAngle = 3.0; + + mass = 130; + drag = 0.4; + maxdrag = 0.5; + density = 10; + maxDamage = 1.1; + maxEnergy = 80; + repairRate = 0.0033; + energyPerDamagePoint = 75.0; // shield energy required to block one point of damage + + rechargeRate = 0.256; + jetForce = 24.6 * 130; + jetEnergyDrain = 1.0; + minJetEnergy = 1; + maxJetHorizontalPercentage = 0.8; + + runForce = 40 * 130; + runEnergyDrain = 0; + minRunEnergy = 0; + maxForwardSpeed = 11; + maxBackwardSpeed = 10; + maxSideSpeed = 10; + + recoverDelay = 9; + recoverRunForceScale = 1.2; + + // heat inc'ers and dec'ers + heatDecayPerSec = 1.0 / 6.0; // takes 6 seconds to clear heat sig. + heatIncreasePerSec = 1.0 / 3.0; // takes 3 seconds of constant jet to get full heat sig. + + jumpForce = 8.4 * 130; + jumpEnergyDrain = 0; + minJumpEnergy = 0; + jumpSurfaceAngle = 75; + jumpDelay = 0; + + // Controls over slope of runnable/jumpable surfaces + runSurfaceAngle = 70; + jumpSurfaceAngle = 80; + + minJumpSpeed = 15; + maxJumpSpeed = 25; + maxJetForwardSpeed = 22; + + horizMaxSpeed = 60; + horizResistSpeed = 28; + horizResistFactor = 0.2; + + upMaxSpeed = 80; + upResistSpeed = 35; + upResistFactor = 0.15; + + minImpactSpeed = 45; + speedDamageScale = 0.004; + + jetSound = ArmorJetSound; + wetJetSound = ArmorWetJetSound; + + jetEmitter = HumanArmorJetEmitter; + + boundingBox = "1.45 1.45 2.4"; + pickupRadius = 0.75; + + // damage location details + boxNormalHeadPercentage = 0.83; + boxNormalTorsoPercentage = 0.49; + boxHeadLeftPercentage = 0; + boxHeadRightPercentage = 1; + boxHeadBackPercentage = 0; + boxHeadFrontPercentage = 1; + + //Foot Prints + decalData = MediumMaleFootprint; + decalOffset = 0.35; + + footPuffEmitter = LightPuffEmitter; + footPuffNumParts = 15; + footPuffRadius = 0.25; + + dustEmitter = LiftoffDustEmitter; + + splash = PlayerSplash; + splashVelocity = 4.0; + splashAngle = 67.0; + splashFreqMod = 300.0; + splashVelEpsilon = 0.60; + bubbleEmitTime = 0.4; + splashEmitter[0] = PlayerFoamDropletsEmitter; + splashEmitter[1] = PlayerFoamEmitter; + splashEmitter[2] = PlayerBubbleEmitter; + mediumSplashSoundVelocity = 25.0; + hardSplashSoundVelocity = 35.0; + exitSplashSoundVelocity = 12.0; + + footstepSplashHeight = 0.35; + //Footstep Sounds + LFootSoftSound = LFootMediumSoftSound; + RFootSoftSound = RFootMediumSoftSound; + LFootHardSound = LFootMediumHardSound; + RFootHardSound = RFootMediumHardSound; + LFootMetalSound = LFootMediumMetalSound; + RFootMetalSound = RFootMediumMetalSound; + LFootSnowSound = LFootMediumSnowSound; + RFootSnowSound = RFootMediumSnowSound; + LFootShallowSound = LFootMediumShallowSplashSound; + RFootShallowSound = RFootMediumShallowSplashSound; + LFootWadingSound = LFootMediumWadingSound; + RFootWadingSound = RFootMediumWadingSound; + LFootUnderwaterSound = LFootMediumUnderwaterSound; + RFootUnderwaterSound = RFootMediumUnderwaterSound; + LFootBubblesSound = LFootMediumBubblesSound; + RFootBubblesSound = RFootMediumBubblesSound; + movingBubblesSound = ArmorMoveBubblesSound; + waterBreathSound = WaterBreathMaleSound; + + impactSoftSound = ImpactMediumSoftSound; + impactHardSound = ImpactMediumHardSound; + impactMetalSound = ImpactMediumMetalSound; + impactSnowSound = ImpactMediumSnowSound; + + skiSoftSound = SkiAllSoftSound; + skiHardSound = SkiAllHardSound; + skiMetalSound = SkiAllMetalSound; + skiSnowSound = SkiAllSnowSound; + + impactWaterEasy = ImpactMediumWaterEasySound; + impactWaterMedium = ImpactMediumWaterMediumSound; + impactWaterHard = ImpactMediumWaterHardSound; + + groundImpactMinSpeed = 10.0; + groundImpactShakeFreq = "4.0 4.0 4.0"; + groundImpactShakeAmp = "1.0 1.0 1.0"; + groundImpactShakeDuration = 0.8; + groundImpactShakeFalloff = 10.0; + + exitingWater = ExitingWaterMediumSound; + + maxWeapons = 4; // Max number of different weapons the player can have + maxGrenades = 1; // Max number of different grenades the player can have + maxMines = 1; // Max number of different mines the player can have + + // Inventory restrictions + max[RepairKit] = 1; + max[Mine] = 3; + max[Grenade] = 6; + max[Blaster] = 1; + max[Plasma] = 1; + max[PlasmaAmmo] = 40; + max[Disc] = 1; + max[DiscAmmo] = 15; + max[SniperRifle] = 0; + max[GrenadeLauncher] = 1; + max[GrenadeLauncherAmmo]= 10; + max[Mortar] = 0; + max[MortarAmmo] = 0; + max[MissileLauncher] = 1; + max[MissileLauncherAmmo]= 4; + max[Chaingun] = 1; + max[ChaingunAmmo] = 150; + max[RepairGun] = 1; + max[CloakingPack] = 0; + max[SensorJammerPack] = 1; + max[EnergyPack] = 1; + max[RepairPack] = 1; + max[ShieldPack] = 1; + max[AmmoPack] = 1; + //max[ReflectionPack] = 1; + //max[RepulsorPack] = 1; + //max[EnvironmentPack] = 1; + max[SatchelCharge] = 1; + max[MortarBarrelPack] = 1; + max[MissileBarrelPack] = 1; + max[AABarrelPack] = 1; + max[PlasmaBarrelPack] = 1; + max[ELFBarrelPack] = 1; + max[InventoryDeployable]= 1; + //max[AmmoDeployable] = 1; + max[MotionSensorDeployable] = 1; + max[PulseSensorDeployable] = 1; + max[TurretOutdoorDeployable] = 1; + max[TurretIndoorDeployable] = 1; + //max[MineAir] = 3; + //max[MineLand] = 3; + //max[MineSticky] = 3; + max[FlashGrenade] = 6; + max[ConcussionGrenade] = 6; + max[FlareGrenade] = 6; + max[TargetingLaser] = 1; + max[ELFGun] = 1; + max[ShockLance] = 1; + max[CameraGrenade] = 6; + max[Beacon] = 3; + //max[Rock] = 1; + + observeParameters = "0.5 4.5 4.5"; +}; + + +//---------------------------------------------------------------------------- +datablock DecalData(HeavyMaleFootprint) +{ + sizeX = 0.25; + sizeY = 0.5; + textureName = "special/footprints/H_male"; +}; + +datablock PlayerData(HeavyMaleHumanArmor) : HeavyPlayerDamageProfile +{ + emap = true; + + className = Armor; + shapeFile = "heavy_male.dts"; + cameraMaxDist = 3; + computeCRC = true; + + debrisShapeName = "debris_player.dts"; + debris = playerDebris; + + canObserve = true; + cmdCategory = "Clients"; + cmdIcon = CMDPlayerIcon; + cmdMiniIconName = "commander/MiniIcons/com_player_grey"; + + hudImageNameFriendly[0] = "gui/hud_playertriangle.png"; + hudImageNameEnemy[0] = "gui/hud_playertriangle_enemy.png"; + hudRenderModulated[0] = true; + + hudImageNameFriendly[1] = "commander/MiniIcons/com_flag_grey"; + hudImageNameEnemy[1] = "commander/MiniIcons/com_flag_grey"; + hudRenderModulated[1] = true; + hudRenderAlways[1] = true; + hudRenderCenter[1] = true; + hudRenderDistance[1] = true; + + hudImageNameFriendly[2] = "commander/MiniIcons/com_flag_grey"; + hudImageNameEnemy[2] = "commander/MiniIcons/com_flag_grey"; + hudRenderModulated[2] = true; + hudRenderAlways[2] = true; + hudRenderCenter[2] = true; + hudRenderDistance[2] = true; + + aiAvoidThis = true; + + minLookAngle = -1.4; + maxLookAngle = 1.4; + maxFreelookAngle = 3.0; + + mass = 180; + drag = 0.5; + maxdrag = 0.6; + density = 10; + maxDamage = 1.32; + maxEnergy = 110; + repairRate = 0.0033; + energyPerDamagePoint = 75.0; // shield energy required to block one point of damage + + rechargeRate = 0.256; + jetForce = 21.4 * 180; + jetEnergyDrain = 1.1; + minJetEnergy = 1; + maxJetHorizontalPercentage = 0.8; + + runForce = 35 * 180; + runEnergyDrain = 0; + minRunEnergy = 0; + maxForwardSpeed = 6.5; + maxBackwardSpeed = 5; + maxSideSpeed = 5; + + recoverDelay = 9; + recoverRunForceScale = 1.2; + + jumpForce = 8.3 * 180; + jumpEnergyDrain = 0; + minJumpEnergy = 0; + jumpDelay = 0; + + // heat inc'ers and dec'ers + heatDecayPerSec = 1.0 / 6.0; // takes 6 seconds to clear heat sig. + heatIncreasePerSec = 1.0 / 3.0; // takes 3 seconds of constant jet to get full heat sig. + + // Controls over slope of runnable/jumpable surfaces + runSurfaceAngle = 70; + jumpSurfaceAngle = 75; + + minJumpSpeed = 20; + maxJumpSpeed = 30; + + horizMaxSpeed = 50; + horizResistSpeed = 20; + horizResistFactor = 0.3; + maxJetForwardSpeed = 16; + + upMaxSpeed = 60; + upResistSpeed = 35; + upResistFactor = 0.15; + + minImpactSpeed = 45; + speedDamageScale = 0.006; + + jetSound = ArmorJetSound; + wetJetSound = ArmorJetSound; + jetEmitter = HumanArmorJetEmitter; + + boundingBox = "1.63 1.63 2.6"; + pickupRadius = 0.75; + + // damage location details + boxNormalHeadPercentage = 0.83; + boxNormalTorsoPercentage = 0.49; + boxHeadLeftPercentage = 0; + boxHeadRightPercentage = 1; + boxHeadBackPercentage = 0; + boxHeadFrontPercentage = 1; + + //Foot Prints + decalData = HeavyMaleFootprint; + decalOffset = 0.4; + + footPuffEmitter = LightPuffEmitter; + footPuffNumParts = 15; + footPuffRadius = 0.25; + + dustEmitter = LiftoffDustEmitter; + + splash = PlayerSplash; + splashVelocity = 4.0; + splashAngle = 67.0; + splashFreqMod = 300.0; + splashVelEpsilon = 0.60; + bubbleEmitTime = 0.4; + splashEmitter[0] = PlayerFoamDropletsEmitter; + splashEmitter[1] = PlayerFoamEmitter; + splashEmitter[2] = PlayerBubbleEmitter; + mediumSplashSoundVelocity = 25.0; + hardSplashSoundVelocity = 35.0; + exitSplashSoundVelocity = 12.0; + + footstepSplashHeight = 0.35; + //Footstep Sounds + LFootSoftSound = LFootHeavySoftSound; + RFootSoftSound = RFootHeavySoftSound; + LFootHardSound = LFootHeavyHardSound; + RFootHardSound = RFootHeavyHardSound; + LFootMetalSound = LFootHeavyMetalSound; + RFootMetalSound = RFootHeavyMetalSound; + LFootSnowSound = LFootHeavySnowSound; + RFootSnowSound = RFootHeavySnowSound; + LFootShallowSound = LFootHeavyShallowSplashSound; + RFootShallowSound = RFootHeavyShallowSplashSound; + LFootWadingSound = LFootHeavyWadingSound; + RFootWadingSound = RFootHeavyWadingSound; + LFootUnderwaterSound = LFootHeavyUnderwaterSound; + RFootUnderwaterSound = RFootHeavyUnderwaterSound; + LFootBubblesSound = LFootHeavyBubblesSound; + RFootBubblesSound = RFootHeavyBubblesSound; + movingBubblesSound = ArmorMoveBubblesSound; + waterBreathSound = WaterBreathMaleSound; + + impactSoftSound = ImpactHeavySoftSound; + impactHardSound = ImpactHeavyHardSound; + impactMetalSound = ImpactHeavyMetalSound; + impactSnowSound = ImpactHeavySnowSound; + + skiSoftSound = SkiAllSoftSound; + skiHardSound = SkiAllHardSound; + skiMetalSound = SkiAllMetalSound; + skiSnowSound = SkiAllSnowSound; + + impactWaterEasy = ImpactHeavyWaterEasySound; + impactWaterMedium = ImpactHeavyWaterMediumSound; + impactWaterHard = ImpactHeavyWaterHardSound; + + groundImpactMinSpeed = 10.0; + groundImpactShakeFreq = "4.0 4.0 4.0"; + groundImpactShakeAmp = "1.0 1.0 1.0"; + groundImpactShakeDuration = 0.8; + groundImpactShakeFalloff = 10.0; + + exitingWater = ExitingWaterHeavySound; + + maxWeapons = 5; // Max number of different weapons the player can have + maxGrenades = 1; // Max number of different grenades the player can have + maxMines = 1; // Max number of different mines the player can have + + // Inventory restrictions + max[RepairKit] = 1; + max[Mine] = 3; + max[Grenade] = 8; + max[Blaster] = 1; + max[Plasma] = 1; + max[PlasmaAmmo] = 50; + max[Disc] = 1; + max[DiscAmmo] = 15; + max[SniperRifle] = 0; + max[GrenadeLauncher] = 1; + max[GrenadeLauncherAmmo]= 15; + max[Mortar] = 1; + max[MortarAmmo] = 10; + max[MissileLauncher] = 1; + max[MissileLauncherAmmo]= 8; + max[Chaingun] = 1; + max[ChaingunAmmo] = 200; + max[RepairGun] = 1; + max[CloakingPack] = 0; + max[SensorJammerPack] = 1; + max[EnergyPack] = 1; + max[RepairPack] = 1; + max[ShieldPack] = 1; + max[AmmoPack] = 1; + //max[ReflectionPack] = 1; + //max[RepulsorPack] = 1; + //max[EnvironmentPack] = 1; + max[SatchelCharge] = 1; + max[MortarBarrelPack] = 1; + max[MissileBarrelPack] = 1; + max[AABarrelPack] = 1; + max[PlasmaBarrelPack] = 1; + max[ELFBarrelPack] = 1; + max[InventoryDeployable]= 1; + //max[AmmoDeployable] = 1; + max[MotionSensorDeployable] = 1; + max[PulseSensorDeployable] = 1; + max[TurretOutdoorDeployable] = 1; + max[TurretIndoorDeployable] = 1; + //max[MineAir] = 3; + //max[MineLand] = 3; + //max[MineSticky] = 3; + max[FlashGrenade] = 8; + max[ConcussionGrenade] = 8; + max[FlareGrenade] = 8; + max[TargetingLaser] = 1; + max[ELFGun] = 1; + max[ShockLance] = 1; + max[CameraGrenade] = 8; + max[Beacon] = 3; + //max[Rock] = 1; + + observeParameters = "0.5 4.5 4.5"; +}; + + +//---------------------------------------------------------------------------- +datablock PlayerData(LightFemaleHumanArmor) : LightMaleHumanArmor +{ + shapeFile = "light_female.dts"; + waterBreathSound = WaterBreathFemaleSound; +}; + +//---------------------------------------------------------------------------- +datablock PlayerData(MediumFemaleHumanArmor) : MediumMaleHumanArmor +{ + shapeFile = "medium_female.dts"; + waterBreathSound = WaterBreathFemaleSound; +}; + +//---------------------------------------------------------------------------- +datablock PlayerData(HeavyFemaleHumanArmor) : HeavyMaleHumanArmor +{ + shapeFile = "heavy_male.dts"; + waterBreathSound = WaterBreathFemaleSound; +}; + +//---------------------------------------------------------------------------- +datablock DecalData(LightBiodermFootprint) +{ + sizeX = 0.25; + sizeY = 0.25; + textureName = "special/footprints/L_bioderm"; +}; + +datablock PlayerData(LightMaleBiodermArmor) : LightMaleHumanArmor +{ + shapeFile = "bioderm_light.dts"; + jetEmitter = BiodermArmorJetEmitter; + + //Foot Prints + decalData = LightBiodermFootprint; + decalOffset = 0.3; + + waterBreathSound = WaterBreathBiodermSound; +}; + +//---------------------------------------------------------------------------- +datablock DecalData(MediumBiodermFootprint) +{ + sizeX = 0.25; + sizeY = 0.25; + textureName = "special/footprints/M_bioderm"; +}; + +datablock PlayerData(MediumMaleBiodermArmor) : MediumMaleHumanArmor +{ + shapeFile = "bioderm_medium.dts"; + jetEmitter = BiodermArmorJetEmitter; + + //Foot Prints + decalData = MediumBiodermFootprint; + decalOffset = 0.35; + + waterBreathSound = WaterBreathBiodermSound; +}; + +//---------------------------------------------------------------------------- +datablock DecalData(HeavyBiodermFootprint) +{ + sizeX = 0.25; + sizeY = 0.5; + textureName = "special/footprints/H_bioderm"; +}; + +datablock PlayerData(HeavyMaleBiodermArmor) : HeavyMaleHumanArmor +{ + emap = false; + + shapeFile = "bioderm_heavy.dts"; + jetEmitter = BiodermArmorJetEmitter; + + //Foot Prints + decalData = HeavyBiodermFootprint; + decalOffset = 0.4; + + waterBreathSound = WaterBreathBiodermSound; +}; + + +//---------------------------------------------------------------------------- + +function Armor::onAdd(%data,%obj) +{ + Parent::onAdd(%data, %obj); + // Vehicle timeout + %obj.mountVehicle = true; + + // Default dynamic armor stats + %obj.setRechargeRate(%data.rechargeRate); + %obj.setRepairRate(0); + + %obj.setSelfPowered(); +} + +function Armor::onRemove(%this, %obj) +{ + //Frohny asked me to remove this - all players are deleted now on mission cycle... + //if(%obj.getState() !$= "Dead") + //{ + // error("ERROR PLAYER REMOVED WITHOUT DEATH - TRACE:"); + // trace(1); + // schedule(0,0,trace,0); + //} + + if (%obj.client.player == %obj) + %obj.client.player = 0; +} + +function Armor::onNewDataBlock(%this,%obj) +{ +} + +function Armor::onDisabled(%this,%obj,%state) +{ + %fadeTime = 1000; + %obj.startFade( %fadeTime, ($CorpseTimeoutValue) - %fadeTime, true ); + %obj.schedule($CorpseTimeoutValue, "delete"); +} + +function Armor::shouldApplyImpulse(%data, %obj) +{ + return true; +} + +$wasFirstPerson = true; + +function Armor::onMount(%this,%obj,%vehicle,%node) +{ + if (%node == 0) + { + // Node 0 is the pilot's pos. + %obj.setTransform("0 0 0 0 0 1 0"); + %obj.setActionThread(%vehicle.getDatablock().mountPose[%node],true,true); + %obj.lastWeapon = %obj.getMountedImage($WeaponSlot); + %obj.unmountImage($WeaponSlot); + if(!%obj.client.isAIControlled()) + { + %obj.setControlObject(%vehicle); + %obj.client.setObjectActiveImage(%vehicle, 2); + } + + //E3 respawn... + + if(%obj == %obj.lastVehicle.lastPilot && %obj.lastVehicle != %vehicle) + { + schedule(15000, %obj.lastVehicle,"vehicleAbandonTimeOut", %obj.lastVehicle); + %obj.lastVehicle.lastPilot = ""; + } + if(%vehicle.lastPilot !$= "" && %vehicle == %vehicle.lastPilot.lastVehicle) + %vehicle.lastPilot.lastVehicle = ""; + + %vehicle.abandon = false; + %vehicle.lastPilot = %obj; + %obj.lastVehicle = %vehicle; + + // update the vehicle's team + if((%vehicle.getTarget() != -1) && %vehicle.getDatablock().cantTeamSwitch $= "") + setTargetSensorGroup(%vehicle.getTarget(), %obj.client.getSensorGroup()); + + // Send a message to the client so they can decide if they want to change view or not: + commandToClient( %obj.client, 'VehicleMount' ); + + } + else + { + // tailgunner/passenger positions + if(%vehicle.getDataBlock().mountPose[%node] !$= "") + %obj.setActionThread(%vehicle.getDatablock().mountPose[%node]); + else + %obj.setActionThread("root", true); + } + // announce to any other passengers that you've boarded + if(%vehicle.getDatablock().numMountPoints > 1) + for(%i = 0; %i < %vehicle.getDatablock().numMountPoints; %i++) + if (%vehicle.getMountNodeObject(%i) > 0) + commandToClient(%pilot.client, 'showPassenger', %node, true); + + //make sure they don't have any packs active +// if ( %obj.getImageState( $BackpackSlot ) $= "activate") +// %obj.use("Backpack"); + if ( %obj.getImageTrigger( $BackpackSlot ) ) + %obj.setImageTrigger( $BackpackSlot, false ); + + //AI hooks + %obj.client.vehicleMounted = %vehicle; + AIVehicleMounted(%vehicle); + if(%obj.client.isAIControlled()) + %this.AIonMount(%obj, %vehicle, %node); +} + + +function Armor::onUnmount( %this, %obj, %vehicle, %node ) +{ + if ( %node == 0 ) + { + commandToClient( %obj.client, 'VehicleDismount' ); + %obj.mountImage(%obj.lastWeapon, $WeaponSlot); + } + // announce to any other passengers that you've left + if(%vehicle.getDatablock().numMountPoints > 1) + for(%i = 0; %i < %vehicle.getDatablock().numMountPoints; %i++) + if (%vehicle.getMountNodeObject(%i) > 0) + commandToClient(%vehicle.getMountNodeObject(%i).client, 'showPassenger', %node, false); + + //AI hooks + %obj.client.vehicleMounted = ""; + if(%obj.client.isAIControlled()) + %this.AIonUnMount(%obj, %vehicle, %node); +} + +$ammoType[0] = "PlasmaAmmo"; +$ammoType[1] = "DiscAmmo"; +$ammoType[2] = "GrenadeLauncherAmmo"; +$ammoType[3] = "MortarAmmo"; +$ammoType[4] = "MissileLauncherAmmo"; +$ammoType[5] = "ChaingunAmmo"; + +function Armor::onCollision(%this,%obj,%col) +{ + if (%obj.getState() $= "Dead") + return; + + %dataBlock = %col.getDataBlock(); + %className = %dataBlock.className; + %client = %obj.client; + // player collided with a vehicle + %node = -1; + if ((%className $= WheeledVehicleData || %className $= FlyingVehicleData || %className $= HoverVehicleData) && + %obj.mountVehicle && %obj.getState() $= "Move" && %col.mountable) { + + //if the player is an AI, he should snap to the mount points in node order, + //to ensure they mount the turret before the passenger seat, regardless of where they collide... + if (%obj.client.isAIControlled()) + { + %transform = %col.getTransform(); + + //either the AI is *required* to pilot, or they'll pick the first available passenger seat + if (%client.pilotVehicle) + { + //make sure the bot is in light armor + if (%client.player.getArmorSize() $= "Light") + { + //make sure the pilot seat is empty + if (!%col.getMountNodeObject(0)) + %node = 0; + } + } + else + %node = findAIEmptySeat(%col, %obj); + } + else + %node = findEmptySeat(%col, %obj); + + //now mount the player in the vehicle + if(%node >= 0) + { + // players can't be pilots, bombardiers or turreteers if they have + // "large" packs -- stations, turrets, turret barrels + if(hasLargePack(%obj)) { + // check to see if attempting to enter a "sitting" node + if(nodeIsSitting(%datablock, %node)) { + // send the player a message -- can't sit here with large pack + messageClient(%obj.client, 'MsgCantSitHere', '\c2Pack too large, can\'t occupy this seat.~wfx/misc/misc.error.wav'); + return; + } + } + if(%col.getDataBlock().noEnemyControl && %obj.team != %col.team) + return; + + commandToClient(%obj.client,'SetDefaultVehicleKeys', true); + //If pilot or passenger then bind a few extra keys + if(%node == 0) + commandToClient(%obj.client,'SetPilotVehicleKeys', true); + else + commandToClient(%obj.client,'SetPassengerVehicleKeys', true); + + %col.lastWeapon = %col.getMountedImage($WeaponSlot); + %col.mountObject(%obj,%node); + %col.playAudio(0, MountVehicleSound); + %obj.mVehicle = %col; + + // if player is repairing something, stop it + if(%obj.repairing) + stopRepairing(%obj); + + //this will setup the huds as well... + %dataBlock.playerMounted(%col,%obj, %node); + } + } + else if (%className $= "Armor") { + // player has collided with another player + if(%col.getState() $= "Dead") { + %gotSomething = false; + // it's corpse-looting time! + // weapons -- don't pick up more than you are allowed to carry! + for(%i = 0; ( %obj.weaponCount < %obj.getDatablock().maxWeapons ) && $InvWeapon[%i] !$= ""; %i++) + { + %weap = $NameToInv[$InvWeapon[%i]]; + if ( %col.hasInventory( %weap ) ) + { + if ( %obj.incInventory(%weap, 1) > 0 ) + { + %col.decInventory(%weap, 1); + %gotSomething = true; + messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', %weap.pickUpName); + } + } + } + // targeting laser: + if ( %col.hasInventory( "TargetingLaser" ) ) + { + if ( %obj.incInventory( "TargetingLaser", 1 ) > 0 ) + { + %col.decInventory( "TargetingLaser", 1 ); + %gotSomething = true; + messageClient( %obj.client, 'MsgItemPickup', '\c0You picked up a targeting laser.' ); + } + } + // ammo + for(%j = 0; $ammoType[%j] !$= ""; %j++) + { + %ammoAmt = %col.inv[$ammoType[%j]]; + if(%ammoAmt) + { + // incInventory returns the amount of stuff successfully grabbed + %grabAmt = %obj.incInventory($ammoType[%j], %ammoAmt); + if(%grabAmt > 0) + { + %col.decInventory($ammoType[%j], %grabAmt); + %gotSomething = true; + messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', $ammoType[%j].pickUpName); + %obj.client.setWeaponsHudAmmo($ammoType[%j], %obj.getInventory($ammoType[%j])); + } + } + } + // figure out what type, if any, grenades the (live) player has + %playerGrenType = "None"; + for(%x = 0; $InvGrenade[%x] !$= ""; %x++) { + %gren = $NameToInv[$InvGrenade[%x]]; + %playerGrenAmt = %obj.inv[%gren]; + if(%playerGrenAmt > 0) + { + %playerGrenType = %gren; + break; + } + } + // grenades + for(%k = 0; $InvGrenade[%k] !$= ""; %k++) + { + %gren = $NameToInv[$InvGrenade[%k]]; + %corpseGrenAmt = %col.inv[%gren]; + // does the corpse hold any of this grenade type? + if(%corpseGrenAmt) + { + // can the player pick up this grenade type? + if((%playerGrenType $= "None") || (%playerGrenType $= %gren)) + { + %taken = %obj.incInventory(%gren, %corpseGrenAmt); + if(%taken > 0) + { + %col.decInventory(%gren, %taken); + %gotSomething = true; + messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', %gren.pickUpName); + %obj.client.setInventoryHudAmount(%gren, %obj.getInventory(%gren)); + } + } + break; + } + } + // figure out what type, if any, mines the (live) player has + %playerMineType = "None"; + for(%y = 0; $InvMine[%y] !$= ""; %y++) + { + %mType = $NameToInv[$InvMine[%y]]; + %playerMineAmt = %obj.inv[%mType]; + if(%playerMineAmt > 0) + { + %playerMineType = %mType; + break; + } + } + // mines + for(%l = 0; $InvMine[%l] !$= ""; %l++) + { + %mine = $NameToInv[$InvMine[%l]]; + %mineAmt = %col.inv[%mine]; + if(%mineAmt) { + if((%playerMineType $= "None") || (%playerMineType $= %mine)) + { + %grabbed = %obj.incInventory(%mine, %mineAmt); + if(%grabbed > 0) + { + %col.decInventory(%mine, %grabbed); + %gotSomething = true; + messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', %mine.pickUpName); + %obj.client.setInventoryHudAmount(%mine, %obj.getInventory(%mine)); + } + } + break; + } + } + // beacons + %beacAmt = %col.inv[Beacon]; + if(%beacAmt) + { + %bTaken = %obj.incInventory(Beacon, %beacAmt); + if(%bTaken > 0) + { + %col.decInventory(Beacon, %bTaken); + %gotSomething = true; + messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', Beacon.pickUpName); + %obj.client.setInventoryHudAmount(Beacon, %obj.getInventory(Beacon)); + } + } + // repair kit + %rkAmt = %col.inv[RepairKit]; + if(%rkAmt) + { + %rkTaken = %obj.incInventory(RepairKit, %rkAmt); + if(%rkTaken > 0) + { + %col.decInventory(RepairKit, %rkTaken); + %gotSomething = true; + messageClient(%obj.client, 'MsgItemPickup', '\c0You picked up %1.', RepairKit.pickUpName); + %obj.client.setInventoryHudAmount(RepairKit, %obj.getInventory(RepairKit)); + } + } + } + if(%gotSomething) + %col.playAudio(0, CorpseLootingSound); + } +} + +function Player::setInvincible(%this, %val) +{ + %this.invincible = %val; +} + +function Player::causedRecentDamage(%this, %val) +{ + %this.causedRecentDamage = %val; +} + +function hasLargePack(%player) +{ + %pack = %player.getMountedImage($BackpackSlot); + if(%pack.isLarge) + return true; + else + return false; +} + +function nodeIsSitting(%vehDBlock, %node) +{ + // pilot == always a "sitting" node + if(%node == 0) + return true; + else { + switch$ (%vehDBlock.getName()) + { + // note: for assault tank -- both nodes are sitting + // for any single-user vehicle -- pilot node is sitting + case "BomberFlyer": + // bombardier == sitting; tailgunner == not sitting + if(%node == 1) + return true; + else + return false; + case "HAPCFlyer": + // only the pilot node is sitting + return false; + default: + return true; + } + } +} + +//---------------------------------------------------------------------------- +function Player::setMountVehicle(%this, %val) +{ + %this.mountVehicle = %val; +} + +function Armor::doDismount(%this, %obj, %forced) +{ + // This function is called by player.cc when the jump trigger + // is true while mounted + if (!%obj.isMounted()) + return; + + if(isObject(%obj.getObjectMount().shield)) + %obj.getObjectMount().shield.delete(); + + commandToClient(%obj.client,'SetDefaultVehicleKeys', false); + + // Position above dismount point + + %pos = getWords(%obj.getTransform(), 0, 2); + %oldPos = %pos; + %vec[0] = " 0 0 1"; + %vec[1] = " 0 0 1"; + %vec[2] = " 0 0 -1"; + %vec[3] = " 1 0 0"; + %vec[4] = "-1 0 0"; + %numAttempts = 5; + %success = -1; + %impulseVec = "0 0 0"; + if (%obj.getObjectMount().getDatablock().hasDismountOverrides() == true) + { + %vec[0] = %obj.getObjectMount().getDatablock().getDismountOverride(%obj.getObjectMount(), %obj); + %vec[0] = MatrixMulVector(%obj.getObjectMount().getTransform(), %vec[0]); + } + else + { + %vec[0] = MatrixMulVector( %obj.getTransform(), %vec[0]); + } + + %pos = "0 0 0"; + for (%i = 0; %i < %numAttempts; %i++) + { + %pos = VectorAdd(%oldPos, VectorScale(%vec[%i], 3)); + if (%obj.checkDismountPoint(%oldPos, %pos)) + { + %success = %i; + %impulseVec = %vec[%i]; + break; + } + } + if (%forced && %success == -1) + { + %pos = %oldPos; + } + + // hide the dashboard HUD and delete elements based on node + commandToClient(%obj.client, 'setHudMode', 'Standard', "", 0); + // Unmount and control body + if(%obj.vehicleTurret) + %obj.vehicleTurret.getDataBlock().playerDismount(%obj.vehicleTurret); + %obj.unmount(); + if(%obj.mVehicle) + %obj.mVehicle.getDataBlock().playerDismounted(%obj.mVehicle, %obj); + // bots don't change their control objects when in vehicles + if(!%obj.client.isAIControlled()) + { + %vehicle = %obj.getControlObject(); + %obj.setControlObject(0); + } + + %obj.mountVehicle = false; + %obj.schedule(4000, "setMountVehicle", true); + + // Position above dismount point + %obj.setTransform(%pos); + %obj.playAudio(0, UnmountVehicleSound); + %obj.applyImpulse(%pos, VectorScale(%impulseVec, %obj.getDataBlock().mass)); + %obj.setPilot(false); + %obj.vehicleTurret = ""; +} + + +//---------------------------------------------------------------------------- + +function Player::scriptKill(%player, %damageType) +{ + %player.scriptKilled = 1; + %player.setInvincible(false); + %player.damage(0, %player.getPosition(), 10000, %damageType); +} + +function Armor::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType, %momVec) +{ + if(%targetObject.invincible || %targetObject.getState() $= "Dead") + return; + + if (%targetObject.isMounted() && %targetObject.scriptKilled $= "") + { + %mount = %targetObject.getObjectMount(); + if(%mount.team == %targetObject.team) + { + %found = -1; + for (%i = 0; %i < %mount.getDataBlock().numMountPoints; %i++) + { + if (%mount.getMountNodeObject(%i) == %targetObject) + { + %found = %i; + break; + } + } + + if (%found != -1) + { + if (%mount.getDataBlock().isProtectedMountPoint[%found]) + { + %mount.getDataBlock().damageObject(%mount, %sourceObject, %position, %amount, %damageType); + return; + } + } + } + } + + %targetClient = %targetObject.getOwnerClient(); + %sourceClient = %sourceObject ? %sourceObject.getOwnerClient() : 0; + + %targetTeam = %targetClient.team; + + //if the source object is a player object, player's don't have sensor groups + // if it's a turret, get the sensor group of the target + if (%sourceClient) + %sourceTeam = %sourceClient.getSensorGroup(); + else if(%damageType == $DamageType::Suicide) + %sourceTeam = 0; + else if(isObject(%sourceObject) && %sourceObject.getClassName() $= "Turret") + %sourceTeam = getTargetSensorGroup(%sourceObject.getTarget()); + else + %sourceTeam = %sourceObject ? getTargetSensorGroup(%sourceObject.getTarget()) : -1; + // if teamdamage is off, and both parties are on the same team + // (but are not the same person), apply no damage + if(!$teamDamage && (%targetClient != %sourceClient) && (%targetTeam == %sourceTeam)) + return; + + if(%targetObject.isShielded && %damageType != $DamageType::Blaster) + %amount = %data.checkShields(%targetObject, %position, %amount, %damageType); + + if(%amount == 0) + return; + + // Set the damage flash + %damageScale = %data.damageScale[%damageType]; + if(%damageScale !$= "") + %amount *= %damageScale; + + %flash = %targetObject.getDamageFlash() + (%amount * 2); + if (%flash > 0.75) + %flash = 0.75; + + %previousDamage = %targetObject.getDamagePercent(); + %targetObject.setDamageFlash(%flash); + %targetObject.applyDamage(%amount); + Game.onClientDamaged(%targetClient, %sourceClient, %damageType, %sourceObject); + + %targetClient.lastDamagedBy = %damagingClient; + %targetClient.lastDamaged = getSimTime(); + + //now call the "onKilled" function if the client was... you know... + if(%targetObject.getState() $= "Dead") + { + // where did this guy get it? + %damLoc = %targetObject.getDamageLocation(%position); + +// if(%targetClient.race !$= "Bioderm") +// { +// // should this guy be blown apart? +// if( %damageType == $DamageType::Explosion || +// %damageType == $DamageType::TankMortar || +// %damageType == $DamageType::Mortar || +// %damageType == $DamageType::MortarTurret || +// %damageType == $DamageType::BomberBombs || +// %damageType == $DamageType::SatchelCharge ) +// { +// if( %previousDamage >= 0.35 ) // only if <= 35 percent damage remaining +// { +// %targetObject.setMomentumVector(%momVec); +// %targetObject.blowup(); +// } +// } +// } + + // this should be funny... +// if( %damageType == $DamageType::VehicleSpawn && %targetClient.race !$= "Bioderm" ) +// { +// %targetObject.setMomentumVector("0 0 1"); +// %targetObject.blowup(); +// } + + // If we were killed, max out the flash + %targetObject.setDamageFlash(0.75); + + %damLoc = %targetObject.getDamageLocation(%position); + Game.onClientKilled(%targetClient, %sourceClient, %damageType, %sourceObject, %damLoc); + } + else if ( %amount > 0.1 ) + { + if( %targetObject.station $= "" && %targetObject.isCloaked() ) + { + %targetObject.setCloaked( false ); + %targetObject.reCloak = %targetObject.schedule( 500, "setCloaked", true ); + } + + playPain( %targetObject ); + } +} + +function Armor::onImpact(%data, %playerObject, %collidedObject, %vec, %vecLen) +{ + %data.damageObject(%playerObject, 0, VectorAdd(%playerObject.getPosition(),%vec), + %vecLen * %data.speedDamageScale, $DamageType::Ground); +} + +function Armor::applyConcussion( %this, %dist, %radius, %sourceObject, %targetObject ) +{ + %percentage = 1 - ( %dist / %radius ); + %random = getRandom(); + + if( %sourceObject == %targetObject ) + { + %flagChance = 1.0; + %itemChance = 1.0; + } + else + { + %flagChance = 0.7; + %itemChance = 0.7; + } + + %probabilityFlag = %flagChance * %percentage; + %probabilityItem = %itemChance * %percentage; + + if( %random <= %probabilityFlag ) + { + Game.applyConcussion( %targetObject ); + } + + if( %random <= %probabilityItem ) + { + %player = %targetObject; + %numWeapons = 0; + + // blaster 0 + // plasma 1 + // chain 2 + // disc 3 + // grenade 4 + // snipe 5 + // elf 6 + // mortar 7 + + //get our inventory + if( %weaps[0] = %player.getInventory("Blaster") > 0 ) %numWeapons++; + if( %weaps[1] = %player.getInventory("Plasma") > 0 ) %numWeapons++; + if( %weaps[2] = %player.getInventory("Chaingun") > 0 ) %numWeapons++; + if( %weaps[3] = %player.getInventory("Disc") > 0 ) %numWeapons++; + if( %weaps[4] = %player.getInventory("GrenadeLauncher") > 0 ) %numWeapons++; + if( %weaps[5] = %player.getInventory("SniperRifle") > 0 ) %numWeapons++; + if( %weaps[6] = %player.getInventory("ELFGun") > 0 ) %numWeapons++; + if( %weaps[7] = %player.getInventory("Mortar") > 0 ) %numWeapons++; + + %foundWeapon = false; + %attempts = 0; + + if( %numWeapons > 0 ) + { + while( !%foundWeapon ) + { + %rand = mFloor( getRandom() * 8 ); + if( %weaps[ %rand ] ) + { + %foundWeapon = true; + + switch ( %rand ) + { + case 0: + %player.use("Blaster"); + case 1: + %player.use("Plasma"); + case 2: + %player.use("Chaingun"); + case 3: + %player.use("Disc"); + case 4: + %player.use("GrenadeLauncher"); + case 5: + %player.use("SniperRifle"); + case 6: + %player.use("ElfGun"); + case 7: + %player.use("Mortar"); + } + + %image = %player.getMountedImage( $WeaponSlot ); + %player.throw( %image.item ); + %player.client.setWeaponsHudItem( %image.item, 0, 0 ); + %player.throwPack(); + } + else + { + %attempts++; + if( %attempts > 10 ) + %foundWeapon = true; + } + } + } + else + { + %targetObject.throwPack(); + %targetObject.throwWeapon(); + } + } +} + +//---------------------------------------------------------------------------- + +$DeathCry[1] = 'avo.deathCry_01'; +$DeathCry[2] = 'avo.deathCry_02'; +$PainCry[1] = 'avo.grunt'; +$PainCry[2] = 'avo.pain'; + +function playDeathCry( %obj ) +{ + %client = %obj.client; + %random = getRandom(1) + 1; + %desc = AudioClosest3d; + + playTargetAudio( %client.target, $DeathCry[%random], %desc, false ); +} + +function playPain( %obj ) +{ + %client = %obj.client; + %random = getRandom(1) + 1; + %desc = AudioClosest3d; + + playTargetAudio( %client.target, $PainCry[%random], %desc, false); +} + +//---------------------------------------------------------------------------- + +//$DefaultPlayerArmor = LightMaleHumanArmor; +$DefaultPlayerArmor = Light; + +function Player::setArmor(%this,%size) +{ + // Takes size as "Light","Medium", "Heavy" + %client = %this.client; + if (%client.race $= "Bioderm") + // Only have male bioderms. + %armor = %size @ "Male" @ %client.race @ Armor; + else + %armor = %size @ %client.sex @ %client.race @ Armor; + //echo("Player::armor: " @ %armor); + %this.setDataBlock(%armor); + %client.armor = %size; +} + +function getDamagePercent(%maxDmg, %dmgLvl) +{ + return (%dmgLvl / %maxDmg); +} + +function Player::getArmorSize(%this) +{ + // return size as "Light","Medium", "Heavy" + %dataBlock = %this.getDataBlock().getName(); + if (getSubStr(%dataBlock, 0, 5) $= "Light") + return "Light"; + else if (getSubStr(%dataBlock, 0, 6) $= "Medium") + return "Medium"; + else if (getSubStr(%dataBlock, 0, 5) $= "Heavy") + return "Heavy"; + else + return "Unknown"; +} + +function Player::pickup(%this,%obj,%amount) +{ + %data = %obj.getDataBlock(); + // Don't pick up a pack if we already have one mounted + if (%data.className $= Pack && + %this.getMountedImage($BackpackSlot) != 0) + return 0; + // don't pick up a weapon (other than targeting laser) if player's at maxWeapons + else if(%data.className $= Weapon + && %data.getName() !$= "TargetingLaser" // Special case + && %this.weaponCount >= %this.getDatablock().maxWeapons) + return 0; + // don't allow players to throw large packs at pilots (thanks Wizard) + else if(%data.className $= Pack && %data.image.isLarge && %this.isPilot()) + return 0; + return ShapeBase::pickup(%this,%obj,%amount); +} + +function Player::use( %this,%data ) +{ + // If player is in a station then he can't use any items + if(%this.station !$= "") + return false; + + // Convert the word "Backpack" to whatever is in the backpack slot. + if ( %data $= "Backpack" ) + { + if ( %this.inStation ) + return false; + + if ( %this.isPilot() ) + { + messageClient( %this.client, 'MsgCantUsePack', '\c2You can\'t use your pack while piloting.~wfx/misc/misc.error.wav' ); + return( false ); + } + else if ( %this.isWeaponOperator() ) + { + messageClient( %this.client, 'MsgCantUsePack', '\c2You can\'t use your pack while in a weaponry position.~wfx/misc/misc.error.wav' ); + return( false ); + } + + %image = %this.getMountedImage( $BackpackSlot ); + if ( %image ) + %data = %image.item; + } + + // Can't use some items when piloting or your a weapon operator + if ( %this.isPilot() || %this.isWeaponOperator() ) + if ( %data.getName() !$= "RepairKit" ) + return false; + + return ShapeBase::use( %this, %data ); +} + +function Player::maxInventory(%this,%data) +{ + %max = ShapeBase::maxInventory(%this,%data); + if (%this.getInventory(AmmoPack)) + %max += AmmoPack.max[%data.getName()]; + return %max; +} + +function Player::isPilot(%this) +{ + %vehicle = %this.getObjectMount(); + // There are two "if" statements to avoid a script warning. + if (%vehicle) + if (%vehicle.getMountNodeObject(0) == %this) + return true; + return false; +} + +function Player::isWeaponOperator(%this) +{ + %vehicle = %this.getObjectMount(); + if ( %vehicle ) + { + %weaponNode = %vehicle.getDatablock().weaponNode; + if ( %weaponNode > 0 && %vehicle.getMountNodeObject( %weaponNode ) == %this ) + return( true ); + } + + return( false ); +} + +function Player::liquidDamage(%obj, %data, %damageAmount, %damageType) +{ + if(%obj.getState() !$= "Dead") + { + %data.damageObject(%obj, 0, "0 0 0", %damageAmount, %damageType); + %obj.lDamageSchedule = %obj.schedule(50, "liquidDamage", %data, %damageAmount, %damageType); + } + else + %obj.lDamageSchedule = ""; +} + +function Armor::onEnterLiquid(%data, %obj, %coverage, %type) +{ + switch(%type) + { + case 0: + //Water + case 1: + //Ocean Water + case 2: + //River Water + case 3: + //Stagnant Water + case 4: + //Lava + %obj.liquidDamage(%data, $DamageLava, $DamageType::Lava); + case 5: + //Hot Lava + %obj.liquidDamage(%data, $DamageHotLava, $DamageType::Lava); + case 6: + //Crusty Lava + %obj.liquidDamage(%data, $DamageCrustyLava, $DamageType::Lava); + case 7: + //Quick Sand + } +} + +function Armor::onLeaveLiquid(%data, %obj, %type) +{ + switch(%type) + { + case 0: + //Water + case 1: + //Ocean Water + case 2: + //River Water + case 3: + //Stagnant Water + case 4: + //Lava + case 5: + //Hot Lava + case 6: + //Crusty Lava + case 7: + //Quick Sand + } + + if(%obj.lDamageSchedule !$= "") + { + cancel(%obj.lDamageSchedule); + %obj.lDamageSchedule = ""; + } +} + +function Armor::onTrigger(%data, %player, %triggerNum, %val) +{ + if (%triggerNum == 4) + { + // Throw grenade + if (%val == 1) + { + %player.grenTimer = 1; + } + else + { + if (%player.grenTimer == 0) + { + // Bad throw for some reason + } + else + { + %player.use(Grenade); + %player.grenTimer = 0; + } + } + } + else if (%triggerNum == 5) + { + // Throw mine + if (%val == 1) + { + %player.mineTimer = 1; + } + else + { + if (%player.mineTimer == 0) + { + // Bad throw for some reason + } + else + { + %player.use(Mine); + %player.mineTimer = 0; + } + } + } + else if (%triggerNum == 3) + { + // val = 1 when jet key (LMB) first pressed down + // val = 0 when jet key released + // MES - do we need this at all any more? + if(%val == 1) + %player.isJetting = true; + else + %player.isJetting = false; + } +} + +function Player::setMoveState(%obj, %move) +{ + %obj.disableMove(%move); +} + +function Armor::onLeaveMissionArea(%data, %obj) +{ + Game.leaveMissionArea(%data, %obj); +} + +function Armor::onEnterMissionArea(%data, %obj) +{ + Game.enterMissionArea(%data, %obj); +} + +function Armor::animationDone(%data, %obj) +{ + if(%obj.animResetWeapon !$= "") + { + if(%obj.getMountedImage($WeaponSlot) == 0) + if(%obj.inv[%obj.lastWeapon]) + %obj.use(%obj.lastWeapon); + %obj.animSetWeapon = ""; + } +} + +function playDeathAnimation(%player, %damageLocation, %type) +{ + %vertPos = firstWord(%damageLocation); + %quadrant = getWord(%damageLocation, 1); + + //echo("vert Pos: " @ %vertPos); + //echo("quad: " @ %quadrant); + + if( %type == $DamageType::Explosion || %type == $DamageType::Mortar || %type == $DamageType::Grenade) + { + if(%quadrant $= "front_left" || %quadrant $= "front_right") + %curDie = $PlayerDeathAnim::ExplosionBlowBack; + else + %curDie = $PlayerDeathAnim::TorsoBackFallForward; + } + else if(%vertPos $= "head") + { + if(%quadrant $= "front_left" || %quadrant $= "front_right" ) + %curDie = $PlayerDeathAnim::HeadFrontDirect; + else + %curDie = $PlayerDeathAnim::HeadBackFallForward; + } + else if(%vertPos $= "torso") + { + if(%quadrant $= "front_left" ) + %curDie = $PlayerDeathAnim::TorsoLeftSpinDeath; + else if(%quadrant $= "front_right") + %curDie = $PlayerDeathAnim::TorsoRightSpinDeath; + else if(%quadrant $= "back_left" ) + %curDie = $PlayerDeathAnim::TorsoBackFallForward; + else if(%quadrant $= "back_right") + %curDie = $PlayerDeathAnim::TorsoBackFallForward; + } + else if (%vertPos $= "legs") + { + if(%quadrant $= "front_left" || %quadrant $= "back_left") + %curDie = $PlayerDeathAnim::LegsLeftGimp; + if(%quadrant $= "front_right" || %quadrant $= "back_right") + %curDie = $PlayerDeathAnim::LegsRightGimp; + } + + if(%curDie $= "" || %curDie < 1 || %curDie > 11) + %curDie = 1; + + %player.setActionThread("Death" @ %curDie); +} + +function Armor::onDamage(%data, %obj) +{ + if(%obj.station !$= "" && %obj.getDamageLevel() == 0) + %obj.station.getDataBlock().endRepairing(%obj.station); +} \ No newline at end of file diff --git a/base/scripts/power.cs b/base/scripts/power.cs new file mode 100644 index 0000000..d335bea --- /dev/null +++ b/base/scripts/power.cs @@ -0,0 +1,176 @@ +$PowerThread = 0; +$AmbientThread = 1; +$ActivateThread = 2; +$DeployThread = 3; + +$HumSound = 0; +$ActivateSound = 1; +$DeploySound = 2; +//****************************************************************************** +//* Power -Audio- Data Blocks * +//****************************************************************************** + +datablock AudioProfile(BasePowerOn) +{ + filename = "fx/powered/base_power_on.wav"; + description = Audio2D; + preload = true; +}; + +datablock AudioProfile(BasePowerOff) +{ + filename = "fx/powered/base_power_off.wav"; + description = Audio2D; + preload = true; +}; + +datablock AudioProfile(BasePowerHum) +{ + filename = "fx/powered/base_power_loop.wav"; + description = AudioLooping2D; + preload = true; +}; + +//****************************************************************************** +//* Power - Functions * +//****************************************************************************** + +function GameBase::clearPower(%this) +{ +} + +function SimGroup::clearPower(%this) +{ + %this.powerCount = 0; + for (%i = 0; %i < %this.getCount(); %i++) + { + %obj = %this.getObject(%i); + if(%obj.getType() & $TypeMasks::GameBaseObjectType) + %obj.clearPower(); + } +} + +function SimObject::powerInit(%this, %powerCount) +{ + //function declared to reduce console error msg spam +} + +function SimGroup::powerInit(%this, %powerCount) +{ + if(%this.providesPower) + %powerCount++; + + %count = %this.getCount(); + for (%i = 0; %i < %count; %i++) + { + %obj = %this.getObject(%i); + if(%obj.getType() & $TypeMasks::GameBaseObjectType) + { + if(%obj.getDatablock().isPowering(%obj)) + %powerCount++; + } + } + %this.powerCount = %powerCount; + for (%i = 0; %i < %this.getCount(); %i++) + { + %obj = %this.getObject(%i); + %obj.powerInit(%powerCount); + } +} + +function GameBase::powerInit(%this, %powerCount) +{ + if(%powerCount) + %this.getDatablock().gainPower(%this); + else + %this.getDataBlock().losePower(%this); +} + +function SimObject::isPowering(%data, %obj) +{ + return false; +} + +function Generator::isPowering(%data, %obj) +{ + return !%obj.isDisabled(); +} + +function SimObject::updatePowerCount() +{ +} + +function SimObject::powerCheck() +{ +} + + +function SimGroup::updatePowerCount(%this, %value) +{ + if(%this.powerCount > 0 || %value > 0) + %this.powerCount += %value; + for (%i = 0; %i < %this.getCount(); %i++) + { + %this.getObject(%i).updatePowerCount(%value); + } + for (%i = 0; %i < %this.getCount(); %i++) + %this.getObject(%i).powerCheck(%this.powerCount); +} + +function GameBaseData::gainPower(%data, %obj) +{ +} + +function GameBaseData::losePower(%data, %obj) +{ +} + +function InteriorInstance::powerCheck(%this, %powerCount) +{ + if(%powerCount > 0) + %mode = "Off"; + else + %mode = "On"; + %this.setAlarmMode(%mode); +} + +function GameBase::powerCheck(%this, %powerCount) +{ + if(%powerCount || %this.selfPower) + %this.getDatablock().gainPower(%this); + else + %this.getDatablock().losePower(%this); +} + +function GameBase::incPowerCount(%this) +{ + %this.getGroup().updatePowerCount(1); +} + +function GameBase::decPowerCount(%this) +{ + %this.getGroup().updatePowerCount(-1); +} + +function GameBase::setSelfPowered(%this) +{ + if(!%this.isPowered()) + { + %this.selfPower = true; + %this.getDataBlock().gainPower(%this); + } + else + %this.selfPower = true; +} + +function GameBase::clearSelfPowered(%this) +{ + %this.selfPower = ""; + if(!%this.isPowered()) + %this.getDataBlock().losePower(%this); +} + +function GameBase::isPowered(%this) +{ + return %this.selfPower || %this.getGroup().powerCount > 0; +} diff --git a/base/scripts/projectiles.cs b/base/scripts/projectiles.cs new file mode 100644 index 0000000..1bdcded --- /dev/null +++ b/base/scripts/projectiles.cs @@ -0,0 +1,556 @@ +//-------------------------------------------------------------------------- +// Projectiles.cs: Note that the actual projectile blocks are stored with +// with weapon that uses them in base/scripts/weapons/*.cs, +// the blocks below are only to illustrate the default values +// for each block type. Also, ProjectileData cannot be used +// as a concrete datablock type. +// Inheritance: +// ProjectileData : GameBaseData +// LinearProjectileData : ProjectileData +// LinearFlareProjectileData : LinearProjectileData +// GrenadeProjectileData : ProjectileData +// SeekerProjectileData : ProjectileData +// SniperProjectileData : ProjectileData +// +//-------------------------------------------------------------------------- +//-------------------------------------- Default functions +// +function ProjectileData::onCollision(%data, %projectile, %targetObject, %modifier, %position, %normal) +{ + %targetObject.damage(%projectile.sourceObject, %position, %data.directDamage * %modifier, %data.directDamageType); +} + +function SniperProjectileData::onCollision(%data, %projectile, %targetObject, %modifier, %position, %normal) +{ + %damageAmount = %data.directDamage * %projectile.damageFactor; + + if(%targetObject.getDataBlock().getClassName() $= "PlayerData") + { + %damLoc = firstWord(%targetObject.getDamageLocation(%position)); + if(%damLoc $= "head") + { + %targetObject.getOwnerClient().headShot = 1; + %modifier = %data.rifleHeadMultiplier; + } + else + { + %modifier = 1; + %targetObject.getOwnerClient().headShot = 0; + } + } + %targetObject.damage(%projectile.sourceObject, %position, %modifier * %damageAmount, %data.directDamageType); +} + +function TurretImageData::onFire( %data, %obj, %slot ) +{ + if( %data.muzzleFlash !$= "" ) + { + %flash = new Shockwave() + { + dataBlock = %data.muzzleFlash; + pos = %obj.getMuzzlePoint(%slot); + normal = %obj.getMuzzleVector(%slot); + }; + } + + Parent::onFire( %data, %obj, %slot ); +} + +function ShapeBaseImageData::onFire(%data, %obj, %slot) +{ + %data.lightStart = getSimTime(); + + if( %obj.station $= "" && %obj.isCloaked() ) + { + if( %obj.respawnCloakThread !$= "" ) + { + Cancel(%obj.respawnCloakThread); + %obj.setCloaked( false ); + %obj.respawnCloakThread = ""; + } + else + { + if( %obj.getEnergyLevel() > 20 ) + { + %obj.setCloaked( false ); + %obj.reCloak = %obj.schedule( 500, "setCloaked", true ); + } + } + } + + %vehicle = 0; + if(%data.usesEnergy) + { + if(%data.useMountEnergy) + { + %useEnergyObj = %obj.getObjectMount(); + if(!%useEnergyObj) + %useEnergyObj = %obj; + %energy = %useEnergyObj.getEnergyLevel(); + %vehicle = %useEnergyObj; + } + else + %energy = %obj.getEnergyLevel(); + if(%energy < %data.minEnergy) + return; + } + if(%data.projectileSpread) + { + %vector = %obj.getMuzzleVector(%slot); + %x = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread; + %y = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread; + %z = (getRandom() - 0.5) * 2 * 3.1415926 * %data.projectileSpread; + %mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z); + %vector = MatrixMulVector(%mat, %vector); + + %p = new (%data.projectileType)() { + dataBlock = %data.projectile; + initialDirection = %vector; + initialPosition = %obj.getMuzzlePoint(%slot); + sourceObject = %obj; + sourceSlot = %slot; + vehicleObject = %vehicle; + }; + } + else + { + %p = new (%data.projectileType)() { + dataBlock = %data.projectile; + initialDirection = %obj.getMuzzleVector(%slot); + initialPosition = %obj.getMuzzlePoint(%slot); + sourceObject = %obj; + sourceSlot = %slot; + vehicleObject = %vehicle; + }; + } + if (%data.deleteLastProjectile && isObject(%obj.lastProjectile)) + %obj.lastProjectile.delete(); + %obj.lastProjectile = %p; + MissionCleanup.add(%p); + + // AI hook + if(%obj.client) + %obj.client.projectile = %p; + + if(%data.usesEnergy) + { + if(%data.useMountEnergy) + %useEnergyObj.setEnergyLevel(%energy - %data.fireEnergy); + else + %obj.setEnergyLevel(%energy - %data.fireEnergy); + } + else + %obj.decInventory(%data.ammo,1); + return %p; +} + +function ShapeBaseImageData::onUnmount(%data, %obj, %slot) +{ + if (%data.deleteLastProjectile && isObject(%obj.lastProjectile)) + { + %obj.lastProjectile.delete(); + %obj.lastProjectile = ""; + } +} + +function TurretImageData::deconstruct(%data, %obj, %slot) +{ + if (%data.deleteLastProjectile && isObject(%obj.lastProjectile)) + { + %obj.lastProjectile.delete(); + %obj.lastProjectile = ""; + } +} + +function ShapeBaseImageData::deconstruct(%data, %obj, %slot) +{ + if (%data.deleteLastProjectile && isObject(%obj.lastProjectile)) + { + %obj.lastProjectile.delete(); + %obj.lastProjectile = ""; + } +} + +function MissileLauncherImage::onFire(%data,%obj,%slot) +{ + %p = Parent::onFire(%data, %obj, %slot); + MissileSet.add(%p); + + %target = %obj.getLockedTarget(); + if(%target) + %p.setObjectTarget(%target); + else if(%obj.isLocked()) + %p.setPositionTarget(%obj.getLockedPosition()); + else + %p.setNoTarget(); +} + +function MissileLauncherImage::onWetFire(%data, %obj, %slot) +{ + %p = Parent::onFire(%data, %obj, %slot); + MissileSet.add(%p); + + %p.setObjectTarget(0); +} + +//-------------------------------------------------------------------------- + +function MissileBarrelLarge::onFire(%data,%obj,%slot) +{ + %p = Parent::onFire(%data,%obj,%slot); + + if (%obj.getControllingClient()) + { + // a player is controlling the turret + %target = %obj.getLockedTarget(); + } + else + { + // The ai is controlling the turret + %target = %obj.getTargetObject(); + } + + if(%target) + %p.setObjectTarget(%target); + else if(%obj.isLocked()) + %p.setPositionTarget(%obj.getLockedPosition()); + else + %p.setNoTarget(); // set as unguided. Only happens when itchy trigger can't wait for lock tone. +} + +//add mortars to the "grenade set" so the AI's can avoid them better... +function MortarImage::onFire(%data,%obj,%slot) +{ + %p = Parent::onFire(%data, %obj, %slot); + AIGrenadeThrown(%p); +} + +function SniperRifleImage::onFire(%data,%obj,%slot) +{ + if(!%obj.hasEnergyPack) + { + // siddown Junior, you can't use it + serverPlay3D(SniperRifleDryFireSound, %obj.getTransform()); + return; + } + + %pct = %obj.getEnergyLevel() / %obj.getDataBlock().maxEnergy; + %p = new (%data.projectileType)() { + dataBlock = %data.projectile; + initialDirection = %obj.getMuzzleVector(%slot); + initialPosition = %obj.getMuzzlePoint(%slot); + sourceObject = %obj; + damageFactor = %pct * %pct; + sourceSlot = %slot; + }; + %p.setEnergyPercentage(%pct); + + %obj.lastProjectile = %p; + MissionCleanup.add(%p); + serverPlay3D(SniperRifleFireSound, %obj.getTransform()); + + // AI hook + if(%obj.client) + %obj.client.projectile = %p; + + %obj.setEnergyLevel(0); +} + +function ElfGunImage::onFire(%data, %obj, %slot) +{ + %p = Parent::onFire(%data, %obj, %slot); + + if(!%p.hasTarget()) + %obj.playAudio(0, ELFFireWetSound); +} + +function TargetingLaserImage::onFire(%data,%obj,%slot) +{ + %p = Parent::onFire(%data, %obj, %slot); + %p.setTarget(%obj.team); +} + +function ShockLanceImage::onFire(%this, %obj, %slot) +{ + if( %obj.isCloaked() ) + { + if( %obj.respawnCloakThread !$= "" ) + { + Cancel(%obj.respawnCloakThread); + %obj.setCloaked( false ); + } + else + { + if( %obj.getEnergyLevel() > 20 ) + { + %obj.setCloaked( false ); + %obj.reCloak = %obj.schedule( 500, "setCloaked", true ); + } + } + } + + %muzzlePos = %obj.getMuzzlePoint(%slot); + %muzzleVec = %obj.getMuzzleVector(%slot); + + %endPos = VectorAdd(%muzzlePos, VectorScale(%muzzleVec, %this.projectile.extension)); + + %damageMasks = $TypeMasks::PlayerObjectType | $TypeMasks::VehicleObjectType | + $TypeMasks::StationObjectType | $TypeMasks::GeneratorObjectType | + $TypeMasks::SensorObjectType | $TypeMasks::TurretObjectType; + + %everythingElseMask = $TypeMasks::TerrainObjectType | + $TypeMasks::InteriorObjectType | + $TypeMasks::ForceFieldObjectType | + $TypeMasks::StaticObjectType | + $TypeMasks::MoveableObjectType | + $TypeMasks::PathedObjectType | + $TypeMasks::DamagableItemObjectType; + + // did I miss anything? players, vehicles, stations, gens, sensors, turrets + %hit = ContainerRayCast(%muzzlePos, %endPos, %damageMasks | %everythingElseMask, %obj); + + %noDisplay = true; + + if (%hit !$= "0") + { + %obj.setEnergyLevel(%obj.getEnergyLevel() - %this.hitEnergy); + + %hitobj = getWord(%hit, 0); + %hitpos = getWord(%hit, 1) @ " " @ getWord(%hit, 2) @ " " @ getWord(%hit, 3); + + if ( %hitObj.getType() & %damageMasks ) + { + %hitobj.applyImpulse(%hitpos, VectorScale(%muzzleVec, %this.projectile.impulse)); + %obj.playAudio(0, ShockLanceHitSound); + + // This is truly lame, but we need the sourceobject property present... + %p = new ShockLanceProjectile() { + dataBlock = %this.projectile; + initialDirection = %obj.getMuzzleVector(%slot); + initialPosition = %obj.getMuzzlePoint(%slot); + sourceObject = %obj; + sourceSlot = %slot; + targetId = %hit; + }; + MissionCleanup.add(%p); + + %damageMultiplier = 1.0; + + if(%hitObj.getDataBlock().getClassName() $= "PlayerData") + { + // Now we see if we hit from behind... + %eyeVector = %hitobj.getEyeVector(); + + %eyeXForm = %hitobj.getEyeTransform(); + %eyePos = getWord(%eyeXForm, 0) @ " " @ getWord(%eyeXForm, 1) @ " " @ getWord(%eyeXForm, 2); + %dif = VectorSub(%eyePos, %muzzlePos); + %dif = getWord(%dif, 0) @ " " @ getWord(%dif, 1) @ " 0"; + %dif = VectorNormalize(%dif); + %eyeVector = getWord(%eyeVector, 0) @ " " @ getWord(%eyeVector, 1) @ " 0"; + %dot = VectorDot(%dif, %eyeVector); + + // 120 Deg angle test... + if (%dot > mCos(1.05)) { + // Rear hit + %damageMultiplier = 3.0; + } + } + + %totalDamage = %this.Projectile.DirectDamage * %damageMultiplier; + %hitObj.getDataBlock().damageObject(%hitobj, %p.sourceObject, %hitpos, %totalDamage, $DamageType::ShockLance); + + %noDisplay = false; + } + } + + if( %noDisplay ) + { + // Miss + %obj.setEnergyLevel(%obj.getEnergyLevel() - %this.missEnergy); + %obj.playAudio(0, ShockLanceMissSound); + + %p = new ShockLanceProjectile() { + dataBlock = %this.projectile; + initialDirection = %obj.getMuzzleVector(%slot); + initialPosition = %obj.getMuzzlePoint(%slot); + sourceObject = %obj; + sourceSlot = %slot; + }; + MissionCleanup.add(%p); + + } +} + +$ELFZapSound = 2; +$ELFFireSound = 3; + +function ELFProjectileData::zapTarget(%data, %projectile, %target, %targeter) +{ + %oldERate = %target.getRechargeRate(); + %target.setRechargeRate(%oldERate - %data.drainEnergy); + %projectile.checkELFStatus(%data, %target, %targeter); +} + +function ELFProjectileData::unzapTarget(%data, %projectile, %target, %targeter) +{ + cancel(%projectile.ELFrecur); + %target.stopAudio($ELFZapSound); + %targeter.stopAudio($ELFFireSound); + %target.zapSound = false; + %targeter.zappingSound = false; + if(!%target.isDisabled()) + { + %oldERate = %target.getRechargeRate(); + %target.setRechargeRate(%oldERate + %data.drainEnergy); + } +} + +function ELFProjectile::checkELFStatus(%this, %data, %target, %targeter) +{ + if(isObject(%target)) + { + %enLevel = %target.getEnergyLevel(); + if(%enLevel < 1.0) + { + %dataBlock = %target.getDataBlock(); + %dataBlock.damageObject(%target, %this.sourceObject, %target.getPosition(), %data.drainHealth, %data.directDamageType); + + } + else + { + %normal = "0.0 0.0 1.0"; + %target.playShieldEffect( %normal ); + } + %this.ELFrecur = %this.schedule(32, checkELFStatus, %data, %target, %targeter); + + %targeter.playAudio($ELFFireSound, ELFGunFireSound); + if(!%target.zapSound) + { + %target.playAudio($ELFZapSound, ELFHitTargetSound); + %target.zapSound = true; + %targeter.zappingSound = true; + } + } + else if(%targeter.zappingSound) + { + %targeter.stopAudio($ELFFireSound); + %targeter.zappingSound = false; + } +} + + +function RadiusExplosion(%explosionSource, %position, %radius, %damage, %impulse, %sourceObject, %damageType) +{ + InitContainerRadiusSearch(%position, %radius, $TypeMasks::PlayerObjectType | + $TypeMasks::VehicleObjectType | + $TypeMasks::MoveableObjectType | + $TypeMasks::StaticShapeObjectType | + $TypeMasks::ForceFieldObjectType | + $TypeMasks::TurretObjectType | + $TypeMasks::ItemObjectType); + + %numTargets = 0; + while ((%targetObject = containerSearchNext()) != 0) + { + %dist = containerSearchCurrRadDamageDist(); + + if (%dist > %radius) + continue; + + if (%targetObject.isMounted()) + { + %mount = %targetObject.getObjectMount(); + %found = -1; + for (%i = 0; %i < %mount.getDataBlock().numMountPoints; %i++) + { + if (%mount.getMountNodeObject(%i) == %targetObject) + { + %found = %i; + break; + } + } + + if (%found != -1) + { + if (%mount.getDataBlock().isProtectedMountPoint[%found]) + { + continue; + } + } + } + + %targets[%numTargets] = %targetObject; + %targetDists[%numTargets] = %dist; + %numTargets++; + } + + for (%i = 0; %i < %numTargets; %i++) + { + %targetObject = %targets[%i]; + %dist = %targetDists[%i]; + + %coverage = calcExplosionCoverage(%position, %targetObject, + ($TypeMasks::InteriorObjectType | + $TypeMasks::TerrainObjectType | + $TypeMasks::ForceFieldObjectType | + $TypeMasks::VehicleObjectType)); + if (%coverage == 0) + continue; + + %amount = (1.0 - (%dist / %radius)) * %coverage * %damage; + %data = %targetObject.getDataBlock(); + %className = %data.className; + + if (%impulse && %data.shouldApplyImpulse(%targetObject)) + { + %p = %targetObject.getWorldBoxCenter(); + %momVec = VectorSub(%p, %position); + %momVec = VectorNormalize(%momVec); + %impulseVec = VectorScale(%momVec, %impulse * (1.0 - (%dist / %radius))); + %doImpulse = true; + } + else if( %className $= WheeledVehicleData || %className $= FlyingVehicleData || %className $= HoverVehicleData ) + { + %p = %targetObject.getWorldBoxCenter(); + %momVec = VectorSub(%p, %position); + %momVec = VectorNormalize(%momVec); + + %impulseVec = VectorScale(%momVec, %impulse * (1.0 - (%dist / %radius))); + + if( getWord( %momVec, 2 ) < -0.5 ) + %momVec = "0 0 1"; + + // Add obj's velocity into the momentum vector + %velocity = %targetObject.getVelocity(); + //%momVec = VectorNormalize( vectorAdd( %momVec, %velocity) ); + %doImpulse = true; + } + else + { + %momVec = "0 0 1"; + %doImpulse = false; + } + + if(%amount > 0) + %data.damageObject(%targetObject, %sourceObject, %position, %amount, %damageType, %momVec); + else if( %explosionSource.getDataBlock().getName() $= "ConcussionGrenadeThrown" && %data.getClassName() $= "PlayerData" ) + %data.applyConcussion( %dist, %radius, %sourceObject, %targetObject ); + + if( %doImpulse ) + %targetObject.applyImpulse(%position, %impulseVec); + } +} + +function ProjectileData::onExplode(%data, %proj, %pos, %mod) +{ + if (%data.hasDamageRadius) + RadiusExplosion(%proj, %pos, %data.damageRadius, %data.indirectDamage, %data.kickBackStrength, %proj.sourceObject, %data.radiusDamageType); +} + +function Flag::shouldApplyImpulse(%data, %obj) +{ + if(%obj.isHome) + return false; + else + return true; +} diff --git a/base/scripts/recordings.cs b/base/scripts/recordings.cs new file mode 100644 index 0000000..da91508 --- /dev/null +++ b/base/scripts/recordings.cs @@ -0,0 +1,73 @@ +function RecordingsDlg::onWake(%gui) +{ + RecordingsDlgList.clear(); + %search = "recordings/*.rec"; + %ct = 0; + for(%file = findFirstFile(%search); %file !$= ""; %file = findNextFile(%search)) + { + %fileName = fileBase(%file); + RecordingsDlgList.addRow(%ct++, %fileName); + } + RecordingsDlgList.sort(0); + + if ( RecordingsDlgList.rowCount() == 0 ) + { + PR_StartDemoBtn.setActive( false ); + PR_CancelBtn.makeFirstResponder( 1 ); + } + else + { + RecordingsDlgList.setSelectedById( 1 ); + PR_StartDemoBtn.setActive( true ); + PR_StartDemoBtn.makeFirstResponder( 1 ); + } +} + +function StartSelectedDemo() +{ + %sel = RecordingsDlgList.getSelectedId(); + %file = RecordingsDlgList.getRowTextById(%sel); + playDemo("recordings/" @ %file @ ".rec"); + Canvas.setContent(PlayGui); +} + +function LoopDemos() +{ + $demoCount = 0; + + for($demoFile[$demoCount] = findFirstFile("recordings/*.rec"); $demoFile[$demoCount] !$= ""; $demoFile[$demoCount++] = findNextFile("recordings/*.rec") ) + { + } + $currentDemo = $demoCount - 1; + if($demoCount == 0) + return; + + demoPlaybackComplete(); +} + +function beginDemoRecord() +{ + stopRecord(); + for(%i = 0; %i < 1000; %i++) + { + %num = %i; + if(%num < 10) + %num = "0" @ %num; + if(%num < 100) + %num = "0" @ %num; + %file = "recordings/demo" @ %num @ ".rec"; + if(!isfile(%file)) + break; + } + if(%i == 1000) + return; + echo("Recording demo: "@ %file); + startRecord(%file); +} + +function demoPlaybackComplete() +{ + Canvas.setContent("LaunchGui"); + Canvas.pushDialog(RecordingsDlg); + purgeResources(); +} diff --git a/base/scripts/redbook.cs b/base/scripts/redbook.cs new file mode 100644 index 0000000..e66161b --- /dev/null +++ b/base/scripts/redbook.cs @@ -0,0 +1,105 @@ +//------------------------------------------------------------------------------ +function RedBookCallback(%type) +{ + if(%type $= "PlayFinished") + CDPlayer.playFinished(); +} + +//------------------------------------------------------------------------------ +function CDAudio::playFinished(%this) +{ + if(%this.repeat == false) + return; + + %this.play(); +} + +function CDAudio::play(%this) +{ + %numTracks = %this.getTrackCount(); + if(%numTracks == 0) + { + error(redbookGetLastError()); + return; + } + + switch$(%this.playMode) + { + case "one_shot": + %this.playTrack(%this.currentTrack); + + case "continuous": + %this.currentTrack++; + if(%this.currentTrack >= %numTracks) + %this.currentTrack = 0; + %this.playTrack(%this.currentTrack); + + case "random": + %track = mFloor(getRandom() * (%numTracks + 1)); + if(%track >= %numTracks) + %track = %numTracks - 1; + %this.playTrack(%track); + } +} + +function CDAudio::playTrack(%this, %track) +{ + if(redbookPlay(%track) == false) + { + error(redbookGetLastError()); + %this.repeat = false; + return; + } + %this.currentTrack = %track; +} + +function CDAudio::stop(%this) +{ + redbookStop(); +} + +function CDAudio::getTrackCount(%this) +{ + return(redbookGetTrackCount()); +} + +//------------------------------------------------------------------------------ +new ScriptObject(CDPlayer) +{ + class = CDAudio; + currentTrack = 0; + playMode = "one_shot"; + repeat = true; +}; + +if($pref::Audio::musicEnabled) +{ + redbookOpen(); + redbookSetVolume($pref::Audio::musicVolume); +} + +//------------------------------------------------------------------------------ + +function clientCmdPlayCDTrack(%track) +{ + if(%track $= "") + { + %numTracks = CDPlayer.getTrackCount(); + if(%numTracks == 0) + { + error(redbookGetLastError()); + return; + } + + %track = mFloor(getRandom() * (%numTracks + 1)); + if(%track >= %numTracks) + %track = %numTracks - 1; + } + + CDPlayer.playTrack(%track); +} + +function clientCmdStopCD() +{ + CDPlayer.stop(); +} diff --git a/base/scripts/scoreList.cs b/base/scripts/scoreList.cs new file mode 100644 index 0000000..491e8af --- /dev/null +++ b/base/scripts/scoreList.cs @@ -0,0 +1,129 @@ +//------------------------------------------------------------------------------ +// +// scoreList.cs +// +//------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ +// Server side functions: +//------------------------------------------------------------------------------ +$lastScoreUpdate = 0; + +function updateScores() +{ + if ( !isObject( Game ) ) + return; + + %numTeams = Game.numTeams; + + // Initialize the team counts: + for ( %teamIndex = 0; %teamIndex <= %numTeams; %teamIndex++ ) + Game.teamCount[%teamIndex] = 0; + + %count = ClientGroup.getCount(); + for ( %clientIndex = 0; %clientIndex < %count; %clientIndex++ ) + { + %cl = ClientGroup.getObject( %clientIndex ); + %team = %cl.getSensorGroup(); + if ( %numTeams == 1 && %team != 0 ) + %team = 1; + Game.teamScores[%team, Game.teamCount[%team], 0] = %cl.name; + if ( %cl.score $= "" ) + Game.teamScores[%team, Game.teamCount[%team], 1] = 0; + else + Game.teamScores[%team, Game.teamCount[%team], 1] = %cl.score; + Game.teamCount[%team]++; + } +} + + +//------------------------------------------------------------------------------ +function serverCmdGetScores( %client ) +{ + // Client has requested the score list, so give it to 'em... + if (isObject(Game)) + { + updateScores(); + %teamCount = Game.numTeams; + + if (%teamCount > 1) + { + // Send team messages: + for (%team = 1; %team <= %teamCount; %team++) + messageClient(%client, 'MsgTeamScore', "", %team, $teamScore[%team]); + + //send the player scores in order of their team rank... + for (%team = 1; %team <= %teamCount; %team++) + { + for (%i = 0; %i < $TeamRank[%team, count]; %i++) + { + %cl = $TeamRank[%team, %i]; + messageClient( %client, 'MsgPlayerScore', "", %cl, %cl.score, %cl.getPing(), %cl.getPacketLoss()); + } + } + } + else + { + //send the player scores in order of their rank... + for (%i = 0; %i < $TeamRank[0, count]; %i++) + { + %cl = $TeamRank[0, %i]; + messageClient( %client, 'MsgPlayerScore', "", %cl, %cl.score, %cl.getPing(), %cl.getPacketLoss()); + } + } + + //now send the observers over + %count = ClientGroup.getCount(); + for (%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + if (%cl.team <= 0) + messageClient( %client, 'MsgPlayerScore', "", %cl, %cl.score, %cl.getPing(), %cl.getPacketLoss()); + } + } +} + + +//------------------------------------------------------------------------------ +// Client side functions: +//------------------------------------------------------------------------------ +addMessageCallback( 'MsgTeamScore', handleTeamScore ); +addMessageCallback( 'MsgPlayerScore', handlePlayerScore ); + +//------------------------------------------------------------------------------ +// client team score list is called $clTeamScore +// number of teams is $clTeamCount +$clTeamCount = 0; + +function handleTeamScore( %msgType, %msgString, %team, %teamScore ) +{ + if ( %teamScore $= "" ) + %score = "0"; + else + %score = %teamScore; + + // Add the new entry: + $clTeamScore[%team, 1] = %score; + + if ( %team > $clTeamCount ) + $clTeamCount = %team; +} + + +//------------------------------------------------------------------------------ +// Store the player score on the client-side player object: +function handlePlayerScore( %msgType, %msgString, %clientId, %score, %ping, %packetLoss ) +{ + %player = $PlayerList[%clientId]; + if ( %player ) + { + %player.score = %score; + %player.ping = %ping; + %player.packetLoss = %packetLoss; + lobbyUpdatePlayer( %clientId ); + } + else + warn( "Received score for client that hasn't joined!" ); +} + + diff --git a/base/scripts/scoreScreen.cs b/base/scripts/scoreScreen.cs new file mode 100644 index 0000000..4cbb90f --- /dev/null +++ b/base/scripts/scoreScreen.cs @@ -0,0 +1,93 @@ +//------------------------------------------------------------------------------ +function ScoreScreen::setupHud(%obj, %tag) +{ +} + +//------------------------------------------------------------------------------ +function ScoreScreen::loadHud(%obj, %tag) +{ + $Hud[%tag] = ScoreScreen; + $Hud[%tag].childGui = ScoreContent; + $Hud[%tag].parent = ScoreParent; +} + +//------------------------------------------------------------------------------ +function ScoreScreen::onWake(%this) +{ + if ( isObject( hudMap ) ) + { + hudMap.pop(); + hudMap.delete(); + } + new ActionMap( hudMap ); + hudMap.blockBind( moveMap, toggleInventoryHud ); + hudMap.blockBind( moveMap, toggleCommanderMap ); + hudMap.bindCmd( keyboard, escape, "", "toggleCursorHuds('scoreScreen');" ); + hudMap.push(); +} + +//------------------------------------------------------------------------------ +function ScoreScreen::onSleep(%this) +{ + hudMap.pop(); + hudMap.delete(); +} + +//------------------------------------------------------------------------------ +function ScoreScreen::addLine(%obj, %tag, %lineNum, %name) +{ + %yOffset = (%lineNum * 20) + 5; + $Hud[%tag].count++; + $Hud[%tag].childGui.resize( 3, 3, 586, %yOffset + 25 ); + $Hud[%tag].data[%lineNum,0] = new GuiMLTextCtrl() + { + profile = "ScoreTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 " @ %yOffset; + extent = "566 22"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = ""; +// command = "ScoreScreenOnMouseDown(" @ %lineNum @ ");"; + }; + return 1; +} + +//------------------------------------------------------------------------------ +addMessageCallback( 'SetScoreHudHeader', setScoreHudHeader ); +addMessageCallback( 'SetScoreHudSubheader', setScoreHudSubheader ); + +function setScoreHudHeader( %msgType, %msgString, %a0 ) +{ + %text = detag( %a0 ); + ScoreHeaderText.setValue( %text ); + if ( %text $= "" ) + { + ScoreHeaderField.setVisible( false ); + ScoreField.resize( 23, 32, 594, 426 ); + } + else + { + ScoreHeaderField.setVisible( true ); + ScoreField.resize( 23, 72, 594, 386 ); + } +} + +function setScoreHudSubheader( %msgType, %msgString, %a0 ) +{ + ScoreSubheaderText.setValue( detag( %a0 ) ); +} + +///////////////////////////////////////////////////////////////////////////////// +// Hunters Tracking requires this - if we put it back in, uncomment this section +// function ScoreScreenOnMouseDown(%line) +// { +// if ($CurrentMissionType $= "Hunters") +// commandToServer('huntersTrackPlayer', %line, firstWord($MLTextMousePoint)); +// } +///////////////////////////////////////////////////////////////////////////////// + diff --git a/base/scripts/server.cs b/base/scripts/server.cs new file mode 100644 index 0000000..6b48cc3 --- /dev/null +++ b/base/scripts/server.cs @@ -0,0 +1,1771 @@ +if($Host::TimeLimit $= "") + $Host::TimeLimit = 20; + +$teamDamage = 1; +$SB::WODec = 0.004; // whiteout +$SB::DFDec = 0.02; // damageFlash + +function VerifyCDCheck(%func) +{ + if (!cdFileCheck()) + messageBoxOkCancel("Tribes 2 CD Check", "You must have the Tribes 2 CD in the CD-ROM drive while playing offline. Please insert the CD.", "schedule(0, 0, VerifyCDCheck, " @ %func @ ");", "quit();"); + else + call(%func); +} + +function CreateServer(%mission, %missionType) +{ + DestroyServer(); + + // Load server data blocks + exec("scripts/commanderMapIcons.cs"); + exec("scripts/markers.cs"); + exec("scripts/serverAudio.cs"); + exec("scripts/damageTypes.cs"); + exec("scripts/deathMessages.cs"); + exec("scripts/inventory.cs"); + exec("scripts/camera.cs"); + exec("scripts/particleEmitter.cs"); // Must exist before item.cs and explosion.cs + exec("scripts/particleDummies.cs"); + exec("scripts/projectiles.cs"); // Must exits before item.cs + exec("scripts/player.cs"); + exec("scripts/gameBase.cs"); + exec("scripts/staticShape.cs"); + exec("scripts/weapons.cs"); + exec("scripts/turret.cs"); + exec("scripts/weapTurretCode.cs"); + exec("scripts/pack.cs"); + exec("scripts/vehicles/vehicle_spec_fx.cs"); // Must exist before other vehicle files or CRASH BOOM + exec("scripts/vehicles/serverVehicleHud.cs"); + exec("scripts/vehicles/vehicle_shrike.cs"); + exec("scripts/vehicles/vehicle_bomber.cs"); + exec("scripts/vehicles/vehicle_havoc.cs"); + exec("scripts/vehicles/vehicle_wildcat.cs"); + exec("scripts/vehicles/vehicle_tank.cs"); + exec("scripts/vehicles/vehicle_mpb.cs"); + exec("scripts/vehicles/vehicle.cs"); // Must be added after all other vehicle files or EVIL BAD THINGS + exec("scripts/ai.cs"); + exec("scripts/item.cs"); + exec("scripts/station.cs"); + exec("scripts/simGroup.cs"); + exec("scripts/trigger.cs"); + exec("scripts/pathedObject.cs"); + exec("scripts/forceField.cs"); + exec("scripts/lightning.cs"); + exec("scripts/weather.cs"); + exec("scripts/deployables.cs"); + exec("scripts/stationSetInv.cs"); + exec("scripts/navGraph.cs"); + exec("scripts/targetManager.cs"); + exec("scripts/serverCommanderMap.cs"); + exec("scripts/environmentals.cs"); + exec("scripts/power.cs"); + exec("scripts/serverTasks.cs"); + exec("scripts/admin.cs"); + exec("prefs/banlist.cs"); + + //automatically load any mission type that follows naming convention typeGame.name.cs + %search = "scripts/*Game.cs"; + + for(%file = findFirstFile(%search); %file !$= ""; %file = findNextFile(%search)) + { + %type = fileBase(%file); // get the name of the script + exec("scripts/" @ %type @ ".cs"); + } + + $missionSequence = 0; + $CurrentMissionType = %missionType; + $HostGamePlayerCount = 0; + if ( $HostGameType !$= "SinglePlayer" ) + allowConnections(true); + new SimGroup (ServerGroup); + if(%mission $= "") + { + %mission = $HostMissionFile[$HostMission[0,0]]; + %missionType = $HostTypeName[0]; + } + + if ( $HostGameType $= "Online" && $pref::Net::DisplayOnMaster !$= "Never" ) + schedule(0,0,startHeartbeat); + + // setup the bots for this server + AISystemEnabled( false ); + if ( $HostGameBotCount > 0 && %missionType !$= "SinglePlayer" ) + { + // Make sure this mission is bot enabled: + for ( %idx = 0; %idx < $HostMissionCount; %idx++ ) + { + if ( $HostMissionFile[%idx] $= %mission ) + break; + } + + if ( $BotEnabled[%idx] ) + { + if ( $HostGameBotCount > 16 ) + $HostGameBotCount = 16; + if ( $HostGameBotCount > $Host::MaxPlayers - 1 ) + $HostGameBotCount = $Host::MaxPlayers - 1; + + //set the objective reassessment timeslice var + $AITimeSliceReassess = 0; + aiConnectMultiple( $HostGameBotCount, $Host::MinBotDifficulty, $Host::MaxBotDifficulty, -1 ); + } + else + $HostGameBotCount = 0; + } + + loadMission(%mission, %missionType, true); +} + +function CycleMissions() +{ + echo( "cycling mission. " @ ClientGroup.getCount() @ " clients in game." ); + %nextMission = getNextMission($CurrentMission, $CurrentMissionType); + messageAll( 'MsgClient', 'Loading %1 (%2)...', %nextMission, $CurrentMissionType ); + + loadMission(%nextMission, $CurrentMissionType); +} + +function DestroyServer() +{ + $missionRunning = false; + allowConnections(false); + stopHeartbeat(); + if(isObject(ServerGroup)) + ServerGroup.delete(); + + // delete all the connections: + while(ClientGroup.getCount()) + { + %client = ClientGroup.getObject(0); + if (%client.isAIControlled()) + %client.drop(); + else + %client.delete(); + } + + %HostGuidList = ""; + + // delete all the data blocks... + // this will cause problems if there are any connections + deleteDataBlocks(); + + // reset the target manager + resetTargetManager(); + + echo( "exporting server prefs..." ); + export( "$Host::*", "prefs/ServerPrefs.cs", false ); + purgeResources(); +} + +function Disconnect() +{ + if ( isObject( ServerConnection ) ) + ServerConnection.delete(); + DisconnectedCleanup(); + DestroyServer(); +} + +function DisconnectedCleanup() +{ + // clear the chat hud message vector + HudMessageVector.clear(); + if ( isObject( PlayerListGroup ) ) + PlayerListGroup.delete(); + + // terminate all playing sounds + alxStopAll(); + + // clean up voting + voteHud.voting = false; + mainVoteHud.setvisible(0); + + // clear all print messages + clientCmdclearBottomPrint(); + clientCmdClearCenterPrint(); + + // clear the inventory and weapons hud + weaponsHud.clearAll(); + inventoryHud.clearAll(); + + // back to the launch screen + Canvas.setContent(LaunchGui); + if ( isObject( MusicPlayer ) ) + MusicPlayer.stop(); + clearTextureHolds(); + purgeResources(); +} + +function kick(%client, %admin) +{ + if(%admin) + messageAll( 'MsgAdminForce', '\c2The Admin has kicked %1.', %client.name ); + else + messageAll( 'MsgVotePassed', '\c2%1 was kicked by vote.', %client.name ); + + messageClient(%client, 'onClientKicked', ""); + messageAllExcept( %client, -1, 'MsgClientDrop', "", %client.name, %client ); + + if (%client.isAIControlled()) + { + $HostGameBotCount--; + %client.drop(); + } + else + { + // kill and delete this client + if( isObject(%client.player) ) + %client.player.scriptKill(0); + + %client.schedule(700, "delete"); + + BanList::add( %client.guid, %client.getAddress(), $Host::KickBanTime ); + } +} + +function ban( %client, %admin ) +{ + if ( %admin ) + messageAll('MsgAdminForce', '\c2The Admin has banned %1.', %client.name); + else + messageAll( 'MsgVotePassed', '\c2%1 was banned by vote.', %client.name ); + + messageClient(%client, 'onClientBanned', ""); + messageAllExcept( %client, -1, 'MsgClientDrop', "", %client.name, %client ); + + // kill and delete this client + if( isObject(%client.player) ) + %client.player.scriptKill(0); + + %client.schedule(700, "delete"); + + BanList::add(%client.guid, %client.getAddress(), $Host::BanTime); +} + +function getValidVoicePitch(%voice, %voicePitch) +{ + if (%voicePitch < -1.0) + %voicePitch = -1.0; + else if (%voicePitch > 1.0) + %voicePitch = 1.0; + + //Voice pitch range is from 0.5 to 2.0, however, we should tighten the range to + //avoid players sounding like mickey mouse, etc... + //see if we're pitching down - clamp the min pitch at 0.875 + if (%voicePitch < 0) + return (1.0 + (0.125 * %voicePitch)); + + //max voice pitch is 1.125 + else if (%voicePitch > 0) + return 1.0 + (0.125 * %voicePitch); + + else + return 1.0; +} + +function GameConnection::onConnect( %client, %name, %raceGender, %skin, %voice, %voicePitch ) +{ + sendLoadInfoToClient( %client ); + + //%client.setSimulatedNetParams(0.1, 30); + // if hosting this server, set this client to superAdmin + if(%client.getAddress() $= "Local") + { + %client.isAdmin = true; + %client.isSuperAdmin = true; + } + + // Get the client's unique id: + %authInfo = %client.getAuthInfo(); + %client.guid = getField( %authInfo, 3 ); + + // check admin and super admin list, and set status accordingly + if ( !%client.isSuperAdmin ) + { + if ( isOnSuperAdminList( %client ) ) + { + %client.isAdmin = true; + %client.isSuperAdmin = true; + } + else if( isOnAdminList( %client ) ) + { + %client.isAdmin = true; + } + } + + // Sex/Race defaults + switch$ ( %raceGender ) + { + case "Human Male": + %client.sex = "Male"; + %client.race = "Human"; + case "Human Female": + %client.sex = "Female"; + %client.race = "Human"; + case "Bioderm": + %client.sex = "Male"; + %client.race = "Bioderm"; + } + %client.armor = "Light"; + + // Override the connect name if this server does not allow smurfs: + %realName = getField( %authInfo, 0 ); + if ( $Host::NoSmurfs ) + %name = %realName; + + if ( strcmp( %name, %realName ) == 0 ) + { + %client.isSmurf = false; + + // Add the tribal tag: + %tag = getField( %authInfo, 1 ); + %append = getField( %authInfo, 2 ); + if ( %append ) + %name = "\cp\c6" @ %name @ "\c7" @ %tag @ "\co"; + else + %name = "\cp\c7" @ %tag @ "\c6" @ %name @ "\co"; + + addToServerGuidList( %client.guid ); + %client.sendGuid = %client.guid; + } + else + { + %client.isSmurf = true; + %client.sendGuid = 0; + %name = stripTrailingSpaces( strToPlayerName( %name ) ); + if ( strlen( %name ) < 3 ) + %name = "Poser"; + + // Make sure the alias is unique: + %isUnique = true; + %count = ClientGroup.getCount(); + for ( %i = 0; %i < %count; %i++ ) + { + %test = ClientGroup.getObject( %i ); + %rawName = stripChars( detag( getTaggedString( %test.name ) ), "\cp\co\c6\c7\c8\c9" ); + if ( strcmp( %name, %rawName ) == 0 ) + { + %isUnique = false; + break; + } + } + + // Append a number to make the alias unique: + if ( !%isUnique ) + { + %suffix = 1; + while ( !%isUnique ) + { + %nameTry = %name @ "." @ %suffix; + %isUnique = true; + + %count = ClientGroup.getCount(); + for ( %i = 0; %i < %count; %i++ ) + { + %test = ClientGroup.getObject( %i ); + %rawName = stripChars( detag( getTaggedString( %test.name ) ), "\cp\co\c6\c7\c8\c9" ); + if ( strcmp( %nameTry, %rawName ) == 0 ) + { + %isUnique = false; + break; + } + } + + %suffix++; + } + + // Success! + %name = %nameTry; + } + + %smurfName = %name; + // Tag the name with the "smurf" color: + %name = "\cp\c8" @ %name @ "\co"; + } + + %client.name = addTaggedString(%name); + if(%client.isSmurf) + %client.nameBase = %smurfName; + else + %client.nameBase = %realName; + %client.justConnected = true; + %client.isReady = false; + + // Make sure that the connecting client is not trying to use a bot skin: + %temp = detag( %skin ); + if ( %temp $= "basebot" || %temp $= "basebbot" ) + %client.skin = addTaggedString( "base" ); + else + %client.skin = addTaggedString( %skin ); + + // full reset of client target manager + clientResetTargets(%client, false); + + %client.voice = %voice; + %client.voiceTag = addtaggedString(%voice); + + //set the voice pitch based on a lookup table from their chosen voice + %client.voicePitch = getValidVoicePitch(%voice, %voicePitch); + + %client.target = allocClientTarget(%client, %client.name, %client.skin, %client.voiceTag, '_ClientConnection', 0, 0, %client.voicePitch); + %client.score = 0; + %client.team = 0; + + $instantGroup = ServerGroup; + $instantGroup = MissionCleanup; + + echo("CADD: " @ %client @ " " @ %client.getAddress()); + + %count = ClientGroup.getCount(); + for(%cl = 0; %cl < %count; %cl++) + { + %recipient = ClientGroup.getObject(%cl); + if((%recipient != %client)) + { + // These should be "silent" versions of these messages... + messageClient(%client, 'MsgClientJoin', "", + %recipient.name, + %recipient, + %recipient.target, + %recipient.isAIControlled(), + %recipient.isAdmin, + %recipient.isSuperAdmin, + %recipient.isSmurf, + %recipient.sendGuid); + + messageClient(%client, 'MsgClientJoinTeam', "", %recipient.name, $teamName[%recipient.team], %recipient, %recipient.team ); + } + } + +// commandToClient(%client, 'getManagerID', %client); + + commandToClient(%client, 'setVoiceCodec', $Audio::voiceCodec); + commandToClient(%client, 'setBeaconNames', "Target Beacon", "Marker Beacon", "Bomb Target"); + + if ( $CurrentMissionType !$= "SinglePlayer" ) + { + messageClient(%client, 'MsgClientJoin', '\c2Welcome to Tribes2 %1.', + %name, + %client, + %client.target, + false, // isBot + %client.isAdmin, + %client.isSuperAdmin, + %client.isSmurf, + %client.sendGuid ); + + messageAllExcept(%client, -1, 'MsgClientJoin', '\c1%1 joined the game.', + %name, + %client, + %client.target, + false, // isBot + %client.isAdmin, + %client.isSuperAdmin, + %client.isSmurf, + %client.sendGuid ); + } + else + messageClient(%client, 'MsgClientJoin', "\c0Mission Insertion complete...", + %name, + %client, + %client.target, + false, // isBot + false, // isAdmin + false, // isSuperAdmin + false, // isSmurf + %client.sendGuid ); + + //Game.missionStart(%client); + setDefaultInventory(%client); + + if($missionRunning) + %client.startMission(); + $HostGamePlayerCount++; +} + +function GameConnection::onDrop(%client, %reason) +{ + if(isObject(Game)) + Game.onClientLeaveGame(%client); + + if ( !%client.isSmurf ) + removeFromServerGuidList( %client.guid ); + if ( $CurrentMissionType $= "SinglePlayer" ) + messageAllExcept(%client, -1, 'MsgClientDrop', "", %client.name, %client); + else + messageAllExcept(%client, -1, 'MsgClientDrop', '\c1%1 has left the game.', %client.name, %client); + + if ( isObject( %client.camera ) ) + %client.camera.delete(); + + freeClientTarget(%client); + removeTaggedString(%client.name); + echo("CDROP: " @ %client @ " " @ %client.getAddress()); + $HostGamePlayerCount--; + + // reset the server if everyone has left the game + if( $HostGamePlayerCount == 0 && $Host::Dedicated) + schedule(0, 0, "resetServerDefaults"); +} + +function dismountPlayers() +{ + // make sure all palyers are dismounted from vehicles and have normal huds + %count = ClientGroup.getCount(); + for(%cl = 0; %cl < %count; %cl++) + { + %client = ClientGroup.getObject(%cl); + %player = %client.player; + if(%player.isMounted()) { + %player.unmount(); + commandToClient(%client, 'setHudMode', 'Standard', "", 0); + } + } +} + +function loadMission( %missionName, %missionType, %firstMission ) +{ + buildLoadInfo( %missionName, %missionType ); + + // reset all of these + ClearCenterPrintAll(); + ClearBottomPrintAll(); + + if( $Host::TournamentMode ) + resetTournamentPlayers(); + + // Send load info to all the connected clients: + %count = ClientGroup.getCount(); + for ( %cl = 0; %cl < %count; %cl++ ) + { + %client = ClientGroup.getObject( %cl ); + if ( !%client.isAIControlled() ) + { + sendLoadInfoToClient( %client ); + } + } + + // allow load condition to exit out + schedule(0,ServerGroup,loadMissionStage1,%missionName,%missionType,%firstMission); +} + +function loadMissionStage1(%missionName, %missionType, %firstMission) +{ + // if a mission group was there, delete prior mission stuff + if(isObject(MissionGroup)) + { + // clear out the previous mission paths + for(%clientIndex = 0; %clientIndex < ClientGroup.getCount(); %clientIndex++) + { + // clear ghosts and paths from all clients + %cl = ClientGroup.getObject(%clientIndex); + %cl.resetGhosting(); + %cl.clearPaths(); + %cl.isReady = ""; + %cl.matchStartReady = false; + } + Game.endMission(); + $lastMissionTeamCount = Game.numTeams; + + MissionGroup.delete(); + MissionCleanup.delete(); + Game.deactivatePackages(); + Game.delete(); + } + + $CurrentMission = %missionName; + $CurrentMissionType = %missionType; + + createInvBanCount(); + echo("LOADING MISSION: " @ %missionName); + + // increment the mission sequence (used for ghost sequencing) + $missionSequence++; + + // if this isn't the first mission, allow some time for the server + // to transmit information to the clients: + +// jff: $currentMission already being used for this purpose, used in 'finishLoadMission' + $MissionName = %missionName; + $missionRunning = false; + + if(!%firstMission) + schedule(15000, ServerGroup, loadMissionStage2); + else + loadMissionStage2(); +} + + +function loadMissionStage2() +{ + // create the mission group off the ServerGroup + echo("Stage 2 load"); + $instantGroup = ServerGroup; + + new SimGroup (MissionCleanup); + + if($CurrentMissionType $= "") + { + new ScriptObject(Game) { + class = DefaultGame; + }; + } + else + { + new ScriptObject(Game) { + class = $CurrentMissionType @ "Game"; + superClass = DefaultGame; + }; + } + // allow the game to activate any packages. + Game.activatePackages(); + + // reset the target manager + resetTargetManager(); + + %file = "missions/" @ $missionName @ ".mis"; + if(!isFile(%file)) + return; + $countDownStarted = false; + exec(%file); + $instantGroup = MissionCleanup; + + // pre-game mission stuff + if(!isObject(MissionGroup)) + { + error("No 'MissionGroup' found in mission \"" @ $missionName @ "\"."); + schedule(3000, ServerGroup, CycleMissions); + return; + } + + MissionGroup.cleanNonType($CurrentMissionType); + + // construct paths + pathOnMissionLoadDone(); + + $ReadyCount = 0; + $MatchStarted = false; + $CountdownStarted = false; + AISystemEnabled( false ); + + Game.missionLoadDone(); + + // start all the clients in the mission + $missionRunning = true; + for(%clientIndex = 0; %clientIndex < ClientGroup.getCount(); %clientIndex++) + ClientGroup.getObject(%clientIndex).startMission(); + + if(!$MatchStarted && $LaunchMode !$= "NavBuild" && $LaunchMode !$= "SpnBuild" ) + { + if( $Host::TournamentMode ) + checkTourneyMatchStart(); + else if( $currentMissionType !$= "SinglePlayer" ) + checkMissionStart(); + } + + // offline graph builder... + if( $LaunchMode $= "NavBuild" ) + buildNavigationGraph( "Nav" ); + + if( $LaunchMode $= "SpnBuild" ) + buildNavigationGraph( "Spn" ); + purgeResources(); + +} + + +function ShapeBase::cleanNonType(%this, %type) +{ + if(%this.missionTypesList $= "") + return; + + for(%i = 0; (%typei = getWord(%this.missionTypesList, %i)) !$= ""; %i++) + if(%typei $= %type) + return; + + // first 32 targets are team targets (never allocated/freed) + // - must reallocate the target if unhiding + if(%this.getTarget() >= 32) + { + freeTarget(%this.getTarget()); + %this.setTarget(-1); + } + + %this.hide(true); +} + +function SimObject::cleanNonType(%this, %type) +{ +} + +function SimGroup::cleanNonType(%this, %type) +{ + for (%i = 0; %i < %this.getCount(); %i++) + %this.getObject(%i).cleanNonType(%type); +} + +function GameConnection::endMission(%this) +{ + commandToClient(%this, 'MissionEnd', $missionSequence); +} + +//-------------------------------------------------------------------------- +// client start phases: +// 0: start mission +// 1: got phase1 done +// 2: got datablocks done +// 3: got phase2 done +// 4: got phase3 done +function GameConnection::startMission(%this) +{ + // send over the information that will display the server info + // when we learn it got there, we'll send the data blocks + %this.currentPhase = 0; + commandToClient(%this, 'MissionStartPhase1', $missionSequence, $MissionName, MissionGroup.musicTrack); +} + +function serverCmdMissionStartPhase1Done(%client, %seq) +{ + if(%seq != $missionSequence || !$MissionRunning) + return; + + if(%client.currentPhase != 0) + return; + %client.currentPhase = 1; + + // when the datablocks are transmitted, we'll send the ghost always objects + %client.transmitDataBlocks($missionSequence); +} + +function GameConnection::dataBlocksDone( %client, %missionSequence ) +{ + echo("GOT DATA BLOCKS DONE FOR: " @ %client); + if(%missionSequence != $missionSequence) + return; + + if(%client.currentPhase != 1) + return; + %client.currentPhase = 2; + + // targets require ShapeBase datablocks (only needed on first connection) + if(!%client.receivedTargets) + { + sendTargetsToClient(%client); + %client.receivedTargets = true; + } + + commandToClient(%client, 'MissionStartPhase2', $missionSequence); +} + +function serverCmdMissionStartPhase2Done(%client, %seq) +{ + if(%seq != $missionSequence || !$MissionRunning) + return; + + if(%client.currentPhase != 2) + return; + %client.currentPhase = 3; + + // when all this good love is over, we'll know that the mission lighting is done + %client.transmitPaths(); + + // setup the client team state + if ( $CurrentMissionType !$= "SinglePlayer" ) + serverSetClientTeamState( %client ); + + // start ghosting + %client.activateGhosting(); + %client.camera.scopeToClient(%client); + + // to the next phase... + commandToClient(%client, 'MissionStartPhase3', $missionSequence, $CurrentMission); +} + +function serverCmdMissionStartPhase3Done(%client, %seq) +{ + if(%seq != $missionSequence || !$MissionRunning) + return; + + if(%client.currentPhase != 3) + return; + %client.currentPhase = 4; + + %client.isReady = true; + Game.clientMissionDropReady(%client); +} + +function serverSetClientTeamState( %client ) +{ + // set all player states prior to mission drop ready + + // create a new camera for this client + %client.camera = new Camera() + { + dataBlock = Observer; + }; + + MissionCleanup.add( %client.camera ); // we get automatic cleanup this way. + + %observer = false; + if( !$Host::TournamentMode ) + { + if( %client.justConnected ) + { + %client.justConnected = false; + %client.camera.getDataBlock().setMode( %client.camera, "justJoined" ); + } + else + { + // server just changed maps - this guy was here before + if( %client.lastTeam !$= "" ) + { + // see if this guy was an observer from last game + if(%client.lastTeam == 0) + { + %observer = true; + + %client.camera.getDataBlock().setMode( %client.camera, "ObserverFly" ); + } + else // let this player join the team he was on last game + { + if(Game.numTeams > 1 && $LastGameTeamCount > 1) + { + Game.clientJoinTeam( %client, %client.lastTeam, false ); + } + else + { + Game.assignClientTeam( %client ); + + // spawn the player + Game.spawnPlayer( %client, false ); + } + } + } + else + { + Game.assignClientTeam( %client ); + + // spawn the player + Game.spawnPlayer( %client, false ); + } + + if( !%observer ) + { + if(!$MatchStarted && !$CountdownStarted) + %client.camera.getDataBlock().setMode( %client.camera, "pre-game", %client.player ); + else if(!$MatchStarted && $CountdownStarted) + %client.camera.getDataBlock().setMode( %client.camera, "pre-game", %client.player ); + } + } + } + else + { + %client.camera.getDataBlock().setMode( %client.camera, "ObserverFly" ); + + if( !$MatchStarted && !$CountdownStarted) + { + if($TeamDamage) + %damMess = "ENABLED"; + else + %damMess = "DISABLED"; + + if(Game.numTeams > 1) + BottomPrint(%client, "Server is Running in Tournament Mode.\nPick a Team\nTeam Damage is " @ %damMess, 0, 3 ); + } + else + { + BottomPrint( %client, "\nServer is Running in Tournament Mode", 0, 3 ); + } + } +} + +//function serverCmdPreviewDropReady( %client ) +//{ +// $MatchStarted = true; +// commandToClient( %client, 'SetMoveKeys', true); +// %markerObj = "0 0 0"; +// %client.camera.mode = "PreviewMode"; +// %client.camera.setTransform( %markerObj ); +// %client.camera.setFlyMode(); +// +// %client.setControlObject( %client.camera ); +//} + +function HideHudHACK(%visible) +{ + //compassHud.setVisible(%visible); + //enerDamgHud.setVisible(%visible); + retCenterHud.setVisible(%visible); + reticleFrameHud.setVisible(%visible); + //invPackHud.setVisible(%visible); + weaponsHud.setVisible(%visible); + outerChatHud.setVisible(%visible); + objectiveHud.setVisible(%visible); + chatHud.setVisible(%visible); + navHud.setVisible(%visible); + //watermarkHud.setVisible(%visible); + hudClusterBack.setVisible(%visible); + inventoryHud.setVisible(%visible); + clockHUD.setVisible(%visible); + lagHudIndicator.setVisible(false); +} + +function ServerPlay2D(%profile) +{ + for(%idx = 0; %idx < ClientGroup.getCount(); %idx++) + ClientGroup.getObject(%idx).play2D(%profile); +} + +function ServerPlay3D(%profile,%transform) +{ + for(%idx = 0; %idx < ClientGroup.getCount(); %idx++) + ClientGroup.getObject(%idx).play3D(%profile,%transform); +} + +function clientCmdSetFirstPerson(%value) +{ + $firstPerson = %value; + if(%value) + ammoHud.setVisible(true); + else + ammoHud.setVisible(false); +} + +function clientCmdVehicleMount() +{ + if ( $pref::toggleVehicleView ) + { + $wasFirstPerson = $firstPerson; + $firstPerson = false; + } +} + +function clientCmdVehicleDismount() +{ + if ( $pref::toggleVehicleView ) + $firstPerson = $wasFirstPerson; +} + +function serverCmdSAD( %client, %password ) +{ + if( %password !$= "" && %password $= $Host::AdminPassword) + { + %client.isAdmin = true; + %client.isSuperAdmin = true; + %name = getTaggedString( %client.name ); + MessageAll( 'MsgAdminForce', "\c2" @ %name @ " has become Admin by force.", %client ); + } +} + +function serverCmdSADSetPassword(%client, %password) +{ + if(%client.isSuperAdmin) + $Host::AdminPassword = %password; +} + +function serverCmdSuicide(%client) +{ + if( $MatchStarted ) + %client.player.scriptKill($DamageType::Suicide); +} + +function serverCmdToggleCamera(%client) +{ + if ($testcheats || $CurrentMissionType $= "SinglePlayer") + { + %control = %client.getControlObject(); + if (%control == %client.player) + { + %control = %client.camera; + %control.mode = toggleCameraFly; + %control.setFlyMode(); + } + else + { + %control = %client.player; + %control.mode = observerFly; + %control.setFlyMode(); + } + %client.setControlObject(%control); + } +} + +function serverCmdDropPlayerAtCamera(%client) +{ + if ($testcheats) + { + %client.player.setTransform(%client.camera.getTransform()); + %client.player.setVelocity("0 0 0"); + %client.setControlObject(%client.player); + } +} + +function serverCmdDropCameraAtPlayer(%client) +{ + if ($testcheats) + { + %client.camera.setTransform(%client.player.getTransform()); + %client.camera.setVelocity("0 0 0"); + %client.setControlObject(%client.camera); + } +} + +function serverCmdToggleRace(%client) +{ + if ($testcheats) + { + if (%client.race $= "Human") + %client.race = "Bioderm"; + else + %client.race = "Human"; + %client.player.setArmor(%client.armor); + } +} + +function serverCmdToggleGender(%client) +{ + if ($testcheats) + { + if (%client.sex $= "Male") + %client.sex = "Female"; + else + %client.sex = "Male"; + %client.player.setArmor(%client.armor); + } +} + +function serverCmdToggleArmor(%client) +{ + if ($testcheats) + { + if (%client.armor $= "Light") + %client.armor = "Medium"; + else + if (%client.armor $= "Medium") + %client.armor = "Heavy"; + else + %client.armor = "Light"; + %client.player.setArmor(%client.armor); + } +} + +function serverCmdPlayCel(%client,%anim) +{ + if ($testcheats) + { + %anim = %client.player.celIdx; + if (%anim++ > 8) + %anim = 1; + %client.player.setActionThread("cel"@%anim); + %client.player.celIdx = %anim; + } +} + +// NOTENOTENOTE: Review +function serverCmdPlayAnim(%client, %anim) +{ + %player = %client.player; + // don't play animations if player is in a vehicle + if (%player.isMounted()) + return; + + %weapon = ( %player.getMountedImage($WeaponSlot) == 0 ) ? "" : %player.getMountedImage($WeaponSlot).getName().item; + if(%weapon $= "MissileLauncher" || %weapon $= "SniperRifle") + { + %player.animResetWeapon = true; + %player.lastWeapon = %weapon; + %player.unmountImage($WeaponSlot); + %obj.setArmThread(look); + } + %player.setActionThread(%anim); +} + +function serverCmdPlayDeath(%client,%anim) +{ + if ($testcheats) + { + %anim = %client.player.deathIdx; + if (%anim++ > 11) + %anim = 1; + %client.player.setActionThread("death"@%anim,true); + %client.player.deathIdx = %anim; + } +} + +// NOTENOTENOTE: Review these! +//------------------------------------------------------------ +// TODO - make this function specify a team to switch to... +function serverCmdClientTeamChange( %client ) +{ + // pass this to the game object to handle: + if ( isObject( Game ) && Game.kickClient != %client) + { + %fromObs = %client.team == 0; + + if(%fromObs) + clearBottomPrint(%client); + + Game.clientChangeTeam( %client, "", %fromObs ); + } +} + +function serverCmdAddBot( %client ) +{ + aiConnectMultiple( 1, $Host::MinBotDifficulty, $Host::MaxBotDifficulty, -1 ); +} + +function serverCmdClientJoinTeam( %client, %team ) +{ + if ( isObject( Game ) && Game.kickClient != %client) + { + if(%client.team != %team) + { + %fromObs = %client.team == 0; + + if(%fromObs) + clearBottomPrint(%client); + + if( %client.isAIControlled() ) + Game.AIChangeTeam( %client, %team ); + else + Game.clientChangeTeam( %client, %team, %fromObs ); + } + } +} + +// this should only happen in single team games +function serverCmdClientAddToGame( %client, %targetClient ) +{ + if ( isObject( Game ) ) + Game.clientJoinTeam( %targetClient, 0, $matchstarted ); + + clearBottomPrint(%targetClient); + + if($matchstarted) + { + %targetClient.setControlObject( %targetClient.player ); + commandToClient(%targetClient, 'setHudMode', 'Standard'); + } + else + { + %client.notReady = true; + %client.camera.getDataBlock().setMode( %client.camera, "pre-game", %client.player ); + %client.setControlObject( %client.camera ); + } + + if($Host::TournamentMode && !$CountdownStarted) + { + %client.notReady = true; + centerprint( %client, "\nPress FIRE when ready.", 0, 3 ); + } +} + +function serverCmdClientJoinGame( %client ) +{ + if ( isObject( Game ) ) + Game.clientJoinTeam( %client, 0, 1 ); + + %client.setControlObject( %client.player ); + clearBottomPrint(%client); + commandToClient(%client, 'setHudMode', 'Standard'); +} + +function serverCmdClientMakeObserver( %client ) +{ + if ( isObject( Game ) && Game.kickClient != %client ) + Game.forceObserver( %client, "playerChoose" ); +} + +function serverCmdChangePlayersTeam( %clientRequesting, %client, %team) +{ + if( isObject( Game ) && %client != Game.kickClient && %clientRequesting.isAdmin) + { + serverCmdClientJoinTeam(%client, %team); + + if(!$MatchStarted) + { + %client.observerMode = "pregame"; + %client.notReady = true; + %client.camera.getDataBlock().setMode( %client.camera, "pre-game", %client.player ); + %client.setControlObject( %client.camera ); + + if($Host::TournamentMode && !$CountdownStarted) + { + %client.notReady = true; + centerprint( %client, "\nPress FIRE when ready.", 0, 3 ); + } + } + else + commandToClient(%client, 'setHudMode', 'Standard', "", 0); + + %multiTeam = (Game.numTeams > 1); + if(%multiTeam) + { + messageClient( %client, 'MsgClient', '\c1The Admin has changed your team.'); + messageAllExcept( %client, -1, 'MsgClient', '\c1The Admin forced %1 to join the %2 team.', %client.name, $teamName[%client.team]); + } + else + { + messageClient( %client, 'MsgClient', '\c1The Admin has added you to the game.'); + messageAllExcept( %client, -1, 'MsgClient', '\c1The Admin added %1 to the game.', %client.name); + } + } +} + +function serverCmdForcePlayerToObserver( %clientRequesting, %client ) +{ + if( isObject( Game ) && %clientRequesting.isAdmin) + Game.forceObserver( %client, "adminForce" ); +} + +//-------------------------------------------------------------------------- + +function serverCmdTogglePlayerMute(%client, %who) +{ + if (%client.muted[%who]) + { + %client.muted[%who] = false; + messageClient(%client, 'MsgPlayerUnmuted', '%1 has been unmuted.', %who.name); + } + else + { + %client.muted[%who] = true; + messageClient(%client, 'MsgPlayerMuted', '%1 has been muted.', %who.name); + } +} + +//-------------------------------------------------------------------------- +// VOTE MENU FUNCTIONS: +function serverCmdGetVoteMenu( %client, %key ) +{ + if ( isObject( Game ) ) + Game.sendGameVoteMenu( %client, %key ); +} + +function serverCmdGetPlayerPopupMenu( %client, %targetClient, %key ) +{ + if ( isObject( Game ) ) + Game.sendGamePlayerPopupMenu( %client, %targetClient, %key ); +} + +function serverCmdGetTeamList( %client, %key ) +{ + if ( isObject( Game ) ) + Game.sendGameTeamList( %client, %key ); +} + +function serverCmdGetMissionTypes( %client, %key ) +{ + for ( %type = 0; %type < $HostTypeCount; %type++ ) + messageClient( %client, 'MsgVoteItem', "", %key, %type, "", $HostTypeName[%type], true ); +} + +function serverCmdGetMissionList( %client, %key, %type ) +{ + if ( %type < 0 || %type >= $HostTypeCount ) + return; + + for ( %i = $HostMissionCount[%type] - 1; %i >= 0; %i-- ) + { + // If we have bots, don't change to a mission that doesn't support bots: + if ( $HostGameBotCount > 0 ) + { + if( !$BotEnabled[$HostMission[%type,%i]] ) + continue; + } + + %idx = $HostMission[%type, %i]; + messageClient( %client, 'MsgVoteItem', "", %key, + $HostMissionFile[%idx], // actual filename, will be stored in $clVoteCmd + "", + $HostMissionName[%idx], + true ); + } +} + +function serverCmdGetTimeLimitList( %client, %key, %type ) +{ + if ( isObject( Game ) ) + Game.sendTimeLimitList( %client, %key ); +} + +function serverCmdClientPickedTeam( %client, %option ) +{ + if( %option == 1 || %option == 2 ) + Game.clientJoinTeam( %client, %option, false ); + + else if( %option == 3) + { + Game.assignClientTeam( %client, $MatchStarted ); + Game.spawnPlayer( %client, false ); + } + else + { + Game.forceObserver( %client, "playerChoose" ); + %client.observerMode = "observer"; + %client.notReady = false; + return; + } + + ClearBottomPrint(%client); + %client.observerMode = "pregame"; + %client.notReady = true; + %client.camera.getDataBlock().setMode( %client.camera, "pre-game", %client.player ); + commandToClient(%client, 'setHudMode', 'Observer'); + + + %client.setControlObject( %client.camera ); + centerprint( %client, "\nPress FIRE when ready.", 0, 3 ); +} + +function playerPickTeam( %client ) +{ + %numTeams = Game.numTeams; + + if(%numTeams > 1) + { + %client.camera.mode = "PickingTeam"; + schedule( 0, 0, "commandToClient", %client, 'pickTeamMenu', getTaggedString($TeamName[1]), getTaggedString($TeamName[2])); + } + else + { + Game.clientJoinTeam(%client, 0, 0); + %client.observerMode = "pregame"; + %client.notReady = true; + %client.camera.getDataBlock().setMode( %client.camera, "pre-game", %client.player ); + centerprint( %client, "\nPress FIRE when ready.", 0, 3 ); + %client.setControlObject( %client.camera ); + } +} + +function serverCmdPlayContentSet( %client ) +{ + if( $Host::TournamentMode && !$CountdownStarted && !$MatchStarted ) + playerPickTeam( %client ); +} + +//-------------------------------------------------------------------------- +// This will probably move elsewhere... +function getServerStatusString() +{ + return isObject(Game) ? Game.getServerStatusString() : "NoGame"; +} + + +function dumpGameString() +{ + error( getServerStatusString() ); +} + +function isOnAdminList(%client) +{ + if( !%totalRecords = getRecordCount( $Host::adminList ) ) + return false; + + for(%i = 0; %i < %totalRecords; %i++) + { + %record = getField(getRecord( $Host::adminList, %i ), 0 ); + if(%record == %client.guid) + return true; + } + + return false; +} + +function isOnSuperAdminList(%client) +{ + if( !%totalRecords = getRecordCount( $Host::superAdminList ) ) + return false; + + for(%i = 0; %i < %totalRecords; %i++) + { + %record = getField( getRecord( $Host::superAdminList, %i ), 0); + if(%record == %client.guid) + return true; + } + + return false; +} + +function addToAdminList( %client ) +{ + +} + +function addToSuperAdminList( %client ) +{ + +} + +function resetTournamentPlayers() +{ + %count = ClientGroup.getCount(); + for( %i = 0; %i < %count; %i++ ) + { + %cl = ClientGroup.getObject(%i); + %cl.notready = 1; + %cl.notReadyCount = ""; + } +} + +function forceTourneyMatchStart() +{ + %playerCount = 0; + %count = ClientGroup.getCount(); + for( %i = 0; %i < %count; %i++ ) + { + %cl = ClientGroup.getObject(%i); + if(%cl.camera.Mode $= "pre-game") + %playerCount++; + } + + // don't start the mission until we have players + if(%playerCount == 0) + { + return false; + } + + %count = ClientGroup.getCount(); + for( %i = 0; %i < %count; %i++ ) + { + %cl = ClientGroup.getObject(%i); + if(%cl.camera.Mode $= "pickingTeam") + { + // throw these guys into observer mode + if(Game.numTeams > 1) + commandToClient( %cl, 'processPickTeam'); // clear the pickteam menu + Game.forceObserver( %cl, "adminForce" ); + } + } + return true; +} + +function startTourneyCountdown() +{ + %count = ClientGroup.getCount(); + for( %i = 0; %i < %count; %i++ ) + { + %cl = ClientGroup.getObject(%i); + ClearCenterPrint(%cl); + ClearBottomPrint(%cl); + } + + // lets get it on! + Countdown( 30 * 1000 ); +} + +function checkTourneyMatchStart() +{ + if( $CountdownStarted || $matchStarted ) + return; + + // loop through all the clients and see if any are still notready + %playerCount = 0; + %notReadyCount = 0; + + %count = ClientGroup.getCount(); + for( %i = 0; %i < %count; %i++ ) + { + %cl = ClientGroup.getObject(%i); + if(%cl.camera.mode $= "pickingTeam") + { + %notReady[%notReadyCount] = %cl; + %notReadyCount++; + } + else if(%cl.camera.Mode $= "pre-game") + { + if(%cl.notready) + { + %notReady[%notReadyCount] = %cl; + %notReadyCount++; + } + else + { + %playerCount++; + } + } + else if(%cl.camera.Mode $= "observer") + { + // this guy is watching + } + } + + if(%notReadyCount) + { + if(%notReadyCount == 1) + MessageAll( 'msgHoldingUp', '\c1%1 is holding things up!', %notReady[0].name); + else if(%notReadyCount < 4) + { + for(%i = 0; %i < %notReadyCount - 2; %i++) + %str = getTaggedString(%notReady[%i].name) @ ", " @ %str; + + %str = "\c2" @ %str @ getTaggedString(%notReady[%i].name) @ " and " @ getTaggedString(%notReady[%i+1].name) + @ " are holding things up!"; + MessageAll( 'msgHoldingUp', %str ); + } + return; + } + + if(%playerCount != 0) + { + %count = ClientGroup.getCount(); + for( %i = 0; %i < %count; %i++ ) + { + %cl = ClientGroup.getObject(%i); + %cl.notready = ""; + %cl.notReadyCount = ""; + ClearCenterPrint(%cl); + ClearBottomPrint(%cl); + } + + if ( Game.scheduleVote !$= "" && Game.voteType $= "VoteMatchStart") + { + messageAll('closeVoteHud', ""); + cancel(Game.scheduleVote); + Game.scheduleVote = ""; + } + + Countdown(30 * 1000); + } +} + +function checkMissionStart() +{ + %readyToStart = false; + for(%clientIndex = 0; %clientIndex < ClientGroup.getCount(); %clientIndex++) + { + %client = ClientGroup.getObject(%clientIndex); + if(%client.isReady) + { + %readyToStart = true; + break; + } + } + + if(%readyToStart || ClientGroup.getCount() < 1) + { + if($Host::warmupTime > 0 && $CurrentMissionType !$= "SinglePlayer") + countDown($Host::warmupTime * 1000); + else + Game.startMatch(); + } + else + { + schedule(2000, ServerGroup, "checkMissionStart"); + } +} + +function Countdown(%timeMS) +{ + if($countdownStarted) + return; + + echo("starting mission countdown..."); + + if(isObject(Game)) + %game = Game.getId(); + else + return; + + for(%x = 0; %x < $NumVehiclesDeploy; %x++) + $VehiclesDeploy[%x].getDataBlock().schedule(%timeMS / 2, "vehicleDeploy", $VehiclesDeploy[%x]); + $NumVehiclesDeploy = 0; + + $countdownStarted = true; + Game.matchStart = Game.schedule( %timeMS, "StartMatch" ); + + if (%timeMS > 30000) + notifyMatchStart(%timeMS); + + if(%timeMS >= 30000) + Game.thirtyCount = schedule(%timeMS - 30000, Game, "notifyMatchStart", 30000); + if(%timeMS >= 15000) + Game.fifteenCount = schedule(%timeMS - 15000, Game, "notifyMatchStart", 15000); + if(%timeMS >= 10000) + Game.tenCount = schedule(%timeMS - 10000, Game, "notifyMatchStart", 10000); + if(%timeMS >= 5000) + Game.fiveCount = schedule(%timeMS - 5000, Game, "notifyMatchStart", 5000); + if(%timeMS >= 4000) + Game.fourCount = schedule(%timeMS - 4000, Game, "notifyMatchStart", 4000); + if(%timeMS >= 3000) + Game.threeCount = schedule(%timeMS - 3000, Game, "notifyMatchStart", 3000); + if(%timeMS >= 2000) + Game.twoCount = schedule(%timeMS - 2000, Game, "notifyMatchStart", 2000); + if(%timeMS >= 1000) + Game.oneCount = schedule(%timeMS - 1000, Game, "notifyMatchStart", 1000); +} + +function EndCountdown(%timeMS) +{ + echo("mission end countdown..."); + + if(isObject(Game)) + %game = Game.getId(); + else + return; + + if(%timeMS >= 60000) + Game.endsixtyCount = schedule(%timeMS - 60000, Game, "notifyMatchEnd", 60000); + if(%timeMS >= 30000) + Game.endthirtyCount = schedule(%timeMS - 30000, Game, "notifyMatchEnd", 30000); + if(%timeMS >= 10000) + Game.endtenCount = schedule(%timeMS - 10000, Game, "notifyMatchEnd", 10000); + if(%timeMS >= 5000) + Game.endfiveCount = schedule(%timeMS - 5000, Game, "notifyMatchEnd", 5000); + if(%timeMS >= 4000) + Game.endfourCount = schedule(%timeMS - 4000, Game, "notifyMatchEnd", 4000); + if(%timeMS >= 3000) + Game.endthreeCount = schedule(%timeMS - 3000, Game, "notifyMatchEnd", 3000); + if(%timeMS >= 2000) + Game.endtwoCount = schedule(%timeMS - 2000, Game, "notifyMatchEnd", 2000); + if(%timeMS >= 1000) + Game.endoneCount = schedule(%timeMS - 1000, Game, "notifyMatchEnd", 1000); +} + +function CancelCountdown() +{ + if(Game.sixtyCount !$= "") + cancel(Game.sixtyCount); + if(Game.thirtyCount !$= "") + cancel(Game.thirtyCount); + if(Game.fifteenCount !$= "") + cancel(Game.fifteenCount); + if(Game.tenCount !$= "") + cancel(Game.tenCount); + if(Game.fiveCount !$= "") + cancel(Game.fiveCount); + if(Game.fourCount !$= "") + cancel(Game.fourCount); + if(Game.threeCount !$= "") + cancel(Game.threeCount); + if(Game.twoCount !$= "") + cancel(Game.twoCount); + if(Game.oneCount !$= "") + cancel(Game.oneCount); + if(isObject(Game)) + cancel(Game.matchStart); + + Game.matchStart = ""; + Game.thirtyCount = ""; + Game.fifteenCount = ""; + Game.tenCount = ""; + Game.fiveCount = ""; + Game.fourCount = ""; + Game.threeCount = ""; + Game.twoCount = ""; + Game.oneCount = ""; + + $countdownStarted = false; +} + +function CancelEndCountdown() +{ + //cancel the mission end countdown... + if(Game.endsixtyCount !$= "") + cancel(Game.endsixtyCount); + if(Game.endthirtyCount !$= "") + cancel(Game.endthirtyCount); + if(Game.endtenCount !$= "") + cancel(Game.endtenCount); + if(Game.endfiveCount !$= "") + cancel(Game.endfiveCount); + if(Game.endfourCount !$= "") + cancel(Game.endfourCount); + if(Game.endthreeCount !$= "") + cancel(Game.endthreeCount); + if(Game.endtwoCount !$= "") + cancel(Game.endtwoCount); + if(Game.endoneCount !$= "") + cancel(Game.endoneCount); + + Game.endmatchStart = ""; + Game.endthirtyCount = ""; + Game.endtenCount = ""; + Game.endfiveCount = ""; + Game.endfourCount = ""; + Game.endthreeCount = ""; + Game.endtwoCount = ""; + Game.endoneCount = ""; +} + +function resetServerDefaults() +{ + echo( "Resetting server defaults..." ); + + if( isObject( Game ) ) + Game.gameOver(); + + // Override server defaults with prefs: + exec( "scripts/ServerDefaults.cs" ); + exec( "prefs/ServerPrefs.cs" ); + + loadMission( $CurrentMission, $CurrentMissionType ); +} + +//------------------------------------------------------------------------------ +// Guid list maintenance functions: +function addToServerGuidList( %guid ) +{ + %count = getFieldCount( $HostGuidList ); + for ( %i = 0; %i < %count; %i++ ) + { + if ( getField( $HostGuidList, %i ) == %guid ) + return; + } + + $HostGuidList = $HostGuidList $= "" ? %guid : $HostGuidList TAB %guid; +} + +function removeFromServerGuidList( %guid ) +{ + %count = getFieldCount( $HostGuidList ); + for ( %i = 0; %i < %count; %i++ ) + { + if ( getField( $HostGuidList, %i ) == %guid ) + { + $HostGuidList = removeField( $HostGuidList, %i ); + return; + } + } + + // Huh, didn't find it. +} + +// will return the first admin found on the server +function getAdmin() +{ + %admin = 0; + for ( %clientIndex = 0; %clientIndex < ClientGroup.getCount(); %clientIndex++ ) + { + %cl = ClientGroup.getObject( %clientIndex ); + if(%cl.isAdmin || %cl.isSuperAdmin) + { + %admin = %cl; + break; + } + } + return %admin; +} + +function serverCmdSetPDAPose(%client, %val) +{ + // if client is in a vehicle, return + if(%client.player.isMounted()) + return; + + if(%val) + { + // play "PDA" animation thread on player + %client.player.setActionThread("PDA", false); + } + else + { + // cancel PDA animation thread + %client.player.setActionThread("root", true); + } +} + +function serverCmdProcessGameLink(%client, %arg1, %arg2, %arg3, %arg4, %arg5) +{ + Game.processGameLink(%client, %arg1, %arg2, %arg3, %arg4, %arg5); +} diff --git a/base/scripts/serverAudio.cs b/base/scripts/serverAudio.cs new file mode 100644 index 0000000..7e85a00 --- /dev/null +++ b/base/scripts/serverAudio.cs @@ -0,0 +1,148 @@ + +//-------------------------------------- +// Audio Descriptions +// + +//datablock AudioDescription(TestLooping3d) +//{ +// volume = 0.5; +// isLooping= true; +// +// is3D = true; +// minDistance= 10.0; +// MaxDistance= 640.0; +// type = $EffectAudioType; +//}; + +datablock AudioDescription(ProjectileLooping3d) +{ + volume = 1.0; + isLooping= true; + + is3D = true; + minDistance= 5.0; + MaxDistance= 20.0; + type = $EffectAudioType; +}; + +datablock AudioDescription(ClosestLooping3d) +{ + volume = 1.0; + isLooping= true; + + is3D = true; + minDistance= 5.0; + MaxDistance= 30.0; + type = $EffectAudioType; +}; + +datablock AudioDescription(CloseLooping3d) +{ + volume = 1.0; + isLooping= true; + + is3D = true; + minDistance= 10.0; + MaxDistance= 50.0; + type = $EffectAudioType; +}; + +datablock AudioDescription(AudioDefaultLooping3d) +{ + volume = 1.0; + isLooping= true; + + is3D = true; + minDistance= 20.0; + MaxDistance= 100.0; + type = $EffectAudioType; +}; + +datablock AudioDescription(AudioClosest3d) +{ + volume = 1.0; + isLooping= false; + + is3D = true; + minDistance= 5.0; + MaxDistance= 30.0; + type = $EffectAudioType; +}; + +datablock AudioDescription(AudioClose3d) +{ + volume = 1.0; + isLooping= false; + + is3D = true; + minDistance= 10.0; + MaxDistance= 60.0; + type = $EffectAudioType; +}; + +datablock AudioDescription(AudioDefault3d) +{ + volume = 1.0; + isLooping= false; + + is3D = true; + minDistance= 20.0; + MaxDistance= 100.0; + type = $EffectAudioType; +}; + +datablock AudioDescription(AudioExplosion3d) +// Regular weapon explosions +{ + volume = 1.0; + isLooping= false; + + is3D = true; + minDistance= 20.0; + MaxDistance= 150.0; + type = $EffectAudioType; +}; + +datablock AudioDescription(AudioBomb3d) +// Regular weapon explosions +{ + volume = 1.0; + isLooping= false; + + is3D = true; + minDistance= 80.0; + MaxDistance= 250.0; + type = $EffectAudioType; +}; + +datablock AudioDescription(AudioBIGExplosion3d) +// Big explosions like mortars, vehicles, and satchel charges +{ + volume = 1.0; + isLooping= false; + + is3D = true; + minDistance= 50.0; + MaxDistance= 250.0; + type = $EffectAudioType; +}; + +datablock AudioDescription(AudioLooping2D) +// Used for Looping Environmental Sounds +{ + volume = 1.0; + isLooping = true; + is3D = false; + type = $EffectAudioType; +}; + +datablock AudioDescription(Audio2D) +// Used for non-looping environmental sounds (like power on, power off) +{ + volume = 1.0; + isLooping = false; + is3D = false; + type = $EffectAudioType; +}; + + diff --git a/base/scripts/serverCommanderMap.cs b/base/scripts/serverCommanderMap.cs new file mode 100644 index 0000000..1a95d0a --- /dev/null +++ b/base/scripts/serverCommanderMap.cs @@ -0,0 +1,198 @@ +//------------------------------------------------------------------------------ +// Object control +//------------------------------------------------------------------------------ +function getControlObjectType(%obj) +{ + // turrets (camera is a turret) + if(%obj.getType() & $TypeMasks::TurretObjectType) + { + %barrel = %obj.getMountedImage(0); + if(isObject(%barrel)) + return(addTaggedString(%barrel.getName())); + } + + // unknown + return('Unknown'); +} + +function serverCmdControlObject(%client, %targetId) +{ + // match started: + if(!$MatchStarted) + { + commandToClient(%client, 'ControlObjectResponse', false, "mission has not started."); + return; + } + + // object: + %obj = getTargetObject(%targetId); + if(%obj == -1) + { + commandToClient(%client, 'ControlObjectResponse', false, "failed to find target object."); + return; + } + + // shapebase: + if(!(%obj.getType() & $TypeMasks::ShapeBaseObjectType)) + { + commandToClient(%client, 'ControlObjectResponse', false, "object cannot be controlled."); + return; + } + + // can control: + if(!%obj.getDataBlock().canControl) + { + commandToClient(%client, 'ControlObjectResponse', false, "object cannot be controlled."); + return; + } + + // check damage: + if(%obj.getDamageState() !$= "Enabled") + { + commandToClient(%client, 'ControlObjectResponse', false, "object is " @ %obj.getDamageState()); + return; + } + + // powered: + if(!%obj.isPowered()) + { + commandToClient(%client, 'ControlObjectResponse', false, "object is not powered."); + return; + } + + // controlled already: + %control = %obj.getControllingClient(); + if(%control) + { + if(%control == %client) + commandToClient(%client, 'ControlObjectResponse', false, "you are already controlling that object."); + else + commandToClient(%client, 'ControlObjectResponse', false, "someone is already controlling that object."); + return; + } + + // same team? + if(getTargetSensorGroup(%targetId) != %client.getSensorGroup()) + { + commandToClient(%client, 'ControlObjectResonse', false, "cannot control enemy objects."); + return; + } + + // dead? + if(%client.player == 0) + { + commandToClient(%client, 'ControlObjectResponse', false, "dead people cannot control objects."); + return; + } + + //mounted in a vehicle? + if (%client.player.isMounted()) + { + commandToClient(%client, 'ControlObjectResponse', false, "can't control objects while mounted in a vehicle."); + return; + } + + %client.setControlObject(%obj); + commandToClient(%client, 'ControlObjectResponse', true, getControlObjectType(%obj)); +} + +//------------------------------------------------------------------------------ +// TV Functions +//------------------------------------------------------------------------------ +function resetControlObject(%client) +{ + if((%client.player != 0) && !%client.player.isDestroyed() && $MatchStarted) + %client.setControlObject(%client.player); + else + %client.setControlObject(%client.camera); +} + +function serverCmdResetControlObject(%client) +{ + resetControlObject(%client); + commandToClient(%client, 'ControlObjectReset'); +} + +function serverCmdAttachCommanderCamera(%client, %target) +{ + %obj = getTargetObject(%target); + if((%obj == -1) || (%target == -1)) + { + resetControlObject(%client); + commandToClient(%client, 'CameraAttachResponse', false); + return; + } + + // shape base object? + if(!(%obj.getType() & $TypeMasks::ShapeBaseObjectType)) + { + commandToClient(%client, 'CameraAttachResponse', false); + return; + } + + // can be observed? + if(!%obj.getDataBlock() || !%obj.getDataBlock().canObserve) + { + commandToClient(%client, 'CameraAttachResponse', false); + return; + } + + // same team? + if(getTargetSensorGroup(%target) != %client.getSensorGroup()) + { + commandToClient(%client, 'CameraAttachResponse', false); + return; + } + + // powered? + if(!%obj.isPowered()) + { + commandToClient(%client, 'CameraAttachResponse', false); + return; + } + + // client connection? + if(%obj.getClassName() $= "GameConnection") + { + %player = %obj.player; + if(%obj == %client) + { + if((%player != 0) && !%player.isDestroyed()) + { + %client.setControlObject(%player); + commandToClient(%client, 'CameraAttachResponse', true); + return; + } + } + + %obj = %player; + } + + if((%obj == 0) || %obj.isDestroyed()) + { + commandToClient(%client, 'CameraAttachResponse', false); + return; + } + + %data = %obj.getDataBlock(); + %obsData = %data.observeParameters; + %obsX = firstWord(%obsData); + %obsY = getWord(%obsData, 1); + %obsZ = getWord(%obsData, 2); + + %client.camera.mode = "observerFollow"; + %transform = %obj.getTransform(); + %client.camera.setTransform(%transform); + %client.camera.setOrbitMode(%obj, %transform, %obsX, %obsY, %obsZ); + %client.setControlObject(%client.camera); + commandToClient(%client, 'CameraAttachResponse', true); +} + +//------------------------------------------------------------------------------ +// Scoping +function serverCmdScopeCommanderMap(%client, %scope) +{ + if(%scope) + resetControlObject(%client); + %client.scopeCommanderMap(%scope); +} \ No newline at end of file diff --git a/base/scripts/serverDefaults.cs b/base/scripts/serverDefaults.cs new file mode 100644 index 0000000..4c0d115 --- /dev/null +++ b/base/scripts/serverDefaults.cs @@ -0,0 +1,57 @@ +$teamSkin[0] = 'blank'; +$teamSkin[1] = 'base'; +$teamSkin[2] = 'baseb'; +$teamSkin[3] = 'swolf'; +$teamSkin[4] = 'dsword'; +$teamSkin[5] = 'beagle'; +$teamSkin[6] = 'cotp'; + +$teamName[0] = 'Unassigned'; +$teamName[1] = 'Storm'; +$teamName[2] = 'Inferno'; +$teamName[3] = 'Star Wolf'; +$teamName[4] = 'Diamond Sword'; +$teamName[5] = 'Blood Eagle'; +$teamName[6] = 'Phoenix'; + +$holoName[0] = ""; +$holoName[1] = "Storm"; +$holoName[2] = "Inferno"; +$holoName[3] = "Starwolf"; +$holoName[4] = "DSword"; +$holoName[5] = "BloodEagle"; +$holoName[6] = "Harbinger"; + +$Host::AdminList = ""; // all players that will be automatically an admin upon joining server +$Host::SuperAdminList = ""; // all players that will be automatically a super admin upon joining server +$Host::BindAddress = ""; // set to an ip address if the server wants to specify which NIC/IP to use +$Host::RulesSet = "Base"; +$Host::Port = 28000; +$Host::GameName = "Tribes 2 Server"; +$Host::Password = ""; +$Host::AdminPassword = ""; +$Host::Dedicated = 0; +$Host::MissionType = "CTF"; +$Host::Map = "Katabatic"; +$Host::MaxPlayers = 64; +$Host::TimeLimit = 20; +$Host::BotCount = 2; +$Host::BotsEnabled = 0; +$Host::MinBotDifficulty = 0.5; +$Host::MaxBotDifficulty = 0.75; +$Host::Info = "This is a Tribes 2 Server."; +$Host::NoSmurfs = 0; +$Host::VoteTime = 20; // amount of time before votes are calculated +$Host::VotePassPercent = 60; // percent needed to pass a vote +$Host::KickBanTime = 300; // specified in seconds +$Host::BanTime = 1800; // specified in seconds +$Host::PlayerRespawnTimeout = 60; // time before a dead player is forced into observer mode +$Host::warmupTime = 20; +$Host::TournamentMode = 0; +$Host::allowAdminPlayerVotes = 1; +$Host::FloodProtectionEnabled = 1; +$Host::MaxMessageLen = 120; + +$MasterServerAddress = "IP:198.74.40.152:28000"; + +$Audio::voiceCodec = ".v12"; // .v12 (1.2 kbits/sec), .v24 (2.4 kbits/sec), .v29 (2.9kbits/sec) diff --git a/base/scripts/serverTasks.cs b/base/scripts/serverTasks.cs new file mode 100644 index 0000000..758e7f2 --- /dev/null +++ b/base/scripts/serverTasks.cs @@ -0,0 +1,1071 @@ +// possible commands: +//--------------------------------------------------------------------------- +$TaskDescription['EscortPlayer'] = 'Escort player %1'; +$TaskDescription['RepairPlayer'] = 'Repair player %1'; +$TaskDescription['AttackPlayer'] = 'Attack enemy player %1'; +$TaskDescription['DefendFlag'] = 'Defend the flag'; +$TaskDescription['ReturnFlag'] = 'Return our flag'; +$TaskDescription['CaptureFlag'] = 'Capture the enemy flag'; +$TaskDescription['CaptureObjective'] = 'Capture the %1'; +$TaskDescription['DefendObjective'] = 'Defend the %1'; +$TaskDescription['DefendLocation'] = 'Defend location'; +$TaskDescription['MeetLocation'] = 'Meet at location'; +$TaskDescription['BombLocation'] = 'Bomb at location'; +$TaskDescription['AttackLocation'] = 'Attack at location'; +$TaskDescription['LazeTarget'] = 'Laze the target'; +$TaskDescription['DeployTurretBarrel'] = 'Deploy turret barrels'; +$TaskDescription['DeployTurret'] = 'Deploy turrets'; +$TaskDescription['DeployEquipment'] = 'Deploy stations'; +$TaskDescription['DeploySensor'] = 'Deploy sensors'; +$TaskDescription['RepairObject'] = 'Repair the %1'; +$TaskDescription['DefendObject'] = 'Defend the %1'; +$TaskDescription['AttackObject'] = 'Attack the enemy %1'; +$TaskDescription['MortarObject'] = 'Mortar the enemy %1'; +$TaskDescription['LazeObject'] = 'Laze the enemy %1'; +$TaskDescription['BombObject'] = 'Bomb the %1'; +$TaskDescription['TakeFlag'] = 'Take flag from %1'; +$TaskDescription['GiveFlag'] = 'Give flag to %1'; +$TaskDescription['NeedRide'] = '%1 needs a ride.'; +$TaskDescription['NeedPassenger'] = '%1 needs vehicle support.'; + +// AIObjectives for commands: +//--------------------------------------------------------------------------- +$ObjectiveTable['AttackLocation', type] = "AIOAttackLocation"; +$ObjectiveTable['AttackLocation', weightLevel1] = 2500; +$ObjectiveTable['AttackLocation', weightLevel2] = 1000; +$ObjectiveTable['AttackLocation', weightLevel3] = 500; +$ObjectiveTable['AttackLocation', weightLevel4] = 100; +$ObjectiveTable['AttackLocation', equipment] = ""; +$ObjectiveTable['AttackLocation', desiredEquipment] = "ShieldPack"; +$ObjectiveTable['AttackLocation', buyEquipmentSet] = "LightShieldSet MediumShieldSet HeavyShieldSet"; +$ObjectiveTable['AttackLocation', offense] = "true"; +$ObjectiveTable['AttackLocation', defense] = "false"; +$ObjectiveTable['AttackLocation', assignTimeout] = "5000"; // period allowed for humans to ack +$ObjectiveTable['AttackLocation', maxAssigned] = "2"; // not added if at least this many playrs have ack'd + +$ObjectiveTable['DefendLocation', type] = "AIODefendLocation"; +$ObjectiveTable['DefendLocation', weightLevel1] = 2500; +$ObjectiveTable['DefendLocation', weightLevel2] = 1000; +$ObjectiveTable['DefendLocation', weightLevel3] = 500; +$ObjectiveTable['DefendLocation', weightLevel4] = 100; +$ObjectiveTable['DefendLocation', equipment] = ""; +$ObjectiveTable['DefendLocation', desiredEquipment] = "ShieldPack"; +$ObjectiveTable['DefendLocation', buyEquipmentSet] = "MediumShieldSet LightShieldSet HeavyShieldSet"; +$ObjectiveTable['DefendLocation', offense] = "false"; +$ObjectiveTable['DefendLocation', defense] = "true"; +$ObjectiveTable['DefendLocation', assignTimeout] = "5000"; // period allowed for humans to ack +$ObjectiveTable['DefendLocation', maxAssigned] = "2"; // not added if at least this many playrs have ack'd + +$ObjectiveTable['MeetLocation', type] = "AIODefendLocation"; +$ObjectiveTable['MeetLocation', weightLevel1] = 2500; +$ObjectiveTable['MeetLocation', weightLevel2] = 1000; +$ObjectiveTable['MeetLocation', weightLevel3] = 500; +$ObjectiveTable['MeetLocation', weightLevel4] = 100; +$ObjectiveTable['MeetLocation', equipment] = ""; +$ObjectiveTable['MeetLocation', desiredEquipment] = ""; +$ObjectiveTable['MeetLocation', buyEquipmentSet] = ""; +$ObjectiveTable['MeetLocation', offense] = "false"; +$ObjectiveTable['MeetLocation', defense] = "true"; +$ObjectiveTable['MeetLocation', assignTimeout] = "5000"; // period allowed for humans to ack +$ObjectiveTable['MeetLocation', maxAssigned] = "2"; // not added if at least this many playrs have ack'd + +$ObjectiveTable['DefendObjective', type] = "AIODefendLocation"; +$ObjectiveTable['DefendObjective', weightLevel1] = 2500; +$ObjectiveTable['DefendObjective', weightLevel2] = 1000; +$ObjectiveTable['DefendObjective', weightLevel3] = 500; +$ObjectiveTable['DefendObjective', weightLevel4] = 100; +$ObjectiveTable['DefendObjective', equipment] = ""; +$ObjectiveTable['DefendObjective', desiredEquipment] = "ShieldPack"; +$ObjectiveTable['DefendObjective', buyEquipmentSet] = "MediumShieldSet LightShieldSet HeavyShieldSet"; +$ObjectiveTable['DefendObjective', offense] = "false"; +$ObjectiveTable['DefendObjective', defense] = "true"; +$ObjectiveTable['DefendObjective', assignTimeout] = "5000"; // period allowed for humans to ack +$ObjectiveTable['DefendObjective', maxAssigned] = "2"; // not added if at least this many playrs have ack'd + +$ObjectiveTable['DefendObject', type] = "AIODefendLocation"; +$ObjectiveTable['DefendObject', weightLevel1] = 2500; +$ObjectiveTable['DefendObject', weightLevel2] = 1000; +$ObjectiveTable['DefendObject', weightLevel3] = 500; +$ObjectiveTable['DefendObject', weightLevel4] = 100; +$ObjectiveTable['DefendObject', equipment] = ""; +$ObjectiveTable['DefendObject', desiredEquipment] = "ShieldPack"; +$ObjectiveTable['DefendObject', buyEquipmentSet] = "MediumShieldSet LightShieldSet HeavyShieldSet"; +$ObjectiveTable['DefendObject', offense] = "false"; +$ObjectiveTable['DefendObject', defense] = "true"; +$ObjectiveTable['DefendObject', assignTimeout] = "5000"; // period allowed for humans to ack +$ObjectiveTable['DefendObject', maxAssigned] = "2"; // not added if at least this many playrs have ack'd + +$ObjectiveTable['AttackObject', type] = "AIOAttackObject"; +$ObjectiveTable['AttackObject', weightLevel1] = 2500; +$ObjectiveTable['AttackObject', weightLevel2] = 1000; +$ObjectiveTable['AttackObject', weightLevel3] = 500; +$ObjectiveTable['AttackObject', weightLevel4] = 100; +$ObjectiveTable['AttackObject', equipment] = ""; +$ObjectiveTable['AttackObject', desiredEquipment] = "ShieldPack Plasma PlasmaAmmo"; +$ObjectiveTable['AttackObject', buyEquipmentSet] = "MediumShieldSet LightShieldSet HeavyShieldSet"; +$ObjectiveTable['AttackObject', offense] = "false"; +$ObjectiveTable['AttackObject', defense] = "true"; +$ObjectiveTable['AttackObject', assignTimeout] = "5000"; // period allowed for humans to ack +$ObjectiveTable['AttackObject', maxAssigned] = "2"; // not added if at least this many playrs have ack'd + +$ObjectiveTable['EscortPlayer', type] = "AIOEscortPlayer"; +$ObjectiveTable['EscortPlayer', weightLevel1] = 2500; +$ObjectiveTable['EscortPlayer', weightLevel2] = 1000; +$ObjectiveTable['EscortPlayer', weightLevel3] = 500; +$ObjectiveTable['EscortPlayer', weightLevel4] = 100; +$ObjectiveTable['EscortPlayer', equipment] = ""; +$ObjectiveTable['EscortPlayer', desiredEquipment] = "EnergyPack"; +$ObjectiveTable['EscortPlayer', buyEquipmentSet] = "LightDefaultSet"; +$ObjectiveTable['EscortPlayer', offense] = "true"; +$ObjectiveTable['EscortPlayer', defense] = "true"; +$ObjectiveTable['EscortPlayer', assignTimeout] = "5000"; // period allowed for humans to ack +$ObjectiveTable['EscortPlayer', maxAssigned] = "2"; // not added if at least this many playrs have ack'd + +$ObjectiveTable['AttackPlayer', type] = "AIOAttackPlayer"; +$ObjectiveTable['AttackPlayer', weightLevel1] = 2500; +$ObjectiveTable['AttackPlayer', weightLevel2] = 1000; +$ObjectiveTable['AttackPlayer', weightLevel3] = 500; +$ObjectiveTable['AttackPlayer', weightLevel4] = 100; +$ObjectiveTable['AttackPlayer', equipment] = ""; +$ObjectiveTable['AttackPlayer', desiredEquipment] = "EnergyPack"; +$ObjectiveTable['AttackPlayer', buyEquipmentSet] = "LightDefaultSet"; +$ObjectiveTable['AttackPlayer', offense] = "true"; +$ObjectiveTable['AttackPlayer', defense] = "true"; +$ObjectiveTable['AttackPlayer', assignTimeout] = "5000"; // period allowed for humans to ack +$ObjectiveTable['AttackPlayer', maxAssigned] = "2"; // not added if at least this many playrs have ack'd + +$ObjectiveTable['RepairPlayer', type] = "AIORepairObject"; +$ObjectiveTable['RepairPlayer', weightLevel1] = 2500; +$ObjectiveTable['RepairPlayer', weightLevel2] = 1000; +$ObjectiveTable['RepairPlayer', weightLevel3] = 500; +$ObjectiveTable['RepairPlayer', weightLevel4] = 100; +$ObjectiveTable['RepairPlayer', equipment] = "RepairPack"; +$ObjectiveTable['RepairPlayer', desiredEquipment] = "RepairPack"; +$ObjectiveTable['RepairPlayer', buyEquipmentSet] = "LightRepairSet MediumRepairSet HeavyRepairSet"; +$ObjectiveTable['RepairPlayer', offense] = "true"; +$ObjectiveTable['RepairPlayer', defense] = "true"; +$ObjectiveTable['RepairPlayer', assignTimeout] = "5000"; // period allowed for humans to ack +$ObjectiveTable['RepairPlayer', maxAssigned] = "2"; // not added if at least this many playrs have ack'd + +$ObjectiveTable['RepairObject', type] = "AIORepairObject"; +$ObjectiveTable['RepairObject', weightLevel1] = 2500; +$ObjectiveTable['RepairObject', weightLevel2] = 1000; +$ObjectiveTable['RepairObject', weightLevel3] = 500; +$ObjectiveTable['RepairObject', weightLevel4] = 100; +$ObjectiveTable['RepairObject', equipment] = "RepairPack"; +$ObjectiveTable['RepairObject', desiredEquipment] = "RepairPack"; +$ObjectiveTable['RepairObject', buyEquipmentSet] = "LightRepairSet MediumRepairSet HeavyRepairSet"; +$ObjectiveTable['RepairObject', offense] = "true"; +$ObjectiveTable['RepairObject', defense] = "true"; +$ObjectiveTable['RepairObject', assignTimeout] = "5000"; // period allowed for humans to ack +$ObjectiveTable['RepairObject', maxAssigned] = "2"; // not added if at least this many playrs have ack'd + +$ObjectiveTable['MortarObject', type] = "AIOMortarObject"; +$ObjectiveTable['MortarObject', weightLevel1] = 2500; +$ObjectiveTable['MortarObject', weightLevel2] = 1000; +$ObjectiveTable['MortarObject', weightLevel3] = 500; +$ObjectiveTable['MortarObject', weightLevel4] = 100; +$ObjectiveTable['MortarObject', equipment] = "Mortar MortarAmmo"; +$ObjectiveTable['MortarObject', desiredEquipment] = ""; +$ObjectiveTable['MortarObject', buyEquipmentSet] = "HeavyAmmoSet"; +$ObjectiveTable['MortarObject', offense] = "true"; +$ObjectiveTable['MortarObject', defense] = "true"; +$ObjectiveTable['MortarObject', assignTimeout] = "5000"; // period allowed for humans to ack +$ObjectiveTable['MortarObject', maxAssigned] = "2"; // not added if at least this many playrs have ack'd + +$ObjectiveTable['LazeObject', type] = "AIOLazeObject"; +$ObjectiveTable['LazeObject', weightLevel1] = 2500; +$ObjectiveTable['LazeObject', weightLevel2] = 1000; +$ObjectiveTable['LazeObject', weightLevel3] = 500; +$ObjectiveTable['LazeObject', weightLevel4] = 100; +$ObjectiveTable['LazeObject', equipment] = "TargetingLaser"; +$ObjectiveTable['LazeObject', desiredEquipment] = ""; +$ObjectiveTable['LazeObject', buyEquipmentSet] = "LightEnergyDefault"; +$ObjectiveTable['LazeObject', offense] = "true"; +$ObjectiveTable['LazeObject', defense] = "true"; +$ObjectiveTable['LazeObject', assignTimeout] = "5000"; // period allowed for humans to ack +$ObjectiveTable['LazeObject', maxAssigned] = "2"; // not added if at least this many playrs have ack'd + +$ObjectiveTable['BombObject', type] = "AIOBombLocation"; +$ObjectiveTable['BombObject', weightLevel1] = 2500; +$ObjectiveTable['BombObject', weightLevel2] = 2500; +$ObjectiveTable['BombObject', weightLevel3] = 2500; +$ObjectiveTable['BombObject', weightLevel4] = 2500; +$ObjectiveTable['BombObject', equipment] = ""; +$ObjectiveTable['BombObject', desiredEquipment] = ""; +$ObjectiveTable['BombObject', buyEquipmentSet] = ""; +$ObjectiveTable['BombObject', offense] = "false"; +$ObjectiveTable['BombObject', defense] = "false"; +$ObjectiveTable['BombObject', assignTimeout] = "5000"; // period allowed for humans to ack +$ObjectiveTable['BombObject', maxAssigned] = "2"; // not added if at least this many playrs have ack'd + +$ObjectiveTable['DeployTurret', type] = "AIODeployEquipment"; +$ObjectiveTable['DeployTurret', weightLevel1] = 2500; +$ObjectiveTable['DeployTurret', weightLevel2] = 1000; +$ObjectiveTable['DeployTurret', weightLevel3] = 500; +$ObjectiveTable['DeployTurret', weightLevel4] = 100; +$ObjectiveTable['DeployTurret', equipment] = "TurretOutdoorDeployable"; +$ObjectiveTable['DeployTurret', desiredEquipment] = "TurretOutdoorDeployable"; +$ObjectiveTable['DeployTurret', buyEquipmentSet] = "MediumOutdoorTurretSet"; +$ObjectiveTable['DeployTurret', offense] = "false"; +$ObjectiveTable['DeployTurret', defense] = "true"; +$ObjectiveTable['DeployTurret', assignTimeout] = "5000"; // period allowed for humans to ack +$ObjectiveTable['DeployTurret', maxAssigned] = "2"; // not added if at least this many playrs have ack'd + +$ObjectiveTable['DeployEquipment', type] = "AIODeployEquipment"; +$ObjectiveTable['DeployEquipment', weightLevel1] = 2500; +$ObjectiveTable['DeployEquipment', weightLevel2] = 1000; +$ObjectiveTable['DeployEquipment', weightLevel3] = 500; +$ObjectiveTable['DeployEquipment', weightLevel4] = 100; +$ObjectiveTable['DeployEquipment', equipment] = "InventoryDeployable"; +$ObjectiveTable['DeployEquipment', desiredEquipment] = "InventoryDeployable"; +$ObjectiveTable['DeployEquipment', buyEquipmentSet] = "MediumInventorySet"; +$ObjectiveTable['DeployEquipment', offense] = "false"; +$ObjectiveTable['DeployEquipment', defense] = "true"; +$ObjectiveTable['DeployEquipment', assignTimeout] = "5000"; // period allowed for humans to ack +$ObjectiveTable['DeployEquipment', maxAssigned] = "2"; // not added if at least this many playrs have ack'd + +$ObjectiveTable['BombLocation', type] = "AIOBombLocation"; +$ObjectiveTable['BombLocation', weightLevel1] = 2500; +$ObjectiveTable['BombLocation', weightLevel2] = 2500; +$ObjectiveTable['BombLocation', weightLevel3] = 2500; +$ObjectiveTable['BombLocation', weightLevel4] = 2500; +$ObjectiveTable['BombLocation', equipment] = ""; +$ObjectiveTable['BombLocation', desiredEquipment] = ""; +$ObjectiveTable['BombLocation', buyEquipmentSet] = ""; +$ObjectiveTable['BombLocation', offense] = "false"; +$ObjectiveTable['BombLocation', defense] = "false"; +$ObjectiveTable['BombLocation', assignTimeout] = "5000"; // period allowed for humans to ack +$ObjectiveTable['BombLocation', maxAssigned] = "2"; // not added if at least this many playrs have ack'd + +$ObjectiveTable['TakeFlag', type] = "AIOEscortPlayer"; +$ObjectiveTable['TakeFlag', weightLevel1] = 2500; +$ObjectiveTable['TakeFlag', weightLevel2] = 1000; +$ObjectiveTable['TakeFlag', weightLevel3] = 500; +$ObjectiveTable['TakeFlag', weightLevel4] = 100; +$ObjectiveTable['TakeFlag', equipment] = ""; +$ObjectiveTable['TakeFlag', desiredEquipment] = "EnergyPack"; +$ObjectiveTable['TakeFlag', buyEquipmentSet] = "LightDefaultSet"; +$ObjectiveTable['TakeFlag', offense] = "true"; +$ObjectiveTable['TakeFlag', defense] = "true"; +$ObjectiveTable['TakeFlag', assignTimeout] = "5000"; // period allowed for humans to ack +$ObjectiveTable['TakeFlag', maxAssigned] = "0"; // not added if at least this many playrs have ack'd + +$ObjectiveTable['GiveFlag', type] = "AIOEscortPlayer"; +$ObjectiveTable['GiveFlag', weightLevel1] = 2500; +$ObjectiveTable['GiveFlag', weightLevel2] = 1000; +$ObjectiveTable['GiveFlag', weightLevel3] = 500; +$ObjectiveTable['GiveFlag', weightLevel4] = 100; +$ObjectiveTable['GiveFlag', equipment] = ""; +$ObjectiveTable['GiveFlag', desiredEquipment] = "EnergyPack"; +$ObjectiveTable['GiveFlag', buyEquipmentSet] = "LightDefaultSet"; +$ObjectiveTable['GiveFlag', offense] = "true"; +$ObjectiveTable['GiveFlag', defense] = "true"; +$ObjectiveTable['GiveFlag', assignTimeout] = "5000"; // period allowed for humans to ack +$ObjectiveTable['GiveFlag', maxAssigned] = "0"; // not added if at least this many playrs have ack'd + +$ObjectiveTable['NeedRide', type] = "AIOEscortPlayer"; +$ObjectiveTable['NeedRide', weightLevel1] = 2500; +$ObjectiveTable['NeedRide', weightLevel2] = 1000; +$ObjectiveTable['NeedRide', weightLevel3] = 500; +$ObjectiveTable['NeedRide', weightLevel4] = 100; +$ObjectiveTable['NeedRide', equipment] = ""; +$ObjectiveTable['NeedRide', desiredEquipment] = "EnergyPack"; +$ObjectiveTable['NeedRide', buyEquipmentSet] = "LightDefaultSet"; +$ObjectiveTable['NeedRide', offense] = "true"; +$ObjectiveTable['NeedRide', defense] = "true"; +$ObjectiveTable['NeedRide', assignTimeout] = "5000"; // period allowed for humans to ack +$ObjectiveTable['NeedRide', maxAssigned] = "0"; // not added if at least this many playrs have ack'd + +$ObjectiveTable['NeedPassenger', type] = "AIOEscortPlayer"; +$ObjectiveTable['NeedPassenger', weightLevel1] = 2500; +$ObjectiveTable['NeedPassenger', weightLevel2] = 1000; +$ObjectiveTable['NeedPassenger', weightLevel3] = 500; +$ObjectiveTable['NeedPassenger', weightLevel4] = 100; +$ObjectiveTable['NeedPassenger', equipment] = ""; +$ObjectiveTable['NeedPassenger', desiredEquipment] = ""; +$ObjectiveTable['NeedPassenger', buyEquipmentSet] = ""; +$ObjectiveTable['NeedPassenger', offense] = "true"; +$ObjectiveTable['NeedPassenger', defense] = "true"; +$ObjectiveTable['NeedPassenger', assignTimeout] = "5000"; // period allowed for humans to ack +$ObjectiveTable['NeedPassenger', maxAssigned] = "2"; // not added if at least this many playrs have ack'd + +//--------------------------------------------------------------------------- +// *** temp ai hooks... are in aiHumanTasks.cs +//--------------------------------------------------------------------------- +//--------------------------------------------------------------------------- +new SimSet("PendingAIObjectives"); +$MAX_OBJECTIVE_ASSIGN_TIMEOUT = 30000; + +//--------------------------------------------------------------------------- +function isAIActive(%team) +{ + %count = ClientGroup.getCount(); + for(%i = 0; %i < %count; %i++) + { + %client = ClientGroup.getObject(%i); + if(%client.isAIControlled() && (%client.getSensorGroup() == %team)) + return(true); + } + return(false); +} + +function humanTeammatesExist(%client) +{ + %team = %client.getSensorGroup(); + %count = ClientGroup.getCount(); + for(%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + if(%cl != %client && !%cl.isAIControlled() && (%cl.getSensorGroup() == %team)) + return(true); + } + return(false); +} + +function AIObjective::assignObjective(%this) +{ + PendingAIObjectives.remove(%this); + %this.issuedByClientId.currentAIObjective = -1; + aiAddHumanObjective(%this.issuedByClientId, %this, -1, false); +} + +//--------------------------------------------------------------------------- +function serverCmdBuildClientTask(%client, %task, %team) +{ + %description = $TaskDescription[getWord(%task, 0)]; + if(%description $= "") + { + %client.currentTaskDescription = ""; + return; + } + + // build an ai objective from this task + %client.currentAIObjective = -1; + if(isAIActive(%client.getSensorGroup())) + { + %objective = buildAIObjective(%client, %task); + if(%objective > 0) + { + if((%objective.assignTimeout) < 0 || (%objective.assignTimeout > $MAX_OBJECTIVE_ASSIGN_TIMEOUT)) + %objective.assignTimeout = $MAX_OBJECTIVE_ASSIGN_TIMEOUT; + + //add the acknowledge description on to the objective + %targetId = %client.getTargetId(); + if(%targetId < 0) + %targetName = ""; + else + { + %targetName = getTargetGameName(%targetId); + if(%targetName $= "") + return; + } + %objective.ackDescription = buildTaggedString(%description, %targetName); + + //override the assignTimeout if there are no human teammates + if (!humanTeammatesExist(%client)) + %objective.assignTimeout = 1; + + //only send the command to the AI if maxAssigned is > 0 + if (%objective.maxAssigned > 0) + { + PendingAIObjectives.add(%objective); + %client.currentAIObjective = %objective; + %objective.assignThread = %objective.schedule(%objective.assignTimeout, assignObjective); + } + } + } + + %client.currentTaskIsTeam = %team; + %client.currentTaskDescription = %description; +} + +function serverCmdSendTaskToClientTarget(%client, %clientTargetID) +{ + %targetClient = $TargetToClient[%clientTargetID]; + serverCmdSendTaskToClient(%client, %targetClient, true); +} + +function serverCmdSendTaskToClient(%client, %targetClient, %fromCmdMap) +{ + if(!isObject(%targetClient)) + return; + + if(%client.getSensorGroup() != %targetClient.getSensorGroup()) + return; + + if(%client.currentTaskDescription $= "") + return; + + if(%client.currentTaskIsTeam) + return; + + if(%targetClient.isAIControlled()) + { + if(%client.currentAIObjective != -1) + { + %objective = aiAddHumanObjective(%client, %client.currentAIObjective, %targetClient, %fromCmdMap); + + if(%objective == %client.currentAIObjective) + { + PendingAIObjectives.remove(%client.currentAIObjective); + cancel(%client.currentAIObjective.assignThread); + } + + if(%objective > 0) + %client.currentAIObjective = -1; + } + } + else + { + %targetId = %client.getTargetId(); + if(%targetId < 0) + %targetName = ""; + else + { + %targetName = getTargetGameName(%targetId); + if(%targetName $= "") + return; + } + + commandToClient(%targetClient, 'TaskInfo', %client, -1, false, %client.currentTaskDescription, %targetName); + commandToClient(%targetClient, 'PotentialTask', %client.name, %client.currentTaskDescription, %targetName); + %client.sendTargetTo(%targetClient, false); + } +} + +//--------------------------------------------------------------------------- +function serverCmdSendTaskToTeam(%client) +{ + if(%client.currentTaskDescription $= "") + return; + + if(!%client.currentTaskIsTeam) + return; + + %targetId = %client.getTargetId(); + + if(%targetId < 0) + %targetName = ""; + else + { + %targetName = getTargetGameName(%targetId); + if(%targetName $= "") + return; + } + + %count = ClientGroup.getCount(); + for(%i = 0; %i < %count; %i++) + { + %recipient = ClientGroup.getObject(%i); + if(%recipient.getSensorGroup() == %client.getSensorGroup()) + { + if(!%recipient.isAIControlled()) + { + commandToClient(%recipient, 'TaskInfo', %client, %client.currentAIObjective, true, %client.currentTaskDescription, %targetName); + commandToClient(%recipient, 'PotentialTeamTask', %client.currentTaskDescription, %targetName); + + %client.sendTargetTo(%recipient, false); + } + } + } +} + +//--------------------------------------------------------------------------- +function serverCmdAcceptTask(%client, %issueClient, %AIObjective, %description) +{ + if(%client.getSensorGroup() != %issueClient.getSensorGroup()) + return; + + if(%description $= "") + return; + + // handle an aiobjective: + if(%AIObjective != -1) + { + %count = PendingAIObjectives.getCount(); + for(%i = 0; %i < %count; %i++) + { + %obj = PendingAIObjectives.getObject(%i); + if((%obj == %AIObjective) && (%obj.sensorGroup == %client.getSensorGroup)) + { + // inc the ack count and remove if past max + %obj.ackCount++; + if(%obj.ackCount >= %obj.maxAssigned) + { + if(%issueClient.currentAIObjective == %obj) + %issueClient.currentAIObjective = -1; + %obj.delete(); + } + } + } + } + + commandToClient(%issueClient, 'TaskAccepted', %client.name, %description); + commandToClient(%client, 'TaskInfo', %issueClient, -1, %issueClient.name, %description); + commandToClient(%client, 'AcceptedTask', %description); + %client.sendTargetTo(%client, true); + + //audio feedback - if the client is not the issuer... + if (%client != %issueClient) + { + %wavFile = "~wvoice/" @ %client.voice @ "/cmd.acknowledge.wav"; + MessageClient(%issueClient, 'MsgTaskCompleted', addTaggedString(%wavFile)); + } +} + +function serverCmdDeclineTask(%client, %issueClient, %description, %teamCmd) +{ + if(%client.getSensorGroup() != %issueClient.getSensorGroup()) + return; + + if(%description $= "") + return; + + //no need to be spammed by the entire team declining your team command + if (%teamCmd) + return; + + commandToClient(%issueClient, 'TaskDeclined', %client.name, %description); + + //audio feedback + %wavFile = "~wvoice/" @ %client.voice @ "/cmd.decline.wav"; + MessageClient(%issueClient, 'MsgTaskCompleted', addTaggedString(%wavFile)); +} + +function serverCmdCompletedTask(%client, %issueClient, %description) +{ + if(%client.getSensorGroup() != %issueClient.getSensorGroup()) + return; + + if(%description $= "") + return; + + commandToClient(%issueClient, 'TaskCompleted', %client.name, %description); + + //audio feedback + %wavFile = "~wvoice/" @ %client.voice @ "/cmd.completed.wav"; + MessageClient(%issueClient, 'MsgTaskCompleted', addTaggedString(%wavFile)); +} + +//--------------------------------------------------------------------------- +function buildAIObjective(%client, %command) +{ + %targetId = %client.getTargetId(); + %targetPos = %client.getTargetPos(); + + %targetObj = -1; + if(%targetId != -1) + %targetObj = getTargetObject(%targetId); + + // create a new objective + %tableIndex = getWord(%command, 0); + %objective = new AIObjective($ObjectiveTable[%tableIndex, type]) + { + dataBlock = "AIObjectiveMarker"; + weightLevel1 = $ObjectiveTable[%tableIndex, weightLevel1]; + weightLevel2 = $ObjectiveTable[%tableIndex, weightLevel2]; + weightLevel3 = $ObjectiveTable[%tableIndex, weightLevel3]; + weightLevel4 = $ObjectiveTable[%tableIndex, weightLevel4]; + equipment = $ObjectiveTable[%tableIndex, equipment]; + desiredEquipment = $ObjectiveTable[%tableIndex, desiredEquipment]; + buyEquipmentSet = $ObjectiveTable[%tableIndex, buyEquipmentSet]; + offense = $ObjectiveTable[%tableIndex, offense]; + defense = $ObjectiveTable[%tableIndex, defense]; + issuedByHuman = true; + issuedByClientId = %client; + targetObjectId = %targetObj; + targetClientId = %targetObj.client; + location = %targetPos; + position = %targetPos; + }; + + %objective.assignTimeout = $ObjectiveTable[%tableIndex, assignTimeout]; + %objective.maxAssigned = $ObjectiveTable[%tableIndex, maxAssigned]; + %objective.ackCount = 0; + %objective.sensorGroup = %client.getSensorGroup(); + + MissionCleanup.add(%objective); + return(%objective); +} + +//----------------------------------------------------------------------------- +//VOICE command hooks here... +function findClientInView(%client, %maxDist) +{ + //make sure the player is alive + if (!AIClientIsAlive(%client)) + return -1; + + //get various info about the player's eye + %srcEyeTransform = %client.player.getEyeTransform(); + %srcEyePoint = firstWord(%srcEyeTransform) @ " " @ getWord(%srcEyeTransform, 1) @ " " @ getWord(%srcEyeTransform, 2); + %srcEyeVector = VectorNormalize(%client.player.getEyeVector()); + + //see if there's an enemy near our defense location... + %clientCount = 0; + %count = ClientGroup.getCount(); + %viewedClient = -1; + %clientDot = -1; + for(%i = 0; %i < %count; %i++) + { + %cl = ClientGroup.getObject(%i); + + //make sure we find an AI who's alive and not the client + if (%cl != %client && isObject(%cl.player) && %cl.team == %client.team) + { + //make sure the player is within range + %clPos = %cl.player.getWorldBoxCenter(); + %distance = VectorDist(%clPos, %srcEyePoint); + if (%distance <= %maxDist) + { + //create the vector from the client to the client + %clVector = VectorNormalize(VectorSub(%clPos, %srcEyePoint)); + + //see if the dot product is greater than our current, and greater than 0.6 + %dot = VectorDot(%clVector, %srcEyeVector); + + if (%dot > 0.6 && %dot > %clientDot) + { + //make sure we're not looking through walls... + %mask = $TypeMasks::TerrainObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::StaticShapeObjectType; + %losResult = containerRayCast(%srcEyePoint, %clPos, %mask); + %losObject = GetWord(%losResult, 0); + if (!isObject(%losObject)) + { + %viewedClient = %cl; + %clientDot = %dot; + } + } + } + } + } + + return %viewedClient; +} + +function findTargetInView(%client, %maxDist) +{ + if (!AIClientIsAlive(%client)) + return -1; + + // look from player's eye position for objects + %mask = $TypeMasks::TerrainObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::StaticShapeObjectType | $TypeMasks::GameBaseObjectType; + %eyeVec = %client.player.getEyeVector(); + %eyeTrans = %client.player.getEyeTransform(); + %eyePos = posFromTransform(%eyeTrans); + %nEyeVec = VectorNormalize(%eyeVec); + %scEyeVec = VectorScale(%nEyeVec, %maxDist); + %eyeStart = VectorAdd(%eyePos, VectorScale(%nEyeVec, 1)); + %eyeEnd = VectorAdd(%eyePos, %scEyeVec); + %losResult = containerRayCast(%eyeStart, %eyeEnd, %mask); + %losObject = GetWord(%losResult, 0); + if (!isObject(%losObject) || !(%losObject.getType() & $TypeMasks::GameBaseObjectType) || %losObject.getTarget() == -1) + return -1; + else + return %losObject; +} + +//----------------------------------------------------------------------------------------------------- +//It would be nice to create server tasks for these voice commands + +// installChatItem( 'ChatCmdDefendCarrier', "Cover our flag carrier!", "def.carrier", true ); +// installChatItem( 'ChatCmdAttackFlag', "Get the enemy flag!", "att.flag", true ); +// installChatItem( 'ChatCmdAttackGenerator', "Destroy the enemy generator!", "att.generator", true ); +// installChatItem( 'ChatCmdAttackVehicle', "Destroy the enemy vehicle!", "att.vehicle", true ); +// +// installChatItem( 'ChatCmdDefendCarrier', "Cover our flag carrier!", "def.carrier", true ); +// installChatItem( 'ChatCmdDefendFlag', "Defend our flag!", "def.flag", true ); +// installChatItem( 'ChatCmdDefendGenerator', "Protect the generator!", "def.generator", true ); +// installChatItem( 'ChatCmdDefendSensors', "Defend our sensors!", "def.sensors", true ); +// installChatItem( 'ChatCmdDefendTurrets', "Defend our turrets!", "def.turrets", true ); +// installChatItem( 'ChatCmdDefendVehicle', "Defend our vehicle!", "def.vehicle", true ); +// installChatItem( 'ChatCmdDefendNexus', "Defend the nexus!", "def.nexus", true ); +// +// installChatItem( 'ChatCmdGiveMeFlag', "Give me the flag!", "flg.give", true ); +// installChatItem( 'ChatCmdReturnFlag', "Retrieve our flag!", "flg.retrieve", true ); +// installChatItem( 'ChatCmdTakeFlag', "Take the flag from me!", "flg.take", true ); +// installChatItem( 'ChatCmdHunterGiveFlags', "Give your flags to me!", "flg.huntergive", true ); +// installChatItem( 'ChatCmdHunterTakeFlags', "Take my flags!", "flg.huntertake", true ); +//----------------------------------------------------------------------------------------------------- + +$LookAtClientDistance = 35; +$LookAtObjectDistance = 400; +function CreateVoiceServerTask(%client, %cmdCode) +{ + //switch on the different voice binds we can create a task for: + %losObj = findTargetInView(%client, $LookAtObjectDistance); + %targetClient = findClientInView(%client, $LookAtClientDistance); + %cmdSent = false; + switch$ (%cmdCode) + { + //these have an object as the target of the command + case 'ChatRepairBase': + if (isObject(%losObj) && %losObj.getDamagePercent() > 0 && isTargetFriendly(%losObj.getTarget(), %client.getSensorGroup())) + { + %client.setTargetId(%losObj.getTarget()); + %client.setTargetPos(%losObj.position); + serverCmdBuildClientTask(%client, 'RepairObject', true); + serverCmdSendTaskToTeam(%client); + %cmdSent = true; + } + + case 'ChatRepairGenerator': + if (isObject(%losObj) && %losObj.getDamagePercent() > 0 && isTargetFriendly(%losObj.getTarget(), %client.getSensorGroup())) + { + //make sure the target actually is a generator + if (%losObj.getDataBlock().getName() $= "GeneratorLarge" || %losObj.getDataBlock().getName() $= "SolarPanel") + { + %client.setTargetId(%losObj.getTarget()); + %client.setTargetPos(%losObj.position); + serverCmdBuildClientTask(%client, 'RepairObject', true); + serverCmdSendTaskToTeam(%client); + %cmdSent = true; + } + } + + case 'ChatRepairSensors': + if (isObject(%losObj) && %losObj.getDamagePercent() > 0 && isTargetFriendly(%losObj.getTarget(), %client.getSensorGroup())) + { + //make sure the target actually is a sensor + if (%losObj.getDataBlock().getName() $= "SensorLargePulse" || %losObj.getDataBlock().getName() $= "SensorMediumPulse") + { + %client.setTargetId(%losObj.getTarget()); + %client.setTargetPos(%losObj.position); + serverCmdBuildClientTask(%client, 'RepairObject', true); + serverCmdSendTaskToTeam(%client); + %cmdSent = true; + } + } + + case 'ChatRepairTurrets': + if (isObject(%losObj) && %losObj.getDamagePercent() > 0 && isTargetFriendly(%losObj.getTarget(), %client.getSensorGroup())) + { + //make sure the target actually is a turret + if (%losObj.getDataBlock().getName() $= "TurretBaseLarge" || %losObj.getDataBlock().getName() $= "TurretDeployedFloorIndoor" || + %losObj.getDataBlock().getName() $= "TurretDeployedWallIndoor" || %losObj.getDataBlock().getName() $= "TurretDeployedCeilingIndoor" || + %losObj.getDataBlock().getName() $= "TurretDeployedOutdoor" || %losObj.getDataBlock().getName() $= "SentryTurret") + { + %client.setTargetId(%losObj.getTarget()); + %client.setTargetPos(%losObj.position); + serverCmdBuildClientTask(%client, 'RepairObject', true); + serverCmdSendTaskToTeam(%client); + %cmdSent = true; + } + } + + case 'ChatRepairVehicle': + if (isObject(%losObj) && %losObj.getDamagePercent() > 0 && isTargetFriendly(%losObj.getTarget(), %client.getSensorGroup())) + { + //make sure the target actually is a vehicle station + if (%losObj.getDataBlock().getName() $= "StationVehicle") + { + %client.setTargetId(%losObj.getTarget()); + %client.setTargetPos(%losObj.position); + serverCmdBuildClientTask(%client, 'RepairObject', true); + serverCmdSendTaskToTeam(%client); + %cmdSent = true; + } + } + + case 'ChatCmdTargetBase' or 'ChatTargetNeed': + if (isObject(%losObj) && %losObj.getDamagePercent() < 1 && !isTargetFriendly(%losObj.getTarget(), %client.getSensorGroup())) + { + %client.setTargetId(%losObj.getTarget()); + %client.setTargetPos(%losObj.position); + serverCmdBuildClientTask(%client, 'LazeObject', true); + serverCmdSendTaskToTeam(%client); + %cmdSent = true; + } + + case 'ChatCmdTargetTurret': + if (isObject(%losObj) && %losObj.getDamagePercent() < 1 && !isTargetFriendly(%losObj.getTarget(), %client.getSensorGroup())) + { + //make sure the target actually is a turret + if (%losObj.getDataBlock().getName() $= "TurretBaseLarge" || %losObj.getDataBlock().getName() $= "TurretDeployedFloorIndoor" || + %losObj.getDataBlock().getName() $= "TurretDeployedWallIndoor" || %losObj.getDataBlock().getName() $= "TurretDeployedCeilingIndoor" || + %losObj.getDataBlock().getName() $= "TurretDeployedOutdoor" || %losObj.getDataBlock().getName() $= "SentryTurret") + { + %client.setTargetId(%losObj.getTarget()); + %client.setTargetPos(%losObj.position); + serverCmdBuildClientTask(%client, 'LazeObject', true); + serverCmdSendTaskToTeam(%client); + %cmdSent = true; + } + } + + case 'ChatCmdTargetSensors': + if (isObject(%losObj) && %losObj.getDamagePercent() < 1 && !isTargetFriendly(%losObj.getTarget(), %client.getSensorGroup())) + { + //make sure the target actually is a sensor + if (%losObj.getDataBlock().getName() $= "SensorLargePulse" || %losObj.getDataBlock().getName() $= "SensorMediumPulse") + { + %client.setTargetId(%losObj.getTarget()); + %client.setTargetPos(%losObj.position); + serverCmdBuildClientTask(%client, 'LazeObject', true); + serverCmdSendTaskToTeam(%client); + %cmdSent = true; + } + } + + case 'ChatTargetFire': + if (isObject(%losObj) && %losObj.getDamagePercent() < 1 && !isTargetFriendly(%losObj.getTarget(), %client.getSensorGroup())) + { + %client.setTargetId(%losObj.getTarget()); + %client.setTargetPos(%losObj.position); + serverCmdBuildClientTask(%client, 'mortarObject', true); + serverCmdSendTaskToTeam(%client); + %cmdSent = true; + } + + case 'ChatCmdAttackSensors': + if (isObject(%losObj) && %losObj.getDamagePercent() < 1 && !isTargetFriendly(%losObj.getTarget(), %client.getSensorGroup())) + { + //make sure the target actually is a sensor + if (%losObj.getDataBlock().getName() $= "SensorLargePulse" || %losObj.getDataBlock().getName() $= "SensorMediumPulse") + { + %client.setTargetId(%losObj.getTarget()); + %client.setTargetPos(%losObj.position); + serverCmdBuildClientTask(%client, 'mortarObject', true); + serverCmdSendTaskToTeam(%client); + %cmdSent = true; + } + } + + case 'ChatCmdAttackTurrets': + if (isObject(%losObj) && %losObj.getDamagePercent() < 1 && !isTargetFriendly(%losObj.getTarget(), %client.getSensorGroup())) + { + //make sure the target actually is a turret + if (%losObj.getDataBlock().getName() $= "TurretBaseLarge") + { + %client.setTargetId(%losObj.getTarget()); + %client.setTargetPos(%losObj.position); + serverCmdBuildClientTask(%client, 'mortarObject', true); + serverCmdSendTaskToTeam(%client); + %cmdSent = true; + } + } + + case 'ChatCmdDefendBase': + if (isObject(%losObj) && isTargetFriendly(%losObj.getTarget(), %client.getSensorGroup())) + { + %client.setTargetId(%losObj.getTarget()); + %client.setTargetPos(%losObj.position); + serverCmdBuildClientTask(%client, 'DefendLocation', true); + serverCmdSendTaskToTeam(%client); + %cmdSent = true; + } + + case 'ChatCmdDefendGenerator': + if (isObject(%losObj) && isTargetFriendly(%losObj.getTarget(), %client.getSensorGroup())) + { + //make sure the target actually is a generator + if (%losObj.getDataBlock().getName() $= "GeneratorLarge" || %losObj.getDataBlock().getName() $= "SolarPanel") + { + %client.setTargetId(%losObj.getTarget()); + %client.setTargetPos(%losObj.position); + serverCmdBuildClientTask(%client, 'DefendLocation', true); + serverCmdSendTaskToTeam(%client); + %cmdSent = true; + } + } + + case 'ChatCmdDefendSensors': + if (isObject(%losObj) && isTargetFriendly(%losObj.getTarget(), %client.getSensorGroup())) + { + //make sure the target actually is a sensor + if (%losObj.getDataBlock().getName() $= "SensorLargePulse" || %losObj.getDataBlock().getName() $= "SensorMediumPulse") + { + %client.setTargetId(%losObj.getTarget()); + %client.setTargetPos(%losObj.position); + serverCmdBuildClientTask(%client, 'DefendLocation', true); + serverCmdSendTaskToTeam(%client); + %cmdSent = true; + } + } + + case 'ChatCmdDefendTurrets': + if (isObject(%losObj) && isTargetFriendly(%losObj.getTarget(), %client.getSensorGroup())) + { + //make sure the target actually is a turret + if (%losObj.getDataBlock().getName() $= "TurretBaseLarge" || %losObj.getDataBlock().getName() $= "TurretDeployedFloorIndoor" || + %losObj.getDataBlock().getName() $= "TurretDeployedWallIndoor" || %losObj.getDataBlock().getName() $= "TurretDeployedCeilingIndoor" || + %losObj.getDataBlock().getName() $= "TurretDeployedOutdoor" || %losObj.getDataBlock().getName() $= "SentryTurret") + { + %client.setTargetId(%losObj.getTarget()); + %client.setTargetPos(%losObj.position); + serverCmdBuildClientTask(%client, 'DefendLocation', true); + serverCmdSendTaskToTeam(%client); + %cmdSent = true; + } + } + + case 'ChatCmdDefendVehicle': + if (isObject(%losObj) && isTargetFriendly(%losObj.getTarget(), %client.getSensorGroup())) + { + //make sure the target actually is a vehicle station + if (%losObj.getDataBlock().getName() $= "StationVehicle") + { + %client.setTargetId(%losObj.getTarget()); + %client.setTargetPos(%losObj.position); + serverCmdBuildClientTask(%client, 'DefendLocation', true); + serverCmdSendTaskToTeam(%client); + %cmdSent = true; + } + } + + //this one is special, it will create a task for the issuer instead of the person you're looking at... + case 'ChatTaskCover': + %cmdSent = true; + if (AIClientIsAlive(%targetClient) && %targetClient.team == %client.team) + { + %client.setTargetId(%targetClient.player.getTarget()); + %client.setTargetPos(%targetClient.player.position); + + //build and send the command to the target player + serverCmdBuildClientTask(%client, 'EscortPlayer', false); + serverCmdSendTaskToClient(%client, %client, false); + serverCmdAcceptTask(%client, %client, -1, "Escort player" SPC getTaggedString(%targetClient.name)); + } + + //These all have the speaker as the target of the command + case 'ChatCmdDefendMe' or 'ChatHelp' or 'ChatNeedCover': + %client.setTargetId(%client.player.getTarget()); + %client.setTargetPos(%client.player.position); + %cmdSent = true; + if (AIClientIsAlive(%targetClient)) + { + //build and send the command to the target player + serverCmdBuildClientTask(%client, 'EscortPlayer', false); + serverCmdSendTaskToClient(%client, %targetClient, false); + } + else + { + serverCmdBuildClientTask(%client, 'EscortPlayer', true); + serverCmdSendTaskToTeam(%client); + } + + case 'ChatRepairMe': + if (%client.player.getDamagePercent() > 0) + { + %client.setTargetId(%client.player.getTarget()); + %client.setTargetPos(%client.player.position); + %cmdSent = true; + if (AIClientIsAlive(%targetClient)) + { + //build and send the command to the target player + serverCmdBuildClientTask(%client, 'RepairPlayer', false); + serverCmdSendTaskToClient(%client, %targetClient, false); + } + else + { + serverCmdBuildClientTask(%client, 'RepairPlayer', true); + serverCmdSendTaskToTeam(%client); + } + } + + case 'ChatFlagGotIt': + //send this only to the AI we're controlling... + %cmdSent = true; + if (aiHumanHasControl(%client, %client.controlAI)) + { + %client.setTargetId(%client.player.getTarget()); + %client.setTargetPos(%client.player.position); + serverCmdBuildClientTask(%client, 'EscortPlayer', false); + serverCmdSendTaskToClient(%client, %client.controlAI, false); + } + + case 'ChatCmdTakeFlag' or 'ChatCmdHunterTakeFlags': + %client.setTargetId(%client.player.getTarget()); + %client.setTargetPos(%client.player.position); + %cmdSent = true; + if (AIClientIsAlive(%targetClient)) + { + //build and send the command to the target player + serverCmdBuildClientTask(%client, 'TakeFlag', false); + serverCmdSendTaskToClient(%client, %targetClient, false); + } + else + { + serverCmdBuildClientTask(%client, 'TakeFlag', true); + serverCmdSendTaskToTeam(%client); + } + + case 'ChatCmdGiveMeFlag' or 'ChatCmdHunterGiveFlags': + %client.setTargetId(%client.player.getTarget()); + %client.setTargetPos(%client.player.position); + %cmdSent = true; + if (AIClientIsAlive(%targetClient)) + { + if (!%targetClient.isAIControlled()) + { + //build and send the command to the target player + serverCmdBuildClientTask(%client, 'GiveFlag', false); + serverCmdSendTaskToClient(%client, %targetClient, false); + } + else + { + //send the response to the ai... + AIRespondToEvent(%client, %cmdCode, %targetClient); + } + } + else + { + serverCmdBuildClientTask(%client, 'GiveFlag', true); + serverCmdSendTaskToTeam(%client); + } + + case 'ChatNeedDriver' or 'ChatNeedPilot' or 'ChatNeedRide' or 'ChatNeedHold': + %client.setTargetId(%client.player.getTarget()); + %client.setTargetPos(%client.player.position); + %cmdSent = true; + if (AIClientIsAlive(%targetClient) && !%targetClient.isAIControlled()) + { + //build and send the command to the target player + serverCmdBuildClientTask(%client, 'NeedRide', false); + serverCmdSendTaskToClient(%client, %targetClient, false); + } + else + { + serverCmdBuildClientTask(%client, 'NeedRide', true); + serverCmdSendTaskToTeam(%client); + } + + //vehicle passengers - these commands are for either air or ground + case 'ChatNeedEscort' or 'ChatNeedPassengers' or 'ChatNeedBombardier' or 'ChatNeedSupport' or 'ChatNeedTailgunner': + %client.setTargetId(%client.player.getTarget()); + %client.setTargetPos(%client.player.position); + %cmdSent = true; + //find out if the client is in a ground vehicle or not... + if (AIClientIsAlive(%targetClient) && !%targetClient.isAIControlled()) + { + //build and send the command to the target player + serverCmdBuildClientTask(%client, 'NeedPassenger', false); + serverCmdSendTaskToClient(%client, %targetClient, false); + } + else + { + serverCmdBuildClientTask(%client, 'NeedPassenger', true); + serverCmdSendTaskToTeam(%client); + } + + default: + %cmdSent = true; + if (AIClientIsAlive(%targetClient) && %targetClient.isAIControlled()) + { + //the bot should detect the client + %targetClient.clientDetected(%client); + + //only respond if the client is on the same team + AIRespondToEvent(%client, %cmdCode, %targetClient); + } + } + + //handle any rejected commands by the bots + if (!%cmdSent && isObject(%targetClient) && %targetClient.isAIControlled()) + { + schedule(250, %client.player, "AIPlayAnimSound", %targetClient, %client.player.getWorldBoxCenter(), "cmd.decline", -1, -1, 0); + schedule(2000, %client.player, "AIRespondToEvent", %client, 'ChatCmdWhat', %targetClient); + } +} + diff --git a/base/scripts/simGroup.cs b/base/scripts/simGroup.cs new file mode 100644 index 0000000..1bed506 --- /dev/null +++ b/base/scripts/simGroup.cs @@ -0,0 +1,21 @@ +//-------------------------------------------------------------------------- +// +// +// +//-------------------------------------------------------------------------- + +function SimGroup::onTrigger(%this, %triggerId, %on) +{ + // Just relay the trigger event to all sub objects... + // + for (%i = 0; %i < %this.getCount(); %i++) + %this.getObject(%i).onTrigger(%triggerId, %on); +} + +function SimGroup::onTriggerTick(%this, %triggerId) +{ + // Just relay the trigger event to all sub objects... + // + for (%i = 0; %i < %this.getCount(); %i++) + %this.getObject(%i).onTriggerTick(%triggerId); +} diff --git a/base/scripts/spdialog.cs b/base/scripts/spdialog.cs new file mode 100644 index 0000000..6d14341 --- /dev/null +++ b/base/scripts/spdialog.cs @@ -0,0 +1,654 @@ +function createText(%who) +{ + // The name all enemies have in the training missions + $EnemyName = "Enemy"; + //Mission Specific wavs, lines and evals + //============================================================================= + //Here are all the voice files for the missions + // the wav variables are the file names for that line + // text elements are text that appears on the screen + // and the evals are functions that get called + + // ANY/Misc + %who.text[ANY_healthKit, wav] ="voice/Training/Any/ANY.healthkit.wav"; + %who.text[ANY_healthKit, text] ="Press " @ findTrainingControlButtons(useRepairKit) @ " to use your health kit."; + %who.text[ANY_objComplete01, wav] ="voice/Training/Any/ANY.obj_complete_01.wav"; + %who.text[ANY_objComplete02, wav] ="voice/Training/Any/ANY.obj_complete_02.wav"; + %who.text[ANY_tipNow01, wav] ="voice/Training/Any/ANY.tip_now01.wav"; + %who.text[ANY_tipNow02, wav] ="voice/Training/Any/ANY.tip_now02.wav"; + %who.text[ANY_hunting, wav] ="voice/Training/Any/ANY.hunting.wav"; + %who.text[ANY_kudo01, wav] ="voice/Training/Any/ANY.kudo01.wav"; + %who.text[ANY_kudo02, wav] ="voice/Training/Any/ANY.kudo02.wav"; + %who.text[ANY_kudo03, wav] ="voice/Training/Any/ANY.kudo03.wav"; + %who.text[ANY_kudo04, wav] ="voice/Training/Any/ANY.kudo04.wav"; + %who.text[ANY_waypoint01, wav] ="voice/Training/Any/ANY.waypoint01.wav"; + %who.text[ANY_waypoint02, wav] ="voice/Training/Any/ANY.waypoint02.wav"; + %who.text[ANY_waypoint02, wav] ="voice/Training/Any/ANY.waypoint02.wav"; + %who.text[ANY_waypoint03, wav] ="voice/Training/Any/ANY.waypoint03.wav"; + %who.text[ANY_prompt01, wav] ="voice/Training/Any/ANY.prompt01.wav"; + %who.text[ANY_prompt02, wav] ="voice/Training/Any/ANY.prompt02.wav"; + %who.text[ANY_prompt03, wav] ="=voice/Training/Any/ANY.prompt03.wav"; + %who.text[ANY_prompt04, wav] ="voice/Training/Any/ANY.prompt04.wav"; + %who.text[ANY_prompt05, wav] ="voice/Training/Any/ANY.prompt05.wav"; + %who.text[ANY_prompt06, wav] ="voice/Training/Any/ANY.prompt06.wav"; + %who.text[ANY_prompt07, wav] ="voice/Training/Any/ANY.prompt07.wav"; + %who.text[ANY_warning01, wav] ="voice/Training/Any/ANY.warning01.wav"; + %who.text[ANY_warning02, wav] ="voice/Training/Any/ANY.warning02.wav"; + %who.text[ANY_warning03, wav] ="voice/Training/Any/ANY.warning03.wav"; + %who.text[ANY_warning03, eval] ="singlePlayerPlayGuiCheck();"; + %who.text[ANY_warning04, wav] ="voice/Training/Any/ANY.warning04.wav"; + %who.text[ANY_warning05, wav] ="voice/Training/Any/ANY.warning05.wav"; + %who.text[ANY_warning06, wav] ="voice/Training/Any/ANY.warning06.wav"; + %who.text[ANY_alright, wav] ="voice/Training/Any/ANY.alright.wav"; + %who.text[ANY_blowoff01, wav] ="voice/Training/Any/ANY.blowoff01.wav"; + %who.text[ANY_blowoff02, wav] ="voice/Training/Any/ANY.blowoff02.wav"; + %who.text[ANY_blowoff03, wav] ="voice/Training/Any/ANY.blowoff03.wav"; + %who.text[ANY_blowoff04, wav] ="voice/Training/Any/ANY.blowoff04.wav"; + %who.text[ANY_careful, wav] ="voice/Training/Any/ANY.careful.wav"; + %who.text[ANY_good, wav] ="voice/Training/Any/ANY.good.wav"; + %who.text[ANY_jingo01, wav] ="voice/Training/Any/ANY.jingo01.wav"; + %who.text[ANY_jingo02, wav] ="voice/Training/Any/ANY.jingo02.wav"; + %who.text[ANY_jingo03, wav] ="voice/Training/Any/ANY.jingo03.wav"; + %who.text[ANY_check01, wav] ="voice/Training/Any/ANY.check01.wav"; + %who.text[ANY_check02, wav] ="voice/Training/Any/ANY.check02.wav"; + %who.text[ANY_abortwarn, wav] ="voice/Training/Any/ANY.abortwarn.wav"; + %who.text[ANY_abortsoon, wav] ="voice/Training/Any/ANY.abortsoon.wav"; + %who.text[ANY_abort, wav] ="voice/Training/Any/ANY.abort.wav"; + %who.text[ANY_abort, eval] ="schedule(3000, 0, disconnect);"; + %who.text[ANY_tipskiing, wav] ="voice/Training/Any/ANY.tip.skiing.wav"; + %who.text[ANY_tipskiing, text] ="Hold down the Jump button ("@findTrainingControlButtons(jump)@") to ski."; + %who.text[ANY_tipscavenge01, wav] ="voice/Training/Any/ANY.tip.scavenge01.wav"; + %who.text[ANY_tipscavenge02, wav] ="voice/Training/Any/ANY.tip.scavenge02.wav"; + %who.text[ANY_move, wav] ="voice/Training/Any/ANY.move.wav"; + %who.text[ANY_practiceSki, wav] ="voice/Training/Any/ANY.practice.ski.wav"; + %who.text[ANY_practiceJet, wav] ="voice/Training/Any/ANY.practice.jet.wav"; + %who.text[ANY_offCourse, wav] ="voice/Training/Any/ANY.offCourse.wav"; + + // Mission 1 + %who.text[T1_01, wav] ="voice/Training/Mission1/T1_01.wav"; + %who.text[T1_01a, wav] ="voice/Training/Mission1/T1_01a.wav"; + %who.text[T1_01b, wav] ="voice/Training/Mission1/T1_01b.wav"; + %who.text[T1_01c, wav] ="voice/Training/Mission1/T1_01c.wav"; + %who.text[T1_02, wav] ="voice/Training/Mission1/T1_02.wav"; + %who.text[T1_02a, wav] ="voice/Training/Mission1/T1_02a.wav"; + %who.text[T1_03, wav] ="voice/Training/Mission1/T1_03.wav"; + //%who.text[T1_03, text] ="Press "@findTrainingControlButtons(toggleHelpGui)@" to toggle HUD help."; + //%who.text[T1_03, eval] ="toggleHelpText();"; + %who.text[T1_03a, wav] ="voice/Training/Mission1/T1_03a.wav"; + %who.text[T1_03a, eval] = "lockArmorHack();autoToggleHelpHud(true);"; + //%who.text[T1_download01, eval] = "serverPlay2d(DownloadingSound);"; + %who.text[T1_download01, text] = "Armor data transfer initiated."; + %who.text[T1_03b, wav] ="voice/Training/Mission1/T1_03b.wav"; + %who.text[T1_03b, text] ="Use "@findTrainingControlButtons(pageMessageHudUp)@" and "@findTrainingControlButtons(pageMessageHudDown)@" to scroll through the message window."; + %who.text[T1_03b, eval] ="flashMessage();"; + %who.text[T1_03c, wav] ="voice/Training/Mission1/T1_03c.wav"; + %who.text[T1_03c, eval] ="flashObjective();"; + %who.text[T1_03c02, wav] ="voice/Training/Mission1/T1_03c-02.wav"; + %who.text[T1_04, wav] ="voice/Training/Mission1/T1_04.wav"; + %who.text[T1_04, eval] ="flashCompass();"; + %who.text[T1_05, wav] ="voice/Training/Mission1/T1_05.wav"; + %who.text[T1_05, eval] ="flashHealth();"; + %who.text[T1_06, wav] ="voice/Training/Mission1/T1_06.wav"; + %who.text[T1_06, eval] ="flashEnergy();"; + %who.text[T1_tipenergy, wav] ="voice/Training/Mission1/T1.tip.energy.wav"; + %who.text[T1_08, wav] ="voice/Training/Mission1/T1_08.wav"; + %who.text[T1_08, eval] ="flashInventory();"; + %who.text[T1_09, wav] ="voice/Training/Mission1/T1_09.wav"; + %who.text[T1_09, eval] ="flashSensor();"; + %who.text[T1_10, wav] ="voice/Training/Mission1/T1_10.wav"; + %who.text[T1_10, text] ="Press "@findTrainingControlButtons(toggleHelpGui)@" to toggle HUD help."; + %who.text[T1_10, eval] ="autoToggleHelpHud(false);"; + %who.text[T1_10a, wav] ="voice/Training/Mission1/T1_10a.wav"; + %who.text[T1_10a, eval] ="setWaypointAt(\"-287.5 393.1 76.2\", \"Health Patches\");movemap.push();$player.player.setMoveState(false);"; + %who.text[T1_10b, wav] ="voice/Training/Mission1/T1_10b.wav"; + %who.text[T1_10b, text] ="Run over freestanding Health Patches to repair your armor."; + %who.text[T1_10b, eval] = "$player.hurryUp = schedule(40000, 0, hurryPlayerUp); endOpeningSpiel(); updateTrainingObjectiveHud(obj8);"; + %who.text[T1_tipjets01, wav] ="voice/Training/Mission1/T1.tip.jets01.wav"; + %who.text[T1_tipjets01, text] ="Press "@findTrainingControlButtons(Jump)@" to jump. "@findTrainingControlButtons(mouseJet)@" triggers the jets. Jump just before you jet to increase jetting distance."; + %who.text[T1_11, wav] ="voice/Training/Mission1/T1_11.wav"; + %who.text[T1_11, text] ="When necessary, press "@findTrainingControlButtons(useRepairKit)@" to trigger your armor's health kit for partial repairs."; + %who.text[T1_12a, wav] ="voice/Training/Mission1/T1_12a.wav"; + %who.text[T1_12b, wav] ="voice/Training/Mission1/T1_12b.wav"; + %who.text[T1_tipIFF, wav] ="voice/Training/Mission1/T1.tip.IFF.wav"; + %who.text[T1_13, wav] ="voice/Training/Mission1/T1_13.wav"; + %who.text[T1_13, eval] ="updateTrainingObjectiveHud(obj7);"; + %who.text[T1_14, wav] ="voice/Training/Mission1/T1_14.wav"; + %who.text[T1_14, eval] ="flashWeapon(0);"; + %who.text[T1_tipblaster01, wav] ="voice/Training/Mission1/T1.tip.blaster01.wav"; + %who.text[T1_15, wav] ="voice/Training/Mission1/T1_15.wav"; + %who.text[T1_15, eval] ="flashWeapon(2);"; + %who.text[T1_tipchaingun, wav] ="voice/Training/Mission1/T1.tip.chaingun.wav"; + %who.text[T1_16, wav] ="voice/Training/Mission1/T1_16.wav"; + %who.text[T1_16, eval] ="flashWeapon(3); "; + %who.text[T1_tipspinfusor, wav] ="voice/Training/Mission1/T1.tip.spinfusor.wav"; + %who.text[T1_17, wav] ="voice/Training/Mission1/T1_17.wav"; + %who.text[T1_17, eval] = "flashWeaponsHud();"; + %who.text[T1_tipblaster02, wav] ="voice/Training/Mission1/T1.tip.blaster02.wav"; + %who.text[T1_tipblaster02, eval] = "use(Blaster);"; + %who.text[T1_tipjets02, wav] ="voice/Training/Mission1/T1.tip.jets02.wav"; + %who.text[T1_18, wav] ="voice/Training/Mission1/T1_18.wav"; + //%who.text[T1_18, text] ="Press "@findTrainingControlButtons(Jump)@" to jump. "@findTrainingControlButtons(mouseJet)@" triggers the jets. Jump just before you jet to increase jetting distance."; + %who.text[T1_18, eval] = "queEnemySet(0); activatePackage(singlePlayerMissionAreaEnforce);"; + %who.text[T1_18a, wav] ="voice/Training/Mission1/T1_18a.wav"; + %who.text[T1_1802, wav] ="voice/Training/Mission1/T1_18-02.wav"; + %who.text[T1_19, wav] ="voice/Training/Mission1/T1_19.wav"; + %who.text[T1_20, wav] ="voice/Training/Mission1/T1_20.wav"; + %who.text[T1_21, wav] ="voice/Training/Mission1/T1_21.wav"; + %who.text[T1_22, wav] ="voice/Training/Mission1/T1_22.wav"; + %who.text[T1_22, eval] ="setWaypointat(nameToId(Tower).position, \"BE Tower\"); updateTrainingObjectiveHud(obj4);"; + %who.text[T1_22a, wav] ="voice/Training/Mission1/T1_22a.wav"; + %who.text[T1_23, wav] ="voice/Training/Mission1/T1_23.wav"; + %who.text[T1_23a, wav] ="voice/Training/Mission1/T1_23a.wav"; + %who.text[T1_23b, wav] ="voice/Training/Mission1/T1_23b.wav"; + %who.text[T1_24, wav] ="voice/Training/Mission1/T1_24.wav"; + %who.text[T1_24, text] ="Press "@findTrainingControlButtons(throwWeapon)@" to drop your current weapon."; + %who.text[T1_24a, wav] ="voice/Training/Mission1/T1_24a.wav"; + %who.text[T1_tippack01, wav] ="voice/Training/Mission1/T1.tip.pack01.wav"; + %who.text[T1_tippack01, eval] ="flashPack();"; + %who.text[T1_tipsniper01, wav] ="voice/Training/Mission1/T1.tip.sniper01.wav"; + %who.text[T1_tipsniper02, wav] ="voice/Training/Mission1/T1.tip.sniper02.wav"; + %who.text[T1_tipsniper02, text] = "You must have an Energy Pack to fire the laser rifle."; + %who.text[T1_tipsniper03, wav] ="voice/Training/Mission1/T1.tip.sniper03.wav"; + %who.text[T1_tipsniper03, text] ="Hold down "@findTrainingControlButtons(toggleZoom)@" to trigger the zoom feature."; + %who.text[T1_tipsniper04, wav] ="voice/Training/Mission1/T1.tip.sniper04.wav"; + %who.text[T1_25, wav] ="voice/Training/Mission1/T1_25.wav"; + %who.text[T1_25, eval] ="updateTrainingObjectiveHud(obj3);"; + %who.text[T1_25a, wav] ="voice/Training/Mission1/T1_25a.wav"; + %who.text[T1_tiptactics, wav] ="voice/Training/Mission1/T1.tip.tactics.wav"; + %who.text[T1_tippack02, wav] ="voice/Training/Mission1/T1.tip.pack02.wav"; + //%who.text[T1_tippack02, text] ="Press "@findTrainingControlButtons(useBackPack)@" to activate a pack."; + %who.text[T1_tippack03, wav] ="voice/Training/Mission1/T1.tip.pack03.wav"; + %who.text[T1_26, wav] ="voice/Training/Mission1/T1_26.wav"; + %who.text[T1_27, wav] ="voice/Training/Mission1/T1_27.wav"; + %who.text[T1_27, wav] ="voice/Training/Mission1/T1_27.wav"; + %who.text[T1_27a, wav] ="voice/Training/Mission1/T1_27a.wav"; + %who.text[T1_27b, wav] ="voice/Training/Mission1/T1_27b.wav"; + %who.text[T1_28, wav] ="voice/Training/Mission1/T1_28.wav"; + %who.text[T1_28, text] ="Jump into the vehicle to pilot it."; + %who.text[T1_29, wav] ="voice/Training/Mission1/T1_29.wav"; + %who.text[T1_29a, wav] ="voice/Training/Mission1/T1_29a.wav"; + %who.text[T1_29a, text] ="Control vehicles the same way you control your armor. "@findTrainingControlButtons(mouseJet)@" triggers a turbo boost instead of jets."; + %who.text[T1_tipskiing01, wav] ="voice/Training/Mission1/T1.tip.skiing01.wav"; + %who.text[T1_tipskiing01, text] ="Hold down the Jump button ("@findTrainingControlButtons(jump)@") to ski."; + %who.text[T1_tipskiing02, wav] ="voice/Training/Mission1/T1.tip.skiing02.wav"; + %who.text[T1_tipskiing02a, wav] ="voice/Training/Mission1/T1.tip.skiing02a.wav"; + %who.text[T1_tipskiing03, wav] ="voice/Training/Mission1/T1.tip.skiing03.wav"; + %who.text[T1_30, wav] ="voice/Training/Mission1/T1_30.wav"; + + // Misssion 2 + %who.text[T2_01, wav] ="voice/Training/Mission2/T2_01.wav"; + %who.text[T2_01, eval] = "setWaypointAt(\"-8.82616 -131.779 119.756\", \"Control Switch\");"; + %who.text[T2_01a, eval] = "setWaypointAt(nameToId(InitialPulseSensor).position, \"Sensor\");"; + %who.text[T2_01a, wav] ="voice/Training/Mission2/T2_01a.wav"; + %who.text[T2_01b, wav] ="voice/Training/Mission2/T2_01b.wav"; + %who.text[T2_tipplasma, wav] ="voice/Training/Mission2/T2.tip.plasma.wav"; + %who.text[T2_tipmissile, wav] ="voice/Training/Mission2/T2.tip.missile.wav"; + %who.text[T2_tipmissile02, wav] ="voice/Training/Mission2/T2.tip.missile02.wav"; + %who.text[T2_tipmissile03, wav] ="voice/Training/Mission2/T2.tip.missile03.wav"; + %who.text[T2_tipevading, wav] ="voice/Training/Mission2/T2.tip.evading.wav"; + %who.text[T2_tiptlaser, wav] ="voice/Training/Mission2/T2.tip.tlaser.wav"; + %who.text[T2_tipelf, wav] ="voice/Training/Mission2/T2.tip.elf.wav"; + %who.text[T2_02, wav] ="voice/Training/Mission2/T2_02.wav"; + %who.text[T2_02, eval] = "setWaypointAt(\"-8.82616 -131.779 119.756\", \"Tower\");"; + %who.text[T2_03, wav] ="voice/Training/Mission2/T2_03.wav"; + %who.text[T2_03, eval] = "setWaypointAt(\"-8.82616 -131.779 119.756\", \"Tower\");"; + %who.text[T2_04, wav] ="voice/Training/Mission2/T2_04.wav"; + %who.text[T2_04a, wav] ="voice/Training/Mission2/T2_04a.wav"; + %who.text[T2_05, wav] ="voice/Training/Mission2/T2_05.wav"; + %who.text[T2_05a, wav] ="voice/Training/Mission2/T2_05a.wav"; + %who.text[T2_05b, wav] ="voice/Training/Mission2/T2_05b.wav"; + %who.text[T2_05c, wav] ="voice/Training/Mission2/T2_05c.wav"; + %who.text[T2_tiprepair01, wav] ="voice/Training/Mission2/T2.tip.repair01.wav"; + %who.text[T2_tiprepair01, text] ="Press "@findTrainingControlButtons(useBackPack)@" to ready the repair pack. Aim at damaged item and hold down ("@findTrainingControlButtons(mouseFire)@")."; + %who.text[T2_tiprepair02, wav] ="voice/Training/Mission2/T2.tip.repair02.wav"; + %who.text[T2_tiprepair03, wav] ="voice/Training/Mission2/T2.tip.repair03.wav"; + %who.text[T2_tipgens01, wav] ="voice/Training/Mission2/T2.tip.gens01.wav"; + %who.text[T2_tipdropit, wav] ="voice/Training/Mission2/T2.tip.dropit.wav"; + %who.text[T2_tipdropit, text] ="Press "@findTrainingControlButtons(throwPack)@" to drop your pack."; + %who.text[T2_07, wav] ="voice/Training/Mission2/T2_07.wav"; + %who.text[T2_07, eval] ="setWaypointAt(\"380.262 -298.625 98.9719\", \"Tower\");"; + %who.text[T2_tipscanned, wav] ="voice/Training/Mission2/T2.tip.scanned.wav"; + %who.text[T2_08, wav] ="voice/Training/Mission2/T2_08.wav"; + %who.text[T2_tipshieldpack, wav] ="voice/Training/Mission2/T2.tip.shieldpack.wav"; + %who.text[T2_tipshieldpack, text] ="Press "@findTrainingControlButtons(useBackPack)@" to turn the shield pack on or off."; + %who.text[T2_tipshieldpack02, wav] ="voice/Training/Mission2/T2.tip.shieldpack02.wav"; + %who.text[T2_tipturret01, wav] ="voice/Training/Mission2/T2.tip.turret01.wav"; + %who.text[T2_tipturret02, wav] ="voice/Training/Mission2/T2.tip.turret02.wav"; + %who.text[T2_tipturret02, text] ="Press "@findTrainingControlButtons(useTargetingLaser)@" to arm the targeting laser."; + %who.text[T2_cya01, wav] ="voice/Training/Mission2/T2.cya01.wav"; + %who.text[T2_09, wav] ="voice/Training/Mission2/T2_09.wav"; + %who.text[T2_09a, wav] ="voice/Training/Mission2/T2_09a.wav"; + %who.text[T2_09b, wav] ="voice/Training/Mission2/T2_09b.wav"; + %who.text[T2_10, wav] ="voice/Training/Mission2/T2_10.wav"; + %who.text[T2_10a, wav] ="voice/Training/Mission2/T2_10a.wav"; + %who.text[T2_11, wav] ="voice/Training/Mission2/T2_11.wav"; + %who.text[T2_tipinventory, wav] ="voice/Training/Mission2/T2.tip.inventory.wav"; + %who.text[T2_inventory01, wav] ="voice/Training/Mission2/T2.inventory01.wav"; + %who.text[T2_tipinventory01, wav] ="voice/Training/Mission2/T2.tip.inventory01.wav"; + %who.text[T2_tipinventory03, wav] ="voice/Training/Mission2/T2.tip.inventory03.wav"; + %who.text[T2_tipinventory03, text] ="Press "@findTrainingControlButtons(toggleInventoryHud)@" to activate inventory control."; + %who.text[T2_tipdefense01, wav] ="voice/Training/Mission2/T2.tip.defense01.wav"; + %who.text[T2_tipdefense02, wav] ="voice/Training/Mission2/T2.tip.defense02.wav"; + %who.text[T2_tipdefense03, wav] ="voice/Training/Mission2/T2.tip.defense03.wav"; + %who.text[T2_tipdefense03, text] ="Press "@findTrainingControlButtons(placeMine)@" to deploy a mine. The longer you hold the key down before release, the farther the mine goes."; + %who.text[T2_tipdefense05, wav] ="voice/Training/Mission2/T2.tip.defense05.wav"; + %who.text[T2_tipdefense05a, wav] ="voice/Training/Mission2/T2.tip.defense05a.wav"; + %who.text[T2_tipdefense06, wav] ="voice/Training/Mission2/T2.tip.defense06.wav"; + %who.text[T2_tipdefense07, wav] ="voice/Training/Mission2/T2.tip.defense07.wav"; + %who.text[T2_tipdefense08, wav] ="voice/Training/Mission2/T2.tip.defense08.wav"; + %who.text[T2_12, wav] ="voice/Training/Mission2/T2_12.wav"; + %who.text[T2_13, wav] ="voice/Training/Mission2/T2_13.wav"; + %who.text[T2_repairPack, wav] ="voice/Training/Mission2/T2.repairPack.wav"; + + // mission 3 + %who.text[T3_01, wav] ="voice/Training/Mission3/T3_01.wav"; + %who.text[T3_02, wav] ="voice/Training/Mission3/T3_02.wav"; + %who.text[T3_cloaking, wav] ="voice/Training/Mission3/T3.cloaking.wav"; + %who.text[T3_cloaking, text] = findTrainingControlButtons(useBackPack)@" activates and deactivates the cloaking pack."; + %who.text[T3_tipcloaking01, wav] ="voice/Training/Mission3/T3.tip.cloaking01.wav"; + %who.text[T3_tipcloaking02, wav] ="voice/Training/Mission3/T3.tip.cloaking02.wav"; + %who.text[T3_tipequipment01, wav] ="voice/Training/Mission3/T3.tip.equipment01.wav"; + %who.text[T3_tipequipment02, wav] ="voice/Training/Mission3/T3.tip.equipment02.wav"; + %who.text[T3_tippiloting01, wav] ="voice/Training/Mission3/T3.tip.piloting01.wav"; + %who.text[T3_03, wav] ="voice/Training/Mission3/T3_03.wav"; + %who.text[T3_player01, wav] ="voice/Training/Mission3/T3.player01.wav"; + %who.text[T3_tippiloting02, wav] ="voice/Training/Mission3/T3.tip.piloting02.wav"; + %who.text[T3_tippiloting03, wav] ="voice/Training/Mission3/T3.tip.piloting03.wav"; + %who.text[T3_warning01, wav] ="voice/Training/Mission3/T3.warning01.wav"; + %who.text[T3_warning02, wav] ="voice/Training/Mission3/T3.warning02.wav"; + %who.text[T3_warning03, wav] ="voice/Training/Mission3/T3.warning03.wav"; + %who.text[T3_04, wav] ="voice/Training/Mission3/T3_04.wav"; + %who.text[T3_tippiloting04, wav] ="voice/Training/Mission3/T3.tip.piloting04.wav"; + %who.text[T3_05, wav] ="voice/Training/Mission3/T3_05.wav"; + %who.text[T3_tipfreelook, wav] ="voice/Training/Mission3/T3.tip.freelook.wav"; + %who.text[T3_tipfreelook, text] = "Press and hold "@findTrainingControlButtons(toggleFreelook)@" to allow freelook."; + %who.text[T3_tipunderwater01, wav] ="voice/Training/Mission3/T3.tip.underwater01.wav"; + %who.text[T3_tipunderwater02, wav] ="voice/Training/Mission3/T3.tip.underwater02.wav"; + %who.text[T3_06, wav] ="voice/Training/Mission3/T3_06.wav"; + %who.text[T3_07, wav] ="voice/Training/Mission3/T3_07.wav"; + %who.text[T3_07a, wav] ="voice/Training/Mission3/T3_07a.wav"; + %who.text[T3_07b, wav] ="voice/Training/Mission3/T3_07b.wav"; + %who.text[T3_07c, wav] ="voice/Training/Mission3/T3_07c.wav"; + %who.text[T3_tipcloaking03, wav] ="voice/Training/Mission3/T3.tip.cloaking03.wav"; + %who.text[T3_tipshocklance, wav] ="voice/Training/Mission3/T3.tip.shocklance.wav"; + %who.text[T3_08, wav] ="voice/Training/Mission3/T3_08.wav"; + %who.text[T3_08a, wav] ="voice/Training/Mission3/T3_08a.wav"; + %who.text[T3_08b, wav] ="voice/Training/Mission3/T3_08b.wav"; + %who.text[T3_09, wav] ="voice/Training/Mission3/T3_09.wav"; + %who.text[T3_09a, wav] ="voice/Training/Mission3/T3_09a.wav"; + %who.text[T3_player02, wav] ="voice/Training/Mission3/T3.player02.wav"; + %who.text[T3_trainer10, wav] ="voice/Training/Mission3/T3_10.wav"; + %who.text[T3_player03, wav] ="voice/Training/Mission3/T3.player03.wav"; + %who.text[T3_10, wav] ="voice/Training/Mission3/T3_10.wav"; + %who.text[T3_11, wav] ="voice/Training/Mission3/T3_11.wav"; + %who.text[T3_12, wav] ="voice/Training/Mission3/T3_12.wav"; + %who.text[T3_12a, wav] ="voice/Training/Mission3/T3_12a.wav"; + %who.text[T3_13, wav] ="voice/Training/Mission3/T3_13.wav"; + + // Mission 4 + %who.text[T4_01, wav] ="voice/Training/Mission4/T4_01.wav"; + %who.text[T4_01, text] ="Repair the waypointed sensor."; + %who.text[T4_01a, wav] ="voice/Training/Mission4/T4_01a.wav"; + %who.text[T4_01b, wav] ="voice/Training/Mission4/T4_01b.wav"; + %who.text[T4_01c, wav] ="voice/Training/Mission4/T4_01c.wav"; + %who.text[T4_02, wav] ="voice/Training/Mission4/T4_02.wav"; + %who.text[T4_02a, wav] ="voice/Training/Mission4/T4_02a.wav"; + %who.text[T4_02b, wav] ="voice/Training/Mission4/T4_02b.wav"; + %who.text[T4_03, wav] ="voice/Training/Mission4/T4_03.wav"; + %who.text[T4_03, eval] ="firstPersonQuickPan();"; + %who.text[T4_03a, wav] ="voice/Training/Mission4/T4_03a.wav"; + %who.text[T4_03a, text] ="Press "@findTrainingControlButtons(toggleCommanderMap)@" to toggle your Command Circuit."; + %who.text[T4_03a, eval] ="ThreeAEval();"; + %who.text[T4_03b, wav] ="voice/Training/Mission4/T4_03b.wav"; + %who.text[T4_03c, wav] ="voice/Training/Mission4/T4_03c.wav"; + %who.text[T4_03d, wav] ="voice/Training/Mission4/T4_03d.wav"; + %who.text[T4_03e, wav] ="voice/Training/Mission4/T4_03e.wav"; + %who.text[T4_03f, wav] ="voice/Training/Mission4/T4_03f.wav"; + %who.text[T4_03g, wav] ="voice/Training/Mission4/T4_03g.wav"; + %who.text[T4_03h, wav] ="voice/Training/Mission4/T4_03h.wav"; + %who.text[T4_03h, text] ="Click \"Support Assets\" to open list."; + %who.text[T4_03h, eval] ="game.ExpectiongSupportButton = true;"; + %who.text[T4_03i, wav] ="voice/Training/Mission4/T4_03i.wav"; + %who.text[T4_03j, wav] ="voice/Training/Mission4/T4_03j.wav"; + %who.text[T4_03j, text] ="Right click on the sensor tower to activate the Orders menu. Select Repair."; + %who.text[T4_03j, eval] ="game.expectingRepairOrder = true;"; + %who.text[T4_03k, wav] ="voice/Training/Mission4/T4_03k.wav"; + %who.text[T4_03k, text] ="Arrow keys let you scroll around the map."; + %who.text[T4_tipCamera01, wav] ="voice/Training/Mission4/T4.tip.Camera01.wav"; + %who.text[T4_tipCamera01, text] ="Press "@findTrainingControlButtons(throwGrenade)@" to throw a grenade. The longer you press "@findTrainingControlButtons(throwGrenade)@", the farther the grenade goes."; + %who.text[T4_tipCamera02, wav] ="voice/Training/Mission4/T4.tip.Camera02.wav"; + //%who.text[T4_tipCamera02, text] ="Click the control box to the right of a camera name to control that camera."; + %who.text[T4_tipCamera03, wav] ="voice/Training/Mission4/T4.tip.Camera03.wav"; + %who.text[T4_tipCamera04, wav] ="voice/Training/Mission4/T4.tip.Camera04.wav"; + %who.text[T4_controlTurret, wav] ="voice/Training/Mission4/T4_controlTurret.wav"; + %who.text[T4_tipobjects, wav] ="voice/Training/Mission4/T4.tip.objects.wav"; + %who.text[T4_CCend, wav] ="voice/Training/Mission4/T4_CCend.wav"; + %who.text[T4_04, wav] ="voice/Training/Mission4/T4_04.wav"; + %who.text[T4_04, eval] = "$random = getRandom(20,40);schedule($random, 0, doText, T4_TipDefense06);"; + %who.text[T4_tipmortar, wav] ="voice/Training/Mission4/T4.tip.mortar.wav"; + %who.text[T4_tipmortar02, wav] = "voice/Training/Mission4/T4.tip.mortar_02.wav"; + %who.text[T4_tipgenerator01, wav] ="voice/Training/Mission4/T4.tip.generator01.wav"; + %who.text[T4_tipgenerator01a, wav] ="voice/Training/Mission4/T4.tip.generator01a.wav"; + %who.text[T4_tipgenerator01b, wav] ="voice/Training/Mission4/T4.tip.generator01b.wav"; + %who.text[T4_tipgenerator02, wav] ="voice/Training/Mission4/T4.tip.generator02.wav"; + %who.text[T4_ffGenDown01, wav] ="voice/Training/Mission4/T4.ff_genDown01.wav"; + %who.text[T4_ffGenDown02, wav] ="voice/Training/Mission4/T4.ff_genDown02.wav"; + %who.text[T4_fieldsUp01, wav] ="voice/Training/Mission4/T4.fieldsUp01.wav"; + %who.text[T4_fieldsUp02, wav] ="voice/Training/Mission4/T4.fieldsUp02.wav"; + %who.text[T4_forceFields01, wav] ="voice/Training/Mission4/T4.forceFields01.wav"; + %who.text[T4_forceFields02, wav] ="voice/Training/Mission4/T4.forceFields02.wav"; + %who.text[T4_trainer04a, wav] ="voice/Training/Mission4/T4_04a.wav"; + %who.text[T4_trainer04b, wav] ="voice/Training/Mission4/T4_04b.wav"; + %who.text[T4_tipdefense01, wav] ="voice/Training/Mission4/T4.defense01.wav"; + %who.text[T4_05, wav] ="voice/Training/Mission4/T4_05.wav"; + %who.text[T4_06, wav] ="voice/Training/Mission4/T4_06.wav"; + %who.text[T4_tipdefense02, wav] ="voice/Training/Mission4/T4.tip.defense02.wav"; + %who.text[T4_tipdefense03, wav] ="voice/Training/Mission4/T4.tip.defense03.wav"; + %who.text[T4_tipdeploy, wav] ="voice/Training/Mission4/T4.tip.deploy.wav"; + %who.text[T4_tipdeploy01, wav] ="voice/Training/Mission4/T4.tip.deploy01.wav"; + %who.text[T4_tipdeploy02, wav] ="voice/Training/Mission4/T4.tip.deploy02.wav"; + %who.text[T4_tipdepturret, wav] ="voice/Training/Mission4/T4.tip.depturret.wav"; + %who.text[T4_07, wav] ="voice/Training/Mission4/T4_07.wav"; + %who.text[T4_07a, wav] ="voice/Training/Mission4/T4_07a.wav"; + %who.text[T4_warning01, wav] ="voice/Training/Mission4/T4.warning01.wav"; + %who.text[T4_warning02, wav] ="voice/Training/Mission4/T4.warning02.wav"; + %who.text[T4_genup, wav] ="voice/Training/Mission4/T4.genup.wav"; + %who.text[T4_genup02, wav] ="voice/Training/Mission4/T4.genup02.wav"; + %who.text[T4_genup02a, wav] ="voice/Training/Mission4/T4.genup02a.wav"; + %who.text[T4_repgen, wav] ="voice/Training/Mission4/T4.repgen.wav"; + %who.text[T4_08, wav] ="voice/Training/Mission4/T4_08.wav"; + %who.text[T4_tipcommand05, wav] ="voice/Training/Mission4/T4.tip.command05.wav"; + %who.text[T4_tipdefense04, wav] ="voice/Training/Mission4/T4.tip.defense04.wav"; + %who.text[T4_tipdefense05, wav] ="voice/Training/Mission4/T4.tip.defense05.wav"; + %who.text[T4_tipdefense06, wav] ="voice/Training/Mission4/T4.tip.defense06.wav"; + %who.text[T4_tipdefense07, wav] ="voice/Training/Mission4/T4.tip.defense07.wav"; + %who.text[T4_tipdefense08, wav] ="voice/Training/Mission4/T4.tip.defense08.wav"; + %who.text[T4_tipdefense09, wav] ="voice/Training/Mission4/T4.tip.defense09.wav"; + %who.text[T4_09, wav] ="voice/Training/Mission4/T4_09.wav"; + %who.text[T4_10, wav] ="voice/Training/Mission4/T4_10.wav"; + %who.text[T4_11, wav] ="voice/Training/Mission4/T4_11.wav"; + + // Mission 5 + %who.text[T5_01, wav] ="voice/Training/Mission5/T5_01.wav"; + %who.text[T5_02, wav] ="voice/Training/Mission5/T5_02.wav"; + %who.text[T5_03, wav] ="voice/Training/Mission5/T5_03.wav"; + %who.text[T5_04, wav] ="voice/Training/Mission5/T5_04.wav"; + %who.text[T5_tipstations01, wav] ="voice/Training/Mission5/T5.tip.stations01.wav"; + %who.text[T5_tipstations02, wav] ="voice/Training/Mission5/T5.tip.stations02.wav"; + %who.text[T5_05, wav] ="voice/Training/Mission5/T5_05.wav"; + %who.text[T5_05a, wav] ="voice/Training/Mission5/T5_05a.wav"; + %who.text[T5_05b, wav] ="voice/Training/Mission5/T5_05b.wav"; + %who.text[T5_tipsatchel01, wav] ="voice/Training/Mission5/T5.tip.satchel01.wav"; + %who.text[T5_tipsatchel02, wav] ="voice/Training/Mission5/T5.tip.satchel02.wav"; + %who.text[T5_06, wav] ="voice/Training/Mission5/T5_06.wav"; + %who.text[T5_06a, wav] ="voice/Training/Mission5/T5_06a.wav"; + %who.text[T5_06b, wav] ="voice/Training/Mission5/T5_06b.wav"; + %who.text[T5_06b, eval] ="training5addSafeDistance();"; + %who.text[T5_06c, wav] ="voice/Training/Mission5/T5_06c.wav"; + %who.text[T5_06c, eval] ="training5addSafeDistance();"; + %who.text[T5_06d, wav] ="voice/Training/Mission5/T5_06d.wav"; + //%who.text[T5_06d, eval] ="training5addSafeDistance();"; + %who.text[T5_07, wav] ="voice/Training/Mission5/T5_07.wav"; + %who.text[T5_Failure01, wav] ="voice/Training/Mission5/T5.failure01.wav"; + %who.text[T5_Failure02, wav] ="voice/Training/Mission5/T5.failure02.wav"; + %who.text[T5_08, wav] ="voice/Training/Mission5/T5_08.wav"; + %who.text[T5_08urgent, wav] ="voice/Training/Mission5/T5_08_urgent.wav"; + %who.text[T5_09, wav] ="voice/Training/Mission5/T5_09.wav"; + %who.text[T5_tipFirepower, wav] ="voice/Training/Mission5/T5.tip.firepower.wav"; + + //=========================================================================================== + //these are the objective hud elements for single player + // note: lines get clipped after 24 chars + + //format + //%who.objHud[missionName, ObjectiveID, Line(1|2)] = "text...duh"; + + //mission1 + //---------------------------------------------------------------------------- + %who.objHud[training1, obj1, 1] = "Survey Hanakush Lowlands."; + + %who.objHud[training1, obj2, 1] = "Remain calm during remote scan."; + %who.objHud[training1, obj2, 2] = "Immobilization is temporary."; + + %who.objHud[training1, obj3, 1] = "Eliminate incoming enemies."; + + %who.objHud[training1, obj4, 1] = "Investigate tower at waypoint."; + + %who.objHud[training1, obj5, 1] = "Leave area. Avoid the enemy."; + %who.objHud[training1, obj5, 2] = "Meet rescue team at waypoint."; + + %who.objHud[training1, obj6, 1] = "Go to vehicle at waypoint."; + + %who.objHud[training1, obj7, 1] = "Wait. Remote systems check pending."; + + %who.objHud[training1, obj8, 1] = "Get health patches at waypoint."; + + + //mission2 + //---------------------------------------------------------------------------- + %who.objHud[training2, obj1, 1] = "Capture tower at waypoint."; + %who.objHud[training2, obj1, 2] = "Eliminate enemy units."; + + %who.objHud[training2, obj2, 1] = "Rearm and defend the tower."; + %who.objHud[training2, obj2, 2] = "Eliminate incoming enemies."; + + %who.objHud[training2, obj3, 1] = "Capture tower at waypoint."; + %who.objHud[training2, obj3, 2] = "Implant digital virus."; + + %who.objHud[training2, obj4, 1] = "Capture tower at waypoint."; + %who.objHud[training2, obj4, 2] = "Eliminate enemies."; + + %who.objHud[training2, obj5, 1] = "Destroy enemy sensor."; + + %who.objHud[training2, obj6, 1] = "Eliminate enemies."; + %who.objHud[training2, obj6, 2] = "Destroy enemy turrets."; + + + //mission 3 + //---------------------------------------------------------------------------- + %who.objHud[training3, obj1, 1] = "Board the Shrike."; + + %who.objHud[training3, obj2, 1] = "Pilot Shrike to enemy base."; + %who.objHud[training3, obj2, 2] = "Locate command switch."; + + %who.objHud[training3, obj3, 1] = "Fly to extraction point."; + + %who.objHud[training3, obj4, 1] = "Primary Objective Complete."; + %who.objHud[training3, obj4, 2] = "Return to the Shrike."; + + %who.objHud[training3, obj5, 1] = "Destroy Forcefield Power"; + %who.objHud[training3, obj5, 2] = "to disable Control Point shield."; + + %who.objHud[training3, obj6, 1] = "Implant digital virus"; + %who.objHud[training3, obj6, 2] = "at Control Point."; + + + //mission 4 + //---------------------------------------------------------------------------- + %who.objHud[training4, obj1, 1] = "Stay alert for enemy presence."; + %who.objHud[training4, obj1, 2] = "Repair sensor at waypoint."; + + %who.objHud[training4, obj2, 1] = "Activate Command Circuit."; + + %who.objHud[training4, obj3, 1] = "Deploy camera."; + %who.objHud[training4, obj3, 2] = "Use camera to survey area."; + + %who.objHud[training4, obj4, 1] = "Use Command Circuit"; + %who.objHud[training4, obj4, 2] = "to control Base Turret."; + + %who.objHud[training4, obj4, 1] = "Use Command Circuit to"; + %who.objHud[training4, obj4, 2] = "control Base Turret."; + + %who.objHud[training4, obj5, 1] = "URGENT! Base Generator cannot"; + %who.objHud[training4, obj5, 2] = "be offline longer than 60 seconds."; + + %who.objHud[training4, obj6, 1] = "Issue order to repair sensor \'Tycho.\'"; + + %who.objHud[training4, obj7, 1] = "Remain still during remote"; + %who.objHud[training4, obj7, 2] = "armor systems scan."; + + %who.objHud[training4, obj9, 1] = "Deploy turrets."; + %who.objHud[training4, obj9, 2] = "Prepare for incoming enemies."; + + %who.objHud[training4, obj10, 1] = "Defend Base!"; + %who.objHud[training4, obj10, 2] = "Keep main generator online."; + + //mission 5 + //---------------------------------------------------------------------------- + //%who.objHud[training5, obj1, 1] = "123456789A123456789B123456789C123456789"; + + %who.objHud[training5, obj1, 1] = "Capture tower at waypoint."; + %who.objHud[training5, obj1, 2] = "Implant digital virus."; + + %who.objHud[training5, obj2, 1] = "Destroy critical gens"; + %who.objHud[training5, obj2, 2] = "in the base at waypoint."; + + %who.objHud[training5, obj4, 1] = "Get out of there NOW!"; + + + +//================================================================================= +// Misc Messages + //Mission completion/failure + %who.miscMsg[trainingGenericwin] = "Good Job."; + %who.miscMsg[trainingGenericLoss] = "Tribal life can be nasty, brutish, and short. Do you want to try again?"; + %who.miscMsg[trainingDeathLoss] = "You died. The Hordes use your gene plasm to make their reavers strong. Do you want to try again?"; + %who.miscMsg[training1win] = "Welcome back! You evaded the BioDerm pursuit. Not many warriors return from being shot down. Strike Colonel Akanruth wants a full debriefing."; + %who.miscMsg[training2win] = "You broke the back of Horde resistance in your area, and your prowess is noted. An army needs food to keep fighting, and now we have a secure supply."; + %who.miscMsg[training3win] = "The data provides key insights into Derm psychology and internal organization. We can now refine our strategic approach to exploit these vulnerabilities."; + %who.miscMsg[training3shrikeLoss] = "Without the Shrike, you are stranded too far from Pact territory. The BioDerms hunt you down like a dog and destroy you. Do you want to try again?"; + %who.miscMsg[training4win] = "The BioDerm thrust at Nagakhun was shattered, thanks to you. The Derms fail to escape pursuing Pact warriors. Good work!"; + %who.miscMsg[training4GenLoss] = "The main generator remained offline too long, and the BioDerms took the base. Your head now hangs on their Flaymaster's wall. Do you want to try again?"; + %who.miscMsg[training5DistFail] = "You were too close to the blast. A Pact rescue team finds your broken remains and returns them for a hero's burial."; + %who.miscMsg[training5win] = "Congratulations. With the base destroyed, the Pact overwhelmed Horde defenses. The war continues, but we have broken the back of the BioDerm invasion."; + %who.miscMsg[training5loss] = "You completed your objective but failed to escape the blast. Too bad. Would you like to try again and find out if you can survive?"; + %who.miscMsg[trainingOverEasy] = "You have mastered the basic skills. Consider further training in bot matches or a higher difficulty level."; + %who.miscMsg[trainingOverMed] = "You are skilled enough to enter online play with confidence."; + %who.miscMsg[trainingOverHard] = "You have God-like skills and should have your trigger finger bronzed."; + +// -these are here so that they can be edited without the game script being molested +// -also for ease of localization (if necessary) + + //otherMessages + %who.miscMsg[noScoreScreen] = "The Score screen is disabled in the training missions."; + %who.miscMsg[noCC] = "You are not yet cleared for Command Circuit use."; + %who.miscMsg[genAttackNoSatchel] = "You can only destroy the enemy generators by using a satchel charge. The chain reaction will not trigger otherwise."; + %who.miscMsg[OOB] = "You have left the mission area."; + %who.miscMsg[InBounds] = "You have returned to the mission area."; + %who.miscMsg[OOBLoss] = "You were outside the mission area too long. Do you want to try again?"; + %who.miscMsg[LeaveGame] = "Are you sure you want to abandon this game?"; +} + + +$EnemyNameList[1 ] = "Demon-Core"; +$EnemyNameList[2 ] = "Blood-Drinker"; +$EnemyNameList[3 ] = "Shargh-zhor"; +$EnemyNameList[4 ] = "Azarok"; +$EnemyNameList[5 ] = "Storm-of-Death"; +$EnemyNameList[6 ] = "Gut Collar"; +$EnemyNameList[7 ] = "Torment-the-Weak"; +$EnemyNameList[8 ] = "Eats Only Heads"; +$EnemyNameList[9 ] = "Koroz the Skull"; +$EnemyNameList[10 ] = "Murkhofud"; +$EnemyNameList[11 ] = "Broken Horn"; +$EnemyNameList[12 ] = "Red Maw"; +$EnemyNameList[13 ] = "Rragh Zhek"; +$EnemyNameList[14 ] = "Yellowfang"; +$EnemyNameList[15 ] = "Old Scarred One"; +$EnemyNameList[16 ] = "Hrreshig"; +$EnemyNameList[17 ] = "Marakh the Strong"; +$EnemyNameList[18 ] = "Spits-Brains"; +$EnemyNameList[19 ] = "Cracks-to-Bone"; +$EnemyNameList[20 ] = "Gul-Khidor"; +$EnemyNameList[21 ] = "Kolkhris"; +$EnemyNameList[22 ] = "Render-of-Men"; +$EnemyNameList[23 ] = "Ribshatter"; +$EnemyNameList[24 ] = "Gerex Chol"; +$EnemyNameList[25 ] = "Seregh-zhor"; +$EnemyNameList[26 ] = "Lokh Bloodweb"; +$EnemyNameList[27 ] = "Devours-All"; +$EnemyNameList[28 ] = "The Dracorox"; +$EnemyNameList[29 ] = "Tarh the Immortal"; +$EnemyNameList[30 ] = "Suntalon"; +$EnemyNameList[31 ] = "Omakhros"; +$EnemyNameList[32 ] = "Horgoth the Mad"; +$EnemyNameList[33 ] = "Spines-for-Spears"; +$EnemyNameList[34 ] = "Terrible Claw"; +$EnemyNameList[35 ] = "Crush the Humans!"; +$EnemyNameList[36 ] = "Arhakhral"; +$EnemyNameList[37 ] = "Talons-of-Stone"; +$EnemyNameList[38 ] = "Burns-the-Monkeys"; +$EnemyNameList[39 ] = "Chainbreaker"; +$EnemyNameList[40 ] = "Breath-of-Fear"; +$EnemyNameList[41 ] = "Stoneskin"; +$EnemyNameList[42 ] = "Piths-the-Prey"; +$EnemyNameList[43 ] = "Mercy to Carrion"; +$EnemyNameList[44 ] = "Dark-Entrails"; +$EnemyNameList[45 ] = "Flaymaster Zhor"; +$EnemyNameList[46 ] = "Flaymaster Garakh"; +$EnemyNameList[47 ] = "Flaymaster Khel"; +$EnemyNameList[48 ] = "Flaymaster Morax"; +$EnemyNameList[49 ] = "Flaymaster Khun"; +$EnemyNameList[50 ] = "Mhor Chrak-Khor"; +$EnemyNameList[51 ] = "Plague Dog!"; +$EnemyNameList[52 ] = "Seg Mrazhurr"; +$EnemyNameList[53 ] = "Skullcrusher"; +$EnemyNameList[54 ] = "Boneboiler"; +$EnemyNameList[55 ] = "Murder Beast"; +$EnemyNameList[56 ] = "Zura Zorhak"; +$EnemyNameList[57 ] = "Hearteater"; +$EnemyNameList[58 ] = "Durakh Zon"; +$EnemyNameList[59 ] = "Hide-of-Steel"; +$EnemyNameList[60 ] = "All Snakes Die"; +$EnemyNameList[61 ] = "Monkey Guts"; +$EnemyNameList[62 ] = "Throat\'s Bane"; +$EnemyNameList[63 ] = "Mukhrak Dar"; +$EnemyNameList[64 ] = "Skins-the-Foe"; +$EnemyNameList[65 ] = "Rogh the Fearslayer"; +$EnemyNameList[66 ] = "Coat-of-Eyes"; +$EnemyNameList[67 ] = "Mormoghast"; +$EnemyNameList[68 ] = "Bringer-of-Pain"; +$EnemyNameList[69 ] = "Devilclaw"; +$EnemyNameList[70 ] = "Sows-Terror"; +$EnemyNameList[71 ] = "Smiles-to-Kill"; +$EnemyNameList[72 ] = "Scarred-by-Plasma"; +$EnemyNameList[73 ] = "The Burned One"; +$EnemyNameList[74 ] = "Charred Fangs"; +$EnemyNameList[75 ] = "Kro Serexhar"; +$EnemyNameList[76 ] = "Ku Annorkh"; +$EnemyNameList[77 ] = "Gorog the Bull"; +$EnemyNameList[78 ] = "Collar-of-Fingers"; +$EnemyNameList[79 ] = "Nurog the Dire"; +$EnemyNameList[80 ] = "Fharox the Cruel"; +$EnemyNameList[81 ] = "Sixty Notches"; +$EnemyNameList[82 ] = "Tribekiller"; +$EnemyNameList[83 ] = "Bluefang"; +$EnemyNameList[84 ] = "Torox Backbreaker"; +$EnemyNameList[85 ] = "Dreadbite"; +$EnemyNameList[86 ] = "Skarjett"; +$EnemyNameList[87 ] = "Face of Thorns"; +$EnemyNameList[88 ] = "Gorh Bloodcloud"; +$EnemyNameList[89 ] = "Song-of-Carnage"; +$EnemyNameList[90 ] = "Rrshak Grinds-All"; +$EnemyNameList[91 ] = "Rage-of-Night"; +$EnemyNameList[92 ] = "Irokhirr Zhor"; +$EnemyNameList[93 ] = "Numankh Bloodcark"; +$EnemyNameList[94 ] = "Stonefist Durok"; +$EnemyNameList[95 ] = "Denier-of-Soup"; +$EnemyNameList[96 ] = "Grendel\'s Kiss"; +$EnemyNameList[97 ] = "Karghaz Jok"; +$EnemyNameList[98 ] = "Liverthief"; +$EnemyNameList[99 ] = "Tumoz Agarh"; +$EnemyNameList[100] = "Thirsts-for-Vengeance"; +$EnemyNameList[101] = "Malevolox"; +$EnemyNameList[102] = "Splinters-Ribs"; +$EnemyNameList[103] = "Taunts-the-Prey"; +$EnemyNameList[104] = "Glory-in-Pain"; +$EnemyNameList[105] = "Monkeykiller"; +$EnemyNameList[106] = "Gir QIXOR"; +$EnemyNameList[107] = "Rags-of-Flesh"; +$EnemyNameList[108] = "Gerhrak Icerender"; +$EnemyNameList[109] = "Mordhul Nom"; +$EnemyNameList[110] = "Mother of Battles"; +$EnemyNameList[111] = "Kill-the-Awkward"; +$enemyNameCount = 111; //Blake, this number should be the same as the last name in the list \ No newline at end of file diff --git a/base/scripts/staticShape.cs b/base/scripts/staticShape.cs new file mode 100644 index 0000000..48b2a4f --- /dev/null +++ b/base/scripts/staticShape.cs @@ -0,0 +1,1027 @@ +//****************************************************************************** +//* Default StaticShape functions +//****************************************************************************** + +function StaticShapeData::onGainPowerEnabled(%data, %obj) +{ + if(%data.ambientThreadPowered) + %obj.playThread($AmbientThread, "ambient"); + // if it's a deployed object, schedule the power thread; else play it immediately + if(%data.deployAmbientThread) + %obj.schedule(750, "playThread", $PowerThread, "Power"); + else + %obj.playThread($PowerThread,"Power"); + %obj.setRechargeRate(%data.rechargeRate); + if(%data.humSound !$= "") + %obj.playAudio($HumSound, %data.humSound); + %obj.setPoweredState(true); +} + +function StaticShapeData::onLosePowerDisabled(%data, %obj) +{ + %client = %obj.getControllingClient(); + if(%client != 0) + serverCmdResetControlObject(%client); + + if(%data.ambientThreadPowered) + %obj.pauseThread($AmbientThread); + if(!%data.alwaysAmbient) + { + %obj.stopThread($PowerThread); + // MES -- drop shields and stop them from regenerating after power loss + %obj.setRechargeRate(0.0); + %obj.setEnergyLevel(0.0); + } + if(%data.humSound !$= "") + %obj.stopAudio($HumSound); + %obj.setPoweredState(false); +} + +function StaticShapeData::gainPower(%data, %obj) +{ + if(%obj.isEnabled()) + %data.onGainPowerEnabled(%obj); + Parent::gainPower(%data, %obj); +} + +function StaticShapeData::losePower(%data, %obj) +{ + if(%obj.isEnabled()) + %data.onLosePowerDisabled(%obj); + Parent::losePower(%data, %obj); +} + +function ShapeBaseData::onEnabled() +{ +} + +function ShapeBaseData::onDisabled() +{ +} + +function StaticShapeData::onEnabled(%data, %obj, %prevState) +{ + if(%obj.isPowered()) + %data.onGainPowerEnabled(%obj); + Parent::onEnabled(%data, %obj, %prevState); +} + +function StaticShapeData::onDisabled(%data, %obj, %prevState) +{ + if(%obj.isPowered() || (%data.className $= "Generator")) + %data.onLosePowerDisabled(%obj); + Parent::onDisabled(%data, %obj, %prevState); +} + +function StaticShape::deploy(%this) +{ + %this.playThread($DeployThread, "deploy"); +} + +function StaticShapeData::onEndSequence(%data, %obj, %thread) +{ + if(%thread == $DeployThread) + %obj.setSelfPowered(); + Parent::onEndSequence(%data, %obj, %thread); +} + +function ShapeBaseData::onEndSequence() +{ +} + +//****************************************************************************** +//* Example explosion +//****************************************************************************** + +datablock EffectProfile(ShapeExplosionEffect) +{ + effectname = "explosions/explosion.xpl03"; + minDistance = 10; + maxDistance = 50; +}; + +datablock AudioProfile(ShapeExplosionSound) +{ + filename = "fx/explosions/explosion.xpl03.wav"; + description = AudioExplosion3d; + preload = true; + effect = ShapeExplosionEffect; +}; + +datablock ExplosionData(ShapeExplosion) +{ + explosionShape = "disc_explosion.dts"; + soundProfile = ShapeExplosionSound; + faceViewer = true; +}; + +//****************************************************************************** +//* Player Armors - Data Blocks (live players are now StaticTSObjects) +//****************************************************************************** + +datablock StaticShapeData(HeavyMaleHuman_Dead) +{ + className = "deadArmor"; + catagory = "Player Armors"; + shapeFile = "heavy_male_dead.dts"; + isInvincible = true; +}; + +datablock StaticShapeData(MediumMaleHuman_Dead) +{ + className = "deadArmor"; + catagory = "Player Armors"; + shapeFile = "medium_male_dead.dts"; + isInvincible = true; +}; + +datablock StaticShapeData(LightMaleHuman_Dead) +{ + className = "deadArmor"; + catagory = "Player Armors"; + shapeFile = "light_male_dead.dts"; + isInvincible = true; +}; + +function deadArmor::onAdd(%data, %obj) +{ + Parent::onAdd(%data, %obj); +} + +//***************************************************************************** +//* Flagstands - Data Blocks +//***************************************************************************** +datablock StaticShapeData(InteriorFlagStand) +{ + className = "FlagIntStand"; + catagory = "Objectives"; + shapefile = "int_flagstand.dts"; + isInvincible = true; + needsNoPower = true; +}; + +datablock StaticShapeData(ExteriorFlagStand) +{ + className = "FlagIntStand"; + catagory = "Objectives"; + shapefile = "ext_flagstand.dts"; + isInvincible = true; + needsNoPower = true; +}; + +/////////////////////////////////////////// +//flagIntStand::onAdd(%this, %obj) +//%this: objects datablock +//%obj: the actual object being added +/////////////////////////////////////////// + +function ExteriorFlagStand::onAdd(%this, %obj) +{ + Parent::onAdd(%this, %obj); + %obj.playThread($ActivateThread, "activate"); +} + +function ExteriorFlagStand::onFlagTaken(%this, %obj) +{ + %obj.setThreadDir($ActivateThread, 0); +} + +function ExteriorFlagStand::onFlagReturn(%this, %obj) +{ + %obj.setThreadDir($ActivateThread, 1); +} + +function ExteriorFlagStand::onCollision(%this, %obj, %colObj) +{ + game.flagStandCollision(%this, %obj, %colObj); +} + +function InteriorFlagStand::onCollision(%this, %obj, %colObj) +{ + game.flagStandCollision(%this, %obj, %colObj); +} + +/////////////////////////////////////////////// +//end flag stand functions +/////////////////////////////////////////////// + +datablock StaticShapeData(FlipFlop) +{ + catagory = "Objectives"; + shapefile = "switch.dts"; + + isInvincible = true; + cmdCategory = "Objectives"; + cmdIcon = "CMDSwitchIcon"; + cmdMiniIconName = "commander/MiniIcons/com_switch_grey"; + targetTypeTag = 'Switch'; + alwaysAmbient = true; + needsNoPower = true; + emap = true; +}; + +function FlipFlop::onCollision(%data,%obj,%col) +{ + if (%col.getDataBlock().className $= Armor && %col.getState() !$= "Dead") + %data.playerTouch(%obj, %col); +} + +function FlipFlop::playerTouch(%data,%obj,%col) +{ + messageAll('MsgPlayerTouchSwitch', 'Player %1 touched switch %2', %col, %obj); +} + +//****************************************************************************** +//* Organics - * +//****************************************************************************** + +//function to add random Organics to mission pre-creation +//(could be used to add other things...its cool with bioderm armors ;) ) + +function randomOrg(%organicName, %num, %radius) +{ + %SPACING = 1.0; //meters between center of organic and another object + + //return help info + if(%organicName $="" || !%num || !%radius) { + echo("randomOrg(, , );"); + return; + } + + %organicIndex = -1; + for (%i = 0; %i < $NumAStaticTSObjects; %i++) { + if (getWord($StaticTSObjects[%i], 1) $= %organicName) { + %organicIndex = %i; + break; + } + } + if (%organicIndex == -1) { + error("There is no static shape named" SPC %organicName); + return; + } + %shapeFileName = getWord($StaticTSObjects[%organicIndex], 2); + + %maxSlope = getWord($StaticTSObjects[%organicIndex], 3); + if (%maxSlope $= "") + %maxSlope = 40; + + %zOffset = getWord($StaticTSObjects[%organicIndex], 4); + if (%zOffset $= "") + %zOffset = 0; + + %slopeWithTerrain = getWord($StaticTSObjects[%organicIndex], 5); + if (%slopeWithTerrain $= "") + %slopeWithTerrain = false; + + %minScale = getWord($StaticTSObjects[%organicIndex], 6); + %maxScale = getWord($StaticTSObjects[%organicIndex], 7); + + //set up folders in mis file + $RandomOrganicsAdded++; //to keep track of groups + if(!isObject(RandomOrganics)) { + %randomOrgGroup = new simGroup(RandomOrganics); + MissionGroup.add(%randomOrgGroup); + } + %groupName = "Addition"@$RandomOrganicsAdded@%organicName; + %group = new simGroup(%groupName); + RandomOrganics.add(%group); + + + %ctr = LocalClientConnection.camera.getPosition(); + %areaX = getWord(%ctr, 0) - %radius; + %areaY = getWord(%ctr, 1) - %radius; + + %orgCount = %num; + while((%orgCount > 0) && (%retries < (15000 / %maxSlope))) //theoretically, a thorough number of retries + { + //find a tile + %x = (getRandom(mFloor(%areaX / 8), mFloor((%areaX + (%radius * 2)) / 8)) * 8) + 4; //tile center + %y = (getRandom(mFloor(%areaY / 8), mFloor((%areaY + (%radius * 2)) / 8)) * 8) + 4; + + %start = %x @ " " @ %y @ " 2000"; + %end = %x @ " " @ %y @ " -1"; + %ground = containerRayCast(%start, %end, $TypeMasks::TerrainObjectType, 0); + %z = getWord(%ground, 3); + %z += %zOffset; + %position = %x @ " " @ %y @ " " @ %z; + + + // get normal from both sides of the square + %start = %x + 2 @ " " @ %y @ " 2000"; + %end = %x + 2 @ " " @ %y @ " -1"; + %hit1 = containerRayCast(%start, %end, $TypeMasks::TerrainObjectType, 0); + + %start = %x - 2 @ " " @ %y @ " 2000"; + %end = %x - 2 @ " " @ %y @ " -1"; + %hit2 = containerRayCast(%start, %end, $TypeMasks::TerrainObjectType, 0); + + %norm1 = getWord(%hit1, 4) @ " " @ getWord(%hit1, 5) @ " " @ getWord(%hit1, 6); + %norm2 = getWord(%hit2, 4) @ " " @ getWord(%hit2, 5) @ " " @ getWord(%hit2, 6); + + //if either side of tile has greater slope than allowed, move on. + %angNorm1 = getTerrainAngle(%norm1); + %angNorm2 = getTerrainAngle(%norm2); + if ((getTerrainAngle(%norm1) > %maxSlope) || (getTerrainAngle(%norm2) > %maxslope)) + { + %retries++; + continue; + } + + %terrainNormal = VectorAdd(%norm1, %norm2); + %terrainNormal = VectorNormalize(%terrainNormal); + + //search surroundings for obstacles. If obstructed, move on. + InitContainerRadiusSearch(%position, %spacing, $TypeMasks::VehicleObjectType | + $TypeMasks::MoveableObjectType | + $TypeMasks::StaticShapeObjectType | + $TypeMasks::TSStaticShapeObjectType | + $TypeMasks::ForceFieldObjectType | + $TypeMasks::TurretObjectType | + $TypeMasks::InteriorObjectType | + $TypeMasks::ItemObjectType); + %this = containerSearchNext(); + if(%this) + { + %retries++; + continue; + } + + + //rotate it + if(%slopeWithTerrain) + { + %rotAxis = vectorCross(%terrainNormal, "0 0 1"); + %rotAxis = vectorNormalize(%rotAxis); + %rotation = %rotAxis @ " " @ getTerrainAngle(%terrainNormal); + } + else %rotation = "1 0 0 0"; + %randomAngle = getRandom(360); + %zrot = MatrixCreate("0 0 0", "0 0 1 " @ %randomAngle); + %orient = MatrixCreate(%position, %rotation); + %finalXForm = MatrixMultiply(%orient, %zrot); + + + //scale it + %scaleMin = 8; //default min + %scaleMax = 14; //default max + if(%minScale) + %scaleMin = %minScale * 10; + if(%maxScale) + %scaleMax = %maxScale * 10; + %scaleInt = getRandom(%scaleMin, %scaleMax); + %scale = %scaleInt/10; + %evenScale = %scale SPC %scale SPC %scale; + + //create it + %position = %x SPC %y SPC (%z += %zoffset); + %newOrganic = new TSStatic() { + position = %position; + rotation = %rotation; + scale = %evenScale; + shapeName = %shapeFileName; + }; + %group.add(%newOrganic); + %newOrganic.setTransform(%finalXForm); + + %orgCount--; //dec number of shapes left to place + %retries = 0; //reset retry counter + } + if (%orgCount > 0) + { + error("Unable to place all shapes, area saturated."); + error("Looking for clear area " @ (%spacing * 2) @ " meters in diameter, with a max slope of " @ %maxSlope); + } + echo("Placed " @ %num - %orgCount @ " of " @ %num); +} + +function getTerrainAngle(%point) +{ + %up = "0 0 1"; + %angleRad = mACos(vectorDot(%point, %up)); + %angleDeg = mRadToDeg(%angleRad); + //echo("angle is "@%angleDeg); + return %angleDeg; +} + + +//-------------------------------------------------------------------------- +//-------------------------------------- Organics +//-------------------------------------------------------------------------- + + +//****************************************************************************** +//* Pulse Sensor - Data Blocks * +//****************************************************************************** + +datablock DebrisData( StaticShapeDebris ) +{ + explodeOnMaxBounce = false; + + elasticity = 0.20; + friction = 0.5; + + lifetime = 17.0; + lifetimeVariance = 0.0; + + minSpinSpeed = 60; + maxSpinSpeed = 600; + + numBounces = 10; + bounceVariance = 0; + + staticOnMaxBounce = true; + + useRadiusMass = true; + baseRadius = 0.4; + + velocity = 9.0; + velocityVariance = 4.5; +}; + +datablock DebrisData( SmallShapeDebris ) +{ + explodeOnMaxBounce = false; + + elasticity = 0.20; + friction = 0.5; + + lifetime = 17.0; + lifetimeVariance = 0.0; + + minSpinSpeed = 60; + maxSpinSpeed = 600; + + numBounces = 10; + bounceVariance = 0; + + staticOnMaxBounce = true; + + useRadiusMass = true; + baseRadius = 0.2; + + velocity = 5.0; + velocityVariance = 2.5; +}; + +datablock AudioProfile(SensorHumSound) +{ + filename = "fx/powered/sensor_hum.wav"; + description = CloseLooping3d; + preload = true; +}; + +datablock SensorData(SensorLgPulseObj) +{ + detects = true; + detectsUsingLOS = true; + detectsPassiveJammed = false; + detectsActiveJammed = false; + detectsCloaked = false; + detectionPings = true; + detectRadius = 300; +}; + +datablock StaticShapeData(SensorLargePulse) : StaticShapeDamageProfile +{ + className = Sensor; + catagory = "Sensors"; + shapeFile = "sensor_pulse_large.dts"; + maxDamage = 1.5; + destroyedLevel = 1.5; + disabledLevel = 0.85; + explosion = ShapeExplosion; + expDmgRadius = 10.0; + expDamage = 0.5; + expImpulse = 2000.0; + + dynamicType = $TypeMasks::SensorObjectType; + isShielded = true; + energyPerDamagePoint = 33; + maxEnergy = 110; + rechargeRate = 0.31; + ambientThreadPowered = true; + humSound = SensorHumSound; + + cmdCategory = "Support"; + cmdIcon = CMDSensorIcon; + cmdMiniIconName = "commander/MiniIcons/com_sensor_grey"; + targetNameTag = 'Large'; + targetTypeTag = 'Sensor'; + sensorData = SensorLgPulseObj; + sensorRadius = SensorLgPulseObj.detectRadius; + sensorColor = "255 194 9"; + + debrisShapeName = "debris_generic.dts"; + debris = StaticShapeDebris; +}; + +datablock SensorData(SensorMedPulseObj) +{ + detects = true; + detectsUsingLOS = true; + detectsPassiveJammed = false; + detectsActiveJammed = false; + detectsCloaked = false; + detectionPings = true; + detectRadius = 175; +}; + +datablock StaticShapeData(SensorMediumPulse) : StaticShapeDamageProfile +{ + className = Sensor; + catagory = "Sensors"; + shapeFile = "sensor_pulse_medium.dts"; + maxDamage = 1.2; + destroyedLevel = 1.2; + disabledLevel = 0.68; + explosion = ShapeExplosion; + expDmgRadius = 7.0; + expDamage = 0.4; + expImpulse = 1500; + + dynamicType = $TypeMasks::SensorObjectType; + isShielded = true; + energyPerDamagePoint = 33; + maxEnergy = 90; + rechargeRate = 0.31; + ambientThreadPowered = true; + humSound = SensorHumSound; + + cmdCategory = "Support"; + cmdIcon = CMDSensorIcon; + cmdMiniIconName = "commander/MiniIcons/com_sensor_grey"; + targetNameTag = 'Medium'; + targetTypeTag = 'Sensor'; + sensorData = SensorMedPulseObj; + sensorRadius = SensorMedPulseObj.detectRadius; + sensorColor = "255 194 9"; + + debrisShapeName = "debris_generic.dts"; + debris = StaticShapeDebris; +}; + +function Sensor::onGainPowerEnabled(%data, %obj) +{ + setTargetSensorData(%obj.target, %data.sensorData); + Parent::onGainPowerEnabled(%data, %obj); +} + +function Sensor::onLosePowerDisabled(%data, %obj) +{ + setTargetSensorData(%obj.target, 0); + Parent::onLosePowerDisabled(%data, %obj); +} + +//****************************************************************************** +//* Generator - Data Blocks * +//****************************************************************************** + +datablock AudioProfile(GeneratorHumSound) +{ + filename = "fx/powered/generator_hum.wav"; + description = CloseLooping3d; + preload = true; +}; + + +datablock StaticShapeData(GeneratorLarge) : StaticShapeDamageProfile +{ + className = Generator; + catagory = "Generators"; + shapeFile = "station_generator_large.dts"; + explosion = ShapeExplosion; + maxDamage = 1.50; + destroyedLevel = 1.50; + disabledLevel = 0.85; + expDmgRadius = 10.0; + expDamage = 0.5; + expImpulse = 1500.0; + noIndividualDamage = true; //flag to make these invulnerable for certain mission types + + dynamicType = $TypeMasks::GeneratorObjectType; + isShielded = true; + energyPerDamagePoint = 30; + maxEnergy = 50; + rechargeRate = 0.05; + humSound = GeneratorHumSound; + + cmdCategory = "Support"; + cmdIcon = "CMDGeneratorIcon"; + cmdMiniIconName = "commander/MiniIcons/com_generator"; + targetTypeTag = 'Generator'; + + debrisShapeName = "debris_generic.dts"; + debris = StaticShapeDebris; +}; + +datablock StaticShapeData(SolarPanel) : StaticShapeDamageProfile +{ + className = Generator; + catagory = "Generators"; + shapeFile = "solarpanel.dts"; + explosion = ShapeExplosion; + maxDamage = 1.00; + destroyedLevel = 1.00; + disabledLevel = 0.55; + expDmgRadius = 5.0; + expDamage = 0.3; + expImpulse = 1000.0; + noIndividualDamage = true; //flag to make these invulnerable for certain mission types + emap = true; + + isShielded = true; + energyPerDamagePoint = 30; + rechargeRate = 0.05; + + dynamicType = $TypeMasks::GeneratorObjectType; + maxEnergy = 30; + humSound = GeneratorHumSound; + + cmdCategory = "Support"; + cmdIcon = CMDSolarGeneratorIcon; + cmdMiniIconName = "commander/MiniIcons/com_solargen_grey"; + targetTypeTag = 'Solar Panel'; + + debrisShapeName = "debris_generic.dts"; + debris = StaticShapeDebris; +}; + +function Generator::onDisabled(%data, %obj, %prevState) +{ + %obj.decPowerCount(); + Parent::onDisabled(%data, %obj, %prevState); +} + +function Generator::onEnabled(%data, %obj, %prevState) +{ + %obj.incPowerCount(); + Parent::onEnabled(%data, %obj, %prevState); +} + +//****************************************************************************** +//Nexus Effect (Hunters) +//****************************************************************************** + +datablock StaticShapeData(Nexus_Effect) +{ + catagory = "Objectives"; + shapefile = "nexus_effect.dts"; + mass = 10; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; +}; + + +datablock StaticShapeData(NexusBase) +{ + catagory = "Objectives"; + shapefile = "Nexusbase.dts"; + mass = 10; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; +}; + + +datablock StaticShapeData(NexusCap) +{ + catagory = "Objectives"; + shapefile = "Nexuscap.dts"; + mass = 10; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; +}; + +//****************************************************************************** +//* Static Shape - Functions * +//****************************************************************************** + +function StaticShapeData::create(%block) +{ + %obj = new StaticShape() + { + dataBlock = %block; + }; + return(%obj); +} + +function ShapeBase::damage(%this, %sourceObject, %position, %amount, %damageType) +{ + %this.getDataBlock().damageObject(%this, %sourceObject, %position, %amount, %damageType); +} + +function ShapeBaseData::damageObject(%data, %targetObject, %position, %sourceObject, %amount, %damageType) +{ + +} + +function ShapeBaseData::onDestroyed(%data, %obj, %prevState) +{ + +} + +function ShapeBaseData::checkShields(%data, %targetObject, %position, %amount, %damageType) +{ + %energy = %targetObject.getEnergyLevel(); + %strength = %energy / %data.energyPerDamagePoint; + %shieldScale = %data.shieldDamageScale[%damageType]; + if(%shieldScale $= "") + %shieldScale = 1; + + if (%amount * %shieldScale <= %strength) { + // Shield absorbs all + %lost = %amount * %shieldScale * %data.energyPerDamagePoint; + %energy -= %lost; + %targetObject.setEnergyLevel(%energy); + + %normal = "0.0 0.0 1.0"; + %targetObject.playShieldEffect( %normal ); + + return 0; + } + // Shield exhausted + %targetObject.setEnergyLevel(0); + return %amount - %strength / %shieldScale; +} + +function StaticShapeData::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType) +{ + // if this is a non-team mission type and the object is "protected", don't damage it + if(%data.noIndividualDamage && Game.allowsProtectedStatics()) + return; + + // if this is a Siege mission and this object shouldn't take damage (e.g. vehicle stations) + if(%data.noDamageInSiege && Game.class $= "SiegeGame") + return; + + if(%sourceObject) + { + %targetObject.lastDamagedBy = %sourceObject.client; + %targetObject.lastDamagedByTeam = %sourceObject.client.team; + %targetObject.damageTimeMS = GetSimTime(); + } + + // Scale damage type & include shield calculations... + if (%data.isShielded) + %amount = %data.checkShields(%targetObject, %position, %amount, %damageType); + + %damageScale = %data.damageScale[%damageType]; + if(%damageScale !$= "") + %amount *= %damageScale; + + //if team damage is off, cap the amount of damage so as not to disable the object... + if (!$TeamDamage) + { + //see if the object is being shot by a friendly + %srcClient = %sourceObject.client; + if (isObject(%srcClient)) + { + if (isTargetFriendly(%targetObject.getTarget(), %srcClient.getSensorGroup())) + { + %curDamage = %targetObject.getDamageLevel(); + %availableDamage = %targetObject.getDataBlock().disabledLevel - %curDamage - 0.05; + if (%amount > %availableDamage) + %amount = %availableDamage; + } + } + } + + //if there's still damage to apply + if (%amount > 0) + %targetObject.applyDamage(%amount); +} + +function StaticShapeData::onDamage(%this,%obj) +{ + // Set damage state based on current damage level + %damage = %obj.getDamageLevel(); + if(%damage >= %this.destroyedLevel) + { + if(%obj.getDamageState() !$= "Destroyed") + { + %obj.setDamageState(Destroyed); + // if object has an explosion damage radius associated with it, apply explosion damage + if(%this.expDmgRadius) + RadiusExplosion(%obj, %obj.getWorldBoxCenter(), %this.expDmgRadius, %this.expDamage, %this.expImpulse, %obj, $DamageType::Explosion); + } + } + else + if(%damage >= %this.disabledLevel) + { + if(%obj.getDamageState() !$= "Disabled") + %obj.setDamageState(Disabled); + } + else + { + if(%obj.getDamageState() !$= "Enabled") + %obj.setDamageState(Enabled); + } + +} + +// -------------------------------------------------------------------- +// Team logos - only the logo projector should be placed in a mission + +datablock StaticShapeData(StormLogo) +{ + className = Logo; + shapeFile = "teamlogo_storm.dts"; + alwaysAmbient = true; +}; + +datablock StaticShapeData(InfernoLogo) +{ + className = Logo; + shapeFile = "teamlogo_inf.dts"; + alwaysAmbient = true; +}; + +datablock StaticShapeData(BiodermLogo) +{ + className = Logo; + shapeFile = "teamlogo_bd.dts"; + alwaysAmbient = true; +}; + +datablock StaticShapeData(BloodEagleLogo) +{ + className = Logo; + shapeFile = "teamlogo_be.dts"; + alwaysAmbient = true; +}; + +datablock StaticShapeData(DSwordLogo) +{ + className = Logo; + shapeFile = "teamlogo_ds.dts"; + alwaysAmbient = true; +}; + +datablock StaticShapeData(HarbingerLogo) +{ + className = Logo; + shapeFile = "teamlogo_hb.dts"; + alwaysAmbient = true; +}; + +datablock StaticShapeData(StarwolfLogo) +{ + className = Logo; + shapeFile = "teamlogo_sw.dts"; + alwaysAmbient = true; +}; + +datablock StaticShapeData(LogoProjector) +{ + className = Projector; + catagory = "Objectives"; + shapeFile = "teamlogo_projector.dts"; + alwaysAmbient = true; + isInvincible = true; +}; + +function Projector::onAdd(%data, %obj) +{ + Parent::onAdd(%data, %obj); + %obj.holo = 0; +} + +//////////////////////////////////////////// +// Tapestries +/////////////////////////////////////////// +datablock StaticShapeData(Banner_Honor) +{ + catagory = "Eyecandy"; + shapefile = "banner_honor.dts"; +}; + +datablock StaticShapeData(Banner_Strength) +{ + catagory = "Eyecandy"; + shapefile = "banner_strength.dts"; +}; + +datablock StaticShapeData(Banner_Unity) +{ + catagory = "Eyecandy"; + shapefile = "banner_unity.dts"; +}; + +//////////////////////////////////////////////////////////////////////////////// +// + +//-------------------------------------------------------------------------- +// Totally static objects +// The format of these strings are: +// 0: Catagory +// 1: Name +// 2: File +// 3: MaxSlope [ only used with the randomOrg function ] +// 4: ZOffset [ only used with the randomOrg function ] +// 5: slopeWithTerrain [ only used with the randomOrg function ] +// 6: minScale [ only used with the randomOrg function ] +// 7: maxScale [ only used with the randomOrg function ] + + +$StaticTSObjects[0] = "Organics BiodermPlant3 xorg3.dts"; +$StaticTSObjects[1] = "Organics BiodermPlant4 xorg4.dts"; +$StaticTSObjects[2] = "Organics BiodermPlant5 xorg5.dts"; +$StaticTSObjects[3] = "Organics BiodermPlant20 xorg20.dts"; +$StaticTSObjects[4] = "Organics BiodermPlant21 xorg21.dts"; +$StaticTSObjects[5] = "Organics BiodermPlant22 xorg22.dts"; + +$StaticTSObjects[6] = "Organics BEPlant1 borg1.dts 40 0.35 1 0.5 2"; +$StaticTSObjects[7] = "Organics BEPlant5 borg5.dts 40 0.0 1 1 1.5"; +$StaticTSObjects[8] = "Organics BEPlant6 borg6.dts"; +$StaticTSObjects[9] = "Organics BEPlant7 borg7.dts"; + +$StaticTSObjects[10] = "Organics BEPlant12 borg12.dts"; +$StaticTSObjects[11] = "Organics BEPlant13 borg13.dts"; +$StaticTSObjects[12] = "Organics BELgTree16 borg16.dts 20 -3.0 0 0.8 1.5"; +$StaticTSObjects[13] = "Organics BESmTree17 borg17.dts 20 -3.0 1 0.8 1.5"; +$StaticTSObjects[14] = "Organics BELgTree18 borg18.dts 20 -3.0 0 0.8 1.5"; +$StaticTSObjects[15] = "Organics BELgTree19 borg19.dts 20 -3.0 0 0.8 1.5"; +$StaticTSObjects[16] = "Organics BEPlant20 borg20.dts"; + +$StaticTSObjects[17] = "Organics BEPlant23 borg23.dts"; +$StaticTSObjects[18] = "Organics BEPlant25 borg25.dts"; + +$StaticTSObjects[19] = "Organics BEPlant31 borg31.dts"; +$StaticTSObjects[20] = "Organics BEPlant32 borg32.dts"; +$StaticTSObjects[21] = "Organics BEPlant33 borg33.dts"; +$StaticTSObjects[22] = "Organics BEPlant34 borg34.dts"; + +$StaticTSObjects[23] = "Organics PhoenixPlant1 porg1.dts"; +$StaticTSObjects[24] = "Organics PhoenixPlant2 porg2.dts"; +$StaticTSObjects[25] = "Organics PhoenixPlant3 porg3.dts"; +$StaticTSObjects[26] = "Organics PhoenixPlant5 porg5.dts 25 -0.2 1 0.6 1.0"; +$StaticTSObjects[27] = "Organics PhoenixPlant6 porg6.dts"; +$StaticTSObjects[28] = "Organics PhoenixPlant20 porg20.dts"; + +$StaticTSObjects[29] = "Organics PhoenixPlant22 porg22.dts 25 0.1 1 0.8 1.4"; +$StaticTSObjects[30] = "Organics SWTree20 sorg20.dts"; +$StaticTSObjects[31] = "Organics SWShrub21 sorg21.dts"; +$StaticTSObjects[32] = "Organics SWTree22 sorg22.dts"; +$StaticTSObjects[33] = "Organics SWShrub23 sorg23.dts"; +$StaticTSObjects[34] = "Organics SWShrub24 sorg24.dts"; +$StaticTSObjects[35] = "Stackables Crate1 stackable1l.dts"; +$StaticTSObjects[36] = "Stackables Crate2 stackable1m.dts"; +$StaticTSObjects[37] = "Stackables Crate3 stackable1s.dts"; +$StaticTSObjects[38] = "Stackables Crate4 stackable2l.dts"; +$StaticTSObjects[39] = "Stackables Crate5 stackable2m.dts"; +$StaticTSObjects[40] = "Stackables Crate6 stackable2s.dts"; +$StaticTSObjects[41] = "Stackables Crate7 stackable3l.dts"; +$StaticTSObjects[42] = "Stackables Crate8 stackable3m.dts"; +$StaticTSObjects[43] = "Stackables Crate9 stackable3s.dts"; +$StaticTSObjects[44] = "Stackables Crate10 stackable4l.dts"; +$StaticTSObjects[45] = "Stackables Crate11 stackable4m.dts"; +$StaticTSObjects[46] = "Stackables Crate12 stackable5l.dts"; +$StaticTSObjects[47] = "VehicleWrecks ScoutWreckageShape vehicle_air_scout_wreck.dts"; +$StaticTSObjects[48] = "VehicleWrecks TankWreckageShape vehicle_land_assault_wreck.dts"; +$StaticTSObjects[49] = "Organics DSPlant16 dorg16.dts 20 -3.0 0 0.8 1.5"; +$StaticTSObjects[50] = "Organics DSPlant17 dorg17.dts 20 -3.0 1 0.8 1.5"; +$StaticTSObjects[51] = "Organics DSPlant18 dorg18.dts 20 -3.0 0 0.8 1.5"; +$StaticTSObjects[52] = "Organics DSPlant19 dorg19.dts 20 -3.0 0 0.8 1.5"; + +$StaticTSObjects[53] = "PlayerArmors LightMaleHumanArmorImage light_male.dts"; +$StaticTSObjects[54] = "PlayerArmors MediumMaleHumanArmorImage medium_male.dts"; +$StaticTSObjects[55] = "PlayerArmors HeavyMaleHumanArmorImage heavy_male.dts"; +$StaticTSObjects[56] = "PlayerArmors LightFemaleHumanArmorImage light_female.dts"; +$StaticTSObjects[57] = "PlayerArmors MediumFemaleHumanArmorImage medium_female.dts"; +$StaticTSObjects[58] = "PlayerArmors HeavyFemaleHumanArmorImage heavy_male.dts"; +$StaticTSObjects[59] = "PlayerArmors LightMaleBiodermArmorImage bioderm_light.dts"; +$StaticTSObjects[60] = "PlayerArmors MediumMaleBiodermArmorImage bioderm_medium.dts"; +$StaticTSObjects[61] = "PlayerArmors HeavyMaleBiodermArmorImage bioderm_heavy.dts"; + +$StaticTSObjects[62] = "Organics BEGrass1 Borg6.dts"; + +$StaticTSObjects[63] = "Plugs bePlug bmiscf.dts"; +$StaticTSObjects[64] = "Plugs dsPlug dmiscf.dts"; +$StaticTSObjects[65] = "Plugs xPlug xmiscf.dts"; +$StaticTSObjects[66] = "Plugs hPlug pmiscf.dts"; +$StaticTSObjects[67] = "Plugs swPlug smiscf.dts"; + +$StaticTSObjects[68] = "Statues Base statue_base.dts"; +$StaticTSObjects[69] = "Statues HeavyMaleStatue statue_hmale.dts"; +$StaticTSObjects[70] = "Statues LightFemaleStatue statue_lfemale.dts"; +$StaticTSObjects[71] = "Statues LightMaleStatue statue_lmale.dts"; +$StaticTSObjects[72] = "Statues Plaque statue_plaque.dts"; + +$NumStaticTSObjects = 73; + +function TSStatic::create(%shapeName) +{ + echo("Foo:" SPC %shapeName); + %obj = new TSStatic() + { + shapeName = %shapeName; + }; + return(%obj); +} + +function TSStatic::damage(%this) +{ + // prevent console error spam +} \ No newline at end of file diff --git a/base/scripts/station.cs b/base/scripts/station.cs new file mode 100644 index 0000000..7e4440e --- /dev/null +++ b/base/scripts/station.cs @@ -0,0 +1,945 @@ +//****************************************************************************** +//* Station - Data Blocks * +//****************************************************************************** +datablock EffectProfile(StationInventoryActivateEffect) +{ + effectname = "powered/inv_pad_on"; + minDistance = 5.0; +}; + +datablock EffectProfile(StationVehicleAcitvateEffect) +{ + effectname = "powered/vehicle_screen_on2"; + minDistance = 3.0; +}; + +datablock EffectProfile(StationVehicleDeactivateEffect) +{ + effectname = "powered/vehicle_screen_off"; + minDistance = 3.0; +}; + +datablock AudioProfile(StationInventoryActivateSound) +{ + filename = "fx/powered/inv_pad_on.wav"; + description = AudioClose3d; + preload = true; + effect = StationInventoryActivateEffect; +}; + +datablock AudioProfile(MobileBaseInventoryActivateSound) +{ + filename = "fx/vehicles/mpb_inv_station.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(DepInvActivateSound) +{ + filename = "fx/powered/dep_inv_station.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(StationVehicleAcitvateSound) +{ + filename = "fx/powered/vehicle_screen_on2.wav"; + description = AudioClosest3d; + preload = true; + effect = StationVehicleAcitvateEffect; +}; + +datablock AudioProfile(StationVehicleDeactivateSound) +{ + filename = "fx/powered/vehicle_screen_off.wav"; + description = AudioClose3d; + preload = true; + effect = StationVehicleDeactivateEffect; +}; + +datablock AudioProfile(StationAccessDeniedSound) +{ + filename = "fx/powered/station_denied.wav"; + description = AudioClosest3d; + preload = true; +}; + +datablock AudioProfile(StationVehicleHumSound) +{ + filename = "fx/powered/station_hum.wav"; + description = CloseLooping3d; + preload = true; +}; + +datablock AudioProfile(StationInventoryHumSound) +{ + filename = "fx/powered/station_hum.wav"; + description = CloseLooping3d; + preload = true; +}; + +datablock StationFXPersonalData( PersonalInvFX ) +{ + delay = 0; + fadeDelay = 0.5; + lifetime = 1.2; + height = 2.5; + numArcSegments = 10.0; + numDegrees = 180.0; + trailFadeTime = 0.5; + leftRadius = 1.85; + rightRadius = 1.85; + leftNodeName = "FX1"; + rightNodeName = "FX2"; + + texture[0] = "special/stationLight"; +}; + + +datablock DebrisData( StationDebris ) +{ + explodeOnMaxBounce = false; + + elasticity = 0.40; + friction = 0.5; + + lifetime = 17.0; + lifetimeVariance = 0.0; + + minSpinSpeed = 60; + maxSpinSpeed = 600; + + numBounces = 10; + bounceVariance = 0; + + staticOnMaxBounce = true; + + useRadiusMass = true; + baseRadius = 0.4; + + velocity = 9.0; + velocityVariance = 4.5; + +}; + +datablock StaticShapeData(StationInventory) : StaticShapeDamageProfile +{ + className = Station; + catagory = "Stations"; + shapeFile = "station_inv_human.dts"; + maxDamage = 1.00; + destroyedLevel = 1.00; + disabledLevel = 0.70; + explosion = ShapeExplosion; + expDmgRadius = 8.0; + expDamage = 0.4; + expImpulse = 1500.0; + // don't allow this object to be damaged in non-team-based + // mission types (DM, Rabbit, Bounty, Hunters) + noIndividualDamage = true; + + dynamicType = $TypeMasks::StationObjectType; + isShielded = true; + energyPerDamagePoint = 75; + maxEnergy = 50; + rechargeRate = 0.35; + doesRepair = true; + humSound = StationInventoryHumSound; + + cmdCategory = "Support"; + cmdIcon = CMDStationIcon; + cmdMiniIconName = "commander/MiniIcons/com_inventory_grey"; + targetNameTag = 'Inventory'; + targetTypeTag = 'Station'; + + debrisShapeName = "debris_generic.dts"; + debris = StationDebris; +}; + +datablock StaticShapeData(StationVehicle) : StaticShapeDamageProfile +{ + className = Station; + catagory = "Stations"; + shapeFile = "vehicle_pad_station.dts"; + maxDamage = 1.20; + destroyedLevel = 1.20; + disabledLevel = 0.84; + explosion = ShapeExplosion; + expDmgRadius = 10.0; + expDamage = 0.4; + expImpulse = 1500.0; + dynamicType = $TypeMasks::StationObjectType; + isShielded = true; + energyPerDamagePoint = 33; + maxEnergy = 250; + rechargeRate = 0.31; + humSound = StationVehicleHumSound; + // don't let these be damaged in Siege missions + noDamageInSiege = true; + + cmdCategory = "Support"; + cmdIcon = CMDVehicleStationIcon; + cmdMiniIconName = "commander/MiniIcons/com_vehicle_pad_inventory"; + targetTypeTag = 'Vehicle Station'; + + debrisShapeName = "debris_generic.dts"; + debris = StationDebris; +}; + +datablock StaticShapeData(StationVehiclePad) +{ + className = Station; + catagory = "Stations"; + shapeFile = "vehicle_pad.dts"; + isInvincible = true; + dynamicType = $TypeMasks::StaticObjectType; + rechargeRate = 0.05; +}; + +//datablock StaticShapeData(StationAmmo) +//{ +// className = Station; +// catagory = "Stations"; +// shapeFile = "station_ammo.dts"; +// maxDamage = 1.0; +// disabledLevel = 0.6; +// destroyedLevel = 0.8; +// icon = "CMDStationIcon"; +// dynamicType = $TypeMasks::StationObjectType; +//}; + +datablock StaticShapeData(MobileInvStation) +{ + className = Station; + catagory = "Stations"; + shapeFile = "station_inv_mpb.dts"; + icon = "CMDStationIcon"; + // don't allow this object to be damaged in non-team-based + // mission types (DM, Rabbit, Bounty, Hunters) + noIndividualDamage = true; + + dynamicType = $TypeMasks::StationObjectType; + rechargeRate = 0.256; + doesRepair = true; +}; + + +//****************************************************************************** +//* Station - Functions * +//****************************************************************************** + +//////////////////////////////////////////////////////////////////////////////// +/// -Inventory- //////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// + +/// -Inventory- //////////////////////////////////////////////////////////////// +//Function -- onAdd (%this, %obj) +// %this = Object data block +// %obj = Object being added +//Decription -- Called when the object is added to the mission +//////////////////////////////////////////////////////////////////////////////// +function StationInventory::onAdd(%this, %obj) +{ + Parent::onAdd(%this, %obj); + + %obj.setRechargeRate(%obj.getDatablock().rechargeRate); + %trigger = new Trigger() + { + dataBlock = stationTrigger; + polyhedron = "-0.75 0.75 0.1 1.5 0.0 0.0 0.0 -1.5 0.0 0.0 0.0 2.3"; + }; + MissionCleanup.add(%trigger); + %trigger.setTransform(%obj.getTransform()); + + %trigger.station = %obj; + %trigger.mainObj = %obj; + %trigger.disableObj = %obj; + %obj.trigger = %trigger; +} + +/// -Inventory- //////////////////////////////////////////////////////////////// +//Function -- stationReady(%data, %obj) +// %data = Station Data Block +// %obj = Station Object +//Decription -- Called when station has been triggered and animation is +// completed +//////////////////////////////////////////////////////////////////////////////// +function StationInventory::stationReady(%data, %obj) +{ + //Display the Inventory Station GUI here + %obj.notReady = 1; + %obj.inUse = "Down"; + %obj.schedule(500,"playThread",$ActivateThread,"activate1"); + %player = %obj.triggeredBy; + %energy = %player.getEnergyLevel(); + %player.setCloaked(true); + %player.schedule(500, "setCloaked", false); + if (!%player.client.isAIControlled()) + buyFavorites(%player.client); + + %player.setEnergyLevel(%energy); + + %data.schedule( 500, "beginPersonalInvEffect", %obj ); +} + +function StationInventory::beginPersonalInvEffect( %data, %obj ) +{ + if (!%obj.isDisabled()) + { + %fx = new StationFXPersonal() + { + dataBlock = PersonalInvFX; + stationObject = %obj; + }; + } +} + +/// -Inventory- //////////////////////////////////////////////////////////////// +//Function -- stationFinished(%data, %obj) +// %data = Station Data Block +// %obj = Station Object +//Decription -- Called when player has left the station +//////////////////////////////////////////////////////////////////////////////// +function StationInventory::stationFinished(%data, %obj) +{ + //Hide the Inventory Station GUI +} + +/// -Inventory- //////////////////////////////////////////////////////////////// +//Function -- getSound(%data, %forward) +// %data = Station Data Block +// %forward = direction the animation is playing +//Decription -- This sound will be played at the same time as the activate +// animation. +//////////////////////////////////////////////////////////////////////////////// +function StationInventory::getSound(%data, %forward) +{ + if(%forward) + return "StationInventoryActivateSound"; + else + return false; +} + +/// -Inventory- //////////////////////////////////////////////////////////////// +//Function -- setPlayerPosition(%data, %obj, %trigger, %colObj) +// %data = Station Data Block +// %obj = Station Object +// %trigger = Stations trigger +// %colObj = Object that is at the station +//Decription -- Called when player enters the trigger. Used to set the player +// in the center of the station. +//////////////////////////////////////////////////////////////////////////////// +function StationInventory::setPlayersPosition(%data, %obj, %trigger, %colObj) +{ + %vel = getWords(%colObj.getVelocity(), 0, 1) @ " 0"; + if((VectorLen(%vel) < 17) && (%obj.triggeredBy != %colObj)) + { + %pos = %trigger.position; + %colObj.setvelocity("0 0 0"); + %rot = getWords(%colObj.getTransform(),3, 6); + %colObj.setTransform(getWord(%pos,0) @ " " @ getWord(%pos,1) @ " " @ getWord(%pos,2) + 0.8 @ " " @ %rot);//center player on object + %colObj.setMoveState(true); + %colObj.schedule(1600,"setMoveState", false); + %colObj.setvelocity("0 0 0"); + return true; + } + return false; +} + +//////////////////////////////////////////////////////////////////////////////// +/// -Vehicle- ////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// + +/// -Vehicle- ////////////////////////////////////////////////////////////////// +//Function -- onAdd (%this, %obj) +// %this = Object data block +// %obj = Object being added +//Decription -- Called when the object is added to the mission +//////////////////////////////////////////////////////////////////////////////// +function StationVehicle::onAdd(%this, %obj) +{ + Parent::onAdd(%this, %obj); + + %obj.setRechargeRate(%obj.getDatablock().rechargeRate); + %trigger = new Trigger() + { + dataBlock = stationTrigger; + polyhedron = "-0.75 0.75 0.0 1.5 0.0 0.0 0.0 -1.5 0.0 0.0 0.0 2.0"; + }; + MissionCleanup.add(%trigger); + %trigger.setTransform(%obj.getTransform()); + %trigger.station = %obj; + %obj.trigger = %trigger; +} + +/// -Vehicle- ////////////////////////////////////////////////////////////////// +//Function -- stationReady(%data, %obj) +// %data = Station Data Block +// %obj = Station Object +//Decription -- Called when station has been triggered and animation is +// completed +//////////////////////////////////////////////////////////////////////////////// +function StationVehicle::stationReady(%data, %obj) +{ + // Make sure none of the other popup huds are active: + messageClient( %obj.triggeredBy.client, 'CloseHud', "", 'scoreScreen' ); + messageClient( %obj.triggeredBy.client, 'CloseHud', "", 'inventoryScreen' ); + + //Display the Vehicle Station GUI + commandToClient(%obj.triggeredBy.client, 'StationVehicleShowHud'); +} + +/// -Vehicle- ////////////////////////////////////////////////////////////////// +//Function -- stationFinished(%data, %obj) +// %data = Station Data Block +// %obj = Station Object +//Decription -- Called when player has left the station +//////////////////////////////////////////////////////////////////////////////// +function StationVehicle::stationFinished(%data, %obj) +{ + //Hide the Vehicle Station GUI + commandToClient(%obj.triggeredBy.client, 'StationVehicleHideHud'); +} + +/// -Vehicle- ////////////////////////////////////////////////////////////////// +//Function -- getSound(%data, %forward) +// %data = Station Data Block +// %forward = direction the animation is playing +//Decription -- This sound will be played at the same time as the activate +// animation. +//////////////////////////////////////////////////////////////////////////////// +function StationVehicle::getSound(%data, %forward) +{ + if(%forward) + return "StationVehicleAcitvateSound"; + else + return "StationVehicleDeactivateSound"; +} + +/// -Vehicle- ////////////////////////////////////////////////////////////////// +//Function -- setPlayerPosition(%data, %obj, %trigger, %colObj) +// %data = Station Data Block +// %obj = Station Object +// %trigger = Stations trigger +// %colObj = Object that is at the station +//Decription -- Called when player enters the trigger. Used to set the player +// in the center of the station. +//////////////////////////////////////////////////////////////////////////////// +function StationVehicle::setPlayersPosition(%data, %obj, %trigger, %colObj) +{ + %vel = getWords(%colObj.getVelocity(), 0, 1) @ " 0"; + if((VectorLen(%vel) < 17) && (%obj.triggeredBy != %colObj)) + { + %posXY = getWords(%trigger.getTransform(),0 ,1); + %posZ = getWord(%trigger.getTransform(), 2); + %rotZ = getWord(%obj.getTransform(), 5); + %angle = getWord(%obj.getTransform(), 6); + %angle += 3.141592654; + if(%angle > 6.283185308) + %angle = %angle - 6.283185308; + %colObj.setvelocity("0 0 0"); + %colObj.setTransform(%posXY @ " " @ %posZ + 0.2 @ " " @ "0 0 " @ %rotZ @ " " @ %angle );//center player on object + return true; + } + return false; +} + +function StationVehiclePad::onAdd(%this, %obj) +{ + Parent::onAdd(%this, %obj); + + %obj.ready = true; + %obj.setRechargeRate(%obj.getDatablock().rechargeRate); + %xform = %obj.getSlotTransform(0); + %pos = getWords(%xform, 0, 2); + %rot = getWords(%xform, 3, 5); + %angle = (getWord(%xform, 6) * 180) / 3.14159; + + %sv = new StaticShape() { + scale = "1 1 1"; + dataBlock = StationVehicle; + lockCount = "0"; + homingCount = "0"; + team = %obj.team; + position = %pos; + rotation = %rot @ " " @ %angle; + }; + + MissionCleanup.add(%sv); + %sv.getDataBlock().gainPower(%sv); + %sv.pad = %obj; + %obj.station = %sv; + %sv.trigger.mainObj = %obj; + %sv.trigger.disableObj = %sv; + + //Remove unwanted vehicles + if(%obj.scoutVehicle $= "Removed") + { } + else + %sv.vehicle[scoutvehicle] = true; + if(%obj.assaultVehicle $= "Removed") + { } + else + %sv.vehicle[assaultVehicle] = true; + if(%obj.mobileBaseVehicle $= "Removed") + { } + else + %sv.vehicle[mobileBasevehicle] = true; + if(%obj.scoutFlyer $= "Removed") + { } + else + %sv.vehicle[scoutFlyer] = true; + if(%obj.bomberFlyer $= "Removed") + { } + else + %sv.vehicle[bomberFlyer] = true; + if(%obj.hapcFlyer $= "Removed") + { } + else + %sv.vehicle[hapcFlyer] = true; +} + +function StationVehiclePad::onEndSequence(%data, %obj, %thread) +{ + if(%thread == $ActivateThread) + { + %obj.ready = true; + %obj.stopThread($ActivateThread); + } + Parent::onEndSequence(%data, %obj, %thread); +} + +//////////////////////////////////////////////////////////////////////////////// +/// -Mobile Base Inventory- //////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// + +/// -Mobile Base- ////////////////////////////////////////////////////////////// +//Function -- onAdd (%this, %obj) +// %this = Object data block +// %obj = Object being added +//Decription -- Called when the object is added to the mission +//////////////////////////////////////////////////////////////////////////////// +function MobileInvStation::onAdd(%this, %obj) +{ +} + +function MobileInvStation::createTrigger(%this, %obj) +{ + Parent::onAdd(%this, %obj); + + %obj.setRechargeRate(%obj.getDatablock().rechargeRate); + %trigger = new Trigger() + { + dataBlock = stationTrigger; + polyhedron = "-0.75 0.75 0.1 1.5 0.0 0.0 0.0 -1.5 0.0 0.0 0.0 2.3"; + }; + MissionCleanup.add(%trigger); + %trigger.setTransform(%obj.vehicle.getSlotTransform(2)); + + %trigger.station = %obj; + %trigger.mainObj = %obj; + %trigger.disableObj = %obj; + + %obj.trigger = %trigger; +// createTarget(%obj, 'Inventory Station', "", "", 'Station', 0, 0); +} + +/// -Mobile Base- ////////////////////////////////////////////////////////////// +//Function -- stationReady(%data, %obj) +// %data = Station Data Block +// %obj = Station Object +//Decription -- Called when station has been triggered and animation is +// completed +//////////////////////////////////////////////////////////////////////////////// +function MobileInvStation::stationReady(%data, %obj) +{ + //Display the Inventory Station GUI here + %obj.notReady = 1; + %obj.inUse = "Down"; + %obj.schedule(200,"playThread",$ActivateThread,"activate1"); + %obj.getObjectMount().playThread($ActivateThread,"Activate"); + %player = %obj.triggeredBy; + %energy = %player.getEnergyLevel(); + %player.setCloaked(true); + %player.schedule(900, "setCloaked", false); + if (!%player.client.isAIControlled()) + buyFavorites(%player.client); + + %player.setEnergyLevel(%energy); +} + +/// -Mobile Base- ////////////////////////////////////////////////////////////// +//Function -- stationFinished(%data, %obj) +// %data = Station Data Block +// %obj = Station Object +//Decription -- Called when player has left the station +//////////////////////////////////////////////////////////////////////////////// +function MobileInvStation::stationFinished(%data, %obj) +{ + //Hide the Inventory Station GUI +} + +/// -Mobile Base- ////////////////////////////////////////////////////////////// +//Function -- getSound(%data, %forward) +// %data = Station Data Block +// %forward = direction the animation is playing +//Decription -- This sound will be played at the same time as the activate +// animation. +//////////////////////////////////////////////////////////////////////////////// +function MobileInvStation::getSound(%data, %forward) +{ + if(%forward) + return "MobileBaseInventoryActivateSound"; + else + return false; +} + +/// -Mobile Base- ////////////////////////////////////////////////////////////// +//Function -- setPlayerPosition(%data, %obj, %trigger, %colObj) +// %data = Station Data Block +// %obj = Station Object +// %trigger = Stations trigger +// %colObj = Object that is at the station +//Decription -- Called when player enters the trigger. Used to set the player +// in the center of the station. +//////////////////////////////////////////////////////////////////////////////// +function MobileInvStation::setPlayersPosition(%data, %obj, %trigger, %colObj) +{ + %vel = getWords(%colObj.getVelocity(), 0, 1) @ " 0"; + if((VectorLen(%vel) < 17) && (%obj.triggeredBy != %colObj)) + { + %pos = %trigger.position; + %colObj.setvelocity("0 0 0"); + %rot = getWords(%colObj.getTransform(),3, 6); +// %colObj.setTransform(getWord(%pos,0) @ " " @ getWord(%pos,1) - 0.75 @ " " @ getWord(%pos,2)+0.7 @ " " @ %rot);//center player on object + %colObj.setTransform(getWord(%pos,0) @ " " @ getWord(%pos,1) @ " " @ getWord(%pos,2)+0.8 @ " " @ %rot);//center player on object + %colObj.setMoveState(true); + %colObj.schedule(1600,"setMoveState", false); + %colObj.setvelocity("0 0 0"); + return true; + } + return false; +} + +function MobileInvStation::onDamage() +{ +} + +function MobileInvStation::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType) +{ + //If vehicle station is hit then apply damage to the vehicle + %targetObject.getObjectMount().damage(%sourceObject, %position, %amount, %damageType); +} + +//////////////////////////////////////////////////////////////////////////////// +/// -Station Trigger- ////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// + +////-Station Trigger-/////////////////////////////////////////////////////////// +//Function -- onEnterTrigger (%data, %obj, %colObj) +// %data = Trigger Data Block +// %obj = Trigger Object +// %colObj = Object that collided with the trigger +//Decription -- Called when trigger has been triggered +//////////////////////////////////////////////////////////////////////////////// +function stationTrigger::onEnterTrigger(%data, %obj, %colObj) +{ + //make sure it's a player object, and that that object is still alive + if(%colObj.getDataBlock().className !$= "Armor" || %colObj.getState() $= "Dead") + return; + + %colObj.inStation = true; + commandToClient(%colObj.client,'setStationKeys', true); + if(Game.stationOnEnterTrigger(%data, %obj, %colObj)) { + //verify station.team is team associated and isn't on player's team + if((%obj.mainObj.team != %colObj.client.team) && (%obj.mainObj.team != 0)) + { + %obj.station.playAudio(2, StationAccessDeniedSound); + messageClient(%colObj.client, 'msgStationDenied', '\c2Access Denied -- Wrong team.'); + } + else if(%obj.disableObj.isDisabled()) + { + messageClient(%colObj.client, 'msgStationDisabled', '\c2Station is disabled.'); + } + else if(!%obj.mainObj.isPowered()) + { + messageClient(%colObj.client, 'msgStationNoPower', '\c2Station is not powered.'); + } + else if(%obj.station.notDeployed) + { + messageClient(%colObj.client, 'msgStationNotDeployed', '\c2Station is not deployed.'); + } + else if(%obj.station.triggeredBy $= "") + { + if(%obj.station.getDataBlock().setPlayersPosition(%obj.station, %obj, %colObj)) + { + messageClient(%colObj.client, 'CloseHud', "", 'inventoryScreen'); + commandToClient(%colObj.client, 'TogglePlayHuds', true); + %obj.station.triggeredBy = %colObj; + %obj.station.getDataBlock().stationTriggered(%obj.station, 1); + %colObj.station = %obj.station; + %colObj.lastWeapon = ( %colObj.getMountedImage($WeaponSlot) == 0 ) ? "" : %colObj.getMountedImage($WeaponSlot).getName().item; + %colObj.unmountImage($WeaponSlot); + } + } + } +} + + +////-Station Trigger-/////////////////////////////////////////////////////////// +//Function -- onLeaveTrigger (%data, %obj, %colObj) +// %data = Trigger Data Block +// %obj = Trigger Object +// %colObj = Object that collided with the trigger +//Decription -- Called when trigger has been untriggered +//////////////////////////////////////////////////////////////////////////////// +function stationTrigger::onLeaveTrigger(%data, %obj, %colObj) +{ + if(%colObj.getDataBlock().className !$= "Armor") + return; + + %colObj.inStation = false; + commandToClient(%colObj.client,'setStationKeys', false); + if(%obj.station) + { + if(%obj.station.triggeredBy == %colObj) + { + %obj.station.getDataBlock().stationFinished(%obj.station); + %obj.station.getDataBlock().endRepairing(%obj.station); + %obj.station.triggeredBy = ""; + %obj.station.getDataBlock().stationTriggered(%obj.station, 0); + %colObj.station = ""; + if(%colObj.getMountedImage($WeaponSlot) == 0) + { + if(%colObj.inv[%colObj.lastWeapon]) + %colObj.use(%colObj.lastWeapon); + + if(%colObj.getMountedImage($WeaponSlot) == 0) + %colObj.selectWeaponSlot( 0 ); + } + } + } +} + +////-Station Trigger-/////////////////////////////////////////////////////////// +//Function -- stationTriggered(%data, %obj, %isTriggered) +// %data = Station Data Block +// %obj = Station Object +// %isTriggered = 1 if triggered; 0 if status changed to +// untriggered +//Decription -- Called when a "station trigger" has been triggered or +// untriggered +//////////////////////////////////////////////////////////////////////////////// +function Station::stationTriggered(%data, %obj, %isTriggered) +{ + if(%isTriggered) + { + %obj.setThreadDir($ActivateThread, TRUE); + %obj.playThread($ActivateThread,"activate"); + %obj.playAudio($ActivateSound, %data.getSound(true)); + %obj.inUse = "Up"; + } + else + { + if(%obj.getDataBlock().getName() !$= StationVehicle) + { + %obj.stopThread($ActivateThread); + if(%obj.getObjectMount()) + %obj.getObjectMount().stopThread($ActivateThread); + %obj.inUse = "Down"; + } + else + { + %obj.setThreadDir($ActivateThread, FALSE); + %obj.playThread($ActivateThread,"activate"); + %obj.playAudio($ActivateSound, %data.getSound(false)); + %obj.inUse = "Down"; + } + } +} + +////-Station-/////////////////////////////////////////////////////////////////// +//Function -- onEndSequence(%data, %obj, %thread) +// %data = Station Data Block +// %obj = Station Object +// %thread = Thread number that the animation is associated +// with / running on. +//Decription -- Called when an animation sequence is finished playing +//////////////////////////////////////////////////////////////////////////////// +function Station::onEndSequence(%data, %obj, %thread) +{ + if(%thread == $ActivateThread) + { + if(%obj.inUse $= "Up") + { + %data.stationReady(%obj); + %player = %obj.triggeredBy; + if(%data.doesRepair && !%player.stationRepairing && %player.getDamageLevel() != 0) { + %oldRate = %player.getRepairRate(); + %player.setRepairRate(%oldRate + 0.00625); + %player.stationRepairing = 1; + } + } + else + { + if(%obj.getDataBlock().getName() !$= MobileInvStation) + { + %obj.stopThread($ActivateThread); + %obj.inUse = "Down"; + } + } + } + Parent::onEndSequence(%data, %obj, %thread); +} + +////-Station-/////////////////////////////////////////////////////////////////// +//Function -- onCollision(%data, %obj, %colObj) +// %data = Station Data Block +// %obj = Station Object +// %colObj = Object that collided with the station +//Decription -- Called when an object collides with a station +//////////////////////////////////////////////////////////////////////////////// +function Station::onCollision(%data, %obj, %colObj) +{ + // Currently Not Needed +} + +////-Station-/////////////////////////////////////////////////////////////////// +//Function -- endRepairing(%data, %obj) +// %data = Station Data Block +// %obj = Station Object +//Decription -- Called to stop repairing the object +//////////////////////////////////////////////////////////////////////////////// +function Station::endRepairing(%data, %obj) +{ + if(%obj.triggeredBy.stationRepairing) + { + %oldRate = %obj.triggeredBy.getRepairRate(); + %obj.triggeredBy.setRepairRate(%oldRate - 0.00625); + %obj.triggeredBy.stationRepairing = 0; + } +} + +////-Station Trigger-/////////////////////////////////////////////////////////// +//Function -- onTickTrigger(%data, %obj) +// %data = Trigger Data Block +// %obj = Trigger Object +//Decription -- Called every tick if triggered +//////////////////////////////////////////////////////////////////////////////// +function stationTrigger::onTickTrigger(%data, %obj) +{ +} + +//****************************************************************************** +//* Station General - Functions * +//****************************************************************************** + +//function Station::onGainPowerEnabled(%data, %obj) + +function Station::onLosePowerDisabled(%data, %obj) +{ + Parent::onLosePowerDisabled(%data, %obj); + + // check to see if a player was using this station + %occupied = %obj.triggeredBy; + if(%occupied > 0) + { + if(%data.doesRepair) + %data.endRepairing(%obj); + // if it's a deployed station, stop "flashing panels" thread + if(%data.getName() $= DeployedStationInventory) + %obj.stopThread($ActivateThread); + // reset some attributes + %occupied.station = ""; + %occupied.inStation = false; + %obj.triggeredBy = ""; + // restore "toggle inventory hud" key + commandToClient(%occupied.client,'setStationKeys', false); + // re-mount last weapon or weapon slot 0 + if(%occupied.getMountedImage($WeaponSlot) == 0) + { + if(%occupied.inv[%occupied.lastWeapon]) + %occupied.use(%occupied.lastWeapon); + if(%occupied.getMountedImage($WeaponSlot) == 0) + %occupied.selectWeaponSlot( 0 ); + } + } +} + +function StationVehiclePad::gainPower(%data, %obj) +{ + %obj.station.setSelfPowered(); + Parent::gainPower(%data, %obj); +} + +function StationVehiclePad::losePower(%data, %obj) +{ + %obj.station.clearSelfPowered(); + Parent::losePower(%data, %obj); +} + +//--------------------------------------------------------------------------- +// DeployedStationInventory: +//--------------------------------------------------------------------------- + +function DeployedStationInventory::stationReady(%data, %obj) +{ + %obj.notReady = 1; + %player = %obj.triggeredBy; + %obj.playThread($ActivateThread,"activate1"); + // function below found in inventoryHud.cs + if (!%player.client.isAIControlled()) + buyDeployableFavorites(%player.client); +} + +function DeployedStationInventory::stationFinished(%data, %obj) +{ +} + +function DeployedStationInventory::setPlayersPosition(%data, %obj, %trigger, %colObj) +{ + %vel = getWords(%colObj.getVelocity(), 0, 1) @ " 0"; + if((VectorLen(%vel) < 17) && (%obj.triggeredBy != %colObj)) + { + // build offset for player position + %yrot = getWords(VectorOrthoBasis( getWords( %obj.getTransform(), 3, 6 ) ) ,3 ,5); + %yrot = VectorScale( %yrot, -1.0 ); + %statTrans = %obj.getTransform(); + %statX = getWord( %statTrans, 0 ); + %statY = getWord( %statTrans, 1 ); + %statZ = getWord( %statTrans, 2 ); + + %colObj.setTransform( %statX + getWord( %yRot, 0 ) @ " " @ %statY + getWord( %yRot, 1 ) @ " " @ %statZ + 0.2 @ " " @ getWords( %statTrans, 3, 6 ) ); + %colObj.setvelocity("0 0 0"); + %colObj.setMoveState(true); + %colObj.schedule(1600,"setMoveState", false); + return true; + } + return false; +} + +function DeployedStationInventory::onDestroyed(%data, %obj, %prevState) +{ + %obj.trigger.delete(); + // decrement team deployed count for this item + $TeamDeployedCount[%obj.team, InventoryDeployable]--; + + // when a station is destroyed, we don't need its trigger any more + %obj.schedule(700, "delete"); + Parent::onDestroyed(%data, %obj, %prevState); +} + +/// -Deployable Inventory- ////////////////////////////////////////////////////////////// +//Function -- getSound(%data, %forward) +// %data = Station Data Block +// %forward = direction the animation is playing +//Decription -- This sound will be played at the same time as the activate +// animation. +//////////////////////////////////////////////////////////////////////////////// +function DeployedStationInventory::getSound(%data, %forward) +{ + if(%forward) + return "DepInvActivateSound"; + else + return false; +} diff --git a/base/scripts/stationSetInv.cs b/base/scripts/stationSetInv.cs new file mode 100644 index 0000000..a96a7f2 --- /dev/null +++ b/base/scripts/stationSetInv.cs @@ -0,0 +1,217 @@ +function LightMaleHumanArmor::stationSetInv(%data, %player) +{ + %saveImage = %player.getMountedImage($WeaponSlot); + + %player.clearInventory(); + %player.client.setWeaponsHudClearAll(); + + %player.setInventory(RepairKit,1); + %player.setInventory(Mine,3); + %player.setInventory(Grenade,6); + %player.setInventory(Blaster,1); + %player.setInventory(Plasma,1); + %player.setInventory(Disc,1); + %player.setInventory(Chaingun, 1); + %player.setInventory(GrenadeLauncher, 1); + %player.setInventory(GrenadeLauncherAmmo, 25); + %player.setInventory(PlasmaAmmo,20); + %player.setInventory(ChaingunAmmo, 100); + %player.setInventory(DiscAmmo, 20); + + %player.use(%saveImage.Item); +} + +function MediumMaleHumanArmor::stationSetInv(%data, %player) +{ + %saveImage = %player.getMountedImage($WeaponSlot); + + %player.clearInventory(); + %player.client.setWeaponsHudClearAll(); + + %player.setInventory(RepairKit,1); + %player.setInventory(Mine,3); + %player.setInventory(Grenade,6); + %player.setInventory(Blaster,1); + %player.setInventory(Plasma,1); + %player.setInventory(Disc,1); + %player.setInventory(Chaingun, 1); + %player.setInventory(GrenadeLauncher, 1); + %player.setInventory(MissileLauncher, 1); + %player.setInventory(MissileLauncherAmmo, 10); + %player.setInventory(GrenadeLauncherAmmo, 25); + %player.setInventory(PlasmaAmmo,20); + %player.setInventory(ChaingunAmmo, 100); + %player.setInventory(DiscAmmo, 20); + + %player.use(%saveImage.Item); +} + +function HeavyMaleHumanArmor::stationSetInv(%data, %player) +{ + %saveImage = %player.getMountedImage($WeaponSlot); + + %player.clearInventory(); + %player.client.setWeaponsHudClearAll(); + + %player.setInventory(RepairKit,1); + %player.setInventory(Mine,3); + %player.setInventory(Grenade,6); + %player.setInventory(Blaster,1); + %player.setInventory(Plasma,1); + %player.setInventory(Disc,1); + %player.setInventory(Chaingun, 1); + %player.setInventory(GrenadeLauncher, 1); + %player.setInventory(Mortar, 1); + %player.setInventory(MortarAmmo, 15); + %player.setInventory(GrenadeLauncherAmmo, 25); + %player.setInventory(PlasmaAmmo,20); + %player.setInventory(ChaingunAmmo, 100); + %player.setInventory(DiscAmmo, 20); + + %player.use(%saveImage.Item); +} + +function LightFemaleHumanArmor::stationSetInv(%data, %player) +{ + %saveImage = %player.getMountedImage($WeaponSlot); + + %player.clearInventory(); + %player.client.setWeaponsHudClearAll(); + + %player.setInventory(RepairKit,1); + %player.setInventory(Mine,3); + %player.setInventory(Grenade,6); + %player.setInventory(Blaster,1); + %player.setInventory(Plasma,1); + %player.setInventory(Disc,1); + %player.setInventory(Chaingun, 1); + %player.setInventory(GrenadeLauncher, 1); + %player.setInventory(GrenadeLauncherAmmo, 25); + %player.setInventory(PlasmaAmmo,20); + %player.setInventory(ChaingunAmmo, 100); + %player.setInventory(DiscAmmo, 20); + + %player.use(%saveImage.Item); +} + +function MediumFemaleHumanArmor::stationSetInv(%data, %player) +{ + %saveImage = %player.getMountedImage($WeaponSlot); + + %player.clearInventory(); + %player.client.setWeaponsHudClearAll(); + + %player.setInventory(RepairKit,1); + %player.setInventory(Mine,3); + %player.setInventory(Grenade,6); + %player.setInventory(Blaster,1); + %player.setInventory(Plasma,1); + %player.setInventory(Disc,1); + %player.setInventory(Chaingun, 1); + %player.setInventory(GrenadeLauncher, 1); + %player.setInventory(MissileLauncher, 1); + %player.setInventory(MissileLauncherAmmo, 10); + %player.setInventory(GrenadeLauncherAmmo, 25); + %player.setInventory(PlasmaAmmo,20); + %player.setInventory(ChaingunAmmo, 100); + %player.setInventory(DiscAmmo, 20); + + %player.use(%saveImage.Item); +} + +function HeavyFemaleHumanArmor::stationSetInv(%data, %player) +{ + %saveImage = %player.getMountedImage($WeaponSlot); + + %player.clearInventory(); + %player.client.setWeaponsHudClearAll(); + + %player.setInventory(RepairKit,1); + %player.setInventory(Mine,3); + %player.setInventory(Grenade,6); + %player.setInventory(Blaster,1); + %player.setInventory(Plasma,1); + %player.setInventory(Disc,1); + %player.setInventory(Chaingun, 1); + %player.setInventory(GrenadeLauncher, 1); + %player.setInventory(Mortar, 1); + %player.setInventory(MortarAmmo, 15); + %player.setInventory(GrenadeLauncherAmmo, 25); + %player.setInventory(PlasmaAmmo,20); + %player.setInventory(ChaingunAmmo, 100); + %player.setInventory(DiscAmmo, 20); + + %player.use(%saveImage.Item); +} + +function LightMaleBiodermArmor::stationSetInv(%data, %player) +{ + %saveImage = %player.getMountedImage($WeaponSlot); + + %player.clearInventory(); + %player.client.setWeaponsHudClearAll(); + + %player.setInventory(RepairKit,1); + %player.setInventory(Mine,3); + %player.setInventory(Grenade,6); + %player.setInventory(Blaster,1); + %player.setInventory(Plasma,1); + %player.setInventory(Disc,1); + %player.setInventory(Chaingun, 1); + %player.setInventory(GrenadeLauncher, 1); + %player.setInventory(GrenadeLauncherAmmo, 25); + %player.setInventory(PlasmaAmmo,20); + %player.setInventory(ChaingunAmmo, 100); + %player.setInventory(DiscAmmo, 20); + + %player.use(%saveImage.Item); +} + +function MediumMaleBiodermArmor::stationSetInv(%data, %player) +{ + %saveImage = %player.getMountedImage($WeaponSlot); + + %player.clearInventory(); + %player.client.setWeaponsHudClearAll(); + + %player.setInventory(RepairKit,1); + %player.setInventory(Mine,3); + %player.setInventory(Grenade,6); + %player.setInventory(Blaster,1); + %player.setInventory(Plasma,1); + %player.setInventory(Disc,1); + %player.setInventory(Chaingun, 1); + %player.setInventory(GrenadeLauncher, 1); + %player.setInventory(MissileLauncher, 1); + %player.setInventory(MissileLauncherAmmo, 10); + %player.setInventory(GrenadeLauncherAmmo, 25); + %player.setInventory(PlasmaAmmo,20); + %player.setInventory(ChaingunAmmo, 100); + %player.setInventory(DiscAmmo, 20); + + %player.use(%saveImage.Item); +} +function HeavyMaleBiodermArmor::stationSetInv(%data, %player) +{ + %saveImage = %player.getMountedImage($WeaponSlot); + + %player.clearInventory(); + %player.client.setWeaponsHudClearAll(); + + %player.setInventory(RepairKit,1); + %player.setInventory(Mine,3); + %player.setInventory(Grenade,6); + %player.setInventory(Blaster,1); + %player.setInventory(Plasma,1); + %player.setInventory(Disc,1); + %player.setInventory(Chaingun, 1); + %player.setInventory(GrenadeLauncher, 1); + %player.setInventory(Mortar, 1); + %player.setInventory(MortarAmmo, 15); + %player.setInventory(GrenadeLauncherAmmo, 25); + %player.setInventory(PlasmaAmmo,20); + %player.setInventory(ChaingunAmmo, 100); + %player.setInventory(DiscAmmo, 20); + + %player.use(%saveImage.Item); +} diff --git a/base/scripts/targetManager.cs b/base/scripts/targetManager.cs new file mode 100644 index 0000000..3d5654d --- /dev/null +++ b/base/scripts/targetManager.cs @@ -0,0 +1,233 @@ +//-------------------------------------------------------------------------- +// helper function for creating targets +function createTarget(%obj, %nameTag, %skinTag, %voiceTag, %typeTag, %sensorGroup, %voicePitch) +{ + if(%obj.nameTag !$= "") + %nameTag = addTaggedString(%obj.nameTag); + + if (%voicePitch $= "" || %voicePitch == 0) + %voicePitch = 1.0; + %data = (%obj.getType() & $TypeMasks::ShapeBaseObjectType) ? %obj.getDataBlock() : 0; + %target = allocTarget(%nameTag, %skinTag, %voiceTag, %typeTag, %sensorGroup, %data, %voicePitch); + + %obj.setTarget(%target); + return(%target); +} + +//-------------------------------------------------------------------------- +// useful for when a client switches teams or joins the game +function clientResetTargets(%client, %tasksOnly) +{ + if(%client.isAiControlled()) + return; + + // remove just tasks or everything? + resetClientTargets(%client, %tasksOnly); + + // notify the client to cleanup the gui... + commandToClient(%client, 'ResetTaskList'); +} + +//-------------------------------------------------------------------------- +// useful at end of missions +function resetTargetManager() +{ + %count = ClientGroup.getCount(); + + // clear the lookup table + for(%cl = 0; %cl < %count; %cl++) + { + %client = ClientGroup.getObject(%cl); + $TargetToClient[%client.target] = ""; + } + + // reset all the targets on all the connections + resetTargets(); + + // create targets for all the clients + for(%cl = 0; %cl < %count; %cl++) + { + %client = ClientGroup.getObject(%cl); + + if(!%client.isAiControlled()) + commandToClient(%client, 'ResetTaskList'); + + // reset the clients target and update the lookup table + %client.target = allocClientTarget(%client, %client.name, %client.skin, %client.voiceTag, '_ClientConnection', 0, 0, %client.voicePitch); + } +} + +//-------------------------------------------------------------------------- +// wrap the client targets to maintain a lookup table on the server +function allocClientTarget(%client, %nameTag, %skinTag, %voiceTag, %typeTag, %sensorGroup, %datablock, %voicePitch) +{ + if (%voicePitch $= "" || %voicePitch == 0) + %voicePitch = 1.0; + echo("allocating client target - skin = " @ getTaggedString(%skinTag)); + %target = allocTarget(%nameTag, %skinTag, %voiceTag, %typeTag, %sensorGroup, %datablock, %voicePitch, %skinTag); + + // first bit is the triangle + setTargetRenderMask(%target, (1 << $TargetInfo::HudRenderStart)); + + $TargetToClient[%target] = %client; + return(%target); +} + +function freeClientTarget(%client) +{ + $TargetToClient[%client.target] = ""; + freeTarget(%client.target); +} + +//-------------------------------------------------------------------------- +function ClientTarget::onAdd(%this, %type) +{ + %this.client = TaskList.currentTaskClient; + %this.AIObjective = TaskList.currentAIObjective; + %this.team = TaskList.currentTaskIsTeam; + %this.description = TaskList.currentTaskDescription; + + %player = $PlayerList[%this.client]; + %this.clientName = %player ? %player.name : "[Unknown]"; + + switch$(%type) + { + case "AssignedTask": + TaskList.currentTask = %this; + %this.setText(%this.description); + + case "PotentialTask": + // add to the task list and display a message + TaskList.addTask(%this, %this.clientName, detag(%this.description)); + %this.setText(%this.description); + } +} + +function ClientTarget::onDie(%this, %type) +{ + // if this target is not removed from its current group then it will be + // deleted on return of this call + switch$(%type) + { + case "AssignedTask": // let it die + TaskList.currentTask = -1; + + case "PotentialTask": + TaskList.handleDyingTask(%this); + } +} + +//-------------------------------------------------------------------------- +// debug: useless if not compiled debug +//-------------------------------------------------------------------------- +function displayTargetManagerInfo() +{ + if(!isObject(TargetManagerInfoDlg)) + { + new GuiControl(TargetManagerInfoDlg) + { + profile = "GuiModelessDialogProfile"; + open = false; + + new GuiWindowCtrl(TargetManagerInfoWindow) + { + profile = "GuiWindowProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 100"; + extent = "600 300"; + canMove = true; + canClose = true; + resizeWidth = true; + resizeHeight = true; + canMinimize = true; + canMaximize = true; + + new GuiScrollCtrl() + { + profile = "GuiScrollCtrlProfile"; + position = "4 20"; + extent = "592 276"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + horizSizing = "width"; + vertSizing = "height"; + + new GuiScrollContentCtrl() + { + profile = "GuiScrollContentProfile"; + position = "0 0"; + extent = "576 276"; + horizSizing = "width"; + vertSizing = "height"; + + new GuiTargetManagerListCtrl(TargetManagerInfo) + { + profile = "GuiTextArrayProfile"; + position = "0 0"; + extent = "10 10"; + horizSizing = "width"; + vertSizing = "height"; + clipColumnText = true; + }; + }; + }; + }; + }; + } + + toggleTheWindow(true); +} + +function toggleTheWindow(%val) +{ + if(!%val) + return; + + if(TargetManagerInfoDlg.open) + Canvas.popDialog(TargetManagerInfoDlg); + else + Canvas.pushDialog(TargetManagerInfoDlg, 98); +} + +function toggleTheMouse(%val) +{ + if(!%val) + return; + toggleMouse(); +} + +function toggleTheClient(%val) +{ + if(!%val) + return; + + TargetManagerInfo.serverTargets = !TargetManagerInfo.serverTargets; + TargetManagerInfoDlg.updateWindowText(); +} + +function TargetManagerInfoDlg::updateWindowText() +{ + if(TargetManagerInfo.serverTargets) + TargetManagerInfoWindow.setText("Target Manager Info: "); + else + TargetManagerInfoWindow.setText("Target Manager Info: "); +} + +function TargetManagerInfoDlg::onWake(%this) +{ + %this.open = true; + TargetManagerInfo.columns = "0 20 120 200 240 280 320 360 420 480 530 580 630 680"; + + GlobalActionMap.bind(keyboard, j, toggleTheWindow); + GlobalActionMap.bind(keyboard, k, toggleTheMouse); + GlobalActionMap.bind(keyboard, l, toggleTheClient); + %this.updateWindowText(); +} + +function TargetManagerInfoDlg::onSleep(%this) +{ + %this.open = false; + GlobalActionMap.unbind(keyboard, k); + GlobalActionMap.unbind(keyboard, l); +} \ No newline at end of file diff --git a/base/scripts/trigger.cs b/base/scripts/trigger.cs new file mode 100644 index 0000000..f9094e7 --- /dev/null +++ b/base/scripts/trigger.cs @@ -0,0 +1,124 @@ +//-------------------------------------------------------------------------- +// Trigger functions and datablocks... +// +// +//-------------------------------------------------------------------------- + +datablock TriggerData(defaultTrigger) +{ + tickPeriodMS = 200; +}; + +datablock TriggerData(hairTrigger) +{ + tickPeriodMS = 30; +}; + +datablock TriggerData(slowTrigger) +{ + tickPeriodMS = 1000; +}; + +datablock TriggerData(stationTrigger) +{ + tickPeriodMS = 30; +}; + +datablock TriggerData(gameTrigger) +{ + tickPeriodMS = 50; +}; + +datablock TriggerData(markerTrigger) +{ + tickPeriodMS = 100000; +}; +//-------------------------------------------------------------------------- +datablock TriggerData(defaultTeamTrigger) +{ + tickPeriodMS = 200; +}; + +function defaultTeamTrigger::onEnterTrigger(%this, %trigger, %triggeringObject) +{ + %group = %trigger.getGroup(); + if (!%group) + return; + for (%i = 0; %i < %group.getCount(); %i++) { + %object = %group.getObject(%i); + if (%triggeringObject.team == %trigger.team) + %object.onTrigger(%trigger, 1); + } +} + +function defaultTeamTrigger::onLeaveTrigger(%this, %trigger, %triggeringObject) +{ + %group = %trigger.getGroup(); + if (!%group) + return; + for (%i = 0; %i < %group.getCount(); %i++) { + %object = %group.getObject(%i); + if (%triggeringObject.team == %trigger.team) + %object.onTrigger(%trigger, 0); + } +} + +function defaultTeamTrigger::onTickTrigger(%this, %trigger) +{ + %group = %trigger.getGroup(); + if (!%group) + return; + %tick = false; + for (%i = 0; %i < %trigger.getNumObjects(); %i++) { + if (%trigger.getObject(%i).team == %trigger.team) { + %tick = true; + break; + } + } + + if (%tick == true) { + for (%i = 0; %i < %group.getCount(); %i++) { + %object = %group.getObject(%i); + %object.onTriggerTick(%trigger); + } + } +} + +//****************************************************************************** +//* Game Trigger - Functions * +//****************************************************************************** + +/// -Trigger- ////////////////////////////////////////////////////////////////// +//Function -- onEnterTrigger (%data, %obj, %colObj) +// %data = Trigger Data Block +// %obj = Trigger Object +// %colObj = Object that collided with the trigger +//Decription -- Called when trigger has been triggered +//////////////////////////////////////////////////////////////////////////////// +function gameTrigger::onEnterTrigger(%data, %obj, %colObj) +{ + Game.onEnterTrigger(%obj.name, %data, %obj, %colObj); +} + +/// -Trigger- ////////////////////////////////////////////////////////////////// +//Function -- onLeaveTrigger (%data, %obj, %colObj) +// %data = Trigger Data Block +// %obj = Trigger Object +// %colObj = Object that collided with the trigger +//Decription -- Called when trigger has been untriggered +//////////////////////////////////////////////////////////////////////////////// +function gameTrigger::onLeaveTrigger(%data, %obj, %colObj) +{ + Game.onLeaveTrigger(%obj.name, %data, %obj, %colObj); +} + +/// -Trigger- ////////////////////////////////////////////////////////////////// +//Function -- onTickTrigger(%data, %obj) +// %data = Trigger Data Block +// %obj = Trigger Object +//Decription -- Called every tick if triggered +//////////////////////////////////////////////////////////////////////////////// +function gameTrigger::onTickTrigger(%data, %obj) +{ + Game.onTickTrigger(%obj.name, %data, %obj); +} \ No newline at end of file diff --git a/base/scripts/turret.cs b/base/scripts/turret.cs new file mode 100644 index 0000000..781f2e1 --- /dev/null +++ b/base/scripts/turret.cs @@ -0,0 +1,338 @@ +//-------------------------------------------------------------------------- +// Shockwave +//-------------------------------------------------------------------------- +datablock ShockwaveData(TurretShockwave) +{ + width = 6.0; + numSegments = 20; + numVertSegments = 2; + velocity = 8; + acceleration = 20.0; + lifetimeMS = 1500; + height = 1.0; + verticalCurve = 0.5; + + mapToTerrain = false; + renderBottom = true; + + texture[0] = "special/shockwave4"; + texture[1] = "special/gradient"; + texWrap = 6.0; + + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + + colors[0] = "0.8 0.8 0.8 1.00"; + colors[1] = "0.8 0.5 0.2 0.20"; + colors[2] = "1.0 0.5 0.5 0.0"; +}; + +//-------------------------------------------------------------------------- +// Explosion +//-------------------------------------------------------------------------- +datablock ExplosionData(TurretExplosion) +{ + explosionShape = "effect_plasma_explosion.dts"; + soundProfile = ShapeExplosionSound; + faceViewer = true; + shockwave = TurretShockwave; +}; + +datablock ExplosionData(SmallTurretExplosion) +{ + soundProfile = DeployablesExplosionSound; + faceViewer = true; + + explosionShape = "effect_plasma_explosion.dts"; + sizes[0] = "0.3 0.3 0.3"; + sizes[1] = "0.3 0.3 0.3"; + times[0] = 0; + times[1] = 1; +}; + + +//-------------------------------------------------------------------------- +// Turret Debris +//-------------------------------------------------------------------------- +datablock DebrisData( TurretDebris ) +{ + explodeOnMaxBounce = false; + + elasticity = 0.20; + friction = 0.5; + + lifetime = 17.0; + lifetimeVariance = 0.0; + + minSpinSpeed = 60; + maxSpinSpeed = 600; + + numBounces = 10; + bounceVariance = 0; + + staticOnMaxBounce = true; + + useRadiusMass = true; + baseRadius = 0.4; + + velocity = 9.0; + velocityVariance = 4.5; +}; + +datablock DebrisData( TurretDebrisSmall ) +{ + explodeOnMaxBounce = false; + + elasticity = 0.20; + friction = 0.5; + + lifetime = 17.0; + lifetimeVariance = 0.0; + + minSpinSpeed = 60; + maxSpinSpeed = 600; + + numBounces = 10; + bounceVariance = 0; + + staticOnMaxBounce = true; + + useRadiusMass = true; + baseRadius = 0.2; + + velocity = 5.0; + velocityVariance = 2.5; +}; + + +//-------------------------------------------------------------------------- +// Turret base class functionality. Barrels are in scripts/weapons/*.cs +// +// +//-------------------------------------------------------------------------- + +function TurretData::create(%block) +{ + %obj = new Turret() { + dataBlock = %block; + }; + + return %obj; +} + +datablock SensorData(TurretBaseSensorObj) +{ + detects = true; + detectsUsingLOS = true; + detectsPassiveJammed = false; + detectsActiveJammed = false; + detectsCloaked = false; + detectionPings = true; + detectRadius = 80; +}; + + +datablock TurretData(TurretBaseLarge) : TurretDamageProfile +{ + className = TurretBase; + catagory = "Turrets"; + shapeFile = "turret_base_large.dts"; + preload = true; + + mass = 1.0; // Not really relevant + + maxDamage = 2.25; + destroyedLevel = 2.25; + disabledLevel = 1.35; + explosion = TurretExplosion; + expDmgRadius = 15.0; + expDamage = 0.7; + expImpulse = 2000.0; + repairRate = 0; + emap = true; + + thetaMin = 15; + thetaMax = 140; + + isShielded = true; + energyPerDamagePoint = 50; + maxEnergy = 150; + rechargeRate = 0.31; + humSound = SensorHumSound; + pausePowerThread = true; + + canControl = true; + cmdCategory = "Tactical"; + cmdIcon = CMDTurretIcon; + cmdMiniIconName = "commander/MiniIcons/com_turretbase_grey"; + targetNameTag = 'Base'; + targetTypeTag = 'Turret'; + sensorData = TurretBaseSensorObj; + sensorRadius = TurretBaseSensorObj.detectRadius; + sensorColor = "0 212 45"; + + firstPersonOnly = true; + + debrisShapeName = "debris_generic.dts"; + debris = TurretDebris; +}; + +function TurretData::onGainPowerEnabled(%data, %obj) +{ + Parent::onGainPowerEnabled(%data, %obj); + setTargetSensorData(%obj.target, %data.sensorData); +} + +function TurretData::onLosePowerDisabled(%data, %obj) +{ + // Must kick players out of turret + + Parent::onLosePowerDisabled(%data, %obj); + %obj.clearTarget(); + setTargetSensorData(%obj.target, 0); +} + +function TurretData::selectTarget(%this, %turret) +{ + %turretTarg = %turret.getTarget(); + if(%turretTarg == -1) + return; + + // if the turret isn't on a team, don't fire at anyone + if(getTargetSensorGroup(%turretTarg) == 0) + { + %turret.clearTarget(); + return; + } + + // stop firing if turret is disabled or if it needs power and isn't powered + if((!%turret.isPowered()) && (!%turret.needsNoPower)) + { + %turret.clearTarget(); + return; + } + + %TargetSearchMask = $TypeMasks::PlayerObjectType | $TypeMasks::VehicleObjectType; + + InitContainerRadiusSearch(%turret.getMuzzlePoint(0), + %turret.getMountedImage(0).attackRadius, + %TargetSearchMask); + + while ((%potentialTarget = ContainerSearchNext()) != 0) + { + %potTargTarg = %potentialTarget.getTarget(); + if (%turret.isValidTarget(%potentialTarget) && (getTargetSensorGroup(%turretTarg) != getTargetSensorGroup(%potTargTarg))) + { + %turret.setTargetObject(%potentialTarget); + return; + } + } +} + +function TurretData::replaceCallback(%this, %turret, %engineer) +{ + // First, is the player in range? + %pos = %turret.getWorldBoxCenter(); + %engineerPos = %engineer.getWorldBoxCenter(); + %len = VectorLen(VectorSub(%pos, %engineerPos)); + + if (%len < 5) + { + // This is a valid replacement. First, let's see if the engineer + // still has the correct pack in place... + if (%engineer.getMountedImage($BackPackSlot) != 0) + { + %barrel = %engineer.getMountedImage($BackPackSlot).turretBarrel; + if (%barrel !$= "") + { + // if there was a barrel there before, get rid of it + %turret.unmountImage(0); + // remove the turret barrel pack + %engineer.setInventory(%engineer.getMountedImage($BackPackSlot).item, 0); + // mount new barrel on base + %turret.mountImage(%barrel, 0, false); + } + else + { + // Player doesn't have the correct pack on... + } + } + else + { + // Player doesn't have any pack on... + } + } + else + { + // Player is too far away to replace the barrel... + } +} + +function TurretData::onDestroyed(%this, %turret, %prevState) +{ + Parent::onDestroyed(%this, %turret, %prevState); +} + +function checkTurretMount(%data, %obj, %slot) +{ + // search for a turret base in player's LOS + %eyeVec = VectorNormalize(%obj.getEyeVector()); + %srchRange = VectorScale(%eyeVec, 5.0); // look 5m for a turret base + %plTm = %obj.getEyeTransform(); + %plyrLoc = firstWord(%plTm) @ " " @ getWord(%plTm, 1) @ " " @ getWord(%plTm, 2); + %srchEnd = VectorAdd(%plyrLoc, %srchRange); + %potTurret = ContainerRayCast(%obj.getEyeTransform(), %srchEnd, $TypeMasks::TurretObjectType); + if(%potTurret != 0) + { + if(%potTurret.getDatablock().getName() $= "TurretBaseLarge") + { + // found a turret base, what team is it on? + if(%potTurret.team == %obj.client.team) + { + if(%potTurret.getDamageState() !$= "Enabled") + { + // the base is destroyed + messageClient(%obj.client, 'MsgBaseDestroyed', "\c2Turret base is disabled, cannot mount barrel."); + %obj.setImageTrigger($BackpackSlot, false); + } + else + { + // it's a functional turret base on our team! stick the barrel on it + messageClient(%obj.client, 'MsgTurretMount', "\c2Mounting barrel pack on turret base."); + serverPlay3D(TurretPackActivateSound, %potTurret.getTransform()); + %potTurret.initiateBarrelSwap(%obj); + } + } + else + { + // whoops, wrong team + messageClient(%obj.client, 'MsgTryEnemyTurretMount', "\c2Cannot mount a barrel on an enemy turret base!"); + %obj.setImageTrigger($BackpackSlot, false); + } + } + else + { + // tried to mount barrel on some other turret type + messageClient(%obj.client, 'MsgNotTurretBase', "\c2Can only mount a barrel on a turret base."); + %obj.setImageTrigger($BackpackSlot, false); + } + } + else + { + // I don't see any turret + messageClient(%obj.client, 'MsgNoTurretBase', "\c2No turret within range."); + %obj.setImageTrigger($BackpackSlot, false); + } +} + +//-------------------------------------- Load Barrel Images +// +exec("scripts/turrets/mortarBarrelLarge.cs"); +exec("scripts/turrets/aaBarrelLarge.cs"); +exec("scripts/turrets/missileBarrelLarge.cs"); +exec("scripts/turrets/plasmaBarrelLarge.cs"); +exec("scripts/turrets/ELFBarrelLarge.cs"); +exec("scripts/turrets/outdoorDeployableBarrel.cs"); +exec("scripts/turrets/indoorDeployableBarrel.cs"); +exec("scripts/turrets/sentryTurret.cs"); \ No newline at end of file diff --git a/base/scripts/turrets/ELFBarrelLarge.cs b/base/scripts/turrets/ELFBarrelLarge.cs new file mode 100644 index 0000000..097e6a8 --- /dev/null +++ b/base/scripts/turrets/ELFBarrelLarge.cs @@ -0,0 +1,134 @@ +//-------------------------------------------------------------------------- +// ELF Turret barrel +//-------------------------------------------------------------------------- + +//-------------------------------------------------------------------------- +// Sounds +//-------------------------------------------------------------------------- + +datablock AudioProfile(EBLSwitchSound) +{ + filename = "fx/powered/turret_light_activate.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(EBLFireSound) +{ + filename = "fx/weapons/ELF_fire.wav"; + description = AudioDefaultLooping3d; + preload = true; +}; + +//-------------------------------------------------------------------------- +// Projectile +//-------------------------------------- + +datablock ELFProjectileData(ELFTurretBolt) +{ + beamRange = 75; + numControlPoints = 8; + restorativeFactor = 3.75; + dragFactor = 4.5; + endFactor = 2.25; + randForceFactor = 2; + randForceTime = 0.125; + drainEnergy = 1.0; + drainHealth = 0.0015; + directDamageType = $DamageType::ELFTurret; + + mainBeamWidth = 0.1; // width of blue wave beam + mainBeamSpeed = 9.0; // speed that the beam travels forward + mainBeamRepeat = 0.25; // number of times the texture repeats + lightningWidth = 0.1; + lightningDist = 0.15; // distance of lightning from main beam + + fireSound = EBLFireSound; + + textures[0] = "special/ELFBeam"; + textures[1] = "special/ELFLightning"; + textures[2] = "special/BlueImpact"; +}; + +//-------------------------------------------------------------------------- +// ELF Turret Image +//-------------------------------------------------------------------------- + +datablock TurretImageData(ELFBarrelLarge) +{ + shapeFile = "turret_elf_large.dts"; + item = ELFBarrelLargePack; + + projectile = ELFTurretBolt; + projectileType = ELFProjectile; + deleteLastProjectile = true; + usesEnergy = true; + fireEnergy = 0.0; + minEnergy = 0.0; + + // Turret parameters + activationMS = 500; + deactivateDelayMS = 100; + thinkTimeMS = 100; + degPerSecTheta = 580; + degPerSecPhi = 960; + attackRadius = 75; + + + // State transiltions + stateName[0] = "Activate"; + stateTransitionOnNotLoaded[0] = "Dead"; + stateTransitionOnLoaded[0] = "ActivateReady"; + + stateName[1] = "ActivateReady"; + stateSequence[1] = "Activate"; + stateSound[1] = EBLSwitchSound; + stateTimeoutValue[1] = 1; + stateTransitionOnTimeout[1] = "Ready"; + stateTransitionOnNotLoaded[1] = "Deactivate"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; + + stateName[2] = "Ready"; + stateTransitionOnNotLoaded[2] = "Deactivate"; + stateTransitionOnTriggerDown[2] = "Fire"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + + stateName[3] = "Fire"; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateSequence[3] = "Fire"; + stateSound[3] = EBLFireSound; + stateScript[3] = "onFire"; + stateTransitionOnTriggerUp[3] = "Deconstruction"; + stateTransitionOnNoAmmo[3] = "Deconstruction"; + + stateName[4] = "Reload"; + stateTimeoutValue[4] = 0.01; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; + stateTransitionOnTimeout[4] = "Ready"; + stateTransitionOnNotLoaded[4] = "Deactivate"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + + stateName[5] = "Deactivate"; + stateSequence[5] = "Activate"; + stateDirection[5] = false; + stateTimeoutValue[5] = 1; + stateTransitionOnLoaded[5] = "ActivateReady"; + stateTransitionOnTimeout[5] = "Dead"; + + stateName[6] = "Dead"; + stateTransitionOnLoaded[6] = "ActivateReady"; + + stateName[7] = "NoAmmo"; + stateTransitionOnAmmo[7] = "Reload"; + stateSequence[7] = "NoAmmo"; + + stateName[8] = "Deconstruction"; + stateScript[8] = "deconstruct"; + stateTransitionOnNoAmmo[8] = "NoAmmo"; + stateTransitionOnTimeout[8] = "Reload"; + stateTimeoutValue[8] = 0.1; +}; + diff --git a/base/scripts/turrets/aaBarrelLarge.cs b/base/scripts/turrets/aaBarrelLarge.cs new file mode 100644 index 0000000..31db32c --- /dev/null +++ b/base/scripts/turrets/aaBarrelLarge.cs @@ -0,0 +1,248 @@ +//-------------------------------------- +// Default blaster +//-------------------------------------- + +//-------------------------------------------------------------------------- +// Sounds +//-------------------------------------- +datablock AudioProfile(AASwitchSound) +{ + filename = "fx/powered/turret_aa_activate.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(AAFireSound) +{ + filename = "fx/powered/turret_aa_fire.wav"; + description = AudioDefault3d; + preload = true; +}; + + + +//-------------------------------------------------------------------------- +// Particle effects +//-------------------------------------- +//-------------------------------------------------------------------------- +// Explosion +//-------------------------------------- +datablock ParticleData(AABulletExplosionParticle1) +{ + dragCoefficient = 2; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + constantAcceleration = -0.0; + lifetimeMS = 600; + lifetimeVarianceMS = 000; + textureName = "special/crescent4"; + colors[0] = "0.57 0.41 1.0 1.0"; + colors[1] = "0.57 0.41 1.0 1.0"; + colors[2] = "0.57 0.41 0.0 0.0"; + sizes[0] = 0.25; + sizes[1] = 0.5; + sizes[2] = 1.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(AABulletExplosionEmitter) +{ + ejectionPeriodMS = 7; + periodVarianceMS = 0; + ejectionVelocity = 2; + velocityVariance = 1.5; + ejectionOffset = 0.0; + thetaMin = 70; + thetaMax = 80; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 200; + particles = "AABulletExplosionParticle1"; +}; + +datablock ParticleData(AABulletExplosionParticle2) +{ + dragCoefficient = 2; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + constantAcceleration = -0.0; + lifetimeMS = 600; + lifetimeVarianceMS = 000; + textureName = "special/blasterHit"; + colors[0] = "0.57 0.41 1.0 0.6"; + colors[1] = "0.57 0.41 1.0 0.6"; + colors[2] = "0.57 0.41 0.0 0.0"; + sizes[0] = 0.3; + sizes[1] = 0.90; + sizes[2] = 1.50; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(AABulletExplosionEmitter2) +{ + ejectionPeriodMS = 30; + periodVarianceMS = 0; + ejectionVelocity = 1; + velocityVariance = 0.0; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 80; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = false; + lifetimeMS = 200; + particles = "AABulletExplosionParticle2"; +}; + +datablock ExplosionData(AABulletExplosion) +{ + soundProfile = blasterExpSound; + emitter[0] = AABulletExplosionEmitter; + emitter[1] = AABulletExplosionEmitter2; +}; + + +//-------------------------------------------------------------------------- +// Projectile +//-------------------------------------- +datablock TracerProjectileData(AABullet) +{ + doDynamicClientHits = true; + + projectileShapeName = "energy_bolt.dts"; + directDamage = 0.25; + directDamageType = $DamageType::AATurret; + explosion = "AABulletExplosion"; + splash = ChaingunSplash; + + dryVelocity = 150.0; + wetVelocity = 100.0; + velInheritFactor = 1.0; + fizzleTimeMS = 3000; + lifetimeMS = 3000; + explodeOnDeath = false; + reflectOnWaterImpactAngle = 0.0; + explodeOnWaterImpact = false; + deflectionOnWaterImpact = 0.0; + fizzleUnderwaterMS = 3000; + + tracerLength = 20; + tracerAlpha = false; + tracerMinPixels = 3; + tracerColor = "1 1 1 1"; + tracerTex[0] = "special/shrikeBolt"; + tracerTex[1] = "special/shrikeBoltCross"; + tracerWidth = 0.55; + crossSize = 0.99; + crossViewAng = 0.990; + renderCross = true; + emap = true; +}; + +//-------------------------------------------------------------------------- +// Weapon +//-------------------------------------- +datablock TurretImageData(AABarrelLarge) +{ + shapeFile = "turret_aa_large.dts"; + item = AABarrelLargePack; + + projectileType = TracerProjectile; + projectile = AABullet; + usesEnergy = true; + fireEnergy = 4.0; + minEnergy = 4.0; + emap = true; + isSeeker = true; + seekRadius = 200; + maxSeekAngle = 6; + seekTime = 1.0; + minSeekHeat = 0.5; + useTargetAudio = false; + + // Turret parameters + activationMS = 500; + deactivateDelayMS = 500; + thinkTimeMS = 200; + degPerSecTheta = 600; + degPerSecPhi = 1080; + attackRadius = 180; + + // State transitions + stateName[0] = "Activate"; + stateTransitionOnNotLoaded[0] = "Dead"; + stateTransitionOnLoaded[0] = "ActivateReady"; + + stateName[1] = "ActivateReady"; + stateSequence[1] = "Activate"; + stateSound[1] = AASwitchSound; + stateTimeoutValue[1] = 1.0; + stateTransitionOnTimeout[1] = "Ready"; + stateTransitionOnNotLoaded[1] = "Deactivate"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; + stateScript[1] = "AAActivateReady"; + + stateName[2] = "Ready"; + stateTransitionOnNotLoaded[2] = "Deactivate"; + stateTransitionOnTriggerDown[2] = "Fire1"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateScript[2] = "AAReady"; + + stateName[3] = "Fire1"; + stateTransitionOnTimeout[3] = "Reload1"; + stateTimeoutValue[3] = 0.15; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateSequence[3] = "Fire1"; + stateSound[3] = AAFireSound; + stateScript[3] = "onFire"; + + stateName[4] = "Reload1"; + stateTimeoutValue[4] = 0.2; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; + stateTransitionOnTimeout[4] = "Fire2"; + stateTransitionOnNotLoaded[4] = "Deactivate"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + + stateName[5] = "Fire2"; + stateTransitionOnTimeout[5] = "Reload2"; + stateTimeoutValue[5] = 0.15; + stateFire[5] = true; + stateRecoil[5] = LightRecoil; + stateAllowImageChange[5] = false; + stateSequence[5] = "Fire2"; + stateSound[5] = AAFireSound; + stateScript[5] = "onFire"; + + stateName[6] = "Reload2"; + stateTimeoutValue[6] = 0.2; + stateAllowImageChange[6] = false; + stateSequence[6] = "Reload"; + stateTransitionOnTimeout[6] = "Ready"; + stateTransitionOnNotLoaded[6] = "Deactivate"; + stateTransitionOnNoAmmo[6] = "NoAmmo"; + + stateName[7] = "Deactivate"; + stateSequence[7] = "Activate"; + stateDirection[7] = false; + stateTimeoutValue[7] = 1.0; + stateTransitionOnLoaded[7] = "ActivateReady"; + stateTransitionOnTimeout[7] = "Dead"; + + stateName[8] = "Dead"; + stateTransitionOnLoaded[8] = "ActivateReady"; + + stateName[9] = "NoAmmo"; + stateTransitionOnAmmo[9] = "Reload2"; + stateSequence[9] = "NoAmmo"; +}; + diff --git a/base/scripts/turrets/indoorDeployableBarrel.cs b/base/scripts/turrets/indoorDeployableBarrel.cs new file mode 100644 index 0000000..1ed5a57 --- /dev/null +++ b/base/scripts/turrets/indoorDeployableBarrel.cs @@ -0,0 +1,292 @@ +datablock AudioProfile(IBLSwitchSound) +{ + filename = "fx/powered/turret_light_activate.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(IBLFireSound) +{ + filename = "fx/powered/turret_indoor_fire.wav"; + description = AudioDefault3d; + preload = true; +}; + +datablock SensorData(DeployedIndoorTurretSensor) +{ + detects = true; + detectsUsingLOS = true; + detectsPassiveJammed = false; + detectsActiveJammed = false; + detectsCloaked = false; + detectionPings = true; + detectRadius = 40; +}; + +datablock ShockwaveData(IndoorTurretMuzzleFlash) +{ + width = 0.5; + numSegments = 13; + numVertSegments = 1; + velocity = 2.0; + acceleration = -1.0; + lifetimeMS = 300; + height = 0.1; + verticalCurve = 0.5; + + mapToTerrain = false; + renderBottom = false; + orientToNormal = true; + renderSquare = true; + + texture[0] = "special/blasterHit"; + texture[1] = "special/gradient"; + texWrap = 3.0; + + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + + colors[0] = "1.0 0.3 0.3 1.0"; + colors[1] = "1.0 0.3 0.3 1.0"; + colors[2] = "1.0 0.3 0.3 0.0"; +}; + +datablock TurretData(TurretDeployedFloorIndoor) : TurretDamageProfile +{ + className = DeployedTurret; + shapeFile = "turret_indoor_deployf.dts"; + + mass = 5.0; + maxDamage = 0.5; + destroyedLevel = 0.5; + disabledLevel = 0.21; + repairRate = 0; + heatSignature = 0.0; + explosion = SmallTurretExplosion; + + thetaMin = 5; + thetaMax = 145; + thetaNull = 90; + + primaryAxis = zaxis; + + isShielded = true; + energyPerDamagePoint = 110; + maxEnergy = 30; + rechargeRate = 0.10; + barrel = DeployableIndoorBarrel; + + canControl = true; + cmdCategory = "DTactical"; + cmdIcon = CMDTurretIcon; + cmdMiniIconName = "commander/MiniIcons/com_turret_grey"; + targetNameTag = 'Spider Clamp'; + targetTypeTag = 'Turret'; + sensorData = DeployedIndoorTurretSensor; + sensorRadius = DeployedIndoorTurretSensor.detectRadius; + sensorColor = "191 0 226"; + + firstPersonOnly = true; + renderWhenDestroyed = false; + + debrisShapeName = "debris_generic_small.dts"; + debris = TurretDebrisSmall; +}; + +datablock TurretData(TurretDeployedWallIndoor) : TurretDamageProfile +{ + className = DeployedTurret; + shapeFile = "turret_indoor_deployw.dts"; + + mass = 5.0; + maxDamage = 0.5; + destroyedLevel = 0.5; + disabledLevel = 0.21; + repairRate = 0; + heatSignature = 0.0; + explosion = SmallTurretExplosion; + + thetaMin = 5; + thetaMax = 145; + thetaNull = 90; + + primaryAxis = yaxis; + + isShielded = true; + energyPerDamagePoint = 110; + maxEnergy = 30; + rechargeRate = 0.10; + barrel = DeployableIndoorBarrel; + + canControl = true; + cmdCategory = "DTactical"; + cmdIcon = CMDTurretIcon; + cmdMiniIconName = "commander/MiniIcons/com_turret_grey"; + targetNameTag = 'Spider Clamp'; + targetTypeTag = 'Turret'; + sensorData = DeployedIndoorTurretSensor; + sensorRadius = DeployedIndoorTurretSensor.detectRadius; + sensorColor = "191 0 226"; + + firstPersonOnly = true; + renderWhenDestroyed = false; + + debrisShapeName = "debris_generic_small.dts"; + debris = TurretDebrisSmall; +}; + +datablock TurretData(TurretDeployedCeilingIndoor) : TurretDamageProfile +{ + className = DeployedTurret; + shapeFile = "turret_indoor_deployc.dts"; + + mass = 5.0; + maxDamage = 0.5; + destroyedLevel = 0.5; + disabledLevel = 0.21; + repairRate = 0; + explosion = SmallTurretExplosion; + + //thetaMin = 5; + //thetaMax = 145; + thetaMin = 35; + thetaMax = 175; + thetaNull = 90; + heatSignature = 0.0; + + primaryAxis = revzaxis; + + isShielded = true; + energyPerDamagePoint = 110; + maxEnergy = 30; + rechargeRate = 0.10; + barrel = DeployableIndoorBarrel; + + canControl = true; + cmdCategory = "DTactical"; + cmdIcon = CMDTurretIcon; + cmdMiniIconName = "commander/MiniIcons/com_turret_grey"; + targetNameTag = 'Spider Clamp'; + targetTypeTag = 'Turret'; + sensorData = DeployedIndoorTurretSensor; + sensorRadius = DeployedIndoorTurretSensor.detectRadius; + sensorColor = "191 0 226"; + + firstPersonOnly = true; + renderWhenDestroyed = false; + + debrisShapeName = "debris_generic_small.dts"; + debris = TurretDebrisSmall; +}; + +datablock LinearFlareProjectileData(IndoorTurretBolt) +{ + directDamage = 0.14; + directDamageType = $DamageType::IndoorDepTurret; + explosion = "BlasterExplosion"; + kickBackStrength = 0.0; + + dryVelocity = 120.0; + wetVelocity = 100.0; + velInheritFactor = 0.5; + fizzleTimeMS = 2000; + lifetimeMS = 3000; + explodeOnDeath = false; + reflectOnWaterImpactAngle = 0.0; + explodeOnWaterImpact = false; + deflectionOnWaterImpact = 0.0; + fizzleUnderwaterMS = 3000; + + numFlares = 20; + size = 0.45; + flareColor = "1 0.35 0.35"; + flareModTexture = "flaremod"; + flareBaseTexture = "flarebase"; + + sound = BlasterProjectileSound; + + hasLight = true; + lightRadius = 3.0; + lightColor = "1 0.35 0.35"; +}; + +datablock TurretImageData(DeployableIndoorBarrel) +{ + shapeFile = "turret_muzzlepoint.dts"; + item = IndoorTurretBarrel; + + projectile = IndoorTurretBolt; + projectileType = LinearFlareProjectile; + + usesEnergy = true; + fireEnergy = 4.5; + minEnergy = 4.5; + + lightType = "WeaponFireLight"; + lightColor = "0.25 0.15 0.15 1.0"; + lightTime = "1000"; + lightRadius = "2"; + + muzzleFlash = IndoorTurretMuzzleFlash; + + // Turret parameters + activationMS = 150; + deactivateDelayMS = 300; + thinkTimeMS = 150; + degPerSecTheta = 580; + degPerSecPhi = 960; + attackRadius = 60; + + // State transitions + stateName[0] = "Activate"; + stateTransitionOnNotLoaded[0] = "Dead"; + stateTransitionOnLoaded[0] = "ActivateReady"; + + stateName[1] = "ActivateReady"; + stateSequence[1] = "Activate"; + stateSound[1] = IBLSwitchSound; + stateTimeoutValue[1] = 1; + stateTransitionOnTimeout[1] = "Ready"; + stateTransitionOnNotLoaded[1] = "Deactivate"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; + + stateName[2] = "Ready"; + stateTransitionOnNotLoaded[2] = "Deactivate"; + stateTransitionOnTriggerDown[2] = "Fire"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.3; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateSequence[3] = "Fire"; + stateSound[3] = IBLFireSound; + stateScript[3] = "onFire"; + + stateName[4] = "Reload"; + stateTimeoutValue[4] = 0.8; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; + stateTransitionOnTimeout[4] = "Ready"; + stateTransitionOnNotLoaded[4] = "Deactivate"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + + stateName[5] = "Deactivate"; + stateSequence[5] = "Activate"; + stateDirection[5] = false; + stateTimeoutValue[5] = 1; + stateTransitionOnLoaded[5] = "ActivateReady"; + stateTransitionOnTimeout[5] = "Dead"; + + stateName[6] = "Dead"; + stateTransitionOnLoaded[6] = "ActivateReady"; + + stateName[7] = "NoAmmo"; + stateTransitionOnAmmo[7] = "Reload"; + stateSequence[7] = "NoAmmo"; +}; + + diff --git a/base/scripts/turrets/missileBarrelLarge.cs b/base/scripts/turrets/missileBarrelLarge.cs new file mode 100644 index 0000000..b198d83 --- /dev/null +++ b/base/scripts/turrets/missileBarrelLarge.cs @@ -0,0 +1,159 @@ +//-------------------------------------------------------------------------- +// Large Missile Turret +// +// +//-------------------------------------------------------------------------- + +//-------------------------------------------------------------------------- +// Sounds +//-------------------------------------- +datablock AudioProfile(MBLSwitchSound) +{ + filename = "fx/powered/turret_missile_activate.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(MBLFireSound) +{ + filename = "fx/powered/turret_missile_fire.wav"; + description = AudioDefault3d; + preload = true; +}; + +//-------------------------------------------------------------------------- +// Particle effects: Note that we pull the below datablocks from +// scripts/weapons/missileLauncher.cs +//-------------------------------------- +//datablock ParticleData(MissileSmokeParticle) +//datablock ParticleEmitterData(MissileSmokeEmitter) + + +//-------------------------------------------------------------------------- +// Explosion: from scripts/weapons/disc.cs +//-------------------------------------- +//dataBlock ExplosionData(DiscExplosion) + +//-------------------------------------------------------------------------- +// Projectile +//-------------------------------------- +datablock SeekerProjectileData(TurretMissile) +{ + casingShapeName = "weapon_missile_casement.dts"; + projectileShapeName = "weapon_missile_projectile.dts"; + hasDamageRadius = true; + indirectDamage = 1.0; + damageRadius = 4.0; + radiusDamageType = $DamageType::MissileTurret; + kickBackStrength = 2500; + + flareDistance = 200; + flareAngle = 30; + minSeekHeat = 0.7; + + explosion = "MissileExplosion"; + velInheritFactor = 0.2; + + splash = MissileSplash; + baseEmitter = MissileSmokeEmitter; + delayEmitter = MissileFireEmitter; + puffEmitter = MissilePuffEmitter; + + lifetimeMS = 20000; + muzzleVelocity = 65.0; + turningSpeed = 40.0; + + proximityRadius = 4; + + terrainAvoidanceSpeed = 140; + terrainScanAhead = 30; + terrainHeightFail = 18; + terrainAvoidanceRadius = 60; + + useFlechette = true; + flechetteDelayMs = 550; + casingDeb = FlechetteDebris; +}; + +//-------------------------------------------------------------------------- +//-------------------------------------- Fusion Turret Image +// +datablock TurretImageData(MissileBarrelLarge) +{ + shapeFile = "turret_missile_large.dts"; + item = MissileBarrelLargePack; + + projectile = TurretMissile; + projectileType = SeekerProjectile; + + usesEnergy = true; + fireEnergy = 60.0; + minEnergy = 60.0; + + isSeeker = true; + seekRadius = 300; + maxSeekAngle = 30; + seekTime = 1.5; + minSeekHeat = 0.7; + emap = true; + minTargetingDistance = 40; + + // Turret parameters + activationMS = 3000; + deactivateDelayMS = 2500; + thinkTimeMS = 200; + degPerSecTheta = 580; + degPerSecPhi = 1080; + attackRadius = 180; + + // State transitions + stateName[0] = "Activate"; + stateTransitionOnNotLoaded[0] = "Dead"; + stateTransitionOnLoaded[0] = "ActivateReady"; + + stateName[1] = "ActivateReady"; + stateSequence[1] = "Activate"; + stateSound[1] = MBLSwitchSound; + stateTimeoutValue[1] = 2; + stateTransitionOnTimeout[1] = "Ready"; + stateTransitionOnNotLoaded[1] = "Deactivate"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; + + stateName[2] = "Ready"; + stateTransitionOnNotLoaded[2] = "Deactivate"; + stateTransitionOnTriggerDown[2] = "Fire"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.3; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateSequence[3] = "Fire"; + stateSound[3] = MBLFireSound; + stateScript[3] = "onFire"; + + stateName[4] = "Reload"; + stateTimeoutValue[4] = 3.5; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; + stateTransitionOnTimeout[4] = "Ready"; + stateTransitionOnNotLoaded[4] = "Deactivate"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + + stateName[5] = "Deactivate"; + stateSequence[5] = "Activate"; + stateDirection[5] = false; + stateTimeoutValue[5] = 2; + stateTransitionOnLoaded[5] = "ActivateReady"; + stateTransitionOnTimeout[5] = "Dead"; + + stateName[6] = "Dead"; + stateTransitionOnLoaded[6] = "ActivateReady"; + + stateName[7] = "NoAmmo"; + stateTransitionOnAmmo[7] = "Reload"; + stateSequence[7] = "NoAmmo"; +}; + diff --git a/base/scripts/turrets/mortarBarrelLarge.cs b/base/scripts/turrets/mortarBarrelLarge.cs new file mode 100644 index 0000000..dc7791d --- /dev/null +++ b/base/scripts/turrets/mortarBarrelLarge.cs @@ -0,0 +1,144 @@ +//-------------------------------------------------------------------------- +// Large Mortar Turret +// +// +//-------------------------------------------------------------------------- + +//-------------------------------------------------------------------------- +// Sounds +//-------------------------------------- +datablock AudioProfile(MBLSwitchSound) +{ + filename = "fx/powered/turret_heavy_activate.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(MBLFireSound) +{ + filename = "fx/powered/turret_mortar_fire.wav"; + description = AudioDefault3d; + preload = true; +}; + +//-------------------------------------------------------------------------- +// Projectile +//-------------------------------------- + +datablock AudioProfile(MortarTurretProjectileSound) +{ + filename = "fx/weapons/mortar_projectile.wav"; + description = ProjectileLooping3d; + preload = true; +}; + +datablock GrenadeProjectileData(MortarTurretShot) +{ + projectileShapeName = "mortar_projectile.dts"; + emitterDelay = -1; + directDamage = 0.0; + hasDamageRadius = true; + indirectDamage = 1.32; + damageRadius = 30.0; + radiusDamageType = $DamageType::MortarTurret; + kickBackStrength = 3000; + + explosion = "MortarExplosion"; + velInheritFactor = 0.5; + splash = MortarSplash; + + baseEmitter = MortarSmokeEmitter; + bubbleEmitter = MortarBubbleEmitter; + + grenadeElasticity = 0.25; + grenadeFriction = 0.4; + armingDelayMS = 2000; + muzzleVelocity = 43.7; + drag = 0.1; + + sound = MortarTurretProjectileSound; + + hasLight = true; + lightRadius = 3; + lightColor = "0.05 0.2 0.05"; +}; + +//-------------------------------------------------------------------------- +//-------------------------------------- Fusion Turret Image +// +datablock TurretImageData(MortarBarrelLarge) +{ + shapeFile = "turret_mortar_large.dts"; + item = MortarBarrelLargePack; + + projectile = MortarTurretShot; + projectileType = GrenadeProjectile; + usesEnergy = true; + fireEnergy = 30; + minEnergy = 30; + emap = true; + + // don't let a mortar turret blow itself up + dontFireInsideDamageRadius = true; + damageRadius = 40; + + // Turret parameters + activationMS = 1000; + deactivateDelayMS = 1500; + thinkTimeMS = 200; + degPerSecTheta = 580; + degPerSecPhi = 960; + attackRadius = 160; + + // State transitions + stateName[0] = "Activate"; + stateTransitionOnNotLoaded[0] = "Dead"; + stateTransitionOnLoaded[0] = "ActivateReady"; + + stateName[1] = "ActivateReady"; + stateSequence[1] = "Activate"; + stateSound[1] = MBLSwitchSound; + stateTimeoutValue[1] = 1; + stateTransitionOnTimeout[1] = "Ready"; + stateTransitionOnNotLoaded[1] = "Deactivate"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; + + stateName[2] = "Ready"; + stateTransitionOnNotLoaded[2] = "Deactivate"; + stateTransitionOnTriggerDown[2] = "Fire"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.3; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateSequence[3] = "Fire"; + stateSound[3] = MBLFireSound; + stateScript[3] = "onFire"; + + stateName[4] = "Reload"; + stateTimeoutValue[4] = 1.5; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; + stateTransitionOnTimeout[4] = "Ready"; + stateTransitionOnNotLoaded[4] = "Deactivate"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + + stateName[5] = "Deactivate"; + stateSequence[5] = "Activate"; + stateDirection[5] = false; + stateTimeoutValue[5] = 1; + stateTransitionOnLoaded[5] = "ActivateReady"; + stateTransitionOnTimeout[5] = "Dead"; + + stateName[6] = "Dead"; + stateTransitionOnLoaded[6] = "ActivateReady"; + + stateName[7] = "NoAmmo"; + stateTransitionOnAmmo[7] = "Reload"; + stateSequence[7] = "NoAmmo"; +}; + + diff --git a/base/scripts/turrets/outdoorDeployableBarrel.cs b/base/scripts/turrets/outdoorDeployableBarrel.cs new file mode 100644 index 0000000..68f4a3f --- /dev/null +++ b/base/scripts/turrets/outdoorDeployableBarrel.cs @@ -0,0 +1,228 @@ +// -------------------------------------------------------------- +// Outdoor Deployable Turret barrel +// -------------------------------------------------------------- + +// -------------------------------------------------------------- +// Sound datablocks +// -------------------------------------------------------------- + +datablock AudioProfile(OBLSwitchSound) +{ + filename = "fx/powered/turret_light_activate.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(OBLFireSound) +{ + filename = "fx/powered/turret_outdoor_fire.wav"; + description = AudioDefault3d; + preload = true; +}; + +// -------------------------------------------------------------- +// Projectile data +// -------------------------------------------------------------- + +datablock TracerProjectileData(FusionBolt) +{ + doDynamicClientHits = true; + + projectileShapeName = ""; + directDamage = 0.0; + directDamageType = $DamageType::OutdoorDepTurret; + hasDamageRadius = true; + indirectDamage = 0.24; + damageRadius = 4.0; + kickBackStrength = 0.0; + radiusDamageType = $DamageType::OutdoorDepTurret; + sound = BlasterProjectileSound; + explosion = PlasmaBoltExplosion; + + dryVelocity = 60.0; + wetVelocity = -1; + velInheritFactor = 1.0; + fizzleTimeMS = 4000; + lifetimeMS = 6000; + explodeOnDeath = false; + reflectOnWaterImpactAngle = 0.0; + explodeOnWaterImpact = true; + deflectionOnWaterImpact = 0.0; + fizzleUnderwaterMS = -1; + + activateDelayMS = 100; + + tracerLength = 5; + tracerAlpha = false; + tracerMinPixels = 3; + tracerColor = "1 0 0 1"; + tracerTex[0] = "special/landSpikeBolt"; + tracerTex[1] = "special/landSpikeBoltCross"; + tracerWidth = 0.35; + crossSize = 0.79; + crossViewAng = 0.990; + renderCross = true; + emap = true; +}; + +// -------------------------------------------------------------- + +datablock SensorData(DeployedOutdoorTurretSensor) +{ + detects = true; + detectsUsingLOS = true; + detectsPassiveJammed = false; + detectsActiveJammed = false; + detectsCloaked = false; + detectionPings = true; + detectRadius = 60; +}; + +datablock ShockwaveData(OutdoorTurretMuzzleFlash) +{ + width = 0.5; + numSegments = 13; + numVertSegments = 1; + velocity = 2.0; + acceleration = -1.0; + lifetimeMS = 300; + height = 0.1; + verticalCurve = 0.5; + + mapToTerrain = false; + renderBottom = false; + orientToNormal = true; + renderSquare = true; + + texture[0] = "special/blasterHit"; + texture[1] = "special/gradient"; + texWrap = 3.0; + + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + + colors[0] = "1.0 0.8 0.5 1.0"; + colors[1] = "1.0 0.8 0.5 1.0"; + colors[2] = "1.0 0.8 0.5 0.0"; +}; + +datablock TurretData(TurretDeployedOutdoor) : TurretDamageProfile +{ + className = DeployedTurret; + shapeFile = "turret_outdoor_deploy.dts"; + + rechargeRate = 0.05; + + mass = 5.0; + maxDamage = 0.80; + destroyedLevel = 0.80; + disabledLevel = 0.35; + repairRate = 0; + explosion = HandGrenadeExplosion; + + thetaMin = 0; + thetaMax = 145; + thetaNull = 90; + + isShielded = true; + energyPerDamagePoint = 110; + maxEnergy = 60; + renderWhenDestroyed = false; + barrel = DeployableOutdoorBarrel; + rechargeRate = 0.25; + heatSignature = 0; + + canControl = true; + cmdCategory = "DTactical"; + cmdIcon = CMDTurretIcon; + cmdMiniIconName = "commander/MiniIcons/com_turret_grey"; + targetNameTag = 'Landspike'; + targetTypeTag = 'Turret'; + sensorData = DeployedOutdoorTurretSensor; + sensorRadius = DeployedOutdoorTurretSensor.detectRadius; + sensorColor = "191 0 226"; + + firstPersonOnly = true; + + debrisShapeName = "debris_generic_small.dts"; + debris = TurretDebrisSmall; +}; + +datablock TurretImageData(DeployableOutdoorBarrel) +{ + shapeFile = "turret_muzzlepoint.dts"; + item = OutdoorTurretBarrel; + + projectileType = TracerProjectile; + projectile = FusionBolt; + usesEnergy = true; + fireEnergy = 11.0; + minEnergy = 11.0; + + lightType = "WeaponFireLight"; + lightColor = "0.25 0.25 0.15 0.2"; + lightTime = "1000"; + lightRadius = "2"; + + muzzleFlash = OutdoorTurretMuzzleFlash; + + // Turret parameters + activationMS = 300; + deactivateDelayMS = 600; + thinkTimeMS = 200; + degPerSecTheta = 580; + degPerSecPhi = 960; + attackRadius = 100; + + // State transitions + stateName[0] = "Activate"; + stateTransitionOnNotLoaded[0] = "Dead"; + stateTransitionOnLoaded[0] = "ActivateReady"; + + stateName[1] = "ActivateReady"; + stateSequence[1] = "Activate"; + stateSound[1] = OBLSwitchSound; + stateTimeoutValue[1] = 1; + stateTransitionOnTimeout[1] = "Ready"; + stateTransitionOnNotLoaded[1] = "Deactivate"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; + + stateName[2] = "Ready"; + stateTransitionOnNotLoaded[2] = "Deactivate"; + stateTransitionOnTriggerDown[2] = "Fire"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.3; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateSequence[3] = "Fire"; + stateSound[3] = OBLFireSound; + stateScript[3] = "onFire"; + + stateName[4] = "Reload"; + stateTimeoutValue[4] = 1.2; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; + stateTransitionOnTimeout[4] = "Ready"; + stateTransitionOnNotLoaded[4] = "Deactivate"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + + stateName[5] = "Deactivate"; + stateSequence[5] = "Activate"; + stateDirection[5] = false; + stateTimeoutValue[5] = 1; + stateTransitionOnLoaded[5] = "ActivateReady"; + stateTransitionOnTimeout[5] = "Dead"; + + stateName[6] = "Dead"; + stateTransitionOnLoaded[6] = "ActivateReady"; + + stateName[7] = "NoAmmo"; + stateTransitionOnAmmo[7] = "Reload"; + stateSequence[7] = "NoAmmo"; +}; + diff --git a/base/scripts/turrets/plasmaBarrelLarge.cs b/base/scripts/turrets/plasmaBarrelLarge.cs new file mode 100644 index 0000000..3aa7268 --- /dev/null +++ b/base/scripts/turrets/plasmaBarrelLarge.cs @@ -0,0 +1,309 @@ +//-------------------------------------------------------------------------- +// Plasma Turret +// +// +//-------------------------------------------------------------------------- + +//-------------------------------------------------------------------------- +// Sounds +//-------------------------------------------------------------------------- + +datablock AudioProfile(PBLSwitchSound) +{ + filename = "fx/powered/turret_light_activate.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(PBLFireSound) +{ + filename = "fx/powered/turret_plasma_fire.wav"; + description = AudioDefault3d; + preload = true; +}; + +//-------------------------------------------------------------------------- +// Explosion +//-------------------------------------------------------------------------- + +datablock AudioProfile(PlasmaBarrelExpSound) +{ + filename = "fx/powered/turret_plasma_explode.wav"; + description = "AudioExplosion3d"; + preload = true; +}; + + +datablock ParticleData( PlasmaBarrelCrescentParticle ) +{ + dragCoefficient = 2; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + constantAcceleration = -0.0; + lifetimeMS = 600; + lifetimeVarianceMS = 000; + textureName = "special/crescent3"; + + colors[0] = "0.3 0.4 1.0 1.0"; + colors[1] = "0.3 0.4 1.0 0.5"; + colors[2] = "0.3 0.4 1.0 0.0"; + sizes[0] = 2.0; + sizes[1] = 4.0; + sizes[2] = 5.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData( PlasmaBarrelCrescentEmitter ) +{ + ejectionPeriodMS = 25; + periodVarianceMS = 0; + ejectionVelocity = 20; + velocityVariance = 5.0; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 80; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 200; + particles = "PlasmaBarrelCrescentParticle"; +}; + +datablock ParticleData(PlasmaBarrelExplosionParticle) +{ + dragCoefficient = 2; + gravityCoefficient = 0.2; + inheritedVelFactor = 0.2; + constantAcceleration = 0.0; + lifetimeMS = 750; + lifetimeVarianceMS = 150; + textureName = "particleTest"; + colors[0] = "0.3 0.4 1.0 1.0"; + colors[1] = "0.3 0.4 1.0 0.0"; + sizes[0] = 1; + sizes[1] = 2; +}; + +datablock ParticleEmitterData(PlasmaBarrelExplosionEmitter) +{ + ejectionPeriodMS = 7; + periodVarianceMS = 0; + ejectionVelocity = 12; + velocityVariance = 1.75; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 60; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + particles = "PlasmaBarrelExplosionParticle"; +}; + + +datablock ExplosionData(PlasmaBarrelSubExplosion1) +{ + explosionShape = "disc_explosion.dts"; + faceViewer = true; + + delayMS = 50; + + offset = 3.0; + + playSpeed = 1.5; + + sizes[0] = "0.25 0.25 0.25"; + sizes[1] = "0.25 0.25 0.25"; + times[0] = 0.0; + times[1] = 1.0; + +}; + +datablock ExplosionData(PlasmaBarrelSubExplosion2) +{ + explosionShape = "disc_explosion.dts"; + faceViewer = true; + + delayMS = 100; + + offset = 3.5; + + playSpeed = 1.0; + + sizes[0] = "0.5 0.5 0.5"; + sizes[1] = "0.5 0.5 0.5"; + times[0] = 0.0; + times[1] = 1.0; +}; + +datablock ExplosionData(PlasmaBarrelSubExplosion3) +{ + explosionShape = "disc_explosion.dts"; + faceViewer = true; + + delayMS = 0; + + offset = 0.0; + + playSpeed = 0.7; + + + sizes[0] = "0.5 0.5 0.5"; + sizes[1] = "1.0 1.0 1.0"; + times[0] = 0.0; + times[1] = 1.0; + +}; + +datablock ExplosionData(PlasmaBarrelBoltExplosion) +{ + soundProfile = PlasmaBarrelExpSound; + particleEmitter = PlasmaBarrelExplosionEmitter; + particleDensity = 250; + particleRadius = 1.25; + faceViewer = true; + + emitter[0] = PlasmaBarrelCrescentEmitter; + + subExplosion[0] = PlasmaBarrelSubExplosion1; + subExplosion[1] = PlasmaBarrelSubExplosion2; + subExplosion[2] = PlasmaBarrelSubExplosion3; + + shakeCamera = true; + camShakeFreq = "10.0 9.0 9.0"; + camShakeAmp = "10.0 10.0 10.0"; + camShakeDuration = 0.5; + camShakeRadius = 15.0; +}; + +//-------------------------------------------------------------------------- +// Projectile +//-------------------------------------- + +datablock LinearFlareProjectileData(PlasmaBarrelBolt) +{ + doDynamicClientHits = true; + + directDamage = 0; + directDamageType = $DamageType::PlasmaTurret; + hasDamageRadius = true; + indirectDamage = 0.5; + damageRadius = 10.0; + kickBackStrength = 500; + radiusDamageType = $DamageType::PlasmaTurret; + explosion = PlasmaBarrelBoltExplosion; + splash = PlasmaSplash; + + dryVelocity = 50.0; + wetVelocity = -1; + velInheritFactor = 1.0; + fizzleTimeMS = 4000; + lifetimeMS = 6000; + explodeOnDeath = false; + reflectOnWaterImpactAngle = 0.0; + explodeOnWaterImpact = true; + deflectionOnWaterImpact = 0.0; + fizzleUnderwaterMS = -1; + + activateDelayMS = 100; + + scale = "1.5 1.5 1.5"; + numFlares = 30; + flareColor = "0.1 0.3 1.0"; + flareModTexture = "flaremod"; + flareBaseTexture = "flarebase"; +}; + +//-------------------------------------------------------------------------- +// Plasma Turret Image +//-------------------------------------------------------------------------- + +datablock TurretImageData(PlasmaBarrelLarge) +{ + shapeFile = "turret_fusion_large.dts"; + item = PlasmaBarrelLargePack; + + projectile = PlasmaBarrelBolt; + projectileType = LinearFlareProjectile; + usesEnergy = true; + fireEnergy = 10; + minEnergy = 10; + emap = true; + + // Turret parameters + activationMS = 1000; + deactivateDelayMS = 1500; + thinkTimeMS = 200; + degPerSecTheta = 300; + degPerSecPhi = 500; + attackRadius = 120; + + // State transitions + stateName[0] = "Activate"; + stateTransitionOnNotLoaded[0] = "Dead"; + stateTransitionOnLoaded[0] = "ActivateReady"; + + stateName[1] = "ActivateReady"; + stateSequence[1] = "Activate"; + stateSound[1] = PBLSwitchSound; + stateTimeoutValue[1] = 1; + stateTransitionOnTimeout[1] = "Ready"; + stateTransitionOnNotLoaded[1] = "Deactivate"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; + + stateName[2] = "Ready"; + stateTransitionOnNotLoaded[2] = "Deactivate"; + stateTransitionOnTriggerDown[2] = "Fire"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.3; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateSequence[3] = "Fire"; + stateSound[3] = PBLFireSound; + stateScript[3] = "onFire"; + + stateName[4] = "Reload"; + stateTimeoutValue[4] = 0.8; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; + stateTransitionOnTimeout[4] = "Ready"; + stateTransitionOnNotLoaded[4] = "Deactivate"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + + stateName[5] = "Deactivate"; + stateSequence[5] = "Activate"; + stateDirection[5] = false; + stateTimeoutValue[5] = 1; + stateTransitionOnLoaded[5] = "ActivateReady"; + stateTransitionOnTimeout[5] = "Dead"; + + stateName[6] = "Dead"; + stateTransitionOnLoaded[6] = "ActivateReady"; + + stateName[7] = "NoAmmo"; + stateTransitionOnAmmo[7] = "Reload"; + stateSequence[7] = "NoAmmo"; +}; + + + + + + + + + + + + + + + + + diff --git a/base/scripts/turrets/sentryTurret.cs b/base/scripts/turrets/sentryTurret.cs new file mode 100644 index 0000000..40b07db --- /dev/null +++ b/base/scripts/turrets/sentryTurret.cs @@ -0,0 +1,214 @@ +// Sound datablocks + +datablock AudioProfile(SentryTurretSwitchSound) +{ + filename = "fx/powered/turret_sentry_activate.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(SentryTurretFireSound) +{ + filename = "fx/powered/turret_sentry_fire.wav"; + description = AudioDefault3d; + preload = true; +}; + +datablock AudioProfile(SentryTurretExpSound) +{ + filename = "fx/powered/turret_sentry_impact.WAV"; + description = AudioClosest3d; + preload = true; +}; + +datablock AudioProfile(SentryTurretProjectileSound) +{ + filename = "fx/weapons/blaster_projectile.WAV"; + description = AudioExplosion3d; + preload = true; +}; + +// Explosion + +datablock ParticleData(SentryTurretExplosionParticle1) +{ + dragCoefficient = 0.65; + gravityCoefficient = 0.3; + inheritedVelFactor = 0.0; + constantAcceleration = 0.0; + lifetimeMS = 500; + lifetimeVarianceMS = 150; + textureName = "particleTest"; + colors[0] = "0.26 0.36 0.56 1.0"; + colors[1] = "0.26 0.36 0.56 0.0"; + sizes[0] = 0.0425; + sizes[1] = 0.15; +}; + +datablock ParticleEmitterData(SentryTurretExplosionEmitter) +{ + ejectionPeriodMS = 10; + periodVarianceMS = 0; + ejectionVelocity = 0.75; + velocityVariance = 0.25; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 60; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + particles = "SentryTurretExplosionParticle1"; +}; + +datablock ExplosionData(SentryTurretExplosion) +{ + explosionShape = "energy_explosion.dts"; + soundProfile = SentryTurretExpSound; + + particleEmitter = SentryTurretExplosionEmitter; + particleDensity = 120; + particleRadius = 0.15; + + faceViewer = false; +}; + +// Projectile + +datablock LinearFlareProjectileData(SentryTurretEnergyBolt) +{ + directDamage = 0.1; + directDamageType = $DamageType::SentryTurret; + + explosion = "SentryTurretExplosion"; + kickBackStrength = 0.0; + + dryVelocity = 200.0; + wetVelocity = 150.0; + velInheritFactor = 0.5; + fizzleTimeMS = 2000; + lifetimeMS = 3000; + explodeOnDeath = false; + reflectOnWaterImpactAngle = 0.0; + explodeOnWaterImpact = false; + deflectionOnWaterImpact = 0.0; + fizzleUnderwaterMS = 3000; + + numFlares = 10; + size = 0.35; + flareColor = "0.35 0.35 1"; + flareModTexture = "flaremod"; + flareBaseTexture = "flarebase"; + + sound = SentryTurretProjectileSound; + + hasLight = true; + lightRadius = 1.5; + lightColor = "0.35 0.35 1"; +}; + +// Turret data + +datablock SensorData(SentryMotionSensor) +{ + detects = true; + detectsUsingLOS = true; + detectsActiveJammed = false; + detectsPassiveJammed = true; + detectsCloaked = true; + detectionPings = false; + detectRadius = 60; + detectMinVelocity = 2; +}; + +datablock TurretData(SentryTurret) : TurretDamageProfile +{ + //className = Turret; + catagory = "Turrets"; + shapeFile = "turret_sentry.dts"; + + //Uses the same stats as an outdoor deployable turret (balancing info for Dave) + mass = 5.0; + + barrel = SentryTurretBarrel; + + maxDamage = 1.2; + destroyedLevel = 1.2; + disabledLevel = 0.84; + explosion = ShapeExplosion; + expDmgRadius = 5.0; + expDamage = 0.4; + expImpulse = 1000.0; + repairRate = 0; + + thetaMin = 89; + thetaMax = 175; + emap = true; + + + isShielded = true; + energyPerDamagePoint = 100; + maxEnergy = 150; + rechargeRate = 0.40; + + canControl = true; + cmdCategory = "Tactical"; + cmdIcon = CMDTurretIcon; + cmdMiniIconName = "commander/MiniIcons/com_turret_grey"; + targetNameTag = 'Sentry'; + targetTypeTag = 'Turret'; + sensorData = SentryMotionSensor; + sensorRadius = SentryMotionSensor.detectRadius; + sensorColor = "9 136 255"; + firstPersonOnly = true; +}; + +datablock TurretImageData(SentryTurretBarrel) +{ + shapeFile = "turret_muzzlepoint.dts"; + + projectile = SentryTurretEnergyBolt; + projectileType = LinearFlareProjectile; + usesEnergy = true; + fireEnergy = 6.00; + minEnergy = 6.00; + emap = true; + + // Turret parameters + activationMS = 300; + deactivateDelayMS = 500; + thinkTimeMS = 200; + degPerSecTheta = 520; + degPerSecPhi = 960; + attackRadius = 60; + + // State transitions + stateName[0] = "Activate"; + stateTimeoutValue[0] = 0.01; + stateTransitionOnTimeout[0] = "Ready"; + stateSound[0] = SentryTurretSwitchSound; + + stateName[1] = "Ready"; + stateTransitionOnTriggerDown[1] = "Fire"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; + + stateName[2] = "Fire"; + stateTransitionOnTimeout[2] = "Reload"; + stateTimeoutValue[2] = 0.13; + stateFire[2] = true; + stateRecoil[2] = LightRecoil; + stateAllowImageChange[2] = false; + stateSequence[2] = "Fire"; + stateSound[2] = SentryTurretFireSound; + stateScript[2] = "onFire"; + + stateName[3] = "Reload"; + stateTimeoutValue[3] = 0.40; + stateAllowImageChange[3] = false; + stateTransitionOnTimeout[3] = "Ready"; + stateTransitionOnNoAmmo[3] = "NoAmmo"; + + stateName[4] = "NoAmmo"; + stateTransitionOnAmmo[4] = "Reload"; + stateSequence[4] = "NoAmmo"; +}; + diff --git a/base/scripts/vehicles/clientVehicleHud.cs b/base/scripts/vehicles/clientVehicleHud.cs new file mode 100644 index 0000000..42a56fa --- /dev/null +++ b/base/scripts/vehicles/clientVehicleHud.cs @@ -0,0 +1,134 @@ +//------------------------------------------------------------------------------ +function VehicleHud::onWake( %this ) +{ + VIN_RemainingText.setText( "" ); + VIN_BuyBtn.setActive( false ); + + if ( isObject( hudMap ) ) + { + hudMap.pop(); + hudMap.delete(); + } + new ActionMap( hudMap ); + hudMap.blockBind( moveMap, toggleInventoryHud ); + hudMap.blockBind( moveMap, toggleScoreScreen ); + hudMap.blockBind( moveMap, toggleCommanderMap ); + hudMap.bindCmd( keyboard, escape, "", "VehicleHud.onCancel();" ); + hudMap.push(); +} + +//------------------------------------------------------------------------------ +function VehicleHud::onSleep( %this ) +{ + VIN_Picture.setBitmap( "" ); + + %this.selId = ""; + %this.selected = ""; + + // Don't rely on the server to tell us to clear the hud - do it now! + for ( %line = 0; %line < $Hud['vehicleHud'].count; %line++ ) + { + if ( $Hud['vehicleHud'].data[%line, 0] !$= "" ) + { + $Hud['vehicleHud'].childGui.remove( $Hud['vehicleHud'].data[%line, 0] ); + $Hud['vehicleHud'].data[%line, 0] = ""; + } + } + $Hud['vehicleHud'].count = 0; + + hudMap.pop(); + hudMap.delete(); +} + +//------------------------------------------------------------------------------ +function VehicleHud::setupHud( %obj, %tag ) +{ + // Nothing to do... +} + +//------------------------------------------------------------------------------ +function VehicleHud::loadHud( %obj, %tag ) +{ + $Hud[%tag] = VehicleHud; + $Hud[%tag].childGui = VIN_Root; + $Hud[%tag].parent = VIN_Root; +} + +//------------------------------------------------------------------------------ +function VehicleHud::onBuy( %this ) +{ + toggleCursorHuds( 'vehicleHud' ); + commandToServer( 'buyVehicle', %this.selected ); +} + +//------------------------------------------------------------------------------ +function VehicleHud::onCancel( %this ) +{ + toggleCursorHuds('vehicleHud'); +} + +//------------------------------------------------------------------------------ +function VehicleHud::onTabSelect( %this, %id, %name, %count ) +{ + if ( %this.selId !$= "" ) + $Hud['vehicleHud'].data[%this.selId, 0].setValue( false ); + + %this.selId = %id; + %this.selected = %name; + + VIN_Picture.setBitmap( "gui/vin_" @ %name ); + VIN_RemainingText.setText( %count SPC "Remaining" ); + VIN_BuyBtn.setActive( %count > 0 ); +} + +//------------------------------------------------------------------------------ +function VehicleHud::addLine( %this, %tag, %lineNum, %name, %count ) +{ + %yOffset = ( %lineNum * 30 ) + 11; + $Hud[%tag].count++; + + $Hud[%tag].data[%lineNum, 0] = new ShellTabButton() { + profile = "ShellTabProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "3 " @ %yOffset; + extent = "206 38"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + command = "VehicleHud.onTabSelect(" @ %lineNum @ ", " @ %name @ ", " @ %count @ ");"; + text = ""; + }; + + // If nothing is selected, select something: + if ( %this.selId $= "" ) + { + $Hud[%tag].data[%lineNum, 0].setValue( true ); + VehicleHud.onTabSelect( %lineNum, %name, %count ); + } + + return 1; +} + +//------------------------------------------------------------------------------ +function clientCmdStationVehicleShowHud() +{ + if ( Canvas.getContent() != PlayGui.getId() ) + return; + + if ( !Canvas.isCursorOn() ) + CursorOn(); + showHud( 'vehicleHud' ); + + clientCmdTogglePlayHuds(false); +} + +//------------------------------------------------------------------------------ +function clientCmdStationVehicleHideHud() +{ + if ( Canvas.isCursorOn() ) + CursorOff(); + hideHud( 'vehicleHud' ); + + clientCmdTogglePlayHuds(true); +} \ No newline at end of file diff --git a/base/scripts/vehicles/serverVehicleHud.cs b/base/scripts/vehicles/serverVehicleHud.cs new file mode 100644 index 0000000..634f34e --- /dev/null +++ b/base/scripts/vehicles/serverVehicleHud.cs @@ -0,0 +1,259 @@ +//------------------------------------------------------------------------------ +datablock AudioProfile(VehicleAppearSound) +{ + filename = "fx/vehicles/inventory_pad_appear.wav"; + description = AudioClosest3d; + preload = true; +}; + +datablock AudioProfile(ActivateVehiclePadSound) +{ + filename = "fx/powered/vehicle_pad_on.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock StationFXVehicleData( VehicleInvFX ) +{ + lifetime = 6.0; + + glowTopHeight = 1.5; + glowBottomHeight = 0.1; + glowTopRadius = 12.5; + glowBottomRadius = 12.0; + numGlowSegments = 26; + glowFadeTime = 3.25; + + armLightDelay = 2.3; + armLightLifetime = 3.0; + armLightFadeTime = 1.5; + numArcSegments = 10.0; + + sphereColor = "0.1 0.1 0.5"; + spherePhiSegments = 13; + sphereThetaSegments = 8; + sphereRadius = 12.0; + sphereScale = "1.05 1.05 0.85"; + + glowNodeName = "GLOWFX"; + + leftNodeName[0] = "LFX1"; + leftNodeName[1] = "LFX2"; + leftNodeName[2] = "LFX3"; + leftNodeName[3] = "LFX4"; + + rightNodeName[0] = "RFX1"; + rightNodeName[1] = "RFX2"; + rightNodeName[2] = "RFX3"; + rightNodeName[3] = "RFX4"; + + + texture[0] = "special/stationGlow"; + texture[1] = "special/stationLight2"; +}; + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +function serverCmdBuyVehicle(%client, %blockName) +{ + %team = %client.getSensorGroup(); + if(vehicleCheck(%blockName, %team)) + { + %station = %client.player.station.pad; + if( (%station.ready) && (%station.station.vehicle[%blockName]) ) + { + %trans = %station.getTransform(); + %pos = getWords(%trans, 0, 2); + %matrix = VectorOrthoBasis(getWords(%trans, 3, 6)); + %yrot = getWords(%matrix, 3, 5); + %p = vectorAdd(%pos,vectorScale(%yrot, -3)); + %p = getWords(%p,0, 1) @ " " @ getWord(%p,2) + 4; + + error(%blockName); + error(%blockName.spawnOffset); + + %p = vectorAdd(%p, %blockName.spawnOffset); + %rot = getWords(%trans, 3, 5); + %angle = getWord(%trans, 6) + 3.14; + %mask = $TypeMasks::VehicleObjectType | $TypeMasks::PlayerObjectType | + $TypeMasks::StationObjectType | $TypeMasks::TurretObjectType; + InitContainerRadiusSearch(%p, %blockName.checkRadius, %mask); + + %clear = 1; + for (%x = 0; (%obj = containerSearchNext()) != 0; %x++) + { + if((%obj.getType() & $TypeMasks::VehicleObjectType) && (%obj.getDataBlock().checkIfPlayersMounted(%obj))) + { + %clear = 0; + break; + } + else + %removeObjects[%x] = %obj; + } + if(%clear) + { + %fadeTime = 0; + for(%i = 0; %i < %x; %i++) + { + if(%removeObjects[%i].getType() & $TypeMasks::PlayerObjectType) + { + %pData = %removeObjects[%i].getDataBlock(); + %pData.damageObject(%removeObjects[%i], 0, "0 0 0", 1000, $DamageType::VehicleSpawn); + } + else + { + %removeObjects[%i].mountable = 0; + %removeObjects[%i].startFade( 1000, 0, true ); + %removeObjects[%i].schedule(1001, "delete"); + %fadeTime = 1500; + } + } + schedule(%fadeTime, 0, "createVehicle", %client, %station, %blockName, %team , %p, %rot, %angle); + } + else + MessageClient(%client, "", 'Can\'t create vehicle. A player is on the creation pad.'); + } + } +} + +function createVehicle(%client, %station, %blockName, %team , %pos, %rot, %angle) +{ + %obj = %blockName.create(%team); + if(%obj) + { + %station.ready = false; + %obj.team = %team; + %obj.useCreateHeight(true); + %obj.schedule(5500, "useCreateHeight", false); + %obj.getDataBlock().isMountable(%obj, false); + %obj.getDataBlock().schedule(6500, "isMountable", %obj, true); + + %station.playThread($ActivateThread,"activate2"); + %station.playAudio($ActivateSound, ActivateVehiclePadSound); + + vehicleListAdd(%blockName, %obj); + MissionCleanup.add(%obj); + + %turret = %obj.getMountNodeObject(10); + if(%turret > 0) + { + %turret.setCloaked(true); + %turret.schedule(4800, "setCloaked", false); + } + + %obj.setCloaked(true); + %obj.setTransform(%pos @ " " @ %rot @ " " @ %angle); + + %obj.schedule(3700, "playAudio", 0, VehicleAppearSound); + %obj.schedule(4800, "setCloaked", false); + + if(%client.player.lastVehicle) + { + %client.player.lastVehicle.lastPilot = ""; + vehicleAbandonTimeOut(%client.player.lastVehicle); + %client.player.lastVehicle = ""; + } + %client.player.lastVehicle = %obj; + %obj.lastPilot = %client.player; + + // play the FX + %fx = new StationFXVehicle() + { + dataBlock = VehicleInvFX; + stationObject = %station; + }; + + } + if(%obj.getTarget() != -1) + setTargetSensorGroup(%obj.getTarget(), %client.getSensorGroup()); + // We are now closing the vehicle hud when you buy a vehicle, making the following call + // unnecessary (and it breaks stuff, too!) + //VehicleHud.updateHud(%client, 'vehicleHud'); +} + +//------------------------------------------------------------------------------ +function VehicleData::checkIfPlayersMounted(%data, %obj) +{ + for(%i = 0; %i < %obj.getDatablock().numMountPoints; %i++) + if (%obj.getMountNodeObject(%i)) + return true; + return false; +} + +//------------------------------------------------------------------------------ +function VehicleData::isMountable(%data, %obj, %val) +{ + %obj.mountable = %val; +} + +//------------------------------------------------------------------------------ +function vehicleCheck(%blockName, %team) +{ + if(($VehicleMax[%blockName] - $VehicleTotalCount[%team, %blockName]) > 0) + return true; +// else +// { +// for(%i = 0; %i < $VehicleMax[%blockName]; %i++) +// { +// %obj = $VehicleInField[%blockName, %i]; +// if(%obj.abandon) +// { +// vehicleListRemove(%blockName, %obj); +// %obj.delete(); +// return true; +// } +// } +// } + return false; +} + +//------------------------------------------------------------------------------ +function VehicleHud::updateHud( %obj, %client, %tag ) +{ + %station = %client.player.station; +// Not sure if we need to clear the huds... They'll always have the same num rows... + //if ( %station.lastCount !$= "" ) + // VehicleHud::clearHud( %client, %tag, %station.lastCount ); + + %team = %client.getSensorGroup(); + %count = 0; + if ( %station.vehicle[scoutVehicle] ) + { + messageClient( %client, 'SetLineHud', "", %tag, %count, "GRAV CYCLE", "", ScoutVehicle, $VehicleMax[ScoutVehicle] - $VehicleTotalCount[%team, ScoutVehicle] ); + %count++; + } + if ( %station.vehicle[AssaultVehicle] ) + { + messageClient( %client, 'SetLineHud', "", %tag, %count, "ASSAULT TANK", "", AssaultVehicle, $VehicleMax[AssaultVehicle] - $VehicleTotalCount[%team, AssaultVehicle] ); + %count++; + } + if ( %station.vehicle[mobileBaseVehicle] ) + { + messageClient( %client, 'SetLineHud', "", %tag, %count, "MOBILE POINT BASE", "", MobileBaseVehicle, $VehicleMax[MobileBaseVehicle] - $VehicleTotalCount[%team, MobileBaseVehicle] ); + %count++; + } + if ( %station.vehicle[scoutFlyer] ) + { + messageClient( %client, 'SetLineHud', "", %tag, %count, "SCOUT FLIER", "", ScoutFlyer, $VehicleMax[ScoutFlyer] - $VehicleTotalCount[%team, ScoutFlyer] ); + %count++; + } + if ( %station.vehicle[bomberFlyer] ) + { + messageClient( %client, 'SetLineHud', "", %tag, %count, "BOMBER", "", BomberFlyer, $VehicleMax[BomberFlyer] - $VehicleTotalCount[%team, BomberFlyer] ); + %count++; + } + if ( %station.vehicle[hapcFlyer] ) + { + messageClient( %client, 'SetLineHud', "", %tag, %count, "TRANSPORT", "", HAPCFlyer, $VehicleMax[HAPCFlyer] - $VehicleTotalCount[%team, HAPCFlyer] ); + %count++; + } + %station.lastCount = %count; +} + +//------------------------------------------------------------------------------ +function VehicleHud::clearHud( %obj, %client, %tag, %count ) +{ + for ( %i = 0; %i < %count; %i++ ) + messageClient( %client, 'RemoveLineHud', "", %tag, %i ); +} + diff --git a/base/scripts/vehicles/vehicle.cs b/base/scripts/vehicles/vehicle.cs new file mode 100644 index 0000000..499e3e5 --- /dev/null +++ b/base/scripts/vehicles/vehicle.cs @@ -0,0 +1,1287 @@ +//Damage Rate for entering Liquid +$VehicleDamageLava = 0.0325; +$VehicleDamageHotLava = 0.0325; +$VehicleDamageCrustyLava = 0.0325; + +$NumVehiclesDeploy = 0; +//************************************************************** +//* GENERAL PURPOSE FUNCTIONS +//************************************************************** + +function VehicleData::onAdd(%data, %obj) +{ + Parent::onAdd(%data, %obj); + if((%data.sensorData !$= "") && (%obj.getTarget() != -1)) + setTargetSensorData(%obj.getTarget(), %data.sensorData); + %obj.setRechargeRate(%data.rechargeRate); + // set full energy + %obj.setEnergyLevel(%data.MaxEnergy); + + if(%obj.disableMove) + %obj.immobilized = true; + if(%obj.deployed) + { + if($countDownStarted) + %data.schedule(($Host::WarmupTime * 1000) / 2, "vehicleDeploy", %obj); + else + { + $VehiclesDeploy[$NumVehiclesDeploy] = %obj; + $NumVehiclesDeploy++; + } + } + if(%obj.mountable || %obj.mountable $= "") + %data.isMountable(%obj, true); + else + %data.isMountable(%obj, false); + + %obj.setSelfPowered(); +// %data.canObserve = true; +} + +function VehicleData::onRemove(%this, %obj) +{ + // if there are passengers/driver, kick them out + %this.deleteAllMounted(%obj); + for(%i = 0; %i < %obj.getDatablock().numMountPoints; %i++) + if (%obj.getMountNodeObject(%i)) { + %passenger = %obj.getMountNodeObject(%i); + %passenger.unmount(); + } + vehicleListRemove(%obj.getDataBlock(), %obj); + if(%obj.lastPilot.lastVehicle == %obj) + %obj.lastPilot.lastVehicle = ""; + + Parent::onRemove(%this, %obj); +} + +function VehicleData::onDamage(%this,%obj) +{ + %damage = %obj.getDamageLevel(); + if (%damage >= %this.destroyedLevel) + { + if(%obj.getDamageState() !$= "Destroyed") + { + if(%obj.respawnTime !$= "") + %obj.marker.schedule = %obj.marker.data.schedule(%obj.respawnTime, "respawn", %obj.marker); + %obj.setDamageState(Destroyed); + } + } + else + { + if(%obj.getDamageState() !$= "Enabled") + %obj.setDamageState(Enabled); + } +} + +function AssaultVehicle::onDamage(%this, %obj) +{ + (%obj.getMountNodeObject(10)).setDamagelevel(%obj.getDamageLevel()); + Parent::onDamage(%this, %obj); +} + +function BomberFlyer::onDamage(%this, %obj) +{ + (%obj.getMountNodeObject(10)).setDamagelevel(%obj.getDamageLevel()); + Parent::onDamage(%this, %obj); +} + +function MobileBaseVehicle::onDamage(%this, %obj) +{ + if(isObject(%obj.getMountNodeObject(1))) + (%obj.getMountNodeObject(1)).setDamagelevel(%obj.getDamageLevel()); + Parent::onDamage(%this, %obj); +} + +function VehicleData::onEnterLiquid(%data, %obj, %coverage, %type) +{ + switch(%type) + { + case 0: + //Water + %obj.setHeat(0.0); + case 1: + //Ocean Water + %obj.setHeat(0.0); + case 2: + //River Water + %obj.setHeat(0.0); + case 3: + //Stagnant Water + %obj.setHeat(0.0); + case 4: + //Lava + %obj.liquidDamage(%data, $VehicleDamageLava, $DamageType::Lava); + case 5: + //Hot Lava + %obj.liquidDamage(%data, $VehicleDamageHotLava, $DamageType::Lava); + case 6: + //Crusty Lava + %obj.liquidDamage(%data, $VehicleDamageCrustyLava, $DamageType::Lava); + case 7: + //Quick Sand + } +} + +function FlyingVehicle::liquidDamage(%obj, %data, %damageAmount, %damageType) +{ + if(%obj.getDamageState() !$= "Destroyed") + { + %data.damageObject(%obj, 0, "0 0 0", %damageAmount, %damageType); + %obj.lDamageSchedule = %obj.schedule(50, "liquidDamage", %data, %damageAmount, %damageType); + passengerLiquidDamage(%obj, %damageAmount, %damageType); + } + else + %obj.lDamageSchedule = ""; +} + +function WheeledVehicle::liquidDamage(%obj, %data, %damageAmount, %damageType) +{ + if(%obj.getDamageState() !$= "Destroyed") + { + %data.damageObject(%obj, 0, "0 0 0", %damageAmount, %damageType); + %obj.lDamageSchedule = %obj.schedule(50, "liquidDamage", %data, %damageAmount, %damageType); + passengerLiquidDamage(%obj, %damageAmount, %damageType); + } + else + %obj.lDamageSchedule = ""; +} + +function HoverVehicle::liquidDamage(%obj, %data, %damageAmount, %damageType) +{ + if(%obj.getDamageState() !$= "Destroyed") + { + %data.damageObject(%obj, 0, "0 0 0", %damageAmount, %damageType); + %obj.lDamageSchedule = %obj.schedule(50, "liquidDamage", %data, %damageAmount, %damageType); + passengerLiquidDamage(%obj, %damageAmount, %damageType); + } + else + %obj.lDamageSchedule = ""; +} + +function passengerLiquidDamage(%obj, %damageAmount, %damageType) +{ + for(%i = %num; %i < %obj.getDataBlock().numMountPoints; %i++) + if (%p = %obj.getMountNodeObject(%i)) + %p.liquidDamage(%p.getDatablock(), $DamageLava, $DamageType::Lava); +} + +function VehicleData::onLeaveLiquid(%data, %obj, %type) +{ + switch(%type) + { + case 0: + //Water + %obj.setHeat(1.0); + case 1: + //Ocean Water + %obj.setHeat(1.0); + case 2: + //River Water + %obj.setHeat(1.0); + case 3: + //Stagnant Water + %obj.setHeat(1.0); + case 4: + //Lava + case 5: + //Hot Lava + case 6: + //Crusty Lava + case 7: + //Quick Sand + } + + if(%obj.lDamageSchedule !$= "") + { + cancel(%obj.lDamageSchedule); + %obj.lDamageSchedule = ""; + } +} + +function VehicleData::onDestroyed(%data, %obj, %prevState) +{ + if(%obj.turretObject) + if(%obj.turretObject.getControllingClient()) + %obj.turretObject.getDataBlock().playerDismount(%obj.turretObject); + for(%i = 0; %i < %obj.getDatablock().numMountPoints; %i++) + { + if (%obj.getMountNodeObject(%i)) { + %flingee = %obj.getMountNodeObject(%i); + %flingee.getDataBlock().doDismount(%flingee, true); + %xVel = 250.0 - (getRandom() * 500.0); + %yVel = 250.0 - (getRandom() * 500.0); + %zVel = (getRandom() * 100.0) + 50.0; + %flingVel = %xVel @ " " @ %yVel @ " " @ %zVel; + %flingee.applyImpulse(%flingee.getTransform(), %flingVel); + %flingee.damage(0, %obj.getPosition(), 0.4, $DamageType::Explosion); + } + } + %obj.schedule(300, "delete"); +} + +function VehicleData::deleteAllMounted() +{ + +} + +//************************************************************** +//* VEHICLE CREATION +//************************************************************** +// (NOTE: No entry for Wildcat Grav Cycle is here. -- DG) + +//---------------------------- +// SHRIKE SCOUT FLIER +//---------------------------- + +function ScoutFlyer::onAdd(%this, %obj) +{ + Parent::onAdd(%this, %obj); + %obj.mountImage(ScoutChaingunParam, 0); + %obj.mountImage(ScoutChaingunImage, 2); + %obj.mountImage(ScoutChaingunPairImage, 3); + %obj.nextWeaponFire = 2; + %obj.schedule(5500, "playThread", $ActivateThread, "activate"); +} + +//---------------------------- +// THUNDERSWORD BOMBER +//---------------------------- + +function BomberFlyer::onAdd(%this, %obj) +{ + Parent::onAdd(%this, %obj); + + %turret = TurretData::create(BomberTurret); + MissionCleanup.add(%turret); + %turret.team = %obj.teamBought; + %turret.selectedWeapon = 1; + %turret.setSelfPowered(); + %obj.mountObject(%turret, 10); + %turret.mountImage(BomberTurretBarrel,2); + %turret.mountImage(BomberTurretBarrelPair,3); + %turret.mountImage(BomberBombImage, 4); + %turret.mountImage(BomberBombPairImage, 5); + %turret.mountImage(BomberTargetingImage, 6); + %obj.turretObject = %turret; + %turret.vehicleMounted = %obj; + + //vehicle turrets should not auto fire at targets + %turret.setAutoFire(false); + + //for this particular weapon - a non-firing datablock used only so the AI can aim the turret + //Also needed so we can set the turret parameters.. + %turret.mountImage(AIAimingTurretBarrel, 0); + setTargetNeverVisMask(%turret.getTarget(), 0xffffffff); +} + +//---------------------------- +// HAVOC TRANSPORT FLIER +//---------------------------- + +function HAPCFlyer::onAdd(%this, %obj) +{ + Parent::onAdd(%this, %obj); + %obj.schedule(6000, "playThread", $ActivateThread, "activate"); +} + +//---------------------------- +// BEOWULF ASSAULT VEHICLE +//---------------------------- + +function AssaultVehicle::onAdd(%this, %obj) +{ + Parent::onAdd(%this, %obj); + + %turret = TurretData::create(AssaultPlasmaTurret); + %turret.selectedWeapon = 1; + MissionCleanup.add(%turret); + %turret.team = %obj.teamBought; + setTargetSensorGroup(%turret.getTarget(), %turret.team); + %turret.setSelfPowered(); + %obj.mountObject(%turret, 10); + %turret.mountImage(AssaultPlasmaTurretBarrel, 2); + %turret.mountImage(AssaultMortarTurretBarrel, 4); + %obj.turretObject = %turret; + + //vehicle turrets should not auto fire at targets + %turret.setAutoFire(false); + //Needed so we can set the turret parameters.. + %turret.mountImage(AssaultTurretParam, 0); + setTargetNeverVisMask(%turret.getTarget(), 0xffffffff); + %obj.schedule(6000, "playThread", $ActivateThread, "activate"); +} + +//---------------------------- +// JERICHO FORWARD BASE (Mobile Point Base) +//---------------------------- + +function MobileBaseVehicle::onAdd(%this, %obj) +{ + Parent::onAdd(%this, %obj); + %obj.station = ""; + %obj.turret = ""; + + %obj.schedule(5000, "playThread", $AmbientThread, "ambient"); +} + +//************************************************************** +//* MULTI-CREW VEHICLE DELETION +//************************************************************** + +//---------------------------- +//BEOWULF ASSAULT VEHICLE +//---------------------------- + +function AssaultVehicle::deleteAllMounted(%data, %obj) +{ + %turret = %obj.getMountNodeObject(10); + if(!%turret) + return; + + if(%client = %turret.getControllingClient()) + { + %client.player.setControlObject(%client.player); + %client.player.mountImage(%client.player.lastWeapon, $WeaponSlot); + %client.player.mountVehicle = false; + } + %turret.delete(); +} + +//---------------------------- +// THUNDERSWORD BOMBER +//---------------------------- + +function BomberFlyer::deleteAllMounted(%data, %obj) +{ + if(%obj.beacon) + %obj.beacon.delete(); + + %turret = %obj.getMountNodeObject(10); + if(!%turret) + return; + + %turret.altTrigger = 0; + %turret.fireTrigger = 0; + + if(%client = %turret.getControllingClient()) + { + commandToClient(%client, 'endBomberSight'); + %client.player.setControlObject(%client.player); + %client.player.mountImage(%client.player.lastWeapon, $WeaponSlot); + %client.player.mountVehicle = false; + + %client.player.bomber = false; + } + %turret.delete(); +} + +//---------------------------- +// JERICHO FORWARD BASE +//---------------------------- + +function MobileBaseVehicle::deleteAllMounted(%data, %obj) +{ + if(%obj.station !$= "") + { + %obj.station.getDataBlock().onLosePowerDisabled(%obj.station); + %obj.unmountObject(%obj.station); + %obj.station.trigger.delete(); + %obj.station.delete(); + } + if(%obj.turret !$= "") + { + %obj.turret.getDataBlock().onLosePowerDisabled(%obj.turret); + %obj.unmountObject(%obj.turret); + %obj.turret.delete(); + } + if(isObject(%obj.shield)) + %obj.shield.delete(); +} + +//************************************************************** +//* WEAPON MOUNTING ON VEHICLES +//************************************************************** + +//---------------------------- +// SHRIKE SCOUT FLIER +//---------------------------- + +function ScoutFlyer::playerMounted(%data, %obj, %player, %node) +{ + // scout flyer == SUV (single-user vehicle) + setTargetSensorGroup(%obj.getTarget(), %player.client.getSensorGroup()); + commandToClient(%player.client, 'setHudMode', 'Pilot', "Shrike", %node); + $numVWeapons = 1; +} + +//---------------------------- +// THUNDERSWORD BOMBER +//---------------------------- + +function BomberFlyer::playerMounted(%data, %obj, %player, %node) +{ + if(%node == 0) + { + // pilot position + %player.setPilot(true); + commandToClient(%player.client, 'setHudMode', 'Pilot', "Bomber", %node); + } + else if(%node == 1) + { + // bombardier position + %turret = %obj.getMountNodeObject(10); + %player.vehicleTurret = %turret; + %player.setTransform("0 0 0 0 0 1 0"); + %player.lastWeapon = %player.getMountedImage($WeaponSlot); + %player.unmountImage($WeaponSlot); + if(!%player.client.isAIControlled()) + { + %player.setControlObject(%turret); + %player.client.setObjectActiveImage(%turret, 2); + } + commandToClient(%player.client, 'startBomberSight'); + %turret.bomber = %player; + $bWeaponActive = 0; + %obj.getMountNodeObject(10).selectedWeapon = 1; + commandToClient(%player.client,'SetWeaponryVehicleKeys', true); + + setTargetSensorGroup(%turret.getTarget(), %player.client.getSensorGroup()); + setTargetNeverVisMask(%turret.getTarget(), 0xffffffff); + commandToClient(%player.client, 'setHudMode', 'Pilot', "Bomber", %node); + } + else + { + // tail gunner position + commandToClient(%player.client, 'setHudMode', 'Passenger', "Bomber", %node); + } + // build a space-separated string representing passengers + // 0 = no passenger; 1 = passenger (e.g. "1 0 0 ") + %passString = buildPassengerString(%obj); + // send the string of passengers to all mounted players + for(%i = 0; %i < %data.numMountPoints; %i++) + if(%obj.getMountNodeObject(%i) > 0) + commandToClient(%obj.getMountNodeObject(%i).client, 'checkPassengers', %passString); +} + +//---------------------------- +// HAVOC TRANSPORT FLIER +//---------------------------- + +function HAPCFlyer::playerMounted(%data, %obj, %player, %node) +{ + if(%node == 0) { + // pilot position + commandToClient(%player.client, 'setHudMode', 'Pilot', "HAPC", %node); + } + else { + // all others + commandToClient(%player.client, 'setHudMode', 'Passenger', "HAPC", %node); + } + // build a space-separated string representing passengers + // 0 = no passenger; 1 = passenger (e.g. "1 0 0 1 1 0 ") + %passString = buildPassengerString(%obj); + // send the string of passengers to all mounted players + for(%i = 0; %i < %data.numMountPoints; %i++) + if(%obj.getMountNodeObject(%i) > 0) + commandToClient(%obj.getMountNodeObject(%i).client, 'checkPassengers', %passString); +} + +//---------------------------- +// WILDCAT GRAV CYCLE +//---------------------------- + +function ScoutVehicle::playerMounted(%data, %obj, %player, %node) +{ + // scout vehicle == SUV (single-user vehicle) + commandToClient(%player.client, 'setHudMode', 'Pilot', "Hoverbike", %node); +} + +//---------------------------- +// BEOWULF ASSAULT VEHICLE +//---------------------------- + +function AssaultVehicle::playerMounted(%data, %obj, %player, %node) +{ + if(%node == 0) { + // driver position + // is there someone manning the turret? + %turreteer = %obj.getMountedNodeObject(1); + commandToClient(%player.client, 'setHudMode', 'Pilot', "Assault", %node); + } + else if(%node == 1) + { + // turreteer position + %turret = %obj.getMountNodeObject(10); + %player.vehicleTurret = %turret; + %player.setTransform("0 0 0 0 0 1 0"); + %player.lastWeapon = %player.getMountedImage($WeaponSlot); + %player.unmountImage($WeaponSlot); + if(!%player.client.isAIControlled()) + { + %player.setControlObject(%turret); + %player.client.setObjectActiveImage(%turret, 2); + } + %turret.turreteer = %player; + // if the player is the turreteer, show vehicle's weapon icons + //commandToClient(%player.client, 'showVehicleWeapons', %data.getName()); + //%player.client.setVWeaponsHudActive(1); // plasma turret icon (default) + + setTargetSensorGroup(%turret.getTarget(), %player.client.getSensorGroup()); + setTargetNeverVisMask(%turret.getTarget(), 0xffffffff); + + $aWeaponActive = 0; + commandToClient(%player.client,'SetWeaponryVehicleKeys', true); + %obj.getMountNodeObject(10).selectedWeapon = 1; + commandToClient(%player.client, 'setHudMode', 'Pilot', "Assault", %node); + } + // build a space-separated string representing passengers + // 0 = no passenger; 1 = passenger (e.g. "1 0 ") + %passString = buildPassengerString(%obj); + // send the string of passengers to all mounted players + for(%i = 0; %i < %data.numMountPoints; %i++) + if(%obj.getMountNodeObject(%i) > 0) + commandToClient(%obj.getMountNodeObject(%i).client, 'checkPassengers', %passString); +} + +//---------------------------- +// JERICHO FORWARD BASE +//---------------------------- + +function MobileBaseVehicle::playerMounted(%data, %obj, %player, %node) +{ + // MPB vehicle == SUV (single-user vehicle) + commandToClient(%player.client, 'setHudMode', 'Pilot', "MPB", %node); + if(%obj.deploySchedule) + { + %obj.deploySchedule.clear(); + %obj.deploySchedule = ""; + } + + if(%obj.deployed !$= "" && %obj.deployed == 1) + { + %obj.setThreadDir($DeployThread, false); + %obj.playThread($DeployThread,"deploy"); + %obj.playAudio($DeploySound, MobileBaseUndeploySound); + %obj.station.setThreadDir($DeployThread, false); + %obj.station.getDataBlock().onLosePowerDisabled(%obj.station); + %obj.station.clearSelfPowered(); + %obj.station.goingOut=false; + %obj.station.notDeployed = 1; + %obj.station.playAudio($DeploySound, MobileBaseStationUndeploySound); + %obj.turret.setThreadDir($DeployThread, false); + %obj.turret.clearTarget(); + %obj.turret.setTarget(-1); + + %obj.turret.playAudio($DeploySound, MobileBaseTurretUndeploySound); + %obj.shield.open(); + %obj.shield.schedule(1000,"delete"); + %obj.deploySchedule = ""; + } + %obj.deployed = 0; +} + +function buildPassengerString(%vehicle) +{ + %passStr = ""; + for(%i = 0; %i < %vehicle.getDatablock().numMountPoints; %i++) + { + if(%vehicle.getMountNodeObject(%i) > 0) + %passStr = %passStr @ "1 "; + else + %passStr = %passStr @ "0 "; + } + + return %passStr; +} + +function MobileBaseVehicle::playerDismounted(%data, %obj, %player) +{ + %obj.schedule(500, "deployVehicle", %data, %player); +} + +function WheeledVehicle::deployVehicle(%obj, %data, %player) +{ + if (!%data.vehicleDeploy(%obj, %player)) + %obj.schedule(500, "deployVehicle", %data, %player); +} + +//************************************************************** +//* JERICHO DEPLOYMENT and UNDEPLOYMENT +//************************************************************** + +function MobileBaseVehicle::vehicleDeploy(%data, %obj, %player) +{ + if(VectorLen(%obj.getVelocity()) <= 0.1) + { + %deployMessage = ""; + if( (%deployMessage = %data.checkTurretDistance(%obj)) $= "") + { + if(%obj.station $= "") + { + if( (%deployMessage = %data.checkDeploy(%obj)) $= "") + { + %obj.station = new StaticShape() { + scale = "1 1 1"; + dataBlock = "MobileInvStation"; + lockCount = "0"; + homingCount = "0"; + team = %obj.team; + vehicle = %obj; + }; + %obj.station.startFade(0,0,true); + %obj.mountObject(%obj.station, 2); + %obj.station.getDataBlock().createTrigger(%obj.station); + %obj.station.setSelfPowered(); + %obj.station.playThread($PowerThread,"Power"); + %obj.station.playAudio($HumSound,StationHumSound); + + %obj.turret = new turret() { + scale = "1 1 1"; + dataBlock = "MobileTurretBase"; + lockCount = "0"; + homingCount = "0"; + team = %obj.team; + }; + %obj.mountObject(%obj.turret, 1); + %obj.turret.setSelfPowered(); + %obj.turret.playThread($PowerThread,"Power"); + %obj.turret.mountImage(MissileBarrelLarge, 0 ,false); + } + } + else + { + %obj.station.setSelfPowered(); + %obj.station.playThread($PowerThread,"Power"); + %obj.turret.setSelfPowered(); + %obj.turret.playThread($PowerThread,"Power"); + } + if(%deployMessage $= "") + { + if(%obj.turret.getTarget() == -1) + %obj.turret.setTarget(%obj.turret.target); + + %obj.turret.setThreadDir($DeployThread, true); + %obj.turret.playThread($DeployThread,"deploy"); + %obj.turret.playAudio($DeploySound, MobileBaseTurretDeploySound); + + %obj.station.notDeployed = 1; + %obj.setThreadDir($DeployThread, true); + %obj.playThread($DeployThread,"deploy"); + %obj.playAudio($DeploySound, MobileBaseDeploySound); + %obj.deployed = 1; + %obj.deploySchedule = ""; + %obj.disableMove = true; + %obj.setFrozenState(true); + if(isObject(%obj.shield)) + %obj.shield.delete(); + + %obj.shield = new forceFieldBare() + { + scale = "1.22 1.8 1.1"; + dataBlock = "defaultTeamSlowFieldBare"; + team = %obj.team; + }; + %obj.shield.open(); + setTargetSensorData(%obj.getTarget(), MPBDeployedSensor); + } + } + if(%deployMessage !$= "") + messageClient(%player.client, '', %deployMessage); + + return true; + } + else + { + return false; + } +} + +function MobileBaseVehicle::onEndSequence(%data, %obj, %thread) +{ + if(%thread == $DeployThread && !%obj.deployed) + { + %obj.unmountObject(%obj.station); + %obj.station.trigger.delete(); + %obj.station.delete(); + %obj.station = ""; + + %obj.unmountObject(%obj.turret); + %obj.turret.delete(); + %obj.turret = ""; + + if(!%obj.immobilized) + { + %obj.disableMove = false; + %obj.setFrozenState(false); + } + setTargetSensorData(%obj.getTarget(), %data.sensorData); + } + else + { + %obj.station.startFade(0,0,false); + %obj.station.setThreadDir($DeployThread, true); + %obj.station.playThread($DeployThread,"deploy"); + %obj.station.playAudio($DeploySound, MobileBaseStationDeploySound); + %obj.station.goingOut = true; + %obj.shield.setTransform(%obj.getSlotTransform(3)); + %obj.shield.close(); + } + + Parent::onEndSequence(%data, %obj, %thread); +} + +function MobileInvStation::onEndSequence(%data, %obj, %thread) +{ + if(!%obj.goingOut) + %obj.startFade(0,0,true); + else + %obj.notDeployed = 0; + Parent::onEndSequence(%data, %obj, %thread); +} + + +function MobileBaseVehicle::checkDeploy(%data, %obj) +{ + %mask = $TypeMasks::VehicleObjectType | $TypeMasks::MoveableObjectType | + $TypeMasks::StaticShapeObjectType | $TypeMasks::ForceFieldObjectType | + $TypeMasks::ItemObjectType | $TypeMasks::PlayerObjectType | + $TypeMasks::TurretObjectType | //$TypeMasks::StaticTSObjectType | + $TypeMasks::InteriorObjectType; + + //%slot 1 = turret %slot 2 = station + %height[1] = 0; + %height[2] = 0; + %radius[1] = 2.4; + %radius[2] = 2.4; + %stationFailed = false; + %turretFailed = false; + + for(%x = 1; %x < 3; %x++) + { + %posXY = getWords(%obj.getSlotTransform(%x), 0, 1); + %posZ = (getWord(%obj.getSlotTransform(%x), 2) + %height[%x]); + InitContainerRadiusSearch(%posXY @ " " @ %posZ, %radius[%x], %mask); + + while ((%objFound = ContainerSearchNext()) != 0) + { + if(%objFound != %obj) + { + if(%x == 1) + %turretFailed = true; + else + %stationFailed = true; + break; + } + } + } + + //If turret, station or both fail the send back the error message... + if(%turretFailed && %stationFailed) + return "Both Turret and Station are blocked and unable to deploy."; + if(%turretFailed) + return "Turret is blocked and unable to deploy."; + if(%stationFailed) + return "Station is blocked and unable to deploy."; + + //Check the station for collision with the Terrain + %mat = %obj.getTransform(); + for(%x = 1; %x < 7; %x+=2) + { + %startPos = MatrixMulPoint(%mat, %data.stationPoints[%x]); + %endPos = MatrixMulPoint(%mat, %data.stationPoints[%x+1]); + + %rayCastObj = containerRayCast(%startPos, %endPos, $TypeMasks::TerrainObjectType, 0); + if(%rayCastObj) + return "Station is blocked by terrain and unable to deploy."; + } + + return ""; +} +function MobileBaseVehicle::checkTurretDistance(%data, %obj) +{ + %pos = getWords(%obj.getTransform(), 0, 2); + InitContainerRadiusSearch(%pos, 150, $TypeMasks::TurretObjectType); + while ((%objFound = ContainerSearchNext()) != 0) + if(%objFound.getDataBlock().ClassName $= "TurretBase") + return "Turret Base in area. Unable to deploy."; + return ""; +} + + +//************************************************************** +//* VEHICLE INVENTORY MANAGEMENT +//************************************************************** + +//-------------------------------------------------------------- +// NUMBER OF PURCHASEABLE VEHICLES PER TEAM +//-------------------------------------------------------------- + +$VehicleRespawnTime = 15000; +$Vehiclemax[ScoutVehicle] = 4; +$VehicleMax[AssaultVehicle] = 3; +$VehicleMax[MobileBaseVehicle] = 1; +$VehicleMax[ScoutFlyer] = 4; +$VehicleMax[BomberFlyer] = 2; +$VehicleMax[HAPCFlyer] = 2; + +function vehicleListRemove(%data, %obj) +{ + %blockName = %data.getName(); + for($i = 0; %i < $VehicleMax[%blockName]; %i++) + if($VehicleInField[%obj.team, %blockName, %i] == %obj) + { + $VehicleInField[%obj.team, %blockName, %i] = 0; + $VehicleTotalCount[%obj.team, %blockName]--; + break; + } +} + +function vehicleListAdd(%blockName, %obj) +{ + for($i = 0; %i < $VehicleMax[%blockName]; %i++) + { + if($VehicleInField[%obj.team, %blockName, %i] $= "" || $VehicleInField[%obj.team, %blockName, %i] == 0) + { + $VehicleInField[%obj.team, %blockName, %i] = %obj; + $VehicleTotalCount[%obj.team, %blockName]++; + break; + } + } +} + +function clearVehicleCount(%team) +{ + $VehicleTotalCount[%team, ScoutVehicle] = 0; + $VehicleTotalCount[%team, AssaultVehicle] = 0; + $VehicleTotalCount[%team, MobileBaseVehicle] = 0; + $VehicleTotalCount[%team, ScoutFlyer] = 0; + $VehicleTotalCount[%team, BomberFlyer] = 0; + $VehicleTotalCount[%team, HAPCFlyer] = 0; +} + +//************************************************************** +//* VEHICLE HUD SEAT INDICATOR LIGHTS +//************************************************************** + +function findAIEmptySeat(%vehicle, %player) +{ + %dataBlock = %vehicle.getDataBlock(); + if (%dataBlock.getName() $= "BomberFlyer") + %num = 2; + else + %num = 1; + %node = -1; + for(%i = %num; %i < %dataBlock.numMountPoints; %i++) + { + if (!%vehicle.getMountNodeObject(%i)) + { + //cheap hack - for now, AI's will mount the next available node regardless of where they collided + %node = %i; + break; + } + } + + //return the empty seat + return %node; +} + +function findEmptySeat(%vehicle, %player) +{ + %minNode = 1; + %node = -1; + %dataBlock = %vehicle.getDataBlock(); + %dis = %dataBlock.minMountDist; + %playerPos = getWords(%player.getTransform(), 0, 2); + %message = ""; + if(%dataBlock.lightOnly) + { + if(%player.client.armor $= "Light") + %minNode = 0; + else + %message = '\c2Only Scout Armors can pilot this vehicle.~wfx/misc/misc.error.wav'; + } + else if(%player.client.armor $= "Light" || %player.client.armor $= "Medium") + %minNode = 0; + else + %minNode = findFirstHeavyNode(%dataBlock); + + for(%i = 0; %i < %dataBlock.numMountPoints; %i++) + if(!%vehicle.getMountNodeObject(%i)) + { + %seatPos = getWords(%vehicle.getSlotTransform(%i), 0, 2); + %disTemp = VectorLen(VectorSub(%seatPos, %playerPos)); + if(%disTemp <= %dis) + { + %node = %i; + %dis = %disTemp; + } + } + + if(%node != -1 && %node < %minNode) + { + if(%message $= "") + { + if(%node == 0) + %message = '\c2Only Scout or Assault Armors can pilot this vehicle.~wfx/misc/misc.error.wav'; + else + %message = '\c2Only Scout or Assault Armors can use that position.~wfx/misc/misc.error.wav'; + } + + messageClient(%player.client, 'MsgArmorCantMountVehicle', %message); + %node = -1; + } + return %node; +} + +function findFirstHeavyNode(%data) +{ + for(%i = 0; %i < %data.numMountPoints; %i++) + if(%data.mountPose[%i] $= "") + return %i; + return %data.numMountPoints; +} + +//************************************************************** +//* DAMAGE FUNCTIONS +//************************************************************** + +function VehicleData::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType, %momVec) +{ + // check for team damage + %sourceClient = %sourceObject ? %sourceObject.getOwnerClient() : 0; + %targetTeam = getTargetSensorGroup(%targetObject.getTarget()); + + if(%sourceClient) + %sourceTeam = %sourceClient.getSensorGroup(); + else if(isObject(%sourceObject) && %sourceObject.getClassName() $= "Turret") + %sourceTeam = getTargetSensorGroup(%sourceObject.getTarget()); + else + %sourceTeam = %sourceObject ? getTargetSensorGroup(%sourceObject.getTarget()) : -1; + + if(!$teamDamage && (%targetTeam == %sourceTeam)) + return; + + // Scale damage type & include shield calculations... + if (%data.isShielded) + %amount = %data.checkShields(%targetObject, %position, %amount, %damageType); + + %damageScale = %data.damageScale[%damageType]; + if(%damageScale !$= "") + %amount *= %damageScale; + + if(%amount != 0) + %targetObject.applyDamage(%amount); + + if(%targetObject.getDamageState() $= "Destroyed" && %momVec !$= "") + %targetObject.setMomentumVector(%momVec); +} + +function VehicleData::onImpact(%data, %vehicleObject, %collidedObject, %vec, %vecLen) +{ + if(%vecLen > %data.minImpactSpeed) + %data.damageObject(%vehicleObject, 0, VectorAdd(%vec, %vehicleObject.getPosition), + %vecLen * %data.speedDamageScale, $DamageType::Ground); + + // associated "crash" sounds + if(%vecLen > %vDataBlock.hardImpactSpeed) + %vehicleObject.playAudio(0, %vDataBlock.hardImpactSound); + else if(%vecLen > %vDataBlock.softImpactSpeed) + %vehicleObject.playAudio(0, %vDataBlock.softImpactSound); +} + +//************************************************************** +//* VEHICLE TIMEOUTS +//************************************************************** + +function vehicleAbandonTimeOut(%vehicle) +{ + if(%vehicle.getDatablock().cantAbandon $= "" && %vehicle.lastPilot $= "") + { + for(%i = 0; %i < %vehicle.getDatablock().numMountPoints; %i++) + if (%vehicle.getMountNodeObject(%i)) + { + %passenger = %vehicle.getMountNodeObject(%i); + if(%passenger.lastVehicle !$= "") + schedule(15000, %passenger.lastVehicle,"vehicleAbandonTimeOut", %passenger.lastVehicle); + %passenger.lastVehicle = %vehicle; + %vehicle.lastPilot = %passenger; + return; + } + + if(%vehicle.respawnTime !$= "") + %vehicle.marker.schedule = %vehicle.marker.data.schedule(%vehicle.respawnTime, "respawn", %vehicle.marker); + %vehicle.mountable = 0; + %vehicle.startFade(1000, 0, true); + %vehicle.schedule(1001, "delete"); + } +} + +//------------------------------------------------------------------------------ +function HoverVehicleData::create(%block, %team, %oldObj) +{ + if(%oldObj $= "") + { + %obj = new HoverVehicle() + { + dataBlock = %block; + respawn = "0"; + teamBought = %team; + team = %team; + }; + } + else + { + %obj = new HoverVehicle() + { + dataBlock = %data; + respawn = "0"; + teamBought = %team; + team = %team; + mountable = %oldObj.mountable; + disableMove = %oldObj.disableMove; + resetPos = %oldObj.resetPos; + respawnTime = %oldObj.respawnTime; + marker = %oldObj; + }; + } + return(%obj); +} + +function WheeledVehicleData::create(%data, %team, %oldObj) +{ + if(%oldObj $= "") + { + %obj = new WheeledVehicle() + { + dataBlock = %data; + respawn = "0"; + teamBought = %team; + team = %team; + }; + } + else + { + %obj = new WheeledVehicle() + { + dataBlock = %data; + respawn = "0"; + teamBought = %team; + team = %team; + mountable = %oldObj.mountable; + disableMove = %oldObj.disableMove; + resetPos = %oldObj.resetPos; + deployed = %oldObj.deployed; + respawnTime = %oldObj.respawnTime; + marker = %oldObj; + }; + } + + return(%obj); +} + +function FlyingVehicleData::create(%data, %team, %oldObj) +{ + if(%oldObj $= "") + { + %obj = new FlyingVehicle() + { + dataBlock = %data; + respawn = "0"; + teamBought = %team; + team = %team; + }; + } + else + { + %obj = new FlyingVehicle() + { + dataBlock = %data; + teamBought = %team; + team = %team; + mountable = %oldObj.mountable; + disableMove = %oldObj.disableMove; + resetPos = %oldObj.resetPos; + respawnTime = %oldObj.respawnTime; + marker = %oldObj; + }; + } + + return(%obj); +} + +function FlyingVehicleData::switchSidesSetPos(%data, %oldObj) +{ + %team = %oldObj.curTeam == 1 ? 2 : 1; + %oldObj.curTeam = %team; + %obj = new FlyingVehicle() + { + dataBlock = %data; + teamBought = %team; + team = %team; + mountable = %oldObj.mountable; + disableMove = %oldObj.disableMove; + resetPos = %oldObj.resetPos; + respawnTime = %oldObj.respawnTime; + marker = %oldObj; + }; + %obj.setTransform(%oldObj.getTransform()); + + return(%obj); +} + +function WheeledVehicleData::switchSidesSetPos(%data, %oldObj) +{ + %team = %oldObj.curTeam == 1 ? 2 : 1; + %oldObj.curTeam = %team; + %obj = new WheeledVehicle() + { + dataBlock = %data; + respawn = "0"; + teamBought = %team; + team = %team; + mountable = %oldObj.mountable; + disableMove = %oldObj.disableMove; + resetPos = %oldObj.resetPos; + deployed = %oldObj.deployed; + respawnTime = %oldObj.respawnTime; + marker = %oldObj; + }; + %obj.setTransform(%oldObj.getTransform()); + return(%obj); +} + +function HoverVehicleData::switchSides(%data, %oldObj) +{ + %team = %oldObj.curTeam == 1 ? 2 : 1; + %oldObj.curTeam = %team; + %obj = new HoverVehicle() + { + dataBlock = %data; + respawn = "0"; + teamBought = %team; + team = %team; + mountable = %oldObj.mountable; + disableMove = %oldObj.disableMove; + resetPos = %oldObj.resetPos; + respawnTime = %oldObj.respawnTime; + marker = %oldObj; + }; + %obj.setTransform(%oldObj.getTransform()); + return(%obj); +} + +function resetNonStaticObjPositions() +{ + MissionGroup.setupPositionMarkers(false); + MissionCleanup.positionReset(); +} + +function next(%team) +{ + ResetObjsPositions(%team); +} + +function SimGroup::positionReset(%group) +{ + for(%i = %group.getCount() - 1; %i >=0 ; %i--) + { + %obj = %group.getObject(%i); + if(%obj.resetPos && %obj.getName() !$= PosMarker) + %obj.delete(); + else + %obj.positionReset(); + } + + for(%i = 0; %i < %group.getCount(); %i++) + { + %obj = %group.getObject(%i); + if(%obj.getName() $= PosMarker) + { + cancel(%obj.schedule); + %newObj = %obj.data.switchSidesSetPos(%obj); + MissionCleanup.add(%newObj); + setTargetSensorGroup(%newObj.target, %newObj.team); + } + else + %obj.positionReset(); + } +} + +function VehicleData::respawn(%data, %marker) +{ + %mask = $TypeMasks::PlayerObjectType | $TypeMasks::VehicleObjectType | $TypeMasks::TurretObjectType; + InitContainerRadiusSearch(%marker.getWorldBoxCenter(), %data.checkRadius, %mask); + if(containerSearchNext() == 0) + { + %newObj = %data.create(%marker.curTeam, %marker); + %newObj.startFade(1000, 0, false); + %newObj.setTransform(%marker.getTransform()); + setTargetSensorGroup(%newObj.target, %newObj.team); + MissionCleanup.add(%newObj); + } + else + { + %marker.schedule = %data.schedule(3000, "respawn", %marker); + } +} + +function SimObject::positionReset(%group, %team) +{ + //Used to avoid warnings +} + +function Terraformer::positionReset(%group, %team) +{ + //Used to avoid warnings +} + +function SimGroup::setupPositionMarkers(%group, %create) +{ + for(%i = %group.getCount() - 1; %i >= 0; %i--) + { + %obj = %group.getObject(%i); + if(%obj.resetPos || %obj.respawnTime !$= "") + { + if(%create) + { + %marker = %obj.getDataBlock().createPositionMarker(%obj); + MissionCleanup.add(%marker); + %obj.marker = %marker; + } + else + { + %obj.delete(); + } + } + else + %obj.setupPositionMarkers(%create); + } +} + +function SimObject::setupPositionMarkers(%group, %create) +{ + //Used to avoid warnings +} + +function VehicleData::createPositionMarker(%data, %obj) +{ + %marker = new Trigger(PosMarker) + { + dataBlock = markerTrigger; + mountable = %obj.mountable; + disableMove = %obj.disableMove; + resetPos = %obj.resetPos; + data = %obj.getDataBlock().getName(); + deployed = %obj.deployed; + curTeam = %obj.team; + respawnTime = %obj.respawnTime; + }; + %marker.setTransform(%obj.getTransform()); + return %marker; +} + +function VehicleData::hasDismountOverrides(%data, %obj) +{ + return false; +} + diff --git a/base/scripts/vehicles/vehicle_bomber.cs b/base/scripts/vehicles/vehicle_bomber.cs new file mode 100644 index 0000000..bd5ce95 --- /dev/null +++ b/base/scripts/vehicles/vehicle_bomber.cs @@ -0,0 +1,797 @@ +//************************************************************** +// THUNDERSWORD BOMBER +//************************************************************** +//************************************************************** +// SOUNDS +//************************************************************** + +datablock AudioProfile(BomberFlyerEngineSound) +{ + filename = "fx/vehicles/bomber_engine.wav"; + description = AudioDefaultLooping3d; + preload = true; +}; + +datablock AudioProfile(BomberFlyerThrustSound) +{ + filename = "fx/vehicles/bomber_boost.wav"; + description = AudioDefaultLooping3d; + preload = true; +}; + +datablock AudioProfile(FusionExpSound) +// Sound played when mortar impacts on target +{ + filename = "fx/powered/turret_mortar_explode.wav"; + description = "AudioBIGExplosion3d"; + preload = true; +}; + +datablock AudioProfile(BomberTurretFireSound) +{ + filename = "fx/vehicles/bomber_turret_fire.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(BomberTurretActivateSound) +{ + filename = "fx/vehicles/bomber_turret_activate.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(BomberTurretReloadSound) +{ + filename = "fx/vehicles/bomber_turret_reload.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(BomberTurretIdleSound) +{ + filename = "fx/misc/diagnostic_on.wav"; + description = ClosestLooping3d; + preload = true; +}; + +datablock AudioProfile(BomberTurretDryFireSound) +{ + filename = "fx/vehicles/bomber_turret_dryfire.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(BomberBombReloadSound) +{ + filename = "fx/vehicles/bomber_bomb_reload.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(BomberBombProjectileSound) +{ + filename = "fx/vehicles/bomber_bomb_projectile.wav"; + description = AudioDefaultLooping3d; + preload = true; +}; + +datablock AudioProfile(BomberBombDryFireSound) +{ + filename = "fx/vehicles/bomber_bomb_dryfire.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(BomberBombFireSound) +{ + filename = "fx/vehicles/bomber_bomb_reload.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(BomberBombIdleSound) +{ + filename = "fx/misc/diagnostic_on.wav"; + description = ClosestLooping3d; + preload = true; +}; + +//************************************************************** +// VEHICLE CHARACTERISTICS +//************************************************************** + +datablock FlyingVehicleData(BomberFlyer) : AirVehicleDamageProfile +{ + spawnOffset = "0 0 2"; + + catagory = "Vehicles"; + shapeFile = "vehicle_air_bomber.dts"; + multipassenger = true; + computeCRC = true; + + weaponNode = 1; + + debrisShapeName = "vehicle_air_bomber_debris.dts"; + debris = ShapeDebris; + + drag = 0.2; + density = 1.0; + + mountPose[0] = sitting; + mountPose[1] = sitting; + numMountPoints = 3; + isProtectedMountPoint[0] = true; + isProtectedMountPoint[1] = true; + isProtectedMountPoint[2] = true; + + cameraMaxDist = 22; + cameraOffset = 5; + cameraLag = 1.0; + explosion = LargeAirVehicleExplosion; + + maxDamage = 2.80; // Total health + destroyedLevel = 2.80; // Damage textures show up at this health level + + isShielded = true; + energyPerDamagePoint = 150; + maxEnergy = 400; // Afterburner and any energy weapon pool + minDrag = 60; // Linear Drag (eventually slows you down when not thrusting...constant drag) + rotationalDrag = 1800; // Angular Drag (dampens the drift after you stop moving the mouse...also tumble drag) + rechargeRate = 0.8; + + // Turbo Jet + jetForce = 5000; // Afterburner thrust (this is in addition to normal thrust) + minJetEnergy = 40.0; // Afterburner can't be used if below this threshhold. + jetEnergyDrain = 2.0; // Energy use of the afterburners (low number is less drain...can be fractional) + vertThrustMultiple = 2.0; + + // Auto stabilize speed + maxAutoSpeed = 15; // Autostabilizer kicks in when less than this speed. (meters/second) + autoAngularForce = 1500; // Angular stabilizer force (this force levels you out when autostabilizer kicks in) + autoLinearForce = 300; // Linear stabilzer force (this slows you down when autostabilizer kicks in) + autoInputDamping = 0.95; // Dampen control input so you don't whack out at very slow speeds + + // Maneuvering + maxSteeringAngle = 5; // Max radiens you can rotate the wheel. Smaller number is more maneuverable. + horizontalSurfaceForce = 5; // Horizontal center "wing" (provides "bite" into the wind for climbing/diving and turning) + verticalSurfaceForce = 8; // Vertical center "wing" (controls side slip. lower numbers make MORE slide.) + maneuveringForce = 4700; // Horizontal jets (W,S,D,A key thrust) + steeringForce = 1100; // Steering jets (force applied when you move the mouse) + steeringRollForce = 300; // Steering jets (how much you heel over when you turn) + rollForce = 8; // Auto-roll (self-correction to right you after you roll/invert) + hoverHeight = 5; // Height off the ground at rest + createHoverHeight = 3; // Height off the ground when created + + dustEmitter = LargeVehicleLiftoffDustEmitter; + triggerDustHeight = 4.0; + dustHeight = 2.0; + + damageEmitter[0] = LightDamageSmoke; + damageEmitter[1] = HeavyDamageSmoke; + damageEmitter[2] = DamageBubbles; + damageEmitterOffset[0] = "3.0 -3.0 0.0 "; + damageEmitterOffset[1] = "-3.0 -3.0 0.0 "; + damageLevelTolerance[0] = 0.3; + damageLevelTolerance[1] = 0.7; + numDmgEmitterAreas = 2; + + // Rigid body + mass = 350; // Mass of the vehicle + bodyFriction = 0; // Don't mess with this. + bodyRestitution = 0.5; // When you hit the ground, how much you rebound. (between 0 and 1) + minRollSpeed = 0; // Don't mess with this. + minImpactSpeed = 8; // If hit ground at speed above this then it's an impact. Meters/second + softImpactSpeed = 10; // Sound hooks. This is the soft hit. + hardImpactSpeed = 25; // Sound hooks. This is the hard hit. + speedDamageScale = 0.035; + + collDamageThresholdVel = 20.0; + collDamageMultiplier = 0.025; + + // + minTrailSpeed = 15; // The speed your contrail shows up at. + trailEmitter = ContrailEmitter; + forwardJetEmitter = FlyerJetEmitter; + downJetEmitter = FlyerJetEmitter; + + // + jetSound = BomberFlyerThrustSound; + engineSound = BomberFlyerEngineSound; + softImpactSound = SoftImpactSound; + hardImpactSound = HardImpactSound; + //wheelImpactSound = WheelImpactSound; + + // + softSplashSoundVelocity = 15.0; + mediumSplashSoundVelocity = 30.0; + hardSplashSoundVelocity = 60.0; + exitSplashSoundVelocity = 20.0; + + exitingWater = VehicleExitWaterHardSound; + impactWaterEasy = VehicleImpactWaterSoftSound; + impactWaterMedium = VehicleImpactWaterMediumSound; + impactWaterHard = VehicleImpactWaterHardSound; + waterWakeSound = VehicleWakeHardSplashSound; + + minMountDist = 4; + + splashEmitter[0] = VehicleFoamDropletsEmitter; + splashEmitter[1] = VehicleFoamEmitter; + + shieldImpact = VehicleShieldImpact; + + cmdCategory = "Tactical"; + cmdIcon = CMDFlyingBomberIcon; + cmdMiniIconName = "commander/MiniIcons/com_bomber_grey"; + targetNameTag = 'Thundersword'; + targetTypeTag = 'Bomber'; + sensorData = VehiclePulseSensor; + + checkRadius = 7.1895; + observeParameters = "1 10 10"; +}; + +//************************************************************** +// WEAPONS +//************************************************************** + +//------------------------------------- +// BOMBER BELLY TURRET GUN (projectile) +//------------------------------------- + +datablock ShockwaveData(BomberFusionShockwave) +{ + width = 0.5; + numSegments = 13; + numVertSegments = 1; + velocity = 0.5; + acceleration = 2.0; + lifetimeMS = 900; + height = 0.1; + verticalCurve = 0.5; + + mapToTerrain = false; + renderBottom = false; + orientToNormal = true; + + texture[0] = "special/shockwave5"; + texture[1] = "special/gradient"; + texWrap = 3.0; + + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + + colors[0] = "0.6 0.6 1.0 1.0"; + colors[1] = "0.6 0.3 1.0 0.5"; + colors[2] = "0.0 0.0 1.0 0.0"; +}; + +datablock ParticleData(BomberFusionExplosionParticle1) +{ + dragCoefficient = 2; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + constantAcceleration = -0.0; + lifetimeMS = 600; + lifetimeVarianceMS = 000; + textureName = "special/crescent4"; + colors[0] = "0.6 0.6 1.0 1.0"; + colors[1] = "0.6 0.3 1.0 1.0"; + colors[2] = "0.0 0.0 1.0 0.0"; + sizes[0] = 0.25; + sizes[1] = 0.5; + sizes[2] = 1.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(BomberFusionExplosionEmitter) +{ + ejectionPeriodMS = 7; + periodVarianceMS = 0; + ejectionVelocity = 2; + velocityVariance = 1.5; + ejectionOffset = 0.0; + thetaMin = 80; + thetaMax = 90; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 200; + particles = "BomberFusionExplosionParticle1"; +}; + +datablock ExplosionData(BomberFusionBoltExplosion) +{ + soundProfile = blasterExpSound; + shockwave = BomberFusionShockwave; + emitter[0] = BomberFusionExplosionEmitter; +}; + + +datablock LinearFlareProjectileData(BomberFusionBolt) +{ + projectileShapeName = ""; + directDamage = 0.35; + directDamageType = $DamageType::BellyTurret; + hasDamageRadius = false; + explosion = BomberFusionBoltExplosion; + sound = BlasterProjectileSound; + + dryVelocity = 75.0; + wetVelocity = 75.0; + velInheritFactor = 1.0; + fizzleTimeMS = 2000; + lifetimeMS = 3000; + explodeOnDeath = false; + reflectOnWaterImpactAngle = 0.0; + explodeOnWaterImpact = true; + deflectionOnWaterImpact = 0.0; + fizzleUnderwaterMS = -1; + + activateDelayMS = 100; + + numFlares = 0; + size = 0.15; + flareColor = "0.7 0.3 1.0"; + flareModTexture = "flaremod"; + flareBaseTexture = "flarebase"; +}; + +//------------------------------------- +// BOMBER BELLY TURRET CHARACTERISTICS +//------------------------------------- + +datablock TurretData(BomberTurret) : TurretDamageProfile +{ + className = VehicleTurret; + catagory = "Turrets"; + shapeFile = "turret_belly_base.dts"; + preload = true; + + mass = 1.0; // Not really relevant + repairRate = 0; + maxDamage = BomberFlyer.maxDamage; + destroyedLevel = BomberFlyer.destroyedLevel; + + thetaMin = 90; + thetaMax = 180; + + inheritEnergyFromMount = true; + firstPersonOnly = true; + useEyePoint = true; + numWeapons = 3; + + targetNameTag = 'Thundersword Belly'; + targetTypeTag = 'Turret'; +}; + +datablock TurretImageData(BomberTurretBarrelPair) +{ + shapeFile = "turret_belly_barrell.dts"; + mountPoint = 0; + + projectile = BomberFusionBolt; + projectileType = LinearFlareProjectile; + + usesEnergy = true; + useMountEnergy = true; + fireEnergy = 6.25; + minEnergy = 25.0; + + // Turret parameters + activationMS = 1000; + deactivateDelayMS = 1500; + thinkTimeMS = 200; + degPerSecTheta = 360; + degPerSecPhi = 360; + + attackRadius = 75; + + // State transitions + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "WaitFire"; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; + stateSound[0] = BomberTurretActivateSound; + + stateName[1] = "WaitFire"; + stateTransitionOnTriggerDown[1] = "InitFire"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; +// stateSound[1] = BomberTurretIdleSound; + + stateName[2] = "InitFire"; + stateWaitForTimeout[2] = false; + stateTransitionOnTimeout[2] = "Fire"; + + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.35; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateSequence[3] = "Fire"; + stateScript[3] = "onFire"; + stateSound[3] = BomberTurretFireSound; + + stateName[4] = "Reload"; + stateTimeoutValue[4] = 0.05; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; + stateTransitionOnTimeout[4] = "WaitFire"; + stateTransitionOnNotLoaded[4] = "NoAmmo"; +// stateSound[4] = BomberTurretReloadSound; + + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; + + stateName[6] = "DryFire"; + stateSound[6] = BomberTurretDryFireSound; + stateTimeoutValue[6] = 1.5; + stateTransitionOnTimeout[6] = "NoAmmo"; + +}; + +datablock TurretImageData(BomberTurretBarrel) : BomberTurretBarrelPair +{ + shapeFile = "turret_belly_barrelr.dts"; + mountPoint = 1; + stateScript[2] = "onTriggerDown"; + stateScript[4] = "onTriggerUp"; +}; + +datablock TurretImageData(AIAimingTurretBarrel) +{ + shapeFile = "turret_muzzlepoint.dts"; + mountPoint = 3; + + projectile = BomberFusionBolt; + + // Turret parameters + activationMS = 1000; + deactivateDelayMS = 1500; + thinkTimeMS = 200; + degPerSecTheta = 500; + degPerSecPhi = 800; + + attackRadius = 75; +}; + +//------------------------------------- +// BOMBER BOMB PROJECTILE +//------------------------------------- + +datablock BombProjectileData(BomberBomb) +{ + projectileShapeName = "bomb.dts"; + emitterDelay = -1; + directDamage = 0.0; + hasDamageRadius = true; + indirectDamage = 1.1; + damageRadius = 30; + radiusDamageType = $DamageType::BomberBombs; + kickBackStrength = 2500; + + explosion = "VehicleBombExplosion"; + velInheritFactor = 1.0; + + grenadeElasticity = 0.25; + grenadeFriction = 0.4; + armingDelayMS = 2000; + muzzleVelocity = 0.1; + drag = 0.3; + + minRotSpeed = "60.0 0.0 0.0"; + maxRotSpeed = "80.0 0.0 0.0"; + scale = "1.0 1.0 1.0"; + + sound = BomberBombProjectileSound; +}; + +//------------------------------------- +// BOMBER BOMB CHARACTERISTICS +//------------------------------------- + +datablock ItemData(BombAmmo) +{ + className = Ammo; + catagory = "Ammo"; + shapeFile = "repair_kit.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 1; + computeCRC = true; +}; + +datablock StaticShapeData(DropBombs) +{ + catagory = "Turrets"; + shapeFile = "bombers_eye.dts"; + maxDamage = 1.0; + disabledLevel = 0.6; + destroyedLevel = 0.8; +}; + +datablock ShapeBaseImageData(BomberBombPairImage) +{ + className = WeaponImage; + shapeFile = "turret_muzzlepoint.dts"; +// ammo = BombAmmo; + offset = "2 -4 -0.5"; + mountPoint = 10; + + projectile = BomberBomb; + projectileType = BombProjectile; + usesEnergy = true; + useMountEnergy = true; + + fireEnergy = 37.50; + minEnergy = 37.50; + + stateName[0] = "Activate"; +// stateTransitionOnTimeout[0] = "ActivateReady"; + stateTransitionOnTimeout[0] = "WaitFire"; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; +// stateSound[0] = MortarSwitchSound; + + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "WaitFire"; +// stateTransitionOnNoAmmo[1] = "NoAmmo"; + + stateName[2] = "WaitFire"; +// stateSound[2] = BomberBombIdleSound; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "InitFire"; + + stateName[3] = "InitFire"; + stateWaitForTimeout[3] = false; + stateTransitionOnTimeout[3] = "Fire"; + + stateName[4] = "Fire"; + stateTransitionOnTimeout[4] = "Reload"; + stateTimeoutValue[4] = 0.35; + stateFire[4] = true; + stateRecoil[4] = LightRecoil; + stateAllowImageChange[4] = false; + stateScript[4] = "onFire"; + stateSound[4] = BomberBombFireSound; + + stateName[5] = "Reload"; + stateTransitionOnNoAmmo[5] = "NoAmmo"; + stateTransitionOnTimeout[5] = "WaitFire"; + stateTimeoutValue[5] = 0.5; + stateAllowImageChange[5] = false; + stateSequence[5] = "Reload"; +// stateSound[5] = BomberBombReloadSound; + + stateName[6] = "NoAmmo"; + stateTransitionOnAmmo[6] = "Reload"; + stateSequence[6] = "NoAmmo"; + stateTransitionOnTriggerDown[6] = "DryFire"; + + stateName[7] = "DryFire"; + stateSound[7] = BomberBombDryFireSound; + stateTimeoutValue[7] = 1.5; + stateTransitionOnTimeout[7] = "NoAmmo"; + +}; + +datablock ShapeBaseImageData(BomberBombImage) : BomberBombPairImage +{ + offset = "-2 -4 -0.5"; + stateScript[3] = "onTriggerDown"; + stateScript[5] = "onTriggerUp"; +}; + +//************************************************************** +// WEAPONS SPECIAL EFFECTS +//************************************************************** + +//------------------------------------- +// BOMBER BELLY TURRET GUN (explosion) +//------------------------------------- + +datablock ParticleData(FusionExplosionParticle) +{ + dragCoefficient = 2; + gravityCoefficient = 0.2; + inheritedVelFactor = 0.2; + constantAcceleration = 0.0; + lifetimeMS = 750; + lifetimeVarianceMS = 150; + textureName = "particleTest"; + colors[0] = "0.56 0.36 0.26 1.0"; + colors[1] = "0.56 0.36 0.26 0.0"; + sizes[0] = 1; + sizes[1] = 2; +}; + +datablock ParticleEmitterData(FusionExplosionEmitter) +{ + ejectionPeriodMS = 7; + periodVarianceMS = 0; + ejectionVelocity = 12; + velocityVariance = 1.75; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 60; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + particles = "FusionExplosionParticle"; +}; + +datablock ExplosionData(FusionBoltExplosion) +{ + explosionShape = "effect_plasma_explosion.dts"; + soundProfile = FusionExpSound; + particleEmitter = FusionExplosionEmitter; + particleDensity = 250; + particleRadius = 1.25; + faceViewer = true; +}; + +//-------------------------------------------------------------------------- +// BOMBER TARGETING LASER +//-------------------------------------------------------------------------- + +datablock AudioProfile(BomberTargetingSwitchSound) +{ + filename = "fx/weapons/generic_switch.wav"; + description = AudioClosest3d; + preload = true; +}; + +datablock AudioProfile(BomberTargetingPaintSound) +{ + filename = "fx/weapons/targetinglaser_paint.wav"; + description = CloseLooping3d; + preload = true; +}; + +//-------------------------------------- +// BOMBER TARGETING PROJECTILE +//-------------------------------------- +datablock TargetProjectileData(BomberTargeter) +{ + directDamage = 0.0; + hasDamageRadius = false; + indirectDamage = 0.0; + damageRadius = 0.0; + velInheritFactor = 1.0; + + maxRifleRange = 1000; + beamColor = "0.1 1.0 0.1"; + + startBeamWidth = 0.20; + pulseBeamWidth = 0.15; + beamFlareAngle = 3.0; + minFlareSize = 0.0; + maxFlareSize = 400.0; + pulseSpeed = 6.0; + pulseLength = 0.150; + + textureName[0] = "special/nonlingradient"; + textureName[1] = "special/flare"; + textureName[2] = "special/pulse"; + textureName[3] = "special/expFlare"; + beacon = true; + beaconType = vehicle; +}; + +//------------------------------------- +// BOMBER TARGETING CHARACTERISTICS +//------------------------------------- +datablock ShapeBaseImageData(BomberTargetingImage) +{ + className = WeaponImage; + + shapeFile = "turret_muzzlepoint.dts"; + offset = "0 -0.04 -0.01"; + mountPoint = 2; + + projectile = BomberTargeter; + projectileType = TargetProjectile; + deleteLastProjectile = true; + + usesEnergy = true; + minEnergy = 3; + + stateName[0] = "Activate"; + stateSequence[0] = "Activate"; + stateSound[0] = BomberTargetingSwitchSound; + stateTimeoutValue[0] = 0.5; + stateTransitionOnTimeout[0] = "ActivateReady"; + + stateName[1] = "ActivateReady"; + stateTransitionOnAmmo[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; + + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "Fire"; + + stateName[3] = "Fire"; + stateEnergyDrain[3] = 3; + stateFire[3] = true; + stateAllowImageChange[3] = false; + stateScript[3] = "onFire"; + stateTransitionOnTriggerUp[3] = "Deconstruction"; + stateTransitionOnNoAmmo[3] = "Deconstruction"; + stateSound[3] = BomberTargetingPaintSound; + + stateName[4] = "NoAmmo"; + stateTransitionOnAmmo[4] = "Ready"; + + stateName[5] = "Deconstruction"; +// Deconstruct is now being called from weapTurretCode.cs +// stateScript[5] = "deconstruct"; + stateTransitionOnTimeout[5] = "ActivateReady"; + stateTimeoutValue[5] = 0.05; +}; + +function BomberTargetingImage::onFire(%data,%obj,%slot) +{ + if( %obj.isCloaked() ) + { + %obj.setCloaked( false ); + %obj.reCloak = %obj.schedule( 500, "setCloaked", true ); + } + %bomber = %obj.getObjectMount(); + if(%bomber.beacon) + { + %bomber.beacon.delete(); + %bomber.beacon = ""; + } + %p = Parent::onFire(%data, %obj, %slot); + %p.setTarget(%obj.team); +} + +function BomberTargetingImage::deconstruct(%data, %obj, %slot) +{ + %pos = %obj.lastProjectile.getTargetPoint(); + %bomber = %obj.getObjectMount(); + + if(%bomber.beacon) + { + %bomber.beacon.delete(); + %bomber.beacon = ""; + } + %bomber.beacon = new ScopeAlwaysShape() { + dataBlock = "BomberBeacon"; + position = %pos; + }; + + %bomber.beacon.playThread($AmbientThread, "ambient"); + %bomber.beacon.team = %bomber.team; + %bomber.beacon.sourceObject = %bomber; + + // give it a team target + %bomber.beacon.setTarget(%bomber.team); + MissionCleanup.add(%bomber.beacon); + + Parent::deconstruct(%data, %obj, %slot); +} + +//------------------------------------- +// BOMBER BEACON +//------------------------------------- +datablock StaticShapeData(BomberBeacon) +{ + shapeFile = "turret_muzzlepoint.dts"; + beacon = true; + targetNameTag = 'beacon'; + beaconType = vehicle; + isInvincible = true; + + dynamicType = $TypeMasks::SensorObjectType; +}; + diff --git a/base/scripts/vehicles/vehicle_havoc.cs b/base/scripts/vehicles/vehicle_havoc.cs new file mode 100644 index 0000000..2b6dbb3 --- /dev/null +++ b/base/scripts/vehicles/vehicle_havoc.cs @@ -0,0 +1,199 @@ +//************************************************************** +// HAVOC HEAVY TRANSPORT FLIER +//************************************************************** +//************************************************************** +// SOUNDS +//************************************************************** + +datablock AudioProfile(HAPCFlyerEngineSound) +{ + filename = "fx/vehicles/htransport_thrust.wav"; + description = AudioDefaultLooping3d; +}; + +datablock AudioProfile(HAPCFlyerThrustSound) +{ + filename = "fx/vehicles/htransport_boost.wav"; + description = AudioDefaultLooping3d; +}; + +//************************************************************** +// VEHICLE CHARACTERISTICS +//************************************************************** + +datablock FlyingVehicleData(HAPCFlyer) : AirVehicleDamageProfile +{ + spawnOffset = "0 0 6"; + + catagory = "Vehicles"; + shapeFile = "vehicle_air_hapc.dts"; + multipassenger = true; + computeCRC = true; + + + debrisShapeName = "vehicle_air_hapc_debris.dts"; + debris = ShapeDebris; + + drag = 0.2; + density = 1.0; + + mountPose[0] = sitting; +// mountPose[1] = sitting; + numMountPoints = 6; + isProtectedMountPoint[0] = true; + isProtectedMountPoint[1] = true; + isProtectedMountPoint[2] = true; + isProtectedMountPoint[3] = true; + isProtectedMountPoint[4] = true; + isProtectedMountPoint[5] = true; + + cameraMaxDist = 17; + cameraOffset = 2; + cameraLag = 8.5; + explosion = LargeAirVehicleExplosion; + + maxDamage = 3.50; + destroyedLevel = 3.50; + + isShielded = true; + rechargeRate = 0.8; + energyPerDamagePoint = 200; + maxEnergy = 550; + minDrag = 100; // Linear Drag + rotationalDrag = 2700; // Anguler Drag + + // Auto stabilize speed + maxAutoSpeed = 10; + autoAngularForce = 3000; // Angular stabilizer force + autoLinearForce = 450; // Linear stabilzer force + autoInputDamping = 0.95; // + + // Maneuvering + maxSteeringAngle = 8; + horizontalSurfaceForce = 10; // Horizontal center "wing" + verticalSurfaceForce = 10; // Vertical center "wing" + maneuveringForce = 6000; // Horizontal jets + steeringForce = 1000; // Steering jets + steeringRollForce = 400; // Steering jets + rollForce = 12; // Auto-roll + hoverHeight = 8; // Height off the ground at rest + createHoverHeight = 6; // Height off the ground when created + + // Turbo Jet + jetForce = 5000; + minJetEnergy = 55; + jetEnergyDrain = 2.8; + vertThrustMultiple = 2.0; + + + dustEmitter = LargeVehicleLiftoffDustEmitter; + triggerDustHeight = 4.0; + dustHeight = 2.0; + + damageEmitter[0] = LightDamageSmoke; + damageEmitter[1] = HeavyDamageSmoke; + damageEmitter[2] = DamageBubbles; + damageEmitterOffset[0] = "3.0 -3.0 0.0 "; + damageEmitterOffset[1] = "-3.0 -3.0 0.0 "; + damageLevelTolerance[0] = 0.3; + damageLevelTolerance[1] = 0.7; + numDmgEmitterAreas = 2; + + // Rigid body + mass = 550; + bodyFriction = 0; + bodyRestitution = 0.3; + minRollSpeed = 0; + minImpactSpeed = 8; // If hit ground at speed above this then it's an impact. Meters/second + softImpactSpeed = 10; // Sound hooks. This is the soft hit. + hardImpactSpeed = 25; // Sound hooks. This is the hard hit. + speedDamageScale = 0.03; + + collDamageThresholdVel = 20.0; + collDamageMultiplier = 0.03; + + // + minTrailSpeed = 15; + trailEmitter = ContrailEmitter; + forwardJetEmitter = FlyerJetEmitter; + downJetEmitter = FlyerJetEmitter; + + // + jetSound = HAPCFlyerThrustSound; + engineSound = HAPCFlyerEngineSound; + softImpactSound = SoftImpactSound; + hardImpactSound = HardImpactSound; + //wheelImpactSound = WheelImpactSound; + + // + softSplashSoundVelocity = 15.0; + mediumSplashSoundVelocity = 30.0; + hardSplashSoundVelocity = 60.0; + exitSplashSoundVelocity = 20.0; + + exitingWater = VehicleExitWaterHardSound; + impactWaterEasy = VehicleImpactWaterSoftSound; + impactWaterMedium = VehicleImpactWaterMediumSound; + impactWaterHard = VehicleImpactWaterHardSound; + waterWakeSound = VehicleWakeHardSplashSound; + + minMountDist = 4; + + splashEmitter[0] = VehicleFoamDropletsEmitter; + splashEmitter[1] = VehicleFoamEmitter; + + shieldImpact = VehicleShieldImpact; + + cmdCategory = "Tactical"; + cmdIcon = CMDFlyingHAPCIcon; + cmdMiniIconName = "commander/MiniIcons/com_hapc_grey"; + targetNameTag = 'Havoc'; + targetTypeTag = 'Flying Vehicle'; + sensorData = VehiclePulseSensor; + + checkRadius = 7.8115; + observeParameters = "1 15 15"; +}; + +function HAPCFlyer::hasDismountOverrides(%data, %obj) +{ + return true; +} + +function HAPCFlyer::getDismountOverride(%data, %obj, %mounted) +{ + %node = -1; + for (%i = 0; %i < %data.numMountPoints; %i++) + { + if (%obj.getMountNodeObject(%i) == %mounted) + { + %node = %i; + break; + } + } + if (%node == -1) + { + warning("Couldn't find object mount point"); + return "0 0 1"; + } + + if (%node == 3 || %node == 2) + { + return "-1 0 1"; + } + else if (%node == 5 || %node == 4) + { + return "1 0 1"; + } + else + { + return "0 0 1"; + } +} + +//************************************************************** +// WEAPONS +//************************************************************** + + + diff --git a/base/scripts/vehicles/vehicle_mpb.cs b/base/scripts/vehicles/vehicle_mpb.cs new file mode 100644 index 0000000..39304d6 --- /dev/null +++ b/base/scripts/vehicles/vehicle_mpb.cs @@ -0,0 +1,259 @@ +//************************************************************** +// JERICHO FORWARD BASE (Mobile Point Base) +//************************************************************** +//************************************************************** +// SOUNDS +//************************************************************** + +datablock AudioProfile(MPBEngineSound) +{ + filename = "fx/vehicles/mpb_thrust.wav"; + description = AudioDefaultLooping3d; + preload = true; +}; + +datablock AudioProfile(MPBThrustSound) +{ + filename = "fx/vehicles/mpb_boost.wav"; + description = AudioDefaultLooping3d; + preload = true; +}; + +datablock AudioProfile(MobileBaseDeploySound) +{ + filename = "fx/vehicles/MPB_deploy.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(MobileBaseUndeploySound) +{ + filename = "fx/vehicles/MPB_undeploy_turret.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(MobileBaseTurretDeploySound) +{ + filename = "fx/vehicles/MPB_deploy_turret.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(MobileBaseTurretUndeploySound) +{ + filename = "fx/vehicles/MPB_undeploy_turret.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(MobileBaseStationDeploySound) +{ + filename = "fx/vehicles/MPB_deploy_station.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(MobileBaseStationUndeploySound) +{ + filename = "fx/vehicles/MPB_close_lid.wav"; + description = AudioClose3d; + preload = true; +}; + +//************************************************************** +// VEHICLE CHARACTERISTICS +//************************************************************** +datablock SensorData(MPBDeployedSensor) : VehiclePulseSensor +{ + jams = true; + jamsOnlyGroup = true; + jamsUsingLOS = false; + jamRadius = 50; +}; + +datablock WheeledVehicleData(MobileBaseVehicle) : GroundVehicleDamageProfile +{ + spawnOffset = "0 0 1.0"; + + catagory = "Vehicles"; + shapeFile = "vehicle_land_mpbase.dts"; + multipassenger = false; + computeCRC = true; + + debrisShapeName = "vehicle_land_mpbase_debris.dts"; + debris = ShapeDebris; + + drag = 0.0; + density = 20.0; + + mountPose[0] = sitting; + numMountPoints = 1; + isProtectedMountPoint[0] = true; + + cantAbandon = 1; + cantTeamSwitch = 1; + + cameraMaxDist = 20; + cameraOffset = 6; + cameraLag = 1.5; + explosion = LargeGroundVehicleExplosion; + + noEnemyControl = 1; + + maxSteeringAngle = 0.3; // 20 deg. + + // Used to test if the station can deploy + stationPoints[1] = "-2.3 -7.38703 -0.65"; + stationPoints[2] = "-2.3 -11.8 -0.65"; + stationPoints[3] = "0 -7.38703 -0.65"; + stationPoints[4] = "0 -11.8 -0.65"; + stationPoints[5] = "2.3 -7.38703 -0.65"; + stationPoints[6] = "2.3 -11.8 -0.65"; + + collDamageThresholdVel = 10.0; + collDamageMultiplier = 0.025; + + // Rigid Body + mass = 2000; + bodyFriction = 0.8; + bodyRestitution = 0.5; + minRollSpeed = 3; + gyroForce = 400; + gyroDamping = 0.3; + stabilizerForce = 10; + minDrag = 10; + minImpactSpeed = 5; + softImpactSpeed = 13; // Play SoftImpact Sound + hardImpactSpeed = 20; // Play HardImpact Sound + speedDamageScale = 0.06; + + // Engine + engineTorque = 4.5 * 745; + breakTorque = 4.5 * 745; + maxWheelSpeed = 20; + + // Springs + springForce = 8000; + springDamping = 1300; + antiSwayForce = 6000; + staticLoadScale = 2; + + // Tires + tireRadius = 1.6; + tireFriction = 2.0; + tireRestitution = 0.5; + tireLateralForce = 3000; + tireLateralDamping = 400; + tireLateralRelaxation = 1; + tireLongitudinalForce = 12000; + tireLongitudinalDamping = 600; + tireLongitudinalRelaxation = 1; + tireEmitter = TireEmitter; + + // + maxDamage = 3.85; + destroyedLevel = 3.85; + + isShielded = true; + energyPerDamagePoint = 125; + maxEnergy = 600; + jetForce = 2000; + minJetEnergy = 60; + jetEnergyDrain = 2.75; + rechargeRate = 1.0; + + jetSound = MPBThrustSound; + engineSound = MPBEngineSound; + squeelSound = AssaultVehicleSkid; + softImpactSound = GravSoftImpactSound; + hardImpactSound = HardImpactSound; + wheelImpactSound = WheelImpactSound; + + // + softSplashSoundVelocity = 15.0; + mediumSplashSoundVelocity = 30.0; + hardSplashSoundVelocity = 60.0; + exitSplashSoundVelocity = 20.0; + + exitingWater = VehicleExitWaterSoftSound; + impactWaterEasy = VehicleImpactWaterSoftSound; + impactWaterMedium = VehicleImpactWaterMediumSound; + impactWaterHard = VehicleImpactWaterHardSound; + waterWakeSound = VehicleWakeMediumSplashSound; + + minMountDist = 3; + + damageEmitter[0] = LightDamageSmoke; + damageEmitter[1] = HeavyDamageSmoke; + damageEmitter[2] = DamageBubbles; + damageEmitterOffset[0] = "3.0 0.5 0.0 "; + damageEmitterOffset[1] = "-3.0 0.5 0.0 "; + damageLevelTolerance[0] = 0.3; + damageLevelTolerance[1] = 0.7; + numDmgEmitterAreas = 2; + + splashEmitter[0] = VehicleFoamDropletsEmitter; + splashEmitter[1] = VehicleFoamEmitter; + + shieldImpact = VehicleShieldImpact; + + cmdCategory = "Tactical"; + cmdIcon = CMDGroundMPBIcon; + cmdMiniIconName = "commander/MiniIcons/com_mpb_grey"; + targetNameTag = 'Jericho'; + targetTypeTag = 'MPB'; + sensorData = VehiclePulseSensor; + + checkRadius = 7.5225; + + observeParameters = "1 12 12"; +}; + +//************************************************************** +// WEAPONS +//************************************************************** + +datablock SensorData(MPBTurretMissileSensor) +{ + detects = true; + detectsUsingLOS = true; + detectsPassiveJammed = false; + detectsActiveJammed = false; + detectsCloaked = false; + detectionPings = true; + detectRadius = 200; +}; + +datablock TurretData(MobileTurretBase) +{ + className = VehicleTurret; + catagory = "Turrets"; + shapeFile = "turret_base_mpb.dts"; + preload = true; + + mass = 1.0; // Not really relevant + + maxDamage = MobileBaseVehicle.maxDamage; + destroyedLevel = MobileBaseVehicle.destroyedLevel; + + thetaMin = 15; + thetaMax = 140; + + energyPerDamagePoint = 33; + inheritEnergyFromMount = true; + firstPersonOnly = true; + + sensorColor = "0 212 45"; + sensorData = MPBTurretMissileSensor; + sensorRadius = MPBTurretMissileSensor.detectRadius; + cmdCategory = "Tactical"; + cmdMiniIconName = "commander/MiniIcons/com_turret_grey"; + targetNameTag = 'Jericho'; + targetTypeTag = 'Turret'; + + canControl = true; +}; + + + diff --git a/base/scripts/vehicles/vehicle_shrike.cs b/base/scripts/vehicles/vehicle_shrike.cs new file mode 100644 index 0000000..8d3e276 --- /dev/null +++ b/base/scripts/vehicles/vehicle_shrike.cs @@ -0,0 +1,276 @@ +//************************************************************** +// SHRIKE SCOUT FLIER +//************************************************************** +//************************************************************** +// SOUNDS +//************************************************************** + +datablock AudioProfile(ScoutFlyerThrustSound) +{ + filename = "fx/vehicles/shrike_boost.wav"; + description = AudioDefaultLooping3d; + preload = true; +}; + +datablock AudioProfile(ScoutFlyerEngineSound) +{ + filename = "fx/vehicles/shrike_engine.wav"; + description = AudioDefaultLooping3d; + preload = true; +}; + +datablock AudioProfile(ShrikeBlasterFire) +{ + filename = "fx/vehicles/shrike_blaster.wav"; + description = AudioDefault3d; + preload = true; +}; + +datablock AudioProfile(ShrikeBlasterProjectile) +{ + filename = "fx/weapons/shrike_blaster_projectile.wav"; + description = ProjectileLooping3d; + preload = true; +}; + +datablock AudioProfile(ShrikeBlasterDryFireSound) +{ + filename = "fx/weapons/chaingun_dryfire.wav"; + description = AudioClose3d; + preload = true; +}; + +//************************************************************** +// VEHICLE CHARACTERISTICS +//************************************************************** + +datablock FlyingVehicleData(ScoutFlyer) : AirVehicleDamageProfile +{ + spawnOffset = "0 0 2"; + + catagory = "Vehicles"; + shapeFile = "vehicle_air_scout.dts"; + multipassenger = false; + computeCRC = true; + + debrisShapeName = "vehicle_air_scout_debris.dts"; + debris = ShapeDebris; + + drag = 0.15; + density = 1.0; + + mountPose[0] = sitting; + numMountPoints = 1; + isProtectedMountPoint[0] = true; + cameraMaxDist = 15; + cameraOffset = 2.5; + cameraLag = 0.9; + explosion = VehicleExplosion; + + maxDamage = 1.40; + destroyedLevel = 1.40; + + isShielded = true; + energyPerDamagePoint = 160; + maxEnergy = 280; // Afterburner and any energy weapon pool + minDrag = 30; // Linear Drag (eventually slows you down when not thrusting...constant drag) + rotationalDrag = 900; // Anguler Drag (dampens the drift after you stop moving the mouse...also tumble drag) + rechargeRate = 0.8; + + // Turbo Jet + jetForce = 2000; // Afterburner thrust (this is in addition to normal thrust) + minJetEnergy = 28; // Afterburner can't be used if below this threshhold. + vertThrustMultiple = 2.0; + + jetEnergyDrain = 2.8; // Energy use of the afterburners (low number is less drain...can be fractional) // Auto stabilize speed + maxAutoSpeed = 15; // Autostabilizer kicks in when less than this speed. (meters/second) + autoAngularForce = 400; // Angular stabilizer force (this force levels you out when autostabilizer kicks in) + autoLinearForce = 300; // Linear stabilzer force (this slows you down when autostabilizer kicks in) + autoInputDamping = 0.95; // Dampen control input so you don't` whack out at very slow speeds + + // Maneuvering + maxSteeringAngle = 5; // Max radiens you can rotate the wheel. Smaller number is more maneuverable. + horizontalSurfaceForce = 6; // Horizontal center "wing" (provides "bite" into the wind for climbing/diving and turning) + verticalSurfaceForce = 4; // Vertical center "wing" (controls side slip. lower numbers make MORE slide.) + maneuveringForce = 3000; // Horizontal jets (W,S,D,A key thrust) + steeringForce = 1200; // Steering jets (force applied when you move the mouse) + steeringRollForce = 400; // Steering jets (how much you heel over when you turn) + rollForce = 4; // Auto-roll (self-correction to right you after you roll/invert) + hoverHeight = 5; // Height off the ground at rest + createHoverHeight = 3; // Height off the ground when created + + // Rigid body + mass = 150; // Mass of the vehicle + bodyFriction = 0; // Don't mess with this. + bodyRestitution = 0.5; // When you hit the ground, how much you rebound. (between 0 and 1) + minRollSpeed = 0; // Don't mess with this. + minImpactSpeed = 8; // If hit ground at speed above this then it's an impact. Meters/second + softImpactSpeed = 10; // Sound hooks. This is the soft hit. + hardImpactSpeed = 25; // Sound hooks. This is the hard hit. + speedDamageScale = 0.04; + + collDamageThresholdVel = 20.0; + collDamageMultiplier = 0.02; + + // + minTrailSpeed = 15; // The speed your contrail shows up at. + trailEmitter = ContrailEmitter; + forwardJetEmitter = FlyerJetEmitter; + downJetEmitter = FlyerJetEmitter; + + // + jetSound = ScoutFlyerThrustSound; + engineSound = ScoutFlyerEngineSound; + softImpactSound = SoftImpactSound; + hardImpactSound = HardImpactSound; + //wheelImpactSound = WheelImpactSound; + + // + softSplashSoundVelocity = 15.0; + mediumSplashSoundVelocity = 30.0; + hardSplashSoundVelocity = 60.0; + exitSplashSoundVelocity = 20.0; + + exitingWater = VehicleExitWaterMediumSound; + impactWaterEasy = VehicleImpactWaterSoftSound; + impactWaterMedium = VehicleImpactWaterMediumSound; + impactWaterHard = VehicleImpactWaterMediumSound; + waterWakeSound = VehicleWakeMediumSplashSound; + + dustEmitter = VehicleLiftoffDustEmitter; + triggerDustHeight = 4.0; + dustHeight = 1.0; + + damageEmitter[0] = LightDamageSmoke; + damageEmitter[1] = HeavyDamageSmoke; + damageEmitter[2] = DamageBubbles; + damageEmitterOffset[0] = "0.0 -3.0 0.0 "; + damageLevelTolerance[0] = 0.3; + damageLevelTolerance[1] = 0.7; + numDmgEmitterAreas = 1; + + // + max[chaingunAmmo] = 1000; + + minMountDist = 4; + + splashEmitter[0] = VehicleFoamDropletsEmitter; + splashEmitter[1] = VehicleFoamEmitter; + + shieldImpact = VehicleShieldImpact; + + cmdCategory = "Tactical"; + cmdIcon = CMDFlyingScoutIcon; + cmdMiniIconName = "commander/MiniIcons/com_scout_grey"; + targetNameTag = 'Shrike'; + targetTypeTag = 'Flying Vehicle'; + sensorData = AWACPulseSensor; + sensorRadius = AWACPulseSensor.detectRadius; + sensorColor = "255 194 9"; + + checkRadius = 5.5; + observeParameters = "1 10 10"; +}; + +//************************************************************** +// WEAPONS +//************************************************************** + +datablock ShapeBaseImageData(ScoutChaingunPairImage) +{ + className = WeaponImage; + shapeFile = "weapon_energy_vehicle.dts"; + item = Chaingun; + ammo = ChaingunAmmo; + projectile = ScoutChaingunBullet; + projectileType = TracerProjectile; + mountPoint = 10; + offset = ".73 0 0"; + + usesEnergy = true; + useMountEnergy = true; + // DAVEG -- balancing numbers below! + minEnergy = 5; + fireEnergy = 5; + fireTimeout = 125; + + //-------------------------------------- + stateName[0] = "Activate"; + stateSequence[0] = "Activate"; + stateAllowImageChange[0] = false; + stateTimeoutValue[0] = 0.05; + stateTransitionOnTimeout[0] = "Ready"; + stateTransitionOnNoAmmo[0] = "NoAmmo"; + //-------------------------------------- + stateName[1] = "Ready"; + stateSpinThread[1] = Stop; + stateTransitionOnTriggerDown[1] = "Spinup"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; + //-------------------------------------- + stateName[2] = "NoAmmo"; + stateTransitionOnAmmo[2] = "Ready"; + stateSpinThread[2] = Stop; + stateTransitionOnTriggerDown[2] = "DryFire"; + //-------------------------------------- + stateName[3] = "Spinup"; + stateSpinThread[3] = SpinUp; + stateTimeoutValue[3] = 0.01; + stateWaitForTimeout[3] = false; + stateTransitionOnTimeout[3] = "Fire"; + stateTransitionOnTriggerUp[3] = "Spindown"; + //-------------------------------------- + stateName[4] = "Fire"; + stateSpinThread[4] = FullSpeed; + stateRecoil[4] = LightRecoil; + stateAllowImageChange[4] = false; + stateScript[4] = "onFire"; + stateFire[4] = true; + stateSound[4] = ShrikeBlasterFire; + // IMPORTANT! The stateTimeoutValue below has been replaced by fireTimeOut + // above. + stateTimeoutValue[4] = 0.25; + stateTransitionOnTimeout[4] = "checkState"; + //-------------------------------------- + stateName[5] = "Spindown"; + stateSpinThread[5] = SpinDown; + stateTimeoutValue[5] = 0.01; + stateWaitForTimeout[5] = false; + stateTransitionOnTimeout[5] = "Ready"; + stateTransitionOnTriggerDown[5] = "Spinup"; + //-------------------------------------- + stateName[6] = "EmptySpindown"; +// stateSound[6] = ChaingunSpindownSound; + stateSpinThread[6] = SpinDown; + stateTransitionOnAmmo[6] = "Ready"; + stateTimeoutValue[6] = 0.01; + stateTransitionOnTimeout[6] = "NoAmmo"; + //-------------------------------------- + stateName[7] = "DryFire"; + stateSound[7] = ShrikeBlasterDryFireSound; + stateTransitionOnTriggerUp[7] = "NoAmmo"; + stateTimeoutValue[7] = 0.25; + stateTransitionOnTimeout[7] = "NoAmmo"; + + stateName[8] = "checkState"; + stateTransitionOnTriggerUp[8] = "Spindown"; + stateTransitionOnNoAmmo[8] = "EmptySpindown"; + stateTimeoutValue[8] = 0.01; + stateTransitionOnTimeout[8] = "ready"; +}; + +datablock ShapeBaseImageData(ScoutChaingunImage) : ScoutChaingunPairImage +{ + offset = "-.73 0 0"; + stateScript[3] = "onTriggerDown"; + stateScript[5] = "onTriggerUp"; + stateScript[6] = "onTriggerUp"; +}; + +datablock ShapeBaseImageData(ScoutChaingunParam) +{ + mountPoint = 2; + shapeFile = "turret_muzzlepoint.dts"; + + projectile = ScoutChaingunBullet; + projectileType = TracerProjectile; +}; \ No newline at end of file diff --git a/base/scripts/vehicles/vehicle_spec_fx.cs b/base/scripts/vehicles/vehicle_spec_fx.cs new file mode 100644 index 0000000..df4a81e --- /dev/null +++ b/base/scripts/vehicles/vehicle_spec_fx.cs @@ -0,0 +1,1317 @@ +//============================================================== +// MISCELLANEOUS VEHICLE SOUNDS AND EFFECTS +// +// - Sounds +// - Water Splash Effects +// - Tire Dust Particles +// - Lift-Off Particles +// - Small Heavy Damage Smoke +// - Heavy Damage Smoke +// - Light Heavy Damage Smoke +// - Vehicle Smoke Spike (for debris) +// - Vehicle Medium Explosion Smoke +// - Vehicle Large Ground Explosion Smoke +// - Debris Fire Particles +// - Debris Smoke Particles +// - Debris (pieces) +// - Explosions (including Shield Impacts) +// - Vehicle Sensors +// - Flier Contrails +// - Bomb Explosions +// +//============================================================== + +//-------------------------------------------------------------- +// SOUNDS +//-------------------------------------------------------------- + +datablock AudioProfile(SoftImpactSound) +{ + filename = "fx/vehicles/crash_soft.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(HardImpactSound) +{ + filename = "fx/vehicles/crash_hard.wav"; + description = AudioExplosion3d; + preload = true; +}; + +datablock AudioProfile(GravSoftImpactSound) +{ + filename = "fx/vehicles/crash_grav_soft.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(BombExplosionSound) +{ + filename = "fx/vehicles/bomber_bomb_impact.wav"; + description = AudioBomb3d; + preload = true; +}; + + +//-------------------------------------------------------------- +// WATER SPLASH EFFECTS +//-------------------------------------------------------------- + +datablock ParticleData(VehicleFoamParticle) +{ + dragCoefficient = 2.0; + gravityCoefficient = -0.05; + inheritedVelFactor = 0.0; + constantAcceleration = 0.0; + lifetimeMS = 1200; + lifetimeVarianceMS = 400; + useInvAlpha = false; + spinRandomMin = -90.0; + spinRandomMax = 500.0; + textureName = "particleTest"; + colors[0] = "0.7 0.8 1.0 1.0"; + colors[1] = "0.7 0.8 1.0 0.5"; + colors[2] = "0.7 0.8 1.0 0.0"; + sizes[0] = 2; + sizes[1] = 4; + sizes[2] = 6; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(VehicleFoamEmitter) +{ + ejectionPeriodMS = 40; + periodVarianceMS = 0; + ejectionVelocity = 10.0; + velocityVariance = 1.0; + ejectionOffset = 0.0; + thetaMin = 85; + thetaMax = 85; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + particles = "VehicleFoamParticle"; +}; + + +datablock ParticleData( VehicleFoamDropletsParticle ) +{ + dragCoefficient = 1; + gravityCoefficient = 0.2; + inheritedVelFactor = 0.2; + constantAcceleration = -0.0; + lifetimeMS = 800; + lifetimeVarianceMS = 300; + textureName = "special/droplet"; + colors[0] = "0.7 0.8 1.0 1.0"; + colors[1] = "0.7 0.8 1.0 0.5"; + colors[2] = "0.7 0.8 1.0 0.0"; + sizes[0] = 8; + sizes[1] = 3; + sizes[2] = 0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData( VehicleFoamDropletsEmitter ) +{ + ejectionPeriodMS = 34; + periodVarianceMS = 0; + ejectionVelocity = 10; + velocityVariance = 5.0; + ejectionOffset = 0.0; + thetaMin = 60; + thetaMax = 80; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + particles = "VehicleFoamDropletsParticle"; +}; + +//-------------------------------------------------------------- +// TIRE DUST PARTICLES +//-------------------------------------------------------------- + +datablock ParticleData(TireParticle) +{ + dragCoefficient = 2.0; + gravityCoefficient = -0.1; + inheritedVelFactor = 0.1; + constantAcceleration = 0.0; + lifetimeMS = 6000; + lifetimeVarianceMS = 1000; + useInvAlpha = true; + spinRandomMin = -45.0; + spinRandomMax = 45.0; + textureName = "particleTest"; + colors[0] = "0.46 0.36 0.26 0.6"; + colors[1] = "0.46 0.46 0.36 0.0"; + sizes[0] = 1.5; + sizes[1] = 7.00; +}; + +datablock ParticleEmitterData(TireEmitter) +{ + ejectionPeriodMS = 160; + periodVarianceMS = 20; + ejectionVelocity = 2; + velocityVariance = 1.0; + ejectionOffset = 0.0; + thetaMin = 20; + thetaMax = 90; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + useEmitterColors = true; + particles = "TireParticle"; +}; + +//-------------------------------------------------------------- +// LIFTOFF PARTICLES +//-------------------------------------------------------------- + +datablock ParticleData(TankDust) +{ + dragCoefficient = 1.0; + gravityCoefficient = -0.01; + inheritedVelFactor = 0.0; + constantAcceleration = 0.0; + lifetimeMS = 2000; + lifetimeVarianceMS = 200; + useInvAlpha = true; + spinRandomMin = -90.0; + spinRandomMax = 500.0; + textureName = "particleTest"; + colors[0] = "0.46 0.36 0.26 0.0"; + colors[1] = "0.46 0.46 0.36 0.4"; + colors[2] = "0.46 0.46 0.36 0.0"; + sizes[0] = 3.2; + sizes[1] = 4.6; + sizes[2] = 7.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(TankDustEmitter) +{ + ejectionPeriodMS = 12; + periodVarianceMS = 0; + ejectionVelocity = 20.0; + velocityVariance = 0.0; + ejectionOffset = 0.0; + thetaMin = 90; + thetaMax = 90; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + useEmitterColors = true; + particles = "TankDust"; +}; + +datablock ParticleData(LargeVehicleLiftoffDust) +{ + dragCoefficient = 1.0; + gravityCoefficient = -0.01; + inheritedVelFactor = 0.0; + constantAcceleration = 0.0; + lifetimeMS = 1000; + lifetimeVarianceMS = 100; + useInvAlpha = true; + spinRandomMin = -90.0; + spinRandomMax = 500.0; + textureName = "particleTest"; + colors[0] = "0.46 0.36 0.26 0.0"; + colors[1] = "0.46 0.46 0.36 0.4"; + colors[2] = "0.46 0.46 0.36 0.0"; + sizes[0] = 3.2; + sizes[1] = 4.6; + sizes[2] = 7.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(LargeVehicleLiftoffDustEmitter) +{ + ejectionPeriodMS = 15; + periodVarianceMS = 0; + ejectionVelocity = 15.0; + velocityVariance = 0.0; + ejectionOffset = 0.0; + thetaMin = 90; + thetaMax = 90; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + useEmitterColors = true; + particles = "LargeVehicleLiftoffDust"; +}; + +datablock ParticleData(VehicleLiftoffDust) +{ + dragCoefficient = 1.0; + gravityCoefficient = -0.01; + inheritedVelFactor = 0.0; + constantAcceleration = 0.0; + lifetimeMS = 1000; + lifetimeVarianceMS = 100; + useInvAlpha = true; + spinRandomMin = -90.0; + spinRandomMax = 500.0; + textureName = "particleTest"; + colors[0] = "0.46 0.36 0.26 0.0"; + colors[1] = "0.46 0.46 0.36 0.4"; + colors[2] = "0.46 0.46 0.36 0.0"; + sizes[0] = 1.2; + sizes[1] = 2.6; + sizes[2] = 3.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(VehicleLiftoffDustEmitter) +{ + ejectionPeriodMS = 15; + periodVarianceMS = 0; + ejectionVelocity = 10.0; + velocityVariance = 0.0; + ejectionOffset = 0.0; + thetaMin = 90; + thetaMax = 90; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + useEmitterColors = true; + particles = "VehicleLiftoffDust"; +}; + +//-------------------------------------------------------------- +// Damage bubbles +//-------------------------------------------------------------- +datablock ParticleData(DamageBubbleParticle) +{ + dragCoefficient = 0.0; + gravityCoefficient = -0.04; + inheritedVelFactor = 0.5; + constantAcceleration = 0.0; + lifetimeMS = 2000; + lifetimeVarianceMS = 200; + useInvAlpha = false; + spinRandomMin = -90.0; + spinRandomMax = 90.0; + textureName = "special/bubbles"; + colors[0] = "0.7 0.7 0.7 0.0"; + colors[1] = "0.3 0.3 0.3 1.0"; + colors[2] = "0.0 0.0 0.0 0.0"; + sizes[0] = 0.2; + sizes[1] = 0.8; + sizes[2] = 1.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(DamageBubbles) +{ + ejectionPeriodMS = 15; + periodVarianceMS = 0; + ejectionVelocity = 3.0; + velocityVariance = 0.0; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 35; + overrideAdvances = false; + particles = "DamageBubbleParticle"; +}; + +//-------------------------------------------------------------- +// SMALL HEAVY DAMAGE SMOKE +//-------------------------------------------------------------- + +datablock ParticleData(SmallHeavyDamageSmokeParticle) +{ + dragCoefficient = 0.0; + gravityCoefficient = -0.01; + inheritedVelFactor = 0.5; + constantAcceleration = 0.0; + lifetimeMS = 1000; + lifetimeVarianceMS = 200; + useInvAlpha = true; + spinRandomMin = -90.0; + spinRandomMax = 90.0; + textureName = "particleTest"; + colors[0] = "0.7 0.7 0.7 0.0"; + colors[1] = "0.3 0.3 0.3 1.0"; + colors[2] = "0.0 0.0 0.0 0.0"; + sizes[0] = 0.2; + sizes[1] = 0.8; + sizes[2] = 2.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(SmallHeavyDamageSmoke) +{ + ejectionPeriodMS = 25; + periodVarianceMS = 0; + ejectionVelocity = 3.0; + velocityVariance = 0.0; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 35; + overrideAdvances = false; + particles = "SmallHeavyDamageSmokeParticle"; +}; + +//-------------------------------------------------------------- +// HEAVY DAMAGE SMOKE +//-------------------------------------------------------------- + +datablock ParticleData(HeavyDamageSmokeParticle) +{ + dragCoefficient = 0.0; + gravityCoefficient = -0.01; + inheritedVelFactor = 0.5; + constantAcceleration = 0.0; + lifetimeMS = 2000; + lifetimeVarianceMS = 200; + useInvAlpha = true; + spinRandomMin = -90.0; + spinRandomMax = 90.0; + textureName = "particleTest"; + colors[0] = "0.7 0.7 0.7 0.0"; + colors[1] = "0.3 0.3 0.3 0.7"; + colors[2] = "0.0 0.0 0.0 0.0"; + sizes[0] = 1.2; + sizes[1] = 2.6; + sizes[2] = 4.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(HeavyDamageSmoke) +{ + ejectionPeriodMS = 20; + periodVarianceMS = 6; + ejectionVelocity = 4.0; + velocityVariance = 0.5; + ejectionOffset = 1.5; + thetaMin = 0; + thetaMax = 35; + overrideAdvances = false; + particles = "HeavyDamageSmokeParticle"; +}; + +//-------------------------------------------------------------- +// SMALL LIGHT DAMAGE SMOKE +//-------------------------------------------------------------- + +datablock ParticleData(SmallLightDamageSmokeParticle) +{ + dragCoefficient = 0.0; + gravityCoefficient = -0.01; + inheritedVelFactor = 0.5; + constantAcceleration = 0.0; + lifetimeMS = 1000; + lifetimeVarianceMS = 200; + useInvAlpha = true; + spinRandomMin = -90.0; + spinRandomMax = 90.0; + textureName = "particleTest"; + colors[0] = "0.7 0.7 0.7 0.0"; + colors[1] = "0.5 0.5 0.5 0.4"; + colors[2] = "0.3 0.3 0.3 0.0"; + sizes[0] = 0.8; + sizes[1] = 1.6; + sizes[2] = 3.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(SmallLightDamageSmoke) +{ + ejectionPeriodMS = 40; + periodVarianceMS = 0; + ejectionVelocity = 3.0; + velocityVariance = 0.0; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 35; + overrideAdvances = false; + particles = "SmallLightDamageSmokeParticle"; +}; + +//-------------------------------------------------------------- +// LIGHT DAMAGE SMOKE +//-------------------------------------------------------------- + +datablock ParticleData(LightDamageSmokeParticle) +{ + dragCoefficient = 0.0; + gravityCoefficient = -0.01; + inheritedVelFactor = 0.5; + constantAcceleration = 0.0; + lifetimeMS = 1500; + lifetimeVarianceMS = 200; + useInvAlpha = true; + spinRandomMin = -90.0; + spinRandomMax = 90.0; + textureName = "particleTest"; + colors[0] = "0.7 0.7 0.7 0.0"; + colors[1] = "0.5 0.5 0.5 0.7"; + colors[2] = "0.3 0.3 0.3 0.0"; + sizes[0] = 1.2; + sizes[1] = 2.6; + sizes[2] = 4.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(LightDamageSmoke) +{ + ejectionPeriodMS = 30; + periodVarianceMS = 6; + ejectionVelocity = 4.0; + velocityVariance = 0.5; + ejectionOffset = 1.5; + thetaMin = 0; + thetaMax = 35; + overrideAdvances = false; + particles = "LightDamageSmokeParticle"; +}; + +//-------------------------------------------------------------- +// VEHICLE SMOKE SPIKE (for debris) +//-------------------------------------------------------------- + +datablock ParticleData( VSmokeSpike ) +{ + dragCoeffiecient = 1.0; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + + lifetimeMS = 1000; + lifetimeVarianceMS = 100; + + textureName = "particleTest"; + + useInvAlpha = true; + + spinRandomMin = -60.0; + spinRandomMax = 60.0; + + colors[0] = "0.4 0.4 0.4 1.0"; + colors[1] = "0.3 0.3 0.3 0.5"; + colors[2] = "0.0 0.0 0.0 0.0"; + sizes[0] = 0.0; + sizes[1] = 1.0; + sizes[2] = 0.5; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData( VSmokeSpikeEmitter ) +{ + ejectionPeriodMS = 7; + periodVarianceMS = 1; + + ejectionVelocity = 1.0; // A little oomph at the back end + velocityVariance = 0.2; + + thetaMin = 0.0; + thetaMax = 40.0; + + particles = "VSmokeSpike"; +}; + + +//-------------------------------------------------------------- +// VEHICLE MEDIUM EXPLOSION SMOKE +//-------------------------------------------------------------- + +datablock ParticleData(VehicleMESmoke) +{ + dragCoeffiecient = 0.4; + gravityCoefficient = -0.5; // rises slowly + inheritedVelFactor = 0.025; + + lifetimeMS = 1250; + lifetimeVarianceMS = 0; + + textureName = "particleTest"; + + useInvAlpha = true; + spinRandomMin = -200.0; + spinRandomMax = 200.0; + + textureName = "special/Smoke/smoke_001"; + + colors[0] = "1.0 0.7 0.5 1.0"; + colors[1] = "0.3 0.3 0.3 1.0"; + colors[2] = "0.0 0.0 0.0 0.0"; + sizes[0] = 2.0; + sizes[1] = 6.0; + sizes[2] = 2.0; + times[0] = 0.0; + times[1] = 0.3; + times[2] = 1.0; + +}; + +datablock ParticleEmitterData(VehicleMESmokeEMitter) +{ + ejectionPeriodMS = 5; + periodVarianceMS = 0; + + ejectionVelocity = 6.25; + velocityVariance = 0.25; + + thetaMin = 0.0; + thetaMax = 180.0; + + lifetimeMS = 250; + + particles = "VehicleMESmoke"; +}; + +//-------------------------------------------------------------- +// VEHICLE LARGE GROUND EXPLOSION SMOKE +//-------------------------------------------------------------- + +datablock ParticleData(VehicleLGESmoke) +{ + dragCoeffiecient = 0.3; + gravityCoefficient = -0.5; // rises slowly + inheritedVelFactor = 0.025; + + lifetimeMS = 1250; + lifetimeVarianceMS = 0; + + textureName = "particleTest"; + + useInvAlpha = true; + spinRandomMin = -200.0; + spinRandomMax = 200.0; + + textureName = "special/Smoke/smoke_001"; + + colors[0] = "1.0 0.7 0.5 0.5"; + colors[1] = "0.3 0.3 0.3 1.0"; + colors[2] = "0.0 0.0 0.0 0.0"; + sizes[0] = 6.0; + sizes[1] = 6.0; + sizes[2] = 2.0; + times[0] = 0.0; + times[1] = 0.3; + times[2] = 1.0; + +}; + +datablock ParticleEmitterData(VehicleLGESmokeEMitter) +{ + ejectionPeriodMS = 5; + periodVarianceMS = 0; + + ejectionVelocity = 7.25; + velocityVariance = 0.25; + + ejectionOffset = 5.0; + + thetaMin = 0.0; + thetaMax = 80.0; + + lifetimeMS = 350; + + particles = "VehicleLGESmoke"; +}; + +//-------------------------------------------------------------- +// DEBRIS FIRE PARTICLES +//-------------------------------------------------------------- + +datablock ParticleData(DebrisFireParticle) +{ + dragCoeffiecient = 0.0; + gravityCoefficient = -0.2; + inheritedVelFactor = 0.0; + + lifetimeMS = 350; + lifetimeVarianceMS = 0; + + textureName = "particleTest"; + + useInvAlpha = false; + spinRandomMin = -160.0; + spinRandomMax = 160.0; + + animateTexture = true; + framesPerSec = 15; + + + animTexName[0] = "special/Explosion/exp_0016"; + animTexName[1] = "special/Explosion/exp_0018"; + animTexName[2] = "special/Explosion/exp_0020"; + animTexName[3] = "special/Explosion/exp_0022"; + animTexName[4] = "special/Explosion/exp_0024"; + animTexName[5] = "special/Explosion/exp_0026"; + animTexName[6] = "special/Explosion/exp_0028"; + animTexName[7] = "special/Explosion/exp_0030"; + animTexName[8] = "special/Explosion/exp_0032"; + + colors[0] = "1.0 0.7 0.5 1.0"; + colors[1] = "1.0 0.5 0.2 1.0"; + colors[2] = "1.0 0.25 0.1 0.0"; + sizes[0] = 0.5; + sizes[1] = 2.0; + sizes[2] = 1.0; + times[0] = 0.0; + times[1] = 0.2; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(DebrisFireEmitter) +{ + ejectionPeriodMS = 20; + periodVarianceMS = 1; + + ejectionVelocity = 0.25; + velocityVariance = 0.0; + + thetaMin = 0.0; + thetaMax = 30.0; + + particles = "DebrisFireParticle"; +}; + +//-------------------------------------------------------------- +// DEBRIS SMOKE PARTICLES +//-------------------------------------------------------------- + +datablock ParticleData( DebrisSmokeParticle ) +{ + dragCoeffiecient = 4.0; + gravityCoefficient = -0.00; // rises slowly + inheritedVelFactor = 0.2; + + lifetimeMS = 1000; + lifetimeVarianceMS = 100; // ...more or less + + textureName = "particleTest"; + + useInvAlpha = true; + + spinRandomMin = -50.0; + spinRandomMax = 50.0; + + colors[0] = "0.3 0.3 0.3 0.0"; + colors[1] = "0.3 0.3 0.3 1.0"; + colors[2] = "0.0 0.0 0.0 0.0"; + sizes[0] = 2; + sizes[1] = 3; + sizes[2] = 5; + times[0] = 0.0; + times[1] = 0.7; + times[2] = 1.0; +}; + +datablock ParticleEmitterData( DebrisSmokeEmitter ) +{ + ejectionPeriodMS = 25; + periodVarianceMS = 5; + + ejectionVelocity = 1.0; // A little oomph at the back end + velocityVariance = 0.5; + + thetaMin = 10.0; + thetaMax = 30.0; + + useEmitterSizes = true; + + particles = "DebrisSmokeParticle"; +}; + +//-------------------------------------------------------------- +// DEBRIS (pieces) +//-------------------------------------------------------------- + +datablock EffectProfile(VehicleExplosionEffect) +{ + effectname = "explosions/vehicle_explosion"; + minDistance = 10; + maxDistance = 40; +}; + +datablock AudioProfile(VehicleExplosionSound) +{ + filename = "fx/explosions/vehicle_explosion.wav"; + description = AudioBIGExplosion3d; + preload = true; + effect = VehicleExplosionEffect; +}; + +datablock ExplosionData(DebrisExplosion) +{ + explosionShape = "effect_plasma_explosion.dts"; + soundProfile = plasmaExpSound; + faceViewer = true; + explosionScale = "0.4 0.4 0.4"; +}; + +datablock DebrisData( VehicleFireballDebris ) +{ + emitters[0] = DebrisSmokeEmitter; + emitters[1] = DebrisFireEmitter; + + explosion = DebrisExplosion; + explodeOnMaxBounce = true; + + elasticity = 0.4; + friction = 0.2; + + lifetime = 100.0; + lifetimeVariance = 30.0; + + numBounces = 0; + bounceVariance = 0; +}; + +datablock DebrisData( VSpikeDebris ) +{ + emitters[0] = VSmokeSpikeEmitter; + + explodeOnMaxBounce = true; + + elasticity = 0.4; + friction = 0.2; + + lifetime = 0.3; + lifetimeVariance = 0.02; + +}; + +datablock DebrisData( ShapeDebris ) +{ + explodeOnMaxBounce = false; + + elasticity = 0.40; + friction = 0.5; + + lifetime = 25.0; + lifetimeVariance = 0.0; + + minSpinSpeed = 60; + maxSpinSpeed = 600; + + numBounces = 10; + bounceVariance = 0; + + staticOnMaxBounce = true; + + useRadiusMass = true; + baseRadius = 1.0; + + velocity = 17.0; + velocityVariance = 7.0; + +}; + +//************************************************************** +// EXPLOSIONS +//************************************************************** + +datablock ExplosionData(VSpikeExplosion) +{ + debris = VSpikeDebris; + debrisThetaMin = 10; + debrisThetaMax = 170; + debrisNum = 15; + debrisNumVariance = 6; + debrisVelocity = 30.0; + debrisVelocityVariance = 7.0; +}; + +datablock ExplosionData(VehicleExplosion) +{ + explosionShape = "disc_explosion.dts"; + playSpeed = 1.5; + soundProfile = VehicleExplosionSound; + faceViewer = true; + + emitter[0] = VehicleMESmokeEmitter; + + debris = VehicleFireballDebris; + debrisThetaMin = 10; + debrisThetaMax = 80; + debrisNum = 3; + debrisNumVariance = 1; + debrisVelocity = 20.0; + debrisVelocityVariance = 5.0; + + subExplosion = VSpikeExplosion; + + shakeCamera = true; + camShakeFreq = "11.0 13.0 9.0"; + camShakeAmp = "40.0 40.0 40.0"; + camShakeDuration = 0.7; + camShakeRadius = 25.0; +}; + +datablock ExplosionData(VLSpikeExplosion) +{ + debris = VSpikeDebris; + debrisThetaMin = 10; + debrisThetaMax = 170; + debrisNum = 10; + debrisNumVariance = 6; + debrisVelocity = 50.0; + debrisVelocityVariance = 10.0; +}; + +datablock ExplosionData(VLGSpikeExplosion) +{ + debris = VSpikeDebris; + debrisThetaMin = 10; + debrisThetaMax = 70; + debrisNum = 10; + debrisNumVariance = 6; + debrisVelocity = 50.0; + debrisVelocityVariance = 10.0; +}; + +datablock ExplosionData(LargeGroundVehicleExplosion) +{ + explosionShape = "disc_explosion.dts"; + playSpeed = 1.5; + soundProfile = VehicleExplosionSound; + faceViewer = true; + + emitter[0] = VehicleLGESmokeEMitter; + + debris = VehicleFireballDebris; + debrisThetaMin = 10; + debrisThetaMax = 60; + debrisNum = 3; + debrisNumVariance = 1; + debrisVelocity = 20.0; + debrisVelocityVariance = 5.0; + + subExplosion = VLGSpikeExplosion; + + shakeCamera = true; + camShakeFreq = "8.0 9.0 7.0"; + camShakeAmp = "140.0 140.0 140.0"; + camShakeDuration = 1.3; + camShakeRadius = 30.0; +}; + +datablock ExplosionData(LargeAirVehicleExplosion) +{ + explosionShape = "disc_explosion.dts"; + playSpeed = 1.5; + soundProfile = VehicleExplosionSound; + faceViewer = true; + + emitter[0] = VehicleLGESmokeEMitter; + + debris = VehicleFireballDebris; + debrisThetaMin = 10; + debrisThetaMax = 80; + debrisNum = 3; + debrisNumVariance = 1; + debrisVelocity = 20.0; + debrisVelocityVariance = 5.0; + + subExplosion = VLSpikeExplosion; + + shakeCamera = true; + camShakeFreq = "8.0 9.0 7.0"; + camShakeAmp = "140.0 140.0 140.0"; + camShakeDuration = 1.3; + camShakeRadius = 30.0; +}; + +//-------------------------------------------------------------- +// BOMB EXPLOSION +//-------------------------------------------------------------- +datablock ParticleData(VehicleBombExplosionParticle) +{ + dragCoefficient = 2; + gravityCoefficient = 0.2; + inheritedVelFactor = 0.2; + constantAcceleration = 0.0; + lifetimeMS = 1050; + lifetimeVarianceMS = 250; + textureName = "particleTest"; + colors[0] = "0.56 0.36 0.26 1.0"; + colors[1] = "0.56 0.36 0.26 0.0"; + sizes[0] = 3; + sizes[1] = 5; +}; + +datablock ParticleEmitterData(VehicleBombExplosionEmitter) +{ + ejectionPeriodMS = 7; + periodVarianceMS = 0; + ejectionVelocity = 32; + velocityVariance = 10; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 60; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + particles = "VehicleBombExplosionParticle"; +}; + +datablock ShockwaveData(VehicleBombShockwave) +{ + width = 6.0; + numSegments = 32; + numVertSegments = 6; + velocity = 16.0; + acceleration = 40.0; + lifetimeMS = 650; + height = 1.0; + verticalCurve = 0.5; + is2D = false; + + texture[0] = "special/shockwave4"; + texture[1] = "special/gradient"; + texWrap = 6.0; + + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + + colors[0] = "1.0 0.8 0.4 0.50"; + colors[1] = "1.0 0.6 0.3 0.25"; + colors[2] = "1.0 0.4 0.2 0.0"; + + mapToTerrain = true; + orientToNormal = false; + renderBottom = false; +}; + +datablock ExplosionData(VehicleBombSubExplosion1) +{ + explosionShape = "effect_plasma_explosion.dts"; + faceViewer = true; + + delayMS = 50; + + offset = 5.0; + + playSpeed = 1.5; + + sizes[0] = "1.5 1.5 1.5"; + sizes[1] = "2.0 2.0 2.0"; + times[0] = 0.0; + times[1] = 1.0; + +}; + +datablock ExplosionData(VehicleBombSubExplosion2) +{ + explosionShape = "effect_plasma_explosion.dts"; + faceViewer = true; + + delayMS = 100; + + offset = 7.0; + + playSpeed = 1.0; + + sizes[0] = "3.0 3.0 3.0"; + sizes[1] = "4.0 4.0 4.0"; + times[0] = 0.0; + times[1] = 1.0; +}; + +datablock ExplosionData(VehicleBombSubExplosion3) +{ + explosionShape = "effect_plasma_explosion.dts"; + faceViewer = true; + + delayMS = 0; + + offset = 0.0; + + playSpeed = 0.7; + + + sizes[0] = "3.0 3.0 3.0"; + sizes[1] = "7.0 7.0 7.0"; + times[0] = 0.0; + times[1] = 1.0; + +}; + +datablock ExplosionData(VehicleBombExplosion) +{ + soundProfile = BombExplosionSound; + particleEmitter = VehicleBombExplosionEmitter; + particleDensity = 250; + particleRadius = 1.25; + faceViewer = true; + + shockwave = VehicleBombShockwave; + shockwaveOnTerrain = true; + + subExplosion[0] = VehicleBombSubExplosion1; + subExplosion[1] = VehicleBombSubExplosion2; + subExplosion[2] = VehicleBombSubExplosion3; + + shakeCamera = true; + camShakeFreq = "5.0 7.0 5.0"; + camShakeAmp = "80.0 80.0 80.0"; + camShakeDuration = 1.0; + camShakeRadius = 30.0; +}; + +//-------------------------------------------------------------- +// VEHICLE SHIELD IMPACT DATA +//-------------------------------------------------------------- +datablock ShieldImpactData( VehicleShieldImpact ) +{ + lifetimeMS = 300; + startScale = 1.0; + endScale = 1.1; +}; + +//-------------------------------------------------------------- +// VEHICLE SENSORS +//-------------------------------------------------------------- + +datablock SensorData(VehiclePulseSensor) +{ + detects = true; + detectsUsingLOS = true; + detectsPassiveJammed = false; + detectsActiveJammed = false; + detectsCloaked = false; + detectionPings = true; + detectRadius = 20; +}; + +datablock SensorData(AWACPulseSensor) +{ + detects = true; + detectsUsingLOS = true; + detectsPassiveJammed = false; + detectsActiveJammed = false; + detectsCloaked = false; + detectionPings = true; + detectRadius = 300; +}; + +//-------------------------------------------------------------- +// FLIER CONTRAILS +//-------------------------------------------------------------- + +datablock ParticleData(ContrailParticle) +{ + dragCoefficient = 1.5; + gravityCoefficient = 0; + inheritedVelFactor = 0.2; + constantAcceleration = 0.0; + lifetimeMS = 3000; + lifetimeVarianceMS = 0; + textureName = "particleTest"; + colors[0] = "0.6 0.6 0.6 0.5"; + colors[1] = "0.2 0.2 0.2 0"; + sizes[0] = 0.6; + sizes[1] = 5; +}; + +datablock ParticleEmitterData(ContrailEmitter) +{ + ejectionPeriodMS = 5; + periodVarianceMS = 0; + ejectionVelocity = 1; + velocityVariance = 1.0; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 10; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + particles = "ContrailParticle"; +}; + + +datablock ParticleData(FlyerJetParticle) +{ + dragCoefficient = 1.5; + gravityCoefficient = 0; + inheritedVelFactor = 0.2; + constantAcceleration = 0.0; + lifetimeMS = 200; + lifetimeVarianceMS = 0; + textureName = "particleTest"; + colors[0] = "0.9 0.7 0.3 0.6"; + colors[1] = "0.3 0.3 0.5 0"; + sizes[0] = 2; + sizes[1] = 6; +}; + +datablock ParticleEmitterData(FlyerJetEmitter) +{ + ejectionPeriodMS = 10; + periodVarianceMS = 0; + ejectionVelocity = 20; + velocityVariance = 1.0; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 10; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + particles = "FlyerJetParticle"; +}; + +//-------------------------------------------------------------- +// Hover Jet Emitters +//-------------------------------------------------------------- + +datablock ParticleData(TankJetParticle) +{ + dragCoefficient = 1.5; + gravityCoefficient = 0; + inheritedVelFactor = 0.2; + constantAcceleration = 0.0; + lifetimeMS = 200; + lifetimeVarianceMS = 0; + textureName = "particleTest"; + colors[0] = "0.9 0.7 0.3 0.6"; + colors[1] = "0.3 0.3 0.5 0"; + sizes[0] = 2; + sizes[1] = 6; +}; + +datablock ParticleEmitterData(TankJetEmitter) +{ + ejectionPeriodMS = 10; + periodVarianceMS = 0; + ejectionVelocity = 20; + velocityVariance = 1.0; + ejectionOffset = -0.25; + thetaMin = 0; + thetaMax = 10; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + particles = "TankJetParticle"; +}; + +datablock ParticleData(WildcatJetParticle) +{ + dragCoefficient = 1.5; + gravityCoefficient = 0; + inheritedVelFactor = 0.2; + constantAcceleration = 0.0; + lifetimeMS = 100; + lifetimeVarianceMS = 0; + textureName = "particleTest"; + colors[0] = "0.9 0.7 0.3 0.6"; + colors[1] = "0.3 0.3 0.5 0"; + sizes[0] = 0.5; + sizes[1] = 1.5; +}; + +datablock ParticleEmitterData(WildcatJetEmitter) +{ + ejectionPeriodMS = 5; + periodVarianceMS = 0; + ejectionVelocity = 20; + velocityVariance = 1.0; + ejectionOffset = 0; + thetaMin = 0; + thetaMax = 10; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + particles = "WildcatJetParticle"; +}; + + +//-------------------------------------------------------------- +// Vehicle Splash Sounds +//-------------------------------------------------------------- +//EXIT WATER +datablock AudioProfile(VehicleExitWaterSoftSound) +{ + filename = "fx/armor/general_water_exit2.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(VehicleExitWaterMediumSound) +{ + filename = "fx/armor/general_water_exit2.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(VehicleExitWaterHardSound) +{ + filename = "fx/armor/general_water_exit2.wav"; + description = AudioClose3d; + preload = true; +}; + +//IMPACT WATER +datablock AudioProfile(VehicleImpactWaterSoftSound) +{ + filename = "fx/armor/general_water_smallsplash2.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(VehicleImpactWaterMediumSound) +{ + filename = "fx/armor/general_water_medsplash.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(VehicleImpactWaterHardSound) +{ + filename = "fx/armor/general_water_bigsplash.wav"; + description = AudioDefault3d; + preload = true; +}; + +//WATER WAKE +datablock AudioProfile(VehicleWakeSoftSplashSound) +{ + filename = "fx/vehicles/wake_wildcat.wav"; + description = AudioDefaultLooping3d; + preload = true; +}; + +datablock AudioProfile(VehicleWakeMediumSplashSound) +{ + filename = "fx/vehicles/wake_shrike_n_tank.wav"; + description = AudioDefaultLooping3d; + preload = true; +}; + +datablock AudioProfile(VehicleWakeHardSplashSound) +{ + filename = "fx/vehicles/wake_shrike_n_tank.wav"; + description = AudioDefaultLooping3d; + preload = true; +}; + diff --git a/base/scripts/vehicles/vehicle_tank.cs b/base/scripts/vehicles/vehicle_tank.cs new file mode 100644 index 0000000..7bca460 --- /dev/null +++ b/base/scripts/vehicles/vehicle_tank.cs @@ -0,0 +1,571 @@ +//************************************************************** +// BEOWULF ASSAULT VEHICLE +//************************************************************** +//************************************************************** +// SOUNDS +//************************************************************** + +datablock AudioProfile(AssaultVehicleSkid) +{ + filename = "fx/vehicles/tank_skid.wav"; + description = ClosestLooping3d; + preload = true; +}; + +datablock AudioProfile(AssaultVehicleEngineSound) +{ + filename = "fx/vehicles/tank_engine.wav"; + description = AudioDefaultLooping3d; + preload = true; +}; + +datablock AudioProfile(AssaultVehicleThrustSound) +{ + filename = "fx/vehicles/tank_boost.wav"; + description = AudioDefaultLooping3d; + preload = true; +}; + +datablock AudioProfile(AssaultChaingunFireSound) +{ + filename = "fx/vehicles/tank_chaingun.wav"; + description = AudioDefaultLooping3d; + preload = true; +}; + +datablock AudioProfile(AssaultChaingunReloadSound) +{ + filename = "fx/weapons/chaingun_dryfire.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(TankChaingunProjectile) +{ + filename = "fx/weapons/chaingun_projectile.wav"; + description = ProjectileLooping3d; + preload = true; +}; + +datablock AudioProfile(AssaultTurretActivateSound) +{ + filename = "fx/vehicles/tank_activate.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(AssaultChaingunDryFireSound) +{ + filename = "fx/weapons/chaingun_dryfire.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(AssaultChaingunIdleSound) +{ + filename = "fx/misc/diagnostic_on.wav"; + description = ClosestLooping3d; + preload = true; +}; + +datablock AudioProfile(AssaultMortarDryFireSound) +{ + filename = "fx/weapons/mortar_dryfire.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(AssaultMortarFireSound) +{ + filename = "fx/vehicles/tank_mortar_fire.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(AssaultMortarReloadSound) +{ + filename = "fx/weapons/mortar_reload.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(AssaultMortarIdleSound) +{ + filename = "fx/misc/diagnostic_on.wav"; + description = ClosestLooping3d; + preload = true; +}; + +//************************************************************** +// VEHICLE CHARACTERISTICS +//************************************************************** + +datablock HoverVehicleData(AssaultVehicle) : GroundVehicleDamageProfile +{ + spawnOffset = "0 0 4"; + + floatingGravMag = 3.5; + + catagory = "Vehicles"; + shapeFile = "vehicle_grav_tank.dts"; + multipassenger = true; + computeCRC = true; + + weaponNode = 1; + + debrisShapeName = "vehicle_land_assault_debris.dts"; + debris = ShapeDebris; + + drag = 0.0; + density = 0.9; + + mountPose[0] = sitting; + mountPose[1] = sitting; + numMountPoints = 2; + isProtectedMountPoint[0] = true; + isProtectedMountPoint[1] = true; + + cameraMaxDist = 20; + cameraOffset = 3; + cameraLag = 1.5; + explosion = LargeGroundVehicleExplosion; + + maxSteeringAngle = 0.5; // 20 deg. + + maxDamage = 3.15; + destroyedLevel = 3.15; + + collDamageThresholdVel = 20.0; + collDamageMultiplier = 0.03; + + isShielded = true; + rechargeRate = 1.0; + energyPerDamagePoint = 135; + maxEnergy = 400; + minJetEnergy = 15; + jetEnergyDrain = 2.0; + + // Rigid Body + mass = 1500; + bodyFriction = 0.8; + bodyRestitution = 0.5; + minRollSpeed = 3; + gyroForce = 400; + gyroDamping = 0.3; + stabilizerForce = 20; + minDrag = 10; + minImpactSpeed = 5; + softImpactSpeed = 5; // Play SoftImpact Sound + hardImpactSpeed = 15; // Play HardImpact Sound + speedDamageScale = 0.06; + + dragForce = 40 / 20; + vertFactor = 0.0; + floatingThrustFactor = 0.15; + + mainThrustForce = 50; + reverseThrustForce = 40; + strafeThrustForce = 40; + turboFactor = 1.5; + + brakingForce = 25; + brakingActivationSpeed = 4; + + stabLenMin = 3.25; + stabLenMax = 4; + stabSpringConstant = 50; + stabDampingConstant = 20; + + gyroDrag = 20; + normalForce = 20; + restorativeForce = 10; + steeringForce = 15; + rollForce = 5; + pitchForce = 3; + + dustEmitter = TankDustEmitter; + triggerDustHeight = 3.5; + dustHeight = 1.0; + dustTrailEmitter = TireEmitter; + dustTrailOffset = "0.0 -1.0 0.5"; + triggerTrailHeight = 3.6; + dustTrailFreqMod = 15.0; + + jetSound = AssaultVehicleThrustSound; + engineSound = AssaultVehicleEngineSound; + floatSound = AssaultVehicleSkid; + softImpactSound = GravSoftImpactSound; + hardImpactSound = HardImpactSound; + wheelImpactSound = WheelImpactSound; + + forwardJetEmitter = TankJetEmitter; + + // + softSplashSoundVelocity = 15.0; + mediumSplashSoundVelocity = 30.0; + hardSplashSoundVelocity = 60.0; + exitSplashSoundVelocity = 20.0; + + exitingWater = VehicleExitWaterMediumSound; + impactWaterEasy = VehicleImpactWaterSoftSound; + impactWaterMedium = VehicleImpactWaterMediumSound; + impactWaterHard = VehicleImpactWaterMediumSound; + waterWakeSound = VehicleWakeMediumSplashSound; + + minMountDist = 4; + + damageEmitter[0] = SmallLightDamageSmoke; + damageEmitter[1] = SmallHeavyDamageSmoke; + damageEmitter[2] = DamageBubbles; + damageEmitterOffset[0] = "0.0 -1.5 3.5 "; + damageLevelTolerance[0] = 0.3; + damageLevelTolerance[1] = 0.7; + numDmgEmitterAreas = 1; + + splashEmitter[0] = VehicleFoamDropletsEmitter; + splashEmitter[1] = VehicleFoamEmitter; + + shieldImpact = VehicleShieldImpact; + + cmdCategory = "Tactical"; + cmdIcon = CMDGroundTankIcon; + cmdMiniIconName = "commander/MiniIcons/com_tank_grey"; + targetNameTag = 'Beowulf'; + targetTypeTag = 'Assault Vehicle'; + sensorData = VehiclePulseSensor; + + checkRadius = 5.5535; + observeParameters = "1 10 10"; +}; + +//************************************************************** +// WEAPONS +//************************************************************** + +//------------------------------------- +// ASSAULT CHAINGUN (projectile) +//------------------------------------- + +datablock TracerProjectileData(AssaultChaingunBullet) +{ + doDynamicClientHits = true; + + projectileShapeName = ""; + directDamage = 0.16; + directDamageType = $DamageType::TankChaingun; + hasDamageRadius = false; + splash = ChaingunSplash; + + kickbackstrength = 0.0; + sound = TankChaingunProjectile; + + dryVelocity = 425.0; + wetVelocity = 100.0; + velInheritFactor = 1.0; + fizzleTimeMS = 3000; + lifetimeMS = 3000; + explodeOnDeath = false; + reflectOnWaterImpactAngle = 0.0; + explodeOnWaterImpact = false; + deflectionOnWaterImpact = 0.0; + fizzleUnderwaterMS = 3000; + + tracerLength = 15.0; + tracerAlpha = false; + tracerMinPixels = 6; + tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75"; + tracerTex[0] = "special/tracer00"; + tracerTex[1] = "special/tracercross"; + tracerWidth = 0.10; + crossSize = 0.20; + crossViewAng = 0.990; + renderCross = true; + + decalData[0] = ChaingunDecal1; + decalData[1] = ChaingunDecal2; + decalData[2] = ChaingunDecal3; + decalData[3] = ChaingunDecal4; + decalData[4] = ChaingunDecal5; + decalData[5] = ChaingunDecal6; + + activateDelayMS = 100; + + explosion = ChaingunExplosion; +}; + +//------------------------------------- +// ASSAULT CHAINGUN CHARACTERISTICS +//------------------------------------- + +datablock TurretData(AssaultPlasmaTurret) : TurretDamageProfile +{ + className = VehicleTurret; + catagory = "Turrets"; + shapeFile = "Turret_tank_base.dts"; + preload = true; + + mass = 1.0; // Not really relevant + + maxEnergy = 1; + maxDamage = AssaultVehicle.maxDamage; + destroyedLevel = AssaultVehicle.destroyedLevel; + repairRate = 0; + + thetaMin = 0; + thetaMax = 100; + + inheritEnergyFromMount = true; + firstPersonOnly = true; + useEyePoint = true; + numWeapons = 2; + + cameraDefaultFov = 90.0; + cameraMinFov = 5.0; + cameraMaxFov = 120.0; + + targetNameTag = 'Beowulf Chaingun'; + targetTypeTag = 'Turret'; +}; + +datablock TurretImageData(AssaultPlasmaTurretBarrel) +{ + shapeFile = "turret_tank_barrelchain.dts"; + mountPoint = 1; + + projectile = AssaultChaingunBullet; + projectileType = TracerProjectile; + + casing = ShellDebris; + shellExitDir = "1.0 0.3 1.0"; + shellExitOffset = "0.15 -0.56 -0.1"; + shellExitVariance = 15.0; + shellVelocity = 3.0; + + projectileSpread = 12.0 / 1000.0; + + usesEnergy = true; + useMountEnergy = true; + fireEnergy = 3.75; + minEnergy = 3.75; + + // Turret parameters + activationMS = 4000; + deactivateDelayMS = 500; + thinkTimeMS = 200; + degPerSecTheta = 360; + degPerSecPhi = 360; + attackRadius = 75; + + // State transitions + stateName[0] = "Activate"; + stateTransitionOnNotLoaded[0] = "Dead"; + stateTransitionOnLoaded[0] = "ActivateReady"; + stateSound[0] = AssaultTurretActivateSound; + + stateName[1] = "ActivateReady"; + stateSequence[1] = "Activate"; + stateSound[1] = AssaultTurretActivateSound; + stateTimeoutValue[1] = 1; + stateTransitionOnTimeout[1] = "Ready"; + stateTransitionOnNotLoaded[1] = "Deactivate"; + + stateName[2] = "Ready"; + stateTransitionOnNotLoaded[2] = "Deactivate"; + stateTransitionOnTriggerDown[2] = "Fire"; +// stateSound[2] = AssaultChaingunIdleSound; + + stateName[3] = "Fire"; + stateSequence[3] = "Fire"; + stateSequenceRandomFlash[3] = true; + stateFire[3] = true; +// stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateSound[3] = AssaultChaingunFireSound; + stateScript[3] = "onFire"; + stateTimeoutValue[3] = 0.15; + stateTransitionOnTimeout[3] = "Fire"; + stateTransitionOnTriggerUp[3] = "Reload"; + stateTransitionOnNoAmmo[3] = "Reload"; + + stateName[4] = "Reload"; + stateTimeoutValue[4] = 0.1; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; + stateTransitionOnTimeout[4] = "Ready"; + stateTransitionOnNotLoaded[4] = "Deactivate"; +// stateSound[4] = AssaultChaingunReloadSound; + + stateName[5] = "Deactivate"; + stateSequence[5] = "Activate"; + stateDirection[5] = false; + stateTimeoutValue[5] = 1; + stateTransitionOnLoaded[5] = "ActivateReady"; + stateTransitionOnTimeout[5] = "Dead"; + + stateName[6] = "Dead"; + stateTransitionOnLoaded[6] = "ActivateReady"; + stateTransitionOnTriggerDown[6] = "DryFire"; + + stateName[7] = "DryFire"; + stateSound[7] = AssaultChaingunDryFireSound; + stateTimeoutValue[7] = 0.5; + stateTransitionOnTimeout[7] = "NoAmmo"; + + stateName[8] = "NoAmmo"; + stateTransitionOnAmmo[8] = "Reload"; + stateSequence[8] = "NoAmmo"; + stateTransitionOnTriggerDown[8] = "DryFire"; + +}; + +//------------------------------------- +// ASSAULT MORTAR (projectile) +//------------------------------------- + +datablock ItemData(AssaultMortarAmmo) +{ + className = Ammo; + catagory = "Ammo"; + shapeFile = "repair_kit.dts"; + mass = 1; + elasticity = 0.5; + friction = 0.6; + pickupRadius = 1; + + computeCRC = true; +}; + +datablock GrenadeProjectileData(AssaultMortar) +{ + projectileShapeName = "mortar_projectile.dts"; + emitterDelay = -1; + directDamage = 0.0; + hasDamageRadius = true; + indirectDamage = 1.0; + damageRadius = 25.0; + radiusDamageType = $DamageType::TankMortar; + kickBackStrength = 2500; + + sound = MortarProjectileSound; + explosion = "MortarExplosion"; + velInheritFactor = 1.0; + + baseEmitter = MortarSmokeEmitter; + + grenadeElasticity = 0.0; + grenadeFriction = 0.4; + armingDelayMS = 50; + muzzleVelocity = 65; + drag = 0.1; + + hasLight = true; + lightRadius = 4; + lightColor = "0.1 0.4 0.1"; +}; + +//------------------------------------- +// ASSAULT MORTAR CHARACTERISTICS +//------------------------------------- + +datablock TurretImageData(AssaultMortarTurretBarrel) +{ + shapeFile = "turret_tank_barrelmortar.dts"; + mountPoint = 0; + +// ammo = AssaultMortarAmmo; + projectile = AssaultMortar; + projectileType = GrenadeProjectile; + + usesEnergy = true; + useMountEnergy = true; + fireEnergy = 50.00; + minEnergy = 50.00; + + // Turret parameters + activationMS = 4000; + deactivateDelayMS = 1500; + thinkTimeMS = 200; + degPerSecTheta = 360; + degPerSecPhi = 360; + attackRadius = 75; + + // State transitions + stateName[0] = "Activate"; + stateTransitionOnNotLoaded[0] = "Dead"; + stateTransitionOnLoaded[0] = "ActivateReady"; + //stateSound[0] = AssaultTurretActivateSound; + + stateName[1] = "ActivateReady"; + stateSequence[1] = "Activate"; + stateSound[1] = AssaultTurretActivateSound; + stateTimeoutValue[1] = 1; + stateTransitionOnTimeout[1] = "Ready"; + stateTransitionOnNotLoaded[1] = "Deactivate"; + + stateName[2] = "Ready"; + stateTransitionOnNotLoaded[2] = "Deactivate"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "Fire"; +// stateSound[2] = AssaultMortarIdleSound; + + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.3; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateSequence[3] = "Fire"; + stateSound[3] = AssaultMortarFireSound; + stateScript[3] = "onFire"; + + stateName[4] = "Reload"; + stateTimeoutValue[4] = 1.5; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; + stateTransitionOnTimeout[4] = "Ready"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; +// stateSound[4] = AssaultMortarReloadSound; +// stateTransitionOnNotLoaded[4] = "Deactivate"; + + stateName[5] = "Deactivate"; + stateDirection[5] = false; + stateSequence[5] = "Activate"; + stateTimeoutValue[5] = 1; + stateTransitionOnLoaded[5] = "ActivateReady"; + stateTransitionOnTimeout[5] = "Dead"; + + stateName[6] = "Dead"; + stateTransitionOnLoaded[6] = "ActivateReady"; + stateTransitionOnTriggerDown[6] = "DryFire"; + + stateName[7] = "DryFire"; + stateSound[7] = AssaultMortarDryFireSound; + stateTimeoutValue[7] = 1.5; + stateTransitionOnTimeout[7] = "NoAmmo"; + + stateName[8] = "NoAmmo"; + stateTransitionOnAmmo[8] = "Reload"; + stateSequence[8] = "NoAmmo"; + stateTransitionOnTriggerDown[8] = "DryFire"; +}; + +datablock TurretImageData(AssaultTurretParam) +{ + mountPoint = 2; + shapeFile = "turret_muzzlepoint.dts"; + + projectile = AssaultChaingunBullet; + projectileType = TracerProjectile; + + // Turret parameters + activationMS = 1000; + deactivateDelayMS = 1500; + thinkTimeMS = 200; + degPerSecTheta = 500; + degPerSecPhi = 500; + + attackRadius = 75; +}; + + + diff --git a/base/scripts/vehicles/vehicle_wildcat.cs b/base/scripts/vehicles/vehicle_wildcat.cs new file mode 100644 index 0000000..6c653b8 --- /dev/null +++ b/base/scripts/vehicles/vehicle_wildcat.cs @@ -0,0 +1,164 @@ +//************************************************************** +// WILDCAT GRAV CYCLE +//************************************************************** +//************************************************************** +// SOUNDS +//************************************************************** + +datablock AudioProfile(ScoutSqueelSound) +{ + filename = "fx/vehicles/outrider_skid.wav"; + description = ClosestLooping3d; + preload = true; +}; + +// Scout +datablock AudioProfile(ScoutEngineSound) +{ + filename = "fx/vehicles/outrider_engine.wav"; + description = AudioDefaultLooping3d; + preload = true; +}; + +datablock AudioProfile(ScoutThrustSound) +{ + filename = "fx/vehicles/outrider_boost.wav"; + description = AudioDefaultLooping3d; + preload = true; +}; + +//************************************************************** +// VEHICLE CHARACTERISTICS +//************************************************************** + +datablock HoverVehicleData(ScoutVehicle) : GravCycleDamageProfile +{ + spawnOffset = "0 0 1"; + + floatingGravMag = 2.5; + + catagory = "Vehicles"; + shapeFile = "vehicle_grav_scout.dts"; + computeCRC = true; + + debrisShapeName = "vehicle_grav_scout_debris.dts"; + debris = ShapeDebris; + + drag = 0.0; + density = 0.9; + + mountPose[0] = scoutRoot; + cameraMaxDist = 5.0; + cameraOffset = 0.7; + cameraLag = 0.5; + numMountPoints = 1; + isProtectedMountPoint[0] = true; + explosion = VehicleExplosion; + + lightOnly = 1; + + maxDamage = 0.60; + destroyedLevel = 0.60; + + isShielded = true; + rechargeRate = 0.7; + energyPerDamagePoint = 75; + maxEnergy = 150; + minJetEnergy = 15; + jetEnergyDrain = 1.3; + + collDamageThresholdVel = 20.0; + collDamageMultiplier = 0.01; + + // Rigid Body + mass = 400; + bodyFriction = 0.1; + bodyRestitution = 0.5; + minImpactSpeed = 10; + softImpactSpeed = 10; // Play SoftImpact Sound + hardImpactSpeed = 25; // Play HardImpact Sound + speedDamageScale = 0.008; + + dragForce = 25 / 45.0; + vertFactor = 0.0; + floatingThrustFactor = 0.35; + + mainThrustForce = 25; + reverseThrustForce = 10; + strafeThrustForce = 8; + turboFactor = 2.0; + + brakingForce = 25; + brakingActivationSpeed = 4; + + stabLenMin = 2.25; + stabLenMax = 3.25; + stabSpringConstant = 30; + stabDampingConstant = 12; + + gyroDrag = 16; + normalForce = 30; + restorativeForce = 20; + steeringForce = 25; + rollForce = 15; + pitchForce = 7; + + dustEmitter = VehicleLiftoffDustEmitter; + triggerDustHeight = 2.5; + dustHeight = 1.0; + dustTrailEmitter = TireEmitter; + dustTrailOffset = "0.0 -1.0 0.5"; + triggerTrailHeight = 3.6; + dustTrailFreqMod = 15.0; + + jetSound = ScoutSqueelSound; + engineSound = ScoutEngineSound; + floatSound = ScoutThrustSound; + softImpactSound = GravSoftImpactSound; + hardImpactSound = HardImpactSound; + wheelImpactSound = WheelImpactSound; + + // + softSplashSoundVelocity = 20.0; + mediumSplashSoundVelocity = 50.0; + hardSplashSoundVelocity = 100.0; + exitSplashSoundVelocity = 20.0; + + exitingWater = VehicleExitWaterSoftSound; + impactWaterEasy = VehicleImpactWaterSoftSound; + impactWaterMedium = VehicleImpactWaterSoftSound; + impactWaterHard = VehicleImpactWaterMediumSound; + waterWakeSound = VehicleWakeSoftSplashSound; + + minMountDist = 4; + + damageEmitter[0] = SmallLightDamageSmoke; + damageEmitter[1] = SmallHeavyDamageSmoke; + damageEmitter[2] = DamageBubbles; + damageEmitterOffset[0] = "0.0 -1.5 0.5 "; + damageLevelTolerance[0] = 0.3; + damageLevelTolerance[1] = 0.7; + numDmgEmitterAreas = 1; + + splashEmitter[0] = VehicleFoamDropletsEmitter; + splashEmitter[1] = VehicleFoamEmitter; + + shieldImpact = VehicleShieldImpact; + + forwardJetEmitter = WildcatJetEmitter; + + cmdCategory = Tactical; + cmdIcon = CMDHoverScoutIcon; + cmdMiniIconName = "commander/MiniIcons/com_landscout_grey"; + targetNameTag = 'WildCat'; + targetTypeTag = 'Hover Vehicle'; + sensorData = VehiclePulseSensor; + + checkRadius = 1.7785; + observeParameters = "1 10 10"; +}; + +//************************************************************** +// WEAPONS +//************************************************************** + diff --git a/base/scripts/voiceBinds.cs b/base/scripts/voiceBinds.cs new file mode 100644 index 0000000..2f0cc76 --- /dev/null +++ b/base/scripts/voiceBinds.cs @@ -0,0 +1,208 @@ +//------------------------------------------------------------------------------ +// +// voiceBinds.cs +// +//------------------------------------------------------------------------------ + +startChatMenu( "G Global" ); + startChatMenu( "A Animations" ); + addChat( "A Move", 'ChatAnimAnnoyed' ); + addChat( "G I'm the greatest", 'ChatAnimGetSome' ); + addChat( "D Woohoo", 'ChatAnimDance' ); + addChat( "S I'm on it", 'ChatAnimSalute' ); + addChat( "W Hi", 'ChatAnimWave' ); + addChat( "Z Take that", 'ChatAnimSpec1' ); + addChat( "X Too bad", 'ChatAnimSpec2' ); + addChat( "C Awesome", 'ChatAnimSpec3' ); + endChatMenu(); + startChatMenu( "C Compliment" ); + addChat( "A Awesome!", 'ChatAwesome' ); + addChat( "G Good game.", 'ChatGoodGame' ); + addChat( "N Nice move!", 'ChatNice' ); + addChat( "R You rock!", 'ChatYouRock' ); + addChat( "S Great shot!", 'ChatGreatShot' ); + endChatMenu(); + startChatMenu( "R Respond" ); + addChat( "A Any time", 'ChatAnyTime' ); + addChat( "D Don't know", 'ChatDontKnow' ); + addChat( "T Thanks", 'ChatThanks' ); + addChat( "W Wait", 'ChatWait' ); + endChatMenu(); + startChatMenu( "T Taunt" ); + addChat( "A Aww...", 'ChatAww' ); + addChat( "B Best you can do?", 'ChatObnoxious' ); + addChat( "G I am the greatest!", 'ChatBrag' ); + addChat( "T THAT was graceful!", 'ChatSarcasm' ); + addChat( "W When will you learn?", 'ChatLearn' ); + endChatMenu(); + addChat( "Y Yes", 'ChatGlobalYes' ); + addChat( "N No", 'ChatGlobalNo' ); + addChat( "H Hi", 'ChatHi' ); + addChat( "B Bye", 'ChatBye' ); + addChat( "O Oops.", 'ChatOops' ); + addChat( "Q Quiet!", 'ChatQuiet' ); + addChat( "S Shazbot!", 'ChatShazbot' ); + addChat( "W Woohoo!", 'ChatCheer' ); +endChatMenu(); + +startChatMenu( "A Attack" ); + addChat( "A Attack!", 'ChatCmdAttack' ); + addChat( "B Base", 'ChatCmdAttackBase' ); + addChat( "C Chase", 'ChatCmdAttackChase' ); + addChat( "D Disrupt", 'ChatCmdAttackDistract' ); + addChat( "F Flag", 'ChatCmdAttackFlag' ); + addChat( "G Generator", 'ChatCmdAttackGenerator' ); + addChat( "O Objective", 'ChatCmdAttackObjective' ); + addChat( "R Reinforce", 'ChatCmdAttackReinforce' ); + addChat( "S Sensors", 'ChatCmdAttackSensors' ); + addChat( "T Turrets", 'ChatCmdAttackTurrets' ); + addChat( "V Vehicle", 'ChatCmdAttackVehicle' ); + addChat( "W Wait", 'ChatCmdAttackWait' ); +endChatMenu(); + +startChatMenu( "D Defend" ); + addChat( "B Base", 'ChatCmdDefendBase' ); + addChat( "C Flag carrier", 'ChatCmdDefendCarrier' ); + addChat( "E Entrances", 'ChatCmdDefendEntrances' ); + addChat( "F Flag", 'ChatCmdDefendFlag' ); + addChat( "G Generator", 'ChatCmdDefendGenerator' ); + addChat( "M Me", 'ChatCmdDefendMe' ); + addChat( "N Nexus", 'ChatCmdDefendNexus' ); + addChat( "O Objective", 'ChatCmdDefendObjective' ); + addChat( "R Reinforce", 'ChatCmdDefendReinforce' ); + addChat( "S Sensors", 'ChatCmdDefendSensors' ); + addChat( "T Turrets", 'ChatCmdDefendTurrets' ); + addChat( "V Vehicle", 'ChatCmdDefendVehicle' ); +endChatMenu(); + +startChatMenu( "R Repair" ); + addChat( "B Base", 'ChatRepairBase' ); + addChat( "G Generator", 'ChatRepairGenerator' ); + addChat( "M Me", 'ChatRepairMe' ); + addChat( "S Sensors", 'ChatRepairSensors' ); + addChat( "T Turrets", 'ChatRepairTurrets' ); + addChat( "V Vehicle bay", 'ChatRepairVehicle' ); +endChatMenu(); + +startChatMenu( "B Base" ); + addChat( "C Clear", 'ChatBaseClear' ); + addChat( "E Enemy in base", 'ChatEnemyInBase' ); + addChat( "R Retake", 'ChatCmdRetakeBase' ); + addChat( "S Secure", 'ChatBaseSecure' ); + addChat( "T Taken", 'ChatBaseTaken' ); +endChatMenu(); + +startChatMenu( "C Command" ); + addChat( "A Acknowledged", 'ChatCmdAcknowledged' ); + addChat( "C Completed", 'ChatCmdCompleted' ); + addChat( "D Declined", 'ChatCmdDeclined' ); + addChat( "W Assignment?", 'ChatCmdWhat' ); +endChatMenu(); + +startChatMenu( "E Enemy" ); + addChat( "B Base disabled", 'ChatEnemyBaseDisabled' ); + addChat( "D Disarray", 'ChatEnemyDisarray' ); + addChat( "G Generator destroyed", 'ChatEnemyGeneratorDestroyed' ); + addChat( "R Remotes destroyed", 'ChatEnemyRemotesDestroyed' ); + addChat( "S Sensors destroyed", 'ChatEnemySensorsDestroyed' ); + addChat( "T Turrets destroyed", 'ChatEnemyTurretsDestroyed' ); + addChat( "V Vehicle bay destroyed", 'ChatEnemyVehicleDestroyed' ); +endChatMenu(); + +startChatMenu( "F Flag" ); + addChat( "D Defend", 'ChatCmdDefendFlag' ); + addChat( "F I have the flag", 'ChatFlagGotIt' ); + addChat( "G Give me", 'ChatCmdGiveMeFlag' ); + addChat( "R Retrieve", 'ChatCmdReturnFlag' ); + addChat( "S Secure", 'ChatFlagSecure' ); + addChat( "T Take", 'ChatCmdTakeFlag' ); + addChat( "O Give me your flags", 'ChatCmdHunterGiveFlags' ); + addChat( "P Take my flags", 'ChatCmdHunterTakeFlags' ); +endChatMenu(); + +startChatMenu( "N Need" ); + addChat( "B Bombardier", 'ChatNeedBombardier' ); + addChat( "C Cover", 'ChatNeedCover' ); + addChat( "D Driver", 'ChatNeedDriver' ); + addChat( "E Escort", 'ChatNeedEscort' ); + addChat( "G Gunship ready", 'ChatNeedPassengers' ); + addChat( "H Hold vehicle", 'ChatNeedHold' ); + addChat( "P Pilot", 'ChatNeedPilot' ); + addChat( "R Ride", 'ChatNeedRide' ); + addChat( "S Support", 'ChatNeedSupport' ); + addChat( "T Tailgunner", 'ChatNeedTailgunner' ); + addChat( "W Where to?", 'ChatNeedDestination' ); +endChatMenu(); + +startChatMenu( "S Self" ); + startChatMenu( "A Attack" ); + addChat( "A Attack", 'ChatSelfAttack' ); + addChat( "B Base", 'ChatSelfAttackBase' ); + addChat( "F Flag", 'ChatSelfAttackFlag' ); + addChat( "G Generator", 'ChatSelfAttackGenerator' ); + addChat( "S Sensors", 'ChatSelfAttackSensors' ); + addChat( "T Turrets", 'ChatSelfAttackTurrets' ); + addChat( "V Vehicle bay", 'ChatSelfAttackVehicle' ); + endChatMenu(); + startChatMenu( "D Defend" ); + addChat( "B Base", 'ChatSelfDefendBase' ); + addChat( "D Defend", 'ChatSelfDefend' ); + addChat( "F Flag", 'ChatSelfDefendFlag' ); + addChat( "G Generator", 'ChatSelfDefendGenerator' ); + addChat( "N Nexus", 'ChatSelfDefendNexus' ); + addChat( "S Sensors", 'ChatSelfDefendSensors' ); + addChat( "T Turrets", 'ChatSelfDefendTurrets' ); + addChat( "V Vehicle bay", 'ChatSelfDefendVehicle' ); + endChatMenu(); + startChatMenu( "R Repair" ); + addChat( "B Base", 'ChatSelfRepairBase' ); + addChat( "E Equipment", 'ChatSelfRepairEquipment' ); + addChat( "G Generator", 'ChatSelfRepairGenerator' ); + addChat( "R Repair", 'ChatSelfRepair' ); + addChat( "S Sensors", 'ChatSelfRepairSensors' ); + addChat( "T Turrets", 'ChatSelfRepairTurrets' ); + addChat( "V Vehicle bay", 'ChatSelfRepairVehicle' ); + endChatMenu(); + startChatMenu( "T Task" ); + addChat( "C Cover", 'ChatTaskCover' ); + addChat( "D Setup defenses", 'ChatTaskSetupD' ); + addChat( "O On it", 'ChatTaskOnIt' ); + addChat( "R Deploy remotes", 'ChatTaskSetupRemote' ); + addChat( "S Deploy sensors", 'ChatTaskSetupSensors' ); + addChat( "T Deploy turrets", 'ChatTaskSetupTurrets' ); + addChat( "V Vehicle", 'ChatTaskVehicle' ); + endChatMenu(); +endChatMenu(); + +startChatMenu( "T Target" ); + addChat( "A Acquired", 'ChatTargetAcquired' ); + addChat( "B Base", 'ChatCmdTargetBase' ); + addChat( "D Destroyed", 'ChatTargetDestroyed' ); + addChat( "F Flag", 'ChatCmdTargetFlag' ); + addChat( "M Fire on my target", 'ChatTargetFire' ); + addChat( "N Need", 'ChatTargetNeed' ); + addChat( "S Sensors", 'ChatCmdTargetSensors' ); + addChat( "T Turret", 'ChatCmdTargetTurret' ); + addChat( "W Wait", 'ChatCmdTargetWait' ); +endChatMenu(); + +startChatMenu( "W Warning" ); + addChat( "B Bomber", 'ChatWarnBomber' ); + addChat( "E Enemies", 'ChatWarnEnemies' ); + addChat( "V Vehicles", 'ChatWarnVehicles' ); + addChat( "W Watch your shooting", 'ChatWarnShoot' ); +endChatMenu(); + +startChatMenu( "V Very quick" ); + addChat( "Y Yes", 'ChatTeamYes' ); + addChat( "N No", 'ChatTeamNo' ); + addChat( "A Any time", 'ChatWelcome' ); + addChat( "B Base secure?", 'ChatIsBaseSecure' ); + addChat( "C Cease fire", 'ChatCeaseFire' ); + addChat( "D Don't know", 'ChatDunno' ); + addChat( "H HELP!", 'ChatHelp' ); + addChat( "M Move", 'ChatMove' ); + addChat( "S Sorry", 'ChatSorry' ); + addChat( "T Thanks", 'ChatTeamThanks' ); + addChat( "W Wait", 'ChatTeamWait' ); +endChatMenu(); diff --git a/base/scripts/voiceChat.cs b/base/scripts/voiceChat.cs new file mode 100644 index 0000000..44ba6af --- /dev/null +++ b/base/scripts/voiceChat.cs @@ -0,0 +1,286 @@ +$voiceLines = 8; +$voiceLineTimeout = 7 * 1000; +$numTalking = 0; + +//------------------------------------------------------------------------------ +function clientCmdPlayerStartTalking(%client, %success) +{ + //error("Client " @ %client @ " start talking, success = " @ %success); + // if more people are talking than we can handle, don't bother with names + if($numTalking > $voiceLines) + return; + + %openLine = -1; + for(%i = 0; %i < $voiceLines; %i++) + { + if($voiceComm[%i] <= 0) + { + %openLine = %i; + break; + } + } + if(%openLine != -1) + { + $voiceComm[%openLine] = %client; + if(%success) + addGreenVoiceLine(%client, %openLine); + else + addRedVoiceLine(%client, %openLine); + $numTalking++; + resizeVoiceCommWindow(); + if(!(voiceCommHud.isVisible())) + voiceCommHud.setVisible(true); + } +} + +//------------------------------------------------------------------------------ +function clientCmdPlayerStoppedTalking(%client, %success) +{ + %doneLine = -1; + for(%i = 0; %i < $voiceLines; %i++) { + if($voiceComm[%i] == %client) { + %doneLine = %i; + break; + } + } + if(%doneLine != -1) + %rmSuccess = removeVoiceLine(%doneLine); + //else + // error("Did not find voice line for client " @ %client); +} + +//------------------------------------------------------------------------------ +function addGreenVoiceLine(%client, %line) +{ + %name = "Unknown client"; + %player = $PlayerList[%client]; + + if(%player) + %name = %player.name; + + %speakLine = new GuiControl("VCH"@%line) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "2 " @ (%line + 1) * 15; + extent = "160 15"; + visible = true; + + new GuiBitmapCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + bitmap = "gui/hud_chat_button_on.png"; + position = "0 0"; + extent = "15 15"; + visible = true; + }; + + new GuiTextCtrl() { + profile = "GuiVoiceGreenProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 0"; + extent = "140 15"; + text = %name; + visible = true; + }; + }; + voiceCommHud.add(%speakLine); + schedule($voiceLineTimeout, 0, "removeVoiceLine", %line); +} + +//------------------------------------------------------------------------------ +function addRedVoiceLine(%client, %line) +{ + %name = "Unknown client"; + + %player = $PlayerList[%client]; + if(%player) + %name = %player.name; + + %speakLine = new GuiControl("VCH"@%line) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "3 " @ (%line + 1) * 15; + extent = "150 15"; + visible = true; + + new GuiBitmapCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + bitmap = "gui/hud_chat_button_off.png"; + position = "0 0"; + extent = "15 15"; + visible = true; + }; + + new GuiTextCtrl() { + profile = "GuiVoiceGreenProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "20 0"; + extent = "125 15"; + text = %name; + visible = true; + }; + }; + voiceCommHud.add(%speakLine); + schedule($voiceLineTimeout, 0, "removeVoiceLine", %line); +} + +//------------------------------------------------------------------------------ +function removeVoiceLine(%line) +{ + %killIt = nameToID("VCH" @ %line); + $voiceComm[%line] = 0; + if(%killIt == -1) { + //error("Could not find control VCH" @ %line @ " !!!!"); + return 0; + } + else { + //error("Removing voice line " @ %line); + %killIt.delete(); + $voiceComm[%line] = 0; + $numTalking--; + if($numTalking < 1) + voiceCommHud.setVisible(false); + resizeVoiceCommWindow(); + return 1; + } +} + +function resizeVoiceCommWindow() +{ + %lastLine = -1; + for(%i = 0; %i < $voiceLines; %i++) + { + if($voiceComm[%i] > 0) + %lastLine = %i; + } + %yExt = ((%lastLine + 1) * 15) + 18; + %xExt = firstWord(voiceCommHud.extent); + voiceCommHud.extent = %xExt SPC %yExt; +} +//------------------------------------------------------------------------------ +// SERVER command functions: +//------------------------------------------------------------------------------ +function serverCmdListenTo(%client, %who, %boolean) +{ + if ( %client == %who ) + return; + + %client.listenTo( %who, %boolean ); + + if ( %echo ) + { + if ( %boolean ) + messageClient( %client, 'MsgVoiceEnable', 'You will now listen to %3.', %boolean, %who, %who.name ); + else + messageClient( %client, 'MsgVoiceEnable', 'You will no longer listen to %3.', %boolean, %who, %who.name ); + } + else + messageClient( %client, 'MsgVoiceEnable', "", %boolean, %who ); + + messageClient( %who, 'MsgListenState', "", %boolean, %client ); +} + +//------------------------------------------------------------------------------ +function serverCmdListenToAll(%client) +{ + %client.listenToAll(); + + for ( %i = 0; %i < ClientGroup.getCount(); %i++ ) + { + %cl = ClientGroup.getObject( %i ); + if ( %cl && %cl != %client && !%cl.isAIControlled() ) + messageClient( %client, 'MsgVoiceEnable', "", true, %cl ); + } + + messageAllExcept( %client, 'MsgListenState', "", true, %client ); +} + +//------------------------------------------------------------------------------ +function serverCmdListenToNone(%client) +{ + %client.listenToNone(); + + for ( %i = 0; %i < ClientGroup.getCount(); %i++ ) + { + %cl = ClientGroup.getObject( %i ); + if ( %cl && %cl != %client && !%cl.isAIControlled() ) + messageClient( %client, 'MsgVoiceEnable', "", false, %cl ); + } + + messageAllExcept( %client, 'MsgListenState', "", false, %client ); +} + +//------------------------------------------------------------------------------ +function serverCmdSetVoiceChannels(%client, %number) +{ + %wasEnabled = %client.listenEnabled(); + %client.setVoiceChannels(%number); + + if ( %wasEnabled != ( %number > 0 ) ) + updateCanListenState( %client ); +} + +//------------------------------------------------------------------------------ +// SERVER side update function: +//------------------------------------------------------------------------------ +function updateCanListenState( %client ) +{ + // These can never listen, so they don't need to be updated: + if ( %client.isAIControlled() || !%client.listenEnabled() ) + return; + + for ( %i = 0; %i < ClientGroup.getCount(); %i++ ) + { + %cl = ClientGroup.getObject( %i ); + if ( %cl && %cl != %client && !%cl.isAIControlled() ) + { + messageClient( %cl, 'MsgCanListen', "", %client.canListenTo( %cl ), %client ); + messageClient( %client, 'MsgCanListen', "", %cl.canListenTo( %client ), %cl ); + } + } +} + +//------------------------------------------------------------------------------ +// CLIENT side handler functions: +//------------------------------------------------------------------------------ +addMessageCallback( 'MsgVoiceEnable', handleVoiceEnableMessage ); + +function handleVoiceEnableMessage( %msgType, %msgString, %enabled, %who ) +{ + if ( isObject( $PlayerList[%who] ) ) + { + $PlayerList[%who].voiceEnabled = %enabled; + lobbyUpdatePlayer( %who ); + } +} + +//------------------------------------------------------------------------------ +addMessageCallback( 'MsgCanListen', handleCanListenMessage ); + +function handleCanListenMessage( %msgType, %msgString, %canListen, %who ) +{ + if ( isObject( $PlayerList[%who] ) ) + { + $PlayerList[%who].canListen = %canListen; + lobbyUpdatePlayer( %who ); + } +} + +//------------------------------------------------------------------------------ +addMessageCallback( 'MsgListenState', handleListenStateMessage ); + +function handleListenStateMessage( %msgType, %msgString, %isListening, %who ) +{ + if ( isObject( $PlayerList[%who] ) ) + { + $PlayerList[%who].isListening = %isListening; + lobbyUpdatePlayer( %who ); + } +} \ No newline at end of file diff --git a/base/scripts/waveProfiles.cs b/base/scripts/waveProfiles.cs new file mode 100644 index 0000000..36de0e4 --- /dev/null +++ b/base/scripts/waveProfiles.cs @@ -0,0 +1,22 @@ +//----------------------------------------------------------------------------- +// Wave Profile Lists +// +new WaveProfile(calmSea) +{ +}; + +new WaveProfile(chop) +{ +}; + +new WaveProfile(bubblyLava) +{ +}; + +new WaveProfile(coolingLava) +{ +}; + +new WaveProfile(quicksand) +{ +}; \ No newline at end of file diff --git a/base/scripts/weapTurretCode.cs b/base/scripts/weapTurretCode.cs new file mode 100644 index 0000000..b007c16 --- /dev/null +++ b/base/scripts/weapTurretCode.cs @@ -0,0 +1,856 @@ +//-------------------------------------- Ammo functions +function Ammo::onCollision(%data, %obj, %col) +{ + // %data = datablock of object; %obj = object number + // %col = thing that collided with object (hopefully a player) + + if (%col.getDataBlock().className $= Armor) + { + %ammoName = %data.getName(); + %ammoStore = %col.inv[%ammoName]; + + // if player has ammo pack, increase max amount of ammo + if(%col.getMountedImage($BackpackSlot) != 0) + { + if(%col.getMountedImage($BackpackSlot).getName() $= "AmmoPackImage") + %aMax = (%col.getDataBlock().max[%ammoName]) + AmmoPack.max[%ammoName]; + else + %aMax = %col.getDataBlock().max[%ammoName]; + } + else + %aMax = %col.getDataBlock().max[%ammoName]; + + if(%col.inv[%ammoName] < %aMax) + { + %col.incInventory(%ammoName, $AmmoIncrement[%ammoName]); + serverPlay3D(ItemPickupSound, %col.getTransform()); + %obj.respawn(); + if (%col.client > 0) + messageClient(%col.client, 'MsgItemPickup', '\c0You picked up %1.', %data.pickUpName); + } + } +} + +function GrenadeThrown::onCollision(%data, %obj, %col) +{ + // nothing you can do now... +} + +function HandInventory::onCollision(%data, %obj, %col) +{ + // %data = datablock of object; %obj = object number + // %col = thing that collided with object (hopefully a player) + if (%col.getDataBlock().className $= Armor) + { + %ammoName = %data.getName(); + %ammoStore = %col.inv[%ammoName]; + + // if player has ammo pack, increase max amount of ammo + if(%col.getMountedImage($BackpackSlot) != 0) + { + if(%col.getMountedImage($BackpackSlot).getName() $= "AmmoPackImage") + %aMax = (%col.getDataBlock().max[%ammoName]) + AmmoPack.max[%ammoName]; + else + %aMax = %col.getDataBlock().max[%ammoName]; + } + else + %aMax = %col.getDataBlock().max[%ammoName]; + + if(%data.isGrenade) + { + // it's a grenade -- see if it matches the type the player is carrying + %pgType = "None"; + for(%x = 0; $InvGrenade[%x] !$= ""; %x++) + { + %gren = $NameToInv[$InvGrenade[%x]]; + if(%col.inv[%gren] > 0) + { + %pgType = %gren; + break; + } + } + if((%pgType $= "None") || (%pgType $= %ammoName)) + { + // player either has no grenades or this type of grenades -- OK to pick up more + %canPickup = true; + } + else + { + // player has a different kind of grenade -- don't pick this kind up + %canPickup = false; + } + } + else + %canPickup = true; + + if(%canPickup) + { + if(%col.inv[%ammoName] < %aMax) + { + %col.incInventory(%ammoName, $AmmoIncrement[%ammoName]); + serverPlay3D(ItemPickupSound, %col.getTransform()); + %obj.respawn(); + if (%col.client > 0) + messageClient(%col.client, 'MsgItemPickup', '\c0You picked up %1.', %data.pickUpName); + } + } + } +} + +//-------------------------------------- Specific turret functions + +function SentryTurret::onAdd(%data, %obj) +{ + Parent::onAdd(%data, %obj); + + //error("error"); + %obj.mountImage(%data.barrel, 0, true); +} + +function TurretDeployedCamera::onAdd(%this, %obj) +{ + Parent::onAdd(%this, %obj); + %obj.mountImage(DeployableCameraBarrel, 0, true); +} + +function TurretDeployedCamera::onDestroyed(%this, %obj, %prevState) +{ + Parent::onDestroyed(%this, %obj, %prevState); + $TeamDeployedCount[%obj.team, DeployedCamera]--; + // doesn't seem to delete itself, so... + %obj.schedule(500, "delete"); +} + +function ScoutFlyer::onTrigger(%data, %obj, %trigger, %state) +{ + // data = ScoutFlyer datablock + // obj = ScoutFlyer object number + // trigger = 0 for "fire", 1 for "jump", 3 for "thrust" + // state = 1 for firing, 0 for not firing + if(%trigger == 0) + { + switch (%state) { + case 0: + %obj.fireWeapon = false; + %obj.setImageTrigger(2, false); + %obj.setImageTrigger(3, false); + case 1: + %obj.fireWeapon = true; + if(%obj.nextWeaponFire == 2) { + %obj.setImageTrigger(2, true); + %obj.setImageTrigger(3, false); + } + else { + %obj.setImageTrigger(2, false); + %obj.setImageTrigger(3, true); + } + } + } +} + +function ScoutFlyer::playerDismounted(%data, %obj, %player) +{ + %obj.fireWeapon = false; + %obj.setImageTrigger(2, false); + %obj.setImageTrigger(3, false); + setTargetSensorGroup(%obj.getTarget(), %obj.team); +} + +function ScoutChaingunImage::onFire(%data,%obj,%slot) +{ + // obj = ScoutFlyer object number + // slot = 2 + + Parent::onFire(%data,%obj,%slot); + %obj.nextWeaponFire = 3; + schedule(%data.fireTimeout, 0, "fireNextGun", %obj); +} + +function ScoutChaingunPairImage::onFire(%data,%obj,%slot) +{ + // obj = ScoutFlyer object number + // slot = 3 + + Parent::onFire(%data,%obj,%slot); + %obj.nextWeaponFire = 2; + schedule(%data.fireTimeout, 0, "fireNextGun", %obj); +} + +function fireNextGun(%obj) +{ + if(%obj.fireWeapon) + { + if(%obj.nextWeaponFire == 2) + { + %obj.setImageTrigger(2, true); + %obj.setImageTrigger(3, false); + } + else + { + %obj.setImageTrigger(2, false); + %obj.setImageTrigger(3, true); + } + } + else + { + %obj.setImageTrigger(2, false); + %obj.setImageTrigger(3, false); + } +} + +function ScoutChaingunImage::onTriggerDown(%this, %obj, %slot) +{ +} + +function ScoutChaingunImage::onTriggerUp(%this, %obj, %slot) +{ +} + +function ScoutChaingunImage::onMount(%this, %obj, %slot) +{ +// %obj.setImageAmmo(%slot,true); +} + +function ScoutChaingunPairImage::onMount(%this, %obj, %slot) +{ +// %obj.setImageAmmo(%slot,true); +} + +function ScoutChaingunImage::onUnmount(%this,%obj,%slot) +{ +} + +function ScoutChaingunPairImage::onUnmount(%this,%obj,%slot) +{ +} + + +function BomberTurret::onDamage() +{ +} + +function BomberTurret::damageObject(%this, %damageObj, %projectile, %amount, %damageType) +{ + //If vehicle turret is hit then apply damage to the vehicle + %vehicle = %damageObj.getObjectMount(); + %vehicle.getDataBlock().damageObject(%vehicle, %projectile, %amount, %damageType); +} + +function VehicleTurret::onEndSequence(%data, %obj, %thread) +{ + if($DeployThread == %thread) + %obj.stopThread($DeployThread); +} + +function BomberTurret::onTrigger(%data, %obj, %trigger, %state) +{ + //error("onTrigger: trigger = " @ %trigger @ ", state = " @ %state); + //error("obj = " @ %obj @ ", class " @ %obj.getClassName()); + switch (%trigger) + { + case 0: + %obj.fireTrigger = %state; + if(%obj.selectedWeapon == 1) + { + %obj.setImageTrigger(4, false); + if(%obj.getImageTrigger(6)) + { + %obj.setImageTrigger(6, false); + ShapeBaseImageData::deconstruct(%obj.getMountedImage(6), %obj); + } + if(%state) + %obj.setImageTrigger(2, true); + else + %obj.setImageTrigger(2, false); + } + else if(%obj.selectedWeapon == 2) + { + %obj.setImageTrigger(2, false); + if(%obj.getImageTrigger(6)) + { + %obj.setImageTrigger(6, false); + ShapeBaseImageData::deconstruct(%obj.getMountedImage(6), %obj); + } + if(%state) + %obj.setImageTrigger(4, true); + else + %obj.setImageTrigger(4, false); + } + else + { + %obj.setImageTrigger(2, false); + %obj.setImageTrigger(4, false); + if(%state) + %obj.setImageTrigger(6, true); + else + { + %obj.setImageTrigger(6, false); + BomberTargetingImage::deconstruct(%obj.getMountedImage(6), %obj); + } + } + + case 2: + if(%state) + { + %obj.getDataBlock().playerDismount(%obj); + } + } +} + +function BomberTurret::playerDismount(%data, %obj) +{ + //Passenger Exiting + %obj.fireTrigger = 0; + %obj.setImageTrigger(2, false); + %obj.setImageTrigger(4, false); + %obj.setImageTrigger(6, false); + %client = %obj.getControllingClient(); + commandToClient(%client, 'endBomberSight'); +// %client.player.setControlObject(%client.player); + %client.player.mountVehicle = false; +// %client.player.getDataBlock().doDismount(%client.player); + if(%client.player.getState() !$= "Dead") + %client.player.mountImage(%client.player.lastWeapon, $WeaponSlot); + setTargetSensorGroup(%obj.getTarget(), 0); + setTargetNeverVisMask(%obj.getTarget(), 0xffffffff); +} + +//function BomberTurret::getHudNum(%data, %num) +//{ +// if(%num == 1) +// return 0; +// else +// return 4; +//} + +function AIAimingTurretBarrel::onFire(%this,%obj,%slot) +{ +} + +function BomberBombImage::onUnmount(%this,%obj,%slot) +{ +} + +function BomberBombPairImage::onUnmount(%this,%obj,%slot) +{ +} + +function BomberTurretBarrel::onTriggerDown(%this, %obj, %slot) +{ + %obj.schedule(300, "setImageTrigger", 3, true); +} + +function BomberTurretBarrel::onTriggerUp(%this, %obj, %slot) +{ + %obj.schedule(400, "setImageTrigger", 3, false); +} + +function BomberTurretBarrelPair::onMount(%this, %obj, %slot) +{ +// %obj.setImageAmmo(%slot,true); +} + +function BomberTurretBarrel::onMount(%this, %obj, %slot) +{ +// %obj.setImageAmmo(%slot,true); +} + + +function BomberBombImage::onTriggerDown(%this, %obj, %slot) +{ + %obj.schedule(500, "setImageTrigger", 5, true); +} + +function BomberBombImage::onTriggerUp(%this, %obj, %slot) +{ + %obj.schedule(600, "setImageTrigger", 5, false); +} + +function BomberBombPairImage::onMount(%this, %obj, %slot) +{ +// %obj.setImageAmmo(%slot,true); +} + +function BomberBombImage::onMount(%this, %obj, %slot) +{ +} + +function BomberBombImage::onUnmount(%this,%obj,%slot) +{ +} + +function BomberBombPairImage::onUnmount(%this,%obj,%slot) +{ +} + +function MobileTurretBase::onAdd(%this, %obj) +{ + Parent::onAdd(%this, %obj); + setTargetSensorGroup(%obj.target, %obj.team); + setTargetNeverVisMask(%obj.target, 0xffffffff); +} + +function MobileTurretBase::onDamage() +{ +} + +function MobileTurretBase::damageObject(%this, %targetObject, %sourceObject, %position, %amount, %damageType) +{ + //If vehicle turret is hit then apply damage to the vehicle + %vehicle = %damageObj.getObjectMount(); + %vehicle.getDataBlock().damageObject(%vehicle, %sourceObject, %position, %amount, %damageType); +} + +function MobileTurretBase::onEndSequence(%data, %obj, %thread) +{ + //Used so that the parent wont be called.. +} + +function AssaultPlasmaTurret::onDamage() +{ +} + +function AssaultPlasmaTurret::damageObject(%this, %damageObj, %projectile, %amount, %damageType) +{ + //If vehicle turret is hit then apply damage to the vehicle + %vehicle = %damageObj.getObjectMount(); + %vehicle.getDataBlock().damageObject(%vehicle, %projectile, %amount, %damageType); +} + +function AssaultPlasmaTurret::onTrigger(%data, %obj, %trigger, %state) +{ + switch (%trigger) { + case 0: + %obj.fireTrigger = %state; + if(%obj.selectedWeapon == 1) + { + %obj.setImageTrigger(4, false); + if(%state) + %obj.setImageTrigger(2, true); + else + %obj.setImageTrigger(2, false); + } + else + { + %obj.setImageTrigger(2, false); + if(%state) + %obj.setImageTrigger(4, true); + else + %obj.setImageTrigger(4, false); + } + case 2: + if(%state) + { + %obj.getDataBlock().playerDismount(%obj); + } + } +} + +function AssaultPlasmaTurret::playerDismount(%data, %obj) +{ + //Passenger Exiting + %obj.fireTrigger = 0; + %obj.setImageTrigger(2, false); + %obj.setImageTrigger(4, false); + %client = %obj.getControllingClient(); +// %client.setControlObject(%client.player); + %client.player.mountImage(%client.player.lastWeapon, $WeaponSlot); + %client.player.mountVehicle = false; + setTargetSensorGroup(%obj.getTarget(), 0); + setTargetNeverVisMask(%obj.getTarget(), 0xffffffff); +// %client.player.getDataBlock().doDismount(%client.player); +} + +//function AssaultPlasmaTurret::getHudNum(%data, %num) +//{ +// if(%num == 1) +// return 1; +// else +// return 3; +//} + + +// ------------------------------------------ +// camera functions +// ------------------------------------------ + +$CameraDeployTime = 1000; +$CameraDeployCheckMax = 6; +$CameraMinVelocity = 0.1; + +function CameraGrenadeThrown::onThrow(%this, %gren) +{ + // schedule a check to see if the camera is at rest but not deployed + %gren.checkCount = 0; + %gren.velocCheck = %this.schedule($CameraDeployTime, "checkCameraDeploy", %gren); +} + +function CameraGrenadeThrown::onStickyCollision(%data, %obj) +{ + cancel(%obj.velocCheck); + %pos = %obj.getLastStickyPos(); + %norm = %obj.getLastStickyNormal(); + + %intAngle = getTerrainAngle(%norm); // staticShape.cs + %rotAxis = vectorNormalize(vectorCross(%norm, "0 0 1")); + if (getWord(%norm, 2) == 1 || getWord(%norm, 2) == -1) + %rotAxis = vectorNormalize(vectorCross(%norm, "0 1 0")); + + %rotation = %rotAxis @ " " @ %intAngle; + %dcSucc = activateCamera(%pos, %rotation, %obj.sourceObject, %obj.sourceObject.team); + if(%dcSucc == 0) + messageClient(%obj.sourceObject.client, 'MsgDeployFailed', '\c2Your team\'s control network has reached its capacity for this item.~wfx/misc/misc.error.wav'); + %obj.schedule(50,"delete"); +} + +function CameraGrenadeThrown::checkCameraDeploy(%this, %gren) +{ + %gren.checkCount++; + if(VectorLen(%gren.getVelocity()) < $CameraMinVelocity) + { + // camera has come to rest but not deployed -- probably on a staticshape (station, gen, etc) + // no resolution, so get rid of it + %gren.schedule(50, "delete"); + } + else if(%gren.checkCount >= $CameraDeployCheckMax) + { + // camera's still moving but it's been check several times -- it was thrown from too great + // a height or off the edge of the world -- delete it + %gren.schedule(50, "delete"); + } + else + { + // check back in a little while + %gren.velocCheck = %this.schedule($CameraDeployTime, "checkCameraDeploy", %gren); + } +} + +function activateCamera(%position, %rotation, %sourceObj, %team) +{ + if($TeamDeployedCount[%team, DeployedCamera] >= $TeamDeployableMax[DeployedCamera]) + { + // team has too many cameras deployed already, don't deploy this one + return 0; + } + %dCam = new Turret() + { + dataBlock = "TurretDeployedCamera"; + team = %team; + needsNoPower = true; + owner = %sourceObj.client; + ownerHandle = %sourceObj.client.handle; + position = %position; + rotation = %rotation; + }; + addToDeployGroup(%dCam); + + if(%dCam.getTarget() != -1) + setTargetSensorGroup(%dCam.getTarget(), %team); + + %dCam.playAudio($DeploySound, CameraGrenadeAttachSound); + %dCam.deploy(); + %dCam.playThread($AmbientThread, "ambient"); + + // increment team's deployed count for cameras + $TeamDeployedCount[%team, DeployedCamera]++; + return 1; +} + +function FlareGrenade::onUse(%this, %obj) +{ + // a stripped-down version of HandInventory::onUse from weapons.cs + if(Game.handInvOnUse(%data, %obj)) { + %obj.decInventory(%this, 1); + %p = new FlareProjectile() { + dataBlock = FlareGrenadeProj; + initialDirection = %obj.getEyeVector(); + initialPosition = getBoxCenter(%obj.getWorldBox()); + sourceObject = %obj; + sourceSlot = 0; + }; + FlareSet.add(%p); + MissionCleanup.add(%p); + serverPlay3D(GrenadeThrowSound, getBoxCenter(%obj.getWorldBox())); + %p.schedule(6000, "delete"); + // miscellaneous grenade-throwing cleanup stuff + %obj.lastThrowTime[%data] = getSimTime(); + %obj.throwStrength = 0; + } +} + +// uncomment when explosion type can be set from script (dont want underwater explosion here) +//function grenadeOnEnterLiquid(%data, %obj, %coverage, %type, %flash) +//{ +// // 4: Lava +// // 5: Hot Lava +// // 6: Crusty Lava +// if(%type >=4 && %type <= 6) +// { +// if(%obj.getDamageState() !$= "Destroyed") +// { +// cancel(%obj.detThread); +// if(%flash) +// detonateFlashGrenade(%obj); +// else +// detonateGrenade(%obj); +// return(true); +// } +// } +// +// // flash grenades do not ignore quicksand +// if((%type == 7) && !%flash) +// return(true); +// +// return(false); +//} + +function GrenadeThrown::onThrow(%this, %gren) +{ + AIGrenadeThrown(%gren); + %gren.detThread = schedule(1500, %gren, "detonateGrenade", %gren); +} + +//function GrenadeThrown::onEnterLiquid(%data, %obj, %coverage, %type) +//{ +// if(!grenadeOnEnterLiquid(%data, %obj, %coverage, %type, false)) +// Parent::onEnterLiquid(%data, %obj, %coverage, %type); +//} + +function ConcussionGrenadeThrown::onThrow(%this, %gren) +{ + AIGrenadeThrown(%gren); + %gren.detThread = schedule(2000, %gren, "detonateGrenade", %gren); +} + +//function ConcussionGrenadeThrown::onEnterLiquid(%data, %obj, %coverage, %type) +//{ +// if(!grenadeOnEnterLiquid(%data, %obj, %coverage, %type, false)) +// Parent::onEnterLiquid(%data, %obj, %coverage, %type); +//} + +function detonateGrenade(%obj) +{ + %obj.setDamageState(Destroyed); + %data = %obj.getDataBlock(); + RadiusExplosion( %obj, %obj.getPosition(), %data.damageRadius, %data.indirectDamage, + %data.kickBackStrength, %obj.sourceObject, %data.radiusDamageType); + %obj.schedule(500,"delete"); +} + +function FlashGrenadeThrown::onThrow(%this, %gren) +{ + %gren.detThread = schedule(2000, %gren, "detonateFlashGrenade", %gren); +} + +//function FlashGrenadeThrown::onEnterLiquid(%data, %obj, %coverage, %type) +//{ +// if(!grenadeOnEnterLiquid(%data, %obj, %coverage, %type, true)) +// Parent::onEnterLiquid(%data, %obj, %coverage, %type); +//} + +function detonateFlashGrenade(%hg) +{ + %hg.setDamageState(Destroyed); + %hgt = %hg.getTransform(); + %plX = firstword(%hgt); + %plY = getWord(%hgt, 1); + %plZ = getWord(%hgt, 2); + %pos = %plX @ " " @ %plY @ " " @ %plZ; + //all this stuff below ripped from projectiles.cs + + InitContainerRadiusSearch(%pos, 100.0, $TypeMasks::PlayerObjectType | + $TypeMasks::TurretObjectType); + + while ((%damage = containerSearchNext()) != 0) + { + %dist = containerSearchCurrDist(); + + %eyeXF = %damage.getEyeTransform(); + %epX = firstword(%eyeXF); + %epY = getWord(%eyeXF, 1); + %epZ = getWord(%eyeXF, 2); + %eyePos = %epX @ " " @ %epY @ " " @ %epZ; + %eyeVec = %damage.getEyeVector(); + + // Make sure we can see the thing... + if (ContainerRayCast(%eyePos, %pos, $TypeMasks::TerrainObjectType | + $TypeMasks::InteriorObjectType | + $TypeMasks::StaticObjectType, %damage) !$= "0") + { + continue; + } + + %distFactor = 1.0; + if (%dist >= 100) + %distFactor = 0.0; + else if (%dist >= 20) { + %distFactor = 1.0 - ((%dist - 20.0) / 80.0); + } + + %dif = VectorNormalize(VectorSub(%pos, %eyePos)); + %dot = VectorDot(%eyeVec, %dif); + + %difAcos = mRadToDeg(mAcos(%dot)); + %dotFactor = 1.0; + if (%difAcos > 60) + %dotFactor = ((1.0 - ((%difAcos - 60.0) / 120.0)) * 0.2) + 0.3; + else if (%difAcos > 45) + %dotFactor = ((1.0 - ((%difAcos - 45.0) / 15.0)) * 0.5) + 0.5; + + %totalFactor = %dotFactor * %distFactor; + %damage.setWhiteOut(%damage.getWhiteOut() + %totalFactor); + } + %hg.schedule(500, "delete"); +} + +// ---------------------------------------------- +// mine functions +// ---------------------------------------------- + + +function MineDeployed::onThrow(%this, %mine) +{ + %mine.armed = false; + %mine.damaged = 0; + %mine.detonated = false; + %mine.depCount = 0; + schedule(1500, %mine, "deployMineCheck", %mine); +} + +function deployMineCheck(%mineObj) +{ + if(%mineObj.depCount > %mineObj.getDatablock().maxDepCount) + explodeMine(%mineObj, true); + // wait until the mine comes to rest + if(%mineObj.getVelocity() $= "0 0 0") + { + // 2-second delay before mine is armed -- let deploy thread play out etc. + schedule(%mineObj.getDatablock().armTime, %mineObj, "armDeployedMine", %mineObj); + + + // check for other deployed mines in the vicinity + InitContainerRadiusSearch(%mineObj.getWorldBoxCenter(), %mineObj.getDatablock().spacing, $TypeMasks::ItemObjectType); + while((%itemObj = containerSearchNext()) != 0) + { + if(%itemObj == %mineObj) + continue; + %ioType = %itemObj.getDatablock().getName(); + if(%ioType $= "MineDeployed") + schedule(100, %mineObj, "explodeMine", %mineObj, true); + else + continue; + } + // play "deploy" thread + %mineObj.playThread(0, "deploy"); + serverPlay3D(MineDeploySound, %mineObj.getTransform()); + %mineTeam = %mineObj.sourceObject.team; + $TeamDeployedCount[%mineTeam, MineDeployed]++; + if($TeamDeployedCount[%mineTeam, MineDeployed] > $TeamDeployableMax[MineDeployed]) + schedule(100, %mineObj, "explodeMine", %mineObj, true); + else + { + //start the thread that keeps checking for objects near the mine... + mineCheckVicinity(%mineObj); + + //let the AI know *after* it's come to rest... + AIDeployMine(%mineObj); + + //let the game know there's a deployed mine + Game.notifyMineDeployed(%mineObj); + } + } + else + { + //schedule this deploy check again a little later + %mineObj.depCount++; + schedule(500, %mineObj, "deployMineCheck", %mineObj); + } +} + +function armDeployedMine(%mine) +{ + %mine.armed = true; +} + +function mineCheckVicinity(%mine) +{ + // this function is called after the mine has been deployed. It will check the + // immediate area around the mine (2.5 meters at present) for players or vehicles + // passing by, and detonate if any are found. This is to extend the range of the + // mine so players don't have to collide with them to set them off. + + // don't bother to check if mine isn't armed yet + if(%mine.armed) + // don't keep checking if mine is already detonating + if(!%mine.boom) + { + // the actual check for objects in the area + %mineLoc = %mine.getWorldBoxCenter(); + %masks = $TypeMasks::PlayerObjectType | $TypeMasks::VehicleObjectType; + %detonateRange = %mine.getDatablock().proximity; + + InitContainerRadiusSearch(%mineLoc, %detonateRange, %masks); + while((%tgt = containerSearchNext()) != 0) + { + %mine.detonated = true; + schedule(50, %mine, "explodeMine", %mine, false); + break; + } + } + // if nothing set off the mine, schedule another check + if(!%mine.detonated) + schedule(300, %mine, "mineCheckVicinity", %mine); +} + +function MineDeployed::onCollision(%data, %obj, %col) +{ + // don't detonate if mine isn't armed yet + if(!%obj.armed) + return; + + // don't detonate if mine is already detonating + if(%obj.boom) + return; + + //check to see what it is that collided with the mine + %struck = %col.getClassName(); + if(%struck $= "Player" || %struck $= "WheeledVehicle" || %struck $= "FlyingVehicle") + { + //error("Mine detonated due to collision with #"@%col@" ("@%struck@"); armed = "@%obj.armed); + explodeMine(%obj, false); + } +} + +function explodeMine(%mo, %noDamage) +{ + %mo.noDamage = %noDamage; + %mo.setDamageState(Destroyed); +} + +function MineDeployed::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType) +{ + if(!%targetObject.armed) + return; + + if(%targetObject.boom) + return; + + %targetObject.damaged += %amount; + + if(%targetObject.damaged >= %data.maxDamage) + %targetObject.setDamageState(Destroyed); +} + +function MineDeployed::onDestroyed(%data, %obj, %lastState) +{ + %obj.boom = true; + %mineTeam = %obj.sourceObject.team; + $TeamDeployedCount[%mineTeam, MineDeployed]--; + // %noDamage is a boolean flag -- don't want to set off all other mines in + // vicinity if there's a "mine overload", so apply no damage/impulse if true + if(!%obj.noDamage) + RadiusExplosion(%obj, %obj.getPosition(), %data.damageRadius, %data.indirectDamage, + %data.kickBackStrength, %obj.sourceObject, %data.radiusDamageType); + + %obj.schedule(600, "delete"); +} \ No newline at end of file diff --git a/base/scripts/weapons.cs b/base/scripts/weapons.cs new file mode 100644 index 0000000..59641e1 --- /dev/null +++ b/base/scripts/weapons.cs @@ -0,0 +1,266 @@ +$HandInvThrowTimeout = 0.8 * 1000; // 1/2 second between throwing grenades or mines + +$WeaponsHudData[0, bitmapName] = "gui/hud_blaster.png"; +$WeaponsHudData[0, itemDataName] = "Blaster"; +//$WeaponsHudData[0, ammoDataName] = ""; +$WeaponsHudData[1, bitmapName] = "gui/hud_plasma.png"; +$WeaponsHudData[1, itemDataName] = "Plasma"; +$WeaponsHudData[1, ammoDataName] = "PlasmaAmmo"; +$WeaponsHudData[2, bitmapName] = "gui/hud_chaingun.png"; +$WeaponsHudData[2, itemDataName] = "Chaingun"; +$WeaponsHudData[2, ammoDataName] = "ChaingunAmmo"; +$WeaponsHudData[3, bitmapName] = "gui/hud_disc.png"; +$WeaponsHudData[3, itemDataName] = "Disc"; +$WeaponsHudData[3, ammoDataName] = "DiscAmmo"; +$WeaponsHudData[4, bitmapName] = "gui/hud_grenlaunch.png"; +$WeaponsHudData[4, itemDataName] = "GrenadeLauncher"; +$WeaponsHudData[4, ammoDataName] = "GrenadeLauncherAmmo"; +$WeaponsHudData[5, bitmapName] = "gui/hud_sniper.png"; +$WeaponsHudData[5, itemDataName] = "SniperRifle"; +//$WeaponsHudData[5, ammoDataName] = ""; +$WeaponsHudData[6, bitmapName] = "gui/hud_elfgun.png"; +$WeaponsHudData[6, itemDataName] = "ELFGun"; +//$WeaponsHudData[6, ammoDataName] = ""; +$WeaponsHudData[7, bitmapName] = "gui/hud_mortor.png"; +$WeaponsHudData[7, itemDataName] = "Mortar"; +$WeaponsHudData[7, ammoDataName] = "MortarAmmo"; +$WeaponsHudData[8, bitmapName] = "gui/hud_missiles.png"; +$WeaponsHudData[8, itemDataName] = "MissileLauncher"; +$WeaponsHudData[8, ammoDataName] = "MissileLauncherAmmo"; +// WARNING!!! If you change the weapon index of the targeting laser, +// you must change the HudWeaponInvBase::addWeapon function to test +// for the new value! +$WeaponsHudData[9, bitmapName] = "gui/hud_targetlaser.png"; +$WeaponsHudData[9, itemDataName] = "TargetingLaser"; +//$WeaponsHudData[9, ammoDataName] = ""; +// +$WeaponsHudData[10, bitmapName] = "gui/hud_shocklance.png"; +$WeaponsHudData[10, itemDataName] = "ShockLance"; +//$WeaponsHudData[10, ammoDataName] = ""; + + +$WeaponsHudCount = 11; + + +$AmmoIncrement[PlasmaAmmo] = 10; +$AmmoIncrement[ChaingunAmmo] = 25; +$AmmoIncrement[DiscAmmo] = 5; +$AmmoIncrement[GrenadeLauncherAmmo] = 5; +$AmmoIncrement[MortarAmmo] = 5; +$AmmoIncrement[MissileLauncherAmmo] = 2; +$AmmoIncrement[Mine] = 3; +$AmmoIncrement[Grenade] = 5; +$AmmoIncrement[FlashGrenade] = 5; +$AmmoIncrement[FlareGrenade] = 5; +$AmmoIncrement[ConcussionGrenade] = 5; +$AmmoIncrement[RepairKit] = 1; + +//---------------------------------------------------------------------------- +// Weapons scripts +//-------------------------------------- + +// --- Mounting weapons +exec("scripts/weapons/blaster.cs"); +exec("scripts/weapons/plasma.cs"); +exec("scripts/weapons/chaingun.cs"); +exec("scripts/weapons/disc.cs"); +exec("scripts/weapons/grenadeLauncher.cs"); +exec("scripts/weapons/sniperRifle.cs"); +exec("scripts/weapons/ELFGun.cs"); +exec("scripts/weapons/mortar.cs"); +exec("scripts/weapons/missileLauncher.cs"); +exec("scripts/weapons/targetingLaser.cs"); +exec("scripts/weapons/shockLance.cs"); + +// --- Throwing weapons +exec("scripts/weapons/mine.cs"); +exec("scripts/weapons/grenade.cs"); +exec("scripts/weapons/flashGrenade.cs"); +exec("scripts/weapons/flareGrenade.cs"); +exec("scripts/weapons/concussionGrenade.cs"); +exec("scripts/weapons/cameraGrenade.cs"); + +//---------------------------------------------------------------------------- + +function Weapon::onUse(%data, %obj) +{ + if(Game.weaponOnUse(%data, %obj)) + if (%obj.getDataBlock().className $= Armor) + %obj.mountImage(%data.image, $WeaponSlot); +} + +function WeaponImage::onMount(%this,%obj,%slot) +{ + //MES -- is call below useful at all? + //Parent::onMount(%this, %obj, %slot); + if(%obj.getClassName() !$= "Player") + return; + + //messageClient(%obj.client, 'MsgWeaponMount', "", %this, %obj, %slot); + // Looks arm position + if (%this.armthread $= "") + { + %obj.setArmThread(look); + } + else + { + %obj.setArmThread(%this.armThread); + } + + // Initial ammo state + if(%obj.getMountedImage($WeaponSlot).ammo !$= "") + if (%obj.getInventory(%this.ammo)) + %obj.setImageAmmo(%slot,true); + + %obj.client.setWeaponsHudActive(%this.item); + if(%obj.getMountedImage($WeaponSlot).ammo !$= "") + %obj.client.setAmmoHudCount(%obj.getInventory(%this.ammo)); + else + %obj.client.setAmmoHudCount(-1); +} + +function WeaponImage::onUnmount(%this,%obj,%slot) +{ + %obj.client.setWeaponsHudActive(%this.item, 1); + %obj.client.setAmmoHudCount(-1); + // try to avoid running around with sniper/missile arm thread and no weapon + %obj.setArmThread(look); + Parent::onUnmount(%this, %obj, %slot); +} + +function Ammo::onInventory(%this,%obj,%amount) +{ + // Loop through and make sure the images using this ammo have + // their ammo states set. + for (%i = 0; %i < 8; %i++) { + %image = %obj.getMountedImage(%i); + if (%image > 0) + { + if (isObject(%image.ammo) && %image.ammo.getId() == %this.getId()) + %obj.setImageAmmo(%i,%amount != 0); + } + } + ItemData::onInventory(%this,%obj,%amount); + if(%obj.getClassname() $= "Player") + { + %obj.client.setWeaponsHudAmmo(%this.getName(), %amount); + if(%obj.getMountedImage($WeaponSlot).ammo $= %this.getName()) + %obj.client.setAmmoHudCount(%amount); + } +} + +function Weapon::onInventory(%this,%obj,%amount) +{ + if(Game.weaponOnInventory(%this, %obj, %amount)) + { + %obj.client.setWeaponsHudItem(%this.getName(), 0, 1); + ItemData::onInventory(%this,%obj,%amount); + // if a player threw a weapon (which means that player isn't currently + // holding a weapon), set armthread to "no weapon" + // MES - taken out to avoid v-menu animation problems (bug #4749) + //if((%amount == 0) && (%obj.getClassName() $= "Player")) + // %obj.setArmThread(looknw); + } +} + +function Weapon::onPickup(%this, %obj, %shape, %amount) +{ + // If player doesn't have a weapon in hand, use this one... + if ( %shape.getClassName() $= "Player" + && %shape.getMountedImage( $WeaponSlot ) == 0 ) + %shape.use( %this.getName() ); +} + +function HandInventory::onInventory(%this,%obj,%amount) +{ + // prevent console errors when throwing ammo pack + if(%obj.getClassName() $= "Player") + %obj.client.setInventoryHudAmount(%this.getName(), %amount); + ItemData::onInventory(%this,%obj,%amount); +} + +function HandInventory::onUse(%data, %obj) +{ + // %obj = player %data = datablock of what's being thrown + if(Game.handInvOnUse(%data, %obj)) + { + //AI HOOK - If you change the %throwStren, tell Tinman!!! + //Or edit aiInventory.cs and search for: use(%grenadeType); + + %tossTimeout = getSimTime() - %obj.lastThrowTime[%data]; + if(%tossTimeout < $HandInvThrowTimeout) + return; + + %throwStren = %obj.throwStrength; + + %obj.decInventory(%data, 1); + %thrownItem = new Item() + { + dataBlock = %data.thrownItem; + sourceObject = %obj; + }; + MissionCleanup.add(%thrownItem); + + // throw it + %eye = %obj.getEyeVector(); + %vec = vectorScale(%eye, (%throwStren * 20.0)); + + // add a vertical component to give it a better arc + %dot = vectorDot("0 0 1", %eye); + if(%dot < 0) + %dot = -%dot; + %vec = vectorAdd(%vec, vectorScale("0 0 4", 1 - %dot)); + + // add player's velocity + %vec = vectorAdd(%vec, vectorScale(%obj.getVelocity(), 0.4)); + %pos = getBoxCenter(%obj.getWorldBox()); + + + %thrownItem.sourceObject = %obj; + %thrownItem.setTransform(%pos); + + %thrownItem.applyImpulse(%pos, %vec); + %thrownItem.setCollisionTimeout(%obj); + serverPlay3D(GrenadeThrowSound, %pos); + %obj.lastThrowTime[%data] = getSimTime(); + + %thrownItem.getDataBlock().onThrow(%thrownItem); + %obj.throwStrength = 0; + } +} + +function HandInventoryImage::onMount(%this,%obj,%slot) +{ + messageClient(%col.client, 'MsgHandInventoryMount', "", %this, %obj, %slot); + // Looks arm position + if (%this.armthread $= "") + %obj.setArmThread(look); + else + %obj.setArmThread(%this.armThread); + + // Initial ammo state + if (%obj.getInventory(%this.ammo)) + %obj.setImageAmmo(%slot,true); + + %obj.client.setWeaponsHudActive(%this.item); +} + +function Weapon::incCatagory(%data, %obj) +{ + // Don't count the targeting laser as a weapon slot: + if ( %data.getName() !$= "TargetingLaser" ) + %obj.weaponCount++; +} + +function Weapon::decCatagory(%data, %obj) +{ + // Don't count the targeting laser as a weapon slot: + if ( %data.getName() !$= "TargetingLaser" ) + %obj.weaponCount--; +} + +function SimObject::damageObject(%data) +{ + //function was added to reduce console err msg spam +} + diff --git a/base/scripts/weapons/ELFGun.cs b/base/scripts/weapons/ELFGun.cs new file mode 100644 index 0000000..14ee48f --- /dev/null +++ b/base/scripts/weapons/ELFGun.cs @@ -0,0 +1,157 @@ +//-------------------------------------------------------------------------- +// ELF Gun +//-------------------------------------------------------------------------- +datablock EffectProfile(ELFGunSwitchEffect) +{ + effectname = "weapons/generic_switch"; + minDistance = 2.5; +}; + +datablock EffectProfile(ELFGunFireEffect) +{ + effectname = "weapons/ELF_fire"; + minDistance = 10.0; +}; + +datablock EffectProfile(ElfFireWetEffect) +{ + effectname = "weapons/ELF_underwater"; + minDistance = 10.0; +}; + +datablock AudioProfile(ELFGunSwitchSound) +{ + filename = "fx/weapons/generic_switch.wav"; + description = AudioClosest3d; + preload = true; + effect = ELFGunSwitchEffect; +}; + +datablock AudioProfile(ELFGunFireSound) +{ + filename = "fx/weapons/ELF_fire.wav"; + description = CloseLooping3d; + preload = true; + effect = ELFGunFireEffect; +}; + +datablock AudioProfile(ElfFireWetSound) +{ + filename = "fx/weapons/ELF_underwater.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(ELFHitTargetSound) +{ + filename = "fx/weapons/ELF_hit.wav"; + description = CloseLooping3d; + preload = true; +}; + +//-------------------------------------- +// Projectile +//-------------------------------------- +datablock ELFProjectileData(BasicELF) +{ + beamRange = 37; + numControlPoints = 8; + restorativeFactor = 3.75; + dragFactor = 4.5; + endFactor = 2.25; + randForceFactor = 2; + randForceTime = 0.125; + drainEnergy = 1.0; + drainHealth = 0.0; + directDamageType = $DamageType::ELF; + mainBeamWidth = 0.1; // width of blue wave beam + mainBeamSpeed = 9.0; // speed that the beam travels forward + mainBeamRepeat = 0.25; // number of times the texture repeats + lightningWidth = 0.1; + lightningDist = 0.15; // distance of lightning from main beam + + fireSound = ElfGunFireSound; + wetFireSound = ElfFireWetSound; + + textures[0] = "special/ELFBeam"; + textures[1] = "special/ELFLightning"; + textures[2] = "special/BlueImpact"; + +}; + +//-------------------------------------- +// Rifle and item... +//-------------------------------------- +datablock ItemData(ELFGun) +{ + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_elf.dts"; + image = ELFGunImage; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "an ELF gun"; + + computeCRC = true; + emap = true; +}; + +datablock ShapeBaseImageData(ELFGunImage) +{ + className = WeaponImage; + + shapeFile = "weapon_elf.dts"; + item = ELFGun; + offset = "0 0 0"; + + projectile = BasicELF; + projectileType = ELFProjectile; + deleteLastProjectile = true; + emap = true; + + + usesEnergy = true; + minEnergy = 3; + + stateName[0] = "Activate"; + stateSequence[0] = "Activate"; + stateSound[0] = ELFGunSwitchSound; + stateTimeoutValue[0] = 0.5; + stateTransitionOnTimeout[0] = "ActivateReady"; + + stateName[1] = "ActivateReady"; + stateTransitionOnAmmo[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; + + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "CheckWet"; + + stateName[3] = "Fire"; + stateEnergyDrain[3] = 5; + stateFire[3] = true; + stateAllowImageChange[3] = false; + stateScript[3] = "onFire"; + stateTransitionOnTriggerUp[3] = "Deconstruction"; + stateTransitionOnNoAmmo[3] = "Deconstruction"; + //stateSound[3] = ElfFireWetSound; + + stateName[4] = "NoAmmo"; + stateTransitionOnAmmo[4] = "Ready"; + + stateName[5] = "Deconstruction"; + stateScript[5] = "deconstruct"; + stateTransitionOnTimeout[5] = "Ready"; + stateTransitionOnNoAmmo[6] = "NoAmmo"; + + stateName[6] = "DryFire"; + stateSound[6] = ElfFireWetSound; + stateTimeoutValue[6] = 0.5; + stateTransitionOnTimeout[6] = "Ready"; + + stateName[7] = "CheckWet"; + stateTransitionOnWet[7] = "DryFire"; + stateTransitionOnNotWet[7] = "Fire"; +}; diff --git a/base/scripts/weapons/blaster.cs b/base/scripts/weapons/blaster.cs new file mode 100644 index 0000000..bd44c06 --- /dev/null +++ b/base/scripts/weapons/blaster.cs @@ -0,0 +1,335 @@ +//-------------------------------------- +// Default blaster +//-------------------------------------- + +//-------------------------------------------------------------------------- +// Force-Feedback Effects +//-------------------------------------- +datablock EffectProfile(BlasterSwitchEffect) +{ + effectname = "weapons/blaster_activate"; + minDistance = 2.5; +}; + +datablock EffectProfile(BlasterFireEffect) +{ + effectname = "weapons/blaster_fire"; + minDistance = 3.0; +}; + +//-------------------------------------------------------------------------- +// Sounds +//-------------------------------------- +datablock AudioProfile(BlasterSwitchSound) +{ + filename = "fx/weapons/blaster_activate.wav"; + description = AudioClosest3d; + preload = true; + effect = BlasterSwitchEffect; +}; + +datablock AudioProfile(BlasterFireSound) +{ + filename = "fx/weapons/blaster_fire.WAV"; + description = AudioDefault3d; + preload = true; + effect = BlasterFireEffect; +}; + +datablock AudioProfile(BlasterProjectileSound) +{ + filename = "fx/weapons/blaster_projectile.WAV"; + description = ProjectileLooping3d; + preload = true; +}; + +datablock AudioProfile(blasterExpSound) +{ + filename = "fx/weapons/blaster_impact.WAV"; + description = AudioClosest3d; + preload = true; +}; + +datablock AudioProfile(BlasterDryFireSound) +{ + filename = "fx/weapons/chaingun_dryfire.wav"; + description = AudioClose3d; + preload = true; +}; + +//-------------------------------------------------------------------------- +// Splash +//-------------------------------------------------------------------------- + +datablock ParticleData( BlasterSplashParticle ) +{ + dragCoefficient = 1; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + constantAcceleration = -1.4; + lifetimeMS = 300; + lifetimeVarianceMS = 0; + textureName = "special/droplet"; + colors[0] = "0.7 0.8 1.0 1.0"; + colors[1] = "0.7 0.8 1.0 0.5"; + colors[2] = "0.7 0.8 1.0 0.0"; + sizes[0] = 0.05; + sizes[1] = 0.2; + sizes[2] = 0.2; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData( BlasterSplashEmitter ) +{ + ejectionPeriodMS = 4; + periodVarianceMS = 0; + ejectionVelocity = 4; + velocityVariance = 1.0; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 50; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 100; + particles = "BlasterSplashParticle"; +}; + +datablock SplashData(BlasterSplash) +{ + numSegments = 15; + ejectionFreq = 15; + ejectionAngle = 40; + ringLifetime = 0.35; + lifetimeMS = 300; + velocity = 3.0; + startRadius = 0.0; + acceleration = -3.0; + texWrap = 5.0; + + texture = "special/water2"; + + emitter[0] = BlasterSplashEmitter; + + colors[0] = "0.7 0.8 1.0 1.0"; + colors[1] = "0.7 0.8 1.0 1.0"; + colors[2] = "0.7 0.8 1.0 0.0"; + colors[3] = "0.7 0.8 1.0 0.0"; + times[0] = 0.0; + times[1] = 0.4; + times[2] = 0.8; + times[3] = 1.0; +}; + +//-------------------------------------------------------------------------- +// Explosion +//-------------------------------------- +datablock ParticleData(BlasterExplosionParticle1) +{ + dragCoefficient = 2; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + constantAcceleration = -0.0; + lifetimeMS = 600; + lifetimeVarianceMS = 000; + textureName = "special/crescent4"; + colors[0] = "1.0 0.8 0.2 1.0"; + colors[1] = "1.0 0.4 0.2 1.0"; + colors[2] = "1.0 0.0 0.0 0.0"; + sizes[0] = 0.25; + sizes[1] = 0.5; + sizes[2] = 1.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(BlasterExplosionEmitter) +{ + ejectionPeriodMS = 7; + periodVarianceMS = 0; + ejectionVelocity = 2; + velocityVariance = 1.5; + ejectionOffset = 0.0; + thetaMin = 70; + thetaMax = 80; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 200; + particles = "BlasterExplosionParticle1"; +}; + +datablock ParticleData(BlasterExplosionParticle2) +{ + dragCoefficient = 2; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + constantAcceleration = -0.0; + lifetimeMS = 600; + lifetimeVarianceMS = 000; + textureName = "special/blasterHit"; + colors[0] = "1.0 0.2 0.2 1.0"; + colors[1] = "1.0 0.2 0.2 0.5"; + colors[2] = "1.0 0.0 0.0 0.0"; + sizes[0] = 0.3; + sizes[1] = 0.90; + sizes[2] = 1.50; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(BlasterExplosionEmitter2) +{ + ejectionPeriodMS = 30; + periodVarianceMS = 0; + ejectionVelocity = 1; + velocityVariance = 0.0; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 80; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = false; + lifetimeMS = 200; + particles = "BlasterExplosionParticle2"; +}; + +datablock ExplosionData(BlasterExplosion) +{ + soundProfile = blasterExpSound; + emitter[0] = BlasterExplosionEmitter; + emitter[1] = BlasterExplosionEmitter2; +}; + + +//-------------------------------------------------------------------------- +// Projectile +//-------------------------------------- + +datablock EnergyProjectileData(EnergyBolt) +{ + emitterDelay = -1; + directDamage = 0.15; + directDamageType = $DamageType::Blaster; + kickBackStrength = 0.0; + bubbleEmitTime = 1.0; + + sound = BlasterProjectileSound; + velInheritFactor = 0.5; + + explosion = "BlasterExplosion"; + splash = BlasterSplash; + + + grenadeElasticity = 0.998; + grenadeFriction = 0.0; + armingDelayMS = 500; + + muzzleVelocity = 90.0; + + drag = 0.05; + + gravityMod = 0.0; + + dryVelocity = 200.0; + wetVelocity = 150.0; + + reflectOnWaterImpactAngle = 0.0; + explodeOnWaterImpact = false; + deflectionOnWaterImpact = 0.0; + fizzleUnderwaterMS = 3000; + + hasLight = true; + lightRadius = 3.0; + lightColor = "0.5 0.175 0.175"; + + scale = "0.25 20.0 1.0"; + crossViewAng = 0.99; + crossSize = 0.55; + + lifetimeMS = 3000; + blurLifetime = 0.2; + blurWidth = 0.25; + blurColor = "0.4 0.0 0.0 1.0"; + + texture[0] = "special/blasterBolt"; + texture[1] = "special/blasterBoltCross"; +}; + + +//-------------------------------------------------------------------------- +// Weapon +//-------------------------------------- +datablock ShapeBaseImageData(BlasterImage) +{ + className = WeaponImage; + shapeFile = "weapon_energy.dts"; + item = Blaster; + projectile = EnergyBolt; + projectileType = EnergyProjectile; + + usesEnergy = true; + fireEnergy = 4; + minEnergy = 4; + + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; + stateSound[0] = BlasterSwitchSound; + + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; + + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "Fire"; + + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.3; + stateFire[3] = true; + stateRecoil[3] = NoRecoil; + stateAllowImageChange[3] = false; + stateSequence[3] = "Fire"; + stateSound[3] = BlasterFireSound; + stateScript[3] = "onFire"; + + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; + + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; + + stateName[6] = "DryFire"; + stateTimeoutValue[6] = 0.3; + stateSound[6] = BlasterDryFireSound; + stateTransitionOnTimeout[6] = "Ready"; +}; + +datablock ItemData(Blaster) +{ + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_energy.dts"; + image = BlasterImage; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "a blaster"; +}; + diff --git a/base/scripts/weapons/cameraGrenade.cs b/base/scripts/weapons/cameraGrenade.cs new file mode 100644 index 0000000..b205b40 --- /dev/null +++ b/base/scripts/weapons/cameraGrenade.cs @@ -0,0 +1,179 @@ +// ------------------------------------------------------------------ +// Deployable camera script +// +// Cameras will occupy grenade slots vice backpack slots. The player +// will "throw" them like grenades, and they should stick to (and +// deploy on) interior surfaces and terrain. +// ------------------------------------------------------------------ + +$TeamDeployableMax[DeployedCamera] = 20; + +// ------------------------------------------ +// force-feedback effect datablocks +// ------------------------------------------ + +datablock EffectProfile(CameraGrenadeActivateEffect) +{ + effectname = "weapons/grenade_camera_activate"; + minDistance = 3.0; +}; + +datablock EffectProfile(CameraGrenadeAttachEffect) +{ + effectname = "weapons/grenade_camera_activate"; + minDistance = 3.0; +}; + +datablock EffectProfile(CameraGrenadeExplosionEffect) +{ + effectname = "explosions/explosion.xpl10"; + minDistance = 10; + maxDistance = 50; +}; + +// ------------------------------------------ +// sound datablocks +// ------------------------------------------ + +datablock AudioProfile(CameraGrenadeActivateSound) +{ + filename = "fx/weapons/grenade_camera_activate.wav"; + description = AudioClosest3d; + preload = true; + effect = CameraGrenadeActivateEffect; +}; + +datablock AudioProfile(CameraGrenadeAttachSound) +{ + filename = "fx/weapons/grenade_camera_attach.wav"; + description = AudioClosest3d; + preload = true; + effect = CameraGrenadeAttachEffect; +}; + +datablock AudioProfile(CameraGrenadeExplosionSound) +{ + filename = "fx/explosions/explosion.xpl10.wav"; + description = AudioExplosion3d; + preload = true; + effect = CameraGrenadeExplosionEffect; +}; + +//-------------------------------------------------------------------------- +// Camera explosion particle effects +//-------------------------------------------------------------------------- +datablock ExplosionData(CameraGrenadeExplosion) +{ + soundProfile = CameraGrenadeExplosionSound; + faceViewer = true; + + explosionShape = "effect_plasma_explosion.dts"; + playSpeed = 1.0; + sizes[0] = "0.2 0.2 0.2"; + sizes[1] = "0.3 0.3 0.3"; +}; + + +// ------------------------------------------ +// other datablocks +// ------------------------------------------ + +datablock ItemData(CameraGrenadeThrown) +{ + shapeFile = "camera.dts"; + mass = 0.7; + elasticity = 0.2; + friction = 1; + pickupRadius = 2; + maxDamage = 0.8; + sticky = true; + emap = true; + +}; + +datablock ItemData(CameraGrenade) +{ + className = HandInventory; + catagory = "Handheld"; + shapeFile = "camera.dts"; + mass = 0.7; + elasticity = 0.2; + friction = 1; + pickupRadius = 2; + thrownItem = CameraGrenadeThrown; + pickUpName = "a deployable camera"; + + computeCRC = true; + emap = true; +}; + +datablock SensorData(CameraSensorObject) +{ + detects = true; + detectsUsingLOS = true; + detectionPings = false; + detectsPassiveJammed = true; + detectRadius = 40; + detectsFOVOnly = true; +}; + +datablock TurretData(TurretDeployedCamera) : TurretDamageProfile +{ + className = CameraTurret; + shapeFile = "camera.dts"; + + mass = 0.7; + maxDamage = 0.2; + destroyedLevel = 0.2; + disabledLevel = 0.2; + repairRate = 0; + explosion = CameraGrenadeExplosion; + + thetaMin = 0; + thetaMax = 180; + //thetaNull = 90; + + isShielded = false; + energyPerDamagePoint = 40; + maxEnergy = 30; + renderWhenDestroyed = false; + rechargeRate = 0.05; + + cameraDefaultFov = 150; + cameraMinFov = 150; + cameraMaxFov = 150; + + neverUpdateControl = true; + + canControl = true; + canObserve = true; + observeThroughObject = true; + cmdCategory = "DSupport"; + cmdIcon = CMDCameraIcon; + cmdMiniIconName = "commander/MiniIcons/com_camera_grey"; + targetNameTag = 'Deployed'; + targetTypeTag = 'Camera'; + sensorData = CameraSensorObject; + sensorRadius = CameraSensorObject.detectRadius; + + firstPersonOnly = true; + observeParameters = "0.5 4.5 4.5"; + + debrisShapeName = "debris_generic_small.dts"; + debris = SmallShapeDebris; +}; + +datablock TurretImageData(DeployableCameraBarrel) +{ + shapeFile = "turret_muzzlepoint.dts"; + + usesEnergy = false; + + // Turret parameters + activationMS = 100; + deactivateDelayMS = 100; + thinkTimeMS = 100; + degPerSecTheta = 180; + degPerSecPhi = 360; +}; + diff --git a/base/scripts/weapons/chaingun.cs b/base/scripts/weapons/chaingun.cs new file mode 100644 index 0000000..4fb6c10 --- /dev/null +++ b/base/scripts/weapons/chaingun.cs @@ -0,0 +1,670 @@ +//-------------------------------------- +// Chaingun +//-------------------------------------- + +//-------------------------------------------------------------------------- +// Force-Feedback Effects +//-------------------------------------- +datablock EffectProfile(ChaingunSwitchEffect) +{ + effectname = "weapons/chaingun_activate"; + minDistance = 2.5; +}; + +datablock EffectProfile(ChaingunFireEffect) +{ + effectname = "weapons/chaingun_fire"; + minDistance = 4.0; +}; + +datablock EffectProfile(ChaingunSpinUpEffect) +{ + effectname = "weapons/chaingun_spinup"; + minDistance = 2.5; +}; + +datablock EffectProfile(ChaingunSpinDownEffect) +{ + effectname = "weapons/chaingun_spindown"; + minDistance = 2.5; +}; + +datablock EffectProfile(ChaingunDryFire) +{ + effectname = "weapons/chaingun_dryfire"; + minDistance = 2.5; +}; + +//-------------------------------------------------------------------------- +// Sounds +//-------------------------------------- +datablock AudioProfile(ChaingunSwitchSound) +{ + filename = "fx/weapons/chaingun_activate.wav"; + description = AudioClosest3d; + preload = true; + effect = ChaingunSwitchEffect; +}; + +datablock AudioProfile(ChaingunFireSound) +{ + filename = "fx/weapons/chaingun_fire.wav"; + description = AudioDefaultLooping3d; + preload = true; + effect = ChaingunFireEffect; +}; + +datablock AudioProfile(ChaingunProjectile) +{ + filename = "fx/weapons/chaingun_projectile.wav"; + description = ProjectileLooping3d; + preload = true; +}; + +datablock AudioProfile(ChaingunImpact) +{ + filename = "fx/weapons/chaingun_impact.WAV"; + description = AudioClosest3d; + preload = true; +}; + +datablock AudioProfile(ChaingunSpinDownSound) +{ + filename = "fx/weapons/chaingun_spindown.wav"; + description = AudioClosest3d; + preload = true; + effect = ChaingunSpinDownEffect; +}; + +datablock AudioProfile(ChaingunSpinUpSound) +{ + filename = "fx/weapons/chaingun_spinup.wav"; + description = AudioClosest3d; + preload = true; + effect = ChaingunSpinUpEffect; +}; + +datablock AudioProfile(ChaingunDryFireSound) +{ + filename = "fx/weapons/chaingun_dryfire.wav"; + description = AudioClose3d; + preload = true; + effect = ChaingunDryFire; +}; + +datablock AudioProfile(ShrikeBlasterProjectileSound) +{ + filename = "fx/vehicles/shrike_blaster_projectile.wav"; + description = ProjectileLooping3d; + preload = true; +}; + + +//-------------------------------------------------------------------------- +// Splash +//-------------------------------------------------------------------------- + +datablock ParticleData( ChaingunSplashParticle ) +{ + dragCoefficient = 1; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + constantAcceleration = -1.4; + lifetimeMS = 300; + lifetimeVarianceMS = 0; + textureName = "special/droplet"; + colors[0] = "0.7 0.8 1.0 1.0"; + colors[1] = "0.7 0.8 1.0 0.5"; + colors[2] = "0.7 0.8 1.0 0.0"; + sizes[0] = 0.05; + sizes[1] = 0.2; + sizes[2] = 0.2; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData( ChaingunSplashEmitter ) +{ + ejectionPeriodMS = 4; + periodVarianceMS = 0; + ejectionVelocity = 3; + velocityVariance = 1.0; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 50; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 100; + particles = "ChaingunSplashParticle"; +}; + + +datablock SplashData(ChaingunSplash) +{ + numSegments = 10; + ejectionFreq = 10; + ejectionAngle = 20; + ringLifetime = 0.4; + lifetimeMS = 400; + velocity = 3.0; + startRadius = 0.0; + acceleration = -3.0; + texWrap = 5.0; + + texture = "special/water2"; + + emitter[0] = ChaingunSplashEmitter; + + colors[0] = "0.7 0.8 1.0 0.0"; + colors[1] = "0.7 0.8 1.0 1.0"; + colors[2] = "0.7 0.8 1.0 0.0"; + colors[3] = "0.7 0.8 1.0 0.0"; + times[0] = 0.0; + times[1] = 0.4; + times[2] = 0.8; + times[3] = 1.0; +}; + +//-------------------------------------------------------------------------- +// Particle Effects +//-------------------------------------- +datablock ParticleData(ChaingunFireParticle) +{ + dragCoefficient = 2.75; + gravityCoefficient = 0.1; + inheritedVelFactor = 0.0; + constantAcceleration = 0.0; + lifetimeMS = 550; + lifetimeVarianceMS = 0; + textureName = "particleTest"; + colors[0] = "0.46 0.36 0.26 1.0"; + colors[1] = "0.46 0.36 0.26 0.0"; + sizes[0] = 0.25; + sizes[1] = 0.20; +}; + +datablock ParticleEmitterData(ChaingunFireEmitter) +{ + ejectionPeriodMS = 6; + periodVarianceMS = 0; + ejectionVelocity = 10; + velocityVariance = 1.0; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 12; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvance = true; + particles = "ChaingunFireParticle"; +}; + +//-------------------------------------------------------------------------- +// Explosions +//-------------------------------------- +datablock ParticleData(ChaingunExplosionParticle1) +{ + dragCoefficient = 0.65; + gravityCoefficient = 0.3; + inheritedVelFactor = 0.0; + constantAcceleration = 0.0; + lifetimeMS = 500; + lifetimeVarianceMS = 150; + textureName = "particleTest"; + colors[0] = "0.56 0.36 0.26 1.0"; + colors[1] = "0.56 0.36 0.26 0.0"; + sizes[0] = 0.0625; + sizes[1] = 0.2; +}; + +datablock ParticleEmitterData(ChaingunExplosionEmitter) +{ + ejectionPeriodMS = 10; + periodVarianceMS = 0; + ejectionVelocity = 0.75; + velocityVariance = 0.25; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 60; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + particles = "ChaingunExplosionParticle1"; +}; + + + + +datablock ParticleData(ChaingunImpactSmokeParticle) +{ + dragCoefficient = 0.0; + gravityCoefficient = -0.2; + inheritedVelFactor = 0.0; + constantAcceleration = 0.0; + lifetimeMS = 1000; + lifetimeVarianceMS = 200; + useInvAlpha = true; + spinRandomMin = -90.0; + spinRandomMax = 90.0; + textureName = "particleTest"; + colors[0] = "0.7 0.7 0.7 0.0"; + colors[1] = "0.7 0.7 0.7 0.4"; + colors[2] = "0.7 0.7 0.7 0.0"; + sizes[0] = 0.5; + sizes[1] = 0.5; + sizes[2] = 1.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(ChaingunImpactSmoke) +{ + ejectionPeriodMS = 8; + periodVarianceMS = 1; + ejectionVelocity = 1.0; + velocityVariance = 0.5; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 35; + overrideAdvances = false; + particles = "ChaingunImpactSmokeParticle"; + lifetimeMS = 50; +}; + + +datablock ParticleData(ChaingunSparks) +{ + dragCoefficient = 1; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + constantAcceleration = 0.0; + lifetimeMS = 300; + lifetimeVarianceMS = 0; + textureName = "special/spark00"; + colors[0] = "0.56 0.36 0.26 1.0"; + colors[1] = "0.56 0.36 0.26 1.0"; + colors[2] = "1.0 0.36 0.26 0.0"; + sizes[0] = 0.6; + sizes[1] = 0.2; + sizes[2] = 0.05; + times[0] = 0.0; + times[1] = 0.2; + times[2] = 1.0; + +}; + +datablock ParticleEmitterData(ChaingunSparkEmitter) +{ + ejectionPeriodMS = 4; + periodVarianceMS = 0; + ejectionVelocity = 4; + velocityVariance = 2.0; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 50; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 100; + particles = "ChaingunSparks"; +}; + + +datablock ExplosionData(ChaingunExplosion) +{ + soundProfile = ChaingunImpact; + + emitter[0] = ChaingunImpactSmoke; + emitter[1] = ChaingunSparkEmitter; + + faceViewer = false; +}; + + +datablock ShockwaveData(ScoutChaingunHit) +{ + width = 0.5; + numSegments = 13; + numVertSegments = 1; + velocity = 0.5; + acceleration = 2.0; + lifetimeMS = 900; + height = 0.1; + verticalCurve = 0.5; + + mapToTerrain = false; + renderBottom = false; + orientToNormal = true; + + texture[0] = "special/shockwave5"; + texture[1] = "special/gradient"; + texWrap = 3.0; + + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + + colors[0] = "0.6 0.6 1.0 1.0"; + colors[1] = "0.6 0.3 1.0 0.5"; + colors[2] = "0.0 0.0 1.0 0.0"; +}; + +datablock ParticleData(ScoutChaingunExplosionParticle1) +{ + dragCoefficient = 2; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + constantAcceleration = -0.0; + lifetimeMS = 600; + lifetimeVarianceMS = 000; + textureName = "special/crescent4"; + colors[0] = "0.6 0.6 1.0 1.0"; + colors[1] = "0.6 0.3 1.0 1.0"; + colors[2] = "0.0 0.0 1.0 0.0"; + sizes[0] = 0.25; + sizes[1] = 0.5; + sizes[2] = 1.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(ScoutChaingunExplosionEmitter) +{ + ejectionPeriodMS = 10; + periodVarianceMS = 0; + ejectionVelocity = 2; + velocityVariance = 1.5; + ejectionOffset = 0.0; + thetaMin = 80; + thetaMax = 90; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 200; + particles = "ScoutChaingunExplosionParticle1"; +}; + +datablock ExplosionData(ScoutChaingunExplosion) +{ + soundProfile = blasterExpSound; + shockwave = ScoutChaingunHit; + emitter[0] = ScoutChaingunExplosionEmitter; +}; + + +//-------------------------------------------------------------------------- +// Particle effects +//-------------------------------------- + + +datablock DebrisData( ShellDebris ) +{ + shapeName = "weapon_chaingun_ammocasing.dts"; + + lifetime = 3.0; + + minSpinSpeed = 300.0; + maxSpinSpeed = 400.0; + + elasticity = 0.5; + friction = 0.2; + + numBounces = 3; + + fade = true; + staticOnMaxBounce = true; + snapOnMaxBounce = true; +}; + + +//-------------------------------------------------------------------------- +// Projectile +//-------------------------------------- +datablock DecalData(ChaingunDecal1) +{ + sizeX = 0.05; + sizeY = 0.05; + textureName = "special/bullethole1"; +}; +datablock DecalData(ChaingunDecal2) : ChaingunDecal1 +{ + textureName = "special/bullethole2"; +}; + +datablock DecalData(ChaingunDecal3) : ChaingunDecal1 +{ + textureName = "special/bullethole3"; +}; +datablock DecalData(ChaingunDecal4) : ChaingunDecal1 +{ + textureName = "special/bullethole4"; +}; +datablock DecalData(ChaingunDecal5) : ChaingunDecal1 +{ + textureName = "special/bullethole5"; +}; +datablock DecalData(ChaingunDecal6) : ChaingunDecal1 +{ + textureName = "special/bullethole6"; +}; + + +datablock TracerProjectileData(ChaingunBullet) +{ + doDynamicClientHits = true; + + directDamage = 0.0825; + directDamageType = $DamageType::Bullet; + explosion = "ChaingunExplosion"; + splash = ChaingunSplash; + + kickBackStrength = 0.0; + sound = ChaingunProjectile; + + dryVelocity = 425.0; + wetVelocity = 100.0; + velInheritFactor = 1.0; + fizzleTimeMS = 3000; + lifetimeMS = 3000; + explodeOnDeath = false; + reflectOnWaterImpactAngle = 0.0; + explodeOnWaterImpact = false; + deflectionOnWaterImpact = 0.0; + fizzleUnderwaterMS = 3000; + + tracerLength = 15.0; + tracerAlpha = false; + tracerMinPixels = 6; + tracerColor = 211.0/255.0 @ " " @ 215.0/255.0 @ " " @ 120.0/255.0 @ " 0.75"; + tracerTex[0] = "special/tracer00"; + tracerTex[1] = "special/tracercross"; + tracerWidth = 0.10; + crossSize = 0.20; + crossViewAng = 0.990; + renderCross = true; + + decalData[0] = ChaingunDecal1; + decalData[1] = ChaingunDecal2; + decalData[2] = ChaingunDecal3; + decalData[3] = ChaingunDecal4; + decalData[4] = ChaingunDecal5; + decalData[5] = ChaingunDecal6; +}; + +//-------------------------------------------------------------------------- +// Scout Projectile +//-------------------------------------- +datablock TracerProjectileData(ScoutChaingunBullet) +{ + doDynamicClientHits = true; + + directDamage = 0.125; + explosion = "ScoutChaingunExplosion"; + splash = ChaingunSplash; + + directDamageType = $DamageType::ShrikeBlaster; + kickBackStrength = 0.0; + + sound = ShrikeBlasterProjectileSound; + + dryVelocity = 425.0; + wetVelocity = 100.0; + velInheritFactor = 1.0; + fizzleTimeMS = 3000; + lifetimeMS = 3000; + explodeOnDeath = false; + reflectOnWaterImpactAngle = 0.0; + explodeOnWaterImpact = false; + deflectionOnWaterImpact = 0.0; + fizzleUnderwaterMS = 3000; + + tracerLength = 45.0; + tracerAlpha = false; + tracerMinPixels = 6; + tracerColor = "1.0 1.0 1.0 1.0"; + tracerTex[0] = "special/shrikeBolt"; + tracerTex[1] = "special/shrikeBoltCross"; + tracerWidth = 0.55; + crossSize = 0.99; + crossViewAng = 0.990; + renderCross = true; + +}; + +//-------------------------------------------------------------------------- +// Ammo +//-------------------------------------- + +datablock ItemData(ChaingunAmmo) +{ + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_chaingun.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "some chaingun ammo"; + + computeCRC = true; + +}; + +//-------------------------------------------------------------------------- +// Weapon +//-------------------------------------- +datablock ShapeBaseImageData(ChaingunImage) +{ + className = WeaponImage; + shapeFile = "weapon_chaingun.dts"; + item = Chaingun; + ammo = ChaingunAmmo; + projectile = ChaingunBullet; + projectileType = TracerProjectile; + emap = true; + + casing = ShellDebris; + shellExitDir = "1.0 0.3 1.0"; + shellExitOffset = "0.15 -0.56 -0.1"; + shellExitVariance = 15.0; + shellVelocity = 3.0; + + projectileSpread = 8.0 / 1000.0; + + //-------------------------------------- + stateName[0] = "Activate"; + stateSequence[0] = "Activate"; + stateSound[0] = ChaingunSwitchSound; + stateAllowImageChange[0] = false; + // + stateTimeoutValue[0] = 0.5; + stateTransitionOnTimeout[0] = "Ready"; + stateTransitionOnNoAmmo[0] = "NoAmmo"; + + //-------------------------------------- + stateName[1] = "Ready"; + stateSpinThread[1] = Stop; + // + stateTransitionOnTriggerDown[1] = "Spinup"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; + + //-------------------------------------- + stateName[2] = "NoAmmo"; + stateTransitionOnAmmo[2] = "Ready"; + stateSpinThread[2] = Stop; + stateTransitionOnTriggerDown[2] = "DryFire"; + + //-------------------------------------- + stateName[3] = "Spinup"; + stateSpinThread[3] = SpinUp; + stateSound[3] = ChaingunSpinupSound; + // + stateTimeoutValue[3] = 0.5; + stateWaitForTimeout[3] = false; + stateTransitionOnTimeout[3] = "Fire"; + stateTransitionOnTriggerUp[3] = "Spindown"; + + //-------------------------------------- + stateName[4] = "Fire"; + stateSequence[4] = "Fire"; + stateSequenceRandomFlash[4] = true; + stateSpinThread[4] = FullSpeed; + stateSound[4] = ChaingunFireSound; + //stateRecoil[4] = LightRecoil; + stateAllowImageChange[4] = false; + stateScript[4] = "onFire"; + stateFire[4] = true; + stateEjectShell[4] = true; + // + stateTimeoutValue[4] = 0.15; + stateTransitionOnTimeout[4] = "Fire"; + stateTransitionOnTriggerUp[4] = "Spindown"; + stateTransitionOnNoAmmo[4] = "EmptySpindown"; + + //-------------------------------------- + stateName[5] = "Spindown"; + stateSound[5] = ChaingunSpinDownSound; + stateSpinThread[5] = SpinDown; + // + stateTimeoutValue[5] = 1.0; + stateWaitForTimeout[5] = true; + stateTransitionOnTimeout[5] = "Ready"; + stateTransitionOnTriggerDown[5] = "Spinup"; + + //-------------------------------------- + stateName[6] = "EmptySpindown"; + stateSound[6] = ChaingunSpinDownSound; + stateSpinThread[6] = SpinDown; + // + stateTimeoutValue[6] = 0.5; + stateTransitionOnTimeout[6] = "NoAmmo"; + + //-------------------------------------- + stateName[7] = "DryFire"; + stateSound[7] = ChaingunDryFireSound; + stateTimeoutValue[7] = 0.5; + stateTransitionOnTimeout[7] = "NoAmmo"; +}; + +datablock ItemData(Chaingun) +{ + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_chaingun.dts"; + image = ChaingunImage; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "a chaingun"; + + computeCRC = true; + emap = true; +}; + diff --git a/base/scripts/weapons/concussionGrenade.cs b/base/scripts/weapons/concussionGrenade.cs new file mode 100644 index 0000000..54cb03b --- /dev/null +++ b/base/scripts/weapons/concussionGrenade.cs @@ -0,0 +1,188 @@ +// grenade (thrown by hand) script +// ------------------------------------------------------------------------ + +datablock EffectProfile(ConcussionGrenadeThrowEffect) +{ + effectname = "weapons/grenade_throw"; + minDistance = 2.5; +}; + +datablock EffectProfile(ConcussionGrenadeSwitchEffect) +{ + effectname = "weapons/generic_switch"; + minDistance = 2.5; +}; + +datablock EffectProfile(ConcussionGrenadeExplosionEffect) +{ + effectname = "explosions/grenade_explode"; + minDistance = 10; + maxDistance = 50; +}; + +datablock AudioProfile(ConcussionGrenadeExplosionSound) +{ + filename = "fx/weapons/grenade_explode.wav"; + description = AudioExplosion3d; + preload = true; + effect = ConcussionGrenadeExplosionEffect; +}; + + +//-------------------------------------------------------------------------- +// Sparks +//-------------------------------------------------------------------------- +datablock ParticleData(ConcussionGrenadeSparks) +{ + dragCoefficient = 1; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + constantAcceleration = 0.0; + lifetimeMS = 500; + lifetimeVarianceMS = 350; + textureName = "special/bigSpark"; + colors[0] = "0.56 0.36 1.0 1.0"; + colors[1] = "0.56 0.36 1.0 1.0"; + colors[2] = "1.0 0.36 1.0 0.0"; + sizes[0] = 0.5; + sizes[1] = 0.25; + sizes[2] = 0.25; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + +}; + +datablock ParticleEmitterData(ConcussionGrenadeSparkEmitter) +{ + ejectionPeriodMS = 1; + periodVarianceMS = 0; + ejectionVelocity = 12; + velocityVariance = 6.75; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 180; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 100; + particles = "ConcussionGrenadeSparks"; +}; + +datablock ParticleData( ConcussionGrenadeCrescentParticle ) +{ + dragCoefficient = 2; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + constantAcceleration = -0.0; + lifetimeMS = 600; + lifetimeVarianceMS = 000; + textureName = "special/crescent3"; + colors[0] = "0.8 0.8 1.0 1.00"; + colors[1] = "0.8 0.5 1.0 0.20"; + colors[2] = "0.2 0.8 1.0 0.0"; + sizes[0] = 2.0; + sizes[1] = 4.0; + sizes[2] = 5.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData( ConcussionGrenadeCrescentEmitter ) +{ + ejectionPeriodMS = 15; + periodVarianceMS = 0; + ejectionVelocity = 20; + velocityVariance = 10.0; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 80; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 200; + particles = "ConcussionGrenadeCrescentParticle"; +}; + +//-------------------------------------------------------------------------- +// Shockwave +//-------------------------------------------------------------------------- +datablock ShockwaveData(ConcussionGrenadeShockwave) +{ + width = 4.0; + numSegments = 20; + numVertSegments = 2; + velocity = 5; + acceleration = 10.0; + lifetimeMS = 1000; + height = 1.0; + is2D = true; + + texture[0] = "special/shockwave4"; + texture[1] = "special/gradient"; + texWrap = 6.0; + + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + + colors[0] = "0.8 0.8 1.0 1.00"; + colors[1] = "0.8 0.5 1.0 0.20"; + colors[2] = "0.2 0.8 1.0 0.0"; +}; + +//-------------------------------------------------------------------------- +// Explosion +//-------------------------------------------------------------------------- +datablock ExplosionData(ConcussionGrenadeExplosion) +{ + soundProfile = ConcussionGrenadeExplosionSound; + shockwave = ConcussionGrenadeShockwave; + + emitter[0] = ConcussionGrenadeSparkEmitter; + emitter[1] = ConcussionGrenadeCrescentEmitter; + + shakeCamera = true; + camShakeFreq = "4.0 5.0 4.5"; + camShakeAmp = "140.0 140.0 140.0"; + camShakeDuration = 1.0; + camShakeRadius = 15.0; +}; + +//-------------------------------------------------------------------------- +// Item Data +//-------------------------------------------------------------------------- +datablock ItemData(ConcussionGrenadeThrown) +{ + shapeFile = "grenade.dts"; + mass = 0.7; + elasticity = 0.2; + friction = 1; + pickupRadius = 2; + maxDamage = 0.5; + explosion = ConcussionGrenadeExplosion; + damageRadius = 15.0; + radiusDamageType = $DamageType::Grenade; + kickBackStrength = 3500; + + computeCRC = true; + +}; + +datablock ItemData(ConcussionGrenade) +{ + className = HandInventory; + catagory = "Handheld"; + shapeFile = "grenade.dts"; + mass = 0.7; + elasticity = 0.2; + friction = 1; + pickupRadius = 2; + thrownItem = ConcussionGrenadeThrown; + pickUpName = "some concussion grenades"; + isGrenade = true; +}; + diff --git a/base/scripts/weapons/disc.cs b/base/scripts/weapons/disc.cs new file mode 100644 index 0000000..a6d9551 --- /dev/null +++ b/base/scripts/weapons/disc.cs @@ -0,0 +1,470 @@ +//-------------------------------------- +// Disc launcher +//-------------------------------------- + +//-------------------------------------------------------------------------- +// Force-Feedback Effects +//-------------------------------------- +datablock EffectProfile(DiscFireEffect) +{ + effectname = "weapons/spinfusor_fire"; + MinDistance = 4.0; +}; + +datablock EffectProfile(DiscSwitchEffect) +{ + effectname = "weapons/spinfusor_activate"; + MinDistance = 2.5; +}; + +datablock EffectProfile(DiscDryFireEffect) +{ + effectname = "weapons/spinfusor_dryfire"; + MinDistance = 2.5; +}; + +datablock EffectProfile(DiscIdleEffect) +{ + effectname = "weapons/spinfusor_idle"; + MinDistance = 2.5; +}; + +datablock EffectProfile(DiscReloadEffect) +{ + effectname = "weapons/spinfusor_reload"; + MinDistance = 2.5; +}; + +datablock EffectProfile(DiscExpEffect) +{ + effectname = "explosions/grenade_explode"; + minDistance = 5; + maxDistance = 20; +}; + +//-------------------------------------------------------------------------- +// Sounds +//-------------------------------------- +datablock AudioProfile(DiscSwitchSound) +{ + filename = "fx/weapons/blaster_activate.wav"; + description = AudioClosest3d; + preload = true; + effect = DiscSwitchEffect; +}; + +datablock AudioProfile(DiscLoopSound) +{ + filename = "fx/weapons/spinfusor_idle.wav"; + description = ClosestLooping3d; + effect = DiscIdleEffect; +}; + + +datablock AudioProfile(DiscFireSound) +{ + filename = "fx/weapons/spinfusor_fire.wav"; + description = AudioDefault3d; + preload = true; + effect = DiscFireEffect; +}; + +datablock AudioProfile(DiscReloadSound) +{ + filename = "fx/weapons/spinfusor_reload.wav"; + description = AudioClosest3d; + preload = true; + effect = DiscReloadEffect; +}; + +datablock AudioProfile(discExpSound) +{ + filename = "fx/weapons/spinfusor_impact.wav"; + description = AudioExplosion3d; + preload = true; + effect = DiscExpEffect; +}; + +datablock AudioProfile(underwaterDiscExpSound) +{ + filename = "fx/weapons/spinfusor_impact_UW.wav"; + description = AudioExplosion3d; + preload = true; + effect = DiscExpEffect; +}; + +datablock AudioProfile(discProjectileSound) +{ + filename = "fx/weapons/spinfusor_projectile.wav"; + description = ProjectileLooping3d; + preload = true; +}; + +datablock AudioProfile(DiscDryFireSound) +{ + filename = "fx/weapons/spinfusor_dryfire.wav"; + description = AudioClose3d; + preload = true; + effect = DiscDryFireEffect; +}; + +//-------------------------------------------------------------------------- +// Explosion +//-------------------------------------- +datablock ParticleData(DiscExplosionBubbleParticle) +{ + dragCoefficient = 0.0; + gravityCoefficient = -0.25; + inheritedVelFactor = 0.0; + constantAcceleration = 0.0; + lifetimeMS = 2000; + lifetimeVarianceMS = 750; + useInvAlpha = false; + textureName = "special/bubbles"; + + spinRandomMin = -100.0; + spinRandomMax = 100.0; + + colors[0] = "0.7 0.8 1.0 0.0"; + colors[1] = "0.7 0.8 1.0 0.4"; + colors[2] = "0.7 0.8 1.0 0.0"; + sizes[0] = 1.0; + sizes[1] = 1.0; + sizes[2] = 1.0; + times[0] = 0.0; + times[1] = 0.3; + times[2] = 1.0; +}; +datablock ParticleEmitterData(DiscExplosionBubbleEmitter) +{ + ejectionPeriodMS = 7; + periodVarianceMS = 0; + ejectionVelocity = 1.0; + ejectionOffset = 3.0; + velocityVariance = 0.5; + thetaMin = 0; + thetaMax = 80; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + particles = "DiscExplosionBubbleParticle"; +}; + +datablock ExplosionData(UnderwaterDiscExplosion) +{ + explosionShape = "disc_explosion.dts"; + soundProfile = underwaterDiscExpSound; + + faceViewer = true; + + sizes[0] = "1.3 1.3 1.3"; + sizes[1] = "0.75 0.75 0.75"; + sizes[2] = "0.4 0.4 0.4"; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + + emitter[0] = "DiscExplosionBubbleEmitter"; + + shakeCamera = true; + camShakeFreq = "10.0 11.0 10.0"; + camShakeAmp = "20.0 20.0 20.0"; + camShakeDuration = 0.5; + camShakeRadius = 10.0; +}; + +datablock ExplosionData(DiscExplosion) +{ + explosionShape = "disc_explosion.dts"; + soundProfile = discExpSound; + + faceViewer = true; + explosionScale = "1 1 1"; + + shakeCamera = true; + camShakeFreq = "10.0 11.0 10.0"; + camShakeAmp = "20.0 20.0 20.0"; + camShakeDuration = 0.5; + camShakeRadius = 10.0; +}; + +//-------------------------------------------------------------------------- +// Splash +//-------------------------------------------------------------------------- +datablock ParticleData(DiscMist) +{ + dragCoefficient = 2.0; + gravityCoefficient = -0.05; + inheritedVelFactor = 0.0; + constantAcceleration = 0.0; + lifetimeMS = 400; + lifetimeVarianceMS = 100; + useInvAlpha = false; + spinRandomMin = -90.0; + spinRandomMax = 500.0; + textureName = "particleTest"; + colors[0] = "0.7 0.8 1.0 1.0"; + colors[1] = "0.7 0.8 1.0 0.5"; + colors[2] = "0.7 0.8 1.0 0.0"; + sizes[0] = 0.5; + sizes[1] = 0.5; + sizes[2] = 0.8; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(DiscMistEmitter) +{ + ejectionPeriodMS = 5; + periodVarianceMS = 0; + ejectionVelocity = 3.0; + velocityVariance = 2.0; + ejectionOffset = 0.0; + thetaMin = 85; + thetaMax = 85; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + lifetimeMS = 250; + particles = "DiscMist"; +}; + +datablock ParticleData( DiscSplashParticle2 ) +{ + + dragCoeffiecient = 0.4; + gravityCoefficient = -0.03; // rises slowly + inheritedVelFactor = 0.025; + + lifetimeMS = 600; + lifetimeVarianceMS = 300; + + textureName = "particleTest"; + + useInvAlpha = false; + spinRandomMin = -200.0; + spinRandomMax = 200.0; + + + colors[0] = "0.7 0.8 1.0 1.0"; + colors[1] = "0.7 0.8 1.0 0.5"; + colors[2] = "0.7 0.8 1.0 0.0"; + sizes[0] = 0.5; + sizes[1] = 1.0; + sizes[2] = 2.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData( DiscSplashEmitter2 ) +{ + ejectionPeriodMS = 25; + ejectionOffset = 0.2; + periodVarianceMS = 0; + ejectionVelocity = 2.25; + velocityVariance = 0.50; + thetaMin = 0.0; + thetaMax = 30.0; + lifetimeMS = 250; + + particles = "DiscSplashParticle2"; +}; + + +datablock ParticleData( DiscSplashParticle ) +{ + dragCoefficient = 1; + gravityCoefficient = 0.2; + inheritedVelFactor = 0.2; + constantAcceleration = -0.0; + lifetimeMS = 600; + lifetimeVarianceMS = 0; + textureName = "special/droplet"; + colors[0] = "0.7 0.8 1.0 1.0"; + colors[1] = "0.7 0.8 1.0 0.5"; + colors[2] = "0.7 0.8 1.0 0.0"; + sizes[0] = 0.5; + sizes[1] = 0.5; + sizes[2] = 0.5; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData( DiscSplashEmitter ) +{ + ejectionPeriodMS = 1; + periodVarianceMS = 0; + ejectionVelocity = 3; + velocityVariance = 1.0; + ejectionOffset = 0.0; + thetaMin = 60; + thetaMax = 80; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 100; + particles = "DiscSplashParticle"; +}; + + +datablock SplashData(DiscSplash) +{ + numSegments = 15; + ejectionFreq = 0.0001; + ejectionAngle = 45; + ringLifetime = 0.5; + lifetimeMS = 400; + velocity = 5.0; + startRadius = 0.0; + acceleration = -3.0; + texWrap = 5.0; + + texture = "special/water2"; + + emitter[0] = DiscSplashEmitter; + emitter[1] = DiscMistEmitter; + + colors[0] = "0.7 0.8 1.0 0.0"; + colors[1] = "0.7 0.8 1.0 1.0"; + colors[2] = "0.7 0.8 1.0 0.0"; + colors[3] = "0.7 0.8 1.0 0.0"; + times[0] = 0.0; + times[1] = 0.4; + times[2] = 0.8; + times[3] = 1.0; +}; + + +//-------------------------------------------------------------------------- +// Projectile +//-------------------------------------- +datablock LinearProjectileData(DiscProjectile) +{ + projectileShapeName = "disc.dts"; + emitterDelay = -1; + directDamage = 0.0; + hasDamageRadius = true; + indirectDamage = 0.50; + damageRadius = 7.5; + radiusDamageType = $DamageType::Disc; + kickBackStrength = 1750; + + sound = discProjectileSound; + explosion = "DiscExplosion"; + underwaterExplosion = "UnderwaterDiscExplosion"; + splash = DiscSplash; + + dryVelocity = 90; + wetVelocity = 50; + velInheritFactor = 0.5; + fizzleTimeMS = 5000; + lifetimeMS = 5000; + explodeOnDeath = true; + reflectOnWaterImpactAngle = 15.0; + explodeOnWaterImpact = true; + deflectionOnWaterImpact = 0.0; + fizzleUnderwaterMS = 5000; + + activateDelayMS = 200; + + hasLight = true; + lightRadius = 6.0; + lightColor = "0.175 0.175 0.5"; +}; + + +//-------------------------------------------------------------------------- +// Ammo +//-------------------------------------- + +datablock ItemData(DiscAmmo) +{ + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_disc.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "some spinfusor discs"; +}; + +//-------------------------------------------------------------------------- +// Weapon +//-------------------------------------- +datablock ItemData(Disc) +{ + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_disc.dts"; + image = DiscImage; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "a spinfusor"; + emap = true; +}; + +datablock ShapeBaseImageData(DiscImage) +{ + className = WeaponImage; + shapeFile = "weapon_disc.dts"; + item = Disc; + ammo = DiscAmmo; + offset = "0 0 0"; + emap = true; + + projectile = DiscProjectile; + projectileType = LinearProjectile; + + // State Data + stateName[0] = "Preactivate"; + stateTransitionOnLoaded[0] = "Activate"; + stateTransitionOnNoAmmo[0] = "NoAmmo"; + + stateName[1] = "Activate"; + stateTransitionOnTimeout[1] = "Ready"; + stateTimeoutValue[1] = 0.5; + stateSequence[1] = "Activated"; + stateSound[1] = DiscSwitchSound; + + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "Fire"; + stateSequence[2] = "DiscSpin"; + stateSound[2] = DiscLoopSound; + + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 1.25; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateSequence[3] = "Fire"; + stateScript[3] = "onFire"; + stateSound[3] = DiscFireSound; + + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateTimeoutValue[4] = 0.5; // 0.25 load, 0.25 spinup + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; + stateSound[4] = DiscReloadSound; + + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; + + stateName[6] = "DryFire"; + stateSound[6] = DiscDryFireSound; + stateTimeoutValue[6] = 1.0; + stateTransitionOnTimeout[6] = "NoAmmo"; + +}; diff --git a/base/scripts/weapons/flareGrenade.cs b/base/scripts/weapons/flareGrenade.cs new file mode 100644 index 0000000..6316929 --- /dev/null +++ b/base/scripts/weapons/flareGrenade.cs @@ -0,0 +1,137 @@ +// grenade (thrown by hand) script +// ------------------------------------------------------------------------ + +datablock AudioProfile(FlareGrenadeBurnSound) +{ + filename = "fx/weapons/grenade_flare_burn.wav"; + description = CloseLooping3d; + preload = true; +}; + +datablock AudioProfile(FlareGrenadeExplosionSound) +{ + filename = "fx/weapons/grenade_flare_burn.wav"; + description = CloseLooping3d; + preload = true; +}; + +//-------------------------------------------------------------------------- +// Particle effects +//-------------------------------------- +datablock ParticleData(FlareParticle) +{ + dragCoeffiecient = 0.0; + gravityCoefficient = 0.15; + inheritedVelFactor = 0.5; + + lifetimeMS = 1800; + lifetimeVarianceMS = 200; + + textureName = "special/flareSpark"; + + colors[0] = "1.0 1.0 1.0 1.0"; + colors[1] = "1.0 1.0 1.0 1.0"; + colors[2] = "1.0 1.0 1.0 0.0"; + + sizes[0] = 0.6; + sizes[1] = 0.3; + sizes[2] = 0.1; + + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + +}; + +datablock ParticleEmitterData(FlareEmitter) +{ + ejectionPeriodMS = 10; + periodVarianceMS = 0; + + ejectionVelocity = 1.0; + velocityVariance = 0.0; + + thetaMin = 0.0; + thetaMax = 90.0; + + orientParticles = true; + orientOnVelocity = false; + + particles = "FlareParticle"; +}; + +//-------------------------------------------------------------------------- +// Explosion - Flare Grenade +//-------------------------------------- +datablock ExplosionData(FlareGrenadeExplosion) +{ + explosionShape = "energy_explosion.dts"; + soundProfile = FlareGrenadeExplosionSound; + faceViewer = true; + explosionScale = "0.1 0.1 0.1"; +}; + +//-------------------------------------------------------------------------- +// Projectile - Flare Grenade +//-------------------------------------- +datablock FlareProjectileData(FlareGrenadeProj) +{ + projectileShapeName = "grenade_projectile.dts"; + emitterDelay = -1; + directDamage = 0.0; + hasDamageRadius = false; + kickBackStrength = 1500; + useLensFlare = false; + + sound = FlareGrenadeBurnSound; + explosion = FlareGrenadeExplosion; + velInheritFactor = 0.5; + + texture[0] = "special/flare3"; + texture[1] = "special/LensFlare/flare00"; + size = 4.0; + + baseEmitter = FlareEmitter; + + grenadeElasticity = 0.35; + grenadeFriction = 0.2; + armingDelayMS = 6000; + muzzleVelocity = 15.0; + drag = 0.1; + gravityMod = 0.15; +}; + +datablock ItemData(FlareGrenadeThrown) +{ + shapeFile = "grenade.dts"; + mass = 0.7; + elasticity = 0.2; + friction = 1; + pickupRadius = 2; + maxDamage = 0.4; + + sticky = false; + gravityMod = 0.15; + maxVelocity = 10; + + computeCRC = true; + +}; + +datablock ItemData(FlareGrenade) +{ + className = HandInventory; + catagory = "Handheld"; + shapeFile = "grenade.dts"; + mass = 0.7; + elasticity = 0.2; + friction = 1; + pickupRadius = 2; + thrownItem = FlareGrenadeThrown; + pickUpName = "some flare grenades"; + isGrenade = true; + + computeCRC = true; + +}; + diff --git a/base/scripts/weapons/flashGrenade.cs b/base/scripts/weapons/flashGrenade.cs new file mode 100644 index 0000000..6ba4b9c --- /dev/null +++ b/base/scripts/weapons/flashGrenade.cs @@ -0,0 +1,60 @@ +// grenade (thrown by hand) script +// ------------------------------------------------------------------------ +datablock EffectProfile(FlashGrenadeExplosionEffect) +{ + effectname = "explosions/grenade_flash_explode"; + minDistance = 10; + maxDistance = 30; +}; + +datablock AudioProfile(FlashGrenadeExplosionSound) +{ + filename = "fx/explosions/grenade_flash_explode.wav"; + description = AudioExplosion3d; + preload = true; + effect = FlashGrenadeExplosionEffect; +}; + +datablock ExplosionData(FlashGrenadeExplosion) +{ + explosionShape = "disc_explosion.dts"; + soundProfile = FlashGrenadeExplosionSound; + + faceViewer = true; +}; + +datablock ItemData(FlashGrenadeThrown) +{ + shapeFile = "grenade.dts"; + mass = 0.7; + elasticity = 0.2; + friction = 1; + pickupRadius = 2; + maxDamage = 0.4; + explosion = FlashGrenadeExplosion; + indirectDamage = 0.5; + damageRadius = 10.0; + radiusDamageType = $DamageType::Grenade; + kickBackStrength = 1000; + + computeCRC = true; + +}; + +datablock ItemData(FlashGrenade) +{ + className = HandInventory; + catagory = "Handheld"; + shapeFile = "grenade.dts"; + mass = 0.7; + elasticity = 0.2; + friction = 1; + pickupRadius = 2; + thrownItem = FlashGrenadeThrown; + pickUpName = "some flash grenades"; + isGrenade = true; + + computeCRC = true; + +}; + diff --git a/base/scripts/weapons/grenade.cs b/base/scripts/weapons/grenade.cs new file mode 100644 index 0000000..e627d26 --- /dev/null +++ b/base/scripts/weapons/grenade.cs @@ -0,0 +1,358 @@ +// ------------------------------------------------------------------------ +// grenade (thrown by hand) script +// ------------------------------------------------------------------------ +datablock AudioProfile(GrenadeThrowSound) +{ + filename = "fx/weapons/throw_grenade.wav"; + description = AudioClose3D; + preload = true; +}; + +datablock AudioProfile(GrenadeSwitchSound) +{ + filename = "fx/weapons/generic_switch.wav"; + description = AudioClosest3D; + preload = true; +}; + +//************************************************************************** +// Hand Grenade underwater fx +//************************************************************************** + + +//-------------------------------------------------------------------------- +// Underwater Hand Grenade Particle effects +//-------------------------------------------------------------------------- +datablock ParticleData(HandGrenadeExplosionBubbleParticle) +{ + dragCoefficient = 0.0; + gravityCoefficient = -0.25; + inheritedVelFactor = 0.0; + constantAcceleration = 0.0; + lifetimeMS = 2000; + lifetimeVarianceMS = 750; + useInvAlpha = false; + textureName = "special/bubbles"; + + spinRandomMin = -100.0; + spinRandomMax = 100.0; + + colors[0] = "0.7 0.8 1.0 0.0"; + colors[1] = "0.7 0.8 1.0 0.4"; + colors[2] = "0.7 0.8 1.0 0.0"; + sizes[0] = 0.75; + sizes[1] = 0.75; + sizes[2] = 0.75; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; +datablock ParticleEmitterData(HandGrenadeExplosionBubbleEmitter) +{ + ejectionPeriodMS = 7; + periodVarianceMS = 0; + ejectionVelocity = 1.0; + ejectionOffset = 2.0; + velocityVariance = 0.5; + thetaMin = 0; + thetaMax = 80; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + particles = "HandGrenadeExplosionBubbleParticle"; +}; + +datablock ParticleData(UnderwaterHandGrenadeExplosionSmoke) +{ + dragCoeffiecient = 105.0; + gravityCoefficient = -0.0; // rises slowly + inheritedVelFactor = 0.025; + + constantAcceleration = -1.0; + + lifetimeMS = 1250; + lifetimeVarianceMS = 0; + + textureName = "particleTest"; + + useInvAlpha = false; + spinRandomMin = -200.0; + spinRandomMax = 200.0; + + textureName = "special/Smoke/smoke_001"; + + colors[0] = "0.4 0.4 1.0 1.0"; + colors[1] = "0.4 0.4 1.0 0.5"; + colors[2] = "0.0 0.0 0.0 0.0"; + sizes[0] = 1.0; + sizes[1] = 3.0; + sizes[2] = 5.0; + times[0] = 0.0; + times[1] = 0.2; + times[2] = 1.0; + +}; + +datablock ParticleEmitterData(UnderwaterHandGrenadeExplosionSmokeEmitter) +{ + ejectionPeriodMS = 10; + periodVarianceMS = 0; + + ejectionVelocity = 5.25; + velocityVariance = 0.25; + + thetaMin = 0.0; + thetaMax = 180.0; + + lifetimeMS = 250; + + particles = "UnderwaterHandGrenadeExplosionSmoke"; +}; + + + +datablock ParticleData(UnderwaterHandGrenadeSparks) +{ + dragCoefficient = 1; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + constantAcceleration = 0.0; + lifetimeMS = 500; + lifetimeVarianceMS = 350; + textureName = "special/droplet"; + colors[0] = "0.6 0.6 1.0 1.0"; + colors[1] = "0.6 0.6 1.0 1.0"; + colors[2] = "0.6 0.6 1.0 0.0"; + sizes[0] = 0.5; + sizes[1] = 0.25; + sizes[2] = 0.25; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + +}; + +datablock ParticleEmitterData(UnderwaterHandGrenadeSparkEmitter) +{ + ejectionPeriodMS = 3; + periodVarianceMS = 0; + ejectionVelocity = 10; + velocityVariance = 6.75; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 180; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 100; + particles = "UnderwaterHandGrenadeSparks"; +}; + + + +datablock ExplosionData(UnderwaterHandGrenadeSubExplosion1) +{ + offset = 1.0; + emitter[0] = UnderwaterHandGrenadeExplosionSmokeEmitter; + emitter[1] = UnderwaterHandGrenadeSparkEmitter; +}; + +datablock ExplosionData(UnderwaterHandGrenadeSubExplosion2) +{ + offset = 1.0; + emitter[0] = UnderwaterHandGrenadeExplosionSmokeEmitter; + emitter[1] = UnderwaterHandGrenadeSparkEmitter; +}; + +datablock ExplosionData(UnderwaterHandGrenadeExplosion) +{ + soundProfile = GrenadeExplosionSound; + + emitter[0] = UnderwaterHandGrenadeExplosionSmokeEmitter; + emitter[1] = UnderwaterHandGrenadeSparkEmitter; + emitter[2] = HandGrenadeExplosionBubbleEmitter; + + subExplosion[0] = UnderwaterHandGrenadeSubExplosion1; + subExplosion[1] = UnderwaterHandGrenadeSubExplosion2; + + shakeCamera = true; + camShakeFreq = "12.0 13.0 11.0"; + camShakeAmp = "35.0 35.0 35.0"; + camShakeDuration = 1.0; + camShakeRadius = 15.0; +}; + +//************************************************************************** +// Hand Grenade effects +//************************************************************************** + +//-------------------------------------------------------------------------- +// Grenade Particle effects +//-------------------------------------------------------------------------- + +datablock ParticleData(HandGrenadeExplosionSmoke) +{ + dragCoeffiecient = 105.0; + gravityCoefficient = -0.0; // rises slowly + inheritedVelFactor = 0.025; + + constantAcceleration = -0.80; + + lifetimeMS = 1250; + lifetimeVarianceMS = 0; + + textureName = "particleTest"; + + useInvAlpha = true; + spinRandomMin = -200.0; + spinRandomMax = 200.0; + + textureName = "special/Smoke/smoke_001"; + + colors[0] = "1.0 0.7 0.0 1.0"; + colors[1] = "0.2 0.2 0.2 1.0"; + colors[2] = "0.0 0.0 0.0 0.0"; + sizes[0] = 1.0; + sizes[1] = 3.0; + sizes[2] = 5.0; + times[0] = 0.0; + times[1] = 0.2; + times[2] = 1.0; + +}; + +datablock ParticleEmitterData(HandGrenadeExplosionSmokeEmitter) +{ + ejectionPeriodMS = 10; + periodVarianceMS = 0; + + ejectionVelocity = 10.25; + velocityVariance = 0.25; + + thetaMin = 0.0; + thetaMax = 180.0; + + lifetimeMS = 250; + + particles = "HandGrenadeExplosionSmoke"; +}; + + + +datablock ParticleData(HandGrenadeSparks) +{ + dragCoefficient = 1; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + constantAcceleration = 0.0; + lifetimeMS = 500; + lifetimeVarianceMS = 350; + textureName = "special/bigSpark"; + colors[0] = "0.56 0.36 0.26 1.0"; + colors[1] = "0.56 0.36 0.26 1.0"; + colors[2] = "1.0 0.36 0.26 0.0"; + sizes[0] = 0.5; + sizes[1] = 0.25; + sizes[2] = 0.25; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + +}; + +datablock ParticleEmitterData(HandGrenadeSparkEmitter) +{ + ejectionPeriodMS = 3; + periodVarianceMS = 0; + ejectionVelocity = 18; + velocityVariance = 6.75; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 180; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 100; + particles = "HandGrenadeSparks"; +}; + + + + +//---------------------------------------------------- +// Explosion +//---------------------------------------------------- + +datablock ExplosionData(HandGrenadeSubExplosion1) +{ + offset = 2.0; + emitter[0] = HandGrenadeExplosionSmokeEmitter; + emitter[1] = HandGrenadeSparkEmitter; +}; + +datablock ExplosionData(HandGrenadeSubExplosion2) +{ + offset = 2.0; + emitter[0] = HandGrenadeExplosionSmokeEmitter; + emitter[1] = HandGrenadeSparkEmitter; +}; + +datablock ExplosionData(HandGrenadeExplosion) +{ + soundProfile = GrenadeExplosionSound; + + emitter[0] = HandGrenadeExplosionSmokeEmitter; + emitter[1] = HandGrenadeSparkEmitter; + + subExplosion[0] = HandGrenadeSubExplosion1; + subExplosion[1] = HandGrenadeSubExplosion2; + + shakeCamera = true; + camShakeFreq = "12.0 13.0 11.0"; + camShakeAmp = "35.0 35.0 35.0"; + camShakeDuration = 1.0; + camShakeRadius = 15.0; +}; + + + + +datablock ItemData(GrenadeThrown) +{ + className = Weapon; + shapeFile = "grenade.dts"; + mass = 0.7; + elasticity = 0.2; + friction = 1; + pickupRadius = 2; + maxDamage = 0.5; + explosion = HandGrenadeExplosion; + underwaterExplosion = UnderwaterHandGrenadeExplosion; + indirectDamage = 0.4; + damageRadius = 10.0; + radiusDamageType = $DamageType::Grenade; + kickBackStrength = 2000; + + computeCRC = true; + +}; + +datablock ItemData(Grenade) +{ + className = HandInventory; + catagory = "Handheld"; + shapeFile = "grenade.dts"; + mass = 0.7; + elasticity = 0.2; + friction = 1; + pickupRadius = 2; + thrownItem = GrenadeThrown; + pickUpName = "some grenades"; + isGrenade = true; + + computeCRC = true; + +}; + diff --git a/base/scripts/weapons/grenadeLauncher.cs b/base/scripts/weapons/grenadeLauncher.cs new file mode 100644 index 0000000..e1e01c5 --- /dev/null +++ b/base/scripts/weapons/grenadeLauncher.cs @@ -0,0 +1,782 @@ +//-------------------------------------- +// Grenade launcher +//-------------------------------------- + +//-------------------------------------------------------------------------- +// Force-Feedback Effects +//-------------------------------------- +datablock EffectProfile(GrenadeSwitchEffect) +{ + effectname = "weapons/generic_switch"; + minDistance = 2.5; +}; + +datablock EffectProfile(GrenadeFireEffect) +{ + effectname = "weapons/grenadelauncher_fire"; + minDistance = 4.0; +}; + +datablock EffectProfile(GrenadeDryFireEffect) +{ + effectname = "weapons/grenadelauncher_dryfire"; + minDistance = 2.5; +}; + +datablock EffectProfile(GrenadeReloadEffect) +{ + effectname = "weapons/generic_switch"; + minDistance = 2.5; +}; + +datablock EffectProfile(GrenadeExplosionEffect) +{ + effectname = "explosions/grenade_explode"; + minDistance = 10; + maxDistance = 35; +}; + +//-------------------------------------------------------------------------- +// Sounds +//-------------------------------------- +datablock AudioProfile(GrenadeSwitchSound) +{ + filename = "fx/weapons/generic_switch.wav"; + description = AudioClosest3d; + preload = true; + effect = GrenadeSwitchEffect; +}; + +datablock AudioProfile(GrenadeFireSound) +{ + filename = "fx/weapons/grenadelauncher_fire.wav"; + description = AudioDefault3d; + preload = true; + effect = GrenadeFireEffect; +}; + +datablock AudioProfile(GrenadeProjectileSound) +{ + filename = "fx/weapons/grenadelauncher_projectile.wav"; + description = ProjectileLooping3d; + preload = true; +}; + +datablock AudioProfile(GrenadeReloadSound) +{ + filename = "fx/weapons/generic_switch.wav"; + description = AudioClosest3d; + preload = true; + effect = GrenadeReloadEffect; +}; + +datablock AudioProfile(GrenadeExplosionSound) +{ + filename = "fx/weapons/grenade_explode.wav"; + description = AudioExplosion3d; + preload = true; + effect = GrenadeExplosionEffect; +}; + +datablock AudioProfile(UnderwaterGrenadeExplosionSound) +{ + filename = "fx/weapons/grenade_explode_UW.wav"; + description = AudioExplosion3d; + preload = true; + effect = GrenadeExplosionEffect; +}; + +datablock AudioProfile(GrenadeDryFireSound) +{ + filename = "fx/weapons/grenadelauncher_dryfire.wav"; + description = AudioClose3d; + preload = true; + effect = GrenadeDryFireEffect; +}; + +//---------------------------------------------------------------------------- +// Underwater fx +//---------------------------------------------------------------------------- +datablock ParticleData(GrenadeExplosionBubbleParticle) +{ + dragCoefficient = 0.0; + gravityCoefficient = -0.25; + inheritedVelFactor = 0.0; + constantAcceleration = 0.0; + lifetimeMS = 1500; + lifetimeVarianceMS = 600; + useInvAlpha = false; + textureName = "special/bubbles"; + + spinRandomMin = -100.0; + spinRandomMax = 100.0; + + colors[0] = "0.7 0.8 1.0 0.0"; + colors[1] = "0.7 0.8 1.0 0.4"; + colors[2] = "0.7 0.8 1.0 0.0"; + sizes[0] = 1.0; + sizes[1] = 1.0; + sizes[2] = 1.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; +datablock ParticleEmitterData(GrenadeExplosionBubbleEmitter) +{ + ejectionPeriodMS = 5; + periodVarianceMS = 0; + ejectionVelocity = 1.0; + ejectionOffset = 3.0; + velocityVariance = 0.5; + thetaMin = 0; + thetaMax = 80; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + particles = "GrenadeExplosionBubbleParticle"; +}; + +datablock ParticleData(UnderwaterGrenadeDust) +{ + dragCoefficient = 1.0; + gravityCoefficient = -0.01; + inheritedVelFactor = 0.0; + constantAcceleration = -1.1; + lifetimeMS = 1000; + lifetimeVarianceMS = 100; + useInvAlpha = false; + spinRandomMin = -90.0; + spinRandomMax = 500.0; + textureName = "particleTest"; + colors[0] = "0.6 0.6 1.0 0.5"; + colors[1] = "0.6 0.6 1.0 0.5"; + colors[2] = "0.6 0.6 1.0 0.0"; + sizes[0] = 3.0; + sizes[1] = 3.0; + sizes[2] = 3.0; + times[0] = 0.0; + times[1] = 0.7; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(UnderwaterGrenadeDustEmitter) +{ + ejectionPeriodMS = 15; + periodVarianceMS = 0; + ejectionVelocity = 15.0; + velocityVariance = 0.0; + ejectionOffset = 0.0; + thetaMin = 70; + thetaMax = 70; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + lifetimeMS = 250; + particles = "UnderwaterGrenadeDust"; +}; + + +datablock ParticleData(UnderwaterGrenadeExplosionSmoke) +{ + dragCoeffiecient = 0.4; + gravityCoefficient = -0.25; // rises slowly + inheritedVelFactor = 0.025; + constantAcceleration = -1.1; + + lifetimeMS = 1250; + lifetimeVarianceMS = 0; + + textureName = "particleTest"; + + useInvAlpha = false; + spinRandomMin = -200.0; + spinRandomMax = 200.0; + + textureName = "special/Smoke/smoke_001"; + + colors[0] = "0.1 0.1 1.0 1.0"; + colors[1] = "0.4 0.4 1.0 1.0"; + colors[2] = "0.4 0.4 1.0 0.0"; + sizes[0] = 2.0; + sizes[1] = 6.0; + sizes[2] = 2.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + +}; + +datablock ParticleEmitterData(UnderwaterGExplosionSmokeEmitter) +{ + ejectionPeriodMS = 15; + periodVarianceMS = 0; + + ejectionVelocity = 6.25; + velocityVariance = 0.25; + + thetaMin = 0.0; + thetaMax = 90.0; + + lifetimeMS = 250; + + particles = "UnderwaterGrenadeExplosionSmoke"; +}; + + + +datablock ParticleData(UnderwaterGrenadeSparks) +{ + dragCoefficient = 1; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + constantAcceleration = 0.0; + lifetimeMS = 500; + lifetimeVarianceMS = 350; + textureName = "special/underwaterSpark"; + colors[0] = "0.6 0.6 1.0 1.0"; + colors[1] = "0.6 0.6 1.0 1.0"; + colors[2] = "0.6 0.6 1.0 0.0"; + sizes[0] = 0.5; + sizes[1] = 0.5; + sizes[2] = 0.75; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + +}; + +datablock ParticleEmitterData(UnderwaterGrenadeSparksEmitter) +{ + ejectionPeriodMS = 2; + periodVarianceMS = 0; + ejectionVelocity = 12; + velocityVariance = 6.75; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 60; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 100; + particles = "UnderwaterGrenadeSparks"; +}; + +datablock ExplosionData(UnderwaterGrenadeExplosion) +{ + soundProfile = UnderwaterGrenadeExplosionSound; + + faceViewer = true; + explosionScale = "0.8 0.8 0.8"; + + emitter[0] = UnderwaterGrenadeDustEmitter; + emitter[1] = UnderwaterGExplosionSmokeEmitter; + emitter[2] = UnderwaterGrenadeSparksEmitter; + emitter[3] = GrenadeExplosionBubbleEmitter; + + shakeCamera = true; + camShakeFreq = "10.0 6.0 9.0"; + camShakeAmp = "20.0 20.0 20.0"; + camShakeDuration = 0.5; + camShakeRadius = 20.0; +}; + + +//---------------------------------------------------------------------------- +// Bubbles +//---------------------------------------------------------------------------- +datablock ParticleData(GrenadeBubbleParticle) +{ + dragCoefficient = 0.0; + gravityCoefficient = -0.25; + inheritedVelFactor = 0.0; + constantAcceleration = 0.0; + lifetimeMS = 1500; + lifetimeVarianceMS = 600; + useInvAlpha = false; + textureName = "special/bubbles"; + + spinRandomMin = -100.0; + spinRandomMax = 100.0; + + colors[0] = "0.7 0.8 1.0 0.4"; + colors[1] = "0.7 0.8 1.0 0.4"; + colors[2] = "0.7 0.8 1.0 0.0"; + sizes[0] = 0.5; + sizes[1] = 0.5; + sizes[2] = 0.5; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(GrenadeBubbleEmitter) +{ + ejectionPeriodMS = 5; + periodVarianceMS = 0; + ejectionVelocity = 1.0; + ejectionOffset = 0.1; + velocityVariance = 0.5; + thetaMin = 0; + thetaMax = 80; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + particles = "GrenadeBubbleParticle"; +}; + +//---------------------------------------------------------------------------- +// Debris +//---------------------------------------------------------------------------- + +datablock ParticleData( GDebrisSmokeParticle ) +{ + dragCoeffiecient = 1.0; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + + lifetimeMS = 1000; + lifetimeVarianceMS = 100; + + textureName = "particleTest"; + + useInvAlpha = true; + + spinRandomMin = -60.0; + spinRandomMax = 60.0; + + colors[0] = "0.4 0.4 0.4 1.0"; + colors[1] = "0.3 0.3 0.3 0.5"; + colors[2] = "0.0 0.0 0.0 0.0"; + sizes[0] = 0.0; + sizes[1] = 1.0; + sizes[2] = 1.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData( GDebrisSmokeEmitter ) +{ + ejectionPeriodMS = 7; + periodVarianceMS = 1; + + ejectionVelocity = 1.0; // A little oomph at the back end + velocityVariance = 0.2; + + thetaMin = 0.0; + thetaMax = 40.0; + + particles = "GDebrisSmokeParticle"; +}; + + +datablock DebrisData( GrenadeDebris ) +{ + emitters[0] = GDebrisSmokeEmitter; + + explodeOnMaxBounce = true; + + elasticity = 0.4; + friction = 0.2; + + lifetime = 0.3; + lifetimeVariance = 0.02; + + numBounces = 1; +}; + +//-------------------------------------------------------------------------- +// Splash +//-------------------------------------------------------------------------- + +datablock ParticleData( GrenadeSplashParticle ) +{ + dragCoefficient = 1; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + constantAcceleration = -1.4; + lifetimeMS = 300; + lifetimeVarianceMS = 0; + textureName = "special/droplet"; + colors[0] = "0.7 0.8 1.0 1.0"; + colors[1] = "0.7 0.8 1.0 0.5"; + colors[2] = "0.7 0.8 1.0 0.0"; + sizes[0] = 0.05; + sizes[1] = 0.2; + sizes[2] = 0.2; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData( GrenadeSplashEmitter ) +{ + ejectionPeriodMS = 4; + periodVarianceMS = 0; + ejectionVelocity = 4; + velocityVariance = 1.0; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 50; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 100; + particles = "BlasterSplashParticle"; +}; + + +datablock SplashData(GrenadeSplash) +{ + numSegments = 15; + ejectionFreq = 15; + ejectionAngle = 40; + ringLifetime = 0.35; + lifetimeMS = 300; + velocity = 3.0; + startRadius = 0.0; + acceleration = -3.0; + texWrap = 5.0; + + texture = "special/water2"; + + emitter[0] = BlasterSplashEmitter; + + colors[0] = "0.7 0.8 1.0 1.0"; + colors[1] = "0.7 0.8 1.0 1.0"; + colors[2] = "0.7 0.8 1.0 1.0"; + colors[3] = "0.7 0.8 1.0 1.0"; + times[0] = 0.0; + times[1] = 0.4; + times[2] = 0.8; + times[3] = 1.0; +}; + +//-------------------------------------------------------------------------- +// Particle effects +//-------------------------------------- +datablock ParticleData(GrenadeSmokeParticle) +{ + dragCoeffiecient = 0.0; + gravityCoefficient = -0.2; // rises slowly + inheritedVelFactor = 0.00; + + lifetimeMS = 700; // lasts 2 second + lifetimeVarianceMS = 150; // ...more or less + + textureName = "particleTest"; + + useInvAlpha = true; + spinRandomMin = -30.0; + spinRandomMax = 30.0; + + colors[0] = "0.9 0.9 0.9 1.0"; + colors[1] = "0.6 0.6 0.6 1.0"; + colors[2] = "0.4 0.4 0.4 0.0"; + + sizes[0] = 0.25; + sizes[1] = 1.0; + sizes[2] = 3.0; + + times[0] = 0.0; + times[1] = 0.2; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(GrenadeSmokeEmitter) +{ + ejectionPeriodMS = 15; + periodVarianceMS = 5; + + ejectionVelocity = 1.25; + velocityVariance = 0.50; + + thetaMin = 0.0; + thetaMax = 90.0; + + particles = "GrenadeSmokeParticle"; +}; + + +datablock ParticleData(GrenadeDust) +{ + dragCoefficient = 1.0; + gravityCoefficient = -0.01; + inheritedVelFactor = 0.0; + constantAcceleration = 0.0; + lifetimeMS = 1000; + lifetimeVarianceMS = 100; + useInvAlpha = true; + spinRandomMin = -90.0; + spinRandomMax = 500.0; + textureName = "particleTest"; + colors[0] = "0.3 0.3 0.3 0.5"; + colors[1] = "0.3 0.3 0.3 0.5"; + colors[2] = "0.3 0.3 0.3 0.0"; + sizes[0] = 3.2; + sizes[1] = 4.6; + sizes[2] = 5.0; + times[0] = 0.0; + times[1] = 0.7; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(GrenadeDustEmitter) +{ + ejectionPeriodMS = 5; + periodVarianceMS = 0; + ejectionVelocity = 15.0; + velocityVariance = 0.0; + ejectionOffset = 0.0; + thetaMin = 85; + thetaMax = 85; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + lifetimeMS = 250; + particles = "GrenadeDust"; +}; + + +datablock ParticleData(GrenadeExplosionSmoke) +{ + dragCoeffiecient = 0.4; + gravityCoefficient = -0.5; // rises slowly + inheritedVelFactor = 0.025; + + lifetimeMS = 1250; + lifetimeVarianceMS = 0; + + textureName = "particleTest"; + + useInvAlpha = true; + spinRandomMin = -200.0; + spinRandomMax = 200.0; + + textureName = "special/Smoke/smoke_001"; + + colors[0] = "0.7 0.7 0.7 1.0"; + colors[1] = "0.2 0.2 0.2 1.0"; + colors[2] = "0.1 0.1 0.1 0.0"; + sizes[0] = 2.0; + sizes[1] = 6.0; + sizes[2] = 2.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + +}; + +datablock ParticleEmitterData(GExplosionSmokeEmitter) +{ + ejectionPeriodMS = 5; + periodVarianceMS = 0; + + ejectionVelocity = 6.25; + velocityVariance = 0.25; + + thetaMin = 0.0; + thetaMax = 90.0; + + lifetimeMS = 250; + + particles = "GrenadeExplosionSmoke"; +}; + + + +datablock ParticleData(GrenadeSparks) +{ + dragCoefficient = 1; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + constantAcceleration = 0.0; + lifetimeMS = 500; + lifetimeVarianceMS = 350; + textureName = "special/bigspark"; + colors[0] = "0.56 0.36 0.26 1.0"; + colors[1] = "0.56 0.36 0.26 1.0"; + colors[2] = "1.0 0.36 0.26 0.0"; + sizes[0] = 0.5; + sizes[1] = 0.5; + sizes[2] = 0.75; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + +}; + +datablock ParticleEmitterData(GrenadeSparksEmitter) +{ + ejectionPeriodMS = 2; + periodVarianceMS = 0; + ejectionVelocity = 12; + velocityVariance = 6.75; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 60; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 100; + particles = "GrenadeSparks"; +}; + + + + +//---------------------------------------------------- +// Explosion +//---------------------------------------------------- +datablock ExplosionData(GrenadeExplosion) +{ + soundProfile = GrenadeExplosionSound; + + faceViewer = true; + explosionScale = "0.8 0.8 0.8"; + + debris = GrenadeDebris; + debrisThetaMin = 10; + debrisThetaMax = 50; + debrisNum = 8; + debrisVelocity = 26.0; + debrisVelocityVariance = 7.0; + + emitter[0] = GrenadeDustEmitter; + emitter[1] = GExplosionSmokeEmitter; + emitter[2] = GrenadeSparksEmitter; + + shakeCamera = true; + camShakeFreq = "10.0 6.0 9.0"; + camShakeAmp = "20.0 20.0 20.0"; + camShakeDuration = 0.5; + camShakeRadius = 20.0; +}; + +//-------------------------------------------------------------------------- +// Projectile +//-------------------------------------- +datablock GrenadeProjectileData(BasicGrenade) +{ + projectileShapeName = "grenade_projectile.dts"; + emitterDelay = -1; + directDamage = 0.0; + hasDamageRadius = true; + indirectDamage = 0.40; + damageRadius = 15.0; + radiusDamageType = $DamageType::Grenade; + kickBackStrength = 1500; + bubbleEmitTime = 1.0; + + sound = GrenadeProjectileSound; + explosion = "GrenadeExplosion"; + underwaterExplosion = "UnderwaterGrenadeExplosion"; + velInheritFactor = 0.5; + splash = GrenadeSplash; + + baseEmitter = GrenadeSmokeEmitter; + bubbleEmitter = GrenadeBubbleEmitter; + + grenadeElasticity = 0.35; + grenadeFriction = 0.2; + armingDelayMS = 1000; + muzzleVelocity = 47.00; + drag = 0.1; +}; + + +//-------------------------------------------------------------------------- +// Ammo +//-------------------------------------- + +datablock ItemData(GrenadeLauncherAmmo) +{ + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_grenade.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "some grenade launcher ammo"; + + computeCRC = true; + emap = true; +}; + +//-------------------------------------------------------------------------- +// Weapon +//-------------------------------------- +datablock ItemData(GrenadeLauncher) +{ + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_grenade_launcher.dts"; + image = GrenadeLauncherImage; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "a grenade launcher"; + + computeCRC = true; + +}; + +datablock ShapeBaseImageData(GrenadeLauncherImage) +{ + className = WeaponImage; + shapeFile = "weapon_grenade_launcher.dts"; + item = GrenadeLauncher; + ammo = GrenadeLauncherAmmo; + offset = "0 0 0"; + emap = true; + + projectile = BasicGrenade; + projectileType = GrenadeProjectile; + + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; + stateSound[0] = GrenadeSwitchSound; + + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; + + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "Fire"; + + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.4; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateSequence[3] = "Fire"; + stateScript[3] = "onFire"; + stateSound[3] = GrenadeFireSound; + + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateTimeoutValue[4] = 0.5; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; + stateSound[4] = GrenadeReloadSound; + + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; + + stateName[6] = "DryFire"; + stateSound[6] = GrenadeDryFireSound; + stateTimeoutValue[6] = 1.5; + stateTransitionOnTimeout[6] = "NoAmmo"; +}; diff --git a/base/scripts/weapons/mine.cs b/base/scripts/weapons/mine.cs new file mode 100644 index 0000000..0080a6a --- /dev/null +++ b/base/scripts/weapons/mine.cs @@ -0,0 +1,425 @@ +// ---------------------------------------------- +// mine script +// ---------------------------------------------- + +$TeamDeployableMax[MineDeployed] = 15; + +// ---------------------------------------------- +// force-feedback datablocks +// ---------------------------------------------- + +datablock EffectProfile(MineExplosionEffect) +{ + effectname = "explosions/mine_detonate"; + minDistance = 10; + maxDistance = 50; +}; + +// ---------------------------------------------- +// audio datablocks +// ---------------------------------------------- + +datablock AudioProfile(MineDeploySound) +{ + filename = "fx/weapons/mine_deploy.wav"; + description = AudioClose3D; + preload = true; +}; + +datablock AudioProfile(MineExplosionSound) +{ + filename = "fx/weapons/mine_detonate.wav"; + description = AudioBIGExplosion3d; + preload = true; + effect = MineExplosionEffect; +}; + +datablock AudioProfile(UnderwaterMineExplosionSound) +{ + filename = "fx/weapons/mine_detonate_UW.wav"; + description = AudioBIGExplosion3d; + preload = true; + effect = MineExplosionEffect; +}; + +//-------------------------------------------------------------------------- +// Mine Particle effects +//-------------------------------------------------------------------------- +datablock ParticleData(MineExplosionBubbleParticle) +{ + dragCoefficient = 0.0; + gravityCoefficient = -0.25; + inheritedVelFactor = 0.0; + constantAcceleration = 0.0; + lifetimeMS = 2000; + lifetimeVarianceMS = 750; + useInvAlpha = false; + textureName = "special/bubbles"; + + spinRandomMin = -100.0; + spinRandomMax = 100.0; + + colors[0] = "0.7 0.8 1.0 0.0"; + colors[1] = "0.7 0.8 1.0 0.4"; + colors[2] = "0.7 0.8 1.0 0.0"; + sizes[0] = 1.0; + sizes[1] = 1.0; + sizes[2] = 1.0; + times[0] = 0.0; + times[1] = 0.3; + times[2] = 1.0; +}; +datablock ParticleEmitterData(MineExplosionBubbleEmitter) +{ + ejectionPeriodMS = 7; + periodVarianceMS = 0; + ejectionVelocity = 1.0; + ejectionOffset = 2.0; + velocityVariance = 0.5; + thetaMin = 0; + thetaMax = 80; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + particles = "MineExplosionBubbleParticle"; +}; +datablock ParticleData( UnderwaterMineCrescentParticle ) +{ + dragCoefficient = 2; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + constantAcceleration = -0.0; + lifetimeMS = 600; + lifetimeVarianceMS = 000; + textureName = "special/crescent3"; + colors[0] = "0.5 0.5 1.0 1.0"; + colors[1] = "0.5 0.5 1.0 1.0"; + colors[2] = "0.5 0.5 1.0 0.0"; + sizes[0] = 0.5; + sizes[1] = 1.0; + sizes[2] = 2.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData( UnderwaterMineCrescentEmitter ) +{ + ejectionPeriodMS = 10; + periodVarianceMS = 0; + ejectionVelocity = 10; + velocityVariance = 5.0; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 80; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 200; + particles = "UnderwaterMineCrescentParticle"; +}; + +datablock ParticleData(UnderwaterMineExplosionSmoke) +{ + dragCoeffiecient = 105.0; + gravityCoefficient = -0.0; + inheritedVelFactor = 0.025; + constantAcceleration = -1.0; + + lifetimeMS = 1200; + lifetimeVarianceMS = 00; + + textureName = "particleTest"; + + useInvAlpha = false; + spinRandomMin = -200.0; + spinRandomMax = 200.0; + + textureName = "special/Smoke/smoke_001"; + + colors[0] = "0.7 0.7 1.0 1.0"; + colors[1] = "0.3 0.3 1.0 1.0"; + colors[2] = "0.0 0.0 1.0 0.0"; + sizes[0] = 1.0; + sizes[1] = 3.0; + sizes[2] = 1.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + +}; + +datablock ParticleEmitterData(UnderwaterMineExplosionSmokeEmitter) +{ + ejectionPeriodMS = 8; + periodVarianceMS = 0; + + ejectionVelocity = 4.25; + velocityVariance = 1.25; + + thetaMin = 0.0; + thetaMax = 80.0; + + lifetimeMS = 250; + + particles = "UnderwaterMineExplosionSmoke"; +}; + +datablock ExplosionData(UnderwaterMineExplosion) +{ + explosionShape = "disc_explosion.dts"; + playSpeed = 1.0; + sizes[0] = "0.4 0.4 0.4"; + sizes[1] = "0.4 0.4 0.4"; + soundProfile = UnderwaterMineExplosionSound; + faceViewer = true; + + emitter[0] = UnderwaterMineExplosionSmokeEmitter; + emitter[1] = UnderwaterMineCrescentEmitter; + emitter[2] = MineExplosionBubbleEmitter; + + shakeCamera = true; + camShakeFreq = "8.0 7.0 9.0"; + camShakeAmp = "50.0 50.0 50.0"; + camShakeDuration = 1.0; + camShakeRadius = 10.0; +}; + +//-------------------------------------------------------------------------- +// Mine Particle effects +//-------------------------------------------------------------------------- +datablock ParticleData( MineCrescentParticle ) +{ + dragCoefficient = 2; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + constantAcceleration = -0.0; + lifetimeMS = 600; + lifetimeVarianceMS = 000; + textureName = "special/crescent3"; + colors[0] = "1.0 0.8 0.2 1.0"; + colors[1] = "1.0 0.4 0.2 1.0"; + colors[2] = "1.0 0.0 0.0 0.0"; + sizes[0] = 0.5; + sizes[1] = 1.0; + sizes[2] = 2.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData( MineCrescentEmitter ) +{ + ejectionPeriodMS = 10; + periodVarianceMS = 0; + ejectionVelocity = 10; + velocityVariance = 5.0; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 80; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 200; + particles = "MineCrescentParticle"; +}; + +datablock ParticleData(MineExplosionSmoke) +{ + dragCoeffiecient = 105.0; + gravityCoefficient = -0.0; + inheritedVelFactor = 0.025; + + lifetimeMS = 1200; + lifetimeVarianceMS = 00; + + textureName = "particleTest"; + + useInvAlpha = true; + spinRandomMin = -200.0; + spinRandomMax = 200.0; + + textureName = "special/Smoke/smoke_001"; + + colors[0] = "1.0 0.7 0.0 1.0"; + colors[1] = "0.2 0.2 0.2 1.0"; + colors[2] = "0.0 0.0 0.0 0.0"; + sizes[0] = 1.0; + sizes[1] = 3.0; + sizes[2] = 1.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + +}; + +datablock ParticleEmitterData(MineExplosionSmokeEmitter) +{ + ejectionPeriodMS = 8; + periodVarianceMS = 0; + + ejectionVelocity = 4.25; + velocityVariance = 1.25; + + thetaMin = 0.0; + thetaMax = 80.0; + + lifetimeMS = 250; + + particles = "MineExplosionSmoke"; +}; + + + +datablock ExplosionData(MineExplosion) +{ + explosionShape = "effect_plasma_explosion.dts"; + playSpeed = 1.0; + sizes[0] = "0.5 0.5 0.5"; + sizes[1] = "0.5 0.5 0.5"; + soundProfile = MineExplosionSound; + faceViewer = true; + + emitter[0] = MineExplosionSmokeEmitter; + emitter[1] = MineCrescentEmitter; + + shakeCamera = true; + camShakeFreq = "8.0 7.0 9.0"; + camShakeAmp = "50.0 50.0 50.0"; + camShakeDuration = 1.0; + camShakeRadius = 10.0; +}; + +// ---------------------------------------------- +// Item datablocks +// ---------------------------------------------- + +datablock ItemData(MineDeployed) +{ + className = Weapon; + shapeFile = "mine.dts"; + mass = 0.75; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 3; + maxDamage = 0.2; + explosion = MineExplosion; + underwaterExplosion = UnderwaterMineExplosion; + indirectDamage = 0.6; + damageRadius = 6.0; + radiusDamageType = $DamageType::Mine; + kickBackStrength = 1500; + aiAvoidThis = true; + dynamicType = $TypeMasks::DamagableItemObjectType; + spacing = 6.0; // how close together mines can be + proximity = 2.5; // how close causes a detonation (by player/vehicle) + armTime = 2200; // 2.2 seconds to arm a mine after it comes to rest + maxDepCount = 9; // try to deploy this many times before detonating + + computeCRC = true; + +}; + +datablock ItemData(Mine) +{ + className = HandInventory; + catagory = "Handheld"; + shapeFile = "mine.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.7; + pickupRadius = 2; + + thrownItem = MineDeployed; + pickUpName = "some mines"; + + computeCRC = true; + +}; + +//-------------------------------------- +//datablock ItemData(MineAirDeployed) +//{ +// className = Weapon; +// shapeFile = "mine_anti_air.dts"; +// mass = 1; +// elasticity = 0.2; +// friction = 0.9; +// pickupRadius = 3; +// maxDamage = 0.1; +// explosion = MineExplosion; +// indirectDamage = 1.3; +// damageRadius = 15.0; +// radiusDamageType = $DamageType::Mine; +// kickBackStrength = 3000; +//}; +// +//datablock ItemData(MineAir) +//{ +// className = HandInventory; +// catagory = "Handheld"; +// shapeFile = "mine_anti_air.dts"; +// mass = 1; +// elasticity = 0.2; +// friction = 0.8; +// pickupRadius = 1; +//}; + +//-------------------------------------- +//datablock ItemData(MineLandDeployed) +//{ +// className = Weapon; +// shapeFile = "mine_anti_land.dts"; +// mass = 7; +// elasticity = 0.2; +// friction = 0.8; +// pickupRadius = 3; +// maxDamage = 0.1; +// explosion = MineExplosion; +// indirectDamage = 1.3; +// damageRadius = 15.0; +// radiusDamageType = $DamageType::Mine; +// kickBackStrength = 3000; +//}; +// +//datablock ItemData(MineLand) +//{ +// className = HandInventory; +// catagory = "Handheld"; +// shapeFile = "mine_anti_land.dts"; +// mass = 3; +// elasticity = 0.2; +// friction = 0.7; +// pickupRadius = 1; +//}; + +//-------------------------------------- +//datablock ItemData(MineStickyDeployed) +//{ +// className = Weapon; +// shapeFile = "mine_sticky.dts"; +// mass = 7; +// elasticity = 0.2; +// friction = 0.8; +// pickupRadius = 3; +// maxDamage = 0.1; +// explosion = MineExplosion; +// indirectDamage = 1.3; +// damageRadius = 15.0; +// radiusDamageType = $DamageType::Mine; +// kickBackStrength = 3000; +//}; +// +//datablock ItemData(MineSticky) +//{ +// className = HandInventory; +// catagory = "Handheld"; +// shapeFile = "mine_sticky.dts"; +// mass = 3; +// elasticity = 0.2; +// friction = 0.7; +// pickupRadius = 1; +//}; + diff --git a/base/scripts/weapons/missileLauncher.cs b/base/scripts/weapons/missileLauncher.cs new file mode 100644 index 0000000..0309540 --- /dev/null +++ b/base/scripts/weapons/missileLauncher.cs @@ -0,0 +1,792 @@ +//-------------------------------------- +// Missile launcher +//-------------------------------------- + +//-------------------------------------------------------------------------- +// Force-Feedback Effects +//-------------------------------------- +datablock EffectProfile(MissileSwitchEffect) +{ + effectname = "weapons/missile_launcher_activate"; + minDistance = 2.5; +}; + +datablock EffectProfile(MissileFireEffect) +{ + effectname = "weapons/missile_fire"; + minDistance = 10.0; +}; + +datablock EffectProfile(MissileDryFireEffect) +{ + effectname = "weapons/missile_launcher_dryfire"; + minDistance = 2.5; +}; + +datablock EffectProfile(MissileExplosionEffect) +{ + effectname = "explosions/explosion.xpl23"; + minDistance = 10; + maxDistance = 50; +}; + +//-------------------------------------------------------------------------- +// Sounds +//-------------------------------------- +datablock AudioProfile(MissileSwitchSound) +{ + filename = "fx/weapons/missile_launcher_activate.wav"; + description = AudioClosest3d; + preload = true; + effect = MissileSwitchEffect; +}; + +datablock AudioProfile(MissileFireSound) +{ + filename = "fx/weapons/missile_fire.WAV"; + description = AudioDefault3d; + preload = true; + effect = MissileFireEffect; +}; + +datablock AudioProfile(MissileProjectileSound) +{ + filename = "fx/weapons/missile_projectile.wav"; + description = ProjectileLooping3d; + preload = true; +}; + +datablock AudioProfile(MissileReloadSound) +{ + filename = "fx/weapons/weapon.missilereload.wav"; + description = AudioClosest3d; + preload = true; +}; + +datablock AudioProfile(MissileLockSound) +{ + filename = "fx/weapons/missile_launcher_searching.WAV"; + description = AudioClosest3d; + preload = true; +}; + +datablock AudioProfile(MissileExplosionSound) +{ + filename = "fx/explosions/explosion.xpl23.wav"; + description = AudioBIGExplosion3d; + preload = true; + effect = MissileExplosionEffect; +}; + +datablock AudioProfile(MissileDryFireSound) +{ + filename = "fx/weapons/missile_launcher_dryfire.wav"; + description = AudioClose3d; + preload = true; + effect = MissileDryFireEffect; +}; + + +//---------------------------------------------------------------------------- +// Splash Debris +//---------------------------------------------------------------------------- +datablock ParticleData( MDebrisSmokeParticle ) +{ + dragCoeffiecient = 1.0; + gravityCoefficient = 0.10; + inheritedVelFactor = 0.1; + + lifetimeMS = 1000; + lifetimeVarianceMS = 100; + + textureName = "particleTest"; + +// useInvAlpha = true; + + spinRandomMin = -60.0; + spinRandomMax = 60.0; + + colors[0] = "0.7 0.8 1.0 1.0"; + colors[1] = "0.7 0.8 1.0 0.5"; + colors[2] = "0.7 0.8 1.0 0.0"; + sizes[0] = 0.0; + sizes[1] = 0.8; + sizes[2] = 0.8; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData( MDebrisSmokeEmitter ) +{ + ejectionPeriodMS = 10; + periodVarianceMS = 1; + + ejectionVelocity = 1.0; // A little oomph at the back end + velocityVariance = 0.2; + + thetaMin = 0.0; + thetaMax = 40.0; + + particles = "MDebrisSmokeParticle"; +}; + + +datablock DebrisData( MissileSplashDebris ) +{ + emitters[0] = MDebrisSmokeEmitter; + + explodeOnMaxBounce = true; + + elasticity = 0.4; + friction = 0.2; + + lifetime = 0.3; + lifetimeVariance = 0.1; + + numBounces = 1; +}; + + +//---------------------------------------------------------------------------- +// Missile smoke spike (for debris) +//---------------------------------------------------------------------------- +datablock ParticleData( MissileSmokeSpike ) +{ + dragCoeffiecient = 1.0; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + + lifetimeMS = 1000; + lifetimeVarianceMS = 100; + + textureName = "particleTest"; + + useInvAlpha = true; + + spinRandomMin = -60.0; + spinRandomMax = 60.0; + + colors[0] = "0.6 0.6 0.6 1.0"; + colors[1] = "0.4 0.4 0.4 0.5"; + colors[2] = "0.4 0.4 0.4 0.0"; + sizes[0] = 0.0; + sizes[1] = 1.0; + sizes[2] = 0.5; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData( MissileSmokeSpikeEmitter ) +{ + ejectionPeriodMS = 7; + periodVarianceMS = 1; + + ejectionVelocity = 1.0; // A little oomph at the back end + velocityVariance = 0.2; + + thetaMin = 0.0; + thetaMax = 40.0; + + particles = "MissileSmokeSpike"; +}; + + +//---------------------------------------------------------------------------- +// Explosion smoke particles +//---------------------------------------------------------------------------- + +datablock ParticleData(MissileExplosionSmoke) +{ + dragCoeffiecient = 0.3; + gravityCoefficient = -0.2; + inheritedVelFactor = 0.025; + + lifetimeMS = 1250; + lifetimeVarianceMS = 0; + + textureName = "particleTest"; + + useInvAlpha = true; + spinRandomMin = -100.0; + spinRandomMax = 100.0; + + textureName = "special/Smoke/bigSmoke"; + + colors[0] = "1.0 0.7 0.0 1.0"; + colors[1] = "0.4 0.4 0.4 0.5"; + colors[2] = "0.4 0.4 0.4 0.0"; + sizes[0] = 1.0; + sizes[1] = 3.0; + sizes[2] = 1.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + +}; + +datablock ParticleEmitterData(MissileExplosionSmokeEMitter) +{ + ejectionOffset = 0.0; + ejectionPeriodMS = 5; + periodVarianceMS = 0; + + ejectionVelocity = 3.25; + velocityVariance = 0.25; + + thetaMin = 0.0; + thetaMax = 180.0; + + lifetimeMS = 250; + + particles = "MissileExplosionSmoke"; +}; + + + +datablock DebrisData( VSpikeDebris ) +{ + emitters[0] = MissileSmokeSpikeEmitter; + explodeOnMaxBounce = true; + elasticity = 0.4; + friction = 0.2; + lifetime = 0.3; + lifetimeVariance = 0.02; +}; + + +//--------------------------------------------------------------------------- +// Explosions +//--------------------------------------------------------------------------- +datablock ExplosionData(MissileExplosion) +{ + explosionShape = "effect_plasma_explosion.dts"; + playSpeed = 1.5; + soundProfile = MissileExplosionSound; + faceViewer = true; + + sizes[0] = "0.5 0.5 0.5"; + sizes[1] = "0.5 0.5 0.5"; + sizes[2] = "0.5 0.5 0.5"; + + emitter[0] = MissileExplosionSmokeEmitter; + + debris = VSpikeDebris; + debrisThetaMin = 10; + debrisThetaMax = 170; + debrisNum = 8; + debrisNumVariance = 6; + debrisVelocity = 15.0; + debrisVelocityVariance = 2.0; + + shakeCamera = true; + camShakeFreq = "6.0 7.0 7.0"; + camShakeAmp = "70.0 70.0 70.0"; + camShakeDuration = 1.0; + camShakeRadius = 7.0; +}; + + + +datablock ExplosionData(MissileSplashExplosion) +{ + explosionShape = "disc_explosion.dts"; + + faceViewer = true; + explosionScale = "1.0 1.0 1.0"; + + debris = MissileSplashDebris; + debrisThetaMin = 10; + debrisThetaMax = 80; + debrisNum = 10; + debrisVelocity = 10.0; + debrisVelocityVariance = 4.0; + + sizes[0] = "0.35 0.35 0.35"; + sizes[1] = "0.15 0.15 0.15"; + sizes[2] = "0.15 0.15 0.15"; + sizes[3] = "0.15 0.15 0.15"; + + times[0] = 0.0; + times[1] = 0.333; + times[2] = 0.666; + times[3] = 1.0; + +}; + + +//-------------------------------------------------------------------------- +// Splash +//-------------------------------------------------------------------------- +datablock ParticleData(MissileMist) +{ + dragCoefficient = 2.0; + gravityCoefficient = -0.05; + inheritedVelFactor = 0.0; + constantAcceleration = 0.0; + lifetimeMS = 400; + lifetimeVarianceMS = 100; + useInvAlpha = false; + spinRandomMin = -90.0; + spinRandomMax = 500.0; + textureName = "particleTest"; + colors[0] = "0.7 0.8 1.0 1.0"; + colors[1] = "0.7 0.8 1.0 0.5"; + colors[2] = "0.7 0.8 1.0 0.0"; + sizes[0] = 0.5; + sizes[1] = 0.5; + sizes[2] = 0.8; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(MissileMistEmitter) +{ + ejectionPeriodMS = 5; + periodVarianceMS = 0; + ejectionVelocity = 6.0; + velocityVariance = 4.0; + ejectionOffset = 0.0; + thetaMin = 85; + thetaMax = 85; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + lifetimeMS = 250; + particles = "MissileMist"; +}; + + + +datablock ParticleData( MissileSplashParticle ) +{ + dragCoefficient = 1; + gravityCoefficient = 0.2; + inheritedVelFactor = 0.2; + constantAcceleration = -0.0; + lifetimeMS = 600; + lifetimeVarianceMS = 0; + textureName = "special/droplet"; + colors[0] = "0.7 0.8 1.0 1.0"; + colors[1] = "0.7 0.8 1.0 0.5"; + colors[2] = "0.7 0.8 1.0 0.0"; + sizes[0] = 0.5; + sizes[1] = 0.5; + sizes[2] = 0.5; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData( MissileSplashEmitter ) +{ + ejectionPeriodMS = 1; + periodVarianceMS = 0; + ejectionVelocity = 6; + velocityVariance = 3.0; + ejectionOffset = 0.0; + thetaMin = 60; + thetaMax = 80; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 100; + particles = "MissileSplashParticle"; +}; + + +datablock SplashData(MissileSplash) +{ + numSegments = 15; + ejectionFreq = 0.0001; + ejectionAngle = 45; + ringLifetime = 0.5; + lifetimeMS = 400; + velocity = 5.0; + startRadius = 0.0; + acceleration = -3.0; + texWrap = 5.0; + + explosion = MissileSplashExplosion; + + texture = "special/water2"; + + emitter[0] = MissileSplashEmitter; + emitter[1] = MissileMistEmitter; + + colors[0] = "0.7 0.8 1.0 0.0"; + colors[1] = "0.7 0.8 1.0 1.0"; + colors[2] = "0.7 0.8 1.0 0.0"; + colors[3] = "0.7 0.8 1.0 0.0"; + times[0] = 0.0; + times[1] = 0.4; + times[2] = 0.8; + times[3] = 1.0; +}; + +//-------------------------------------------------------------------------- +// Particle effects +//-------------------------------------- +datablock ParticleData(MissileSmokeParticle) +{ + dragCoeffiecient = 0.0; + gravityCoefficient = -0.02; + inheritedVelFactor = 0.1; + + lifetimeMS = 1200; + lifetimeVarianceMS = 100; + + textureName = "particleTest"; + + useInvAlpha = true; + spinRandomMin = -90.0; + spinRandomMax = 90.0; + + colors[0] = "1.0 0.75 0.0 0.0"; + colors[1] = "0.5 0.5 0.5 1.0"; + colors[2] = "0.3 0.3 0.3 0.0"; + sizes[0] = 1; + sizes[1] = 2; + sizes[2] = 3; + times[0] = 0.0; + times[1] = 0.1; + times[2] = 1.0; + +}; + +datablock ParticleEmitterData(MissileSmokeEmitter) +{ + ejectionPeriodMS = 10; + periodVarianceMS = 0; + + ejectionVelocity = 1.5; + velocityVariance = 0.3; + + thetaMin = 0.0; + thetaMax = 50.0; + + particles = "MissileSmokeParticle"; +}; + + +datablock ParticleData(MissileFireParticle) +{ + dragCoeffiecient = 0.0; + gravityCoefficient = 0.0; + inheritedVelFactor = 1.0; + + lifetimeMS = 300; + lifetimeVarianceMS = 000; + + textureName = "particleTest"; + + spinRandomMin = -135; + spinRandomMax = 135; + + colors[0] = "1.0 0.75 0.2 1.0"; + colors[1] = "1.0 0.5 0.0 1.0"; + colors[2] = "1.0 0.40 0.0 0.0"; + sizes[0] = 0; + sizes[1] = 1; + sizes[2] = 1.5; + times[0] = 0.0; + times[1] = 0.3; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(MissileFireEmitter) +{ + ejectionPeriodMS = 15; + periodVarianceMS = 0; + + ejectionVelocity = 15.0; + velocityVariance = 0.0; + + thetaMin = 0.0; + thetaMax = 0.0; + + particles = "MissileFireParticle"; +}; + + + +datablock ParticleData(MissilePuffParticle) +{ + dragCoeffiecient = 0.0; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.0; + + lifetimeMS = 500; + lifetimeVarianceMS = 300; + + textureName = "particleTest"; + + spinRandomMin = -135; + spinRandomMax = 135; + + colors[0] = "1.0 1.0 1.0 0.5"; + colors[1] = "0.7 0.7 0.7 0.0"; + sizes[0] = 0.25; + sizes[1] = 1.0; + times[0] = 0.0; + times[1] = 1.0; +}; + +datablock ParticleEmitterData(MissilePuffEmitter) +{ + ejectionPeriodMS = 50; + periodVarianceMS = 3; + + ejectionVelocity = 0.5; + velocityVariance = 0.0; + + thetaMin = 0.0; + thetaMax = 90.0; + + particles = "MissilePuffParticle"; +}; + + +datablock ParticleData(MissileLauncherExhaustParticle) +{ + dragCoeffiecient = 0.0; + gravityCoefficient = 0.01; + inheritedVelFactor = 1.0; + + lifetimeMS = 500; + lifetimeVarianceMS = 300; + + textureName = "particleTest"; + + useInvAlpha = true; + spinRandomMin = -135; + spinRandomMax = 135; + + colors[0] = "1.0 1.0 1.0 0.5"; + colors[1] = "0.7 0.7 0.7 0.0"; + sizes[0] = 0.25; + sizes[1] = 1.0; + times[0] = 0.0; + times[1] = 1.0; +}; + +datablock ParticleEmitterData(MissileLauncherExhaustEmitter) +{ + ejectionPeriodMS = 15; + periodVarianceMS = 0; + + ejectionVelocity = 3.0; + velocityVariance = 0.0; + + thetaMin = 0.0; + thetaMax = 20.0; + + particles = "MissileLauncherExhaustParticle"; +}; + +//-------------------------------------------------------------------------- +// Debris +//-------------------------------------- +datablock DebrisData( FlechetteDebris ) +{ + shapeName = "weapon_missile_fleschette.dts"; + + lifetime = 5.0; + + minSpinSpeed = -320.0; + maxSpinSpeed = 320.0; + + elasticity = 0.2; + friction = 0.3; + + numBounces = 3; + + gravModifier = 0.40; + + staticOnMaxBounce = true; +}; + +//-------------------------------------------------------------------------- +// Projectile +//-------------------------------------- +datablock SeekerProjectileData(ShoulderMissile) +{ + casingShapeName = "weapon_missile_casement.dts"; + projectileShapeName = "weapon_missile_projectile.dts"; + hasDamageRadius = true; + indirectDamage = 0.8; + damageRadius = 8.0; + radiusDamageType = $DamageType::Missile; + kickBackStrength = 3000; + + explosion = "MissileExplosion"; + splash = MissileSplash; + velInheritFactor = 1.0; // to compensate for slow starting velocity, this value + // is cranked up to full so the missile doesn't start + // out behind the player when the player is moving + // very quickly - bramage + + baseEmitter = MissileSmokeEmitter; + delayEmitter = MissileFireEmitter; + puffEmitter = MissilePuffEmitter; + bubbleEmitter = GrenadeBubbleEmitter; + bubbleEmitTime = 1.0; + + exhaustEmitter = MissileLauncherExhaustEmitter; + exhaustTimeMs = 300; + exhaustNodeName = "muzzlePoint1"; + + lifetimeMS = 6000; + muzzleVelocity = 10.0; + maxVelocity = 65.0; + turningSpeed = 90.0; + acceleration = 200.0; + + proximityRadius = 5; + + terrainAvoidanceSpeed = 180; + terrainScanAhead = 25; + terrainHeightFail = 12; + terrainAvoidanceRadius = 100; + + flareDistance = 200; + flareAngle = 30; + + sound = MissileProjectileSound; + + hasLight = true; + lightRadius = 5.0; + lightColor = "0.2 0.05 0"; + + useFlechette = true; + flechetteDelayMs = 550; + casingDeb = FlechetteDebris; + + explodeOnWaterImpact = false; +}; + + + +//-------------------------------------------------------------------------- +// Ammo +//-------------------------------------- + +datablock ItemData(MissileLauncherAmmo) +{ + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_missile.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "some missiles"; + + computeCRC = true; + +}; + +//-------------------------------------------------------------------------- +// Weapon +//-------------------------------------- +datablock ItemData(MissileLauncher) +{ + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_missile.dts"; + image = MissileLauncherImage; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "a missile launcher"; + + computeCRC = true; + emap = true; +}; + +datablock ShapeBaseImageData(MissileLauncherImage) +{ + className = WeaponImage; + shapeFile = "weapon_missile.dts"; + item = MissileLauncher; + ammo = MissileLauncherAmmo; + offset = "0 0 0"; + armThread = lookms; + emap = true; + + projectile = ShoulderMissile; + projectileType = SeekerProjectile; + + isSeeker = true; + seekRadius = 300; + maxSeekAngle = 8; + seekTime = 0.5; + minSeekHeat = 0.7; // the heat that must be present on a target to lock it. + + // only target objects outside this range + minTargetingDistance = 40; + + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; + stateSound[0] = MissileSwitchSound; + + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; + + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "CheckWet"; + + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.4; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateSequence[3] = "Fire"; + stateScript[3] = "onFire"; + stateSound[3] = MissileFireSound; + + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateTimeoutValue[4] = 2.5; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; + stateSound[4] = MissileReloadSound; + + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; + + stateName[6] = "DryFire"; + stateSound[6] = MissileDryFireSound; + stateTimeoutValue[6] = 1.0; + stateTransitionOnTimeout[6] = "ActivateReady"; + + stateName[7] = "CheckTarget"; + stateTransitionOnNoTarget[7] = "DryFire"; + stateTransitionOnTarget[7] = "Fire"; + + stateName[8] = "CheckWet"; + stateTransitionOnWet[8] = "WetFire"; + stateTransitionOnNotWet[8] = "CheckTarget"; + + stateName[9] = "WetFire"; + stateTransitionOnNoAmmo[9] = "NoAmmo"; + stateTransitionOnTimeout[9] = "Reload"; + stateSound[9] = MissileFireSound; + stateRecoil[3] = LightRecoil; + stateTimeoutValue[9] = 0.4; + stateSequence[3] = "Fire"; + stateScript[9] = "onWetFire"; + stateAllowImageChange[9] = false; +}; diff --git a/base/scripts/weapons/mortar.cs b/base/scripts/weapons/mortar.cs new file mode 100644 index 0000000..a65c1f5 --- /dev/null +++ b/base/scripts/weapons/mortar.cs @@ -0,0 +1,793 @@ +//-------------------------------------- +// Mortar +//-------------------------------------- + +//-------------------------------------------------------------------------- +// Force-Feedback Effects +//-------------------------------------- +datablock EffectProfile(MortarSwitchEffect) +{ + effectname = "weapons/mortar_activate"; + minDistance = 2.5; +}; + +datablock EffectProfile(MortarFireEffect) +{ + effectname = "weapons/mortar_fire"; + minDistance = 5.0; +}; + +datablock EffectProfile(MortarReloadEffect) +{ + effectname = "weapons/mortar_reload"; + minDistance = 2.5; +}; + +datablock EffectProfile(MortarDryFireEffect) +{ + effectname = "weapons/mortar_dryfire"; + minDistance = 2.5; +}; + +datablock EffectProfile(MortarExplosionEffect) +{ + effectname = "explosions/explosion.xpl03"; + minDistance = 30; + maxDistance = 65; +}; + +//-------------------------------------------------------------------------- +// Sounds +//-------------------------------------- +datablock AudioProfile(MortarSwitchSound) +{ + filename = "fx/weapons/mortar_activate.wav"; + description = AudioClosest3d; + preload = true; + effect = MortarSwitchEffect; +}; + +datablock AudioProfile(MortarReloadSound) +{ + filename = "fx/weapons/mortar_reload.wav"; + description = AudioClosest3d; + preload = true; + effect = MortarReloadEffect; +}; + +// DELETE IF NOT NEEDED +//datablock AudioProfile(MortarIdleSound) +//{ +// filename = "fx/weapons/weapon.mortarIdle.wav"; +// description = ClosestLooping3d; +// preload = true; +//}; + +datablock AudioProfile(MortarFireSound) +{ + filename = "fx/weapons/mortar_fire.wav"; + description = AudioDefault3d; + preload = true; + effect = MortarFireEffect; +}; + +datablock AudioProfile(MortarProjectileSound) +{ + filename = "fx/weapons/mortar_projectile.wav"; + description = ProjectileLooping3d; + preload = true; +}; + +datablock AudioProfile(MortarExplosionSound) +{ + filename = "fx/weapons/mortar_explode.wav"; + description = AudioBIGExplosion3d; + preload = true; + effect = MortarExplosionEffect; +}; + +datablock AudioProfile(UnderwaterMortarExplosionSound) +{ + filename = "fx/weapons/mortar_explode_UW.wav"; + description = AudioBIGExplosion3d; + preload = true; + effect = MortarExplosionEffect; +}; + +datablock AudioProfile(MortarDryFireSound) +{ + filename = "fx/weapons/mortar_dryfire.wav"; + description = AudioClose3d; + preload = true; + effect = MortarDryFireEffect; +}; + +//---------------------------------------------------------------------------- +// Bubbles +//---------------------------------------------------------------------------- +datablock ParticleData(MortarBubbleParticle) +{ + dragCoefficient = 0.0; + gravityCoefficient = -0.25; + inheritedVelFactor = 0.0; + constantAcceleration = 0.0; + lifetimeMS = 1500; + lifetimeVarianceMS = 600; + useInvAlpha = false; + textureName = "special/bubbles"; + + spinRandomMin = -100.0; + spinRandomMax = 100.0; + + colors[0] = "0.7 0.8 1.0 0.4"; + colors[1] = "0.7 0.8 1.0 0.4"; + colors[2] = "0.7 0.8 1.0 0.0"; + sizes[0] = 0.8; + sizes[1] = 0.8; + sizes[2] = 0.8; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(MortarBubbleEmitter) +{ + ejectionPeriodMS = 9; + periodVarianceMS = 0; + ejectionVelocity = 1.0; + ejectionOffset = 0.1; + velocityVariance = 0.5; + thetaMin = 0; + thetaMax = 80; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + particles = "MortarBubbleParticle"; +}; + +//-------------------------------------------------------------------------- +// Splash +//-------------------------------------------------------------------------- +datablock ParticleData( MortarSplashParticle ) +{ + dragCoefficient = 1; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + constantAcceleration = -1.4; + lifetimeMS = 300; + lifetimeVarianceMS = 0; + textureName = "special/droplet"; + colors[0] = "0.7 0.8 1.0 1.0"; + colors[1] = "0.7 0.8 1.0 0.5"; + colors[2] = "0.7 0.8 1.0 0.0"; + sizes[0] = 0.05; + sizes[1] = 0.2; + sizes[2] = 0.2; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData( MortarSplashEmitter ) +{ + ejectionPeriodMS = 4; + periodVarianceMS = 0; + ejectionVelocity = 3; + velocityVariance = 1.0; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 50; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 100; + particles = "MortarSplashParticle"; +}; + + +datablock SplashData(MortarSplash) +{ + numSegments = 10; + ejectionFreq = 10; + ejectionAngle = 20; + ringLifetime = 0.4; + lifetimeMS = 400; + velocity = 3.0; + startRadius = 0.0; + acceleration = -3.0; + texWrap = 5.0; + + texture = "special/water2"; + + emitter[0] = MortarSplashEmitter; + + colors[0] = "0.7 0.8 1.0 0.0"; + colors[1] = "0.7 0.8 1.0 1.0"; + colors[2] = "0.7 0.8 1.0 0.0"; + colors[3] = "0.7 0.8 1.0 0.0"; + times[0] = 0.0; + times[1] = 0.4; + times[2] = 0.8; + times[3] = 1.0; +}; + +//--------------------------------------------------------------------------- +// Mortar Shockwaves +//--------------------------------------------------------------------------- +datablock ShockwaveData(UnderwaterMortarShockwave) +{ + width = 6.0; + numSegments = 32; + numVertSegments = 6; + velocity = 10; + acceleration = 20.0; + lifetimeMS = 900; + height = 1.0; + verticalCurve = 0.5; + is2D = false; + + texture[0] = "special/shockwave4"; + texture[1] = "special/gradient"; + texWrap = 6.0; + + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + + colors[0] = "0.4 0.4 1.0 0.50"; + colors[1] = "0.4 0.4 1.0 0.25"; + colors[2] = "0.4 0.4 1.0 0.0"; + + mapToTerrain = true; + orientToNormal = false; + renderBottom = false; +}; + +datablock ShockwaveData(MortarShockwave) +{ + width = 6.0; + numSegments = 32; + numVertSegments = 6; + velocity = 15; + acceleration = 20.0; + lifetimeMS = 500; + height = 1.0; + verticalCurve = 0.5; + is2D = false; + + texture[0] = "special/shockwave4"; + texture[1] = "special/gradient"; + texWrap = 6.0; + + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + + colors[0] = "0.4 1.0 0.4 0.50"; + colors[1] = "0.4 1.0 0.4 0.25"; + colors[2] = "0.4 1.0 0.4 0.0"; + + mapToTerrain = true; + orientToNormal = false; + renderBottom = false; +}; + + +//-------------------------------------------------------------------------- +// Mortar Explosion Particle effects +//-------------------------------------- +datablock ParticleData( MortarCrescentParticle ) +{ + dragCoefficient = 2; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + constantAcceleration = -0.0; + lifetimeMS = 600; + lifetimeVarianceMS = 000; + textureName = "special/crescent3"; + colors[0] = "0.7 1.0 0.7 1.0"; + colors[1] = "0.7 1.0 0.7 0.5"; + colors[2] = "0.7 1.0 0.7 0.0"; + sizes[0] = 4.0; + sizes[1] = 8.0; + sizes[2] = 9.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData( MortarCrescentEmitter ) +{ + ejectionPeriodMS = 25; + periodVarianceMS = 0; + ejectionVelocity = 40; + velocityVariance = 5.0; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 80; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 200; + particles = "MortarCrescentParticle"; +}; + + +datablock ParticleData(MortarExplosionSmoke) +{ + dragCoeffiecient = 0.4; + gravityCoefficient = -0.30; // rises slowly + inheritedVelFactor = 0.025; + + lifetimeMS = 1250; + lifetimeVarianceMS = 500; + + textureName = "particleTest"; + + useInvAlpha = true; + spinRandomMin = -100.0; + spinRandomMax = 100.0; + + textureName = "special/Smoke/bigSmoke"; + + colors[0] = "0.7 0.7 0.7 0.0"; + colors[1] = "0.4 0.4 0.4 0.5"; + colors[2] = "0.4 0.4 0.4 0.5"; + colors[3] = "0.4 0.4 0.4 0.0"; + sizes[0] = 5.0; + sizes[1] = 6.0; + sizes[2] = 10.0; + sizes[3] = 12.0; + times[0] = 0.0; + times[1] = 0.333; + times[2] = 0.666; + times[3] = 1.0; + + + +}; + +datablock ParticleEmitterData(MortarExplosionSmokeEmitter) +{ + ejectionPeriodMS = 10; + periodVarianceMS = 0; + + ejectionOffset = 8.0; + + + ejectionVelocity = 1.25; + velocityVariance = 1.2; + + thetaMin = 0.0; + thetaMax = 90.0; + + lifetimeMS = 500; + + particles = "MortarExplosionSmoke"; + +}; + +//--------------------------------------------------------------------------- +// Underwater Explosion +//--------------------------------------------------------------------------- +datablock ParticleData(UnderwaterExplosionSparks) +{ + dragCoefficient = 0; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + constantAcceleration = 0.0; + lifetimeMS = 500; + lifetimeVarianceMS = 350; + textureName = "special/crescent3"; + colors[0] = "0.4 0.4 1.0 1.0"; + colors[1] = "0.4 0.4 1.0 1.0"; + colors[2] = "0.4 0.4 1.0 0.0"; + sizes[0] = 3.5; + sizes[1] = 3.5; + sizes[2] = 3.5; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + +}; + +datablock ParticleEmitterData(UnderwaterExplosionSparksEmitter) +{ + ejectionPeriodMS = 2; + periodVarianceMS = 0; + ejectionVelocity = 17; + velocityVariance = 4; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 60; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 100; + particles = "UnderwaterExplosionSparks"; +}; + +datablock ParticleData(MortarExplosionBubbleParticle) +{ + dragCoefficient = 0.0; + gravityCoefficient = -0.25; + inheritedVelFactor = 0.0; + constantAcceleration = 0.0; + lifetimeMS = 1500; + lifetimeVarianceMS = 600; + useInvAlpha = false; + textureName = "special/bubbles"; + + spinRandomMin = -100.0; + spinRandomMax = 100.0; + + colors[0] = "0.7 0.8 1.0 0.0"; + colors[1] = "0.7 0.8 1.0 0.4"; + colors[2] = "0.7 0.8 1.0 0.0"; + sizes[0] = 2.0; + sizes[1] = 2.0; + sizes[2] = 2.0; + times[0] = 0.0; + times[1] = 0.8; + times[2] = 1.0; +}; +datablock ParticleEmitterData(MortarExplosionBubbleEmitter) +{ + ejectionPeriodMS = 5; + periodVarianceMS = 0; + ejectionVelocity = 1.0; + ejectionOffset = 7.0; + velocityVariance = 0.5; + thetaMin = 0; + thetaMax = 80; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + particles = "MortarExplosionBubbleParticle"; +}; + +datablock DebrisData( UnderwaterMortarDebris ) +{ + emitters[0] = MortarExplosionBubbleEmitter; + + explodeOnMaxBounce = true; + + elasticity = 0.4; + friction = 0.2; + + lifetime = 1.5; + lifetimeVariance = 0.2; + + numBounces = 1; +}; + +datablock ExplosionData(UnderwaterMortarSubExplosion1) +{ + explosionShape = "disc_explosion.dts"; + faceViewer = true; + delayMS = 100; + offset = 3.0; + playSpeed = 1.5; + + sizes[0] = "0.75 0.75 0.75"; + sizes[1] = "1.0 1.0 1.0"; + sizes[2] = "0.5 0.5 0.5"; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + +}; + +datablock ExplosionData(UnderwaterMortarSubExplosion2) +{ + explosionShape = "disc_explosion.dts"; + faceViewer = true; + delayMS = 50; + offset = 3.0; + playSpeed = 0.75; + + sizes[0] = "1.5 1.5 1.5"; + sizes[1] = "1.5 1.5 1.5"; + sizes[2] = "1.0 1.0 1.0"; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ExplosionData(UnderwaterMortarSubExplosion3) +{ + explosionShape = "disc_explosion.dts"; + faceViewer = true; + delayMS = 0; + offset = 0.0; + playSpeed = 0.5; + + sizes[0] = "1.0 1.0 1.0"; + sizes[1] = "2.0 2.0 2.0"; + sizes[2] = "1.5 1.5 1.5"; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + +}; + +datablock ExplosionData(UnderwaterMortarExplosion) +{ + soundProfile = UnderwaterMortarExplosionSound; + + shockwave = UnderwaterMortarShockwave; + shockwaveOnTerrain = true; + + subExplosion[0] = UnderwaterMortarSubExplosion1; + subExplosion[1] = UnderwaterMortarSubExplosion2; + subExplosion[2] = UnderwaterMortarSubExplosion3; + + emitter[0] = MortarExplosionBubbleEmitter; + emitter[1] = UnderwaterExplosionSparksEmitter; + + shakeCamera = true; + camShakeFreq = "8.0 9.0 7.0"; + camShakeAmp = "100.0 100.0 100.0"; + camShakeDuration = 1.3; + camShakeRadius = 25.0; +}; + + +//--------------------------------------------------------------------------- +// Explosion +//--------------------------------------------------------------------------- + +datablock ExplosionData(MortarSubExplosion1) +{ + explosionShape = "mortar_explosion.dts"; + faceViewer = true; + + delayMS = 100; + + offset = 5.0; + + playSpeed = 1.5; + + sizes[0] = "0.5 0.5 0.5"; + sizes[1] = "0.5 0.5 0.5"; + times[0] = 0.0; + times[1] = 1.0; + +}; + +datablock ExplosionData(MortarSubExplosion2) +{ + explosionShape = "mortar_explosion.dts"; + faceViewer = true; + + delayMS = 50; + + offset = 5.0; + + playSpeed = 1.0; + + sizes[0] = "1.0 1.0 1.0"; + sizes[1] = "1.0 1.0 1.0"; + times[0] = 0.0; + times[1] = 1.0; +}; + +datablock ExplosionData(MortarSubExplosion3) +{ + explosionShape = "mortar_explosion.dts"; + faceViewer = true; + delayMS = 0; + offset = 0.0; + playSpeed = 0.7; + + sizes[0] = "1.0 1.0 1.0"; + sizes[1] = "2.0 2.0 2.0"; + times[0] = 0.0; + times[1] = 1.0; + +}; + +datablock ExplosionData(MortarExplosion) +{ + soundProfile = MortarExplosionSound; + + shockwave = MortarShockwave; + shockwaveOnTerrain = true; + + subExplosion[0] = MortarSubExplosion1; + subExplosion[1] = MortarSubExplosion2; + subExplosion[2] = MortarSubExplosion3; + + emitter[0] = MortarExplosionSmokeEmitter; + emitter[1] = MortarCrescentEmitter; + + shakeCamera = true; + camShakeFreq = "8.0 9.0 7.0"; + camShakeAmp = "100.0 100.0 100.0"; + camShakeDuration = 1.3; + camShakeRadius = 25.0; +}; + +//--------------------------------------------------------------------------- +// Smoke particles +//--------------------------------------------------------------------------- +datablock ParticleData(MortarSmokeParticle) +{ + dragCoeffiecient = 0.4; + gravityCoefficient = -0.3; // rises slowly + inheritedVelFactor = 0.125; + + lifetimeMS = 1200; + lifetimeVarianceMS = 200; + useInvAlpha = true; + spinRandomMin = -100.0; + spinRandomMax = 100.0; + + animateTexture = false; + + textureName = "special/Smoke/bigSmoke"; + + colors[0] = "0.7 1.0 0.7 0.5"; + colors[1] = "0.3 0.7 0.3 0.8"; + colors[2] = "0.0 0.0 0.0 0.0"; + sizes[0] = 1.0; + sizes[1] = 2.0; + sizes[2] = 4.5; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + +}; + + +datablock ParticleEmitterData(MortarSmokeEmitter) +{ + ejectionPeriodMS = 10; + periodVarianceMS = 3; + + ejectionVelocity = 2.25; + velocityVariance = 0.55; + + thetaMin = 0.0; + thetaMax = 40.0; + + particles = "MortarSmokeParticle"; +}; + + +//-------------------------------------------------------------------------- +// Projectile +//-------------------------------------- +datablock GrenadeProjectileData(MortarShot) +{ + projectileShapeName = "mortar_projectile.dts"; + emitterDelay = -1; + directDamage = 0.0; + hasDamageRadius = true; + indirectDamage = 1.0; + damageRadius = 20.0; + radiusDamageType = $DamageType::Mortar; + kickBackStrength = 2500; + + explosion = "MortarExplosion"; + underwaterExplosion = "UnderwaterMortarExplosion"; + velInheritFactor = 0.5; + splash = MortarSplash; + depthTolerance = 10.0; // depth at which it uses underwater explosion + + baseEmitter = MortarSmokeEmitter; + bubbleEmitter = MortarBubbleEmitter; + + grenadeElasticity = 0.15; + grenadeFriction = 0.4; + armingDelayMS = 2000; + muzzleVelocity = 63.7; + drag = 0.1; + + sound = MortarProjectileSound; + + hasLight = true; + lightRadius = 4; + lightColor = "0.05 0.2 0.05"; + + hasLightUnderwaterColor = true; + underWaterLightColor = "0.05 0.075 0.2"; + +}; + +//-------------------------------------------------------------------------- +// Ammo +//-------------------------------------- + +datablock ItemData(MortarAmmo) +{ + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_mortar.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "some mortar ammo"; + + computeCRC = true; + +}; + +//-------------------------------------------------------------------------- +// Weapon +//-------------------------------------- +datablock ItemData(Mortar) +{ + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_mortar.dts"; + image = MortarImage; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "a mortar gun"; + + computeCRC = true; + emap = true; +}; + +datablock ShapeBaseImageData(MortarImage) +{ + className = WeaponImage; + shapeFile = "weapon_mortar.dts"; + item = Mortar; + ammo = MortarAmmo; + offset = "0 0 0"; + emap = true; + + projectile = MortarShot; + projectileType = GrenadeProjectile; + + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; + stateSound[0] = MortarSwitchSound; + + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; + + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "Fire"; + stateSound[2] = MortarIdleSound; + + stateName[3] = "Fire"; + stateSequence[3] = "Recoil"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.8; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateScript[3] = "onFire"; + stateSound[3] = MortarFireSound; + + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateTimeoutValue[4] = 2.0; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; + stateSound[4] = MortarReloadSound; + + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; + + stateName[6] = "DryFire"; + stateSound[6] = MortarDryFireSound; + stateTimeoutValue[6] = 1.5; + stateTransitionOnTimeout[6] = "NoAmmo"; +}; diff --git a/base/scripts/weapons/plasma.cs b/base/scripts/weapons/plasma.cs new file mode 100644 index 0000000..3d1238c --- /dev/null +++ b/base/scripts/weapons/plasma.cs @@ -0,0 +1,485 @@ +//-------------------------------------- +// Plasma rifle +//-------------------------------------- + +//-------------------------------------------------------------------------- +// Force-Feedback Effects +//-------------------------------------- +datablock EffectProfile(PlasmaSwitchEffect) +{ + effectname = "weapons/plasma_rifle_activate"; + minDistance = 2.5; +}; + +datablock EffectProfile(PlasmaFireEffect) +{ + effectname = "weapons/plasma_fire"; + minDistance = 10.0; +}; + +datablock EffectProfile(PlasmaDryFireEffect) +{ + effectname = "weapons/plasma_dryfire"; + minDistance = 2.5; +}; + +datablock EffectProfile(PlasmaIdleEffect) +{ + effectname = "weapons/plasma_rifle_idle"; + minDistance = 2.5; +}; + +datablock EffectProfile(PlasmaReloadEffect) +{ + effectname = "weapons/plasma_rifle_reload"; + minDistance = 2.5; +}; + +datablock EffectProfile(PlasmaExpEffect) +{ + effectname = "explosions/explosion.xpl10"; + minDistance = 10; + maxDistance = 25; +}; + +//-------------------------------------------------------------------------- +// Sounds +//-------------------------------------- +datablock AudioProfile(PlasmaSwitchSound) +{ + filename = "fx/weapons/plasma_rifle_activate.wav"; + description = AudioClosest3d; + preload = true; + effect = PlasmaSwitchEffect; +}; + +datablock AudioProfile(PlasmaFireSound) +{ + filename = "fx/weapons/plasma_rifle_fire.wav"; + description = AudioDefault3d; + preload = true; + effect = PlasmaFireEffect; +}; + +datablock AudioProfile(PlasmaIdleSound) +{ + filename = "fx/weapons/plasma_rifle_idle.wav"; + description = ClosestLooping3d; + preload = true; + //effect = PlasmaIdleEffect; +}; + +datablock AudioProfile(PlasmaReloadSound) +{ + filename = "fx/weapons/plasma_rifle_reload.wav"; + description = Audioclosest3d; + preload = true; + effect = PlasmaReloadEffect; +}; + +datablock AudioProfile(plasmaExpSound) +{ + filename = "fx/explosions/explosion.xpl10.wav"; + description = AudioExplosion3d; + effect = PlasmaExpEffect; +}; + +datablock AudioProfile(PlasmaProjectileSound) +{ + filename = "fx/weapons/plasma_rifle_projectile.WAV"; + description = ProjectileLooping3d; + preload = true; +}; + +datablock AudioProfile(PlasmaDryFireSound) +{ + filename = "fx/weapons/plasma_dryfire.wav"; + description = AudioClose3d; + preload = true; + effect = PlasmaDryFireEffect; +}; + +datablock AudioProfile(PlasmaFireWetSound) +{ + filename = "fx/weapons/plasma_fizzle.wav"; + description = AudioClose3d; + preload = true; +}; +//-------------------------------------------------------------------------- +// Explosion +//-------------------------------------- +datablock ParticleData(PlasmaExplosionParticle) +{ + dragCoefficient = 2; + gravityCoefficient = 0.2; + inheritedVelFactor = 0.2; + constantAcceleration = 0.0; + lifetimeMS = 750; + lifetimeVarianceMS = 150; + textureName = "particleTest"; + colors[0] = "0.56 0.36 0.26 1.0"; + colors[1] = "0.56 0.36 0.26 0.0"; + sizes[0] = 0.5; + sizes[1] = 2; +}; + +datablock ParticleEmitterData(PlasmaExplosionEmitter) +{ + ejectionPeriodMS = 7; + periodVarianceMS = 0; + ejectionVelocity = 5; + velocityVariance = 1.0; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 60; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + particles = "PlasmaExplosionParticle"; +}; + +datablock ExplosionData(PlasmaBoltExplosion) +{ + explosionShape = "effect_plasma_explosion.dts"; + soundProfile = plasmaExpSound; + particleEmitter = PlasmaExplosionEmitter; + particleDensity = 150; + particleRadius = 1.25; + faceViewer = true; + +}; + + +//-------------------------------------------------------------------------- +// Splash +//-------------------------------------------------------------------------- +datablock ParticleData(PlasmaMist) +{ + dragCoefficient = 2.0; + gravityCoefficient = -0.05; + inheritedVelFactor = 0.0; + constantAcceleration = 0.0; + lifetimeMS = 400; + lifetimeVarianceMS = 100; + useInvAlpha = false; + spinRandomMin = -90.0; + spinRandomMax = 500.0; + textureName = "particleTest"; + colors[0] = "0.7 0.8 1.0 1.0"; + colors[1] = "0.7 0.8 1.0 0.5"; + colors[2] = "0.7 0.8 1.0 0.0"; + sizes[0] = 0.5; + sizes[1] = 0.5; + sizes[2] = 0.8; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(PlasmaMistEmitter) +{ + ejectionPeriodMS = 5; + periodVarianceMS = 0; + ejectionVelocity = 3.0; + velocityVariance = 2.0; + ejectionOffset = 0.0; + thetaMin = 85; + thetaMax = 85; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + lifetimeMS = 250; + particles = "PlasmaMist"; +}; + +datablock ParticleData( PlasmaSplashParticle2 ) +{ + + dragCoeffiecient = 0.4; + gravityCoefficient = -0.03; // rises slowly + inheritedVelFactor = 0.025; + + lifetimeMS = 600; + lifetimeVarianceMS = 300; + + textureName = "particleTest"; + + useInvAlpha = false; + spinRandomMin = -200.0; + spinRandomMax = 200.0; + + + colors[0] = "0.7 0.8 1.0 1.0"; + colors[1] = "0.7 0.8 1.0 0.5"; + colors[2] = "0.7 0.8 1.0 0.0"; + sizes[0] = 0.5; + sizes[1] = 1.0; + sizes[2] = 2.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData( PlasmaSplashEmitter2 ) +{ + ejectionPeriodMS = 25; + ejectionOffset = 0.2; + periodVarianceMS = 0; + ejectionVelocity = 2.25; + velocityVariance = 0.50; + thetaMin = 0.0; + thetaMax = 30.0; + lifetimeMS = 250; + + particles = "PlasmaSplashParticle2"; +}; + + +datablock ParticleData( PlasmaSplashParticle ) +{ + dragCoefficient = 1; + gravityCoefficient = 0.2; + inheritedVelFactor = 0.2; + constantAcceleration = -0.0; + lifetimeMS = 600; + lifetimeVarianceMS = 0; + textureName = "special/droplet"; + colors[0] = "0.7 0.8 1.0 1.0"; + colors[1] = "0.7 0.8 1.0 0.5"; + colors[2] = "0.7 0.8 1.0 0.0"; + sizes[0] = 0.5; + sizes[1] = 0.5; + sizes[2] = 0.5; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData( PlasmaSplashEmitter ) +{ + ejectionPeriodMS = 1; + periodVarianceMS = 0; + ejectionVelocity = 3; + velocityVariance = 1.0; + ejectionOffset = 0.0; + thetaMin = 60; + thetaMax = 80; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 100; + particles = "PlasmaSplashParticle"; +}; + + +datablock SplashData(PlasmaSplash) +{ + numSegments = 15; + ejectionFreq = 0.0001; + ejectionAngle = 45; + ringLifetime = 0.5; + lifetimeMS = 400; + velocity = 5.0; + startRadius = 0.0; + acceleration = -3.0; + texWrap = 5.0; + + texture = "special/water2"; + + emitter[0] = PlasmaSplashEmitter; + emitter[1] = PlasmaSplashEmitter2; + emitter[2] = PlasmaMistEmitter; + + colors[0] = "0.7 0.8 1.0 0.0"; + colors[1] = "0.7 0.8 1.0 1.0"; + colors[2] = "0.7 0.8 1.0 0.0"; + colors[3] = "0.7 0.8 1.0 0.0"; + times[0] = 0.0; + times[1] = 0.4; + times[2] = 0.8; + times[3] = 1.0; +}; + +//-------------------------------------------------------------------------- +// Projectile +//-------------------------------------- +datablock ParticleData(PlasmaRifleParticle) +{ + dragCoefficient = 2.75; + gravityCoefficient = 0.1; + inheritedVelFactor = 0.2; + constantAcceleration = 0.0; + lifetimeMS = 550; + lifetimeVarianceMS = 0; + textureName = "particleTest"; + colors[0] = "0.46 0.36 0.26 1.0"; + colors[1] = "0.46 0.36 0.26 0.0"; + sizes[0] = 0.25; + sizes[1] = 0.20; +}; + +datablock ParticleEmitterData(PlasmaRifleEmitter) +{ + ejectionPeriodMS = 3; + periodVarianceMS = 0; + ejectionVelocity = 10; + velocityVariance = 1.0; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 12; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvance = true; + particles = "PlasmaRifleParticle"; +}; + + + +//-------------------------------------------------------------------------- +// Projectile +//-------------------------------------- +datablock LinearFlareProjectileData(PlasmaBolt) +{ + projectileShapeName = "plasmabolt.dts"; + scale = "2.0 2.0 2.0"; + faceViewer = true; + directDamage = 0.0; + hasDamageRadius = true; + indirectDamage = 0.45; + damageRadius = 4.0; + kickBackStrength = 0.0; + radiusDamageType = $DamageType::Plasma; + + explosion = "PlasmaBoltExplosion"; + splash = PlasmaSplash; + + dryVelocity = 55.0; + wetVelocity = -1; + velInheritFactor = 0.3; + fizzleTimeMS = 2000; + lifetimeMS = 3000; + explodeOnDeath = false; + reflectOnWaterImpactAngle = 0.0; + explodeOnWaterImpact = true; + deflectionOnWaterImpact = 0.0; + fizzleUnderwaterMS = -1; + + //activateDelayMS = 100; + activateDelayMS = -1; + + size[0] = 0.2; + size[1] = 0.5; + size[2] = 0.1; + + + numFlares = 35; + flareColor = "1 0.75 0.25"; + flareModTexture = "flaremod"; + flareBaseTexture = "flarebase"; + + sound = PlasmaProjectileSound; + fireSound = PlasmaFireSound; + wetFireSound = PlasmaFireWetSound; + + hasLight = true; + lightRadius = 3.0; + lightColor = "1 0.75 0.25"; +}; + + +//-------------------------------------------------------------------------- +// Ammo +//-------------------------------------- + +datablock ItemData(PlasmaAmmo) +{ + className = Ammo; + catagory = "Ammo"; + shapeFile = "ammo_plasma.dts"; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "some plasma gun ammo"; +}; + +//-------------------------------------------------------------------------- +// Weapon +//-------------------------------------- +datablock ItemData(Plasma) +{ + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_plasma.dts"; + image = PlasmaImage; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "a plasma gun"; +}; + +datablock ShapeBaseImageData(PlasmaImage) +{ + className = WeaponImage; + shapeFile = "weapon_plasma.dts"; + item = Plasma; + ammo = PlasmaAmmo; + offset = "0 0 0"; + + projectile = PlasmaBolt; + projectileType = LinearFlareProjectile; + + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; + stateSound[0] = PlasmaSwitchSound; + + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; + + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "CheckWet"; + + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.1; + stateFire[3] = true; + stateRecoil[3] = LightRecoil; + stateAllowImageChange[3] = false; + stateScript[3] = "onFire"; + stateEmitterTime[3] = 0.2; + stateSound[3] = PlasmaFireSound; + + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateTimeoutValue[4] = 0.6; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; + stateSound[4] = PlasmaReloadSound; + + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; + + stateName[6] = "DryFire"; + stateSound[6] = PlasmaDryFireSound; + stateTimeoutValue[6] = 1.5; + stateTransitionOnTimeout[6] = "NoAmmo"; + + stateName[7] = "WetFire"; + stateSound[7] = PlasmaFireWetSound; + stateTimeoutValue[7] = 1.5; + stateTransitionOnTimeout[7] = "Ready"; + + stateName[8] = "CheckWet"; + stateTransitionOnWet[8] = "WetFire"; + stateTransitionOnNotWet[8] = "Fire"; +}; + diff --git a/base/scripts/weapons/shockLance.cs b/base/scripts/weapons/shockLance.cs new file mode 100644 index 0000000..3d3c8c6 --- /dev/null +++ b/base/scripts/weapons/shockLance.cs @@ -0,0 +1,296 @@ +//-------------------------------------------------------------------------- +// Shock Lance +// +// +//-------------------------------------------------------------------------- + +datablock EffectProfile(ShockLanceSwitchEffect) +{ + effectname = "weapons/shocklance_activate"; + minDistance = 2.5; +}; + +datablock EffectProfile(ShockLanceFireEffect) +{ + effectname = "weapons/shocklance_fire"; + minDistance = 5.0; +}; + +datablock EffectProfile(ShockLanceReloadEffect) +{ + effectname = "weapons/shocklance_reload"; + minDistance = 2.5; +}; + +datablock AudioProfile(ShockLanceSwitchSound) +{ + filename = "fx/weapons/shocklance_activate.wav"; + description = AudioClosest3d; + preload = true; + effect = ShockLanceSwitchEffect; +}; + +//-------------------------------------------------------------------------- +// Explosion +//-------------------------------------- +datablock AudioProfile(ShockLanceHitSound) +{ + filename = "fx/weapons/shocklance_fire.WAV"; + description = AudioClose3d; + preload = true; + effect = ShockLanceFireEffect; +}; + +datablock AudioProfile(ShockLanceReloadSound) +{ + filename = "fx/weapons/shocklance_reload.WAV"; + description = AudioClosest3d; + preload = true; + effect = ShockLanceReloadEffect; +}; + +datablock AudioProfile(ShockLanceDryFireSound) +{ + filename = "fx/weapons/shocklance_dryfire.WAV"; + description = AudioClose3d; + preload = true; + effect = ShockLanceReloadEffect; +}; + +datablock AudioProfile(ShockLanceMissSound) +{ + filename = "fx/weapons/shocklance_miss.WAV"; + description = AudioExplosion3d; + preload = true; +}; + +//-------------------------------------------------------------------------- +// Particle data +//-------------------------------------------------------------------------- +datablock ParticleData(ShockParticle) +{ + dragCoeffiecient = 0.0; + gravityCoefficient = -0.0; + inheritedVelFactor = 0.0; + + lifetimeMS = 1000; + lifetimeVarianceMS = 0; + + textureName = "particleTest"; + + useInvAlpha = false; + spinRandomMin = -100.0; + spinRandomMax = 100.0; + + numParts = 50; + + animateTexture = true; + framesPerSec = 26; + + animTexName[00] = "special/Explosion/exp_0002"; + animTexName[01] = "special/Explosion/exp_0004"; + animTexName[02] = "special/Explosion/exp_0006"; + animTexName[03] = "special/Explosion/exp_0008"; + animTexName[04] = "special/Explosion/exp_0010"; + animTexName[05] = "special/Explosion/exp_0012"; + animTexName[06] = "special/Explosion/exp_0014"; + animTexName[07] = "special/Explosion/exp_0016"; + animTexName[08] = "special/Explosion/exp_0018"; + animTexName[09] = "special/Explosion/exp_0020"; + animTexName[10] = "special/Explosion/exp_0022"; + animTexName[11] = "special/Explosion/exp_0024"; + animTexName[12] = "special/Explosion/exp_0026"; + animTexName[13] = "special/Explosion/exp_0028"; + animTexName[14] = "special/Explosion/exp_0030"; + animTexName[15] = "special/Explosion/exp_0032"; + animTexName[16] = "special/Explosion/exp_0034"; + animTexName[17] = "special/Explosion/exp_0036"; + animTexName[18] = "special/Explosion/exp_0038"; + animTexName[19] = "special/Explosion/exp_0040"; + animTexName[20] = "special/Explosion/exp_0042"; + animTexName[21] = "special/Explosion/exp_0044"; + animTexName[22] = "special/Explosion/exp_0046"; + animTexName[23] = "special/Explosion/exp_0048"; + animTexName[24] = "special/Explosion/exp_0050"; + animTexName[25] = "special/Explosion/exp_0052"; + + + colors[0] = "0.5 0.5 1.0 1.0"; + colors[1] = "0.5 0.5 1.0 0.5"; + colors[2] = "0.25 0.25 1.0 0.0"; + sizes[0] = 0.5; + sizes[1] = 0.5; + sizes[2] = 0.5; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData(ShockParticleEmitter) +{ + ejectionPeriodMS = 1; + periodVarianceMS = 0; + + ejectionVelocity = 0.25; + velocityVariance = 0.0; + + thetaMin = 0.0; + thetaMax = 30.0; + + particles = "ShockParticle"; +}; + +//-------------------------------------------------------------------------- +// Shockwave +//-------------------------------------------------------------------------- +datablock ShockwaveData( ShocklanceHit ) +{ + width = 0.5; + numSegments = 20; + numVertSegments = 1; + velocity = 0.25; + acceleration = 1.0; + lifetimeMS = 600; + height = 0.1; + verticalCurve = 0.5; + + mapToTerrain = false; + renderBottom = false; + orientToNormal = true; + + texture[0] = "special/shocklanceHit"; + texture[1] = "special/gradient"; + texWrap = 3.0; + + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + + colors[0] = "1.0 1.0 1.0 1.0"; + colors[1] = "1.0 1.0 1.0 0.5"; + colors[2] = "1.0 1.0 1.0 0.0"; +}; + + +//-------------------------------------- +// Projectile +//-------------------------------------- +datablock ShockLanceProjectileData(BasicShocker) +{ + directDamage = 0.45; + radiusDamageType = $DamageType::ShockLance; + kickBackStrength = 2500; + velInheritFactor = 0; + sound = ""; + + zapDuration = 1.0; + impulse = 2500; + boltLength = 14.0; + extension = 14.0; // script variable indicating distance you can shock people from + lightningFreq = 25.0; + lightningDensity = 3.0; + lightningAmp = 0.25; + lightningWidth = 0.05; + + shockwave = ShocklanceHit; + + boltSpeed[0] = 2.0; + boltSpeed[1] = -0.5; + + texWrap[0] = 1.5; + texWrap[1] = 1.5; + + startWidth[0] = 0.3; + endWidth[0] = 0.6; + startWidth[1] = 0.3; + endWidth[1] = 0.6; + + texture[0] = "special/shockLightning01"; + texture[1] = "special/shockLightning02"; + texture[2] = "special/shockLightning03"; + texture[3] = "special/ELFBeam"; + + emitter[0] = ShockParticleEmitter; +}; + + +//-------------------------------------- +// Rifle and item... +//-------------------------------------- +datablock ItemData(ShockLance) +{ + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_shocklance.dts"; + image = ShockLanceImage; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "a shocklance"; + + computeCRC = true; + emap = true; +}; + +datablock ShapeBaseImageData(ShockLanceImage) +{ + classname = WeaponImage; + shapeFile = "weapon_shocklance.dts"; + item = ShockLance; + offset = "0 0 0"; + emap = true; + + projectile = BasicShocker; + + usesEnergy = true; + missEnergy = 0; + hitEnergy = 15; + minEnergy = 15; // needs to change to be datablock's energy drain for a hit + + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateSound[0] = ShockLanceSwitchSound; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; + + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; + + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "CheckWet"; + + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.5; + stateFire[3] = true; + stateAllowImageChange[3] = false; + stateSequence[3] = "Fire"; + stateScript[3] = "onFire"; + stateSound[3] = ShockLanceDryFireSound; + + stateName[4] = "Reload"; + stateTransitionOnNoAmmo[4] = "NoAmmo"; + stateTransitionOnTimeout[4] = "Ready"; + stateTimeoutValue[4] = 2.0; + stateAllowImageChange[4] = false; + stateSequence[4] = "Reload"; + stateSound[4] = ShockLanceReloadSound; + + stateName[5] = "NoAmmo"; + stateTransitionOnAmmo[5] = "Reload"; + stateSequence[5] = "NoAmmo"; + stateTransitionOnTriggerDown[5] = "DryFire"; + + stateName[6] = "DryFire"; + stateSound[6] = ShockLanceDryFireSound; + stateTimeoutValue[6] = 1.0; + stateTransitionOnTimeout[6] = "Ready"; + + stateName[7] = "CheckWet"; + stateTransitionOnWet[7] = "DryFire"; + stateTransitionOnNotWet[7] = "Fire"; +}; + diff --git a/base/scripts/weapons/sniperRifle.cs b/base/scripts/weapons/sniperRifle.cs new file mode 100644 index 0000000..c4dda44 --- /dev/null +++ b/base/scripts/weapons/sniperRifle.cs @@ -0,0 +1,307 @@ +//-------------------------------------------------------------------------- +// Sniper rifle +// +// +//-------------------------------------------------------------------------- + +datablock EffectProfile(SniperRifleSwitchEffect) +{ + effectname = "weapons/sniper_activate"; + minDistance = 2.5; +}; + +datablock EffectProfile(SniperRifleFireEffect) +{ + effectname = "weapons/sniper_fire"; + minDistance = 4.0; +}; + +datablock EffectProfile(SniperRifleFireWetEffect) +{ + effectname = "weapons/sniper_underwater"; + minDistance = 4.0; +}; + +datablock AudioProfile(SniperRifleSwitchSound) +{ + filename = "fx/weapons/sniper_activate.wav"; + description = AudioClosest3d; + preload = true; + effect = SniperRifleSwitchEffect; +}; + +datablock AudioProfile(SniperRifleFireSound) +{ + filename = "fx/weapons/sniper_fire.wav"; + description = AudioClose3d; + preload = true; + effect = SniperRifleFireEffect; +}; + +datablock AudioProfile(SniperRifleFireWetSound) +{ + filename = "fx/weapons/sniper_underwater.wav"; + description = AudioClose3d; + preload = true; + effect = SniperRifleFireWetEffect; +}; + +datablock AudioProfile(SniperRifleDryFireSound) +{ + filename = "fx/weapons/chaingun_dryfire.wav"; + description = AudioClose3d; + preload = true; +}; + +datablock AudioProfile(SniperRifleProjectileSound) +{ + filename = "fx/weapons/sniper_miss.wav"; + description = AudioClose3d; + preload = true; +}; + +//-------------------------------------------------------------------------- +// Splash +//-------------------------------------------------------------------------- +datablock ParticleData( SniperSplashParticle ) +{ + + dragCoeffiecient = 0.4; + gravityCoefficient = -0.03; // rises slowly + inheritedVelFactor = 0.025; + + lifetimeMS = 600; + lifetimeVarianceMS = 300; + + textureName = "particleTest"; + + useInvAlpha = false; + spinRandomMin = -200.0; + spinRandomMax = 200.0; + + + colors[0] = "0.7 0.8 1.0 1.0"; + colors[1] = "0.7 0.8 1.0 0.5"; + colors[2] = "0.7 0.8 1.0 0.0"; + sizes[0] = 0.5; + sizes[1] = 1.0; + sizes[2] = 2.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData( SniperSplashEmitter ) +{ + ejectionPeriodMS = 25; + ejectionOffset = 0.2; + periodVarianceMS = 0; + ejectionVelocity = 2.25; + velocityVariance = 0.50; + thetaMin = 0.0; + thetaMax = 30.0; + lifetimeMS = 250; + + particles = "SniperSplashParticle"; +}; + +datablock SplashData( SniperSplash ) +{ + numSegments = 5; + ejectionFreq = 0.0001; + ejectionAngle = 45; + ringLifetime = 0.5; + lifetimeMS = 400; + velocity = 5.0; + startRadius = 0.0; + acceleration = -3.0; + texWrap = 5.0; + + texture = "special/water2"; + + emitter[0] = SniperSplashEmitter; + + colors[0] = "0.7 0.8 1.0 0.0"; + colors[1] = "0.7 0.8 1.0 1.0"; + colors[2] = "0.7 0.8 1.0 0.0"; + colors[3] = "0.7 0.8 1.0 0.0"; + times[0] = 0.0; + times[1] = 0.4; + times[2] = 0.8; + times[3] = 1.0; +}; + +//-------------------------------------------------------------------------- +// Explosion +//-------------------------------------- +datablock AudioProfile(sniperExpSound) +{ + filename = "fx/weapons/sniper_impact.WAV"; + description = AudioClosest3d; + preload = true; +}; + +datablock ParticleData(SniperExplosionParticle1) +{ + dragCoefficient = 0.65; + gravityCoefficient = 0.3; + inheritedVelFactor = 0.0; + constantAcceleration = 0.0; + lifetimeMS = 500; + lifetimeVarianceMS = 150; + textureName = "particleTest"; + colors[0] = "0.56 0.36 0.26 1.0"; + colors[1] = "0.56 0.36 0.26 0.0"; + sizes[0] = 0.0625; + sizes[1] = 0.2; +}; + +datablock ParticleEmitterData(SniperExplosionEmitter) +{ + ejectionPeriodMS = 10; + periodVarianceMS = 0; + ejectionVelocity = 0.75; + velocityVariance = 0.25; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 60; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + particles = "SniperExplosionParticle1"; +}; + +datablock ExplosionData(SniperExplosion) +{ + explosionShape = "energy_explosion.dts"; + soundProfile = sniperExpSound; + + particleEmitter = SniperExplosionEmitter; + particleDensity = 150; + particleRadius = 0.25; + + faceViewer = false; +}; + + +//-------------------------------------- +// Projectile +//-------------------------------------- +datablock SniperProjectileData(BasicSniperShot) +{ + directDamage = 0.4; + hasDamageRadius = false; + indirectDamage = 0.0; + damageRadius = 0.0; + velInheritFactor = 1.0; + sound = SniperRifleProjectileSound; + explosion = "SniperExplosion"; + splash = SniperSplash; + directDamageType = $DamageType::Laser; + + maxRifleRange = 1000; + rifleHeadMultiplier = 1.3; + beamColor = "1 0.1 0.1"; + fadeTime = 1.0; + + startBeamWidth = 0.145; + endBeamWidth = 0.25; + pulseBeamWidth = 0.5; + beamFlareAngle = 3.0; + minFlareSize = 0.0; + maxFlareSize = 400.0; + pulseSpeed = 6.0; + pulseLength = 0.150; + + lightRadius = 1.0; + lightColor = "0.3 0.0 0.0"; + + textureName[0] = "special/flare"; + textureName[1] = "special/nonlingradient"; + textureName[2] = "special/laserrip01"; + textureName[3] = "special/laserrip02"; + textureName[4] = "special/laserrip03"; + textureName[5] = "special/laserrip04"; + textureName[6] = "special/laserrip05"; + textureName[7] = "special/laserrip06"; + textureName[8] = "special/laserrip07"; + textureName[9] = "special/laserrip08"; + textureName[10] = "special/laserrip09"; + textureName[11] = "special/sniper00"; + +}; + + +//-------------------------------------- +// Rifle and item... +//-------------------------------------- +datablock ItemData(SniperRifle) +{ + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_sniper.dts"; + image = SniperRifleImage; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "a sniper rifle"; + + computeCRC = true; + +}; + +datablock ShapeBaseImageData(SniperRifleImage) +{ + className = WeaponImage; + shapeFile = "weapon_sniper.dts"; + item = SniperRifle; + projectile = BasicSniperShot; + projectileType = SniperProjectile; + armThread = looksn; + + usesEnergy = true; + minEnergy = 6; + + stateName[0] = "Activate"; + stateTransitionOnTimeout[0] = "ActivateReady"; + stateSound[0] = SniperRifleSwitchSound; + stateTimeoutValue[0] = 0.5; + stateSequence[0] = "Activate"; + + stateName[1] = "ActivateReady"; + stateTransitionOnLoaded[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; + + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "CheckWet"; + + stateName[3] = "Fire"; + stateTransitionOnTimeout[3] = "Reload"; + stateTimeoutValue[3] = 0.5; + stateFire[3] = true; + stateAllowImageChange[3] = false; + stateSequence[3] = "Fire"; + stateScript[3] = "onFire"; + + stateName[4] = "Reload"; + stateTransitionOnTimeout[4] = "Ready"; + stateTimeoutValue[4] = 0.5; + stateAllowImageChange[4] = false; + + stateName[5] = "CheckWet"; + stateTransitionOnWet[5] = "DryFire"; + stateTransitionOnNotWet[5] = "Fire"; + + stateName[6] = "NoAmmo"; + stateTransitionOnAmmo[6] = "Reload"; + stateTransitionOnTriggerDown[6] = "DryFire"; + stateSequence[6] = "NoAmmo"; + + stateName[7] = "DryFire"; + stateSound[7] = SniperRifleDryFireSound; + stateTimeoutValue[7] = 0.5; + stateTransitionOnTimeout[7] = "Ready"; +}; + diff --git a/base/scripts/weapons/targetingLaser.cs b/base/scripts/weapons/targetingLaser.cs new file mode 100644 index 0000000..62a29a1 --- /dev/null +++ b/base/scripts/weapons/targetingLaser.cs @@ -0,0 +1,114 @@ +//-------------------------------------------------------------------------- +// Targeting laser +// +//-------------------------------------------------------------------------- + +datablock AudioProfile(TargetingLaserSwitchSound) +{ + filename = "fx/weapons/generic_switch.wav"; + description = AudioClosest3d; + preload = true; +}; + +datablock AudioProfile(TargetingLaserPaintSound) +{ + filename = "fx/weapons/targetinglaser_paint.wav"; + description = CloseLooping3d; + preload = true; +}; + + +//-------------------------------------- +// Projectile +//-------------------------------------- +datablock TargetProjectileData(BasicTargeter) +{ + directDamage = 0.0; + hasDamageRadius = false; + indirectDamage = 0.0; + damageRadius = 0.0; + velInheritFactor = 1.0; + + maxRifleRange = 1000; + beamColor = "0.1 1.0 0.1"; + + startBeamWidth = 0.20; + pulseBeamWidth = 0.15; + beamFlareAngle = 3.0; + minFlareSize = 0.0; + maxFlareSize = 400.0; + pulseSpeed = 6.0; + pulseLength = 0.150; + + textureName[0] = "special/nonlingradient"; + textureName[1] = "special/flare"; + textureName[2] = "special/pulse"; + textureName[3] = "special/expFlare"; + beacon = true; +}; + + +//-------------------------------------- +// Rifle and item... +//-------------------------------------- +datablock ItemData(TargetingLaser) +{ + className = Weapon; + catagory = "Spawn Items"; + shapeFile = "weapon_targeting.dts"; + image = TargetingLaserImage; + mass = 1; + elasticity = 0.2; + friction = 0.6; + pickupRadius = 2; + pickUpName = "a targeting laser rifle"; + + computeCRC = true; + +}; + +datablock ShapeBaseImageData(TargetingLaserImage) +{ + className = WeaponImage; + + shapeFile = "weapon_targeting.dts"; + item = TargetingLaser; + offset = "0 0 0"; + + projectile = BasicTargeter; + projectileType = TargetProjectile; + deleteLastProjectile = true; + + usesEnergy = true; + minEnergy = 3; + + stateName[0] = "Activate"; + stateSequence[0] = "Activate"; + stateSound[0] = TargetingLaserSwitchSound; + stateTimeoutValue[0] = 0.5; + stateTransitionOnTimeout[0] = "ActivateReady"; + + stateName[1] = "ActivateReady"; + stateTransitionOnAmmo[1] = "Ready"; + stateTransitionOnNoAmmo[1] = "NoAmmo"; + + stateName[2] = "Ready"; + stateTransitionOnNoAmmo[2] = "NoAmmo"; + stateTransitionOnTriggerDown[2] = "Fire"; + + stateName[3] = "Fire"; + stateEnergyDrain[3] = 3; + stateFire[3] = true; + stateAllowImageChange[3] = false; + stateScript[3] = "onFire"; + stateTransitionOnTriggerUp[3] = "Deconstruction"; + stateTransitionOnNoAmmo[3] = "Deconstruction"; + stateSound[3] = TargetingLaserPaintSound; + + stateName[4] = "NoAmmo"; + stateTransitionOnAmmo[4] = "Ready"; + + stateName[5] = "Deconstruction"; + stateScript[5] = "deconstruct"; + stateTransitionOnTimeout[5] = "Ready"; +}; diff --git a/base/scripts/weather.cs b/base/scripts/weather.cs new file mode 100644 index 0000000..ab24bb3 --- /dev/null +++ b/base/scripts/weather.cs @@ -0,0 +1,348 @@ +datablock AudioProfile(Universal_Rain_Light_1) +{ + filename = "fx/environment/rain_light_1.wav"; + description = AudioLooping2d; +}; + +datablock PrecipitationData(Rain) +{ + type = 0; + soundProfile = "Universal_Rain_Light_1"; + materialList = "raindrops.dml"; + sizeX = 0.2; + sizeY = 0.45; + + movingBoxPer = 0.35; + divHeightVal = 1.5; + sizeBigBox = 1; + topBoxSpeed = 20; + frontBoxSpeed = 30; + topBoxDrawPer = 0.5; + bottomDrawHeight = 40; + skipIfPer = -0.3; + bottomSpeedPer = 1.0; + frontSpeedPer = 1.5; + frontRadiusPer = 0.5; + +}; + +datablock PrecipitationData(Snow) +{ + type = 1; + materialList = "snowflakes.dml"; + sizeX = 0.20; + sizeY = 0.20; + + movingBoxPer = 0.35; + divHeightVal = 1.5; + sizeBigBox = 1; + topBoxSpeed = 20; + frontBoxSpeed = 30; + topBoxDrawPer = 0.5; + bottomDrawHeight = 40; + skipIfPer = -0.3; + bottomSpeedPer = 1.0; + frontSpeedPer = 1.5; + frontRadiusPer = 0.5; +}; + +datablock PrecipitationData(Sand) +{ + type = 2; + maxSize = 2; + + movingBoxPer = 0.35; + divHeightVal = 1.5; + sizeBigBox = 1; + topBoxSpeed = 20; + frontBoxSpeed = 30; + topBoxDrawPer = 0.5; + bottomDrawHeight = 40; + skipIfPer = -0.3; + bottomSpeedPer = 1.0; + frontSpeedPer = 1.5; + frontRadiusPer = 0.5; +}; + +function Sky::setStormClouds(%obj, %inStartT, %inLengthT, %outStartT, %outLengthT) +{ + if(%inStartT < %outStartT) + %obj.stormCloudsShow(false); + else + %obj.stormCloudsShow(true); + + %obj.schedule(%inStartT*1000, "stormClouds", 1, %inLengthT); + %obj.schedule(%outStartT*1000, "stormClouds", 0, %outLengthT); +} + +function Sky::setStormFog(%obj, %inStartT, %inLengthT, %inPer, %outStartT, %outLengthT, %outPer) +{ + if(%inStartT < %outStartT) + %obj.stormFogShow(false); + else + %obj.stormFogShow(true); + %obj.schedule(%inStartT*1000, "stormFog", %inPer, %inLengthT); + %obj.schedule(%outStartT*1000, "stormFog", %outPer, %outLengthT); +} + +function Precipitation::setStorm(%obj, %inStartT, %inLengthT, %inPer, %outStartT, %outLengthT, %outPer) +{ + if(%inStartT < %outStartT) + %obj.stormShow(false); + else + %obj.stormShow(true); + %obj.schedule(%inStartT*1000, "stormPrecipitation", %inPer, %inLengthT); + %obj.schedule(%outStartT*1000, "stormPrecipitation", %outPer, %outLengthT); +} + +function testStorm() +{ + Sky.setStormClouds(0, 60, 70, 60); + Sky.setStormFog(0, 60, 1, 70, 60, 0); + Precipitation.setStorm(30, 30, 1, 70, 30, 0); +} + + +//-------------------------------------------------------------------------- +// Fireball data +//-------------------------------------------------------------------------- + +datablock ParticleData( FireballAtmosphereCrescentParticle ) +{ + dragCoefficient = 2; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + constantAcceleration = -0.0; + lifetimeMS = 600; + lifetimeVarianceMS = 000; + textureName = "special/crescent3"; + colors[0] = "1.0 0.75 0.2 1.0"; + colors[1] = "1.0 0.75 0.2 0.5"; + colors[2] = "1.0 0.75 0.2 0.0"; + sizes[0] = 2.0; + sizes[1] = 4.0; + sizes[2] = 5.0; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ParticleEmitterData( FireballAtmosphereCrescentEmitter ) +{ + ejectionPeriodMS = 25; + periodVarianceMS = 0; + ejectionVelocity = 20; + velocityVariance = 5.0; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 80; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 200; + particles = "FireballAtmosphereCrescentParticle"; +}; + +datablock ParticleData(FireballAtmosphereExplosionParticle) +{ + dragCoefficient = 2; + gravityCoefficient = 0.2; + inheritedVelFactor = 0.2; + constantAcceleration = 0.0; + lifetimeMS = 750; + lifetimeVarianceMS = 150; + textureName = "particleTest"; + colors[0] = "0.56 0.36 0.26 1.0"; + colors[1] = "0.56 0.36 0.26 0.0"; + sizes[0] = 1; + sizes[1] = 2; +}; + +datablock ParticleEmitterData(FireballAtmosphereExplosionEmitter) +{ + ejectionPeriodMS = 7; + periodVarianceMS = 0; + ejectionVelocity = 12; + velocityVariance = 1.75; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 60; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + particles = "FireballAtmosphereExplosionParticle"; +}; + + +datablock ExplosionData(FireballAtmosphereSubExplosion1) +{ + explosionShape = "effect_plasma_explosion.dts"; + faceViewer = true; + + delayMS = 50; + + offset = 3.0; + + playSpeed = 1.5; + + sizes[0] = "0.5 0.5 0.5"; + sizes[1] = "0.5 0.5 0.5"; + times[0] = 0.0; + times[1] = 1.0; + +}; + +datablock ExplosionData(FireballAtmosphereSubExplosion2) +{ + explosionShape = "effect_plasma_explosion.dts"; + faceViewer = true; + + delayMS = 100; + + offset = 3.5; + + playSpeed = 1.0; + + sizes[0] = "1.0 1.0 1.0"; + sizes[1] = "1.0 1.0 1.0"; + times[0] = 0.0; + times[1] = 1.0; +}; + +datablock ExplosionData(FireballAtmosphereSubExplosion3) +{ + explosionShape = "effect_plasma_explosion.dts"; + faceViewer = true; + + delayMS = 0; + + offset = 0.0; + + playSpeed = 0.7; + + + sizes[0] = "1.0 1.0 1.0"; + sizes[1] = "2.0 2.0 2.0"; + times[0] = 0.0; + times[1] = 1.0; + +}; + +datablock ExplosionData(FireballAtmosphereBoltExplosion) +{ + soundProfile = PlasmaBarrelExpSound; + particleEmitter = FireballAtmosphereExplosionEmitter; + particleDensity = 250; + particleRadius = 1.25; + faceViewer = true; + + emitter[0] = FireballAtmosphereCrescentEmitter; + + subExplosion[0] = FireballAtmosphereSubExplosion1; + subExplosion[1] = FireballAtmosphereSubExplosion2; + subExplosion[2] = FireballAtmosphereSubExplosion3; + + shakeCamera = true; + camShakeFreq = "10.0 9.0 9.0"; + camShakeAmp = "70.0 70.0 70.0"; + camShakeDuration = 1.3; + camShakeRadius = 15.0; +}; + +datablock ParticleData(FireballAtmosphereParticle) +{ + dragCoeffiecient = 0.0; + gravityCoefficient = -0.0; + inheritedVelFactor = 0.85; + + lifetimeMS = 1600; + lifetimeVarianceMS = 0; + + textureName = "particleTest"; + + useInvAlpha = false; + spinRandomMin = -100.0; + spinRandomMax = 100.0; + + animateTexture = true; + framesPerSec = 15; + + animTexName[00] = "special/Explosion/exp_0002"; + animTexName[01] = "special/Explosion/exp_0004"; + animTexName[02] = "special/Explosion/exp_0006"; + animTexName[03] = "special/Explosion/exp_0008"; + animTexName[04] = "special/Explosion/exp_0010"; + animTexName[05] = "special/Explosion/exp_0012"; + animTexName[06] = "special/Explosion/exp_0014"; + animTexName[07] = "special/Explosion/exp_0016"; + animTexName[08] = "special/Explosion/exp_0018"; + animTexName[09] = "special/Explosion/exp_0020"; + animTexName[10] = "special/Explosion/exp_0022"; + animTexName[11] = "special/Explosion/exp_0024"; + animTexName[12] = "special/Explosion/exp_0026"; + animTexName[13] = "special/Explosion/exp_0028"; + animTexName[14] = "special/Explosion/exp_0030"; + animTexName[15] = "special/Explosion/exp_0032"; + animTexName[16] = "special/Explosion/exp_0034"; + animTexName[17] = "special/Explosion/exp_0036"; + animTexName[18] = "special/Explosion/exp_0038"; + animTexName[19] = "special/Explosion/exp_0040"; + animTexName[20] = "special/Explosion/exp_0042"; + animTexName[21] = "special/Explosion/exp_0044"; + animTexName[22] = "special/Explosion/exp_0046"; + animTexName[23] = "special/Explosion/exp_0048"; + animTexName[24] = "special/Explosion/exp_0050"; + animTexName[25] = "special/Explosion/exp_0052"; + + + colors[0] = "1.0 0.7 0.5 1.0"; + colors[1] = "1.0 0.5 0.2 1.0"; + colors[2] = "1.0 0.25 0.1 0.0"; + sizes[0] = 10.0; + sizes[1] = 4.0; + sizes[2] = 2.0; + times[0] = 0.0; + times[1] = 0.2; + times[2] = 1.0; + +}; + +datablock ParticleEmitterData(FireballAtmosphereEmitter) +{ + ejectionPeriodMS = 10; + periodVarianceMS = 0; + + ejectionVelocity = 0.25; + velocityVariance = 0.0; + + thetaMin = 0.0; + thetaMax = 30.0; + + particles = "FireballAtmosphereParticle"; +}; + +datablock DebrisData( FireballAtmosphereDebris ) +{ + emitters[0] = FireballAtmosphereEmitter; + + explosion = FireballAtmosphereBoltExplosion; + explodeOnMaxBounce = true; + + elasticity = 0.0; + friction = 1.0; + + lifetime = 100.0; + lifetimeVariance = 0.0; + + numBounces = 0; + bounceVariance = 0; + + ignoreWater = false; +}; + +datablock FireballAtmosphereData(Fireball) +{ + fireball = FireballAtmosphereDebris; +}; + diff --git a/base/scripts/webbrowser.cs b/base/scripts/webbrowser.cs new file mode 100644 index 0000000..beac24e --- /dev/null +++ b/base/scripts/webbrowser.cs @@ -0,0 +1,2331 @@ +//==-- FUNCTIONS ------------------------------------------------------------- +//$strcheck = "14 : < > * ^ | ~ @ % & / \\ ` \""; +$strcheck = "4 : % \\ /"; + +$playerGfx = "texticons/twb/twb_default.jpg"; +$tribeGfx = "texticons/twb/twb_default.jpg"; + +//----------------------------------------------------------------------------- +if(!isObject(TProfileHdr)) +{ + new GuiControl(TProfileHdr); +} +//----------------------------------------------------------------------------- +function BrowserSearchDone() +{ + Canvas.popDialog(BrowserSearchDlg); + %id = BrowserSearchMatchList.getSelectedId(); + if(%id != -1) + { + if(BrowserSearchPane.query $= 4) + TWBTabView.view(getField(BrowserSearchMatchList.getRowTextById(%id), 1), "Tribe"); + else + TWBTabView.view(getField(BrowserSearchMatchList.getRowTextById(%id), 0), "Warrior"); + } +} +//----------------------------------------------------------------------------- +function TextCheck(%text,%handler) +{ + %handler.textCheck = 0; + for(%i=1;%i -1) + { + %handler.textCheck=1; + break; + } + } +} +//----------------------------------------------------------------------------- +function BrowserStartSearch() +{ + if(trim($BrowserSearchField) $="" || trim($BrowserSearchField) $="_") + { + MessageBoxOK("NOTICE","Blank/Underline searches are not allowed, enter one or more characters of text and try again.","Search_EditField.makeFirstResponder(1);"); + } + else + { + TextCheck($BrowserSearchField,BrowserSearchPane); + if(!BrowserSearchPane.textCheck) + { + BrowserSearchPane.key = LaunchGui.key++; + if(BrowserSearchPane.query==3) + BrowserSearchPane.state = "warriorSearch"; + else + BrowserSearchPane.state = "tribeSearch"; + + BrowserSearchMatchList.clear(); + canvas.SetCursor(ArrowWaitCursor); + if(isEventPending(TribeAndWarriorBrowserGui.eid)) + cancel(TribeAndWarriorBrowserGui.eid); + + TribeAndWarriorBrowserGui.eid = schedule(250,0,ExecuteSearch,0,BrowserSearchPane); + } + else + { + for(%x=0;%x= 2) + TProfileHdr.twa = 1; + } + + W_Profile.setVisible(1); + W_History.setVisible(1); + W_Tribes.setVisible(1); + %isMe = getField(getRecord(wonGetAuthInfo(),0),0)$=twbTitle.name; + if(%isMe) + { + W_BuddyList.setText("BUDDYLIST"); + W_BuddyList.setVisible(1); + W_BuddyList.command = "PlayerPane.ButtonClick(3);"; + W_BuddyList.groupNum = 5; + W_Admin.setVisible(1); + } + else + { + W_BuddyList.setText("OPTIONS"); + W_BuddyList.setVisible(1); + W_BuddyList.command = "PlayerPane.ButtonClick(4);"; + W_BuddyList.groupNum = 4; + W_Admin.setVisible(0); + } + } +} +//----------------------------------------------------------------------------- +function getTribeLinkName(%text, %offset) +{ + %name = getField(%text, %offset); + %tag = getField(%text, %offset+1); + return "" @ %name @ " - " @ %tag @ ""; +} +//----------------------------------------------------------------------------- +function getTribeName(%text, %offset) +{ + return getField(%text, %offset) @ " - " @ getField(%text, %offset + 1) TAB getField(%text, %offset); +} +//----------------------------------------------------------------------------- +function SearchTribes() +{ + if(BrowserSearchPane.query !$= 4) + { + // clear out the fields... + $BrowserSearchField = ""; + BrowserSearchMatchList.clear(); + } + + Canvas.pushDialog(BrowserSearchDlg); + Search_EditField.makeFirstResponder(1); + BrowserSearchPane.setTitle("TRIBE SEARCH"); + BrowserSearchPane.query = 4; +} +//----------------------------------------------------------------------------- +function KillTribe(%tribe) +{ + Canvas.popDialog(TribePropertiesDlg); + TribePane.key = LaunchGui.key++; + TribePane.state = "killTribe"; + canvas.SetCursor(ArrowWaitCursor); + DatabaseQuery(18,%tribe,TribePane,TribePane.key); +} +//----------------------------------------------------------------------------- +function LinkClearBuddylist(%owner,%handler) +{ + %owner.key = LaunchGui.key++; + %owner.state = %handler; + canvas.SetCursor(ArrowWaitCursor); + DatabaseQuery(26,"clearBuddy", %owner, %owner.key); +} +//----------------------------------------------------------------------------- +function LinkRemoveBuddy(%player, %owner, %handler) +{ + %owner.key = LaunchGui.key++; + %owner.state = %handler; + canvas.SetCursor(ArrowWaitCursor); + DatabaseQuery(11, %player, %owner, %owner.key); +} +//----------------------------------------------------------------------------- +function LinkAddBuddy(%player, %owner, %handler) +{ + %owner.key = LaunchGui.key++; + %owner.state = %handler; + canvas.SetCursor(ArrowWaitCursor); + DatabaseQuery(10, %player, %owner, %owner.key); +} +//----------------------------------------------------------------------------- +function LinkBlockPlayer(%blockAddress,%owner,%state) +{ + EMailBlockDlg.state = "setBlock"; + EMailBlockDlg.key = LaunchGui.key++; + canvas.SetCursor(ArrowWaitCursor); + DatabaseQuery(9,%blockAddress,EmailBlockDlg,EMailBlockDlg.key); +} +//----------------------------------------------------------------------------- +function LinkEditWarrior() +{ + MessageBoxOK( "NOT YET", "This feature has not yet been implemented." ); +} +//----------------------------------------------------------------------------- +function LinkEditWarriorDesc(%player, %handler) +{ +// if(%handler.editType $= "tribe") +// if(trim(%player) !$= "") +// { +// %handler.tribe = %player; +// %handler.editType = "tribe"; +// } +// else +// { +// TWBText.editType = "warrior"; +// } + + Canvas.pushDialog(BrowserEditInfoDlg); + EditDescriptionText.setValue(TProfileHdr.Desc); +} +//----------------------------------------------------------------------------- +function LinkEditMember(%player, %tribe, %pv, %title,%owner) +{ + tb_onProbation.setVisible(true); + tb_tribeMember.setVisible(false); + tb_tribeAdmin.setVisible(false); + tb_tribeController.setVisible(false); + tb_sysAdmin.setVisible(false); + + tb_onProbation.setValue(false); + tb_tribeMember.setValue(false); + tb_tribeAdmin.setValue(false); + tb_tribeController.setValue(false); + tb_sysAdmin.setValue(false); + %owner.vTribe = %tribe; + %owner.vPlayer = %player; + t_whois.setValue(%player); + E_Title.setValue(%title); + + %ai = wonGetAuthInfo(); + + // Get callers rank in members tribe + for(%i=0;%i1)) + { + error("TRIBE MATCH FOUND" TAB getField(getREcord(%ai,2+%i),4)); + %callerPv = getField(getRecord(%ai,2+%i),4); + break; + } + } + + if(%callerPv > %pv) + %rnk = %callerPv; + else + %rnk = %pv; + + %owner.vPerm = %rnk; + + if(getField(getRecord(%ai,0),0) $= getField(twbTitle.getValue(),0)) //if the caller is the member to be edited + { + error("CALLER IS MEMBER" TAB %rnk TAB %pv TAB %callerPv); + switch( %pv ) + { + case 0: + tb_onProbation.setValue(true); + case 1: + tb_tribeMember.setValue(true); + tb_tribeMember.setVisible(true); + case 2: + tb_tribeMember.setVisible(true); + tb_tribeAdmin.setVisible(true); + tb_tribeAdmin.setValue(true); + case 3: + tb_tribeMember.setVisible(true); + tb_tribeAdmin.setVisible(true); + tb_tribeController.setVisible(true); + tb_tribeController.setValue(true); + case 4: + tb_tribeMember.setVisible(true); + tb_tribeAdmin.setVisible(true); + tb_tribeController.setVisible(true); + tb_sysAdmin.setVisible(true); + tb_sysAdmin.setValue(true); + } + } + else + { + error("CALLER IS NOT MEMBER" TAB %rnk TAB %pv TAB %callerPv); + switch( %rnk ) + { + case 1: + tb_tribeMember.setVisible(true); + case 2: + tb_tribeMember.setVisible(true); + tb_tribeAdmin.setVisible(true); + case 3: + tb_tribeMember.setVisible(true); + tb_tribeAdmin.setVisible(true); + tb_tribeController.setVisible(true); + case 4: + tb_tribeMember.setVisible(true); + tb_tribeAdmin.setVisible(true); + tb_tribeController.setVisible(true); + tb_sysAdmin.setVisible(true); + } + + switch( %pv ) + { + case 0: + tb_onProbation.setValue(true); + case 1: + tb_tribeMember.setValue(true); + case 2: + tb_tribeAdmin.setValue(true); + case 3: + tb_tribeController.setValue(true); + case 4: + tb_sysAdmin.setValue(true); + } + } + Canvas.pushDialog(%owner); +} +//----------------------------------------------------------------------------- +function LinkLeaveTribe(%player,%handler) +{ + %handler.key = LaunchGui.key++; + %handler.state = "leaveTribe"; + canvas.SetCursor(ArrowWaitCursor); + %handler.leavingTribe = %player; + DatabaseQuery(24,%player,%handler,%handler.key); +} +//----------------------------------------------------------------------------- +function LinkKickMember(%player, %tribe, %owner) +{ + %owner.warrior = %player; + %owner.tribe = %tribe; + TribePane.key = LaunchGui.key++; + TribePane.state = "kickPlayer"; + canvas.SetCursor(ArrowWaitCursor); + DatabaseQuery(19,%player TAB %tribe TAB 0,TribePane,TribePane.key); +} +//----------------------------------------------------------------------------- +function LinkMakePrimary(%action, %field, %owner) +{ + %owner.key = LaunchGui.key++; + %owner.state = %action; + canvas.SetCursor(ArrowWaitCursor); + DatabaseQuery(25,%field,%owner,%owner.key); +} +//----------------------------------------------------------------------------- +function LinkTribeToggle(%action, %field, %owner, %handler) +{ + TribePane.key = LaunchGui.key++; + TribePane.state = "toggleTribe" @ %action; + canvas.SetCursor(ArrowWaitCursor); + DatabaseQuery(20,%action TAB %field,TribePane,TribePane.key); +} +//----------------------------------------------------------------------------- +function LinkInvitePlayer(%tribe, %player, %owner, %handler) +{ + %owner.key = LaunchGui.key++; + %owner.state = %handler; + canvas.SetCursor(ArrowWaitCursor); + DatabaseQuery(27,%tribe TAB %player,%owner,%owner.key); +} +//----------------------------------------------------------------------------- +function LinkTribeTag(%owner) +{ + Canvas.pushDialog(%owner); +} +//----------------------------------------------------------------------------- +function LinkBrowser(%player , %tabtype) +{ + LaunchBrowser(%player , %tabtype); +} +//----------------------------------------------------------------------------- +function LinkForum(%forum, %topic) +{ + ForumsTopicsList.refreshFlag = true; + LaunchForums( %forum, %topic ); +} +//----------------------------------------------------------------------------- +function LinkWeb(%url) +{ + gotoWebPage( %url ); +} +//----------------------------------------------------------------------------- +function LinkInvitation(%action, %tribe, %player, %owner) +{ + %owner.key = LaunchGui.key++; + switch$(%action) + { + case "cancel": + %owner.state = "cancelInvite"; + case "accept": + %owner.state = "acceptInvite"; + case "reject": + %owner.state = "rejectInvite"; + } + canvas.SetCursor(ArrowWaitCursor); + DatabaseQuery(28,%action TAB %tribe TAB %player,%owner,%owner.key); +} +//----------------------------------------------------------------------------- +function LinkEMail(%MailTo) +{ + $EmailToAddress = %MailTo; + $EmailCCAddress = ""; + $EmailSubject = ""; + Canvas.pushDialog(EmailComposeDlg); + EmailBodyText.setValue(""); + Email_Subject.makeFirstResponder(1); +} +//----------------------------------------------------------------------------- +function SearchWarriors() +{ + if(BrowserSearchPane.query !$= 3) + { + // clear out the fields... + $BrowserSearchField = ""; + BrowserSearchMatchList.clear(); + } + Canvas.pushDialog(BrowserSearchDlg); + BrowserSearchPane.setTitle("WARRIOR SEARCH"); + BrowserSearchPane.query = 3; + Search_EditField.makeFirstResponder(1); +} +//----------------------------------------------------------------------------- +function SetMemberProfile() +{ + if(strLen(trim(E_Title.getValue)) <= 0) + { + TextCheck(E_Title.getValue(),TribeAdminMemberDlg); + if(TribeAdminMemberDlg.textCheck==0) + { + TribeAdminMemberDlg.key = LaunchGui.key++; + TribeAdminMemberDlg.state = "setMemberProfile"; + canvas.SetCursor(ArrowWaitCursor); + DatabaseQuery(21,TribeAdminMemberDlg.vTribe TAB + TribeAdminMemberDlg.vPlayer TAB + E_Title.getValue() TAB + TribeAdminMemberDlg.vPerm, + TribeAdminMemberDlg, + TribeAdminMemberDlg.key); + + Canvas.popDialog(TribeAdminMemberDlg); + } + else + { + MessageBoxOK("WARNING","Member Title contains illegal characters. Please correct and try again."); + } + } + else + MessageBoxOK("WARNING","Member Title cannot be blank...really."); +} +//----------------------------------------------------------------------------- +function TAM_OnAction(%caller) +{ + TribeAdminMemberDlg.vPerm = %caller; +} +//----------------------------------------------------------------------------- +function updateNewTagPreview() +{ + %ntag = TAD_NewTag.getValue(); + %playerName = GetField(GetRecord(WonGetAuthInfo(),0),0); + if ( $NewTagAppend ) + TAD_PreviewTag.setValue( %playerName @ %ntag); + else + TAD_PreviewTag.setValue(%ntag @ %playerName); +} +//----------------------------------------------------------------------------- +function updateTribeTagPreview() +{ + %warrior = getField( WONGetAuthInfo(), 0 ); + %tag = CT_TagText.getValue(); + if ( $CreateTribeAppend ) + CT_PreviewText.setValue( %warrior @ %tag ); + else + CT_PreviewText.setValue( %tag @ %warrior ); +} + +//-- TribeAndWarriorBrowserGui ----------------------------------------------- +function TribeAndWarriorBrowserGui::onWake(%this) +{ + MemberList.ClearColumns(); + W_MemberList.ClearColumns(); + MemberList.Clear(); + W_MemberList.clear(); + Canvas.pushDialog(LaunchToolbarDlg); + TWBTabView.addSet( 1, "gui/shll_horztabbuttonB", "5 5 5", "50 50 0", "5 5 5" ); + + if ( TWBTabView.tabCount() == 0 ) + { + %info = WONGetAuthInfo(); + + // Open the player's page: + %warrior = getField( %info, 0 ); + TWBTabView.view( %warrior, "Warrior" ); + w_profile.setValue(1); + w_tribes.setValue(1); + + // Add tabs for the player's tribal pages: + %tribeCount = getField( getRecord( %info, 1 ), 0 ); //%cert + for ( %i = 0; %i < %tribeCount; %i++ ) + { + %tribe = getField( getRecord( %info, %i + 2 ), 0 ); //%cert + TWBTabView.addTab( %i + 1, %tribe, 1 ); + } + } + else if(PlayerPane.visible) + PlayerPane.onWake(); + else + TribePane.onWake(); +} +//----------------------------------------------------------------------------- +function TribeAndWarriorBrowserGui::setKey( %this, %key ) +{ +} +//----------------------------------------------------------------------------- +function TribeAndWarriorBrowserGui::onClose( %this, %key ) +{ +} +//----------------------------------------------------------------------------- +function TribeAndWarriorBrowserGui::connectionTerminated( %this, %key ) +{ + if ( %key != %this.key ) + return; +} +//----------------------------------------------------------------------------- +function TribeAndWarriorBrowserGui::onSleep(%this) +{ + if (TribeAndWarriorBrowserGui.WDialogOpen) + WarriorPopupDlg.forceClose(); + + if (TribeAndWarriorBrowserGui.TDialogOpen) + TribeMemberPopupDlg.forceClose(); + + Canvas.popDialog(LaunchToolbarDlg); +} +//==-- CreateTribeDlg ------------------------------------------------------- +function CreateTribeDlg::onWake( %this ) +{ + rbAppendTab.setValue(1); +// updateTribeTagPreview(); +} +//----------------------------------------------------------------------------- +function CreateTribeDlg::CreateTribe(%this) +{ + CreateTribeProcess(); +} +//----------------------------------------------------------------------------- +function CreateTribeDlg::Cancel(%this) +{ + Canvas.PopDialog(CreateTribeDlg); + $CreateTribeName = ""; + $CreateTribeTag = ""; + CreateTribeDlg.delete(); + + if(isObject(CreateTribeDlg)) + CreateTribeDlg.delete(); +} +//----------------------------------------------------------------------------- +function CreateTribeDlg::onDatabaseQueryResult(%this,%status,%resultString,%key) +{ + if ( %this.key != %key ) + return; + echo("RECV: " @ %status); + if(getField(%status,0)==0) + { + switch$(%this.state) + { + case "createTribe": + TWBTabView.view( $CreateTribeName, "Tribe" ); + Canvas.popDialog(CreateTribeDlg); + $CreateTribeName = ""; + $CreateTribeTag = ""; + if(isObject(CreateTribeDlg)) + CreateTribeDlg.delete(); + WonUpdateCertificate(); + } + } + else if (getSubStr(getField(%status,1),0,9) $= "ORA-04061") + { + %this.state = "error"; + MessageBoxOK("ERROR","There was an error processing your request, please wait a few moments and try again."); + } + else + { + %this.state = "error"; + MessageBoxOK("WARNING",getField(%status,1)); + } + Canvas.setCursor(defaultCursor); +} +//----------------------------------------------------------------------------- +function CreateTribeDlg::onDatabaseRow(%this,%row,%isLastRow,%key) +{ + if( %this.key != %key ) + return; + echo("RECV: " @ %row); +} +//==-- TribeAdminMemberDlg --------------------------------------------------- +function TribeAdminMemberDlg::onWake(%this) +{ + +} +//----------------------------------------------------------------------------- +function TribeAdminMemberDlg::onDatabaseQueryResult( %this, %status, %resultString, %key) +{ + if ( %this.key != %key ) + return; + echo("RECV: " @ %status); + if(getField(%status,0)==0) + { + switch$(%this.state) + { + case "setMemberProfile": + %this.state = "done"; + messageBoxOK("COMPLETE","Member Profile has been updated","WonUpdateCertificate();TL_Roster.setValue(1);"); + } + } + else if (getSubStr(getField(%status,1),0,9) $= "ORA-04061") + { + %this.state = "error"; + MessageBoxOK("ERROR","There was an error processing your request, please wait a few moments and try again."); + } + else + messageBoxOK("WARNING",getField(%status,1)); + Canvas.setCursor(defaultCursor); +} +//----------------------------------------------------------------------------- +function TribeAdminMemberDlg::onDatabaseRow(%this,%row,%isLastRow,%key) +{ + if ( %this.key != %key ) + return; + echo("RECV: " @ %row); +} +//----------------------------------------------------------------------------- +function TribeAdminMemberDlg::connectionTerminated( %this, %key ) +{ + if ( %this.key != %key ) + return; + + if ( %this.errorState $= "OK" ) + TWBTabView.refresh(); +} +//==-- BrowserSearchDlg ----------------------------------------------------- +function BrowserSearchDlg::onWake( %this ) +{ + if ( BrowserSearchMatchList.getSelectedId() == -1 ) + BSearchOKBtn.setActive( false ); +} +//----------------------------------------------------------------------------- +function BrowserSearchMatchList::onSelect( %this, %id, %text ) +{ + BSearchOKBtn.setActive( true ); +} +//==-- BrowserSearchPane ---------------------------------------------------- +function BrowserSearchPane::onDatabaseQueryResult(%this, %status, %resultStatus, %key) +{ + if(%key != %this.key) + return; + echo("RECV: " @ %status); + if(getField(%status,0)==0) + { + switch$(%this.state) + { + case "warriorSearch": + if(getField(%resultStatus,0)<=0) + { + %this.state = "done"; + MessageBoxOK("NOTICE","No Players found"); + } + else + { + %this.rowNum = -1; + %this.state = "warrior"; + } + case "tribeSearch": + if(getField(%resultStatus,0)<=0) + { + %this.state = "done"; + MessageBoxOK("NOTICE","No Tribes found"); + } + else + { + %this.rowNum = -1; + %this.state = "tribe"; + } + } + } + else if (getSubStr(getField(%status,1),0,9) $= "ORA-04061") + { + %this.state = "error"; + MessageBoxOK("ERROR","There was an error processing your request, please wait a few moments and try again."); + } + else + { + %this.state = "error"; + MessageBoxOK("WARNING",getField(%status,1)); + } + canvas.setCursor(defaultCursor); +} +//----------------------------------------------------------------------------- +function BrowserSearchPane::onDatabaseRow(%this, %row, %isLastRow, %key) +{ + if(%key != %this.key) + return; + echo("RECV: " @ %row); + switch$(%this.state) + { + case "tribe": + %line = getTribeName(getFields(%row, 1),0) TAB getField(%row, 2); + error("TLine: " @ %line); + BrowserSearchMatchList.addRow(%this.rowNum++, %line); + if(%isLastRow) + %this.state = "done"; + case "warrior": + %line = getFields(%row,1); + error("WLine: " @ %line); + BrowserSearchMatchList.addRow(%this.rowNum++, %line); + if(%isLastRow) + %this.state = "done"; + } +} +//==-- TWBTabView ----------------------------------------------------------- +function TWBTabView::view(%this, %name, %type) +{ + if ( %type $= "Tribe" ) + %tabSet = 1; + else + %tabSet = 0; + + // If the tab is already in the group, select it: + for(%i = 0; %i < %this.tabCount(); %i++) + { + if ( ( %this.getTabText( %i ) $= %name ) && ( %tabSet == %this.getTabSet( %i ) ) ) + { + %this.setSelectedByIndex( %i ); + return; + } + } + + // Or else add the new tab: + %this.addTab( %i, %name, %tabSet ); + %this.setSelectedByIndex(%i); + TWBClosePaneBtn.setVisible(TWBTitle.name !$= getField(getRecord(wongetAuthInfo(),0),0)); +} +//----------------------------------------------------------------------------- +function TWBTabView::refresh( %this ) +{ + // Just re-select the selected tab: + %this.setSelectedByIndex( %this.getSelectedTab() ); +} +//----------------------------------------------------------------------------- +function TWBTabView::closeCurrentPane( %this ) +{ + %id = %this.getSelectedId(); + %this.removeTab( %id ); +} +//----------------------------------------------------------------------------- +function TWBTabView::onSelect(%this, %id, %text) +{ + MemberList.clear(); + W_MemberList.clear(); + TWBScroll.scrollToTop(); + TWBTitle.OldText = TWBTitle.name; + TWBTitle.setValue( %text ); // This will get overwritten... + TWBTitle.name = %text; + TWBClosePaneBtn.setVisible(TWBTitle.name !$= getField(getRecord(wongetAuthInfo(),0),0)); + switch(%this.getTabSet( %id )) + { + case 0: // Warrior + if(isObject(TProfileHdr)) + { + TProfileHdr.delete(); + new GuiControl(TProfileHdr); + } + PlayerPane.setvisible(1); + TribePane.setvisible(0); + + if(W_memberList.rowCount()<=0) + PlayerPane.needRefresh = 1; + else + PlayerPane.needRefresh = 0; + + TWBTabFrame.setAltColor( false ); + TWBClosePaneBtn.setVisible(TWBTitle.name !$= getField(getRecord(wongetAuthInfo(),0),0)); + if(TWBTitle.OldText !$= TWBTitle.name) + W_Profile.setValue(1); + + PlayerPix.setBitmap($playerGfx); + W_Profile.setVisible(1); + W_History.setVisible(1); + W_Tribes.setVisible(1); + %isMe = getField(getRecord(wonGetAuthInfo(),0),0)$=twbTitle.name; + if(%isMe) + { + W_BuddyList.setText("BUDDYLIST"); + W_BuddyList.setVisible(1); + W_BuddyList.command = "PlayerPane.ButtonClick(3);"; + W_BuddyList.groupNum = 5; + } + else + { + W_BuddyList.setText("OPTIONS"); + W_BuddyList.setVisible(1); + W_BuddyList.command = "PlayerPane.ButtonClick(4);"; + W_BuddyList.groupNum = 4; + } + W_Admin.setVisible(getField(getRecord(wonGetAuthInfo(),0),0)$=twbTitle.name); + + case 1: // Tribe + PlayerPane.setvisible(0); + TribePane.setvisible(1); + if(memberList.rowCount()<=0) + TribePane.needRefresh = 1; + else + TribePane.needRefresh = 0; + + TWBTabFrame.setAltColor( true ); + if(TWBTitle.OldText !$= TWBTitle.name) + TL_Profile.setValue(1); + +// %this.display(); + + } +} +//==-- GUIMLTextCtrl -------------------------------------------------------- +function GuiMLTextCtrl::onURL(%this, %url) +{ + %i = 0; + while((%fld[%i] = getField(%url, %i)) !$= "") + %i++; + + %tribe = %fld[1]; + %warrior = %fld[2]; + switch$(%fld[0]) + { + case "player": + LinkBrowser( %fld[1] , "Warrior"); + case "tribe": + LinkBrowser( %fld[1], "Tribe" ); + case "forumlink": + LinkForum(%fld[1], %fld[3]); + case "wwwlink": + LinkWeb( %fld[1] ); + case "cancelinvite": + %tribe = %fld[1]; + %warrior = %fld[2]; + MessageBoxYesNo("CONFIRM", "Are you sure you wish to cancel the invitation for " @ %fld[1] @ " to join Tribe " @ %fld[2] @ "?", + "LinkInvitation(\"cancel\"," @ %tribe @ "," @ %player @ ",\" TribePane \");",""); + case "acceptinvite": + LinkInvitation("accept",%tribe,%warrior,PlayerPane); + case "rejectinvite": + LinkInvitation("reject",%tribe,%warrior,PlayerPane); + case "email": + LinkEMail(%fld[1]); + case "massmail": + LinkEMail(TribePane.MList); + + case "editwarrior": + LinkEditWarrior(); + case "editdescription": + if(%fld[1]) + TWBText.editType = "warrior"; + LinkEditWarriorDesc(%fld[1],PlayerPane,"editWarriorDescription"); + case "editmember": + LinkEditMember(%fld[1],%fld[2],%fld[3],%fld[4],TribeAdminMemberDlg); + case "kickwarrior": + MessageBoxYesNo("CONFIRM", "Are you sure you wish to kick " @ %fld[1] @ " from Tribe " @ %fld[2] @ "?", + "LinkKickMember(" @ %fld[1] @ "," @ %fld[2] @ "," @ TribePane @ ");", ""); + case "makeprimarytribe": + %this.tribe = %fld[1]; + MessageBoxYesNo("CONFIRM", "Are you sure you wish to make Tribe " @ %this.tribe @ " your primary tribe?", + "LinkMakePrimary(\"setPrimaryTribe\",\"" @ %this.tribe @ "\"," @ PlayerPane @ ",);",""); + case "noprimarytribe": + %this.tribe = %fld[1]; + MessageBoxYesNo("CONFIRM", "Are you sure you wish to have no primary tribe?", + "LinkMakePrimary(\"setNoPrimaryTribe\",\"NONE\"," @ PlayerPane @ ",);",""); + case "leavetribe": + %this.tribe = %fld[1]; + MessageBoxYesNo("CONFIRM", "Are you sure you wish to leave Tribe " @ %this.tribe @ "?", + "LinkLeaveTribe(" @ %this.tribe @ ",\"playerPane \");",""); + + case "changerecruiting": + LinkTribeToggle("Recruiting", %fld[2] TAB %fld[1], %this, "togglerecruiting"); + case "changeappending": + LinkTribeToggle("Appending", %fld[2] TAB %fld[1], %this, "toggleappending"); + case "invite": + %this.tribe = %fld[2]; + %this.warrior = %fld[1]; + MessageBoxYesNo("CONFIRM", "Invite " @ %this.warrior @ " to join " @ %this.tribe @ "?", + "LinkInvitePlayer(\"" @ %this.tribe @ "\",\"" @ %this.warrior @ "\"," @ PlayerPane @ ",\"inviteWarrior\");",""); + + case "changetribename": + MessageBoxOK("INFORMATION","You are not allowed to change tribe names, you must instead disband your tribe and create another."); + + case "changetribetag": + LinkTribeTag(%this); + + case "addBuddy": + LinkAddBuddy(%fld[1],TWBText,"addBuddy"); + case "requestlink": + TribePane.key = LaunchGui.key++; + TribePane.state = "requestInvite"; + DatabaseQuery(34,TProfileHdr.tribename,TribePane,TribePane.key); + + case "gamelink": + commandToServer('ProcessGameLink', %fld[1], %fld[2], %fld[3], %fld[4], %fld[5]); + + //if there is an unknown URL type, treat it as a weblink.. + default: + LinkWeb( %fld[0] ); + } +} +//==-- TWBTEXT --------------------------------------------------------------- +function TWBText::onDatabaseQueryResult(%this,%status,%resultString,%key) +{ + if(%this.key != %key) + return; + echo("TWB RECV: " @ %status); + if(getField(%status,0)==0) + { + switch$(%this.state) + { + case "editWarriorDesc": + %this.state = "done"; + Canvas.popDialog(BrowserEditInfoDlg); + messageBoxOK("COMPLETE","Warrior Description Changed","W_profile.setValue(1);"); + WarriorPropertiesDlg.pendingChanges=""; + case "addBuddy": + %this.state = "done"; + MessageBoxOK("COMPLETE",getField(%resultString,2) @ " was added to your buddylist"); + } + } + else if (getSubStr(getField(%status,1),0,9) $= "ORA-04061") + { + %this.state = "error"; + MessageBoxOK("ERROR","There was an error processing your request, please wait a few moments and try again."); + } + else + { + messageBoxOK("WARNING",getField(%status,1)); + } + canvas.setCursor(defaultCursor); +} +//----------------------------------------------------------------------------- +function TWBText::onDatabaseRow(%this,%row,%isLastRow, %key) +{ + if(!%this.key == %key) + return; + echo("RECV: " @ %row); +} +//----------------------------------------------------------------------------- +function TWBText::connectionTerminated( %this, %key ) +{ + TWBTabView.refresh(); +} +//==-- TribeAttribDlg -------------------------------------------------------- +function TribeAttribDlg::onWake(%this) +{ + TribeAttribDlg.tribeName = %tribeName; + $CurrentTribeTag = %TribeTag; + $NewTagAppend = %appending; + $NewTribeTag = ""; + $NewTagPreview = ""; + Canvas.RePaint(); + updateNewTagPreview(); +} +//----------------------------------------------------------------------------- +//==-- TribePane -------------------------------------------------------------- +//----------------------------------------------------------------------------- +function TribePane::onAdd(%this) +{ + // Add the popup menu: + new GuiControl(TribeMemberPopupDlg) { + profile = "GuiModelessDialogProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + + new ShellPopupMenu( TribeMemberPopup ) { + profile = "ShellPopupProfile"; + position = "0 0"; + extent = "0 0"; + minExtent = "0 0"; + visible = "1"; + maxPopupHeight = "200"; + noButtonStyle = "1"; + }; + }; +} +//----------------------------------------------------------------------------- +function TribePane::onWake(%this) +{ + if(trim(TProfileHdr.tribegfx) !$= "") + TeamPix.setBitmap(TProfileHdr.tribegfx); + else + TeamPix.setBitmap($TribeGfx); + + if(memberList.rowCount() <= 0) + { + %this.needRefresh = 1; + tl_profile.setValue(1); + } +} +//----------------------------------------------------------------------------- +function TribePane::onDatabaseQueryResult(%this, %status, %resultString , %key) +{ + if ( %this.key != %key ) + return; + echo("RECV: " @ %status); + if(getField(%status,0)==0) + { + switch$(%this.state) + { + case "killTribe": + %this.state = "done"; + WonUpdateCertificate(); + TWBTabView.closeCurrentPane(); + case "editTribeDesc": + %this.state = "done"; + TP_TribeDescription.setText(EditDescriptionText.getValue()); + TProfileHdr.desc = TP_TribeDescription; + Canvas.popDialog(BrowserEditInfoDlg); + TribePropertiesDlg.pendingChanges = ""; + case "kickPlayer": + %this.state = "done"; + messageBoxOK("COMPLETE",getField(%status,1)); + WonUpdateCertificate(); + case "toggleTribeRecruiting": + %this.state = "done"; + case "toggleTribeAppending": + %this.state = "done"; + WonUpdateCertificate(); + %ntag = TP_NewTag.getValue(); + %playerName = GetField(GetRecord(WonGetAuthInfo(),0),0); + if ( TP_PrePendFlagBtn.getValue()==0 ) + TP_PreviewTag.setValue( %playerName @ %ntag); + else + TP_PreviewTag.setValue(%ntag @ %playerName); + + TProfileHdr.appending = TP_AppendFlagBtn.getValue; + + case "getTribeProfile": + %this.state = "done"; + GetProfileHdr(0,getFields(%status,2)); + TWBText.Clear(); + %Tdesc = "Recruiting: " @ + (TProfileHdr.recruiting ? "YES Request Invite" : "NO"); + %Tdesc = %Tdesc @ "" NL ""; + TWBText.setText(%TDesc); + TProfileHdr.Desc = %resultString; + if(trim(TProfileHdr.tribegfx) !$= "") + TeamPix.setBitmap(TProfileHdr.tribegfx); + else + TeamPix.setBitmap($TribeGfx); + TWBTitle.name = TPRofileHdr.tribeName; + TWBTitle.setValue(TProfileHdr.tribeName TAB TProfileHdr.tribeTag); + TWBText.SetText(TWBText.getText() NL TProfileHdr.Desc); + if(memberlist.rowCount()==0) + { + %this.needRefresh = 0; + TL_ROSTER.setValue(1); + } + + case "getTribeRoster": + %this.linecount--; + %this.MList = ""; + if(getField(%resultString,0)>0) + %this.state = "tribeRoster"; + else + { + %this.state="done"; + messageBoxOK("NOTICE","No Tribe Members Found."); + } + + case "getTribeNews": + TWBText.Clear(); + %this.articleLines = 0; + TWBText.SetText("" @ TProfileHdr.tribeName @ " News:\n" @ + "\n"); + + if(getField(%resultString,0)>0) + { + %this.state = "tribeNews"; + } + else + { + %this.state="done"; + messageBoxOK("NOTICE","No Tribe News."); + } + + case "getTribeInvites": + if(getField(%resultString,0) > 0) + { + %this.state = "tribeInvites"; + } + else + { + %this.NeedRefresh = 0; + %this.state = "done"; + } + case "cancelInvite": + %this.state = "done"; + tl_invites.setValue(1); + case "setTribeGfx": + %this.state = "done"; + messageBoxOK("NOTICE",getField(%status,1)); + tl_profile.setValue(1); + case "changeTribeTag": + %this.state = "done"; + messageBoxOK("NOTICE","Tribe Tag has been updated.","WonUpdateCertificate();"); + case "requestInvite": + %this.state = "done"; + messageBoxOK("NOTICE",getField(%status,1)); + } + } + else if (getSubStr(getField(%status,1),0,9) $= "ORA-04061") + { + %this.state = "error"; + MessageBoxOK("ERROR","There was an error processing your request, please wait a few moments and try again."); + } + else + { + %this.state = "done"; + messageBoxOK("WARNING",getField(%status,1)); + } + canvas.setCursor(DefaultCursor); +} +//----------------------------------------------------------------------------- +function TribePane::onDatabaseRow(%this, %row, %isLastRow, %key) +{ + if ( %this.key != %key ) + return; + echo("RECV: " @ %row); + switch$(%this.state) + { + case "tribeRoster": + %name = getField(%row, 0); + %wid = getField(%row,3); + %linkName = getLinkName(%row, 0); + %adminLevel = getField(%row, 5); + %title = getField(%row, 4); + %date = getField(%row, 6); + %editkick = getField(%row, 8); + %onLine = getField(%row,9); + if(%this.Admin $= "007") + %this.Admin = %name; + + if(%name !$="") + { + MemberList.AddMember(%wid,%name,%adminLevel,%editkick,%row); + MemberList.AddRow(%wid,%name TAB %title TAB %adminLevel); + MemberList.setRowStylebyID( %wid, !%onLine ); + } + + if(%this.linecount <= 0) + %this.MList = %this.MList @ %name; + else if (%this.MList $= "") + if(%name !$="") + %this.MList = %name @ ","; + else + %this.Mlist = ""; + else + if(%name !$= "") + %this.MList = %this.MList @ %name @ ","; + %this.linecount++; + + case "tribeNews": + %this.articleID = getField(%row,0); + %this.forumName = getField(%row,1); + %authorQuad = getFields(%row,5,8); + %this.articleAuthor = getLinkName(%authorQuad); + %this.articleUpdate = getField(%row,9); + %this.articleTitle = getField(%row,10); + %text = "" @ "" + @ %this.articleTitle @ ""NL " submitted by " @ %this.articleAuthor SPC "on" SPC %this.articleUpdate @ "\n"; + %text = %text @ getFields(%row,11); + TWBText.SetText(TWBText.GetText() @ %text @ "\n------------------------------------\n\n"); + + case "tribeInvites": + %inviteId = getField(%row,0); + %inviteDate = getField(%row,1); + %invitorQuad = getField(getfields(%row,2,5),0); + %invitedQuad = getField(getFields(%row,6,9),0); + %isOwned = getField(%row,10); + %onLine = getField(%row,11); + MemberList.AddInvite(%inviteID,%invitedQuad,%invitorQuad,%isOwned,%row); + MemberList.AddRow(%inviteID, getField(%invitedQuad,0) TAB %inviteDate); + MemberList.setRowStylebyID( %inviteId, !%onLine ); + } + if(%isLastRow && %this.needRefresh) + { + %this.needRefresh = 0; + TL_ROSTER.setValue(1); + } +} +//----------------------------------------------------------------------------- +function TribePane::connectionTerminated(%this,%key) +{ + canvas.setCursor(DefaultCursor); + if (%this.NeedRefresh==1) + { + %this.NeedRefresh = 0; + TWBTitle.OldText = TWBTitle.name; + TL_Roster.setValue(1); + } +} +//----------------------------------------------------------------------------- +function TribePane::RosterDblClick(%this) +{ + LaunchBrowser( GetField(MemberList.getRowText(MemberList.getSelectedRow()),0), "Warrior" ); +} +//----------------------------------------------------------------------------- +function TribePane::ButtonClick( %this, %senderid ) +{ + canvas.SetCursor(ArrowWaitCursor); + %this.tabstate = "TRIBE"; + %this.state = "status"; + %tribeName = TWBTabView.getSelectedText(); + + if(isEventPending(TribeAndWarriorBrowserGui.eid)) + cancel(TribeAndWarriorBrowserGui.eid); + + switch(%senderid) + { + case 0: //PROFILE + if(TWBTitle.OldText $= TWBTitle.name || MemberList.rowCount()==0) + %this.NeedRefresh=0; + else + %this.NeedRefresh=1; + + %this.key = LaunchGui.key++; + %this.state = "getTribeProfile"; + TWBTitle.OldText = TWBTitle.name; + TribeAndWarriorBrowserGui.eid = schedule(500,0,DatabaseQuery,22,%tribeName,%this,%this.key); + case 1: //ROSTER + MemberList.Clear(); + MemberList.ClearColumns(); + MemberList.clearList(); + MemberList.CID = 0; + %this.key = LaunchGui.key++; + %this.state = "getTribeRoster"; + %this.tstate = "ROSTER"; + MemberList.addColumn( 0, "MEMBER", 92, 0, 100,"left"); + MemberList.addColumn( 1, "TITLE", 90, 0, 100,"left"); + MemberList.addColumn( 2, "RNK", 30, 0, 40, "numeric center" ); + TribeAndWarriorBrowserGui.eid = schedule(500, 0, DatabaseQueryArray,6,0,%tribeName,%this,%this.key); + case 2: //NEWS BUTTON + %this.key = LaunchGui.key++; + %this.state = "getTribeNews"; + %this.tstate = "NEWS"; + TribeAndWarriorBrowserGui.eid = schedule(500, 0, DatabaseQueryArray,10,20,%tribeName,%this,%this.key); + case 3: //INVITE BUTTON + MemberList.Clear(); + MemberList.ClearColumns(); + MemberList.clearList(); + MemberList.CID = 1; + %this.key = LaunchGui.key++; + %this.state = "getTribeInvites"; + %this.tstate = "INVITES"; + MemberList.addColumn( 0, "PLAYER", 100, 0, 350,"left" ); + MemberList.addColumn( 1, "INVITED", 112, 0, 300, "left" ); + TribeAndWarriorBrowserGui.eid = schedule(500, 0, DatabaseQueryArray,11,0,%tribeName,%this,%this.key); + case 4: //Admin Tribe + if(trim(TWBText.getText()) !$= "") + { + TribePropertiesDlg.pendingChanges = ""; + Canvas.PushDialog(TribePropertiesDlg); + } + else + { + tl_profile.setvalue(1); + MessageBoxOk("ERROR","The Tribe Profile was not properly loaded, please wait a moment and try again"); + } + } +} +//----------------------------------------------------------------------------- +//==-- PlayerPane ------------------------------------------------------------ +//----------------------------------------------------------------------------- +function PlayerPane::onAdd(%this) +{ + // Add the popup menu: + new GuiControl(WarriorPopupDlg) { + profile = "GuiModelessDialogProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + + new ShellPopupMenu( WarriorPopup ) { + profile = "ShellPopupProfile"; + position = "0 0"; + extent = "0 0"; + minExtent = "0 0"; + visible = "1"; + maxPopupHeight = "200"; + noButtonStyle = "1"; + }; + }; +} +//----------------------------------------------------------------------------- +function PlayerPane::onWake(%this) +{ + w_admin.setVisible(getField(getRecord(wonGetAuthInfo(),0),0) $= TProfileHdr.PlayerName); + if(trim(TProfileHdr.playerGfx)$="") + PlayerPix.setBitmap($PlayerGfx); + else + PlayerPix.setBitmap(TProfileHdr.playergfx); + + w_profile.setValue(1); + +} +//----------------------------------------------------------------------------- +function PlayerPane::onDatabaseQueryResult(%this,%status,%resultString,%key) +{ + if(%this.key != %key) + return; + echo("RECV: " @ %status); + if(getField(%status,0)==0) + { + switch$(%this.state) + { + case "getWarriorProfile": + %isCaller = getField(getRecord(wonGetAuthInfo(),0),0) $= TWBTitle.name; + TWBTitle.name = getField(%status,2); + TWBTitle.SetValue(( getField(%status,4) ? getField(%status,2) @ getField(%status,3) : getField(%status,3) @ getField(%status,2))); + GetProfileHdr(1,getFields(%status,2)); + if(trim(TProfileHdr.playerGfx) !$= "") + PlayerPix.setBitmap(TProfileHdr.playerGfx); + else + PlayerPix.setBitmap($PlayerGfx); +// if(%isCaller) +// { +// %newText = "OPTIONS:\n\n"; +// %newText = %newText @ "Edit Warrior Name\n"; +// %newText = %newText @ "Edit Description\n"; +// } + %profileText = "" @ %newText @ "\nPLAYER PROFILE:\n\n"; + %profileText = %profileText @ "Registered:" SPC "" @ TProfileHdr.registered @ "\n"; + %profileText = %profileText @ "Online:" SPC (TProfileHdr.onLine ? "YES":"NO") @ "\n"; + + if(trim(TProfileHdr.playerURL) !$= "") + %profileText = %profileText @ "WebSite:" SPC ""@TProfileHdr.playerURL@"\n"; + else + %profileText = %profileText @ "WebSite:" SPC "TRIBES 2 BABY!\n"; + +// W_Text.setText(W_Text.getText() @ "Preferred Armor:" SPC "SCOUT\n"); +// W_Text.setText(W_Text.getText() @ "Preferred Weapon:" SPC "SNIPER RIFLE\n"); +// W_Text.setText(W_Text.getText() @ "Preferred Game:" SPC "CTF\n"); +// W_Text.setText(W_Text.getText() @ "Preferred Role:" SPC "DEFENSE\n"); + %profileText = %profileText @ ""; + W_Text.setText(%profileText @ %resultString); + TProfileHdr.Desc = %resultString; + if( w_memberlist.rowCount() ==0 ) + { + %this.needRefresh = 0; + W_tribes.setValue(1); + } + case "getWarriorHistory": + W_Text.setText("\nPLAYER HISTORY:\n\n"); + W_Text.setText(W_Text.getText() @ ""); + if(getField(%resultString,0)>0) + %this.state = "warriorHistory"; + else + %this.state = "done"; + case "getWarriorTribeList": + if(getField(%resultString,0)>0) + %this.state = "warriorTribeList"; + else + %this.state = "done"; + case "getWarriorBuddyList": + if(getField(%resultString,0)>0) + %this.state = "warriorBuddyList"; + else + %this.state = "done"; + case "setNoPrimaryTribe": + %this.state = "done"; + messageBoxOK("NOTICE","You are now a free agent, primary tribe settings have been cleared"); + case "setPrimaryTribe": + %this.state = "done"; + messageBoxOK("NOTICE",getField(%resultString,0) SPC "has been flagged as your primary tribe.","WonUpdateCertificate();"); + case "removeBuddy": + %this.state = "done"; + w_buddylist.setvalue(1); + case "inviteWarrior": + %this.state = "done"; + MessageBoxOK("NOTICE",getField(%status,1)); + case "acceptInvite": + %this.state = "done"; + EMailMessageDelete(); + MessageBoxOK("NOTICE","Your Invite Acceptance has been sent","WonUpdateCertificate();"); + case "rejectInvite": + %this.state = "done"; + EMailMessagedelete(); + MessageBoxOK("NOTICE","Your Invite Rejection has been sent","CheckEmail();"); + case "leaveTribe": + %this.state = "done"; + WonUpdateCertificate(); + for(%x=0;%xContact " @ TWBTitle.name @ "\n"; + %newText = %newText @ "Add to Buddylist\n"; + if(%callerTribes > 0) + { + for(%z=0;%z<%callerTribes;%z++) + { + %jtribe = getField(%callerTribeList,4*%z); + %newText = %newText @ "Invite " @ TWBTitle.name @ " to join " @ %jtribe @ "\n"; + } + } + else + { + if(getField(getRecord(wonGetAuthInfo(),1),0)>0) + { + for(%z=0;%zInvite " @ TWBTitle.name @ " to join " @ %jtribe @ "\n"; + } + } + } + } + else + { + %newText = "OPTIONS:\n\n"; + %newText = %newText @ "Edit Warrior Name\n"; + %newText = %newText @ "Edit Description\n"; + } + W_Text.setText("" @ %newText @ "\n"); + case "setPlayerGfx": + %this.state = "done"; + MessageBoxOK("CONFIRMED",getField(%status,1)); + case "setPlayerUrl": + %this.state = "done"; + MessageBoxOK("CONFIRMED",getField(%status,1)); + case "changePlayerName": + %this.state = "done"; + echo("wus:"@WonUpdateCertificate()); + TProfileHdr.playername = NewNameEdit.getValue(); + wp_currentname.setText(NewNameEdit.getValue()); + twbTabView.setTabText(twbTabView.getSelectedId(),NewNameEdit.getValue()); + w_profile.setValue(1); + MessageBoxOK("CONFIRMED","Warrior name has been changed." NL "This will require you to close and restart the game to ensure proper function","WarriorPropertiesDlg.onWake();"); + } + } + else if (getSubStr(getField(%status,1),0,9) $= "ORA-04061") + { + %this.state = "error"; + MessageBoxOK("ERROR","There was an error processing your request, please wait a few moments and try again."); + } + else + { + %this.state = "error"; + MessageBoxOK("WARNING",getField(%status,1)); + } + canvas.setCursor(DefaultCursor); +} +//----------------------------------------------------------------------------- +function PlayerPane::onDatabaseRow(%this,%row,%isLastRow,%key) +{ + if(%this.key != %key) + return; + echo("RECV: " @ %row); + switch$(%this.state) + { + case "warriorHistory": + W_Text.setText(W_Text.getText() @ %row @ "\n"); + if(%isLastRow) + { + %this.state = "done"; + if( %this.needRefresh ) + { + %this.needRefresh = 0; + W_tribes.setValue(1); + } + } + case "warriorTribeList": + %wid = getField(%row,2); + %name = getField(%row,0); + %title = getField(%row,5); + %adminLevel = getField(%row,3); + %editkick = getField(%row,4); + W_MemberList.AddMember(%wid,%name,%adminLevel,%editkick,%row); + W_MemberList.AddRow(%wid,%name TAB %title TAB %adminLevel); + + case "warriorBuddyList": + W_MemberList.AddInvite(getField(%row,3),getFields(%row,0,3),getFields(%row,0,3),4,%row); + W_MemberList.AddRow(getField(%row,3),getField(%row,0) TAB getField(%row,4)); + W_MemberList.setRowStyleByID(getField(%row,3),!getField(%row,5)); + } +} +//----------------------------------------------------------------------------- +function PlayerPane::DblClick(%this) +{ + + if(w_buddylist.getValue()==1 && getField(GetRecord(wonGetAuthInfo(),0),0) $= TWBTabView.getTabText(TWBTabView.GetSelectedID())) + %caller = "Warrior"; + else if (w_tribes.getValue()==1) + %caller = "Tribe"; + else + %caller = ""; + if(trim(%caller) !$="") + LaunchBrowser( GetField(W_MemberList.getRowText(W_MemberList.getSelectedRow()),0), %caller); +} +//----------------------------------------------------------------------------- +function PlayerPane::ButtonClick( %this, %senderid ) +{ + canvas.SetCursor(ArrowWaitCursor); + %this.key = LaunchGui.key++; + %this.tabstate = "WARRIOR"; + if(isEventPending(TribeAndWarriorBrowserGui.eid)) + cancel(TribeAndWarriorBrowserGui.eid); + switch(%senderid) + { + case 0: //Player Profile w/ Description + W_Text.setValue(""); + %this.state = "getWarriorProfile"; + %this.qrystatus = 0; + %owner = getField(getRecord(WonGetAuthInfo(),0),0); + %playerName = TWBTabView.getTabText(TWBTabView.GetSelectedID()); + if(TWBTitle.OldText $= TWBTitle.name || w_memberlist.rowCount()==0) + %this.NeedRefresh=0; + else + %this.NeedRefresh=1; + + TWBTitle.OldText = TWBTitle.name; + if (%owner $= %PlayerName) + %callId = 2; + else + %callId = 1; + + TribeAndWarriorBrowserGui.eid = schedule(500,0,DatabaseQuery,23,%playerName,%this,%this.key); + case 1: //Player History + W_Text.setValue(""); + %this.state = "getWarriorHistory"; + %this.qrystatus = 1; + %playerName = TWBTabView.getTabText(TWBTabView.GetSelectedID()); + %callId = 3; + + TribeAndWarriorBrowserGui.eid = schedule(500,0,DatabaseQueryArray,12,0,%playerName,%this,%this.key); + case 2: //TribeList + W_MemberList.Clear(); + W_MemberList.ClearColumns(); + W_MemberList.clearList(); + W_MemberList.CID = 0; + %this.state = "getWarriorTribeList"; + W_MemberList.addColumn( 0, "TRIBE", 94, 0, 330 ); + W_MemberList.addColumn( 1, "TITLE", 80, 0, 300 ); + W_MemberList.addColumn( 2, "RNK", 38, 0, 50, "numeric center" ); + %playerName = TWBTabView.getTabText(TWBTabView.GetSelectedID()); + TribeAndWarriorBrowserGui.eid = schedule(500,0,DatabaseQueryArray,13,0,%playerName,%this,%this.key); + case 3: //Player Buddylist + W_MemberList.Clear(); + W_MemberList.ClearColumns(); + W_MemberList.clearList(); + W_MemberList.CID = 1; + W_MemberList.addColumn( 0, "BUDDY", 100, 0, 250 ); + W_MemberList.addColumn( 1, "SINCE", 112, 0, 250 ); + %this.key = LaunchGui.key++; + %this.state = "getWarriorBuddyList"; + %playerName = TWBTabView.getTabText(TWBTabView.GetSelectedID()); + TribeAndWarriorBrowserGui.eid = schedule(500,0,DatabaseQueryArray,5,0,%playerName,%this,%this.key); + case 4: //Visitor Options + W_Text.setValue(""); + %this.state = "getVisitorOptions"; + %owner = getField(getRecord(WonGetAuthInfo(),0),0); + %playerName = TWBTabView.getTabText(TWBTabView.GetSelectedID()); + TWBTitle.OldText = TWBTitle.name; + TribeAndWarriorBrowserGui.eid = schedule(500,0,DatabaseQuery,23,%playerName,%this,%this.key); + case 5: //Admin Options + if(trim(w_text.getText()) !$= "") + { + WarriorPropertiesDlg.pendingChanges = ""; + Canvas.PushDialog(WarriorPropertiesDlg); + } + else + { + w_profile.setValue(1); + messageBoxOK("ERROR","Your Profile was not loaded properly, Please wait a moment and try again"); + } + + } +} +//----------------------------------------------------------------------------- +function W_MemberList::ClearList() +{ + if(isObject(W_MemberListGroup)) + W_MemberListGroup.Delete(); +} +//----------------------------------------------------------------------------- +function W_MemberList::AddMember(%this,%id, %name, %access, %plevel, %vline) +{ + if(!isObject(W_MemberListGroup)) + new SimGroup(W_MemberListGroup); + %player = new scriptObject() + { + className = "TMember"; + name = %name; + classId = %id; + privLevel = %access; + canAdmin = %plevel; + rcvrec = %vline; + }; + W_MemberListGroup.Add(%player); +} +//----------------------------------------------------------------------------- +function W_MemberList::AddInvite(%this, %id, %invited, %invitor, %plevel, %vline) +{ + if(!isObject(W_MemberListGroup)) + new SimGroup(W_MemberListGroup); + %player = new ScriptObject() + { + className = "TBuddy"; + classId = %id; + name = %invited; + privLevel = %plevel; + iName = %invitor; + rcvrec = %vline; + }; + W_MemberListGroup.add(%player); +} +//----------------------------------------------------------------------------- +function W_MemberList::onRightMouseDown( %this, %column, %row, %mousePos ) +{ + // Open the action menu: + W_MemberList.setSelectedRow(%row); + if(getField(GetRecord(WonGetAuthInfo(),0),0) $= TWBTabView.getTabText(TWBTabView.GetSelectedID())) //is it me? + { + warriorPopup.player = w_memberlistgroup.getObject(%row); + if ( WarriorPopup.player.name !$= "" ) + { + WarriorPopup.position = %mousePos; + Canvas.pushDialog(WarriorPopupDlg); + WarriorPopUpDlg.onWake(); + WarriorPopup.forceOnAction(); + } + else + error( "Member/Invite Locate Error!" ); + } +} +function w_MemberList::onAdd(%this) +{ + W_MemberList.addStyle( 1, "Univers Condensed", 12 , "150 150 150", "100 100 000", "000 000 100" ); +} +//==-------------------------------------------------------------------------- +function WarriorPopupDlg::onWake( %this ) +{ + TribeAndWarriorBrowserGui.WDialogOpen = true; + warriorPopUP.clear(); + switch(W_MemberList.CID) + { + case 0: if(getField(GetRecord(WonGetAuthInfo(),0),0) $= TWBTabView.getTabText(TWBTabView.GetSelectedID())) + { // visitor is owner +// WarriorPopup.add( "Clear Primary Tribe setting", 0); + WarriorPopUp.add( "Make " SPC WarriorPopup.player.name SPC "my primary tribe", 1 ); + WarriorPopup.add( "Leave" SPC WarriorPopup.player.name, 2 ); + WarriorPopup.add( "Go To" SPC WarriorPopup.player.name SPC "forum", 3 ); + } + + case 1: if(getField(GetRecord(WonGetAuthInfo(),0),0) $= TWBTabView.getTabText(TWBTabView.GetSelectedID())) + { // visitor is owner + WarriorPopup.add( "EMail " @ getField(WarriorPopup.player.name,0), 4 ); + WarriorPopup.add( "Remove" SPC getField(WarriorPopup.player.name,0) SPC " from Buddylist", 5 ); + WarriorPopup.add( "Clear BuddyList", 6 ); + WarriorPopup.add( "EMail BuddyList", 7 ); + } + + case 2: WarriorPopup.Add("HMMM...",8); + case 3: WarriorPopup.Add("HMMM...",8); + default: WarriorPopup.Add("HMMM...",8); + } + Canvas.rePaint(); +} +//----------------------------------------------------------------------------- +function WarriorPopup::onSelect( %this, %id, %text ) +{ + switch( %id ) + { + case 0: // 0 Make No Primary Tribe + %player = "NONE"; + LinkMakePrimary("setNoPrimaryTribe",%player,PlayerPane); + case 1: // 1 Make Primary Tribe + %player = getField(WarriorPopup.player.name,0); + LinkMakePrimary("setPrimaryTribe",%player,PlayerPane); + case 2: // 2 Leave Tribe + %tribe = getField(WarriorPopup.player.name,0); + MessageBoxYesNo("CONFIRM", "Are you sure you wish to leave \n" @ %player @ "" @ %tribe @ "?", + "LinkLeaveTribe(\"" @ %tribe @ "\",\"" @ PlayerPane @ "\");",""); + case 3: // 3 Go To TribeForum + %tribe = getField(WarriorPopup.player.name,0); + switch$(%tribe) + { + case "T2 ADMINISTRATION": + %tribe = "Game Feedback"; + case "T2 PRESSCORPS": + %tribe = "PRESSCORPS-Submissions"; + } + ForumsThreadPane.setVisible(false); + ForumsTopicsPane.setVisible(true); + linkForum(%tribe,""); + case 4: // 4 EMail Buddy + %player = getField(WarriorPopup.player.name,0); + LinkEMail(%player); + case 5: // 5 Remove Buddy + %player = getField(WarriorPopup.player.name,0); + LinkRemoveBuddy(%player, PlayerPane, "removeBuddy"); + case 6: // clear Buddylist; + LinkClearBuddylist(PlayerPane,"removeBuddy"); + case 7: // 7 EMail Buddylist + for(%x=0;%x\n" @ %player @ " from " @ %tribe @ "?", + "LinkKickMember(\"" @ %player @ "\",\"" @ %tribe @ "\"," @ %this @ ");", ""); + case 1: // 1 Admin Member + LinkEditMember(GetField(TribememberPopup.player.rcvrec,0) + ,TWBTabView.GetTabText(TWBTabView.GetSelectedID()) + ,GetField(TribeMemberPopup.player.rcvrec,5) + ,GetField(TribeMemberPopup.player.rcvrec,4) + ,TribeAdminMemberDlg); + case 2: // 2 EMail Member + LinkEMail(TribeMemberPopup.player.name); + case 3: // 3 EMail Tribe + LinkEMail(TribePane.MList); + case 4: // 4 Add To Buddylist + MessageBoxYesNo("CONFIRM","Add " @ TribeMemberPopup.player.name @ " to Buddy List?", + "LinkAddBuddy(\"" @ TribeMemberPopup.player.name @ "\",TWBText,\"addBuddy\");",""); + case 5: // 5 Add To Blocklist + MessageBoxYesNo("CONFIRM","Block Email from " @ TribeMemberPopup.player.name @ "?", + "LinkBlockPlayer(\"" @ TribeMemberPopup.player.name @ "\",EmailGui,\"setBlock\");",""); + // -- 1-INVITE ---- + case 6: // 6 Cancel Invite + %player = TribeMemberPopup.player.name; + %tribe = TWBTabView.GetTabText(TWBTabView.GetSelectedID()); + MessageBoxYesNo("CONFIRM", "Are you sure you wish to cancel the invitation for " @ %player @ " to join " @ %tribe @ "?", + "TribeMemberPopup.onSelect(12,\"call12\");",""); + case 7: // 7 EMail Invited Player + LinkEMail(TribeMemberPopup.player.name); + case 8: + case 9: + case 10: + case 11: + case 12: %player = TribeMemberPopup.player.name; + %tribe = TWBTabView.GetTabText(TWBTabView.GetSelectedID()); + LinkInvitation("cancel",%tribe,%player,TribePane); + } + canvas.popDialog(TribeMemberPopupDlg); +} +//----------------------------------------------------------------------------- +function TribeMemberPopupDlg::onSleep(%this) +{ + TribeWarriorBrowserGui.TDialogOpen = false; +} +//----------------------------------------------------------------------------- +function TribePropertiesDlg::onWake(%this) +{ + if(TProfileHdr.recruiting) + TP_RecruitFlagBtn.setValue(1); + else + TP_RecruitFlagNoBtn.setValue(1); + + if(TProfileHdr.appending) + TP_AppendFlagBtn.setValue(1); + else + TP_PrePendFlagBtn.setValue(1); + + TP_CurrentTag.setText(TProfileHdr.TribeTag); + TP_NewTag.setText(TProfileHdr.TribeTag); + TP_TribeDescription.setText(TProfileHdr.Desc); + + %this.RefreshTag(); + %this.pendingChanges = ""; +} +//----------------------------------------------------------------------------- +function TribePropertiesDlg::Close(%this) +{ + if(%this.pendingChanges $="") + { + Canvas.popDialog(%this); + GraphicsControl.setVisible(0); + SecurityControl.setVisible(0); + ProfileControl.setVisible(1); + TL_Profile.setValue(1); + } + else + MessageBoxYesNo("CONFIRM","Close without saving changes?", + "Canvas.popDialog("@%this@");TL_Profile.setValue(1);",""); +} +//----------------------------------------------------------------------------- +function TribePropertiesDlg::DisbandTribe(%this) +{ + MessageBoxYesNo("CONFIRM","NOTE: Only the Tribe Owner will be able to disband the Tribe." NL " " NL + "DISBAND " @ TProfileHdr.tribename @ "?", + "KillTribe(\"" @ TProfileHdr.tribename @ "\");",""); +} +//----------------------------------------------------------------------------- +function TribePropertiesDlg::ChangeRecruiting(%this) +{ + if(TP_RecruitFlagBtn.getValue()) + %recruiting = 1; + else + %recruiting = 0; + if(TProfileHdr.recruiting != %recruiting) + { + LinkTribeToggle("Recruiting",TProfileHdr.TribeName TAB TP_RecruitFlagBtn.getValue(),TWBText,"togglerecruiting"); + %this.pendingChanges=""; + } +} +//----------------------------------------------------------------------------- +function TribePropertiesDlg::ToggleAppending(%this) +{ + if(TProfileHdr.appending != TP_AppendFlagBtn.getValue()) + { + LinkTribeToggle("Appending",TProfileHdr.TribeName TAB TP_AppendFlagBtn.getValue(),TWBText,"toggleappending"); + %this.pendingChanges=""; + } +} +//----------------------------------------------------------------------------- +function TribePropertiesDlg::ChangeTag(%this) +{ + if(TP_NewTag.getValue() !$= "") + { + TextCheck(TP_NewTag.getValue(),%this); + if(%this.textCheck==1) + { + MessageBoxOK("WARNING","The requested Tribe Tag contains invalid characters, please change your tag and try again."); + } + else + { + TribePane.key = LaunchGui.key++; + TribePane.state = "changeTribeTag"; + DatabaseQuery(30,TProfileHdr.tribeID TAB TP_NewTag.getValue(),TribePane,TribePane.key); + %this.pendingChanges=""; + } + } + else + { + MessageBoxOK("WARNING","Tribe Tag cannot be blank","TP_NewTag.makeFirstResponder(1);"); + } +} +//----------------------------------------------------------------------------- +function TribePropertiesDlg::EditDescription(%this) +{ + %this.pendingChanges = "EDITDESC"; + %this.UpdateDescription(); +} +//----------------------------------------------------------------------------- +function TribePropertiesDlg::ClearDescription(%this) +{ + TribePane.key = LaunchGui.key++; + TP_TribeDescription.setText(""); + TProfileHdr.Desc = ""; + TWBText.editType = "tribe"; + canvas.SetCursor(ArrowWaitCursor); + DatabaseQuery(15,TProfileHdr.tribename TAB getRecordCount(%desc) TAB %desc,TribePane,TribePane.key); +} +//----------------------------------------------------------------------------- +function TribePropertiesDlg::UpdateDescription(%this) +{ + TWBText.editType = "tribe"; + LinkEditWarriorDesc(TProfileHdr.tribename,TWBText); +} +//----------------------------------------------------------------------------- +function TribePropertiesDlg::RefreshTag(%this) +{ + %this.pendingChanges = "YES"; + %ntag = TP_NewTag.getValue(); + %playerName = GetField(GetRecord(WonGetAuthInfo(),0),0); + if ( TP_PrePendFlagBtn.getValue()==0 ) + TP_PreviewTag.setValue( %playerName @ %ntag); + else + TP_PreviewTag.setValue(%ntag @ %playerName); +} +//----------------------------------------------------------------------------- +function TribePropertiesDlg::LoadGfxPane(%this) +{ + TribeGraphic.setBitmap(TProfileHdr.tribeGfx); + %ctrl = TribeGraphicsList; + %fileSpec = "*.jpg"; + %ctrl.clearColumns(); + %ctrl.clear(); + %ctrl.addColumn( 0, "FILENAME", 100, 0, 200 ); + %id = -1; + %rowId = ""; + for ( %file = findFirstFile( %fileSpec ); %file !$= ""; %file = findNextFile( %fileSpec ) ) + { + %currBmp = TeamPix.Bitmap; + %match = "texticons/twb/" @ fileBase( %file ) @ ".jpg" $= %currBmp; + if(getSubStr(fileBase(%file) @ ".jpg",0,3)$= "twb") + %ctrl.addRow( %id++, fileBase( %file ) ); + + if(%match) + %rowId = %id; + } + if(%rowID!$="") + %ctrl.setSelectedRow(%rowID); +} +//----------------------------------------------------------------------------- +function TribePropertiesDlg::setTribeGraphic(%this) +{ + if(isEventPending(TribeAndWarriorBrowserGui.eid)) + cancel(TribeAndWarriorBrowserGui.eid); + TribePane.key = LaunchGui.key++; + TribePane.state = "setTribeGfx"; + TeamPix.setBitmap(TribeGraphic.bitmap); + canvas.SetCursor(ArrowWaitCursor); + TribeAndWarriorBrowserGui.eid = schedule(250,0,DatabaseQuery,29,TProfileHdr.tribename TAB TribeGraphic.bitmap,TribePane,TribePane.key); +} +//----------------------------------------------------------------------------- +function TribeGraphicsList::onSelect(%this) +{ + %jpg = "texticons/twb/" @ %this.getRowText(%this.getSelectedRow()) @ ".jpg"; + TribeGraphic.setBitmap(%jpg); +} +//----------------------------------------------------------------------------- +function TribePropertiesDlg::ConnectionTerminated(%this) +{ +} +//----------------------------------------------------------------------------- +function WarriorPropertiesDlg::onWake(%this) +{ + %this.pendingChanges = ""; + UrlEdit.setValue(TProfileHdr.playerURL); + WP_CurrentName.setValue(TProfileHdr.playername); + NewNameEdit.setValue(""); + %this.LoadGfxPane(); +} +//----------------------------------------------------------------------------- +function WarriorPropertiesDlg::Close(%this) +{ + if(%this.pendingChanges !$="") + MessageBoxYesNo("CONFIRM","Close without saving changes?", + "Canvas.popDialog("@%this@");W_Profile.setValue(1);",""); + else + { + Canvas.popDialog(%this); + W_Profile.setValue(1); + } +} +//----------------------------------------------------------------------------- +function WarriorPropertiesDlg::EditDescription(%this) +{ + %this.pendingChanges = "EDITDESC"; + TWBText.editType = "warrior"; + LinkEditWarriorDesc(getField(TWBTitle.getValue(),0),TWBText); +} +//----------------------------------------------------------------------------- +function WarriorPropertiesDlg::ClearDescription(%this) +{ + MessageBoxYesNo("CONFIRM","Clear your Players Description?","doClearDescription();",""); +} +//----------------------------------------------------------------------------- +function WarriorPropertiesDlg::doClearDescription(%this) +{ + PlayerPane.key = LaunchGui.key++; + TProfileHdr.Desc = "no description"; + TWBText.editType = "warrior"; + canvas.SetCursor(ArrowWaitCursor); + %this.pendingChanges = ""; + DatabaseQuery(17,TProfileHdr.Playername TAB getRecordCount(%desc) TAB %desc,PlayerPane,PlayerPane.key); +} +//----------------------------------------------------------------------------- +function WarriorPropertiesDlg::LoadGfxPane(%this) +{ + PlayerGraphic.setBitmap(PlayerPix.bitmap); + %ctrl = WarriorGraphicsList; + %fileSpec = "*.jpg"; + %ctrl.clearColumns(); + %ctrl.clear(); + %ctrl.addColumn( 0, "FILENAME", 100, 0, 140 ); + %id = -1; + %rowId = ""; + for ( %file = findFirstFile( %fileSpec ); %file !$= ""; %file = findNextFile( %fileSpec ) ) + { + %currBmp = PlayerPix.Bitmap; + %match = "texticons/twb/" @ fileBase( %file ) @ ".jpg" $= %currBmp; + + if(getSubStr(fileBase(%file) @ ".jpg",0,3)$= "twb") + %ctrl.addRow( %id++, fileBase( %file ) ); + + if(%match) + %rowId = %id; + } + if(%rowID!$="") + %ctrl.setSelectedRow(%rowID); +} +//----------------------------------------------------------------------------- +function WarriorPropertiesDlg::setPlayerGraphic(%this) +{ + if(isEventPending(TribeAndWarriorBrowserGui.eid)) + cancel(TribeAndWarriorBrowserGui.eid); + PlayerPane.key = LaunchGui.key++; + PlayerPane.state = "setPlayerGfx"; + PlayerPix.setBitmap(PlayerGraphic.bitmap); + canvas.SetCursor(ArrowWaitCursor); + %this.pendingChanges = ""; + TribeAndWarriorBrowserGui.eid = schedule(250,0,DatabaseQuery,31,PlayerGraphic.bitmap,PlayerPane,PlayerPane.key); +} +//----------------------------------------------------------------------------- +function WarriorPropertiesDlg::UpdateUrl(%this) +{ + if(trim(UrlEdit.getValue()) $= "") + { + UrlEdit.setValue("www.tribes2.com"); + MessageBoxYesNo("CONFIRM","Your URL is blank, by default www.tribes2.com will become your URL. Continue?","WarriorPropertiesDlg.setURL();","UrlEdit.setValue(\"\");"); + } + else + WarriorPropertiesDlg.setURL(); + +} +//----------------------------------------------------------------------------- +function WarriorPropertiesDlg::setURL(%this) +{ + if(isEventPending(TribeAndWarriorBrowserGui.eid)) + cancel(TribeAndWarriorBrowserGui.eid); + PlayerPane.key = LaunchGui.key++; + PlayerPane.state = "setPlayerUrl"; + canvas.SetCursor(ArrowWaitCursor); + %this.pendingChanges = ""; + DatabaseQuery(32,UrlEdit.getValue(),PlayerPane,PlayerPane.key); +} +//----------------------------------------------------------------------------- +function WarriorPropertiesDlg::ChangePlayerName(%this) +{ + MessageBoxYesNo("CONFIRM","Changing your name will require you to close the game and restart. Proceed?","WarriorPropertiesDlg.ProcessNameChange();","NewNameEdit.setValue(\"\");"); +} +//----------------------------------------------------------------------------- +function WarriorPropertiesDlg::ProcessNameChange(%this) +{ + PlayerPane.key = LaunchGui.key++; + PlayerPane.state = "changePlayerName"; + canvas.SetCursor(ArrowWaitCursor); + %this.pendingChanges = ""; + DatabaseQuery(33,NewNameEdit.getValue(),PlayerPane,PlayerPane.key); +} +//----------------------------------------------------------------------------- +function WarriorGraphicsList::onSelect(%this) +{ + %jpg = "texticons/twb/" @ %this.getRowText(%this.getSelectedRow()) @ ".jpg"; + PlayerGraphic.setBitmap(%jpg); +} +//----------------------------------------------------------------------------- +function WarriorPropertiesDlg::ConnectionTerminated(%this) +{ +} diff --git a/base/scripts/webemail.cs b/base/scripts/webemail.cs new file mode 100644 index 0000000..382b9f3 --- /dev/null +++ b/base/scripts/webemail.cs @@ -0,0 +1,1298 @@ +//------------------------------------------ +// Email code +//------------------------------------------ +// email format is: +// id +// From +// read flag +// send date +// To +// CC +// Subject +// message body +//echo("Added email: " @ %tag SPC %text); + +$EmailCachePath = "webcache/" @ getField(getRecord(wonGetAuthInfo(),0),3) @ "/"; +$EmailColumnCount = 0; +$EmailColumnName[0] = "Status"; +$EmailColumnRange[0] = "50 75"; +$EmailColumnCount++; +$EmailColumnName[1] = "From"; +$EmailColumnRange[1] = "50 300"; +$EmailColumnCount++; +$EmailColumnName[2] = "Subject"; +$EmailColumnRange[2] = "50 300"; +$EmailColumnCount++; +$EmailColumnName[3] = "Received"; +$EmailColumnRange[3] = "50 300"; +$EmailColumnCount++; +//----------------------------------------------------------------------------- +if(!isObject(EmailMessageVector)) +{ + new MessageVector(EmailMessageVector); + $EmailNextSeq = 0; +} +//----------------------------------------------------------------------------- +function LaunchEmail() +{ + LaunchTabView.viewTab( "EMAIL", EmailGui, 0 ); +} +//----------------------------------------------------------------------------- +function EmailMessageNew() +{ + $EmailToAddress = ""; + $EmailCCAddress = ""; + $EmailSubject = ""; + + EMailComposeDlg.state = "sendMail"; + Canvas.pushDialog(EmailComposeDlg); + EmailBodyText.setValue(""); + Email_ToEdit.makeFirstResponder(1); +} +//----------------------------------------------------------------------------- +function EmailMessageReply() +{ + EMailComposeDlg.state = "replyMail"; + %text = EmailMessageVector.getLineTextByTag( EM_Browser.getSelectedId() ); + $EmailToAddress = getField(getRecord(%text, 1), 0); + $EmailCCAddress = ""; + $EmailSubject = "RE: " @ getRecord(%text, 6); + %date = getRecord(%text, 3); + Canvas.pushDialog(EmailComposeDlg); + EmailBodyText.setValue("\n\n----------------------------------\n On " @ %date SPC $EmailToAddress @ " wrote:\n\n" @ EmailGetBody(%text) ); + EmailBodyText.SetCursorPosition(0); + EmailBodyText.makeFirstResponder(1); +} +//----------------------------------------------------------------------------- +function EmailMessageForward() +{ + %text = EmailMessageVector.getLineTextByTag( EM_Browser.getSelectedId() ); + $EmailToAddress = ""; + $EmailCCAddress = ""; + $EmailSubject = "FW: " @ getRecord(%text, 6); + Canvas.pushDialog(EmailComposeDlg); + EmailBodyText.setValue("\n\n\n--- Begin Forwarded Message ---\n\n" @ EmailGetTextDisplay(%text)); + Email_toEdit.makeFirstResponder(1); + EmailBodyText.SetCursorPosition(0); + EMailComposeDlg.state = "forwardMail"; +} +//----------------------------------------------------------------------------- +function EmailMessageReplyAll() +{ + EMailComposeDlg.state = "replyAll"; + %text = EmailMessageVector.getLineTextByTag( EM_Browser.getSelectedId() ); + $EmailToAddress = getField(getRecord(%text, 1), 0); + $EmailCCAddress = getRecord(%text, 4) @ getRecord(%text,5); + $EmailSubject = "RE: " @ getRecord(%text, 6); + %date = getRecord(%text, 3); + Canvas.pushDialog(EmailComposeDlg); + EmailBodyText.setValue("\n\n===========================\n On " @ %date SPC $EmailToAddress @ " wrote:\n\n" @ EmailGetBody(%text) ); + EmailBodyText.makeFirstResponder(1); + EmailBodyText.SetCursorPosition(0); +} +//----------------------------------------------------------------------------- +function EmailMessageDelete() +{ + %id = EM_Browser.getSelectedId(); + if ( %id == -1 ) + return; + + %row = EM_Browser.findById( %id ); + EMailComposeDlg.key = LaunchGui.key++; + + // Make these buttons inactive until another message is selected: + if(rbInbox.getValue()) + { + %nx = 6; + EMailComposeDlg.state = "deleteMail"; + DoEmailDelete(%nx,%id,EMailComposeDlg, EMailComposeDlg.key, %row); + } + else + { + %nx = 35; + EMailComposeDlg.state = "removeMail"; + MessageBoxYesNo("CONFIRM","Permanently Remove Selected EMail?","DoEmailDelete(" @ %nx @ "," @ %id @ "," @ EmailComposeDlg @ "," @ EmailComposeDlg.key @ "," @ %row @ ");"); + } + +} +//----------------------------------------------------------------------------- +function DoEmailDelete(%qnx, %mid, %owner, %key, %row) +{ + error("QNX: " @ %qnx TAB %mid TAB %row); + EM_ReplyBtn.setActive( false ); + EM_ReplyToAllBtn.setActive( false ); + EM_ForwardBtn.setActive( false ); + EM_DeleteBtn.setActive( false ); + EM_BlockBtn.setActive( false ); + + EmailMessageVector.deleteLine(EmailMessageVector.getLineIndexByTag(%mid)); + EM_Browser.removeRowByIndex( %row ); + + if(%qnx==6) + EmailGui.dumpCache(); + + + if ( EM_Browser.rowCount() == 0 ) + EMailInboxBodyText.setText(""); + else + EM_Browser.setSelectedRow(%row); + + DatabaseQuery(%qnx, %mid, %owner, %key); + +} +//----------------------------------------------------------------------------- +function EmailSend() +{ + EMailComposeDlg.key = LaunchGui.key++; + CheckEmailNames(); + EMailComposeDlg.state = "sendMail"; + %text = $EMailToAddress TAB $EMailCCAddress TAB $EmailSubject TAB EMailBodyText.getValue(); + DatabaseQuery(5,getsubstr(%text,0,3600),EMailComposeDlg,EMailComposeDlg.key); + Canvas.popDialog(EmailComposeDlg); +} +//----------------------------------------------------------------------------- +function EmailMessageAddRow(%text, %tag) +{ + EM_Browser.addRow( %tag, getField( getRecord( %text, 1 ) ,0 ), + getRecord( %text, 6 ), + getRecord( %text, 3 ), + getRecord( %text, 2 )); +} +//----------------------------------------------------------------------------- +function EmailGetBody(%text) +{ + %msgText = ""; + %rc = getRecordCount(%text); + + for(%i = 7; %i < %rc; %i++) + %msgText = %msgText @ getRecord(%text, %i) @ "\n"; + return %msgText; +} +//----------------------------------------------------------------------------- +function getNameList(%line) +{ + if(%line $= "") + return ""; + + %ret = getField(getTextName(%line, 0), 0); + %count = getFieldCount(%line) / 4; + for(%i = 1; %i < %count; %i++) + %ret = %ret @ ", " @ getField(getTextName(%line, %i * 4), 0); +} +//----------------------------------------------------------------------------- +function getLinkNameOnly(%line) +{ + if(%line $= "" || %line $= " ") + return ""; + %name = getField(%line,0); + %str = "" @ %name; + %ret = "" @ %str @ ""; + return %ret; +} +//----------------------------------------------------------------------------- +function getLinkNameList(%line) +{ + if(%line $= "") + return ""; + + %ret = getLinkName(%line, 0); + %count = getFieldCount(%line) / 4; + for(%i = 1; %i < %count; %i++) + %ret = %ret @ ", " @ getLinkName(%line, %i * 4); +} +//----------------------------------------------------------------------------- +function CheckEmailNames() +{ + $EmailTOAddress = strUpr(trim($EmailTOAddress)); + $EmailCCAddress = strUpr(trim($EmailCCAddress)); + %toLength = strLen($EmailTOAddress); + %ccLength = strLen($EmailCCAddress); + %checkList = ""; + if(%toLength > 0) + { + if(trim(getSubStr($EmailTOAddress,%toLength-1,1)) !$= "," || trim(getSubStr($EmailTOAddress,%toLength,1)) !$= ",") + $EmailTOAddress = $EmailTOAddress @ ","; + } + else + $EmailTOAddress = ","; + + if(%ccLength > 0) + { + if(trim(getSubStr($EmailCCAddress,%ccLength-1,1)) !$= "," || trim(getSubStr($EmailCCAddress,%ccLength,1)) !$= ",") + $EmailCCAddress = $EmailCCAddress @ ","; + } + else + %ccList = ","; + for(%x=0;%x<2;%x++) + { + %pos = 0; + %start = 0; + + if(%x == 0) + %nList = $EmailTOAddress; + else if(%x == 1) + { + $EmailTOAddress = %nList; + %nList = $EmailCCAddress; + } + + if(strLen(%nList)>1) + { + while((%pos = strPos(%nList,",",%start)) != -1 && %cx++ < 40) + { + %name = getSubStr(%nList,%start,%pos-%start); + %nameLength = strLen(%name); + %name = trim(%name); + if((%checkStr = strStr(%checkList,%name)) != -1) + { + if(%checkStr == 0) + %checkVal = ","; + else + %checkVal = getSubStr(%checkList,strStr(%checkList,%name)-1,1); + + if(%checkVal $= "," || %checkVal $= " ") + { + if(%pos-%nameLength == %start && %start == 0) + { + %nList = trim(getSubStr(%nList,%pos+1,strLen(%nList))); + } + else + { + %nList = trim(getSubStr(%nList,0,(%pos-%nameLength))) @ + trim(getSubStr(%nList,%pos+1,strLen(%nList))); + %start = %pos-%nameLength; + } + } + else + { + if(strLen(%checkList)==0) + %checkList = %name; + else + %checkList = %checkList @ "," @ %name; + %start = %pos+1; + } + } + else + { + if(strLen(%checkList)==0) + %checkList = %name; + else + %checkList = %checkList @ "," @ %name; + %start = %pos+1; + } + } + } + } + $EmailCCAddress = %nList; +} +//----------------------------------------------------------------------------- +function EmailGetTextDisplay(%text) +{ + %pos = 0; + %strStart = 0; + %curList = strupr(getRecord(%text,4)); + %to = ""; + if(strLen(%curList) > 1) + { + if(trim(getSubStr(%curList,strLen(%curList)-1,1)) !$= ",") + %curList = %curList @ ","; + } + else + %curList = ","; + + while((%pos = strpos(%curList, ",", %strStart)) != -1 && %cl++ < 50) + { + if(%strStart==0) + %to = trim(getLinkNameOnly(getSubStr(%curList, %strStart, %pos-%strStart))); + else + %to = %to @ "," @ trim(getLinkNameOnly(getSubStr(%curList, %strStart, %pos-%strStart))); + + %strStart = %pos+1; + } + %pos = 0; + %strStart = 0; + %curList = strupr(getRecord(%text,5)); + %ccLine = ""; + if(strLen(%curList) > 1) + { + if(trim(getSubStr(%curList,strLen(%curList)-1,1)) !$= ",") + %curList = %curList @ ","; + } + else + %curList = ","; + + while((%pos = strpos(%curList, ",", %strStart)) != -1 && %ck++<50) + { + if(%strStart==0) + %ccLine = getLinkNameOnly(getSubStr(%curList, %strStart, %pos-%strStart)); + else + %ccLine = %ccLine @ "," @ getLinkNameOnly(getSubStr(%curList, %strStart, %pos-%strStart)); + + %strStart = %pos+1; + } + %from = getLinkName(getRecord(%text, 1), 0); + + %msgtext = "From: " @ %from NL + "To: " @ %to NL + "CC: " @ %ccLine NL + "Subject: " @ getRecord(%text, 6) NL + "Date Sent: " @ getRecord(%text, 3) @ "\n\n" @ + EmailGetBody(%text); +} +//----------------------------------------------------------------------------- +function EmailNewMessageArrived(%message, %seq) +{ + $EmailNextSeq = %seq; + EmailMessageVector.pushBackLine(%message, %seq); + EmailMessageAddRow(%message, %seq); +} +//----------------------------------------------------------------------------- +function GetEMailBtnClick() +{ + if(isEventPending(EMailGUI.eid)) + cancel(EmailGui.eid); + + EMailGui.btnClicked = true; + EMailGui.checkingEMail = false; + EMailGui.eid = schedule(1000 * 2 * 1, 0, CheckEmail, false); + canvas.SetCursor(ArrowWaitCursor); +} +//----------------------------------------------------------------------------- +function CheckEmail(%calledFromSched) +{ + if(EmailGui.checkingEmail) + { + echo("Check In Progress"); + return; + } + + if(EmailGui.checkSchedule && !%calledFromSched) + { + echo("Email Schedule " @ EmailGui.checkSchedule @ "Cancelled"); + cancel(EmailGui.checkSchedule); // cancel schedule + } + EmailGui.checkSchedule = ""; + EMailGui.key = LaunchGui.key++; + EmailGui.state = "getMail"; + DatabaseQueryArray(1,0,$EmailNextSeq, EMailGui, EMailGui.key); + EmailGui.checkingEmail = true; +} +//----------------------------------------------------------------------------- +function EmailEditBlocks() +{ + Canvas.pushDialog(EmailBlockDlg); + EmailBlockList.clear(); + EMailBlockDlg.key = LaunchGui.key++; + EmailBlockDlg.state = "getBlocklist"; + DatabaseQueryArray(2,0,"",EMailBLockDlg,EMailBLockDlg.key); +} +//----------------------------------------------------------------------------- +function EmailBlockSender() +{ + %id = EM_Browser.getSelectedId(); + if ( %id == -1 ) + { + MessageBoxOK("WARNING","You cannot block a non-existent sender."); + return; + } + else + { + %text = EmailMessageVector.getLineTextByTag( EM_Browser.getSelectedId() ); + %blockAddress = getField(getRecord(%text, 1), 0); + if(trim(%blockAddress) !$= "") + { + EMailBlockDlg.state = "setBlock"; + EMailBlockDlg.key = LaunchGui.key++; + DatabaseQuery(9,%blockAddress,EmailBlockDlg,EMailBlockDlg.key); + } + } +} +//----------------------------------------------------------------------------- +function EmailBlockRemove() +{ + %rowId = EmailBlockList.getSelectedId(); + if(%rowId == -1) + { + MessageBoxOK("WARNING","You cannot remove a non-existent block."); + return; + } + else + { + %line = EmailBlockList.getRowTextById(%rowId); + %name = getField(%line, 2); + EMailBlockDlg.state = "removeBlock"; + EMailBlockDlg.key = LaunchGui.key++; + DatabaseQuery(8,%name,EMailBLockDlg,EMailBLockDlg.key); + EmailBlockList.removeRowById(%rowId); + } +} +//-- EMailComposeDlg ---------------------------------------------------------------- +function EMailComposeDlg::onDatabaseQueryResult(%this, %status, %RowCount_Result, %key) +{ + if(%this.key != %key) + return; + echo("RECV: " @ %status TAB %RowCount_Result); + if(getField(%status,0)==0) + { + switch$(%this.state) + { + case "deleteMail": + %this.state = "done"; + case "removeMail": + %this.state = "done"; + case "sendMail": + %this.state = "done"; + } + } + else if (getSubStr(getField(%status,1),0,9) $= "ORA-04061") + { + %this.state = "error"; + MessageBoxOK("ERROR","There was an error processing your request, please wait a few moments and try again."); + } + else + MessageBoxOK("ERROR",getField(%status,1)); +} +//----------------------------------------------------------------------------- +function EmailComposeDlg::Cancel(%this) +{ + Canvas.PopDialog(EmailComposeDlg); +} +//----------------------------------------------------------------------------- +function EmailComposeDlg::SendMail(%this) +{ + // NEED TO CHECK FOR DUPLICATES + if(trim($EmailToAddress) $= "") + MessageBoxOK("No Address","TO Address may not be left blank. Please enter a player name to send this message to."); + else + { + if(trim($EmailSubject) $= "") + MessageBoxOK("No Subject","Please enter a Subject for your message."); + else + EMailSend(); + } +} +//-- EMailBlockDlg ----------------------------------------------------------- +function EMailBlockDlg::onDatabaseQueryResult(%this,%status,%ResultString,%key) +{ + if(%this.key != %key) + return; + echo("RECV: " @ %status TAB %ResultString); + if(getField(%status,0)==0) + { + switch$(%this.state) + { + case "getBlocklist": + %this.state = "names"; + %this.blockCount = getField(%ResultString,0); + case "removeBlock": + MessageBoxOK("NOTICE",getField(%status,1)); + case "setBlock": + MessageBoxOK("NOTICE",getField(%status,1)); + } + } + else if (getSubStr(getField(%status,1),0,9) $= "ORA-04061") + { + %this.state = "error"; + MessageBoxOK("ERROR","There was an error processing your request, please wait a few moments and try again."); + } + else + { + %this.state = "error"; + MessageBoxOK("ERROR",getField(%status,1)); + } +} +//----------------------------------------------------------------------------- +function EMailBlockDlg::onDatabaseRow(%this,%row,%isLastRow,%key) +{ + if(%this.key != %key) + return; + echo("RECV: " @ %row TAB %isLastRow); + switch$(%this.state) + { + case "names": + %textName = getTextName(getFields(%row,0,4)); + %id = getField(%row,3); + %blockedCount = getField(%row,4); + EmailBlockList.addRow(%id, getField(%textName,0) TAB %blockedCount TAB %row); + } +} +//----------------------------------------------------------------------------- +function CheckAllDuplicates(%player) +{ + %lCount = LC_ToList.rowCount(); + %cCount = LC_CCList.rowCount(); + %vResult = 0; + if(%lCount>0) + { + for(%l=0;%l<%lCount;%l++) + { + %lstr = LC_ToList.getRowText(%l); + if(%lstr $= %player) + %vResult++; + } + } + + if(%cCount>0) + { + for(%c=0;%c<%cCount;%c++) + { + %cstr = LC_CCList.getRowText(%c); + if(%cstr $= %player) + %vResult++; + } + } + return %vResult; +} +//----------------------------------------------------------------------------- +function LaunchAddressDlg() +{ + Canvas.PushDialog("AddressDlg"); +} +//----------------------------------------------------------------------------- +function ListToStr(%listName,%delim) +{ + %str = ""; + %rCount = %listName.rowCount(); + if (%rCount > 0) + { + for(%r=0;%r<%rCount;%r++) + { + %str = %str @ %listName.getRowText(%r); + if(%r < %rCount-1) + { + %str = %str @ %delim; + } + } + return %str; + } +} +//----------------------------------------------------------------------------- +function StrToList(%listName, %str, %delim) +{ + %listName.Clear(); + %sCount = 0; + %sSize = strlen(%str); + if (%sSize > 0) + { + for(%l=0;%l<=%sSize;%l++) + { + %txt = getSubStr(%str,%l,1); + if( %txt $= %delim || %l == %sSize ) + { + %listName.addRow(%sCount,trim(%sText)); + %sText = ""; + %sCount++; + } + else + { + %sText = %sText @ %txt; + } + } + } +} +//----------------------------------------------------------------------------- +function AddressDlg::onDatabaseQueryResult(%this,%status,%resultString,%key) +{ + if(%this.key != %key) + return; + echo("RECV: " @ %status TAB %resultString); + if(getField(%status,0)==0) + { + switch$(%this.state) + { + case "goSearch": + if(getField(%resultString,0)<=0) + { + %this.state = "done"; + MessageBoxOK("NOTICE","No Match Found."); + } + else + { + %this.state = "memberList"; + %this.linecount = -1; + LC_BigList.clear(); + } + case "getBuddyList": + if(getField(%resultString,0)<=0) + { + %this.state = "done"; + MessageBoxOK("NOTICE","You have no Buddies."); + } + else + { + %this.state = "buddyList"; + %this.linecount = -1; + LC_BigList.clear(); + } + case "getTribeMembers": + if(getField(%resultString,0)<=0) + { + %this.state = "done"; + MessageBoxOK("NOTICE","Cloak Packs are engaged, Tribe Mates could not be detected."); + } + else + { + %this.state = "tribeMembers"; + %this.linecount = -1; + LC_BigList.clear(); + } + case "addBuddy": + MessageBoxOK("CONFIRMED",getField(%status,1)); + case "dropBuddy": + MessageBoxOK("CONFIRMED",getField(%status,1)); + } + } + else if (getSubStr(getField(%status,1),0,9) $= "ORA-04061") + { + %this.state = "error"; + MessageBoxOK("ERROR","There was an error processing your request, please wait a few moments and try again."); + } + else + { + switch$(%this.state) + { + case "goSearch": + %this.state = "error"; + MessageBoxOk("ERROR",getField(%status,1)); + } + } +} +//----------------------------------------------------------------------------- +function AddressDlg::onDatabaseRow(%this,%row,%isLastRow,%key) +{ + if(%this.key != %key) + return; + + echo("RECV : " @ %row); + switch$(%this.state) + { + case "memberList": + LC_BigList.addRow(%this.linecount++,getField(%row,1)); + case "buddyList": + LC_BigList.addRow(%this.linecount++,getField(%row,0)); + case "tribeMembers": + LC_BigList.addRow(%this.linecount++,getField(%row,0)); + } +} +//----------------------------------------------------------------------------- +function AddressDlg::AddBuddylist(%this) +{ + %this.key = LaunchGui.key++; + %this.lbstate = "buddylist"; + switch (%this.SrcList) + { + case 0: + %addremove = LC_BuddyListBtn.direction; + %player = LC_BigList.getValue(); + %selRow = LC_BigList.getRownumByID(LC_BigList.GetSelectedID()); + case 1: + %addremove = 0; + %player = LC_ToList.getValue(); + case 2: + %addremove = 0; + %player = LC_CCList.getValue(); + } + + if (%addremove==0) + { + %this.doRefresh = 1; + %this.state = "addBuddy"; + DatabaseQuery(10,%player,%this,%this.key); + } + else + { + %this.state = "dropBuddy"; + DatabaseQuery(11,%player,%this,%this.key); + LC_BigList.removeRowbyId(LC_BigList.getSelectedID()); + if(%selRow>=LC_BigList.RowCount()) + %selRow = LC_BigList.RowCount()-1; + LC_BigList.setSelectedRow(%selRow); + } +} +//----------------------------------------------------------------------------- +function AddressDlg::AddCC(%this) +{ + if(LC_CCListBtn.direction == 0) + { + %addName = LC_BigList.getRowText(LC_BigList.getSelectedID()); + %hasDupes = CheckAllDuplicates(%addName); + if(%hasDupes == 0) + LC_CCList.addRow(LC_CCList.RowCount()+1, %addName); + } + else + { + %selRow = LC_CCList.getRownumByID(LC_CCList.GetSelectedID()); + LC_CCList.removeRowbyID(LC_CCList.getSelectedID()); + if(%selRow>=LC_CCList.RowCount()) + %selRow = LC_CCList.RowCount()-1; + LC_CCList.setSelectedRow(%selRow); + } + %this.DestList = 1; +} +//----------------------------------------------------------------------------- +function AddressDlg::AddTo(%this) +{ + if(LC_ToListBtn.direction == 0) + { + %addName = LC_BigList.getRowText(LC_BigList.getSelectedID()); + %hasDupes = CheckAllDuplicates(%addName); + if(%hasDupes == 0 ) + LC_ToList.addRow(LC_ToList.RowCount()+1, %addName); + } + else + { + %selRow = LC_ToList.getRownumByID(LC_ToList.GetSelectedID()); + LC_ToList.removeRowbyID(LC_ToList.getSelectedID()); + if(%selRow>=LC_ToList.RowCount()) + %selRow = LC_ToList.RowCount()-1; + LC_ToList.SetSelectedRow(%selRow); + } + %this.DestList = 0; +} +//----------------------------------------------------------------------------- +function AddressDlg::Cancel(%this) +{ + LC_BigList.Clear(); + Canvas.PopDialog("AddressDlg"); +} +//----------------------------------------------------------------------------- +function AddressDlg::GoSearch(%this) +{ + if(trim(LC_Search.getValue()) !$="") + { + %this.key = LaunchGui.key++; + %this.state = "goSearch"; + %this.lbstate = "errorcheck"; + DatabaseQueryArray(3,100,trim(LC_Search.getValue()) TAB 0 TAB 100 TAB 1 ,%this, %this.key); + LC_BuddyListBtn.direction = 0; + LC_BuddyListBtn.text = "ADD TO BUDDYLIST"; + LC_ListBox.setSelected(0); + } + else + MessageBoxOK("WARNING","Null searches (blank) are not allowed. Please enter letter(s) to search for."); +} +//----------------------------------------------------------------------------- +function AddressDlg::GoList(%this) +{ + %this.key = LaunchGui.key++; + %this.lbstate = "errorcheck"; + if(LC_ListBox.getValue() $="Select List") + { + LC_BigList.clear(); + } + else if(LC_ListBox.getValue() $="Buddy List") + { + %this.state = "getBuddyList"; + DatabaseQueryArray(5,0,"",%this,%this.key); + LC_BuddyListBtn.direction = 1; + LC_BuddyListBtn.text = "REMOVE FROM BUDDYLIST"; + } + else + { + %this.state = "getTribeMembers"; + DatabaseQueryArray(6,0,LC_ListBox.getValue(),%this,%this.key); + LC_BuddyListBtn.direction = 0; + LC_BuddyListBtn.text = "ADD TO BUDDYLIST"; + } +} +//----------------------------------------------------------------------------- +function AddressDlg::OK(%this) +{ + if (LC_ToList.rowCount() > 0) + EMail_ToEdit.setValue(ListToStr(LC_ToList,",")); + + if (LC_CCList.rowCount() > 0) + EMail_CCEdit.setValue(ListToStr(LC_CCList,",")); + + LC_BigList.Clear(); + Canvas.PopDialog("AddressDlg"); +} +//----------------------------------------------------------------------------- +function AddressDlg::onClick(%this, %sender) +{ + switch$(%sender) + { + case "BIGLIST": + LC_ToListBtn.text = "ADD"; + LC_CCListBtn.text = "ADD"; + LC_ToListBtn.direction = 0; + LC_CCListBtn.direction = 0; + LC_ToList.setSelectedRow(-1); + LC_CCList.setSelectedRow(-1); + %this.SrcList = 0; + LC_BuddyListBtn.setVisible(1); + if(LC_ListBox.getValue() $="Buddy List") + { + LC_BuddyListBtn.direction = 1; + LC_BuddyListBtn.SetValue("REMOVE FROM BUDDYLIST"); + } + else + { + LC_BuddyListBtn.direction = 0; + LC_BuddyListBtn.SetValue("ADD TO BUDDYLIST"); + } + case "TOLIST": + LC_ToListBtn.text = "DEL"; + LC_ToListBtn.direction = 1; + LC_BigList.setSelectedRow(-1); + LC_CCList.setSelectedRow(-1); + %this.DestList = 0; + %this.SrcList = 1; + LC_BuddyListBtn.direction = 0; + LC_BuddyListBtn.SetValue("ADD TO BUDDYLIST"); + LC_BuddyListBtn.setVisible(1); + case "CCLIST": + LC_CCListBtn.text = "DEL"; + LC_CCListBtn.direction = 1; + LC_ToList.setSelectedRow(-1); + LC_BigList.setSelectedRow(-1); + %this.DestList = 1; + %this.SrcList = 2; + LC_BuddyListBtn.direction = 0; + LC_BuddyListBtn.SetValue("ADD TO BUDDYLIST"); + LC_BuddyListBtn.setVisible(1); + case "LISTBOX": + LC_ToList.setSelectedRow(-1); + LC_BigList.setSelectedRow(-1); + LC_CCList.setSelectedRow(-1); + %this.SrcList = 0; + LC_BuddyListBtn.setVisible(0); + %this.GoList(); + case "SEARCHBOX": + LC_ToList.setSelectedRow(-1); + LC_BigList.setSelectedRow(-1); + LC_CCList.setSelectedRow(-1); + %this.SrcList = 0; + LC_BuddyListBtn.setVisible(0); + } + Canvas.repaint(); +} +//----------------------------------------------------------------------------- +function AddressDlg::onDblClick(%this,%caller) +{ + switch(%caller) + { + case 0: + if(%this.DestList==0) + %this.AddTo(); + else + %this.AddCC(); + case 1: + LC_ToList.removeRowbyID(LC_ToList.getSelectedID()); + LC_ToList.SetSelectedRow(0); + case 2: + LC_CCList.removeRowbyID(LC_CCList.getSelectedID()); + LC_CCList.SetSelectedRow(0); + } +} +//----------------------------------------------------------------------------- +function AddressDlg::onWake(%this) +{ + %this.doRefresh = 0; + %this.key = LaunchGui.key++; + %this.state = "loadlistbox"; + %this.lbstate = "errorcheck"; + %this.DestList = 0; + %this.SrcList = 0; + LC_BuddyListBtn.setVisible(0); + LC_ListBox.Clear(); + LC_ListBox.Add("Select List",0); + LC_ListBox.Add("Buddy List",1); + LC_ListBox.setSelected(0); + LC_Search.clear(); + StrToList(LC_ToList,$EmailToAddress,","); + StrToList(LC_CCList,$EmailCCAddress,","); + %info = WONGetAuthInfo(); + %tribeCount = getField( getRecord( %info, 1 ), 0 ); //%cert + for ( %i = 0; %i < %tribeCount; %i++ ) + { + %tribe = getField( getRecord( %info, %i + 2 ), 0 ); //%cert + LC_ListBox.add(%tribe,%i); + } +} +//-- EMailGui ---------------------------------------------------------------- +function EmailGui::onWake(%this) +{ + error("EMailGui.onWake" TAB %this.cacheFile); + // Make these buttons inactive until a message is selected: + EM_ReplyBtn.setActive( false ); + EM_ReplyToAllBtn.setActive( false ); + EM_ForwardBtn.setActive( false ); + EM_DeleteBtn.setActive( false ); + EM_BlockBtn.setActive( false ); + %selId = EM_Browser.getSelectedId(); + Canvas.pushDialog(LaunchToolbarDlg); + + // Set the minimum extent of the frame panes: + %minExtent = EM_BrowserPane.getMinExtent(); + EM_Frame.frameMinExtent( 0, firstWord( %minExtent ), restWords( %minExtent ) ); + %minExtent = EM_MessagePane.getMinExtent(); + EM_Frame.frameMinExtent( 1, firstWord( %minExtent ), restWords( %minExtent ) ); + + if(!%this.cacheFile) + { + %this.cacheFile = "email0"; + EmailGui.getCache(); + } + if ( !EmailGui.cacheLoaded || EM_Browser.rowCount() == 0 ) + { + EmailGui.checkingEmail = false; + if(!rbInbox.getValue()) + rbInbox.setValue(1); + else + { + EmailGui.GetCache(); + EmailGui.OutputVector(); + } + } + + if ( EM_Browser.rowCount() > 0 ) + { + %row = EM_Browser.findById( %selId ); + if ( %row == -1 ) + EM_Browser.setSelectedRow( 0 ); + else + EM_Browser.setSelectedRow( %row ); + } +} +//----------------------------------------------------------------------------- +function EmailGui::ButtonClick(%this,%ord) +{ + switch(%ord) + { + case 0: em_GetMailBtn.setVisible(1); + GetEmailBtnClick(); + case 1: em_GetMailBtn.setVisible(0); + EM_Browser.clear(); + EMailMessageVector.clear(); + EmailInboxBodyText.setText(""); + EMailGui.state = "getDeletedMail"; + EmailGui.key = LaunchGui.key++; + DatabaseQueryArray(14,100,EmailGui.state,EMailGui,EMailGui.key); + } +} +//----------------------------------------------------------------------------- +function EMailGui::onDatabaseQueryResult(%this, %status, %RowCount_Result, %key) +{ + if(%this.key != %key) + return; + echo("RECV: " @ %status); + if(getField(%status,0)==0) + { + switch$(%this.state) + { + case "getMail": + %this.soundPlayed = false; + if(getField(%RowCount_Result,0)>0) + { + %this.messageCount = 0; + %this.message = ""; + %this.state = "NewMail"; + } + else + { + %this.state = "done"; + EMailGui.getCache(); + EMailGui.outputVector(); + if(EMailGui.btnClicked) + { + MessageBoxOK("NOTICE","No New Mail"); + EmailGui.btnClicked = false; + } + %this.checkSchedule = schedule(1000 * 60 * 5, 0, CheckEmail, true); + echo("scheduling Email check " @ %this.checkSchedule @ " in 5 minutes"); + } + case "sendMail": + %this.state = "done"; + CheckEMail(); + case "deleteMail": + %this.state = "done"; + CheckEMail(); + case "forwardMail": + %this.state = "done"; + CheckEMail(); + case "replyMail": + %this.state = "done"; + CheckEMail(); + case "replyAllMail": + %this.state = "done"; + CheckEMail(); + case "blockSender": + %this.state = "done"; + case "Refresh": + %this.state = "done"; + CheckEMail(); + case "getDeletedMail": + if(getField(%RowCount_Result,0)>0) + { + %this.messageCount = 0; + %this.message = ""; + %this.state = "DeletedMail"; + } + else + { + %this.state = "done"; + MessageBoxOK("NOTICE",getField(%status,2)); + } + } + } + else if (getSubStr(getField(%status,1),0,9) $= "ORA-04061") + { + %this.state = "error"; + MessageBoxOK("ERROR","There was an error processing your request, please wait a few moments and try again."); + } + else + { + %this.state = "error"; + MessageBoxOK("ERROR","Error Retrieving Messages"); + } + canvas.SetCursor(DefaultCursor); +} +//----------------------------------------------------------------------------- +function EMailGui::onDatabaseRow(%this, %row,%isLastRow,%key) +{ + if(%this.key != %key) + return; + + echo("RECV: " @ %row NL %isLastRow); + switch$(%this.state) + { + case "DeletedMail": + %ID = getField(%row,0); + %senderQuad = getFields(%row,1,4); + %recipientQuad = getFields(%row,5,8); + %created = getField(%row,9); + %isCC = getField(%row,10); + %isDel = getField(%row,11); + %isRead = getField(%row,12); + %TList = getField(%row,13); + %CCList = getField(%row,14); + %subject = getField(%row,15); + %bodyCount = getField(%row,16); + %body = getFields(%row,17); + %msg = %ID NL %senderQuad NL %isRead NL %created NL %TList NL %CCList NL %subject NL %body @ "\n"; + %this.message = %msg; + EmailMessageVector.pushBackLine(%this.message, getField(%this.message, 0)); + if(%isLastRow) + %this.outputVector(); + case "NewMail": + if(%this.messageCount++ == 1) + %this.getCache(); + + %this.checkingEmail = ""; + %ID = getField(%row,0); + %senderQuad = getFields(%row,1,4); + %recipientQuad = getFields(%row,5,8); + %created = getField(%row,9); + %isCC = getField(%row,10); + %isDel = getField(%row,11); + %isRead = getField(%row,12); + %TList = getField(%row,13); + %CCList = getField(%row,14); + %subject = getField(%row,15); + %bodyCount = getField(%row,16); + %body = getFields(%row,17); + %msg = %ID NL %senderQuad NL %isRead NL %created NL %TList NL %CCList NL %subject NL %body @ "\n"; + %this.message = %msg; + $EmailNextSeq = %ID; + EmailMessageVector.pushBackLine(%this.message, getField(%this.message, 0)); + if(!%this.soundPlayed) + { + if(!getRecord(%this.message, 2))//are there any unread messages in this group? + { + %this.soundPlayed = true; + alxPlay(sGotMail, 0, 0, 0); + } + } + + if(%isLastRow) + { + EmailGui.dumpCache(); + EmailGui.loadCache(); + %this.checkSchedule = schedule(1000 * 60 * 5, 0, CheckEmail, true); + echo("scheduling Email check " @ %this.checkSchedule @ " in 5 minutes"); + } + } +} +//----------------------------------------------------------------------------- +function EmailGui::getCache(%this) +{ + EM_Browser.clear(); + EMailMessageVector.clear(); + EmailInboxBodyText.setText(""); + %fileName = $EmailCachePath @ "email0"; + %file = new FileObject(); + if ( %this.cacheFile $= "" ) + { + if ( %file.openForRead( %fileName ) ) + { + %guid = %file.readLine(); + if ( %guid $= getField( WonGetAuthInfo(), 3 ) ) + { + // This is the right one! + %this.cacheFile = "email0"; + %this.messageCount = %file.readLine(); + while( !%file.isEOF() ) + { + %line = %file.readLine(); + %id = firstWord( %line ); + %msg = collapseEscape( restWords( %line ) ); + $EmailNextSeq = %id; + EMailMessageVector.pushBackLine(%msg, %id); + } + %file.close(); + } + } + } + else if ( %file.openForRead( %fileName ) ) + { + %guid = %file.readLine(); + %this.messageCount = %file.readLine(); + while( !%file.isEOF() ) + { + %line = %file.readLine(); + %id = firstWord( %line ); + %msg = collapseEscape( restWords( %line ) ); + $EmailNextSeq = %id; + EMailMessageVector.pushBackLine(%msg, %id); + } + %file.close(); + } + %file.delete(); + %this.cacheLoaded = true; +} +//----------------------------------------------------------------------------- +function EmailGui::outputVector(%this) +{ + for(%i = 0; %i < EmailMessageVector.getNumLines(); %i++) + EmailMessageAddRow(EmailMessageVector.getLineText(%i), + EmailMessageVector.getLineTag(%i)); + EM_Browser.setSelectedRow( 0 ); +} +//----------------------------------------------------------------------------- +function EmailGui::loadCache( %this ) +{ + EM_Browser.clear(); + EMailMessageVector.clear(); + EMailInboxBodyText.setText(""); + %fileName = $EmailCachePath @ "email0"; + error("EMAIL CACHE" @ %fileName); + %file = new FileObject(); + if ( %this.cacheFile $= "" ) + { + if ( %file.openForRead( %fileName ) ) + { + %guid = %file.readLine(); + if ( %guid $= getField( WonGetAuthInfo(), 3 ) ) + { + // This is the right one! + %this.cacheFile = "email0"; + %this.messageCount = %file.readLine(); + while( !%file.isEOF() ) + { + %line = %file.readLine(); + %id = firstWord( %line ); + %msg = collapseEscape( restWords( %line ) ); + EmailNewMessageArrived( %msg, %id ); + } + %file.close(); + } + } + } + else if ( %file.openForRead( %fileName ) ) + { + %guid = %file.readLine(); + %this.messageCount = %file.readLine(); + while( !%file.isEOF() ) + { + %line = %file.readLine(); + %id = firstWord( %line ); + %msg = collapseEscape( restWords( %line ) ); + EmailNewMessageArrived( %msg, %id ); + } + %file.close(); + } + %file.delete(); + %this.cacheLoaded = true; +} +//----------------------------------------------------------------------------- +function EmailGui::dumpCache( %this ) +{ + %guid = getField( WONGetAuthInfo(), 3 ); + if ( %this.cacheFile $= "" ) %this.cacheFile = "email0"; +// { +// %base = $EmailCachePath @ "email"; +// %num = 0; +// %cacheFile = %base @ %num; +// while ( isFile( %cacheFile ) ) +// { +// %num++; +// %cacheFile = %base @ %num; +// } +// %this.cacheFile = %cacheFile; +// } + EmailMessageVector.dump( $EmailCachePath @ %this.cacheFile, %guid ); +} +//----------------------------------------------------------------------------- +function EmailGui::onSleep( %this ) +{ + EMailGui.checkingEMail = false; + %this.checkingEmail = ""; + %this.checkSchedule = schedule(1000 * 10 * 1, 0, CheckEmail, true); + Canvas.popDialog( LaunchToolbarDlg ); +} +//----------------------------------------------------------------------------- +function EMailGui::getEmail(%this,%fromSchedule) +{ + checkEmail(%fromSchedule); +} +//----------------------------------------------------------------------------- +function EmailGui::setKey( %this, %key ) +{ +} +//-- EM_Browser -------------------------------------------------------------- +function EM_Browser::onAdd( %this ) +{ + // Add the columns with widths from the prefs: + for ( %i = 0; %i < $EmailColumnCount; %i++ ) + %this.addColumn( %i, $EmailColumnName[%i], $pref::Email::Column[%i], firstWord( $EmailColumnRange[%i] ), getWord( $EmailColumnRange[%i], 1 ) ); + + %this.setSortColumn( $pref::Email::SortColumnKey ); + %this.setSortIncreasing( $pref::Email::SortInc ); +} +//----------------------------------------------------------------------------- +function EM_Browser::onSelect( %this, %id ) +{ + %text = EmailMessageVector.getLineTextByTag(%id); + if(rbinbox.getValue()) + { + if(!getRecord(%text, 2)) // read flag + { + %line = EmailMessageVector.getLineIndexByTag(%id); + %text = setRecord(%text, 2, 1); + DatabaseQuery(7, %id); + // Update the GUI: + %this.setRowFlags( %id, 1 ); + EmailMessageVector.deleteLine(%line); + EmailMessageVector.insertLine(%line, %text, %id); + EmailGui.dumpCache(); + } + } + EmailInboxBodyText.setValue(EmailGetTextDisplay(%text)); + EM_ReplyBtn.setActive( true ); + EM_ReplyToAllBtn.setActive( true ); + EM_ForwardBtn.setActive( true ); + EM_DeleteBtn.setActive( true ); + EM_BlockBtn.setActive( true ); +} +//----------------------------------------------------------------------------- +function EM_Browser::onSetSortKey( %this, %sortKey, %isIncreasing ) +{ + $pref::Email::SortColumnKey = %sortKey; + $pref::Email::SortInc = %isIncreasing; +} +//----------------------------------------------------------------------------- +function EM_Browser::onColumnResize( %this, %column, %newSize ) +{ + $pref::Email::Column[%column] = %newSize; +} diff --git a/base/scripts/webforums.cs b/base/scripts/webforums.cs new file mode 100644 index 0000000..364417e --- /dev/null +++ b/base/scripts/webforums.cs @@ -0,0 +1,1380 @@ +//------------------------------------------ +// Forums code +//------------------------------------------ +$ForumCacheVersion = 8; //lucky seven...NOT! +$ForumCachePath = "webcache/" @ getField(wonGetAuthInfo(),3) @ "/"; +$ForumsConnecting = "CONNECTING"; +$ForumsGetForums = "FETCHING FORUM LIST "; +$ForumsGetTopics = "FETCHING TOPICS "; +$ForumsTitle = "FORUMS"; +$ForumsGetPosts = "FETCHING POSTS "; + +$TopicColumnCount = 0; +$TopicColumnName[0] = "Topic"; +$TopicColumnRange[0] = "50 1000"; +$TopicColumnCount++; +$TopicColumnName[1] = "Posts"; +$TopicColumnRange[1] = "25 100"; +$TopicColumnFlags[1] = "numeric center"; +$TopicColumnCount++; +$TopicColumnName[2] = "Posted By"; +$TopicColumnRange[2] = "50 300"; +$TopicColumnCount++; +$TopicColumnName[3] = "Last Post Date"; +$TopicColumnRange[3] = "50 300"; +$TopicColumnCount++; + +$ForumColumnCount = 0; +$ForumColumnName[0] = "Message Tree"; +$ForumColumnRange[0] = "50 1000"; +$ForumColumnCount++; +$ForumColumnName[1] = "Posted By"; +$ForumColumnRange[1] = "50 300"; +$ForumColumnCount++; +$ForumColumnName[2] = "Date Posted"; +$ForumColumnRange[2] = "50 300"; +$ForumColumnCount++; + +// format of a forum post is: +// Post ID +// Parent Post ID +// subject +// Author +// Post date +// Text lines + +//Forums message vector post: +// postId +// parentId +// Topic +// Poster +// Date +// Message Line0 +// MessageLine 1 +// MessageLine 2 + +// Update is defined as: +// PostId +// UpdateId +// parentId +// poster +// Date +// topic +// body lines + +if(!isObject(ForumsMessageVector)) +{ + new MessageVector(ForumsMessageVector); +} +//----------------------------------------------------------------------------- +function ForumsGui::CheesyGradient(%this,%sender,%text,%startColor,%endColor) +{ + + %gText = ""; + if(%endColor > %startColor) + { + %interval = %endColor - %startColor; + for(%x=0;%x"; + } + } + else + { + %interval = %startColor - %endColor; + for(%x=0;%x"; + } + } + error("CG:"@ %startColor TAB %endColor TAB %interval); + + %gText = %gText @ ""; + error("CHEESY:" @ %gText); +} +//----------------------------------------------------------------------------- +function DateStrCompare(%date1,%date2) +{ + %d1 = getSubStr(%date1,0,2); + %d2 = getSubStr(%date2,0,2); + + if(%d1 == %d2) + { + %d1 = getSubStr(%date1,3,2); + %d2 = getSubStr(%date2,3,2); + if(%d1 == %d2) + { + %d1 = getSubStr(%date1,6,4); + %d2 = getSubStr(%date2,6,4); + if(%d1 == %d2) + { + if(getSubStr(%date1,17,1)$="a") + %d1 = getSubStr(%date1,11,2)+12; + else + %d1 = getSubStr(%date1,11,2); + + if(getSubStr(%date2,17,1)$="a") + %d2 = getSubStr(%date2,11,2)+12; + else + %d2 = getSubStr(%date2,11,2); + + if(%d1 == %d2) + { + %d1 = getSubStr(%date1,14,2); + %d2 = getSubStr(%date2,14,2); + if(%d1 >= %d2) + return true; + else + return false; + } + else if(%d1 > %d2) + return true; + else + return false; + } + else if(%d1 > %d2) + return true; + else + return false; + } + else if(%d1 > %d2) + return true; + else + return false; + } + else if (%d1 > %d2) + return true; + else + return false; +} +//----------------------------------------------------------------------------- +function BackToTopics() +{ + CacheForumTopic(); + ForumsGui.eid = schedule(250,ForumsGui,ForumsGoTopics); +} +//----------------------------------------------------------------------------- +function CacheForumTopic() +{ + %allRead = true; + %numLines = ForumsMessageVector.getNumLines(); + for ( %line = 0; %line < %numLines; %line++ ) + { + %lineText = ForumsMessageVector.getLineText( %line ); + if ( getRecord( %lineText, 0 ) $= "0" ) + %allRead = false; + + // Keep track of the latest date: + %lineDate = getRecord( %lineText, 5 ); + if ( %latest $= "" || strcmp( %lineDate, %latest ) > 0 ) + %latest = %lineDate; + } + if(!ForumsMessageList.highestUpdate) + ForumsMessageList.highestUpdate = 0; + + %newGroup = TopicsListGroup.getObject(ForumsTopicsList.getSelectedRow()); + ForumsMessageList.lastID = %newGroup.updateid; + %latest = GetField(ForumsTopicsList.getRowTextbyID(ForumsTopicsList.getSelectedID()),3); + + ForumsMessageVector.dump( $ForumCachePath @ "tpc" @ ForumsMessageVector.tid , ForumsMessageList.lastID TAB $ForumCacheVersion TAB %allRead TAB %latest); +} +//----------------------------------------------------------------------------- +function ForumsAcceptPost() +{ + %parentId = ForumsMessageList.getSelectedId(); + %text = ForumsMessageVector.getLineTextByTag(%parentId); + %author = getRecord( %text, 4 ); + %dev = getLinkName(%author); + %date = getRecord(%text, 5); + %body = getRecords(%text, 7); + ForumsGui.ebstat = FO_EditBtn.Visible; + ForumsGui.destat = FO_DeleteBtn.Visible; + $NewsTitle = getRecord(%text, 3); + ForumsMessageList.state = "newsAccept"; + Canvas.pushDialog(NewsPostDlg); + NewsCategoryMenu.clear(); + NewsCategoryMenu.add( "General", 0 ); + NewsCategoryMenu.add( "Announcements", 1 ); + NewsCategoryMenu.add( "Events", 2 ); + NewsCategoryMenu.add( "Updates", 3 ); + NewsCategoryMenu.setSelected( 0 ); + NewsPostBodyText.setValue("submitted by " @ %dev @ "\n\n" @ ForumsGetTextDisplay(%body)); + NewsPostDlg.postID = -1; + NewsPostDlg.action = "News"; +} +//----------------------------------------------------------------------------- +function ForumsEditPost() +{ + ForumsGui.ebstat = FO_EditBtn.Visible; + ForumsGui.destat = FO_DeleteBtn.Visible; + %text = ForumsMessageVector.getLineTextByTag(ForumsComposeDlg.parentPost); + $ForumsSubject = getRecord(%text, 3); + Canvas.pushDialog(ForumsComposeDlg); + ForumsBodyText.setValue(ForumsGetTextDisplay(%text,7)); + ForumsComposeDlg.post = ForumsComposeDlg.parentPost; + ForumsComposeDlg.action = "Edit"; +} +//----------------------------------------------------------------------------- +function ForumsGetTextDisplay(%text, %offSet) +{ + %msgText = ""; + %rc = getRecordCount(%text); + + for(%i = %offSet; %i < %rc; %i++) + %msgText = %msgText @ getRecord(%text, %i) @ "\n"; + return %msgText; +} +//----------------------------------------------------------------------------- +function ForumsGoTopics(%direction) +{ +// ForumsTopicsList.direction = %direction; + ForumsTopicsList.MaxDate = ""; + ForumsTopicsList.MinDate = ""; + ForumShell.setTitle($ForumsConnecting); + ForumsThreadPane.setVisible(false); + ForumsTopicsPane.setVisible(true); + FO_RejectBtn.visible = false; + FO_EditBtn.visible = false; + FO_AcceptBtn.visible = false; + if ( ForumsTopicsList.rowCount() == 0 || ForumsTopicsList.refreshFlag ) + { + FM_NewTopic.setActive(true); + ForumShell.setTitle($ForumsConnecting); + ForumsGui.eid = schedule(250,ForumsGui,GetTopicsList); + } + else + ForumsTopicsList.updateReadStatus(); //looks at file if any posts have been added/edited/deleted... + ForumShell.setTitle("FORUMS: " @ getField(ForumsList.getRowTextbyID(ForumsList.getSelectedID()),0)); +} +//----------------------------------------------------------------------------- +function ForumsRefreshTopics() +{ + ForumsTopicsList.refreshFlag = true; +// ForumsMessageVector.clear(); +// ForumsMessageVector.tid = ""; + ForumsGui.eid = schedule(250,ForumsGui,GetTopicsList); +} +//----------------------------------------------------------------------------- +function ForumsMessageAddRow(%text) +{ + %rc = ForumsMessageList.rowCount(); + %isRead = getRecord( %text, 0 ); + %id = getRecord(%text, 1); + %parentId = getRecord(%text, 2); + %subject = getRecord(%text, 3); + %author = getField(getTextName(getRecord(%text, 4), 0), 0); + %authorName = getField(getRecord(%text,4),0); + %date = getRecord(%text, 5); + %ref = getRecord(%text, 6); + %oldRow = ForumsMessageList.getRowNumById(%id); + %selId = ForumsMessageList.getSelectedId(); + + if(!%selID) + { + %selID = ForumsGui.lastSelected; + ForumsGui.lastSelected = ""; + } + + if(%parentId) + { + for(%i = 0; %i < %rc; %i++) + { + // check for existing? + if(ForumsMessageList.getRowId(%i) == %parentId) + { + %parentRow = ForumsMessageList.getRowText(%i); + echo("Found parent"); + break; + } + } + %indentLevel = getField(%parentRow, 3) + 1; + %indentSpace = ""; + for(%j = 0; %j < %indentLevel; %j++) + %indentSpace = %indentSpace @ " "; + } + else + %indentSpace = ""; + + %rowText = %indentSpace @ %subject TAB %author TAB %date TAB %indentLevel TAB %parentId TAB %ref TAB %authorName; + + if(%oldRow != -1) //if there's a rownumber - message exists + { + ForumsMessageList.removeRow(%oldRow); + ForumsMessageList.addRow(%id, %rowText, %oldRow); + } + else if(!%parentId) //if a first post + { + ForumsMessageList.addRow(%id, %rowText, 0); + } + else //continue from %i + { + for(%i++; %i < %rc; %i++) + { + %row = ForumsMessageList.getRowText(%i); + while(%row !$= "") + { + %rowParent = getField(%row, 4); + if(%rowParent == %parentId) + break; + + %row = ForumsMessageList.getRowTextById(%rowParent); + } + if(%row $= "") + break; + } + if(%i <= %rc) + ForumsMessageList.addRow(%id, %rowText, %i); + else + ForumsMessageList.addRow(%id, %rowText); + } + ForumsMessageList.setRowStyleById( %id, !%isRead ); + +} +//----------------------------------------------------------------------------- +function ForumsNewTopic() +{ + if(ForumsList.getSelectedID()==105) + { + $NewsCategory = ""; + $NewsTitle = ""; + Canvas.pushDialog(NewsPostDlg); + NewsPostDlg.postId = -1; + NewsPostBodyText.setValue(""); + } + else + { + $ForumsSubject = ""; + Canvas.pushDialog( ForumsComposeDlg ); + ForumsBodyText.setValue( "" ); + ForumsComposeDlg.parentPost = 0; + ForumsComposeDlg.action = "Post"; + } +} +//----------------------------------------------------------------------------- +function ForumsNext() +{ + %Currow = ForumsMessageList.getSelectedRow(); + if( %Currow < ForumsMessageList.rowCount() ) + ForumsMessageList.setSelectedRow( %Currow + 1 ); +} +//----------------------------------------------------------------------------- +function ForumsOpenThread(%tid) +{ + ForumsGui.eid = schedule(250,ForumsGui,GetTopicPosts); +} +//----------------------------------------------------------------------------- +function ForumsPost() +{ + if ( trim($ForumsSubject) $= "" ) + { + MessageBoxOK( "POST FAILED", "Your post cannot be accepted without text in the Subject line.", + "FP_SubjectEdit.makeFirstResponder(1);"); + return; + } + + ForumsTopicsList.refreshFlag = 1; + + TextCheck($ForumsSubject,ForumsGui); + if(!ForumsGui.textCheck) + { + if(ForumsComposeDlg.action !$= "Post" || ForumsComposeDlg.parentPost != 0) + { + %proxy = ForumsMessageList; + %newGroup = TopicsListGroup.getObject(ForumsTopicsList.getSelectedRow()); + %proxy.lastId = %newGroup.updateid; + %proxy.highestUpdate = %proxy.lastId; + %proxy.state = "updateCheck"; + } + else + { + %proxy = ForumsGui; + %proxy.state = "newTopic"; + } + + if(ForumsComposeDlg.action $= "Post" || ForumsComposeDlg.action $= "Reply") + { + %proxy = ForumsMessageList; + %proxy.state = "replyPost"; + %proxy.key = LaunchGui.key++; + canvas.SetCursor(ArrowWaitCursor); + DatabaseQuery(12,ForumsComposeDlg.forum TAB + ForumsComposeDlg.topic TAB + ForumsComposeDlg.parentPost TAB + $ForumsSubject TAB + ForumsBodyText.getValue(), + %proxy, %proxy.key); + } + else if(ForumsComposeDlg.action $="Edit") + { + %proxy = ForumsMessageList; + %proxy.key = LaunchGui.key++; + %proxy.state = "editPost"; + canvas.SetCursor(ArrowWaitCursor); + DatabaseQuery(13,ForumsComposeDlg.parentPost TAB + $ForumsSubject TAB + ForumsBodyText.getValue() + ,%proxy + ,%proxy.key); + } + else if(ForumsComposeDlg.action $="News") + { + %proxy.state = "postNews"; + %proxy.key = LaunchGui.key++; + canvas.SetCursor(ArrowWaitCursor); + DatabaseQuery(14,ForumsComposeDlg.post TAB + $ForumsSubject TAB + ForumsBodyText.getValue(), + %proxy,%proxy.key); + } + Canvas.popDialog(ForumsComposeDlg); + } + else + { + messageBoxOK("ERROR","Please remove any of the following characters contained in your subject line and resubmit" NL "" NL " : < > * ^ | ~ @ % & / \\ ` \""); + FP_SubjectEdit.makeFirstResponder(1); + } +} +//----------------------------------------------------------------------------- +function ForumsPrevious() +{ + %Currow = ForumsMessageList.getSelectedRow(); + if( %Currow > 0 ) + ForumsMessageList.setSelectedRow( %Currow - 1 ); +} +//----------------------------------------------------------------------------- +function ForumsRejectPost() //forumsDeletePost() +{ + ForumsGui.ebstat = FO_EditBtn.Visible; + ForumsGui.destat = FO_DeleteBtn.Visible; + ForumsMessageList.key = LaunchGui.key++; + ForumsMessageList.state = "deletePost"; + canvas.SetCursor(ArrowWaitCursor); + MessageBoxYesNo("CONFIRM", "Are you sure you wish to remove the selected post?", + "DatabaseQuery(14," @ ForumsComposeDlg.parentPost @ "," @ ForumsMessagelist @ "," @ ForumsMessagelist.key @ ");", "canvas.SetCursor(defaultCursor);"); +} +//----------------------------------------------------------------------------- +function ForumsReply() +{ + %text = ForumsMessageVector.getLineTextByTag(ForumsComposeDlg.parentPost); + ForumsGui.ebstat = FO_EditBtn.Visible; + ForumsGui.destat = FO_DeleteBtn.Visible; + $ForumsSubject = getRecord(%text, 3); + Canvas.pushDialog(ForumsComposeDlg); + ForumsBodyText.setValue(""); + QuoteBtn.setVisible(ForumsMessageVector.getNumLines() > 0); +// MessageBoxYesNo("QUOTE?","Include Topic Post Text?","GetQuotedText();","ForumsBodyText.setValue(\"\");"); + + ForumsComposeDlg.action = "Reply"; +} +//----------------------------------------------------------------------------- +function GetQuotedText() +{ + ForumsBodyText.setValue("\"" @ trim(ForumsText.getText()) @ "\"\n\n"); + ForumsBodyText.MakeFirstResponder(1); + ForumsBodyText.setCursorPosition(3600); +// ForumsBodyText.setCursorPosition(strLen(ForumsBodyTExt.getText())+5); +} +//----------------------------------------------------------------------------- +function LaunchForums( %forum, %topic ) +{ + ForumsGui.setVisible(false); + ForumsGui.launchForum = %forum; + ForumsGui.launchTopic = %topic; + forumsList.clear(); + if(trim(ForumsGui.launchTopic) $= "") + { + ForumsThreadPane.setVisible(false); + ForumsTopicsPane.setVisible(true); + } + + LaunchTabView.viewTab( "FORUMS", ForumsGui, 0 ); +} +//----------------------------------------------------------------------------- +function GetForumsList() +{ + ForumsList.clear(); + ForumsGui.onWake(); +} +//----------------------------------------------------------------------------- +function GetTopicsList() +{ + ForumsGui.key = LaunchGui.key++; + ForumShell.setTitle($ForumsGetTopics); + ForumsGui.state = "getTopicList"; + ForumsTopicsList.clear(); + canvas.SetCursor(ArrowWaitCursor); + ForumsTopicsList.clearList(); + DatabaseQueryArray(8,200,ForumsComposeDlg.forum,ForumsGui,ForumsGui.key); + ForumsTopicsList.refreshFlag = 0; +} +//----------------------------------------------------------------------------- +function GetTopicPosts() +{ + ForumsGui.key = LaunchGui.key++; + ForumShell.setTitle($ForumsGetPosts); + ForumsGui.state = "getPostList"; + canvas.SetCursor(ArrowWaitCursor); + + ForumsThreadPane.setVisible(true); + ForumsTopicsPane.setVisible(false); + ForumsText.setValue(""); + + FO_TopicText.setValue(strupr(getField(ForumsTopicsList.getRowTextByID(ForumsComposeDlg.Topic),0))); + if(!ForumsComposeDlg.Topic) + ForumsComposeDlg.topic = ForumsTopicsList.getSelectedID(); + + ForumsMessageList.loadCache(getField(ForumsList.getRowTextByID(ForumsList.getSelectedID()),1)); + if(ForumsMessageList.lastID == 0) + { + ForumsMessageVector.clear(); + ForumsMessageList.clear(); + } + DatabaseQueryArray(9,0,ForumsComposeDlg.Topic TAB ForumsMessageList.lastID,ForumsGui,ForumsGui.key); +} +//----------------------------------------------------------------------------- +//-- ForumsGui --------------------------------------------------------------- +//----------------------------------------------------------------------------- +function ForumsGui::onAdd( %this ) +{ + %this.initialized = false; +} +//----------------------------------------------------------------------------- +function ForumsGui::onWake(%this) +{ + // First time only: + if ( !%this.initialized ) + { + FM_NewTopic.setActive(false); + ForumsThreadPane.setVisible(false); + ForumsTopicsPane.setVisible(true); + ForumsMessageList.thread = ""; + ForumsMessageList.lastId = ""; + // Both panes should have the same minimum extents... + %minExtent = FO_MessagePane.getMinExtent(); + FO_Frame.frameMinExtent( 0, firstWord( %minExtent ), restWords( %minExtent ) ); + FO_Frame.frameMinExtent( 1, firstWord( %minExtent ), restWords( %minExtent ) ); + %this.initialized = true; + } + Canvas.pushDialog(LaunchToolbarDlg); + if ( ForumsList.rowCount() == 0) + { + ForumsGui.key = LaunchGui.key++; + ForumShell.setTitle($ForumsConnecting); + ForumsGui.state = "getForumList"; + canvas.SetCursor(ArrowWaitCursor); + DatabaseQueryArray(7,200,"",ForumsGui,ForumsGui.key); + } + // Make these buttons inactive until a message is selected: + FO_ReplyBtn.setActive( false ); + FO_NextBtn.setActive( false ); + FO_PreviousBtn.setActive( false ); +} +//----------------------------------------------------------------------------- +function ForumsGui::onSleep(%this) +{ + Canvas.popDialog(LaunchToolbarDlg); + // Stop the scheduled refreshes: + cancel( %this.messageRefresh ); +} +//----------------------------------------------------------------------------- +function ForumsGui::setKey( %this, %key ) +{ +} +//----------------------------------------------------------------------------- +function ForumsGui::onClose( %this, %key ) +{ +} +//----------------------------------------------------------------------------- +function ForumsGui::onDatabaseQueryResult(%this,%status,%resultString,%key) +{ + if(%this.key != %key) + return; + echo("RECV: " @ %status TAB %resultString); + if(getField(%status,0)==0) + { + switch$(%this.state) + { + case "getForumList": + if(getField(%resultString,0)>0) + { + %this.forumCount = -1; + ForumShell.setTitle($ForumsGetForums @ ": " @ getField(%resultString,0)); + %this.state = "ForumList"; + ForumsList.clear(); + } + else + { + %this.state = "done"; + MessageBoxOK("NO DATA","No Forums found"); + } + case "getTopicList": + if(getField(%resultString,0)>0) + { + ForumShell.setTitle($ForumsGetTopics @ ": " @ getField(%resultString,0)); + %this.state = "TopicList"; + } + else + { + %this.state = "done"; + ForumsTopicsList.updateReadStatus(); + } + + case "getPostList": + %statFlag = getField(%status,2); + %forumFlag = getField(ForumsList.getRowTextbyId(ForumsList.getSelectedID()),1); + %forumID = getField(ForumsList.getRowTextById(ForumsList.getSelectedID()),2); + %forumTID = ForumsTopicsList.getSelectedID(); + +// if(%statFlag >= %forumFlag) + %this.bflag = %statFlag; +// else +// %this.bflag = %forumFlag; + + switch$ ( %this.bflag ) + { + case 0: + FO_RejectBtn.visible = false; + FO_EditBtn.visible = false; + case 1: + FO_RejectBtn.visible = false; + FO_EditBtn.visible = false; + case 2: + switch(%forumID) + { + case 1402: + FO_AcceptBtn.visible = true; + FO_RejectBtn.text = "REJECT"; + FO_RejectBtn.visible = true; + FO_EditBtn.visible = true; + FO_AcceptBtn.text = "ACCEPT"; + default: + FO_RejectBtn.text = "DELETE"; + FO_RejectBtn.visible = true; + FO_EditBtn.visible = true; + } + case 3: + switch(%forumID) + { + case 1402: + FO_AcceptBtn.visible = true; + FO_RejectBtn.text = "REJECT"; + FO_RejectBtn.visible = true; + FO_EditBtn.visible = true; + FO_AcceptBtn.text = "ACCEPT"; + default: + FO_RejectBtn.text = "DELETE"; + FO_RejectBtn.visible = true; + FO_EditBtn.visible = true; + } + case 4: + switch(%forumID) + { + case 1402: + FO_AcceptBtn.visible = true; + FO_RejectBtn.text = "REJECT"; + FO_RejectBtn.visible = true; + FO_EditBtn.visible = true; + FO_AcceptBtn.text = "ACCEPT"; + default: + FO_RejectBtn.text = "DELETE"; + FO_RejectBtn.visible = true; + FO_EditBtn.visible = true; + } + } + if(getField(%resultString,0)>0) + { + ForumShell.setTitle($ForumsGetPosts @ ": " @ getField(%resultString,0)); + %this.state = "PostList"; + if(!ForumsGui.visible) + ForumsGui.setVisible(true); + } + else + { + %this.state = "done"; + ForumsMessageList.loadCache(%forumID); + } + case "postNews": + %this.state = "done"; + messageBoxOK("CONFIRMED","Your News Reply has been submitted"); + } + } + else if (getSubStr(getField(%status,1),0,9) $= "ORA-04061") + { + %this.state = "error"; + MessageBoxOK("ERROR","There was an error processing your request, please wait a few moments and try again."); + } + else + { + %this.state = "error"; + MessageBoxOk("ERROR",getField(%status,1)); + } + ForumShell.setTitle("FORUMS: " @ getField(ForumsList.getRowTextbyID(ForumsList.getSelectedID()),0)); + canvas.SetCursor(defaultCursor); +} +//----------------------------------------------------------------------------- +function ForumsGui::onDatabaseRow(%this,%row,%isLastRow,%key) +{ + if(%this.key != %key) + return; + echo("RECV: " @ %row); + %forumTID = getField(ForumsList.getRowTextbyId(ForumsList.getSelectedID()),2); + switch$(%this.state) + { + case "ForumList": + ForumsList.addRow(getField(%row,0),getField(%row,1) TAB getField(%row,2) TAB getField(%row,3)); + if ( %isLastRow ) //is last line + { + if ( ForumsGui.launchForum !$= "" ) + { + ForumsList.selectForum( ForumsGui.LaunchForum ); + ForumsGui.LaunchForum = ""; + } + else + ForumsList.setSelectedRow( 1 ); + } + case "TopicList": + %id = getField(%row, 1); + %topic = getField(%row, 2); + %postCount = getField(%row, 3); + %date = getField(%row, 6); + %name = getField(%row, 8); + %hasDeletes = getField(%row,12); + %slevel = getField(%row,13); + %maxUpdateId = getField(%row,14); + ForumsTopicsList.addRow( %id, %topic TAB %postCount TAB %name TAB %date TAB %hasDeletes); + ForumsTopicsList.addTopic( %id, %topic, %date, %maxUpdateID, %slevel, %row); + if ( %isLastRow ) //is last line + { + %this.state = "done"; + ForumShell.setTitle("FORUMS: " @ getField(ForumsList.getRowTextbyID(ForumsList.getSelectedID()),0)); + ForumsTopicsList.updateReadStatus(); + %this.refreshFlag = false; + error("TID: " @ ForumsMessageVector.tid); + if ( ForumsGui.LaunchTopic !$= "" ) + { + ForumsTopicsList.selectTopic( ForumsGui.LaunchTopic ); + ForumsGui.LaunchTopic = ""; + } + else if( ForumsMessageVector.tid !$= "" ) + ForumsTopicsList.setSelectedbyId(ForumsMessageVector.tid); + } + case "PostList": + %isAuthor = getField(%row,0); + %postId = getField(%row,2); + %parent = getField(%row,3); + %high = getField(%row,4); + %poster = getFields(%row,5,8); + %date = getField(%row,10); + %topic = getField(%row,13); + %body = getFields(%row,14); + if ( %high > ForumsMessageList.highestUpdate ) + ForumsMessageList.highestUpdate = %high; + if(%parent == %postId) + %parent = 0; + + %text = 0 NL + %postId NL + %parent NL + %topic NL + %poster NL + %date NL + %isAuthor NL + %body; + + %li = ForumsMessageVector.getLineIndexByTag(%postId); + if(%li != -1) + ForumsMessageVector.deleteLine(%li); + + if(ForumsMessageList.allRead && DateStrCompare(ForumsMessageList.lastDate,%date)) + %text = setRecord( %text, 0, "1" ); + + ForumsMessageVector.pushBackLine(%text, %postId); + if(%isLastRow) + { + ForumsMessageVector.tid = ForumsTopicsList.getSelectedID(); + CacheForumTopic(); + ForumsMessageList.loadCache(ForumsTopicsList.getSelectedID()); + } + } +} +//----------------------------------------------------------------------------- +//-- ForumsList -------------------------------------------------------------- +//----------------------------------------------------------------------------- +function ForumsList::onSelect(%this) +{ + if(isEventPending(ForumsGUI.eid)) + cancel(ForumsGui.eid); + FM_NewTopic.setActive(true); + ForumsComposeDlg.forum = ForumsList.getSelectedID(); + ForumShell.setTitle("FORUMS: " @ getField(ForumsList.getRowTextbyID(ForumsList.getSelectedID()),0)); + ForumsGui.eid = schedule(250,ForumsGui,GetTopicsList); +} +//----------------------------------------------------------------------------- +function ForumsList::connectionTerminated( %this, %key ) +{ + ForumShell.setTitle("FORUMS: " @ getField(ForumsList.getRowTextbyID(ForumsList.getSelectedID()),0)); + if ( %key != %this.key ) + return; +} +//----------------------------------------------------------------------------- +function ForumsList::selectForum( %this, %forum ) +{ + %rowCount = %this.rowCount(); + for ( %row = 0; %row < %rowCount; %row++ ) + { + if ( %forum $= getField( %this.getRowText( %row ), 0 ) ) + { + %this.setSelectedRow( %row ); + break; + } + } + if ( %row == %rowCount ) + warn( "\"" @ %forum @ "\" forum not found!" ); +} +//----------------------------------------------------------------------------- +//-- ForumsTopicsList -------------------------------------------------------- +//----------------------------------------------------------------------------- +function ForumsTopicsList::onAdd( %this ) +{ + new GuiControl(TopicsPopupDlg) { + profile = "GuiModelessDialogProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + + new ShellPopupMenu( TopicsPopupMenu ) { + profile = "ShellPopupProfile"; + position = "0 0"; + extent = "0 0"; + minExtent = "0 0"; + visible = "1"; + maxPopupHeight = "200"; + noButtonStyle = "1"; + }; + }; + + // Add the columns from the prefs: + for ( %i = 0; %i < $TopicColumnCount; %i++ ) + { + %this.addColumn( %i, + $TopicColumnName[%i], + $pref::Topics::Column[%i], + firstWord( $TopicColumnRange[%i] ), + getWord( $TopicColumnRange[%i], 1 ), + $TopicColumnFlags[%i] ); + } + + %this.setSortColumn( $pref::Topics::SortColumnKey ); + %this.setSortIncreasing( $pref::Topics::SortInc ); + // Add the "Unread" style: + %this.addStyle( 1, $ShellBoldFont, $ShellFontSize, "80 220 200", "30 255 225", "10 60 40" ); + // Add the "Ignored" style: + %this.addStyle( 2, $ShellFont, $ShellFontSize, "100 100 100", "100 100 000", "100 100 100" ); +} +//----------------------------------------------------------------------------- +function ForumsTopicsList::AddTopic(%this, %id, %topicname, %date, %mid, %slevel, %vline) +{ + if(!isObject(TopicsListGroup)) + new SimGroup(TopicsListGroup); + %topic = new scriptObject() + { + className = "TTopic"; + Id = %id; + name = %topicname; + date = %date; + updateid = %mid; + slevel = %slevel; + rcvrec = %vline; + }; + TopicsListGroup.Add(%topic); +} +//----------------------------------------------------------------------------- +function ForumsTopicsList::ClearList() +{ + if(isObject(TopicsListGroup)) + TopicsListGroup.Delete(); +} +//----------------------------------------------------------------------------- +function ForumsTopicsList::onRightMouseDown( %this, %column, %row, %mousePos ) +{ + ForumsTopicsList.setSelectedRow(%row); + TopicsPopupMenu.topic = TopicsListGroup.getObject(%row); + if ( trim(TopicsPopupMenu.topic.name) !$= "") + { + Canvas.pushDialog(TopicsPopupDlg); + TopicsPopupMenu.position = %mousePos; + TopicsPopupDlg.onWake(); + TopicsPopupMenu.forceOnAction(); + } + else + error( "Locate Error!" ); +} +//----------------------------------------------------------------------------- +function TopicsPopupDlg::onWake( %this ) +{ + ForumsGui.TDialogOpen = true; + TopicsPopupMenu.clear(); + TopicsPopupMenu.add( TopicsPopupMenu.topic.name SPC ": RESET CACHE", 0 ); + TopicsPopupMenu.add( TopicsPopupMenu.topic.name SPC ": IGNORE THIS TOPIC",1); + TopicsPopupMenu.add( TopicsPopupMenu.topic.name SPC ": FLAG ALL READ",2); + Canvas.rePaint(); +} +//----------------------------------------------------------------------------- +function TopicsPopupMenu::onSelect( %this, %id, %text ) +{ + echo("TPM RECV: " @ %id TAB %text); + switch( %id ) + { + case 0: // 0 Reset Cache + ForumsMessageVector.clear(); + ForumsMessageVector.dump( $ForumCachePath @ "tpc" @ TopicsPopupMenu.topic.id , 0 TAB $ForumCacheVersion TAB 0 TAB "2000-12-31 12:01am"); + ForumsMessageVector.updateID = 0; + ForumsTopicsList.UpdateReadStatus(); +// ForumsRefreshTopics(); + case 1: // 1 Flag TO IGNORE (ok, 45 years...) + ForumsMessageVector.clear(); + ForumsMessageVector.dump( $ForumCachePath @ "tpc" @ TopicsPopupMenu.topic.id , 99999999 TAB $ForumCacheVersion TAB 1 TAB "2045-12-31 12:01am"); + ForumsMessageVector.updateID = 99999999; + ForumsTopicsList.UpdateReadStatus(); +// ForumsRefreshTopics(); + case 2: // 2 Flag To ALL Read + ForumsMessageVector.updateID = 99999999; + %cacheFile = $ForumCachePath @ "tpc" @ TopicsPopupMenu.topic.id; + if(ForumsMessageVector.tid == TopicsPopupMenu.topic.id) + { + new MessageVector(TempVector); + %numLines = ForumsMessageVector.getNumLines(); + for(%x=0;%x<%numLines;%x++) + { + %lineText = ForumsMessageVector.getLineText( %x ); + %postID = getRecord( %lineText, 1 ); + %lineText = setRecord(%lineText,0,"1"); + TempVector.pushBackLine(%lineText, %postID); + } + ForumsMessageVector.clear(); + for ( %line = 0; %line < %numLines; %line++ ) + { + %lineText = TempVector.getLineText( %line ); + %postID = getRecord( %lineText, 1 ); + ForumsMessageVector.pushBackLine( %lineText, %postID ); + } + TempVector.delete(); + TopicsPopupMenu.topic.updateId = 0; + CacheForumTopic(); + ForumsTopicsList.UpdateReadStatus(); +// ForumsRefreshTopics(); + } + else + { + ForumsMessageVector.clear(); + ForumsMessageVector.tid = TopicsPopupMenu.topic.id; + %file = new FileObject(); + if ( %file.openForRead( %cacheFile ) ) + { + if ( !%file.isEOF() ) + { + // First line is the update id: + %line = %file.readLine(); + if ( getField( %line, 1 ) == $ForumCacheVersion ) + { + if ( !%file.isEOF() ) + { + // Second line is the message count: + %count = %file.readLine(); + + // Now push all of the messages into the message vector: + while ( !%file.isEOF() ) + { + %line = %file.readLine(); + %postId = firstWord( %line ); + %text = collapseEscape( restWords( %line ) ); + // RESET THE FIELDS IF THE POST IS BEING VISITED BY THE AUTHOR. + %text = setRecord( %text, 0, "1" ); + ForumsMessageVector.pushBackLine( %text, %postId ); + } + } + } + else + { + } + } + else + { + } + %file.close(); + TopicsPopupMenu.topic.updateId = 0; + CacheForumTopic(); + } + else + { + ForumsMessageVector.clear(); + %latest = GetField(ForumsTopicsList.getRowText(ForumsTopicsList.getSelectedRow()),3); + %newGroup = TopicsListGroup.getObject(ForumsTopicsList.getSelectedRow()); +// ForumsMessageList.lastID = %newGroup.updateid; + ForumsMessageList.lastID = 0; + ForumsMessageVector.dump( %cacheFile , 0 TAB $ForumCacheVersion TAB 1 TAB %latest); + } + %file.delete(); + ForumsTopicsList.UpdateReadStatus(); +// ForumsRefreshTopics(); + } + } + canvas.popDialog(TopicsPopupDlg); +} +//----------------------------------------------------------------------------- +function TopicsPopupDlg::onSleep(%this) +{ + ForumsGui.TDialogOpen = false; +} +//----------------------------------------------------------------------------- +function ForumsTopicsList::onSetSortKey( %this, %sortKey, %isIncreasing ) +{ + $pref::Topics::SortColumnKey = %sortKey; + $pref::Topics::SortInc = %isIncreasing; +} +//----------------------------------------------------------------------------- +function ForumsTopicsList::onColumnResize( %this, %column, %newSize ) +{ + $pref::Topics::Column[%column] = %newSize; +} +//----------------------------------------------------------------------------- +function ForumsTopicsList::onSelect(%this) +{ + if(isEventPending(ForumsGUI.eid)) + cancel(ForumsGui.eid); + ForumsComposeDlg.topic = %this.getSelectedID(); +} +//----------------------------------------------------------------------------- +function ForumsTopicsList::selectTopic( %this, %topic ) +{ + %rowCount = %this.rowCount(); + for ( %row = 0; %row < %rowCount; %row++ ) + { + if ( %topic $= getField( %this.getRowText( %row ), 0 ) ) + { + %this.setSelectedById( %this.getRowId( %row ) ); + break; + } + } + if(%this.getSelectedID > -1) + getTopicPosts(); + else + if ( %row == %rowCount ) + warn( "\"" @ %topic @ "\" Topic not found!" ); +} +//----------------------------------------------------------------------------- +function ForumsTopicsList::updateReadStatus( %this ) +{ + for ( %row = 0; %row < %this.rowCount(); %row++ ) + { + %style = 1; // unread + %cacheFile = $ForumCachePath @ "tpc" @ %this.getRowId( %row ); + %file = new FileObject(); + if ( %file.openForRead( %cacheFile ) ) + { + %header = %file.readLine(); + %topicDate = getField( %this.getRowText( %row ), 3 ); + %updateID = getField(%header,0); + if ( getField( %header, 1 ) == $ForumCacheVersion // Must have same cache version + && getField( %header, 2 ) == 1 // "all read" flag must be set + && strcmp( getField( %header, 3 ), %topicDate ) >= 0 + && %updateID !$= "99999999" ) // date must be current + %style = 0; // read + else if (%updateID $= "99999999") + %style = 2; //ignored + else + %style = 1; + } + %file.delete(); + %this.setRowStyle( %row, %style ); + } +} +//----------------------------------------------------------------------------- +//-- ForumsMessageList ------------------------------------------------------- +//----------------------------------------------------------------------------- +function ForumsMessageList::onAdd( %this ) +{ + // Add columns from the prefs: + for ( %i = 0; %i < $ForumColumnCount; %i++ ) + %this.addColumn( %i, + $ForumColumnName[%i], + $pref::Forum::Column[%i], + firstWord( $ForumColumnRange[%i] ), + getWord( $ForumColumnRange[%i], 1 ) ); + // We want no sorting done on this list -- leave them in the order that they are entered. + // Add the "Unread" style: + %this.addStyle( 1, $ShellBoldFont, $ShellFontSize, "80 220 200", "30 255 225", "0 0 0" ); +} +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +function ForumsMessageList::connectionTerminated(%this, %key) +{ + ForumShell.setTitle("FORUMS: " @ getField(ForumsList.getRowTextbyID(ForumsList.getSelectedID()),0)); +} +//----------------------------------------------------------------------------- +function ForumsMessageList::loadCache( %this, %forumTID) +{ + ForumsMessageVector.clear(); + ForumsMessageList.clear(); + ForumsMessageVector.tid = %forumTID; + error("BFLAG: " @ ForumsGui.bflag TAB %forumTID); + switch( ForumsGui.bflag ) + { + case 0: + FO_RejectBtn.visible = false; + FO_EditBtn.visible = false; + case 1: + FO_RejectBtn.visible = false; + FO_EditBtn.visible = false; + case 2: + switch(%forumTID) + { + case 1402: + FO_AcceptBtn.visible = true; + FO_RejectBtn.text = "REJECT"; + FO_RejectBtn.visible = true; + FO_EditBtn.visible = true; + FO_AcceptBtn.visible = true; + default: + FO_RejectBtn.text = "DELETE"; + FO_RejectBtn.visible = true; + FO_EditBtn.visible = true; + } + case 3: + switch(%forumTID) + { + case 1402: + FO_AcceptBtn.visible = true; + FO_RejectBtn.text = "REJECT"; + FO_RejectBtn.visible = true; + FO_EditBtn.visible = true; + FO_AcceptBtn.visible = true; + default: + FO_RejectBtn.text = "DELETE"; + FO_RejectBtn.visible = true; + FO_EditBtn.visible = true; + } + case 4: + switch(%forumTID) + { + case 1402: + FO_AcceptBtn.visible = true; + FO_RejectBtn.text = "REJECT"; + FO_RejectBtn.visible = true; + FO_EditBtn.visible = true; + FO_AcceptBtn.visible = true; + default: + FO_RejectBtn.text = "DELETE"; + FO_RejectBtn.visible = true; + FO_EditBtn.visible = true; + } + } + + %this.lastId = 0; + %this.highestUpdate = %this.lastID; + %cacheFile = $ForumCachePath @ "tpc" @ ForumsComposeDlg.topic; + %file = new FileObject(); + if ( %file.openForRead( %cacheFile ) ) + { +// %newGroup = TopicsListGroup.getObject(ForumsTopicsList.getSelectedRow()); + if ( !%file.isEOF() ) + { + // First line is the update id: + %line = %file.readLine(); + if ( getField( %line, 1 ) == $ForumCacheVersion ) + { + %this.lastID = getField(%line,0); + %this.highestUpdate = %this.lastID; + %this.allRead = getField(%line,2); + %this.lastDate = getField(%line,3); + if ( !%file.isEOF() ) + { + // Second line is the message count: + %line = %file.readLine(); + %count = getField( %line, 0 ); + + // Now push all of the messages into the message vector: + while ( !%file.isEOF() ) + { + %line = %file.readLine(); + %postId = firstWord( %line ); + %text = collapseEscape( restWords( %line ) ); + %date = getRecord(%text,5); + %isRead = getRecord(%text,0); + + // RESET THE FIELDS IF THE POST IS BEING VISITED BY THE AUTHOR. + %ref = getRecord(%text,6); + if(%ref > 1) + { + switch(%forumTID) + { + case 1402: + FO_AcceptBtn.visible = false; + FO_RejectBtn.text = "REJECT"; + FO_RejectBtn.visible = false; + FO_EditBtn.visible = false; + FO_AcceptBtn.visible = false; + default: + FO_RejectBtn.text = "DELETE"; + FO_RejectBtn.visible = true; + FO_EditBtn.visible = true; + } + } +// error( "** ADDING MESSAGE FROM CACHE - " @ %text @ " **" ); + if(%this.allRead && DateStrCompare(%this.lastDate,%date)) + %text = setRecord( %text, 0, "1" ); + + echo( "** ADDING MESSAGE FROM CACHE - " @ %postId @ " **" ); + ForumsMessageVector.pushBackLine( %text, %postId ); + } + } + } + } + } + %file.delete(); + + %numLines = ForumsMessageVector.getNumLines(); + for(%x=0;%x<%numLines;%x++) + { + %lineText = ForumsMessageVector.getLineText( %x ); + ForumsMessageAddRow( %lineText ); + } + if(ForumsMessageList.getSelectedId() == -1) + ForumsMessageList.setSelectedRow(0); +} +//----------------------------------------------------------------------------- +function ForumsMessageList::onColumnResize( %this, %column, %newSize ) +{ + $pref::Forum::Column[%column] = %newSize; +} +//----------------------------------------------------------------------------- +function ForumsMessageList::onSelect(%this, %id, %text) +{ + + if(!ForumsMessageList.getSelectedID()) + %parentId = 0; + else + %parentId = ForumsMessageList.getSelectedId(); + + ForumsComposeDlg.parentPost = %parentId; + %rawText = ForumsMessageVector.getLineTextByTag( ForumsComposeDlg.parentPost ); + %offSet = 7; + if ( getRecord( %rawText, 0 ) $= "0" ) + { + // Set the "read" flag: + %this.setRowStyleById( %id, 0 ); + %line = ForumsMessageVector.getLineIndexByTag( %parentId ); + ForumsMessageVector.deleteLine( %line ); + %rawText = setRecord( %rawText, 0, "1" ); + ForumsMessageVector.pushBackLine( %rawText, %parentId ); + CacheForumTopic(); + } + %text = ForumsGetTextDisplay( %rawText,%offSet ); + ForumsText.setValue(%text); + FO_ReplyBtn.setActive( true ); + FO_NextBtn.setActive( true ); + FO_PreviousBtn.setActive( true ); + %ref = getRecord(%rawText,6); + if(%ref > 0 && %ref > ForumsGui.bflag) //if this is the author + { + switch(getField(ForumsList.getRowTextbyID(ForumsList.getSelectedID()),2)) + { + case 1402: + FO_AcceptBtn.visible = false; + FO_RejectBtn.text = "REJECT"; + FO_RejectBtn.visible = false; + FO_EditBtn.visible = false; + FO_AcceptBtn.visible = false; + default: + FO_RejectBtn.text = "DELETE"; + FO_RejectBtn.visible = true; + FO_EditBtn.visible = true; + } + } + else if(ForumsGui.bflag == 0) + { + switch(getField(ForumsList.getRowTextbyID(ForumsList.getSelectedID()),2)) + { + case 1402: + FO_AcceptBtn.visible = false; + FO_RejectBtn.text = "REJECT"; + FO_RejectBtn.visible = false; + FO_EditBtn.visible = false; + FO_AcceptBtn.visible = false; + default: + FO_RejectBtn.text = "DELETE"; + FO_RejectBtn.visible = false; + FO_EditBtn.visible = false; + } + } + +} +//----------------------------------------------------------------------------- +function ForumsMessagelist::onDatabaseQueryResult(%this,%status,%resultString,%key) +{ + if(%this.key != %key) + return; + echo("RECV: " @ %status TAB %resultString); + if(getField(%status,0)==0) + { + switch$(%this.state) + { + case "replyPost": + %this.state = "done"; + ForumsOpenThread(); + case "editPost": + %this.state = "done"; + %postId = getField( %status, 2 ); + %index = ForumsMessageVector.getLineIndexByTag( %postId ); + %text = ForumsMessageVector.getLineTextByTag( %postId ); + %parent = getRecord( %text, 2 ); + ForumsMessageVector.deleteLine( %index ); + %text = setRecord(%text,0,"1"); + ForumsMessageVector.pushBackLine(%text, %postID); + CacheForumTopic(); + case "deletePost": + %this.state = "done"; + %postId = getField( %status, 2 ); + %index = ForumsMessageVector.getLineIndexByTag( %postId ); + %text = ForumsMessageVector.getLineTextByTag( %postId ); + %parent = getRecord( %text, 2 ); + ForumsTopicsList.refreshFlag = true; + ForumsMessageVector.deleteLine( %index ); + CacheForumTopic(); +// ForumsMessageList.clear(); +// ForumsMessageList.loadCache(); + if ( %parent != 0 ) + { + %row = ForumsMessageList.getRowNumById( %postId ); + ForumsMessageList.removeRowById( %postId ); + if ( %row < ForumsMessageList.rowCount() ) + ForumsMessageList.setSelectedRow( %row ); + else + ForumsMessageList.setSelectedRow( %row - 1 ); + + %this.state = "done"; + ForumsOpenThread(); + } + else + { + ForumsTopicsList.refreshFlag = true; + ForumsGoTopics(0); + } + } + } + else if (getSubStr(getField(%status,1),0,9) $= "ORA-04061") + { + %this.state = "error"; + MessageBoxOK("ERROR","There was an error processing your request, please wait a few moments and try again."); + } + else + { + MessageBoxOK("ERROR",getFields(%status,1)); + } + canvas.SetCursor(DefaultCursor); +} diff --git a/base/scripts/weblinks.cs b/base/scripts/weblinks.cs new file mode 100644 index 0000000..f10486c --- /dev/null +++ b/base/scripts/weblinks.cs @@ -0,0 +1,20 @@ +addWebLink( "Tribes 2 Home Page", "www.tribes2.com" ); +addWebLink( "5 Assed Monkey", "www.5assedmonkey.com" ); +addWebLink( "Clan Happytyme", "www.happytyme.com" ); +//addWebLink( "ClanBase", "www.clanbase.com" ); +addWebLink( "Dopplegangers", "www.dopplegangers.com" ); +addWebLink( "Dutchbat Homeworld", "www.dutchbat-homeworld.com" ); +addWebLink( "Euro Tribesplayers", "www.euro-tribesplayers.com" ); +addWebLink( "eXtreme-Players", "www.eXtreme-players.de" ); +addWebLink( "Long Dongles", "www.longdongles.com" ); +addWebLink( "MaxBaud.Net", "www.maxbaud.net" ); +addWebLink( "NetGames UK", "www.nguk.net" ); +addWebLink( "PlanetStarSiege", "www.planetstarsiege.com" ); +addWebLink( "StrikeForce", "www.strikeforcecenter.com" ); +addWebLink( "TeamSound", "www.teamsound.com" ); +addWebLink( "Telepresence Heavy Assault Team", "www.that.co.nz" ); +addWebLink( "TribalWar", "www.tribalwar.com" ); +addWebLink( "TribesMaps", "www.tribesmaps.com" ); +addWebLink( "Tribes-Universe", "www.tribes-universe.com" ); +//addWebLink( "WirePlay", "www.wireplay.com.au" ); +//addWebLink( "Z Free", "games13.clear.net.nz" ); \ No newline at end of file diff --git a/base/scripts/webnews.cs b/base/scripts/webnews.cs new file mode 100644 index 0000000..ede3343 --- /dev/null +++ b/base/scripts/webnews.cs @@ -0,0 +1,419 @@ +$WebLinkCount = 0; + +function LaunchNews() +{ + LaunchTabView.viewTab( "NEWS", NewsGui, 0 ); +} +//----------------------------------------------------------------------------- +function NewsGui::onWake(%this) +{ + Canvas.SetCursor(ArrowWaitCursor); + Canvas.pushDialog(LaunchToolbarDlg); + %this.key = LaunchGui.key++; + %this.state = "status"; + %this.articleCount = 0; + %this.set = 1; // signifies the first (latest) set + NewsText.setValue(""); + %this.caller = "GETNEWS"; + DatabaseQueryArray(0,0,"0" TAB "0",%this,%this.key); + // Fetch the message of the day: + NewsMOTDText.key = LaunchGui.key++; + NewsMOTDText.state = "isvalid"; + NewsMOTDText.lineCount = 0; + DatabaseQuery(0,"",NewsMOTDText,NewsMOTDText.key); + WebLinksMenu.setSelected( 0 ); + NewsPrevBtn.setActive( false ); + NewsNextBtn.setActive( false ); +} +//----------------------------------------------------------------------------- +function NewsGui::onSleep(%this) +{ + Canvas.popDialog(LaunchToolbarDlg); +} +//----------------------------------------------------------------------------- +function NewsGui::setKey( %this, %key ) +{ +} +//----------------------------------------------------------------------------- +function NewsGui::onClose( %this, %key ) +{ +} +//----------------------------------------------------------------------------- +function NewsGui::rebuildText(%this) +{ + NewsHeadlines.clear(); + for(%i = 0; %i < %this.articleCount; %i++) + { + %article = %this.article[%i]; + if(getField(%article,0)==1 || %this.acl > 2) + %editable = 1; + else + %editable = 0; + + %topicid = getField(%article,1); + %articleid = getField(%article, 2); + %postcount = getField(%article,3)-1; + %date = getField(%article,4); + %update_id = getField(%article,5); + %author_id = getField(%article,6); + %nameLink = getLinkName(getField(%article,8) TAB getField(%article,9) TAB getField(%article,10) TAB getField(%article,11),0); + %category = getField(%article, 12); + %topic = getField(%article, 13); + %body = getFields(%article,14); + %rc = getRecordCount(%body); + %atxt = ""; + if ( %editable ) + %editText = "[edit] [delete] [comments ("@%postcount@")]"; + else + %editText = "[comments ("@%postcount@"]"; + + for(%l = 0; %l < %rc; %l++) + %atxt = %atxt @ getRecord(%body,%l) @ "\n"; + + NewsHeadlines.addRow( %i, %topic ); + %text = %text @ "" @ + %topic @ " " @ %editText @ "\nPosted by: " @ %nameLink @ " on " @ %date NL + "\n" @ %atxt @ "\n\n"; + } + NewsText.setValue(%text); + %article = ""; +} +//----------------------------------------------------------------------------- +function NewsGui::onDatabaseQueryResult(%this, %status, %RowCount_Result, %key) +{ + if(%key != %this.key) + return; + echo("RECV: " @ %status); + %this.maxDate = " "; + %this.minDate = " "; + if(getField(%status,0)==0) + { + switch$(%this.caller) + { + case "GETNEWS": // record count + %this.acl = getField(%status,3); + %this.ttlRecords = getField( %status,2 ); + %this.recordCount = getField( %RowCount_Result,0 ); + %this.pages = 0; + // RecordSet = least of 24 or rows returned + if(getField(%RowCount_Result,0) < 24) + %this.recordSet = getField(%RowCount_Result,0); + else + %this.recordSet = 24; + + // Calculate the Number of Pages + for( %temprec = %this.ttlRecords; %temprec > 0; %temprec -= 24 ) + { + %this.pages++; + } + // SET = which page we are on + if( %this.set == 1 && %this.pages >= 2 ) + { + NewsNextBtn.setActive( true ); + NewsPrevBtn.setActive( false ); + } + else if ( %this.set == %this.pages && %this.pages >= 2 ) + { + NewsNextBtn.setActive( false ); + NewsPrevBtn.setActive( true ); + } + else if (%this.set == %this.pages && %this.pages <= 1) + { + NewsNextBtn.setActive( false ); + NewsPrevBtn.setActive( false ); + } + else + { + NewsNextBtn.setActive( true ); + NewsPrevBtn.setActive( true ); + } + default: // result string + } + } + else if (getSubStr(getField(%status,1),0,9) $= "ORA-04061") + { + %this.state = "error"; + MessageBoxOK("ERROR","There was an error processing your request, please wait a few moments and try again."); + } + else + { + %this.state = "halt"; + MessageBoxOK("NOTICE",getField(%status,1)); + } + Canvas.setCursor(DefaultCursor); +} +//----------------------------------------------------------------------------- +function NewsGui::onDatabaseRow(%this, %row,%isLastRow,%key) +{ + if ( %key != %this.key ) + return; + echo("RECV: " @ %row); + %this.article[%this.articleCount] = %row; + %this.recordSet--; + if ( %this.articleCount == 0 ) + { + %this.maxDate = getField( %this.article[%this.articleCount],4); + %this.Max = getField(%this.article[%this.articleCount],5); + } + + if ( %this.recordSet == 0 ) + { + %this.minDate = getField( %this.article[%this.articleCount],4); + %this.Min = getField(%this.article[%this.articleCount],5); + } + %this.recordCount--; + %this.articleCount++; + %this.rebuildText(); + canvas.setCursor(DefaultCursor); + return; +} +//----------------------------------------------------------------------------- +function PostNews() +{ + $NewsCategory = ""; + $NewsTitle = ""; + Canvas.pushDialog(NewsPostDlg); + NewsPostDlg.postId = -1; + NewsPostBodyText.setValue(""); +} +//----------------------------------------------------------------------------- +function NewsPostDlg::onWake( %this ) +{ + // Fill the category menu (should we get this from somewhere?): + NewsCategoryMenu.clear(); + NewsCategoryMenu.add( "General", 0 ); + NewsCategoryMenu.add( "Announcements", 1 ); + NewsCategoryMenu.add( "Events", 2 ); + NewsCategoryMenu.add( "Updates", 3 ); + if ( $NewsCategory !$= "" ) + { + %selId = NewsCategoryMenu.findText( $NewsCategory ); + if ( %selId <= 0 ) + %selId = 1; + } + else + %selId = 1; + NewsCategoryMenu.setSelected( %selId ); +} +//----------------------------------------------------------------------------- +function NewsCategoryMenu::onSelect( %this, %id, %text ) +{ + $NewsCategory = %text; +} +//----------------------------------------------------------------------------- +function PostNewsProcess() +{ + + NewsPostDlg.key = LaunchGui.key++; + if ( NewsPostDlg.postId == -1 ) + { + NewsPostDlg.state = "post"; + canvas.SetCursor(ArrowWaitCursor); + DatabaseQuery(1, NewsCategoryMenu.getSelected() TAB $NewsTitle TAB NewsPostBodyText.getValue(),NewsPostDlg,NewsPostDlg.key); + } + else + { + NewsPostDlg.state = "edit"; //tid.pid.aid.updid.cat.title.body + canvas.SetCursor(ArrowWaitCursor); + DatabaseQuery(2, NewsPostDlg.EditUrl TAB NewsCategoryMenu.getSelected() TAB $NewsTitle TAB NewsPostBodyText.getValue(),NewsPostDlg,NewsPostDlg.key); + } + Canvas.popDialog(NewsPostDlg); +} +//----------------------------------------------------------------------------- +function NewsPostDlg::onDatabaseQueryResult(%this, %status, %RowCount_Result, %key) +{ + if(%key != %this.key) + return; + echo("RECV: " @ %status); + if(getField(%status,0)==0) + { + switch$(%this.state) + { + case "post": + %this.state = "OK"; + MessageBoxOK("NOTICE","Your article has been submitted. You may need to refresh your Browser."); + case "edit": + %this.state = "OK"; + MessageBoxOK("NOTICE","Article Updated. You may need to refresh your Browser."); + case "delete": + %this.state = "OK"; + MessageBoxOK("NOTICE","Article Deleted. You may need to refresh your Browser."); + } + } + else if (getSubStr(getField(%status,1),0,9) $= "ORA-04061") + { + %this.state = "error"; + MessageBoxOK("ERROR","There was an error processing your request, please wait a few moments and try again."); + } + else + { + %this.state = "ERROR"; + MessageBoxOK( "ERROR", getField(%status,1)); + } + + if(%this.state $= "OK") + NewsGui.onWake(); + + canvas.setCursor(DefaultCursor); +} +//----------------------------------------------------------------------------- +function NewsText::onURL(%this, %url) +{ + canvas.SetCursor(ArrowWaitCursor); + switch$(getField(%url,0)) + { + case "editnews": + %txt = NewsGui.article[getField(%url,1)]; + $NewsCategory = getField(%txt, 12); + $NewsTitle = getField(%txt, 13); + %body = getFields(%txt,14); + %rc = getRecordCount(%body); + for(%i = 0; %i < %rc; %i++) + %rtxt = %rtxt @ getRecord(%body, %i) @ "\n"; + + NewsPostBodyText.setValue(%rtxt); + NewsPostDlg.postId = getField(%url,2); + NewsPostDlg.EditUrl = getFields(%url,2); + Canvas.pushDialog( NewsPostDlg ); + + case "deletenews": + NewsPostDlg.key = LaunchGui.key++; + NewsPostDlg.state = "delete"; + DatabaseQuery(3,getFields(%url,2), NewsPostDlg, NewsPostDlg.Key); + + case "topiclink": + %articleId = getField(%url,2); + MessageBoxOK("COMMENTS","To Post comments for any news article, go to the Forums, select the News Forum and then select the Topic you want to comment on. This link will soon be live."); + + default: + Parent::onURL(%this, %url); + } +} +//----------------------------------------------------------------------------- +function NewsHeadlines::onSelect( %this, %id, %text ) +{ + NewsText.scrollToTag( %id ); +} +//----------------------------------------------------------------------------- +function NewsGui::getPreviousNewsItems( %this ) +{ + // Fetch the next batch of newer news items: + error("FETCHING PREV NEWS ITEMS"); + if ( %this.set == 1 ) + return; + canvas.SetCursor(ArrowWaitCursor); + NewsGui.key = LaunchGui.key++; + %this.state = "status"; + %this.articleCount = 0; + %this.set--; + DatabaseQueryArray(0,0,"1" TAB getField(%this.setList[%this.set],1), NewsGui, NewsGui.key ); +} +//----------------------------------------------------------------------------- +function NewsGui::getNextNewsItems( %this ) +{ + // Fetch the next batch of older news items: + error("FETCHING NEXT NEWS ITEMS"); + canvas.SetCursor(ArrowWaitCursor); + NewsGui.key = LaunchGui.key++; + %this.state = "status"; + %this.articleCount = 0; + DatabaseQueryArray(0,0,"1" TAB getField(%this.setList[%this.set],0), NewsGui, NewsGui.key ); + %this.set++; +} +//----------------------------------------------------------------------------- +function NewsMOTDText::onDatabaseQueryResult(%this, %status, %RowCount_Result, %key) +{ + if(%key != %this.key) + return; + echo("RECV: " @ %status); + if(getField(%status,0)==0) + { + NewsEditMOTDBtn.setVisible( getField(%status,2)); + %this.setText( %RowCount_Result ); + } + else if (getSubStr(getField(%status,1),0,9) $= "ORA-04061") + { + %this.state = "error"; + MessageBoxOK("ERROR","There was an error processing your request, please wait a few moments and try again."); + } + else + { + %this.state = "halt"; + MessageBoxOK("NOTICE",getField(%status,1)); + } + Canvas.setCursor(defaultCursor); +} +//----------------------------------------------------------------------------- +function NewsEditMOTD() +{ + NewsEditMOTDText.setText( NewsMOTDText.getText() ); + Canvas.pushDialog( NewsEditMOTDDlg ); +} +//----------------------------------------------------------------------------- +function NewsUpdateMOTD() +{ + NewsEditMotdDlg.Key = LaunchGui.key++; + NewsEditMOtdDlg.state = "verify"; + canvas.SetCursor(ArrowWaitCursor); + DatabaseQuery( 4, NewsEditMOTDText.getText(), NewsEditMotdDlg,NewsEditMotdDlg.key ); +} +//----------------------------------------------------------------------------- +function NewsEditMotdDlg::OnDatabaseQueryResult(%this, %status, %RowCount_Result, %key) +{ + if(%key != %this.key) + return; + echo("RECV: " @ %status); + if(getField(%status,0)==0) + %this.state = "proceed"; + else if (getSubStr(getField(%status,1),0,9) $= "ORA-04061") + { + %this.state = "done"; + MessageBoxOK("ERROR","There was an error processing your request, please wait a few moments and try again."); + } + else + %this.state = "error"; + + switch$(%this.state) + { + case "proceed": + NewsEditMOTDBtn.setVisible( getField(%status,2)); + MessageBoxOK("NOTICE",getField(%status,1)); + NewsMOTDText.setText( NewsEditMOTDText.getText() ); + Canvas.PopDialog(NewsEditMOTDDlg); + case "error": + MessageBoxOK("NOTICE",getField(%status,1)); + Canvas.PopDialog(NewsEditMOTDDlg); + } +} +//----------------------------------------------------------------------------- +function addWebLink( %name, %address ) +{ + $WebLink[$WebLinkCount, name] = %name; + $WebLink[$WebLinkCount, address] = %address; + $WebLinkCount++; +} +//----------------------------------------------------------------------------- +function WebLinksMenu::onAdd( %this ) +{ + for ( %i = 0; %i < $WebLinkCount; %i++ ) + %this.add( $WebLink[%i, name], %i ); +} +//----------------------------------------------------------------------------- +function WebLinksMenu::launchWebBrowser( %this ) +{ + %address = $WebLink[WebLinksMenu.getSelected(), address]; + if ( %address !$= "" ) + { + if ( isFullScreen() ) + MessageBoxYesNo( "WARNING", "This will launch your web browser and minimize Tribes 2." + @ " Do you wish to continue?", "gotoWebPage( \"" @ %address @ "\" );" ); + else + gotoWebPage( %address ); + } + else + MessageBoxOK("ERROR","Invalid Link"); +} diff --git a/base/scripts/webstuff.cs b/base/scripts/webstuff.cs new file mode 100644 index 0000000..e609ee9 --- /dev/null +++ b/base/scripts/webstuff.cs @@ -0,0 +1,205 @@ + +function getLinkName(%line, %offset) +{ + if(%offset $= "") + %offset = 0; + + %name = getField(%line, %offset); + %tag = getField(%line, %offset + 1); + %append = getField(%line, %offset + 2); + %uid = getField(%line, %offset + 3); + + if(%append) + %str = "" @ %name @ "" @ %tag; + else + %str = "" @ %tag @ "" @ %name; + return "" @ %str @ ""; +} + + +function getTextName(%line, %offset) +{ + if(%offset $= "") + %offset = 0; + + %name = getField(%line, %offset); + %tag = getField(%line, %offset + 1); + %append = getField(%line, %offset + 2); + %uid = getField(%line, %offset + 3); + + if(%append) + return %name @ %tag TAB %uid; + else + return %tag @ %name TAB %uid; +} + +function HTTPRequest(%script, %update, %destObject, %key) +{ + error("Call to HTTP request depricated - trace:"); + trace(1); + schedule(0,0,trace,0); + + //%upd = new SecureHTTPObject(HTTPUpdate); + //%upd.post($WebAddress, $WebPath @ %script @ ".php", "", %update); + //%upd.key = %key; + //%upd.destObject = %destObject; +} + +function HTTPSecureRequest(%script, %update, %destObject, %key) +{ + error("Call to HTTP secure request depricated - trace:"); + trace(1); + schedule(0,0,trace,0); + + //%upd = new SecureHTTPObject(HTTPUpdate); + //%upd.setAuthenticated(); + //%upd.post($WebAddress, $WebPath @ %script @ ".php", "", %update); + //%upd.key = %key; + //%upd.destObject = %destObject; +} + +$DBNextQueryId = 0; +$DBQueryCount = 0; + +if(!isObject(ProxyEchoTest)) +{ + new ScriptObject(ProxyEchoTest) + { + class = ProxyEcho; + }; +} + +function ProxyEcho::onDatabaseQueryResult(%this, %status, %string, %key) +{ + echo("Got database query result for key: " @ %key); + echo("Status = " @ %status); + echo("String/Rowcount = " @ %string); +} + +function ProxyEcho::onDatabaseRow(%this, %row, %isLast, %key) +{ + echo("Got Row - key = " @ %key @ " isLast = " @ %isLast); + echo("Row Text = " @ %row); +} + +function HandleDatabaseProxyResponse(%prefix, %params) +{ + %id = getWord(%params, 0); + + for(%qc = 0; %qc < $DBQueryCount; %qc++) + if(getWord($DBQueries[%qc], 0) == %id) + break; + if(%qc == $DBQueryCount) + { + warn("Invalid database proxy message id: " @ %id); + return; + } + + %lastPacket = getWord(%params, 1); + %start = strpos(%params, ":") + 1; + if(!%start) + { + warn("Invalid database proxy message: " @ %params); + return; + } + + // convert all the escaped characters + %newStr = getSubStr(%params, %start, 100000); + %newStr = strreplace(%newStr, "\\n", "\n"); + %newStr = strreplace(%newStr, "\\\\", "\\"); + + // concat it with any text from prior message(s) that hasn't been + // processed yet. + %msg = $DBQueryText[%qc] @ %newStr; + %proxyObject = getWord($DBQueries[%qc], 2); + %proxyKey = getWord($DBQueries[%qc], 3); + + if(getWord($DBQueries[%qc], 1) == 0) // we haven't receivd the first 2 recs yet + { + // check if we have 2 records in %msg: + %pos1 = strpos(%msg, "\\S"); + if(%pos1 != -1) + %pos2 = strpos(%msg, "\\S", %pos1 + 2); + + if(%pos1 != -1 && %pos2 != -1) + { + %resultStatus = getSubStr(%msg, 0, %pos1); + %resultString = getSubStr(%msg, %pos1 + 2, %pos2 - (%pos1 + 2)); + if(%proxyObject !$= "") + %proxyObject.onDatabaseQueryResult(%resultStatus, %resultString, %proxyKey); + $DBQueries[%qc] = setWord($DBQueries[%qc], 1, "1"); + %msg = getSubStr(%msg, %pos2 + 2, 100000); + } + } + if(getWord($DBQueries[%qc], 1) == 1) + { + // start spitting out rows: + while((%pos = strpos(%msg, "\\S")) != -1) + { + %row = getSubStr(%msg, 0, %pos); + %msg = getSubStr(%msg, %pos + 2, 100000); + + if(%proxyObject !$= "") + %proxyObject.onDatabaseRow(%row, %msg $= "" && %lastPacket, %proxyKey); + } + } + $DBQueryText[%qc] = %msg; // save off the last text... + if(%lastPacket) + { + // erase the query from the array: + if(getWord($DBQueries[%qc], 1) == 0) + warnf("Error in database query response - not enough data."); + for(%i = %qc; %i < $DBQueryCount; %i++) + { + $DBQueries[%i] = $DBQueries[%i+1]; + $DBQueryText[%i] = $DBQueryText[%i+1]; + } + $DBQueryCount--; + } +} + +// DBQuery is: id recCountRecvd proxyObject key + +function DatabaseQueryi(%astr, %args, %proxyObject, %key) +{ + // maxRows will be empty + $NextDatabaseQueryId++; + %id = $NextDatabaseQueryId; + + $DBQueries[$DBQueryCount] = %id @ " 0 " @ %proxyObject SPC %key; + $DBQueryText[$DBQueryCount] = ""; + $DBQueryCount++; + + %strStart = 0; + %args = strreplace(%args, "\r", ""); + %args = strreplace(%args, "\\", "\\\\"); + %args = strreplace(%args, "\n", "\\n"); + + echo("Called DBQueryi - astr: " @ %astr @ " args: " @ %args); + + %len = strlen(%args); + %i = 0; + while(%i+400 < %len) + { + %msg = getSubStr(%args, %i, 400); + IRCClient::send("dbqa" SPC %id SPC ":" @ %msg); + %i += 400; + } + %msg = getSubStr(%args, %i, 400); + IRCClient::send("dbqax" SPC %id SPC %astr SPC ":" @ %msg); +} + +function DatabaseQuery(%ordinal, %args, %proxyObject, %key) +{ + DatabaseQueryi(%ordinal SPC "0", %args, %proxyObject, %key); +} + +function DatabaseQueryArray(%ordinal, %maxRows, %args, %proxyObject, %key) +{ + DatabaseQueryi("C" @ %ordinal SPC %maxRows, %args, %proxyObject, %key); +} + +function WONUpdateCertificateDone(%errCode, %errStr) +{ + echo("Got cert back from WON: " @ %errCode @ " = " @ %errStr); +} \ No newline at end of file diff --git a/base/scripts/webtest.cs b/base/scripts/webtest.cs new file mode 100644 index 0000000..8df3f49 --- /dev/null +++ b/base/scripts/webtest.cs @@ -0,0 +1,248 @@ + +function HTTPTest_onLine(%line) +{ + echo("HTTPLine: " @ %line); + if($HTTPTest_notifyObject !$= "") + $HTTPTest_notifyObject.onLine(%line, $HTTPTest_notifyKey); +} + +function HTTPTest(%script, %query, %notifyObject, %notifyKey) +{ + echo("HTTPQuery: " @ %script); + %query = "\n" @ %query; + $HTTPTest_notifyObject = %notifyObject; + $HTTPTest_notifyKey = %notifyKey; + + call("HTTPTest_" @ %script, %query); + if($HTTPTest_notifyObject !$= "") + $HTTPTest_notifyObject.connectionTerminated($HTTPTest_notifyKey); + echo("HTTPQueryDone"); +} + +function HTTPTest_update_CreatePublicForum(%query) +{ + if($pref::forumCount $= "") + $pref::forumCount = 0; + + $pref::ForumName[$pref::forumCount] = getRecord(%query, 1); + $pref::forumCount++; + HTTPTest_onLine("OK"); +} + +function HTTPTest_update_DeletePublicForum(%query) +{ + for(%i = 0; %i < $pref::forumCount; %i++) + { + if($pref::ForumName[%i] $= getRecord(%query, 1)) + { + $pref::forumCount--; + $pref::forumName[%i] = $pref::forumName[$pref::forumCount]; + HTTPTest_onLine("OK"); + return; + } + } + HTTPTest_onLine("InvalidForum"); +} + +function HTTPTest_query_GetForumList(%query) +{ + if($pref::forumCount $= "") + $pref::forumCount = 0; + HTTPTest_onLine($pref::forumCount); + for(%i = 0; %i < $pref::forumCount; %i++) + HTTPTest_onLine($pref::forumName[%i]); +} + +// post is: +// threadId +// PostEdit +// postid +// updateid +// parentid +// poster +// date +// topic +// body line 1 +// body line 2 +// ... + +function HTTPTest_update_postforumentry(%query) +{ + %forum = getRecord(%query, 1); + %parent = getRecord(%query, 2); + %topic = getRecord(%query, 3); + %body = getRecord(%query, 4); + + echo(%forum); + echo(%parent); + echo(%topic); + echo(%body); + + for(%i = 5; %i < getRecordCount(%query); %i++) + %body = %body @ "\n" @ getRecord(%query, %i); + if(%parent == 0) // create a new thread for this one: + { + if($pref::forumThreadCount $= "") + $pref::forumThreadCount = 0; + %threadid = $pref::forumThreadCount; + + $pref::forumThread[$pref::forumThreadCount] = %forum @ "\n"@ "SuperD00D" TAB "[BSF]" TAB 1 TAB 4 TAB %topic TAB "Today" TAB %threadid TAB 0; + $pref::forumThreadCount++; + } + else + { + %parentpost = $pref::forumPost[%parent]; + + %threadId = getRecord(%parentpost, 0); + echo(%threadId); + } + $pref::forumPostCount++; + $pref::forumUpdateId++; + $pref::forumPost[$pref::forumPostCount] = %threadId @ "\n" @ "PostEdit" @ "\n" @ $pref::forumPostCount @ "\n" @ $pref::forumUpdateId @ "\n" @ + %parent @ "\n" @ "SuperD00D" @ "\n" @ "Today" @ "\n" @ %topic @ "\n" @ %body; + if(%notifyObject) + { + %notifyObject.onLine("OK"); + %notifyObject.connectionTerminated(); + } +} + +function HTTPTest_query_GetForumTopics(%query) +{ + %count = 0; + %list = ""; + %forum = getRecord(%query, 1); + %start = getRecord(%query, 2); + %maxCount = getRecord(%query, 3); + %maxCount += %start; + if(%maxCount > $pref::forumThreadCount) + %maxCount = $pref::forumThreadCount; + for(%i = %start; %i < %maxCount; %i++) + { + %thread = $pref::forumThread[%i]; + if(getRecord(%thread, 0) $= %forum) + { + %line[%count] = getRecord(%thread, 1); + %count++; + } + } + HTTPTest_onLine(%count); + for(%i = 0; %i < %count; %i++) + HTTPTest_onLine(%line[%i]); +} + +// post is: +// threadId +// PostEdit +// postid +// updateid +// parentid +// poster +// date +// topic +// body line 1 +// body line 2 +// ... + +function HTTPTest_query_GetForumUpdates(%query) +{ + %threadId = getRecord(%query, 1); + %updateId = getRecord(%query, 2); + + %output = ""; + %updateCount = 0; + + for(%i = 1; %i <= $pref::forumPostCount; %i++) + { + %post = $pref::forumPost[%i]; + if(%threadId == getRecord(%post, 0) && %updateId < getRecord(%post, 3)) + %updateCount++; + } + HTTPTest_onLine(%updateCount); + for(%i = 1; %i <= $pref::forumPostCount; %i++) + { + %post = $pref::forumPost[%i]; + if(%threadId == getRecord(%post, 0) && %updateId < getRecord(%post, 3)) + { + %rc = getRecordCount(%post); + HTTPTest_onLine(%rc - 1); + for(%j = 1; %j < %rc; %j++) + HTTPTest_onLine(getRecord(%post, %j)); + } + } +} + +function HTTPTest_update_editforumentry(%query) +{ + echo("Updating forum entry"); + %postId = getRecord(%query, 1); + %post = $pref::forumPost[%postId]; + $pref::forumUpdateId++; + %post = setRecord(%post, 3, $pref::forumUpdateId); + %rc = getRecordCount(%query); + + for(%i = 2; %i < %rc; %i++) + %post = setRecord(%post, 5 + %i, getRecord(%query, %i)); + + + %post = setRecord(%post, 5 + %i, "[Edited by blah blah blah]"); + %rc = getRecordCount(%post); + + for(%p = 0; %p < %rc; %p++) + echo(getRecord(%post, %p)); + + for(%j = 0; %j <= 5 + %i; %j++) + %newpost = setRecord(%newpost, %j, getRecord(%post, %j)); + $pref::forumPostCount++; + $pref::forumPost[$pref::forumPostCount] = %newpost; + echo("New post: "); + %rc = getRecordCount(%newpost); + + for(%p = 0; %p < %rc; %p++) + echo(getRecord(%newpost, %p)); + HTTPTest_onLine("OK"); +} + +function HTTPTest_query_playerinfo(%query) +{ + HTTPTest_onLine("OK"); + HTTPTest_onLine("SuperD00D\t[BSF]\t1\t4"); + HTTPTest_onLine("1"); + HTTPTest_onLine("2"); + HTTPTest_onLine("Big Sucka Fishes"); + HTTPTest_onLine("Sofa Kings"); + HTTPTest_onLine("3"); + HTTPTest_onLine("Big Sucka Fishes\t[BSF]\t1\t1"); + HTTPTest_onLine("Sucka Fishes\t[SF]\t1\t1"); + HTTPTest_onLine("Sofa Kings\t[SOFAKING]\t1\t1"); + HTTPTest_onLine("4\t1"); + HTTPTest_onLine("I am SuperD00D Master of the Big Sucka Fishes"); + HTTPTest_onLine("I am SuperD00D I R00LZ AT TRYB3S!"); + HTTPTest_onLine("I am SuperD00D I think I should insert some links and stuff"); + HTTPTest_onLine("I am SuperD00D I think I should insert some links and stuff"); + HTTPTest_onLine("2"); + HTTPTest_onLine("Created Tribe Big Sucka Fishes"); + HTTPTest_onLine("Created Tribe Sucka Fishes"); +} + +function HTTPTest_query_gettribeinformation(%query) +{ + HTTPTest_onLine("OK"); + HTTPTest_onLine("Big Sucka Fishes\t[BSF]\t1"); + HTTPTest_onLine("1\t1"); + HTTPTest_onLine("4\t1"); + HTTPTest_onLine("We are the BIG SUCKA FISHES. We R00LZ 0V3R u. We R R33T."); + HTTPTest_onLine("We 0WNZ T3H TRYB3S 2 Scene."); + HTTPTest_onLine("The OGL is our collective bitch."); + HTTPTest_onLine("Dave Georgeson is a big mo mo."); + HTTPTest_onLine("5"); + HTTPTest_onLine("SuperD00D\t[BSF]\t1\t4\t2\tSupreme Leader\tWhenever\t1"); + HTTPTest_onLine("QIX\t[BSF]\t1\t5\t2\tGroupie\tWhenever\t0"); + HTTPTest_onLine("RatedZ\t[BSF]\t1\t7\t2\tFrench Teacher\tWhenever\t1"); + HTTPTest_onLine("Uberb0b\t[BSF]\t1\t8\t2\tWater Boy\tWhenever\t0"); + HTTPTest_onLine("Funkymonkey\t[BSF]\t1\t9\t2\tMascot\tWhenever\t1"); + HTTPTest_onLine("3"); + HTTPTest_onLine("Invitee1\t[DORK]\t1\t10\tSuperD00D\t[BSF]\t1\t4\t0"); + HTTPTest_onLine("Invitee2\t[DORK]\t1\t10\tSuperD00D\t[BSF]\t1\t4\t1"); + HTTPTest_onLine("Invitee3\t[DORK]\t1\t10\tSuperD00D\t[BSF]\t1\t4\t0"); +} \ No newline at end of file diff --git a/base/shapes/bioderm_heavy.cs b/base/shapes/bioderm_heavy.cs new file mode 100644 index 0000000..4acac6b --- /dev/null +++ b/base/shapes/bioderm_heavy.cs @@ -0,0 +1,41 @@ +datablock TSShapeConstructor(BiodermHeavyDts) +{ + baseShape = "bioderm_heavy.dts"; + sequence0 = "bioderm_heavy_root.dsq root"; + sequence1 = "bioderm_heavy_forward.dsq run"; + sequence2 = "bioderm_heavy_back.dsq back"; + sequence3 = "bioderm_heavy_side.dsq side"; + sequence4 = "bioderm_heavy_lookde.dsq look"; + sequence5 = "bioderm_heavy_lookms.dsq lookms"; + sequence6 = "bioderm_heavy_head.dsq head"; + sequence7 = "bioderm_heavy_headside.dsq headside"; + sequence8 = "bioderm_heavy_jet.dsq jet"; + sequence9 = "bioderm_heavy_land.dsq land"; + sequence10 = "bioderm_heavy_fall.dsq fall"; + sequence11 = "bioderm_heavy_jump.dsq jump"; + sequence12 = "bioderm_heavy_recoilde.dsq light_recoil"; + sequence13 = "bioderm_heavy_idlePDA.dsq idlePDA"; + sequence14 = "bioderm_heavy_diehead.dsq death1"; + sequence15 = "bioderm_heavy_diechest.dsq death2"; + sequence16 = "bioderm_heavy_dieback.dsq death3"; + sequence17 = "bioderm_heavy_dieknees.dsq death4"; + sequence18 = "bioderm_heavy_diesidelft.dsq death5"; + sequence19 = "bioderm_heavy_diesidert.dsq death6"; + sequence20 = "bioderm_heavy_dieleglft.dsq death7"; + sequence21 = "bioderm_heavy_dielegrt.dsq death8"; + sequence22 = "bioderm_heavy_dieslump.dsq death9"; + sequence23 = "bioderm_heavy_dieforward.dsq death10"; + sequence24 = "bioderm_heavy_diespin.dsq death11"; + sequence25 = "bioderm_heavy_celsalute.dsq cel1"; + sequence26 = "bioderm_heavy_celyeah.dsq cel2"; + sequence27 = "bioderm_heavy_tauntbest.dsq cel3"; + sequence28 = "bioderm_heavy_celroar.dsq cel4"; + sequence29 = "bioderm_heavy_tauntbull.dsq cel5"; + sequence30 = "bioderm_heavy_celflex2.dsq cel6"; + sequence31 = "bioderm_heavy_celgora.dsq cel7"; + sequence32 = "bioderm_heavy_celjump.dsq cel8"; + sequence33 = "bioderm_heavy_ski.dsq ski"; + sequence34 = "bioderm_heavy_standjump.dsq standjump"; + sequence35 = "bioderm_heavy_looknw.dsq looknw"; +}; + \ No newline at end of file diff --git a/base/shapes/bioderm_light.cs b/base/shapes/bioderm_light.cs new file mode 100644 index 0000000..b53be9d --- /dev/null +++ b/base/shapes/bioderm_light.cs @@ -0,0 +1,42 @@ +datablock TSShapeConstructor(BiodermLightDts) +{ + baseShape = "bioderm_light.dts"; + sequence0 = "bioderm_light_root.dsq root"; + sequence1 = "bioderm_light_forward.dsq run"; + sequence2 = "bioderm_light_back.dsq back"; + sequence3 = "bioderm_light_side.dsq side"; + sequence4 = "bioderm_light_lookde.dsq look"; + sequence5 = "bioderm_light_lookms.dsq lookms"; + sequence6 = "bioderm_light_head.dsq head"; + sequence7 = "bioderm_light_headside.dsq headSide"; + sequence8 = "bioderm_light_jet.dsq jet"; + sequence9 = "bioderm_light_land.dsq land"; + sequence10 = "bioderm_light_fall.dsq fall"; + sequence11 = "bioderm_light_jump.dsq jump"; + sequence12 = "bioderm_light_recoilde.dsq light_recoil"; + sequence13 = "bioderm_light_idlePDA.dsq idlePDA"; + sequence14 = "bioderm_light_scoutroot.dsq scoutroot"; + sequence15 = "bioderm_light_dieback.dsq death1"; + sequence16 = "bioderm_light_diespin.dsq death2"; + sequence17 = "bioderm_light_diechest.dsq death3"; + sequence18 = "bioderm_light_dieforward.dsq death4"; + sequence19 = "bioderm_light_diehead.dsq death5"; + sequence20 = "bioderm_light_dieknees.dsq death6"; + sequence21 = "bioderm_light_dieleglft.dsq death7"; + sequence22 = "bioderm_light_dielegrt.dsq death8"; + sequence23 = "bioderm_light_diesidelft.dsq death9"; + sequence24 = "bioderm_light_diesidert.dsq death10"; + sequence25 = "bioderm_light_dieslump.dsq death11"; + sequence26 = "bioderm_light_celsalute.dsq cel1"; + sequence27 = "bioderm_light_celyeah.dsq cel2"; + sequence28 = "bioderm_light_tauntbest.dsq cel3"; + sequence29 = "bioderm_light_celroar.dsq cel4"; + sequence30 = "bioderm_light_tauntbull.dsq cel5"; + sequence31 = "bioderm_light_celflex2.dsq cel6"; + sequence32 = "bioderm_light_celgora.dsq cel7"; + sequence33 = "bioderm_light_celjump.dsq cel8"; + sequence34 = "bioderm_light_sitting.dsq sitting"; + sequence35 = "bioderm_light_ski.dsq ski"; + sequence36 = "bioderm_light_standjump.dsq standjump"; + sequence37 = "bioderm_light_looknw.dsq looknw"; +}; diff --git a/base/shapes/bioderm_medium.cs b/base/shapes/bioderm_medium.cs new file mode 100644 index 0000000..0a0d7cb --- /dev/null +++ b/base/shapes/bioderm_medium.cs @@ -0,0 +1,41 @@ +datablock TSShapeConstructor(BiodermMediumDts) +{ + baseShape = "bioderm_medium.dts"; + sequence0 = "bioderm_medium_root.dsq root"; + sequence1 = "bioderm_medium_forward.dsq run"; + sequence2 = "bioderm_medium_back.dsq back"; + sequence3 = "bioderm_medium_side.dsq side"; + sequence4 = "bioderm_medium_lookde.dsq look"; + sequence5 = "bioderm_medium_head.dsq head"; + sequence6 = "bioderm_medium_headside.dsq headside"; + sequence7 = "bioderm_medium_jet.dsq jet"; + sequence8 = "bioderm_medium_land.dsq land"; + sequence9 = "bioderm_medium_fall.dsq fall"; + sequence10 = "bioderm_medium_jump.dsq jump"; + sequence11 = "bioderm_medium_idlePDA.dsq idlePDA"; + sequence12 = "bioderm_medium_lookms.dsq lookms"; + sequence13 = "bioderm_medium_sitting.dsq sitting"; + sequence14 = "bioderm_medium_recoilde.dsq light_recoil"; + sequence15 = "bioderm_medium_dieback.dsq death1"; + sequence16 = "bioderm_medium_diespin.dsq death2"; + sequence17 = "bioderm_medium_diehead.dsq death3"; + sequence18 = "bioderm_medium_diechest.dsq death4"; + sequence19 = "bioderm_medium_dieforward.dsq death5"; + sequence20 = "bioderm_medium_dieknees.dsq death6"; + sequence21 = "bioderm_medium_dieleglft.dsq death7"; + sequence22 = "bioderm_medium_dielegrt.dsq death8"; + sequence23 = "bioderm_medium_diesidelft.dsq death9"; + sequence24 = "bioderm_medium_diesidert.dsq death10"; + sequence25 = "bioderm_medium_dieslump.dsq death11"; + sequence26 = "bioderm_medium_celsalute.dsq cel1"; + sequence27 = "bioderm_medium_celyeah.dsq cel2"; + sequence28 = "bioderm_medium_tauntbest.dsq cel3"; + sequence29 = "bioderm_medium_celroar.dsq cel4"; + sequence30 = "bioderm_medium_tauntbull.dsq cel5"; + sequence31 = "bioderm_medium_celflex2.dsq cel6"; + sequence32 = "bioderm_medium_celgora.dsq cel7"; + sequence33 = "bioderm_medium_celjump.dsq cel8"; + sequence34 = "bioderm_medium_ski.dsq ski"; + sequence35 = "bioderm_medium_standjump.dsq standjump"; + sequence36 = "bioderm_medium_looknw.dsq looknw"; +}; diff --git a/base/shapes/heavy_male.cs b/base/shapes/heavy_male.cs new file mode 100644 index 0000000..fbf8124 --- /dev/null +++ b/base/shapes/heavy_male.cs @@ -0,0 +1,41 @@ +datablock TSShapeConstructor(HeavyMaleDts) +{ + baseShape = "heavy_male.dts"; + sequence0 = "heavy_male_root.dsq root"; + sequence1 = "heavy_male_forward.dsq run"; + sequence2 = "heavy_male_back.dsq back"; + sequence3 = "heavy_male_side.dsq side"; + sequence4 = "heavy_male_lookde.dsq look"; + sequence5 = "heavy_male_head.dsq head"; + sequence6 = "heavy_male_fall.dsq fall"; + sequence7 = "heavy_male_jet.dsq jet"; + sequence8 = "heavy_male_land.dsq land"; + sequence9 = "heavy_male_jump.dsq jump"; + sequence10 = "heavy_male_recoilde.dsq light_recoil"; + sequence11 = "heavy_male_idlepda.dsq pda"; + sequence12 = "heavy_male_headside.dsq headside"; + sequence13 = "heavy_male_lookms.dsq lookms"; + sequence14 = "heavy_male_diehead.dsq death1"; + sequence15 = "heavy_male_diechest.dsq death2"; + sequence16 = "heavy_male_dieback.dsq death3"; + sequence17 = "heavy_male_diesidelf.dsq death4"; + sequence18 = "heavy_male_diesidert.dsq death5"; + sequence19 = "heavy_male_dieleglf.dsq death6"; + sequence20 = "heavy_male_dielegrt.dsq death7"; + sequence21 = "heavy_male_dieslump.dsq death8"; + sequence22 = "heavy_male_dieknees.dsq death9"; + sequence23 = "heavy_male_dieforward.dsq death10"; + sequence24 = "heavy_male_diespin.dsq death11"; + sequence25 = "heavy_male_celsalute.dsq cel1"; + sequence26 = "heavy_male_celwave.dsq cel2"; + sequence27 = "heavy_male_tauntbest.dsq cel3"; + sequence28 = "heavy_male_tauntimp.dsq cel4"; + sequence29 = "heavy_male_celdance.dsq cel5"; + sequence30 = "heavy_male_celflex.dsq cel6"; + sequence31 = "heavy_male_celtaunt.dsq cel7"; + sequence32 = "heavy_male_celjump.dsq cel8"; + sequence33 = "heavy_male_ski.dsq ski"; + sequence34 = "heavy_male_standjump.dsq standjump"; + sequence35 = "heavy_male_looknw.dsq looknw"; +}; + diff --git a/base/shapes/light_female.cs b/base/shapes/light_female.cs new file mode 100644 index 0000000..acfe00c --- /dev/null +++ b/base/shapes/light_female.cs @@ -0,0 +1,43 @@ +datablock TSShapeConstructor(LightFemaleDts) +{ + baseShape = "light_female.dts"; + sequence0 = "light_female_root.dsq root"; + sequence1 = "light_female_forward.dsq run"; + sequence2 = "light_female_back.dsq back"; + sequence3 = "light_female_side.dsq side"; + sequence4 = "light_female_lookde.dsq look"; + sequence5 = "light_female_head.dsq head"; + sequence6 = "light_female_headside.dsq headside"; + sequence7 = "light_female_fall.dsq fall"; + sequence8 = "light_female_jet.dsq jet"; + sequence9 = "light_female_land.dsq land"; + sequence10 = "light_female_jump.dsq jump"; + sequence11 = "light_female_recoilde.dsq light_recoil"; + sequence12 = "light_female_scoutroot.dsq scoutroot"; + sequence13 = "light_female_looksn.dsq looksn"; + sequence14 = "light_female_lookms.dsq lookms"; + sequence15 = "light_female_sitting.dsq sitting"; + sequence16 = "light_female_idlepda.dsq pda"; + sequence17 = "light_female_diehead.dsq death1"; + sequence18 = "light_female_diechest.dsq death2"; + sequence19 = "light_female_dieback.dsq death3"; + sequence20 = "light_female_diesidelf.dsq death4"; + sequence21 = "light_female_diesidert.dsq death5"; + sequence22 = "light_female_dieleglf.dsq death6"; + sequence23 = "light_female_dielegrt.dsq death7"; + sequence24 = "light_female_dieslump.dsq death8"; + sequence25 = "light_female_dieknees.dsq death9"; + sequence26 = "light_female_dieforward.dsq death10"; + sequence27 = "light_female_diespin.dsq death11"; + sequence28 = "light_female_celsalute.dsq cel1"; + sequence29 = "light_female_celwave.dsq cel2"; + sequence30 = "light_female_tauntbest.dsq cel3"; + sequence31 = "light_female_tauntimp.dsq cel4"; + sequence32 = "light_female_celdance.dsq cel5"; + sequence33 = "light_female_tauntkiss.dsq cel6"; + sequence34 = "light_female_tauntbutt.dsq cel7"; + sequence35 = "light_female_celbow.dsq cel8"; + sequence36 = "light_female_ski.dsq ski"; + sequence37 = "light_female_standjump.dsq standjump"; + sequence38 = "light_female_looknw.dsq looknw"; +}; diff --git a/base/shapes/light_male.cs b/base/shapes/light_male.cs new file mode 100644 index 0000000..b97ef9f --- /dev/null +++ b/base/shapes/light_male.cs @@ -0,0 +1,43 @@ +datablock TSShapeConstructor(LightMaleDts) +{ + baseShape = "light_male.dts"; + sequence0 = "light_male_root.dsq root"; + sequence1 = "light_male_forward.dsq run"; + sequence2 = "light_male_back.dsq back"; + sequence3 = "light_male_side.dsq side"; + sequence4 = "light_male_lookde.dsq look"; + sequence5 = "light_male_head.dsq head"; + sequence6 = "light_male_fall.dsq fall"; + sequence7 = "light_male_jet.dsq jet"; + sequence8 = "light_male_land.dsq land"; + sequence9 = "light_male_jump.dsq jump"; + sequence10 = "light_male_diehead.dsq death1"; + sequence11 = "light_male_diechest.dsq death2"; + sequence12 = "light_male_dieback.dsq death3"; + sequence13 = "light_male_diesidelf.dsq death4"; + sequence14 = "light_male_diesidert.dsq death5"; + sequence15 = "light_male_dieleglf.dsq death6"; + sequence16 = "light_male_dielegrt.dsq death7"; + sequence17 = "light_male_dieslump.dsq death8"; + sequence18 = "light_male_dieknees.dsq death9"; + sequence19 = "light_male_dieforward.dsq death10"; + sequence20 = "light_male_diespin.dsq death11"; + sequence21 = "light_male_idlepda.dsq pda"; + sequence22 = "light_male_looksn.dsq looksn"; + sequence23 = "light_male_lookms.dsq lookms"; + sequence24 = "light_male_scoutroot.dsq scoutroot"; + sequence25 = "light_male_headside.dsq headside"; + sequence26 = "light_male_recoilde.dsq light_recoil"; + sequence27 = "light_male_sitting.dsq sitting"; + sequence28 = "light_male_celsalute.dsq cel1"; + sequence29 = "light_male_celwave.dsq cel2"; + sequence30 = "light_male_tauntbest.dsq cel3"; + sequence31 = "light_male_tauntimp.dsq cel4"; + sequence32 = "light_male_celdisco.dsq cel5"; + sequence33 = "light_male_celflex.dsq cel6"; + sequence34 = "light_male_celtaunt.dsq cel7"; + sequence35 = "light_male_celrocky.dsq cel8"; + sequence36 = "light_male_ski.dsq ski"; + sequence37 = "light_male_standjump.dsq standjump"; + sequence38 = "light_male_looknw.dsq looknw"; +}; diff --git a/base/shapes/medium_female.cs b/base/shapes/medium_female.cs new file mode 100644 index 0000000..e29275e --- /dev/null +++ b/base/shapes/medium_female.cs @@ -0,0 +1,42 @@ +datablock TSShapeConstructor(MediumFemaleDts) +{ + baseShape = "medium_female.dts"; + sequence0 = "medium_female_root.dsq root"; + sequence1 = "medium_female_forward.dsq run"; + sequence2 = "medium_female_back.dsq back"; + sequence3 = "medium_female_side.dsq side"; + sequence4 = "medium_female_lookde.dsq look"; + sequence5 = "medium_female_head.dsq head"; + sequence6 = "medium_female_headside.dsq headside"; + sequence7 = "medium_female_fall.dsq fall"; + sequence8 = "medium_female_jet.dsq jet"; + sequence9 = "medium_female_land.dsq land"; + sequence10 = "medium_female_jump.dsq jump"; + sequence11 = "medium_female_recoilde.dsq light_recoil"; + sequence12 = "medium_female_looksn.dsq looksn"; + sequence13 = "medium_female_lookms.dsq lookms"; + sequence14 = "medium_female_sitting.dsq sitting"; + sequence15 = "medium_female_idlepda.dsq pda"; + sequence16 = "medium_female_diehead.dsq death1"; + sequence17 = "medium_female_diechest.dsq death2"; + sequence18 = "medium_female_dieback.dsq death3"; + sequence19 = "medium_female_diesidelf.dsq death4"; + sequence20 = "medium_female_diesidert.dsq death5"; + sequence21 = "medium_female_dieleglf.dsq death6"; + sequence22 = "medium_female_dielegrt.dsq death7"; + sequence23 = "medium_female_dieslump.dsq death8"; + sequence24 = "medium_female_dieknees.dsq death9"; + sequence25 = "medium_female_dieforward.dsq death10"; + sequence26 = "medium_female_diespin.dsq death11"; + sequence27 = "medium_female_celsalute.dsq cel1"; + sequence28 = "medium_female_celwave.dsq cel2"; + sequence29 = "medium_female_tauntbest.dsq cel3"; + sequence30 = "medium_female_tauntimp.dsq cel4"; + sequence31 = "medium_female_celdisco.dsq cel5"; + sequence32 = "medium_female_tauntkiss.dsq cel6"; + sequence33 = "medium_female_tauntbutt.dsq cel7"; + sequence34 = "medium_female_celbow.dsq cel8"; + sequence35 = "medium_female_ski.dsq ski"; + sequence36 = "medium_female_standjump.dsq standjump"; + sequence37 = "medium_female_looknw.dsq looknw"; +}; \ No newline at end of file diff --git a/base/shapes/medium_male.cs b/base/shapes/medium_male.cs new file mode 100644 index 0000000..63ea164 --- /dev/null +++ b/base/shapes/medium_male.cs @@ -0,0 +1,43 @@ + +datablock TSShapeConstructor(MediumMaleDts) +{ + baseShape = "medium_male.dts"; + sequence0 = "medium_male_root.dsq root"; + sequence1 = "medium_male_forward.dsq run"; + sequence2 = "medium_male_back.dsq back"; + sequence3 = "medium_male_side.dsq side"; + sequence4 = "medium_male_lookde.dsq look"; + sequence5 = "medium_male_head.dsq head"; + sequence6 = "medium_male_fall.dsq fall"; + sequence7 = "medium_male_jet.dsq jet"; + sequence8 = "medium_male_land.dsq land"; + sequence9 = "medium_male_jump.dsq jump"; + sequence10 = "medium_male_recoilde.dsq light_recoil"; + sequence11 = "medium_male_headside.dsq headside"; + sequence12 = "medium_male_looksn.dsq looksn"; + sequence13 = "medium_male_lookms.dsq lookms"; + sequence14 = "medium_male_sitting.dsq sitting"; + sequence15 = "medium_male_diehead.dsq death1"; + sequence16 = "medium_male_diechest.dsq death2"; + sequence17 = "medium_male_dieback.dsq death3"; + sequence18 = "medium_male_diesidelf.dsq death4"; + sequence19 = "medium_male_diesidert.dsq death5"; + sequence20 = "medium_male_dieleglf.dsq death6"; + sequence21 = "medium_male_dielegrt.dsq death7"; + sequence22 = "medium_male_dieback.dsq death8"; + sequence23 = "medium_male_dieknees.dsq death9"; + sequence24 = "medium_male_dieforward.dsq death10"; + sequence25 = "medium_male_diespin.dsq death11"; + sequence26 = "medium_male_idlepda.dsq pda"; + sequence27 = "medium_male_celsalute.dsq cel1"; + sequence28 = "medium_male_celwave.dsq cel2"; + sequence29 = "medium_male_tauntbest.dsq cel3"; + sequence30 = "medium_male_tauntimp.dsq cel4"; + sequence31 = "medium_male_celdance.dsq cel5"; + sequence32 = "medium_male_celflex.dsq cel6"; + sequence33 = "medium_male_celtaunt.dsq cel7"; + sequence34 = "medium_male_celrocky.dsq cel8"; + sequence35 = "medium_male_ski.dsq ski"; + sequence36 = "medium_male_standjump.dsq standjump"; + sequence37 = "medium_male_looknw.dsq looknw"; +}; diff --git a/base/terrains/heightfield/CTF.Katabatic_heightfield.cs b/base/terrains/heightfield/CTF.Katabatic_heightfield.cs new file mode 100644 index 0000000..0d6cfbc --- /dev/null +++ b/base/terrains/heightfield/CTF.Katabatic_heightfield.cs @@ -0,0 +1 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t300\tgeneral_water\t0.000\tgeneral_centerx\t0\tgeneral_centery\t0"); diff --git a/base/terrains/heightfield/CTF.RiverDance_heightfield.cs b/base/terrains/heightfield/CTF.RiverDance_heightfield.cs new file mode 100644 index 0000000..0d6cfbc --- /dev/null +++ b/base/terrains/heightfield/CTF.RiverDance_heightfield.cs @@ -0,0 +1 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t300\tgeneral_water\t0.000\tgeneral_centerx\t0\tgeneral_centery\t0"); diff --git a/base/terrains/heightfield/DeathBirdsFly_heightfield.cs b/base/terrains/heightfield/DeathBirdsFly_heightfield.cs new file mode 100644 index 0000000..df2558b --- /dev/null +++ b/base/terrains/heightfield/DeathBirdsFly_heightfield.cs @@ -0,0 +1,5 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t140\tgeneral_water\t0\tgeneral_centerx\t0\tgeneral_centery\t0"); +Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t4\trmf_rough\t0.000\trmf_detail\tNormal\trmf_seed\t1025006377"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.00000 0.05263 0.10526 0.15789 0.21053 0.33077 0.31579 0.36842 0.42105 0.47368 0.59231 0.57895 0.63158 0.68421 0.73684 0.78947 0.84211 0.96154 0.94737 1.00000 "); +Heightfield::add("Canyon Fractal\ttab_Canyon\tcanyon_freq\t2\tcanyon_factor\t0.500\tcanyon_seed\t870190349"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t2\tblend_option\tMultiply"); diff --git a/base/terrains/heightfield/Fall_To_Glory_heightfield.cs b/base/terrains/heightfield/Fall_To_Glory_heightfield.cs new file mode 100644 index 0000000..4013c7b --- /dev/null +++ b/base/terrains/heightfield/Fall_To_Glory_heightfield.cs @@ -0,0 +1,6 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t75\tgeneral_water\t0\tgeneral_centerx\t0\tgeneral_centery\t0"); +Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t4\trmf_rough\t0.000\trmf_detail\tNormal\trmf_seed\t1019060589"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.97692 0.82308 0.65385 0.50000 0.34615 0.17692 0.00000 "); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t7\tfbm_rough\t0.000\tfBm_detail\tNormal\tfBm_seed\t2058759635"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t2\tblend_option\tMax"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.00000 0.00000 0.00000 0.33333 0.44444 0.55556 0.66667 0.77778 0.88889 1.00000 "); diff --git a/base/terrains/heightfield/Home.Badlands_heightfield.cs b/base/terrains/heightfield/Home.Badlands_heightfield.cs new file mode 100644 index 0000000..103910e --- /dev/null +++ b/base/terrains/heightfield/Home.Badlands_heightfield.cs @@ -0,0 +1,9 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t200\tgeneral_water\t0\tgeneral_centerx\t0\tgeneral_centery\t0"); +Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t10\trmf_rough\t0.000\trmf_detail\tVery Low\trmf_seed\t776891661"); +Heightfield::add("Filter\ttab_Filter\tfilter\t1.00000 1.00000 0.99231 1.00000 1.00000 0.99231 0.15385 0.00000 0.00000 "); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.00000 0.16667 0.33333 0.50000 0.66667 0.83333 1.00000 "); +Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t4\trmf_rough\t0.000\trmf_detail\tLow\trmf_seed\t1181481653"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t3\tblend_option\tMultiply"); +Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t4\trmf_rough\t0.000\trmf_detail\tNormal\trmf_seed\t1181481653"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t2\tblend_option\tMultiply"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.578947\tblend_srcB\t5\tblend_option\t"); diff --git a/base/terrains/heightfield/Home.Desert_heightfield.cs b/base/terrains/heightfield/Home.Desert_heightfield.cs new file mode 100644 index 0000000..406117d --- /dev/null +++ b/base/terrains/heightfield/Home.Desert_heightfield.cs @@ -0,0 +1,9 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t200\tgeneral_water\t0\tgeneral_centerx\t0\tgeneral_centery\t0"); +Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t8\trmf_rough\t0.000\trmf_detail\tVery Low\trmf_seed\t170285085"); +Heightfield::add("Filter\ttab_Filter\tfilter\t1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.43077 0.00000 0.00769 "); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.00000 0.16667 0.33333 0.50000 0.66667 0.83333 1.00000 "); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t3\tfbm_rough\t0.000\tfBm_detail\tVery Low\tfBm_seed\t1553690877"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t3\tblend_option\tMultiply"); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t7\tfbm_rough\t0.000\tfBm_detail\tNormal\tfBm_seed\t90817593"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t2\tblend_option\tMultiply"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t5\tblend_option\tadd"); diff --git a/base/terrains/heightfield/Home.Lush_heightfield.cs b/base/terrains/heightfield/Home.Lush_heightfield.cs new file mode 100644 index 0000000..1e10c58 --- /dev/null +++ b/base/terrains/heightfield/Home.Lush_heightfield.cs @@ -0,0 +1,7 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t100\tgeneral_water\t0\tgeneral_centerx\t0\tgeneral_centery\t0"); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t9\tfbm_rough\t0.990\tfBm_detail\tVery High\tfBm_seed\t346845957"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.00000 0.01538 0.03846 0.07692 0.11538 0.16154 0.20769 "); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t8\tfbm_rough\t0.000\tfBm_detail\tNormal\tfBm_seed\t2128136741"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.99231 0.96154 1.00000 0.94615 0.20000 0.00000 0.00000 "); +Heightfield::add("Filter\ttab_Filter\tfilter\t1.00000 0.83077 0.66154 0.50000 0.33846 0.16923 0.00000 "); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t2\tblend_option\tMultiply"); diff --git a/base/terrains/heightfield/Home.Snow2_heightfield.cs b/base/terrains/heightfield/Home.Snow2_heightfield.cs new file mode 100644 index 0000000..6f5f1d0 --- /dev/null +++ b/base/terrains/heightfield/Home.Snow2_heightfield.cs @@ -0,0 +1,11 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t225\tgeneral_water\t0.0842105\tgeneral_centerx\t0\tgeneral_centery\t0"); +Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t3\trmf_rough\t0.000\trmf_detail\tLow\trmf_seed\t1468280105"); +Heightfield::add("Filter\ttab_Filter\tfilter\t1.00000 1.00000 1.00000 0.80769 0.34615 0.00000 0.00000 0.00000 0.00000 "); +Heightfield::add("Filter\ttab_Filter\tfilter\t1.00000 1.00000 0.73846 0.41538 0.15385 0.06154 0.05385 "); +Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t7\trmf_rough\t0.000\trmf_detail\tVery High\trmf_seed\t31289227"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t2\tblend_option\tMultiply"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.878947\tblend_srcB\t3\tblend_option\tAdd"); +Heightfield::add("Smooth Ridges/Valleys\ttab_SmoothRidge\tridgesmooth_factor\t0.850\tridgesmooth_iter\t1"); +Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t3\trmf_rough\t0.000\trmf_detail\tVery High\trmf_seed\t1468280105"); +Heightfield::add("Filter\ttab_Filter\tfilter\t1.00000 1.00000 0.99231 1.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.00000 0.00000 0.00000 "); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t7\tblend_option\tMultiply"); diff --git a/base/terrains/heightfield/Home.Snow_heightfield.cs b/base/terrains/heightfield/Home.Snow_heightfield.cs new file mode 100644 index 0000000..07ea78e --- /dev/null +++ b/base/terrains/heightfield/Home.Snow_heightfield.cs @@ -0,0 +1,8 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t225\tgeneral_water\t0\tgeneral_centerx\t0\tgeneral_centery\t0"); +Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t3\trmf_rough\t0.000\trmf_detail\tHigh\trmf_seed\t1298135813"); +Heightfield::add("Filter\ttab_Filter\tfilter\t1.00000 1.00000 1.00000 1.00000 0.79231 0.31538 0.00000 0.00000 0.00000 "); +Heightfield::add("Filter\ttab_Filter\tfilter\t1.00000 1.00000 0.73846 0.41538 0.15385 0.00000 0.00000 "); +Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t7\trmf_rough\t0.000\trmf_detail\tVery High\trmf_seed\t159547841"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t2\tblend_option\tMultiply"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.878947\tblend_srcB\t3\tblend_option\tAdd"); +Heightfield::add("Smooth Ridges/Valleys\ttab_SmoothRidge\tridgesmooth_factor\t0.850\tridgesmooth_iter\t1"); diff --git a/base/terrains/heightfield/Hunters.Burnout_heightfield.cs b/base/terrains/heightfield/Hunters.Burnout_heightfield.cs new file mode 100644 index 0000000..0d6cfbc --- /dev/null +++ b/base/terrains/heightfield/Hunters.Burnout_heightfield.cs @@ -0,0 +1 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t300\tgeneral_water\t0.000\tgeneral_centerx\t0\tgeneral_centery\t0"); diff --git a/base/terrains/heightfield/Hunters.Casern_Cavite_heightfield.cs b/base/terrains/heightfield/Hunters.Casern_Cavite_heightfield.cs new file mode 100644 index 0000000..0d6cfbc --- /dev/null +++ b/base/terrains/heightfield/Hunters.Casern_Cavite_heightfield.cs @@ -0,0 +1 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t300\tgeneral_water\t0.000\tgeneral_centerx\t0\tgeneral_centery\t0"); diff --git a/base/terrains/heightfield/Hunters.Chaopia_heightfield.cs b/base/terrains/heightfield/Hunters.Chaopia_heightfield.cs new file mode 100644 index 0000000..0d6cfbc --- /dev/null +++ b/base/terrains/heightfield/Hunters.Chaopia_heightfield.cs @@ -0,0 +1 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t300\tgeneral_water\t0.000\tgeneral_centerx\t0\tgeneral_centery\t0"); diff --git a/base/terrains/heightfield/Hunters.Intaglio_heightfield.cs b/base/terrains/heightfield/Hunters.Intaglio_heightfield.cs new file mode 100644 index 0000000..0d6cfbc --- /dev/null +++ b/base/terrains/heightfield/Hunters.Intaglio_heightfield.cs @@ -0,0 +1 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t300\tgeneral_water\t0.000\tgeneral_centerx\t0\tgeneral_centery\t0"); diff --git a/base/terrains/heightfield/Hunters.MyrkWood_heightfield.cs b/base/terrains/heightfield/Hunters.MyrkWood_heightfield.cs new file mode 100644 index 0000000..0d6cfbc --- /dev/null +++ b/base/terrains/heightfield/Hunters.MyrkWood_heightfield.cs @@ -0,0 +1 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t300\tgeneral_water\t0.000\tgeneral_centerx\t0\tgeneral_centery\t0"); diff --git a/base/terrains/heightfield/Hunters.Rasp_heightfield.cs b/base/terrains/heightfield/Hunters.Rasp_heightfield.cs new file mode 100644 index 0000000..9e4193e --- /dev/null +++ b/base/terrains/heightfield/Hunters.Rasp_heightfield.cs @@ -0,0 +1,3 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t150\tgeneral_water\t0\tgeneral_centerx\t0\tgeneral_centery\t0"); +Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t3\trmf_rough\t0.000\trmf_detail\tVery High\trmf_seed\t816160549"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.35385 0.35385 0.35385 0.34615 0.31538 0.31538 0.31538 0.30769 0.21538 0.20000 0.19231 0.11538 0.09231 0.08462 0.00769 0.01538 "); diff --git a/base/terrains/heightfield/Hunters.SunDried_heightfield.cs b/base/terrains/heightfield/Hunters.SunDried_heightfield.cs new file mode 100644 index 0000000..0d6cfbc --- /dev/null +++ b/base/terrains/heightfield/Hunters.SunDried_heightfield.cs @@ -0,0 +1 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t300\tgeneral_water\t0.000\tgeneral_centerx\t0\tgeneral_centery\t0"); diff --git a/base/terrains/heightfield/Lush.cs b/base/terrains/heightfield/Lush.cs new file mode 100644 index 0000000..26dfbd0 --- /dev/null +++ b/base/terrains/heightfield/Lush.cs @@ -0,0 +1,9 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t0\tgeneral_scale\t300\tgeneral_water\t0.257895"); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t7\tfbm_rough\t0.000\tfBm_detail\tNormal\tfBm_seed\t862821085"); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t5\tfbm_rough\t0.000\tfBm_detail\tNormal\tfBm_seed\t356749711"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t1\tblend_option\tMax"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.00000 0.21538 0.26923 0.45385 0.63077 0.80000 1.00000 "); +Heightfield::add("Smoothing\ttab_Smooth\tsmooth_factor\t0.500\tsmooth_iter\t8"); +Heightfield::add("Sinus\ttab_Sinus\tsinus_filter\t1.00000 0.76154 0.15385 0.08462 0.01538 0.02308 0.46923 \tsinus_seed\t593540521"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.326316\tblend_srcB\t5\tblend_option\tadd"); +Heightfield::add("Smooth Water\ttab_SmoothWater\twatersmooth_factor\t0.800\twatersmooth_iter\t8"); diff --git a/base/terrains/heightfield/Lush1.cs b/base/terrains/heightfield/Lush1.cs new file mode 100644 index 0000000..6e0cb52 --- /dev/null +++ b/base/terrains/heightfield/Lush1.cs @@ -0,0 +1,9 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t0\tgeneral_scale\t300\tgeneral_water\t0.257895"); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t7\tfbm_rough\t0.000\tfBm_detail\tNormal\tfBm_seed\t258865285"); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t5\tfbm_rough\t0.000\tfBm_detail\tNormal\tfBm_seed\t1997022699"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t1\tblend_option\tMax"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.00000 0.21538 0.26923 0.45385 0.63077 0.80000 1.00000 "); +Heightfield::add("Smoothing\ttab_Smooth\tsmooth_factor\t0.500\tsmooth_iter\t8"); +Heightfield::add("Sinus\ttab_Sinus\tsinus_filter\t1.00000 0.76154 0.15385 0.08462 0.01538 0.02308 0.46923 \tsinus_seed\t593540521"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.326316\tblend_srcB\t5\tblend_option\tadd"); +Heightfield::add("Smooth Water\ttab_SmoothWater\twatersmooth_factor\t0.800\twatersmooth_iter\t8"); diff --git a/base/terrains/heightfield/Lush2.cs b/base/terrains/heightfield/Lush2.cs new file mode 100644 index 0000000..496d050 --- /dev/null +++ b/base/terrains/heightfield/Lush2.cs @@ -0,0 +1,9 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t0\tgeneral_scale\t300\tgeneral_water\t0.336842"); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t7\tfbm_rough\t0.000\tfBm_detail\tNormal\tfBm_seed\t2023216993"); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t5\tfbm_rough\t0.000\tfBm_detail\tNormal\tfBm_seed\t682699217"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t1\tblend_option\tMax"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.00000 0.21538 0.26923 0.45385 0.63077 0.80000 1.00000 "); +Heightfield::add("Smoothing\ttab_Smooth\tsmooth_factor\t0.500\tsmooth_iter\t8"); +Heightfield::add("Sinus\ttab_Sinus\tsinus_filter\t1.00000 0.76154 0.15385 0.08462 0.01538 0.02308 0.46923 \tsinus_seed\t593540521"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.326316\tblend_srcB\t5\tblend_option\tadd"); +Heightfield::add("Smooth Water\ttab_SmoothWater\twatersmooth_factor\t0.800\twatersmooth_iter\t8"); diff --git a/base/terrains/heightfield/Lush3.cs b/base/terrains/heightfield/Lush3.cs new file mode 100644 index 0000000..a0c4968 --- /dev/null +++ b/base/terrains/heightfield/Lush3.cs @@ -0,0 +1,9 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t0\tgeneral_scale\t300\tgeneral_water\t0.178947"); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t8\tfbm_rough\t0.000\tfBm_detail\tNormal\tfBm_seed\t1936266765"); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t5\tfbm_rough\t0.000\tfBm_detail\tNormal\tfBm_seed\t35907461"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t1\tblend_option\tMax"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.00000 0.21538 0.26923 0.45385 0.63077 0.80000 1.00000 "); +Heightfield::add("Smoothing\ttab_Smooth\tsmooth_factor\t0.500\tsmooth_iter\t8"); +Heightfield::add("Sinus\ttab_Sinus\tsinus_filter\t1.00000 0.76154 0.15385 0.08462 0.01538 0.02308 0.46923 \tsinus_seed\t593540521"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.326316\tblend_srcB\t5\tblend_option\tadd"); +Heightfield::add("Smooth Water\ttab_SmoothWater\twatersmooth_factor\t0.800\twatersmooth_iter\t8"); diff --git a/base/terrains/heightfield/Lush4.cs b/base/terrains/heightfield/Lush4.cs new file mode 100644 index 0000000..c9a24d7 --- /dev/null +++ b/base/terrains/heightfield/Lush4.cs @@ -0,0 +1,9 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t0\tgeneral_scale\t300\tgeneral_water\t0.326316"); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t7\tfbm_rough\t0.000\tfBm_detail\tNormal\tfBm_seed\t1333931533"); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t5\tfbm_rough\t0.000\tfBm_detail\tNormal\tfBm_seed\t865596269"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t1\tblend_option\tMax"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.00000 0.21538 0.26923 0.45385 0.63077 0.80000 1.00000 "); +Heightfield::add("Smoothing\ttab_Smooth\tsmooth_factor\t0.500\tsmooth_iter\t8"); +Heightfield::add("Sinus\ttab_Sinus\tsinus_filter\t1.00000 0.76154 0.15385 0.08462 0.01538 0.02308 0.46923 \tsinus_seed\t593540521"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.326316\tblend_srcB\t5\tblend_option\tadd"); +Heightfield::add("Smooth Water\ttab_SmoothWater\twatersmooth_factor\t0.800\twatersmooth_iter\t8"); diff --git a/base/terrains/heightfield/Lush5.cs b/base/terrains/heightfield/Lush5.cs new file mode 100644 index 0000000..4e268bf --- /dev/null +++ b/base/terrains/heightfield/Lush5.cs @@ -0,0 +1,13 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t0\tgeneral_scale\t300\tgeneral_water\t0\tgeneral_centerx\t0\tgeneral_centery\t0"); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t5\tfbm_rough\t0.000\tfBm_detail\tVery Low\tfBm_seed\t1745881757"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.00000 0.00000 0.00000 0.36923 1.00000 1.00000 1.00000 "); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t6\tfbm_rough\t0.000\tfBm_detail\tVery Low\tfBm_seed\t1845833893"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.00000 0.16667 0.20769 0.50000 0.56154 1.00000 1.00000 "); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.589474\tblend_srcB\t2wwwwwwwwwwwwwww\tblend_option\tMax"); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t6\tfbm_rough\t0.000\tfBm_detail\tVery Low\tfBm_seed\t1764638701"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.00000 0.17692 0.20769 0.25385 0.75385 0.83333 0.83846 "); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.426316\tblend_srcB\t5\tblend_option\tMax"); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t10\tfbm_rough\t0.000\tfBm_detail\tLow\tfBm_seed\t44051101"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.00000 0.29231 0.33333 0.61538 0.66667 0.99231 1.00000 "); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.405263\tblend_srcB\t8\tblend_option\tadd"); +Heightfield::add("Smooth Ridges/Valleys\ttab_SmoothRidge\tridgesmooth_factor\t0.850\tridgesmooth_iter\t12"); diff --git a/base/terrains/heightfield/Lush8.cs b/base/terrains/heightfield/Lush8.cs new file mode 100644 index 0000000..0c41617 --- /dev/null +++ b/base/terrains/heightfield/Lush8.cs @@ -0,0 +1,8 @@ +Heightfield::add("\t"); +Heightfield::add("General\tTab_general\tgeneral_min_height\t0\tgeneral_scale\t300\tgeneral_water\t0\tgeneral_centerx\t0\tgeneral_centery\t0"); +Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t3\trmf_rough\t0.000\trmf_detail\tLow\trmf_seed\t1405652629"); +Heightfield::add("Sinus\ttab_Sinus\tsinus_filter\t0.63846 0.66154 0.35385 0.41538 0.32308 0.11538 0.16923 \tsinus_seed\t2016338147"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.521053\tblend_srcB\t2\tblend_option\tMax"); +Heightfield::add("Sinus\ttab_Sinus\tsinus_filter\t0.39231 0.26923 0.21538 0.13846 0.08462 0.00000 0.00000 \tsinus_seed\t27323861"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.452632\tblend_srcB\t4\tblend_option\tMax"); +Heightfield::add("Smooth Ridges/Valleys\ttab_SmoothRidge\tridgesmooth_factor\t0.850\tridgesmooth_iter\t6"); diff --git a/base/terrains/heightfield/Mark1_heightfield.cs b/base/terrains/heightfield/Mark1_heightfield.cs new file mode 100644 index 0000000..4035291 --- /dev/null +++ b/base/terrains/heightfield/Mark1_heightfield.cs @@ -0,0 +1,5 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t0\tgeneral_scale\t125\tgeneral_water\t0\tgeneral_centerx\t0\tgeneral_centery\t0"); +Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t5\trmf_rough\t0.000\trmf_detail\tHigh\trmf_seed\t1392979437"); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t15\tfbm_rough\t0.000\tfBm_detail\tNormal\tfBm_seed\t737731415"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.00000 0.00000 0.08462 0.46154 0.68462 0.73846 0.77692 "); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t1\tblend_option\t"); diff --git a/base/terrains/heightfield/NewLava1_heightfield.cs b/base/terrains/heightfield/NewLava1_heightfield.cs new file mode 100644 index 0000000..56231be --- /dev/null +++ b/base/terrains/heightfield/NewLava1_heightfield.cs @@ -0,0 +1,8 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t210\tgeneral_water\t0\tgeneral_centerx\t0\tgeneral_centery\t0"); +Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t3\trmf_rough\t0.000\trmf_detail\tVery High\trmf_seed\t1298135813"); +Heightfield::add("Filter\ttab_Filter\tfilter\t1.00000 1.00000 1.00000 1.00000 0.79231 0.43846 0.02308 0.00000 0.31538 "); +Heightfield::add("Filter\ttab_Filter\tfilter\t1.00000 1.00000 0.73846 0.41538 0.15385 0.00000 0.00000 "); +Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t7\trmf_rough\t0.000\trmf_detail\tVery High\trmf_seed\t159547841"); +Heightfield::add("Smooth Ridges/Valleys\ttab_SmoothRidge\tridgesmooth_factor\t0.60\tridgesmooth_iter\t1"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t2\tblend_option\tMultiply"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.878947\tblend_srcB\t3\tblend_option\tAdd"); diff --git a/base/terrains/heightfield/Overreach_heightfield.cs b/base/terrains/heightfield/Overreach_heightfield.cs new file mode 100644 index 0000000..ba67a96 --- /dev/null +++ b/base/terrains/heightfield/Overreach_heightfield.cs @@ -0,0 +1,7 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t180\tgeneral_water\t0\tgeneral_centerx\t0\tgeneral_centery\t0"); +Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t4\trmf_rough\t0.000\trmf_detail\tHigh\trmf_seed\t1396069269"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.01538 0.01538 0.03846 0.13846 0.16154 0.22308 0.28462 0.32308 0.35385 0.46923 0.51538 0.54615 0.63077 0.79231 "); +Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t5\trmf_rough\t0.000\trmf_detail\t\trmf_seed\t2048795645"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.98462 0.88462 0.75385 0.64615 0.53846 0.48462 0.33846 0.29231 0.24615 0.17692 0.06154 0.01538 0.01538 0.01538 "); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t2\tblend_option\tMultiply"); +Heightfield::add("Smooth Ridges/Valleys\ttab_SmoothRidge\tridgesmooth_factor\t0.600\tridgesmooth_iter\t1"); diff --git a/base/terrains/heightfield/Reversion_heightfield.cs b/base/terrains/heightfield/Reversion_heightfield.cs new file mode 100644 index 0000000..e48d3bb --- /dev/null +++ b/base/terrains/heightfield/Reversion_heightfield.cs @@ -0,0 +1,7 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t125\tgeneral_water\t0\tgeneral_centerx\t0\tgeneral_centery\t0"); +Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t4\trmf_rough\t0.000\trmf_detail\tHigh\trmf_seed\t565683215"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.01538 0.01538 0.03846 0.13846 0.16154 0.22308 0.28462 0.32308 0.35385 0.46923 0.51538 0.54615 0.63077 0.79231 "); +Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t5\trmf_rough\t0.000\trmf_detail\tHigh\trmf_seed\t721142701"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.98462 0.88462 0.75385 0.64615 0.53846 0.48462 0.33846 0.29231 0.24615 0.17692 0.06154 0.01538 0.01538 0.01538 "); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t2\tblend_option\tMultiply"); +Heightfield::add("Smooth Ridges/Valleys\ttab_SmoothRidge\tridgesmooth_factor\t0.600\tridgesmooth_iter\t1"); diff --git a/base/terrains/heightfield/Roads.cs b/base/terrains/heightfield/Roads.cs new file mode 100644 index 0000000..d04dab0 --- /dev/null +++ b/base/terrains/heightfield/Roads.cs @@ -0,0 +1,7 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t200\tgeneral_water\t0\tgeneral_centerx\t0\tgeneral_centery\t0"); +Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t9\trmf_rough\t0.000\trmf_detail\tVery Low\trmf_seed\t645190603"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.59231 0.59231 0.59231 0.59231 0.59231 0.59231 0.59231 0.53846 0.09231 0.00000 0.00000 "); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.00000 0.16667 0.33333 0.50000 0.66667 0.83333 1.00000 "); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t11\tfbm_rough\t0.000\tfBm_detail\tHigh\tfBm_seed\t69297613"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t2\tblend_option\tMultiply"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.715789\tblend_srcB\t3\tblend_option\t"); diff --git a/base/terrains/heightfield/Siege.Gauntlet_heightfield.cs b/base/terrains/heightfield/Siege.Gauntlet_heightfield.cs new file mode 100644 index 0000000..0d6cfbc --- /dev/null +++ b/base/terrains/heightfield/Siege.Gauntlet_heightfield.cs @@ -0,0 +1 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t300\tgeneral_water\t0.000\tgeneral_centerx\t0\tgeneral_centery\t0"); diff --git a/base/terrains/heightfield/Siege.IceBound_heightfield.cs b/base/terrains/heightfield/Siege.IceBound_heightfield.cs new file mode 100644 index 0000000..0d6cfbc --- /dev/null +++ b/base/terrains/heightfield/Siege.IceBound_heightfield.cs @@ -0,0 +1 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t300\tgeneral_water\t0.000\tgeneral_centerx\t0\tgeneral_centery\t0"); diff --git a/base/terrains/heightfield/SinglePlayer.Skiing_heightfield.cs b/base/terrains/heightfield/SinglePlayer.Skiing_heightfield.cs new file mode 100644 index 0000000..d5aaec3 --- /dev/null +++ b/base/terrains/heightfield/SinglePlayer.Skiing_heightfield.cs @@ -0,0 +1,5 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t200\tgeneral_water\t0\tgeneral_centerx\t0\tgeneral_centery\t0"); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t7\tfbm_rough\t0.000\tfBm_detail\tNormal\tfBm_seed\t1136027117"); +Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t3\trmf_rough\t0.000\trmf_detail\tNormal\trmf_seed\t136868653"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.205263\tblend_srcB\t1\tblend_option\tadd"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.00000 0.05385 0.17692 0.33077 0.53846 0.74615 1.00000 "); diff --git a/base/terrains/heightfield/Sounds.Mission1_heightfield.cs b/base/terrains/heightfield/Sounds.Mission1_heightfield.cs new file mode 100644 index 0000000..0d6cfbc --- /dev/null +++ b/base/terrains/heightfield/Sounds.Mission1_heightfield.cs @@ -0,0 +1 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t300\tgeneral_water\t0.000\tgeneral_centerx\t0\tgeneral_centery\t0"); diff --git a/base/terrains/heightfield/ThinIce_heightfield.cs b/base/terrains/heightfield/ThinIce_heightfield.cs new file mode 100644 index 0000000..de3a95c --- /dev/null +++ b/base/terrains/heightfield/ThinIce_heightfield.cs @@ -0,0 +1,12 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t210\tgeneral_water\t0\tgeneral_centerx\t0\tgeneral_centery\t0"); +Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t3\trmf_rough\t0.000\trmf_detail\tVery High\trmf_seed\t1298135813"); +Heightfield::add("Filter\ttab_Filter\tfilter\t1.00000 1.00000 1.00000 0.95385 0.63846 0.11538 0.00000 0.00000 0.00000 "); +Heightfield::add("Filter\ttab_Filter\tfilter\t1.00000 1.00000 0.84615 0.56154 0.25385 0.00000 0.00000 "); +Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t5\trmf_rough\t0.000\trmf_detail\tVery High\trmf_seed\t159547841"); +Heightfield::add("Smooth Ridges/Valleys\ttab_SmoothRidge\tridgesmooth_factor\t0.600\tridgesmooth_iter\t1"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t2\tblend_option\tMultiply"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.878947\tblend_srcB\t3\tblend_option\tAdd"); +Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t3\trmf_rough\t0.000\trmf_detail\tVery High\trmf_seed\t1298135813"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.99231 1.00000 "); +Heightfield::add("Filter\ttab_Filter\tfilter\t1.00000 1.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 "); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t7\tblend_option\tMultiply"); diff --git a/base/terrains/heightfield/Working.Badlands1_heightfield.cs b/base/terrains/heightfield/Working.Badlands1_heightfield.cs new file mode 100644 index 0000000..e27ca11 --- /dev/null +++ b/base/terrains/heightfield/Working.Badlands1_heightfield.cs @@ -0,0 +1,6 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t250\tgeneral_water\t0\tgeneral_centerx\t0\tgeneral_centery\t0"); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t10\tfbm_rough\t0.000\tfBm_detail\tHigh\tfBm_seed\t1546771905"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.00000 0.00000 0.10526 0.11538 0.20000 0.20769 0.32308 0.35385 0.42105 0.43077 0.52308 0.57895 0.59231 0.68421 0.73684 0.78947 0.79231 0.89474 0.90769 0.93846 "); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t5\tfbm_rough\t0.000\tfBm_detail\tNormal\tfBm_seed\t1296838845"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.99231 1.00000 1.00000 0.77692 0.26154 0.00000 0.00000 "); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t2\tblend_option\tMultiply"); diff --git a/base/terrains/heightfield/Working.Badlands2_heightfield.cs b/base/terrains/heightfield/Working.Badlands2_heightfield.cs new file mode 100644 index 0000000..d37164f --- /dev/null +++ b/base/terrains/heightfield/Working.Badlands2_heightfield.cs @@ -0,0 +1,6 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t275\tgeneral_water\t0\tgeneral_centerx\t0\tgeneral_centery\t0"); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t8\tfbm_rough\t0.000\tfBm_detail\tHigh\tfBm_seed\t577576349"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.00000 0.00000 0.07692 0.09231 0.20000 0.20769 0.32308 0.35385 0.42105 0.43077 0.52308 0.57895 0.59231 0.68421 0.73684 0.78947 0.79231 0.89474 0.90769 0.93846 "); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t5\tfbm_rough\t0.000\tfBm_detail\tNormal\tfBm_seed\t647969045"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.99231 1.00000 1.00000 0.77692 0.26154 0.00000 0.00000 "); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t2\tblend_option\tMultiply"); diff --git a/base/terrains/heightfield/Working.Badlands3_heightfield.cs b/base/terrains/heightfield/Working.Badlands3_heightfield.cs new file mode 100644 index 0000000..e054b0e --- /dev/null +++ b/base/terrains/heightfield/Working.Badlands3_heightfield.cs @@ -0,0 +1,6 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t250\tgeneral_water\t0\tgeneral_centerx\t0\tgeneral_centery\t0"); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t9\tfbm_rough\t0.000\tfBm_detail\tHigh\tfBm_seed\t1722431131"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.00000 0.00000 0.10526 0.11538 0.20000 0.20769 0.32308 0.35385 0.42105 0.43077 0.52308 0.57895 0.59231 0.68421 0.73684 0.78947 0.79231 0.89474 0.90769 0.93846 "); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t5\tfbm_rough\t0.000\tfBm_detail\tNormal\tfBm_seed\t1296838845"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.99231 1.00000 1.00000 0.77692 0.26154 0.00000 0.00000 "); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t2\tblend_option\t"); diff --git a/base/terrains/heightfield/Working.Badlands4_heightfield.cs b/base/terrains/heightfield/Working.Badlands4_heightfield.cs new file mode 100644 index 0000000..5e12006 --- /dev/null +++ b/base/terrains/heightfield/Working.Badlands4_heightfield.cs @@ -0,0 +1,6 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t250\tgeneral_water\t0\tgeneral_centerx\t0\tgeneral_centery\t0"); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t9\tfbm_rough\t0.000\tfBm_detail\tHigh\tfBm_seed\t1722431131"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.00000 0.00000 0.10526 0.11538 0.20000 0.20769 0.32308 0.35385 0.42105 0.43077 0.52308 0.57895 0.59231 0.68421 0.73684 0.78947 0.79231 0.89474 0.90769 0.93846 "); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t4\tfbm_rough\t0.000\tfBm_detail\tHigh\tfBm_seed\t1982915875"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.99231 1.00000 1.00000 0.77692 0.26154 0.00000 0.00000 "); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t2\tblend_option\tMultiply"); diff --git a/base/terrains/heightfield/Working.Desert1_heightfield.cs b/base/terrains/heightfield/Working.Desert1_heightfield.cs new file mode 100644 index 0000000..7b98887 --- /dev/null +++ b/base/terrains/heightfield/Working.Desert1_heightfield.cs @@ -0,0 +1,3 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t125\tgeneral_water\t0\tgeneral_centerx\t0\tgeneral_centery\t0"); +Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t5\trmf_rough\t0.000\trmf_detail\tNormal\trmf_seed\t1774202283"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.31538 0.31538 0.31538 0.31538 0.31538 0.31538 0.31538 0.30769 0.21538 0.20000 0.19231 0.10769 0.09231 0.08462 0.03077 0.02308 "); diff --git a/base/terrains/heightfield/Working.Desert2_heightfield.cs b/base/terrains/heightfield/Working.Desert2_heightfield.cs new file mode 100644 index 0000000..4cf71a8 --- /dev/null +++ b/base/terrains/heightfield/Working.Desert2_heightfield.cs @@ -0,0 +1,7 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t60\tgeneral_water\t0\tgeneral_centerx\t0\tgeneral_centery\t0"); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t11\tfbm_rough\t0.000\tfBm_detail\tHigh\tfBm_seed\t1298293709"); +Heightfield::add("Filter\ttab_Filter\tfilter\t1.00000 0.98462 1.00000 1.00000 0.60769 0.54615 0.54545 0.47692 0.00000 0.00000 0.00000 0.00000 "); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t11\tfbm_rough\t0.000\tfBm_detail\tHigh\tfBm_seed\t1526447261"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.99231 1.00000 0.99231 0.99231 0.50769 0.45455 0.44615 0.39231 0.00000 0.00000 0.00000 0.00000 "); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.689474\tblend_srcB\t2\tblend_option\tMin"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.00000 0.09091 0.18182 0.27273 0.36364 0.45455 0.54545 0.63636 0.80000 0.81818 1.00000 1.00000 "); diff --git a/base/terrains/heightfield/Working.Desert5_heightfield.cs b/base/terrains/heightfield/Working.Desert5_heightfield.cs new file mode 100644 index 0000000..879b55c --- /dev/null +++ b/base/terrains/heightfield/Working.Desert5_heightfield.cs @@ -0,0 +1,5 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t70\tgeneral_water\t0\tgeneral_centerx\t0\tgeneral_centery\t0"); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t9\tfbm_rough\t0.000\tfBm_detail\tHigh\tfBm_seed\t478066413"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.00000 0.00000 0.00769 0.44615 0.50000 0.55385 1.00000 1.00000 1.00000 "); +Heightfield::add("Bitmap\ttab_Bitmap\tbitmap_name\tterrains/heightfield/LandBridges.png"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t2\tblend_option\tMultiply"); diff --git a/base/terrains/heightfield/Working.Lush1_heightfield.cs b/base/terrains/heightfield/Working.Lush1_heightfield.cs new file mode 100644 index 0000000..265a945 --- /dev/null +++ b/base/terrains/heightfield/Working.Lush1_heightfield.cs @@ -0,0 +1,7 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t275\tgeneral_water\t0\tgeneral_centerx\t0\tgeneral_centery\t0"); +Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t4\trmf_rough\t0.000\trmf_detail\tNormal\trmf_seed\t805898165"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.00000 0.00000 0.05385 0.13846 0.16154 0.22308 0.28462 0.32308 0.35385 0.46923 0.51538 0.54615 0.63077 0.79231 "); +Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t4\trmf_rough\t0.000\trmf_detail\tNormal\trmf_seed\t2059474115"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.98462 0.88462 0.75385 0.64615 0.53846 0.48462 0.40769 0.33846 0.24615 0.17692 0.11538 0.00000 0.00000 0.00000 "); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t2\tblend_option\tMultiply"); +Heightfield::add("Smooth Ridges/Valleys\ttab_SmoothRidge\tridgesmooth_factor\t0.850\tridgesmooth_iter\t1"); diff --git a/base/terrains/heightfield/Working.Lush2_heightfield.cs b/base/terrains/heightfield/Working.Lush2_heightfield.cs new file mode 100644 index 0000000..91c7ef1 --- /dev/null +++ b/base/terrains/heightfield/Working.Lush2_heightfield.cs @@ -0,0 +1,7 @@ +Heightfield::add("General\tTab_general\tgeneral_min_height\t50\tgeneral_scale\t225\tgeneral_water\t0\tgeneral_centerx\t0\tgeneral_centery\t0"); +Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t4\trmf_rough\t0.000\trmf_detail\tNormal\trmf_seed\t565683215"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.00000 0.00000 0.05385 0.13846 0.16154 0.22308 0.28462 0.32308 0.35385 0.46923 0.51538 0.54615 0.63077 0.79231 "); +Heightfield::add("Rigid MultiFractal\ttab_RMF\trmf_interval\t5\trmf_rough\t0.000\trmf_detail\tHigh\trmf_seed\t2064306989"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.98462 0.88462 0.75385 0.64615 0.53846 0.48462 0.33846 0.29231 0.24615 0.17692 0.06923 0.00000 0.00000 0.00000 "); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t2\tblend_option\tMultiply"); +Heightfield::add("Smooth Ridges/Valleys\ttab_SmoothRidge\tridgesmooth_factor\t0.850\tridgesmooth_iter\t1"); diff --git a/base/terrains/heightfield/desert.cs b/base/terrains/heightfield/desert.cs new file mode 100644 index 0000000..7d94f4e --- /dev/null +++ b/base/terrains/heightfield/desert.cs @@ -0,0 +1,8 @@ +Heightfield::add("\t"); +Heightfield::add("General\tTab_general\tgeneral_min_height\t0\tgeneral_scale\t175\tgeneral_water\t0.273684\tgeneral_centerx\t879.301\tgeneral_centery\t641.805"); +Heightfield::add("fBm Fractal\ttab_fBm\tfbm_interval\t6\tfbm_rough\t0.000\tfBm_detail\tVery Low\tfBm_seed\t915321697"); +Heightfield::add("Canyon Fractal\ttab_Canyon\tcanyon_freq\t4\tcanyon_factor\t0.500\tcanyon_seed\t919506399"); +Heightfield::add("Turbulence\ttab_Turbulence\tturbulence_factor\t0.4\tturbulence_radius\t40"); +Heightfield::add("Blend\ttab_Blend\tblend_factor\t0.5\tblend_srcB\t2\tblend_option\tSubtract"); +Heightfield::add("Filter\ttab_Filter\tfilter\t0.00000 0.10000 0.41538 0.50000 0.95385 1.00000 1.00000 "); +Heightfield::add("Smooth Water\ttab_SmoothWater\twatersmooth_factor\t0.500\twatersmooth_iter\t2"); diff --git a/base/terrains/texture/DeathBirdsFly_texture.cs b/base/terrains/texture/DeathBirdsFly_texture.cs new file mode 100644 index 0000000..d06d61e --- /dev/null +++ b/base/terrains/texture/DeathBirdsFly_texture.cs @@ -0,0 +1,4 @@ +Texture::addMaterial("DesertWorld.SandOrange\t1016\nFractal Distortion\ttab_DistortMask\t1017\t0\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t1356487715\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1018\t1017\ttextureSlopeFilter\t0.17692 0.05385 0.00000 0.00000 0.00000 0.00000 \tslopeDistort\t1"); +Texture::addMaterial("DesertWorld.RockFractured\t1019\nFractal Distortion\ttab_DistortMask\t1020\t0\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t1592783709\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1021\t1020\ttextureSlopeFilter\t0.00000 0.00000 0.00000 0.04615 0.13077 0.23077 \tslopeDistort\t1"); +Texture::addMaterial("DesertWorld.SandBurnt\t1022\nFractal Distortion\ttab_DistortMask\t1023\t0\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t592046387\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1024\t1023\ttextureSlopeFilter\t0.00000 0.00000 0.08462 0.07692 0.00000 0.00000 \tslopeDistort\t1"); +Texture::addMaterial("DesertWorld.SandOxidized\t1025\nFractal Distortion\ttab_DistortMask\t1026\t0\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t787833239\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1027\t1026\ttextureSlopeFilter\t0.00000 0.00000 0.03846 0.00000 0.00000 0.00000 \tslopeDistort\t1"); diff --git a/base/terrains/texture/Mark1_texture.cs b/base/terrains/texture/Mark1_texture.cs new file mode 100644 index 0000000..5624bba --- /dev/null +++ b/base/terrains/texture/Mark1_texture.cs @@ -0,0 +1,4 @@ +Texture::addMaterial("terrain.LushWorld.RockMossy\t1000\nFractal Distortion\ttab_DistortMask\t1001\t1001\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t358359485\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1002\t1001\ttextureSlopeFilter\t0.00000 0.00000 0.00000 0.00000 0.17692 0.46923 \tslopeDistort\t1"); +Texture::addMaterial("terrain.LushWorld.GrassDark\t1003\nFractal Distortion\ttab_DistortMask\t1004\t1004\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t455405997\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1005\t1004\ttextureSlopeFilter\t0.27692 0.08462 0.00769 0.00000 0.00000 0.00000 \tslopeDistort\t1"); +Texture::addMaterial("terrain.LushWorld.GrassLight\t1006\nFractal Distortion\ttab_DistortMask\t1007\t1007\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t67651845\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1008\t1007\ttextureSlopeFilter\t0.00000 0.00000 0.18462 0.01538 0.00000 0.00000 \tslopeDistort\t1"); +Texture::addMaterial("terrain.LushWorld.DirtMossy\t1009\nFractal Distortion\ttab_DistortMask\t1010\t1010\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t55297705\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1011\t1010\ttextureSlopeFilter\t0.00000 0.00000 0.03077 0.16923 0.00000 0.00000 \tslopeDistort\t1"); diff --git a/base/terrains/texture/NewDesert1_texture.cs b/base/terrains/texture/NewDesert1_texture.cs new file mode 100644 index 0000000..36d0a27 --- /dev/null +++ b/base/terrains/texture/NewDesert1_texture.cs @@ -0,0 +1,4 @@ +Texture::addMaterial("terrain.DesertWorld.SandOrange\t1001\nFractal Distortion\ttab_DistortMask\t1002\t0\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t1447235009\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1003\t1002\ttextureSlopeFilter\t0.18462 0.16154 0.11538 0.08462 0.03846 0.00000 0.00000 0.00000 0.00000 0.00000 \tslopeDistort\t1"); +Texture::addMaterial("terrain.DesertWorld.Sand\t1004\nFractal Distortion\ttab_DistortMask\t1005\t0\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t597161109\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1006\t1005\ttextureSlopeFilter\t0.22308 0.22308 0.20000 0.17692 0.14615 0.10769 0.07692 0.03846 0.00000 0.00000 \tslopeDistort\t1"); +Texture::addMaterial("terrain.DesertWorld.RockSmooth\t1010\nFractal Distortion\ttab_DistortMask\t1011\t0\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t158632477\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1012\t1011\ttextureSlopeFilter\t0.00000 0.00000 0.00769 0.05385 0.12308 0.16923 0.12308 0.06923 0.02308 0.00000 \tslopeDistort\t1"); +Texture::addMaterial("terrain.DesertWorld.RockFractured\t1013\nFractal Distortion\ttab_DistortMask\t1014\t0\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t2025573557\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1015\t1014\ttextureSlopeFilter\t0.00000 0.00000 0.04615 0.06154 0.09231 0.11538 0.13077 0.16923 0.23077 0.35385 \tslopeDistort\t1"); diff --git a/base/terrains/texture/NewDesert2_texture.cs b/base/terrains/texture/NewDesert2_texture.cs new file mode 100644 index 0000000..698cb7c --- /dev/null +++ b/base/terrains/texture/NewDesert2_texture.cs @@ -0,0 +1,4 @@ +Texture::addMaterial("terrain.DesertWorld.SandOrange\t1000\nFractal Distortion\ttab_DistortMask\t1001\t1001\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t1447235009\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1002\t1001\ttextureSlopeFilter\t0.24615 0.16154 0.11538 0.08462 0.03846 0.00000 0.00000 0.00000 0.00000 0.00000 \tslopeDistort\t1"); +Texture::addMaterial("terrain.DesertWorld.Sand\t1003\nFractal Distortion\ttab_DistortMask\t1004\t1004\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t597161109\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1005\t1004\ttextureSlopeFilter\t0.20000 0.22308 0.20000 0.17692 0.14615 0.10769 0.08462 0.06923 0.03077 0.00000 \tslopeDistort\t1"); +Texture::addMaterial("terrain.DesertWorld.RockSmooth\t1006\nFractal Distortion\ttab_DistortMask\t1007\t1007\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t158632477\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1008\t1007\ttextureSlopeFilter\t0.00000 0.00000 0.00769 0.05385 0.12308 0.16923 0.12308 0.06923 0.03846 0.03846 \tslopeDistort\t1"); +Texture::addMaterial("terrain.DesertWorld.RockFractured\t1009\nFractal Distortion\ttab_DistortMask\t1010\t1010\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t2025573557\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1011\t1010\ttextureSlopeFilter\t0.00000 0.01538 0.06923 0.06154 0.09231 0.11538 0.13077 0.16923 0.23077 0.35385 \tslopeDistort\t1"); diff --git a/base/terrains/texture/NewDesert3_texture.cs b/base/terrains/texture/NewDesert3_texture.cs new file mode 100644 index 0000000..df7c920 --- /dev/null +++ b/base/terrains/texture/NewDesert3_texture.cs @@ -0,0 +1,4 @@ +Texture::addMaterial("terrain.DesertWorld.SandOrange\t1000\nFractal Distortion\ttab_DistortMask\t1001\t1001\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t1447235009\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1002\t1001\ttextureSlopeFilter\t0.15385 0.13077 0.10769 0.08462 0.06154 0.01538 0.00769 0.00000 0.00000 0.00000 \tslopeDistort\t1"); +Texture::addMaterial("terrain.DesertWorld.Sand\t1003\nFractal Distortion\ttab_DistortMask\t1004\t1004\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t597161109\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1005\t1004\ttextureSlopeFilter\t0.20000 0.22308 0.20000 0.17692 0.14615 0.10769 0.08462 0.06923 0.03077 0.00000 \tslopeDistort\t1"); +Texture::addMaterial("terrain.DesertWorld.RockSmooth\t1006\nFractal Distortion\ttab_DistortMask\t1007\t1007\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t158632477\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1008\t1007\ttextureSlopeFilter\t0.00000 0.00000 0.06154 0.05385 0.12308 0.16923 0.13846 0.12308 0.20000 0.32308 \tslopeDistort\t1"); +Texture::addMaterial("terrain.DesertWorld.RockFractured\t1009\nFractal Distortion\ttab_DistortMask\t1010\t1010\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t2025573557\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1011\t1010\ttextureSlopeFilter\t0.00000 0.01538 0.06923 0.06154 0.09231 0.11538 0.13077 0.16923 0.23077 0.35385 \tslopeDistort\t1"); diff --git a/base/terrains/texture/NewLava1_texture.cs b/base/terrains/texture/NewLava1_texture.cs new file mode 100644 index 0000000..5fe3fd0 --- /dev/null +++ b/base/terrains/texture/NewLava1_texture.cs @@ -0,0 +1,4 @@ +Texture::addMaterial("LavaWorld.Crust\t1000\nFractal Distortion\ttab_DistortMask\t1001\t1001\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t939722797\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1002\t1001\ttextureSlopeFilter\t0.03077 0.06923 0.20000 0.26923 0.29231 0.31538 \tslopeDistort\t1"); +Texture::addMaterial("LavaWorld.LavaRockHot\t1003\nFractal Distortion\ttab_DistortMask\t1004\t1004\tdmask_interval\t20\tdmask_rough\t0.000\tdmask_seed\t1984410581\tdmask_filter\t0.00000 0.00000 0.13750 0.48750 0.86250 1.00000 1.00000 \nPlace by Slope\ttab_SlopeMask\t1005\t1004\ttextureSlopeFilter\t0.44615 0.31538 0.11538 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 \tslopeDistort\t1"); +Texture::addMaterial("LavaWorld.MuddyAsh\t1006\nFractal Distortion\ttab_DistortMask\t1007\t1007\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t1677429813\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1008\t1007\ttextureSlopeFilter\t0.28462 0.27692 0.23077 0.17692 0.12308 0.05385 0.02308 0.00000 0.00000 \tslopeDistort\t0\nPlace by Height\ttab_HeightMask\t1009\t1007\ttextureHeightFilter\t0.00000 0.08462 1.00000 0.99231 1.00000 0.99231 1.00000 1.00000 1.00000 \theightDistort\t1"); +Texture::addMaterial("IceWorld.RockBlue\t1010\nFractal Distortion\ttab_DistortMask\t1011\t1011\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t939722797\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1012\t1011\ttextureSlopeFilter\t0.00000 0.02308 0.11538 0.20769 0.31538 0.34615 \tslopeDistort\t1"); diff --git a/base/terrains/texture/NewLava2_texture.cs b/base/terrains/texture/NewLava2_texture.cs new file mode 100644 index 0000000..a64cbda --- /dev/null +++ b/base/terrains/texture/NewLava2_texture.cs @@ -0,0 +1,3 @@ +Texture::addMaterial("IceWorld.RockBlue\t1000\nFractal Distortion\ttab_DistortMask\t1001\t1001\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t367331293\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1002\t1001\ttextureSlopeFilter\t0.00000 0.01538 0.06923 0.13846 0.19231 0.30000 0.36923 0.43077 0.43077 0.43077 0.43077 \tslopeDistort\t0"); +Texture::addMaterial("LavaWorld.LavaRockHot\t1003\nFractal Distortion\ttab_DistortMask\t1004\t1004\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t1212156373\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1005\t1004\ttextureSlopeFilter\t0.36154 0.18462 0.13077 0.07692 0.06923 0.05385 0.03846 0.03077 0.00000 0.00000 0.00000 \tslopeDistort\t0\nPlace by Height\ttab_HeightMask\t1017\t1004\ttextureHeightFilter\t0.99231 1.00000 1.00000 0.00000 0.00000 0.00000 \theightDistort\t1"); +Texture::addMaterial("LavaWorld.MuddyAsh\t1006\nFractal Distortion\ttab_DistortMask\t1007\t1007\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t491343453\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1008\t1007\ttextureSlopeFilter\t1.00000 0.99231 0.96154 0.83846 0.46923 0.29231 0.19231 0.11538 0.06154 0.02308 0.00000 \tslopeDistort\t0\nPlace by Height\ttab_HeightMask\t1009\t1007\ttextureHeightFilter\t0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 1.00000 0.99231 1.00000 1.00000 \theightDistort\t1"); diff --git a/base/terrains/texture/NewLush1_texture.cs b/base/terrains/texture/NewLush1_texture.cs new file mode 100644 index 0000000..a2cbb4e --- /dev/null +++ b/base/terrains/texture/NewLush1_texture.cs @@ -0,0 +1,4 @@ +Texture::addMaterial("terrain.LushWorld.DirtMossy\t1016\nFractal Distortion\ttab_DistortMask\t1017\t0\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t1807707773\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1018\t1017\ttextureSlopeFilter\t0.06923 0.01538 0.00000 0.00000 0.00000 0.03077 0.08462 0.16154 0.30000 0.46154 \tslopeDistort\t1"); +Texture::addMaterial("terrain.LushWorld.GrassLight\t1019\nFractal Distortion\ttab_DistortMask\t1020\t0\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t919743021\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1021\t1020\ttextureSlopeFilter\t0.00000 0.00000 0.00769 0.02308 0.03846 0.08462 0.16154 0.07692 0.00000 0.00000 \tslopeDistort\t1"); +Texture::addMaterial("terrain.LushWorld.GrassMixed\t1022\nFractal Distortion\ttab_DistortMask\t1023\t0\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t1222040773\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1024\t1023\ttextureSlopeFilter\t0.02308 0.10000 0.13846 0.12308 0.09231 0.04615 0.02308 0.00769 0.00000 0.00000 \tslopeDistort\t1"); +Texture::addMaterial("terrain.LushWorld.RockMossy\t1025\nFractal Distortion\ttab_DistortMask\t1026\t0\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t419083197\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1027\t1026\ttextureSlopeFilter\t0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.07692 0.20769 0.00000 0.00000 \tslopeDistort\t1"); diff --git a/base/terrains/texture/NewLush2_texture.cs b/base/terrains/texture/NewLush2_texture.cs new file mode 100644 index 0000000..9c4f494 --- /dev/null +++ b/base/terrains/texture/NewLush2_texture.cs @@ -0,0 +1,4 @@ +Texture::addMaterial("terrain.LushWorld.DirtMossy\t1000\nFractal Distortion\ttab_DistortMask\t1001\t1001\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t1807707773\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1002\t1001\ttextureSlopeFilter\t0.22308 0.10769 0.03077 0.00000 0.00000 0.05385 0.10000 0.19231 0.30000 0.46154 \tslopeDistort\t1"); +Texture::addMaterial("terrain.LushWorld.GrassLight\t1003\nFractal Distortion\ttab_DistortMask\t1004\t1004\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t919743021\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1005\t1004\ttextureSlopeFilter\t0.02308 0.00000 0.00769 0.00000 0.00000 0.03077 0.05385 0.00000 0.00000 0.00000 \tslopeDistort\t1"); +Texture::addMaterial("terrain.LushWorld.GrassMixed\t1006\nFractal Distortion\ttab_DistortMask\t1007\t1007\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t1222040773\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1008\t1007\ttextureSlopeFilter\t0.02308 0.10000 0.13846 0.12308 0.09231 0.04615 0.00769 0.00000 0.00000 0.00000 \tslopeDistort\t1"); +Texture::addMaterial("terrain.LushWorld.RockMossy\t1009\nFractal Distortion\ttab_DistortMask\t1010\t1010\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t419083197\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1011\t1010\ttextureSlopeFilter\t0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.07692 0.33077 0.14615 0.06154 \tslopeDistort\t1"); diff --git a/base/terrains/texture/NewLush3_texture.cs b/base/terrains/texture/NewLush3_texture.cs new file mode 100644 index 0000000..3ceec4c --- /dev/null +++ b/base/terrains/texture/NewLush3_texture.cs @@ -0,0 +1,4 @@ +Texture::addMaterial("LushWorld.RockLight\t1000\nFractal Distortion\ttab_DistortMask\t1001\t1001\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t688453925\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1002\t1001\ttextureSlopeFilter\t0.00000 0.00000 0.00000 0.03077 0.13846 0.26154 0.36154 0.42308 0.44615 \tslopeDistort\t1"); +Texture::addMaterial("LushWorld.Lakebed\t1003\nFractal Distortion\ttab_DistortMask\t1004\t1004\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t1787271413\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1005\t1004\ttextureSlopeFilter\t0.00000 0.00000 0.00000 0.08462 0.13846 0.05385 0.01538 0.00000 0.00000 \tslopeDistort\t1"); +Texture::addMaterial("LushWorld.DirtMossy\t1006\nFractal Distortion\ttab_DistortMask\t1007\t1007\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t1997695663\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1008\t1007\ttextureSlopeFilter\t0.00000 0.00000 0.03077 0.07692 0.14615 0.13846 0.11538 0.06154 0.00000 \tslopeDistort\t1"); +Texture::addMaterial("LushWorld.GrassMixed\t1009\nFractal Distortion\ttab_DistortMask\t1010\t1010\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t957487229\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1011\t1010\ttextureSlopeFilter\t0.35385 0.21538 0.12308 0.08462 0.06923 0.06154 0.04615 0.03077 0.00000 \tslopeDistort\t1"); diff --git a/base/terrains/texture/NewSnow1_texture.cs b/base/terrains/texture/NewSnow1_texture.cs new file mode 100644 index 0000000..5f78d1a --- /dev/null +++ b/base/terrains/texture/NewSnow1_texture.cs @@ -0,0 +1,4 @@ +Texture::addMaterial("terrain.IceWorld.Snow\t1000\nFractal Distortion\ttab_DistortMask\t1001\t1001\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t1609567325\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1002\t1001\ttextureSlopeFilter\t0.15385 0.07692 0.16154 0.40000 0.40769 0.24615 0.14615 0.06154 0.01538 0.00000 \tslopeDistort\t1"); +Texture::addMaterial("terrain.IceWorld.RockBlue\t1003\nFractal Distortion\ttab_DistortMask\t1004\t1004\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t855719813\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1005\t1004\ttextureSlopeFilter\t0.00000 0.00000 0.00000 0.00000 0.00000 0.03846 0.17692 0.29231 0.33846 0.35385 \tslopeDistort\t1"); +Texture::addMaterial("terrain.IceWorld.SnowRock\t1006\nFractal Distortion\ttab_DistortMask\t1007\t1007\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t978097909\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1008\t1007\ttextureSlopeFilter\t0.00000 0.00000 0.00000 0.00000 0.00000 0.17692 0.18462 0.03846 0.00000 0.00000 \tslopeDistort\t1"); +Texture::addMaterial("terrain.IceWorld.Ice\t1009\nFractal Distortion\ttab_DistortMask\t1010\t1010\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t1120595385\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1011\t1010\ttextureSlopeFilter\t0.06923 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 \tslopeDistort\t1"); diff --git a/base/terrains/texture/NewSnow2_texture.cs b/base/terrains/texture/NewSnow2_texture.cs new file mode 100644 index 0000000..4dc487c --- /dev/null +++ b/base/terrains/texture/NewSnow2_texture.cs @@ -0,0 +1,4 @@ +Texture::addMaterial("terrain.IceWorld.RockBlue\t1000\nFractal Distortion\ttab_DistortMask\t1001\t1001\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t855719813\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1002\t1001\ttextureSlopeFilter\t0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.13846 0.35385 0.05385 0.00000 \tslopeDistort\t1"); +Texture::addMaterial("terrain.IceWorld.Snow\t1006\nFractal Distortion\ttab_DistortMask\t1007\t1007\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t1609567325\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1008\t1007\ttextureSlopeFilter\t0.03846 0.07692 0.16154 0.40000 0.40769 0.27692 0.19231 0.10000 0.00000 0.00000 \tslopeDistort\t1"); +Texture::addMaterial("terrain.IceWorld.Ice\t1009\nFractal Distortion\ttab_DistortMask\t1010\t1010\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t1120595385\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1011\t1010\ttextureSlopeFilter\t0.00000 0.00000 0.05385 0.00000 0.00000 0.00000 0.10000 0.25385 0.39231 0.41538 \tslopeDistort\t1"); +Texture::addMaterial("terrain.IceWorld.SnowRock\t1016\nFractal Distortion\ttab_DistortMask\t1017\t0\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t1600554621\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1018\t1017\ttextureSlopeFilter\t0.00000 0.00000 0.03077 0.11538 0.16154 0.00000 \tslopeDistort\t1"); diff --git a/base/terrains/texture/NewSnow3_textures.cs b/base/terrains/texture/NewSnow3_textures.cs new file mode 100644 index 0000000..a88a597 --- /dev/null +++ b/base/terrains/texture/NewSnow3_textures.cs @@ -0,0 +1,3 @@ +Texture::addMaterial("IceWorld.Snow\t1013\nFractal Distortion\ttab_DistortMask\t1014\t0\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t517777861\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1015\t1014\ttextureSlopeFilter\t0.03077 0.26923 0.31538 0.05385 0.00000 0.00000 \tslopeDistort\t1"); +Texture::addMaterial("IceWorld.SnowRock\t1016\nFractal Distortion\ttab_DistortMask\t1017\t0\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t1564994747\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1018\t1017\ttextureSlopeFilter\t0.00000 0.00000 0.00000 0.06923 0.26154 0.38462 \tslopeDistort\t1"); +Texture::addMaterial("IceWorld.Ice\t1019\nFractal Distortion\ttab_DistortMask\t1020\t0\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t587900981\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1021\t1020\ttextureSlopeFilter\t0.23846 0.13846 0.03077 0.00000 0.00000 0.00000 \tslopeDistort\t1"); diff --git a/base/terrains/texture/NewSnowyGrass_texture.cs b/base/terrains/texture/NewSnowyGrass_texture.cs new file mode 100644 index 0000000..26da105 --- /dev/null +++ b/base/terrains/texture/NewSnowyGrass_texture.cs @@ -0,0 +1,4 @@ +Texture::addMaterial("Badlands.RockChipped\t1000\nFractal Distortion\ttab_DistortMask\t1001\t1001\tdmask_interval\t20\tdmask_rough\t0.000\tdmask_seed\t531153865\tdmask_filter\t0.00000 0.00000 0.13750 0.48750 0.86250 1.00000 1.00000 \nPlace by Height\ttab_HeightMask\t1002\t1001\ttextureHeightFilter\t0.00000 0.06154 0.08462 0.08462 0.08462 0.08462 \theightDistort\t0\nPlace by Slope\ttab_SlopeMask\t1003\t1001\ttextureSlopeFilter\t0.00000 0.00000 0.40000 0.60000 0.80000 1.00000 \tslopeDistort\t1"); +Texture::addMaterial("LushWorld.DirtMossy\t1004\nFractal Distortion\ttab_DistortMask\t1005\t1005\tdmask_interval\t20\tdmask_rough\t0.000\tdmask_seed\t531153865\tdmask_filter\t0.00000 0.00000 0.13750 0.48750 0.86250 1.00000 1.00000 \nPlace by Height\ttab_HeightMask\t1006\t1005\ttextureHeightFilter\t0.00000 0.12308 0.07692 0.08462 0.08462 0.08462 \theightDistort\t0\nPlace by Slope\ttab_SlopeMask\t1007\t1005\ttextureSlopeFilter\t0.00000 0.10000 0.40000 0.60000 0.80000 1.00000 \tslopeDistort\t1"); +Texture::addMaterial("LushWorld.GrassMixed\t1008\nFractal Distortion\ttab_DistortMask\t1009\t1009\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t1825534471\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Height\ttab_HeightMask\t1010\t1009\ttextureHeightFilter\t0.10000 0.08462 0.04615 0.02308 0.00000 0.00000 \theightDistort\t0\nPlace by Slope\ttab_SlopeMask\t1011\t1009\ttextureSlopeFilter\t0.13846 0.15385 0.12308 0.00000 0.00769 0.00000 \tslopeDistort\t1"); +Texture::addMaterial("IceWorld.Snow\t1012\nFractal Distortion\ttab_DistortMask\t1013\t1013\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t1987423133\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Height\ttab_HeightMask\t1014\t1013\ttextureHeightFilter\t0.00000 0.00000 0.41538 0.58462 0.60000 0.59231 \theightDistort\t0\nPlace by Slope\ttab_SlopeMask\t1015\t1013\ttextureSlopeFilter\t0.18462 0.18462 0.01538 0.00000 0.00000 0.00000 \tslopeDistort\t1"); diff --git a/base/terrains/texture/Overreach_texture.cs b/base/terrains/texture/Overreach_texture.cs new file mode 100644 index 0000000..cafa3ea --- /dev/null +++ b/base/terrains/texture/Overreach_texture.cs @@ -0,0 +1,4 @@ +Texture::addMaterial("terrain.IceWorld.RockBlue\t1000\nFractal Distortion\ttab_DistortMask\t1001\t1001\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t855719813\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1002\t1001\ttextureSlopeFilter\t0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.40769 0.46923 0.48462 0.50769 \tslopeDistort\t1"); +Texture::addMaterial("terrain.IceWorld.Snow\t1003\nFractal Distortion\ttab_DistortMask\t1004\t1004\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t1609567325\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1005\t1004\ttextureSlopeFilter\t0.32308 0.29231 0.20769 0.15385 0.09231 0.04615 0.00000 0.00000 0.00000 0.00000 \tslopeDistort\t1"); +Texture::addMaterial("terrain.IceWorld.SnowRock\t1009\nFractal Distortion\ttab_DistortMask\t1010\t1010\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t1600554621\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1011\t1010\ttextureSlopeFilter\t0.00000 0.04615 0.30000 0.60769 0.11538 0.03846 \tslopeDistort\t1"); +Texture::addMaterial("IceWorld.SnowIce\t1013\nFractal Distortion\ttab_DistortMask\t1014\t0\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t635984589\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1015\t1014\ttextureSlopeFilter\t0.13846 0.09231 0.04615 0.00000 0.00000 0.00000 \tslopeDistort\t1"); diff --git a/base/terrains/texture/Reversion_texture.cs b/base/terrains/texture/Reversion_texture.cs new file mode 100644 index 0000000..361e9f8 --- /dev/null +++ b/base/terrains/texture/Reversion_texture.cs @@ -0,0 +1,4 @@ +Texture::addMaterial("LushWorld.GrassDark\t1000\nFractal Distortion\ttab_DistortMask\t1001\t1001\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t747095639\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1002\t1001\ttextureSlopeFilter\t0.23846 0.23846 0.13846 0.00000 0.00000 0.00000 0.00000 0.00000 \tslopeDistort\t1"); +Texture::addMaterial("LushWorld.DirtMossy\t1003\nFractal Distortion\ttab_DistortMask\t1004\t1004\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t1245509823\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1005\t1004\ttextureSlopeFilter\t0.16154 0.05385 0.03077 0.02308 0.02308 0.09231 0.23846 0.33077 \tslopeDistort\t1"); +Texture::addMaterial("LushWorld.RockMossy\t1006\nFractal Distortion\ttab_DistortMask\t1007\t1007\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t1047414797\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1008\t1007\ttextureSlopeFilter\t0.00000 0.00000 0.00000 0.00000 0.13077 0.57692 \tslopeDistort\t1"); +Texture::addMaterial("LushWorld.GrassMixed\t1009\nFractal Distortion\ttab_DistortMask\t1010\t1010\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t975009757\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1011\t1010\ttextureSlopeFilter\t0.00000 0.00000 0.06923 0.08462 0.00000 0.00000 \tslopeDistort\t1"); diff --git a/base/terrains/texture/Sounds.Mission1_texture.cs b/base/terrains/texture/Sounds.Mission1_texture.cs new file mode 100644 index 0000000..11cdaa8 --- /dev/null +++ b/base/terrains/texture/Sounds.Mission1_texture.cs @@ -0,0 +1,5 @@ +Texture::addMaterial("terrain.LushWorld.GrassMixed\t1000\nFractal Distortion\ttab_DistortMask\t1001\t1001\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t1058310159\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1002\t1001\ttextureSlopeFilter\t0.00000 0.20000 0.40000 0.41538 0.26154 0.00000 \tslopeDistort\t1"); +Texture::addMaterial("terrain.LushWorld.GrassLight\t1003\nFractal Distortion\ttab_DistortMask\t1004\t1004\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t1934927913\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1005\t1004\ttextureSlopeFilter\t0.00000 0.00000 0.00000 0.08462 0.19231 0.28462 \tslopeDistort\t1"); +Texture::addMaterial("terrain.LushWorld.RockMossy\t1006\nFractal Distortion\ttab_DistortMask\t1007\t1007\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t1575156427\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1008\t1007\ttextureSlopeFilter\t0.00000 0.00000 0.03077 0.00000 0.22308 0.84615 \tslopeDistort\t1"); +Texture::addMaterial("terrain.LushWorld.DirtMossy\t1009\nFractal Distortion\ttab_DistortMask\t1010\t1010\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t158808901\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1011\t1010\ttextureSlopeFilter\t0.00000 0.00000 0.00000 0.03077 0.14615 0.56154 \tslopeDistort\t1"); +Texture::addMaterial("terrain.LushWorld.Lakebed\t1012\nFractal Distortion\ttab_DistortMask\t1013\t1013\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t579979781\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Water Level\ttab_WaterMask\t1014\t1013\twaterDistort\t1"); diff --git a/base/terrains/texture/ThinIce_texture.cs b/base/terrains/texture/ThinIce_texture.cs new file mode 100644 index 0000000..40d1318 --- /dev/null +++ b/base/terrains/texture/ThinIce_texture.cs @@ -0,0 +1,4 @@ +Texture::addMaterial("IceWorld.Snow\t1000\nFractal Distortion\ttab_DistortMask\t1001\t1001\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t517777861\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1002\t1001\ttextureSlopeFilter\t0.20769 0.37692 0.36923 0.04615 0.00000 0.00000 \tslopeDistort\t1"); +Texture::addMaterial("IceWorld.SnowRock\t1003\nFractal Distortion\ttab_DistortMask\t1004\t1004\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t1564994747\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1005\t1004\ttextureSlopeFilter\t0.00000 0.00000 0.03077 0.20769 0.16154 0.03846 \tslopeDistort\t1\nPlace by Height\ttab_HeightMask\t1006\t1004\ttextureHeightFilter\t0.00000 0.08462 1.00000 1.00000 1.00000 1.00000 \theightDistort\t1"); +Texture::addMaterial("IceWorld.Ice\t1007\nFractal Distortion\ttab_DistortMask\t1008\t1008\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t587900981\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1009\t1008\ttextureSlopeFilter\t0.28462 0.07692 0.02308 0.00769 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 \tslopeDistort\t1"); +Texture::addMaterial("IceWorld.RockBlue\t1015\nFractal Distortion\ttab_DistortMask\t1016\t0\tdmask_interval\t20\tdmask_rough\t0\tdmask_seed\t14908261\tdmask_filter\t0.00000 0.00000 0.13750 0.487500 0.86250 1.00000 1.00000\nPlace by Slope\ttab_SlopeMask\t1017\t1016\ttextureSlopeFilter\t0.00000 0.00000 0.00000 0.00000 0.05385 0.33077 \tslopeDistort\t1\nPlace by Height\ttab_HeightMask\t1018\t1016\ttextureHeightFilter\t0.00000 0.00000 1.00000 1.00000 1.00000 1.00000 \theightDistort\t1"); diff --git a/base/textures/badlands/badlandsPropMap.cs b/base/textures/badlands/badlandsPropMap.cs new file mode 100644 index 0000000..64a6872 --- /dev/null +++ b/base/textures/badlands/badlandsPropMap.cs @@ -0,0 +1,25 @@ +//-------------------------------------- Desert interior texture property mapping + +addMaterialMapping("badlands/bd_ichute01", "environment: special/chuteTexture 0.25"); +addMaterialMapping("badlands/bd_ichute02a", "environment: special/chuteTexture 0.25"); + +//"Color: red green blue startAlpha endAlpha" +addMaterialMapping("terrain/BadLands.DirtBumpy", "color: 0.5 0.36 0.16 0.4 0.0"); +addMaterialMapping("terrain/BadLands.DirtChipped", "color: 0.5 0.36 0.16 0.4 0.0"); +addMaterialMapping("terrain/BadLands.DirtYellow", "color: 0.5 0.36 0.16 0.4 0.0"); +addMaterialMapping("terrain/BadLands.DirtYellowCracked", "color: 0.5 0.36 0.16 0.4 0.0"); +addMaterialMapping("terrain/BadLands.RockBrown", "color: 0.5 0.36 0.16 0.4 0.0"); +addMaterialMapping("terrain/BadLands.RockChipped", "color: 0.5 0.36 0.16 0.4 0.0"); +addMaterialMapping("terrain/BadLands.RockCracked", "color: 0.5 0.36 0.16 0.4 0.0"); + +//Soft sound = 0 +//Hard sound = 1 +//Metal sound = 2 +//Snow sound = 3 +addMaterialMapping("terrain/BadLands.DirtBumpy", "sound: 0"); +addMaterialMapping("terrain/BadLands.DirtChipped", "sound: 0"); +addMaterialMapping("terrain/BadLands.DirtYellow", "sound: 0"); +addMaterialMapping("terrain/BadLands.DirtYellowCracked", "sound: 0"); +addMaterialMapping("terrain/BadLands.RockBrown", "sound: 0"); +addMaterialMapping("terrain/BadLands.RockChipped", "sound: 0"); +addMaterialMapping("terrain/BadLands.RockCracked", "sound: 0"); diff --git a/base/textures/desert/desertPropMap.cs b/base/textures/desert/desertPropMap.cs new file mode 100644 index 0000000..3815edb --- /dev/null +++ b/base/textures/desert/desertPropMap.cs @@ -0,0 +1,25 @@ +//-------------------------------------- Desert interior texture property mapping + +addMaterialMapping("desert/cp_ichute01", "environment: special/chuteTexture 0.25"); +addMaterialMapping("desert/cp_ichute02", "environment: special/chuteTexture 0.25"); + +//"Color: red green blue startAlpha endAlpha" +addMaterialMapping("terrain/DesertWorld.RockFractured", "color: 0.35 0.2 0.05 0.7 0.0"); +addMaterialMapping("terrain/DesertWorld.RockSmooth", "color: 0.35 0.2 0.05 0.7 0.0"); +addMaterialMapping("terrain/DesertWorld.Sand", "color: 0.35 0.2 0.05 0.7 0.0"); +addMaterialMapping("terrain/DesertWorld.SandBrun", "color: 0.35 0.2 0.05 0.7 0.0"); +addMaterialMapping("terrain/DesertWorld.SandDark", "color: 0.35 0.2 0.05 0.7 0.0"); +addMaterialMapping("terrain/DesertWorld.SandOrange", "color: 0.35 0.2 0.05 0.7 0.0"); +addMaterialMapping("terrain/DesertWorld.SandOxidized", "color: 0.35 0.2 0.05 0.7 0.0"); + +//Soft sound = 0 +//Hard sound = 1 +//Metal sound = 2 +//Snow sound = 3 +addMaterialMapping("terrain/DesertWorld.RockFractured", "sound: 0"); +addMaterialMapping("terrain/DesertWorld.RockSmooth", "sound: 0"); +addMaterialMapping("terrain/DesertWorld.Sand", "sound: 0"); +addMaterialMapping("terrain/DesertWorld.SandBrun", "sound: 0"); +addMaterialMapping("terrain/DesertWorld.SandDark", "sound: 0"); +addMaterialMapping("terrain/DesertWorld.SandOrange", "sound: 0"); +addMaterialMapping("terrain/DesertWorld.SandOxidized", "sound: 0"); diff --git a/base/textures/emap.bmp b/base/textures/emap.bmp new file mode 100644 index 0000000..0da2734 Binary files /dev/null and b/base/textures/emap.bmp differ diff --git a/base/textures/ice/icePropMap.cs b/base/textures/ice/icePropMap.cs new file mode 100644 index 0000000..07e19ce --- /dev/null +++ b/base/textures/ice/icePropMap.cs @@ -0,0 +1,21 @@ +//-------------------------------------- Desert interior texture property mapping + +addMaterialMapping("ice/sw_ichute01", "environment: special/chuteTexture 0.25"); +addMaterialMapping("ice/sw_ichute02", "environment: special/chuteTexture 0.25"); + +//"Color: red green blue startAlpha endAlpha" +addMaterialMapping("terrain/IceWorld.Ice", "color: 0.9 0.9 0.9 0.4 0.0"); +addMaterialMapping("terrain/IceWorld.RockBlue", "color: 0.9 0.9 0.9 0.4 0.0"); +addMaterialMapping("terrain/IceWorld.Snow", "color: 0.9 0.9 0.9 0.4 0.0"); +addMaterialMapping("terrain/IceWorld.SnowIce", "color: 0.9 0.9 0.9 0.4 0.0"); +addMaterialMapping("terrain/IceWorld.SnowRock", "color: 0.9 0.9 0.9 0.4 0.0"); + +//Soft sound = 0 +//Hard sound = 1 +//Metal sound = 2 +//Snow sound = 3 +addMaterialMapping("terrain/IceWorld.Ice", "sound: 3"); +addMaterialMapping("terrain/IceWorld.RockBlue", "sound: 3"); +addMaterialMapping("terrain/IceWorld.Snow", "sound: 3"); +addMaterialMapping("terrain/IceWorld.SnowIce", "sound: 3"); +addMaterialMapping("terrain/IceWorld.SnowRock", "sound: 3"); diff --git a/base/textures/lava/lavaPropMap.cs b/base/textures/lava/lavaPropMap.cs new file mode 100644 index 0000000..038e32e --- /dev/null +++ b/base/textures/lava/lavaPropMap.cs @@ -0,0 +1,21 @@ +//-------------------------------------- Desert interior texture property mapping + +addMaterialMapping("lava/ds_ichute01", "environment: special/chuteTexture 0.25"); +addMaterialMapping("lava/ds_ichute02", "environment: special/chuteTexture 0.25"); +addMaterialMapping("lava/ds_jet01", "environment: special/lavareflect 0.3"); +addMaterialMapping("lava/ds_jet02", "environment: special/lavareflect 0.3"); + +//"Color: red green blue startAlpha endAlpha" +addMaterialMapping("terrain/LavaWorld.Crust", "color: 0.0 0.0 0.0 0.7 0.0"); +addMaterialMapping("terrain/LavaWorld.LavaRockHot", "color: 0.0 0.0 0.0 0.7 0.0"); +addMaterialMapping("terrain/LavaWorld.MuddyAsh", "color: 0.0 0.0 0.0 0.7 0.0"); +addMaterialMapping("terrain/LavaWorld.RockBlack", "color: 0.0 0.0 0.0 0.7 0.0"); + +//Soft sound = 0 +//Hard sound = 1 +//Metal sound = 2 +//Snow sound = 3 +addMaterialMapping("terrain/LavaWorld.Crust", "sound: 0"); +addMaterialMapping("terrain/LavaWorld.LavaRockHot", "sound: 0"); +addMaterialMapping("terrain/LavaWorld.MuddyAsh", "sound: 0"); +addMaterialMapping("terrain/LavaWorld.RockBlack", "sound: 0"); diff --git a/base/textures/lush/lushPropMap.cs b/base/textures/lush/lushPropMap.cs new file mode 100644 index 0000000..ca54ef7 --- /dev/null +++ b/base/textures/lush/lushPropMap.cs @@ -0,0 +1,26 @@ +//-------------------------------------- Desert interior texture property mapping + +addMaterialMapping("lush/be_ichute01", "environment: special/chuteTexture 0.25"); +addMaterialMapping("lush/be_ichute02", "environment: special/chuteTexture 0.25"); + +//"Color: red green blue startAlpha endAlpha" +addMaterialMapping("terrain/LushWorld.DirtMossy", "color: 0.46 0.36 0.26 0.4 0.0"); +addMaterialMapping("terrain/LushWorld.GrassDark", "color: 0.46 0.36 0.26 0.4 0.0"); +addMaterialMapping("terrain/LushWorld.GrassLight", "color: 0.46 0.36 0.26 0.4 0.0"); +addMaterialMapping("terrain/LushWorld.GrassMixed", "color: 0.46 0.36 0.26 0.4 0.0"); +addMaterialMapping("terrain/LushWorld.LakeBed", "color: 0.46 0.36 0.26 0.4 0.0"); +addMaterialMapping("terrain/LushWorld.RockLight", "color: 0.46 0.36 0.26 0.4 0.0"); +addMaterialMapping("terrain/LushWorld.RockMossy", "color: 0.46 0.36 0.26 0.4 0.0"); + +//Soft sound = 0 +//Hard sound = 1 +//Metal sound = 2 +//Snow sound = 3 +addMaterialMapping("terrain/LushWorld.DirtMossy", "sound: 0"); +addMaterialMapping("terrain/LushWorld.GrassDark", "sound: 0"); +addMaterialMapping("terrain/LushWorld.GrassLight", "sound: 0"); +addMaterialMapping("terrain/LushWorld.GrassMixed", "sound: 0"); +addMaterialMapping("terrain/LushWorld.LakeBed", "sound: 0"); +addMaterialMapping("terrain/LushWorld.RockLight", "sound: 0"); +addMaterialMapping("terrain/LushWorld.RockMossy", "sound: 0"); + diff --git a/base/version.cs b/base/version.cs new file mode 100644 index 0000000..8e40092 --- /dev/null +++ b/base/version.cs @@ -0,0 +1 @@ +buildVersion.setValue( "MAR 14, 2001, 11:22 PM (dmoore)" ); diff --git a/console_start.cs b/console_start.cs new file mode 100644 index 0000000..9b7c039 --- /dev/null +++ b/console_start.cs @@ -0,0 +1,1891 @@ +//-------------------------------------------------------------------------- +// +// Tribes 2 startup +// +//-------------------------------------------------------------------------- + +//-------------------------------------------------------------------------- +// parse arguments: + +$TestObjectFileName = ""; +$LaunchMode = "Normal"; +$Login = false; +$clientprefs = "prefs/clientPrefs.cs"; +$serverprefs = "prefs/serverPrefs.cs"; +$fromLauncher = false; + +//------------------------------------------------------------------------------ +function prepBuild() +{ + // this compiles all the scripts and guis + for(%file = findFirstFile("*.cs"); %file !$= ""; %file = findNextFile("*.cs")) + compile(%file); + for(%file = findFirstFile("*.gui"); %file !$= ""; %file = findNextFile("*.gui")) + compile(%file); +} + +//------------------------------------------------------------------------------ +function cleanupAudio() +{ + alxStopAll(); + AudioGui.delete(); + sButtonDown.delete(); + sButtonOver.delete(); +} + +function startAudio() +{ + //-------------------------------------- + // temp Audio Profiles + new AudioDescription(AudioGui) + { + volume = 1.0; + isLooping= false; + is3D = false; + type = $GuiAudioType; + }; + + new AudioProfile(sButtonDown) + { + filename = "gui/buttonDown.wav"; + description = "audioGui"; + preload = true; + }; + + new AudioProfile(sButtonOver) + { + filename = "gui/buttonOver.wav"; + description = "audioGui"; + preload = true; + }; + + $Audio::defaultDriver = "miles"; + audioDetect(); + if(!$noloadAudio) + { + // make sure there is a driver list + if($pref::Audio::drivers $= "") + $pref::Audio::drivers = $Audio::defaultDriver; + + // make sure that there is an active driver + if($pref::Audio::activeDriver $= "") + $pref::Audio::activeDriver = $Audio::defaultDriver; + + // install the active driver + $Audio::initialized = audioSetDriver($pref::Audio::activeDriver); + if(!$Audio::initialized) + { + error("Audio: failed to initialize using [" @ $pref::Audio::activeDriver @ "] driver"); + + // if the driver was not the default then attempt to load the default + if($pref::Audio::activeDriver !$= $Audio::defaultDriver) + { + error("Audio: attempting to initialize [" @ $Audio::defaultDriver @ "]"); + $Audio::initialized = audioSetDriver($Audio::defaultDriver); + if($Audio::initialized) + $pref::Audio::activeDriver = $Audio::defaultDriver; + } + } + + // just set the volumes that are needed now + if($Audio::initialized) + { + alxListenerf( AL_GAIN_LINEAR, $pref::Audio::masterVolume ); + alxSetChannelVolume( $GuiAudioType, $pref::Audio::guiVolume ); + } + } +} + +//------------------------------------------------------------------------------ +for($i = 1; $i < $Game::argc ; $i++) +{ + $arg = $Game::argv[$i]; + $nextArg = $Game::argv[$i+1]; + $nextArg2 = $Game::argv[$i+2]; + $hasNextArg = $Game::argc - $i > 1; + $has2NextArgs = $Game::argc - $i > 2; + + if (!stricmp(fileExt($arg), ".dif")) + { + $LaunchMode = "InteriorView"; + $TestObjectFileName = $arg; + echo($TestObjectFileName); + } + else if(!stricmp(fileExt($arg), ".dif\"")) + { + $LaunchMode = "InteriorView"; + $TestObjectFileName = getSubStr($arg,1, strlen($arg) - 2); + } + else if($arg $= "-dedicated") + { + $LaunchMode = "DedicatedServer"; + } + else if($arg $= "-clientprefs" && $hasNextArg) + { + $i++; + $clientprefs = $nextArg; + } + else if($arg $= "-serverprefs" && $hasNextArg) + { + $i++; + $serverprefs = $nextArg; + } + else if($arg $= "-host") + { + $LaunchMode = "HostGame"; + } + else if($arg $= "-mission" && $has2NextArgs) + { + $i += 2; + $mission = $nextArg; + $missionType = $nextArg2; + } + else if($arg $= "-connect" && $hasNextArg) + { + $i++; + $LaunchMode = "Connect"; + $JoinGameAddress = $nextArg; + } + else if($arg $= "-jload" && $hasNextArg) + { + $i++; + $JournalFile = $nextArg; + $JournalMode = "LoadJournal"; + } + else if($arg $= "-jsave" && $hasNextArg) + { + $i++; + $JournalFile = $nextArg; + $JournalMode = "SaveJournal"; + } + else if($arg $= "-jplay" && $hasNextArg) + { + $i++; + $JournalFile = $nextArg; + $journalMode = "PlayJournal"; + } + else if($arg $= "-navBuild" && $has2NextArgs) + { + $i += 2; + $LaunchMode = "NavBuild"; + $mission = $nextArg; + $missionType = $nextArg2; + } + else if($arg $= "-spnBuild" && $has2NextArgs) + { + $i += 2; + $LaunchMode = "SpnBuild"; + $mission = $nextArg; + $missionType = $nextArg2; + } + else if($arg $= "-demo") + { + $LaunchMode = "Demo"; + } + else if($arg $= "-login" && $has2NextArgs) + { + $i += 2; + $Login = true; + $LoginName = $nextArg; + $LoginPassword = $nextArg2; + } + else if($arg $= "-show") + { + $LaunchMode = "TSShow"; + } + else if($arg $= "-con") + { + $LaunchMode = "Console"; + } + else if ($arg $= "-bot" && $hasNextArg) + { + $i++; + $CmdLineBotCount = $nextArg; + } + else if ($arg $= "-light" && $hasNextArg) + { + $LaunchMode = "SceneLight"; + $mission = $nextArg; + } + else if ($arg $= "-prepbuild") + { + enableWinConsole(true); + prepBuild(); + setLogMode(1); + setEchoFileLoads(true); + } + else if($arg $= "-quit") + { + quit(); + return; + } + else if ($arg $= "-nologin") + { + $SkipLogin = true; + $LaunchMode = "Offline"; + } + else if ( $arg $= "-online" ) + $fromLauncher = true; +} + +// load autoexec once for command-line overrides: +exec("autoexec.cs", true); + +switch$( $JournalMode ) +{ + case "LoadJournal": + echo("Loading event log from journal: " @ $JournalFile); + loadJournal($JournalFile); + case "SaveJournal": + echo("Saving event log to journal: " @ $JournalFile); + saveJournal($JournalFile); + case "PlayJournal": + playJournal($JournalFile); +} + +//-------------------------------------------------------------------------- +// load defaults + +//error("FIX THIS: SHOULD CHECK FOR LOGIN PARAM"); + +exec("scripts/clientDefaults.cs", true); +exec("scripts/serverDefaults.cs", true); +exec($clientprefs, true, true); +exec($serverprefs, true, true); + +// load autoexec again to override video settings/window creation + +exec("autojournal.cs", true, true); // put journal'd startup options in here + // so you can autoconnect to servers, etc. +exec("autoexec.cs", true); + +// Go through the command line for setting overrides +// Added mostly for the Linux client (Sam Lantinga) +for($i = 1; $i < $Game::argc ; $i++) +{ + $arg = $Game::argv[$i]; + $nextArg = $Game::argv[$i+1]; + $hasNextArg = $Game::argc - $i > 1; + + if($arg $= "--nosound" || $arg $= "-s") + { + // This is a Linux null audio device specifier + $pref::OpenAL::driver = "'( ( devices '( null )))"; + } + else if($arg $= "--fullscreen" || $arg $= "-f") + { + $pref::Video::fullScreen = 1; + } + else if($arg $= "--windowed" || $arg $= "-w") + { + $pref::Video::fullScreen = 0; + } + else if(($arg $= "--gllibrary" || $arg $= "-g") && $hasNextArg) + { + $i++; + $pref::OpenGL::driver = $nextArg; + } +} + +//note - no argument means the seed will be set according to Platform::getRealMilliseconds()... +setRandomSeed(); + +if($winConsoleEnabled) + enableWinConsole(true); + +if( $Pref::useImmersion ) + enableImmersion( true ); + +switch( $pref::Shell::lastBackground ) +{ + case 0: + $ShellBackground = "gui/bg_Hammers.png"; + case 1: + $ShellBackground = "gui/bg_BloodEagle.png"; + case 2: + $ShellBackground = "gui/bg_DiamondSword.png"; + case 3: + $ShellBackground = "gui/bg_Starwolf.png"; + case 4: + $ShellBackground = "gui/bg_Harbingers.png"; + default: + $ShellBackground = "gui/bg_Bioderm.png"; +} + +//------------------------------------------------------------------------------ +function dedCheckLoginDone() +{ + %res = WONLoginResult(); + %status = getField(%res, 0); + %msg = getField(%res, 1); + if(%status $= "Waiting") + schedule(1000, 0, dedCheckLoginDone); + else + { + if(%status $= "OK") + { + $LoginName = ""; + $LoginPassword = ""; + exec("console_end.cs"); + } + else + { + echo("ERROR STARTING DEDICATED SERVER: " @ %msg); + quit(); + } + } +} + +//------------------------------------------------------------------------------ +function SetLoginResponder(%time) +{ + if ( $LoginName $= "" ) + LoginEditBox.schedule( %time, makeFirstResponder, 1 ); + else + LoginPasswordBox.schedule( %time, makeFirstResponder, 1 ); +} + +//------------------------------------------------------------------------------ +function EULADlg::onWake( %this ) +{ + EULAInstructions.setText( "Please read the following License Agreement carefully." + NL "You must accept this agreement in order to play" + NL "Tribes 2." ); + + %file = new FileObject(); + if ( %file.openForRead( "Eula.txt" ) ) + { + while ( !%file.isEOF() ) + { + %line = %file.readLine(); + if ( %text $= "" ) + %text = "" @ %line; + else + %text = %text NL %line; + } + } + else + error( "Failed to open the EULA file!" ); + %file.delete(); + + EULAText.setText( %text ); +} + +//------------------------------------------------------------------------------ +function EULADlg::accepted( %this ) +{ + $pref::AcceptedEULA = true; + Canvas.popDialog( %this ); + StartLoginProcess(); +} + +//------------------------------------------------------------------------------ +function LoginDlg::onWake( %this ) +{ + SetLoginResponder( 100 ); +} + +//------------------------------------------------------------------------------ +function LoginProcess(%editAcct) +{ + Canvas.popDialog( LoginDlg ); + LoginMessagePopup( "PLEASE WAIT", "Validating login..." ); + WONStartLogin( $LoginName, $LoginPassword, %editAcct ); + StartupGui.loginSchedule = StartupGui.schedule( 1000, checkLoginDone,%editAcct ); +} + +//------------------------------------------------------------------------------ +function LoginMessageBox( %title, %message, %buttonText, %callback ) +{ + LoginMessageBoxFrame.setTitle( %title ); + LoginMessageBoxText.setText( "" @ %message ); + LoginMessageBoxButton.setValue( %buttonText ); + LoginMessageBoxDlg.callback = %callback; + Canvas.pushDialog( LoginMessageBoxDlg ); +} + +//------------------------------------------------------------------------------ +function LoginMessagePopup( %title, %message ) +{ + LoginMessagePopupFrame.setTitle( %title ); + LoginMessagePopupText.setText( "" @ %message ); + Canvas.pushDialog( LoginMessagePopupDlg ); +} + +//------------------------------------------------------------------------------ +function LoginMessageBoxButtonProcess() +{ + Canvas.popDialog( LoginMessageBoxDlg ); + if ( LoginMessageBoxDlg.callback !$= "" ) + eval( LoginMessageBoxDlg.callback ); +} + +//------------------------------------------------------------------------------ + +function EditAccountDlg::onUpdate(%this) +{ + if ( strcmp( $CreateAccountPassword, $CreateAccountConfirmPassword ) ) + { + LoginMessageBox( "ERROR", "Passwords don't match.", "OK" ); + return; + } + WONStartUpdateAccount( $CreateAccountPassword, + $CreateAccountEmail, + $CreateAccountSendInfo ); + Canvas.popDialog(EditAccountDlg); + StartupGui.loginSchedule = StartupGui.schedule( 1000, checkLoginDone ); + StartupGui.updatingAccount = true; + LoginMessagePopup( "PLEASE WAIT", "Updating account information..." ); +} + +function EditAccountDlg::onDontUpdate(%this) +{ + schedule(0,0,LoginDone); +} + +function StartupGui::checkLoginDone( %this, %editAcct ) +{ + %result = WONLoginResult(); + %code = getField( %result, 1 ); + %codeText = getField(%result, 2); + %status = getField( %result, 0 ); + + if ( %status $= "Waiting" ) + { + LoginMessagePopupText.setValue( "" @ %code ); + %this.loginSchedule = %this.schedule( 1000, checkLoginDone, %editAcct ); + } + else if ( %status !$= "OK" ) + { + echo(%codeText); + echo(%code); + switch$(%codeText) + { + case "WS_DBProxyServ_InvalidUserName": + %msg = "Account Creation Failed - Invalid login name. Login names may only contain letters, numbers and underlines, and must be from 3 to 16 characters in length."; + case "WS_AuthServ_BadCDKey": + %msg = "Account Creation Failed - Bad CD Key. Please check the CD key for errors."; + case "WS_TimedOut": + %msg = "Login Failed - Server timed out. Your internet connection may be having problems or the servers may be temporarily unavailable."; + case "WS_DBProxyServ_KeyInUse": + %msg = "Account Creation Failed - That CD Key has already been used to create an account."; + case "WS_DBProxyServ_AccountCreationDisabled": + %msg = "Account Creation Failed - Account creation is temporarily disabled. Please try again later."; + case "WS_DBProxyServ_UserExists": + %msg = "Account Creation Failed - That login name is already taken. Please choose another login name."; + case "WS_DBProxyServ_DBError": + %msg = "Account Creation Failed - The database is temporarily offline (error code - " @ getField(%result, 3) @ ")"; + case "WS_AuthServ_CDKeyBanned": + %msg = "Login Failed - Your account has been banned. You may not play Tribes 2."; + case "WS_AuthServ_UserSeqInUse": + %msg = "Login Failed - Someone is already playing using this account. If you are not logged in already, please wait 20 minutes and try again."; + case "WS_AuthServ_CRCFailed": + %msg = "Login Failed - Your version of Tribes 2 is out of date or has been modified. You may have a virus."; + case "WS_AuthServ_UserNotFound" or "WS_AuthServ_BadPassword" or "WS_AuthServ_InvalidUserName": + %msg = "Login Failed - Please check your login name and password and try again."; + case "WS_AuthServ_NotInCommunity": + %msg = "Login Failed - This account is not a valid Tribes 2 account."; + case "AuthServerListFail": + %msg = "Login Failed - Unable to fetch authentication server list. Please try again soon."; + case "ProfileServerListFail": + %msg = "Login Failed - Unable to fetch profile server list. Please try again soon."; + case "BadWords": + %msg = "Account Creation Failed - Your warrior name may not contain profanity. Please choose another warrior name."; + default: + if(%code <= -2900 && %code >= -2999) + %msg = "Account Creation Failed - That warrior name is already in use. Please choose another warrior name and try again."; + else + %msg = "Login Failed - Your internet connection may be having problems or the servers may be temporarily unavailable. (Error code: " @ %codeText @ ")"; + } + Canvas.popDialog( LoginMessagePopupDlg ); + if(StartupGui.updatingAccount) + LoginMessageBox( "UPDATE FAILED", %msg, "OK", "schedule(0,0,LoginDone);" ); + else + LoginMessageBox( "LOGIN FAILED", %msg, "OK", "StartupGui::dumbFunction();" ); + } + else // we're logged in... + { + // Since we've successfully logged in, save the password: + if ( $pref::RememberPassword ) + { + if ( StartupGui.updatingAccount ) + EditAccountPasswordBox.savePassword(); + else + LoginPasswordBox.savePassword(); + } + + if(%editAcct) + { + $CreateAccountLoginName = $LoginName; + $CreateAccountPassword = $LoginPassword; + $CreateAccountConfirmPassword = $LoginPassword; + $CreateAccountEmail = %codeText; + $CreateAccountSendInfo = %code; + Canvas.pushDialog(EditAccountDlg); + } + else + { + schedule( 0, 0, "LoginDone" ); + } + } +} + +//------------------------------------------------------------------------------ +function StartupGui::dumbFunction( %this ) +{ + if ( !CreateAccountDlg.open ) + Canvas.pushDialog( LoginDlg ); +} + +//------------------------------------------------------------------------------ +function CreateAccount() +{ + $CreateAccountLoginName = ""; + $CreateAccountWarriorName = ""; + $CreateAccountPassword = ""; + $CreateAccountConfirmPassword = ""; + CreateAccountCDKey1.setText( "" ); + CreateAccountCDKey2.setText( "" ); + CreateAccountCDKey3.setText( "" ); + CreateAccountCDKey4.setText( "" ); + CreateAccountCDKey5.setText( "" ); + $CreateAccountEmail = ""; + $CreateAccountSendInfo = 0; + + Canvas.pushDialog( CreateAccountDlg ); +} + +//------------------------------------------------------------------------------ +function CreateAccountDlg::onWake( %this ) +{ + %this.open = true; + + CreateAccountSubmitBtn.setActive( false ); + schedule( 0, 0, updateSubmitButton ); +} + +//------------------------------------------------------------------------------ +function CreateAccountDlg::onSleep( %this ) +{ + %this.open = false; +} + +//------------------------------------------------------------------------------ +function WarriorNameEntry::validateWarriorName( %this ) +{ + %name = %this.getValue(); + %test = strToPlayerName( %name ); + if ( %name !$= %test ) + %this.setText( %test ); +} + +//------------------------------------------------------------------------------ +function buildCDKey() +{ + $CreateAccountCDKey = strupr( CreateAccountCDKey1.getValue() + @ "-" @ CreateAccountCDKey2.getValue() + @ "-" @ CreateAccountCDKey3.getValue() + @ "-" @ CreateAccountCDKey4.getValue() + @ "-" @ CreateAccountCDKey5.getValue() ) ; +} + +//------------------------------------------------------------------------------ +function CreateAccountCDKey1::process( %this ) +{ + buildCDKey(); + if ( strlen( %this.getValue() ) == 4 ) + CreateAccountCDKey2.makeFirstResponder( true ); +} + +//------------------------------------------------------------------------------ +function CreateAccountCDKey2::process( %this ) +{ + buildCDKey(); + if ( strlen( %this.getValue() ) == 4 ) + CreateAccountCDKey3.makeFirstResponder( true ); +} + +//------------------------------------------------------------------------------ +function CreateAccountCDKey3::process( %this ) +{ + buildCDKey(); + if ( strlen( %this.getValue() ) == 4 ) + CreateAccountCDKey4.makeFirstResponder( true ); +} + +//------------------------------------------------------------------------------ +function CreateAccountCDKey4::process( %this ) +{ + buildCDKey(); + if ( strlen( %this.getValue() ) == 4 ) + CreateAccountCDKey5.makeFirstResponder( true ); +} + +//------------------------------------------------------------------------------ +function CreateAccountCDKey5::process( %this ) +{ + buildCDKey(); +} + +//------------------------------------------------------------------------------ +function updateSubmitButton() +{ + if ( !CreateAccountDlg.open ) + return; + + %allDone = true; + if ( strlen( $CreateAccountLoginName ) < 3 ) + %allDone = false; + else if ( strlen( $CreateAccountWarriorName ) < 3 ) + %allDone = false; + else if ( strlen( $CreateAccountCDKey ) != 24 ) + %allDone = false; + else if ( strlen( $CreateAccountEmail ) < 5 || strpos( $CreateAccountEmail, "@" ) == -1 ) + %allDone = false; + else if (!$CreateAccountAgeGood) + %allDone = false; + + CreateAccountSubmitBtn.setActive( %allDone ); + + schedule( 1000, 0, updateSubmitButton ); +} + +//------------------------------------------------------------------------------ +function CleanUpAndGo() +{ + Canvas.popDialog( LoginMessagePopupDlg ); + Canvas.setContent( "" ); + Canvas.setCursor( "" ); + LoginMessagePopupDlg.delete(); + ImmSplashDlg.delete(); + EULADlg.delete(); + if ( !$pref::SkipIntro ) + { + IntroProfile.delete(); + IntroGui.delete(); + } + if ( !$SkipLogin ) + { + EditAccountDlg.delete(); + LoginMessageBoxDlg.delete(); + LoginDlg.delete(); + CreateAccountDlg.delete(); + CloseButtonProfile.delete(); + NewTextEditProfile.delete(); + ShellPopupProfile.delete(); + ShellRadioProfile.delete(); + ShellTextRightProfile.delete(); + } + StartupGui.delete(); + + DefaultCursor.delete(); + DlgBackProfile.delete(); + GuiContentProfile.delete(); + ShellDlgPaneProfile.delete(); + NewScrollCtrlProfile.delete(); + ShellMediumTextProfile.delete(); + ShellMessageTextProfile.delete(); + ShellButtonProfile.delete(); + + $CreateAccountPassword = ""; + $CreateAccountLoginName = ""; + $CreateAccountConfirmPassword = ""; + $LoginName = ""; + $LoginPassword = ""; + WONDisableFutureCalls(); + cleanupAudio(); + exec("console_end.cs"); +} + +//------------------------------------------------------------------------------ +function LoginDone() +{ + // Save off the login name for next time: + $pref::LastLoginName = $LoginName; + export( "$pref::*", "prefs/ClientPrefs.cs", False ); + + CleanUpAndGo(); +} + +//------------------------------------------------------------------------------ +function CreateAccountDlg::onCancel() +{ + Canvas.popDialog( CreateAccountDlg ); +} + +//------------------------------------------------------------------------------ +function CreateAccountDlg::onSubmit() +{ + if ( strcmp( $CreateAccountPassword, $CreateAccountConfirmPassword ) ) + { + LoginMessageBox( "ERROR", "Passwords don't match.", "OK" ); + return; + } + + if ( !$CreateAccountAgeGood ) + { + LoginMessageBox( "INVALID ENTRY", "You must be at least thirteen years old to create a Tribes 2 account.", "OK" ); + return; + } + + $LoginName = $CreateAccountLoginName; + + WONStartCreateAccount( $CreateAccountLoginName, + $CreateAccountWarriorName, + $CreateAccountPassword, + $CreateAccountCDKey, + $CreateAccountEmail, + $CreateAccountSendInfo ); + + StartupGui.loginSchedule = StartupGui.schedule( 1000, checkLoginDone ); + LoginMessagePopup( "PLEASE WAIT", "Validating account information..." ); +} + +//------------------------------------------------------------------------------ +function hideImmSplashDlg() +{ + Canvas.popDialog( ImmSplashDlg ); +} + +//------------------------------------------------------------------------------ +function checkIntroDone() +{ + if (IntroGui.done) + { + Canvas.popDialog( IntroGui ); + Canvas.showCursor(); + StartLoginProcess(); + } + else + schedule( 100, 0, checkIntroDone ); +} + +//------------------------------------------------------------------------------ + +function StartLoginProcess() +{ + Canvas.setCursor( "DefaultCursor" ); + if ( !$pref::AcceptedEULA ) + { + Canvas.pushDialog( EULADlg ); + return; + } + + if ( !$SkipLogin ) + { + if ( $LaunchMode $= "Normal" && !$fromLauncher ) + LoginMessageBox( "ERROR", "In order to play Tribes 2 online, you must launch the game using the supplied shortcuts.", "OK", "quit();" ); + else + { + Canvas.pushDialog( LoginDlg ); + + if ( $LaunchMode $= "Demo" ) + LoginDone(); + else + { + if ( $Login == true ) + LoginProcess(); + } + } + } + else + { + $PlayingOnline = false; + LoginMessagePopup( "INITIALIZING", "Please wait..." ); + Canvas.repaint(); + + CleanUpAndGo(); + } +} + +if(!$SkipLogin) + WONInit(); + +//------------------------------------------------------------------------------ +if ($LaunchMode $= "DedicatedServer" || + $LaunchMode $= "Console" || + $LaunchMode $= "NavBuild" || + $LaunchMode $= "SpnBuild") +{ + $Con::logBufferEnabled = false; + if($Login) + LoginProcess(); + else + { + if($SkipLogin) + { + exec("console_end.cs"); + } + else + { + WONServerLogin(); + schedule(1000, 0, dedCheckLoginDone); + } + } +} +else +{ + videoSetGammaCorrection($pref::OpenGL::gammaCorrection); + if(!createCanvas()) + { + quit(); + return; + } + startAudio(); + setOpenGLTextureCompressionHint( $pref::OpenGL::compressionHint ); + setOpenGLAnisotropy( $pref::OpenGL::anisotropy ); + setOpenGLMipReduction( $pref::OpenGL::mipReduction ); + setOpenGLInteriorMipReduction( $pref::OpenGL::interiorMipReduction ); + setOpenGLSkyMipReduction( $pref::OpenGL::skyMipReduction ); + + setShadowDetailLevel( $pref::shadows ); + + setDefaultFov( $pref::Player::defaultFov ); + setZoomSpeed( $pref::Player::zoomSpeed ); + + // create control and object profiles: + new GuiCursor (DefaultCursor) + { + hotSpot = "1 1"; + bitmapName = "gui/CUR_3darrow"; + }; + + new GuiControlProfile (DlgBackProfile) + { + opaque = true; + fillColor = "0 0 0 160"; + }; + + new GuiControlProfile (GuiContentProfile) + { + opaque = true; + fillColor = "255 255 255"; + }; + + new GuiControlProfile (ShellDlgPaneProfile) + { + fontType = "Sui Generis"; + fontSize = 22; + fontColor = "5 5 5"; + autoSizeWidth = false; + autoSizeHeight = false; + bitmapBase = "gui/dlg"; + }; + + new GuiControlProfile (NewScrollCtrlProfile) + { + bitmapBase = "gui/shll_scroll"; + soundButtonDown = sButtonDown; + soundButtonOver = sButtonOver; + }; + + new GuiControlProfile (ShellMediumTextProfile) + { + fontType = "Univers"; + fontSize = 18; + fontColor = "6 245 215"; + autoSizeWidth = false; + autoSizeHeight = true; + }; + + new GuiControlProfile (ShellMessageTextProfile) + { + fontType = "Univers"; + fontSize = 18; + fontColor = "66 219 234"; + fontColorHL = "25 68 56"; + fillColorHL = "50 233 206"; + cursorColor = "200 240 240"; + autoSizeWidth = true; + autoSizeHeight = true; + }; + + new GuiControlProfile (ShellButtonProfile) + { + fontType = "Univers Condensed"; + fontSize = 16; + fontColor = "8 19 6"; + fontColorHL = "25 68 56"; + fontColorNA = "5 5 5"; + fontColorSEL = "25 68 56"; + fixedExtent = true; + justify = "center"; + bitmap = "gui/shll_button"; + textOffset = "0 10"; + soundButtonDown = sButtonDown; + soundButtonOver = sButtonOver; + tab = true; + canKeyFocus = true; + }; + + new GuiControlProfile (IntroProfile) + { + opaque = true; + fillColor = "8 8 8 255"; + tab = true; + canKeyFocus = true; + }; + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + // create guis for this file + // Startup gui: + new GuiChunkedBitmapCtrl (StartupGui) { + profile = "GuiContentProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + bitmap = $ShellBackground; + }; + + // EULA dialog: + new GuiControl(EULADlg) { + profile = "DlgBackProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "100 60"; + extent = "440 360"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "LICENSE AGREEMENT"; + noTitleBar = "0"; + + new GuiMLTextCtrl(EULAInstructions) { + profile = "ShellMediumTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "26 34"; + extent = "390 14"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + }; + new ShellScrollCtrl() { + profile = "NewScrollCtrlProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "22 90"; + extent = "396 213"; + minExtent = "24 52"; + childMargin = "3 3"; + visible = "1"; + helpTag = "0"; + willFirstRespond = "1"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + fieldBase = "gui/shll_field"; + + new GuiScrollContentCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "4 4"; + extent = "370 175"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextCtrl(EULAText) { + profile = "ShellMessageTextProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "366 16"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + }; + }; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "61 305"; + extent = "140 38"; + minExtent = "32 38"; + visible = "1"; + command = "quit();"; + helpTag = "0"; + text = "QUIT"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "251 305"; + extent = "140 38"; + minExtent = "32 38"; + visible = "1"; + command = "EULADlg.accepted();"; + helpTag = "0"; + text = "ACCEPT"; + simpleStyle = "0"; + }; + }; + }; + + // Message Popup dialog: + new GuiControl (LoginMessagePopupDlg) { + profile = "DlgBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl (LoginMessagePopupFrame) { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "165 194"; + extent = "310 108"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextCtrl (LoginMessagePopupText) { + profile = "ShellMediumTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "32 40"; + extent = "246 32"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + }; + }; + }; + + // Immersion splash dialog: + new GuiControl (ImmSplashDlg) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiControl() { + profile = "GuiModelessDialogProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "40 150"; + extent = "540 168"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new GuiBitmapCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "540 168"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + bitmap = "gui/ImmersionLogo.png"; + wrap = "0"; + }; + }; + }; +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + + if ( !$pref::SkipIntro ) + { + new GuiAviBitmapCtrl(IntroGui) + { + profile = "IntroProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + variable = ""; + helpTag = "0"; + useVariable = "1"; + aviFileName = "T2IntroC15.avi"; + wavFileName = "T2Intro.wav"; + setFirstResponder = "1"; + letterBox = true; + swapRB = false; + }; + } + + + if ( !$SkipLogin ) + { + // Login-only profiles: + new GuiControlProfile (CloseButtonProfile) + { + bitmap = "gui/shll_menuclose"; + soundButtonDown = sButtonDown; + soundButtonOver = sButtonOver; + tab = true; + canKeyFocus = true; + }; + + new GuiControlProfile (NewTextEditProfile) + { + fillColorHL = "130 190 185"; + fontType = "Univers"; + fontSize = 16; + fontColor = "60 140 140"; + fontColorHL = "25 68 56"; + cursorColor = "173 255 250"; + bitmap = "gui/shll_entryfield"; + textOffset = "14 0"; + autoSizeWidth = false; + autoSizeHeight = false; + tab = true; + canKeyFocus = true; + }; + + new GuiControlProfile (ShellPopupProfile) + { + fontType = "Univers"; + fontSize = 16; + fontColor = "8 19 6"; + fontColorHL = "25 68 56"; + fontColorNA = "5 5 5"; + fontColorSEL = "8 19 6"; + fixedExtent = true; + justify = "center"; + soundButtonDown = sButtonDown; + soundButtonOver = sButtonOver; + bitmapBase = "gui/shll_scroll"; + tab = true; + canKeyFocus = true; + }; + + new GuiControlProfile (ShellRadioProfile) + { + fontType = "Univers Condensed"; + fontSize = 16; + fontColor = "8 19 6"; + fontColorHL = "25 68 56"; + fontColorNA = "5 5 5"; + fixedExtent = true; + justify = "center"; + bitmap = "gui/shll_radio"; + soundButtonDown = sButtonDown; + soundButtonOver = sButtonOver; + tab = true; + canKeyFocus = true; + }; + + new GuiControlProfile (ShellTextRightProfile) + { + fontType = "Univers Condensed"; + fontSize = 18; + fontColor = "66 229 244"; + justify = "right"; + autoSizeWidth = false; + autoSizeHeight = true; + }; + + // (copied from LoginGui.gui, LoginMessageBoxDlg.gui and CreateAccountDlg.gui) + // Login dialog: + new GuiControl(LoginDlg) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "90 156"; + extent = "460 167"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "LOGIN"; + noTitleBar = "0"; + + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "30 47"; + extent = "85 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Account Name:"; + }; + new ShellTextEditCtrl(LoginEditBox) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "111 39"; + extent = "180 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$LoginName"; + altCommand = "LoginProcess();"; + helpTag = "0"; + historySize = "0"; + maxLength = "16"; + password = "0"; + glowOffset = "9 9"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "30 77"; + extent = "85 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Password:"; + }; + new GuiLoginPasswordCtrl(LoginPasswordBox) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "111 68"; + extent = "180 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$LoginPassword"; + altCommand = "LoginProcess();"; + helpTag = "0"; + historySize = "0"; + maxLength = "16"; + password = "1"; + glowOffset = "9 9"; + }; + new ShellToggleButton() { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "118 106"; + extent = "160 27"; + minExtent = "26 27"; + visible = "1"; + variable = "$pref::RememberPassword"; + helpTag = "0"; + text = "REMEMBER PASSWORD"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "291 39"; + extent = "144 38"; + minExtent = "32 38"; + visible = "1"; + command = "LoginProcess(false);"; + helpTag = "0"; + text = "LOG IN"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "291 70"; + extent = "144 38"; + minExtent = "32 38"; + visible = "1"; + command = "CreateAccount();"; + helpTag = "0"; + text = "CREATE NEW ACCOUNT"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "290 102"; + extent = "144 38"; + minExtent = "32 38"; + visible = "1"; + command = "LoginProcess(true);"; + helpTag = "0"; + text = "EDIT ACCOUNT"; + simpleStyle = "0"; + }; + new ShellBitmapButton(LaunchToolbarCloseButton) { + profile = "CloseButtonProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "411 0"; + extent = "33 26"; + minExtent = "33 26"; + visible = "1"; + command = "quit();"; + accelerator = "escape"; + helpTag = "0"; + simpleStyle = "1"; + }; + }; + }; + + // Message Box dialog: + new GuiControl(LoginMessageBoxDlg) { + profile = "DlgBackProfile"; + horizSizing = "width"; + vertSizing = "height"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + + new ShellPaneCtrl(LoginMessageBoxFrame) { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "170 137"; + extent = "300 206"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + + new GuiMLTextCtrl(LoginMessageBoxText) { + profile = "ShellMediumTextProfile"; + horizSizing = "center"; + vertSizing = "bottom"; + position = "32 39"; + extent = "236 18"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + }; + new ShellBitmapButton(LoginMessageBoxButton) { + profile = "ShellButtonProfile"; + horizSizing = "center"; + vertSizing = "bottom"; + position = "70 140"; + extent = "120 38"; + minExtent = "32 38"; + visible = "1"; + command = "LoginMessageBoxButtonProcess();"; + accelerator = "return"; + helpTag = "0"; + text = "OK"; + simpleStyle = "0"; + }; + }; + }; + + // Edit Account dialog: + new GuiControl(EditAccountDlg) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + open = "0"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "70 105"; + extent = "500 255"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "ACCOUNT INFORMATION"; + noTitleBar = "0"; + + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "282 200"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "EditAccountDlg.onUpdate();"; + helpTag = "0"; + text = "UPDATE"; + simpleStyle = "0"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "126 51"; + extent = "100 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Password:"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "126 81"; + extent = "100 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Confirm Password:"; + }; + new ShellTextEditCtrl() { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "133 115"; + extent = "269 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$CreateAccountEmail"; + helpTag = "0"; + historySize = "0"; + maxLength = "128"; + password = "0"; + glowOffset = "9 9"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "37 125"; + extent = "100 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Email:"; + }; + new ShellToggleButton() { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "63 156"; + extent = "366 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$CreateAccountSendInfo"; + helpTag = "0"; + text = "SEND ME INFORMATION ABOUT TRIBES 2 AND OTHER PRODUCTS"; + }; + new ShellTextEditCtrl() { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "222 73"; + extent = "180 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$CreateAccountConfirmPassword"; + helpTag = "0"; + historySize = "0"; + maxLength = "16"; + password = "1"; + glowOffset = "9 9"; + }; + new GuiLoginPasswordCtrl(EditAccountPasswordBox) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "222 43"; + extent = "180 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$CreateAccountPassword"; + helpTag = "0"; + historySize = "0"; + maxLength = "16"; + password = "1"; + glowOffset = "9 9"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "72 200"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "EditAccountDlg.onDontUpdate();"; + accelerator = "escape"; + helpTag = "0"; + text = "DON\'T UPDATE"; + simpleStyle = "0"; + }; + }; + }; + + // Create Account dialog: + new GuiControl(CreateAccountDlg) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "640 480"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + open = "0"; + + new ShellPaneCtrl() { + profile = "ShellDlgPaneProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "70 36"; + extent = "500 408"; + minExtent = "48 92"; + visible = "1"; + helpTag = "0"; + text = "ACCOUNT INFORMATION"; + noTitleBar = "0"; + + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "35 35"; + extent = "100 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Login Name:"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "35 110"; + extent = "100 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Password:"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "35 140"; + extent = "100 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Confirm Password:"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "35 170"; + extent = "100 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "CD Key:"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "35 218"; + extent = "100 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Email:"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "174 289"; + extent = "134 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "We are COPPA compliant."; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "73 305"; + extent = "351 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "If you are under 13, you are not allowed to create a Tribes 2 account."; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "35 64"; + extent = "100 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Warrior Name:"; + }; + new ShellTextEditCtrl() { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "131 27"; + extent = "180 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$CreateAccountLoginName"; + helpTag = "0"; + historySize = "0"; + maxLength = "16"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellTextEditCtrl(WarriorNameEntry) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "131 56"; + extent = "180 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$CreateAccountWarriorName"; + command = "WarriorNameEntry.validateWarriorName();"; + helpTag = "0"; + historySize = "0"; + maxLength = "16"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellTextEditCtrl() { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "131 102"; + extent = "180 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$CreateAccountPassword"; + helpTag = "0"; + historySize = "0"; + maxLength = "16"; + password = "1"; + glowOffset = "9 9"; + }; + new ShellTextEditCtrl() { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "131 132"; + extent = "180 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$CreateAccountConfirmPassword"; + helpTag = "0"; + historySize = "0"; + maxLength = "16"; + password = "1"; + glowOffset = "9 9"; + }; + new ShellTextEditCtrl(CreateAccountCDKey1) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "131 162"; + extent = "72 38"; + minExtent = "32 38"; + visible = "1"; + command = "CreateAccountCDKey1.process();"; + helpTag = "0"; + historySize = "0"; + maxLength = "4"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellTextEditCtrl(CreateAccountCDKey2) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "191 162"; + extent = "72 38"; + minExtent = "32 38"; + visible = "1"; + command = "CreateAccountCDKey2.process();"; + helpTag = "0"; + historySize = "0"; + maxLength = "4"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellTextEditCtrl(CreateAccountCDKey3) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "251 162"; + extent = "72 38"; + minExtent = "32 38"; + visible = "1"; + command = "CreateAccountCDKey3.process();"; + helpTag = "0"; + historySize = "0"; + maxLength = "4"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellTextEditCtrl(CreateAccountCDKey4) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "311 162"; + extent = "72 38"; + minExtent = "32 38"; + visible = "1"; + command = "CreateAccountCDKey4.process();"; + helpTag = "0"; + historySize = "0"; + maxLength = "4"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellTextEditCtrl(CreateAccountCDKey5) { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "371 162"; + extent = "72 38"; + minExtent = "32 38"; + visible = "1"; + command = "CreateAccountCDKey5.process();"; + helpTag = "0"; + historySize = "0"; + maxLength = "4"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellTextEditCtrl() { + profile = "NewTextEditProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "131 209"; + extent = "269 38"; + minExtent = "32 38"; + visible = "1"; + variable = "$CreateAccountEmail"; + helpTag = "0"; + historySize = "0"; + maxLength = "128"; + password = "0"; + glowOffset = "9 9"; + }; + new ShellToggleButton() { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "63 244"; + extent = "366 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$CreateAccountSendInfo"; + helpTag = "0"; + text = "SEND ME INFORMATION ABOUT TRIBES 2 AND OTHER PRODUCTS"; + }; + new ShellToggleButton() { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "148 325"; + extent = "201 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$CreateAccountAgeGood"; + helpTag = "0"; + text = "I AM AT LEAST 13 YEARS OF AGE"; + }; + new ShellBitmapButton(CreateAccountSubmitBtn) { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "282 351"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "CreateAccountDlg.onSubmit();"; + helpTag = "0"; + text = "SUBMIT"; + simpleStyle = "0"; + }; + new ShellBitmapButton() { + profile = "ShellButtonProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "72 351"; + extent = "128 38"; + minExtent = "32 38"; + visible = "1"; + command = "CreateAccountDlg.onCancel();"; + accelerator = "escape"; + helpTag = "0"; + text = "CANCEL"; + simpleStyle = "0"; + }; + }; + }; + + if($Login == false) + $LoginName = $pref::LastLoginName; + } + + // Finally, let's get it on: + Canvas.setContent( StartupGui ); +// if ( $ImmEnabled ) +// { +// Canvas.pushDialog( ImmSplashDlg ); +// schedule( 2500, 0, hideImmSplashDlg ); +// } + + if ( !$pref::SkipIntro ) + { + Canvas.pushDialog( IntroGui ); + Canvas.hideCursor(); + IntroGui.play(); + schedule( 100, 0, checkIntroDone ); + } + else + StartLoginProcess(); +}