diff --git a/.github/workflows/Aristeas NewUniversalUpload.yml b/.github/workflows/Aristeas NewUniversalUpload.yml index ff18c02d5..6f219bb4e 100644 --- a/.github/workflows/Aristeas NewUniversalUpload.yml +++ b/.github/workflows/Aristeas NewUniversalUpload.yml @@ -29,6 +29,6 @@ jobs: # done - id: test_SEWT run: | - & "C:\actions-runner\externals\SC_NewUniversalUpload.exe" "${{ steps.changed-files.outputs.all_changed_files }}" "${{ github.event.head_commit.message }}" + & "C:\Program Files\SCUniversalUpload\SC_NewUniversalUpload.exe" --repo "${{ github.workspace }}" --changes "${{ steps.changed-files.outputs.all_changed_and_modified_files }}" --changelog "${{ github.event.head_commit.message }}" - uses: EndBug/add-and-commit@v9 diff --git a/.github/workflows/Aristeas_BuildScripts.yml b/.github/workflows/Aristeas_BuildScripts.yml new file mode 100644 index 000000000..a6767072d --- /dev/null +++ b/.github/workflows/Aristeas_BuildScripts.yml @@ -0,0 +1,32 @@ +name: Aristeas BuildScripts +on: + workflow_dispatch: + pull_request: + branches: + - main + - stable + +jobs: + BuildMods: + runs-on: self-hosted + steps: + - uses: actions/checkout@v4.1.4 + with: + fetch-depth: 0 + + - name: Get changed files + id: changed-files + uses: tj-actions/changed-files@v44 + with: + separator: ',' + + #- name: List all changed files + # env: + # ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} + # run: | + # for file in ${ALL_CHANGED_FILES}; do + # echo "$file was changed" + # done + - id: build-mods + run: | + & "C:\Program Files\SCUniversalUpload\SC_NewUniversalUpload.exe" "build" --repo "${{ github.workspace }}" --changes "${{ steps.changed-files.outputs.all_changed_and_modified_files }}" diff --git a/.github/workflows/XmlValidator.yml b/.github/workflows/XmlValidator.yml new file mode 100644 index 000000000..e4f2106cb --- /dev/null +++ b/.github/workflows/XmlValidator.yml @@ -0,0 +1,35 @@ +name: XML Validation +on: + pull_request: + branches: + - main + - stable + workflow_dispatch: +jobs: + validate-xml: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install xmllint + run: sudo apt-get update && sudo apt-get install -y libxml2-utils + + - name: Validate XML against XSD + run: | + errors=0 + + while IFS= read -r -d '' file; do + # echo "Validating $file" + if ! xmllint --noout "$file"; then + echo "Error in $file" + errors=$((errors + 1)) + fi + done < <(find . -name "*.sbc" -print0) + + if [ "$errors" -ne 0 ]; then + echo "$errors SBC files failed validation" + exit 1 + else + echo "All SBC files validated successfully" + fi diff --git a/.github/workflows/forceUploadAll.yml b/.github/workflows/forceUploadAll.yml index b7c83d1ef..74df8705d 100644 --- a/.github/workflows/forceUploadAll.yml +++ b/.github/workflows/forceUploadAll.yml @@ -12,6 +12,6 @@ jobs: - id: local_forceUpload run: | - & "C:\actions-runner\externals\SC_NewUniversalUpload.exe" "uploadall" + & "C:\Program Files\SCUniversalUpload\SC_NewUniversalUpload.exe" "uploadall" --repo "${{ github.workspace }}" - uses: EndBug/add-and-commit@v9 diff --git a/.gitignore b/.gitignore index f15fb5b07..a8217fdde 100644 --- a/.gitignore +++ b/.gitignore @@ -410,3 +410,4 @@ FodyWeavers.xsd # JetBrains Rider *.sln.iml /.idea +/Utility Mods/Stable/GyroscopicGunsight/Properties diff --git a/Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/EntityComponents.sbc b/Gamemode Mods/Darth'sAIWaveSpawner/Data/EntityComponents.sbc similarity index 100% rename from Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/EntityComponents.sbc rename to Gamemode Mods/Darth'sAIWaveSpawner/Data/EntityComponents.sbc diff --git a/Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Prefabs/BioclutchAI.sbc b/Gamemode Mods/Darth'sAIWaveSpawner/Data/Prefabs/BioclutchAI.sbc similarity index 100% rename from Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Prefabs/BioclutchAI.sbc rename to Gamemode Mods/Darth'sAIWaveSpawner/Data/Prefabs/BioclutchAI.sbc diff --git a/Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Prefabs/BioclutchAI.sbcB5 b/Gamemode Mods/Darth'sAIWaveSpawner/Data/Prefabs/BioclutchAI.sbcB5 similarity index 100% rename from Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Prefabs/BioclutchAI.sbcB5 rename to Gamemode Mods/Darth'sAIWaveSpawner/Data/Prefabs/BioclutchAI.sbcB5 diff --git a/Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Prefabs/BismarckAI.sbc b/Gamemode Mods/Darth'sAIWaveSpawner/Data/Prefabs/BismarckAI.sbc similarity index 100% rename from Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Prefabs/BismarckAI.sbc rename to Gamemode Mods/Darth'sAIWaveSpawner/Data/Prefabs/BismarckAI.sbc diff --git a/Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Prefabs/CharyAI.sbc b/Gamemode Mods/Darth'sAIWaveSpawner/Data/Prefabs/CharyAI.sbc similarity index 100% rename from Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Prefabs/CharyAI.sbc rename to Gamemode Mods/Darth'sAIWaveSpawner/Data/Prefabs/CharyAI.sbc diff --git a/Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Prefabs/CorrosiveAI.sbc b/Gamemode Mods/Darth'sAIWaveSpawner/Data/Prefabs/CorrosiveAI.sbc similarity index 100% rename from Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Prefabs/CorrosiveAI.sbc rename to Gamemode Mods/Darth'sAIWaveSpawner/Data/Prefabs/CorrosiveAI.sbc diff --git a/Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Prefabs/CorrosiveAI.sbcB5 b/Gamemode Mods/Darth'sAIWaveSpawner/Data/Prefabs/CorrosiveAI.sbcB5 similarity index 100% rename from Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Prefabs/CorrosiveAI.sbcB5 rename to Gamemode Mods/Darth'sAIWaveSpawner/Data/Prefabs/CorrosiveAI.sbcB5 diff --git a/Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Prefabs/EldritchAI.sbc b/Gamemode Mods/Darth'sAIWaveSpawner/Data/Prefabs/EldritchAI.sbc similarity index 100% rename from Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Prefabs/EldritchAI.sbc rename to Gamemode Mods/Darth'sAIWaveSpawner/Data/Prefabs/EldritchAI.sbc diff --git a/Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Prefabs/HermesAI.sbc b/Gamemode Mods/Darth'sAIWaveSpawner/Data/Prefabs/HermesAI.sbc similarity index 100% rename from Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Prefabs/HermesAI.sbc rename to Gamemode Mods/Darth'sAIWaveSpawner/Data/Prefabs/HermesAI.sbc diff --git a/Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Prefabs/LamAI.sbc b/Gamemode Mods/Darth'sAIWaveSpawner/Data/Prefabs/LamAI.sbc similarity index 100% rename from Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Prefabs/LamAI.sbc rename to Gamemode Mods/Darth'sAIWaveSpawner/Data/Prefabs/LamAI.sbc diff --git a/Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Prefabs/LeachdroneAI.sbc b/Gamemode Mods/Darth'sAIWaveSpawner/Data/Prefabs/LeachdroneAI.sbc similarity index 100% rename from Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Prefabs/LeachdroneAI.sbc rename to Gamemode Mods/Darth'sAIWaveSpawner/Data/Prefabs/LeachdroneAI.sbc diff --git a/Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Prefabs/LeachdroneAI.sbcB5 b/Gamemode Mods/Darth'sAIWaveSpawner/Data/Prefabs/LeachdroneAI.sbcB5 similarity index 100% rename from Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Prefabs/LeachdroneAI.sbcB5 rename to Gamemode Mods/Darth'sAIWaveSpawner/Data/Prefabs/LeachdroneAI.sbcB5 diff --git a/Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Prefabs/LocusAI.sbc b/Gamemode Mods/Darth'sAIWaveSpawner/Data/Prefabs/LocusAI.sbc similarity index 100% rename from Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Prefabs/LocusAI.sbc rename to Gamemode Mods/Darth'sAIWaveSpawner/Data/Prefabs/LocusAI.sbc diff --git a/Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Prefabs/RegenAI.sbc b/Gamemode Mods/Darth'sAIWaveSpawner/Data/Prefabs/RegenAI.sbc similarity index 100% rename from Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Prefabs/RegenAI.sbc rename to Gamemode Mods/Darth'sAIWaveSpawner/Data/Prefabs/RegenAI.sbc diff --git a/Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Prefabs/ZerkAI.sbc b/Gamemode Mods/Darth'sAIWaveSpawner/Data/Prefabs/ZerkAI.sbc similarity index 100% rename from Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Prefabs/ZerkAI.sbc rename to Gamemode Mods/Darth'sAIWaveSpawner/Data/Prefabs/ZerkAI.sbc diff --git a/Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Scripts/Spawners/nidpawner.cs b/Gamemode Mods/Darth'sAIWaveSpawner/Data/Scripts/Spawners/nidpawner.cs similarity index 100% rename from Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Scripts/Spawners/nidpawner.cs rename to Gamemode Mods/Darth'sAIWaveSpawner/Data/Scripts/Spawners/nidpawner.cs diff --git a/Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Scripts/Spawners/orkspawner.cs b/Gamemode Mods/Darth'sAIWaveSpawner/Data/Scripts/Spawners/orkspawner.cs similarity index 100% rename from Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Scripts/Spawners/orkspawner.cs rename to Gamemode Mods/Darth'sAIWaveSpawner/Data/Scripts/Spawners/orkspawner.cs diff --git a/Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Scripts/Spawners/thescriptthatfixeskeensfactionbullshit.cs b/Gamemode Mods/Darth'sAIWaveSpawner/Data/Scripts/Spawners/thescriptthatfixeskeensfactionbullshit.cs similarity index 100% rename from Gamemode Mods/Stable/Darth'sAIWaveSpawner/Data/Scripts/Spawners/thescriptthatfixeskeensfactionbullshit.cs rename to Gamemode Mods/Darth'sAIWaveSpawner/Data/Scripts/Spawners/thescriptthatfixeskeensfactionbullshit.cs diff --git a/Gamemode Mods/Stable/Darth'sAIWaveSpawner/copy to DS and client.bat b/Gamemode Mods/Darth'sAIWaveSpawner/copy to DS and client.bat similarity index 100% rename from Gamemode Mods/Stable/Darth'sAIWaveSpawner/copy to DS and client.bat rename to Gamemode Mods/Darth'sAIWaveSpawner/copy to DS and client.bat diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/metadata.mod b/Gamemode Mods/Darth'sAIWaveSpawner/metadata.mod similarity index 100% rename from Gamemode Mods/Stable/CombatZoneMuzzmod/metadata.mod rename to Gamemode Mods/Darth'sAIWaveSpawner/metadata.mod diff --git a/Gamemode Mods/Development/Starcore_Sharetrack-Dev/moved to dev repo.txt b/Gamemode Mods/Development/Starcore_Sharetrack-Dev/moved to dev repo.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/Data/Scripts/CombatZone/Slave.cs b/Gamemode Mods/Stable/CombatZoneMuzzmod/Data/Scripts/CombatZone/Slave.cs deleted file mode 100644 index fc44e18dc..000000000 --- a/Gamemode Mods/Stable/CombatZoneMuzzmod/Data/Scripts/CombatZone/Slave.cs +++ /dev/null @@ -1,186 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using Sandbox.Game.Entities; -using Sandbox.ModAPI; -using VRage.Game; -using VRage.Game.Components; -using VRage.Game.Entity; -using VRage.Game.ModAPI; -using VRage.ModAPI; -using VRage.Utils; -using VRageMath; - -namespace Scripts -{ - [MySessionComponentDescriptor(MyUpdateOrder.BeforeSimulation, 999999)] - public class Session : MySessionComponentBase - { - private const double CombatRadius = 10000; - private const double CombatNearEdge = CombatRadius - 1; - private const string SphereModel = "\\Models\\Cubes\\BounceZoneAlt.mwm"; - private readonly BoundingSphereD _combatNearSphere = new BoundingSphereD(Vector3D.Zero, CombatNearEdge); - private BoundingSphereD _combatMinSphere = new BoundingSphereD(Vector3D.Zero, CombatRadius); - private BoundingSphereD _combatMaxSphere = new BoundingSphereD(Vector3D.Zero, CombatRadius + 20000); - - private int _count; - private int _fastStart; - private readonly List _managedEntities = new List(1000); - private MyEntity _sphereEntity; - - public override void LoadData() - { - } - protected override void UnloadData() - { - } - public override void BeforeStart() - { - // if (!MyAPIGateway.Utilities.IsDedicated) - // { - // _sphereEntity = GetSphereEntity(); - // } - } - public override void UpdateBeforeSimulation() - { - _count++; - if (_count - _fastStart < 300 || _count % 100 == 0) - { - //RefreshVisualState(); - _managedEntities.Clear(); - MyGamePruningStructure.GetAllTopMostEntitiesInSphere(ref _combatMaxSphere, _managedEntities, MyEntityQueryType.Dynamic); - MyAPIGateway.Parallel.For(0, _managedEntities.Count, i => - { - try - { - var ent = _managedEntities[i]; - if (!ShouldProcessEntity(ent)) - { - return; - } - ApplyForcesToEntity(ent); - } - catch (Exception e) - { - MyLog.Default.WriteLine($"An exception occurred while processing entity {i}: {e.Message}"); - } - }); - } - } - private readonly HashSet _skipEntityTypes = new HashSet { /* Add pre-ignored Types Here */ }; - - private bool ShouldProcessEntity(MyEntity ent) - { - Type entType = ent.GetType(); - - // Fast check against cache - if (_skipEntityTypes.Contains(entType) || ent.MarkedForClose || ent.IsPreview || ent.Physics == null || ent.Physics.IsPhantom || !ent.InScene) - { - return false; - } - - var grid = ent as MyCubeGrid; - var player = ent as IMyCharacter; - if (grid == null && player == null) - { - // Cache this type for future fast checks - _skipEntityTypes.Add(entType); - return false; - } - - var entVolume = ent.PositionComp.WorldVolume; - return entVolume.Contains(_combatNearSphere) != ContainmentType.Contains; - } - private void ApplyForcesToEntity(MyEntity ent) - { - var grid = ent as MyCubeGrid; - var pos = grid?.Physics?.CenterOfMassWorld ?? ent.PositionComp.WorldVolume.Center; - var dir = Vector3D.Zero - pos; - Vector3D dirNorm; - Vector3D.Normalize(ref dir, out dirNorm); - var force = dirNorm * ((grid?.Physics?.Mass ?? ent.Physics.Mass) * - MyUtils.GetSmallestDistanceToSphereAlwaysPositive(ref pos, ref _combatMinSphere)); - ent.Physics.AddForce(MyPhysicsForceType.APPLY_WORLD_FORCE, force, pos, Vector3.Zero); - _fastStart = _count; - } - // private int frameCounter = 0; - // private float lastCalculatedP = -1.0f; // Cache the last calculated transparency - - // private void RefreshVisualState() - // { - // frameCounter++; - // if (frameCounter % 10 != 0) // Update only every 10 frames - // { - // return; - // } - // - // if (!MyAPIGateway.Utilities.IsDedicated) - // { - // var cameraPos = MyAPIGateway.Session.Camera.WorldMatrix.Translation; - // double distToCenter; - // Vector3D.Distance(ref cameraPos, ref Vector3D.Zero, out distToCenter); - // - // if (distToCenter > 20000) - // { - // if (_sphereEntity.InScene) - // { - // _sphereEntity.InScene = false; - // _sphereEntity.Render.RemoveRenderObjects(); - // } - // return; // Early exit - // } - // - // if (distToCenter <= 4000) - // { - // if (_sphereEntity.InScene) - // { - // _sphereEntity.InScene = false; - // _sphereEntity.Render.RemoveRenderObjects(); - // } - // return; // Early exit - // } - // - // if (distToCenter >= 4000 && distToCenter <= CombatRadius + 1000) - // { - // // Calculate inverted transparency based on camera distance - // var p = 1.0f - (float)((distToCenter - 4000) / (CombatRadius - 4000)); - // - // // Only update if the transparency value has changed significantly - // if (Math.Abs(lastCalculatedP - p) > 0.01) - // { - // // MyAPIGateway.Utilities.ShowNotification($"Transparency: {p}", 16, MyFontEnum.Red); - // _sphereEntity.Render.UpdateRenderObject(false); - // _sphereEntity.Render.Transparency = p; - // _sphereEntity.Render.UpdateRenderObject(true); - // - // lastCalculatedP = p; // Cache the last calculated transparency - // } - // } - // - // if (!_sphereEntity.InScene) - // { - // _sphereEntity.InScene = true; - // _sphereEntity.Render.UpdateRenderObject(true, false); - // } - // } - // } - // private MyEntity GetSphereEntity() - // { - // var ent = new MyEntity(); - // var model = $"{ModContext.ModPath}{SphereModel}"; - // ent.Init(null, model, null, null); - // ent.Render.CastShadows = false; - // ent.IsPreview = true; - // ent.Save = false; - // ent.SyncFlag = false; - // ent.NeedsWorldMatrix = false; - // ent.Flags |= EntityFlags.IsNotGamePrunningStructureObject; - // MyEntities.Add(ent); - // var matrix = MatrixD.CreateScale(CombatRadius + 101); - // ent.PositionComp.SetWorldMatrix(ref matrix, null, false, false, false); - // ent.InScene = true; - // ent.Render.UpdateRenderObject(true, false); - // return ent; - // } - } -} diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/Data/Scripts/CombatZone/drawasphereplease.cs b/Gamemode Mods/Stable/CombatZoneMuzzmod/Data/Scripts/CombatZone/drawasphereplease.cs deleted file mode 100644 index 9fc24e787..000000000 --- a/Gamemode Mods/Stable/CombatZoneMuzzmod/Data/Scripts/CombatZone/drawasphereplease.cs +++ /dev/null @@ -1,217 +0,0 @@ -using System; -using Sandbox.ModAPI; -using VRageMath; -using VRage.Game.ModAPI; -using VRage.ModAPI; -using VRage.Game; -using Sandbox.ModAPI.Ingame; -using VRage.Game.Components; -using VRage.Utils; -using IMyCockpit = Sandbox.ModAPI.Ingame.IMyCockpit; - -namespace YourModNamespace -{ - [MySessionComponentDescriptor(MyUpdateOrder.BeforeSimulation | MyUpdateOrder.AfterSimulation)] - public class BoxDrawing : MySessionComponentBase - { - private const int NumberOfBoxes = 10; - private static readonly Color BoxColor = new Color(255, 0, 0, 128); - private static readonly Color BlueBoxColor = new Color(0, 0, 255, 128); - private static readonly Color LineColor = Color.Green; - private static readonly int[] DistanceMultipliers = { 500, 1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500, 5000, 5500, 6000, 6500, 7000, 7500, 8000, 8500, 9000, 9500, 10000 }; - private const int BoundaryRadius = 10000; // Define the boundary radius - - public override void UpdateAfterSimulation() - { - // Check if the player is in spectator mode - bool isSpectator = MyAPIGateway.Session.IsCameraUserControlledSpectator; - - // If in spectator mode, don't draw anything - if (isSpectator) - { - return; - } - - Vector3D? playerPosition = PlayerPosition; - if (!playerPosition.HasValue) - { - return; // If playerPosition is null, exit the method - } - - Vector3D directionToOrigin = CalculateDirectionToOrigin(playerPosition.Value); - double distanceToOrigin = playerPosition.Value.Length(); - double remainingDistance = BoundaryRadius - distanceToOrigin; // Calculate remaining distance - float boxSpacing = CalculateBoxSpacing(distanceToOrigin); - MatrixD rotationMatrix = CalculateRotationMatrix(directionToOrigin); - - if (remainingDistance <= 1000) // Adjust this value as needed - { - ShowDistanceNotification(remainingDistance); - } - - if (rotationMatrix == null) - { - return; // If rotationMatrix is null, exit the method - } - - DrawBlueBoxes(distanceToOrigin, directionToOrigin, rotationMatrix); - // DrawRedBoxes(playerPosition.Value, directionToOrigin, rotationMatrix.Value, boxSpacing); - DrawGreenLine(distanceToOrigin, playerPosition.Value, directionToOrigin); - } - - private void ShowDistanceNotification(double remainingDistance) - { - string notificationMessage = $"Out of Bounds in: {remainingDistance.ToString("F2")} meters"; - MyAPIGateway.Utilities.ShowNotification(notificationMessage, 10, MyFontEnum.Red); - } - - private static Vector3D? PlayerPosition - { - get - { - var spectator = MyAPIGateway.Session.IsCameraUserControlledSpectator; - var session = MyAPIGateway.Session?.Player?.Controller?.ControlledEntity?.Entity; - var cockpit = MyAPIGateway.Session.ControlledObject?.Entity as IMyCockpit; - if (session == null || cockpit == null && !spectator) - { - // MyLog.Default.WriteLine("Null object encountered in GetPlayerPosition, or not in cockpit"); - return null; - } - return session.GetPosition(); - } - } - - private static Vector3D CalculateDirectionToOrigin(Vector3D playerPosition) => Vector3D.Normalize(Vector3D.Zero - playerPosition); - - private static float CalculateBoxSpacing(double distanceToOrigin) => Math.Max((float)(distanceToOrigin / NumberOfBoxes), 10f); - - private static MatrixD CalculateRotationMatrix(Vector3D directionToOrigin) => MatrixD.CreateWorld(Vector3D.Zero, directionToOrigin, Vector3D.Up); - - - private static void DrawBlueBoxes(double distanceToOrigin, Vector3D directionToOrigin, MatrixD rotationMatrix) - { - Vector3 halfExtents = new Vector3(2.5f, 2.5f, 2.5f); - BoundingBoxD blueBox = new BoundingBoxD(-halfExtents, halfExtents); - Color specialLineColor = CalculateSpecialLineColor(distanceToOrigin); // Calculate the special line color - - // Check if the player is within 10km. If so, skip drawing the special line. - if (distanceToOrigin < 10000) - { - return; - } - - // Draw the less transparent panel if the player is beyond 10km but within 12.5km. - if (distanceToOrigin >= 10000 && distanceToOrigin < 12500) - { - Vector3D specialWallPosition = Vector3D.Zero - (directionToOrigin * 10000); - DrawBox(blueBox, specialWallPosition, BlueBoxColor, rotationMatrix); - DrawPerpendicularPlane(specialWallPosition, rotationMatrix, 500, 0.1, specialLineColor); - } - - // General distance check for other boxes - if (distanceToOrigin <= 9000) return; - - foreach (int multiplier in DistanceMultipliers) - { - if (distanceToOrigin <= multiplier) continue; - - Vector3D blueWallPosition = Vector3D.Zero - (directionToOrigin * multiplier); - DrawBox(blueBox, blueWallPosition, BlueBoxColor, rotationMatrix); - - if (multiplier == 10000) - { - continue; // Already drawn above - } - else - { - DrawPerpendicularLine(blueWallPosition, rotationMatrix, 50); - } - } - } - - - private static Color CalculateSpecialLineColor(double distanceToOrigin) - { - byte alpha; - - if (distanceToOrigin >= 9000 && distanceToOrigin < 10000) - { - // Scale alpha from 0 (100% transparent) to 179 (about 30% transparent) as distance approaches 10km - // This makes the plane go from invisible to slightly visible - alpha = (byte)((distanceToOrigin - 9000) / 1000 * 179); - } - else if (distanceToOrigin >= 10000) - { - // Set alpha to 25 (about 90% transparent) beyond 10km - // This makes it slightly visible from outside - alpha = 1; - } - else - { - // If distance is less than 9000m, make it completely transparent - alpha = 0; // Completely transparent - } - - return new Color(255, 0, 0, alpha); // Red color with calculated alpha - } - - - - - - - - private static void DrawPerpendicularPlane(Vector3D boxPosition, MatrixD rotationMatrix, double planeWidth = 500, double planeThickness = 0.1, Color? color = null) - { - Vector3D perpendicularDir = Vector3D.CalculatePerpendicularVector(rotationMatrix.Forward); - Vector3D planeNormal = rotationMatrix.Forward; - Vector3 halfExtents = new Vector3((float)planeWidth, (float)planeWidth, (float)planeThickness); - BoundingBoxD planeBox = new BoundingBoxD(-halfExtents, halfExtents); - - // Create a variable for the plane matrix - MatrixD planeMatrix = MatrixD.CreateWorld(boxPosition, planeNormal, perpendicularDir); - - // Create variables for other parameters - Color planeColor = color ?? LineColor; - - // Draw the plane - MySimpleObjectDraw.DrawTransparentBox(ref planeMatrix, ref planeBox, ref planeColor, MySimpleObjectRasterizer.Solid, 1, 0.1f, MyStringId.GetOrCompute("Square")); - } - - private static void DrawBox(BoundingBoxD box, Vector3D position, Color color, MatrixD rotationMatrix) - { - BoundingBoxD transformedBox = box.TransformFast(rotationMatrix); - transformedBox.Translate(position); - MySimpleObjectDraw.DrawTransparentBox(ref MatrixD.Identity, ref transformedBox, ref color, MySimpleObjectRasterizer.Solid, 1, 0.1f, MyStringId.GetOrCompute("Square")); - } - - private static void DrawGreenLine(double distanceToOrigin, Vector3D playerPosition, Vector3D directionToOrigin) - { - if (distanceToOrigin <= 9000) return; - - Color lineColor = LineColor; // Default to Green - if (distanceToOrigin > 10000) - { - lineColor = Color.Red; // Change color to Red if the distance is greater than 7500 - } - Vector4 lineColorVector4 = lineColor.ToVector4(); - - Vector3D lineEndPoint = playerPosition + (directionToOrigin * 200); - MySimpleObjectDraw.DrawLine(playerPosition, lineEndPoint, MyStringId.GetOrCompute("Square"), ref lineColorVector4, 1f); - } - - - - private static void DrawPerpendicularLine(Vector3D boxPosition, MatrixD rotationMatrix, double lineLength = 50, Color? color = null) - { - - Vector3D perpendicularDir = Vector3D.CalculatePerpendicularVector(rotationMatrix.Forward); - Vector3D lineStart = boxPosition - (perpendicularDir * (lineLength / 2)); - Vector3D lineEnd = boxPosition + (perpendicularDir * (lineLength / 2)); - Vector4 lineColorVector4 = (color ?? LineColor).ToVector4(); - MySimpleObjectDraw.DrawLine(lineStart, lineEnd, MyStringId.GetOrCompute("Square"), ref lineColorVector4, 1f); - } - - protected override void UnloadData() { } - } -} diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/Data/TransparentMaterials.sbc b/Gamemode Mods/Stable/CombatZoneMuzzmod/Data/TransparentMaterials.sbc deleted file mode 100644 index 924f5107b..000000000 --- a/Gamemode Mods/Stable/CombatZoneMuzzmod/Data/TransparentMaterials.sbc +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - TransparentMaterialDefinition - Outer - - false - 1 - false - false - 1 - Textures\Particles\CustomIdle.dds - Textures\Particles\CustomIdle.dds - false - true - - 0 - 0 - - - 1 - 1 - - - 1 - 1 - 1 - 50 - - - 0 - 0 - 0 - 0 - - - 0 - 0 - 0 - 0 - - - 0 - 0 - 0 - 0 - - 0 - 0 - 0 - 0 - 0 - 255 - true - - - diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/License.txt b/Gamemode Mods/Stable/CombatZoneMuzzmod/License.txt deleted file mode 100644 index b38e73ffe..000000000 --- a/Gamemode Mods/Stable/CombatZoneMuzzmod/License.txt +++ /dev/null @@ -1 +0,0 @@ -yeah go do whatever \ No newline at end of file diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/Models/Cubes/BounceZone.mwm b/Gamemode Mods/Stable/CombatZoneMuzzmod/Models/Cubes/BounceZone.mwm deleted file mode 100644 index f614ccd4d..000000000 Binary files a/Gamemode Mods/Stable/CombatZoneMuzzmod/Models/Cubes/BounceZone.mwm and /dev/null differ diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/Models/Cubes/BounceZoneAlt.mwm b/Gamemode Mods/Stable/CombatZoneMuzzmod/Models/Cubes/BounceZoneAlt.mwm deleted file mode 100644 index 4e9752b11..000000000 Binary files a/Gamemode Mods/Stable/CombatZoneMuzzmod/Models/Cubes/BounceZoneAlt.mwm and /dev/null differ diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/Models/Cubes/OuterShield.mwm b/Gamemode Mods/Stable/CombatZoneMuzzmod/Models/Cubes/OuterShield.mwm deleted file mode 100644 index 507888fcf..000000000 Binary files a/Gamemode Mods/Stable/CombatZoneMuzzmod/Models/Cubes/OuterShield.mwm and /dev/null differ diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/Models/Cubes/Sphere_Test_Model.mwm b/Gamemode Mods/Stable/CombatZoneMuzzmod/Models/Cubes/Sphere_Test_Model.mwm deleted file mode 100644 index 16391166e..000000000 Binary files a/Gamemode Mods/Stable/CombatZoneMuzzmod/Models/Cubes/Sphere_Test_Model.mwm and /dev/null differ diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/ShieldPassive.mwm b/Gamemode Mods/Stable/CombatZoneMuzzmod/ShieldPassive.mwm deleted file mode 100644 index ffcce991e..000000000 Binary files a/Gamemode Mods/Stable/CombatZoneMuzzmod/ShieldPassive.mwm and /dev/null differ diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Cubes/DefenseShieldAlpha.mwm b/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Cubes/DefenseShieldAlpha.mwm deleted file mode 100644 index acecda997..000000000 Binary files a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Cubes/DefenseShieldAlpha.mwm and /dev/null differ diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Cubes/GenericDarkColorable_add.dds b/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Cubes/GenericDarkColorable_add.dds deleted file mode 100644 index b62ed2a02..000000000 Binary files a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Cubes/GenericDarkColorable_add.dds and /dev/null differ diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Cubes/GenericDarkNonColorable_add.dds b/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Cubes/GenericDarkNonColorable_add.dds deleted file mode 100644 index 341091824..000000000 Binary files a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Cubes/GenericDarkNonColorable_add.dds and /dev/null differ diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Cubes/colour_cm.dds b/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Cubes/colour_cm.dds deleted file mode 100644 index d88573de6..000000000 Binary files a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Cubes/colour_cm.dds and /dev/null differ diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Cubes/colour_ng.dds b/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Cubes/colour_ng.dds deleted file mode 100644 index 6719491c2..000000000 Binary files a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Cubes/colour_ng.dds and /dev/null differ diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Cubes/emissive_add.dds b/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Cubes/emissive_add.dds deleted file mode 100644 index 76814f87e..000000000 Binary files a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Cubes/emissive_add.dds and /dev/null differ diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Cubes/generic_add.dds b/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Cubes/generic_add.dds deleted file mode 100644 index b510838a1..000000000 Binary files a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Cubes/generic_add.dds and /dev/null differ diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Cubes/generic_cm.dds b/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Cubes/generic_cm.dds deleted file mode 100644 index 3eeb39dd8..000000000 Binary files a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Cubes/generic_cm.dds and /dev/null differ diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Cubes/generic_ng.dds b/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Cubes/generic_ng.dds deleted file mode 100644 index 57a793cdd..000000000 Binary files a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Cubes/generic_ng.dds and /dev/null differ diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Plasma_add.dds b/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Plasma_add.dds deleted file mode 100644 index a970e611d..000000000 Binary files a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Plasma_add.dds and /dev/null differ diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Plasma_cm.dds b/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Plasma_cm.dds deleted file mode 100644 index 45a3cc4cc..000000000 Binary files a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Plasma_cm.dds and /dev/null differ diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Plasma_ng.dds b/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Plasma_ng.dds deleted file mode 100644 index eb9fec288..000000000 Binary files a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Models/Plasma_ng.dds and /dev/null differ diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Particles/CustomIdle.dds b/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Particles/CustomIdle.dds deleted file mode 100644 index 430603073..000000000 Binary files a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Particles/CustomIdle.dds and /dev/null differ diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Particles/CustomIdleOverwrite.dds b/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Particles/CustomIdleOverwrite.dds deleted file mode 100644 index 225caf8f3..000000000 Binary files a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Particles/CustomIdleOverwrite.dds and /dev/null differ diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Particles/ShieldActive.dds b/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Particles/ShieldActive.dds deleted file mode 100644 index 16dc86d2f..000000000 Binary files a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Particles/ShieldActive.dds and /dev/null differ diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Particles/ShieldPassive.dds b/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Particles/ShieldPassive.dds deleted file mode 100644 index 16dc86d2f..000000000 Binary files a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Particles/ShieldPassive.dds and /dev/null differ diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/tiled-hex_CM.dds b/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/tiled-hex_CM.dds deleted file mode 100644 index e3214ca9a..000000000 Binary files a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/tiled-hex_CM.dds and /dev/null differ diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/modinfo_main.sbmi b/Gamemode Mods/Stable/CombatZoneMuzzmod/modinfo_main.sbmi deleted file mode 100644 index fbb40693e..000000000 --- a/Gamemode Mods/Stable/CombatZoneMuzzmod/modinfo_main.sbmi +++ /dev/null @@ -1,11 +0,0 @@ - - - 76561198028233790 - 0 - - - 2759080043 - Steam - - - \ No newline at end of file diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/modinfo_stable.sbmi b/Gamemode Mods/Stable/CombatZoneMuzzmod/modinfo_stable.sbmi deleted file mode 100644 index b2f9bffaa..000000000 --- a/Gamemode Mods/Stable/CombatZoneMuzzmod/modinfo_stable.sbmi +++ /dev/null @@ -1,11 +0,0 @@ - - - 76561199117576365 - 0 - - - 3343111083 - Steam - - - diff --git a/Gamemode Mods/Stable/Harmzone-Muzzmod/Data/CubeBlocks_HarmBeacon.sbc b/Gamemode Mods/Stable/Harmzone-Muzzmod/Data/CubeBlocks_HarmBeacon.sbc deleted file mode 100644 index fc9a0ef3b..000000000 --- a/Gamemode Mods/Stable/Harmzone-Muzzmod/Data/CubeBlocks_HarmBeacon.sbc +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - Beacon - HarmBeacon - - HarmBeacon - Textures\GUI\Icons\Cubes\beacon.dds - Large - true - TriangleMesh - - - Models\Cubes\Large\beacon.mwm - - - - - - - - - - - - - - - - - - - - - - - Light - Z - 40 - Damage_Electrical_Damaged - ParticleElectrical - - - - Utility - 200000 - BeaconLarge - 20 - - Beacon - BlockDestroyedExplosion_Large - WepSmallWarheadExpl - 50 - false - - - diff --git a/Gamemode Mods/Stable/Harmzone-Muzzmod/Data/Scripts/HarmZone/HarmZone.cs b/Gamemode Mods/Stable/Harmzone-Muzzmod/Data/Scripts/HarmZone/HarmZone.cs deleted file mode 100644 index 100d09ac0..000000000 --- a/Gamemode Mods/Stable/Harmzone-Muzzmod/Data/Scripts/HarmZone/HarmZone.cs +++ /dev/null @@ -1,357 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using ObjectBuilders.SafeZone; -using ProtoBuf; -using Sandbox.Common.ObjectBuilders; -using Sandbox.Game; -using Sandbox.Game.Entities; -using Sandbox.Game.Entities.Interfaces; -using Sandbox.ModAPI; -using Sandbox.ModAPI.Interfaces; -using Sandbox.ModAPI.Interfaces.Terminal; -using SpaceEngineers.Game.Entities.Blocks.SafeZone; -using SpaceEngineers.Game.ModAPI; -using VRage.Collections; -using VRage.Game; -using VRage.Game.Components; -using VRage.Game.Entity; -using VRage.Game.ModAPI; -using VRage.Library.Utils; -using VRage.ModAPI; -using VRage.ObjectBuilders; -using VRage.Utils; -using VRageMath; -using BlendTypeEnum = VRageRender.MyBillboard.BlendTypeEnum; - - -namespace Klime.HarmZone -{ - [MyEntityComponentDescriptor(typeof(MyObjectBuilder_Beacon), false, "HarmBeacon")] - public class HarmZone : MyGameLogicComponent - { - private IMyBeacon beacon_block; - private List - - all_grids = new List - - (); - private MyCubeGrid reuse_grid; - private ListReader - - reuse_blocks = new ListReader - - (); - private int timer = 0; - private List - - words = new List - - (); - private Vector3D cam_pos = Vector3D.Zero; - private Vector3 col = new Vector3(0, 255, 0); - private MatrixD worldmat = MatrixD.Zero; - private Color sphere_col = new Color(Color.Green, 0.1f); - private MyStringId shield_mat; - List - - allplayers = new List - - (); - private bool sphere_visuals = false; - private ushort netId = 42349; - private bool is_shrinking = false; - private float shrink_rate_per_tick = 0f; - private int harmdist = 7500; - - - - public override void Init(MyObjectBuilder_EntityBase objectBuilder) - { - beacon_block = Entity as IMyBeacon; - NeedsUpdate = MyEntityUpdateEnum.BEFORE_NEXT_FRAME; - } - - [ProtoContract] - public class ShrinkPacket - { - [ProtoMember(30)] - public long beaconEntityId; - - [ProtoMember(31)] - public float serverRadius; - - public ShrinkPacket() { } - - public ShrinkPacket(long beaconEntityId, float serverRadius) - { - this.beaconEntityId = beaconEntityId; - this.serverRadius = serverRadius; - } - } - - public override void UpdateOnceBeforeFrame() - { - if (beacon_block.CubeGrid.Physics != null) - { - MyAPIGateway.Utilities.MessageEntered += Utilities_MessageEntered; - MyAPIGateway.Utilities.MessageEntered += Utilities_DepreciatedMessage; - shield_mat = MyStringId.GetOrCompute("SafeZoneShield_Material"); - - if (MyAPIGateway.Session.IsServer) - { - IMyCubeGrid grid = beacon_block.CubeGrid; - grid.Name = grid.EntityId.ToString(); - MyEntities.SetEntityName((MyEntity)grid); - } - - MyAPIGateway.Multiplayer.RegisterSecureMessageHandler(netId, shrinkHandler); - NeedsUpdate = MyEntityUpdateEnum.EACH_FRAME; - } - } - - private void shrinkHandler(ushort arg1, byte[] arg2, ulong arg3, bool arg4) - { - if (!MyAPIGateway.Session.IsServer && beacon_block != null && !beacon_block.MarkedForClose) - { - ShrinkPacket sp = MyAPIGateway.Utilities.SerializeFromBinary(arg2); - - if (sp != null && sp.beaconEntityId == beacon_block.EntityId) - { - beacon_block.Radius = sp.serverRadius; - } - } - } - - private void Utilities_MessageEntered(string messageText, ref bool sendToOthers) - { - - if (messageText.Contains("/harmdist")) - { - try - { - string[] tempdist = messageText.Split(' '); - MyAPIGateway.Utilities.ShowNotification("Harmsphere visuals changed to " + tempdist[1].ToString() + "m from center."); - harmdist = int.Parse(tempdist[1]); - //sphere_visuals = !sphere_visuals; - sendToOthers = false; - } - catch (Exception) - { } - } - } - - private void Utilities_DepreciatedMessage(string messageText, ref bool sendToOthers) - { - if (messageText.Contains("/harmsphere")) - { - - MyAPIGateway.Utilities.ShowNotification("This command is depreciated. Use /harmdist DISTANCE (example: /harmdist 1000)", 10000); - sendToOthers = false; - - } - } - - public override void UpdateAfterSimulation() - { - try - { - if (beacon_block.Enabled) - { - if (MyAPIGateway.Session != null && MyAPIGateway.Session.IsServer) - { - if (is_shrinking && beacon_block.Radius > 200000) - { - beacon_block.Radius -= shrink_rate_per_tick; - } - - if (timer % 60 == 0) - { - int dmg = 100; - float dmg_radius = 2f; - - if (beacon_block.CustomData != null && beacon_block.CustomData == "") - { - beacon_block.CustomData = "100\n" + "2\n" + "false\n" + "10"; - } - - words.Clear(); - words = beacon_block.CustomData.Split('\n').ToList(); - - if (words != null && words.Count == 4) - { - int fake_dmg = 0; - float fake_dmg_radius = 0f; - bool fake_shrink = false; - float fake_shrink_rate = 0f; - - if (int.TryParse(words[0], out fake_dmg)) - { - if (fake_dmg >= 0) - { - dmg = fake_dmg; - } - } - - if (float.TryParse(words[1], out fake_dmg_radius)) - { - if (fake_dmg_radius >= 0) - { - dmg_radius = fake_dmg_radius; - } - } - - if (bool.TryParse(words[2], out fake_shrink)) - { - is_shrinking = fake_shrink; - } - - if (float.TryParse(words[3], out fake_shrink_rate)) - { - if (fake_shrink_rate >= 0) - { - shrink_rate_per_tick = fake_shrink_rate / 60f; - } - } - } - else if (words != null && string.IsNullOrEmpty(beacon_block.CustomData)) - { - beacon_block.CustomData = "100\n" + "2"; - } - - all_grids.Clear(); - BoundingSphereD sph = new BoundingSphereD(beacon_block.WorldMatrix.Translation, 200000); - - foreach (var ent in MyAPIGateway.Entities.GetTopMostEntitiesInSphere(ref sph)) - { - if (ent is MyCubeGrid) - { - reuse_grid = ent as MyCubeGrid; - - if (reuse_grid.Physics != null && !reuse_grid.IsStatic) - { - all_grids.Add(reuse_grid); - } - } - } - - // Define constants for radius and damage scaling - const float base_radius = 5f; // The starting radius for the explosion - const float max_radius = 5f; // The maximum radius for the explosion - const float base_dmg = 100f; // The starting damage for the explosion - const float max_dmg = 100f; // The maximum damage for the explosion - const float max_speed = 1; // The maximum speed for grid in m/s - - DateTime explosion_start_time = DateTime.MinValue; // The start time of the current explosion - float radius = base_radius; // Initialize the starting radius - float dmg2 = base_dmg; // Initialize the starting damage - - MyAPIGateway.Parallel.For(0, all_grids.Count, i => - { - var grid = all_grids[i]; - if (!grid.MarkedForClose) - { - var dist = Vector3.Distance(grid.WorldMatrix.Translation, beacon_block.WorldMatrix.Translation); - - if (dist > beacon_block.Radius) - { - List blocks_to_damage = new List(grid.GetFatBlocks()); - blocks_to_damage.RemoveAll(block => block == null - || block is IMyCockpit - || block is IMyMotorAdvancedRotor - || block is IMyMotorAdvancedStator - || block is IMyMotorRotor - || block is IMyMotorStator - || block is IMyThrust - || block is Sandbox.ModAPI.IMyGasTank - || !(block is IMyFunctionalBlock)); - if (blocks_to_damage.Count > 0) - { - // Scale the radius and damage based on the time since last explosion - float elapsed_time = (float)(DateTime.Now - explosion_start_time).TotalSeconds; - if (elapsed_time < 5) - { - float radius_scale = elapsed_time / 5f; - radius = base_radius + ((max_radius - base_radius) * radius_scale); - dmg2 = base_dmg + ((max_dmg - base_dmg) * radius_scale); - } - else - { - radius = base_radius; - dmg = (int)base_dmg; - explosion_start_time = DateTime.Now; - } - - // Scale the damage based on the speed of the grid - //float speed_scale = grid.Physics.LinearVelocity.Length() / max_speed; - //dmg2 *= MathHelper.Clamp(speed_scale, 1f, 5f); - - var block_to_damage = blocks_to_damage[MyUtils.GetRandomInt(0, blocks_to_damage.Count - 1)]; - MyVisualScriptLogicProvider.CreateExplosion(block_to_damage.WorldMatrix.Translation, radius, dmg); - //MyAPIGateway.Utilities.ShowNotification("Last explosion: " + block_to_damage.DisplayNameText + " | Explosion scaled by speed: " + Math.Round(speed_scale, 2)); - } - } - } - }); - /* - bool hurtplayers = false; - - if (hurtplayers) { - allplayers.Clear(); - - MyAPIGateway.Multiplayer.Players.GetPlayers(allplayers); - ShrinkPacket sp = new ShrinkPacket(beacon_block.EntityId, beacon_block.Radius); - - foreach (var player in allplayers) - { - if (player.Character != null && !player.Character.IsDead) - { - double dist = Vector3D.Distance(beacon_block.WorldMatrix.Translation, player.Character.WorldMatrix.Translation); - - if (dist >= beacon_block.Radius) - { - player.Character.DoDamage(20, MyStringHash.GetOrCompute("Fire"), true); - } - } - - MyAPIGateway.Multiplayer.SendMessageTo(netId, MyAPIGateway.Utilities.SerializeToBinary(sp), player.SteamUserId); - } - } - */ - } - - timer += 1; - } - - if (!MyAPIGateway.Utilities.IsDedicated) - { - if (MyAPIGateway.Session.Player != null && MyAPIGateway.Session.Camera != null) - { - var camMat = MyAPIGateway.Session.Camera.WorldMatrix; - var distance = camMat.Translation.Length(); // Distance from 0,0,0 - - // If the camera is within 5000 to 12500 meters of the origin, set sphere_visuals to true - bool sphere_visuals = distance >= harmdist && distance <= 12500; - - if (sphere_visuals) - { - worldmat = beacon_block.WorldMatrix; - MySimpleObjectDraw.DrawTransparentSphere(ref worldmat, beacon_block.Radius, ref sphere_col, MySimpleObjectRasterizer.Solid, 35, shield_mat, null, -1, -1, null, BlendTypeEnum.PostPP, 1); - } - } - } - } - } - catch (System.Exception e) - { - MyLog.Default.WriteLine("KLIME HARMZONE: " + e); - } - } - public override void Close() - { - MyAPIGateway.Utilities.MessageEntered -= Utilities_MessageEntered; - MyAPIGateway.Utilities.MessageEntered -= Utilities_DepreciatedMessage; - MyAPIGateway.Multiplayer.UnregisterSecureMessageHandler(netId, shrinkHandler); - } - } -} \ No newline at end of file diff --git a/Gamemode Mods/Stable/Harmzone-Muzzmod/test.txt b/Gamemode Mods/Stable/Harmzone-Muzzmod/test.txt deleted file mode 100644 index 30d74d258..000000000 --- a/Gamemode Mods/Stable/Harmzone-Muzzmod/test.txt +++ /dev/null @@ -1 +0,0 @@ -test \ No newline at end of file diff --git a/Gamemode Mods/Stable/SCKoth/Data/Blueprints.sbc b/Gamemode Mods/Stable/SCKoth/Data/Blueprints.sbc deleted file mode 100644 index 1d142ebc8..000000000 --- a/Gamemode Mods/Stable/SCKoth/Data/Blueprints.sbc +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - BlueprintClassDefinition - AdminKit - - AdminKit - Textures\gui\construction_components_component.dds - - - - - - - - - - - 99999999 - - - diff --git a/Gamemode Mods/Stable/SCKoth/Data/Components.sbc b/Gamemode Mods/Stable/SCKoth/Data/Components.sbc deleted file mode 100644 index d1067698e..000000000 --- a/Gamemode Mods/Stable/SCKoth/Data/Components.sbc +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - Component - AdminKit - - AdminKit - Textures\gui\construction_components_component.dds - - 0.1 - 0.1 - 0.1 - - 1 - 10 - Models\Components\construction_components_component.mwm - Metal - 999999999 - - 0 - 10 - - - diff --git a/Gamemode Mods/Stable/SCKoth/Data/CubeBlocks.sbc b/Gamemode Mods/Stable/SCKoth/Data/CubeBlocks.sbc deleted file mode 100644 index 902ce5113..000000000 --- a/Gamemode Mods/Stable/SCKoth/Data/CubeBlocks.sbc +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - Beacon - ZoneBlock - - King Of The Hill - KotH - Textures\GUI\KotHBeacon.dds - Large - TriangleMesh - - - Models\Cubes\Large\KotHBeacon.mwm - - - - - - - - - - - - - - - - - - - - - - - - - Light - Utility - 3.402823E+38 - 3.402823E+38 - 0 - true - - - - CargoContainer - Prizebox - - KotH Golden Cargo Container - Textures\GUI\Icons\GoldenBlock_icon.dds - Description_SpecialCargoContainerOnlyRarelyFound - Large - TriangleMesh - - - Models\Cubes\Large\GoldenBlock_Large.mwm - - - - - - - - - - - - - - - - - - - - - - - - - None - Z - Y - GoldenBlock_Large - - 3.402823E+38 - 3.402823E+38 - Light - Damage_HeavyMech_Damaged - ParticleHeavyMech - BlockDestroyedExplosion_Small - WepSmallWarheadExpl - 10 - false - - - \ No newline at end of file diff --git a/Gamemode Mods/Stable/SCKoth/Data/EntityComponents.sbc b/Gamemode Mods/Stable/SCKoth/Data/EntityComponents.sbc deleted file mode 100644 index 34b2be168..000000000 --- a/Gamemode Mods/Stable/SCKoth/Data/EntityComponents.sbc +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - Beacon - ZoneBlock - - - - - - - - - - - Inventory - ZoneBlock - - - - - - - ModStorageComponent - ZoneBlock - - - B7AF750E-68E3-4826-BD0E-A75BF36BA3E5 - - - - \ No newline at end of file diff --git a/Gamemode Mods/Stable/SCKoth/Data/EntityContainers.sbc b/Gamemode Mods/Stable/SCKoth/Data/EntityContainers.sbc deleted file mode 100644 index 2cf1de8a2..000000000 --- a/Gamemode Mods/Stable/SCKoth/Data/EntityContainers.sbc +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - CargoContainer - Prizebox - - - - - - - diff --git a/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/Constants.cs b/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/Constants.cs deleted file mode 100644 index 5d691e6a8..000000000 --- a/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/Constants.cs +++ /dev/null @@ -1,25 +0,0 @@ -namespace KingOfTheHill -{ - public class Constants - { - public const string Filename = "KingOfTheHill.cfg"; - - public const float MinRadius = 5; - public const float MaxRadius = 5000; - - public const float MinBlockCount = 1; - public const float MaxBlockCount = 2000; - - public const float MinCaptureTime = 60; - public const float MaxCaptureTime = 216000; - - public const float MinPoints = 1; - public const float MaxPoints = 1000; - - public const float MinAmount = 1; - public const float MaxAmount = 1000; - - public const float MinCredit = 1; - public const float MaxCredit = 50000000; - } -} diff --git a/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/Core.cs b/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/Core.cs deleted file mode 100644 index d4e385e48..000000000 --- a/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/Core.cs +++ /dev/null @@ -1,633 +0,0 @@ -using Sandbox.ModAPI; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using VRage.Game; -using VRage.Game.Components; -using VRage.Game.ModAPI; -using VRage.Utils; -using KingOfTheHill.Descriptions; -using SENetworkAPI; -using NexusAPIns; -using System; -using VRage.ModAPI; -using Sandbox.Game.Entities; -using VRage.ObjectBuilders; - -namespace KingOfTheHill -{ - [MySessionComponentDescriptor(MyUpdateOrder.AfterSimulation)] - public class Core : MySessionComponentBase - { - public const string Keyword = "/koth"; - public const string DisplayName = "KotH"; - public const ushort ComId = 42511; - public const ushort CliComId = 42611; - - //NEXUS: init flags and nexus api instantiation, one is for messages second for scores - public bool nexusCliInit = false; - public bool nexusInit = false; - public NexusAPI Nexus; - public NexusAPI Nexus2; - - //private static Dictionary Scores = new Dictionary(); // faction, score - private static List Zones = new List(); - private static List Planets = new List(); - - public static List StaticGrids = new List(); - - private NetworkAPI Network => NetworkAPI.Instance; - - public static void RegisterZone(ZoneBlock zone) - { - Zones.Add(zone); - } - - public static void UnRegisterZone(ZoneBlock zone) - { - Zones.Remove(zone); - } - - private void EntityAdded(IMyEntity e) - { - IMyCubeGrid g = e as IMyCubeGrid; - if (g == null || g.Physics == null) - return; - - g.OnIsStaticChanged += StaticChanged; - - if (!g.IsStatic) - return; - - StaticGrids.Add(g); - } - - private void EntityRemoved(IMyEntity e) - { - IMyCubeGrid g = e as IMyCubeGrid; - if (g == null || g.Physics == null) - return; - - g.OnIsStaticChanged -= StaticChanged; - - if (!g.IsStatic) - return; - - if (StaticGrids.Contains(g)) - { - StaticGrids.Remove(g); - } - } - - private void StaticChanged(IMyCubeGrid g, bool IsStatic) - { - if (g.IsStatic) - { - StaticGrids.Add(g); - } - else - { - if (StaticGrids.Contains(g)) - { - StaticGrids.Remove(g); - } - } - } - - public override void Init(MyObjectBuilder_SessionComponent sessionComponent) - { - Tools.Log(MyLogSeverity.Info, "Initializing"); - - MyAPIGateway.Multiplayer.RegisterSecureMessageHandler(8008, PluginHandleIncomingPacket); - if (!NetworkAPI.IsInitialized) - { - NetworkAPI.Init(ComId, DisplayName, Keyword); - } - - Network.RegisterChatCommand(string.Empty, Chat_Help); - Network.RegisterChatCommand("help", Chat_Help); - - if (!MyAPIGateway.Session.IsServer) - { - Network.RegisterChatCommand("score", (args) => Network.SendCommand("score")); - Network.RegisterChatCommand("save", (args) => Network.SendCommand("save")); - Network.RegisterChatCommand("force-load", (args) => Network.SendCommand("force-load")); - - Network.RegisterNetworkCommand("score", ClientCallback_Score); - - //NEXUS: client message handler, recieves and shows messages forwarded from the sector - if (!nexusCliInit) - { - MyAPIGateway.Multiplayer.RegisterMessageHandler(CliComId, HandleClientCrossServerComm); - nexusCliInit = true; - } - } - else - { - ZoneBlock.OnAwardPoints += AwardPoints; - ZoneBlock.OnPlayerDied += PlayerDied; - - Network.RegisterChatCommand("score", (args) => { MyAPIGateway.Utilities.ShowMissionScreen(Network.ModName, "King of the Hill", "", FormatScores()); }); - Network.RegisterChatCommand("save", (args) => { ServerCallback_Save(MyAPIGateway.Session.Player.SteamUserId, "save", null, DateTime.Now); }); - Network.RegisterChatCommand("force-load", (args) => { ServerCallback_ForceLoad(MyAPIGateway.Session.Player.SteamUserId, "force_load", null, DateTime.Now); }); - - Network.RegisterNetworkCommand("score", ServerCallback_Score); - Network.RegisterNetworkCommand("save", ServerCallback_Save); - Network.RegisterNetworkCommand("force_load", ServerCallback_ForceLoad); - - if (MyAPIGateway.Multiplayer.IsServer && !nexusInit) - { - //NEXUS: registration of sector handlers and nexus instances for each - Nexus2 = new NexusAPI(5431); // score message - Nexus = new NexusAPI(5432); // text message - MyAPIGateway.Multiplayer.RegisterMessageHandler(5431, HandleCrossServerScore); - MyAPIGateway.Multiplayer.RegisterMessageHandler(5432, HandleCrossServerComm); - - nexusInit = true; - } - } - - MyAPIGateway.Entities.OnEntityAdd += EntityAdded; - MyAPIGateway.Entities.OnEntityRemove += EntityRemoved; - } - - private void PluginHandleIncomingPacket(ushort comId, byte[] msg, ulong id, bool reliable) - { - try - { - string message = Encoding.ASCII.GetString(msg); - if (message.Equals("clear")) - { - ClearScore(); - - //NEXUS: if nexus is initialized, broadcast the message to nexus (and all other sectors in that way) - //NEXUS: KotH should work normally if nexus is not initialized - if (nexusInit) - { - //NEXUS: score is broadcasted to other sectors, this basically triggers the save not just on this sector but on all the others with the same score - var serializedScore = MyAPIGateway.Utilities.SerializeToBinary>(Planets); - Nexus2.SendMessageToAllServers(serializedScore); - } - } - - } - catch (Exception error) - { - Tools.Log(MyLogSeverity.Error, error.Message); - } - } - - //NEXUS: recieves a score object, overrides the current score and saves it - private void HandleCrossServerScore(byte[] obj) - { - try - { - if (obj == null) - return; - - Planets = MyAPIGateway.Utilities.SerializeFromBinary>(obj); - - SaveData(); - - } - catch (Exception exc) - { - MyLog.Default.WriteLineAndConsole($"##MOD: Chillout error, ERROR: {exc}"); - } - } - - //NEXUS: recieves a message from another sector and sends it to all connected clients - private void HandleCrossServerComm(byte[] obj) - { - try - { - if (obj == null) - return; - - MyAPIGateway.Multiplayer.SendMessageToOthers(CliComId, obj, true); - - } - catch (Exception exc) - { - MyLog.Default.WriteLineAndConsole($"##MOD: Chillout error, ERROR: {exc}"); - } - } - - //NEXUS: handles a message recieved from a server and shows it in the chat - private void HandleClientCrossServerComm(byte[] obj) - { - try - { - if (obj == null) - return; - - string message = Encoding.ASCII.GetString(obj); - - if (message == null) - return; - - MyLog.Default.WriteLineAndConsole($"##MOD: Client recieved msg: {message}"); - - MyAPIGateway.Utilities.ShowMessage(DisplayName, message); - - } - catch (Exception exc) - { - MyLog.Default.WriteLineAndConsole($"##MOD: Chillout error, ERROR: {exc}"); - } - } - - public override void LoadData() - { - if (!MyAPIGateway.Multiplayer.IsServer) - return; - - Tools.Log(MyLogSeverity.Info, "Loading data"); - - Session session = Descriptions.Session.Load(); - Planets = session.PlanetScores; - } - - public override void SaveData() - { - if (!MyAPIGateway.Multiplayer.IsServer) - return; - - Tools.Log(MyLogSeverity.Info, "Saving data"); - - Session session = new Session() { - PlanetScores = Planets - }; - - Descriptions.Session.Save(session); - - foreach (ZoneBlock b in Zones) - { - b.Save(); - } - } - - public static void ClearScore() - { - if (!MyAPIGateway.Multiplayer.IsServer) - return; - - Planets.Clear(); - Session session = new Session(); - - Descriptions.Session.Save(session); - } - - protected override void UnloadData() - { - ZoneBlock.OnAwardPoints -= AwardPoints; - ZoneBlock.OnPlayerDied -= PlayerDied; - - //NEXUS: unregister the handlers on unload - if (!MyAPIGateway.Session.IsServer) - { - MyAPIGateway.Multiplayer.UnregisterMessageHandler(CliComId, HandleClientCrossServerComm); - } - if (nexusInit) - { - MyAPIGateway.Multiplayer.UnregisterMessageHandler(5431, HandleCrossServerScore); - MyAPIGateway.Multiplayer.UnregisterMessageHandler(5432, HandleCrossServerComm); - } - } - - private void AwardPoints(ZoneBlock zone, IMyFaction faction, int enemies, bool displayHeader) - { - if (!MyAPIGateway.Multiplayer.IsServer) - return; - - string name = zone.LocationName.Value; - if (string.IsNullOrEmpty(name)) { - name = zone.GetClosestPlanet(); - } - if (!Planets.Any(description => description.Name == name)) - { - PlanetDescription p = new PlanetDescription() { - Name = name, - Scores = new List() - }; - - Planets.Add(p); - } - - long facId = faction.FactionId; - PlanetDescription planet = Planets.Find(w => w.Name == name); - IMyCubeGrid kothGrid = (zone.Entity as IMyCubeBlock).CubeGrid; - - if (!planet.Scores.Any(s => s.FactionId == facId)) - { - planet.Scores.Add(new ScoreDescription() { - FactionId = facId, - FactionName = faction.Name, - FactionTag = faction.Tag, - Points = 1, - PlanetId = name, - GridName = kothGrid.DisplayName - }); - } - - int total = GetTotalScore(planet); - ScoreDescription score = planet.Scores.Find(s => s.FactionId == facId); - int current = score.Points; - - int points; - if (zone.PointsOnCap.Value == 0) - { - points = (int)(((float)(total - current) / (float)total) * 5f * enemies) + 1 + enemies; - } - else - { - points = zone.PointsOnCap.Value; - } - - planet.Scores.Find(s => s.FactionId == facId).Points += points; - zone.PointsEarnedSincePrize += points; - - - if (zone.AwardPointsAsCredits.Value) - { - faction.RequestChangeBalance(points * zone.CreditsPerPoint.Value); - } - - - if (zone.PointsEarnedSincePrize >= zone.PointsForPrize.Value) - { - zone.PointsEarnedSincePrize -= zone.PointsForPrize.Value; - - IMyCargoContainer prizebox = null; - List temp = new List(); - kothGrid.GetBlocks(temp, s => { - if (prizebox == null && - s.FatBlock != null && - s.FatBlock is IMyCargoContainer && - s.FatBlock.BlockDefinition.SubtypeId == "Prizebox") - { - prizebox = s.FatBlock as IMyCargoContainer; - } - - return false; - }); - - if (zone.UseComponentReward.Value) - { - string prizeType = (zone.AdvancedComponentSelection.Value) ? zone.PrizeComponentSubtypeId.Value : zone.SelectedComponentString.Value; - int amount = zone.PrizeAmountComponent.Value; - - MyDefinitionId definitionId = new MyDefinitionId(typeof(MyObjectBuilder_Component), prizeType); - MyObjectBuilder_Component content = (MyObjectBuilder_Component)MyObjectBuilderSerializer.CreateNewObject(definitionId); - MyObjectBuilder_InventoryItem inventoryItem = new MyObjectBuilder_InventoryItem { Amount = amount, Content = content }; - - if (zone.SpawnIntoPrizeBox.Value) - { - if (prizebox == null) - { - Tools.Log(MyLogSeverity.Error, $"Could not find prize box on grid: {kothGrid.DisplayName} - {kothGrid.EntityId}"); - } - else if (prizebox.GetInventory().CanItemsBeAdded(amount, definitionId)) - { - prizebox.GetInventory().AddItems(amount, inventoryItem.Content); - } - } - else - { - if (zone.Entity.GetInventory().CanItemsBeAdded(amount, definitionId)) - { - zone.Entity.GetInventory().AddItems(amount, inventoryItem.Content); - } - } - } - - if (zone.UseIngotReward.Value) - { - string prizeType = (zone.AdvancedIngotSelection.Value) ? zone.PrizeIngotSubtypeId.Value : zone.SelectedIngotString.Value; - int amount = zone.PrizeAmountIngot.Value; - - MyDefinitionId definitionId = new MyDefinitionId(typeof(MyObjectBuilder_Ingot), prizeType); - MyObjectBuilder_Ingot content = (MyObjectBuilder_Ingot)MyObjectBuilderSerializer.CreateNewObject(definitionId); - MyObjectBuilder_InventoryItem inventoryItem = new MyObjectBuilder_InventoryItem { Amount = amount, Content = content }; - - if (zone.SpawnIntoPrizeBox.Value) - { - if (prizebox == null) - { - Tools.Log(MyLogSeverity.Error, $"Could not find prize box on grid: {kothGrid.DisplayName} - {kothGrid.EntityId}"); - } - else if (prizebox.GetInventory().CanItemsBeAdded(amount, definitionId)) - { - prizebox.GetInventory().AddItems(amount, inventoryItem.Content); - } - } - else - { - if (zone.Entity.GetInventory().CanItemsBeAdded(amount, definitionId)) - { - zone.Entity.GetInventory().AddItems(amount, inventoryItem.Content); - } - } - } - - if (zone.UseOreReward.Value) - { - string prizeType = (zone.AdvancedOreSelection.Value) ? zone.PrizeOreSubtypeId.Value : zone.SelectedOreString.Value; - int amount = zone.PrizeAmountOre.Value; - - MyDefinitionId definitionId = new MyDefinitionId(typeof(MyObjectBuilder_Ore), prizeType); - MyObjectBuilder_Ore content = (MyObjectBuilder_Ore)MyObjectBuilderSerializer.CreateNewObject(definitionId); - MyObjectBuilder_InventoryItem inventoryItem = new MyObjectBuilder_InventoryItem { Amount = amount, Content = content }; - - if (zone.SpawnIntoPrizeBox.Value) - { - if (prizebox == null) - { - Tools.Log(MyLogSeverity.Error, $"Could not find prize box on grid: {kothGrid.DisplayName} - {kothGrid.EntityId}"); - } - else if (prizebox.GetInventory().CanItemsBeAdded(amount, definitionId)) - { - prizebox.GetInventory().AddItems(amount, inventoryItem.Content); - } - } - else - { - if (zone.Entity.GetInventory().CanItemsBeAdded(amount, definitionId)) - { - zone.Entity.GetInventory().AddItems(amount, inventoryItem.Content); - } - } - } - } - - StringBuilder message = new StringBuilder(); - if (displayHeader && zone.IsLocationNamed.Value) - { - if (zone.EncampmentMode.Value) - { - - message.Append($"{kothGrid.DisplayName} at {name} Encampment Payout"); - } - else - { - message.Append($"{kothGrid.DisplayName} at {name} under attack"); - - } - } - - byte[] bytes = Encoding.ASCII.GetBytes(message.ToString()); - MyAPIGateway.Multiplayer.SendMessageToServer(8008, bytes); - Network.Say(message.ToString()); - - message.Clear(); - if (zone.AwardPointsAsCredits.Value) - { - message.Append($"{faction.Name} Scored {points} Points! ({points * zone.CreditsPerPoint.Value} credits)"); - } - else - { - message.Append($"{faction.Name} Scored {points} Points!"); - } - - - SaveData(); - - //NEXUS: if nexus is initialized, broadcast the message to nexus (and all other sectors in that way) - //NEXUS: KotH should work normally if nexus is not initialized - if (nexusInit) - { - //NEXUS: sends the message this sector displays in the chat to all the other sectors - byte[] nexMessage = Encoding.ASCII.GetBytes(message.ToString()); - Nexus.SendMessageToAllServers(nexMessage); - - //NEXUS: score is broadcasted to other sectors, this basically triggers the save not just on this sector but on all the others with the same score - var serializedScore = MyAPIGateway.Utilities.SerializeToBinary>(Planets); - Nexus2.SendMessageToAllServers(serializedScore); - } - - bytes = Encoding.ASCII.GetBytes(message.ToString()); - MyAPIGateway.Multiplayer.SendMessageToServer(8008, bytes); - Network.Say(message.ToString()); - } - - private void PlayerDied(ZoneBlock zone, IMyPlayer player, IMyFaction faction) - { - if (zone.PointsRemovedOnDeath.Value == 0 || !MyAPIGateway.Multiplayer.IsServer) - return; - - long facId = faction.FactionId; - string name = zone.LocationName.Value; - if (string.IsNullOrEmpty(name)) { - name = zone.GetClosestPlanet(); - } - - if (!Planets.Any(description => description.Name == name)) - { - var world = new PlanetDescription() { - Name = name, - Scores = new List() - }; - Planets.Add(world); - } - - PlanetDescription planet = Planets.Find(p => p.Name == name); - if (!planet.Scores.Any(s => s.FactionId == facId)) - { - planet.Scores.Add(new ScoreDescription() { - FactionId = facId, - FactionName = faction.Name, - FactionTag = faction.Tag, - Points = 1, - PlanetId = name, - GridName = (zone.Entity as IMyCubeBlock).CubeGrid.DisplayName, - }); - } - - ScoreDescription score = planet.Scores.Find(s => s.FactionId == facId); - int original = score.Points; - if (original - zone.PointsRemovedOnDeath.Value < 1) - { - score.Points = 1; - } - else - { - score.Points = original - zone.PointsRemovedOnDeath.Value; - } - - string message = $"[{faction.Tag}] {player.DisplayName} Died: {score.Points - original} Points"; - Network.Say(message); - } - - private int GetTotalScore(PlanetDescription planet) - { - int total = 0; - - foreach (ScoreDescription s in planet.Scores) - { - total += s.Points; - } - - return total; - } - - private string FormatScores() - { - StringBuilder formatedScores = new StringBuilder(); - foreach (var planet in Planets) - { - formatedScores.AppendLine($"### {planet.Name} ###"); - foreach (ScoreDescription score in planet.Scores) - { - formatedScores.AppendLine($" [{score.FactionTag}] {score.FactionName}: {score.Points.ToString()}"); - } - } - - return formatedScores.ToString(); - } - - #region Network Communication - - private void Chat_Help(string args) - { - MyAPIGateway.Utilities.ShowMessage(Network.ModName, "\nSCORE: Displays the current score\nSAVE: saves the current state to disk\nFORCE-LOAD: reloads scores from file (admin only)"); - } - - private void ClientCallback_Score(ulong steamId, string commandString, byte[] data, DateTime timestamp) - { - MyAPIGateway.Utilities.ShowMissionScreen(DisplayName, "King of the Hill", "", ASCIIEncoding.ASCII.GetString(data)); - } - - private void ServerCallback_Score(ulong steamId, string commandString, byte[] data, DateTime timestamp) - { - Network.SendCommand("score", data: ASCIIEncoding.ASCII.GetBytes(FormatScores()), steamId: steamId); - } - - private void ServerCallback_Save(ulong steamId, string commandString, byte[] data, DateTime timestamp) - { - if (Tools.IsAllowedSpecialOperations(steamId)) - { - SaveData(); - Network.SendCommand("blank_message", "KotH Saved.", steamId: steamId); - } - else - { - Network.SendCommand("blank_message", "Requires admin rights", steamId: steamId); - } - } - - private void ServerCallback_ForceLoad(ulong steamId, string commandString, byte[] data, DateTime timestamp) - { - if (Tools.IsAllowedSpecialOperations(steamId)) - { - LoadData(); - Network.SendCommand("blank_message", "Scores force loaded", steamId: steamId); - } - else - { - Network.SendCommand("blank_message", "Requires admin rights", steamId: steamId); - } - } - - #endregion - } -} diff --git a/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/Descriptions/PlanetDescription.cs b/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/Descriptions/PlanetDescription.cs deleted file mode 100644 index f25ee0f1f..000000000 --- a/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/Descriptions/PlanetDescription.cs +++ /dev/null @@ -1,19 +0,0 @@ -using ProtoBuf; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace KingOfTheHill.Descriptions -{ - [ProtoContract] - public class PlanetDescription - { - [ProtoMember(1)] - public string Name { get; set; } - - [ProtoMember(2)] - public List Scores { get; set; } = new List(); - } -} diff --git a/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/Descriptions/ScoreDescription.cs b/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/Descriptions/ScoreDescription.cs deleted file mode 100644 index 55d7a9e79..000000000 --- a/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/Descriptions/ScoreDescription.cs +++ /dev/null @@ -1,26 +0,0 @@ -using ProtoBuf; - -namespace KingOfTheHill.Descriptions -{ - [ProtoContract] - public class ScoreDescription - { - [ProtoMember(1)] - public long FactionId { get; set; } - - [ProtoMember(2)] - public string FactionName { get; set; } - - [ProtoMember(3)] - public string FactionTag { get; set; } - - [ProtoMember(4)] - public int Points { get; set; } - - [ProtoMember(5)] - public string PlanetId { get; set; } - - [ProtoMember(6)] - public string GridName { get; set; } - } -} diff --git a/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/Descriptions/Session.cs b/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/Descriptions/Session.cs deleted file mode 100644 index b58c44f57..000000000 --- a/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/Descriptions/Session.cs +++ /dev/null @@ -1,62 +0,0 @@ -using ProtoBuf; -using Sandbox.ModAPI; -using System; -using System.Collections.Generic; -using System.IO; -using VRage.Utils; - -namespace KingOfTheHill.Descriptions -{ - [ProtoContract] - public class Session - { - public const string Filename = "Scores.data"; - - [ProtoMember(1)] - public List PlanetScores { get; set; } = new List(); - - public static Session Load() - { - Session settings = new Session(); - try - { - if (MyAPIGateway.Utilities.FileExistsInWorldStorage(Filename, typeof(Session))) - { - Tools.Log(MyLogSeverity.Info, "Loading saved settings"); - TextReader reader = MyAPIGateway.Utilities.ReadFileInWorldStorage(Filename, typeof(Session)); - string text = reader.ReadToEnd(); - reader.Close(); - - settings = MyAPIGateway.Utilities.SerializeFromXML(text); - } - else - { - Tools.Log(MyLogSeverity.Info, "Config file not found. Loading default settings"); - Save(settings); - } - } - catch (Exception e) - { - Tools.Log(MyLogSeverity.Warning, $"Failed to load saved configuration. Loading defaults\n {e.ToString()}"); - Save(settings); - } - - return settings; - } - - public static void Save(Session settings) - { - try - { - Tools.Log(MyLogSeverity.Info, "Saving Settings"); - TextWriter writer = MyAPIGateway.Utilities.WriteFileInWorldStorage(Filename, typeof(Session)); - writer.Write(MyAPIGateway.Utilities.SerializeToXML(settings)); - writer.Close(); - } - catch (Exception e) - { - Tools.Log(MyLogSeverity.Error, $"Failed to save settings\n{e.ToString()}"); - } - } - } -} diff --git a/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/Descriptions/Update.cs b/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/Descriptions/Update.cs deleted file mode 100644 index e04800b11..000000000 --- a/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/Descriptions/Update.cs +++ /dev/null @@ -1,12 +0,0 @@ -using ProtoBuf; -using System.Collections.Generic; - -namespace KingOfTheHill.Descriptions -{ - [ProtoContract] - public class Update - { - [ProtoMember(1)] - public List Zones { get; set; } = new List(); - } -} diff --git a/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/Descriptions/ZoneDescription.cs b/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/Descriptions/ZoneDescription.cs deleted file mode 100644 index d82cedddc..000000000 --- a/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/Descriptions/ZoneDescription.cs +++ /dev/null @@ -1,260 +0,0 @@ -using ProtoBuf; -using Sandbox.Game.EntityComponents; -using Sandbox.ModAPI; -using System; -using System.Collections.Generic; -using VRage.Game.Components; -using VRage.ModAPI; -using VRage.Utils; - -namespace KingOfTheHill.Descriptions -{ - [ProtoContract] - public class ZoneDescription - { - public readonly static Guid StorageGuid = new Guid("B7AF750E-68E3-4826-BD0E-A75BF36BA3E5"); - - [ProtoMember(1)] - public long GridId { get; set; } - - [ProtoMember(2)] - public long BlockId { get; set; } - - [ProtoMember(3)] - public float Progress { get; set; } - - [ProtoMember(4)] - public float ProgressWhenComplete { get; set; } - - [ProtoMember(5)] - public long ControlledBy { get; set; } // faction currently capturing the point - - [ProtoMember(6)] - public float Radius { get; set; } - - [ProtoMember(7)] - public int ActivateOnPlayerCount { get; set; } // Number activators present before activation - [ProtoMember(8)] - public bool ActivateOnCharacter { get; set; } // Counts characters as activators - [ProtoMember(9)] - public bool ActivateOnSmallGrid { get; set; } // Counts piloted small grids as activators - [ProtoMember(10)] - public bool ActivateOnLargeGrid { get; set; } // Counts piloted large grids as activators - [ProtoMember(11)] - public bool ActivateOnUnpoweredGrid { get; set; } // Counts non powered grid as activators - [ProtoMember(12)] - public bool IgnoreCopilot { get; set; } // Counts each crew member as an activator - - [ProtoMember(13)] - public bool AwardPointsAsCredits { get; set; } - - [ProtoMember(14)] - public int CreditsPerPoint { get; set; } - - [ProtoMember(15)] - public int PointsRemovedOnDeath { get; set; } - - [ProtoMember(16)] - public int MinSmallGridBlockCount { get; set; } - [ProtoMember(17)] - public int MinLargeGridBlockCount { get; set; } - - [ProtoMember(18)] - public float IdleDrainRate { get; set; } - [ProtoMember(19)] - public float ContestedDrainRate { get; set; } - - [ProtoMember(20)] - public bool FlatProgressRate { get; set; } - - [ProtoMember(21)] - public float ActiveProgressRate { get; set; } // the flat progress rate applied - - [ProtoMember(22)] - public bool AutomaticActivation { get; set; } - - [ProtoMember(23)] - public int ActivationDay { get; set; } - - [ProtoMember(24)] - public int ActivationStartTime { get; set; } - - [ProtoMember(25)] - public int ActivationEndTime { get; set; } - - [ProtoMember(26)] - public bool AwardPointsToAllActiveFactions { get; set; } - - [ProtoMember(27)] - public bool EncampmentMode { get; set; } - - [ProtoMember(27)] - public int PointsOnCap { get; set; } - - [ProtoMember(30)] - public float Opacity { get; set; } - - [ProtoMember(31)] - public int PointsForPrize { get; set; } - - [ProtoMember(32)] - public int PrizeAmountComponent { get; set; } - - [ProtoMember(33)] - public int PrizeAmountOre { get; set; } - - [ProtoMember(34)] - public int PrizeAmountIngot { get; set; } - - [ProtoMember(35)] - public bool UseComponentReward { get; set; } - - [ProtoMember(36)] - public bool UseOreReward { get; set; } - - [ProtoMember(37)] - public bool UseIngotReward { get; set; } - - [ProtoMember(39)] - public string PrizeComponentSubtypeId { get; set; } - - [ProtoMember(40)] - public string PrizeOreSubtypeId { get; set; } - - [ProtoMember(41)] - public string PrizeIngotSubtypeId { get; set; } - - [ProtoMember(42)] - public string SelectedComponentString { get; set; } - - [ProtoMember(43)] - public bool AdvancedComponentSelection { get; set; } - - [ProtoMember(44)] - public string SelectedOreString { get; set; } - - [ProtoMember(45)] - public bool AdvancedOreSelection { get; set; } - - [ProtoMember(46)] - public string SelectedIngotString { get; set; } - - [ProtoMember(47)] - public bool AdvancedIngotSelection { get; set; } - - [ProtoMember(48)] - public bool IsLocationNamed { get; set; } - - [ProtoMember(49)] - public bool SpawnIntoPrizeBox { get; set; } - - [ProtoMember(50)] - public int PointsEarnedSincePrize { get; set; } - - [ProtoMember(51)] - public string LocationName { get; set; } - - public void Save(IMyEntity ent) - { - MyModStorageComponentBase storage = GetStorage(ent); - - if (storage.ContainsKey(StorageGuid)) - { - storage[StorageGuid] = MyAPIGateway.Utilities.SerializeToXML(this); - } - else - { - Tools.Log(MyLogSeverity.Info, $"Saved new Data"); - storage.Add(new KeyValuePair(StorageGuid, MyAPIGateway.Utilities.SerializeToXML(this))); - } - } - - public static ZoneDescription Load(IMyEntity ent) - { - MyModStorageComponentBase storage = GetStorage(ent); - - if (storage.ContainsKey(StorageGuid)) - { - return MyAPIGateway.Utilities.SerializeFromXML(storage[StorageGuid]); - } - else - { - - Tools.Log(MyLogSeverity.Info, $"No data saved for:{ent.EntityId}. Loading Defaults"); - return GetDefaultSettings(); - } - } - - public static ZoneDescription GetDefaultSettings() - { - return new ZoneDescription() { - - EncampmentMode = false, - IdleDrainRate = 3, - ContestedDrainRate = 0, - FlatProgressRate = false, - ActiveProgressRate = 1, - - Radius = 3000f, - - ProgressWhenComplete = 36000, - Progress = 0, - - ActivateOnCharacter = false, - ActivateOnSmallGrid = false, - ActivateOnLargeGrid = true, - ActivateOnUnpoweredGrid = false, - IgnoreCopilot = false, - - PointsOnCap = 0, - AwardPointsToAllActiveFactions = false, - AwardPointsAsCredits = false, - CreditsPerPoint = 1000, - PointsRemovedOnDeath = 0, - MinSmallGridBlockCount = 50, - MinLargeGridBlockCount = 25, - ActivateOnPlayerCount = 1, - - AutomaticActivation = false, - ActivationDay = 3, - ActivationStartTime = 120, - ActivationEndTime = 1200, - - Opacity = 150, - - IsLocationNamed = false, - LocationName = "", - - UseComponentReward = true, - UseOreReward = false, - UseIngotReward = false, - PointsForPrize = 1, - PrizeAmountComponent = 1, - PrizeAmountOre = 1, - PrizeAmountIngot = 1, - PrizeComponentSubtypeId = "subtypeId", - PrizeOreSubtypeId = "subtypeId", - PrizeIngotSubtypeId = "subtypeId", - AdvancedComponentSelection = false, - SelectedComponentString = "", - SelectedOreString = "", - AdvancedOreSelection = false, - SelectedIngotString = "", - AdvancedIngotSelection = false, - SpawnIntoPrizeBox = true, - - PointsEarnedSincePrize = 0, - }; - } - - public override string ToString() - { - return $"(ZONE) Progress: {Progress}, ControlledBy: {ControlledBy}"; - } - - public static MyModStorageComponentBase GetStorage(IMyEntity entity) - { - return entity.Storage ?? (entity.Storage = new MyModStorageComponent()); - } - } -} diff --git a/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/SENetworkAPI/NetSync.cs b/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/SENetworkAPI/NetSync.cs deleted file mode 100644 index a8fb84701..000000000 --- a/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/SENetworkAPI/NetSync.cs +++ /dev/null @@ -1,514 +0,0 @@ - -using ProtoBuf; -using Sandbox.Game.Entities; -using Sandbox.ModAPI; -using System; -using System.Collections.Generic; -using VRage.Game; -using VRage.Game.Components; -using VRage.Game.Entity; -using VRage.ModAPI; -using VRage.Utils; - -namespace SENetworkAPI -{ - public enum TransferType { ServerToClient, ClientToServer, Both } - public enum SyncType { Post, Fetch, Broadcast, None } - - [ProtoContract] - internal class SyncData - { - [ProtoMember(1)] - public long Id; - [ProtoMember(2)] - public long EntityId; - [ProtoMember(3)] - public byte[] Data; - [ProtoMember(4)] - public SyncType SyncType; - } - - public abstract class NetSync - { - internal static Dictionary> PropertiesByEntity = new Dictionary>(); - internal static Dictionary PropertyById = new Dictionary(); - - internal static object locker = new object(); - internal static long generatorId = 1; - internal static long GeneratePropertyId() - { - return generatorId++; - } - - /// - /// The allowed network communication direction - /// - public TransferType TransferType { get; internal set; } - - /// - /// The identity of this property - /// - public long Id { get; internal set; } - - /// - /// Enables/Disables network traffic out when setting a value - /// - public bool SyncOnLoad { get; internal set; } - - /// - /// Limits sync updates to within sync distance - /// - public bool LimitToSyncDistance { get; internal set; } - - /// - /// the last recorded network traffic - /// - public long LastMessageTimestamp { get; internal set; } - - /// - /// Request the lastest value from the server - /// - public abstract void Fetch(); - - /// - /// Triggers after recieving a fetch request from clients - /// and allows you to modify this property before it is sent. - /// - public Action BeforeFetchRequestResponse; - - internal abstract void Push(SyncType type, ulong sendTo); - - internal abstract void SetNetworkValue(byte[] data, ulong sender); - } - - public class NetSync : NetSync - { - /// - /// Fires each time the value is changed - /// Provides the old value and the new value - /// - public Action ValueChanged; - - /// - /// Fires only when the a network call is made - /// Provides the old value and the new value - /// also provides the steamId - /// - public Action ValueChangedByNetwork; - - /// - /// this property syncs across the network when changed - /// - public T Value - { - get { return _value; } - set - { - SetValue(value, SyncType.Broadcast); - } - } - - private T _value; - private MyEntity Entity; - private string sessionName; - - /// IMyEntity object this property is attached to - /// - /// Sets an initial value - /// automatically syncs data to clients when the class initializes - /// marking this true only sends data to clients within sync distance - public NetSync(IMyEntity entity, TransferType transferType, T startingValue = default(T), bool syncOnLoad = true, bool limitToSyncDistance = true) - { - if (entity == null) - { - throw new Exception("[NetworkAPI] Attemped to create a NetSync property. MyEntity was null."); - } - - Init(entity as MyEntity, transferType, startingValue, syncOnLoad, limitToSyncDistance); - } - - /// MyEntity object this property is attached to - /// - /// Sets an initial value - /// automatically syncs data to clients when the class initializes - /// marking this true only sends data to clients within sync distance - public NetSync(MyEntity entity, TransferType transferType, T startingValue = default(T), bool syncOnLoad = true, bool limitToSyncDistance = true) - { - if (entity == null) - { - throw new Exception("[NetworkAPI] Attemped to create a NetSync property. MyEntity was null."); - } - - Init(entity, transferType, startingValue, syncOnLoad, limitToSyncDistance); - } - - /// MyGameLogicComponent object this property is attached to - /// - /// Sets an initial value - /// automatically syncs data to clients when the class initializes - /// marking this true only sends data to clients within sync distance - public NetSync(MyGameLogicComponent logic, TransferType transferType, T startingValue = default(T), bool syncOnLoad = true, bool limitToSyncDistance = true) - { - if (logic?.Entity == null) - { - throw new Exception("[NetworkAPI] Attemped to create a NetSync property. MyGameLogicComponent was null."); - } - - Init(logic.Entity as MyEntity, transferType, startingValue, syncOnLoad, limitToSyncDistance); - } - - /// MySessionComponentBase object this property is attached to - /// - /// Sets an initial value - /// automatically syncs data to clients when the class initializes - /// marking this true only sends data to clients within sync distance - public NetSync(MySessionComponentBase logic, TransferType transferType, T startingValue = default(T), bool syncOnLoad = true, bool limitToSyncDistance = true) - { - if (logic == null) - { - throw new Exception("[NetworkAPI] Attemped to create a NetSync property. MySessionComponentBase was null."); - } - - sessionName = logic.GetType().Name; - Init(null, transferType, startingValue, syncOnLoad, limitToSyncDistance); - } - - /// - /// This funtion is called by the constructer - /// - /// - /// Sets an initial value - /// automatically syncs data to clients when the class initializes - /// marking this true only sends data to clients within sync distance - private void Init(MyEntity entity, TransferType transferType, T startingValue = default(T), bool syncOnLoad = true, bool limitToSyncDistance = true) - { - TransferType = transferType; - _value = startingValue; - SyncOnLoad = syncOnLoad; - LimitToSyncDistance = limitToSyncDistance; - - if (entity != null) - { - Entity = entity; - Entity.OnClose += Entity_OnClose; - - if (PropertiesByEntity.ContainsKey(Entity)) - { - PropertiesByEntity[Entity].Add(this); - Id = PropertiesByEntity[Entity].Count - 1; - } - else - { - PropertiesByEntity.Add(Entity, new List { this }); - Id = 0; - } - } - else - { - lock (locker) - { - Id = GeneratePropertyId(); - PropertyById.Add(Id, this); - } - } - - if (SyncOnLoad) - { - if (Entity != null) - { - Entity.AddedToScene += SyncOnAddedToScene; - } - else - { - Fetch(); - } - } - - if (NetworkAPI.LogNetworkTraffic) - { - MyLog.Default.Info($"[NetworkAPI] Property Created: {Descriptor()}, Transfer: {transferType}, SyncOnLoad: {SyncOnLoad}"); - } - } - - private void SyncOnAddedToScene(MyEntity e) - { - if (Entity != e) - return; - - Fetch(); - Entity.AddedToScene -= SyncOnAddedToScene; - } - - private void Entity_OnClose(MyEntity entity) - { - PropertyById.Remove(Id); - } - - /// - /// Allows you to change how syncing works when setting the value this way - /// - public void SetValue(T val, SyncType syncType = SyncType.None) - { - T oldval = _value; - lock (_value) - { - _value = val; - } - - SendValue(syncType); - ValueChanged?.Invoke(oldval, val); - - } - - /// - /// Sets the data received over the network - /// - internal override void SetNetworkValue(byte[] data, ulong sender) - { - try - { - T oldval = _value; - lock (_value) - { - _value = MyAPIGateway.Utilities.SerializeFromBinary(data); - - if (NetworkAPI.LogNetworkTraffic) - { - MyLog.Default.Info($"[NetworkAPI] {Descriptor()} New value: {oldval} --- Old value: {_value}"); - } - } - - if (MyAPIGateway.Multiplayer.IsServer) - { - SendValue(); - } - - ValueChanged?.Invoke(oldval, _value); - ValueChangedByNetwork?.Invoke(oldval, _value, sender); - } - catch (Exception e) - { - MyLog.Default.Error($"[NetworkAPI] Failed to deserialize network property data\n{e}"); - } - } - - /// - /// sends the value across the network - /// - private void SendValue(SyncType syncType = SyncType.Broadcast, ulong sendTo = ulong.MinValue) - { - try - { - if (!NetworkAPI.IsInitialized) - { - MyLog.Default.Error($"[NetworkAPI] _ERROR_ The NetworkAPI has not been initialized. Use NetworkAPI.Init() to initialize it."); - return; - } - - if (syncType == SyncType.None) - { - if (NetworkAPI.LogNetworkTraffic) - { - MyLog.Default.Info($"[NetworkAPI] _INTERNAL_ {Descriptor()} Wont send value: {Value}"); - } - - return; - } - - if (syncType != SyncType.Fetch && - (TransferType == TransferType.ServerToClient && !MyAPIGateway.Multiplayer.IsServer) || - (TransferType == TransferType.ClientToServer && MyAPIGateway.Multiplayer.IsServer)) - { - if (NetworkAPI.LogNetworkTraffic) - { - MyLog.Default.Info($"[NetworkAPI] {Descriptor()} Bad send direction transfer type is {TransferType}"); - } - - return; - } - - if (MyAPIGateway.Session.OnlineMode == MyOnlineModeEnum.OFFLINE || - MyAPIGateway.Session.OnlineMode == MyOnlineModeEnum.PRIVATE) - { - if (NetworkAPI.LogNetworkTraffic) - { - MyLog.Default.Info($"[NetworkAPI] _OFFLINE_ {Descriptor()} Wont send value: {Value}"); - } - - return; - } - - if (Value == null) - { - if (NetworkAPI.LogNetworkTraffic) - { - MyLog.Default.Error($"[NetworkAPI] _ERROR_ {Descriptor()} Value is null. Cannot transmit null value."); - } - - return; - } - - SyncData data = new SyncData() { - Id = Id, - EntityId = (Entity != null) ? Entity.EntityId : 0, - Data = MyAPIGateway.Utilities.SerializeToBinary(_value), - SyncType = syncType - }; - - ulong id = ulong.MinValue; - if (MyAPIGateway.Session?.LocalHumanPlayer != null) - { - id = MyAPIGateway.Session.LocalHumanPlayer.SteamUserId; - } - - if (id == sendTo && id != ulong.MinValue) - { - MyLog.Default.Error($"[NetworkAPI] _ERROR_ {Descriptor()} The sender id is the same as the recievers id. data will not be sent."); - } - - if (NetworkAPI.LogNetworkTraffic) - { - MyLog.Default.Info($"[NetworkAPI] _TRANSMITTING_ {Descriptor()} - Id:{data.Id}, EId:{data.EntityId}, {data.SyncType}, {((data.SyncType == SyncType.Fetch) ? "" : $"Val:{_value}")}"); - } - - if (LimitToSyncDistance && Entity != null) - { - NetworkAPI.Instance.SendCommand(new Command() { IsProperty = true, Data = MyAPIGateway.Utilities.SerializeToBinary(data), SteamId = id }, Entity.PositionComp.GetPosition(), steamId: sendTo); - } - else - { - NetworkAPI.Instance.SendCommand(new Command() { IsProperty = true, Data = MyAPIGateway.Utilities.SerializeToBinary(data), SteamId = id }, steamId: sendTo); - } - } - catch (Exception e) - { - MyLog.Default.Error($"[NetworkAPI] _ERROR_ SendValue(): Problem syncing value: {e}"); - } - } - - /// - /// Receives and redirects all property traffic - /// - /// this hold the path to the property and the data to sync - internal static void RouteMessage(SyncData pack, ulong sender, long timestamp) - { - // Type-Safety Check: Check if the pack is null - if (pack == null) - { - MyLog.Default.Error("[NetworkAPI] Property data is null"); - return; - } - - // Type-Safety Check: Check if the ID exists in PropertyById - if (!PropertyById.ContainsKey(pack.Id)) - { - // Debug Logging: Capture the state of PropertyById - //MyLog.Default.Error($"[NetworkAPI] ID {pack.Id} not registered in dictionary 'PropertyById'. Current keys: {string.Join(",", PropertyById.Keys)}"); - return; - } - - NetSync property; - if (pack.EntityId == 0) - { - if (!PropertyById.ContainsKey(pack.Id)) - { - MyLog.Default.Info($"[NetworkAPI] id not registered in dictionary 'PropertyById'"); - return; - } - - property = PropertyById[pack.Id]; - } - else - { - MyEntity entity = (MyEntity)MyAPIGateway.Entities.GetEntityById(pack.EntityId); - - if (entity == null) - { - MyLog.Default.Info($"[NetworkAPI] Failed to get entity by id"); - return; - } - - if (!PropertiesByEntity.ContainsKey(entity)) - { - MyLog.Default.Info($"[NetworkAPI] Entity not registered in dictionary 'PropertiesByEntity'"); - return; - } - - List properties = PropertiesByEntity[entity]; - - if (pack.Id >= properties.Count) - { - MyLog.Default.Info($"[NetworkAPI] property index out of range"); - return; - } - - property = properties[(int)pack.Id]; - } - - property.LastMessageTimestamp = timestamp; - if (pack.SyncType == SyncType.Fetch) - { - property.BeforeFetchRequestResponse?.Invoke(sender); - property.Push(SyncType.Post, sender); - } - else - { - property.SetNetworkValue(pack.Data, sender); - } - } - - /// - /// Request the lastest value from the server - /// Servers are not allowed to fetch from clients - /// - public override void Fetch() - { - if (!MyAPIGateway.Multiplayer.IsServer) - { - SendValue(SyncType.Fetch); - } - } - - /// - /// Send data now - /// - public void Push() - { - SendValue(); - } - - /// - /// Send data to single user - /// - public void Push(ulong sendTo) - { - SendValue(SyncType.Post, sendTo); - } - - /// - /// Send data across the network now - /// - internal override void Push(SyncType type, ulong sendTo = ulong.MinValue) - { - SendValue(type, sendTo); - } - - /// - /// Identifier for logging readability - /// - internal string Descriptor() - { - if (Entity != null) - { - if (Entity is MyCubeBlock) - { - return $"<{(Entity as MyCubeBlock).CubeGrid.DisplayName}_{((Entity.DefinitionId?.SubtypeId == null) ? Entity.GetType().Name.ToString() : Entity.DefinitionId?.SubtypeId.ToString())}.{Entity.EntityId}_{typeof(T).Name}.{Id}>"; - } - - return $"<{((Entity.DefinitionId?.SubtypeId == null) ? Entity.GetType().Name.ToString() : Entity.DefinitionId?.SubtypeId.ToString())}.{Entity.EntityId}_{typeof(T).Name}.{Id}>"; - } - - return $"<{sessionName}_{typeof(T).Name}.{Id}>"; - } - } -} diff --git a/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/SENetworkAPI/NexusApi.cs b/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/SENetworkAPI/NexusApi.cs deleted file mode 100644 index 9037de25a..000000000 --- a/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/SENetworkAPI/NexusApi.cs +++ /dev/null @@ -1,235 +0,0 @@ -using ProtoBuf; -using Sandbox.ModAPI; -using System; -using System.Collections.Generic; -using VRage; -using VRage.Utils; -using VRageMath; - -namespace NexusAPIns -{ - public class NexusAPI - { - public ushort CrossServerModID; - - /* For recieving custom messages you have to register a message handler with a different unique ID then what you use server to client. (It should be the same as this class) - * - * NexusAPI(5432){ - * CrossServerModID = 5432 - * } - * - * - * Register this somewhere in your comms code. (This will only be raised when it recieves a message from another server) - * MyAPIGateway.Multiplayer.RegisterMessageHandler(5432, MessageHandler); - */ - - - - - public NexusAPI(ushort SocketID) - { - CrossServerModID = SocketID; - } - - public static bool IsRunningNexus() - { - return false; - } - - public static bool IsPlayerOnline(long IdentityID) - { - return false; - } - - private static List GetSectorsObject() - { - List APISectors = new List(); - return APISectors; - } - - private static List GetAllOnlinePlayersObject() - { - List OnlinePlayers = new List(); - return OnlinePlayers; - } - - private static List GetAllOnlineServersObject() - { - List Servers = new List(); - return Servers; - - } - - private static object[] GetThisServerObject() - { - object[] OnlinePlayers = new object[6]; - return OnlinePlayers; - } - - - public static Server GetThisServer() - { - object[] obj = GetThisServerObject(); - return new Server((string)obj[0], (int)obj[1], (short)obj[2], (int)obj[3], (int)obj[4], (List)obj[5]); - } - - public static List GetSectors() - { - List Objs = GetSectorsObject(); - - List Sectors = new List(); - foreach (var obj in Objs) - { - Sectors.Add(new Sector((string)obj[0], (string)obj[1], (int)obj[2], (bool)obj[3], (Vector3D)obj[4], (double)obj[5], (int)obj[6])); - } - return Sectors; - } - - - public static int GetServerIDFromPosition(Vector3D Position) - { - return 0; - } - - public static List GetAllOnlinePlayers() - { - List Objs = GetAllOnlinePlayersObject(); - - List Players = new List(); - foreach (var obj in Objs) - { - Players.Add(new Player((string)obj[0], (ulong)obj[1], (long)obj[2], (int)obj[3])); - } - return Players; - } - - public static List GetAllOnlineServers() - { - List Objs = GetAllOnlineServersObject(); - - List Servers = new List(); - foreach (var obj in Objs) - { - Servers.Add(new Server((string)obj[0], (int)obj[1], (int)obj[2], (float)obj[3], (int)obj[4], (List)obj[5])); - } - return Servers; - } - - - - public static void BackupGrid(List GridObjectBuilders, long OnwerIdentity) - { - return; - } - - public static void SendMessageToDiscord(string message, string ChannelID = null) - { - return; - } - - public void SendMessageToServer(int ServerID, byte[] Message) - { - return; - } - - public void SendMessageToAllServers(byte[] Message) - { - return; - } - - - - - - public class Sector - { - public readonly string Name; - - public readonly string IPAddress; - - public readonly int Port; - - public readonly bool IsGeneralSpace; - - public readonly Vector3D Center; - - public readonly double Radius; - - public readonly int ServerID; - - public Sector(string Name, string IPAddress, int Port, bool IsGeneralSpace, Vector3D Center, double Radius, int ServerID) - { - this.Name = Name; - this.IPAddress = IPAddress; - this.Port = Port; - this.IsGeneralSpace = IsGeneralSpace; - this.Center = Center; - this.Radius = Radius; - this.ServerID = ServerID; - } - - } - - public class Player - { - - public readonly string PlayerName; - - public readonly ulong SteamID; - - public readonly long IdentityID; - - public readonly int OnServer; - - public Player(string PlayerName, ulong SteamID, long IdentityID, int OnServer) - { - this.PlayerName = PlayerName; - this.SteamID = SteamID; - this.IdentityID = IdentityID; - this.OnServer = OnServer; - } - } - - public class Server - { - public readonly string Name; - public readonly int ServerID; - public readonly int MaxPlayers; - public readonly float ServerSS; - public readonly int TotalGrids; - public readonly List ReservedPlayers; - - - public Server(string Name, int ServerID, int MaxPlayers, float SimSpeed, int TotalGrids, List ReservedPlayers) - { - this.Name = Name; - this.ServerID = ServerID; - this.MaxPlayers = MaxPlayers; - this.ServerSS = SimSpeed; - this.TotalGrids = TotalGrids; - this.ReservedPlayers = ReservedPlayers; - } - - } - - [ProtoContract] - public class CrossServerMessage - { - - [ProtoMember(1)] public readonly int ToServerID; - [ProtoMember(2)] public readonly int FromServerID; - [ProtoMember(3)] public readonly ushort UniqueMessageID; - [ProtoMember(4)] public readonly byte[] Message; - - public CrossServerMessage(ushort UniqueMessageID, int ToServerID, int FromServerID, byte[] Message) - { - this.UniqueMessageID = UniqueMessageID; - this.ToServerID = ToServerID; - this.FromServerID = FromServerID; - this.Message = Message; - } - - public CrossServerMessage() { } - } - } -} diff --git a/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/Tools.cs b/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/Tools.cs deleted file mode 100644 index fa74acc3d..000000000 --- a/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/Tools.cs +++ /dev/null @@ -1,26 +0,0 @@ -using Sandbox.ModAPI; -using VRage.Game.ModAPI; -using VRage.Utils; - -namespace KingOfTheHill -{ - - public class Tools - { - public static void Log(MyLogSeverity level, string message) - { - MyLog.Default.Log(level, $"[KingOfTheHill] {message}"); - //MyLog.Default.Flush(); - } - - public static bool IsAllowedSpecialOperations(ulong steamId) - { - return IsAllowedSpecialOperations(MyAPIGateway.Session.GetUserPromoteLevel(steamId)); - } - - public static bool IsAllowedSpecialOperations(MyPromoteLevel level) - { - return level == MyPromoteLevel.SpaceMaster || level == MyPromoteLevel.Admin || level == MyPromoteLevel.Owner; - } - } -} diff --git a/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/ZoneBlock.cs b/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/ZoneBlock.cs deleted file mode 100644 index e290743f1..000000000 --- a/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/ZoneBlock.cs +++ /dev/null @@ -1,1586 +0,0 @@ -using KingOfTheHill.Descriptions; -using Sandbox.Common.ObjectBuilders; -using Sandbox.Game.Entities; -using Sandbox.Game.EntityComponents; -using Sandbox.ModAPI; -using Sandbox.ModAPI.Interfaces.Terminal; -using SENetworkAPI; -using System; -using System.Collections.Generic; -using System.Text; -using VRage.Game; -using VRage.Game.Components; -using VRage.Game.ModAPI; -using VRage.Game.ObjectBuilders.ComponentSystem; -using VRage.ModAPI; -using VRage.ObjectBuilders; -using VRage.Utils; -using VRageMath; - -namespace KingOfTheHill -{ - public enum ZoneStates { Active, Idle, Contested } - public enum Days { EveryDay, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday } - - - [MyEntityComponentDescriptor(typeof(MyObjectBuilder_Beacon), false, "ZoneBlock")] - public class ZoneBlock : MyGameLogicComponent - { - public static event Action OnAwardPoints = delegate { }; - public static event Action OnPlayerDied = delegate { }; - - public static readonly Color[] ZoneStateColorLookup = new Color[] { Color.White, Color.Gray, Color.Orange }; - private static readonly MyDefinitionId Electricity = MyResourceDistributorComponent.ElectricityId; - - public ZoneStates State { get; private set; } = ZoneStates.Idle; - public IMyBeacon ModBlock { get; private set; } - - private IMyFaction controlledByFaction = null; - public IMyFaction ControlledByFaction - { - get { return controlledByFaction; } - set - { - controlledByFaction = value; - ControlledBy.Value = (value == null) ? 0 : value.FactionId; - } - - } - - public NetSync Progress; - public NetSync ProgressWhenComplete; - public NetSync ControlledBy; - public NetSync Radius; - - public NetSync ActivateOnPlayerCount; - public NetSync ActivateOnCharacter; - public NetSync EncampmentMode; - public NetSync ActivateOnSmallGrid; - public NetSync ActivateOnLargeGrid; - public NetSync ActivateOnUnpoweredGrid; - public NetSync IgnoreCopilot; - - public NetSync PointsOnCap; - public NetSync AwardPointsToAllActiveFactions; - public NetSync AwardPointsAsCredits; - public NetSync CreditsPerPoint; - public NetSync PointsRemovedOnDeath; - - public NetSync MinSmallGridBlockCount; - public NetSync MinLargeGridBlockCount; - - public NetSync IdleDrainRate; - public NetSync ContestedDrainRate; - public NetSync FlatProgressRate; - public NetSync ActiveProgressRate; - - public NetSync AutomaticActivation; - public NetSync ActivationDay; - public NetSync ActivationStartTime; - public NetSync ActivationEndTime; - - public NetSync Opacity; - - public NetSync IsLocationNamed; - public NetSync LocationName; - public NetSync PointsForPrize; - - public NetSync UseComponentReward; - public NetSync UseOreReward; - public NetSync UseIngotReward; - - public NetSync PrizeAmountComponent; - public NetSync PrizeAmountOre; - public NetSync PrizeAmountIngot; - - public NetSync AdvancedComponentSelection; - public NetSync AdvancedOreSelection; - public NetSync AdvancedIngotSelection; - - public NetSync PrizeComponentSubtypeId; - public NetSync PrizeOreSubtypeId; - public NetSync PrizeIngotSubtypeId; - - public NetSync SelectedComponentString; - public NetSync SelectedOreString; - public NetSync SelectedIngotString; - - public NetSync SpawnIntoPrizeBox; - - public int PointsEarnedSincePrize; - - private Dictionary ActiveEnemiesPerFaction = new Dictionary(); - private bool IsInitialized = false; - private ZoneStates lastState = ZoneStates.Idle; - - public override void Init(MyObjectBuilder_EntityBase objectBuilder) - { - NeedsUpdate = MyEntityUpdateEnum.EACH_FRAME; - ModBlock = Entity as IMyBeacon; - - ZoneDescription desc = ZoneDescription.GetDefaultSettings(); - - if (MyAPIGateway.Session.IsServer) - { - ZoneDescription temp = ZoneDescription.Load(Entity); - - if (desc == null) - { - Tools.Log(MyLogSeverity.Warning, $"The data saved for {Entity.EntityId} returned null. loading defaults"); - } - else - { - desc = temp; - } - } - - - Progress = new NetSync(this, TransferType.ServerToClient, desc.Progress); - ProgressWhenComplete = new NetSync(this, TransferType.Both, desc.ProgressWhenComplete); - ControlledBy = new NetSync(this, TransferType.ServerToClient, desc.ControlledBy); - Radius = new NetSync(this, TransferType.Both, desc.Radius); - ActivateOnPlayerCount = new NetSync(this, TransferType.Both, desc.ActivateOnPlayerCount); - ActivateOnCharacter = new NetSync(this, TransferType.Both, desc.ActivateOnCharacter); - EncampmentMode = new NetSync(this, TransferType.Both, desc.EncampmentMode); - ActivateOnSmallGrid = new NetSync(this, TransferType.Both, desc.ActivateOnSmallGrid); - ActivateOnLargeGrid = new NetSync(this, TransferType.Both, desc.ActivateOnLargeGrid); - ActivateOnUnpoweredGrid = new NetSync(this, TransferType.Both, desc.ActivateOnUnpoweredGrid); - IgnoreCopilot = new NetSync(this, TransferType.Both, desc.IgnoreCopilot); - PointsOnCap = new NetSync(this, TransferType.Both, desc.PointsOnCap); - AwardPointsToAllActiveFactions = new NetSync(this, TransferType.Both, desc.AwardPointsToAllActiveFactions); - AwardPointsAsCredits = new NetSync(this, TransferType.Both, desc.AwardPointsAsCredits); - CreditsPerPoint = new NetSync(this, TransferType.Both, desc.CreditsPerPoint); - PointsRemovedOnDeath = new NetSync(this, TransferType.Both, desc.PointsRemovedOnDeath); - MinSmallGridBlockCount = new NetSync(this, TransferType.Both, desc.MinSmallGridBlockCount); - MinLargeGridBlockCount = new NetSync(this, TransferType.Both, desc.MinLargeGridBlockCount); - IdleDrainRate = new NetSync(this, TransferType.Both, desc.IdleDrainRate); - ContestedDrainRate = new NetSync(this, TransferType.Both, desc.ContestedDrainRate); - FlatProgressRate = new NetSync(this, TransferType.Both, desc.FlatProgressRate); - ActiveProgressRate = new NetSync(this, TransferType.Both, desc.ActiveProgressRate); - AutomaticActivation = new NetSync(this, TransferType.Both, desc.AutomaticActivation); - ActivationDay = new NetSync(this, TransferType.Both, desc.ActivationDay); - ActivationStartTime = new NetSync(this, TransferType.Both, desc.ActivationStartTime); - ActivationEndTime = new NetSync(this, TransferType.Both, desc.ActivationEndTime); - Opacity = new NetSync(this, TransferType.Both, desc.ActiveProgressRate); - IsLocationNamed = new NetSync(this, TransferType.Both, desc.IsLocationNamed); - LocationName = new NetSync(this, TransferType.Both, desc.LocationName); - PointsForPrize = new NetSync(this, TransferType.Both, desc.PointsForPrize); - UseComponentReward = new NetSync(this, TransferType.Both, desc.UseComponentReward); - UseOreReward = new NetSync(this, TransferType.Both, desc.UseOreReward); - UseIngotReward = new NetSync(this, TransferType.Both, desc.UseIngotReward); - PrizeAmountComponent = new NetSync(this, TransferType.Both, desc.PrizeAmountComponent); - PrizeAmountOre = new NetSync(this, TransferType.Both, desc.PrizeAmountOre); - PrizeAmountIngot = new NetSync(this, TransferType.Both, desc.PrizeAmountIngot); - AdvancedComponentSelection = new NetSync(this, TransferType.Both, desc.AdvancedComponentSelection); - AdvancedOreSelection = new NetSync(this, TransferType.Both, desc.AdvancedOreSelection); - AdvancedIngotSelection = new NetSync(this, TransferType.Both, desc.AdvancedIngotSelection); - PrizeComponentSubtypeId = new NetSync(this, TransferType.Both, desc.PrizeComponentSubtypeId); - PrizeOreSubtypeId = new NetSync(this, TransferType.Both, desc.PrizeOreSubtypeId); - PrizeIngotSubtypeId = new NetSync(this, TransferType.Both, desc.PrizeIngotSubtypeId); - SelectedComponentString = new NetSync(this, TransferType.Both, desc.SelectedComponentString); - SelectedOreString = new NetSync(this, TransferType.Both, desc.SelectedOreString); - SelectedIngotString = new NetSync(this, TransferType.Both, desc.SelectedIngotString); - SpawnIntoPrizeBox = new NetSync(this, TransferType.Both, desc.SpawnIntoPrizeBox); - PointsEarnedSincePrize = desc.PointsEarnedSincePrize; - - - Core.RegisterZone(this); - } - public override bool IsSerialized() - { - Save(); - return base.IsSerialized(); - } - - public override void Close() - { - Core.UnRegisterZone(this); - } - - public void Save() - { - ZoneDescription desc = new ZoneDescription(); - - desc.GridId = ModBlock.CubeGrid.EntityId; - desc.BlockId = ModBlock.EntityId; - - desc.Progress = Progress.Value; - desc.ProgressWhenComplete = ProgressWhenComplete.Value; - desc.ControlledBy = ControlledBy.Value; - desc.Radius = Radius.Value; - desc.ActivateOnPlayerCount = ActivateOnPlayerCount.Value; - desc.ActivateOnCharacter = ActivateOnCharacter.Value; - desc.EncampmentMode = EncampmentMode.Value; - desc.ActivateOnSmallGrid = ActivateOnSmallGrid.Value; - desc.ActivateOnLargeGrid = ActivateOnLargeGrid.Value; - desc.ActivateOnUnpoweredGrid = ActivateOnUnpoweredGrid.Value; - desc.IgnoreCopilot = IgnoreCopilot.Value; - desc.PointsOnCap = PointsOnCap.Value; - desc.AwardPointsToAllActiveFactions = AwardPointsToAllActiveFactions.Value; - desc.AwardPointsAsCredits = AwardPointsAsCredits.Value; - desc.CreditsPerPoint = CreditsPerPoint.Value; - desc.PointsRemovedOnDeath = PointsRemovedOnDeath.Value; - desc.MinSmallGridBlockCount = MinSmallGridBlockCount.Value; - desc.MinLargeGridBlockCount = MinLargeGridBlockCount.Value; - desc.IdleDrainRate = IdleDrainRate.Value; - desc.ContestedDrainRate = ContestedDrainRate.Value; - desc.FlatProgressRate = FlatProgressRate.Value; - desc.ActiveProgressRate = ActiveProgressRate.Value; - desc.AutomaticActivation = AutomaticActivation.Value; - desc.ActivationDay = ActivationDay.Value; - desc.ActivationStartTime = ActivationStartTime.Value; - desc.ActivationEndTime = ActivationEndTime.Value; - desc.Opacity = Opacity.Value; - desc.IsLocationNamed = IsLocationNamed.Value; - desc.LocationName = LocationName.Value; - desc.PointsForPrize = PointsForPrize.Value; - desc.UseComponentReward = UseComponentReward.Value; - desc.UseOreReward = UseOreReward.Value; - desc.UseIngotReward = UseIngotReward.Value; - desc.PrizeAmountComponent = PrizeAmountComponent.Value; - desc.PrizeAmountOre = PrizeAmountOre.Value; - desc.PrizeAmountIngot = PrizeAmountIngot.Value; - desc.AdvancedComponentSelection = AdvancedComponentSelection.Value; - desc.AdvancedOreSelection = AdvancedOreSelection.Value; - desc.AdvancedIngotSelection = AdvancedIngotSelection.Value; - desc.PrizeComponentSubtypeId = PrizeComponentSubtypeId.Value; - desc.PrizeOreSubtypeId = PrizeOreSubtypeId.Value; - desc.PrizeIngotSubtypeId = PrizeIngotSubtypeId.Value; - desc.SelectedComponentString = SelectedComponentString.Value; - desc.SelectedOreString = SelectedOreString.Value; - desc.SelectedIngotString = SelectedIngotString.Value; - desc.SpawnIntoPrizeBox = SpawnIntoPrizeBox.Value; - desc.PointsEarnedSincePrize = PointsEarnedSincePrize; - - desc.Save(Entity); - } - - public string GetClosestPlanet() - { - MyPlanet planet = MyGamePruningStructure.GetClosestPlanet(Entity.GetPosition()); - return (planet == null) ? "N/A" : planet.Name; - } - - public override void UpdateBeforeSimulation() - { - if (!IsInitialized) - { - CreateControls(); - IsInitialized = true; - } - - if (ModBlock.CubeGrid.Physics == null || !ModBlock.IsFunctional || !ModBlock.Enabled || !ModBlock.IsWorking) - return; // if the block is incomplete, turned off or projected - - if (AutomaticActivation.Value) - { - string activationText = UpdateAutomaticActivation(); - - if (activationText != string.Empty) - { - if (ModBlock.CustomName != activationText) - { - ModBlock.CustomName = activationText; - } - - return; - } - } - - if (EncampmentMode.Value) - { - EncampmentMode_Update(); - } - else - { - StandardMode_Update(); - } - - // display info - - if (MyAPIGateway.Multiplayer.IsServer) - { - int percent = (int)Math.Floor((Progress.Value / ProgressWhenComplete.Value) * 100f); - - - string newText; - - if (!EncampmentMode.Value) - { - newText = $"{State.ToString().ToUpper()} - {percent}% {(State != ZoneStates.Idle ? $"[{ControlledByFaction.Tag}]" : "")}"; - } - else - { - newText = $"{State.ToString().ToUpper()} - {percent}%"; - } - - if (ModBlock.CustomName != newText) // this makes sure that players are not spammed with network updates every frame - { - ModBlock.CustomName = newText; - } - - //if (lastState != State) - //{ - // MyAPIGateway.Utilities.SendModMessage(Tools.ModMessageId, $"KotH: {ModBlock.CustomName}"); - //} - } - - if (!MyAPIGateway.Utilities.IsDedicated) - { - Color color; - switch (State) - { - case ZoneStates.Active: - color = Color.White; - break; - case ZoneStates.Contested: - color = Color.Orange; - break; - default: - color = Color.Gray; - break; - } - - MatrixD matrix = Entity.WorldMatrix; - color.A = (byte)Opacity.Value; - MySimpleObjectDraw.DrawTransparentSphere(ref matrix, Radius.Value, ref color, MySimpleObjectRasterizer.Solid, 20, null, MyStringId.GetOrCompute("KothTransparency"), 0.12f, -1, null); - } - - - } - - /// true if progress is complete - private bool UpdateProgress(ZoneStates state, float speedWhenActive) - { - lastState = State; - State = state; - - float speed = 0; - switch (State) - { - case ZoneStates.Idle: - speed = -GetProgress(IdleDrainRate.Value); - break; - case ZoneStates.Contested: - speed = -GetProgress(ContestedDrainRate.Value); - break; - case ZoneStates.Active: - speed = speedWhenActive; - break; - } - - float newProgress = Progress.Value + speed; - if (newProgress <= 0) - { - Progress.SetValue(0); - } - else - { - Progress.SetValue(Progress.Value + speed); - } - - return (Progress.Value >= ProgressWhenComplete.Value); - } - - /// - /// Encampment mode awards points for all factions that have a powered static grid inside the zone - /// - private void EncampmentMode_Update() - { - - List players = new List(); - MyAPIGateway.Players.GetPlayers(players); - - foreach (IMyPlayer p in players) - { - // make sure players that leave the zone dont count for zone deaths - if (PointsRemovedOnDeath.Value > 0 && p.Character != null) - { - p.Character.CharacterDied -= Died; - } - - if (Vector3D.Distance(p.GetPosition(), Entity.GetPosition()) > Radius.Value) - continue; - - // add players in the zone to the death penalty - if (PointsRemovedOnDeath.Value > 0 && p.Character != null) - { - p.Character.CharacterDied += Died; - } - } - - - List activeFactions = new List(); - foreach (IMyCubeGrid staticGrid in Core.StaticGrids) - { - if (!EncampmentMode_VerifyGrid(staticGrid as MyCubeGrid)) - continue; - - if (staticGrid != null && staticGrid.BigOwners.Count > 0) - { - IMyFaction f = MyAPIGateway.Session.Factions.TryGetPlayerFaction(staticGrid.BigOwners[0]); - - if (f != null) - { - if (!activeFactions.Contains(f)) - { - activeFactions.Add(f); - } - } - } - } - - ZoneStates state = (activeFactions.Count > 0) ? ZoneStates.Active : ZoneStates.Idle; - - bool complete = UpdateProgress(state, 1f); - if (complete) - { - bool header = true; - foreach (IMyFaction faction in activeFactions) - { - OnAwardPoints.Invoke(this, faction, 2, header); // the active enemy value should be more than 1 - header = false; - } - - ResetProgress(); - } - - EncampmentMode_Hud(activeFactions); - } - - private bool EncampmentMode_VerifyGrid(MyCubeGrid grid) - { - if (grid.BlocksCount < MinLargeGridBlockCount.Value || - grid.BigOwners.Count == 0 || - grid == ModBlock.CubeGrid || - Vector3D.Distance(grid.WorldMatrix.Translation, Entity.GetPosition()) > Radius.Value) - { - return false; - } - - bool flag = false; - foreach (IMySlimBlock slim in grid.CubeBlocks) - { - if (slim.FatBlock is IMyPowerProducer && (slim.FatBlock as IMyPowerProducer).CurrentOutput > 0) - { - flag = true; - break; - } - } - - return flag; - } - - private void EncampmentMode_Hud(List factions) - { - IMyPlayer localPlayer = MyAPIGateway.Session.LocalHumanPlayer; - if (localPlayer != null && Vector3D.Distance(localPlayer.GetPosition(), Entity.GetPosition()) < Radius.Value) - { - IMyFaction f = MyAPIGateway.Session.Factions.TryGetPlayerFaction(localPlayer.IdentityId); - - string specialColor = (factions.Count == 0) ? "Gray" : "White"; - - MyAPIGateway.Utilities.ShowNotification($"Active Factions {factions.Count} - {(f != null && factions.Contains(f) ? "Encamped" : "NOT Encamped")} - {State.ToString().ToUpper()}: {((Progress.Value / ProgressWhenComplete.Value) * 100).ToString("n0")}%", 1, specialColor); - } - } - - - /// - /// Standard koth rules. players / controlled grids cap. if enemeies enter the zone is contested. - /// - private void StandardMode_Update() - { - //TODO: Causing sim speed drops? -/* //No static grids allowed in standard zone, convert them back to ships - List gridsToConvert = new List(); - foreach (IMyCubeGrid staticGrid in Core.StaticGrids) { - gridsToConvert.Add(staticGrid); - } - foreach (IMyCubeGrid staticGrid in gridsToConvert) { - staticGrid.IsStatic = false; - } */ - - bool isContested = false; - IMyFaction nominatedFaction = null; - List factionsInZone = new List(); - List registeredGrids = new List(); - List playersInZone = new List(); - - List players = new List(); - MyAPIGateway.Players.GetPlayers(players); - - foreach (IMyPlayer p in players) - { - // make sure players that leave the zone dont count for zone deaths - if (PointsRemovedOnDeath.Value > 0 && p.Character != null) - { - p.Character.CharacterDied -= Died; - } - - if (!StandardMode_VerifyPlayer(p, ref registeredGrids)) - continue; - - playersInZone.Add(p); - - // add players in the zone to the death penalty - if (PointsRemovedOnDeath.Value > 0 && p.Character != null) - { - p.Character.CharacterDied += Died; - } - - // update faction status - IMyFaction f = MyAPIGateway.Session.Factions.TryGetPlayerFaction(p.IdentityId); - - if (nominatedFaction == null) - { - nominatedFaction = f; - } - - if (!factionsInZone.Contains(f)) - { - if (!AwardPointsToAllActiveFactions.Value && !isContested) // only check for contested status if not contested - { - foreach (IMyFaction otherFaction in factionsInZone) - { - if (MyAPIGateway.Session.Factions.GetRelationBetweenFactions(otherFaction.FactionId, f.FactionId) == MyRelationsBetweenFactions.Enemies) - { - isContested = true; - } - } - } - - factionsInZone.Add(f); - } - - // update grid status - IMyCubeBlock cube = p.Controller.ControlledEntity as IMyCubeBlock; - if (cube != null) - { - List grids = new List(); - MyAPIGateway.GridGroups.GetGroup(cube.CubeGrid, GridLinkTypeEnum.Logical, grids); - registeredGrids.AddRange(grids); - } - } - - if (!factionsInZone.Contains(ControlledByFaction)) - { - ControlledByFaction = nominatedFaction; - } - - foreach (IMyFaction zoneFaction in factionsInZone) - { - if (!ActiveEnemiesPerFaction.ContainsKey(zoneFaction.FactionId)) - { - ActiveEnemiesPerFaction.Add(zoneFaction.FactionId, 0); - } - - int enemyCount = 0; - foreach (IMyPlayer p in players) - { - IMyFaction f = MyAPIGateway.Session.Factions.TryGetPlayerFaction(p.IdentityId); - - if (f == null || f.FactionId == zoneFaction.FactionId) - continue; - - if (MyAPIGateway.Session.Factions.GetRelationBetweenFactions(f.FactionId, zoneFaction.FactionId) == MyRelationsBetweenFactions.Enemies) - { - enemyCount++; - } - } - - if (ActiveEnemiesPerFaction[zoneFaction.FactionId] < enemyCount) - { - ActiveEnemiesPerFaction[zoneFaction.FactionId] = enemyCount; - } - } - - ZoneStates state = ZoneStates.Idle; - float speed = -GetProgress(IdleDrainRate.Value); - - if (isContested) - { - state = ZoneStates.Contested; - speed = -GetProgress(ContestedDrainRate.Value); - } - else if (factionsInZone.Count > 0) - { - state = ZoneStates.Active; - speed = GetProgress(playersInZone.Count); - } - - bool complete = UpdateProgress(state, speed); - if (complete) - { - if (AwardPointsToAllActiveFactions.Value) - { - bool header = true; - foreach (IMyFaction fac in factionsInZone) - { - OnAwardPoints(this, fac, ActiveEnemiesPerFaction[fac.FactionId], header); - header = false; - } - } - else - { - OnAwardPoints.Invoke(this, ControlledByFaction, ActiveEnemiesPerFaction[ControlledByFaction.FactionId], true); - } - - ResetProgress(); - } - - StandardMode_Hud(playersInZone, speed); - } - - private bool StandardMode_VerifyPlayer(IMyPlayer player, ref List registeredGrids) - { - if (Vector3D.Distance(player.GetPosition(), Entity.GetPosition()) > Radius.Value || - MyAPIGateway.Session.Factions.TryGetPlayerFaction(player.IdentityId) == null) - { - return false; - } - - if (!ActivateOnCharacter.Value) - { - IMyCubeBlock controlledBlock = player.Controller.ControlledEntity as IMyCubeBlock; - - if (controlledBlock == null) - return false; - - MyCubeGrid grid = controlledBlock.CubeGrid as MyCubeGrid; - - if (grid.IsStatic || - IgnoreCopilot.Value && registeredGrids.Contains(grid)) // if a grid is already registered this is a copilot - return false; - - if (!ActivateOnUnpoweredGrid.Value) - { - MyResourceSinkComponent powerSink; - if (!controlledBlock.Components.TryGet(out powerSink)) - { - powerSink = new MyResourceSinkComponent(); - MyResourceSinkInfo resourceInfo = new MyResourceSinkInfo() { - ResourceTypeId = Electricity - }; - powerSink.AddType(ref resourceInfo); - controlledBlock.Components.Add(powerSink); - - powerSink.SetRequiredInputByType(Electricity, 0); - powerSink.SetMaxRequiredInputByType(Electricity, 0.000002f); - powerSink.SetRequiredInputFuncByType(Electricity, () => { return 0; }); - } - - if (!powerSink.IsPowerAvailable(Electricity, 0.000001f)) - return false; - } - - - if (grid.GridSizeEnum == MyCubeSize.Large) - { - if (!ActivateOnLargeGrid.Value || - grid.BlocksCount < MinLargeGridBlockCount.Value) - return false; - } - else if (grid.GridSizeEnum == MyCubeSize.Small) - { - if (!ActivateOnSmallGrid.Value || - grid.BlocksCount < MinSmallGridBlockCount.Value) - return false; - } - } - - return true; - } - - private void StandardMode_Hud(List playersInZone, float speed) - { - IMyPlayer localPlayer = MyAPIGateway.Session.LocalHumanPlayer; - if (localPlayer != null && Vector3D.Distance(localPlayer.GetPosition(), Entity.GetPosition()) <= Radius.Value) - { - int allies = 0; - int enemies = 0; - int neutral = 0; - foreach (IMyPlayer p in playersInZone) - { - switch (localPlayer.GetRelationTo(p.IdentityId)) - { - case MyRelationsBetweenPlayerAndBlock.Owner: - case MyRelationsBetweenPlayerAndBlock.FactionShare: - allies++; - break; - case MyRelationsBetweenPlayerAndBlock.Neutral: - neutral++; - break; - case MyRelationsBetweenPlayerAndBlock.Enemies: - case MyRelationsBetweenPlayerAndBlock.NoOwnership: - enemies++; - break; - } - } - - string specialColor = "White"; - switch (State) - { - case ZoneStates.Contested: - specialColor = "Red"; - break; - case ZoneStates.Active: - specialColor = "Blue"; - break; - } - - MyAPIGateway.Utilities.ShowNotification($"Allies: {allies} Neutral: {neutral} Enemies: {enemies} - {State.ToString().ToUpper()}: {((Progress.Value / ProgressWhenComplete.Value) * 100).ToString("n0")}% Speed: {(speed * 100).ToString("n0")}% {(!AwardPointsToAllActiveFactions.Value ? (ControlledByFaction != null ? $"Controlled By: {ControlledByFaction.Tag}" : "") : "")}", 1, specialColor); - } - } - - private string UpdateAutomaticActivation() - { - DateTime today = DateTime.UtcNow; - if (ActivationDay.Value != 0 && (ActivationDay.Value - 1) != (int)today.DayOfWeek) - { - int hours = (int)Math.Floor(ActivationStartTime.Value / 60d); - int minutes = ActivationStartTime.Value % 60; - Progress.SetValue(0); - - return $"Activates on {(Days)ActivationDay.Value} at {(hours.ToString().Length == 1 ? "0" + hours.ToString() : hours.ToString())}:{(minutes.ToString().Length == 1 ? "0" + minutes.ToString() : minutes.ToString())} UTC"; - } - - int currentTime = today.Hour * 60 + today.Minute; - if (currentTime < ActivationStartTime.Value) - { - int startTime = ActivationStartTime.Value - currentTime; - int hours = (int)Math.Floor(startTime / 60d); - int minutes = startTime % 60; - Progress.SetValue(0); - - return $"Activates in {((hours == 0) ? "" : $"{hours}h ")}{minutes}m"; - } - - if (currentTime >= ActivationEndTime.Value) - { - if (ActivationDay.Value != 0) - { - int hours = (int)Math.Floor(ActivationStartTime.Value / 60d); - int minutes = ActivationStartTime.Value % 60; - Progress.SetValue(0); - - return $"Activates next {(Days)ActivationDay.Value} at {(hours.ToString().Length == 1 ? "0" + hours.ToString() : hours.ToString())}:{(minutes.ToString().Length == 1 ? "0" + minutes.ToString() : minutes.ToString())} UTC"; - } - else - { - int nextStart = 1440 + ActivationStartTime.Value - currentTime; - int hours = (int)Math.Floor(nextStart / 60d); - int minutes = nextStart % 60; - Progress.SetValue(0); - - return $"Activates in {((hours == 0) ? "" : $"{hours}h ")}{minutes}m"; - } - } - - return string.Empty; - } - - private void ResetProgress() - { - ResetActiveEnemies(); - Progress.Value = 0; - } - - private void Died(IMyCharacter character) - { - List players = new List(); - MyAPIGateway.Players.GetPlayers(players); - - foreach (IMyPlayer p in players) - { - if (p.Character == character) - { - IMyFaction f = MyAPIGateway.Session.Factions.TryGetPlayerFaction(p.IdentityId); - if (f != null) - { - OnPlayerDied.Invoke(this, p, f); - } - - break; - } - } - } - - private float GetProgress(float progressModifier) - { - return ((progressModifier * progressModifier - 1f) / (progressModifier * progressModifier + (3f * progressModifier) + 1f)) + 1f; - } - - private void ResetActiveEnemies() - { - Dictionary newDict = new Dictionary(); - - foreach (long key in ActiveEnemiesPerFaction.Keys) - { - newDict.Add(key, 0); - } - - ActiveEnemiesPerFaction = newDict; - } - - private void CreateControls() - { - if (!MyAPIGateway.Utilities.IsDedicated) - { - IMyTerminalControlSlider Slider = null; - IMyTerminalControlCheckbox Checkbox = null; - IMyTerminalControlOnOffSwitch onoff = null; - IMyTerminalControlTextbox textbox = null; - IMyTerminalControlSeparator separator = null; - IMyTerminalControlLabel label = null; - - label = MyAPIGateway.TerminalControls.CreateControl("zone_KothGeneralSettingsLabel"); - label.Enabled = (block) => { return block.EntityId == ModBlock.EntityId; }; - label.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - label.Label = MyStringId.GetOrCompute("Koth General Settings"); - MyAPIGateway.TerminalControls.AddControl(label); - - separator = MyAPIGateway.TerminalControls.CreateControl("zone_KothGeneralSeparator"); - separator.Enabled = (block) => { return block.EntityId == ModBlock.EntityId; }; - separator.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - MyAPIGateway.TerminalControls.AddControl(separator); - - onoff = MyAPIGateway.TerminalControls.CreateControl("Zone_EncampmentMode"); - onoff.Enabled = (block) => { return block.EntityId == ModBlock.EntityId; }; - onoff.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - onoff.OnText = MyStringId.GetOrCompute("On"); - onoff.OffText = MyStringId.GetOrCompute("Off"); - - onoff.Setter = (block, value) => { - ActivateOnCharacter.Value = false; - EncampmentMode.Value = value; - UpdateControls(); - }; - - onoff.Getter = (block) => EncampmentMode.Value; - onoff.Title = MyStringId.GetOrCompute("Encampment Mode"); - onoff.Tooltip = MyStringId.GetOrCompute("All factions with powered static grids in the zone are awarded points"); - MyAPIGateway.TerminalControls.AddControl(onoff); - - Checkbox = MyAPIGateway.TerminalControls.CreateControl("Zone_ActivateOnCharacter"); - Checkbox.Enabled = (block) => {return block.EntityId == ModBlock.EntityId && !EncampmentMode.Value; }; - Checkbox.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Checkbox.Setter = (block, value) => { - ActivateOnCharacter.Value = value; - UpdateControls(); - }; - Checkbox.Getter = (block) => ActivateOnCharacter.Value; - Checkbox.Title = MyStringId.GetOrCompute("Activate On Character"); - Checkbox.Tooltip = MyStringId.GetOrCompute("Only requires a player to activate the zone"); - MyAPIGateway.TerminalControls.AddControl(Checkbox); - - Checkbox = MyAPIGateway.TerminalControls.CreateControl("Zone_ActivateOnSmallGrid"); - Checkbox.Enabled = (block) => { return block.EntityId == ModBlock.EntityId && !ActivateOnCharacter.Value && !EncampmentMode.Value; }; - Checkbox.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Checkbox.Setter = (block, value) => { ActivateOnSmallGrid.Value = value; }; - Checkbox.Getter = (block) => ActivateOnSmallGrid.Value; - Checkbox.Title = MyStringId.GetOrCompute("Activate On Small Grid"); - Checkbox.Tooltip = MyStringId.GetOrCompute("Will activate if a piloted small grid is in the zone"); - MyAPIGateway.TerminalControls.AddControl(Checkbox); - - Checkbox = MyAPIGateway.TerminalControls.CreateControl("Zone_ActivateOnLargeGrid"); - Checkbox.Enabled = (block) => { return block.EntityId == ModBlock.EntityId && !ActivateOnCharacter.Value && !EncampmentMode.Value; }; - Checkbox.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Checkbox.Setter = (block, value) => { ActivateOnLargeGrid.Value = value; }; - Checkbox.Getter = (block) => ActivateOnLargeGrid.Value; - Checkbox.Title = MyStringId.GetOrCompute("Activate On Large Grid"); - Checkbox.Tooltip = MyStringId.GetOrCompute("Will activate if a piloted large grid is in the zone"); - MyAPIGateway.TerminalControls.AddControl(Checkbox); - - - Checkbox = MyAPIGateway.TerminalControls.CreateControl("Zone_ActivateOnUnpoweredGrid"); - Checkbox.Enabled = (block) => { return block.EntityId == ModBlock.EntityId && !ActivateOnCharacter.Value && !EncampmentMode.Value; }; - Checkbox.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Checkbox.Setter = (block, value) => { ActivateOnUnpoweredGrid.Value = value; }; - Checkbox.Getter = (block) => ActivateOnUnpoweredGrid.Value; - Checkbox.Title = MyStringId.GetOrCompute("Activate On Unpowered Grid"); - Checkbox.Tooltip = MyStringId.GetOrCompute("Will activate if piloted grid is unpowered"); - MyAPIGateway.TerminalControls.AddControl(Checkbox); - - Checkbox = MyAPIGateway.TerminalControls.CreateControl("Zone_IgnoreCopilot"); - Checkbox.Enabled = (block) => { return block.EntityId == ModBlock.EntityId && !EncampmentMode.Value; }; - Checkbox.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Checkbox.Setter = (block, value) => { IgnoreCopilot.Value = value; }; - Checkbox.Getter = (block) => IgnoreCopilot.Value; - Checkbox.Title = MyStringId.GetOrCompute("Ignore Copilot"); - Checkbox.Tooltip = MyStringId.GetOrCompute("Will count a copiloted grid as a single person"); - MyAPIGateway.TerminalControls.AddControl(Checkbox); - - Checkbox = MyAPIGateway.TerminalControls.CreateControl("Zone_LocationNamed"); - Checkbox.Enabled = (block) => { return block.EntityId == ModBlock.EntityId; }; - Checkbox.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Checkbox.Setter = (block, value) => { IsLocationNamed.Value = value; }; - Checkbox.Getter = (block) => IsLocationNamed.Value; - Checkbox.Title = MyStringId.GetOrCompute("Show Location Name"); - Checkbox.Tooltip = MyStringId.GetOrCompute("Displays location and name of koth when point is scored"); - MyAPIGateway.TerminalControls.AddControl(Checkbox); - - textbox = MyAPIGateway.TerminalControls.CreateControl("zone_LocationName"); - textbox.Enabled = (block) => { return block.EntityId == ModBlock.EntityId; }; - textbox.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - textbox.Setter = (block, value) => { LocationName.Value = (value.ToString()); }; - textbox.Getter = (block) => new StringBuilder(LocationName.Value); - textbox.Title = MyStringId.GetOrCompute("Location Name (defaults to closest planet)"); - textbox.Tooltip = MyStringId.GetOrCompute("Explicitly sets the name of the location"); - MyAPIGateway.TerminalControls.AddControl(textbox); - - Slider = MyAPIGateway.TerminalControls.CreateControl("Zone_Radius"); - Slider.Enabled = (block) => { return block.EntityId == ModBlock.EntityId; }; - Slider.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Slider.Setter = (block, value) => { Radius.Value = value; }; - Slider.Getter = (block) => Radius.Value; - Slider.Writer = (block, value) => value.Append($"{Math.Round(Radius.Value, 0)}m"); - Slider.Title = MyStringId.GetOrCompute("Radius"); - Slider.Tooltip = MyStringId.GetOrCompute("Capture Zone Radius"); - Slider.SetLimits(Constants.MinRadius, Constants.MaxRadius); - MyAPIGateway.TerminalControls.AddControl(Slider); - - Slider = MyAPIGateway.TerminalControls.CreateControl("Zone_ProgressWhenComplete"); - Slider.Enabled = (block) => { return block.EntityId == ModBlock.EntityId; }; - Slider.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Slider.Setter = (block, value) => { ProgressWhenComplete.Value = value; }; - Slider.Getter = (block) => ProgressWhenComplete.Value; - Slider.Writer = (block, value) => value.Append($"{TimeSpan.FromMilliseconds((ProgressWhenComplete.Value / 60) * 1000).ToString("g").Split('.')[0]}"); - Slider.Title = MyStringId.GetOrCompute("Capture Time"); - Slider.Tooltip = MyStringId.GetOrCompute("The base capture time"); - Slider.SetLimits(Constants.MinCaptureTime, Constants.MaxCaptureTime); - MyAPIGateway.TerminalControls.AddControl(Slider); - - Slider = MyAPIGateway.TerminalControls.CreateControl("Zone_IdleDrainRate"); - Slider.Enabled = (block) => { return block.EntityId == ModBlock.EntityId; }; - Slider.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Slider.Setter = (block, value) => { IdleDrainRate.Value = value; }; - Slider.Getter = (block) => IdleDrainRate.Value; - Slider.Writer = (block, value) => value.Append($"{Math.Round(IdleDrainRate.Value * 100, 0)}%"); - Slider.Title = MyStringId.GetOrCompute("Idle Drain Rate"); - //Slider.Tooltip = MyStringId.GetOrCompute("How quickly the "); - Slider.SetLimits(0, 5); - MyAPIGateway.TerminalControls.AddControl(Slider); - - Slider = MyAPIGateway.TerminalControls.CreateControl("Zone_ContestedDrainRate"); - Slider.Enabled = (block) => { return block.EntityId == ModBlock.EntityId && !EncampmentMode.Value; }; - Slider.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Slider.Setter = (block, value) => { ContestedDrainRate.Value = value; }; - Slider.Getter = (block) => ContestedDrainRate.Value; - Slider.Writer = (block, value) => value.Append($"{Math.Round(ContestedDrainRate.Value * 100, 0)}%"); - Slider.Title = MyStringId.GetOrCompute("Contested Drain Rate"); - //Slider.Tooltip = MyStringId.GetOrCompute("The minimum blocks considered an activation grid"); - Slider.SetLimits(0, 5); - MyAPIGateway.TerminalControls.AddControl(Slider); - - - Slider = MyAPIGateway.TerminalControls.CreateControl("Zone_MinSmallGridBlockCount"); - Slider.Enabled = (block) => { return block.EntityId == ModBlock.EntityId && !ActivateOnCharacter.Value && !EncampmentMode.Value; }; - Slider.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Slider.Setter = (block, value) => { MinSmallGridBlockCount.Value = (int)value; }; - Slider.Getter = (block) => MinSmallGridBlockCount.Value; - Slider.Writer = (block, value) => value.Append($"{MinSmallGridBlockCount.Value} blocks"); - Slider.Title = MyStringId.GetOrCompute("SmallGrid min blocks"); - Slider.Tooltip = MyStringId.GetOrCompute("The minimum blocks considered an activation grid"); - Slider.SetLimits(Constants.MinBlockCount, Constants.MaxBlockCount); - MyAPIGateway.TerminalControls.AddControl(Slider); - - - Slider = MyAPIGateway.TerminalControls.CreateControl("Zone_MinLargeGridBlockCount"); - Slider.Enabled = (block) => { return block.EntityId == ModBlock.EntityId && !ActivateOnCharacter.Value; }; - Slider.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Slider.Setter = (block, value) => { MinLargeGridBlockCount.Value = (int)value; }; - Slider.Getter = (block) => MinLargeGridBlockCount.Value; - Slider.Writer = (block, value) => value.Append($"{MinLargeGridBlockCount.Value} blocks"); - Slider.Title = MyStringId.GetOrCompute("LargeGrid min blocks"); - Slider.Tooltip = MyStringId.GetOrCompute("The minimum blocks considered an activation grid"); - Slider.SetLimits(Constants.MinBlockCount, Constants.MaxBlockCount); - MyAPIGateway.TerminalControls.AddControl(Slider); - - - Slider = MyAPIGateway.TerminalControls.CreateControl("Zone_Opacity"); - Slider.Enabled = (block) => { return block.EntityId == ModBlock.EntityId; }; - Slider.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Slider.Setter = (block, value) => { Opacity.Value = value; }; - Slider.Getter = (block) => Opacity.Value; - Slider.Writer = (block, value) => value.Append($"{Opacity.Value} alpha"); - Slider.Title = MyStringId.GetOrCompute("Opacity"); - Slider.Tooltip = MyStringId.GetOrCompute("Sphere visiblility"); - Slider.SetLimits(0, 255); - MyAPIGateway.TerminalControls.AddControl(Slider); - - - label = MyAPIGateway.TerminalControls.CreateControl("zone_TimedActivationLabel"); - label.Enabled = (block) => { return block.EntityId == ModBlock.EntityId; }; - label.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - label.Label = MyStringId.GetOrCompute("Timed Activation Settings"); - MyAPIGateway.TerminalControls.AddControl(label); - - - separator = MyAPIGateway.TerminalControls.CreateControl("zone_TimedActivationSeparator"); - separator.Enabled = (block) => { return block.EntityId == ModBlock.EntityId; }; - separator.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - MyAPIGateway.TerminalControls.AddControl(separator); - - - Checkbox = MyAPIGateway.TerminalControls.CreateControl("Zone_AutomaticActivation"); - Checkbox.Enabled = (block) => { return block.EntityId == ModBlock.EntityId; }; - Checkbox.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Checkbox.Setter = (block, value) => { AutomaticActivation.Value = value; UpdateControls(); }; - Checkbox.Getter = (block) => AutomaticActivation.Value; - Checkbox.Title = MyStringId.GetOrCompute("Auto Activate"); - Checkbox.Tooltip = MyStringId.GetOrCompute("Will allow activation durring a set time period"); - MyAPIGateway.TerminalControls.AddControl(Checkbox); - - - Slider = MyAPIGateway.TerminalControls.CreateControl("Zone_ActivationDay"); - Slider.Enabled = (block) => { return block.EntityId == ModBlock.EntityId && AutomaticActivation.Value; }; - Slider.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Slider.Setter = (block, value) => { ActivationDay.Value = (int)value; }; - Slider.Getter = (block) => ActivationDay.Value; - Slider.Writer = (block, value) => value.Append($"{((Days)ActivationDay.Value).ToString()}"); - Slider.Title = MyStringId.GetOrCompute("Activation Day"); - Slider.Tooltip = MyStringId.GetOrCompute("The day or days that koth will activate on"); - Slider.SetLimits(0, 7); - MyAPIGateway.TerminalControls.AddControl(Slider); - - - Slider = MyAPIGateway.TerminalControls.CreateControl("Zone_ActivationStartTime"); - Slider.Enabled = (block) => { return block.EntityId == ModBlock.EntityId && AutomaticActivation.Value; }; - Slider.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Slider.Setter = (block, value) => { ActivationStartTime.Value = (int)value; if (ActivationStartTime.Value > ActivationEndTime.Value) { ActivationEndTime.Value = ActivationStartTime.Value; UpdateControls(); } }; - Slider.Getter = (block) => ActivationStartTime.Value; - Slider.Writer = (block, value) => value.Append($"{(Math.Floor(ActivationStartTime.Value / 60d).ToString("n0").Length == 1 ? "0" + Math.Floor(ActivationStartTime.Value / 60d).ToString("n0") : Math.Floor(ActivationStartTime.Value / 60d).ToString("n0"))}:{((ActivationStartTime.Value % 60).ToString().Length == 1 ? "0" + (ActivationStartTime.Value % 60).ToString() : (ActivationStartTime.Value % 60).ToString())} UTC"); - Slider.Title = MyStringId.GetOrCompute("Activation Start Time"); - //Slider.Tooltip = MyStringId.GetOrCompute(""); - Slider.SetLimits(0, 1440); - MyAPIGateway.TerminalControls.AddControl(Slider); - - - Slider = MyAPIGateway.TerminalControls.CreateControl("Zone_ActivationEndTime"); - Slider.Enabled = (block) => { return block.EntityId == ModBlock.EntityId && AutomaticActivation.Value; }; - Slider.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Slider.Setter = (block, value) => { ActivationEndTime.Value = (int)value; if (ActivationStartTime.Value > ActivationEndTime.Value) { ActivationStartTime.Value = ActivationEndTime.Value; UpdateControls(); } }; - Slider.Getter = (block) => ActivationEndTime.Value; - Slider.Writer = (block, value) => value.Append($"{(Math.Floor(ActivationEndTime.Value / 60d).ToString("n0").Length == 1 ? "0" + Math.Floor(ActivationEndTime.Value / 60d).ToString("n0") : Math.Floor(ActivationEndTime.Value / 60d).ToString("n0"))}:{((ActivationEndTime.Value % 60).ToString().Length == 1 ? "0" + (ActivationEndTime.Value % 60).ToString() : (ActivationEndTime.Value % 60).ToString())} UTC"); - Slider.Title = MyStringId.GetOrCompute("Activation End Time"); - //Slider.Tooltip = MyStringId.GetOrCompute(""); - Slider.SetLimits(0, 1440); - MyAPIGateway.TerminalControls.AddControl(Slider); - - - label = MyAPIGateway.TerminalControls.CreateControl("zone_KothPointsSettingsLabel"); - label.Enabled = (block) => { return block.EntityId == ModBlock.EntityId; }; - label.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - label.Label = MyStringId.GetOrCompute("Koth Point Settings"); - MyAPIGateway.TerminalControls.AddControl(label); - - separator = MyAPIGateway.TerminalControls.CreateControl("zone_KothPointsSeparator"); - separator.Enabled = (block) => { return block.EntityId == ModBlock.EntityId; }; - separator.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - MyAPIGateway.TerminalControls.AddControl(separator); - - Checkbox = MyAPIGateway.TerminalControls.CreateControl("Zone_AwardPointsToAllActiveFactions"); - Checkbox.Enabled = (block) => { return block.EntityId == ModBlock.EntityId && !EncampmentMode.Value; }; - Checkbox.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Checkbox.Setter = (block, value) => { AwardPointsToAllActiveFactions.Value = value; UpdateControls(); }; - Checkbox.Getter = (block) => AwardPointsToAllActiveFactions.Value; - Checkbox.Title = MyStringId.GetOrCompute("Award Points to all Active Factions"); - Checkbox.Tooltip = MyStringId.GetOrCompute("All faction in zone get points on cap. No contesting zone. Zone caps at a set rate regardless of player count"); - MyAPIGateway.TerminalControls.AddControl(Checkbox); - - Checkbox = MyAPIGateway.TerminalControls.CreateControl("Zone_AwardPointsAsCredits"); - Checkbox.Enabled = (block) => { return block.EntityId == ModBlock.EntityId; }; - Checkbox.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Checkbox.Setter = (block, value) => { AwardPointsAsCredits.Value = value; UpdateControls(); }; - Checkbox.Getter = (block) => AwardPointsAsCredits.Value; - Checkbox.Title = MyStringId.GetOrCompute("Award Points As Credits"); - Checkbox.Tooltip = MyStringId.GetOrCompute("Will deposit credit into the capping faction"); - MyAPIGateway.TerminalControls.AddControl(Checkbox); - - Slider = MyAPIGateway.TerminalControls.CreateControl("Zone_PointsOnCap"); - Slider.Enabled = (block) => { return block.EntityId == ModBlock.EntityId; }; - Slider.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Slider.Setter = (block, value) => { PointsOnCap.Value = (int)value; }; - Slider.Getter = (block) => PointsOnCap.Value; - Slider.Writer = (block, value) => { - if (PointsOnCap.Value == 0) - { - value.Append($"Standard"); - } - else - { - value.Append($"{PointsOnCap.Value}"); - } - }; - Slider.Title = MyStringId.GetOrCompute("Points On Cap"); - Slider.Tooltip = MyStringId.GetOrCompute("The number of points alotted on capture. Standard awards more points for more enemy players online. teams that are behind get a slight point boost."); - Slider.SetLimits(0, Constants.MaxPoints); - MyAPIGateway.TerminalControls.AddControl(Slider); - - - Slider = MyAPIGateway.TerminalControls.CreateControl("Zone_PointsRemovedOnDeath"); - Slider.Enabled = (block) => { return block.EntityId == ModBlock.EntityId; }; - Slider.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Slider.Setter = (block, value) => { PointsRemovedOnDeath.Value = (int)value; }; - Slider.Getter = (block) => PointsRemovedOnDeath.Value; - Slider.Writer = (block, value) => value.Append($"{PointsRemovedOnDeath.Value}"); - Slider.Title = MyStringId.GetOrCompute("Points Removed On Death"); - Slider.SetLimits(0, Constants.MaxPoints); - MyAPIGateway.TerminalControls.AddControl(Slider); - - - Slider = MyAPIGateway.TerminalControls.CreateControl("Zone_CreditPerPoint"); - Slider.Enabled = (block) => { return block.EntityId == ModBlock.EntityId && AwardPointsAsCredits.Value; }; - Slider.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Slider.Setter = (block, value) => { CreditsPerPoint.Value = (int)value; }; - Slider.Getter = (block) => CreditsPerPoint.Value; - Slider.Writer = (block, value) => value.Append($"{CreditsPerPoint.Value}"); - Slider.Title = MyStringId.GetOrCompute("Credits per point"); - Slider.Tooltip = MyStringId.GetOrCompute("The number of credits per point that will be payed out to capping faction"); - Slider.SetLimits(Constants.MinCredit, Constants.MaxCredit); - MyAPIGateway.TerminalControls.AddControl(Slider); - - - label = MyAPIGateway.TerminalControls.CreateControl("zone_PrizeLabel"); - label.Enabled = (block) => { return block.EntityId == ModBlock.EntityId; }; - label.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - label.Label = MyStringId.GetOrCompute("Koth Prize Settings"); - MyAPIGateway.TerminalControls.AddControl(label); - - separator = MyAPIGateway.TerminalControls.CreateControl("zone_PrizeSeparator"); - separator.Enabled = (block) => { return block.EntityId == ModBlock.EntityId; }; - separator.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - MyAPIGateway.TerminalControls.AddControl(separator); - - - Checkbox = MyAPIGateway.TerminalControls.CreateControl("Zone_SpawnIntoPrizeBox"); - Checkbox.Enabled = (block) => { return block.EntityId == ModBlock.EntityId; }; - Checkbox.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Checkbox.Setter = (block, value) => { SpawnIntoPrizeBox.Value = value; }; - Checkbox.Getter = (block) => SpawnIntoPrizeBox.Value; - Checkbox.Title = MyStringId.GetOrCompute("Spawn Items Into PrizeBox"); - Checkbox.Tooltip = MyStringId.GetOrCompute("Items will be dropped into the prize box on this grid."); - MyAPIGateway.TerminalControls.AddControl(Checkbox); - - - Checkbox = MyAPIGateway.TerminalControls.CreateControl("Zone_UseComponentReward"); - Checkbox.Enabled = (block) => { return block.EntityId == ModBlock.EntityId; }; - Checkbox.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Checkbox.Setter = (block, value) => { - - UseComponentReward.Value = value; - UpdateControls(); - }; - Checkbox.Getter = (block) => UseComponentReward.Value; - Checkbox.Title = MyStringId.GetOrCompute("Component Reward"); - Checkbox.Tooltip = MyStringId.GetOrCompute("Prize will be components"); - MyAPIGateway.TerminalControls.AddControl(Checkbox); - - Checkbox = MyAPIGateway.TerminalControls.CreateControl("Zone_UseOreReward"); - Checkbox.Enabled = (block) => { return block.EntityId == ModBlock.EntityId; }; - Checkbox.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Checkbox.Setter = (block, value) => { - UseOreReward.Value = value; - UpdateControls(); - }; - - Checkbox.Getter = (block) => UseOreReward.Value; - Checkbox.Title = MyStringId.GetOrCompute("Ore Reward"); - Checkbox.Tooltip = MyStringId.GetOrCompute("Prize will be ore"); - MyAPIGateway.TerminalControls.AddControl(Checkbox); - - Checkbox = MyAPIGateway.TerminalControls.CreateControl("Zone_UseIngotReward"); - Checkbox.Enabled = (block) => { return block.EntityId == ModBlock.EntityId; }; - Checkbox.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Checkbox.Setter = (block, value) => { - UseIngotReward.Value = value; - UpdateControls(); - }; - Checkbox.Getter = (block) => UseIngotReward.Value; - Checkbox.Title = MyStringId.GetOrCompute("Ingot Reward"); - Checkbox.Tooltip = MyStringId.GetOrCompute("Prize will be Ingot"); - MyAPIGateway.TerminalControls.AddControl(Checkbox); - - - Slider = MyAPIGateway.TerminalControls.CreateControl("Zone_PointsForPrizes"); - Slider.Enabled = (block) => { return block.EntityId == ModBlock.EntityId; }; - Slider.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Slider.Setter = (block, value) => { PointsForPrize.Value = (int)value; }; - Slider.Getter = (block) => PointsForPrize.Value; - Slider.Writer = (block, value) => value.Append($"{PointsForPrize.Value} Points"); - Slider.Title = MyStringId.GetOrCompute("Points Required for Prize"); - Slider.Tooltip = MyStringId.GetOrCompute("Points"); - Slider.SetLimits(Constants.MinPoints, Constants.MaxPoints); - MyAPIGateway.TerminalControls.AddControl(Slider); - - - Slider = MyAPIGateway.TerminalControls.CreateControl("Zone_PrizeAmountComponents"); - Slider.Enabled = (block) => { return block.EntityId == ModBlock.EntityId && UseComponentReward.Value; }; - Slider.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Slider.Setter = (block, value) => { PrizeAmountComponent.Value = (int)value;}; - Slider.Getter = (block) => PrizeAmountComponent.Value; - Slider.Writer = (block, value) => value.Append($"{PrizeAmountComponent.Value}#"); - Slider.Title = MyStringId.GetOrCompute("Prize Amount Components"); - Slider.Tooltip = MyStringId.GetOrCompute("Number of Prizes"); - Slider.SetLimits(Constants.MinAmount, Constants.MaxAmount); - MyAPIGateway.TerminalControls.AddControl(Slider); - - Slider = MyAPIGateway.TerminalControls.CreateControl("Zone_PrizeAmountOre"); - Slider.Enabled = (block) => { return block.EntityId == ModBlock.EntityId && UseOreReward.Value; }; - Slider.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Slider.Setter = (block, value) => { PrizeAmountOre.Value = (int)value;}; - Slider.Getter = (block) => PrizeAmountOre.Value; - Slider.Writer = (block, value) => value.Append($"{PrizeAmountOre.Value}#"); - Slider.Title = MyStringId.GetOrCompute("Prize Amount ore"); - Slider.Tooltip = MyStringId.GetOrCompute("Number of Prizes"); - Slider.SetLimits(Constants.MinAmount, Constants.MaxAmount); - MyAPIGateway.TerminalControls.AddControl(Slider); - - Slider = MyAPIGateway.TerminalControls.CreateControl("Zone_PrizeAmountIngot"); - Slider.Enabled = (block) => { return block.EntityId == ModBlock.EntityId && UseIngotReward.Value; }; - Slider.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Slider.Setter = (block, value) => { PrizeAmountIngot.Value = (int)value; }; - Slider.Getter = (block) => PrizeAmountIngot.Value; - Slider.Writer = (block, value) => value.Append($"{PrizeAmountIngot.Value}#"); - Slider.Title = MyStringId.GetOrCompute("Prize Amount Ingots"); - Slider.Tooltip = MyStringId.GetOrCompute("Number of Prizes"); - Slider.SetLimits(Constants.MinAmount, Constants.MaxAmount); - MyAPIGateway.TerminalControls.AddControl(Slider); - - IMyTerminalControlListbox componentlist = MyAPIGateway.TerminalControls.CreateControl("Zone_ComponentList"); - componentlist.Enabled = (block) => { return block.EntityId == ModBlock.EntityId && !AdvancedComponentSelection.Value && UseComponentReward.Value; }; - componentlist.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - componentlist.Title = MyStringId.GetOrCompute("Select Vanilla Components"); - componentlist.SupportsMultipleBlocks = false; - componentlist.ListContent = ComponentPrize; - componentlist.VisibleRowsCount = 6; - componentlist.ItemSelected = SelectedComponent; - componentlist.Multiselect = false; - MyAPIGateway.TerminalControls.AddControl(componentlist); - - Checkbox = MyAPIGateway.TerminalControls.CreateControl("Zone_AdvancedComponentOption"); - Checkbox.Enabled = (block) => { return block.EntityId == ModBlock.EntityId && UseComponentReward.Value; }; - Checkbox.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Checkbox.Setter = (block, value) => { - AdvancedComponentSelection.Value = value; - UpdateControls(); - }; - Checkbox.Getter = (block) => AdvancedComponentSelection.Value; - Checkbox.Title = MyStringId.GetOrCompute("Advanced Component Selection"); - Checkbox.Tooltip = MyStringId.GetOrCompute("allows for manually adding modded Components"); - MyAPIGateway.TerminalControls.AddControl(Checkbox); - - IMyTerminalControlListbox Orelist = MyAPIGateway.TerminalControls.CreateControl("Zone_OreList"); - Orelist.Enabled = (block) => { return block.EntityId == ModBlock.EntityId && !AdvancedOreSelection.Value && UseOreReward.Value; }; - Orelist.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Orelist.Title = MyStringId.GetOrCompute("Select Vanilla Ores"); - Orelist.SupportsMultipleBlocks = false; - Orelist.ListContent = OrePrize; - Orelist.VisibleRowsCount = 6; - Orelist.ItemSelected = SelectedOre; - Orelist.Multiselect = false; - MyAPIGateway.TerminalControls.AddControl(Orelist); - - Checkbox = MyAPIGateway.TerminalControls.CreateControl("Zone_AdvancedOreOption"); - Checkbox.Enabled = (block) => { return block.EntityId == ModBlock.EntityId && UseOreReward.Value; }; - Checkbox.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Checkbox.Setter = (block, value) => { - AdvancedOreSelection.Value = value; - UpdateControls(); - }; - Checkbox.Getter = (block) => AdvancedOreSelection.Value; - Checkbox.Title = MyStringId.GetOrCompute("Advanced Ore Selection"); - Checkbox.Tooltip = MyStringId.GetOrCompute("allows for manually adding modded Ores"); - MyAPIGateway.TerminalControls.AddControl(Checkbox); - - - var Ingotlist = MyAPIGateway.TerminalControls.CreateControl("Zone_IngotList"); - Ingotlist.Enabled = (block) => { return block.EntityId == ModBlock.EntityId && !AdvancedIngotSelection.Value && UseIngotReward.Value; }; - Ingotlist.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Ingotlist.Title = MyStringId.GetOrCompute("Select Vanilla Ingot"); - Ingotlist.SupportsMultipleBlocks = false; - Ingotlist.ListContent = IngotPrize; - Ingotlist.VisibleRowsCount = 6; - Ingotlist.ItemSelected = SelectedIngot; - Ingotlist.Multiselect = false; - MyAPIGateway.TerminalControls.AddControl(Ingotlist); - - Checkbox = MyAPIGateway.TerminalControls.CreateControl("Zone_AdvancedIngotOption"); - Checkbox.Enabled = (block) => { return block.EntityId == ModBlock.EntityId && UseIngotReward.Value; }; - Checkbox.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - Checkbox.Setter = (block, value) => { - AdvancedIngotSelection.Value = value; - UpdateControls(); - }; - Checkbox.Getter = (block) => AdvancedIngotSelection.Value; - Checkbox.Title = MyStringId.GetOrCompute("Advanced Ingot Selection"); - Checkbox.Tooltip = MyStringId.GetOrCompute("allows for manually adding modded Ingot"); - MyAPIGateway.TerminalControls.AddControl(Checkbox); - - - label = MyAPIGateway.TerminalControls.CreateControl("zone_AdvanceLabel"); - label.Enabled = (block) => { return block.EntityId == ModBlock.EntityId; }; - label.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - label.Label = MyStringId.GetOrCompute("Advanced Prize Settings"); - MyAPIGateway.TerminalControls.AddControl(label); - - separator = MyAPIGateway.TerminalControls.CreateControl("zone_PrizeSeparator"); - separator.Enabled = (block) => { return block.EntityId == ModBlock.EntityId; }; - separator.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - MyAPIGateway.TerminalControls.AddControl(separator); - - textbox = MyAPIGateway.TerminalControls.CreateControl("zone_PrizeComponentSubtypeId"); - textbox.Enabled = (block) => { return block.EntityId == ModBlock.EntityId && AdvancedComponentSelection.Value && UseComponentReward.Value; }; - textbox.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - textbox.Setter = (block, value) => { PrizeComponentSubtypeId.Value = (value.ToString()); }; - textbox.Getter = (block) => new StringBuilder(PrizeComponentSubtypeId.Value); - textbox.Title = MyStringId.GetOrCompute("Component subtypeId"); - textbox.Tooltip = MyStringId.GetOrCompute("must use subtypeId"); - MyAPIGateway.TerminalControls.AddControl(textbox); - - textbox = MyAPIGateway.TerminalControls.CreateControl("zone_PrizeOreSubtypeId"); - textbox.Enabled = (block) => { return block.EntityId == ModBlock.EntityId && AdvancedOreSelection.Value && UseOreReward.Value; }; - textbox.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - textbox.Setter = (block, value) => { PrizeOreSubtypeId.Value = (value.ToString()); }; - textbox.Getter = (block) => new StringBuilder(PrizeOreSubtypeId.Value); - textbox.Title = MyStringId.GetOrCompute("Ore subtypeId"); - textbox.Tooltip = MyStringId.GetOrCompute("must use subtypeId"); - MyAPIGateway.TerminalControls.AddControl(textbox); - - textbox = MyAPIGateway.TerminalControls.CreateControl("zone_PrizeIngotSubtypeId"); - textbox.Enabled = (block) => { return block.EntityId == ModBlock.EntityId && AdvancedIngotSelection.Value && UseIngotReward.Value; }; - textbox.Visible = (block) => { return block.EntityId == ModBlock.EntityId; }; - - textbox.Setter = (block, value) => { PrizeIngotSubtypeId.Value = (value.ToString()); }; - textbox.Getter = (block) => new StringBuilder(PrizeIngotSubtypeId.Value); - textbox.Title = MyStringId.GetOrCompute("Ingot subtypeId"); - textbox.Tooltip = MyStringId.GetOrCompute("must use subtypeId"); - MyAPIGateway.TerminalControls.AddControl(textbox); - } - } - - private void UpdateControls() - { - List controls = new List(); - MyAPIGateway.TerminalControls.GetControls(out controls); - - foreach (IMyTerminalControl control in controls) - { - control.UpdateVisual(); - } - } - - - private void ComponentPrize(IMyTerminalBlock block, List items, List selectedItems) - { - try - { - List ComponentPrizeList = new List(); - ComponentPrizeList.Add("Construction"); - ComponentPrizeList.Add("MetalGrid"); - ComponentPrizeList.Add("InteriorPlate"); - ComponentPrizeList.Add("SteelPlate"); - ComponentPrizeList.Add("Girder"); - ComponentPrizeList.Add("SmallTube"); - ComponentPrizeList.Add("LargeTube"); - ComponentPrizeList.Add("Motor"); - ComponentPrizeList.Add("Display"); - ComponentPrizeList.Add("BulletproofGlass"); - ComponentPrizeList.Add("Superconductor"); - ComponentPrizeList.Add("Computer"); - ComponentPrizeList.Add("Reactor"); - ComponentPrizeList.Add("Thrust"); - ComponentPrizeList.Add("GravityGenerator"); - ComponentPrizeList.Add("Medical"); - ComponentPrizeList.Add("RadioCommunication"); - ComponentPrizeList.Add("Detector"); - ComponentPrizeList.Add("Explosives"); - ComponentPrizeList.Add("SolarCell"); - ComponentPrizeList.Add("PowerCell"); - ComponentPrizeList.Add("Canvas"); - - MyTerminalControlListBoxItem dummy = new MyTerminalControlListBoxItem(MyStringId.GetOrCompute("-Select Component Below-"), MyStringId.GetOrCompute("-Select Component Below-"), "abc"); - items.Add(dummy); - - if (!string.IsNullOrEmpty(SelectedComponentString.Value)) - { - var placeholder = new MyTerminalControlListBoxItem(MyStringId.GetOrCompute(SelectedComponentString.Value), MyStringId.GetOrCompute(SelectedComponentString.Value), SelectedComponentString.Value); - items.Add(placeholder); - selectedItems.Add(placeholder); - } - foreach (var name in ComponentPrizeList) - { - var toList = new MyTerminalControlListBoxItem(MyStringId.GetOrCompute(name), MyStringId.GetOrCompute(name), "abc"); - items.Add(toList); - } - - - } - catch (Exception ex) - { - VRage.Utils.MyLog.Default.WriteLineAndConsole($"list error when setting up ComponentPrize {ex}"); - } - - } - - private void SelectedComponent(IMyTerminalBlock block, List selectedItems) - { - try - { - SelectedComponentString.Value = selectedItems[0].Text.ToString(); - - } - catch (Exception ex) - { - MyLog.Default.WriteLineAndConsole($"list error when setting up SelectedComponent {ex}"); - } - } - - private void OrePrize(IMyTerminalBlock block, List items, List selectedItems) - { - try - { - List OrePrizeList = new List(); - OrePrizeList.Add("Stone"); - OrePrizeList.Add("Iron"); - OrePrizeList.Add("Nickel"); - OrePrizeList.Add("Cobalt"); - OrePrizeList.Add("Magnesium"); - OrePrizeList.Add("Silicon"); - OrePrizeList.Add("Silver"); - OrePrizeList.Add("Gold"); - OrePrizeList.Add("Platinum"); - OrePrizeList.Add("Uranium"); - - MyTerminalControlListBoxItem dummy = new MyTerminalControlListBoxItem(MyStringId.GetOrCompute("-Select Ore Below-"), MyStringId.GetOrCompute("-Select Ore Below-"), "abc"); - items.Add(dummy); - - if (!string.IsNullOrEmpty(SelectedOreString.Value)) - { - MyTerminalControlListBoxItem placeholder = new MyTerminalControlListBoxItem(MyStringId.GetOrCompute(SelectedOreString.Value), MyStringId.GetOrCompute(SelectedOreString.Value), SelectedOreString.Value); - items.Add(placeholder); - selectedItems.Add(placeholder); - } - - foreach (var name in OrePrizeList) - { - MyTerminalControlListBoxItem toList = new MyTerminalControlListBoxItem(MyStringId.GetOrCompute(name), MyStringId.GetOrCompute(name), "abc"); - items.Add(toList); - } - } - catch (Exception ex) - { - MyLog.Default.WriteLineAndConsole($"list error when setting up OrePrize {ex}"); - } - - } - - private void SelectedOre(IMyTerminalBlock block, List selectedItems) - { - try - { - SelectedOreString.Value = selectedItems[0].Text.ToString(); - - } - catch (Exception ex) - { - MyLog.Default.WriteLineAndConsole($"list error when setting up SelectedComponent {ex}"); - } - } - - private void IngotPrize(IMyTerminalBlock block, List items, List selectedItems) - { - try - { - List IngotPrizeList = new List(); - IngotPrizeList.Add("Stone"); - IngotPrizeList.Add("Iron"); - IngotPrizeList.Add("Nickel"); - IngotPrizeList.Add("Cobalt"); - IngotPrizeList.Add("Magnesium"); - IngotPrizeList.Add("Silicon"); - IngotPrizeList.Add("Silver"); - IngotPrizeList.Add("Gold"); - IngotPrizeList.Add("Platinum"); - IngotPrizeList.Add("Uranium"); - - var dummy = new MyTerminalControlListBoxItem(MyStringId.GetOrCompute("-Select Ingot Below-"), MyStringId.GetOrCompute("-Select Ingot Below-"), "abc"); - items.Add(dummy); - - if (!string.IsNullOrEmpty(SelectedIngotString.Value)) - { - MyTerminalControlListBoxItem placeholder = new MyTerminalControlListBoxItem(MyStringId.GetOrCompute(SelectedIngotString.Value), MyStringId.GetOrCompute(SelectedIngotString.Value), SelectedIngotString.Value); - items.Add(placeholder); - selectedItems.Add(placeholder); - } - - foreach (var name in IngotPrizeList) - { - MyTerminalControlListBoxItem toList = new MyTerminalControlListBoxItem(MyStringId.GetOrCompute(name), MyStringId.GetOrCompute(name), "abc"); - items.Add(toList); - } - } - catch (Exception ex) - { - MyLog.Default.WriteLineAndConsole($"list error when setting up IngotPrize {ex}"); - } - - } - - private void SelectedIngot(IMyTerminalBlock block, List selectedItems) - { - try - { - SelectedIngotString.Value = selectedItems[0].Text.ToString(); - - } - catch (Exception ex) - { - MyLog.Default.WriteLineAndConsole($"list error when setting up SelectedComponent {ex}"); - } - } - - } -} diff --git a/Gamemode Mods/Stable/SCKoth/Data/TransparentMaterials.sbc b/Gamemode Mods/Stable/SCKoth/Data/TransparentMaterials.sbc deleted file mode 100644 index 7d874f999..000000000 --- a/Gamemode Mods/Stable/SCKoth/Data/TransparentMaterials.sbc +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - TransparentMaterialDefinition - KothTransparency - - false - 1 - false - false - 1 - Textures\Particles\Square.dds - Textures\Models\Cubes\Chrome_ng.dds - false - true - - 0 - 0 - - - 1 - 1 - - - 1 - 1 - 1 - 1 - - - 0.0 - 0.0 - 0.0 - 0.0 - - - 0 - 0 - 0 - 0 - - - 0 - 0 - 0 - 0 - - 0 - 0 - 0 - 30 - 50 - 0 - - - - \ No newline at end of file diff --git a/Gamemode Mods/Stable/SCKoth/Models/Components/construction_components_component.mwm b/Gamemode Mods/Stable/SCKoth/Models/Components/construction_components_component.mwm deleted file mode 100644 index 9100adb3e..000000000 Binary files a/Gamemode Mods/Stable/SCKoth/Models/Components/construction_components_component.mwm and /dev/null differ diff --git a/Gamemode Mods/Stable/SCKoth/Models/Cubes/Large/GoldenBlock_Large.mwm b/Gamemode Mods/Stable/SCKoth/Models/Cubes/Large/GoldenBlock_Large.mwm deleted file mode 100644 index b63172b2d..000000000 Binary files a/Gamemode Mods/Stable/SCKoth/Models/Cubes/Large/GoldenBlock_Large.mwm and /dev/null differ diff --git a/Gamemode Mods/Stable/SCKoth/Models/Cubes/Large/GoldenBlock_Large_Constr1.mwm b/Gamemode Mods/Stable/SCKoth/Models/Cubes/Large/GoldenBlock_Large_Constr1.mwm deleted file mode 100644 index 0d0e10646..000000000 Binary files a/Gamemode Mods/Stable/SCKoth/Models/Cubes/Large/GoldenBlock_Large_Constr1.mwm and /dev/null differ diff --git a/Gamemode Mods/Stable/SCKoth/Models/Cubes/Large/GoldenBlock_Large_Constr2.mwm b/Gamemode Mods/Stable/SCKoth/Models/Cubes/Large/GoldenBlock_Large_Constr2.mwm deleted file mode 100644 index e8d3f8912..000000000 Binary files a/Gamemode Mods/Stable/SCKoth/Models/Cubes/Large/GoldenBlock_Large_Constr2.mwm and /dev/null differ diff --git a/Gamemode Mods/Stable/SCKoth/Models/Cubes/Large/GoldenBlock_Large_Constr3.mwm b/Gamemode Mods/Stable/SCKoth/Models/Cubes/Large/GoldenBlock_Large_Constr3.mwm deleted file mode 100644 index ad626e689..000000000 Binary files a/Gamemode Mods/Stable/SCKoth/Models/Cubes/Large/GoldenBlock_Large_Constr3.mwm and /dev/null differ diff --git a/Gamemode Mods/Stable/SCKoth/Models/Cubes/Large/GoldenBlock_Large_LOD1.mwm b/Gamemode Mods/Stable/SCKoth/Models/Cubes/Large/GoldenBlock_Large_LOD1.mwm deleted file mode 100644 index 0b96c4b93..000000000 Binary files a/Gamemode Mods/Stable/SCKoth/Models/Cubes/Large/GoldenBlock_Large_LOD1.mwm and /dev/null differ diff --git a/Gamemode Mods/Stable/SCKoth/Models/Cubes/Large/GoldenBlock_Large_LOD2.mwm b/Gamemode Mods/Stable/SCKoth/Models/Cubes/Large/GoldenBlock_Large_LOD2.mwm deleted file mode 100644 index bdf3e10a0..000000000 Binary files a/Gamemode Mods/Stable/SCKoth/Models/Cubes/Large/GoldenBlock_Large_LOD2.mwm and /dev/null differ diff --git a/Gamemode Mods/Stable/SCKoth/Models/Cubes/Large/KotHBeacon.mwm b/Gamemode Mods/Stable/SCKoth/Models/Cubes/Large/KotHBeacon.mwm deleted file mode 100644 index 04bd7ea80..000000000 Binary files a/Gamemode Mods/Stable/SCKoth/Models/Cubes/Large/KotHBeacon.mwm and /dev/null differ diff --git a/Gamemode Mods/Stable/SCKoth/Models/Cubes/Large/KotHBeacon_BS1.mwm b/Gamemode Mods/Stable/SCKoth/Models/Cubes/Large/KotHBeacon_BS1.mwm deleted file mode 100644 index e2a1e13e0..000000000 Binary files a/Gamemode Mods/Stable/SCKoth/Models/Cubes/Large/KotHBeacon_BS1.mwm and /dev/null differ diff --git a/Gamemode Mods/Stable/SCKoth/Models/Cubes/Large/KotHBeacon_BS2.mwm b/Gamemode Mods/Stable/SCKoth/Models/Cubes/Large/KotHBeacon_BS2.mwm deleted file mode 100644 index e64fb7c0c..000000000 Binary files a/Gamemode Mods/Stable/SCKoth/Models/Cubes/Large/KotHBeacon_BS2.mwm and /dev/null differ diff --git a/Gamemode Mods/Stable/SCKoth/Models/Cubes/Large/KotHBeacon_LOD1.mwm b/Gamemode Mods/Stable/SCKoth/Models/Cubes/Large/KotHBeacon_LOD1.mwm deleted file mode 100644 index 73ecba3bc..000000000 Binary files a/Gamemode Mods/Stable/SCKoth/Models/Cubes/Large/KotHBeacon_LOD1.mwm and /dev/null differ diff --git a/Gamemode Mods/Stable/SCKoth/Textures/GUI/Icons/GoldenBlock_icon.dds b/Gamemode Mods/Stable/SCKoth/Textures/GUI/Icons/GoldenBlock_icon.dds deleted file mode 100644 index 01450abb7..000000000 Binary files a/Gamemode Mods/Stable/SCKoth/Textures/GUI/Icons/GoldenBlock_icon.dds and /dev/null differ diff --git a/Gamemode Mods/Stable/SCKoth/Textures/GUI/KotHBeacon.dds b/Gamemode Mods/Stable/SCKoth/Textures/GUI/KotHBeacon.dds deleted file mode 100644 index 0e4d8b68f..000000000 Binary files a/Gamemode Mods/Stable/SCKoth/Textures/GUI/KotHBeacon.dds and /dev/null differ diff --git a/Gamemode Mods/Stable/SCKoth/Textures/GUI/construction_components_component.dds b/Gamemode Mods/Stable/SCKoth/Textures/GUI/construction_components_component.dds deleted file mode 100644 index 60523ffbc..000000000 Binary files a/Gamemode Mods/Stable/SCKoth/Textures/GUI/construction_components_component.dds and /dev/null differ diff --git a/Gamemode Mods/Stable/SCKoth/Textures/Models/PaintedMetalColorable_add.DDS b/Gamemode Mods/Stable/SCKoth/Textures/Models/PaintedMetalColorable_add.DDS deleted file mode 100644 index fb2f2a0bb..000000000 Binary files a/Gamemode Mods/Stable/SCKoth/Textures/Models/PaintedMetalColorable_add.DDS and /dev/null differ diff --git a/Gamemode Mods/Stable/SCKoth/Textures/Models/PaintedMetalColorable_cm.DDS b/Gamemode Mods/Stable/SCKoth/Textures/Models/PaintedMetalColorable_cm.DDS deleted file mode 100644 index 131457e40..000000000 Binary files a/Gamemode Mods/Stable/SCKoth/Textures/Models/PaintedMetalColorable_cm.DDS and /dev/null differ diff --git a/Gamemode Mods/Stable/SCKoth/Textures/Models/PaintedMetalColorable_me.DDS b/Gamemode Mods/Stable/SCKoth/Textures/Models/PaintedMetalColorable_me.DDS deleted file mode 100644 index 17bed2191..000000000 Binary files a/Gamemode Mods/Stable/SCKoth/Textures/Models/PaintedMetalColorable_me.DDS and /dev/null differ diff --git a/Gamemode Mods/Stable/SCKoth/Textures/Models/PaintedMetalColorable_ng.DDS b/Gamemode Mods/Stable/SCKoth/Textures/Models/PaintedMetalColorable_ng.DDS deleted file mode 100644 index 87c33c198..000000000 Binary files a/Gamemode Mods/Stable/SCKoth/Textures/Models/PaintedMetalColorable_ng.DDS and /dev/null differ diff --git a/Gamemode Mods/Stable/SCKoth/Textures/Models/default_grey_construction_add.dds b/Gamemode Mods/Stable/SCKoth/Textures/Models/default_grey_construction_add.dds deleted file mode 100644 index 0a5cead7e..000000000 Binary files a/Gamemode Mods/Stable/SCKoth/Textures/Models/default_grey_construction_add.dds and /dev/null differ diff --git a/Gamemode Mods/Stable/SCKoth/Textures/Models/default_grey_construction_cm.dds b/Gamemode Mods/Stable/SCKoth/Textures/Models/default_grey_construction_cm.dds deleted file mode 100644 index 3ba888976..000000000 Binary files a/Gamemode Mods/Stable/SCKoth/Textures/Models/default_grey_construction_cm.dds and /dev/null differ diff --git a/Gamemode Mods/Stable/SCKoth/Textures/Models/default_grey_construction_ng.dds b/Gamemode Mods/Stable/SCKoth/Textures/Models/default_grey_construction_ng.dds deleted file mode 100644 index 529a2cc75..000000000 Binary files a/Gamemode Mods/Stable/SCKoth/Textures/Models/default_grey_construction_ng.dds and /dev/null differ diff --git a/Gamemode Mods/Stable/SCKoth/modinfo_main.sbmi b/Gamemode Mods/Stable/SCKoth/modinfo_main.sbmi deleted file mode 100644 index 321a9775c..000000000 --- a/Gamemode Mods/Stable/SCKoth/modinfo_main.sbmi +++ /dev/null @@ -1,11 +0,0 @@ - - - 76561198071098415 - 0 - - - 3032031200 - Steam - - - \ No newline at end of file diff --git a/Gamemode Mods/Stable/SCKoth/modinfo_stable.sbmi b/Gamemode Mods/Stable/SCKoth/modinfo_stable.sbmi deleted file mode 100644 index 5fa66cd89..000000000 --- a/Gamemode Mods/Stable/SCKoth/modinfo_stable.sbmi +++ /dev/null @@ -1,11 +0,0 @@ - - - 76561199117576365 - 0 - - - 3343111124 - Steam - - - diff --git a/Gamemode Mods/Stable/StarCoreCTF/Aristeas_copy to DS and client.bat b/Gamemode Mods/Stable/StarCoreCTF/Aristeas_copy to DS and client.bat deleted file mode 100644 index ecdc918a8..000000000 --- a/Gamemode Mods/Stable/StarCoreCTF/Aristeas_copy to DS and client.bat +++ /dev/null @@ -1,31 +0,0 @@ -@echo off -rem Testing mods in DS by yourself can be done without the need to re-publish every time. -rem You can simply update the files that are on your machine! -rem This will only work for you, anyone else joining the server will of course download the mod from the workshop. - -rem To use: -rem 1. Copy this .bat file in the ROOT folder of your local mod (e.g. %appdata%/SpaceEngineers/Mods/YourLocalMod/) - -rem 2. Edit this variable if applicable (do not add quotes or end with backslash). -set STEAM_PATH=C:\Program Files\Steam - -rem 3. Edit this with your mod's workshop id. -set WORKSHOP_ID=3018817811 - -rem Now you can run it every time you want to update the mod on DS and client. - - - -rem Don't edit the below unless you really need different paths. -rem NOTE: don't add quotes and don't end with a backslash! - -set CLIENT_PATH=C:\Program Files (x86)\Steam\steamapps\workshop\content\244850\%WORKSHOP_ID% -set DS_PATH=%APPDATA%\SpaceEngineersDedicated\content\244850\%WORKSHOP_ID% - -rmdir "%CLIENT_PATH%" /S /Q -rmdir "%DS_PATH%" /S /Q - -robocopy.exe .\ "%DS_PATH%" *.* /S /xd .git bin obj .vs ignored /xf *.lnk *.git* *.bat *.zip *.7z *.blend* *.md *.log *.sln *.csproj *.csproj.user *.ruleset modinfo.sbmi -robocopy.exe "%DS_PATH%" "%CLIENT_PATH%" *.* /S - -pause \ No newline at end of file diff --git a/Gamemode Mods/Stable/StarCoreCTF/CustomAudio/ctf_ping.wav b/Gamemode Mods/Stable/StarCoreCTF/CustomAudio/ctf_ping.wav deleted file mode 100644 index 88c1a3899..000000000 Binary files a/Gamemode Mods/Stable/StarCoreCTF/CustomAudio/ctf_ping.wav and /dev/null differ diff --git a/Gamemode Mods/Stable/StarCoreCTF/CustomAudio/flagcaptured.wav b/Gamemode Mods/Stable/StarCoreCTF/CustomAudio/flagcaptured.wav deleted file mode 100644 index 8d00f5ebf..000000000 Binary files a/Gamemode Mods/Stable/StarCoreCTF/CustomAudio/flagcaptured.wav and /dev/null differ diff --git a/Gamemode Mods/Stable/StarCoreCTF/CustomAudio/flagdropped.wav b/Gamemode Mods/Stable/StarCoreCTF/CustomAudio/flagdropped.wav deleted file mode 100644 index a7515772a..000000000 Binary files a/Gamemode Mods/Stable/StarCoreCTF/CustomAudio/flagdropped.wav and /dev/null differ diff --git a/Gamemode Mods/Stable/StarCoreCTF/CustomAudio/flagreset.wav b/Gamemode Mods/Stable/StarCoreCTF/CustomAudio/flagreset.wav deleted file mode 100644 index 8bcfe08c9..000000000 Binary files a/Gamemode Mods/Stable/StarCoreCTF/CustomAudio/flagreset.wav and /dev/null differ diff --git a/Gamemode Mods/Stable/StarCoreCTF/CustomAudio/flagtaken.wav b/Gamemode Mods/Stable/StarCoreCTF/CustomAudio/flagtaken.wav deleted file mode 100644 index ac3c17935..000000000 Binary files a/Gamemode Mods/Stable/StarCoreCTF/CustomAudio/flagtaken.wav and /dev/null differ diff --git a/Gamemode Mods/Stable/StarCoreCTF/Data/Prefabs/IT'S OVER.sbc b/Gamemode Mods/Stable/StarCoreCTF/Data/Prefabs/IT'S OVER.sbc deleted file mode 100644 index 013c93b48..000000000 --- a/Gamemode Mods/Stable/StarCoreCTF/Data/Prefabs/IT'S OVER.sbc +++ /dev/null @@ -1,294 +0,0 @@ - - - - - - - - - 142134886171516079 - CastShadows InScene - - - - - - 6.322026E-08 - -0.70710665 - -6.32202841E-08 - 0.7071069 - - - - Large - - - LargeHydrogenTankSmall - 109936377142905508 - - Faction - - - - MyInventoryBase - - - 0 - 0.75 - 9223372036854.775807 - 2147483647 - - CanReceive - false - - - - - false - true - true - true - 1 - true - false - 0.5 - false - - - LargeBlockSmallHydrogenThrust - 104688770131177049 - - - - - - - MyTimerComponent - - true - 0 - 0 - true - false - Frame100 - 0 - 100 - false - - - - - false - true - true - true - 1 - true - - - LargeBlockBatteryBlock - 136005098091321937 - - - - Faction - false - true - true - true - 1 - true - 3 - true - 0 - false - false - 0 - - - LargeFlightMovement - 75682648873056523 - - - - Faction - - - - MyAutopilotComponent - - true - 0 - -1 - - false - false - 0 - 550 - false - 0 - - - - - false - 25 - false - - 0 - 0 - 0 - - 0.7853982 - 0.7853982 - - - - MyAiBlockComponent - - true - - - - - false - true - true - true - 1 - true - - - LargeOffensiveCombat - 102969381610143975 - - - Faction - - - - MySearchEnemyComponent - - 2 - Propulsion - 0 - - - - MyOffensiveCombatCircleOrbit - - 100 - false - - false - 0 - - - - MyOffensiveCombatStayAtRange - - 199 - 200 - - false - 0 - - - - MyOffensiveCombatHitAndRun - - 5000 - 10000 - 30 - 90 - - - None - - 0 - 0 - 0 - - - -28530 - - - - - MyOffensiveCombatIntercept - - TargetPrediction - true - - - - MyAiBlockComponent - - true - - - - - false - true - true - true - 1 - true - Closest - 11 - 3 - false - - - LargeBlockArmorBlock - 132720570331182948 - - - - Faction - false - true - true - true - 1 - 10000 - true - false - - - LargeBlockGyro - 87381031567973673 - - - - Faction - false - true - true - true - 1 - true - - - - - - Up - - Down - - LARGE_LINE - - - IT'S OVER - true - false - 0 - - - - None - - - \ No newline at end of file diff --git a/Gamemode Mods/Stable/StarCoreCTF/Data/Prefabs/IT'S OVER.sbcB5 b/Gamemode Mods/Stable/StarCoreCTF/Data/Prefabs/IT'S OVER.sbcB5 deleted file mode 100644 index f3d38992a..000000000 Binary files a/Gamemode Mods/Stable/StarCoreCTF/Data/Prefabs/IT'S OVER.sbcB5 and /dev/null differ diff --git a/Gamemode Mods/Stable/StarCoreCTF/Data/Scripts/CTF/CTF.cs b/Gamemode Mods/Stable/StarCoreCTF/Data/Scripts/CTF/CTF.cs deleted file mode 100644 index bb2a6215b..000000000 --- a/Gamemode Mods/Stable/StarCoreCTF/Data/Scripts/CTF/CTF.cs +++ /dev/null @@ -1,1454 +0,0 @@ -using System.Collections.Generic; -using Sandbox.Game; -using Sandbox.ModAPI; -using VRage.Game; -using VRage.Game.Components; -using VRage.Game.ModAPI; -using VRageMath; -using Draygo.API.SC; -using VRage.Game.Entity; -using System; -using VRage.ModAPI; -using Sandbox.Game.Entities; -using VRage.Utils; -using BlendTypeEnum = VRageRender.MyBillboard.BlendTypeEnum; -using System.Linq; -using VRage.ObjectBuilders; -using VRage.Game.ModAPI.Ingame.Utilities; -using System.Text; -using Jnick_SCModRepository.StarCoreCTF.Data.Scripts.CTF; -using Jnick_SCModRepository.StarCoreCTF.Data.Scripts.CTF.Packets; -using System.Runtime.InteropServices; -using VRage.Input; - -namespace Klime.CTF -{ - [MySessionComponentDescriptor(MyUpdateOrder.AfterSimulation)] - public class CTF : MySessionComponentBase - { - #region Config - - const int FlagRecaptureTimeTicks = 60; - Vector3D gamecenter = Vector3D.Zero; - bool use_game_radius = false; - double radius = 5000; - int max_caps = 3; - bool pickup_in_cockpit = false; - bool drop_in_cockpit = false; - DropType drop_type = DropType.Ground; - int drop_reset_time = 300; - double flagPickupRadius = 500; - - #endregion - - - - private static readonly StringBuilder GripBracketConst = new StringBuilder("[ ]"); - private static readonly StringBuilder DMGResistConst = new StringBuilder("RESIST+"); - - - List allflags = new List(); - GameState gamestate; - MyStringId square; - MyStringId laser; - List allplayers = new List(); - Dictionary allplayerdict = new Dictionary(); - List reuse_players = new List(); - List background_elements = new List(); - MatrixD reuse_matrix = MatrixD.Identity; - PacketBase packet; - string ModelPath = ""; - int timer = 0; - - public static CTF instance; - public MyStringHash deformationType; - - - - Type reuse_type = typeof(MyObjectBuilder_EntityBase); - MyIni ini = new MyIni(); - bool rdy = false; - ushort netid = 45049; - ushort eventnetid = 45823; - - //Single Factions - IMyFaction faction1global; - IMyFaction faction2global; - public enum PacketOp - { - InitFromServer, - RequestFromClient, - UpdateFlags, - UpdateGameState - } - - public enum FlagState - { - Home, - Active, - Dropped - } - - public enum CurrentGameState - { - None, - Combat, - Victory - } - - public enum DropType - { - Instant, - Ground, - Floating, - Attached - } - - public enum InfoType - { - None, - FlagCaptured, - FlagDropped, - FlagReset, - FlagTaken, - } - - public enum BackgroundType - { - Billboard, - Text - } - - public enum FlagType - { - Single, - Double - } - - MyEntity3DSoundEmitter emitter; - MySoundPair ctf_ping; - HudAPIv2 HUD_Base; - HudAPIv2.HUDMessage score_message; - StringBuilder score_sb = new StringBuilder(); - HudAPIv2.HUDMessage event_message; - StringBuilder event_sb = new StringBuilder(); - int event_clock = 0; - MyPlanet reuse_planet; - List reuse_Entities = new List(); - EventInfo reuse_event; - - public class BackgroundUIElement - { - public HudAPIv2.BillBoardHUDMessage billboard; - public HudAPIv2.HUDMessage text; - public BackgroundType background_type; - - public BackgroundUIElement(HudAPIv2.BillBoardHUDMessage billboard) - { - this.billboard = billboard; - this.text = null; - background_type = BackgroundType.Billboard; - } - - public BackgroundUIElement(HudAPIv2.HUDMessage text) - { - this.billboard = null; - this.text = text; - background_type = BackgroundType.Text; - } - } - - public override void Init(MyObjectBuilder_SessionComponent sessionComponent) - { - MyAPIGateway.Multiplayer.RegisterMessageHandler(netid, Data_Handler); - MyAPIGateway.Multiplayer.RegisterMessageHandler(eventnetid, Event_Handler); - - if (!MyAPIGateway.Session.IsServer) return; - instance = this; - - MyAPIGateway.Session.DamageSystem.RegisterBeforeDamageHandler(0, DamageHandler); - - } - - private void Event_Handler(byte[] obj) - { - if (!MyAPIGateway.Utilities.IsDedicated) - { - //reuse_event = NetworkDebug.DeserializeLogged("EventInfo", obj); - reuse_event = MyAPIGateway.Utilities.SerializeFromBinary(obj); - if (reuse_event != null) - { - if (HUD_Base != null && HUD_Base.Heartbeat) - { - event_sb.Clear(); - event_sb.Append(reuse_event.info); - event_clock = timer + 120; - } - - if (MyAPIGateway.Session.Player?.Character != null) - { - if (emitter == null) - { - emitter = new MyEntity3DSoundEmitter((MyEntity)MyAPIGateway.Session.Player.Character); - ctf_ping = new MySoundPair("ctf_ping"); - } - if (emitter != null) - { - ctf_ping.Init(reuse_event.infotype.ToString()); - if (ctf_ping != null) - { - emitter.Entity = (MyEntity)MyAPIGateway.Session.Player.Character; - emitter.SetPosition(MyAPIGateway.Session.Camera.WorldMatrix.Translation); - emitter.PlaySound(ctf_ping, force2D: true); - } - } - } - } - } - } - - private void Data_Handler(byte[] obj) - { - if (!MyAPIGateway.Session.IsServer) - { - //packet = NetworkDebug.DeserializeLogged("GenericUpdate", obj); - packet = MyAPIGateway.Utilities.SerializeFromBinary(obj); - - if (packet != null) - { - //MyLog.Default.WriteLine($"[CTF] Received Packet: {packet.packet_op}"); - if (packet.packet_op == PacketOp.UpdateFlags) - { - //LogPacketDetails("UpdateFlags", packet.all_flags_packet.Count); // Log additional details - if (allflags.Count == 0) - { - foreach (var subflag in packet.all_flags_packet) - { - subflag.flag_entity = PrimeEntityActivator(); - subflag.flag_entity.EntityId = subflag.entity_id; - - subflag.owning_faction = MyAPIGateway.Session.Factions.TryGetFactionById(subflag.owning_faction_id); - allflags.Add(subflag); - } - } - - for (int i = 0; i < packet.all_flags_packet.Count; i++) - { - allflags[i].UpdateFromNetwork(packet.all_flags_packet[i]); - } - } - - if (packet.packet_op == PacketOp.UpdateGameState) - { - gamestate = packet.gamestate_packet; - //LogPacketDetails("UpdateGameState", gamestate.ToString()); // Log additional details - } - - } - } - } - - private void LogPacketDetails(string operation, object details) - { - // Customize this method based on what details you want to log - MyLog.Default.WriteLine($"[CTF] Operation: {operation}, Details: {details}"); - } - - private void AddBillboard(Color color, Vector3D pos, Vector3D left, Vector3D up, float scale, BlendTypeEnum blendType) - { - MyTransparentGeometry.AddBillboardOriented(laser, color.ToVector4(), pos, left, up, scale, blendType); - } - - public void GetConfig() - { - try - { - if (MyAPIGateway.Session.IsServer) - { - string save_file_name = "CTFCONFIG.txt"; - - if (MyAPIGateway.Utilities.FileExistsInWorldStorage(save_file_name, reuse_type)) - { - var file = MyAPIGateway.Utilities.ReadFileInWorldStorage(save_file_name, reuse_type).ReadToEnd(); - ini = new MyIni(); - MyIniParseResult res; - if (ini.TryParse(file, out res)) - { - bool is_single_flag = ini.Get("Single Flag", "bool").ToBoolean(); - if (is_single_flag) - { - string single_flag_data_string = ini.Get("Single Flag Data", "string").ToString(); - List data = single_flag_data_string.Split('@').ToList(); - Vector3D single_flag_homepostemp = Vector3D.Zero; - Vector3D capture_pos_reuse = Vector3D.Zero; - IMyFaction faction1; - IMyFaction faction2; - SerializableMatrix capture_pos_faction1; - SerializableMatrix capture_pos_faction2; - Dictionary capture_positions = new Dictionary(); - List single_flag_color_string = new List(); - - ParseVector3DFromGPS(data[0], out single_flag_homepostemp); - - faction1 = MyAPIGateway.Session.Factions.TryGetFactionByTag(data[1]); - faction2 = MyAPIGateway.Session.Factions.TryGetFactionByTag(data[2]); - ParseVector3DFromGPS(data[3], out capture_pos_reuse); - capture_pos_faction1 = GetHomePosition(capture_pos_reuse); - ParseVector3DFromGPS(data[4], out capture_pos_reuse); - capture_pos_faction2 = GetHomePosition(capture_pos_reuse); - capture_positions.Add(faction1.FactionId, capture_pos_faction1); - capture_positions.Add(faction2.FactionId, capture_pos_faction2); - single_flag_color_string = data[5].Split(',').ToList(); - Color single_flag_color = new Color(int.Parse(single_flag_color_string[0]), int.Parse(single_flag_color_string[1]), int.Parse(single_flag_color_string[2]), - int.Parse(single_flag_color_string[3])); - - Flag single_flag = new Flag(PrimeEntityActivator().EntityId, FlagState.Home, single_flag_homepostemp, capture_positions, 0, single_flag_color, - FlagType.Single, 100f, 0.2f, 0); - - single_flag.Init(); - allflags.Add(single_flag); - } - else - { - Vector3D flag_1_temp_pos = Vector3D.Zero; - Vector3D flag_2_temp_pos = Vector3D.Zero; - IMyFaction faction1; - IMyFaction faction2; - List flag_1_color_string = new List(); - List flag_2_color_string = new List(); - - //Flag settings - ParseVector3DFromGPS(ini.Get("Flag Position Faction 1", "GPS").ToString(), out flag_1_temp_pos); - ParseVector3DFromGPS(ini.Get("Flag Position Faction 2", "GPS").ToString(), out flag_2_temp_pos); - faction1 = MyAPIGateway.Session.Factions.TryGetFactionByTag(ini.Get("Faction 1 Tag", "string").ToString()); - faction2 = MyAPIGateway.Session.Factions.TryGetFactionByTag(ini.Get("Faction 2 Tag", "string").ToString()); - - flag_1_color_string = ini.Get("Faction 1 Color", "string").ToString().Split(',').ToList(); - flag_2_color_string = ini.Get("Faction 2 Color", "string").ToString().Split(',').ToList(); - - Color flag_1_color = new Color(int.Parse(flag_1_color_string[0]), int.Parse(flag_1_color_string[1]), int.Parse(flag_1_color_string[2]), - int.Parse(flag_1_color_string[3])); - Color flag_2_color = new Color(int.Parse(flag_2_color_string[0]), int.Parse(flag_2_color_string[1]), int.Parse(flag_2_color_string[2]), - int.Parse(flag_2_color_string[3])); - - Flag flag1 = new Flag(PrimeEntityActivator().EntityId, FlagState.Home, flag_1_temp_pos, faction1.FactionId, flag_1_color, FlagType.Double, 100, 0.2f, 0); - Flag flag2 = new Flag(PrimeEntityActivator().EntityId, FlagState.Home, flag_2_temp_pos, faction2.FactionId, flag_2_color, FlagType.Double, 100, 0.2f, 0); - - flag1.Init(); - flag2.Init(); - - allflags.Add(flag1); - allflags.Add(flag2); - } - //Game settings - use_game_radius = ini.Get("Use Game Radius", "bool").ToBoolean(); - ParseVector3DFromGPS(ini.Get("Game Center", "GPS").ToString(), out gamecenter); - radius = ini.Get("Game Radius", "double").ToDouble(); - max_caps = ini.Get("Max Caps", "int").ToInt32(); - pickup_in_cockpit = ini.Get("Pickup in Cockpit", "bool").ToBoolean(); - drop_in_cockpit = ini.Get("Drop in Cockpit", "bool").ToBoolean(); - drop_type = (DropType)Enum.Parse(typeof(DropType), ini.Get("Drop Type", "Instant/Ground/Floating").ToString(), true); - drop_reset_time = ini.Get("Drop Reset Time", "int").ToInt32(); - rdy = true; - } - else - { - MyVisualScriptLogicProvider.SendChatMessageColored("Incorrect or missing CTF config. Blank config generated", Color.Orange, "Server"); - CreateBlankFile(); - rdy = false; - } - } - else - { - MyVisualScriptLogicProvider.SendChatMessageColored("Incorrect or missing CTF config. Blank config generated", Color.Orange, "Server"); - CreateBlankFile(); - rdy = false; - } - } - } - catch (Exception e) - { - MyVisualScriptLogicProvider.SendChatMessageColored("Incorrect or missing CTF config. Blank config generated\n" + e, Color.Orange, "Server"); - MyLog.Default.WriteLineAndConsole("Incorrect or missing CTF config. Blank config generated\n" + e); - CreateBlankFile(); - rdy = false; - } - } - - private void CreateBlankFile() - { - ini = new MyIni(); - ini.Set("Flag Position Faction 1", "GPS", "GPSHERE"); - ini.Set("Flag Position Faction 2", "GPS", "GPSHERE"); - ini.Set("Faction 1 Tag", "string", "TAG1"); - ini.Set("Faction 2 Tag", "string", "TAG2"); - ini.Set("Faction 1 Color", "string", "255,0,0,255"); - ini.Set("Faction 2 Color", "string", "0,0,255,255"); - ini.Set("Use Game Radius", "bool", false); - ini.Set("Game Center", "GPS", "GPSHERE"); - ini.Set("Game Radius", "double", 5000); - ini.Set("Max Caps", "int", 3); - ini.Set("Pickup in Cockpit", "bool", false); - ini.Set("Drop in Cockpit", "bool", false); - ini.Set("Drop Type", "Instant/Ground/Floating", "Ground"); - ini.Set("Drop Reset Time", "int", 3000); - ini.Set("Single Flag", "bool", false); - ini.Set("Single Flag Data", "string", "ReplaceThis"); - ini.SetEndComment("DELETE THE _blank part of the filename to make it a valid config"); - var fullstring = ini.ToString(); - - var writer = MyAPIGateway.Utilities.WriteFileInWorldStorage("CTFCONFIG_blank.txt", reuse_type); - writer.Write(fullstring); - writer.Close(); - } - - private SerializableMatrix GetHomePosition(Vector3D pos) - { - SerializableMatrix mat = MatrixD.Identity; - - // Set the flag's home position directly to the provided position - mat = MatrixD.CreateWorld(pos, Vector3D.Forward, Vector3D.Up); - - return mat; - } - - public override void BeforeStart() - { - ModelPath = ModContext.ModPath + @"\Models\flagpole.mwm"; - square = MyStringId.GetOrCompute("Square"); - laser = MyStringId.GetOrCompute("WeaponLaser"); - if (!MyAPIGateway.Utilities.IsDedicated) - { - if (HUD_Base == null) - { - HUD_Base = new HudAPIv2(HUDLoaded); - } - } - } - - HudAPIv2.BillBoardHUDMessage score_billboard; - - private void HUDLoaded() - { - score_billboard = new HudAPIv2.BillBoardHUDMessage(); - score_billboard.BillBoardColor = new Color(Color.White, 1); - score_billboard.Material = MyStringId.GetOrCompute("ctf_score_background"); - score_billboard.Origin = new Vector2D(-0.33, 0.85); - score_billboard.Scale *= 0.5f; - score_billboard.Height *= 0.6f; - score_billboard.Visible = true; - score_billboard.Options |= HudAPIv2.Options.HideHud; - score_billboard.Blend = BlendTypeEnum.AdditiveBottom; - BackgroundUIElement element = new BackgroundUIElement(score_billboard); - background_elements.Add(element); - - score_message = new HudAPIv2.HUDMessage(); - score_message.Blend = BlendTypeEnum.PostPP; - score_message.InitialColor = Color.White; - score_message.Message = score_sb; - score_message.Visible = true; - score_message.Origin = new Vector2D(-0.4, 0.97); - score_message.Options |= HudAPIv2.Options.HideHud; - score_message.Blend = BlendTypeEnum.PostPP; - score_message.Scale = 1.5f; - - event_message = new HudAPIv2.HUDMessage(); - event_message.Blend = BlendTypeEnum.PostPP; - event_message.Message = event_sb; - event_message.Visible = true; - event_message.Origin = new Vector2D(-0.18, 0.5); - event_message.Options |= HudAPIv2.Options.HideHud; - event_message.Scale = 2f; - event_message.InitialColor = Color.DarkOrange; - - } - - public HashSet damagedGrids = new HashSet(); - Dictionary playerDropTimes = new Dictionary(); - - - private void DamageHandler(object target, ref MyDamageInformation info) - { - - IMySlimBlock block = target as IMySlimBlock; - - if (block == null || block.CubeGrid == null || block.CubeGrid.WorldMatrix == null) return; - - - var freshlydamaged_gridEntityId = block.CubeGrid.EntityId; - - foreach (var subflag in allflags) - { - if (subflag.state == FlagState.Active) - { - IMyEntity controlledEntity = subflag.carrying_player.Controller != null ? subflag.carrying_player.Controller.ControlledEntity.Entity : null; - if (controlledEntity is IMyCockpit) - { - IMyCockpit cockpit = (IMyCockpit)controlledEntity; - long gridEntityId = cockpit.CubeGrid.EntityId; - - if (gridEntityId == freshlydamaged_gridEntityId) - { - damagedGrids.Add(gridEntityId); - disableGripRegen = true; // Set the flag to disable regeneration - } - } - } - } - } - - float damageReductionCounter = 0.0f; - bool disableGripRegen = false; // Declare this member variable - - private string GenerateGripBar(float gripStrength, bool isActiveFlag) - { - int totalBars = 10; - int filledBars = (int)Math.Round(gripStrength / 10f); // Assuming gripStrength is out of 100 - string gripBar = new string('|', filledBars); - - // If the flag is active, add brackets around the grip bar - //if (isActiveFlag) - //{ - // gripBar = "[" + gripBar + "]"; - //} - - return gripBar; - } - - - private bool victoryTriggered = false; - private int victoryTimer = 0; - private int friendlyreturntimer = 0; - private const int SpawnInterval = 600; // 10 seconds * 60 updates per second - private const int TotalVictoryDuration = 3600; // 60 seconds * 60 updates per second - - - public override void UpdateAfterSimulation() - { - try - { - - HandleUserInput(); - - if (timer % 60 == 0) - { - allplayers.Clear(); - allplayerdict.Clear(); - MyAPIGateway.Multiplayer.Players.GetPlayers(allplayers); - - foreach (var player in allplayers) - allplayerdict.Add(player.IdentityId, player); - - if (MyAPIGateway.Session.IsServer) - SendGameState(); - } - if (MyAPIGateway.Session.IsServer) - { - if (timer == 10) - { - GetConfig(); - if (rdy) - { - gamestate = new GameState(CurrentGameState.Combat, allflags); - } - } - - if (rdy) - { - if (gamestate.currentgamestate == CurrentGameState.Combat) - { - foreach (var val in gamestate.faction_scores.Keys) - { - if (gamestate.faction_scores[val] >= max_caps) - { - gamestate.currentgamestate = CurrentGameState.Victory; - gamestate.winning_tag = MyAPIGateway.Session.Factions.TryGetFactionById(val).Tag; - } - } - - foreach (var subflag in allflags) - { - - if (subflag.state == FlagState.Home) - { - - subflag.flag_entity.WorldMatrix = MatrixD.CreateWorld(subflag.homePos); - - - foreach (var player in subflag.GetNearbyPlayers(ref allplayers, ref reuse_players, pickup_in_cockpit, flagPickupRadius)) - { - IMyEntity controlledEntity = player.Controller != null ? player.Controller.ControlledEntity.Entity : null; - if (pickup_in_cockpit && !(controlledEntity is IMyCockpit)) - { - continue; - } - string faction_tag = MyVisualScriptLogicProvider.GetPlayersFactionTag(player.IdentityId); - if (subflag.flag_type == FlagType.Single) - { - if (faction_tag != "") - { - IMyCockpit cockpit = (IMyCockpit)controlledEntity; - long gridEntityId = cockpit.CubeGrid.EntityId; - subflag.state = FlagState.Active; - ShowANotificationPlease("flag set to active 1"); - subflag.carrying_player_id = player.IdentityId; - subflag.carrying_player = player; - SendEvent(player.DisplayName + " grabbed the flag!", InfoType.FlagTaken); - MyVisualScriptLogicProvider.SetGridGeneralDamageModifier(cockpit.CubeGrid.Name, 0.5f); - - } - } - else - { - if (faction_tag != "" && faction_tag != subflag.owning_faction.Tag) - { - - IMyCockpit cockpit = (IMyCockpit)controlledEntity; - long gridEntityId = cockpit.CubeGrid.EntityId; - subflag.state = FlagState.Active; - ShowANotificationPlease("flag set to active 2"); - subflag.carrying_player_id = player.IdentityId; - subflag.carrying_player = player; - SendEvent(player.DisplayName + " stole " + subflag.owning_faction.Tag + " flag!", InfoType.FlagTaken); - MyVisualScriptLogicProvider.SetGridGeneralDamageModifier(cockpit.CubeGrid.Name, 0.5f); - - } - } - } - } - - if (subflag.state == FlagState.Active) - { - - //put any more IsActive logic here, if you put it last it wont get detected. this took forever to figure out. - - if (!allplayerdict.ContainsKey(subflag.carrying_player_id)) - { - // Player has disconnected, drop the flag - subflag.state = FlagState.Dropped; - subflag.carrying_player_id = -1; - subflag.carrying_player = null; - subflag.grip_strength = 100; // Reset grip strength or any other necessary reset logic - - // Additional logic for dropping the flag, like sending notifications - SendEvent("Flag dropped due to player disconnect!", InfoType.FlagDropped); - - //start the flag drop cooldown - playerDropTimes[subflag.carrying_player.IdentityId] = timer; - - } - - - IMyEntity controlledEntity = subflag.carrying_player.Controller != null ? subflag.carrying_player.Controller.ControlledEntity.Entity : null; - if (pickup_in_cockpit && !(controlledEntity is IMyCockpit)) - { - subflag.state = FlagState.Dropped; - ShowANotificationPlease("flag state set to dropped 1"); - SendEvent(subflag.carrying_player.DisplayName + " dropped the flag due to leaving cockpit!", InfoType.FlagDropped); - playerDropTimes[subflag.carrying_player.IdentityId] = timer; - - continue; // Skip the rest of the logic for this flag - } - if (controlledEntity is IMyCockpit) - { - IMyCockpit cockpit = (IMyCockpit)controlledEntity; - long gridEntityId = cockpit.CubeGrid.EntityId; - - // Damage handling - if (damagedGrids.Contains(gridEntityId)) - { - if (damageReductionCounter < 10.0f) - { - float gripLoss = 1.0f; // Loss per damage instance - float newGripStrength = subflag.grip_strength - gripLoss; - subflag.grip_strength = newGripStrength; - - damageReductionCounter += gripLoss; - } - - damagedGrids.Remove(gridEntityId); - } - - // Reset the damageReductionCounter every second (assuming this block runs every frame and there are 60 frames per second) - if (timer % 60 == 0) - { - damageReductionCounter = 0.0f; - disableGripRegen = false; // Reset the flag - } - - //var speenAcceleration = cockpit.CubeGrid.Physics.AngularAcceleration.Length(); - var linearAcceleration = cockpit.CubeGrid.Physics.LinearAcceleration.Length(); - var funpolice = cockpit.CubeGrid.Physics.LinearVelocity.Length(); - var totalAcceleration = /*speenAcceleration + */linearAcceleration; - - // Adjust grip strength regeneration based on acceleration - float deltaV = totalAcceleration; //- subflag.lastTickAcceleration; - // subflag.lastTickAcceleration = totalAcceleration; - - float regenModifier = 0.2f - (deltaV / 100f); // 0.2 is the base regen rate, and we subtract a value based on acceleration - - if (deltaV >= 10 || funpolice >= 200) // If the deltaV is more than 1, adjust the regenModifier - { - subflag.regen_modifier = regenModifier; - - } - else { subflag.regen_modifier = 0.25f; } - - - var grip_temp = subflag.grip_strength; - - var regen_temp = subflag.regen_modifier; - - if (grip_temp >= 50) - { - MathHelper.Clamp(regen_temp, -49, 49); - } - - if (!disableGripRegen) // Halt grip regeneration if flag is set - { - subflag.grip_strength += regen_temp; - } - - - //give the flagbearer damage resistance to their grid! - if (controlledEntity is IMyCockpit) - { - - MyVisualScriptLogicProvider.SetGridGeneralDamageModifier(cockpit.CubeGrid.Name, 0.5f); // Applying 0.5x damage modifier - } - - - // MathHelper.Smooth(regen_temp, subflag.grip_strength); - - if (subflag.grip_strength > 100) subflag.grip_strength = 100; - // Cap grip strength to 100 - if (subflag.grip_strength < 0) - { - subflag.grip_strength = 0; //Cap grip strength to 0 - subflag.state = FlagState.Dropped; - ShowANotificationPlease("flag dropped 2"); - SendEvent(subflag.carrying_player.DisplayName + " dropped " + subflag.owning_faction.Tag + " the flag!", InfoType.FlagDropped); - MyVisualScriptLogicProvider.SetGridGeneralDamageModifier(cockpit.CubeGrid.Name, 1.0f); // Applying 0.5x damage modifier - - playerDropTimes[subflag.carrying_player.IdentityId] = timer; - } - } - if (subflag.carrying_player != null && subflag.carrying_player.Character != null && !subflag.carrying_player.Character.IsDead) - { - // Existing logic for setting flag position - reuse_matrix = subflag.carrying_player.Character.WorldMatrix; - reuse_matrix.Translation += reuse_matrix.Backward * 0.4f + reuse_matrix.Up * 1.5f + reuse_matrix.Left * 0.25f; - subflag.flag_entity.WorldMatrix = reuse_matrix; - - IMyCockpit cockpit = (IMyCockpit)controlledEntity; - long gridEntityId = cockpit.CubeGrid.EntityId; - - // Check for cockpit and drop flag if conditions are met - if (drop_in_cockpit && !pickup_in_cockpit) - { - if (controlledEntity is IMyCockpit) - { - subflag.state = FlagState.Dropped; - ShowANotificationPlease("flag dropped 3"); - SendEvent(subflag.carrying_player.DisplayName + " dropped " + subflag.owning_faction.Tag + " flag!", InfoType.FlagDropped); - MyVisualScriptLogicProvider.SetGridGeneralDamageModifier(cockpit.CubeGrid.Name, 1.0f); - - } - } - - - if (use_game_radius) - { - if (Vector3D.Distance(gamecenter, subflag.flag_entity.WorldMatrix.Translation) >= radius) - { - subflag.carrying_player.Character.Kill(); - subflag.state = FlagState.Dropped; - ShowANotificationPlease("flag dropped 4"); - SendEvent(subflag.carrying_player.DisplayName + " dropped " + subflag.owning_faction.Tag + " flag!", InfoType.FlagDropped); - MyVisualScriptLogicProvider.SetGridGeneralDamageModifier(cockpit.CubeGrid.Name, 1.0f); - - } - } - - if (subflag.flag_type == FlagType.Single) - { - IMyFaction carrying_faction = MyAPIGateway.Session.Factions.TryGetPlayerFaction(subflag.carrying_player.IdentityId); - if (carrying_faction != null) - { - foreach (var faction in subflag.capture_positions.Keys) - { - if (faction == carrying_faction.FactionId) - { - Vector3D capture_pos = ((MatrixD)subflag.capture_positions[faction]).Translation; - - double distance = Vector3D.Distance(subflag.flag_entity.WorldMatrix.Translation, capture_pos); - bool valid_cap = false; - - if (pickup_in_cockpit) - { - if (distance <= 250) - { - valid_cap = true; - } - } - else - { - if (distance <= 200) - { - valid_cap = true; - } - } - - if (valid_cap) - { - subflag.state = FlagState.Home; - ShowANotificationPlease("flag home 1"); - gamestate.UpdateScore(faction); - SendEvent(subflag.carrying_player.DisplayName + " captured the flag!", InfoType.FlagCaptured); - } - } - } - } - } - else - { - foreach (var otherflag in allflags) - { - if ((otherflag.flag_entity.EntityId != subflag.entity_id) && otherflag.state == FlagState.Home) - { - double distance = Vector3D.Distance(subflag.flag_entity.WorldMatrix.Translation, otherflag.flag_entity.WorldMatrix.Translation); - bool valid_cap = false; - - if (pickup_in_cockpit) - { - if (distance <= 250) - { - valid_cap = true; - } - } - else - { - if (distance <= 200) - { - valid_cap = true; - } - } - - if (valid_cap) - { - subflag.state = FlagState.Home; - ShowANotificationPlease("flag home validcap"); - otherflag.state = FlagState.Home; - - gamestate.UpdateScore(otherflag.owning_faction.FactionId); - SendEvent(subflag.carrying_player.DisplayName + " captured " + subflag.owning_faction.Tag + " flag!", InfoType.FlagCaptured); - } - } - } - } - } - else - { - IMyCockpit cockpit = (IMyCockpit)controlledEntity; - long gridEntityId = cockpit.CubeGrid.EntityId; - - subflag.state = FlagState.Dropped; - ShowANotificationPlease("flag dropped 4"); - if (subflag.flag_type == FlagType.Single) - { - SendEvent(subflag.carrying_player.DisplayName + " dropped the flag!", InfoType.FlagDropped); - MyVisualScriptLogicProvider.SetGridGeneralDamageModifier(cockpit.CubeGrid.Name, 1.0f); - - } - else - { - SendEvent(subflag.carrying_player.DisplayName + " dropped " + subflag.owning_faction.Tag + " flag!", InfoType.FlagDropped); - MyVisualScriptLogicProvider.SetGridGeneralDamageModifier(cockpit.CubeGrid.Name, 1.0f); - - } - } - - //if you enter a safezone, this is supposed to drop, but it also happens when damage is off. also it needs a cooldown. so ill just turn it off for now - - //if (subflag.state == FlagState.Active) - //{ - // if (!MySessionComponentSafeZones.IsActionAllowed(subflag.flag_entity.WorldMatrix.Translation, CastProhibit(MySessionComponentSafeZones.AllowedActions, 1))) - // { - // subflag.state = FlagState.Home; - // ShowANotificationPlease("flag home 3"); - // if (subflag.flag_type == FlagType.Single) - // { - // SendEvent(subflag.carrying_player.DisplayName + " dropped the flag from entering a safezone!", InfoType.FlagDropped); - // } - // else - // { - // SendEvent(subflag.carrying_player.DisplayName + " dropped " + subflag.owning_faction.Tag + " flag!", InfoType.FlagDropped); - // } - // } - //} - - - - } - - CheckDroppedFlagState(subflag); - - subflag.current_pos = subflag.flag_entity.WorldMatrix.Translation; - Matrix3x3 rotationOnlyMatrix = subflag.flag_entity.WorldMatrix.Rotation; - Quaternion.CreateFromRotationMatrix(ref rotationOnlyMatrix, out subflag.current_rotation); - subflag.lifetime += 1; - - if (gamestate.currentgamestate == CurrentGameState.Victory) - { - foreach (var flag in allflags) - { - flag.flag_entity.WorldMatrix = MatrixD.CreateWorld(flag.homePos); - } - } - - if (gamestate.currentgamestate == CurrentGameState.Victory) - { - if (!victoryTriggered) - { - victoryTriggered = true; - victoryTimer = 0; - } - - if (victoryTimer % SpawnInterval == 0 && victoryTimer <= TotalVictoryDuration) - { - string winningFactionTag = gamestate.winning_tag; - IMyFaction winningFaction = MyAPIGateway.Session.Factions.TryGetFactionByTag(winningFactionTag); - - // Determine number of prefabs to spawn (1 to 5) - int spawnCount = MyUtils.GetRandomInt(1, 6); - - for (int i = 0; i < spawnCount; i++) - { - // Generate a random offset - Vector3D offset = new Vector3D( - MyUtils.GetRandomDouble(-100, 100), // X-axis offset - MyUtils.GetRandomDouble(-100, 100), // Y-axis offset - MyUtils.GetRandomDouble(-100, 100) // Z-axis offset - ); - - // Choose a prefab and calculate spawn location with offset - string prefabName = "IT'S OVER"; // Replace with your desired prefab - Vector3D baseSpawnPosition = new Vector3D(0, 7000, 0); // Base spawn position - Vector3D spawnPosition = baseSpawnPosition + offset; // Apply offset to base position - - Vector3D direction = Vector3D.Forward; - Vector3D up = Vector3D.Up; - - // Spawn the prefab - List resultList = new List(); - IMyPrefabManager prefabManager = MyAPIGateway.PrefabManager; - prefabManager.SpawnPrefab(resultList, prefabName, spawnPosition, direction, up, ownerId: winningFaction?.FounderId ?? 0, spawningOptions: SpawningOptions.None); - - // Set ownership of the spawned prefab to the winning faction - foreach (IMyCubeGrid spawnedGrid in resultList) - { - spawnedGrid.ChangeGridOwnership(winningFaction?.FounderId ?? 0, MyOwnershipShareModeEnum.All); - } - } - } - - victoryTimer += 1; - } - else - { - victoryTriggered = false; - victoryTimer = 0; - } - - } - - if (packet == null) - { - packet = new PacketBase(); - } - - SendFlagState(); - } - - } - } - } - catch (Exception e) - { - MyAPIGateway.Utilities.ShowMessage("CTFMod", e.ToString()); - MyLog.Default.WriteLineAndConsole("Exception in CTFMod.UpdateAfterSimulation():\n" + e); - } - - timer += 1; - } - - private void HandleUserInput() - { - - // Check if Ctrl key is pressed - if (MyAPIGateway.Input.IsAnyCtrlKeyPressed()) - { - // Check if M key is pressed - if (MyAPIGateway.Input.IsNewKeyPressed(MyKeys.M)) - { - // Toggle the visibility of the scoreboard - score_billboard.Visible = !score_billboard.Visible; - score_message.Visible = !score_message.Visible; - - - } - } - } - - - private void SendFlagState() - { - packet.gamestate_packet = null; - packet.all_flags_packet = allflags; - packet.packet_op = PacketOp.UpdateFlags; - //byte[] serialized = NetworkDebug.SerializeLogged(packet.packet_op.ToString(), packet); - byte[] serialized = MyAPIGateway.Utilities.SerializeToBinary(packet); - - foreach (var player in allplayers) - { - MyAPIGateway.Multiplayer.SendMessageTo(netid, serialized, player.SteamUserId); - } - } - - private void SendGameState() - { - try - { - if (packet == null) - { - packet = new PacketBase(); - } - - if (gamestate == null) - { - // Initialize gamestate or handle the error - return; - } - - packet.all_flags_packet = null; - packet.gamestate_packet = gamestate; - packet.packet_op = PacketOp.UpdateGameState; - - byte[] serialized = MyAPIGateway.Utilities.SerializeToBinary(packet); - if (allplayers == null) - { - // Handle null case, maybe initialize or log an error - return; - } - - foreach (var player in allplayers) - { - MyAPIGateway.Multiplayer.SendMessageTo(netid, serialized, player.SteamUserId); - } - } - catch (Exception e) - { - // Handle or log exception - } - } - - private void ShowANotificationPlease(string message) - { - MyAPIGateway.Utilities.ShowNotification(message, 1000 / 60); - } - - public T CastProhibit(T ptr, object val) => (T)val; - public override void Draw() - { - if (MyAPIGateway.Utilities.IsDedicated) - return; - - try - { - foreach (var subflag in allflags) - { - // Draw capture sphere - if (subflag.RecaptureTime < FlagRecaptureTimeTicks && subflag.RecaptureTime > 0) - { - float percentDegrees = 2 * subflag.RecaptureTime / (float)FlagRecaptureTimeTicks; - - float lineSize = subflag.RecaptureTime > 500 ? 0.5f + (subflag.RecaptureTime - 500) / 16 : 0.5f; - - // Draw [an sphere] - MatrixD flagMatrix = MatrixD.CreateTranslation(subflag.current_pos); - MySimpleObjectDraw.DrawTransparentSphere(ref flagMatrix, (float)flagPickupRadius, ref subflag.flag_color, MySimpleObjectRasterizer.Wireframe, 20, null, MyStringId.GetOrCompute("WeaponLaserIgnoreDepth"), lineSize, -1, null, BlendTypeEnum.SDR, percentDegrees * percentDegrees); - } - - if (subflag.flag_entity != null) - { - if (subflag.state == FlagState.Active) - { - if (allplayerdict.ContainsKey(subflag.carrying_player_id)) - { - if (allplayerdict[subflag.carrying_player_id].Character != null && !allplayerdict[subflag.carrying_player_id].Character.IsDead) - { - reuse_matrix = allplayerdict[subflag.carrying_player_id].Character.WorldMatrix; - reuse_matrix.Translation += reuse_matrix.Backward * 0.4f + reuse_matrix.Up * 1.5f + reuse_matrix.Left * 0.25f; - - subflag.flag_entity.WorldMatrix = reuse_matrix; - } - } - } - - MyTransparentGeometry.AddBillboardOriented(square, subflag.flag_color, subflag.flag_entity.WorldMatrix.Translation + - subflag.flag_entity.WorldMatrix.Up * 70f + subflag.flag_entity.WorldMatrix.Backward * 50f, - subflag.flag_entity.WorldMatrix.Forward, subflag.flag_entity.WorldMatrix.Up, 50f, 20f, Vector2.Zero, BlendTypeEnum.PostPP); - - Vector4 beam_col = subflag.flag_color; - beam_col.W *= 0.2f; - reuse_matrix = subflag.flag_entity.WorldMatrix; - - float interference = 0f; - var gravP = MyAPIGateway.Physics.CalculateNaturalGravityAt(reuse_matrix.Translation, out interference); - if (gravP.Length() == 0f) - { - gravP = MyAPIGateway.Physics.CalculateArtificialGravityAt(reuse_matrix.Translation, 0); - } - Vector3D beam_up = -1 * Vector3.Normalize(gravP); - Vector3D beam_forward = MyUtils.GetRandomPerpendicularVector(ref beam_up); - reuse_matrix = MatrixD.CreateWorld(reuse_matrix.Translation, beam_forward, beam_up); - reuse_matrix.Translation += subflag.flag_entity.WorldMatrix.Backward * 0.5f; - - //float beam_radius = 0.5f + 0.1f * (float)Vector3D.Distance(MyAPIGateway.Session.Camera.WorldMatrix.Translation,reuse_matrix.Translation); - float beam_radius = 0.5f; - MySimpleObjectDraw.DrawTransparentCylinder(ref reuse_matrix, beam_radius, beam_radius, 100000f, ref beam_col, true, 25, 0.9f, laser); - } - } - - - if (score_billboard.Visible && gamestate != null) - { - var redFlag = allflags[0]; - var blueFlag = allflags[1]; - - var redGripStrength = redFlag.grip_strength; - var blueGripStrength = blueFlag.grip_strength; - - var redGripBar = GenerateGripBar(redGripStrength, redFlag.state == FlagState.Active); - var blueGripBar = GenerateGripBar(blueGripStrength, blueFlag.state == FlagState.Active); - - // You will need to adjust these coordinates based on where the "RED" and "BLU" text are. - // For example, if "RED" is centered at X = 0.30, you might use X = 0.28 for the grip bar. - Vector2D bluePosition = new Vector2D(-0.33, 0.85); // Position directly below the "RED" text - Vector2D redPosition = new Vector2D(-0.43, 0.85); // Position directly below the "BLU" text - - StringBuilder redGripSb = new StringBuilder(); - redGripSb.Append(redGripBar); - var redGripMessage = new HudAPIv2.HUDMessage(redGripSb, redPosition, TimeToLive: 2, Scale: 2f, Blend: BlendTypeEnum.PostPP); - redGripMessage.InitialColor = Color.Red; - - StringBuilder blueGripSb = new StringBuilder(); - blueGripSb.Append(blueGripBar); - var blueGripMessage = new HudAPIv2.HUDMessage(blueGripSb, bluePosition, TimeToLive: 2, Scale: 2f, Blend: BlendTypeEnum.PostPP); - blueGripMessage.InitialColor = Color.Blue; - - const double VerticalOffsetForDamageResistText = +0.03; // Adjust this value as needed - - if (redFlag.state == FlagState.Active) - { - var redGripBracket = new HudAPIv2.HUDMessage(GripBracketConst, redPosition, TimeToLive: 2, Scale: 2f, Blend: BlendTypeEnum.PostPP); - redGripBracket.Origin -= redGripBracket.GetTextLength() * Vector2D.UnitX / 10; - redGripBracket.InitialColor = Color.Red; - - Vector2D redDmgResistPosition = new Vector2D(redPosition.X, redPosition.Y + VerticalOffsetForDamageResistText); - var redGripDmgResistWarning = new HudAPIv2.HUDMessage(DMGResistConst, redDmgResistPosition, TimeToLive: 2, Scale: 1f, Blend: BlendTypeEnum.PostPP); - redGripDmgResistWarning.InitialColor = Color.Red; - - } - - if (blueFlag.state == FlagState.Active) - { - var blueGripBracket = new HudAPIv2.HUDMessage(GripBracketConst, bluePosition, TimeToLive: 2, Scale: 2f, Blend: BlendTypeEnum.PostPP); - blueGripBracket.Origin -= blueGripBracket.GetTextLength() * Vector2D.UnitX / 10; - blueGripBracket.InitialColor = Color.Blue; - - Vector2D blueDmgResistPosition = new Vector2D(bluePosition.X, bluePosition.Y + VerticalOffsetForDamageResistText); - var bluGripDmgResistWarning = new HudAPIv2.HUDMessage(DMGResistConst, blueDmgResistPosition, TimeToLive: 2, Scale: 1f, Blend: BlendTypeEnum.PostPP); - bluGripDmgResistWarning.InitialColor = Color.Blue; - - } - } - - - - if (score_message != null && gamestate != null) - { - score_sb.Clear(); - if (allflags.Count == 1) - { - if (faction1global == null || faction2global == null) - { - faction1global = MyAPIGateway.Session.Factions.TryGetFactionByTag(gamestate.ordered_faction_tags[0]); - faction2global = MyAPIGateway.Session.Factions.TryGetFactionByTag(gamestate.ordered_faction_tags[1]); - } - score_sb.Append("" + gamestate.ordered_faction_tags[0] + " " + "" + gamestate.ordered_faction_tags[1] + "\n"); - score_sb.Append(" " + " " + gamestate.faction_scores[faction1global.FactionId] + " " + gamestate.faction_scores[faction2global.FactionId]); - } - else if (allflags.Count == 2) - { - score_sb.Append("" + allflags[0].owning_faction.Tag + " " + "" + allflags[1].owning_faction.Tag + "\n"); - score_sb.Append(" " + " " + gamestate.faction_scores[allflags[0].owning_faction.FactionId] + " " + gamestate.faction_scores[allflags[1].owning_faction.FactionId]); - } - - if (gamestate != null && gamestate.currentgamestate == CurrentGameState.Victory) - { - score_sb.Append("\n\n\n\n\n\n\n" + "" + gamestate.winning_tag + " VICTORY!"); - } - } - if (event_message != null) - { - if (timer == event_clock) - { - event_sb.Clear(); - } - } - } - catch (Exception e) - { - MyLog.Default.WriteLineAndConsole("Exception in CTFMod.Draw():\n" + e); - } - } - - void CheckDroppedFlagState(Flag subflag) - { - if (subflag.state == FlagState.Dropped) - { - subflag.grip_strength = 100; - - ShowANotificationPlease($"Flag state: {subflag.state}"); - ShowANotificationPlease($"Current drop life: {subflag.current_drop_life}"); - ShowANotificationPlease($"Drop reset time: {drop_reset_time}"); - - if (subflag.current_drop_life >= drop_reset_time) - { - ShowANotificationPlease("flag home 4"); - ResetFlag(subflag); - } - else - { - switch (drop_type) - { - case DropType.Instant: - ShowANotificationPlease("flag home 5"); - ResetFlag(subflag); - break; - case DropType.Ground: - reuse_planet = MyGamePruningStructure.GetClosestPlanet(subflag.flag_entity.WorldMatrix.Translation); - - if (reuse_planet != null) - { - reuse_matrix = subflag.flag_entity.WorldMatrix; - reuse_matrix.Translation = reuse_planet.GetClosestSurfacePointGlobal(subflag.flag_entity.WorldMatrix.Translation); - subflag.flag_entity.WorldMatrix = reuse_matrix; - } - else - { - drop_type = DropType.Floating; - } - break; - case DropType.Attached: - if (subflag.attachedGrid == null && subflag.current_drop_life == 0) - { - float interf = 0f; - var gravityDir = Vector3D.Normalize(MyAPIGateway.Physics.CalculateNaturalGravityAt(subflag.flag_entity.WorldMatrix.Translation, out interf)); - var start = subflag.flag_entity.WorldMatrix.Translation; - var end = start + gravityDir * 5; - List hits = new List(); - MyAPIGateway.Physics.CastRay(start, end, hits); - - foreach (var hit in hits) - { - if (hit == null || hit.HitEntity == null) - continue; - - var testGrid = hit.HitEntity as MyCubeGrid; - - if (testGrid != null && testGrid.Physics != null) - { - subflag.attachedGrid = testGrid; - break; - } - } - - if (subflag.attachedGrid != null) - { - subflag.attachedLocalMatrix = subflag.flag_entity.WorldMatrix * subflag.attachedGrid.PositionComp.WorldMatrixInvScaled; - } - } - - if (subflag.attachedGrid != null && !subflag.attachedGrid.MarkedForClose) - { - subflag.flag_entity.WorldMatrix = subflag.attachedLocalMatrix * subflag.attachedGrid.WorldMatrix; - } - break; - } - } - - subflag.current_drop_life += 1; - - bool friendlyPlayerInRadius = false; - - foreach (var player in subflag.GetNearbyPlayers(ref allplayers, ref reuse_players, pickup_in_cockpit, flagPickupRadius)) - { - int lastDropTime; - - if (playerDropTimes.TryGetValue(player.IdentityId, out lastDropTime)) - { - if (timer - lastDropTime < 600) - { - continue; - } - } - - friendlyPlayerInRadius = true; - - string faction_tag = MyVisualScriptLogicProvider.GetPlayersFactionTag(player.IdentityId); - - // Handle flag stealing - if (subflag.flag_type == FlagType.Single) - { - if (faction_tag != "") - { - subflag.state = FlagState.Active; - subflag.carrying_player_id = player.IdentityId; - subflag.carrying_player = player; - subflag.current_drop_life = 0; - SendEvent(player.DisplayName + " grabbed the flag!", InfoType.FlagTaken); - } - } - else - { - if (faction_tag != "" && faction_tag != subflag.owning_faction.Tag) - { - subflag.state = FlagState.Active; - subflag.carrying_player_id = player.IdentityId; - subflag.carrying_player = player; - subflag.current_drop_life = 0; - SendEvent(player.DisplayName + " stole " + subflag.owning_faction.Tag + " flag!", InfoType.FlagTaken); - } - } - } - - // Checking for recapture times. - if (friendlyPlayerInRadius) - { - // Track the time the same-team player has been around the flag - // Check if the same-team player has been around the flag for (n) seconds - if (subflag.RecaptureTime < FlagRecaptureTimeTicks) - { - subflag.RecaptureTime++; - - // Update gamestate when flag recap is started. - if (subflag.RecaptureTime == 1) - SendFlagState(); - } - else - { - ResetFlag(subflag); - SendFlagState(); - } - } - else - { - // Remove the player from the return times dictionary if they are not the same team - subflag.RecaptureTime = 0; - } - } - } - - private void ResetFlag(Flag subflag) - { - subflag.state = FlagState.Home; - ShowANotificationPlease("flag sent back home"); - - if (subflag.flag_type == FlagType.Single) - { - SendEvent("Flag sent back home", InfoType.FlagReset); - } - else - { - SendEvent(subflag.owning_faction.Tag + " flag sent back home", InfoType.FlagReset); - } - - // Reset the player's return time or remove the player from the dictionary - subflag.RecaptureTime = 0; - subflag.current_drop_life = 0; - } - - public void SendEvent(string message, InfoType infotype) - { - if (reuse_event == null) - { - reuse_event = new EventInfo(); - } - reuse_event.info = message; - reuse_event.infotype = infotype; - //byte[] serialized = NetworkDebug.SerializeLogged(infotype.ToString(), reuse_event); - byte[] serialized = MyAPIGateway.Utilities.SerializeToBinary(reuse_event); - - foreach (var player in allplayers) - { - if (player.Character != null) - { - MyAPIGateway.Multiplayer.SendMessageTo(eventnetid, serialized, player.SteamUserId); - } - } - } - - private MyEntity PrimeEntityActivator() - { - var ent = new MyEntity(); - ent.Init(null, ModelPath, null, null, null); - ent.Render.CastShadows = false; - ent.IsPreview = true; - ent.Save = false; - ent.SyncFlag = false; - ent.NeedsWorldMatrix = false; - ent.Flags |= EntityFlags.IsNotGamePrunningStructureObject; - MyEntities.Add(ent, true); - return ent; - } - - bool ParseVector3DFromGPS(string gps, out Vector3D vec) - { - vec = Vector3D.Zero; - - if (!gps.StartsWith("GPS:")) - { - return false; - } - - string[] segments = gps.Split(':'); - - if (segments.Length < 6) - { - return false; - } - - if (!double.TryParse(segments[2], out vec.X) || !double.TryParse(segments[3], out vec.Y) || !double.TryParse(segments[4], out vec.Z)) - { - return false; - } - - return true; - } - - protected override void UnloadData() - { - MyAPIGateway.Multiplayer.UnregisterMessageHandler(netid, Data_Handler); - MyAPIGateway.Multiplayer.UnregisterMessageHandler(eventnetid, Event_Handler); - if (HUD_Base != null) - { - HUD_Base.Unload(); - } - - instance = null; - - } - } -} \ No newline at end of file diff --git a/Gamemode Mods/Stable/StarCoreCTF/Data/Scripts/CTF/HudAPIv2.cs b/Gamemode Mods/Stable/StarCoreCTF/Data/Scripts/CTF/HudAPIv2.cs deleted file mode 100644 index 1f3e2373d..000000000 --- a/Gamemode Mods/Stable/StarCoreCTF/Data/Scripts/CTF/HudAPIv2.cs +++ /dev/null @@ -1,2293 +0,0 @@ -using ProtoBuf; -using Sandbox.ModAPI; -using System; -using System.Collections.Generic; -using System.Text; -using VRage; -using VRage.Input; -using VRage.ModAPI; -using VRage.Utils; -using VRageMath; -using BlendTypeEnum = VRageRender.MyBillboard.BlendTypeEnum; - -namespace Draygo.API.SC -{ - public class HudAPIv2 - { - private static HudAPIv2 instance; - private const long REGISTRATIONID = 573804956; - private bool registered = false; - private Action m_onRegisteredAction; - - private Func MessageFactory; - private Action MessageSetter; - private Func MessageGetter; - private Action RemoveMessage; - - private Action m_onScreenDimensionsChanged; - - public Action OnScreenDimensionsChanged - { - get - { - return m_onScreenDimensionsChanged; - } - - set - { - m_onScreenDimensionsChanged = value; - } - } - - public enum TextOrientation : byte - { - ltr = 1, - center = 2, - rtl = 3 - } - - /// - /// Create a HudAPI Instance. Please only create one per mod. - /// - /// Callback once the HudAPI is active. You can Instantiate HudAPI objects in this Action - public HudAPIv2(Action onRegisteredAction = null) - { - if (instance != null) - { - - return; - } - instance = this; - m_onRegisteredAction = onRegisteredAction; - MyAPIGateway.Utilities.RegisterMessageHandler(REGISTRATIONID, RegisterComponents); - } - - public void Close() - { - Unload(); - } - /// - /// Unregisters mod and frees references. - /// - public void Unload() - { - MyAPIGateway.Utilities.UnregisterMessageHandler(REGISTRATIONID, RegisterComponents); - MessageFactory = null; - MessageSetter = null; - MessageGetter = null; - RemoveMessage = null; - registered = false; - m_onRegisteredAction = null; - if(instance == this) - instance = null; - } - private enum RegistrationEnum : int - { - OnScreenUpdate = 2000 - } - private void RegisterComponents(object obj) - { - if (registered) - return; - if(obj is MyTuple, Action, Func, Action>) - { - var Handlers = (MyTuple, Action, Func, Action>)obj; - MessageFactory = Handlers.Item1; - MessageSetter = Handlers.Item2; - MessageGetter = Handlers.Item3; - RemoveMessage = Handlers.Item4; - - registered = true; - if (m_onRegisteredAction != null) - m_onRegisteredAction(); - MessageSet(null, (int)RegistrationEnum.OnScreenUpdate, new MyTuple(ScreenChangedHandle)); - } - } - - /// - /// If Heartbeat is true you may call any constructor in this class. Do not call any constructor or set properties if this is false. - /// - public bool Heartbeat - { - get - { - return registered; - } - } - - - - #region Intercomm - private void DeleteMessage(object BackingObject) - { - if(BackingObject != null) - RemoveMessage(BackingObject); - } - private object CreateMessage(MessageTypes type) - { - return MessageFactory((int)type); - } - private object MessageGet(object BackingObject, int Member ) - { - return MessageGetter(BackingObject, Member); - } - private void MessageSet(object BackingObject, int Member, object Value) - { - MessageSetter(BackingObject, Member, Value); - } - private void RegisterCheck() - { - if (instance.registered == false) - { - throw new InvalidOperationException("HudAPI: Failed to create backing object. Do not instantiate without checking if heartbeat is true."); - } - } - private void ScreenChangedHandle() - { - if(m_onScreenDimensionsChanged != null) - { - m_onScreenDimensionsChanged(); - } - } - #endregion - private enum MessageTypes : int - { - HUDMessage = 0, - BillBoardHUDMessage, - EntityMessage, - SpaceMessage, - - MenuItem = 20, - MenuSubCategory, - MenuRootCategory, - MenuScreenInput, - MenuSliderItem, - MenuTextInput, - MenuKeybindInput, - MenuColorPickerInput, - - BoxUIContainer = 40, - BoxUIText, - BoxUIImage, - - UIDefinition = 60, - UIBehaviourDefinition - } - #region Info - public static class APIinfo - { - private enum APIinfoMembers : int - { - ScreenPositionOnePX = 1000, - OnScreenUpdate, - GetBoxUIDefinition, - GetBoxUIBehaviour, - GetFontDefinition, - GetFonts - - } - /// - /// Returns the distance for one pixel in x and y directions, can be multiplied and fed into Origin, Offset, and Size parameters for precise manipulation of HUD objects. - /// - public static Vector2D ScreenPositionOnePX - { - get - { - return (Vector2D)instance.MessageGet(null, (int)APIinfoMembers.ScreenPositionOnePX); - } - } - /// - /// Available definitions: None, Default, Square - /// - /// - /// - public static BoxUIDefinition GetBoxUIDefinition(MyStringId DefinitionName) - { - return new BoxUIDefinition(instance.MessageGet(DefinitionName, (int)APIinfoMembers.GetBoxUIDefinition)); - - } - public static BoxUIBehaviourDef GetBoxUIBehaviour(MyStringId DefinitionName) - { - return new BoxUIBehaviourDef(instance.MessageGet(DefinitionName, (int)APIinfoMembers.GetBoxUIBehaviour)); - - } - - public static FontDefinition GetFontDefinition(MyStringId DefinitionName) - { - object retval = instance.MessageGet(DefinitionName, (int)APIinfoMembers.GetFontDefinition); - return new FontDefinition(retval); - - } - /// - /// Gives a list of fonts currently available in the TextHudAPI - /// - /// Fonts will be added to the collection, if null a new collection will be allocated - public static void GetFonts(List collection) - { - instance.MessageGet(collection, (int)APIinfoMembers.GetFonts); - } - - - } - #endregion - #region Messages - public enum Options : byte - { - None = 0x0, - HideHud = 0x1, - Shadowing = 0x2, - Fixed = 0x4, - FOVScale = 0x8, - Pixel = 0x10 - } - private enum MessageBaseMembers : int - { - Message = 0, - Visible, - TimeToLive, - Scale, - TextLength, - Offset, - BlendType, - Draw, - Flush - } - public abstract class MessageBase - { - internal object BackingObject; - - #region Properties - /// - /// Note that if you update the stringbuilder anywhere it will update the message automatically. Use this property to set the stringbuilder object to your own or use the one generated by the constructor. - /// - public StringBuilder Message - { - get - { - return (StringBuilder)(instance.MessageGet(BackingObject, (int)MessageBaseMembers.Message)); - } - set - { - instance.MessageSet(BackingObject, (int)MessageBaseMembers.Message, value); - } - } - - - /// - /// True if HUD Element is visible, note that this will still be true if the player has their hud activated and HideHud option is set. - /// - public bool Visible - { - get - { - return (bool)(instance.MessageGet(BackingObject, (int)MessageBaseMembers.Visible)); - } - set - { - instance.MessageSet(BackingObject, (int)MessageBaseMembers.Visible, value); - } - } - - /// - /// Time to live in Draw ticks. At 0 class will close itself and will no longer update. - /// - public int TimeToLive - { - get - { - return (int)(instance.MessageGet(BackingObject, (int)MessageBaseMembers.TimeToLive)); - } - set - { - instance.MessageSet(BackingObject, (int)MessageBaseMembers.TimeToLive, value); - } - } - - - /// - /// Scale of the text elements or billboard - /// - public double Scale - { - get - { - return (double)(instance.MessageGet(BackingObject, (int)MessageBaseMembers.Scale)); - } - set - { - instance.MessageSet(BackingObject, (int)MessageBaseMembers.Scale, value); - } - } - - - /// - /// Offset the text element by this amount. Note this takes the result of GetTextLength, be sure to clear Offset.Y if you do not want to start at the lower left corner of the previous element - /// - public Vector2D Offset - { - get - { - return (Vector2D)(instance.MessageGet(BackingObject, (int)MessageBaseMembers.Offset)); - } - set - { - instance.MessageSet(BackingObject, (int)MessageBaseMembers.Offset, value); - } - } - - /// - /// put using BlendTypeEnum = VRageRender.MyBillboard.BlendTypeEnum; on top of your script to use this property. - /// - public BlendTypeEnum Blend - { - get - { - return (BlendTypeEnum)(instance.MessageGet(BackingObject, (int)MessageBaseMembers.BlendType)); - } - set - { - instance.MessageSet(BackingObject, (int)MessageBaseMembers.BlendType, value); - } - } - #endregion - - public abstract void DeleteMessage(); - - /// - /// Gets the offset of the lower right corner of the text element from the upper left. The value returned is a local translation. Screen space for screen messages, world space for world messages. Please note that the Y value is negative in screen space. - /// - /// Lower Right Corner - public Vector2D GetTextLength() - { - return (Vector2D)(instance.MessageGet(BackingObject, (int)MessageBaseMembers.TextLength)); - } - - /// - /// Manual draw method - /// - public void Draw() - { - instance.MessageGet(BackingObject, (int)MessageBaseMembers.Draw); - } - - /// - /// Clears the object cache - /// - public void Flush() - { - instance.MessageGet(BackingObject, (int)MessageBaseMembers.Flush); - } - - } - public class EntityMessage : MessageBase - { - private enum EntityMembers : int - { - Entity = 10, - LocalPosition, - Up, - Forward, - Orientation, - Max, - TransformMatrix, - Font - } - - #region Properties - /// - /// Entity text will be centered on / attached to. - /// - public IMyEntity Entity - { - get - { - return instance.MessageGet(BackingObject, (int)EntityMembers.Entity) as IMyEntity; - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Entity, value); - } - } - - - /// - /// Local translation of where the text will be in relation to the Entity it is attached to. Used to construct the TransformMatrix - /// - public Vector3D LocalPosition - { - get - { - return (Vector3D)instance.MessageGet(BackingObject, (int)EntityMembers.LocalPosition); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.LocalPosition, value); - } - } - - /// - /// Up, value used to construct the TransformMatrix - /// - public Vector3D Up - { - get - { - return (Vector3D)instance.MessageGet(BackingObject, (int)EntityMembers.Up); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Up, value); - } - } - - /// - /// Forward, value used to construct the TransformMatrix - /// - public Vector3D Forward - { - get - { - return (Vector3D)instance.MessageGet(BackingObject, (int)EntityMembers.Forward); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Forward, value); - } - } - - /// - /// Flag that sets from what direction text is written - /// - public TextOrientation Orientation - { - get - { - return (TextOrientation)instance.MessageGet(BackingObject, (int)EntityMembers.Orientation); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Orientation, (byte)value); - } - } - - - /// - /// World Boundries - /// - public Vector2D Max - { - get - { - return (Vector2D)instance.MessageGet(BackingObject, (int)EntityMembers.Max); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Max, value); - } - } - - /// - /// Sets the transformation matrix directly, use instead of LocalPosition, Up, Forward - /// - public MatrixD TransformMatrix - { - get - { - return (MatrixD)instance.MessageGet(BackingObject, (int)EntityMembers.TransformMatrix); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.TransformMatrix, value); - } - } - /// - /// Font, default is "white", "monospace" is also included. - /// - public string Font - { - get - { - return (string)(instance.MessageGet(BackingObject, (int)EntityMembers.Font)); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Font, value); - } - } - #endregion - public EntityMessage(StringBuilder Message, IMyEntity Entity, MatrixD TransformMatrix, int TimeToLive = -1, double Scale = 1, TextOrientation Orientation = TextOrientation.ltr, Vector2D? Offset = null, Vector2D? Max = null, string Font = "white") - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.EntityMessage); - if (BackingObject != null) - { - if (Max.HasValue) - this.Max = Max.Value; - this.Message = Message; - this.Entity = Entity; - this.TransformMatrix = TransformMatrix; - this.TimeToLive = TimeToLive; - this.Scale = Scale; - this.Visible = true; - this.Orientation = Orientation; - if (Offset.HasValue) - { - this.Offset = Offset.Value; - } - else - { - this.Offset = Vector2D.Zero; - } - this.Font = Font; - } - - } - public EntityMessage(StringBuilder Message, IMyEntity Entity, Vector3D LocalPosition, Vector3D Forward, Vector3D Up, int TimeToLive = -1, double Scale = 1, TextOrientation Orientation = TextOrientation.ltr, Vector2D? Offset = null, Vector2D? Max = null, BlendTypeEnum Blend = BlendTypeEnum.Standard, string Font = "white") - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.EntityMessage); - if(BackingObject != null) - { - if (Max.HasValue) - this.Max = Max.Value; - this.Message = Message; - this.Entity = Entity; - this.LocalPosition = LocalPosition; - this.Forward = Forward; - this.Up = Up; - this.TimeToLive = TimeToLive; - this.Scale = Scale; - this.Visible = true; - this.Orientation = Orientation; - this.Blend = Blend; - if (Offset.HasValue) - { - this.Offset = Offset.Value; - } - else - { - this.Offset = Vector2D.Zero; - } - this.Font = Font; - } - - } - - public EntityMessage() - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.EntityMessage); - - } - - /// - /// Do not use this class after deleting it. - /// - public override void DeleteMessage() - { - instance.DeleteMessage(BackingObject); - BackingObject = null; - } - } - public class HUDMessage : MessageBase - { - private enum EntityMembers : int - { - Origin = 10, - Options, - ShadowColor, - Font, - InitalColor - } - #region Properties - /// - /// top left is -1, 1, bottom right is 1 -1 - /// - public Vector2D Origin - { - get - { - return (Vector2D)(instance.MessageGet(BackingObject, (int)EntityMembers.Origin)); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Origin, value); - } - } - - - /// - /// HideHud - hides when hud is hidden, shadow draw a shadow behind the text. - /// - public Options Options - { - get - { - return (Options)(instance.MessageGet(BackingObject, (int)EntityMembers.Options)); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Options, (byte)value); - } - } - - /// - /// Color of shadow behind the text - /// - public Color ShadowColor - { - get - { - return (Color)(instance.MessageGet(BackingObject, (int)EntityMembers.ShadowColor)); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.ShadowColor, value); - } - } - /// - /// Font, default is "white", "monospace" also supported, modded fonts will be supported in the future. - /// - public string Font - { - get - { - return (string)(instance.MessageGet(BackingObject, (int)EntityMembers.Font)); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Font, value); - } - } - - /// - /// Sets the initial color of the text, Default: White - /// - public Color InitialColor - { - get - { - return (Color)(instance.MessageGet(BackingObject, (int)EntityMembers.InitalColor)); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.InitalColor, value); - } - } - #endregion - - public HUDMessage(StringBuilder Message, Vector2D Origin, Vector2D? Offset = null, int TimeToLive = -1, double Scale = 1.0d, bool HideHud = true, bool Shadowing = false, Color? ShadowColor = null, BlendTypeEnum Blend = BlendTypeEnum.SDR, string Font = "white") - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.HUDMessage); - if(BackingObject != null) - { - this.TimeToLive = TimeToLive; - this.Origin = Origin; - this.Options = Options.None; - if (HideHud) - Options |= Options.HideHud; - if (Shadowing) - Options |= Options.Shadowing; - var blackshadow = Color.Black; - if (ShadowColor.HasValue) - ShadowColor = ShadowColor.Value; - this.Scale = Scale; - this.Message = Message; - this.Blend = Blend; - if (Offset.HasValue) - { - this.Offset = Offset.Value; - } - else - { - this.Offset = Vector2D.Zero; - } - this.Font = Font; - } - } - public HUDMessage() - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.HUDMessage); - } - - public override void DeleteMessage() - { - instance.DeleteMessage(BackingObject); - BackingObject = null; - } - - } - public class BillBoardHUDMessage : MessageBase - { - - private enum EntityMembers : int - { - Origin = 10, - Options, - BillBoardColor, - Material, - Rotation, - Width, - Height, - uvOffset, - uvSize, - TextureSize, - uvEnabled - } - - #region Properties - /// - /// top left is -1, 1, bottom right is 1 -1 - /// - public Vector2D Origin - { - get - { - return (Vector2D)instance.MessageGet(BackingObject, (int)EntityMembers.Origin); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Origin, value); - } - } - - /// - /// Use MyStringId.GetOrCompute to turn a string into a MyStringId. - /// - public MyStringId Material - { - get - { - return (MyStringId)instance.MessageGet(BackingObject, (int)EntityMembers.Material); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Material, value); - } - } - - - /// - /// Set Options, HideHud to true will hide billboard when hud is hidden. Shadowing will draw the element on the shadow layer (behind the text layer) - /// - public Options Options - { - get - { - return (Options)instance.MessageGet(BackingObject, (int)EntityMembers.Options); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Options, (byte)value); - } - } - - - /// - /// Sets the color mask of the billboard, not all billboards support this parameter. - /// - public Color BillBoardColor - { - get - { - return (Color)instance.MessageGet(BackingObject, (int)EntityMembers.BillBoardColor); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.BillBoardColor, value); - } - } - - /// - /// Rotate billboard in radians. - /// - public float Rotation - { - get - { - return (float)instance.MessageGet(BackingObject, (int)EntityMembers.Rotation); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Rotation, value); - } - } - - - /// - /// Multiplies the width of the billboard by this amount. Set Scale to 1 if you want to use this to finely control the width of the billboard, such as a value from GetTextLength - /// You might need to multiply the result of GetTextLength by 250 or maybe 500 if Scale is 1. Will need experiementing - /// - public float Width - { - get - { - return (float)instance.MessageGet(BackingObject, (int)EntityMembers.Width); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Width, value); - } - } - - - /// - /// Multiplies the height of the billboard by this amount. Set Scale to 1 if you want to use this to finely control the height of the billboard, such as a value from GetTextLength - /// - public float Height - { - get - { - return (float)instance.MessageGet(BackingObject, (int)EntityMembers.Height); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Height, value); - } - } - - /// - /// UV offset in pixels - /// - public Vector2 uvOffset - { - get - { - return (Vector2)instance.MessageGet(BackingObject, (int)EntityMembers.uvOffset); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.uvOffset, value); - } - } - /// - /// Size in pixels - /// - public Vector2 uvSize - { - get - { - return (Vector2)instance.MessageGet(BackingObject, (int)EntityMembers.uvSize); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.uvSize, value); - } - } - /// - /// Size of image in pixels (please note the height and width of the image must be the same) - /// - public float TextureSize - { - get - { - return (float)instance.MessageGet(BackingObject, (int)EntityMembers.TextureSize); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.TextureSize, value); - } - } - /// - /// Use uv parameters. Default is false. - /// - public bool uvEnabled - { - get - { - return (bool)instance.MessageGet(BackingObject, (int)EntityMembers.uvEnabled); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.uvEnabled, value); - } - } - #endregion - - public BillBoardHUDMessage(MyStringId Material, Vector2D Origin, Color BillBoardColor, Vector2D? Offset = null, int TimeToLive = -1, double Scale = 1d, float Width = 1f, float Height = 1f, float Rotation = 0, bool HideHud = true, bool Shadowing = true, BlendTypeEnum Blend = BlendTypeEnum.SDR) - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.BillBoardHUDMessage); - - if(BackingObject != null) - { - this.TimeToLive = TimeToLive; - this.Origin = Origin; - this.Options = Options.None; - if (HideHud) - this.Options |= Options.HideHud; - if (Shadowing) - this.Options |= Options.Shadowing; - this.BillBoardColor = BillBoardColor; - this.Scale = Scale; - this.Material = Material; - this.Rotation = Rotation; - this.Blend = Blend; - if (Offset.HasValue) - { - this.Offset = Offset.Value; - } - else - { - this.Offset = Vector2D.Zero; - } - this.Width = Width; - this.Height = Height; - } - - - } - - public BillBoardHUDMessage(MyStringId Material, Vector2D Origin, Color BillBoardColor, Vector2 uvOffset, Vector2 uvSize, float TextureSize, Vector2D? Offset = null, int TimeToLive = -1, double Scale = 1d, float Width = 1f, float Height = 1f, float Rotation = 0, bool HideHud = true, bool Shadowing = true, BlendTypeEnum Blend = BlendTypeEnum.SDR) - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.BillBoardHUDMessage); - - if (BackingObject != null) - { - this.uvEnabled = true; - this.uvOffset = uvOffset; - this.uvSize = uvSize; - this.TextureSize = TextureSize; - this.TimeToLive = TimeToLive; - this.Origin = Origin; - this.Options = Options.None; - if (HideHud) - this.Options |= Options.HideHud; - if (Shadowing) - this.Options |= Options.Shadowing; - this.BillBoardColor = BillBoardColor; - this.Scale = Scale; - this.Material = Material; - this.Rotation = Rotation; - this.Blend = Blend; - if (Offset.HasValue) - { - this.Offset = Offset.Value; - } - else - { - this.Offset = Vector2D.Zero; - } - this.Width = Width; - this.Height = Height; - } - - - } - - public BillBoardHUDMessage() - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.BillBoardHUDMessage); - } - - public override void DeleteMessage() - { - instance.DeleteMessage(BackingObject); - BackingObject = null; - } - } - public class SpaceMessage : MessageBase - { - private enum EntityMembers : int - { - WorldPosition = 10, - Up, - Left, - TxtOrientation, - Font - - } - #region Properties - /// - /// Position - /// - public Vector3D WorldPosition - { - get - { - return (Vector3D)instance.MessageGet(BackingObject, (int)EntityMembers.WorldPosition); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.WorldPosition, value); - } - } - - - /// - /// Up vector for textures - /// - public Vector3D Up - { - get - { - return (Vector3D)instance.MessageGet(BackingObject, (int)EntityMembers.Up); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Up, value); - } - } - - - /// - /// Left Vector for Textures - /// - public Vector3D Left - { - get - { - return (Vector3D)instance.MessageGet(BackingObject, (int)EntityMembers.Left); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Left, value); - } - } - /// - /// Font, default is "white", "monospace" also supported, modded fonts will be supported in the future. - /// - public string Font - { - get - { - return (string)(instance.MessageGet(BackingObject, (int)EntityMembers.Font)); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Font, value); - } - } - - /// - /// Text orientation, from what edge text is aligned. - /// - public TextOrientation TxtOrientation - { - get - { - return (TextOrientation)instance.MessageGet(BackingObject, (int)EntityMembers.TxtOrientation); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.TxtOrientation, (byte)value); - } - } - #endregion - - - public SpaceMessage(StringBuilder Message, Vector3D WorldPosition, Vector3D Up, Vector3D Left, double Scale = 1, Vector2D? Offset = null, int TimeToLive = -1, TextOrientation TxtOrientation = TextOrientation.ltr, BlendTypeEnum Blend = BlendTypeEnum.Standard, string Font = "white") - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.SpaceMessage); - if(BackingObject != null) - { - this.TimeToLive = TimeToLive; - this.Scale = Scale; - this.WorldPosition = WorldPosition; - this.Up = Up; - this.Left = Left; - this.TxtOrientation = TxtOrientation; - this.Message = Message; - this.Blend = Blend; - if (Offset.HasValue) - { - this.Offset = Offset.Value; - } - else - { - this.Offset = Vector2D.Zero; - } - this.Font = Font; - } - - } - - public SpaceMessage() - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.SpaceMessage); - } - - public override void DeleteMessage() - { - instance.DeleteMessage(BackingObject); - BackingObject = null; - } - } - #endregion - - #region Menu - public abstract class MenuItemBase - { - private enum MenuItemBaseMembers : int - { - Text = 0, - Interactable - } - internal object BackingObject; - - /// - /// Text displayed in the category list - /// - public string Text - { - get - { - return (string)(instance.MessageGet(BackingObject, (int)MenuItemBaseMembers.Text)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuItemBaseMembers.Text, value); - } - } - /// - /// User can select this item. true by default - /// - public bool Interactable - { - get - { - return (bool)(instance.MessageGet(BackingObject, (int)MenuItemBaseMembers.Interactable)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuItemBaseMembers.Interactable, value); - } - } - } - public class MenuItem : MenuItemBase - { - private enum MenuItemMembers : int - { - OnClickAction = 100, - Parent - } - /// - /// On click event that will be fired if the user selects this item. - /// - public Action OnClick - { - get - { - return (Action)(instance.MessageGet(BackingObject, (int)MenuItemMembers.OnClickAction)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuItemMembers.OnClickAction, value); - } - } - /// - /// Must be either a MenuRootCategory or MenuSubCategory object - /// - public MenuCategoryBase Parent - { - set - { - instance.MessageSet(BackingObject, (int)MenuItemMembers.Parent, value.BackingObject); - } - } - /// - /// Basic toggle. You can use this to create on/off toggles, checkbox lists or option lists. - /// - /// Text displayed in the category list - /// Must be either a MenuRootCategory or MenuSubCategory object - /// On click event that will be fired if the user selects this item. - /// User can select this item. true by default - public MenuItem(string Text, MenuCategoryBase Parent, Action OnClick = null, bool Interactable = true) - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.MenuItem); - - this.Text = Text; - this.Parent = Parent; - this.OnClick = OnClick; - this.Interactable = Interactable; - } - } - public abstract class MenuCategoryBase : MenuItemBase - { - private enum MenuBaseCategoryMembers : int - { - Header = 100 - } - /// - /// Header text of the menu list. - /// - public string Header - { - get - { - return (string)(instance.MessageGet(BackingObject, (int)MenuBaseCategoryMembers.Header)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuBaseCategoryMembers.Header, value); - } - } - } - public class MenuRootCategory : MenuCategoryBase - { - public enum MenuFlag : int - { - None = 0, - PlayerMenu = 1, - AdminMenu = 2 - } - private enum MenuRootCategoryMembers : int - { - MenuFlag = 200 - - } - /// - /// Which menu to attach to, either Player or Admin menus. - /// - public MenuFlag Menu - { - get - { - return (MenuFlag)(instance.MessageGet(BackingObject, (int)MenuRootCategoryMembers.MenuFlag)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuRootCategoryMembers.MenuFlag, (int)value); - } - } - /// - /// Create only one of these per mod. Automatically attaches to parent lists. - /// - /// Text displayed in the root menu list - /// Which menu to attach to, either Player or Admin menus. - /// Header text of this menu list. - public MenuRootCategory(string Text, MenuFlag AttachedMenu = MenuFlag.None, string HeaderText = "Default Header") - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.MenuRootCategory); - this.Text = Text; - Header = HeaderText; - Menu = AttachedMenu; - } - } - public class MenuSubCategory : MenuCategoryBase - { - private enum MenuSubCategoryMembers : int - { - Parent = 200 - } - - /// - /// Must be either a MenuRootCategory or MenuSubCategory objectMust be either a MenuRootCategory or MenuSubCategory object - /// - public MenuCategoryBase Parent - { - set - { - instance.MessageSet(BackingObject, (int)MenuSubCategoryMembers.Parent, value.BackingObject); - } - } - - /// - /// Creates a sub category, must attach to either Root or another Sub Category. - /// - /// Text displayed in the category list - /// Must be either a MenuRootCategory or MenuSubCategory objectMust be either a MenuRootCategory or MenuSubCategory object - /// Header text of this menu list. - public MenuSubCategory(string Text, MenuCategoryBase Parent, string HeaderText = "Default Header") - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.MenuSubCategory); - this.Text = Text; - this.Header = HeaderText; - this.Parent = Parent; - } - } - public class MenuColorPickerInput : MenuItemBase - { - private enum MenuColorPickerInputMembers : int - { - OnSubmitAction = 100, - Parent, - InputDialogTitle, - OnUpdateAction, - OnCancelAction, - InitialColor, - ShowAlpha - } - - /// - /// Must be either a MenuRootCategory or MenuSubCategory object - /// - public MenuCategoryBase Parent - { - set - { - instance.MessageSet(BackingObject, (int)MenuColorPickerInputMembers.Parent, value.BackingObject); - } - } - - /// - /// Titlebar of the Dialog window. - /// - public string InputDialogTitle - { - get - { - return (string)(instance.MessageGet(BackingObject, (int)MenuColorPickerInputMembers.InputDialogTitle)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuColorPickerInputMembers.InputDialogTitle, value); - } - } - - /// - /// Returns inputted color on submit. - /// - public Action OnSubmitAction - { - get - { - return (Action)(instance.MessageGet(BackingObject, (int)MenuColorPickerInputMembers.OnSubmitAction)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuColorPickerInputMembers.OnSubmitAction, value); - } - } - - /// - /// Returns color as client is manipulating the dialog. - /// - public Action OnUpdateAction - { - get - { - return (Action)(instance.MessageGet(BackingObject, (int)MenuColorPickerInputMembers.OnUpdateAction)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuColorPickerInputMembers.OnUpdateAction, value); - } - } - - /// - /// Canceled the dialog - /// - public Action OnCancelAction - { - get - { - return (Action)(instance.MessageGet(BackingObject, (int)MenuColorPickerInputMembers.OnCancelAction)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuColorPickerInputMembers.OnCancelAction, value); - } - } - - /// - /// Initial color in the dialog box - /// - public Color InitialColor - { - get - { - return (Color)(instance.MessageGet(BackingObject, (int)MenuColorPickerInputMembers.InitialColor)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuColorPickerInputMembers.InitialColor, value); - } - } - - /// - /// Shows alpha slider if true (default true) - /// - public bool ShowAlpha - { - get - { - return (bool)(instance.MessageGet(BackingObject, (int)MenuColorPickerInputMembers.ShowAlpha)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuColorPickerInputMembers.ShowAlpha, value); - } - } - - /// - /// Summons a dialog box that allows the user to specify a color. - /// - /// Text displayed in the category list - /// Must be either a MenuRootCategory or MenuSubCategory object - /// Initial color set in the dialog box - /// Dialog Title - /// On Submit Callback, returns color in the dialog - /// Update callback, will call per tick with the current selected color in the dialog - /// User canceled the dialog - /// Shows alpha slider if true - public MenuColorPickerInput(string Text, MenuCategoryBase Parent, Color initialColor, string InputDialogTitle = "Enter text value", Action onSubmit = null, Action onUpdate = null, Action onCancel = null, bool showAlpha = true) - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.MenuColorPickerInput); - this.Text = Text; - this.InputDialogTitle = InputDialogTitle; - this.OnSubmitAction = onSubmit; - this.Parent = Parent; - this.InitialColor = initialColor; - this.OnUpdateAction = onUpdate; - this.OnCancelAction = onCancel; - this.ShowAlpha = showAlpha; - } - } - public class MenuTextInput : MenuItemBase - { - private enum MenuTextInputMembers : int - { - OnSubmitAction = 100, - Parent, - InputDialogTitle - } - - /// - /// Must be either a MenuRootCategory or MenuSubCategory object - /// - public MenuCategoryBase Parent - { - set - { - instance.MessageSet(BackingObject, (int)MenuTextInputMembers.Parent, value.BackingObject); - } - } - - /// - /// Titlebar of the Dialog window. - /// - public string InputDialogTitle - { - get - { - return (string)(instance.MessageGet(BackingObject, (int)MenuTextInputMembers.InputDialogTitle)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuTextInputMembers.InputDialogTitle, value); - } - } - - /// - /// Returns inputted string on submit. - /// - public Action OnSubmitAction - { - get - { - return (Action)(instance.MessageGet(BackingObject, (int)MenuTextInputMembers.OnSubmitAction)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuTextInputMembers.OnSubmitAction, value); - } - } - - /// - /// Opens a text input dialog box when user selects this item. - /// - /// Text displayed in the category list - /// Must be either a MenuRootCategory or MenuSubCategory object - /// Titlebar of the Dialog window. - /// Returns inputted string on submit. - public MenuTextInput(string Text, MenuCategoryBase Parent, string InputDialogTitle = "Enter text value", Action onSubmit = null) - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.MenuTextInput); - this.Text = Text; - this.InputDialogTitle = InputDialogTitle; - this.OnSubmitAction = onSubmit; - this.Parent = Parent; - } - } - public class MenuKeybindInput : MenuItemBase - { - private enum MenuKeybindInputMembers : int - { - OnSubmitAction = 100, - Parent, - InputDialogTitle - } - - /// - /// Must be either a MenuRootCategory or MenuSubCategory object - /// - public MenuCategoryBase Parent - { - set - { - instance.MessageSet(BackingObject, (int)MenuKeybindInputMembers.Parent, value.BackingObject); - } - } - - /// - /// Titlebar of the Dialog window. - /// - public string InputDialogTitle - { - get - { - return (string)(instance.MessageGet(BackingObject, (int)MenuKeybindInputMembers.InputDialogTitle)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuKeybindInputMembers.InputDialogTitle, value); - } - } - - /// - /// Called with Key pressed, Shift Pressed, Ctrl Pressed, Alt Pressed when user Submits the dialog. - /// - public Action OnSubmitAction - { - get - { - return (Action)(instance.MessageGet(BackingObject, (int)MenuKeybindInputMembers.OnSubmitAction)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuKeybindInputMembers.OnSubmitAction, value); - } - } - - /// - /// Opens up a keybind dialog box which lets the user submit a Key + Modifiers. - /// - /// Text displayed in the category list - /// Must be either a MenuRootCategory or MenuSubCategory object - /// Titlebar of the Dialog window. - /// Called with Key pressed, Shift Pressed, Ctrl Pressed, Alt Pressed when user Submits the dialog. - public MenuKeybindInput(string Text, MenuCategoryBase Parent, string InputDialogTitle = "Keybind - Press any key", Action onSubmit = null) - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.MenuKeybindInput); - this.Text = Text; - this.InputDialogTitle = InputDialogTitle; - this.OnSubmitAction = onSubmit; - this.Parent = Parent; - } - } - public class MenuScreenInput : MenuItemBase - { - private enum MenuScreenInputMembers : int - { - OnSubmitAction = 100, - Parent, - InputDialogTitle, - Origin, - Size, - OnUpdateAction, - Cancel, - OnSelect - } - - /// - /// Must be either a MenuRootCategory or MenuSubCategory object - /// - public MenuCategoryBase Parent - { - set - { - instance.MessageSet(BackingObject, (int)MenuScreenInputMembers.Parent, value.BackingObject); - } - } - - /// - /// Titlebar of the Dialog window. - /// - public string InputDialogTitle - { - get - { - return (string)(instance.MessageGet(BackingObject, (int)MenuScreenInputMembers.InputDialogTitle)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuScreenInputMembers.InputDialogTitle, value); - } - } - /// - /// Called when user does not click the dialog box window to move it and cancels out of the dialog box. - /// - public Action OnCancel - { - get - { - return (Action)(instance.MessageGet(BackingObject, (int)MenuScreenInputMembers.Cancel)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuScreenInputMembers.Cancel, value); - } - } - /// - /// Screen position origin of the dialog box. - /// - public Vector2D Origin - { - get - { - return (Vector2D)(instance.MessageGet(BackingObject, (int)MenuScreenInputMembers.Origin)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuScreenInputMembers.Origin, value); - } - } - /// - /// Size of the dialog box. Use GetTextLength() on a Hud Object to manipulate this. Or you can specify a manual width and height APIinfo can get you the width and height of a single PX. - /// - public Vector2D Size - { - get - { - return (Vector2D)(instance.MessageGet(BackingObject, (int)MenuScreenInputMembers.Size)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuScreenInputMembers.Size, value); - } - } - /// - /// Called when user lets go of the dialog box with the final position. Please note that the result may be off the screen. Recommend clamping between -1 and 1 on each axis. - /// - public Action OnSubmitAction - { - get - { - return (Action)(instance.MessageGet(BackingObject, (int)MenuScreenInputMembers.OnSubmitAction)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuScreenInputMembers.OnSubmitAction, value); - } - } - - /// - /// Called every tick while the user is manipulating the dialog. - /// - public Action UpdateAction - { - get - { - return (Action)(instance.MessageGet(BackingObject, (int)MenuScreenInputMembers.OnUpdateAction)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuScreenInputMembers.OnUpdateAction, value); - } - } - - public Action OnSelect - { - get - { - return (Action)instance.MessageGet(BackingObject, (int)MenuScreenInputMembers.OnSelect); - } - set - { - instance.MessageSet(BackingObject, (int)MenuScreenInputMembers.OnSelect, value); - } - } - - /// - /// Summons a dialog box that gives you a screen position when completed. - /// - /// Text displayed in the category list - /// Must be either a MenuRootCategory or MenuSubCategory object - /// Screen position origin of the dialog box. - /// Size of the dialog box. Use GetTextLength() on a Hud Object to manipulate this. Or you can specify a manual width and height APIinfo can get you the width and height of a single PX. - /// Titlebar of the Dialog window. - /// Called when user lets go of the dialog box with the final position. - /// Called every tick while the user is manipulating the dialog. - /// Called when user does not click the dialog box window to move it and cancels out of the dialog box. - /// Called when user invokes this dialog box use to refresh the Size property - public MenuScreenInput(string Text, MenuCategoryBase Parent, Vector2D Origin, Vector2D Size, string InputDialogTitle = "Move this element", Action OnSubmit = null, Action Update = null, Action Cancel = null, Action OnSelect = null) - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.MenuScreenInput); - this.Text = Text; - this.InputDialogTitle = InputDialogTitle; - this.OnSubmitAction = OnSubmit; - this.UpdateAction = Update; - this.Origin = Origin; - this.Size = Size; - this.OnCancel = Cancel; - this.OnSelect = OnSelect; - this.Parent = Parent; - - } - } - public class MenuSliderInput : MenuItemBase - { - private enum MenuSliderItemMembers : int - { - OnSubmitAction = 100, - Parent, - InputDialogTitle, - InitialPercent, - SliderPercentToValue, - OnCancel - } - /// - /// Must be either a MenuRootCategory or MenuSubCategory object - /// - public MenuCategoryBase Parent - { - set - { - instance.MessageSet(BackingObject, (int)MenuSliderItemMembers.Parent, value.BackingObject); - } - } - - /// - /// Titlebar of the Dialog window. - /// - public string InputDialogTitle - { - get - { - return (string)(instance.MessageGet(BackingObject, (int)MenuSliderItemMembers.InputDialogTitle)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuSliderItemMembers.InputDialogTitle, value); - } - } - /// - /// When the dialog box first opens set the position as a percentage based on this number. Expected value between 0 and 1. - /// - public float InitialPercent - { - get - { - return (float)(instance.MessageGet(BackingObject, (int)MenuSliderItemMembers.InitialPercent)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuSliderItemMembers.InitialPercent, value); - } - } - /// - /// Percentage value of the slider when the user submits the dialog - /// - public Action OnSubmitAction - { - get - { - return (Action)(instance.MessageGet(BackingObject, (int)MenuSliderItemMembers.OnSubmitAction)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuSliderItemMembers.OnSubmitAction, value); - } - } - /// - /// Called when the user cancels the dialog window or otherwise closes the dialog box without confirming. - /// - public Action OnCancel - { - get - { - return (Action)(instance.MessageGet(BackingObject, (int)MenuSliderItemMembers.OnCancel)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuSliderItemMembers.OnCancel, value); - } - } - - /// - /// Returned value calls toString to print the text in the dialog box. Value fed to this function is the slider percentage value. - /// - public Func SliderPercentToValue - { - get - { - return (Func)(instance.MessageGet(BackingObject, (int)MenuSliderItemMembers.SliderPercentToValue)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuSliderItemMembers.SliderPercentToValue, value); - } - } - - /// - /// Creates a dialog object and adds it to the Parent list. - /// - /// Text displayed in the category list - /// Must be either a MenuRootCategory or MenuSubCategory object - /// When the dialog box first opens set the position as a percentage based on this number. Expected value between 0 and 1. - /// Titlebar of the Dialog window. - /// Percentage value of the slider when the user submits the dialog - /// Returned value calls toString to print the text in the dialog box. Value fed to this function is the slider percentage value. - /// Called when the user cancels the dialog window or otherwise closes the dialog box without confirming. - public MenuSliderInput(string Text, MenuCategoryBase Parent, float InitialPercent, string InputDialogTitle = "Adjust Slider to modify value", Action OnSubmitAction = null, Func SliderPercentToValue = null, Action OnCancel = null) - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.MenuSliderItem); - this.Text = Text; - this.InputDialogTitle = InputDialogTitle; - this.OnSubmitAction = OnSubmitAction; - this.SliderPercentToValue = SliderPercentToValue; - this.InitialPercent = InitialPercent; - this.OnCancel = OnCancel; - this.Parent = Parent; - } - } - #endregion - - - /// - /// Class to allow adding fonts to the TextHUDApi - /// - public class FontDefinition - { - enum FontDefinitionMembers : int - { - AddCharacter = 0, - DefineFont, - AddKerning, - ReadOnly - - } - - [ProtoContract] - public struct FontCharacterDefinitionData - { - [ProtoMember(1)] - public char character; - [ProtoMember(2)] - public int texturesize; - [ProtoMember(3)] - public string charactercode; - [ProtoMember(4)] - public int uv1x; - [ProtoMember(5)] - public int uv1y; - [ProtoMember(6)] - public int sizex; - [ProtoMember(7)] - public int sizey; - [ProtoMember(8)] - public int aw; - [ProtoMember(9)] - public int lsb; - [ProtoMember(10)] - public bool forcewhite; - [ProtoMember(11)] - public MyStringId MaterialId; - } - - public object BackingDefinition; - - public FontDefinition(object BackingObject) - { - BackingDefinition = BackingObject; - } - - /// - /// Checks to see if the object is readonly. Once the definition is read only none of its properties can be modified or character definitions replaced. New character definitions can still be added if none exist. - /// - public bool ReadOnly - { - get - { - return (bool)instance.MessageGet(BackingDefinition, (int)FontDefinitionMembers.ReadOnly); - } - set - { - instance.MessageSet(BackingDefinition, (int)FontDefinitionMembers.ReadOnly, value); - } - } - - /// - /// Sets the global parameters for a font - /// - public void DefineFont(int fontbase, int lineheight, int fontsize) - { - MyTuple data = new MyTuple(fontbase, lineheight, fontsize); - instance.MessageSet(BackingDefinition, (int)FontDefinitionMembers.DefineFont, data); - } - - /// - /// Adds a character glyph - /// - /// TransparentMaterial definitions subtype id - /// must be square - /// code in hex - /// origin x - /// origin y - /// size x - /// size y - /// advance width - /// left side bearing - /// force character to grayscale in render - public void AddCharacter(char character, MyStringId material, int materialtexturesize, string charactercode, int uv1x, int uv1y, int sizex, int sizey, int aw, int lsb, bool forcewhite = false) - { - var data = new FontCharacterDefinitionData { character = character, MaterialId = material, texturesize = materialtexturesize, charactercode = charactercode, uv1x = uv1x, uv1y = uv1y, sizex = sizex, sizey = sizey, aw = aw, lsb = lsb, forcewhite = forcewhite }; - instance.MessageSet(BackingDefinition, (int)FontDefinitionMembers.AddCharacter, MyAPIGateway.Utilities.SerializeToBinary(data)); - } - - /// - /// Sets the kerning parameters. Right character must be defined first! - /// - /// how many pixels to move the right char - /// char that will be moved by the kerning - /// - public void AddKerning(int adjust, char right, char left) - { - MyTuple data = new MyTuple(adjust, right, left); - instance.MessageSet(BackingDefinition, (int)FontDefinitionMembers.AddKerning, data); - } - - } - - - #region BoxUI - /// - /// Creates a new BoxUIDefinition. This defines exactly how the UI texture is laid out on the screen. - /// - public class BoxUIDefinition - { - - public object BackingDefinition; - [ProtoContract] - public struct BoxUIDefinitionData - { - [ProtoMember(1)] - public MyStringId Material; - [ProtoMember(2)] - public int imagesize; - [ProtoMember(3)] - public int topwidthpx; - [ProtoMember(4)] - public int leftwidthpx; - [ProtoMember(5)] - public int bottomwidthpx; - [ProtoMember(6)] - public int rightwidthpx; - [ProtoMember(7)] - public int margin; - [ProtoMember(8)] - public int padding; - } - - public BoxUIDefinitionData BoxUIDef - { - set - { - instance.MessageSet(BackingDefinition, (int)BoxUIDefinitionMembers.Definition, MyAPIGateway.Utilities.SerializeToBinary(value)); - } - } - - /// - /// Returns the margin + padding + border values. subtract this from the total size to get the size of the content area of the object. - /// - public Vector2I Min - { - get - { - return (Vector2I)instance.MessageGet(BackingDefinition, (int)BoxUIDefinitionMembers.Min); - } - } - - enum BoxUIDefinitionMembers : int - { - Definition = 0, - Min - } - - - - public BoxUIDefinition() - { - BackingDefinition = instance.CreateMessage(MessageTypes.UIDefinition); - } - public BoxUIDefinition(MyStringId Material, int imagesize, int topwidthpx, int leftwidthpx, int bottomwidthpx, int rightwidthpx, int margin = 0, int padding = 0) - { - BackingDefinition = instance.CreateMessage(MessageTypes.UIDefinition); - var data = new BoxUIDefinitionData() - { - Material = Material, - imagesize = imagesize, - topwidthpx = topwidthpx, - leftwidthpx = leftwidthpx, - bottomwidthpx = bottomwidthpx, - rightwidthpx = rightwidthpx, - margin = margin, - padding = padding - }; - BoxUIDef = data; - - } - public BoxUIDefinition(object BackingObject) - { - BackingDefinition = BackingObject; - } - } - - - /// - /// Unused at the moment, but will be expanded on in the future. - /// - public class BoxUIBehaviourDef - { - public object BackingDefinition; - - public BoxUIBehaviourDef() - { - BackingDefinition = instance.CreateMessage(MessageTypes.UIBehaviourDefinition); - } - public BoxUIBehaviourDef(object BackingObject) - { - BackingDefinition = BackingObject; - } - } - - public abstract class BoxUIBase - { - internal object BackingObject; - internal BoxUIBase m_Parent; - private enum BoxUIBaseMembers : int - { - Origin = 0, - BackgroundColor, - Width, - Height, - Definition, - Behaviour, - Visible, - Parent, - HideHud - } - - /// - /// Sets the BoxUI's position in PX values. - /// - public Vector2I Origin - { - get - { - return (Vector2I)instance.MessageGet(BackingObject, (int)BoxUIBaseMembers.Origin); - } - set - { - instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.Origin, value); - } - } - - /// - /// Sets the width of the box in PX values - /// - public int Width - { - get - { - return (int)instance.MessageGet(BackingObject, (int)BoxUIBaseMembers.Width); - } - set - { - instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.Width, value); - } - } - - /// - /// Sets the Height in PX values - /// - public int Height - { - get - { - return (int)instance.MessageGet(BackingObject, (int)BoxUIBaseMembers.Height); - } - set - { - instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.Height, value); - } - } - - /// - /// Sets the background color, default White - /// - public Color BackgroundColor - { - get - { - return (Color)instance.MessageGet(BackingObject, (int)BoxUIBaseMembers.BackgroundColor); - } - set - { - instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.BackgroundColor, value); - } - } - /// - /// Element and subelements visible - /// - public bool Visible - { - get - { - return (bool)instance.MessageGet(BackingObject, (int)BoxUIBaseMembers.Visible); - } - set - { - instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.Visible, value); - } - } - - /// - /// Sets the backing UI definition, please set using SetDefinition - /// - public object DefinitionObject - { - get - { - return (object)instance.MessageGet(BackingObject, (int)BoxUIBaseMembers.Definition); - } - set - { - if(value is BoxUIDefinition) - { - instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.Definition, (value as BoxUIDefinition).BackingDefinition); - return; - } - instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.Definition, value); - } - } - - /// - /// Sets the backing behaviour object, please set using SetBehaviour - /// - public object BehaviourObject - { - get - { - return (object)instance.MessageGet(BackingObject, (int)BoxUIBaseMembers.Behaviour); - } - set - { - if(value is BoxUIBehaviourDef) - { - instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.Behaviour, (value as BoxUIDefinition).BackingDefinition); - return; - } - - instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.Behaviour, value); - } - } - - /// - /// Defaults to true. - /// - public bool HideHud - { - get - { - return (bool)instance.MessageGet(BackingObject, (int)BoxUIBaseMembers.HideHud); - } - set - { - instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.HideHud, value); - } - } - - /// - /// Gets or sets the parent object, please be careful not to create a circular reference. Sub objects are automatically offset by the top left corner of the parent object. - /// - public BoxUIBase Parent - { - get - { - return m_Parent; - - } - set - { - m_Parent = value; - instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.Parent, m_Parent.BackingObject); - } - } - - - public void SetDefinition(BoxUIDefinition def) - { - DefinitionObject = def.BackingDefinition; - } - - public void SetBehaviour(BoxUIBehaviourDef def) - { - BehaviourObject = def.BackingDefinition; - } - - } - public class BoxUIContainer : BoxUIBase - { - - - public BoxUIContainer() - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.BoxUIContainer); - } - } - public class BoxUIText : BoxUIBase - { - - enum BoxUITextMembers : int - { - SetTextContent = 100 - } - - public BoxUIText() - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.BoxUIText); - } - - /// - /// Automatically sets the message to use the pixel offset types. Please note that the BoxUI will control the .Origin of the Message, you can use the offset value in PX to move it. Please note Scale is now the pt size of the font. - /// - /// - public void SetTextContent(HUDMessage Message) - { - instance.MessageSet(BackingObject, (int)BoxUITextMembers.SetTextContent, Message.BackingObject); - } - } - - public class BoxUIImage : BoxUIBase - { - enum BoxUIImageMembers : int - { - SetImageContent = 100 - } - - public BoxUIImage() - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.BoxUIImage); - } - - /// - /// Sets the image, please note that image parameters will now be forced to the Pixel setting. Height and Width parameters are measured in px - /// - /// - public void SetImageContent(BillBoardHUDMessage Message) - { - instance.MessageSet(BackingObject, (int)BoxUIImageMembers.SetImageContent, Message.BackingObject); - } - } - #endregion - } -} \ No newline at end of file diff --git a/Gamemode Mods/Stable/StarCoreCTF/Data/Scripts/CTF/NetworkDebug.cs b/Gamemode Mods/Stable/StarCoreCTF/Data/Scripts/CTF/NetworkDebug.cs deleted file mode 100644 index d4c3a415e..000000000 --- a/Gamemode Mods/Stable/StarCoreCTF/Data/Scripts/CTF/NetworkDebug.cs +++ /dev/null @@ -1,107 +0,0 @@ -using Sandbox.ModAPI; -using System; -using System.CodeDom; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using VRage.Game.Components; -using VRage.Utils; - -namespace Jnick_SCModRepository.StarCoreCTF.Data.Scripts.CTF -{ - [MySessionComponentDescriptor(MyUpdateOrder.AfterSimulation)] - public class NetworkDebug : MySessionComponentBase - { - const int AveragingPeriod = 60; - - private static NetworkDebug I; - private int nextLog = 0; - private Dictionary> downLoad = new Dictionary>(); - private Dictionary> upLoad = new Dictionary>(); - - /// - /// Use this method - /// - /// - /// - /// - public static byte[] SerializeLogged(string type, object obj) - { - byte[] serialized = MyAPIGateway.Utilities.SerializeToBinary(obj); - I.LogUsageUp(type, serialized.Length); - return serialized; - } - private void LogUsageUp(string type, int usage) - { - if (!upLoad.ContainsKey(type)) - upLoad.Add(type, new List()); - upLoad[type].Add(usage); - } - - /// - /// Use this method - /// - /// - /// - /// - /// - public static T DeserializeLogged(string type, byte[] serialized) - { - T obj = MyAPIGateway.Utilities.SerializeFromBinary(serialized); - I.LogUsageDown(type, serialized.Length); - return obj; - } - private void LogUsageDown(string type, int usage) - { - if (!downLoad.ContainsKey(type)) - downLoad.Add(type, new List()); - downLoad[type].Add(usage); - } - - public override void UpdateAfterSimulation() - { - nextLog--; - if (nextLog <= 0) - { - foreach (var upKvp in upLoad) - { - float averageUp = 0; - long total = 0; - foreach (var size in upKvp.Value) - { - averageUp += size; - total += size; - } - averageUp /= (AveragingPeriod/60f); - MyLog.Default.WriteLineAndConsole($"NetworkDebug: [UP] {upKvp.Key} {Math.Round(averageUp/1000f, 2)}kb/s" + (upKvp.Value.Count > 0 ? $" (avg. {total / upKvp.Value.Count}b), ct. {upKvp.Value.Count / (AveragingPeriod / 60)})" : "")); - upKvp.Value.Clear(); - } - foreach (var downKvp in downLoad) - { - float averageDown = 0; - long total = 0; - foreach (var size in downKvp.Value) - { - averageDown += size; - total += size; - } - averageDown /= (AveragingPeriod / 60f); - MyLog.Default.WriteLineAndConsole($"NetworkDebug: [DOWN] {downKvp.Key} {Math.Round(averageDown / 1000f, 2)}kb/s" + (downKvp.Value.Count > 0 ? $" (avg. {total / downKvp.Value.Count}b, ct. {downKvp.Value.Count / (AveragingPeriod / 60)})" : "")); - downKvp.Value.Clear(); - } - nextLog = AveragingPeriod; - } - } - - public override void BeforeStart() - { - I = this; - } - - protected override void UnloadData() - { - I = null; - } - } -} diff --git a/Gamemode Mods/Stable/StarCoreCTF/Data/Scripts/CTF/Packets/EventInfo.cs b/Gamemode Mods/Stable/StarCoreCTF/Data/Scripts/CTF/Packets/EventInfo.cs deleted file mode 100644 index 3952ab870..000000000 --- a/Gamemode Mods/Stable/StarCoreCTF/Data/Scripts/CTF/Packets/EventInfo.cs +++ /dev/null @@ -1,24 +0,0 @@ -using ProtoBuf; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using static Klime.CTF.CTF; - -namespace Jnick_SCModRepository.StarCoreCTF.Data.Scripts.CTF.Packets -{ - [ProtoContract] - public class EventInfo - { - [ProtoMember(600)] - public string info; - [ProtoMember(601)] - public InfoType infotype; - - public EventInfo() - { - - } - } -} diff --git a/Gamemode Mods/Stable/StarCoreCTF/Data/Scripts/CTF/Packets/Flag.cs b/Gamemode Mods/Stable/StarCoreCTF/Data/Scripts/CTF/Packets/Flag.cs deleted file mode 100644 index 69587ac8a..000000000 --- a/Gamemode Mods/Stable/StarCoreCTF/Data/Scripts/CTF/Packets/Flag.cs +++ /dev/null @@ -1,179 +0,0 @@ -using ProtoBuf; -using Sandbox.Game.Entities; -using Sandbox.ModAPI; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using static Klime.CTF.CTF; -using VRage.Game.Entity; -using VRage.Game.ModAPI; -using VRageMath; -using VRage.Utils; - -namespace Jnick_SCModRepository.StarCoreCTF.Data.Scripts.CTF -{ - [ProtoContract] - public class Flag - { - public MyEntity flag_entity; - public IMyPlayer carrying_player; - public IMyFaction owning_faction; - - [ProtoMember(1)] - public long entity_id; - - [ProtoMember(2)] - public FlagState state; - - [ProtoMember(3)] - public int lifetime; - - [ProtoMember(4)] - public long carrying_player_id = -1; - - [ProtoMember(5)] - public Vector3D current_pos; - - [ProtoMember(8)] - public Quaternion current_rotation; - - [ProtoMember(6)] - public long owning_faction_id; - - [ProtoMember(7)] - public int current_drop_life = 0; - - public Vector3D homePos; - - public Dictionary capture_positions = new Dictionary(); // This seems to be the majority of network load - fix? - - [ProtoMember(10)] - public Color flag_color; - - [ProtoMember(11)] - public FlagType flag_type; - - [ProtoMember(12)] - public float grip_strength = 100; - - [ProtoMember(13)] - public float regen_modifier = 0.2f; - - /// - /// Counter (in ticks) representing time since a recapture was started. - /// - [ProtoMember(14)] - public ushort RecaptureTime = 0; - - public float lastTickAcceleration; - - [ProtoIgnore] - public MyCubeGrid attachedGrid = null; - - [ProtoIgnore] - public MatrixD attachedLocalMatrix = MatrixD.Identity; - - public Flag() - { - - } - - //Single - public Flag(long entity_id, FlagState state, Vector3D homePos, Dictionary capture_positions, - long owning_faction_id, Color flag_color, FlagType flag_type, float grip_strength, float regen_modifier, float lastTickAcceleration) - { - this.entity_id = entity_id; - this.state = state; - this.homePos = homePos; - this.current_pos = homePos; - this.current_rotation = Quaternion.Identity; - this.owning_faction_id = owning_faction_id; - this.flag_color = flag_color; - this.capture_positions = capture_positions; - this.flag_type = flag_type; - this.grip_strength = grip_strength; - this.regen_modifier = regen_modifier; - this.lastTickAcceleration = lastTickAcceleration; - } - - //Double - public Flag(long entity_id, FlagState state, Vector3D homePos, long owning_faction_id, - Color flag_color, FlagType flag_type, float grip_strength, float regen_modifier, float lastTickAcceleration) - { - this.entity_id = entity_id; - this.state = state; - this.homePos = homePos; - this.current_pos = homePos; - this.current_rotation = Quaternion.Identity; - this.owning_faction_id = owning_faction_id; - this.flag_color = flag_color; - this.flag_type = flag_type; - this.grip_strength = grip_strength; - this.regen_modifier = regen_modifier; - this.lastTickAcceleration = lastTickAcceleration; - } - - public void Init() - { - flag_entity = MyAPIGateway.Entities.GetEntityById(entity_id) as MyEntity; - if (owning_faction_id != 0) - { - owning_faction = MyAPIGateway.Session.Factions.TryGetFactionById(owning_faction_id); - } - } - - - - public List GetNearbyPlayers(ref List all_players, ref List return_list, bool cockpit_allowed, double flagPickupRadius) - { - return_list.Clear(); - foreach (var player in all_players) - { - if (player.Character != null && !player.Character.IsDead) - { - double distance = Vector3D.Distance(player.Character.WorldMatrix.Translation, flag_entity.WorldMatrix.Translation); - - if (cockpit_allowed && distance <= flagPickupRadius && player.Controller?.ControlledEntity?.Entity is IMyCockpit) //distance <= [number] is the pickup radius - { - return_list.Add(player); - } - - //disabled pickup from suit - // else - // { - // if (player.Controller?.ControlledEntity?.Entity is IMyCharacter && distance <= 40) - // { - // return_list.Add(player); - // } - // } - } - } - return return_list; - } - - public void UpdateFromNetwork(Flag incoming_flag) - { - if (this.flag_entity != null) - { - MatrixD matrix = MatrixD.CreateFromQuaternion(incoming_flag.current_rotation); - matrix.Translation = incoming_flag.current_pos; - this.flag_entity.WorldMatrix = matrix; - } - - this.state = incoming_flag.state; - this.lifetime = incoming_flag.lifetime; - this.carrying_player_id = incoming_flag.carrying_player_id; - this.current_pos = incoming_flag.current_pos; - this.current_rotation = incoming_flag.current_rotation; - this.owning_faction_id = incoming_flag.owning_faction_id; - this.current_drop_life = incoming_flag.current_drop_life; - this.flag_color = incoming_flag.flag_color; - this.flag_type = incoming_flag.flag_type; - this.grip_strength = incoming_flag.grip_strength; - this.regen_modifier = incoming_flag.regen_modifier; - this.RecaptureTime = incoming_flag.RecaptureTime; - } - } -} diff --git a/Gamemode Mods/Stable/StarCoreCTF/Data/Scripts/CTF/Packets/GameState.cs b/Gamemode Mods/Stable/StarCoreCTF/Data/Scripts/CTF/Packets/GameState.cs deleted file mode 100644 index ead6fa27f..000000000 --- a/Gamemode Mods/Stable/StarCoreCTF/Data/Scripts/CTF/Packets/GameState.cs +++ /dev/null @@ -1,68 +0,0 @@ -using ProtoBuf; -using Sandbox.ModAPI; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using static Klime.CTF.CTF; -using VRage.Game.ModAPI; - -namespace Jnick_SCModRepository.StarCoreCTF.Data.Scripts.CTF -{ - [ProtoContract] - public class GameState - { - [ProtoMember(50)] - public CurrentGameState currentgamestate; - - [ProtoMember(51)] - public Dictionary faction_scores = new Dictionary(); - - [ProtoMember(52)] - public string winning_tag = ""; - - [ProtoMember(53)] - public List ordered_faction_tags = new List(); - - public GameState() - { - - } - - public GameState(CurrentGameState currentgamestate, List currentflags) - { - this.currentgamestate = currentgamestate; - foreach (var flag in currentflags) - { - if (flag.flag_type == FlagType.Single) - { - foreach (var faction_id in flag.capture_positions.Keys) - { - faction_scores.Add(faction_id, 0); - IMyFaction faction = MyAPIGateway.Session.Factions.TryGetFactionById(faction_id); - if (faction != null) - { - ordered_faction_tags.Add(faction.Tag); - } - } - } - else - { - if (!faction_scores.ContainsKey(flag.owning_faction.FactionId)) - { - faction_scores.Add(flag.owning_faction.FactionId, 0); - } - } - } - } - - public void UpdateScore(long incoming_faction) - { - if (faction_scores.ContainsKey(incoming_faction)) - { - faction_scores[incoming_faction] += 1; - } - } - } -} diff --git a/Gamemode Mods/Stable/StarCoreCTF/Data/Scripts/CTF/Packets/PacketBase.cs b/Gamemode Mods/Stable/StarCoreCTF/Data/Scripts/CTF/Packets/PacketBase.cs deleted file mode 100644 index 30fe31edd..000000000 --- a/Gamemode Mods/Stable/StarCoreCTF/Data/Scripts/CTF/Packets/PacketBase.cs +++ /dev/null @@ -1,28 +0,0 @@ -using ProtoBuf; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using static Klime.CTF.CTF; - -namespace Jnick_SCModRepository.StarCoreCTF.Data.Scripts.CTF -{ - [ProtoContract] - public class PacketBase - { - [ProtoMember(200)] - public PacketOp packet_op; - - [ProtoMember(201)] - public List all_flags_packet = new List(); - - [ProtoMember(202)] - public GameState gamestate_packet; - - public PacketBase() - { - - } - } -} diff --git a/Gamemode Mods/Stable/StarCoreCTF/Data/Scripts/CTF/Packets/SerializableMatrix.cs b/Gamemode Mods/Stable/StarCoreCTF/Data/Scripts/CTF/Packets/SerializableMatrix.cs deleted file mode 100644 index 3a705f483..000000000 --- a/Gamemode Mods/Stable/StarCoreCTF/Data/Scripts/CTF/Packets/SerializableMatrix.cs +++ /dev/null @@ -1,99 +0,0 @@ -using ProtoBuf; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using VRageMath; - -namespace Jnick_SCModRepository.StarCoreCTF.Data.Scripts.CTF -{ - [ProtoContract] - public class SerializableMatrix - { - [ProtoMember(100)] - public double M11; - - [ProtoMember(102)] - public double M12; - - [ProtoMember(103)] - public double M13; - - [ProtoMember(104)] - public double M14; - - [ProtoMember(105)] - public double M21; - - [ProtoMember(106)] - public double M22; - - [ProtoMember(107)] - public double M23; - - [ProtoMember(108)] - public double M24; - - [ProtoMember(109)] - public double M31; - - [ProtoMember(110)] - public double M32; - - [ProtoMember(111)] - public double M33; - - [ProtoMember(112)] - public double M34; - - [ProtoMember(113)] - public double M41; - - [ProtoMember(114)] - public double M42; - - [ProtoMember(115)] - public double M43; - - [ProtoMember(116)] - public double M44; - - public SerializableMatrix() - { - - } - - public SerializableMatrix(MatrixD matrix) - { - M11 = matrix.M11; - M12 = matrix.M12; - M13 = matrix.M13; - M14 = matrix.M14; - M21 = matrix.M21; - M22 = matrix.M22; - M23 = matrix.M23; - M24 = matrix.M24; - M31 = matrix.M31; - M32 = matrix.M32; - M33 = matrix.M33; - M34 = matrix.M34; - M41 = matrix.M41; - M42 = matrix.M42; - M43 = matrix.M43; - M44 = matrix.M44; - } - - public static implicit operator SerializableMatrix(MatrixD matrix) - { - return new SerializableMatrix(matrix); - } - - public static implicit operator MatrixD(SerializableMatrix v) - { - if (v == null) - return new MatrixD(); - return new MatrixD(v.M11, v.M12, v.M13, v.M14, v.M21, v.M22, v.M23, v.M24, v.M31, v.M32, v.M33, v.M34, v.M41, v.M42, v.M43, v.M44); - } - } -} diff --git a/Gamemode Mods/Stable/StarCoreCTF/Data/audio_ctf.sbc b/Gamemode Mods/Stable/StarCoreCTF/Data/audio_ctf.sbc deleted file mode 100644 index 42e555a9a..000000000 --- a/Gamemode Mods/Stable/StarCoreCTF/Data/audio_ctf.sbc +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - MyObjectBuilder_AudioDefinition - ctf_ping - - AMB - 1000 - 0.3 - false - - - CustomAudio/ctf_ping.wav - - - - - - MyObjectBuilder_AudioDefinition - FlagTaken - - AMB - 1000 - 0.3 - false - - - CustomAudio/flagtaken.wav - - - - - - MyObjectBuilder_AudioDefinition - FlagDropped - - AMB - 1000 - 0.3 - false - - - CustomAudio/flagdropped.wav - - - - - - MyObjectBuilder_AudioDefinition - FlagReset - - AMB - 1000 - 0.3 - false - - - CustomAudio/flagreset.wav - - - - - - MyObjectBuilder_AudioDefinition - FlagCaptured - - AMB - 1000 - 0.3 - false - - - CustomAudio/flagcaptured.wav - - - - - \ No newline at end of file diff --git a/Gamemode Mods/Stable/StarCoreCTF/Invalid_copy to DS and client.bat b/Gamemode Mods/Stable/StarCoreCTF/Invalid_copy to DS and client.bat deleted file mode 100644 index efb7a3ed8..000000000 --- a/Gamemode Mods/Stable/StarCoreCTF/Invalid_copy to DS and client.bat +++ /dev/null @@ -1,31 +0,0 @@ -@echo off -rem Testing mods in DS by yourself can be done without the need to re-publish every time. -rem You can simply update the files that are on your machine! -rem This will only work for you, anyone else joining the server will of course download the mod from the workshop. - -rem To use: -rem 1. Copy this .bat file in the ROOT folder of your local mod (e.g. %appdata%/SpaceEngineers/Mods/YourLocalMod/) - -rem 2. Edit this variable if applicable (do not add quotes or end with backslash). -set STEAM_PATH=C:\Program Files\Steam - -rem 3. Edit this with your mod's workshop id. -set WORKSHOP_ID=3018817811 - -rem Now you can run it every time you want to update the mod on DS and client. - - - -rem Don't edit the below unless you really need different paths. -rem NOTE: don't add quotes and don't end with a backslash! - -set CLIENT_PATH=O:\SteamLibrary\steamapps\workshop\content\244850\%WORKSHOP_ID% -set DS_PATH=%APPDATA%\SpaceEngineersDedicated\content\244850\%WORKSHOP_ID% - -rmdir "%CLIENT_PATH%" /S /Q -rmdir "%DS_PATH%" /S /Q - -robocopy.exe .\ "%DS_PATH%" *.* /S /xd .git bin obj .vs ignored /xf *.lnk *.git* *.bat *.zip *.7z *.blend* *.md *.log *.sln *.csproj *.csproj.user *.ruleset modinfo.sbmi -robocopy.exe "%DS_PATH%" "%CLIENT_PATH%" *.* /S - -pause \ No newline at end of file diff --git a/Gamemode Mods/Stable/StarCoreCTF/Models/flagpole.mwm b/Gamemode Mods/Stable/StarCoreCTF/Models/flagpole.mwm deleted file mode 100644 index bdab7e269..000000000 Binary files a/Gamemode Mods/Stable/StarCoreCTF/Models/flagpole.mwm and /dev/null differ diff --git a/Gamemode Mods/Stable/StarCoreCTF/Models/oldflagpole.mwm b/Gamemode Mods/Stable/StarCoreCTF/Models/oldflagpole.mwm deleted file mode 100644 index dbeaf045c..000000000 Binary files a/Gamemode Mods/Stable/StarCoreCTF/Models/oldflagpole.mwm and /dev/null differ diff --git a/Gamemode Mods/Stable/StarCoreCTF/Textures/ctf_score_background.DDS b/Gamemode Mods/Stable/StarCoreCTF/Textures/ctf_score_background.DDS deleted file mode 100644 index 65baa37e6..000000000 Binary files a/Gamemode Mods/Stable/StarCoreCTF/Textures/ctf_score_background.DDS and /dev/null differ diff --git a/Gamemode Mods/Stable/StarCoreCTF/modinfo_main.sbmi b/Gamemode Mods/Stable/StarCoreCTF/modinfo_main.sbmi deleted file mode 100644 index 4019370d7..000000000 --- a/Gamemode Mods/Stable/StarCoreCTF/modinfo_main.sbmi +++ /dev/null @@ -1,11 +0,0 @@ - - - 76561198071098415 - 0 - - - 3018817811 - Steam - - - \ No newline at end of file diff --git a/Gamemode Mods/Stable/StarCoreCTF/modinfo_stable.sbmi b/Gamemode Mods/Stable/StarCoreCTF/modinfo_stable.sbmi deleted file mode 100644 index 76070e063..000000000 --- a/Gamemode Mods/Stable/StarCoreCTF/modinfo_stable.sbmi +++ /dev/null @@ -1,11 +0,0 @@ - - - 76561199117576365 - 0 - - - 3343111217 - Steam - - - diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Models/Cubes/InnerShield.mwm b/Gamemode Mods/Stable/Starcore_Sharetrack/Models/Cubes/InnerShield.mwm deleted file mode 100644 index f288b3aa4..000000000 Binary files a/Gamemode Mods/Stable/Starcore_Sharetrack/Models/Cubes/InnerShield.mwm and /dev/null differ diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/hate.txt b/Gamemode Mods/Stable/Starcore_Sharetrack/hate.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Aristeas_copy to DS and client.bat b/Gamemode Mods/StarCore SUGMA Gamemodes/Aristeas_copy to DS and client.bat similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Aristeas_copy to DS and client.bat rename to Gamemode Mods/StarCore SUGMA Gamemodes/Aristeas_copy to DS and client.bat diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Audio/SUGMA/scored.wav b/Gamemode Mods/StarCore SUGMA Gamemodes/Audio/SUGMA/scored.wav similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Audio/SUGMA/scored.wav rename to Gamemode Mods/StarCore SUGMA Gamemodes/Audio/SUGMA/scored.wav diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/AudioDefinitions_SUGMA.sbc b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/AudioDefinitions_SUGMA.sbc similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/AudioDefinitions_SUGMA.sbc rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/AudioDefinitions_SUGMA.sbc diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/API/ShareTrackApi.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/API/ShareTrackApi.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/API/ShareTrackApi.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/API/ShareTrackApi.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/API/ShieldApi.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/API/ShieldApi.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/API/ShieldApi.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/API/ShieldApi.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Commands/CommandHandler.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Commands/CommandHandler.cs similarity index 88% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Commands/CommandHandler.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Commands/CommandHandler.cs index 36ce74414..cfd40f79b 100644 --- a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Commands/CommandHandler.cs +++ b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Commands/CommandHandler.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using Sandbox.ModAPI; +using SC.SUGMA.Utilities; namespace SC.SUGMA.Commands { @@ -31,6 +32,16 @@ public class CommandHandler "Ends the current match.", CommandMethods.End ), + ["pause"] = new Command( + "SUGMA.Match", + "Locks all grids in place and disables weapons.", + CommandMethods.Pause + ), + ["clearboard"] = new Command( + "SUGMA.Match", + "Ends the current match, deletes all grids, and returns players to the respawn screen.", + CommandMethods.ClearBoard + ), #endregion @@ -60,7 +71,12 @@ public class CommandHandler "SUGMA.Utils", "Automatically balance tracked grids", CommandMethods.AutoBalance - ) + ), + ["clearlcd"] = new Command( + "SUGMA.Utils", + "Clear all image lcds.", + args => SUtils.ClearImageLcds() + ) #endregion }; diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Commands/CommandMethods.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Commands/CommandMethods.cs similarity index 87% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Commands/CommandMethods.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Commands/CommandMethods.cs index b6573db2d..6d8ffb9d7 100644 --- a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Commands/CommandMethods.cs +++ b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Commands/CommandMethods.cs @@ -59,6 +59,22 @@ public static void End(string[] args) MyAPIGateway.Utilities.ShowMessage("SUGMA", "Match ended."); } + public static void Pause(string[] args) + { + if (MyAPIGateway.Session.IsServer) + new PauseRequestPacket().Received(0); + else + HeartNetwork.I.SendToServer(new PauseRequestPacket()); + } + + public static void ClearBoard(string[] args) + { + if (MyAPIGateway.Session.IsServer) + new ClearBoardRequestPacket(true).Received(0); + else + HeartNetwork.I.SendToServer(new ClearBoardRequestPacket(true)); + } + #endregion //public static void SetMatchTime(string[] args) diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/ComponentBase.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/ComponentBase.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/ComponentBase.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/ComponentBase.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/Domination/DominationGamemode.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/Domination/DominationGamemode.cs similarity index 70% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/Domination/DominationGamemode.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/Domination/DominationGamemode.cs index 989bb1670..e225bf756 100644 --- a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/Domination/DominationGamemode.cs +++ b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/Domination/DominationGamemode.cs @@ -1,13 +1,15 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using Sandbox.ModAPI; using SC.SUGMA.GameModes.Elimination; using SC.SUGMA.GameState; +using SC.SUGMA.Utilities; using VRage.Game.ModAPI; using VRageMath; namespace SC.SUGMA.GameModes.Domination { - internal class DominationGamemode : EliminationGamemode + internal partial class DominationGamemode : EliminationGamemode { /// /// The number of seconds to drain one ticket per captured zone. @@ -15,43 +17,24 @@ internal class DominationGamemode : EliminationGamemode public const float ZoneTicketDrainRate = 1.5f; private PointTracker _zonePointTracker; + internal ZoneDef[] ZonePositions = ZonePositionDefs["diagonal"]; public List FactionZones = new List(); - public int RandomZoneCount = 3; - public bool DoRandomZones = false; + //public bool DoRandomZones = false; public override string ReadableName { get; internal set; } = "Team Domination"; public override string Description { get; internal set; } = "Factions fight until tickets run out. Kill enemy players or capture zones to remove tickets."; - internal ZoneDef[] FixedZonePositions = { - new ZoneDef - { - Position = Vector3D.Zero, - Radius = 1000, - CaptureTime = 20, - }, - new ZoneDef - { - Position = new Vector3D(0, 0, 4000), - Radius = 500, - CaptureTime = 15, - }, - new ZoneDef - { - Position = new Vector3D(0, 0, -4000), - Radius = 500, - CaptureTime = 15, - }, - }; - - //public TDMZonesGamemode() - //{ - // ArgumentParser += new ArgumentParser( - // new ArgumentParser.ArgumentDefinition(text => int.TryParse(text, out RandomZoneCount), "zc", "zone-count", "The number of zones in the arena. Only applies if randomization is enabled."), - // new ArgumentParser.ArgumentDefinition(text => DoRandomZones = true, "rz", "random-zones", "Enables randomly-placed zones.") - // ); - //} + public DominationGamemode() + { + ArgumentParser += new ArgumentParser( + new ArgumentParser.ArgumentDefinition( + text => ZonePositions = ZonePositionDefs.GetValueOrDefault(text, ZonePositions), "zc", "zone-config", $"The arrangement of zones in the arena.\nAvailable configs:\n| {string.Join("\n| ", ZonePositionDefs.Keys)}") + //new ArgumentParser.ArgumentDefinition( + // text => DoRandomZones = true, "rz", "random-zones", "Enables randomly-placed zones.") + ); + } public override void StartRound(string[] arguments = null) { @@ -72,7 +55,7 @@ public override void StartRound(string[] arguments = null) //} //else //{ - foreach (var zone in FixedZonePositions) + foreach (var zone in ZonePositions) FactionZones.Add(new FactionSphereZone(zone.Position, zone.Radius, zone.CaptureTime)); //} diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/Domination/DominationHud.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/Domination/DominationHud.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/Domination/DominationHud.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/Domination/DominationHud.cs diff --git a/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/Domination/ZonePositions.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/Domination/ZonePositions.cs new file mode 100644 index 000000000..c657595b9 --- /dev/null +++ b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/Domination/ZonePositions.cs @@ -0,0 +1,79 @@ +using System.Collections.Generic; +using VRageMath; +using static SC.SUGMA.GameModes.Domination.DominationGamemode; + +namespace SC.SUGMA.GameModes.Domination +{ + internal partial class DominationGamemode + { + internal static readonly Dictionary ZonePositionDefs = new Dictionary + { + ["one"] = new [] + { + new ZoneDef + { + Position = Vector3D.Zero, + Radius = 1000, + CaptureTime = 20, + }, + }, + ["two"] = new [] + { + new ZoneDef + { + Position = new Vector3D(0, 0, 4000), + Radius = 500, + CaptureTime = 15, + }, + new ZoneDef + { + Position = new Vector3D(0, 0, -4000), + Radius = 500, + CaptureTime = 15, + }, + }, + ["three"] = new [] + { + new ZoneDef + { + Position = new Vector3D(0, 0, 4000), + Radius = 500, + CaptureTime = 15, + }, + new ZoneDef + { + Position = Vector3D.Zero, + Radius = 1000, + CaptureTime = 20, + }, + new ZoneDef + { + Position = new Vector3D(0, 0, -4000), + Radius = 500, + CaptureTime = 15, + }, + }, + ["diagonal"] = new [] + { + new ZoneDef + { + Position = new Vector3D(2828.42712, 0, 2828.42712), + Radius = 500, + CaptureTime = 15, + }, + new ZoneDef + { + Position = Vector3D.Zero, + Radius = 1000, + CaptureTime = 20, + }, + new ZoneDef + { + Position = new Vector3D(-2828.42712, 0, -2828.42712), // weird number puts the zone at 4km from center + Radius = 500, + CaptureTime = 15, + }, + }, + }; + } +} diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/Elimination/EliminationGamemode.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/Elimination/EliminationGamemode.cs similarity index 96% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/Elimination/EliminationGamemode.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/Elimination/EliminationGamemode.cs index 3d1c9acf2..ad0a0a902 100644 --- a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/Elimination/EliminationGamemode.cs +++ b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/Elimination/EliminationGamemode.cs @@ -63,6 +63,9 @@ public override void UpdateActive() if (OnFactionKilled(factionKvp)) return; + if (_matchTimer.IsMatchEnded && MyAPIGateway.Session.IsServer) + StopRound(); + //double matchRatio = 1 - currentPoints / basePoints; // //if (matchRatio <= 0.76) // If within 12 seconds of 15:00 matchtime (assuming 20:00 total) @@ -231,7 +234,7 @@ internal override void DisplayWinMessage() MyAPIGateway.Utilities.ShowNotification("YOU ARE ALL LOSERS.", 10000, "Red"); return; } - + MyAPIGateway.Utilities.ShowNotification($"A WINNER IS [{_winningFaction?.Name}]!", 10000); } @@ -298,4 +301,4 @@ internal virtual bool OnFactionKilled(IMyFaction faction) return false; } } -} \ No newline at end of file +} diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/Elimination/EliminationHud.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/Elimination/EliminationHud.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/Elimination/EliminationHud.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/Elimination/EliminationHud.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/Elimination/EliminationHud_TeamBanner.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/Elimination/EliminationHud_TeamBanner.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/Elimination/EliminationHud_TeamBanner.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/Elimination/EliminationHud_TeamBanner.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/TeamDeathMatch/TeamDeathmatchGamemode.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/TeamDeathMatch/TeamDeathmatchGamemode.cs similarity index 95% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/TeamDeathMatch/TeamDeathmatchGamemode.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/TeamDeathMatch/TeamDeathmatchGamemode.cs index 47c1ef4e9..1c006051f 100644 --- a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/TeamDeathMatch/TeamDeathmatchGamemode.cs +++ b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/TeamDeathMatch/TeamDeathmatchGamemode.cs @@ -10,7 +10,7 @@ namespace SC.SUGMA.GameModes.TeamDeathmatch { internal class TeamDeathmatchGamemode : GamemodeBase { - public static double MatchDuration = 15; + public static double MatchDuration = 10; public static int VictoryPoints = -1; public static double RespawnTimeSeconds = 10; @@ -60,7 +60,7 @@ public override void UpdateActive() //if (PointTracker == null || MatchTimer == null || // TrackedFactions == null) // ten billion nullchecks of aristeas // return; - if (MatchTimer.IsMatchEnded) + if (MatchTimer.IsMatchEnded && MyAPIGateway.Session.IsServer) StopRound(); } diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/TeamDeathMatch/TeamDeathmatchHud.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/TeamDeathMatch/TeamDeathmatchHud.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/TeamDeathMatch/TeamDeathmatchHud.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameModes/TeamDeathMatch/TeamDeathmatchHud.cs diff --git a/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/BounceZone.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/BounceZone.cs new file mode 100644 index 000000000..5b787af9f --- /dev/null +++ b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/BounceZone.cs @@ -0,0 +1,305 @@ +using System; +using System.Collections.Generic; +using Sandbox.Game.Entities; +using Sandbox.ModAPI; +using VRage.Game; +using VRage.Game.Components; +using VRage.Game.Entity; +using VRage.Game.ModAPI; +using VRage.Utils; +using VRageMath; + +namespace SC.SUGMA.GameState +{ + internal class BounceZone : ComponentBase + { + private readonly BoundingSphereD _combatNearSphere; + private BoundingSphereD _combatMinSphere; + private BoundingSphereD _combatMaxSphere; + + private int _ticks; + private int _fastStart; + + private readonly HashSet _skipEntityTypes = new HashSet { /* Add pre-ignored Types Here */ }; + private readonly List _managedEntities = new List(1000); + + private readonly BoxDrawing _sphereDraw; + + public BounceZone(double combatRadius) + { + var combatNearEdge = combatRadius - 1; + + _combatNearSphere = new BoundingSphereD(Vector3D.Zero, combatNearEdge); + _combatMinSphere = new BoundingSphereD(Vector3D.Zero, combatRadius); + _combatMaxSphere = new BoundingSphereD(Vector3D.Zero, combatRadius + 20000); + + _sphereDraw = new BoxDrawing(combatRadius); + } + + // ReSharper disable once UnusedMember.Local + private BounceZone() + { + } + + public override void Close() + { + + } + + public override void UpdateTick() + { + _ticks++; + if (_ticks - _fastStart < 300 || _ticks % 100 == 0) + { + //RefreshVisualState(); + _managedEntities.Clear(); + MyGamePruningStructure.GetAllTopMostEntitiesInSphere(ref _combatMaxSphere, _managedEntities, MyEntityQueryType.Dynamic); + MyAPIGateway.Parallel.For(0, _managedEntities.Count, i => + { + try + { + var ent = _managedEntities[i]; + if (!ShouldProcessEntity(ent)) + { + return; + } + ApplyForcesToEntity(ent); + } + catch (Exception e) + { + MyLog.Default.WriteLine($"An exception occurred while processing entity {i}: {e.Message}"); + } + }); + } + + if (!MyAPIGateway.Utilities.IsDedicated) + _sphereDraw.UpdateAfterSimulation(); + } + + private bool ShouldProcessEntity(MyEntity ent) + { + Type entType = ent.GetType(); + + // Fast check against cache + if (_skipEntityTypes.Contains(entType) || ent.MarkedForClose || ent.IsPreview || ent.Physics == null || ent.Physics.IsPhantom || !ent.InScene) + { + return false; + } + + var grid = ent as MyCubeGrid; + var player = ent as IMyCharacter; + if (grid == null && player == null) + { + // Cache this type for future fast checks + _skipEntityTypes.Add(entType); + return false; + } + + var entVolume = ent.PositionComp.WorldVolume; + return entVolume.Contains(_combatNearSphere) != ContainmentType.Contains; + } + + private void ApplyForcesToEntity(MyEntity ent) + { + var grid = ent as MyCubeGrid; + var pos = grid?.Physics?.CenterOfMassWorld ?? ent.PositionComp.WorldVolume.Center; + var dir = Vector3D.Zero - pos; + Vector3D dirNorm; + Vector3D.Normalize(ref dir, out dirNorm); + var force = dirNorm * ((grid?.Physics?.Mass ?? ent.Physics.Mass) * + MyUtils.GetSmallestDistanceToSphereAlwaysPositive(ref pos, ref _combatMinSphere)); + ent.Physics.AddForce(MyPhysicsForceType.APPLY_WORLD_FORCE, force, pos, Vector3.Zero); + _fastStart = _ticks; + } + + private class BoxDrawing + { + private static readonly Color BlueBoxColor = new Color(0, 0, 255, 128); + private static readonly Color LineColor = Color.Green; + private static readonly int[] DistanceMultipliers = { 500, 1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500, 5000, 5500, 6000, 6500, 7000, 7500, 8000, 8500, 9000, 9500, 10000 }; + public readonly double BoundaryRadius; // Define the boundary radius + + public BoxDrawing(double boundaryRadius) + { + BoundaryRadius = boundaryRadius; + } + + public void UpdateAfterSimulation() + { + // Check if the player is in spectator mode + bool isSpectator = MyAPIGateway.Session.IsCameraUserControlledSpectator; + + // If in spectator mode, don't draw anything + if (isSpectator) + { + return; + } + + Vector3D? playerPosition = PlayerPosition; + if (!playerPosition.HasValue) + { + return; // If playerPosition is null, exit the method + } + + Vector3D directionToOrigin = CalculateDirectionToOrigin(playerPosition.Value); + double distanceToOrigin = playerPosition.Value.Length(); + double remainingDistance = BoundaryRadius - distanceToOrigin; // Calculate remaining distance + MatrixD rotationMatrix = CalculateRotationMatrix(directionToOrigin); + + if (remainingDistance <= 1000) // Adjust this value as needed + { + ShowDistanceNotification(remainingDistance); + } + + DrawBlueBoxes(distanceToOrigin, directionToOrigin, rotationMatrix); + // DrawRedBoxes(playerPosition.Value, directionToOrigin, rotationMatrix.Value, boxSpacing); + DrawGreenLine(distanceToOrigin, playerPosition.Value, directionToOrigin); + } + + private void ShowDistanceNotification(double remainingDistance) + { + string notificationMessage = $"Out of Bounds in: {remainingDistance:F2} meters"; + MyAPIGateway.Utilities.ShowNotification(notificationMessage, 10, MyFontEnum.Red); + } + + private static Vector3D? PlayerPosition + { + get + { + var spectator = MyAPIGateway.Session.IsCameraUserControlledSpectator; + var session = MyAPIGateway.Session?.Player?.Controller?.ControlledEntity?.Entity; + var cockpit = MyAPIGateway.Session?.ControlledObject?.Entity as IMyCockpit; + if (session == null || cockpit == null && !spectator) + { + // MyLog.Default.WriteLine("Null object encountered in GetPlayerPosition, or not in cockpit"); + return null; + } + return session.GetPosition(); + } + } + + private static Vector3D CalculateDirectionToOrigin(Vector3D playerPosition) => Vector3D.Normalize(Vector3D.Zero - playerPosition); + + private static MatrixD CalculateRotationMatrix(Vector3D directionToOrigin) => MatrixD.CreateWorld(Vector3D.Zero, directionToOrigin, Vector3D.Up); + + + private static void DrawBlueBoxes(double distanceToOrigin, Vector3D directionToOrigin, MatrixD rotationMatrix) + { + Vector3 halfExtents = new Vector3(2.5f, 2.5f, 2.5f); + BoundingBoxD blueBox = new BoundingBoxD(-halfExtents, halfExtents); + Color specialLineColor = CalculateSpecialLineColor(distanceToOrigin); // Calculate the special line color + + // Check if the player is within 10km. If so, skip drawing the special line. + if (distanceToOrigin < 10000) + { + return; + } + + // Draw the less transparent panel if the player is beyond 10km but within 12.5km. + if (distanceToOrigin >= 10000 && distanceToOrigin < 12500) + { + Vector3D specialWallPosition = Vector3D.Zero - (directionToOrigin * 10000); + DrawBox(blueBox, specialWallPosition, BlueBoxColor, rotationMatrix); + DrawPerpendicularPlane(specialWallPosition, rotationMatrix, 500, 0.1, specialLineColor); + } + + // General distance check for other boxes + if (distanceToOrigin <= 9000) return; + + foreach (int multiplier in DistanceMultipliers) + { + if (distanceToOrigin <= multiplier) continue; + + Vector3D blueWallPosition = Vector3D.Zero - (directionToOrigin * multiplier); + DrawBox(blueBox, blueWallPosition, BlueBoxColor, rotationMatrix); + + if (multiplier != 10000) + DrawPerpendicularLine(blueWallPosition, rotationMatrix); + } + } + + + private static Color CalculateSpecialLineColor(double distanceToOrigin) + { + byte alpha; + + if (distanceToOrigin >= 9000 && distanceToOrigin < 10000) + { + // Scale alpha from 0 (100% transparent) to 179 (about 30% transparent) as distance approaches 10km + // This makes the plane go from invisible to slightly visible + alpha = (byte)((distanceToOrigin - 9000) / 1000 * 179); + } + else if (distanceToOrigin >= 10000) + { + // Set alpha to 25 (about 90% transparent) beyond 10km + // This makes it slightly visible from outside + alpha = 1; + } + else + { + // If distance is less than 9000m, make it completely transparent + alpha = 0; // Completely transparent + } + + return new Color(255, 0, 0, alpha); // Red color with calculated alpha + } + + + + + + + + private static void DrawPerpendicularPlane(Vector3D boxPosition, MatrixD rotationMatrix, double planeWidth = 500, double planeThickness = 0.1, Color? color = null) + { + Vector3D perpendicularDir = Vector3D.CalculatePerpendicularVector(rotationMatrix.Forward); + Vector3D planeNormal = rotationMatrix.Forward; + Vector3 halfExtents = new Vector3((float)planeWidth, (float)planeWidth, (float)planeThickness); + BoundingBoxD planeBox = new BoundingBoxD(-halfExtents, halfExtents); + + // Create a variable for the plane matrix + MatrixD planeMatrix = MatrixD.CreateWorld(boxPosition, planeNormal, perpendicularDir); + + // Create variables for other parameters + Color planeColor = color ?? LineColor; + + // Draw the plane + MySimpleObjectDraw.DrawTransparentBox(ref planeMatrix, ref planeBox, ref planeColor, MySimpleObjectRasterizer.Solid, 1, 0.1f, MyStringId.GetOrCompute("Square")); + } + + private static void DrawBox(BoundingBoxD box, Vector3D position, Color color, MatrixD rotationMatrix) + { + BoundingBoxD transformedBox = box.TransformFast(rotationMatrix); + transformedBox.Translate(position); + MySimpleObjectDraw.DrawTransparentBox(ref MatrixD.Identity, ref transformedBox, ref color, MySimpleObjectRasterizer.Solid, 1, 0.1f, MyStringId.GetOrCompute("Square")); + } + + private static void DrawGreenLine(double distanceToOrigin, Vector3D playerPosition, Vector3D directionToOrigin) + { + if (distanceToOrigin <= 9000) return; + + Color lineColor = LineColor; // Default to Green + if (distanceToOrigin > 10000) + { + lineColor = Color.Red; // Change color to Red if the distance is greater than 7500 + } + Vector4 lineColorVector4 = lineColor.ToVector4(); + + Vector3D lineEndPoint = playerPosition + (directionToOrigin * 200); + MySimpleObjectDraw.DrawLine(playerPosition, lineEndPoint, MyStringId.GetOrCompute("Square"), ref lineColorVector4, 1f); + } + + + + private static void DrawPerpendicularLine(Vector3D boxPosition, MatrixD rotationMatrix, double lineLength = 50, Color? color = null) + { + + Vector3D perpendicularDir = Vector3D.CalculatePerpendicularVector(rotationMatrix.Forward); + Vector3D lineStart = boxPosition - (perpendicularDir * (lineLength / 2)); + Vector3D lineEnd = boxPosition + (perpendicularDir * (lineLength / 2)); + Vector4 lineColorVector4 = (color ?? LineColor).ToVector4(); + MySimpleObjectDraw.DrawLine(lineStart, lineEnd, MyStringId.GetOrCompute("Square"), ref lineColorVector4, 1f); + } + } + } +} diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/DisconnectHandler.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/DisconnectHandler.cs similarity index 95% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/DisconnectHandler.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/DisconnectHandler.cs index ca99a4bf1..f1b0d002c 100644 --- a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/DisconnectHandler.cs +++ b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/DisconnectHandler.cs @@ -88,9 +88,9 @@ public void ResolveProblem() //all players connected UnfreezeGrids(); } - private void UnfreezeGrids() + public void UnfreezeGrids(bool unfreezeAll = false) { - if (FreezeAllGrids) + if (FreezeAllGrids || unfreezeAll) { foreach (var grid in _frozenGrids) { @@ -134,7 +134,7 @@ private bool RemoveMissingPlayers(IMyPlayer player) return true; } - private bool FreezeGrids(IMyEntity entity) + public bool FreezeGrids(IMyEntity entity) { var grid = entity as Sandbox.Game.Entities.MyCubeGrid; if (grid == null || !_frozenGrids.Add(grid) || grid.Physics == null) diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/FactionSphereZone.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/FactionSphereZone.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/FactionSphereZone.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/FactionSphereZone.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/MatchTimer.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/MatchTimer.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/MatchTimer.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/MatchTimer.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/PlayerTracker.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/PlayerTracker.cs similarity index 94% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/PlayerTracker.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/PlayerTracker.cs index 2cac7a74e..783a9329b 100644 --- a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/PlayerTracker.cs +++ b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/PlayerTracker.cs @@ -15,6 +15,8 @@ internal class PlayerTracker : ComponentBase "SPRT", "OUT", "ADM", + "UNKN", + "FCTM", }; #region Public Methods diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/PointTracker.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/PointTracker.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/PointTracker.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/PointTracker.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/ProblemReport.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/ProblemReport.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/ProblemReport.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/ProblemReport.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/RespawnManager.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/RespawnManager.cs similarity index 91% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/RespawnManager.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/RespawnManager.cs index 00822f7a9..9111a5506 100644 --- a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/RespawnManager.cs +++ b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/RespawnManager.cs @@ -23,7 +23,7 @@ public class RespawnManager : ComponentBase public double RespawnTimeSeconds; private readonly Dictionary _respawnBuffer = new Dictionary(); - private readonly Queue> _respawnTimeBuffer = new Queue>(); + private readonly Queue> _respawnTimeBuffer = new Queue>(); public RespawnManager(double respawnTimeSeconds = 0) { @@ -71,6 +71,7 @@ public override void UpdateTick() var tuple = _respawnTimeBuffer.Dequeue(); ShareTrackApi.UnTrackGrid(tuple.Item3); ActivateGrid(tuple.Item2); + _respawnBuffer[tuple.Item2] = tuple.Item4; } } @@ -116,12 +117,12 @@ private void OnAliveChanged(IMyCubeGrid grid, bool isAlive) return; IMyCubeGrid newGrid = (IMyCubeGrid)MyAPIGateway.Entities.CreateFromObjectBuilderParallel(_respawnBuffer[grid], false, SetupBufferGrid); - _respawnBuffer.Remove(grid); foreach (var powerProducer in grid.GetFatBlocks()) powerProducer.Close(); - _respawnTimeBuffer.Enqueue(new MyTuple(_ticks + (int)(60 * RespawnTimeSeconds), newGrid, grid)); + _respawnTimeBuffer.Enqueue(new MyTuple(_ticks + (int)(60 * RespawnTimeSeconds), newGrid, grid, _respawnBuffer[grid])); + _respawnBuffer.Remove(grid); } private void SetupBufferGrid(IMyEntity gridEnt) diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/SphereZone.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/SphereZone.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/SphereZone.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GameState/SphereZone.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GamemodeBase.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GamemodeBase.cs similarity index 80% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GamemodeBase.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GamemodeBase.cs index d6bc15164..de4b83325 100644 --- a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GamemodeBase.cs +++ b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/GamemodeBase.cs @@ -60,12 +60,19 @@ public sealed override void UpdateTick() public virtual void StopRound() { - DisplayWinMessage(); - IsStarted = false; - SUGMA_SessionComponent.I.StopGamemode(); - SUtils.SetWorldPermissionsForMatch(false); - DisconnectHandler.I.Deactivate(); - SUGMA_SessionComponent.I.ShareTrackApi.SetAutotrack(true); + try + { + DisplayWinMessage(); + IsStarted = false; + SUGMA_SessionComponent.I.StopGamemode(); + SUtils.SetWorldPermissionsForMatch(false); + DisconnectHandler.I.Deactivate(); + SUGMA_SessionComponent.I.ShareTrackApi.SetAutotrack(true); + } + catch (Exception ex) + { + Log.Exception(ex, typeof(GamemodeBase), ReadableName); + } } internal virtual void DisplayStartMessage() diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/AutoBalancePacket.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/AutoBalancePacket.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/AutoBalancePacket.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/AutoBalancePacket.cs diff --git a/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/ClearBoardRequestPacket.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/ClearBoardRequestPacket.cs new file mode 100644 index 000000000..85ab4309e --- /dev/null +++ b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/ClearBoardRequestPacket.cs @@ -0,0 +1,28 @@ +using ProtoBuf; +using Sandbox.ModAPI; +using SC.SUGMA.Utilities; + +namespace SC.SUGMA.HeartNetworking.Custom +{ + [ProtoContract] + internal class ClearBoardRequestPacket : PacketBase + { + [ProtoMember(1)] public bool ResetFactions; + + public ClearBoardRequestPacket(bool resetFactions) + { + ResetFactions = resetFactions; + } + + private ClearBoardRequestPacket() + { + } + + public override void Received(ulong SenderSteamId) + { + SUtils.ClearBoard(ResetFactions); + if (MyAPIGateway.Session.IsServer) + HeartNetwork.I.SendToEveryone(this); + } + } +} diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/GameStatePacket.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/GameStatePacket.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/GameStatePacket.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/GameStatePacket.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/MatchTimerPacket.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/MatchTimerPacket.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/MatchTimerPacket.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/MatchTimerPacket.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/MissingPlayerOverridePacket.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/MissingPlayerOverridePacket.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/MissingPlayerOverridePacket.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/MissingPlayerOverridePacket.cs diff --git a/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/PauseRequestPacket.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/PauseRequestPacket.cs new file mode 100644 index 000000000..cb1ddcc88 --- /dev/null +++ b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/PauseRequestPacket.cs @@ -0,0 +1,17 @@ +using ProtoBuf; +using Sandbox.ModAPI; +using SC.SUGMA.Utilities; + +namespace SC.SUGMA.HeartNetworking.Custom +{ + [ProtoContract] + internal class PauseRequestPacket : PacketBase + { + public override void Received(ulong SenderSteamId) + { + SUtils.Pause(); + if (MyAPIGateway.Session.IsServer) + HeartNetwork.I.SendToEveryone(this); + } + } +} diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/PointsPacket.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/PointsPacket.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/PointsPacket.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/PointsPacket.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/ProblemReportPacket.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/ProblemReportPacket.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/ProblemReportPacket.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/ProblemReportPacket.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/ShieldFillRequestPacket.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/ShieldFillRequestPacket.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/ShieldFillRequestPacket.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/ShieldFillRequestPacket.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/SyncRequestPacket.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/SyncRequestPacket.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/SyncRequestPacket.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/Custom/SyncRequestPacket.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/HeartNetwork.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/HeartNetwork.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/HeartNetwork.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/HeartNetwork.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/NetworkTimeSync.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/NetworkTimeSync.cs similarity index 87% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/NetworkTimeSync.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/NetworkTimeSync.cs index d4e8b6641..15d991b26 100644 --- a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/NetworkTimeSync.cs +++ b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/NetworkTimeSync.cs @@ -70,6 +70,10 @@ private void UpdateTimeOffset() NetworkId, MyAPIGateway.Utilities.SerializeToBinary(new TimeSyncPacket { OutgoingTimestamp = MessageSendTimestamp })); + + // Failsafe + if (ServerTimeOffset > 10000 || ServerTimeOffset < -10000) + ServerTimeOffset = 0; } private void ReceiveMessage(ushort networkId, byte[] serialized, ulong sender, bool isFromServer) @@ -112,6 +116,12 @@ public void Received(ulong senderSteamId) //Log.Info("\nOutgoing Timestamp: " + OutgoingTimestamp + "\nIncoming Timestamp: " + IncomingTimestamp); //Log.Info("ThisPlayerPing: " + NetworkTimeSync.ThisPlayerPing); //Log.Info("ServerTimeOffset: " + NetworkTimeSync.ServerTimeOffset); + + // Failsafe + if (NetworkTimeSync.ThisPlayerPing > 10000 || NetworkTimeSync.ThisPlayerPing < -10000) + NetworkTimeSync.ThisPlayerPing = 0; + if (NetworkTimeSync.ServerTimeOffset > 10000 || NetworkTimeSync.ServerTimeOffset < -10000) + NetworkTimeSync.ServerTimeOffset = 0; } } } diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/PacketBase.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/PacketBase.cs similarity index 84% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/PacketBase.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/PacketBase.cs index 20fab29b9..b1191cfbb 100644 --- a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/PacketBase.cs +++ b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HeartNetworking/PacketBase.cs @@ -13,6 +13,8 @@ namespace SC.SUGMA.HeartNetworking [ProtoInclude(96, typeof(ProblemReportPacket))] [ProtoInclude(97, typeof(MissingPlayerOverridePacket))] [ProtoInclude(98, typeof(AutoBalancePacket))] + [ProtoInclude(99, typeof(PauseRequestPacket))] + [ProtoInclude(100, typeof(ClearBoardRequestPacket))] public abstract class PacketBase { public static readonly Type[] PacketTypes = @@ -26,6 +28,8 @@ public abstract class PacketBase typeof(ProblemReportPacket), typeof(MissingPlayerOverridePacket), typeof(AutoBalancePacket), + typeof(PauseRequestPacket), + typeof(ClearBoardRequestPacket), }; /// diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HudConstants.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HudConstants.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HudConstants.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/HudConstants.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Log.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Log.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Log.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Log.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/.gitattributes b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/.gitattributes similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/.gitattributes rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/.gitattributes diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/.gitignore b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/.gitignore similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/.gitignore rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/.gitignore diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/RichHudClient.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/RichHudClient.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/RichHudClient.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/RichHudClient.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/BindManager/Bind.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/BindManager/Bind.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/BindManager/Bind.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/BindManager/Bind.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/BindManager/BindGroup.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/BindManager/BindGroup.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/BindManager/BindGroup.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/BindManager/BindGroup.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/BindManager/BindManager.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/BindManager/BindManager.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/BindManager/BindManager.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/BindManager/BindManager.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/BindManager/Control.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/BindManager/Control.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/BindManager/Control.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/BindManager/Control.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/HUD/HudCursor.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/HUD/HudCursor.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/HUD/HudCursor.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/HUD/HudCursor.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/HUD/HudMain.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/HUD/HudMain.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/HUD/HudMain.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/HUD/HudMain.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/HUD/Rendering/BillboardUtils.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/HUD/Rendering/BillboardUtils.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/HUD/Rendering/BillboardUtils.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/HUD/Rendering/BillboardUtils.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/HUD/Rendering/FontManager/FontData.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/HUD/Rendering/FontManager/FontData.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/HUD/Rendering/FontManager/FontData.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/HUD/Rendering/FontManager/FontData.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/HUD/Rendering/FontManager/FontManager.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/HUD/Rendering/FontManager/FontManager.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/HUD/Rendering/FontManager/FontManager.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/HUD/Rendering/FontManager/FontManager.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/HUD/Rendering/TextBoard.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/HUD/Rendering/TextBoard.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/HUD/Rendering/TextBoard.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/HUD/Rendering/TextBoard.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/HUD/Rendering/TextBuilder.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/HUD/Rendering/TextBuilder.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/HUD/Rendering/TextBuilder.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/HUD/Rendering/TextBuilder.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/ControlCategory.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/ControlCategory.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/ControlCategory.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/ControlCategory.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/ControlTile.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/ControlTile.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/ControlTile.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/ControlTile.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalButton.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalButton.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalButton.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalButton.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalCheckbox.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalCheckbox.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalCheckbox.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalCheckbox.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalColorPicker.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalColorPicker.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalColorPicker.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalColorPicker.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalControlBase.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalControlBase.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalControlBase.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalControlBase.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalDragBox.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalDragBox.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalDragBox.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalDragBox.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalDropdown.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalDropdown.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalDropdown.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalDropdown.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalList.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalList.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalList.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalList.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalOnOffButton.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalOnOffButton.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalOnOffButton.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalOnOffButton.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalSlider.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalSlider.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalSlider.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TerminalSlider.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TextField.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TextField.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TextField.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Controls/TextField.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/ListBoxData.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/ListBoxData.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/ListBoxData.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/ListBoxData.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/ModControlRoot.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/ModControlRoot.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/ModControlRoot.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/ModControlRoot.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Pages/ControlPage.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Pages/ControlPage.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Pages/ControlPage.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Pages/ControlPage.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Pages/RebindPage.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Pages/RebindPage.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Pages/RebindPage.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Pages/RebindPage.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Pages/TerminalPageBase.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Pages/TerminalPageBase.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Pages/TerminalPageBase.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Pages/TerminalPageBase.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Pages/TextPage.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Pages/TextPage.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Pages/TextPage.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/Pages/TextPage.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/RichHudTerminal.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/RichHudTerminal.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/RichHudTerminal.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/RichHudTerminal.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/TerminalPageCategory.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/TerminalPageCategory.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/TerminalPageCategory.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Client/UI/SettingsMenu/TerminalPageCategory.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/LICENSE b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/LICENSE similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/LICENSE rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/LICENSE diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/README.md b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/README.md similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/README.md rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/README.md diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/.gitrepo b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/.gitrepo similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/.gitrepo rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/.gitrepo diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/ApiContainers.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/ApiContainers.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/ApiContainers.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/ApiContainers.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Collections.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Collections.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Collections.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Collections.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Extensions/CollectionExtensions.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Extensions/CollectionExtensions.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Extensions/CollectionExtensions.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Extensions/CollectionExtensions.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Extensions/MathExtensions.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Extensions/MathExtensions.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Extensions/MathExtensions.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Extensions/MathExtensions.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Extensions/VectorExtensions.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Extensions/VectorExtensions.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Extensions/VectorExtensions.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Extensions/VectorExtensions.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/ObjectPool.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/ObjectPool.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/ObjectPool.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/ObjectPool.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/PoolPolicies/ListPoolPolicy.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/PoolPolicies/ListPoolPolicy.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/PoolPolicies/ListPoolPolicy.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/PoolPolicies/ListPoolPolicy.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/PoolPolicies/StringBuilderPoolPolicy.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/PoolPolicies/StringBuilderPoolPolicy.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/PoolPolicies/StringBuilderPoolPolicy.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/PoolPolicies/StringBuilderPoolPolicy.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/TaskPool.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/TaskPool.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/TaskPool.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/TaskPool.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Utilities/Color.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Utilities/Color.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Utilities/Color.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Utilities/Color.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Utilities/Debug.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Utilities/Debug.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Utilities/Debug.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Utilities/Debug.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Utilities/ProtoBuf.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Utilities/ProtoBuf.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Utilities/ProtoBuf.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Utilities/ProtoBuf.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Utilities/Xml.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Utilities/Xml.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Utilities/Xml.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/General/Utilities/Xml.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/IO/LocalFileIO.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/IO/LocalFileIO.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/IO/LocalFileIO.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/IO/LocalFileIO.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/IO/LogIO.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/IO/LogIO.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/IO/LogIO.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/IO/LogIO.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/Internal/ExceptionHandler.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/Internal/ExceptionHandler.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/Internal/ExceptionHandler.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/Internal/ExceptionHandler.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/Internal/ModBase.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/Internal/ModBase.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/Internal/ModBase.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/Internal/ModBase.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/Internal/RichHudCore.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/Internal/RichHudCore.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/Internal/RichHudCore.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/Internal/RichHudCore.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/LICENSE b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/LICENSE similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/LICENSE rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/LICENSE diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/MsgEnums.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/MsgEnums.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/MsgEnums.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/MsgEnums.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/README.md b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/README.md similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/README.md rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/README.md diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/BindManager/BindClientAccessors.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/BindManager/BindClientAccessors.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/BindManager/BindClientAccessors.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/BindManager/BindClientAccessors.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/BindManager/BindDefinition.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/BindManager/BindDefinition.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/BindManager/BindDefinition.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/BindManager/BindDefinition.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/BindManager/BindGroupInitializer.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/BindManager/BindGroupInitializer.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/BindManager/BindGroupInitializer.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/BindManager/BindGroupInitializer.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/BindManager/CustomControls.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/BindManager/CustomControls.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/BindManager/CustomControls.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/BindManager/CustomControls.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/BindManager/IBind.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/BindManager/IBind.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/BindManager/IBind.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/BindManager/IBind.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/BindManager/IBindGroup.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/BindManager/IBindGroup.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/BindManager/IBindGroup.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/BindManager/IBindGroup.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/BindManager/IControl.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/BindManager/IControl.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/BindManager/IControl.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/BindManager/IControl.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/CmdManager.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/CmdManager.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/CmdManager.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/CmdManager.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/HudElementBase.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/HudElementBase.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/HudElementBase.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/HudElementBase.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/HudNodeBase.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/HudNodeBase.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/HudNodeBase.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/HudNodeBase.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/HudParentBase.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/HudParentBase.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/HudParentBase.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/HudParentBase.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/HudSpaceNodeBase.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/HudSpaceNodeBase.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/HudSpaceNodeBase.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/HudSpaceNodeBase.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/LabelBoxBase.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/LabelBoxBase.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/LabelBoxBase.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/LabelBoxBase.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/LabelElementBase.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/LabelElementBase.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/LabelElementBase.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/LabelElementBase.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/NodeUtils.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/NodeUtils.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/NodeUtils.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/NodeUtils.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/ParentUtils.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/ParentUtils.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/ParentUtils.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/ParentUtils.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/WindowBase.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/WindowBase.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/WindowBase.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementBases/WindowBase.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementEnums.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementEnums.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementEnums.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementEnums.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/IClickableElement.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/IClickableElement.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/IClickableElement.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/IClickableElement.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/IEntryBox.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/IEntryBox.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/IEntryBox.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/IEntryBox.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/IHudCollection.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/IHudCollection.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/IHudCollection.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/IHudCollection.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/ILabelElement.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/ILabelElement.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/ILabelElement.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/ILabelElement.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudElement.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudElement.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudElement.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudElement.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudNode.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudNode.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudNode.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudNode.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudParent.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudParent.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudParent.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudParent.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudSpaceNode.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudSpaceNode.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudSpaceNode.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudSpaceNode.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/BorderBox.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/BorderBox.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/BorderBox.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/BorderBox.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/BorderedButton.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/BorderedButton.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/BorderedButton.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/BorderedButton.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/BorderedCheckBox.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/BorderedCheckBox.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/BorderedCheckBox.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/BorderedCheckBox.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/Button.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/Button.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/Button.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/Button.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/LabelBoxButton.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/LabelBoxButton.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/LabelBoxButton.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/LabelBoxButton.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/LabelButton.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/LabelButton.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/LabelButton.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/LabelButton.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/NamedCheckBox.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/NamedCheckBox.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/NamedCheckBox.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/NamedCheckBox.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/NamedOnOffButton.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/NamedOnOffButton.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/NamedOnOffButton.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/NamedOnOffButton.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/OnOffButton.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/OnOffButton.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/OnOffButton.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/OnOffButton.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/ColorPickerRGB.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/ColorPickerRGB.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/ColorPickerRGB.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/ColorPickerRGB.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/ListInputElement.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/ListInputElement.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/ListInputElement.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/ListInputElement.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/MouseInputElement.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/MouseInputElement.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/MouseInputElement.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/MouseInputElement.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/MouseInputFilter.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/MouseInputFilter.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/MouseInputFilter.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/MouseInputFilter.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/ScrollBox.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/ScrollBox.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/ScrollBox.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/ScrollBox.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/Dropdown.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/Dropdown.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/Dropdown.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/Dropdown.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/ListBox.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/ListBox.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/ListBox.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/ListBox.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/RadialSelectionBox.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/RadialSelectionBox.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/RadialSelectionBox.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/RadialSelectionBox.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/SelectionBox.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/SelectionBox.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/SelectionBox.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/SelectionBox.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/SelectionBoxBase.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/SelectionBoxBase.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/SelectionBoxBase.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/SelectionBoxBase.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/TreeBox.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/TreeBox.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/TreeBox.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/TreeBox.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/TreeBoxBase.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/TreeBoxBase.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/TreeBoxBase.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/TreeBoxBase.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/TreeList.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/TreeList.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/TreeList.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/SelectionBoxes/TreeList.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Sliders/NamedSliderBox.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Sliders/NamedSliderBox.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Sliders/NamedSliderBox.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Sliders/NamedSliderBox.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Sliders/ScrollBar.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Sliders/ScrollBar.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Sliders/ScrollBar.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Sliders/ScrollBar.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Sliders/SliderBar.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Sliders/SliderBar.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Sliders/SliderBar.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Sliders/SliderBar.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Sliders/SliderBox.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Sliders/SliderBox.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Sliders/SliderBox.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/Sliders/SliderBox.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/TextBox.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/TextBox.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/TextBox.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/TextBox.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/TextField.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/TextField.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/TextField.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ClickableHudElements/TextField.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ContainerInterfaces/IHudElementContainer.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ContainerInterfaces/IHudElementContainer.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ContainerInterfaces/IHudElementContainer.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ContainerInterfaces/IHudElementContainer.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ContainerInterfaces/IListBoxEntry.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ContainerInterfaces/IListBoxEntry.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ContainerInterfaces/IListBoxEntry.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ContainerInterfaces/IListBoxEntry.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ContainerInterfaces/IScrollBoxEntry.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ContainerInterfaces/IScrollBoxEntry.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ContainerInterfaces/IScrollBoxEntry.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ContainerInterfaces/IScrollBoxEntry.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ContainerInterfaces/ISelectionBoxEntry.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ContainerInterfaces/ISelectionBoxEntry.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ContainerInterfaces/ISelectionBoxEntry.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/ContainerInterfaces/ISelectionBoxEntry.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/Containers/HudElementContainer.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/Containers/HudElementContainer.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/Containers/HudElementContainer.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/Containers/HudElementContainer.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/Containers/HudElementTuple.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/Containers/HudElementTuple.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/Containers/HudElementTuple.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/Containers/HudElementTuple.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/Containers/ListBoxEntry.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/Containers/ListBoxEntry.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/Containers/ListBoxEntry.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/Containers/ListBoxEntry.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/Containers/ScrollBoxEntry.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/Containers/ScrollBoxEntry.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/Containers/ScrollBoxEntry.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/Containers/ScrollBoxEntry.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/Containers/ScrollBoxEntryTuple.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/Containers/ScrollBoxEntryTuple.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/Containers/ScrollBoxEntryTuple.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/Containers/ScrollBoxEntryTuple.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/Containers/SelectionBoxEntry.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/Containers/SelectionBoxEntry.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/Containers/SelectionBoxEntry.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/Containers/SelectionBoxEntry.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/DoubleLabelBox.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/DoubleLabelBox.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/DoubleLabelBox.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/DoubleLabelBox.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/EmptyHudElement.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/EmptyHudElement.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/EmptyHudElement.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/EmptyHudElement.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/HudChain.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/HudChain.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/HudChain.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/HudChain.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/HudCollection.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/HudCollection.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/HudCollection.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/HudCollection.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/Label.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/Label.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/Label.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/Label.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/LabelBox.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/LabelBox.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/LabelBox.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/LabelBox.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/TexturedBox.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/TexturedBox.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/TexturedBox.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudElements/TexturedBox.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudMainEnums.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudMainEnums.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudMainEnums.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudMainEnums.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudSpaceNodes/CamSpaceNode.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudSpaceNodes/CamSpaceNode.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudSpaceNodes/CamSpaceNode.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudSpaceNodes/CamSpaceNode.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudSpaceNodes/CustomSpaceNode.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudSpaceNodes/CustomSpaceNode.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudSpaceNodes/CustomSpaceNode.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudSpaceNodes/CustomSpaceNode.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudSpaceNodes/ScaledSpaceNode.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudSpaceNodes/ScaledSpaceNode.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudSpaceNodes/ScaledSpaceNode.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/HudSpaceNodes/ScaledSpaceNode.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/ICursor.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/ICursor.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/ICursor.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/ICursor.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/BillboardMats.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/BillboardMats.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/BillboardMats.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/BillboardMats.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/BillboardUtils.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/BillboardUtils.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/BillboardUtils.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/BillboardUtils.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/BlockBoard.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/BlockBoard.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/BlockBoard.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/BlockBoard.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/IFontMin.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/IFontMin.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/IFontMin.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/IFontMin.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/MatBoard.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/MatBoard.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/MatBoard.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/MatBoard.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/Material.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/Material.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/Material.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/Material.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/MaterialFrame.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/MaterialFrame.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/MaterialFrame.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/MaterialFrame.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/PolyBoard.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/PolyBoard.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/PolyBoard.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/PolyBoard.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/PuncturedPolyBoard.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/PuncturedPolyBoard.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/PuncturedPolyBoard.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/PuncturedPolyBoard.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/QuadBoard.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/QuadBoard.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/QuadBoard.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/QuadBoard.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/TextBuilderInterfaces/ILine.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/TextBuilderInterfaces/ILine.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/TextBuilderInterfaces/ILine.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/TextBuilderInterfaces/ILine.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/TextBuilderInterfaces/IRichChar.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/TextBuilderInterfaces/IRichChar.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/TextBuilderInterfaces/IRichChar.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/TextBuilderInterfaces/IRichChar.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/TextBuilderInterfaces/ITextBoard.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/TextBuilderInterfaces/ITextBoard.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/TextBuilderInterfaces/ITextBoard.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/TextBuilderInterfaces/ITextBoard.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/TextBuilderInterfaces/ITextBuilder.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/TextBuilderInterfaces/ITextBuilder.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/TextBuilderInterfaces/ITextBuilder.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/Rendering/TextBuilderInterfaces/ITextBuilder.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/RichText/GlyphFormat.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/RichText/GlyphFormat.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/RichText/GlyphFormat.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/RichText/GlyphFormat.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/RichText/RichText.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/RichText/RichText.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/RichText/RichText.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/RichText/RichText.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/TerminalColors.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/TerminalColors.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/TerminalColors.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/TerminalColors.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/ToolTip.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/ToolTip.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/ToolTip.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/HUD/ToolTip.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/IControlCategory.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/IControlCategory.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/IControlCategory.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/IControlCategory.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/IControlPage.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/IControlPage.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/IControlPage.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/IControlPage.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/IControlTile.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/IControlTile.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/IControlTile.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/IControlTile.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/IModControlRoot.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/IModControlRoot.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/IModControlRoot.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/IModControlRoot.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/IRebindPage.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/IRebindPage.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/IRebindPage.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/IRebindPage.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/ITerminalControl.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/ITerminalControl.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/ITerminalControl.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/ITerminalControl.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/ITerminalPage.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/ITerminalPage.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/ITerminalPage.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/ITerminalPage.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/ITerminalPageCategory.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/ITerminalPageCategory.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/ITerminalPageCategory.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/ITerminalPageCategory.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/ITextPage.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/ITextPage.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/ITextPage.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SettingsMenu/ITextPage.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SharedBinds.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SharedBinds.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SharedBinds.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/SharedBinds.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/TextInput.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/TextInput.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/TextInput.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/RichHudFramework.Client/Shared/UI/TextInput.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/SUGMA_SessionComponent.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/SUGMA_SessionComponent.cs similarity index 95% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/SUGMA_SessionComponent.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/SUGMA_SessionComponent.cs index c0adefd12..bc51ba722 100644 --- a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/SUGMA_SessionComponent.cs +++ b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/SUGMA_SessionComponent.cs @@ -29,13 +29,14 @@ internal class SUGMA_SessionComponent : MySessionComponentBase ["HeartNetwork"] = new HeartNetwork(), ["PlayerTracker"] = new PlayerTracker(), ["DisconnectHandler"] = new DisconnectHandler(), + ["BounceZone"] = new BounceZone(10000), ["elm"] = new EliminationGamemode(), ["dom"] = new DominationGamemode(), ["tdm"] = new TeamDeathmatchGamemode(), }; /// - /// How many ticks to wait after joining before requesting sync + /// How many ticks to wait after joining before requesting sync. /// private int _pollTimer = 300; diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Utilities/ArgumentParser.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Utilities/ArgumentParser.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Utilities/ArgumentParser.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Utilities/ArgumentParser.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Utilities/SUtils.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Utilities/SUtils.cs similarity index 52% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Utilities/SUtils.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Utilities/SUtils.cs index 143f12f80..3285df400 100644 --- a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Utilities/SUtils.cs +++ b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Utilities/SUtils.cs @@ -7,8 +7,12 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Text; +using Sandbox.Game; +using Sandbox.Game.Entities.Blocks; using VRage.Game; using VRage.Game.ModAPI; +using VRage.ModAPI; using VRage.Utils; using VRageMath; @@ -44,6 +48,9 @@ public static void SetWorldPermissionsForMatch(bool matchActive) MySessionComponentSafeZones.AllowedActions = CastProhibit(MySessionComponentSafeZones.AllowedActions, matchActive ? MatchPermsInt : FullPermsInt); + + if (matchActive && MyAPIGateway.Session.IsServer) + ClearImageLcds(); } public static IMyFaction GetFaction(this IMyCubeGrid grid) @@ -78,6 +85,72 @@ public static void ResolvedProblem() HeartNetwork.I.SendToServer(new ProblemReportPacket(false)); } + public static bool IsPaused { get; private set; } = false; + public static void Pause() + { + if (IsPaused) + { + DisconnectHandler.I.UnfreezeGrids(true); + MyAPIGateway.Utilities.SendMessage("Paused the game!"); + IsPaused = false; + } + else + { + MyAPIGateway.Entities.GetEntities(null, DisconnectHandler.I.FreezeGrids); + MyAPIGateway.Utilities.SendMessage("Unpaused the game!"); + IsPaused = true; + } + } + + /// + /// Kills all players, ends the match, and deletes all player grids. + /// + public static void ClearBoard(bool resetFactions) + { + if (!MyAPIGateway.Session.IsServer) + return; + + var playerIds = new List(); + + foreach (var faction in PlayerTracker.I.GetPlayerFactions()) + playerIds.AddRange(faction.Members.Values.Select(player => player.PlayerId)); + + var greenSpawn = GetFactionSpawns().FirstOrDefault(b => b.Key.Tag == "NEU").Value; + foreach (var player in PlayerTracker.I.AllPlayers.Where(p => playerIds.Contains(p.Key))) + { + if (greenSpawn != null) + player.Value.Character?.SetWorldMatrix(greenSpawn.WorldMatrix); + else + player.Value.Character?.Kill(); + } + + SUGMA_SessionComponent.I.StopGamemode(true); + + MyAPIGateway.Entities.GetEntities(null, g => + { + IMyCubeGrid grid = g as IMyCubeGrid; + if (grid == null) + return false; + + // If this ever becomes an issue with deleting existing subgrids, change it to a GridGroup check. + if (!grid.IsStatic) + grid.Close(); + + return false; + }); + + if (resetFactions) + { + IMyFaction neutralFaction = MyAPIGateway.Session.Factions.Factions.Values.FirstOrDefault(f => f.Tag == "NEU") ?? PlayerTracker.I.GetPlayerFactions().First(); + foreach (var player in PlayerTracker.I.AllPlayers) + { + MyVisualScriptLogicProvider.SetPlayersFaction(player.Key, neutralFaction.Tag); + } + } + + MyAPIGateway.Utilities.SendMessage("Board cleared."); + } + public static void ShieldCharge() { foreach (var g in MyEntities.GetEntities()) @@ -128,5 +201,40 @@ public static Dictionary GetFactionSpawns() return factionSpawns; } + + /// + /// Text-image LCDs are *bad for performance*. This clears all text larger than 1000 chars from all LCDs in the world. + /// + public static void ClearImageLcds() + { + HashSet entities = new HashSet(); + MyAPIGateway.Entities.GetEntities(entities, e => e is IMyCubeGrid); + + int lcdCount = 0; + StringBuilder text = new StringBuilder(); + foreach (var ent in entities) + { + IMyCubeGrid grid = ent as IMyCubeGrid; + if (grid == null) + continue; + + foreach (var lcd in grid.GetFatBlocks()) + { + lcd.ReadText(text); + if (text.Length > 1000) + { + lcd.WriteText(""); + lcdCount++; + } + } + } + + if (lcdCount == 0) + return; + + MyAPIGateway.Utilities.ShowMessage("", $"{lcdCount} LCD(s) Cleared."); + if (MyAPIGateway.Session.IsServer) + MyAPIGateway.Utilities.SendMessage($"{lcdCount} LCD(s) Cleared."); + } } } \ No newline at end of file diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Utilities/TeamBalancer.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Utilities/TeamBalancer.cs similarity index 77% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Utilities/TeamBalancer.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Utilities/TeamBalancer.cs index 6b6902ec8..779030158 100644 --- a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Utilities/TeamBalancer.cs +++ b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Scripts/SUGMA/Utilities/TeamBalancer.cs @@ -16,7 +16,7 @@ public static class TeamBalancer public const float MassWeightModifier = 20/1000000f; private static ShareTrackApi ShareTrackApi => SUGMA_SessionComponent.I.ShareTrackApi; - public static void PerformBalancing() + public static void PerformBalancing(float randomOffset = 0.1f) { if (!ShareTrackApi.AreTrackedGridsLoaded()) throw new Exception("Not all tracked grids are loaded!"); @@ -32,7 +32,7 @@ public static void PerformBalancing() SUtils.SetDamageEnabled(false); - foreach (var factionKvp in AssignTeams(ShareTrackApi.GetTrackedGrids())) + foreach (var factionKvp in AssignTeams(ShareTrackApi.GetTrackedGrids(), randomOffset)) { IMyCubeGrid spawnGrid; if (!factionSpawns.TryGetValue(factionKvp.Key, out spawnGrid)) @@ -55,7 +55,7 @@ public static void PerformBalancing() MyAPIGateway.Utilities.SendMessage($"Autobalance completed."); } - private static Dictionary> AssignTeams(IMyCubeGrid[] grids) + private static Dictionary> AssignTeams(IMyCubeGrid[] grids, float randomOffset) { // Sort grids by BP // Highest BP grid goes into lowest BP faction @@ -73,11 +73,20 @@ private static Dictionary> AssignTeams(IMyCubeGrid factionGrids.Add(faction, new List()); } - Array.Sort(grids, (a, b) => ShareTrackApi.GetGridPoints(b) - ShareTrackApi.GetGridPoints(a)); + Dictionary gridPoints = new Dictionary(grids.Length); + foreach (var grid in grids) + { + gridPoints[grid] = ShareTrackApi.GetGridPoints(grid) + + (int)((grid.Physics?.Mass ?? 0) * MassWeightModifier); + gridPoints[grid] += (int)(gridPoints[grid] * SUtils.Random.NextDouble() * randomOffset); + } + + Array.Sort(grids, (a, b) => gridPoints[b] - gridPoints[a]); for (int i = 0; i < grids.Length; i++) { IMyFaction lowestFaction = factionPoints.MinBy(a => a.Value).Key; - factionPoints[lowestFaction] += ShareTrackApi.GetGridPoints(grids[i]) + (int)((grids[i].Physics?.Mass ?? 0) * MassWeightModifier); + + factionPoints[lowestFaction] += gridPoints[grids[i]]; if (grids[i].BigOwners.Count < 1) { @@ -87,6 +96,7 @@ private static Dictionary> AssignTeams(IMyCubeGrid MyVisualScriptLogicProvider.SetPlayersFaction(grids[i].BigOwners[0], lowestFaction.Tag); factionGrids[lowestFaction].Add(grids[i]); + MyAPIGateway.Utilities.SendMessage($"[{lowestFaction.Tag}] +{gridPoints[grids[i]]/1000f:N1}pts: {grids[i].CustomName}"); } return factionGrids; diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Textures_SUGMA.sbc b/Gamemode Mods/StarCore SUGMA Gamemodes/Data/Textures_SUGMA.sbc similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Data/Textures_SUGMA.sbc rename to Gamemode Mods/StarCore SUGMA Gamemodes/Data/Textures_SUGMA.sbc diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Properties/AssemblyInfo.cs b/Gamemode Mods/StarCore SUGMA Gamemodes/Properties/AssemblyInfo.cs similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Properties/AssemblyInfo.cs rename to Gamemode Mods/StarCore SUGMA Gamemodes/Properties/AssemblyInfo.cs diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/StarCore SUGMA Gamemodes.csproj.DotSettings b/Gamemode Mods/StarCore SUGMA Gamemodes/StarCore SUGMA Gamemodes.csproj.DotSettings similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/StarCore SUGMA Gamemodes.csproj.DotSettings rename to Gamemode Mods/StarCore SUGMA Gamemodes/StarCore SUGMA Gamemodes.csproj.DotSettings diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/StarCore SUGMA Gamemodes.sln.DotSettings b/Gamemode Mods/StarCore SUGMA Gamemodes/StarCore SUGMA Gamemodes.sln.DotSettings similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/StarCore SUGMA Gamemodes.sln.DotSettings rename to Gamemode Mods/StarCore SUGMA Gamemodes/StarCore SUGMA Gamemodes.sln.DotSettings diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Textures/Chevron.dds b/Gamemode Mods/StarCore SUGMA Gamemodes/Textures/Chevron.dds similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Textures/Chevron.dds rename to Gamemode Mods/StarCore SUGMA Gamemodes/Textures/Chevron.dds diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Textures/Chevron.png b/Gamemode Mods/StarCore SUGMA Gamemodes/Textures/Chevron.png similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Textures/Chevron.png rename to Gamemode Mods/StarCore SUGMA Gamemodes/Textures/Chevron.png diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Textures/Chevron_Flip.dds b/Gamemode Mods/StarCore SUGMA Gamemodes/Textures/Chevron_Flip.dds similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Textures/Chevron_Flip.dds rename to Gamemode Mods/StarCore SUGMA Gamemodes/Textures/Chevron_Flip.dds diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Textures/circle.dds b/Gamemode Mods/StarCore SUGMA Gamemodes/Textures/circle.dds similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/Textures/circle.dds rename to Gamemode Mods/StarCore SUGMA Gamemodes/Textures/circle.dds diff --git a/Gamemode Mods/Stable/Darth'sAIWaveSpawner/metadata.mod b/Gamemode Mods/StarCore SUGMA Gamemodes/metadata.mod similarity index 100% rename from Gamemode Mods/Stable/Darth'sAIWaveSpawner/metadata.mod rename to Gamemode Mods/StarCore SUGMA Gamemodes/metadata.mod diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/modinfo_main.sbmi b/Gamemode Mods/StarCore SUGMA Gamemodes/modinfo_main.sbmi similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/modinfo_main.sbmi rename to Gamemode Mods/StarCore SUGMA Gamemodes/modinfo_main.sbmi diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/modinfo_stable.sbmi b/Gamemode Mods/StarCore SUGMA Gamemodes/modinfo_stable.sbmi similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/modinfo_stable.sbmi rename to Gamemode Mods/StarCore SUGMA Gamemodes/modinfo_stable.sbmi diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/packages.config b/Gamemode Mods/StarCore SUGMA Gamemodes/packages.config similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/packages.config rename to Gamemode Mods/StarCore SUGMA Gamemodes/packages.config diff --git a/Gamemode Mods/Stable/Starcore_Pointslist/Data/Scripts/Additions/PointAdditions.cs b/Gamemode Mods/Starcore_Pointslist/Data/Scripts/Additions/PointAdditions.cs similarity index 94% rename from Gamemode Mods/Stable/Starcore_Pointslist/Data/Scripts/Additions/PointAdditions.cs rename to Gamemode Mods/Starcore_Pointslist/Data/Scripts/Additions/PointAdditions.cs index 0038c40c1..9ea961c32 100644 --- a/Gamemode Mods/Stable/Starcore_Pointslist/Data/Scripts/Additions/PointAdditions.cs +++ b/Gamemode Mods/Starcore_Pointslist/Data/Scripts/Additions/PointAdditions.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Xml; using Sandbox.ModAPI; @@ -349,6 +349,7 @@ internal class PointAdditions : MySessionComponentBase ["LargeBlockRadioAntenna"] = 5, ["LargeBlockCompactRadioAntenna"] = 5, + ["LargeBlockCompactRadioAntennaReskin"] = 5, ["LargeBlockRadioAntennaDish"] = 5, ["SC1x1Antenna"] = 5, ["C500mmTurret"] = 300, @@ -357,7 +358,7 @@ internal class PointAdditions : MySessionComponentBase ["C400mmTurret"] = 300, ["ARYXRailgunTurret"] = 350, - ["SC_AR_Deimos"] = 400, + ["SC_AR_Deimos"] = 600, ["MCRNRailgunLB"] = 1250, ["Cat_BigRotorStators"] = 16, @@ -557,9 +558,9 @@ internal class PointAdditions : MySessionComponentBase ["Cat_StarcoreUlitity"] = 21, ["LargeBlockRemoteControl"] = 100, ["SmallBlockRemoteControl"] = 50, - ["LargeProgrammableBlock"] = 100, - ["LargeProgrammableBlockReskin"] = 100, - ["6SidePB"] = 100, + ["LargeProgrammableBlock"] = 50, + ["LargeProgrammableBlockReskin"] = 50, + ["6SidePB"] = 50, ["SmallProgrammableBlock"] = 50, ["LargeTurretControlBlock"] = 10, ["EventControllerLarge"] = 5, @@ -686,7 +687,7 @@ internal class PointAdditions : MySessionComponentBase ["127mmMk12"] = 150, ["127mmMk24"] = 150, ["127mmMk32"] = 150, - ["127mmMk56"] = 350, + ["127mmMk56"] = 150, ["105mmTwin"] = 100, ["PomPomMain"] = 75, ["150mmCasemate"] = 150, @@ -698,8 +699,8 @@ internal class PointAdditions : MySessionComponentBase ["16InchTriple"] = 350, ["15cmTbtsKC36T"] = 150, ["15cmTbtsKC36"] = 150, - ["203mmTwin"] = 200, - ["203mmTriple"] = 200, + ["203mmTwin"] = 225, + ["203mmTriple"] = 225, ["TorpBarbette"] = 500, ["406alternate"] = 350, ["Mk25Rangefinder"] = 10, @@ -757,7 +758,7 @@ internal class PointAdditions : MySessionComponentBase ["Caster_Accelerator_0"] = 10, ["Caster_Accelerator_90"] = 40, ["Caster_Feeder"] = 10, - ["Caster_FocusLens"] = 350, + ["Caster_FocusLens"] = 250, ["Caster_Reactor"] = 125, ["Heat_Heatsink"] = 10, ["Heat_FlatRadiator"] = 10, @@ -943,8 +944,11 @@ private static MyTuple ClimbingCostRename(string blockDisplayName break; case "Shield Controller": case "Shield Controller Table": + blockDisplayName = "Shield Controller"; + costMultiplier = 50.00f; + break; case "Structural Integrity Field Generator": - case "Structural Integrity Generator Core": + case "[SI] Generator Core": blockDisplayName = "Defensive Generator"; costMultiplier = 50.00f; break; @@ -957,10 +961,22 @@ private static MyTuple ClimbingCostRename(string blockDisplayName return new MyTuple(blockDisplayName, costMultiplier); } + /// + /// Groups listed here will not have climbing cost applied within their group, but will have it applied to other groups in the same category. + /// + private readonly string[][] _crossedClimbingCostGroups = { + new[] + { + "Shield Controller", + "Defensive Generator" + } + }; + public override void Init(MyObjectBuilder_SessionComponent sessionComponent) { MyAPIGateway.Utilities.SendModMessage(2546247, PointValues); MyAPIGateway.Utilities.SendModMessage(2546247, _climbingCostRename); + MyAPIGateway.Utilities.SendModMessage(2546247, _crossedClimbingCostGroups); } } } diff --git a/Gamemode Mods/Stable/Starcore_Pointslist/metadata.mod b/Gamemode Mods/Starcore_Pointslist/metadata.mod similarity index 100% rename from Gamemode Mods/Stable/Starcore_Pointslist/metadata.mod rename to Gamemode Mods/Starcore_Pointslist/metadata.mod diff --git a/Gamemode Mods/Stable/Starcore_Pointslist/modinfo_main.sbmi b/Gamemode Mods/Starcore_Pointslist/modinfo_main.sbmi similarity index 100% rename from Gamemode Mods/Stable/Starcore_Pointslist/modinfo_main.sbmi rename to Gamemode Mods/Starcore_Pointslist/modinfo_main.sbmi diff --git a/Gamemode Mods/Stable/Starcore_Pointslist/modinfo_stable.sbmi b/Gamemode Mods/Starcore_Pointslist/modinfo_stable.sbmi similarity index 100% rename from Gamemode Mods/Stable/Starcore_Pointslist/modinfo_stable.sbmi rename to Gamemode Mods/Starcore_Pointslist/modinfo_stable.sbmi diff --git a/Gamemode Mods/Stable/Starcore_Pointslist/thumb.jpg b/Gamemode Mods/Starcore_Pointslist/thumb.jpg similarity index 100% rename from Gamemode Mods/Stable/Starcore_Pointslist/thumb.jpg rename to Gamemode Mods/Starcore_Pointslist/thumb.jpg diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/.gitignore b/Gamemode Mods/Starcore_Sharetrack/.gitignore similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/.gitignore rename to Gamemode Mods/Starcore_Sharetrack/.gitignore diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Aristeas_copy to DS and client.bat b/Gamemode Mods/Starcore_Sharetrack/Aristeas_copy to DS and client.bat similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Aristeas_copy to DS and client.bat rename to Gamemode Mods/Starcore_Sharetrack/Aristeas_copy to DS and client.bat diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Audio/MW4_Enemy_Target_Destroyed.wav b/Gamemode Mods/Starcore_Sharetrack/Audio/MW4_Enemy_Target_Destroyed.wav similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Audio/MW4_Enemy_Target_Destroyed.wav rename to Gamemode Mods/Starcore_Sharetrack/Audio/MW4_Enemy_Target_Destroyed.wav diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Audio/MW4_Friendly_Unit_Destroyed.wav b/Gamemode Mods/Starcore_Sharetrack/Audio/MW4_Friendly_Unit_Destroyed.wav similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Audio/MW4_Friendly_Unit_Destroyed.wav rename to Gamemode Mods/Starcore_Sharetrack/Audio/MW4_Friendly_Unit_Destroyed.wav diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Audio/MW4_V_Betty_MULTIPLAYER_Hill_Captured.wav b/Gamemode Mods/Starcore_Sharetrack/Audio/MW4_V_Betty_MULTIPLAYER_Hill_Captured.wav similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Audio/MW4_V_Betty_MULTIPLAYER_Hill_Captured.wav rename to Gamemode Mods/Starcore_Sharetrack/Audio/MW4_V_Betty_MULTIPLAYER_Hill_Captured.wav diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Audio/MW4_V_Betty_MULTIPLAYER_Hill_Contested.wav b/Gamemode Mods/Starcore_Sharetrack/Audio/MW4_V_Betty_MULTIPLAYER_Hill_Contested.wav similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Audio/MW4_V_Betty_MULTIPLAYER_Hill_Contested.wav rename to Gamemode Mods/Starcore_Sharetrack/Audio/MW4_V_Betty_MULTIPLAYER_Hill_Contested.wav diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/CaptureZoneSound.sbc b/Gamemode Mods/Starcore_Sharetrack/Data/CaptureZoneSound.sbc similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Data/CaptureZoneSound.sbc rename to Gamemode Mods/Starcore_Sharetrack/Data/CaptureZoneSound.sbc diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/CoreSystem/CoreSystemsApiBase.cs b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/CoreSystem/CoreSystemsApiBase.cs similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/CoreSystem/CoreSystemsApiBase.cs rename to Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/CoreSystem/CoreSystemsApiBase.cs diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/CoreSystem/CoreSystemsApiBlocks.cs b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/CoreSystem/CoreSystemsApiBlocks.cs similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/CoreSystem/CoreSystemsApiBlocks.cs rename to Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/CoreSystem/CoreSystemsApiBlocks.cs diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/CoreSystem/CoreSystemsApiDefs.cs b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/CoreSystem/CoreSystemsApiDefs.cs similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/CoreSystem/CoreSystemsApiDefs.cs rename to Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/CoreSystem/CoreSystemsApiDefs.cs diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/CoreSystem/CoreSystemsApiPhantoms.cs b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/CoreSystem/CoreSystemsApiPhantoms.cs similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/CoreSystem/CoreSystemsApiPhantoms.cs rename to Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/CoreSystem/CoreSystemsApiPhantoms.cs diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/HudAPIv2.cs b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/HudAPIv2.cs similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/HudAPIv2.cs rename to Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/HudAPIv2.cs diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/RtsApi.cs b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/RtsApi.cs similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/RtsApi.cs rename to Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/RtsApi.cs diff --git a/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/SCDAPI.cs b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/SCDAPI.cs new file mode 100644 index 000000000..81f5c047c --- /dev/null +++ b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/SCDAPI.cs @@ -0,0 +1,232 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Sandbox.ModAPI; +using VRage.Game.Entity; + +namespace StarCore.ShareTrack.API +{ + public class FieldGeneratorAPI + { + private bool _initialized; + + private Func _getFirstFieldGeneratorOnGrid; + + private Func _isSiegeActive; + private Action _setSiegeActive; + + private Func _isSiegeCooldownActive; + private Action _setSiegeCooldownActive; + + private Func _getSiegeCooldown; + private Action _setSiegeCooldown; + + private Func _getFieldPower; + private Action _setFieldPower; + + private Func _getMaximumFieldPower; + private Func_getMinimumFieldPower; + + private Func _getPowerDraw; + + private Func _getStability; + private Action _setStability; + + /// + /// Returns first valid field generator for the specified grid EntityID. + /// + /// EntityID of the cubegrid to check against. + /// IMyFunctionalBlock of the first field generator if one exists; otherwise, null. + public IMyFunctionalBlock GetFirstFieldGeneratorOnGrid(long entityID) => _getFirstFieldGeneratorOnGrid?.Invoke(entityID) ?? null; + + /// + /// Returns whether or not the specified block is in siege mode. + /// + /// Block to check. + /// true if siege mode is active; otherwise, false. + public bool IsSiegeActive(IMyFunctionalBlock block) => _isSiegeActive?.Invoke(block) ?? false; + + /// + /// Sets the siege mode state on the given block. + /// + /// Block whose siege state will be modified. + /// Whether siege mode should be active (true) or inactive (false). + public void SetSiegeActive(IMyFunctionalBlock block, bool Active) => _setSiegeActive?.Invoke(block, Active); + + /// + /// Returns whether or not the specified blocks siege mode is on cooldown. + /// + /// Block to check. + /// true if the cooldown is active; otherwise, false. + public bool IsSiegeCooldownActive(IMyFunctionalBlock block) => _isSiegeCooldownActive?.Invoke(block) ?? false; + + /// + /// Sets the siege mode cooldown state on the given block. + /// + /// Block whose cooldown state will be modified. + /// Whether the cooldown should be active (true) or inactive (false). + public void SetSiegeCooldownActive(IMyFunctionalBlock block, bool Active) => _setSiegeCooldownActive?.Invoke(block, Active); + + /// + /// Returns the specified blocks current cooldown time. + /// + /// Block to check. + /// The siege cooldown time, or 0 if no cooldown is active. + public int GetSiegeCooldown(IMyFunctionalBlock block) => _getSiegeCooldown?.Invoke(block) ?? 0; + + /// + /// Sets the cooldown time on the given block. + /// + /// Block whose cooldown will be modified. + /// Time to set the cooldown to, in seconds. + public void SetSiegeCooldown(IMyFunctionalBlock block, int Time) => _setSiegeCooldown?.Invoke(block, Time); + + /// + /// Returns the specified block current field power. + /// + /// Block to check. + /// The current field power. + public float GetFieldPower(IMyFunctionalBlock block) => _getFieldPower?.Invoke(block) ?? 0; + + /// + /// Sets the field power on the given block. + /// + /// Block whose field power will be modified. + /// + /// The field power to set as a float, expressed as a percentage and capped by minimum/maximum field power. + /// + public void SetFieldPower(IMyFunctionalBlock block, float Power) => _setFieldPower?.Invoke(block, Power); + + /// + /// Returns the specified blocks maximum field power. + /// + /// Block to check. + /// The maximum field power. + public float GetMaximumFieldPower(IMyFunctionalBlock block) => _getMaximumFieldPower?.Invoke(block) ?? 0; + + /// + /// Returns the specified block minimum field power. + /// + /// Block to check. + /// The minimum field power. + public float GetMinimumFieldPower(IMyFunctionalBlock block) => _getMinimumFieldPower?.Invoke(block) ?? 0; + + /// + /// Returns the specified blocks current power draw. + /// + /// Block to check. + /// The current power draw. + public float GetPowerDraw(IMyFunctionalBlock block) => _getPowerDraw?.Invoke(block) ?? 0; + + /// + /// Returns the specified blocks current stability. + /// + /// Block to check. + /// The current stability. + public float GetStability(IMyFunctionalBlock block) => _getStability?.Invoke(block) ?? 0; + + /// + /// Sets the stability on the given block. + /// + /// Block whose stability will be modified. + /// + /// The stability to set as a float, expressed as a percentage with a maximum of 100. + /// + public void SetStability(IMyFunctionalBlock block, float Stability) => _setStability?.Invoke(block, Stability); + + + private const long HandlerID = 917632; + private bool _APIRegistered; + private Action _ReadyCallback; + + public bool IsReady { get; private set; } + + + public void LoadAPI(Action ReadyCallback = null) + { + if (_APIRegistered) + throw new Exception($"{GetType().Name}.LoadAPI() should not be called multiple times!"); + + _ReadyCallback = ReadyCallback; + _APIRegistered = true; + MyAPIGateway.Utilities.RegisterMessageHandler(HandlerID, HandleMessage); + MyAPIGateway.Utilities.SendModMessage(HandlerID, "APIRequest"); + } + + public void UnloadAPI() + { + MyAPIGateway.Utilities.UnregisterMessageHandler(HandlerID, HandleMessage); + + ApiAssign(null); + + _APIRegistered = false; + _initialized = false; + IsReady = false; + } + + private void HandleMessage(object obj) + { + if (_initialized || obj is string) + return; + + var dict = obj as IReadOnlyDictionary; + + if (dict == null) + return; + + ApiAssign(dict); + + IsReady = true; + _ReadyCallback?.Invoke(); + } + + public void ApiAssign(IReadOnlyDictionary delegates) + { + _initialized = delegates != null; + + AssignMethod(delegates, "GetFirstFieldGeneratorOnGrid", ref _getFirstFieldGeneratorOnGrid); + + AssignMethod(delegates, "IsSiegeActive", ref _isSiegeActive); + AssignMethod(delegates, "SetSiegeActive", ref _setSiegeActive); + + AssignMethod(delegates, "IsSiegeCooldownActive", ref _isSiegeCooldownActive); + AssignMethod(delegates, "SetSiegeCooldownActive", ref _setSiegeCooldownActive); + + AssignMethod(delegates, "GetSiegeCooldown", ref _getSiegeCooldown); + AssignMethod(delegates, "SetSiegeCooldown", ref _setSiegeCooldown); + + AssignMethod(delegates, "GetFieldPower", ref _getFieldPower); + AssignMethod(delegates, "SetFieldPower", ref _setFieldPower); + + AssignMethod(delegates, "GetMaximumFieldPower", ref _getMaximumFieldPower); + AssignMethod(delegates, "GetMinimumFieldPower", ref _getMinimumFieldPower); + + AssignMethod(delegates, "GetPowerDraw", ref _getPowerDraw); + + AssignMethod(delegates, "GetStability", ref _getStability); + AssignMethod(delegates, "SetStability", ref _setStability); + } + + private void AssignMethod(IReadOnlyDictionary delegates, string name, ref T field) + where T : class + { + if (delegates == null) + { + field = null; + return; + } + + Delegate del; + if (!delegates.TryGetValue(name, out del)) + throw new Exception($"{GetType().Name} :: Couldn't find {name} delegate of type {typeof(T)}"); + + field = del as T; + + if (field == null) + throw new Exception( + $"{GetType().Name} :: Delegate {name} is not type {typeof(T)}, instead it's: {del.GetType()}"); + } + } +} diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/ShieldApi.cs b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/ShieldApi.cs similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/ShieldApi.cs rename to Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/API/ShieldApi.cs diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/AllGridsList.cs b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/AllGridsList.cs similarity index 89% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/AllGridsList.cs rename to Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/AllGridsList.cs index 735df42f0..e631096e1 100644 --- a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/AllGridsList.cs +++ b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/AllGridsList.cs @@ -25,6 +25,7 @@ public class AllGridsList public static AllGridsList I; public static Dictionary PointValues = new Dictionary(); + public static string[][] CrossedClimbingCostGroups = Array.Empty(); private static readonly Dictionary AllPlayers = new Dictionary(); @@ -40,6 +41,9 @@ public static HudAPIv2.HUDMessage { [MyKeys.M] = () => { + if (!MasterSession.Config.AllowGridTracking) + return; + var castGrid = RaycastGridFromCamera(); if (castGrid == null) return; @@ -102,6 +106,14 @@ private void ParsePointsDict(object message) if (climbCostFunc != null) { _climbingCostFunction = climbCostFunc; + return; + } + + var crossedGroups = message as string[][]; + if (crossedGroups != null) + { + CrossedClimbingCostGroups = crossedGroups; + return; } } catch (Exception ex) @@ -252,8 +264,18 @@ private string CreateDisplayString(string ownerName, ShipTracker tracker, int we var functionalColor = tracker.IsFunctional ? "white" : "red"; var integrityColor = integrityPercent >= 75 ? "White" : integrityPercent >= 50 ? "LightCoral" : integrityPercent >= 25 ? "IndianRed" : "FireBrick"; + var siegeColor = "white"; + string siegeDisplay = ""; + if (tracker.FieldGenerator != null) + { + siegeDisplay = tracker.IsSiegeActive ? "[SIEGED] " : ""; + siegeColor = tracker.IsSiegeActive ? tracker.GeneratorDisplayBlink == 1 ? "red" : "yellow" : "white"; + + tracker.GeneratorDisplayBlink = 1 - tracker.GeneratorDisplayBlink; + } + return - $"{ownerDisplay,-8}{integrityPercent,3}% P:{power,3} T:{thrust,3} W:{wep} S:{shieldPercent,3}%"; + $"{siegeDisplay}{ownerDisplay,-8}{integrityPercent,3}% P:{power,3} T:{thrust,3} W:{wep} S:{shieldPercent,3}%"; } @@ -310,6 +332,7 @@ public static IMyCubeGrid RaycastGridFromCamera() public WcApi WcApi { get; private set; } public ShieldApi ShieldApi { get; private set; } public RtsApi RtsApi { get; private set; } + public FieldGeneratorAPI FieldGeneratorAPI { get; private set; } private HudPointsList _hudPointsList; @@ -360,6 +383,9 @@ public void InitApi() // Initialize the RTS_api and load it if it's not null RtsApi = new RtsApi(); RtsApi?.Load(); + + FieldGeneratorAPI = new FieldGeneratorAPI(); + FieldGeneratorAPI?.LoadAPI(); } public void Close() @@ -368,6 +394,8 @@ public void Close() WcApi?.Unload(); ShieldApi?.Unload(); + RtsApi?.Unload(); + FieldGeneratorAPI?.UnloadAPI(); if (PointValues != null) { PointValues.Clear(); diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/BuildingBlockPoints.cs b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/BuildingBlockPoints.cs similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/BuildingBlockPoints.cs rename to Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/BuildingBlockPoints.cs diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/HeartNetworking/Custom/SyncRequestPacket.cs b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/HeartNetworking/Custom/SyncRequestPacket.cs similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/HeartNetworking/Custom/SyncRequestPacket.cs rename to Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/HeartNetworking/Custom/SyncRequestPacket.cs diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/HeartNetworking/Custom/TrackingSyncPacket.cs b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/HeartNetworking/Custom/TrackingSyncPacket.cs similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/HeartNetworking/Custom/TrackingSyncPacket.cs rename to Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/HeartNetworking/Custom/TrackingSyncPacket.cs diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/HeartNetworking/HeartNetwork.cs b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/HeartNetworking/HeartNetwork.cs similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/HeartNetworking/HeartNetwork.cs rename to Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/HeartNetworking/HeartNetwork.cs diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/HeartNetworking/PacketBase.cs b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/HeartNetworking/PacketBase.cs similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/HeartNetworking/PacketBase.cs rename to Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/HeartNetworking/PacketBase.cs diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/HudPointsList.cs b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/HudPointsList.cs similarity index 96% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/HudPointsList.cs rename to Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/HudPointsList.cs index 6198d9d72..7e3d93b03 100644 --- a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/HudPointsList.cs +++ b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/HudPointsList.cs @@ -105,7 +105,9 @@ private void ShiftTCalcs(IMyCubeGrid focusedGrid) return; var stopwatch = new System.Diagnostics.Stopwatch(); stopwatch.Start(); - if (_shipTracker?.Grid?.GetGridGroup(GridLinkTypeEnum.Physical) != focusedGrid.GetGridGroup(GridLinkTypeEnum.Physical) && !TrackingManager.I.TrackedGrids.TryGetValue(focusedGrid, out _shipTracker)) + + _shipTracker = TrackingManager.I.TryGetTracker(focusedGrid); + if (_shipTracker == null) { _shipTracker = new ShipTracker(focusedGrid, false); Log.Info($"ShiftTCalcs Tracked grid {focusedGrid.DisplayName}. Visible: false"); diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/Logger.cs b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/Logger.cs similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/Logger.cs rename to Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/Logger.cs diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/MasterSession.cs b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/MasterSession.cs similarity index 93% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/MasterSession.cs rename to Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/MasterSession.cs index 241d74677..9d1c78f61 100644 --- a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/MasterSession.cs +++ b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/MasterSession.cs @@ -18,6 +18,7 @@ internal class MasterSession : MySessionComponentBase public static readonly Vector2I ModVersion = new Vector2I(3, 2); public static MasterSession I; + public static SharetrackConfig Config; public HudAPIv2 TextHudApi; public Action HudRegistered = () => { }; @@ -37,6 +38,7 @@ public override void LoadData() try { + Config = new SharetrackConfig(); HeartNetwork.I = new HeartNetwork(); HeartNetwork.I.LoadData(42521); _allGridsList.Init(); @@ -71,6 +73,7 @@ protected override void UnloadData() { try { + Config.StoreSettings(); TextHudApi?.Unload(); _apiProvider.Unload(); _allGridsList.Close(); diff --git a/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/SharetrackConfig.cs b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/SharetrackConfig.cs new file mode 100644 index 000000000..87465bae9 --- /dev/null +++ b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/SharetrackConfig.cs @@ -0,0 +1,86 @@ +using Sandbox.ModAPI; +using System; +using System.IO; +using System.Linq; +using VRage.Game.ModAPI; +using VRage.Game.ModAPI.Ingame.Utilities; +using VRage.Utils; + +namespace StarCore.ShareTrack +{ + internal class SharetrackConfig + { + const string Filename = "ShareTrack_Settings.ini"; + + #region Settings Values + + public bool AllowGridTracking = true; + public bool AutoTrack = true; + + #endregion + + public SharetrackConfig() + { + MyIni ini = new MyIni(); + LoadSavedSettings(ini); + StoreSettings(); + } + + private void LoadSavedSettings(MyIni ini) + { + MyIniParseResult result; + + if (!MyAPIGateway.Utilities.FileExistsInWorldStorage(Filename, typeof(SharetrackConfig)) || + !ini.TryParse(ReadFileSafe(Filename), out result)) + { + // Load default settings + LoadDefaults(); + return; + } + + try + { + AllowGridTracking = ini.Get("sharetrack", "allowGridTracking").ToBoolean(); + AutoTrack = ini.Get("sharetrack", "autoTrack").ToBoolean(); + } + catch (Exception ex) + { + MyLog.Default.WriteLineAndConsole($"Error parsing {Filename}!\n" + ex); + LoadDefaults(); + } + } + + public void StoreSettings() + { + MyAPIGateway.Utilities.DeleteFileInWorldStorage(Filename, typeof(SharetrackConfig)); + MyIni ini = new MyIni(); + ini.AddSection("ShareTrack"); + ini.SetSectionComment("ShareTrack", "ShareTrack Config\n - by Aristeas\nSettings are read on session load, and saved on session unload.\nInvalid values are set to default.\n"); + + ini.Set("sharetrack", "allowGridTracking", AllowGridTracking); + ini.SetComment("sharetrack", "allowGridTracking", "If false, disallow players from tracking grids."); + + ini.Set("sharetrack", "autoTrack", AutoTrack); + ini.SetComment("sharetrack", "autoTrack", "If true, automatically track grids counted as alive."); + + TextWriter writer = MyAPIGateway.Utilities.WriteFileInWorldStorage(Filename, typeof(SharetrackConfig)); + writer.Write(ini.ToString()); + writer.Flush(); + writer.Close(); + } + + private void LoadDefaults() + { + AllowGridTracking = true; + AutoTrack = true; + } + + private static string ReadFileSafe(string fileName) + { + var reader = MyAPIGateway.Utilities.ReadFileInWorldStorage(fileName, typeof(SharetrackConfig)); + string str = reader.ReadToEnd(); + reader.Close(); + return str; + } + } +} diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/ShipTracking/GridStats.cs b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/ShipTracking/GridStats.cs similarity index 86% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/ShipTracking/GridStats.cs rename to Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/ShipTracking/GridStats.cs index 477e0e9b3..f0dc41672 100644 --- a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/ShipTracking/GridStats.cs +++ b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/ShipTracking/GridStats.cs @@ -127,6 +127,7 @@ public void Update() public readonly Dictionary SpecialBlockCounts = new Dictionary(); public float TotalThrust { get; private set; } public float TotalTorque { get; private set; } + public int TotalPowerBlocks { get; private set; } public float GridIntegrity { get; private set; } public float OriginalGridIntegrity { get; private set; } @@ -188,23 +189,26 @@ private void UpdateGlobalStats() TotalThrust = 0; TotalTorque = 0; + TotalPowerBlocks = 0; foreach (var block in _fatBlocks) { - if (block.IsFunctional) + // Does not check for functionality of blocks because they can be welded. + if (block is IMyCockpit) + CockpitCount++; + else if (block is IMyThrust) { - if (block is IMyCockpit) - CockpitCount++; - else if (block is IMyThrust) - { - TotalThrust += ((IMyThrust)block).MaxEffectiveThrust; - } - else if (block is IMyGyro) - { - TotalTorque += - ((MyGyroDefinition)MyDefinitionManager.Static.GetDefinition((block as IMyGyro).BlockDefinition)) - .ForceMagnitude * (block as IMyGyro).GyroStrengthMultiplier; - } + TotalThrust += ((IMyThrust)block).MaxEffectiveThrust; + } + else if (block is IMyGyro) + { + TotalTorque += + ((MyGyroDefinition)MyDefinitionManager.Static.GetDefinition((block as IMyGyro).BlockDefinition)) + .ForceMagnitude * (block as IMyGyro).GyroStrengthMultiplier; + } + else if (block is IMyPowerProducer) + { + TotalPowerBlocks++; } if (!AllGridsList.I.WeaponSubtytes.Contains(block.BlockDefinition.SubtypeId)) @@ -271,7 +275,13 @@ private void CalculateCost(IMyCubeBlock block) if (!BlockCounts.ContainsKey(blockDisplayName)) BlockCounts.Add(blockDisplayName, 0); - var thisSpecialBlocksCount = BlockCounts[blockDisplayName]++; + int thisSpecialBlocksCount = BlockCounts[blockDisplayName]++; + + string[] crossedGroup = AllGridsList.CrossedClimbingCostGroups.FirstOrDefault(l => l.Contains(blockDisplayName)); + if (crossedGroup != null) + { + thisSpecialBlocksCount = crossedGroup.Where(g => g != blockDisplayName).Sum(groupName => BlockCounts.GetValueOrDefault(groupName, 0)); + } if (thisClimbingCostMult > 0) blockPoints += (int)(blockPoints * thisSpecialBlocksCount * thisClimbingCostMult); diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/ShipTracking/ShipTracker.cs b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/ShipTracking/ShipTracker.cs similarity index 90% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/ShipTracking/ShipTracker.cs rename to Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/ShipTracking/ShipTracker.cs index e61667976..1c9c81463 100644 --- a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/ShipTracking/ShipTracker.cs +++ b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/ShipTracking/ShipTracker.cs @@ -124,6 +124,7 @@ private void TransferToGrid(IMyCubeGrid newGrid, bool showOnHud = true) } private ShieldApi ShieldApi => AllGridsList.I.ShieldApi; + private FieldGeneratorAPI FieldGeneratorAPI => AllGridsList.I.FieldGeneratorAPI; public IMyCubeGrid Grid { get; private set; } @@ -194,7 +195,7 @@ public void Update() var shieldController = ShieldApi.GetShieldBlock(Grid); if (shieldController == null) OriginalMaxShieldHealth = -1; - if (OriginalMaxShieldHealth == -1 && !ShieldApi.IsFortified(shieldController)) + if (!ShieldApi.IsFortified(shieldController)) OriginalMaxShieldHealth = MaxShieldHealth; // TODO: Update pilots @@ -205,7 +206,7 @@ public void Update() } bool bufferIsFunctional = IsFunctional; - IsFunctional = TotalPower > 0 && TotalTorque > 0 && CockpitCount > 0; + IsFunctional = TotalPowerBlocks > 0 && TotalTorque > 0 && CockpitCount > 0; if (bufferIsFunctional != IsFunctional) { TrackingManager.I.OnShipAliveChanged?.Invoke(Grid, IsFunctional); @@ -358,7 +359,7 @@ public void UpdateHud() 30 / Math.Max(maxAngle, angle * angle * angle); _nametag.Origin = new Vector2D(targetHudPos.X, targetHudPos.Y + MathHelper.Clamp(-0.000125 * distance + 0.25, 0.05, 0.25)); - _nametag.Visible = visible && AllGridsList.NametagViewState != NametagSettings.None; + _nametag.Visible = visible && AllGridsList.NametagViewState != NametagSettings.None && (MyAPIGateway.Session?.Player?.Controller?.ControlledEntity?.Entity as IMyCockpit)?.CubeGrid != Grid; _nametag.Message.Clear(); @@ -370,6 +371,8 @@ public void UpdateHud() nameTagText += "\n" + GridName; if (!IsFunctional) nameTagText += ":[Dead]"; + if (FieldGenerator != null) + nameTagText += IsSiegeActive ? " [SIEGED]" : ""; _nametag.Message.Append(nameTagText.TrimStart('\n')); _nametag.Offset = -_nametag.GetTextLength() / 2; @@ -486,6 +489,17 @@ public float TotalTorque public float TotalPower => Grid?.ResourceDistributor?.MaxAvailableResourceByType(MyResourceDistributorComponent.ElectricityId) ?? 0; + public int TotalPowerBlocks + { + get + { + int total = 0; + foreach (var stats in _gridStats.Values) + total += stats.TotalPowerBlocks; + return total; + } + } + public Dictionary SpecialBlockCounts { get @@ -644,6 +658,33 @@ public Dictionary WeaponCounts #endregion + #region Field Generator Stats + public IMyFunctionalBlock FieldGenerator => FieldGeneratorAPI.IsReady ? FieldGeneratorAPI.GetFirstFieldGeneratorOnGrid(Grid.EntityId) : null; + + public bool IsSiegeActive + { + get + { + var fieldGenerator = FieldGeneratorAPI.GetFirstFieldGeneratorOnGrid(Grid.EntityId); + if (fieldGenerator == null) + return false; + return FieldGeneratorAPI.IsSiegeActive(fieldGenerator); + } + } + + public float CurrentFieldPower + { + get + { + var fieldGenerator = FieldGeneratorAPI.GetFirstFieldGeneratorOnGrid(Grid.EntityId); + if (fieldGenerator == null) + return 0; + return FieldGeneratorAPI.GetFieldPower(fieldGenerator); + } + } + + public int GeneratorDisplayBlink; + #endregion #endregion } } \ No newline at end of file diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/ShipTracking/TrackingManager.cs b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/ShipTracking/TrackingManager.cs similarity index 72% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/ShipTracking/TrackingManager.cs rename to Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/ShipTracking/TrackingManager.cs index b5f5b615b..7687886a1 100644 --- a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/ShipTracking/TrackingManager.cs +++ b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/ShipTracking/TrackingManager.cs @@ -1,10 +1,11 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using Sandbox.Game.Entities; using Sandbox.ModAPI; using StarCore.ShareTrack.HeartNetworking; using StarCore.ShareTrack.HeartNetworking.Custom; +using VRage.Game; using VRage.Game.ModAPI; using VRage.ModAPI; @@ -113,19 +114,80 @@ private long[] GetGridIds() private bool CheckAutotrack(IMyCubeGrid grid) { - if (!EnableAutotrack) + if (!EnableAutotrack /*|| !MasterSession.Config.AutoTrack*/) return false; foreach (var block in grid.GetFatBlocks()) { if (!(block is IMyCockpit) && !AutoTrackSubtypes.Contains(block.BlockDefinition.SubtypeName)) continue; + //TransferGridOwnership(grid); return true; } return false; } + private static readonly Dictionary ShipNamesToLeaderIds = new Dictionary + { + // ASQ - Demonfox + ["ASQ Fulma Natrii"] = 76561198006916493, + ["Birdsy is Hungy"] = 76561198006916493, + + // HAC - Spartan + ["HAC Asesino"] = 76561198084063571, + ["H.A.C. - Charybdis"] = 76561198084063571, + ["Imanis' Shadow Mk_7"] = 76561198084063571, + ["H.A.C. - IONA"] = 76561198084063571, + + // ICE - RyO + ["ICE Gorilla Destroyer Death Star"] = 76561198133050445, + ["ICE TIE Abel"] = 76561198133050445, + ["ICE TIE Cain X"] = 76561198133050445, + ["ICE Wraith Star Destroyer X"] = 76561198133050445, + + // MCE - Max + ["GT4 - MCE Beekeeper"] = 76561198256358015, + ["GT4 30 Ramstick ARRAY"] = 76561198256358015, + ["MCE Sonnenblume GT4 Fusion"] = 76561198256358015, + ["[MCE] Dancing in Starlight GT4"] = 76561198274566684, + + // RKD - Anomaly + ["Fire Hawk MK3 v7"] = 76561198049738491, + ["Hyperion Class Battlecruiser"] = 76561198049738491, + ["[RKD] Subcritical Photon"] = 76561198049738491, + + // TEC - Darth411 + ["TEC Challenger T48G-2 [BANSHEE] GT4"] = 76561198013723549, + ["TEC Coyote Mk4 GT4"] = 76561198013723549, + [" TEC Heavy Frigate - GT4"] = 76561198013723549, + ["TEC Stolen Identity (GT4)"] = 76561198013723549, + + // UOD - Bryce_Craft + ["UOD Doomsday GT 4"] = 76561198330424595, + ["UOD Eternity GT4"] = 76561198330424595, + ["UOD Serenity GT 4"] = 76561198330424595, + ["UOD Valhalla GT4"] = 76561198330424595, + }; + + /// + /// Temporary autotransfer method for Grand Tournament 4. + /// + /// + private void TransferGridOwnership(IMyCubeGrid grid) + { + if (!MyAPIGateway.Session.IsServer || !ShipNamesToLeaderIds.ContainsKey(grid.DisplayName.Replace("\"", ""))) + return; + + long playerId = MyAPIGateway.Players.TryGetIdentityId(ShipNamesToLeaderIds[grid.DisplayName.Replace("\"", "")]); + + List attachedGrids = new List(); + grid.GetGridGroup(GridLinkTypeEnum.Physical).GetGrids(attachedGrids); + + foreach (var aGrid in attachedGrids) + aGrid.ChangeGridOwnership(playerId, MyOwnershipShareModeEnum.Faction); + } + #region Public Methods public static void Init() @@ -286,6 +348,15 @@ public bool IsGridTracked(IMyCubeGrid grid) return false; } + public ShipTracker TryGetTracker(IMyCubeGrid grid) + { + var allAttachedGrids = new List(); + grid.GetGridGroup(GridLinkTypeEnum.Physical).GetGrids(allAttachedGrids); + foreach (var attachedGrid in allAttachedGrids.Where(attachedGrid => TrackedGrids.ContainsKey(attachedGrid))) + return TrackedGrids[attachedGrid]; + return null; + } + public void ServerDoSync() { var packet = new TrackingSyncPacket(GetGridIds()); diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/TrackerApi/ApiMethods.cs b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/TrackerApi/ApiMethods.cs similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/TrackerApi/ApiMethods.cs rename to Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/TrackerApi/ApiMethods.cs diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/TrackerApi/ApiProvider.cs b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/TrackerApi/ApiProvider.cs similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/TrackerApi/ApiProvider.cs rename to Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/TrackerApi/ApiProvider.cs diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/TrackerApi/ShareTrackApi.cs b/Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/TrackerApi/ShareTrackApi.cs similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Data/Scripts/ShipPoints/TrackerApi/ShareTrackApi.cs rename to Gamemode Mods/Starcore_Sharetrack/Data/Scripts/ShipPoints/TrackerApi/ShareTrackApi.cs diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/TransparentMaterials.sbc b/Gamemode Mods/Starcore_Sharetrack/Data/TransparentMaterials.sbc similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Data/TransparentMaterials.sbc rename to Gamemode Mods/Starcore_Sharetrack/Data/TransparentMaterials.sbc diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Data/concatrecursivelyandminify.bat b/Gamemode Mods/Starcore_Sharetrack/Data/concatrecursivelyandminify.bat similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Data/concatrecursivelyandminify.bat rename to Gamemode Mods/Starcore_Sharetrack/Data/concatrecursivelyandminify.bat diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Invalid_copy to DS and client.bat b/Gamemode Mods/Starcore_Sharetrack/Invalid_copy to DS and client.bat similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Invalid_copy to DS and client.bat rename to Gamemode Mods/Starcore_Sharetrack/Invalid_copy to DS and client.bat diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/Models/Cubes/InnerShield.mwm b/Gamemode Mods/Starcore_Sharetrack/Models/Cubes/InnerShield.mwm similarity index 100% rename from Gamemode Mods/Stable/CombatZoneMuzzmod/Models/Cubes/InnerShield.mwm rename to Gamemode Mods/Starcore_Sharetrack/Models/Cubes/InnerShield.mwm diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Models/Cubes/ShieldPassive07.mwm b/Gamemode Mods/Starcore_Sharetrack/Models/Cubes/ShieldPassive07.mwm similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Models/Cubes/ShieldPassive07.mwm rename to Gamemode Mods/Starcore_Sharetrack/Models/Cubes/ShieldPassive07.mwm diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Models/Cubes/ShieldPassive08.mwm b/Gamemode Mods/Starcore_Sharetrack/Models/Cubes/ShieldPassive08.mwm similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Models/Cubes/ShieldPassive08.mwm rename to Gamemode Mods/Starcore_Sharetrack/Models/Cubes/ShieldPassive08.mwm diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Models/Cubes/ShieldPassive09.mwm b/Gamemode Mods/Starcore_Sharetrack/Models/Cubes/ShieldPassive09.mwm similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Models/Cubes/ShieldPassive09.mwm rename to Gamemode Mods/Starcore_Sharetrack/Models/Cubes/ShieldPassive09.mwm diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/Starcore_Sharetrack.csproj.DotSettings b/Gamemode Mods/Starcore_Sharetrack/Starcore_Sharetrack.csproj.DotSettings similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/Starcore_Sharetrack.csproj.DotSettings rename to Gamemode Mods/Starcore_Sharetrack/Starcore_Sharetrack.csproj.DotSettings diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/metadata.mod b/Gamemode Mods/Starcore_Sharetrack/metadata.mod similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/metadata.mod rename to Gamemode Mods/Starcore_Sharetrack/metadata.mod diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/modinfo_main.sbmi b/Gamemode Mods/Starcore_Sharetrack/modinfo_main.sbmi similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/modinfo_main.sbmi rename to Gamemode Mods/Starcore_Sharetrack/modinfo_main.sbmi diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/modinfo_stable.sbmi b/Gamemode Mods/Starcore_Sharetrack/modinfo_stable.sbmi similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/modinfo_stable.sbmi rename to Gamemode Mods/Starcore_Sharetrack/modinfo_stable.sbmi diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/packages.config b/Gamemode Mods/Starcore_Sharetrack/packages.config similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/packages.config rename to Gamemode Mods/Starcore_Sharetrack/packages.config diff --git a/Gamemode Mods/Stable/Starcore_Sharetrack/thumb.jpg b/Gamemode Mods/Starcore_Sharetrack/thumb.jpg similarity index 100% rename from Gamemode Mods/Stable/Starcore_Sharetrack/thumb.jpg rename to Gamemode Mods/Starcore_Sharetrack/thumb.jpg diff --git a/Utility Mods/Stable/BaRCore/Data/ARM_EntityComponents.sbc b/Utility Mods/BaRCore/Data/ARM_EntityComponents.sbc similarity index 100% rename from Utility Mods/Stable/BaRCore/Data/ARM_EntityComponents.sbc rename to Utility Mods/BaRCore/Data/ARM_EntityComponents.sbc diff --git a/Utility Mods/Stable/BaRCore/Data/BlockCategories.sbc b/Utility Mods/BaRCore/Data/BlockCategories.sbc similarity index 50% rename from Utility Mods/Stable/BaRCore/Data/BlockCategories.sbc rename to Utility Mods/BaRCore/Data/BlockCategories.sbc index fd6bb29f9..d540e612a 100644 --- a/Utility Mods/Stable/BaRCore/Data/BlockCategories.sbc +++ b/Utility Mods/BaRCore/Data/BlockCategories.sbc @@ -1,55 +1,29 @@ - - - - - - GuiBlockCategoryDefinition - - - Dummy Industries - Dummy Industries - - ShipWelder/SELtdLargeNanobotBuildAndRepairSystem - ShipWelder/SELtdSmallNanobotBuildAndRepairSystem - - - - - - GuiBlockCategoryDefinition - - - DisplayName_Category_LargeBlocks - LargeBlocks - - ShipWelder/SELtdLargeNanobotBuildAndRepairSystem - - - - - - GuiBlockCategoryDefinition - - - DisplayName_Category_SmallBlocks - SmallBlocks - - ShipWelder/SELtdSmallNanobotBuildAndRepairSystem - - - - - - GuiBlockCategoryDefinition - - - DisplayName_Category_ShipTools - Tools - - ShipWelder/SELtdLargeNanobotBuildAndRepairSystem - ShipWelder/SELtdSmallNanobotBuildAndRepairSystem - - - - - + + + + + + GuiBlockCategoryDefinition + + + DisplayName_Category_LargeBlocks + LargeBlocks + + ShipWelder/SELtdLargeNanobotBuildAndRepairSystem + + + + + + GuiBlockCategoryDefinition + + + DisplayName_Category_ShipTools + Tools + + ShipWelder/SELtdLargeNanobotBuildAndRepairSystem + + + + + diff --git a/Utility Mods/Stable/BaRCore/Data/BlueprintClasses.sbc b/Utility Mods/BaRCore/Data/BlueprintClasses.sbc similarity index 74% rename from Utility Mods/Stable/BaRCore/Data/BlueprintClasses.sbc rename to Utility Mods/BaRCore/Data/BlueprintClasses.sbc index 611c9cb24..a3673079e 100644 --- a/Utility Mods/Stable/BaRCore/Data/BlueprintClasses.sbc +++ b/Utility Mods/BaRCore/Data/BlueprintClasses.sbc @@ -1,7 +1,6 @@ - - - - - - + + + + + \ No newline at end of file diff --git a/Utility Mods/BaRCore/Data/CubeBlocks.sbc b/Utility Mods/BaRCore/Data/CubeBlocks.sbc new file mode 100644 index 000000000..869648861 --- /dev/null +++ b/Utility Mods/BaRCore/Data/CubeBlocks.sbc @@ -0,0 +1,59 @@ + + + + + + + Collector + SELtdLargeNanobotBuildAndRepairSystem + + [SC] Auto Repair Module + Textures\Icons\SELtdNanobotBuildAndRepairSystem.dds + Large + TriangleMesh + + +
+ Models\NanobotBuildAndRepairSystem\SELtdLargeNanobotBuildAndRepairSystem.mwm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 40 + SELtdNanobotBuildAndRepairSystem + None + None + None + Light + BlockModuleEfficiency + 212 + ParticleHeavyMech + 200 + + + \ No newline at end of file diff --git a/Utility Mods/Stable/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/HeartNetworking/ComponentBase.cs b/Utility Mods/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/HeartNetworking/ComponentBase.cs similarity index 100% rename from Utility Mods/Stable/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/HeartNetworking/ComponentBase.cs rename to Utility Mods/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/HeartNetworking/ComponentBase.cs diff --git a/Utility Mods/Stable/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/HeartNetworking/Custom/IgnoreArmorPacket.cs b/Utility Mods/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/HeartNetworking/Custom/IgnoreArmorPacket.cs similarity index 100% rename from Utility Mods/Stable/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/HeartNetworking/Custom/IgnoreArmorPacket.cs rename to Utility Mods/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/HeartNetworking/Custom/IgnoreArmorPacket.cs diff --git a/Utility Mods/Stable/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/HeartNetworking/Custom/PriorityOnlyPacket.cs b/Utility Mods/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/HeartNetworking/Custom/PriorityOnlyPacket.cs similarity index 100% rename from Utility Mods/Stable/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/HeartNetworking/Custom/PriorityOnlyPacket.cs rename to Utility Mods/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/HeartNetworking/Custom/PriorityOnlyPacket.cs diff --git a/Utility Mods/Stable/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/HeartNetworking/Custom/SubsystemPriorityPacket.cs b/Utility Mods/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/HeartNetworking/Custom/SubsystemPriorityPacket.cs similarity index 100% rename from Utility Mods/Stable/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/HeartNetworking/Custom/SubsystemPriorityPacket.cs rename to Utility Mods/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/HeartNetworking/Custom/SubsystemPriorityPacket.cs diff --git a/Utility Mods/Stable/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/HeartNetworking/Custom/SyncRequestPacket.cs b/Utility Mods/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/HeartNetworking/Custom/SyncRequestPacket.cs similarity index 100% rename from Utility Mods/Stable/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/HeartNetworking/Custom/SyncRequestPacket.cs rename to Utility Mods/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/HeartNetworking/Custom/SyncRequestPacket.cs diff --git a/Utility Mods/Stable/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/HeartNetworking/HeartNetwork.cs b/Utility Mods/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/HeartNetworking/HeartNetwork.cs similarity index 100% rename from Utility Mods/Stable/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/HeartNetworking/HeartNetwork.cs rename to Utility Mods/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/HeartNetworking/HeartNetwork.cs diff --git a/Utility Mods/Stable/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/HeartNetworking/PacketBase.cs b/Utility Mods/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/HeartNetworking/PacketBase.cs similarity index 100% rename from Utility Mods/Stable/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/HeartNetworking/PacketBase.cs rename to Utility Mods/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/HeartNetworking/PacketBase.cs diff --git a/Utility Mods/Stable/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/RepairModule_Core.cs b/Utility Mods/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/RepairModule_Core.cs similarity index 100% rename from Utility Mods/Stable/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/RepairModule_Core.cs rename to Utility Mods/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/RepairModule_Core.cs diff --git a/Utility Mods/Stable/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/RepairModule_Logger.cs b/Utility Mods/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/RepairModule_Logger.cs similarity index 100% rename from Utility Mods/Stable/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/RepairModule_Logger.cs rename to Utility Mods/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/RepairModule_Logger.cs diff --git a/Utility Mods/Stable/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/RepairModule_Session.cs b/Utility Mods/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/RepairModule_Session.cs similarity index 100% rename from Utility Mods/Stable/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/RepairModule_Session.cs rename to Utility Mods/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/RepairModule_Session.cs diff --git a/Utility Mods/Stable/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/RepairModule_TerminalControls.cs b/Utility Mods/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/RepairModule_TerminalControls.cs similarity index 100% rename from Utility Mods/Stable/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/RepairModule_TerminalControls.cs rename to Utility Mods/BaRCore/Data/Scripts/SimplifiedBAR/HullRegenModule/RepairModule_TerminalControls.cs diff --git a/Utility Mods/Stable/BaRCore/Data/Scripts/concatrecursivelyandminify.bat b/Utility Mods/BaRCore/Data/Scripts/concatrecursivelyandminify.bat similarity index 100% rename from Utility Mods/Stable/BaRCore/Data/Scripts/concatrecursivelyandminify.bat rename to Utility Mods/BaRCore/Data/Scripts/concatrecursivelyandminify.bat diff --git a/Utility Mods/Stable/BaRCore/Invalid_copy to DS and client.bat b/Utility Mods/BaRCore/Invalid_copy to DS and client.bat similarity index 100% rename from Utility Mods/Stable/BaRCore/Invalid_copy to DS and client.bat rename to Utility Mods/BaRCore/Invalid_copy to DS and client.bat diff --git a/Utility Mods/Stable/BaRCore/Models/NanobotBuildAndRepairSystem/SELtdLargeNanobotBuildAndRepairSystem.mwm b/Utility Mods/BaRCore/Models/NanobotBuildAndRepairSystem/SELtdLargeNanobotBuildAndRepairSystem.mwm similarity index 100% rename from Utility Mods/Stable/BaRCore/Models/NanobotBuildAndRepairSystem/SELtdLargeNanobotBuildAndRepairSystem.mwm rename to Utility Mods/BaRCore/Models/NanobotBuildAndRepairSystem/SELtdLargeNanobotBuildAndRepairSystem.mwm diff --git a/Utility Mods/Stable/BaRCore/Models/NanobotBuildAndRepairSystem/SELtdLargeNanobotBuildAndRepairSystem_Constr1.mwm b/Utility Mods/BaRCore/Models/NanobotBuildAndRepairSystem/SELtdLargeNanobotBuildAndRepairSystem_Constr1.mwm similarity index 100% rename from Utility Mods/Stable/BaRCore/Models/NanobotBuildAndRepairSystem/SELtdLargeNanobotBuildAndRepairSystem_Constr1.mwm rename to Utility Mods/BaRCore/Models/NanobotBuildAndRepairSystem/SELtdLargeNanobotBuildAndRepairSystem_Constr1.mwm diff --git a/Utility Mods/Stable/BaRCore/Models/NanobotBuildAndRepairSystem/SELtdLargeNanobotBuildAndRepairSystem_Constr2.mwm b/Utility Mods/BaRCore/Models/NanobotBuildAndRepairSystem/SELtdLargeNanobotBuildAndRepairSystem_Constr2.mwm similarity index 100% rename from Utility Mods/Stable/BaRCore/Models/NanobotBuildAndRepairSystem/SELtdLargeNanobotBuildAndRepairSystem_Constr2.mwm rename to Utility Mods/BaRCore/Models/NanobotBuildAndRepairSystem/SELtdLargeNanobotBuildAndRepairSystem_Constr2.mwm diff --git a/Utility Mods/Stable/BaRCore/Models/NanobotBuildAndRepairSystem/SELtdLargeNanobotBuildAndRepairSystem_Constr3.mwm b/Utility Mods/BaRCore/Models/NanobotBuildAndRepairSystem/SELtdLargeNanobotBuildAndRepairSystem_Constr3.mwm similarity index 100% rename from Utility Mods/Stable/BaRCore/Models/NanobotBuildAndRepairSystem/SELtdLargeNanobotBuildAndRepairSystem_Constr3.mwm rename to Utility Mods/BaRCore/Models/NanobotBuildAndRepairSystem/SELtdLargeNanobotBuildAndRepairSystem_Constr3.mwm diff --git a/Utility Mods/Stable/BaRCore/Models/NanobotBuildAndRepairSystem/SELtdLargeNanobotBuildAndRepairSystem_LOD1.mwm b/Utility Mods/BaRCore/Models/NanobotBuildAndRepairSystem/SELtdLargeNanobotBuildAndRepairSystem_LOD1.mwm similarity index 100% rename from Utility Mods/Stable/BaRCore/Models/NanobotBuildAndRepairSystem/SELtdLargeNanobotBuildAndRepairSystem_LOD1.mwm rename to Utility Mods/BaRCore/Models/NanobotBuildAndRepairSystem/SELtdLargeNanobotBuildAndRepairSystem_LOD1.mwm diff --git a/Utility Mods/Stable/BaRCore/Models/NanobotBuildAndRepairSystem/SELtdLargeNanobotBuildAndRepairSystem_LOD2.mwm b/Utility Mods/BaRCore/Models/NanobotBuildAndRepairSystem/SELtdLargeNanobotBuildAndRepairSystem_LOD2.mwm similarity index 100% rename from Utility Mods/Stable/BaRCore/Models/NanobotBuildAndRepairSystem/SELtdLargeNanobotBuildAndRepairSystem_LOD2.mwm rename to Utility Mods/BaRCore/Models/NanobotBuildAndRepairSystem/SELtdLargeNanobotBuildAndRepairSystem_LOD2.mwm diff --git a/Utility Mods/Stable/BaRCore/Models/NanobotBuildAndRepairSystem/SELtdLargeNanobotBuildAndRepairSystem_LOD3.mwm b/Utility Mods/BaRCore/Models/NanobotBuildAndRepairSystem/SELtdLargeNanobotBuildAndRepairSystem_LOD3.mwm similarity index 100% rename from Utility Mods/Stable/BaRCore/Models/NanobotBuildAndRepairSystem/SELtdLargeNanobotBuildAndRepairSystem_LOD3.mwm rename to Utility Mods/BaRCore/Models/NanobotBuildAndRepairSystem/SELtdLargeNanobotBuildAndRepairSystem_LOD3.mwm diff --git a/Utility Mods/Stable/BaRCore/Sounds/ArcBaRUnable2d.xwm b/Utility Mods/BaRCore/Sounds/ArcBaRUnable2d.xwm similarity index 100% rename from Utility Mods/Stable/BaRCore/Sounds/ArcBaRUnable2d.xwm rename to Utility Mods/BaRCore/Sounds/ArcBaRUnable2d.xwm diff --git a/Utility Mods/Stable/BaRCore/Sounds/ArcBaRUnable3d.xwm b/Utility Mods/BaRCore/Sounds/ArcBaRUnable3d.xwm similarity index 100% rename from Utility Mods/Stable/BaRCore/Sounds/ArcBaRUnable3d.xwm rename to Utility Mods/BaRCore/Sounds/ArcBaRUnable3d.xwm diff --git a/Utility Mods/Stable/BaRCore/Sounds/RealBaRUnable2d.wav b/Utility Mods/BaRCore/Sounds/RealBaRUnable2d.wav similarity index 100% rename from Utility Mods/Stable/BaRCore/Sounds/RealBaRUnable2d.wav rename to Utility Mods/BaRCore/Sounds/RealBaRUnable2d.wav diff --git a/Utility Mods/Stable/BaRCore/Sounds/RealBaRUnable3d.wav b/Utility Mods/BaRCore/Sounds/RealBaRUnable3d.wav similarity index 100% rename from Utility Mods/Stable/BaRCore/Sounds/RealBaRUnable3d.wav rename to Utility Mods/BaRCore/Sounds/RealBaRUnable3d.wav diff --git a/Utility Mods/Stable/BaRCore/Textures/Icons/SELtdNanobotBuildAndRepairSystem.dds b/Utility Mods/BaRCore/Textures/Icons/SELtdNanobotBuildAndRepairSystem.dds similarity index 100% rename from Utility Mods/Stable/BaRCore/Textures/Icons/SELtdNanobotBuildAndRepairSystem.dds rename to Utility Mods/BaRCore/Textures/Icons/SELtdNanobotBuildAndRepairSystem.dds diff --git a/Utility Mods/Stable/BaRCore/Textures/Models/DirectionArrows_add.dds b/Utility Mods/BaRCore/Textures/Models/DirectionArrows_add.dds similarity index 100% rename from Utility Mods/Stable/BaRCore/Textures/Models/DirectionArrows_add.dds rename to Utility Mods/BaRCore/Textures/Models/DirectionArrows_add.dds diff --git a/Utility Mods/Stable/BaRCore/Textures/Models/DirectionArrows_alpha.dds b/Utility Mods/BaRCore/Textures/Models/DirectionArrows_alpha.dds similarity index 100% rename from Utility Mods/Stable/BaRCore/Textures/Models/DirectionArrows_alpha.dds rename to Utility Mods/BaRCore/Textures/Models/DirectionArrows_alpha.dds diff --git a/Utility Mods/Stable/BaRCore/Textures/Models/DirectionArrows_cm.dds b/Utility Mods/BaRCore/Textures/Models/DirectionArrows_cm.dds similarity index 100% rename from Utility Mods/Stable/BaRCore/Textures/Models/DirectionArrows_cm.dds rename to Utility Mods/BaRCore/Textures/Models/DirectionArrows_cm.dds diff --git a/Utility Mods/Stable/BaRCore/Textures/Models/DirectionArrows_ng.dds b/Utility Mods/BaRCore/Textures/Models/DirectionArrows_ng.dds similarity index 100% rename from Utility Mods/Stable/BaRCore/Textures/Models/DirectionArrows_ng.dds rename to Utility Mods/BaRCore/Textures/Models/DirectionArrows_ng.dds diff --git a/Utility Mods/Stable/BaRCore/Textures/Models/WarningWelding_add.dds b/Utility Mods/BaRCore/Textures/Models/WarningWelding_add.dds similarity index 100% rename from Utility Mods/Stable/BaRCore/Textures/Models/WarningWelding_add.dds rename to Utility Mods/BaRCore/Textures/Models/WarningWelding_add.dds diff --git a/Utility Mods/Stable/BaRCore/Textures/Models/WarningWelding_cm.dds b/Utility Mods/BaRCore/Textures/Models/WarningWelding_cm.dds similarity index 100% rename from Utility Mods/Stable/BaRCore/Textures/Models/WarningWelding_cm.dds rename to Utility Mods/BaRCore/Textures/Models/WarningWelding_cm.dds diff --git a/Utility Mods/Stable/BaRCore/Textures/Models/WarningWelding_ng.dds b/Utility Mods/BaRCore/Textures/Models/WarningWelding_ng.dds similarity index 100% rename from Utility Mods/Stable/BaRCore/Textures/Models/WarningWelding_ng.dds rename to Utility Mods/BaRCore/Textures/Models/WarningWelding_ng.dds diff --git a/Utility Mods/Stable/BaRCore/helo.txt b/Utility Mods/BaRCore/helo.txt similarity index 100% rename from Utility Mods/Stable/BaRCore/helo.txt rename to Utility Mods/BaRCore/helo.txt diff --git a/Gamemode Mods/Stable/SCKoth/metadata.mod b/Utility Mods/BaRCore/metadata.mod similarity index 100% rename from Gamemode Mods/Stable/SCKoth/metadata.mod rename to Utility Mods/BaRCore/metadata.mod diff --git a/Utility Mods/Stable/BaRCore/modinfo_main.sbmi b/Utility Mods/BaRCore/modinfo_main.sbmi similarity index 100% rename from Utility Mods/Stable/BaRCore/modinfo_main.sbmi rename to Utility Mods/BaRCore/modinfo_main.sbmi diff --git a/Utility Mods/Stable/BaRCore/modinfo_stable.sbmi b/Utility Mods/BaRCore/modinfo_stable.sbmi similarity index 100% rename from Utility Mods/Stable/BaRCore/modinfo_stable.sbmi rename to Utility Mods/BaRCore/modinfo_stable.sbmi diff --git a/Utility Mods/Stable/BaRCore/thumb.jpg b/Utility Mods/BaRCore/thumb.jpg similarity index 100% rename from Utility Mods/Stable/BaRCore/thumb.jpg rename to Utility Mods/BaRCore/thumb.jpg diff --git a/Utility Mods/Stable/Cast Spectator - StarCore/Data/Scripts/CastSpectator/CastSpectator.cs b/Utility Mods/Cast Spectator - StarCore/Data/Scripts/CastSpectator/CastSpectator.cs similarity index 100% rename from Utility Mods/Stable/Cast Spectator - StarCore/Data/Scripts/CastSpectator/CastSpectator.cs rename to Utility Mods/Cast Spectator - StarCore/Data/Scripts/CastSpectator/CastSpectator.cs diff --git a/Utility Mods/Stable/Cast Spectator - StarCore/Data/Scripts/CastSpectator/HudAPIv2.cs b/Utility Mods/Cast Spectator - StarCore/Data/Scripts/CastSpectator/HudAPIv2.cs similarity index 100% rename from Utility Mods/Stable/Cast Spectator - StarCore/Data/Scripts/CastSpectator/HudAPIv2.cs rename to Utility Mods/Cast Spectator - StarCore/Data/Scripts/CastSpectator/HudAPIv2.cs diff --git a/Utility Mods/Stable/Cast Spectator - StarCore/Data/Scripts/CastSpectator/Keybind.cs b/Utility Mods/Cast Spectator - StarCore/Data/Scripts/CastSpectator/Keybind.cs similarity index 100% rename from Utility Mods/Stable/Cast Spectator - StarCore/Data/Scripts/CastSpectator/Keybind.cs rename to Utility Mods/Cast Spectator - StarCore/Data/Scripts/CastSpectator/Keybind.cs diff --git a/Utility Mods/Stable/Cast Spectator - StarCore/Data/Scripts/CastSpectator/SpecCamAPI.cs b/Utility Mods/Cast Spectator - StarCore/Data/Scripts/CastSpectator/SpecCamAPI.cs similarity index 100% rename from Utility Mods/Stable/Cast Spectator - StarCore/Data/Scripts/CastSpectator/SpecCamAPI.cs rename to Utility Mods/Cast Spectator - StarCore/Data/Scripts/CastSpectator/SpecCamAPI.cs diff --git a/Utility Mods/Stable/Cast Spectator - StarCore/Data/Scripts/CastSpectator/SpecCamPreferences.cs b/Utility Mods/Cast Spectator - StarCore/Data/Scripts/CastSpectator/SpecCamPreferences.cs similarity index 100% rename from Utility Mods/Stable/Cast Spectator - StarCore/Data/Scripts/CastSpectator/SpecCamPreferences.cs rename to Utility Mods/Cast Spectator - StarCore/Data/Scripts/CastSpectator/SpecCamPreferences.cs diff --git a/Utility Mods/Stable/Cast Spectator - StarCore/Data/Scripts/CastSpectator/SpecCamTarget.cs b/Utility Mods/Cast Spectator - StarCore/Data/Scripts/CastSpectator/SpecCamTarget.cs similarity index 100% rename from Utility Mods/Stable/Cast Spectator - StarCore/Data/Scripts/CastSpectator/SpecCamTarget.cs rename to Utility Mods/Cast Spectator - StarCore/Data/Scripts/CastSpectator/SpecCamTarget.cs diff --git a/Utility Mods/Stable/Cast Spectator - StarCore/Data/Scripts/concatrecursivelyandminify.bat b/Utility Mods/Cast Spectator - StarCore/Data/Scripts/concatrecursivelyandminify.bat similarity index 100% rename from Utility Mods/Stable/Cast Spectator - StarCore/Data/Scripts/concatrecursivelyandminify.bat rename to Utility Mods/Cast Spectator - StarCore/Data/Scripts/concatrecursivelyandminify.bat diff --git a/Utility Mods/Stable/Cast Spectator - StarCore/metadata.mod b/Utility Mods/Cast Spectator - StarCore/metadata.mod similarity index 100% rename from Utility Mods/Stable/Cast Spectator - StarCore/metadata.mod rename to Utility Mods/Cast Spectator - StarCore/metadata.mod diff --git a/Utility Mods/Stable/Cast Spectator - StarCore/modinfo_main.sbmi b/Utility Mods/Cast Spectator - StarCore/modinfo_main.sbmi similarity index 100% rename from Utility Mods/Stable/Cast Spectator - StarCore/modinfo_main.sbmi rename to Utility Mods/Cast Spectator - StarCore/modinfo_main.sbmi diff --git a/Utility Mods/Stable/Cast Spectator - StarCore/modinfo_stable.sbmi b/Utility Mods/Cast Spectator - StarCore/modinfo_stable.sbmi similarity index 100% rename from Utility Mods/Stable/Cast Spectator - StarCore/modinfo_stable.sbmi rename to Utility Mods/Cast Spectator - StarCore/modinfo_stable.sbmi diff --git a/Utility Mods/Stable/Cast Spectator - StarCore/thumb.jpg b/Utility Mods/Cast Spectator - StarCore/thumb.jpg similarity index 100% rename from Utility Mods/Stable/Cast Spectator - StarCore/thumb.jpg rename to Utility Mods/Cast Spectator - StarCore/thumb.jpg diff --git a/Utility Mods/Development/SC_RelativeTopSpeed_Logarithmic_Angular-Dev/moved to dev repo.txt b/Utility Mods/Development/SC_RelativeTopSpeed_Logarithmic_Angular-Dev/moved to dev repo.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/Utility Mods/GyroscopicGunsight/Data/Scripts/GyroscopicGunsight/API/CoreSystems/CoreSystemsApiBase.cs b/Utility Mods/GyroscopicGunsight/Data/Scripts/GyroscopicGunsight/API/CoreSystems/CoreSystemsApiBase.cs new file mode 100644 index 000000000..4606320c2 --- /dev/null +++ b/Utility Mods/GyroscopicGunsight/Data/Scripts/GyroscopicGunsight/API/CoreSystems/CoreSystemsApiBase.cs @@ -0,0 +1,864 @@ +using System; +using System.Collections.Generic; +using Sandbox.ModAPI; +using VRage; +using VRage.Collections; +using VRage.Game; +using VRage.Game.Entity; +using VRage.Game.ModAPI; +using VRageMath; + +namespace SC.GyroscopicGunsight.API.CoreSystems +{ + /// + /// https://github.com/sstixrud/CoreSystems/blob/master/BaseData/Scripts/CoreSystems/Api/CoreSystemsApiBase.cs + /// + public partial class WcApi + { + private bool _apiInit; + + private Action> _getAllWeaponDefinitions; + private Action> _getCoreWeapons; + private Action> _getNpcSafeWeapons; + private Action>>>> _getAllWeaponMagazines; + private Action>>>> _getAllNpcSafeWeaponMagazines; + + private Action> _getCoreStaticLaunchers; + private Action> _getCoreTurrets; + private Action> _getCorePhantoms; + private Action> _getCoreRifles; + private Action> _getCoreArmors; + + private Action>>>>> _registerDamageEvent; + private Func, bool> _targetFocusHandler; + private Func, bool> _hudHandler; + private Func, bool> _shootHandler; + private Action> _monitorEvents; + private Action> _unmonitorEvents; + private Action> _addProjectileMonitor; + private Action> _removeProjectileMonitor; + + private Func _shootRequest; + + private Func> _getProjectileState; + private Action> _setProjectileState; + + private Action>> _getSortedThreats; + private Action> _getObstructions; + private Func _getAiFocus; + private Func _setAiFocus; + private Func _releaseAiFocus; + private Func _hasAi; + private Func _hasCoreWeapon; + + private Func _toggoleInfiniteResources; + private Action _disableRequiredPower; + + private Func _getPlayerController; + private Func> _getProjectilesLockedOn; + private Action> _getProjectilesLockedOnPos; + private Func _getMaxPower; + + private Func _getOptimalDps; + private Func _getConstructEffectiveDps; + private Func> _isInRange; + + private Func> _getWeaponTarget; + private Action _setWeaponTarget; + private Action _fireWeaponOnce; + private Action _toggleWeaponFire; + private Func _isWeaponReadyToFire; + private Func _getMaxWeaponRange; + private Func, int, bool> _getTurretTargetTypes; + private Action, int> _setTurretTargetTypes; + private Action _setBlockTrackingRange; + private Func _isTargetAligned; + private Func> _isTargetAlignedExtended; + private Func _canShootTarget; + private Func _getPredictedTargetPos; + private Func _getHeatLevel; + private Func _currentPowerConsumption; + private Func _getActiveAmmo; + private Action _setActiveAmmo; + + private Func _getWeaponAzimuthMatrix; + private Func _getWeaponElevationMatrix; + private Func _isTargetValid; + private Func _isWeaponShooting; + private Func _getShotsFired; + private Action>> _getMuzzleInfo; + private Func> _getWeaponScope; + private Func> _getMagazineMap; + private Func _setMagazine; + private Func _forceReload; + + private Action _setRofMultiplier; + private Action _setBaseDmgMultiplier; + private Action _setAreaDmgMultiplier; + private Action _setAreaRadiusMultiplier; + private Action _setVelocityMultiplier; + private Action _setFiringAllowed; + private Action _registerTerminalControl; + + private Func _getRofMultiplier; + private Func _getBaseDmgMultiplier; + private Func _getAreaDmgMultiplier; + private Func _getAreaRadiusMultiplier; + private Func _getVelocityMultiplier; + private Func _getFiringAllowed; + + + /// + /// Multiplier for 's base Rate of Fire. + /// + /// + /// + public void SetRofMultiplier(MyEntity block, float rof) => + _setRofMultiplier?.Invoke(block, rof); + + /// + /// BaseDamage multiplier for all projectiles from . + /// + /// + /// + public void SetBaseDmgMultiplier(MyEntity block, float multiplier) => _setBaseDmgMultiplier?.Invoke(block, multiplier); + + /// + /// AreaDamage multiplier for all projectiles from . + /// + /// + /// + public void SetAreaDmgMultiplier(MyEntity block, float multiplier) => _setAreaDmgMultiplier?.Invoke(block, multiplier); + + /// + /// AreaRadius multiplier for all projectiles from . + /// + /// + /// + public void SetAreaRadiusMultiplier(MyEntity block, float multiplier) => _setAreaRadiusMultiplier?.Invoke(block, multiplier); + + /// + /// Velocity multiplier for all projectiles from . Avoid setting this to zero. + /// + /// + /// + public void SetVelocityMultiplier(MyEntity block, float multiplier) => _setVelocityMultiplier?.Invoke(block, multiplier); + + /// + /// Toggles whether is allowed to shoot. + /// + /// + /// + public void SetFiringAllowed(MyEntity block, bool isAllowed) => _setFiringAllowed?.Invoke(block, isAllowed); + + /// + /// Registers a terminal control to not be hidden by WeaponCore. + /// + /// + /// + public void RegisterTerminalControl(string controlId) => _registerTerminalControl?.Invoke(controlId); + + public void SetWeaponTarget(MyEntity weapon, MyEntity target, int weaponId = 0) => + _setWeaponTarget?.Invoke(weapon, target, weaponId); + + /// + /// Multiplier for 's base Rate of Fire. + /// + /// + public float GetRofMultiplier(MyEntity block) => _getRofMultiplier?.Invoke(block) ?? -2; + + /// + /// BaseDamage multiplier for all projectiles from . + /// + /// + /// + public float GetBaseDmgMultiplier(MyEntity block) => _getBaseDmgMultiplier?.Invoke(block) ?? -2; + + /// + /// AreaDamage multiplier for all projectiles from . + /// + /// + /// + public float GetAreaDmgMultiplier(MyEntity block) => _getAreaDmgMultiplier?.Invoke(block) ?? -2; + + /// + /// AreaDamage multiplier for all projectiles from . + /// + /// + /// + public float GetAreaRadiusMultiplier(MyEntity block) => _getAreaRadiusMultiplier?.Invoke(block) ?? -2; + + /// + /// Velocity multiplier for all projectiles from . Avoid setting this to zero. + /// + /// + /// + public float GetVelocityMultiplier(MyEntity block) => _getVelocityMultiplier?.Invoke(block) ?? -2; + + /// + /// Toggles whether is allowed to shoot. + /// + /// + /// + public bool GetFiringAllowed(MyEntity block) => _getFiringAllowed?.Invoke(block) ?? false; + + public void FireWeaponOnce(MyEntity weapon, bool allWeapons = true, int weaponId = 0) => + _fireWeaponOnce?.Invoke(weapon, allWeapons, weaponId); + + public void ToggleWeaponFire(MyEntity weapon, bool on, bool allWeapons, int weaponId = 0) => + _toggleWeaponFire?.Invoke(weapon, on, allWeapons, weaponId); + + public bool IsWeaponReadyToFire(MyEntity weapon, int weaponId = 0, bool anyWeaponReady = true, + bool shootReady = false) => + _isWeaponReadyToFire?.Invoke(weapon, weaponId, anyWeaponReady, shootReady) ?? false; + + public float GetMaxWeaponRange(MyEntity weapon, int weaponId) => + _getMaxWeaponRange?.Invoke(weapon, weaponId) ?? 0f; + + public bool GetTurretTargetTypes(MyEntity weapon, IList collection, int weaponId = 0) => + _getTurretTargetTypes?.Invoke(weapon, collection, weaponId) ?? false; + + public void SetTurretTargetTypes(MyEntity weapon, IList collection, int weaponId = 0) => + _setTurretTargetTypes?.Invoke(weapon, collection, weaponId); + + public void SetBlockTrackingRange(MyEntity weapon, float range) => + _setBlockTrackingRange?.Invoke(weapon, range); + + public bool IsTargetAligned(MyEntity weapon, MyEntity targetEnt, int weaponId) => + _isTargetAligned?.Invoke(weapon, targetEnt, weaponId) ?? false; + + public MyTuple IsTargetAlignedExtended(MyEntity weapon, MyEntity targetEnt, int weaponId) => + _isTargetAlignedExtended?.Invoke(weapon, targetEnt, weaponId) ?? new MyTuple(); + + public bool CanShootTarget(MyEntity weapon, MyEntity targetEnt, int weaponId) => + _canShootTarget?.Invoke(weapon, targetEnt, weaponId) ?? false; + + public Vector3D? GetPredictedTargetPosition(MyEntity weapon, MyEntity targetEnt, int weaponId) => + _getPredictedTargetPos?.Invoke(weapon, targetEnt, weaponId) ?? null; + + public float GetHeatLevel(MyEntity weapon) => _getHeatLevel?.Invoke(weapon) ?? 0f; + public float GetCurrentPower(MyEntity weapon) => _currentPowerConsumption?.Invoke(weapon) ?? 0f; + public void DisableRequiredPower(MyEntity weapon) => _disableRequiredPower?.Invoke(weapon); + public bool HasCoreWeapon(MyEntity weapon) => _hasCoreWeapon?.Invoke(weapon) ?? false; + + public string GetActiveAmmo(MyEntity weapon, int weaponId) => + _getActiveAmmo?.Invoke(weapon, weaponId) ?? null; + + public void SetActiveAmmo(MyEntity weapon, int weaponId, string ammoType) => + _setActiveAmmo?.Invoke(weapon, weaponId, ammoType); + + public long GetPlayerController(MyEntity weapon) => _getPlayerController?.Invoke(weapon) ?? -1; + + public Matrix GetWeaponAzimuthMatrix(MyEntity weapon, int weaponId) => + _getWeaponAzimuthMatrix?.Invoke(weapon, weaponId) ?? Matrix.Zero; + + public Matrix GetWeaponElevationMatrix(MyEntity weapon, int weaponId) => + _getWeaponElevationMatrix?.Invoke(weapon, weaponId) ?? Matrix.Zero; + + public bool IsTargetValid(MyEntity weapon, MyEntity target, bool onlyThreats, bool checkRelations) => + _isTargetValid?.Invoke(weapon, target, onlyThreats, checkRelations) ?? false; + + public void GetAllWeaponDefinitions(IList collection) => _getAllWeaponDefinitions?.Invoke(collection); + public void GetAllCoreWeapons(ICollection collection) => _getCoreWeapons?.Invoke(collection); + public void GetNpcSafeWeapons(ICollection collection) => _getNpcSafeWeapons?.Invoke(collection); + + public void GetAllCoreStaticLaunchers(ICollection collection) => _getCoreStaticLaunchers?.Invoke(collection); + public void GetAllWeaponMagazines(IDictionary>>> collection) => _getAllWeaponMagazines?.Invoke(collection); + public void GetAllNpcSafeWeaponMagazines(IDictionary>>> collection) => _getAllNpcSafeWeaponMagazines?.Invoke(collection); + + public void GetAllCoreTurrets(ICollection collection) => _getCoreTurrets?.Invoke(collection); + public void GetAllCorePhantoms(ICollection collection) => _getCorePhantoms?.Invoke(collection); + public void GetAllCoreRifles(ICollection collection) => _getCoreRifles?.Invoke(collection); + public void GetAllCoreArmors(IList collection) => _getCoreArmors?.Invoke(collection); + + /// + /// Gets count of all projectiles that are targeting the MyEntity + /// + public MyTuple GetProjectilesLockedOn(MyEntity victim) => + _getProjectilesLockedOn?.Invoke(victim) ?? new MyTuple(); + /// + /// Gets positional information on projectiles that are actively locked on to the MyEntity + /// + public void GetProjectilesLockedOnPos(MyEntity victim, ICollection collection) => + _getProjectilesLockedOnPos?.Invoke(victim, collection); + public void GetSortedThreats(MyEntity shooter, ICollection> collection) => + _getSortedThreats?.Invoke(shooter, collection); + public void GetObstructions(MyEntity shooter, ICollection collection) => + _getObstructions?.Invoke(shooter, collection); + public MyEntity GetAiFocus(MyEntity shooter, int priority = 0) => _getAiFocus?.Invoke(shooter, priority); + public bool SetAiFocus(MyEntity shooter, MyEntity target, int priority = 0) => + _setAiFocus?.Invoke(shooter, target, priority) ?? false; + public bool ReleaseAiFocus(MyEntity shooter, long playerId) => + _releaseAiFocus?.Invoke(shooter, playerId) ?? false; + public MyTuple GetWeaponTarget(MyEntity weapon, int weaponId = 0) => + _getWeaponTarget?.Invoke(weapon, weaponId) ?? new MyTuple(); + public float GetMaxPower(MyDefinitionId weaponDef) => _getMaxPower?.Invoke(weaponDef) ?? 0f; + public bool HasAi(MyEntity entity) => _hasAi?.Invoke(entity) ?? false; + public float GetOptimalDps(MyEntity entity) => _getOptimalDps?.Invoke(entity) ?? 0f; + public MyTuple GetProjectileState(ulong projectileId) => + _getProjectileState?.Invoke(projectileId) ?? new MyTuple(); + + public float GetConstructEffectiveDps(MyEntity entity) => _getConstructEffectiveDps?.Invoke(entity) ?? 0f; + public MyTuple GetWeaponScope(MyEntity weapon, int weaponId) => + _getWeaponScope?.Invoke(weapon, weaponId) ?? new MyTuple(); + + public void AddProjectileCallback(MyEntity entity, int weaponId, Action action) => + _addProjectileMonitor?.Invoke(entity, weaponId, action); + + public void RemoveProjectileCallback(MyEntity entity, int weaponId, Action action) => + _removeProjectileMonitor?.Invoke(entity, weaponId, action); + + + // block/grid/player, Threat, Other + public MyTuple IsInRange(MyEntity entity) => + _isInRange?.Invoke(entity) ?? new MyTuple(); + + /// + /// Set projectile values *Warning* be sure to pass in Vector3D.MinValue or float.MinValue to NOT set that value. + /// bool = EndNow + /// Vector3D Position + /// Vector3D Additive velocity + /// float BaseDamagePool + /// + /// + /// + public void SetProjectileState(ulong projectileId, MyTuple values) => + _setProjectileState?.Invoke(projectileId, values); + + /// + /// Gets whether the weapon is shooting, used by Hakerman's Beam Logic + /// Unexpected behavior may occur when using this method + /// + /// + /// + /// + internal bool IsWeaponShooting(MyEntity weaponBlock, int weaponId) => _isWeaponShooting?.Invoke(weaponBlock, weaponId) ?? false; + + /// + /// Gets how many shots the weapon fired, used by Hakerman's Beam Logic + /// Unexpected behavior may occur when using this method + /// + /// + /// + /// + internal int GetShotsFired(MyEntity weaponBlock, int weaponId) => _getShotsFired?.Invoke(weaponBlock, weaponId) ?? -1; + + /// + /// Gets the info of the weapon's all muzzles, used by Hakerman's Beam Logic + /// returns: A list that contains every muzzle's Position, LocalPosition, Direction, UpDirection, ParentMatrix, DummyMatrix + /// Unexpected behavior may occur when using this method + /// + /// + /// + /// + internal void GetMuzzleInfo(MyEntity weaponBlock, int weaponId, List> output) => + _getMuzzleInfo?.Invoke(weaponBlock, weaponId, output); + + /// + /// Entity can be a weapon or a grid/player (enables on all subgrids as well) + /// + /// + /// + public bool ToggleInfiniteResources(MyEntity entity) => + _toggoleInfiniteResources?.Invoke(entity) ?? false; + + /// + /// Monitor various kind of events, see WcApiDef.WeaponDefinition.AnimationDef.PartAnimationSetDef.EventTriggers for int mapping, bool is for active/inactive + /// + /// + /// + /// + /// + public void MonitorEvents(MyEntity entity, int partId, Action action) => + _monitorEvents?.Invoke(entity, partId, action); + + /// + /// Monitor various kind of events, see WcApiDef.WeaponDefinition.AnimationDef.PartAnimationSetDef.EventTriggers for int mapping, bool is for active/inactive + /// + /// + /// + /// + /// + public void UnMonitorEvents(MyEntity entity, int partId, Action action) => + _unmonitorEvents?.Invoke(entity, partId, action); + + /// + /// Monitor all weaponcore damage + /// + /// + /// 0 unregister, 1 register + /// object casts (ulong = projectileId, IMySlimBlock, MyFloatingObject, IMyCharacter, MyVoxelBase, MyPlanet, MyEntity Shield see next line) + /// You can detect the shield entity in a performant way by creating a hash check ShieldHash = MyStringHash.GetOrCompute("DefenseShield"); + /// then use it by Session.ShieldApiLoaded && Session.ShieldHash == ent.DefinitionId?.SubtypeId && ent.Render.Visible; Visible means shield online + public void RegisterDamageEvent(long modId, int type, Action>>>> callback) + { + _registerDamageEvent?.Invoke(modId, type, callback); + } + + /// + /// This allows you to determine when and if a player can modify the current target focus on a player/grid/phantonm. Use only on server + /// + /// is the player/grid/phantom you want to control the target focus for, applies to subgrids as well + /// be sure to unregister when you no longer want to receive callbacks + public void TargetFocushandler(long handledEntityId, bool unregister) + { + _targetFocusHandler(handledEntityId, unregister, TargetFocusCallback); + } + + /// + /// This callback fires whenever a player attempts to modify the target focus + /// + /// + /// + /// + /// + /// + private bool TargetFocusCallback(MyEntity target, IMyCharacter requestingCharacter, long handledEntityId, int modeCode) + { + var mode = (ChangeMode)modeCode; + + return true; + } + + public enum ChangeMode + { + Add, + Release, + Lock, + } + /// + /// Enables you to allow/deny hud draw requests. Do not use this on dedicated server. + /// + /// + /// + public void Hudhandler(long handledEntityId, bool unregister) + { + _hudHandler?.Invoke(handledEntityId, unregister, HudCallback); + } + + /// + /// This callback fires whenever the hud tries to update + /// + /// + /// + /// + /// + private bool HudCallback(IMyCharacter requestingCharacter, long handledEntityId, int modeCode) + { + var mode = (HudMode)modeCode; + + return true; + } + + internal enum HudMode + { + Selector, + Reload, + TargetInfo, + Lead, + Drone, + PainterMarks, + } + + /// + /// + /// + /// + /// MyEntity, ulong (projectile) or Vector3D + /// Most weapons have only id 0, but some are multi-weapon entities + /// + /// + public bool ShootRequest(MyEntity weaponEntity, object target, int weaponId = 0, double additionalDeviateShotAngle = 0) => _shootRequest?.Invoke(weaponEntity, target, weaponId, additionalDeviateShotAngle) ?? false; + + /// + /// Enables you to monitor and approve shoot requests for this weapon/construct/player/grid network + /// + /// + /// + /// + public void ShootRequestHandler(long handledEntityId, bool unregister, Func callback) + { + _shootHandler?.Invoke(handledEntityId, unregister, callback); // see example callback below + } + + /// + /// This callback fires whenever a shoot request is being evaluated for against a success criteria or is pending some action + /// + /// + /// + /// This is the state of your request, state 0 means proceeding as requested + /// This is false if wc thinks the target is occluded, you can choose to allow it to proceed anyway or not + /// valid objects to cast too are MyEntity, ulong (projectile ids) and target Vector3Ds + /// + /// + /// The number of times this callback will fire will depend on the relevant firing stages for this weapon/ammo and how far it gets + /// + private bool ShootCallBack(Vector3D scopePos, Vector3D scopeDirection, int requestState, bool hasLos, object target, int currentAmmo, int remainingMags, int requestStage) + { + var stage = (EventTriggers)requestStage; + var state = (ShootState)requestState; + var targetAsEntity = target as MyEntity; + var targetAsProjectileId = target as ulong? ?? 0; + var targetAsPosition = target as Vector3D? ?? Vector3D.Zero; + + return true; + } + + public enum ShootState + { + EventStart, + EventEnd, + Preceding, + Canceled, + } + + public enum EventTriggers + { + Reloading, + Firing, + Tracking, + Overheated, + TurnOn, + TurnOff, + BurstReload, + NoMagsToLoad, + PreFire, + EmptyOnGameLoad, + StopFiring, + StopTracking, + LockDelay, + Init, + Homing, + TargetAligned, + WhileOn, + TargetRanged100, + TargetRanged75, + TargetRanged50, + TargetRanged25, + } + + /// + /// Get active ammo Mag map from weapon + /// + /// + /// + /// Mag definitionId, mag name, ammoRound name, weapon must aim (not manual aim) true/false + public MyTuple GetMagazineMap(MyEntity weapon, int weaponId) + { + return _getMagazineMap?.Invoke(weapon, weaponId) ?? new MyTuple(); + } + + /// + /// Set the active ammo type via passing Mag DefinitionId + /// + /// + /// + /// + /// + /// + public bool SetMagazine(MyEntity weapon, int weaponId, MyDefinitionId id, bool forceReload) + { + return _setMagazine?.Invoke(weapon, weaponId, id, forceReload) ?? false; + + } + + /// + /// + /// + /// + /// + /// + public bool ForceReload(MyEntity weapon, int weaponId) + { + return _forceReload?.Invoke(weapon, weaponId) ?? false; + + } + + private const long Channel = 67549756549; + private bool _getWeaponDefinitions; + private bool _isRegistered; + private Action _readyCallback; + + /// + /// True if CoreSystems replied when got called. + /// + public bool IsReady { get; private set; } + + /// + /// Only filled if giving true to . + /// + public readonly List WeaponDefinitions = new List(); + + /// + /// Ask CoreSystems to send the API methods. + /// Throws an exception if it gets called more than once per session without . + /// + /// Method to be called when CoreSystems replies. + /// Set to true to fill . + public void Load(Action readyCallback = null, bool getWeaponDefinitions = false) + { + if (_isRegistered) + throw new Exception($"{GetType().Name}.Load() should not be called multiple times!"); + + _readyCallback = readyCallback; + _getWeaponDefinitions = getWeaponDefinitions; + _isRegistered = true; + MyAPIGateway.Utilities.RegisterMessageHandler(Channel, HandleMessage); + MyAPIGateway.Utilities.SendModMessage(Channel, "ApiEndpointRequest"); + } + + public void Unload() + { + MyAPIGateway.Utilities.UnregisterMessageHandler(Channel, HandleMessage); + + ApiAssign(null); + + _isRegistered = false; + _apiInit = false; + IsReady = false; + } + + private void HandleMessage(object obj) + { + if (_apiInit || obj is string + ) // the sent "ApiEndpointRequest" will also be received here, explicitly ignoring that + return; + + var dict = obj as IReadOnlyDictionary; + + if (dict == null) + return; + + ApiAssign(dict, _getWeaponDefinitions); + + IsReady = true; + _readyCallback?.Invoke(); + } + + public void ApiAssign(IReadOnlyDictionary delegates, bool getWeaponDefinitions = false) + { + _apiInit = (delegates != null); + /// base methods + + AssignMethod(delegates, "SetRofMultiplier", ref _setRofMultiplier); + AssignMethod(delegates, "SetBaseDmgMultiplier", ref _setBaseDmgMultiplier); + AssignMethod(delegates, "SetAreaDmgMultiplier", ref _setAreaDmgMultiplier); + AssignMethod(delegates, "SetAreaRadiusMultiplier", ref _setAreaRadiusMultiplier); + AssignMethod(delegates, "SetVelocityMultiplier", ref _setVelocityMultiplier); + AssignMethod(delegates, "SetFiringAllowed", ref _setFiringAllowed); + AssignMethod(delegates, "RegisterTerminalControl", ref _registerTerminalControl); + + AssignMethod(delegates, "GetRofMultiplier", ref _getRofMultiplier); + AssignMethod(delegates, "GetBaseDmgMultiplier", ref _getBaseDmgMultiplier); + AssignMethod(delegates, "GetAreaDmgMultiplier", ref _getAreaDmgMultiplier); + AssignMethod(delegates, "GetAreaRadiusMultiplier", ref _getAreaRadiusMultiplier); + AssignMethod(delegates, "GetVelocityMultiplier", ref _getVelocityMultiplier); + AssignMethod(delegates, "GetFiringAllowed", ref _getFiringAllowed); + + AssignMethod(delegates, "GetAllWeaponDefinitions", ref _getAllWeaponDefinitions); + AssignMethod(delegates, "GetCoreWeapons", ref _getCoreWeapons); + AssignMethod(delegates, "GetNpcSafeWeapons", ref _getNpcSafeWeapons); + + AssignMethod(delegates, "GetAllWeaponMagazines", ref _getAllWeaponMagazines); + AssignMethod(delegates, "GetAllNpcSafeWeaponMagazines", ref _getAllNpcSafeWeaponMagazines); + + AssignMethod(delegates, "GetCoreStaticLaunchers", ref _getCoreStaticLaunchers); + AssignMethod(delegates, "GetCoreTurrets", ref _getCoreTurrets); + AssignMethod(delegates, "GetCorePhantoms", ref _getCorePhantoms); + AssignMethod(delegates, "GetCoreRifles", ref _getCoreRifles); + AssignMethod(delegates, "GetCoreArmors", ref _getCoreArmors); + + AssignMethod(delegates, "GetBlockWeaponMap", ref _getBlockWeaponMap); + AssignMethod(delegates, "GetSortedThreatsBase", ref _getSortedThreats); + AssignMethod(delegates, "GetObstructionsBase", ref _getObstructions); + AssignMethod(delegates, "GetMaxPower", ref _getMaxPower); + AssignMethod(delegates, "GetProjectilesLockedOnBase", ref _getProjectilesLockedOn); + AssignMethod(delegates, "GetProjectilesLockedOnPos", ref _getProjectilesLockedOnPos); + AssignMethod(delegates, "GetAiFocusBase", ref _getAiFocus); + AssignMethod(delegates, "SetAiFocusBase", ref _setAiFocus); + AssignMethod(delegates, "ReleaseAiFocusBase", ref _releaseAiFocus); + AssignMethod(delegates, "HasGridAiBase", ref _hasAi); + AssignMethod(delegates, "GetOptimalDpsBase", ref _getOptimalDps); + AssignMethod(delegates, "GetConstructEffectiveDpsBase", ref _getConstructEffectiveDps); + AssignMethod(delegates, "IsInRangeBase", ref _isInRange); + AssignMethod(delegates, "GetProjectileState", ref _getProjectileState); + AssignMethod(delegates, "SetProjectileState", ref _setProjectileState); + + AssignMethod(delegates, "AddMonitorProjectile", ref _addProjectileMonitor); + AssignMethod(delegates, "RemoveMonitorProjectile", ref _removeProjectileMonitor); + + AssignMethod(delegates, "TargetFocusHandler", ref _targetFocusHandler); + AssignMethod(delegates, "HudHandler", ref _hudHandler); + AssignMethod(delegates, "ShootHandler", ref _shootHandler); + AssignMethod(delegates, "ShootRequest", ref _shootRequest); + + /// block methods + AssignMethod(delegates, "GetWeaponTargetBase", ref _getWeaponTarget); + AssignMethod(delegates, "SetWeaponTargetBase", ref _setWeaponTarget); + AssignMethod(delegates, "FireWeaponOnceBase", ref _fireWeaponOnce); + AssignMethod(delegates, "ToggleWeaponFireBase", ref _toggleWeaponFire); + AssignMethod(delegates, "IsWeaponReadyToFireBase", ref _isWeaponReadyToFire); + AssignMethod(delegates, "GetMaxWeaponRangeBase", ref _getMaxWeaponRange); + AssignMethod(delegates, "GetTurretTargetTypesBase", ref _getTurretTargetTypes); + AssignMethod(delegates, "SetTurretTargetTypesBase", ref _setTurretTargetTypes); + AssignMethod(delegates, "SetBlockTrackingRangeBase", ref _setBlockTrackingRange); + AssignMethod(delegates, "IsTargetAlignedBase", ref _isTargetAligned); + AssignMethod(delegates, "IsTargetAlignedExtendedBase", ref _isTargetAlignedExtended); + AssignMethod(delegates, "CanShootTargetBase", ref _canShootTarget); + AssignMethod(delegates, "GetPredictedTargetPositionBase", ref _getPredictedTargetPos); + AssignMethod(delegates, "GetHeatLevelBase", ref _getHeatLevel); + AssignMethod(delegates, "GetCurrentPowerBase", ref _currentPowerConsumption); + AssignMethod(delegates, "DisableRequiredPowerBase", ref _disableRequiredPower); + AssignMethod(delegates, "HasCoreWeaponBase", ref _hasCoreWeapon); + AssignMethod(delegates, "GetActiveAmmoBase", ref _getActiveAmmo); + AssignMethod(delegates, "SetActiveAmmoBase", ref _setActiveAmmo); + AssignMethod(delegates, "GetPlayerControllerBase", ref _getPlayerController); + AssignMethod(delegates, "GetWeaponAzimuthMatrixBase", ref _getWeaponAzimuthMatrix); + AssignMethod(delegates, "GetWeaponElevationMatrixBase", ref _getWeaponElevationMatrix); + AssignMethod(delegates, "IsTargetValidBase", ref _isTargetValid); + AssignMethod(delegates, "GetWeaponScopeBase", ref _getWeaponScope); + + //Phantom methods + AssignMethod(delegates, "GetTargetAssessment", ref _getTargetAssessment); + //AssignMethod(delegates, "GetPhantomInfo", ref _getPhantomInfo); + AssignMethod(delegates, "SetTriggerState", ref _setTriggerState); + AssignMethod(delegates, "AddMagazines", ref _addMagazines); + AssignMethod(delegates, "SetAmmo", ref _setAmmo); + AssignMethod(delegates, "ClosePhantom", ref _closePhantom); + AssignMethod(delegates, "SpawnPhantom", ref _spawnPhantom); + AssignMethod(delegates, "SetFocusTarget", ref _setPhantomFocusTarget); + + //Hakerman's Beam Logic + AssignMethod(delegates, "IsWeaponShootingBase", ref _isWeaponShooting); + AssignMethod(delegates, "GetShotsFiredBase", ref _getShotsFired); + AssignMethod(delegates, "GetMuzzleInfoBase", ref _getMuzzleInfo); + AssignMethod(delegates, "ToggleInfiniteAmmoBase", ref _toggoleInfiniteResources); + AssignMethod(delegates, "RegisterEventMonitor", ref _monitorEvents); + AssignMethod(delegates, "UnRegisterEventMonitor", ref _unmonitorEvents); + AssignMethod(delegates, "GetMagazineMap", ref _getMagazineMap); + + AssignMethod(delegates, "SetMagazine", ref _setMagazine); + AssignMethod(delegates, "ForceReload", ref _forceReload); + + // Damage handler + AssignMethod(delegates, "DamageHandler", ref _registerDamageEvent); + + if (getWeaponDefinitions) + { + var byteArrays = new List(); + GetAllWeaponDefinitions(byteArrays); + foreach (var byteArray in byteArrays) + WeaponDefinitions.Add(MyAPIGateway.Utilities.SerializeFromBinary(byteArray)); + } + } + + private void AssignMethod(IReadOnlyDictionary delegates, string name, ref T field) + where T : class + { + if (delegates == null) + { + field = null; + return; + } + + Delegate del; + if (!delegates.TryGetValue(name, out del)) + throw new Exception($"{GetType().Name} :: Couldn't find {name} delegate of type {typeof(T)}"); + + field = del as T; + + if (field == null) + throw new Exception( + $"{GetType().Name} :: Delegate {name} is not type {typeof(T)}, instead it's: {del.GetType()}"); + } + + public class DamageHandlerHelper + { + public void YourCallBackFunction(List list) + { + // Your code goes here + // + // Once this function completes the data in the list will be deleted... if you need to use the data in this list + // after this function completes make a copy of it. + // + // This is setup to be easy to use. If you need more performance modify the Default Callback for your purposes and avoid + // copying callbacks into new lists with ProjectileDamageEvent structs. Note that the ListReader will remain usable for only 1 tick, then it will be cleared by wc. + // + } + + + /// Don't touch anything below this line + public void RegisterForDamage(long modId, EventType type) + { + _wcApi.RegisterDamageEvent(modId, (int)type, DefaultCallBack); + } + + private void DefaultCallBack(ListReader>>> listReader) + { + YourCallBackFunction(ProcessEvents(listReader)); + CleanUpEvents(); + } + + private readonly List _convertedObjects = new List(); + private readonly Stack> _hitPool = new Stack>(256); + + private List ProcessEvents(ListReader>>> projectiles) + { + foreach (var p in projectiles) + { + var hits = _hitPool.Count > 0 ? _hitPool.Pop() : new List(); + + foreach (var hitObj in p.Item6) + { + hits.Add(new ProjectileDamageEvent.ProHit { HitPosition = hitObj.Item1, ObjectHit = hitObj.Item2, Damage = hitObj.Item3 }); + } + _convertedObjects.Add(new ProjectileDamageEvent { ProId = p.Item1, PlayerId = p.Item2, WeaponId = p.Item3, WeaponEntity = p.Item4, WeaponParent = p.Item5, ObjectsHit = hits }); + } + + return _convertedObjects; + } + + private void CleanUpEvents() + { + foreach (var p in _convertedObjects) + { + p.ObjectsHit.Clear(); + _hitPool.Push(p.ObjectsHit); + } + _convertedObjects.Clear(); + } + + public struct ProjectileDamageEvent + { + public ulong ProId; + public long PlayerId; + public int WeaponId; + public MyEntity WeaponEntity; + public MyEntity WeaponParent; + public List ObjectsHit; + + public struct ProHit + { + public Vector3D HitPosition; // To == first hit, From = projectile start position this frame + public object ObjectHit; // block, player, etc... + public float Damage; + } + } + + + private readonly WcApi _wcApi; + public DamageHandlerHelper(WcApi wcApi) + { + _wcApi = wcApi; + } + + public enum EventType + { + Unregister, + SystemWideDamageEvents, + } + } + + } + +} \ No newline at end of file diff --git a/Utility Mods/GyroscopicGunsight/Data/Scripts/GyroscopicGunsight/API/CoreSystems/CoreSystemsApiBlocks.cs b/Utility Mods/GyroscopicGunsight/Data/Scripts/GyroscopicGunsight/API/CoreSystems/CoreSystemsApiBlocks.cs new file mode 100644 index 000000000..5ddf1452a --- /dev/null +++ b/Utility Mods/GyroscopicGunsight/Data/Scripts/GyroscopicGunsight/API/CoreSystems/CoreSystemsApiBlocks.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using Sandbox.ModAPI; + +namespace SC.GyroscopicGunsight.API.CoreSystems +{ + /// + /// https://github.com/sstixrud/CoreSystems/blob/master/BaseData/Scripts/CoreSystems/Api/CoreSystemsApiBlocks.cs + /// + public partial class WcApi + { + private Func, bool> _getBlockWeaponMap; + + public bool GetBlockWeaponMap(IMyTerminalBlock weaponBlock, IDictionary collection) => + _getBlockWeaponMap?.Invoke(weaponBlock, collection) ?? false; + } +} diff --git a/Weapon Mods/Stable/Starcore-One-Shot/Data/Scripts/CoreParts/script/Structure.cs b/Utility Mods/GyroscopicGunsight/Data/Scripts/GyroscopicGunsight/API/CoreSystems/CoreSystemsApiDefs.cs similarity index 97% rename from Weapon Mods/Stable/Starcore-One-Shot/Data/Scripts/CoreParts/script/Structure.cs rename to Utility Mods/GyroscopicGunsight/Data/Scripts/GyroscopicGunsight/API/CoreSystems/CoreSystemsApiDefs.cs index 14c4d86cb..931c59e32 100644 --- a/Weapon Mods/Stable/Starcore-One-Shot/Data/Scripts/CoreParts/script/Structure.cs +++ b/Utility Mods/GyroscopicGunsight/Data/Scripts/GyroscopicGunsight/API/CoreSystems/CoreSystemsApiDefs.cs @@ -1,1551 +1,1538 @@ -using System.Collections.Generic; -using ProtoBuf; -using VRageMath; - -namespace Scripts -{ - public class Structure - { - [ProtoContract] - public class ContainerDefinition - { - [ProtoMember(1)] internal WeaponDefinition[] WeaponDefs; - [ProtoMember(2)] internal ArmorDefinition[] ArmorDefs; - [ProtoMember(3)] internal UpgradeDefinition[] UpgradeDefs; - [ProtoMember(4)] internal SupportDefinition[] SupportDefs; - } - - [ProtoContract] - public class ConsumeableDef - { - [ProtoMember(1)] internal string ItemName; - [ProtoMember(2)] internal string InventoryItem; - [ProtoMember(3)] internal int ItemsNeeded; - [ProtoMember(4)] internal bool Hybrid; - [ProtoMember(5)] internal float EnergyCost; - [ProtoMember(6)] internal float Strength; - } - - [ProtoContract] - public class UpgradeDefinition - { - [ProtoMember(1)] internal ModelAssignmentsDef Assignments; - [ProtoMember(2)] internal HardPointDef HardPoint; - [ProtoMember(3)] internal WeaponDefinition.AnimationDef Animations; - [ProtoMember(4)] internal string ModPath; - [ProtoMember(5)] internal ConsumeableDef[] Consumable; - - [ProtoContract] - public struct ModelAssignmentsDef - { - [ProtoMember(1)] internal MountPointDef[] MountPoints; - - [ProtoContract] - public struct MountPointDef - { - [ProtoMember(1)] internal string SubtypeId; - [ProtoMember(2)] internal float DurabilityMod; - [ProtoMember(3)] internal string IconName; - } - } - - [ProtoContract] - public struct HardPointDef - { - [ProtoMember(1)] internal string PartName; - [ProtoMember(2)] internal HardwareDef HardWare; - [ProtoMember(3)] internal UiDef Ui; - [ProtoMember(4)] internal OtherDef Other; - - - [ProtoContract] - public struct UiDef - { - [ProtoMember(1)] internal bool StrengthModifier; - } - - [ProtoContract] - public struct HardwareDef - { - public enum HardwareType - { - Default, - } - - [ProtoMember(1)] internal float InventorySize; - [ProtoMember(2)] internal HardwareType Type; - [ProtoMember(3)] internal int BlockDistance; - [ProtoMember(4)] internal float IdlePower; - } - - [ProtoContract] - public struct OtherDef - { - [ProtoMember(1)] internal int ConstructPartCap; - [ProtoMember(2)] internal int EnergyPriority; - [ProtoMember(3)] internal bool Debug; - [ProtoMember(4)] internal double RestrictionRadius; - [ProtoMember(5)] internal bool CheckInflatedBox; - [ProtoMember(6)] internal bool CheckForAnySupport; - [ProtoMember(7)] internal bool StayCharged; - } - } - - } - - [ProtoContract] - public class SupportDefinition - { - [ProtoMember(1)] internal ModelAssignmentsDef Assignments; - [ProtoMember(2)] internal HardPointDef HardPoint; - [ProtoMember(3)] internal WeaponDefinition.AnimationDef Animations; - [ProtoMember(4)] internal string ModPath; - [ProtoMember(5)] internal ConsumeableDef[] Consumable; - [ProtoMember(6)] internal SupportEffect Effect; - - [ProtoContract] - public struct ModelAssignmentsDef - { - [ProtoMember(1)] internal MountPointDef[] MountPoints; - - [ProtoContract] - public struct MountPointDef - { - [ProtoMember(1)] internal string SubtypeId; - [ProtoMember(2)] internal float DurabilityMod; - [ProtoMember(3)] internal string IconName; - } - } - [ProtoContract] - public struct HardPointDef - { - [ProtoMember(1)] internal string PartName; - [ProtoMember(2)] internal HardwareDef HardWare; - [ProtoMember(3)] internal UiDef Ui; - [ProtoMember(4)] internal OtherDef Other; - - [ProtoContract] - public struct UiDef - { - [ProtoMember(1)] internal bool ProtectionControl; - } - - [ProtoContract] - public struct HardwareDef - { - [ProtoMember(1)] internal float InventorySize; - [ProtoMember(2)] internal float IdlePower; - } - - [ProtoContract] - public struct OtherDef - { - [ProtoMember(1)] internal int ConstructPartCap; - [ProtoMember(2)] internal int EnergyPriority; - [ProtoMember(3)] internal bool Debug; - [ProtoMember(4)] internal double RestrictionRadius; - [ProtoMember(5)] internal bool CheckInflatedBox; - [ProtoMember(6)] internal bool CheckForAnySupport; - [ProtoMember(7)] internal bool StayCharged; - } - } - - [ProtoContract] - public struct SupportEffect - { - public enum AffectedBlocks - { - Armor, - ArmorPlus, - PlusFunctional, - All, - } - - public enum Protections - { - KineticProt, - EnergeticProt, - GenericProt, - Regenerate, - Structural, - } - - [ProtoMember(1)] internal Protections Protection; - [ProtoMember(2)] internal AffectedBlocks Affected; - [ProtoMember(3)] internal int BlockRange; - [ProtoMember(4)] internal int MaxPoints; - [ProtoMember(5)] internal int PointsPerCharge; - [ProtoMember(6)] internal int UsablePerSecond; - [ProtoMember(7)] internal int UsablePerMinute; - [ProtoMember(8)] internal float Overflow; - [ProtoMember(9)] internal float Effectiveness; - [ProtoMember(10)] internal float ProtectionMin; - [ProtoMember(11)] internal float ProtectionMax; - } - } - - [ProtoContract] - public class ArmorDefinition - { - internal enum ArmorType - { - Light, - Heavy, - NonArmor, - } - - [ProtoMember(1)] internal string[] SubtypeIds; - [ProtoMember(2)] internal ArmorType Kind; - [ProtoMember(3)] internal double KineticResistance; - [ProtoMember(4)] internal double EnergeticResistance; - } - - [ProtoContract] - public class WeaponDefinition - { - [ProtoMember(1)] internal ModelAssignmentsDef Assignments; - [ProtoMember(2)] internal TargetingDef Targeting; - [ProtoMember(3)] internal AnimationDef Animations; - [ProtoMember(4)] internal HardPointDef HardPoint; - [ProtoMember(5)] internal AmmoDef[] Ammos; - [ProtoMember(6)] internal string ModPath; - [ProtoMember(7)] internal Dictionary Upgrades; - - [ProtoContract] - public struct ModelAssignmentsDef - { - [ProtoMember(1)] internal MountPointDef[] MountPoints; - [ProtoMember(2)] internal string[] Muzzles; - [ProtoMember(3)] internal string Ejector; - [ProtoMember(4)] internal string Scope; - - [ProtoContract] - public struct MountPointDef - { - [ProtoMember(1)] internal string SubtypeId; - [ProtoMember(2)] internal string SpinPartId; - [ProtoMember(3)] internal string MuzzlePartId; - [ProtoMember(4)] internal string AzimuthPartId; - [ProtoMember(5)] internal string ElevationPartId; - [ProtoMember(6)] internal float DurabilityMod; - [ProtoMember(7)] internal string IconName; - [ProtoMember(8)] internal string PhantomModel; - } - } - - [ProtoContract] - public struct TargetingDef - { - public enum Threat - { - Projectiles, - Characters, - Grids, - Neutrals, - Meteors, - Other, - ScanNeutralGrid, - ScanFriendlyGrid, - ScanFriendlyCharacter, - ScanRoid, - ScanPlanet, - ScanEnemyCharacter, - ScanEnemyGrid, - ScanNeutralCharacter, - ScanUnOwnedGrid, - ScanOwnersGrid - } - - public enum BlockTypes - { - Any, - Offense, - Utility, - Power, - Production, - Thrust, - Jumping, - Steering - } - - [ProtoMember(1)] internal int TopTargets; - [ProtoMember(2)] internal int TopBlocks; - [ProtoMember(3)] internal double StopTrackingSpeed; - [ProtoMember(4)] internal float MinimumDiameter; - [ProtoMember(5)] internal float MaximumDiameter; - [ProtoMember(6)] internal bool ClosestFirst; - [ProtoMember(7)] internal BlockTypes[] SubSystems; - [ProtoMember(8)] internal Threat[] Threats; - [ProtoMember(9)] internal float MaxTargetDistance; - [ProtoMember(10)] internal float MinTargetDistance; - [ProtoMember(11)] internal bool IgnoreDumbProjectiles; - [ProtoMember(12)] internal bool LockedSmartOnly; - [ProtoMember(13)] internal bool UniqueTargetPerWeapon; - [ProtoMember(14)] internal int MaxTrackingTime; - [ProtoMember(15)] internal bool ShootBlanks; - [ProtoMember(19)] internal CommunicationDef Communications; - [ProtoMember(20)] internal bool FocusOnly; - [ProtoMember(21)] internal bool EvictUniqueTargets; - [ProtoMember(22)] internal int CycleTargets; - [ProtoMember(23)] internal int CycleBlocks; - - [ProtoContract] - public struct CommunicationDef - { - public enum Comms - { - NoComms, - LocalNetwork, - BroadCast, - Relay, - Repeat, - Jamming, - } - - public enum SecurityMode - { - Public, - Private, - Secure, - } - - [ProtoMember(1)] internal bool StoreTargets; - [ProtoMember(2)] internal int StorageLimit; - [ProtoMember(3)] internal string StorageLocation; - [ProtoMember(4)] internal Comms Mode; - [ProtoMember(5)] internal SecurityMode Security; - [ProtoMember(6)] internal string BroadCastChannel; - [ProtoMember(7)] internal double BroadCastRange; - [ProtoMember(8)] internal double JammingStrength; - [ProtoMember(9)] internal string RelayChannel; - [ProtoMember(10)] internal double RelayRange; - [ProtoMember(11)] internal bool TargetPersists; - [ProtoMember(12)] internal bool StoreLimitPerBlock; - [ProtoMember(13)] internal int MaxConnections; - } - } - - - [ProtoContract] - public struct AnimationDef - { - [ProtoMember(1)] internal PartAnimationSetDef[] AnimationSets; - [ProtoMember(2)] internal PartEmissive[] Emissives; - [ProtoMember(3)] internal string[] HeatingEmissiveParts; - [ProtoMember(4)] internal Dictionary EventParticles; - - [ProtoContract(IgnoreListHandling = true)] - public struct PartAnimationSetDef - { - public enum EventTriggers - { - Reloading, - Firing, - Tracking, - Overheated, - TurnOn, - TurnOff, - BurstReload, - NoMagsToLoad, - PreFire, - EmptyOnGameLoad, - StopFiring, - StopTracking, - LockDelay, - Init, - Homing, - TargetAligned, - WhileOn, - TargetRanged100, - TargetRanged75, - TargetRanged50, - TargetRanged25, - } - - public enum ResetConditions - { - None, - Home, - Off, - On, - Reloaded - } - - [ProtoMember(1)] internal string[] SubpartId; - [ProtoMember(2)] internal string BarrelId; - [ProtoMember(3)] internal uint StartupFireDelay; - [ProtoMember(4)] internal Dictionary AnimationDelays; - [ProtoMember(5)] internal EventTriggers[] Reverse; - [ProtoMember(6)] internal EventTriggers[] Loop; - [ProtoMember(7)] internal Dictionary EventMoveSets; - [ProtoMember(8)] internal EventTriggers[] TriggerOnce; - [ProtoMember(9)] internal EventTriggers[] ResetEmissives; - [ProtoMember(10)] internal ResetConditions Resets; - } - - [ProtoContract] - public struct PartEmissive - { - [ProtoMember(1)] internal string EmissiveName; - [ProtoMember(2)] internal string[] EmissivePartNames; - [ProtoMember(3)] internal bool CycleEmissivesParts; - [ProtoMember(4)] internal bool LeavePreviousOn; - [ProtoMember(5)] internal Vector4[] Colors; - [ProtoMember(6)] internal float[] IntensityRange; - } - [ProtoContract] - public struct EventParticle - { - [ProtoMember(1)] internal string[] EmptyNames; - [ProtoMember(2)] internal string[] MuzzleNames; - [ProtoMember(3)] internal ParticleDef Particle; - [ProtoMember(4)] internal uint StartDelay; - [ProtoMember(5)] internal uint LoopDelay; - [ProtoMember(6)] internal bool ForceStop; - } - [ProtoContract] - internal struct RelMove - { - public enum MoveType - { - Linear, - ExpoDecay, - ExpoGrowth, - Delay, - Show, //instant or fade - Hide, //instant or fade - } - - [ProtoMember(1)] internal MoveType MovementType; - [ProtoMember(2)] internal XYZ[] LinearPoints; - [ProtoMember(3)] internal XYZ Rotation; - [ProtoMember(4)] internal XYZ RotAroundCenter; - [ProtoMember(5)] internal uint TicksToMove; - [ProtoMember(6)] internal string CenterEmpty; - [ProtoMember(7)] internal bool Fade; - [ProtoMember(8)] internal string EmissiveName; - - [ProtoContract] - internal struct XYZ - { - [ProtoMember(1)] internal double x; - [ProtoMember(2)] internal double y; - [ProtoMember(3)] internal double z; - } - } - } - - [ProtoContract] - public struct UpgradeValues - { - [ProtoMember(1)] internal string[] Ammo; - [ProtoMember(2)] internal Dependency[] Dependencies; - [ProtoMember(3)] internal int RateOfFireMod; - [ProtoMember(4)] internal int BarrelsPerShotMod; - [ProtoMember(5)] internal int ReloadMod; - [ProtoMember(6)] internal int MaxHeatMod; - [ProtoMember(7)] internal int HeatSinkRateMod; - [ProtoMember(8)] internal int ShotsInBurstMod; - [ProtoMember(9)] internal int DelayAfterBurstMod; - [ProtoMember(10)] internal int AmmoPriority; - - [ProtoContract] - public struct Dependency - { - internal string SubtypeId; - internal int Quanity; - } - } - - [ProtoContract] - public struct HardPointDef - { - public enum Prediction - { - Off, - Basic, - Accurate, - Advanced, - } - - [ProtoMember(1)] internal string PartName; - [ProtoMember(2)] internal int DelayCeaseFire; - [ProtoMember(3)] internal float DeviateShotAngle; - [ProtoMember(4)] internal double AimingTolerance; - [ProtoMember(5)] internal Prediction AimLeadingPrediction; - [ProtoMember(6)] internal LoadingDef Loading; - [ProtoMember(7)] internal AiDef Ai; - [ProtoMember(8)] internal HardwareDef HardWare; - [ProtoMember(9)] internal UiDef Ui; - [ProtoMember(10)] internal HardPointAudioDef Audio; - [ProtoMember(11)] internal HardPointParticleDef Graphics; - [ProtoMember(12)] internal OtherDef Other; - [ProtoMember(13)] internal bool AddToleranceToTracking; - [ProtoMember(14)] internal bool CanShootSubmerged; - [ProtoMember(15)] internal bool NpcSafe; - [ProtoMember(16)] internal bool ScanTrackOnly; - - [ProtoContract] - public struct LoadingDef - { - [ProtoMember(1)] internal int ReloadTime; - [ProtoMember(2)] internal int RateOfFire; - [ProtoMember(3)] internal int BarrelsPerShot; - [ProtoMember(4)] internal int SkipBarrels; - [ProtoMember(5)] internal int TrajectilesPerBarrel; - [ProtoMember(6)] internal int HeatPerShot; - [ProtoMember(7)] internal int MaxHeat; - [ProtoMember(8)] internal int HeatSinkRate; - [ProtoMember(9)] internal float Cooldown; - [ProtoMember(10)] internal int DelayUntilFire; - [ProtoMember(11)] internal int ShotsInBurst; - [ProtoMember(12)] internal int DelayAfterBurst; - [ProtoMember(13)] internal bool DegradeRof; - [ProtoMember(14)] internal int BarrelSpinRate; - [ProtoMember(15)] internal bool FireFull; - [ProtoMember(16)] internal bool GiveUpAfter; - [ProtoMember(17)] internal bool DeterministicSpin; - [ProtoMember(18)] internal bool SpinFree; - [ProtoMember(19)] internal bool StayCharged; - [ProtoMember(20)] internal int MagsToLoad; - [ProtoMember(21)] internal int MaxActiveProjectiles; - [ProtoMember(22)] internal int MaxReloads; - [ProtoMember(23)] internal bool GoHomeToReload; - [ProtoMember(24)] internal bool DropTargetUntilLoaded; - } - - - [ProtoContract] - public struct UiDef - { - [ProtoMember(1)] internal bool RateOfFire; - [ProtoMember(2)] internal bool DamageModifier; - [ProtoMember(3)] internal bool ToggleGuidance; - [ProtoMember(4)] internal bool EnableOverload; - [ProtoMember(5)] internal bool AlternateUi; - [ProtoMember(6)] internal bool DisableStatus; - } - - - [ProtoContract] - public struct AiDef - { - [ProtoMember(1)] internal bool TrackTargets; - [ProtoMember(2)] internal bool TurretAttached; - [ProtoMember(3)] internal bool TurretController; - [ProtoMember(4)] internal bool PrimaryTracking; - [ProtoMember(5)] internal bool LockOnFocus; - [ProtoMember(6)] internal bool SuppressFire; - [ProtoMember(7)] internal bool OverrideLeads; - [ProtoMember(8)] internal int DefaultLeadGroup; - [ProtoMember(9)] internal bool TargetGridCenter; - } - - [ProtoContract] - public struct HardwareDef - { - public enum HardwareType - { - BlockWeapon = 0, - HandWeapon = 1, - Phantom = 6, - } - - [ProtoMember(1)] internal float RotateRate; - [ProtoMember(2)] internal float ElevateRate; - [ProtoMember(3)] internal Vector3D Offset; - [ProtoMember(4)] internal bool FixedOffset; - [ProtoMember(5)] internal int MaxAzimuth; - [ProtoMember(6)] internal int MinAzimuth; - [ProtoMember(7)] internal int MaxElevation; - [ProtoMember(8)] internal int MinElevation; - [ProtoMember(9)] internal float InventorySize; - [ProtoMember(10)] internal HardwareType Type; - [ProtoMember(11)] internal int HomeAzimuth; - [ProtoMember(12)] internal int HomeElevation; - [ProtoMember(13)] internal CriticalDef CriticalReaction; - [ProtoMember(14)] internal float IdlePower; - - [ProtoContract] - public struct CriticalDef - { - [ProtoMember(1)] internal bool Enable; - [ProtoMember(2)] internal int DefaultArmedTimer; - [ProtoMember(3)] internal bool PreArmed; - [ProtoMember(4)] internal bool TerminalControls; - [ProtoMember(5)] internal string AmmoRound; - } - } - - [ProtoContract] - public struct HardPointAudioDef - { - [ProtoMember(1)] internal string ReloadSound; - [ProtoMember(2)] internal string NoAmmoSound; - [ProtoMember(3)] internal string HardPointRotationSound; - [ProtoMember(4)] internal string BarrelRotationSound; - [ProtoMember(5)] internal string FiringSound; - [ProtoMember(6)] internal bool FiringSoundPerShot; - [ProtoMember(7)] internal string PreFiringSound; - [ProtoMember(8)] internal uint FireSoundEndDelay; - [ProtoMember(9)] internal bool FireSoundNoBurst; - } - - [ProtoContract] - public struct OtherDef - { - [ProtoMember(1)] internal int ConstructPartCap; - [ProtoMember(2)] internal int EnergyPriority; - [ProtoMember(3)] internal int RotateBarrelAxis; - [ProtoMember(4)] internal bool MuzzleCheck; - [ProtoMember(5)] internal bool Debug; - [ProtoMember(6)] internal double RestrictionRadius; - [ProtoMember(7)] internal bool CheckInflatedBox; - [ProtoMember(8)] internal bool CheckForAnyWeapon; - [ProtoMember(9)] internal bool DisableLosCheck; - [ProtoMember(10)] internal bool NoVoxelLosCheck; - - } - - [ProtoContract] - public struct HardPointParticleDef - { - [ProtoMember(1)] internal ParticleDef Effect1; - [ProtoMember(2)] internal ParticleDef Effect2; - } - } - - [ProtoContract] - public class AmmoDef - { - [ProtoMember(1)] internal string AmmoMagazine; - [ProtoMember(2)] internal string AmmoRound; - [ProtoMember(3)] internal bool HybridRound; - [ProtoMember(4)] internal float EnergyCost; - [ProtoMember(5)] internal float BaseDamage; - [ProtoMember(6)] internal float Mass; - [ProtoMember(7)] internal float Health; - [ProtoMember(8)] internal float BackKickForce; - [ProtoMember(9)] internal DamageScaleDef DamageScales; - [ProtoMember(10)] internal ShapeDef Shape; - [ProtoMember(11)] internal ObjectsHitDef ObjectsHit; - [ProtoMember(12)] internal TrajectoryDef Trajectory; - [ProtoMember(13)] internal AreaDamageDef AreaEffect; - [ProtoMember(14)] internal BeamDef Beams; - [ProtoMember(15)] internal FragmentDef Fragment; - [ProtoMember(16)] internal GraphicDef AmmoGraphics; - [ProtoMember(17)] internal AmmoAudioDef AmmoAudio; - [ProtoMember(18)] internal bool HardPointUsable; - [ProtoMember(19)] internal PatternDef Pattern; - [ProtoMember(20)] internal int EnergyMagazineSize; - [ProtoMember(21)] internal float DecayPerShot; - [ProtoMember(22)] internal EjectionDef Ejection; - [ProtoMember(23)] internal bool IgnoreWater; - [ProtoMember(24)] internal AreaOfDamageDef AreaOfDamage; - [ProtoMember(25)] internal EwarDef Ewar; - [ProtoMember(26)] internal bool IgnoreVoxels; - [ProtoMember(27)] internal bool Synchronize; - [ProtoMember(28)] internal double HeatModifier; - [ProtoMember(29)] internal bool NpcSafe; - [ProtoMember(30)] internal SynchronizeDef Sync; - [ProtoMember(31)] internal bool NoGridOrArmorScaling; - - [ProtoContract] - public struct SynchronizeDef - { - [ProtoMember(1)] internal bool Full; - [ProtoMember(2)] internal bool PointDefense; - [ProtoMember(3)] internal bool OnHitDeath; - } - - [ProtoContract] - public struct DamageScaleDef - { - - [ProtoMember(1)] internal float MaxIntegrity; - [ProtoMember(2)] internal bool DamageVoxels; - [ProtoMember(3)] internal float Characters; - [ProtoMember(4)] internal bool SelfDamage; - [ProtoMember(5)] internal GridSizeDef Grids; - [ProtoMember(6)] internal ArmorDef Armor; - [ProtoMember(7)] internal CustomScalesDef Custom; - [ProtoMember(8)] internal ShieldDef Shields; - [ProtoMember(9)] internal FallOffDef FallOff; - [ProtoMember(10)] internal double HealthHitModifier; - [ProtoMember(11)] internal double VoxelHitModifier; - [ProtoMember(12)] internal DamageTypes DamageType; - [ProtoMember(13)] internal DeformDef Deform; - - [ProtoContract] - public struct FallOffDef - { - [ProtoMember(1)] internal float Distance; - [ProtoMember(2)] internal float MinMultipler; - } - - [ProtoContract] - public struct GridSizeDef - { - [ProtoMember(1)] internal float Large; - [ProtoMember(2)] internal float Small; - } - - [ProtoContract] - public struct ArmorDef - { - [ProtoMember(1)] internal float Armor; - [ProtoMember(2)] internal float Heavy; - [ProtoMember(3)] internal float Light; - [ProtoMember(4)] internal float NonArmor; - } - - [ProtoContract] - public struct CustomScalesDef - { - internal enum SkipMode - { - NoSkip, - Inclusive, - Exclusive, - } - - [ProtoMember(1)] internal CustomBlocksDef[] Types; - [ProtoMember(2)] internal bool IgnoreAllOthers; - [ProtoMember(3)] internal SkipMode SkipOthers; - } - - [ProtoContract] - public struct DamageTypes - { - internal enum Damage - { - Energy, - Kinetic, - ShieldDefault, - } - - [ProtoMember(1)] internal Damage Base; - [ProtoMember(2)] internal Damage AreaEffect; - [ProtoMember(3)] internal Damage Detonation; - [ProtoMember(4)] internal Damage Shield; - } - - [ProtoContract] - public struct ShieldDef - { - internal enum ShieldType - { - Default, - Heal, - Bypass, - EmpRetired, - } - - [ProtoMember(1)] internal float Modifier; - [ProtoMember(2)] internal ShieldType Type; - [ProtoMember(3)] internal float BypassModifier; - } - - [ProtoContract] - public struct DeformDef - { - internal enum DeformTypes - { - HitBlock, - AllDamagedBlocks, - NoDeform, - } - - [ProtoMember(1)] internal DeformTypes DeformType; - [ProtoMember(2)] internal int DeformDelay; - } - } - - [ProtoContract] - public struct ShapeDef - { - public enum Shapes - { - LineShape, - SphereShape, - } - - [ProtoMember(1)] internal Shapes Shape; - [ProtoMember(2)] internal double Diameter; - } - - [ProtoContract] - public struct ObjectsHitDef - { - [ProtoMember(1)] internal int MaxObjectsHit; - [ProtoMember(2)] internal bool CountBlocks; - } - - - [ProtoContract] - public struct CustomBlocksDef - { - [ProtoMember(1)] internal string SubTypeId; - [ProtoMember(2)] internal float Modifier; - } - - [ProtoContract] - public struct GraphicDef - { - [ProtoMember(1)] internal bool ShieldHitDraw; - [ProtoMember(2)] internal float VisualProbability; - [ProtoMember(3)] internal string ModelName; - [ProtoMember(4)] internal AmmoParticleDef Particles; - [ProtoMember(5)] internal LineDef Lines; - [ProtoMember(6)] internal DecalDef Decals; - - [ProtoContract] - public struct AmmoParticleDef - { - [ProtoMember(1)] internal ParticleDef Ammo; - [ProtoMember(2)] internal ParticleDef Hit; - [ProtoMember(3)] internal ParticleDef Eject; - } - - [ProtoContract] - public struct LineDef - { - internal enum Texture - { - Normal, - Cycle, - Chaos, - Wave, - } - - public enum FactionColor - { - DontUse, - Foreground, - Background, - } - - [ProtoMember(1)] internal TracerBaseDef Tracer; - [ProtoMember(2)] internal string TracerMaterial; - [ProtoMember(3)] internal Randomize ColorVariance; - [ProtoMember(4)] internal Randomize WidthVariance; - [ProtoMember(5)] internal TrailDef Trail; - [ProtoMember(6)] internal OffsetEffectDef OffsetEffect; - [ProtoMember(7)] internal bool DropParentVelocity; - - - [ProtoContract] - public struct OffsetEffectDef - { - [ProtoMember(1)] internal double MaxOffset; - [ProtoMember(2)] internal double MinLength; - [ProtoMember(3)] internal double MaxLength; - } - - [ProtoContract] - public struct TracerBaseDef - { - [ProtoMember(1)] internal bool Enable; - [ProtoMember(2)] internal float Length; - [ProtoMember(3)] internal float Width; - [ProtoMember(4)] internal Vector4 Color; - [ProtoMember(5)] internal uint VisualFadeStart; - [ProtoMember(6)] internal uint VisualFadeEnd; - [ProtoMember(7)] internal SegmentDef Segmentation; - [ProtoMember(8)] internal string[] Textures; - [ProtoMember(9)] internal Texture TextureMode; - [ProtoMember(10)] internal bool AlwaysDraw; - [ProtoMember(11)] internal FactionColor FactionColor; - - [ProtoContract] - public struct SegmentDef - { - [ProtoMember(1)] internal string Material; //retired - [ProtoMember(2)] internal double SegmentLength; - [ProtoMember(3)] internal double SegmentGap; - [ProtoMember(4)] internal double Speed; - [ProtoMember(5)] internal Vector4 Color; - [ProtoMember(6)] internal double WidthMultiplier; - [ProtoMember(7)] internal bool Reverse; - [ProtoMember(8)] internal bool UseLineVariance; - [ProtoMember(9)] internal Randomize ColorVariance; - [ProtoMember(10)] internal Randomize WidthVariance; - [ProtoMember(11)] internal string[] Textures; - [ProtoMember(12)] internal bool Enable; - [ProtoMember(13)] internal FactionColor FactionColor; - } - } - - [ProtoContract] - public struct TrailDef - { - [ProtoMember(1)] internal bool Enable; - [ProtoMember(2)] internal string Material; - [ProtoMember(3)] internal int DecayTime; - [ProtoMember(4)] internal Vector4 Color; - [ProtoMember(5)] internal bool Back; - [ProtoMember(6)] internal float CustomWidth; - [ProtoMember(7)] internal bool UseWidthVariance; - [ProtoMember(8)] internal bool UseColorFade; - [ProtoMember(9)] internal string[] Textures; - [ProtoMember(10)] internal Texture TextureMode; - [ProtoMember(11)] internal bool AlwaysDraw; - [ProtoMember(12)] internal FactionColor FactionColor; - } - } - - [ProtoContract] - public struct DecalDef - { - - [ProtoMember(1)] internal int MaxAge; - [ProtoMember(2)] internal TextureMapDef[] Map; - - [ProtoContract] - public struct TextureMapDef - { - [ProtoMember(1)] internal string HitMaterial; - [ProtoMember(2)] internal string DecalMaterial; - } - } - } - - [ProtoContract] - public struct BeamDef - { - [ProtoMember(1)] internal bool Enable; - [ProtoMember(2)] internal bool ConvergeBeams; - [ProtoMember(3)] internal bool VirtualBeams; - [ProtoMember(4)] internal bool RotateRealBeam; - [ProtoMember(5)] internal bool OneParticle; - [ProtoMember(6)] internal int FakeVoxelHitTicks; - } - - [ProtoContract] - public struct FragmentDef - { - [ProtoMember(1)] internal string AmmoRound; - [ProtoMember(2)] internal int Fragments; - [ProtoMember(3)] internal float Radial; - [ProtoMember(4)] internal float BackwardDegrees; - [ProtoMember(5)] internal float Degrees; - [ProtoMember(6)] internal bool Reverse; - [ProtoMember(7)] internal bool IgnoreArming; - [ProtoMember(8)] internal bool DropVelocity; - [ProtoMember(9)] internal float Offset; - [ProtoMember(10)] internal int MaxChildren; - [ProtoMember(11)] internal TimedSpawnDef TimedSpawns; - [ProtoMember(12)] internal bool FireSound; // not used, can remove - [ProtoMember(13)] internal Vector3D AdvOffset; - [ProtoMember(14)] internal bool ArmWhenHit; - - [ProtoContract] - public struct TimedSpawnDef - { - public enum PointTypes - { - Direct, - Lead, - Predict, - } - - [ProtoMember(1)] internal bool Enable; - [ProtoMember(2)] internal int Interval; - [ProtoMember(3)] internal int StartTime; - [ProtoMember(4)] internal int MaxSpawns; - [ProtoMember(5)] internal double Proximity; - [ProtoMember(6)] internal bool ParentDies; - [ProtoMember(7)] internal bool PointAtTarget; - [ProtoMember(8)] internal int GroupSize; - [ProtoMember(9)] internal int GroupDelay; - [ProtoMember(10)] internal PointTypes PointType; - [ProtoMember(11)] internal float DirectAimCone; - } - } - - [ProtoContract] - public struct PatternDef - { - public enum PatternModes - { - Never, - Weapon, - Fragment, - Both, - } - - [ProtoMember(1)] internal string[] Patterns; - [ProtoMember(2)] internal bool Enable; - [ProtoMember(3)] internal float TriggerChance; - [ProtoMember(4)] internal bool SkipParent; - [ProtoMember(5)] internal bool Random; - [ProtoMember(6)] internal int RandomMin; - [ProtoMember(7)] internal int RandomMax; - [ProtoMember(8)] internal int PatternSteps; - [ProtoMember(9)] internal PatternModes Mode; - } - - [ProtoContract] - public struct EjectionDef - { - public enum SpawnType - { - Item, - Particle, - } - [ProtoMember(1)] internal float Speed; - [ProtoMember(2)] internal float SpawnChance; - [ProtoMember(3)] internal SpawnType Type; - [ProtoMember(4)] internal ComponentDef CompDef; - - [ProtoContract] - public struct ComponentDef - { - [ProtoMember(1)] internal string ItemName; - [ProtoMember(2)] internal int ItemLifeTime; - [ProtoMember(3)] internal int Delay; - } - } - - [ProtoContract] - public struct AreaOfDamageDef - { - public enum Falloff - { - Legacy, - NoFalloff, - Linear, - Curve, - InvCurve, - Squeeze, - Pooled, - Exponential, - } - public enum AoeShape - { - Round, - Diamond, - } - - [ProtoMember(1)] internal ByBlockHitDef ByBlockHit; - [ProtoMember(2)] internal EndOfLifeDef EndOfLife; - - [ProtoContract] - public struct ByBlockHitDef - { - [ProtoMember(1)] internal bool Enable; - [ProtoMember(2)] internal double Radius; - [ProtoMember(3)] internal float Damage; - [ProtoMember(4)] internal float Depth; - [ProtoMember(5)] internal float MaxAbsorb; - [ProtoMember(6)] internal Falloff Falloff; - [ProtoMember(7)] internal AoeShape Shape; - } - - [ProtoContract] - public struct EndOfLifeDef - { - [ProtoMember(1)] internal bool Enable; - [ProtoMember(2)] internal double Radius; - [ProtoMember(3)] internal float Damage; - [ProtoMember(4)] internal float Depth; - [ProtoMember(5)] internal float MaxAbsorb; - [ProtoMember(6)] internal Falloff Falloff; - [ProtoMember(7)] internal bool ArmOnlyOnHit; - [ProtoMember(8)] internal int MinArmingTime; - [ProtoMember(9)] internal bool NoVisuals; - [ProtoMember(10)] internal bool NoSound; - [ProtoMember(11)] internal float ParticleScale; - [ProtoMember(12)] internal string CustomParticle; - [ProtoMember(13)] internal string CustomSound; - [ProtoMember(14)] internal AoeShape Shape; - } - } - - [ProtoContract] - public struct EwarDef - { - public enum EwarType - { - AntiSmart, - JumpNull, - EnergySink, - Anchor, - Emp, - Offense, - Nav, - Dot, - Push, - Pull, - Tractor, - } - - public enum EwarMode - { - Effect, - Field, - } - - [ProtoMember(1)] internal bool Enable; - [ProtoMember(2)] internal EwarType Type; - [ProtoMember(3)] internal EwarMode Mode; - [ProtoMember(4)] internal float Strength; - [ProtoMember(5)] internal double Radius; - [ProtoMember(6)] internal int Duration; - [ProtoMember(7)] internal bool StackDuration; - [ProtoMember(8)] internal bool Depletable; - [ProtoMember(9)] internal int MaxStacks; - [ProtoMember(10)] internal bool NoHitParticle; - [ProtoMember(11)] internal PushPullDef Force; - [ProtoMember(12)] internal FieldDef Field; - - - [ProtoContract] - public struct FieldDef - { - [ProtoMember(1)] internal int Interval; - [ProtoMember(2)] internal int PulseChance; - [ProtoMember(3)] internal int GrowTime; - [ProtoMember(4)] internal bool HideModel; - [ProtoMember(5)] internal bool ShowParticle; - [ProtoMember(6)] internal double TriggerRange; - [ProtoMember(7)] internal ParticleDef Particle; - } - - [ProtoContract] - public struct PushPullDef - { - public enum Force - { - ProjectileLastPosition, - ProjectileOrigin, - HitPosition, - TargetCenter, - TargetCenterOfMass, - } - - [ProtoMember(1)] internal Force ForceFrom; - [ProtoMember(2)] internal Force ForceTo; - [ProtoMember(3)] internal Force Position; - [ProtoMember(4)] internal bool DisableRelativeMass; - [ProtoMember(5)] internal double TractorRange; - [ProtoMember(6)] internal bool ShooterFeelsForce; - } - } - - - [ProtoContract] - public struct AreaDamageDef - { - public enum AreaEffectType - { - Disabled, - Explosive, - Radiant, - AntiSmart, - JumpNullField, - EnergySinkField, - AnchorField, - EmpField, - OffenseField, - NavField, - DotField, - PushField, - PullField, - TractorField, - } - - [ProtoMember(1)] internal double AreaEffectRadius; - [ProtoMember(2)] internal float AreaEffectDamage; - [ProtoMember(3)] internal AreaEffectType AreaEffect; - [ProtoMember(4)] internal PulseDef Pulse; - [ProtoMember(5)] internal DetonateDef Detonation; - [ProtoMember(6)] internal ExplosionDef Explosions; - [ProtoMember(7)] internal EwarFieldsDef EwarFields; - [ProtoMember(8)] internal AreaInfluence Base; - - [ProtoContract] - public struct AreaInfluence - { - [ProtoMember(1)] internal double Radius; - [ProtoMember(2)] internal float EffectStrength; - } - - - [ProtoContract] - public struct PulseDef - { - [ProtoMember(1)] internal int Interval; - [ProtoMember(2)] internal int PulseChance; - [ProtoMember(3)] internal int GrowTime; - [ProtoMember(4)] internal bool HideModel; - [ProtoMember(5)] internal bool ShowParticle; - [ProtoMember(6)] internal ParticleDef Particle; - } - - [ProtoContract] - public struct EwarFieldsDef - { - [ProtoMember(1)] internal int Duration; - [ProtoMember(2)] internal bool StackDuration; - [ProtoMember(3)] internal bool Depletable; - [ProtoMember(4)] internal double TriggerRange; - [ProtoMember(5)] internal int MaxStacks; - [ProtoMember(6)] internal PushPullDef Force; - [ProtoMember(7)] internal bool DisableParticleEffect; - - [ProtoContract] - public struct PushPullDef - { - public enum Force - { - ProjectileLastPosition, - ProjectileOrigin, - HitPosition, - TargetCenter, - TargetCenterOfMass, - } - - [ProtoMember(1)] internal Force ForceFrom; - [ProtoMember(2)] internal Force ForceTo; - [ProtoMember(3)] internal Force Position; - [ProtoMember(4)] internal bool DisableRelativeMass; - [ProtoMember(5)] internal double TractorRange; - [ProtoMember(6)] internal bool ShooterFeelsForce; - } - } - - [ProtoContract] - public struct DetonateDef - { - [ProtoMember(1)] internal bool DetonateOnEnd; - [ProtoMember(2)] internal bool ArmOnlyOnHit; - [ProtoMember(3)] internal float DetonationRadius; - [ProtoMember(4)] internal float DetonationDamage; - [ProtoMember(5)] internal int MinArmingTime; - } - - [ProtoContract] - public struct ExplosionDef - { - [ProtoMember(1)] internal bool NoVisuals; - [ProtoMember(2)] internal bool NoSound; - [ProtoMember(3)] internal float Scale; - [ProtoMember(4)] internal string CustomParticle; - [ProtoMember(5)] internal string CustomSound; - [ProtoMember(6)] internal bool NoShrapnel; - [ProtoMember(7)] internal bool NoDeformation; - } - } - - [ProtoContract] - public struct AmmoAudioDef - { - [ProtoMember(1)] internal string TravelSound; - [ProtoMember(2)] internal string HitSound; - [ProtoMember(3)] internal float HitPlayChance; - [ProtoMember(4)] internal bool HitPlayShield; - [ProtoMember(5)] internal string VoxelHitSound; - [ProtoMember(6)] internal string PlayerHitSound; - [ProtoMember(7)] internal string FloatingHitSound; - [ProtoMember(8)] internal string ShieldHitSound; - [ProtoMember(9)] internal string ShotSound; - } - - [ProtoContract] - public struct TrajectoryDef - { - internal enum GuidanceType - { - None, - Remote, - TravelTo, - Smart, - DetectTravelTo, - DetectSmart, - DetectFixed, - DroneAdvanced, - } - - [ProtoMember(1)] internal float MaxTrajectory; - [ProtoMember(2)] internal float AccelPerSec; - [ProtoMember(3)] internal float DesiredSpeed; - [ProtoMember(4)] internal float TargetLossDegree; - [ProtoMember(5)] internal int TargetLossTime; - [ProtoMember(6)] internal int MaxLifeTime; - [ProtoMember(7)] internal int DeaccelTime; - [ProtoMember(8)] internal Randomize SpeedVariance; - [ProtoMember(9)] internal Randomize RangeVariance; - [ProtoMember(10)] internal GuidanceType Guidance; - [ProtoMember(11)] internal SmartsDef Smarts; - [ProtoMember(12)] internal MinesDef Mines; - [ProtoMember(13)] internal float GravityMultiplier; - [ProtoMember(14)] internal uint MaxTrajectoryTime; - [ProtoMember(15)] internal ApproachDef[] Approaches; - [ProtoMember(16)] internal double TotalAcceleration; - - [ProtoContract] - public struct SmartsDef - { - [ProtoMember(1)] internal double Inaccuracy; - [ProtoMember(2)] internal double Aggressiveness; - [ProtoMember(3)] internal double MaxLateralThrust; - [ProtoMember(4)] internal double TrackingDelay; - [ProtoMember(5)] internal int MaxChaseTime; - [ProtoMember(6)] internal bool OverideTarget; - [ProtoMember(7)] internal int MaxTargets; - [ProtoMember(8)] internal bool NoTargetExpire; - [ProtoMember(9)] internal bool Roam; - [ProtoMember(10)] internal bool KeepAliveAfterTargetLoss; - [ProtoMember(11)] internal float OffsetRatio; - [ProtoMember(12)] internal int OffsetTime; - [ProtoMember(13)] internal bool CheckFutureIntersection; - [ProtoMember(14)] internal double NavAcceleration; - [ProtoMember(15)] internal bool AccelClearance; - [ProtoMember(16)] internal double SteeringLimit; - [ProtoMember(17)] internal bool FocusOnly; - [ProtoMember(18)] internal double OffsetMinRange; - [ProtoMember(19)] internal bool FocusEviction; - [ProtoMember(20)] internal double ScanRange; - [ProtoMember(21)] internal bool NoSteering; - [ProtoMember(22)] internal double FutureIntersectionRange; - [ProtoMember(23)] internal double MinTurnSpeed; - [ProtoMember(24)] internal bool NoTargetApproach; - [ProtoMember(25)] internal bool AltNavigation; - } - - [ProtoContract] - public struct ApproachDef - { - public enum ReInitCondition - { - Wait, - MoveToPrevious, - MoveToNext, - ForceRestart, - } - - public enum Conditions - { - Ignore, - Spawn, - DistanceFromPositionC, - Lifetime, - DesiredElevation, - MinTravelRequired, - MaxTravelRequired, - Deadtime, - DistanceToPositionC, - NextTimedSpawn, - RelativeLifetime, - RelativeDeadtime, - SinceTimedSpawn, - RelativeSpawns, - EnemyTargetLoss, - RelativeHealthLost, - HealthRemaining, - DistanceFromPositionB, - DistanceToPositionB, - DistanceFromTarget, - DistanceToTarget, - DistanceFromEndTrajectory, - DistanceToEndTrajectory, - } - - public enum UpRelativeTo - { - UpRelativeToBlock, - UpRelativeToGravity, - UpTargetDirection, - UpTargetVelocity, - UpStoredStartDontUse, - UpStoredEndDontUse, - UpStoredStartPosition, - UpStoredEndPosition, - UpStoredStartLocalPosition, - UpStoredEndLocalPosition, - UpRelativeToShooter, - UpOriginDirection, - UpElevationDirection, - } - - public enum FwdRelativeTo - { - ForwardElevationDirection, - ForwardRelativeToBlock, - ForwardRelativeToGravity, - ForwardTargetDirection, - ForwardTargetVelocity, - ForwardStoredStartDontUse, - ForwardStoredEndDontUse, - ForwardStoredStartPosition, - ForwardStoredEndPosition, - ForwardStoredStartLocalPosition, - ForwardStoredEndLocalPosition, - ForwardRelativeToShooter, - ForwardOriginDirection, - } - - public enum RelativeTo - { - Origin, - Shooter, - Target, - Surface, - MidPoint, - PositionA, - Nothing, - StoredStartDontUse, - StoredEndDontUse, - StoredStartPosition, - StoredEndPosition, - StoredStartLocalPosition, - StoredEndLocalPosition, - } - - public enum ConditionOperators - { - StartEnd_And, - StartEnd_Or, - StartAnd_EndOr, - StartOr_EndAnd, - } - - public enum StageEvents - { - DoNothing, - EndProjectile, - EndProjectileOnRestart, - StoreDontUse, - StorePositionDontUse, - Refund, - StorePositionA, - StorePositionB, - StorePositionC, - } - - [ProtoContract] - public struct WeightedIdListDef - { - - [ProtoMember(1)] public int ApproachId; - [ProtoMember(2)] public Randomize Weight; - [ProtoMember(3)] public double End1WeightMod; - [ProtoMember(4)] public double End2WeightMod; - [ProtoMember(5)] public int MaxRuns; - [ProtoMember(6)] public double End3WeightMod; - } - - [ProtoMember(1)] internal ReInitCondition RestartCondition; - [ProtoMember(2)] internal Conditions StartCondition1; - [ProtoMember(3)] internal Conditions EndCondition1; - [ProtoMember(4)] internal UpRelativeTo Up; - [ProtoMember(5)] internal RelativeTo PositionB; - [ProtoMember(6)] internal double AngleOffset; - [ProtoMember(7)] internal double Start1Value; - [ProtoMember(8)] internal double End1Value; - [ProtoMember(9)] internal double LeadDistance; - [ProtoMember(10)] internal double DesiredElevation; - [ProtoMember(11)] internal double AccelMulti; - [ProtoMember(12)] internal double SpeedCapMulti; - [ProtoMember(13)] internal bool AdjustPositionC; - [ProtoMember(14)] internal bool CanExpireOnceStarted; - [ProtoMember(15)] internal ParticleDef AlternateParticle; - [ProtoMember(16)] internal string AlternateSound; - [ProtoMember(17)] internal string AlternateModel; - [ProtoMember(18)] internal int OnRestartRevertTo; - [ProtoMember(19)] internal ParticleDef StartParticle; - [ProtoMember(20)] internal bool AdjustPositionB; - [ProtoMember(21)] internal bool AdjustUp; - [ProtoMember(22)] internal bool PushLeadByTravelDistance; - [ProtoMember(23)] internal double TrackingDistance; - [ProtoMember(24)] internal Conditions StartCondition2; - [ProtoMember(25)] internal double Start2Value; - [ProtoMember(26)] internal Conditions EndCondition2; - [ProtoMember(27)] internal double End2Value; - [ProtoMember(28)] internal RelativeTo Elevation; - [ProtoMember(29)] internal double ElevationTolerance; - [ProtoMember(30)] internal ConditionOperators Operators; - [ProtoMember(31)] internal StageEvents StartEvent; - [ProtoMember(32)] internal StageEvents EndEvent; - [ProtoMember(33)] internal double TotalAccelMulti; - [ProtoMember(34)] internal double DeAccelMulti; - [ProtoMember(35)] internal bool Orbit; - [ProtoMember(36)] internal double OrbitRadius; - [ProtoMember(37)] internal int OffsetTime; - [ProtoMember(38)] internal double OffsetMinRadius; - [ProtoMember(39)] internal bool NoTimedSpawns; - [ProtoMember(40)] internal double OffsetMaxRadius; - [ProtoMember(41)] internal bool ForceRestart; - [ProtoMember(42)] internal RelativeTo PositionC; - [ProtoMember(43)] internal bool DisableAvoidance; - [ProtoMember(44)] internal int StoredStartId; - [ProtoMember(45)] internal int StoredEndId; - [ProtoMember(46)] internal WeightedIdListDef[] RestartList; - [ProtoMember(47)] internal RelativeTo StoredStartType; - [ProtoMember(48)] internal RelativeTo StoredEndType; - [ProtoMember(49)] internal bool LeadRotateElevatePositionB; - [ProtoMember(50)] internal bool LeadRotateElevatePositionC; - [ProtoMember(51)] internal bool NoElevationLead; - [ProtoMember(52)] internal bool IgnoreAntiSmart; - [ProtoMember(53)] internal double HeatRefund; - [ProtoMember(54)] internal Randomize AngleVariance; - [ProtoMember(55)] internal bool ReloadRefund; - [ProtoMember(56)] internal int ModelRotateTime; - [ProtoMember(57)] internal FwdRelativeTo Forward; - [ProtoMember(58)] internal bool AdjustForward; - [ProtoMember(59)] internal bool ToggleIngoreVoxels; - [ProtoMember(60)] internal bool SelfAvoidance; - [ProtoMember(61)] internal bool TargetAvoidance; - [ProtoMember(62)] internal bool SelfPhasing; - [ProtoMember(63)] internal bool TrajectoryRelativeToB; - [ProtoMember(64)] internal Conditions EndCondition3; - [ProtoMember(65)] internal double End3Value; - [ProtoMember(66)] internal bool SwapNavigationType; - [ProtoMember(67)] internal bool ElevationRelativeToC; - } - - [ProtoContract] - public struct MinesDef - { - [ProtoMember(1)] internal double DetectRadius; - [ProtoMember(2)] internal double DeCloakRadius; - [ProtoMember(3)] internal int FieldTime; - [ProtoMember(4)] internal bool Cloak; - [ProtoMember(5)] internal bool Persist; - } - } - - [ProtoContract] - public struct Randomize - { - [ProtoMember(1)] internal float Start; - [ProtoMember(2)] internal float End; - } - } - - [ProtoContract] - public struct ParticleOptionDef - { - [ProtoMember(1)] internal float Scale; - [ProtoMember(2)] internal float MaxDistance; - [ProtoMember(3)] internal float MaxDuration; - [ProtoMember(4)] internal bool Loop; - [ProtoMember(5)] internal bool Restart; - [ProtoMember(6)] internal float HitPlayChance; - } - - - [ProtoContract] - public struct ParticleDef - { - [ProtoMember(1)] internal string Name; - [ProtoMember(2)] internal Vector4 Color; - [ProtoMember(3)] internal Vector3D Offset; - [ProtoMember(4)] internal ParticleOptionDef Extras; - [ProtoMember(5)] internal bool ApplyToShield; - [ProtoMember(6)] internal bool DisableCameraCulling; - } - } - } -} +using System.Collections.Generic; +using ProtoBuf; +using VRageMath; + +namespace SC.GyroscopicGunsight.API.CoreSystems +{ + public static class WcApiDef + { + [ProtoContract] + public class ContainerDefinition + { + [ProtoMember(1)] internal WeaponDefinition[] WeaponDefs; + [ProtoMember(2)] internal ArmorDefinition[] ArmorDefs; + [ProtoMember(3)] internal UpgradeDefinition[] UpgradeDefs; + [ProtoMember(4)] internal SupportDefinition[] SupportDefs; + } + + [ProtoContract] + public class ConsumeableDef + { + [ProtoMember(1)] internal string ItemName; + [ProtoMember(2)] internal string InventoryItem; + [ProtoMember(3)] internal int ItemsNeeded; + [ProtoMember(4)] internal bool Hybrid; + [ProtoMember(5)] internal float EnergyCost; + [ProtoMember(6)] internal float Strength; + } + + [ProtoContract] + public class UpgradeDefinition + { + [ProtoMember(1)] internal ModelAssignmentsDef Assignments; + [ProtoMember(2)] internal HardPointDef HardPoint; + [ProtoMember(3)] internal WeaponDefinition.AnimationDef Animations; + [ProtoMember(4)] internal string ModPath; + [ProtoMember(5)] internal ConsumeableDef[] Consumable; + + [ProtoContract] + public struct ModelAssignmentsDef + { + [ProtoMember(1)] internal MountPointDef[] MountPoints; + + [ProtoContract] + public struct MountPointDef + { + [ProtoMember(1)] internal string SubtypeId; + [ProtoMember(2)] internal float DurabilityMod; + [ProtoMember(3)] internal string IconName; + } + } + + [ProtoContract] + public struct HardPointDef + { + [ProtoMember(1)] internal string PartName; + [ProtoMember(2)] internal HardwareDef HardWare; + [ProtoMember(3)] internal UiDef Ui; + [ProtoMember(4)] internal OtherDef Other; + + [ProtoContract] + public struct UiDef + { + [ProtoMember(1)] internal bool StrengthModifier; + } + + [ProtoContract] + public struct HardwareDef + { + public enum HardwareType + { + Default, + } + + [ProtoMember(1)] internal float InventorySize; + [ProtoMember(2)] internal HardwareType Type; + [ProtoMember(3)] internal int BlockDistance; + + } + + [ProtoContract] + public struct OtherDef + { + [ProtoMember(1)] internal int ConstructPartCap; + [ProtoMember(2)] internal int EnergyPriority; + [ProtoMember(3)] internal bool Debug; + [ProtoMember(4)] internal double RestrictionRadius; + [ProtoMember(5)] internal bool CheckInflatedBox; + [ProtoMember(6)] internal bool CheckForAnySupport; + [ProtoMember(7)] internal bool StayCharged; + } + } + } + + [ProtoContract] + public class SupportDefinition + { + [ProtoMember(1)] internal ModelAssignmentsDef Assignments; + [ProtoMember(2)] internal HardPointDef HardPoint; + [ProtoMember(3)] internal WeaponDefinition.AnimationDef Animations; + [ProtoMember(4)] internal string ModPath; + [ProtoMember(5)] internal ConsumeableDef[] Consumable; + [ProtoMember(6)] internal SupportEffect Effect; + + [ProtoContract] + public struct ModelAssignmentsDef + { + [ProtoMember(1)] internal MountPointDef[] MountPoints; + + [ProtoContract] + public struct MountPointDef + { + [ProtoMember(1)] internal string SubtypeId; + [ProtoMember(2)] internal float DurabilityMod; + [ProtoMember(3)] internal string IconName; + } + } + [ProtoContract] + public struct HardPointDef + { + [ProtoMember(1)] internal string PartName; + [ProtoMember(2)] internal HardwareDef HardWare; + [ProtoMember(3)] internal UiDef Ui; + [ProtoMember(4)] internal OtherDef Other; + + [ProtoContract] + public struct UiDef + { + [ProtoMember(1)] internal bool ProtectionControl; + } + + [ProtoContract] + public struct HardwareDef + { + [ProtoMember(1)] internal float InventorySize; + } + + [ProtoContract] + public struct OtherDef + { + [ProtoMember(1)] internal int ConstructPartCap; + [ProtoMember(2)] internal int EnergyPriority; + [ProtoMember(3)] internal bool Debug; + [ProtoMember(4)] internal double RestrictionRadius; + [ProtoMember(5)] internal bool CheckInflatedBox; + [ProtoMember(6)] internal bool CheckForAnySupport; + [ProtoMember(7)] internal bool StayCharged; + } + } + + [ProtoContract] + public struct SupportEffect + { + public enum AffectedBlocks + { + Armor, + ArmorPlus, + PlusFunctional, + All, + } + + public enum Protections + { + KineticProt, + EnergeticProt, + GenericProt, + Regenerate, + Structural, + } + + [ProtoMember(1)] internal Protections Protection; + [ProtoMember(2)] internal AffectedBlocks Affected; + [ProtoMember(3)] internal int BlockRange; + [ProtoMember(4)] internal int MaxPoints; + [ProtoMember(5)] internal int PointsPerCharge; + [ProtoMember(6)] internal int UsablePerSecond; + [ProtoMember(7)] internal int UsablePerMinute; + [ProtoMember(8)] internal float Overflow; + [ProtoMember(9)] internal float Effectiveness; + [ProtoMember(10)] internal float ProtectionMin; + [ProtoMember(11)] internal float ProtectionMax; + } + } + + [ProtoContract] + public class ArmorDefinition + { + internal enum ArmorType + { + Light, + Heavy, + NonArmor, + } + + [ProtoMember(1)] internal string[] SubtypeIds; + [ProtoMember(2)] internal ArmorType Kind; + [ProtoMember(3)] internal double KineticResistance; + [ProtoMember(4)] internal double EnergeticResistance; + } + + [ProtoContract] + public class WeaponDefinition + { + [ProtoMember(1)] internal ModelAssignmentsDef Assignments; + [ProtoMember(2)] internal TargetingDef Targeting; + [ProtoMember(3)] internal AnimationDef Animations; + [ProtoMember(4)] internal HardPointDef HardPoint; + [ProtoMember(5)] internal AmmoDef[] Ammos; + [ProtoMember(6)] internal string ModPath; + [ProtoMember(7)] internal Dictionary Upgrades; + + [ProtoContract] + public struct ModelAssignmentsDef + { + [ProtoMember(1)] internal MountPointDef[] MountPoints; + [ProtoMember(2)] internal string[] Muzzles; + [ProtoMember(3)] internal string Ejector; + [ProtoMember(4)] internal string Scope; + + [ProtoContract] + public struct MountPointDef + { + [ProtoMember(1)] internal string SubtypeId; + [ProtoMember(2)] internal string SpinPartId; + [ProtoMember(3)] internal string MuzzlePartId; + [ProtoMember(4)] internal string AzimuthPartId; + [ProtoMember(5)] internal string ElevationPartId; + [ProtoMember(6)] internal float DurabilityMod; + [ProtoMember(7)] internal string IconName; + } + } + + [ProtoContract] + public struct TargetingDef + { + public enum Threat + { + Projectiles, + Characters, + Grids, + Neutrals, + Meteors, + Other, + ScanNeutralGrid, + ScanFriendlyGrid, + ScanFriendlyCharacter, + ScanRoid, + ScanPlanet, + ScanEnemyCharacter, + ScanEnemyGrid, + ScanNeutralCharacter, + ScanUnOwnedGrid, + ScanOwnersGrid + } + + public enum BlockTypes + { + Any, + Offense, + Utility, + Power, + Production, + Thrust, + Jumping, + Steering + } + + [ProtoMember(1)] internal int TopTargets; + [ProtoMember(2)] internal int TopBlocks; + [ProtoMember(3)] internal double StopTrackingSpeed; + [ProtoMember(4)] internal float MinimumDiameter; + [ProtoMember(5)] internal float MaximumDiameter; + [ProtoMember(6)] internal bool ClosestFirst; + [ProtoMember(7)] internal BlockTypes[] SubSystems; + [ProtoMember(8)] internal Threat[] Threats; + [ProtoMember(9)] internal float MaxTargetDistance; + [ProtoMember(10)] internal float MinTargetDistance; + [ProtoMember(11)] internal bool IgnoreDumbProjectiles; + [ProtoMember(12)] internal bool LockedSmartOnly; + [ProtoMember(13)] internal bool UniqueTargetPerWeapon; + [ProtoMember(14)] internal int MaxTrackingTime; + [ProtoMember(15)] internal bool ShootBlanks; + [ProtoMember(19)] internal CommunicationDef Communications; + [ProtoMember(20)] internal bool FocusOnly; + [ProtoMember(21)] internal bool EvictUniqueTargets; + [ProtoMember(22)] internal int CycleTargets; + [ProtoMember(23)] internal int CycleBlocks; + + [ProtoContract] + public struct CommunicationDef + { + public enum Comms + { + NoComms, + BroadCast, + Relay, + Jamming, + RelayAndBroadCast, + } + + public enum SecurityMode + { + Public, + Private, + Secure, + } + + [ProtoMember(1)] internal bool StoreTargets; + [ProtoMember(2)] internal int StorageLimit; + [ProtoMember(3)] internal string StorageLocation; + [ProtoMember(4)] internal Comms Mode; + [ProtoMember(5)] internal SecurityMode Security; + [ProtoMember(6)] internal string BroadCastChannel; + [ProtoMember(7)] internal double BroadCastRange; + [ProtoMember(8)] internal double JammingStrength; + [ProtoMember(9)] internal string RelayChannel; + [ProtoMember(10)] internal double RelayRange; + [ProtoMember(11)] internal bool TargetPersists; + [ProtoMember(12)] internal bool StoreLimitPerBlock; + [ProtoMember(13)] internal int MaxConnections; + } + } + + + [ProtoContract] + public struct AnimationDef + { + [ProtoMember(1)] internal PartAnimationSetDef[] AnimationSets; + [ProtoMember(2)] internal PartEmissive[] Emissives; + [ProtoMember(3)] internal string[] HeatingEmissiveParts; + [ProtoMember(4)] internal Dictionary EventParticles; + + [ProtoContract(IgnoreListHandling = true)] + public struct PartAnimationSetDef + { + public enum EventTriggers + { + Reloading, + Firing, + Tracking, + Overheated, + TurnOn, + TurnOff, + BurstReload, + NoMagsToLoad, + PreFire, + EmptyOnGameLoad, + StopFiring, + StopTracking, + LockDelay, + } + + public enum ResetConditions + { + None, + Home, + Off, + On, + Reloaded + } + + [ProtoMember(1)] internal string[] SubpartId; + [ProtoMember(2)] internal string BarrelId; + [ProtoMember(3)] internal uint StartupFireDelay; + [ProtoMember(4)] internal Dictionary AnimationDelays; + [ProtoMember(5)] internal EventTriggers[] Reverse; + [ProtoMember(6)] internal EventTriggers[] Loop; + [ProtoMember(7)] internal Dictionary EventMoveSets; + [ProtoMember(8)] internal EventTriggers[] TriggerOnce; + [ProtoMember(9)] internal EventTriggers[] ResetEmissives; + [ProtoMember(10)] internal ResetConditions Resets; + + } + + [ProtoContract] + public struct PartEmissive + { + [ProtoMember(1)] internal string EmissiveName; + [ProtoMember(2)] internal string[] EmissivePartNames; + [ProtoMember(3)] internal bool CycleEmissivesParts; + [ProtoMember(4)] internal bool LeavePreviousOn; + [ProtoMember(5)] internal Vector4[] Colors; + [ProtoMember(6)] internal float[] IntensityRange; + } + [ProtoContract] + public struct EventParticle + { + [ProtoMember(1)] internal string[] EmptyNames; + [ProtoMember(2)] internal string[] MuzzleNames; + [ProtoMember(3)] internal ParticleDef Particle; + [ProtoMember(4)] internal uint StartDelay; + [ProtoMember(5)] internal uint LoopDelay; + [ProtoMember(6)] internal bool ForceStop; + } + [ProtoContract] + internal struct RelMove + { + public enum MoveType + { + Linear, + ExpoDecay, + ExpoGrowth, + Delay, + Show, //instant or fade + Hide, //instant or fade + } + + [ProtoMember(1)] internal MoveType MovementType; + [ProtoMember(2)] internal XYZ[] LinearPoints; + [ProtoMember(3)] internal XYZ Rotation; + [ProtoMember(4)] internal XYZ RotAroundCenter; + [ProtoMember(5)] internal uint TicksToMove; + [ProtoMember(6)] internal string CenterEmpty; + [ProtoMember(7)] internal bool Fade; + [ProtoMember(8)] internal string EmissiveName; + + [ProtoContract] + internal struct XYZ + { + [ProtoMember(1)] internal double x; + [ProtoMember(2)] internal double y; + [ProtoMember(3)] internal double z; + } + } + } + + [ProtoContract] + public struct UpgradeValues + { + [ProtoMember(1)] internal string[] Ammo; + [ProtoMember(2)] internal Dependency[] Dependencies; + [ProtoMember(3)] internal int RateOfFireMod; + [ProtoMember(4)] internal int BarrelsPerShotMod; + [ProtoMember(5)] internal int ReloadMod; + [ProtoMember(6)] internal int MaxHeatMod; + [ProtoMember(7)] internal int HeatSinkRateMod; + [ProtoMember(8)] internal int ShotsInBurstMod; + [ProtoMember(9)] internal int DelayAfterBurstMod; + [ProtoMember(10)] internal int AmmoPriority; + + [ProtoContract] + public struct Dependency + { + internal string SubtypeId; + internal int Quanity; + } + } + + [ProtoContract] + public struct HardPointDef + { + public enum Prediction + { + Off, + Basic, + Accurate, + Advanced, + } + + [ProtoMember(1)] internal string PartName; + [ProtoMember(2)] internal int DelayCeaseFire; + [ProtoMember(3)] internal float DeviateShotAngle; + [ProtoMember(4)] internal double AimingTolerance; + [ProtoMember(5)] internal Prediction AimLeadingPrediction; + [ProtoMember(6)] internal LoadingDef Loading; + [ProtoMember(7)] internal AiDef Ai; + [ProtoMember(8)] internal HardwareDef HardWare; + [ProtoMember(9)] internal UiDef Ui; + [ProtoMember(10)] internal HardPointAudioDef Audio; + [ProtoMember(11)] internal HardPointParticleDef Graphics; + [ProtoMember(12)] internal OtherDef Other; + [ProtoMember(13)] internal bool AddToleranceToTracking; + [ProtoMember(14)] internal bool CanShootSubmerged; + [ProtoMember(15)] internal bool NpcSafe; + [ProtoMember(16)] internal bool ScanTrackOnly; + + [ProtoContract] + public struct LoadingDef + { + [ProtoMember(1)] internal int ReloadTime; + [ProtoMember(2)] internal int RateOfFire; + [ProtoMember(3)] internal int BarrelsPerShot; + [ProtoMember(4)] internal int SkipBarrels; + [ProtoMember(5)] internal int TrajectilesPerBarrel; + [ProtoMember(6)] internal int HeatPerShot; + [ProtoMember(7)] internal int MaxHeat; + [ProtoMember(8)] internal int HeatSinkRate; + [ProtoMember(9)] internal float Cooldown; + [ProtoMember(10)] internal int DelayUntilFire; + [ProtoMember(11)] internal int ShotsInBurst; + [ProtoMember(12)] internal int DelayAfterBurst; + [ProtoMember(13)] internal bool DegradeRof; + [ProtoMember(14)] internal int BarrelSpinRate; + [ProtoMember(15)] internal bool FireFull; + [ProtoMember(16)] internal bool GiveUpAfter; + [ProtoMember(17)] internal bool DeterministicSpin; + [ProtoMember(18)] internal bool SpinFree; + [ProtoMember(19)] internal bool StayCharged; + [ProtoMember(20)] internal int MagsToLoad; + [ProtoMember(21)] internal int MaxActiveProjectiles; + [ProtoMember(22)] internal int MaxReloads; + [ProtoMember(23)] internal bool GoHomeToReload; + [ProtoMember(24)] internal bool DropTargetUntilLoaded; + } + + + [ProtoContract] + public struct UiDef + { + [ProtoMember(1)] internal bool RateOfFire; + [ProtoMember(2)] internal bool DamageModifier; + [ProtoMember(3)] internal bool ToggleGuidance; + [ProtoMember(4)] internal bool EnableOverload; + [ProtoMember(5)] internal bool AlternateUi; + [ProtoMember(6)] internal bool DisableStatus; + } + + + [ProtoContract] + public struct AiDef + { + [ProtoMember(1)] internal bool TrackTargets; + [ProtoMember(2)] internal bool TurretAttached; + [ProtoMember(3)] internal bool TurretController; + [ProtoMember(4)] internal bool PrimaryTracking; + [ProtoMember(5)] internal bool LockOnFocus; + [ProtoMember(6)] internal bool SuppressFire; + [ProtoMember(7)] internal bool OverrideLeads; + [ProtoMember(8)] internal int DefaultLeadGroup; + [ProtoMember(9)] internal bool TargetGridCenter; + } + + [ProtoContract] + public struct HardwareDef + { + public enum HardwareType + { + BlockWeapon = 0, + HandWeapon = 1, + Phantom = 6, + } + + [ProtoMember(1)] internal float RotateRate; + [ProtoMember(2)] internal float ElevateRate; + [ProtoMember(3)] internal Vector3D Offset; + [ProtoMember(4)] internal bool FixedOffset; + [ProtoMember(5)] internal int MaxAzimuth; + [ProtoMember(6)] internal int MinAzimuth; + [ProtoMember(7)] internal int MaxElevation; + [ProtoMember(8)] internal int MinElevation; + [ProtoMember(9)] internal float InventorySize; + [ProtoMember(10)] internal HardwareType Type; + [ProtoMember(11)] internal int HomeAzimuth; + [ProtoMember(12)] internal int HomeElevation; + [ProtoMember(13)] internal CriticalDef CriticalReaction; + [ProtoMember(14)] internal float IdlePower; + + [ProtoContract] + public struct CriticalDef + { + [ProtoMember(1)] internal bool Enable; + [ProtoMember(2)] internal int DefaultArmedTimer; + [ProtoMember(3)] internal bool PreArmed; + [ProtoMember(4)] internal bool TerminalControls; + [ProtoMember(5)] internal string AmmoRound; + } + } + + [ProtoContract] + public struct HardPointAudioDef + { + [ProtoMember(1)] internal string ReloadSound; + [ProtoMember(2)] internal string NoAmmoSound; + [ProtoMember(3)] internal string HardPointRotationSound; + [ProtoMember(4)] internal string BarrelRotationSound; + [ProtoMember(5)] internal string FiringSound; + [ProtoMember(6)] internal bool FiringSoundPerShot; + [ProtoMember(7)] internal string PreFiringSound; + [ProtoMember(8)] internal uint FireSoundEndDelay; + [ProtoMember(9)] internal bool FireSoundNoBurst; + } + + [ProtoContract] + public struct OtherDef + { + [ProtoMember(1)] internal int ConstructPartCap; + [ProtoMember(2)] internal int EnergyPriority; + [ProtoMember(3)] internal int RotateBarrelAxis; + [ProtoMember(4)] internal bool MuzzleCheck; + [ProtoMember(5)] internal bool Debug; + [ProtoMember(6)] internal double RestrictionRadius; + [ProtoMember(7)] internal bool CheckInflatedBox; + [ProtoMember(8)] internal bool CheckForAnyWeapon; + [ProtoMember(9)] internal bool DisableLosCheck; + [ProtoMember(10)] internal bool NoVoxelLosCheck; + } + + [ProtoContract] + public struct HardPointParticleDef + { + [ProtoMember(1)] internal ParticleDef Effect1; + [ProtoMember(2)] internal ParticleDef Effect2; + } + } + + [ProtoContract] + public class AmmoDef + { + [ProtoMember(1)] internal string AmmoMagazine; + [ProtoMember(2)] internal string AmmoRound; + [ProtoMember(3)] internal bool HybridRound; + [ProtoMember(4)] internal float EnergyCost; + [ProtoMember(5)] internal float BaseDamage; + [ProtoMember(6)] internal float Mass; + [ProtoMember(7)] internal float Health; + [ProtoMember(8)] internal float BackKickForce; + [ProtoMember(9)] internal DamageScaleDef DamageScales; + [ProtoMember(10)] internal ShapeDef Shape; + [ProtoMember(11)] internal ObjectsHitDef ObjectsHit; + [ProtoMember(12)] internal TrajectoryDef Trajectory; + [ProtoMember(13)] internal AreaDamageDef AreaEffect; + [ProtoMember(14)] internal BeamDef Beams; + [ProtoMember(15)] internal FragmentDef Fragment; + [ProtoMember(16)] internal GraphicDef AmmoGraphics; + [ProtoMember(17)] internal AmmoAudioDef AmmoAudio; + [ProtoMember(18)] internal bool HardPointUsable; + [ProtoMember(19)] internal PatternDef Pattern; + [ProtoMember(20)] internal int EnergyMagazineSize; + [ProtoMember(21)] internal float DecayPerShot; + [ProtoMember(22)] internal EjectionDef Ejection; + [ProtoMember(23)] internal bool IgnoreWater; + [ProtoMember(24)] internal AreaOfDamageDef AreaOfDamage; + [ProtoMember(25)] internal EwarDef Ewar; + [ProtoMember(26)] internal bool IgnoreVoxels; + [ProtoMember(27)] internal bool Synchronize; + [ProtoMember(28)] internal double HeatModifier; + [ProtoMember(29)] internal bool NpcSafe; + [ProtoMember(30)] internal SynchronizeDef Sync; + [ProtoMember(31)] internal bool NoGridOrArmorScaling; + + [ProtoContract] + public struct SynchronizeDef + { + [ProtoMember(1)] internal bool Full; + [ProtoMember(2)] internal bool PointDefense; + [ProtoMember(3)] internal bool OnHitDeath; + } + + [ProtoContract] + public struct DamageScaleDef + { + + [ProtoMember(1)] internal float MaxIntegrity; + [ProtoMember(2)] internal bool DamageVoxels; + [ProtoMember(3)] internal float Characters; + [ProtoMember(4)] internal bool SelfDamage; + [ProtoMember(5)] internal GridSizeDef Grids; + [ProtoMember(6)] internal ArmorDef Armor; + [ProtoMember(7)] internal CustomScalesDef Custom; + [ProtoMember(8)] internal ShieldDef Shields; + [ProtoMember(9)] internal FallOffDef FallOff; + [ProtoMember(10)] internal double HealthHitModifier; + [ProtoMember(11)] internal double VoxelHitModifier; + [ProtoMember(12)] internal DamageTypes DamageType; + [ProtoMember(13)] internal DeformDef Deform; + + [ProtoContract] + public struct FallOffDef + { + [ProtoMember(1)] internal float Distance; + [ProtoMember(2)] internal float MinMultipler; + } + + [ProtoContract] + public struct GridSizeDef + { + [ProtoMember(1)] internal float Large; + [ProtoMember(2)] internal float Small; + } + + [ProtoContract] + public struct ArmorDef + { + [ProtoMember(1)] internal float Armor; + [ProtoMember(2)] internal float Heavy; + [ProtoMember(3)] internal float Light; + [ProtoMember(4)] internal float NonArmor; + } + + [ProtoContract] + public struct CustomScalesDef + { + internal enum SkipMode + { + NoSkip, + Inclusive, + Exclusive, + } + + [ProtoMember(1)] internal CustomBlocksDef[] Types; + [ProtoMember(2)] internal bool IgnoreAllOthers; + [ProtoMember(3)] internal SkipMode SkipOthers; + } + + [ProtoContract] + public struct DamageTypes + { + internal enum Damage + { + Energy, + Kinetic, + } + + [ProtoMember(1)] internal Damage Base; + [ProtoMember(2)] internal Damage AreaEffect; + [ProtoMember(3)] internal Damage Detonation; + [ProtoMember(4)] internal Damage Shield; + } + + [ProtoContract] + public struct ShieldDef + { + internal enum ShieldType + { + Default, + Heal, + Bypass, + EmpRetired, + } + + [ProtoMember(1)] internal float Modifier; + [ProtoMember(2)] internal ShieldType Type; + [ProtoMember(3)] internal float BypassModifier; + [ProtoMember(4)] internal double HeatModifier; + } + + [ProtoContract] + public struct DeformDef + { + internal enum DeformTypes + { + HitBlock, + AllDamagedBlocks, + NoDeform, + } + + [ProtoMember(1)] internal DeformTypes DeformType; + [ProtoMember(2)] internal int DeformDelay; + } + } + + [ProtoContract] + public struct ShapeDef + { + public enum Shapes + { + LineShape, + SphereShape, + } + + [ProtoMember(1)] internal Shapes Shape; + [ProtoMember(2)] internal double Diameter; + } + + [ProtoContract] + public struct ObjectsHitDef + { + [ProtoMember(1)] internal int MaxObjectsHit; + [ProtoMember(2)] internal bool CountBlocks; + } + + + [ProtoContract] + public struct CustomBlocksDef + { + [ProtoMember(1)] internal string SubTypeId; + [ProtoMember(2)] internal float Modifier; + } + + [ProtoContract] + public struct GraphicDef + { + [ProtoMember(1)] internal bool ShieldHitDraw; + [ProtoMember(2)] internal float VisualProbability; + [ProtoMember(3)] internal string ModelName; + [ProtoMember(4)] internal AmmoParticleDef Particles; + [ProtoMember(5)] internal LineDef Lines; + [ProtoMember(6)] internal DecalDef Decals; + + [ProtoContract] + public struct AmmoParticleDef + { + [ProtoMember(1)] internal ParticleDef Ammo; + [ProtoMember(2)] internal ParticleDef Hit; + [ProtoMember(3)] internal ParticleDef Eject; + } + + [ProtoContract] + public struct LineDef + { + internal enum Texture + { + Normal, + Cycle, + Chaos, + Wave, + } + public enum FactionColor + { + DontUse, + Foreground, + Background, + } + + [ProtoMember(1)] internal TracerBaseDef Tracer; + [ProtoMember(2)] internal string TracerMaterial; + [ProtoMember(3)] internal Randomize ColorVariance; + [ProtoMember(4)] internal Randomize WidthVariance; + [ProtoMember(5)] internal TrailDef Trail; + [ProtoMember(6)] internal OffsetEffectDef OffsetEffect; + [ProtoMember(7)] internal bool DropParentVelocity; + + [ProtoContract] + public struct OffsetEffectDef + { + [ProtoMember(1)] internal double MaxOffset; + [ProtoMember(2)] internal double MinLength; + [ProtoMember(3)] internal double MaxLength; + } + + [ProtoContract] + public struct TracerBaseDef + { + [ProtoMember(1)] internal bool Enable; + [ProtoMember(2)] internal float Length; + [ProtoMember(3)] internal float Width; + [ProtoMember(4)] internal Vector4 Color; + [ProtoMember(5)] internal uint VisualFadeStart; + [ProtoMember(6)] internal uint VisualFadeEnd; + [ProtoMember(7)] internal SegmentDef Segmentation; + [ProtoMember(8)] internal string[] Textures; + [ProtoMember(9)] internal Texture TextureMode; + [ProtoMember(10)] internal bool AlwaysDraw; + [ProtoMember(11)] internal FactionColor FactionColor; + + [ProtoContract] + public struct SegmentDef + { + [ProtoMember(1)] internal string Material; //retired + [ProtoMember(2)] internal double SegmentLength; + [ProtoMember(3)] internal double SegmentGap; + [ProtoMember(4)] internal double Speed; + [ProtoMember(5)] internal Vector4 Color; + [ProtoMember(6)] internal double WidthMultiplier; + [ProtoMember(7)] internal bool Reverse; + [ProtoMember(8)] internal bool UseLineVariance; + [ProtoMember(9)] internal Randomize ColorVariance; + [ProtoMember(10)] internal Randomize WidthVariance; + [ProtoMember(11)] internal string[] Textures; + [ProtoMember(12)] internal bool Enable; + [ProtoMember(13)] internal FactionColor FactionColor; + } + } + + [ProtoContract] + public struct TrailDef + { + [ProtoMember(1)] internal bool Enable; + [ProtoMember(2)] internal string Material; + [ProtoMember(3)] internal int DecayTime; + [ProtoMember(4)] internal Vector4 Color; + [ProtoMember(5)] internal bool Back; + [ProtoMember(6)] internal float CustomWidth; + [ProtoMember(7)] internal bool UseWidthVariance; + [ProtoMember(8)] internal bool UseColorFade; + [ProtoMember(9)] internal string[] Textures; + [ProtoMember(10)] internal Texture TextureMode; + [ProtoMember(11)] internal bool AlwaysDraw; + [ProtoMember(12)] internal FactionColor FactionColor; + } + } + + [ProtoContract] + public struct DecalDef + { + + [ProtoMember(1)] internal int MaxAge; + [ProtoMember(2)] internal TextureMapDef[] Map; + + [ProtoContract] + public struct TextureMapDef + { + [ProtoMember(1)] internal string HitMaterial; + [ProtoMember(2)] internal string DecalMaterial; + } + } + } + + [ProtoContract] + public struct BeamDef + { + [ProtoMember(1)] internal bool Enable; + [ProtoMember(2)] internal bool ConvergeBeams; + [ProtoMember(3)] internal bool VirtualBeams; + [ProtoMember(4)] internal bool RotateRealBeam; + [ProtoMember(5)] internal bool OneParticle; + [ProtoMember(6)] internal bool FakeVoxelHits; + } + + [ProtoContract] + public struct FragmentDef + { + [ProtoMember(1)] internal string AmmoRound; + [ProtoMember(2)] internal int Fragments; + [ProtoMember(3)] internal float Radial; + [ProtoMember(4)] internal float BackwardDegrees; + [ProtoMember(5)] internal float Degrees; + [ProtoMember(6)] internal bool Reverse; + [ProtoMember(7)] internal bool IgnoreArming; + [ProtoMember(8)] internal bool DropVelocity; + [ProtoMember(9)] internal float Offset; + [ProtoMember(10)] internal int MaxChildren; + [ProtoMember(11)] internal TimedSpawnDef TimedSpawns; + [ProtoMember(12)] internal bool FireSound; + [ProtoMember(13)] internal Vector3D AdvOffset; + [ProtoMember(14)] internal bool ArmWhenHit; + + [ProtoContract] + public struct TimedSpawnDef + { + public enum PointTypes + { + Direct, + Lead, + Predict, + } + + [ProtoMember(1)] internal bool Enable; + [ProtoMember(2)] internal int Interval; + [ProtoMember(3)] internal int StartTime; + [ProtoMember(4)] internal int MaxSpawns; + [ProtoMember(5)] internal double Proximity; + [ProtoMember(6)] internal bool ParentDies; + [ProtoMember(7)] internal bool PointAtTarget; + [ProtoMember(8)] internal int GroupSize; + [ProtoMember(9)] internal int GroupDelay; + [ProtoMember(10)] internal PointTypes PointType; + } + } + + [ProtoContract] + public struct PatternDef + { + public enum PatternModes + { + Never, + Weapon, + Fragment, + Both, + } + + + [ProtoMember(1)] internal string[] Patterns; + [ProtoMember(2)] internal bool Enable; + [ProtoMember(3)] internal float TriggerChance; + [ProtoMember(4)] internal bool SkipParent; + [ProtoMember(5)] internal bool Random; + [ProtoMember(6)] internal int RandomMin; + [ProtoMember(7)] internal int RandomMax; + [ProtoMember(8)] internal int PatternSteps; + [ProtoMember(9)] internal PatternModes Mode; + } + + [ProtoContract] + public struct EjectionDef + { + public enum SpawnType + { + Item, + Particle, + } + [ProtoMember(1)] internal float Speed; + [ProtoMember(2)] internal float SpawnChance; + [ProtoMember(3)] internal SpawnType Type; + [ProtoMember(4)] internal ComponentDef CompDef; + + [ProtoContract] + public struct ComponentDef + { + [ProtoMember(1)] internal string ItemName; + [ProtoMember(2)] internal int ItemLifeTime; + [ProtoMember(3)] internal int Delay; + } + } + + [ProtoContract] + public struct AreaOfDamageDef + { + public enum Falloff + { + Legacy, + NoFalloff, + Linear, + Curve, + InvCurve, + Squeeze, + Pooled, + Exponential, + } + + public enum AoeShape + { + Round, + Diamond, + } + + [ProtoMember(1)] internal ByBlockHitDef ByBlockHit; + [ProtoMember(2)] internal EndOfLifeDef EndOfLife; + + [ProtoContract] + public struct ByBlockHitDef + { + [ProtoMember(1)] internal bool Enable; + [ProtoMember(2)] internal double Radius; + [ProtoMember(3)] internal float Damage; + [ProtoMember(4)] internal float Depth; + [ProtoMember(5)] internal float MaxAbsorb; + [ProtoMember(6)] internal Falloff Falloff; + [ProtoMember(7)] internal AoeShape Shape; + } + + [ProtoContract] + public struct EndOfLifeDef + { + [ProtoMember(1)] internal bool Enable; + [ProtoMember(2)] internal double Radius; + [ProtoMember(3)] internal float Damage; + [ProtoMember(4)] internal float Depth; + [ProtoMember(5)] internal float MaxAbsorb; + [ProtoMember(6)] internal Falloff Falloff; + [ProtoMember(7)] internal bool ArmOnlyOnHit; + [ProtoMember(8)] internal int MinArmingTime; + [ProtoMember(9)] internal bool NoVisuals; + [ProtoMember(10)] internal bool NoSound; + [ProtoMember(11)] internal float ParticleScale; + [ProtoMember(12)] internal string CustomParticle; + [ProtoMember(13)] internal string CustomSound; + [ProtoMember(14)] internal AoeShape Shape; + } + } + + [ProtoContract] + public struct EwarDef + { + public enum EwarType + { + AntiSmart, + JumpNull, + EnergySink, + Anchor, + Emp, + Offense, + Nav, + Dot, + Push, + Pull, + Tractor, + } + + public enum EwarMode + { + Effect, + Field, + } + + [ProtoMember(1)] internal bool Enable; + [ProtoMember(2)] internal EwarType Type; + [ProtoMember(3)] internal EwarMode Mode; + [ProtoMember(4)] internal float Strength; + [ProtoMember(5)] internal double Radius; + [ProtoMember(6)] internal int Duration; + [ProtoMember(7)] internal bool StackDuration; + [ProtoMember(8)] internal bool Depletable; + [ProtoMember(9)] internal int MaxStacks; + [ProtoMember(10)] internal bool NoHitParticle; + [ProtoMember(11)] internal PushPullDef Force; + [ProtoMember(12)] internal FieldDef Field; + + + [ProtoContract] + public struct FieldDef + { + [ProtoMember(1)] internal int Interval; + [ProtoMember(2)] internal int PulseChance; + [ProtoMember(3)] internal int GrowTime; + [ProtoMember(4)] internal bool HideModel; + [ProtoMember(5)] internal bool ShowParticle; + [ProtoMember(6)] internal double TriggerRange; + [ProtoMember(7)] internal ParticleDef Particle; + } + + [ProtoContract] + public struct PushPullDef + { + public enum Force + { + ProjectileLastPosition, + ProjectileOrigin, + HitPosition, + TargetCenter, + TargetCenterOfMass, + } + + [ProtoMember(1)] internal Force ForceFrom; + [ProtoMember(2)] internal Force ForceTo; + [ProtoMember(3)] internal Force Position; + [ProtoMember(4)] internal bool DisableRelativeMass; + [ProtoMember(5)] internal double TractorRange; + [ProtoMember(6)] internal bool ShooterFeelsForce; + } + } + + + [ProtoContract] + public struct AreaDamageDef + { + public enum AreaEffectType + { + Disabled, + Explosive, + Radiant, + AntiSmart, + JumpNullField, + EnergySinkField, + AnchorField, + EmpField, + OffenseField, + NavField, + DotField, + PushField, + PullField, + TractorField, + } + + [ProtoMember(1)] internal double AreaEffectRadius; + [ProtoMember(2)] internal float AreaEffectDamage; + [ProtoMember(3)] internal AreaEffectType AreaEffect; + [ProtoMember(4)] internal PulseDef Pulse; + [ProtoMember(5)] internal DetonateDef Detonation; + [ProtoMember(6)] internal ExplosionDef Explosions; + [ProtoMember(7)] internal EwarFieldsDef EwarFields; + [ProtoMember(8)] internal AreaInfluence Base; + + [ProtoContract] + public struct AreaInfluence + { + [ProtoMember(1)] internal double Radius; + [ProtoMember(2)] internal float EffectStrength; + } + + + [ProtoContract] + public struct PulseDef + { + [ProtoMember(1)] internal int Interval; + [ProtoMember(2)] internal int PulseChance; + [ProtoMember(3)] internal int GrowTime; + [ProtoMember(4)] internal bool HideModel; + [ProtoMember(5)] internal bool ShowParticle; + [ProtoMember(6)] internal ParticleDef Particle; + } + + [ProtoContract] + public struct EwarFieldsDef + { + [ProtoMember(1)] internal int Duration; + [ProtoMember(2)] internal bool StackDuration; + [ProtoMember(3)] internal bool Depletable; + [ProtoMember(4)] internal double TriggerRange; + [ProtoMember(5)] internal int MaxStacks; + [ProtoMember(6)] internal PushPullDef Force; + [ProtoMember(7)] internal bool DisableParticleEffect; + + [ProtoContract] + public struct PushPullDef + { + public enum Force + { + ProjectileLastPosition, + ProjectileOrigin, + HitPosition, + TargetCenter, + TargetCenterOfMass, + } + + [ProtoMember(1)] internal Force ForceFrom; + [ProtoMember(2)] internal Force ForceTo; + [ProtoMember(3)] internal Force Position; + [ProtoMember(4)] internal bool DisableRelativeMass; + [ProtoMember(5)] internal double TractorRange; + [ProtoMember(6)] internal bool ShooterFeelsForce; + } + } + + [ProtoContract] + public struct DetonateDef + { + [ProtoMember(1)] internal bool DetonateOnEnd; + [ProtoMember(2)] internal bool ArmOnlyOnHit; + [ProtoMember(3)] internal float DetonationRadius; + [ProtoMember(4)] internal float DetonationDamage; + [ProtoMember(5)] internal int MinArmingTime; + } + + [ProtoContract] + public struct ExplosionDef + { + [ProtoMember(1)] internal bool NoVisuals; + [ProtoMember(2)] internal bool NoSound; + [ProtoMember(3)] internal float Scale; + [ProtoMember(4)] internal string CustomParticle; + [ProtoMember(5)] internal string CustomSound; + [ProtoMember(6)] internal bool NoShrapnel; + [ProtoMember(7)] internal bool NoDeformation; + } + } + + [ProtoContract] + public struct AmmoAudioDef + { + [ProtoMember(1)] internal string TravelSound; + [ProtoMember(2)] internal string HitSound; + [ProtoMember(3)] internal float HitPlayChance; + [ProtoMember(4)] internal bool HitPlayShield; + [ProtoMember(5)] internal string VoxelHitSound; + [ProtoMember(6)] internal string PlayerHitSound; + [ProtoMember(7)] internal string FloatingHitSound; + [ProtoMember(8)] internal string ShieldHitSound; + [ProtoMember(9)] internal string ShotSound; + } + + [ProtoContract] + public struct TrajectoryDef + { + internal enum GuidanceType + { + None, + Remote, + TravelTo, + Smart, + DetectTravelTo, + DetectSmart, + DetectFixed, + DroneAdvanced, + } + + [ProtoMember(1)] internal float MaxTrajectory; + [ProtoMember(2)] internal float AccelPerSec; + [ProtoMember(3)] internal float DesiredSpeed; + [ProtoMember(4)] internal float TargetLossDegree; + [ProtoMember(5)] internal int TargetLossTime; + [ProtoMember(6)] internal int MaxLifeTime; + [ProtoMember(7)] internal int DeaccelTime; + [ProtoMember(8)] internal Randomize SpeedVariance; + [ProtoMember(9)] internal Randomize RangeVariance; + [ProtoMember(10)] internal GuidanceType Guidance; + [ProtoMember(11)] internal SmartsDef Smarts; + [ProtoMember(12)] internal MinesDef Mines; + [ProtoMember(13)] internal float GravityMultiplier; + [ProtoMember(14)] internal uint MaxTrajectoryTime; + [ProtoMember(15)] internal ApproachDef[] Approaches; + [ProtoMember(16)] internal double TotalAcceleration; + + [ProtoContract] + public struct SmartsDef + { + [ProtoMember(1)] internal double Inaccuracy; + [ProtoMember(2)] internal double Aggressiveness; + [ProtoMember(3)] internal double MaxLateralThrust; + [ProtoMember(4)] internal double TrackingDelay; + [ProtoMember(5)] internal int MaxChaseTime; + [ProtoMember(6)] internal bool OverideTarget; + [ProtoMember(7)] internal int MaxTargets; + [ProtoMember(8)] internal bool NoTargetExpire; + [ProtoMember(9)] internal bool Roam; + [ProtoMember(10)] internal bool KeepAliveAfterTargetLoss; + [ProtoMember(11)] internal float OffsetRatio; + [ProtoMember(12)] internal int OffsetTime; + [ProtoMember(13)] internal bool CheckFutureIntersection; + [ProtoMember(14)] internal double NavAcceleration; + [ProtoMember(15)] internal bool AccelClearance; + [ProtoMember(16)] internal double SteeringLimit; + [ProtoMember(17)] internal bool FocusOnly; + [ProtoMember(18)] internal double OffsetMinRange; + [ProtoMember(19)] internal bool FocusEviction; + [ProtoMember(20)] internal double ScanRange; + [ProtoMember(21)] internal bool NoSteering; + [ProtoMember(22)] internal double FutureIntersectionRange; + [ProtoMember(23)] internal double MinTurnSpeed; + [ProtoMember(24)] internal bool NoTargetApproach; + [ProtoMember(25)] internal bool AltNavigation; + } + + [ProtoContract] + public struct ApproachDef + { + public enum ReInitCondition + { + Wait, + MoveToPrevious, + MoveToNext, + ForceRestart, + } + + public enum Conditions + { + Ignore, + Spawn, + DistanceFromPositionC, + Lifetime, + DesiredElevation, + MinTravelRequired, + MaxTravelRequired, + Deadtime, + DistanceToPositionC, + NextTimedSpawn, + RelativeLifetime, + RelativeDeadtime, + SinceTimedSpawn, + RelativeSpawns, + EnemyTargetLoss, + RelativeHealthLost, + HealthRemaining, + DistanceFromPositionB, + DistanceToPositionB, + DistanceFromTarget, + DistanceToTarget, + DistanceFromEndTrajectory, + DistanceToEndTrajectory, + } + + public enum UpRelativeTo + { + UpRelativeToBlock, + UpRelativeToGravity, + UpTargetDirection, + UpTargetVelocity, + UpStoredStartDontUse, + UpStoredEndDontUse, + UpStoredStartPosition, + UpStoredEndPosition, + UpStoredStartLocalPosition, + UpStoredEndLocalPosition, + UpRelativeToShooter, + UpOriginDirection, + UpElevationDirection, + } + + public enum FwdRelativeTo + { + ForwardElevationDirection, + ForwardRelativeToBlock, + ForwardRelativeToGravity, + ForwardTargetDirection, + ForwardTargetVelocity, + ForwardStoredStartDontUse, + ForwardStoredEndDontUse, + ForwardStoredStartPosition, + ForwardStoredEndPosition, + ForwardStoredStartLocalPosition, + ForwardStoredEndLocalPosition, + ForwardRelativeToShooter, + ForwardOriginDirection, + } + + public enum RelativeTo + { + Origin, + Shooter, + Target, + Surface, + MidPoint, + PositionA, + Nothing, + StoredStartDontUse, + StoredEndDontUse, + StoredStartPosition, + StoredEndPosition, + StoredStartLocalPosition, + StoredEndLocalPosition, + } + + public enum ConditionOperators + { + StartEnd_And, + StartEnd_Or, + StartAnd_EndOr, + StartOr_EndAnd, + } + + public enum StageEvents + { + DoNothing, + EndProjectile, + EndProjectileOnRestart, + StoreDontUse, + StorePositionDontUse, + Refund, + StorePositionA, + StorePositionB, + StorePositionC, + } + + [ProtoContract] + public struct WeightedIdListDef + { + + [ProtoMember(1)] public int ApproachId; + [ProtoMember(2)] public Randomize Weight; + [ProtoMember(3)] public double End1WeightMod; + [ProtoMember(4)] public double End2WeightMod; + [ProtoMember(5)] public int MaxRuns; + [ProtoMember(6)] public double End3WeightMod; + } + + [ProtoMember(1)] internal ReInitCondition RestartCondition; + [ProtoMember(2)] internal Conditions StartCondition1; + [ProtoMember(3)] internal Conditions EndCondition1; + [ProtoMember(4)] internal UpRelativeTo Up; + [ProtoMember(5)] internal RelativeTo PositionB; + [ProtoMember(6)] internal double AngleOffset; + [ProtoMember(7)] internal double Start1Value; + [ProtoMember(8)] internal double End1Value; + [ProtoMember(9)] internal double LeadDistance; + [ProtoMember(10)] internal double DesiredElevation; + [ProtoMember(11)] internal double AccelMulti; + [ProtoMember(12)] internal double SpeedCapMulti; + [ProtoMember(13)] internal bool AdjustPositionC; + [ProtoMember(14)] internal bool CanExpireOnceStarted; + [ProtoMember(15)] internal ParticleDef AlternateParticle; + [ProtoMember(16)] internal string AlternateSound; + [ProtoMember(17)] internal string AlternateModel; + [ProtoMember(18)] internal int OnRestartRevertTo; + [ProtoMember(19)] internal ParticleDef StartParticle; + [ProtoMember(20)] internal bool AdjustPositionB; + [ProtoMember(21)] internal bool AdjustUp; + [ProtoMember(22)] internal bool PushLeadByTravelDistance; + [ProtoMember(23)] internal double TrackingDistance; + [ProtoMember(24)] internal Conditions StartCondition2; + [ProtoMember(25)] internal double Start2Value; + [ProtoMember(26)] internal Conditions EndCondition2; + [ProtoMember(27)] internal double End2Value; + [ProtoMember(28)] internal RelativeTo Elevation; + [ProtoMember(29)] internal double ElevationTolerance; + [ProtoMember(30)] internal ConditionOperators Operators; + [ProtoMember(31)] internal StageEvents StartEvent; + [ProtoMember(32)] internal StageEvents EndEvent; + [ProtoMember(33)] internal double TotalAccelMulti; + [ProtoMember(34)] internal double DeAccelMulti; + [ProtoMember(35)] internal bool Orbit; + [ProtoMember(36)] internal double OrbitRadius; + [ProtoMember(37)] internal int OffsetTime; + [ProtoMember(38)] internal double OffsetMinRadius; + [ProtoMember(39)] internal bool NoTimedSpawns; + [ProtoMember(40)] internal double OffsetMaxRadius; + [ProtoMember(41)] internal bool ForceRestart; + [ProtoMember(42)] internal RelativeTo PositionC; + [ProtoMember(43)] internal bool DisableAvoidance; + [ProtoMember(44)] internal int StoredStartId; + [ProtoMember(45)] internal int StoredEndId; + [ProtoMember(46)] internal WeightedIdListDef[] RestartList; + [ProtoMember(47)] internal RelativeTo StoredStartType; + [ProtoMember(48)] internal RelativeTo StoredEndType; + [ProtoMember(49)] internal bool LeadRotateElevatePositionB; + [ProtoMember(50)] internal bool LeadRotateElevatePositionC; + [ProtoMember(51)] internal bool NoElevationLead; + [ProtoMember(52)] internal bool IgnoreAntiSmart; + [ProtoMember(53)] internal double HeatRefund; + [ProtoMember(54)] internal Randomize AngleVariance; + [ProtoMember(55)] internal bool ReloadRefund; + [ProtoMember(56)] internal int ModelRotateTime; + [ProtoMember(57)] internal FwdRelativeTo Forward; + [ProtoMember(58)] internal bool AdjustForward; + [ProtoMember(59)] internal bool ToggleIngoreVoxels; + [ProtoMember(60)] internal bool SelfAvoidance; + [ProtoMember(61)] internal bool TargetAvoidance; + [ProtoMember(62)] internal bool SelfPhasing; + [ProtoMember(63)] internal bool TrajectoryRelativeToB; + [ProtoMember(64)] internal Conditions EndCondition3; + [ProtoMember(65)] internal double End3Value; + [ProtoMember(66)] internal bool SwapNavigationType; + [ProtoMember(67)] internal bool ElevationRelativeToC; + } + + [ProtoContract] + public struct MinesDef + { + [ProtoMember(1)] internal double DetectRadius; + [ProtoMember(2)] internal double DeCloakRadius; + [ProtoMember(3)] internal int FieldTime; + [ProtoMember(4)] internal bool Cloak; + [ProtoMember(5)] internal bool Persist; + } + } + + [ProtoContract] + public struct Randomize + { + [ProtoMember(1)] internal float Start; + [ProtoMember(2)] internal float End; + } + } + + [ProtoContract] + public struct ParticleOptionDef + { + [ProtoMember(1)] internal float Scale; + [ProtoMember(2)] internal float MaxDistance; + [ProtoMember(3)] internal float MaxDuration; + [ProtoMember(4)] internal bool Loop; + [ProtoMember(5)] internal bool Restart; + [ProtoMember(6)] internal float HitPlayChance; + } + + + [ProtoContract] + public struct ParticleDef + { + [ProtoMember(1)] internal string Name; + [ProtoMember(2)] internal Vector4 Color; + [ProtoMember(3)] internal Vector3D Offset; + [ProtoMember(4)] internal ParticleOptionDef Extras; + [ProtoMember(5)] internal bool ApplyToShield; + [ProtoMember(6)] internal bool DisableCameraCulling; + } + } + } + +} \ No newline at end of file diff --git a/Utility Mods/GyroscopicGunsight/Data/Scripts/GyroscopicGunsight/API/CoreSystems/CoreSystemsApiPhantoms.cs b/Utility Mods/GyroscopicGunsight/Data/Scripts/GyroscopicGunsight/API/CoreSystems/CoreSystemsApiPhantoms.cs new file mode 100644 index 000000000..5eddcfaa0 --- /dev/null +++ b/Utility Mods/GyroscopicGunsight/Data/Scripts/GyroscopicGunsight/API/CoreSystems/CoreSystemsApiPhantoms.cs @@ -0,0 +1,113 @@ +using System; +using VRage; +using VRage.Game.Entity; +using VRageMath; + +namespace SC.GyroscopicGunsight.API.CoreSystems +{ + /// + /// https://github.com/sstixrud/CoreSystems/blob/master/BaseData/Scripts/CoreSystems/Api/CoreSystemsApiPhantoms.cs + /// + public partial class WcApi + { + public enum TriggerActions + { + TriggerOff, + TriggerOn, + TriggerOnce, + } + + private Func> _getTargetAssessment; + //private Action>> _getPhantomInfo; + private Action _setTriggerState; + private Action _addMagazines; + private Action _setAmmo; + private Func _closePhantom; + private Func _spawnPhantom; + private Func _setPhantomFocusTarget; + + /// + /// Get information about a particular target relative to this phantom + /// + /// + /// + /// + /// + /// + internal void GetTargetAssessment(MyEntity phantom, MyEntity target, int weapon = 0, bool mustBeInrange = false, bool checkTargetOrb = false) => _getTargetAssessment?.Invoke(phantom, target, weapon, mustBeInrange, checkTargetOrb); + + /// + /// + /// + /// + /// + //internal void GetPhantomInfo(string phantomSubtypeId, ICollection> collection) => _getPhantomInfo?.Invoke(phantomSubtypeId, collection); + + /// + /// Change the phantoms current fire state + /// + /// + /// + internal void SetTriggerState(MyEntity phantom, TriggerActions trigger) => _setTriggerState?.Invoke(phantom, (int)trigger); + + /// + /// Add additional magazines + /// + /// + /// + /// + internal void AddMagazines(MyEntity phantom, int weapon, long quanity) => _addMagazines?.Invoke(phantom, weapon, quanity); + /// + /// Set/switch ammo + /// + /// + /// + /// + internal void SetAmmo(MyEntity phantom, int weapon, string ammoName) => _setAmmo?.Invoke(phantom, weapon, ammoName); + /// + /// Close phantoms, required for phantoms that do not auto close + /// + /// + /// + internal bool ClosePhantom(MyEntity phantom) => _closePhantom?.Invoke(phantom) ?? false; + + /// + /// string: weapon subtypeId + /// uint: max age, defaults to never die, you must issue close request! Max duration is 14400 ticks (4 minutes) + /// bool: close when phantom runs out of ammo + /// long: Number of ammo reloads phantom has per default, prior to you adding more, defaults to long.MaxValue + /// string: name of the ammo you want the phantom to start with, if different than default + /// TriggerActions: TriggerOff, TriggerOn, TriggerOnce + /// float?: scales the model if defined in the WeaponDefinition for this subtypeId + /// MyEntity: Parent's this phantom to another world entity. + /// StringerBuilder: Assign a name to this phantom + /// bool: Add this phantom to the world PrunningStructure + /// bool: Enable shadows for the model. + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + + /// + internal MyEntity SpawnPhantom(string phantomType, uint maxAge = 0, bool closeWhenOutOfAmmo = false, long defaultReloads = long.MaxValue, string ammoOverideName = null, TriggerActions trigger = TriggerActions.TriggerOff, float? modelScale = null, MyEntity parnet = null, bool addToPrunning = false, bool shadows = false, long identityId = 0, bool sync = false) + => _spawnPhantom?.Invoke(phantomType, maxAge, closeWhenOutOfAmmo, defaultReloads, ammoOverideName, (int)trigger, modelScale, parnet, addToPrunning, shadows, identityId, sync) ?? null; + + /// + /// Set/switch ammo + /// focusId is a value between 0 and 1, can have two active focus targets. + /// + /// + /// + /// + internal bool SetPhantomFocusTarget(MyEntity phantom, MyEntity target, int focusId) => _setPhantomFocusTarget?.Invoke(phantom, target, focusId) ?? false; + } +} \ No newline at end of file diff --git a/Utility Mods/GyroscopicGunsight/Data/Scripts/GyroscopicGunsight/GyroscopicGunsightSession.cs b/Utility Mods/GyroscopicGunsight/Data/Scripts/GyroscopicGunsight/GyroscopicGunsightSession.cs new file mode 100644 index 000000000..e6d4dd4a8 --- /dev/null +++ b/Utility Mods/GyroscopicGunsight/Data/Scripts/GyroscopicGunsight/GyroscopicGunsightSession.cs @@ -0,0 +1,94 @@ +using System; +using Sandbox.Graphics.GUI; +using System.Drawing; +using Sandbox.ModAPI; +using SC.GyroscopicGunsight.API.CoreSystems; +using VRage.Game; +using VRage.Game.Components; +using VRage.Game.ModAPI; +using VRage.Render.Scene; +using VRage.Utils; +using VRageMath; +using VRageRender; + +namespace SC.GyroscopicGunsight +{ + [MySessionComponentDescriptor(MyUpdateOrder.NoUpdate)] + internal class GyroscopicGunsightSession : MySessionComponentBase + { + public WcApi WcApi = new WcApi(); + + private MyStringId _gunsightTexture = MyStringId.GetOrCompute("GyroGunsight"); + private Vector4 _gunsightColor = new Vector4(1, 1, 1, 1); + + /// + /// Distance from the camera to the billboard. + /// Ideally, this should be as low as possible. + /// + private const float NearDistance = 4f; + /// + /// Size in meters of the billboard. + /// Seems to have a lower cap of 0.05? + /// + private const float SightSize = 0.1f; + + public override void LoadData() + { + WcApi.Load(); + } + + private float i = 0; + public override void Draw() + { + if (MyAPIGateway.Utilities.IsDedicated || !(WcApi?.IsReady ?? false)) + return; + + try + { + // You'll need to find the weapon and target yourself, those aren't too terribly bad though + // The exact contents of the CalculateDeflection method aren't important to how this is set up, do whatever you need to + DrawGunsight(CalculateDeflection(null, null)); + } + catch (Exception ex) + { + MyLog.Default.WriteLine(ex); + } + } + + /// + /// Squid's fancy leading math + /// + /// + /// + /// + public Vector3D CalculateDeflection(IMyCubeBlock thisWeapon, IMyCubeGrid targetGrid) + { + // TODO + + Vector3D targetPos = targetGrid.GetPosition(); + MatrixD cameraMatrix = MatrixD.Identity; // pretend this is filled out + Vector3D offsetVec = new Vector3D(0, 0, 0); // Your offsets here + + return targetPos + Vector3D.Transform(offsetVec, cameraMatrix.GetOrientation()); + } + + /// + /// Aristeas's unfancy texture math + /// + /// + public void DrawGunsight(Vector3D Position) + { + try + { + var camera = MyAPIGateway.Session.Camera; + Vector3D offsetPosition = (Position - camera.Position).Normalized() * NearDistance + camera.Position; + + MySimpleObjectDraw.DrawLine(offsetPosition + camera.WorldMatrix.Left * SightSize, offsetPosition + camera.WorldMatrix.Right * SightSize, _gunsightTexture, ref _gunsightColor, SightSize); + } + catch (Exception ex) + { + MyLog.Default.WriteLine(ex); + } + } + } +} diff --git a/Gamemode Mods/Stable/StarCoreCTF/Data/ctf_score_background.sbc b/Utility Mods/GyroscopicGunsight/Data/Textures_GyroSight.sbc similarity index 79% rename from Gamemode Mods/Stable/StarCoreCTF/Data/ctf_score_background.sbc rename to Utility Mods/GyroscopicGunsight/Data/Textures_GyroSight.sbc index e7d8def77..2595223e4 100644 --- a/Gamemode Mods/Stable/StarCoreCTF/Data/ctf_score_background.sbc +++ b/Utility Mods/GyroscopicGunsight/Data/Textures_GyroSight.sbc @@ -1,17 +1,19 @@ - - - - - - TransparentMaterialDefinition - ctf_score_background - - false - 1 - false - false - 0.1 - Textures\ctf_score_background.dds - - - + + + + + + + TransparentMaterialDefinition + GyroGunsight + + false + 1 + false + false + 0.1 + Textures\TempCursor.dds + + + + diff --git a/Utility Mods/GyroscopicGunsight/GyroscopicGunsight.csproj.DotSettings b/Utility Mods/GyroscopicGunsight/GyroscopicGunsight.csproj.DotSettings new file mode 100644 index 000000000..626991af1 --- /dev/null +++ b/Utility Mods/GyroscopicGunsight/GyroscopicGunsight.csproj.DotSettings @@ -0,0 +1,4 @@ + + True + True + True \ No newline at end of file diff --git a/Utility Mods/GyroscopicGunsight/Textures/TempCursor.dds b/Utility Mods/GyroscopicGunsight/Textures/TempCursor.dds new file mode 100644 index 000000000..c4a660a2b Binary files /dev/null and b/Utility Mods/GyroscopicGunsight/Textures/TempCursor.dds differ diff --git a/Utility Mods/Stable/I NEED MORE JETPACK ACCELERATION/.gitignore b/Utility Mods/I NEED MORE JETPACK ACCELERATION/.gitignore similarity index 100% rename from Utility Mods/Stable/I NEED MORE JETPACK ACCELERATION/.gitignore rename to Utility Mods/I NEED MORE JETPACK ACCELERATION/.gitignore diff --git a/Utility Mods/Stable/I NEED MORE JETPACK ACCELERATION/Data/Characters.sbc b/Utility Mods/I NEED MORE JETPACK ACCELERATION/Data/Characters.sbc similarity index 100% rename from Utility Mods/Stable/I NEED MORE JETPACK ACCELERATION/Data/Characters.sbc rename to Utility Mods/I NEED MORE JETPACK ACCELERATION/Data/Characters.sbc diff --git a/Utility Mods/Stable/I NEED MORE JETPACK ACCELERATION/README.md b/Utility Mods/I NEED MORE JETPACK ACCELERATION/README.md similarity index 100% rename from Utility Mods/Stable/I NEED MORE JETPACK ACCELERATION/README.md rename to Utility Mods/I NEED MORE JETPACK ACCELERATION/README.md diff --git a/Gamemode Mods/Stable/StarCore SUGMA Gamemodes/metadata.mod b/Utility Mods/I NEED MORE JETPACK ACCELERATION/metadata.mod similarity index 100% rename from Gamemode Mods/Stable/StarCore SUGMA Gamemodes/metadata.mod rename to Utility Mods/I NEED MORE JETPACK ACCELERATION/metadata.mod diff --git a/Utility Mods/Stable/I NEED MORE JETPACK ACCELERATION/modinfo_main.sbmi b/Utility Mods/I NEED MORE JETPACK ACCELERATION/modinfo_main.sbmi similarity index 100% rename from Utility Mods/Stable/I NEED MORE JETPACK ACCELERATION/modinfo_main.sbmi rename to Utility Mods/I NEED MORE JETPACK ACCELERATION/modinfo_main.sbmi diff --git a/Utility Mods/Stable/I NEED MORE JETPACK ACCELERATION/modinfo_stable.sbmi b/Utility Mods/I NEED MORE JETPACK ACCELERATION/modinfo_stable.sbmi similarity index 100% rename from Utility Mods/Stable/I NEED MORE JETPACK ACCELERATION/modinfo_stable.sbmi rename to Utility Mods/I NEED MORE JETPACK ACCELERATION/modinfo_stable.sbmi diff --git a/Utility Mods/Stable/MA_Afterburner/Audio/EMP_Fire_Loop.wav b/Utility Mods/MA_Afterburner/Audio/EMP_Fire_Loop.wav similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Audio/EMP_Fire_Loop.wav rename to Utility Mods/MA_Afterburner/Audio/EMP_Fire_Loop.wav diff --git a/Utility Mods/Stable/MA_Afterburner/Audio/EMP_Fire_Loop_Dist.wav b/Utility Mods/MA_Afterburner/Audio/EMP_Fire_Loop_Dist.wav similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Audio/EMP_Fire_Loop_Dist.wav rename to Utility Mods/MA_Afterburner/Audio/EMP_Fire_Loop_Dist.wav diff --git a/Utility Mods/Stable/MA_Afterburner/Audio/EMP_Fire_Start.wav b/Utility Mods/MA_Afterburner/Audio/EMP_Fire_Start.wav similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Audio/EMP_Fire_Start.wav rename to Utility Mods/MA_Afterburner/Audio/EMP_Fire_Start.wav diff --git a/Utility Mods/Stable/MA_Afterburner/Audio/EMP_Fire_Start_Dist.wav b/Utility Mods/MA_Afterburner/Audio/EMP_Fire_Start_Dist.wav similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Audio/EMP_Fire_Start_Dist.wav rename to Utility Mods/MA_Afterburner/Audio/EMP_Fire_Start_Dist.wav diff --git a/Utility Mods/Stable/MA_Afterburner/Audio/EMP_Fire_Stop.wav b/Utility Mods/MA_Afterburner/Audio/EMP_Fire_Stop.wav similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Audio/EMP_Fire_Stop.wav rename to Utility Mods/MA_Afterburner/Audio/EMP_Fire_Stop.wav diff --git a/Utility Mods/Stable/MA_Afterburner/Audio/EMP_Fire_Stop_Dist.wav b/Utility Mods/MA_Afterburner/Audio/EMP_Fire_Stop_Dist.wav similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Audio/EMP_Fire_Stop_Dist.wav rename to Utility Mods/MA_Afterburner/Audio/EMP_Fire_Stop_Dist.wav diff --git a/Utility Mods/Stable/MA_Afterburner/Audio/SRBloop.wav b/Utility Mods/MA_Afterburner/Audio/SRBloop.wav similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Audio/SRBloop.wav rename to Utility Mods/MA_Afterburner/Audio/SRBloop.wav diff --git a/Utility Mods/Stable/MA_Afterburner/Audio/SRBloop_start.wav b/Utility Mods/MA_Afterburner/Audio/SRBloop_start.wav similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Audio/SRBloop_start.wav rename to Utility Mods/MA_Afterburner/Audio/SRBloop_start.wav diff --git a/Utility Mods/Stable/MA_Afterburner/Audio/SRBstart.wav b/Utility Mods/MA_Afterburner/Audio/SRBstart.wav similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Audio/SRBstart.wav rename to Utility Mods/MA_Afterburner/Audio/SRBstart.wav diff --git a/Utility Mods/Stable/MA_Afterburner/Audio/abwarning.wav b/Utility Mods/MA_Afterburner/Audio/abwarning.wav similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Audio/abwarning.wav rename to Utility Mods/MA_Afterburner/Audio/abwarning.wav diff --git a/Utility Mods/Stable/MA_Afterburner/Audio/gravgun.wav b/Utility Mods/MA_Afterburner/Audio/gravgun.wav similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Audio/gravgun.wav rename to Utility Mods/MA_Afterburner/Audio/gravgun.wav diff --git a/Utility Mods/Stable/MA_Afterburner/Audio/quickboost.wav b/Utility Mods/MA_Afterburner/Audio/quickboost.wav similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Audio/quickboost.wav rename to Utility Mods/MA_Afterburner/Audio/quickboost.wav diff --git a/Utility Mods/Stable/MA_Afterburner/Audio/remthrusterdeep.wav b/Utility Mods/MA_Afterburner/Audio/remthrusterdeep.wav similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Audio/remthrusterdeep.wav rename to Utility Mods/MA_Afterburner/Audio/remthrusterdeep.wav diff --git a/Utility Mods/Stable/MA_Afterburner/Audio/remthrustermid.wav b/Utility Mods/MA_Afterburner/Audio/remthrustermid.wav similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Audio/remthrustermid.wav rename to Utility Mods/MA_Afterburner/Audio/remthrustermid.wav diff --git a/Utility Mods/Stable/MA_Afterburner/Audio/remthrustermidmany.wav b/Utility Mods/MA_Afterburner/Audio/remthrustermidmany.wav similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Audio/remthrustermidmany.wav rename to Utility Mods/MA_Afterburner/Audio/remthrustermidmany.wav diff --git a/Utility Mods/Stable/MA_Afterburner/Audio/remthrustermidmanyab.wav b/Utility Mods/MA_Afterburner/Audio/remthrustermidmanyab.wav similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Audio/remthrustermidmanyab.wav rename to Utility Mods/MA_Afterburner/Audio/remthrustermidmanyab.wav diff --git a/Utility Mods/Stable/MA_Afterburner/Data/AfterburnerParticles.sbc b/Utility Mods/MA_Afterburner/Data/AfterburnerParticles.sbc similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/AfterburnerParticles.sbc rename to Utility Mods/MA_Afterburner/Data/AfterburnerParticles.sbc diff --git a/Utility Mods/Stable/MA_Afterburner/Data/AmmoMagazines_SRB.sbc b/Utility Mods/MA_Afterburner/Data/AmmoMagazines_SRB.sbc similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/AmmoMagazines_SRB.sbc rename to Utility Mods/MA_Afterburner/Data/AmmoMagazines_SRB.sbc diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Ancient_Afterburner_Audio.sbc b/Utility Mods/MA_Afterburner/Data/Ancient_Afterburner_Audio.sbc similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Ancient_Afterburner_Audio.sbc rename to Utility Mods/MA_Afterburner/Data/Ancient_Afterburner_Audio.sbc diff --git a/Utility Mods/Stable/MA_Afterburner/Data/BlockVariantGroups_HW.sbc b/Utility Mods/MA_Afterburner/Data/BlockVariantGroups_HW.sbc similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/BlockVariantGroups_HW.sbc rename to Utility Mods/MA_Afterburner/Data/BlockVariantGroups_HW.sbc diff --git a/Utility Mods/Stable/MA_Afterburner/Data/CubeBlocks_Ancient/AncientAfterburnerT40.sbc b/Utility Mods/MA_Afterburner/Data/CubeBlocks_Ancient/AncientAfterburnerT40.sbc similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/CubeBlocks_Ancient/AncientAfterburnerT40.sbc rename to Utility Mods/MA_Afterburner/Data/CubeBlocks_Ancient/AncientAfterburnerT40.sbc diff --git a/Utility Mods/Stable/MA_Afterburner/Data/CubeBlocks_Ancient/AncientAfterburnerT41.sbc b/Utility Mods/MA_Afterburner/Data/CubeBlocks_Ancient/AncientAfterburnerT41.sbc similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/CubeBlocks_Ancient/AncientAfterburnerT41.sbc rename to Utility Mods/MA_Afterburner/Data/CubeBlocks_Ancient/AncientAfterburnerT41.sbc diff --git a/Utility Mods/Stable/MA_Afterburner/Data/CubeBlocks_Ancient/AncientAfterburnerT42.sbc b/Utility Mods/MA_Afterburner/Data/CubeBlocks_Ancient/AncientAfterburnerT42.sbc similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/CubeBlocks_Ancient/AncientAfterburnerT42.sbc rename to Utility Mods/MA_Afterburner/Data/CubeBlocks_Ancient/AncientAfterburnerT42.sbc diff --git a/Utility Mods/Stable/MA_Afterburner/Data/CubeBlocks_Ancient/AncientAfterburnerT42L.sbc b/Utility Mods/MA_Afterburner/Data/CubeBlocks_Ancient/AncientAfterburnerT42L.sbc similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/CubeBlocks_Ancient/AncientAfterburnerT42L.sbc rename to Utility Mods/MA_Afterburner/Data/CubeBlocks_Ancient/AncientAfterburnerT42L.sbc diff --git a/Utility Mods/Stable/MA_Afterburner/Data/CubeBlocks_Ancient/AncientAfterburnerT43.sbc b/Utility Mods/MA_Afterburner/Data/CubeBlocks_Ancient/AncientAfterburnerT43.sbc similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/CubeBlocks_Ancient/AncientAfterburnerT43.sbc rename to Utility Mods/MA_Afterburner/Data/CubeBlocks_Ancient/AncientAfterburnerT43.sbc diff --git a/Utility Mods/Stable/MA_Afterburner/Data/CubeBlocks_Ancient/AncientAfterburnerT44.sbc b/Utility Mods/MA_Afterburner/Data/CubeBlocks_Ancient/AncientAfterburnerT44.sbc similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/CubeBlocks_Ancient/AncientAfterburnerT44.sbc rename to Utility Mods/MA_Afterburner/Data/CubeBlocks_Ancient/AncientAfterburnerT44.sbc diff --git a/Utility Mods/Stable/MA_Afterburner/Data/MA_Afterburner_Audio.sbc b/Utility Mods/MA_Afterburner/Data/MA_Afterburner_Audio.sbc similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/MA_Afterburner_Audio.sbc rename to Utility Mods/MA_Afterburner/Data/MA_Afterburner_Audio.sbc diff --git a/Utility Mods/Stable/MA_Afterburner/Data/MA_Afterburner_BlockCategories.sbc b/Utility Mods/MA_Afterburner/Data/MA_Afterburner_BlockCategories.sbc similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/MA_Afterburner_BlockCategories.sbc rename to Utility Mods/MA_Afterburner/Data/MA_Afterburner_BlockCategories.sbc diff --git a/Utility Mods/Stable/MA_Afterburner/Data/MA_Afterburner_Cubeblocks.sbc b/Utility Mods/MA_Afterburner/Data/MA_Afterburner_Cubeblocks.sbc similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/MA_Afterburner_Cubeblocks.sbc rename to Utility Mods/MA_Afterburner/Data/MA_Afterburner_Cubeblocks.sbc diff --git a/Utility Mods/Stable/MA_Afterburner/Data/MA_SideBooster_Audio.sbc b/Utility Mods/MA_Afterburner/Data/MA_SideBooster_Audio.sbc similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/MA_SideBooster_Audio.sbc rename to Utility Mods/MA_Afterburner/Data/MA_SideBooster_Audio.sbc diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Particle_Projectiles_SRB.sbc b/Utility Mods/MA_Afterburner/Data/Particle_Projectiles_SRB.sbc similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Particle_Projectiles_SRB.sbc rename to Utility Mods/MA_Afterburner/Data/Particle_Projectiles_SRB.sbc diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_1x1.cs b/Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_1x1.cs similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_1x1.cs rename to Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_1x1.cs diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_1x1_ammo.cs b/Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_1x1_ammo.cs similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_1x1_ammo.cs rename to Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_1x1_ammo.cs diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_3x3.cs b/Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_3x3.cs similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_3x3.cs rename to Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_3x3.cs diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_3x3_ammo.cs b/Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_3x3_ammo.cs similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_3x3_ammo.cs rename to Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_3x3_ammo.cs diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_5x5.cs b/Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_5x5.cs similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_5x5.cs rename to Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_5x5.cs diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_5x5_ammo.cs b/Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_5x5_ammo.cs similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_5x5_ammo.cs rename to Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_5x5_ammo.cs diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_LG_Ion_Large.cs b/Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_LG_Ion_Large.cs similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_LG_Ion_Large.cs rename to Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_LG_Ion_Large.cs diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_LG_Ion_Large_ammo.cs b/Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_LG_Ion_Large_ammo.cs similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_LG_Ion_Large_ammo.cs rename to Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/Afterburner_LG_Ion_Large_ammo.cs diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/DETPAK.cs b/Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/DETPAK.cs similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/DETPAK.cs rename to Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/DETPAK.cs diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/DETPAK_ammo.cs b/Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/DETPAK_ammo.cs similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/DETPAK_ammo.cs rename to Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/DETPAK_ammo.cs diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/MasterConfig.cs b/Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/MasterConfig.cs similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/MasterConfig.cs rename to Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/MasterConfig.cs diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/SRB.cs b/Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/SRB.cs similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/SRB.cs rename to Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/SRB.cs diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/SRBWarheadAmmo.cs b/Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/SRBWarheadAmmo.cs similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/SRBWarheadAmmo.cs rename to Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/SRBWarheadAmmo.cs diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/SRB_ammo.cs b/Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/SRB_ammo.cs similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/SRB_ammo.cs rename to Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/SRB_ammo.cs diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T40.cs b/Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T40.cs similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T40.cs rename to Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T40.cs diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T40_ammo.cs b/Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T40_ammo.cs similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T40_ammo.cs rename to Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T40_ammo.cs diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T41.cs b/Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T41.cs similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T41.cs rename to Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T41.cs diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T41_ammo.cs b/Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T41_ammo.cs similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T41_ammo.cs rename to Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T41_ammo.cs diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T42.cs b/Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T42.cs similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T42.cs rename to Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T42.cs diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T42L.cs b/Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T42L.cs similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T42L.cs rename to Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T42L.cs diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T42L_ammo.cs b/Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T42L_ammo.cs similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T42L_ammo.cs rename to Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T42L_ammo.cs diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T42_ammo.cs b/Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T42_ammo.cs similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T42_ammo.cs rename to Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T42_ammo.cs diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T43.cs b/Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T43.cs similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T43.cs rename to Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T43.cs diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T43_ammo.cs b/Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T43_ammo.cs similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T43_ammo.cs rename to Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T43_ammo.cs diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T44.cs b/Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T44.cs similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T44.cs rename to Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T44.cs diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T44_ammo.cs b/Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T44_ammo.cs similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T44_ammo.cs rename to Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/ancient/Afterburner_T44_ammo.cs diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/script/PartCompile.cs b/Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/script/PartCompile.cs similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/script/PartCompile.cs rename to Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/script/PartCompile.cs diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/script/Slave.cs b/Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/script/Slave.cs similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/script/Slave.cs rename to Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/script/Slave.cs diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/script/Structure.cs b/Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/script/Structure.cs similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/CoreParts/script/Structure.cs rename to Utility Mods/MA_Afterburner/Data/Scripts/CoreParts/script/Structure.cs diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/SRBanticringe/ABlacementrestrict.cs.disabled b/Utility Mods/MA_Afterburner/Data/Scripts/SRBanticringe/ABlacementrestrict.cs.disabled similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/SRBanticringe/ABlacementrestrict.cs.disabled rename to Utility Mods/MA_Afterburner/Data/Scripts/SRBanticringe/ABlacementrestrict.cs.disabled diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/SRBanticringe/SRBanticringeexplode.cs.disabled b/Utility Mods/MA_Afterburner/Data/Scripts/SRBanticringe/SRBanticringeexplode.cs.disabled similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/SRBanticringe/SRBanticringeexplode.cs.disabled rename to Utility Mods/MA_Afterburner/Data/Scripts/SRBanticringe/SRBanticringeexplode.cs.disabled diff --git a/Utility Mods/Stable/MA_Afterburner/Data/Scripts/SRBanticringe/SRBanticringeexplodealternate.cs b/Utility Mods/MA_Afterburner/Data/Scripts/SRBanticringe/SRBanticringeexplodealternate.cs similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Data/Scripts/SRBanticringe/SRBanticringeexplodealternate.cs rename to Utility Mods/MA_Afterburner/Data/Scripts/SRBanticringe/SRBanticringeexplodealternate.cs diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Ion_Large.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Ion_Large.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Ion_Large.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Ion_Large.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Ion_Large_LOD1.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Ion_Large_LOD1.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Ion_Large_LOD1.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Ion_Large_LOD1.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Ion_Large_LOD2.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Ion_Large_LOD2.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Ion_Large_LOD2.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Ion_Large_LOD2.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Ion_Large_LOD3.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Ion_Large_LOD3.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Ion_Large_LOD3.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Ion_Large_LOD3.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_5x.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_5x.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_5x.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_5x.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_5x_BS1.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_5x_BS1.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_5x_BS1.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_5x_BS1.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_5x_BS2.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_5x_BS2.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_5x_BS2.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_5x_BS2.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_5x_BS3.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_5x_BS3.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_5x_BS3.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_5x_BS3.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_5x_LOD1.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_5x_LOD1.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_5x_LOD1.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_5x_LOD1.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_BS1.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_BS1.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_BS1.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_BS1.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_BS2.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_BS2.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_BS2.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_BS2.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_BS3.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_BS3.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_BS3.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_BS3.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_LOD1.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_LOD1.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_LOD1.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_LOD1.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_LOD2.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_LOD2.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_LOD2.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Large_animated_LOD2.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Small.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Small.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Small.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Small.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Small_BS1.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Small_BS1.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Small_BS1.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Small_BS1.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Small_BS2.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Small_BS2.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Small_BS2.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Small_BS2.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Small_BS3.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Small_BS3.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Small_BS3.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Small_BS3.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Small_LOD1.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Small_LOD1.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Small_LOD1.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Small_LOD1.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Small_LOD2.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Small_LOD2.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Small_LOD2.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/Afterburner_LG_Small_LOD2.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Det_Pak_1x1.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/Det_Pak_1x1.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Det_Pak_1x1.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/Det_Pak_1x1.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Det_Pak_3x1.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/Det_Pak_3x1.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Det_Pak_3x1.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/Det_Pak_3x1.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Emergency_Thruster.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/Emergency_Thruster.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Emergency_Thruster.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/Emergency_Thruster.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Emergency_Thruster_LOD1.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/Emergency_Thruster_LOD1.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Emergency_Thruster_LOD1.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/Emergency_Thruster_LOD1.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Emergency_Thruster_LOD2.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/Emergency_Thruster_LOD2.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Emergency_Thruster_LOD2.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/Emergency_Thruster_LOD2.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Emergency_Thruster_LOD3.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/Emergency_Thruster_LOD3.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/Emergency_Thruster_LOD3.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/Emergency_Thruster_LOD3.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/ExhaustPipe_Racing.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/ExhaustPipe_Racing.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/ExhaustPipe_Racing.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/ExhaustPipe_Racing.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/ExhaustPipe_Racing_LOD0.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/ExhaustPipe_Racing_LOD0.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/ExhaustPipe_Racing_LOD0.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/ExhaustPipe_Racing_LOD0.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/ExhaustPipe_Racing_LOD1.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/ExhaustPipe_Racing_LOD1.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/ExhaustPipe_Racing_LOD1.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/ExhaustPipe_Racing_LOD1.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/ExhaustPipe_Racing_LOD2.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/ExhaustPipe_Racing_LOD2.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/ExhaustPipe_Racing_LOD2.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/ExhaustPipe_Racing_LOD2.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/ExhaustPipe_Racing_LOD3.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/ExhaustPipe_Racing_LOD3.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/ExhaustPipe_Racing_LOD3.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/ExhaustPipe_Racing_LOD3.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/MA_afterburner_blade_large.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/MA_afterburner_blade_large.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/MA_afterburner_blade_large.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/MA_afterburner_blade_large.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/MA_afterburner_blade_large_5x.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/MA_afterburner_blade_large_5x.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/MA_afterburner_blade_large_5x.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/MA_afterburner_blade_large_5x.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/MA_afterburner_blade_large_5x_LOD1.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/MA_afterburner_blade_large_5x_LOD1.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/MA_afterburner_blade_large_5x_LOD1.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/MA_afterburner_blade_large_5x_LOD1.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/MA_afterburner_blade_large_5x_LOD2.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/MA_afterburner_blade_large_5x_LOD2.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/MA_afterburner_blade_large_5x_LOD2.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/MA_afterburner_blade_large_5x_LOD2.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/MA_afterburner_blade_large_LOD1.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/MA_afterburner_blade_large_LOD1.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/MA_afterburner_blade_large_LOD1.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/MA_afterburner_blade_large_LOD1.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/MA_afterburner_blade_large_LOD2.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/MA_afterburner_blade_large_LOD2.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/MA_afterburner_blade_large_LOD2.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/MA_afterburner_blade_large_LOD2.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/SRB.mwm b/Utility Mods/MA_Afterburner/Models/MA_Afterburner/SRB.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/MA_Afterburner/SRB.mwm rename to Utility Mods/MA_Afterburner/Models/MA_Afterburner/SRB.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/ancient/Ancient Afterburner T40.mwm b/Utility Mods/MA_Afterburner/Models/ancient/Ancient Afterburner T40.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/ancient/Ancient Afterburner T40.mwm rename to Utility Mods/MA_Afterburner/Models/ancient/Ancient Afterburner T40.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/ancient/Ancient Afterburner T41.mwm b/Utility Mods/MA_Afterburner/Models/ancient/Ancient Afterburner T41.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/ancient/Ancient Afterburner T41.mwm rename to Utility Mods/MA_Afterburner/Models/ancient/Ancient Afterburner T41.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/ancient/AncientAfterburnerT40.mwm b/Utility Mods/MA_Afterburner/Models/ancient/AncientAfterburnerT40.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/ancient/AncientAfterburnerT40.mwm rename to Utility Mods/MA_Afterburner/Models/ancient/AncientAfterburnerT40.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/ancient/AncientAfterburnerT41.mwm b/Utility Mods/MA_Afterburner/Models/ancient/AncientAfterburnerT41.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/ancient/AncientAfterburnerT41.mwm rename to Utility Mods/MA_Afterburner/Models/ancient/AncientAfterburnerT41.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/ancient/AncientAfterburnerT42.mwm b/Utility Mods/MA_Afterburner/Models/ancient/AncientAfterburnerT42.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/ancient/AncientAfterburnerT42.mwm rename to Utility Mods/MA_Afterburner/Models/ancient/AncientAfterburnerT42.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/ancient/AncientAfterburnerT42L.mwm b/Utility Mods/MA_Afterburner/Models/ancient/AncientAfterburnerT42L.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/ancient/AncientAfterburnerT42L.mwm rename to Utility Mods/MA_Afterburner/Models/ancient/AncientAfterburnerT42L.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/ancient/AncientAfterburnerT43.mwm b/Utility Mods/MA_Afterburner/Models/ancient/AncientAfterburnerT43.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/ancient/AncientAfterburnerT43.mwm rename to Utility Mods/MA_Afterburner/Models/ancient/AncientAfterburnerT43.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Models/ancient/AncientAfterburnerT44.mwm b/Utility Mods/MA_Afterburner/Models/ancient/AncientAfterburnerT44.mwm similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Models/ancient/AncientAfterburnerT44.mwm rename to Utility Mods/MA_Afterburner/Models/ancient/AncientAfterburnerT44.mwm diff --git a/Utility Mods/Stable/MA_Afterburner/Textures/Icons/Afterburner_LG_Ion_Large.png b/Utility Mods/MA_Afterburner/Textures/Icons/Afterburner_LG_Ion_Large.png similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Textures/Icons/Afterburner_LG_Ion_Large.png rename to Utility Mods/MA_Afterburner/Textures/Icons/Afterburner_LG_Ion_Large.png diff --git a/Utility Mods/Stable/MA_Afterburner/Textures/Icons/Afterburner_LG_Small.png b/Utility Mods/MA_Afterburner/Textures/Icons/Afterburner_LG_Small.png similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Textures/Icons/Afterburner_LG_Small.png rename to Utility Mods/MA_Afterburner/Textures/Icons/Afterburner_LG_Small.png diff --git a/Utility Mods/Stable/MA_Afterburner/Textures/Icons/Emergency_Thruster.dds b/Utility Mods/MA_Afterburner/Textures/Icons/Emergency_Thruster.dds similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Textures/Icons/Emergency_Thruster.dds rename to Utility Mods/MA_Afterburner/Textures/Icons/Emergency_Thruster.dds diff --git a/Utility Mods/Stable/MA_Afterburner/Textures/Icons/MA_Afterburner_Large.png b/Utility Mods/MA_Afterburner/Textures/Icons/MA_Afterburner_Large.png similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Textures/Icons/MA_Afterburner_Large.png rename to Utility Mods/MA_Afterburner/Textures/Icons/MA_Afterburner_Large.png diff --git a/Utility Mods/Stable/MA_Afterburner/Textures/Icons/ancient/type 40 thruster icon.png b/Utility Mods/MA_Afterburner/Textures/Icons/ancient/type 40 thruster icon.png similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Textures/Icons/ancient/type 40 thruster icon.png rename to Utility Mods/MA_Afterburner/Textures/Icons/ancient/type 40 thruster icon.png diff --git a/Utility Mods/Stable/MA_Afterburner/Textures/Icons/ancient/type 41 thruster icon.png b/Utility Mods/MA_Afterburner/Textures/Icons/ancient/type 41 thruster icon.png similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Textures/Icons/ancient/type 41 thruster icon.png rename to Utility Mods/MA_Afterburner/Textures/Icons/ancient/type 41 thruster icon.png diff --git a/Utility Mods/Stable/MA_Afterburner/Textures/Icons/ancient/type 42 thruster icon.png b/Utility Mods/MA_Afterburner/Textures/Icons/ancient/type 42 thruster icon.png similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Textures/Icons/ancient/type 42 thruster icon.png rename to Utility Mods/MA_Afterburner/Textures/Icons/ancient/type 42 thruster icon.png diff --git a/Utility Mods/Stable/MA_Afterburner/Textures/Icons/ancient/type 42L thruster icon.png b/Utility Mods/MA_Afterburner/Textures/Icons/ancient/type 42L thruster icon.png similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Textures/Icons/ancient/type 42L thruster icon.png rename to Utility Mods/MA_Afterburner/Textures/Icons/ancient/type 42L thruster icon.png diff --git a/Utility Mods/Stable/MA_Afterburner/Textures/Icons/ancient/type 43 thruster icon.png b/Utility Mods/MA_Afterburner/Textures/Icons/ancient/type 43 thruster icon.png similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Textures/Icons/ancient/type 43 thruster icon.png rename to Utility Mods/MA_Afterburner/Textures/Icons/ancient/type 43 thruster icon.png diff --git a/Utility Mods/Stable/MA_Afterburner/Textures/Icons/ancient/type 44 thruster icon.png b/Utility Mods/MA_Afterburner/Textures/Icons/ancient/type 44 thruster icon.png similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Textures/Icons/ancient/type 44 thruster icon.png rename to Utility Mods/MA_Afterburner/Textures/Icons/ancient/type 44 thruster icon.png diff --git a/Utility Mods/Stable/MA_Afterburner/Textures/Icons/sidebooster.dds b/Utility Mods/MA_Afterburner/Textures/Icons/sidebooster.dds similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Textures/Icons/sidebooster.dds rename to Utility Mods/MA_Afterburner/Textures/Icons/sidebooster.dds diff --git a/Utility Mods/Stable/MA_Afterburner/Textures/Icons/srb.png b/Utility Mods/MA_Afterburner/Textures/Icons/srb.png similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Textures/Icons/srb.png rename to Utility Mods/MA_Afterburner/Textures/Icons/srb.png diff --git a/Utility Mods/Stable/MA_Afterburner/Textures/Models/Cubes/Light_add.dds b/Utility Mods/MA_Afterburner/Textures/Models/Cubes/Light_add.dds similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Textures/Models/Cubes/Light_add.dds rename to Utility Mods/MA_Afterburner/Textures/Models/Cubes/Light_add.dds diff --git a/Utility Mods/Stable/MA_Afterburner/Textures/Models/Cubes/Light_alphamask.dds b/Utility Mods/MA_Afterburner/Textures/Models/Cubes/Light_alphamask.dds similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Textures/Models/Cubes/Light_alphamask.dds rename to Utility Mods/MA_Afterburner/Textures/Models/Cubes/Light_alphamask.dds diff --git a/Utility Mods/Stable/MA_Afterburner/Textures/Models/Cubes/Light_cm.dds b/Utility Mods/MA_Afterburner/Textures/Models/Cubes/Light_cm.dds similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Textures/Models/Cubes/Light_cm.dds rename to Utility Mods/MA_Afterburner/Textures/Models/Cubes/Light_cm.dds diff --git a/Utility Mods/Stable/MA_Afterburner/Textures/Models/Cubes/Light_ng.dds b/Utility Mods/MA_Afterburner/Textures/Models/Cubes/Light_ng.dds similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/Textures/Models/Cubes/Light_ng.dds rename to Utility Mods/MA_Afterburner/Textures/Models/Cubes/Light_ng.dds diff --git a/Gamemode Mods/Stable/StarCoreCTF/metadata.mod b/Utility Mods/MA_Afterburner/metadata.mod similarity index 100% rename from Gamemode Mods/Stable/StarCoreCTF/metadata.mod rename to Utility Mods/MA_Afterburner/metadata.mod diff --git a/Utility Mods/Stable/MA_Afterburner/modinfo_main.sbmi b/Utility Mods/MA_Afterburner/modinfo_main.sbmi similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/modinfo_main.sbmi rename to Utility Mods/MA_Afterburner/modinfo_main.sbmi diff --git a/Utility Mods/Stable/MA_Afterburner/modinfo_stable.sbmi b/Utility Mods/MA_Afterburner/modinfo_stable.sbmi similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/modinfo_stable.sbmi rename to Utility Mods/MA_Afterburner/modinfo_stable.sbmi diff --git a/Utility Mods/Stable/MA_Afterburner/test.txt b/Utility Mods/MA_Afterburner/test.txt similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/test.txt rename to Utility Mods/MA_Afterburner/test.txt diff --git a/Utility Mods/Stable/MA_Afterburner/thumb.jpg b/Utility Mods/MA_Afterburner/thumb.jpg similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/thumb.jpg rename to Utility Mods/MA_Afterburner/thumb.jpg diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Aristeas copy to DS and client.bat b/Utility Mods/MoA Fusion Systems/Aristeas copy to DS and client.bat similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Aristeas copy to DS and client.bat rename to Utility Mods/MoA Fusion Systems/Aristeas copy to DS and client.bat diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Audio/fusionthrusterrem.wav b/Utility Mods/MoA Fusion Systems/Audio/fusionthrusterrem.wav similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Audio/fusionthrusterrem.wav rename to Utility Mods/MoA Fusion Systems/Audio/fusionthrusterrem.wav diff --git a/Weapon Mods/Stable/StarCore Halo Craft/Data/beaconwarpflash.sbc b/Utility Mods/MoA Fusion Systems/Data/ActiveRadiatorParticle.sbc similarity index 86% rename from Weapon Mods/Stable/StarCore Halo Craft/Data/beaconwarpflash.sbc rename to Utility Mods/MoA Fusion Systems/Data/ActiveRadiatorParticle.sbc index 921880db3..7f6031369 100644 --- a/Weapon Mods/Stable/StarCore Halo Craft/Data/beaconwarpflash.sbc +++ b/Utility Mods/MoA Fusion Systems/Data/ActiveRadiatorParticle.sbc @@ -1,449 +1,449 @@ - - - - - - -288201326 - 90 - 0 - false - false - 0 - 0 - 0 - - - GPU - - - - 16 - 16 - 0 - - - - 137 - - - 1 - - - - - - - - - - - 1 - 2 - 2 - 0.1 - - - - - - - 1 - 2 - 2 - 0.1 - - - - - - - 1 - 2 - 2 - 0.1 - - - - - - - 1 - 2 - 2 - 0.1 - - - - - - - - - - - - - - - - - 1 - - - - - 1 - - - - - 1 - - - - - 1 - - - - - - - - - 0.5 - - - - - - - 0 - 0 - 0 - - - - - - - - - - 0 - - - - - - - 0 - 0 - 1 - - - - - - - 20 - - - - - - - - - 0 - - - - - - - - - 0 - - - - - - - - - 0 - - - - - - - 0 - 0 - 0 - - - - - - - - - - - 0 - - - - - 0 - - - - - 0 - - - - - 0 - - - - - - - - - 0 - - - - - - - - - - 0.1 - - - - - 40 - - - - - 40 - - - - - 0.1 - - - - - - - - - 10 - - - 1 - - - 4 - - - 1 - - - true - - - - - - Atlas_D_01 - - - 1 - - - false - - - false - - - false - - - false - - - 1 - - - 0 - - - - 0 - 0 - -100 - - - - 0 - - - 0 - - - false - - - 0 - - - 0 - - - false - - - 1 - - - - 0 - 0 - 0 - - - - - 0 - 0 - 0 - - - - - - - - - - - 1 - - - - - 1 - - - - - 1 - - - - - 1 - - - - - - - - - - - - 1 - - - - - - 0 - - - - - - - - - - 0 - - - - - 0 - - - - - 0 - - - - - 0 - - - - - - - - - 5 - - - false - - - false - - - 1 - - - 0 - - - 1 - - - 0 - - - 0 - - - true - - - 0 - - - - - - 10000 - 1 - - + + + + + + -1279450868 + 90 + 0 + false + true + 0 + 0 + 0 + + + GPU + + + + 16 + 16 + 0 + + + + 0 + + + 32 + + + + + + + + + + + 1 + 1 + 1 + 1 + + + + + + + 1 + 1 + 1 + 1 + + + + + + + 1 + 1 + 1 + 1 + + + + + + + 1 + 1 + 1 + 1 + + + + + + + + + + + + + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + + + + + 0.5 + + + + + + + 5 + 0.5 + 5 + + + + + + + + + + 0 + + + + + + + 0 + 0 + -1 + + + + + + + 5 + + + + + + + + + 2 + + + + + + + + + 0 + + + + + + + + + 360 + + + + + + + 0 + 10 + 0 + + + + + + + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + + + + 0 + + + + + + + + + + 0.8 + + + + + 0.8 + + + + + 0.8 + + + + + 0.8 + + + + + + + + + 0.5 + + + 1 + + + 1 + + + 0.015625 + + + true + + + + + + 10000 + + + + + + Atlas_D_01 + + + 1 + + + false + + + false + + + false + + + false + + + 1 + + + 0 + + + + 0 + 0.75 + 0 + + + + 0 + + + 0 + + + true + + + 0 + + + 0 + + + false + + + 0 + + + + 0 + 0 + 0 + + + + + 0 + 0 + 0 + + + + + + + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + + + + + + + + 0 + + + + + + + + + + 1000 + + + + + 1000 + + + + + 1000 + + + + + 1000 + + + + + + + + + 5 + + + false + + + false + + + 1 + + + 0.4 + + + 1 + + + 0 + + + 0 + + + true + + + 0 + + + + + + 3000 + 1 + + \ No newline at end of file diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/BlockCategories.sbc b/Utility Mods/MoA Fusion Systems/Data/BlockCategories.sbc similarity index 78% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/BlockCategories.sbc rename to Utility Mods/MoA Fusion Systems/Data/BlockCategories.sbc index 2734bedc8..b9195b695 100644 --- a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/BlockCategories.sbc +++ b/Utility Mods/MoA Fusion Systems/Data/BlockCategories.sbc @@ -18,6 +18,12 @@ Caster_FocusLens Caster_Reactor Heat_Heatsink + Heat_FlatRadiator + Caster_ConveyorCap + RadiatorPanel + ExtendableRadiatorBase + Heat_FlatRadiator + ActiveRadiator diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/BlockVariantGroups.sbc b/Utility Mods/MoA Fusion Systems/Data/BlockVariantGroups.sbc similarity index 65% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/BlockVariantGroups.sbc rename to Utility Mods/MoA Fusion Systems/Data/BlockVariantGroups.sbc index e0e0358ce..ae720cfbf 100644 --- a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/BlockVariantGroups.sbc +++ b/Utility Mods/MoA Fusion Systems/Data/BlockVariantGroups.sbc @@ -1,31 +1,44 @@ - - - - - - - Textures\GUI\Icons\Cubes\Caster_Accelerator_0.dds - Fusion Accelerators - Fusion Accelerator Components - - - - - - - - - - Textures\GUI\Icons\Cubes\Caster_CentralPipe_0.dds - Fusion Pipes - Fusion Pipe Components - - - - - - - - - - + + + + + + + Textures\GUI\Icons\Cubes\Caster_Accelerator_0.dds + Fusion Accelerators + Fusion Accelerator Components + + + + + + + + + + Textures\GUI\Icons\Cubes\Caster_CentralPipe_0.dds + Fusion Pipes + Fusion Pipe Components + + + + + + + + + + Textures\GUI\Icons\Cubes\RadiatorPanel.dds + Fusion Radiators + Fusion Radiator Components + + + + + + + + + + + diff --git a/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/ActiveRadiator.sbc b/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/ActiveRadiator.sbc new file mode 100644 index 000000000..491910d46 --- /dev/null +++ b/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/ActiveRadiator.sbc @@ -0,0 +1,40 @@ + + + + + + TerminalBlock + ActiveRadiator + + Rotary Active Radiator + + Provides massive heat dissipation at the cost of a high surface area. + + Textures\GUI\Icons\Cubes\ActiveRadiator.dds + Large + TriangleMesh + + + Models\ActiveRadiator.mwm + + + + + + + + + + 0.3 + ActiveRadiator + + + + + + + + + + + \ No newline at end of file diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_Accelerator_0.sbc b/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_Accelerator_0.sbc similarity index 97% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_Accelerator_0.sbc rename to Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_Accelerator_0.sbc index 13dc4034a..46cd287ff 100644 --- a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_Accelerator_0.sbc +++ b/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_Accelerator_0.sbc @@ -1,43 +1,43 @@ - - - - - - CubeBlock - Caster_Accelerator_0 - - Fusion Accelerator Straight - - Stores [Fusion Power] within a [Fusion System]. - Connects with other [Fusion Accelerators] in a loop, terminating in a [Fusion Accelerator Feeder]. - Longer loops produce and store extra [Fusion Power]. - - Textures\GUI\Icons\Cubes\Caster_Accelerator_0.dds - Large - TriangleMesh - - - Models\Caster_Accelerator_0.mwm - - - - - - - - - - - - - - - - - - - Caster_Accelerator_0 - false - - + + + + + + CubeBlock + Caster_Accelerator_0 + + Fusion Accelerator Straight + + Stores [Fusion Power] within a [Fusion System]. + Connects with other [Fusion Accelerators] in a loop, terminating in a [Fusion Accelerator Feeder]. + Longer loops produce and store extra [Fusion Power]. + + Textures\GUI\Icons\Cubes\Caster_Accelerator_0.dds + Large + TriangleMesh + + + Models\Caster_Accelerator_0.mwm + + + + + + + + + + + + + + + + + + + Caster_Accelerator_0 + false + + \ No newline at end of file diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_Accelerator_90.sbc b/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_Accelerator_90.sbc similarity index 91% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_Accelerator_90.sbc rename to Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_Accelerator_90.sbc index 191b5e001..118657f4d 100644 --- a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_Accelerator_90.sbc +++ b/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_Accelerator_90.sbc @@ -1,44 +1,42 @@ - - - - - - CubeBlock - Caster_Accelerator_90 - - Fusion Accelerator Corner - - Generates [Fusion Power] within a [Fusion System]. - Connects with other [Fusion Accelerators] in a loop, terminating in a [Fusion Accelerator Feeder]. - Longer loops produce and store extra [Fusion Power]. - - Textures\GUI\Icons\Cubes\Caster_Accelerator_90.dds - Large - TriangleMesh - - - Models\Caster_Accelerator_90.mwm - - - - - - - - - - - - - - - - - - - Caster_Accelerator_90 - MinusHalfY - HalfY - - + + + + + + CubeBlock + Caster_Accelerator_90 + + Fusion Accelerator Corner + + Generates [Fusion Power] within a [Fusion System]. + Connects with other [Fusion Accelerators] in a loop, terminating in a [Fusion Accelerator Feeder]. + Longer loops produce and store extra [Fusion Power]. + + Textures\GUI\Icons\Cubes\Caster_Accelerator_90.dds + Large + TriangleMesh + + + Models\Caster_Accelerator_90.mwm + + + + + + + + + + + + + + + + + Caster_Accelerator_90 + MinusHalfY + HalfY + + \ No newline at end of file diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_CentralPipe_0.sbc b/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_CentralPipe_0.sbc similarity index 97% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_CentralPipe_0.sbc rename to Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_CentralPipe_0.sbc index 2cc18a5cd..e3f143394 100644 --- a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_CentralPipe_0.sbc +++ b/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_CentralPipe_0.sbc @@ -1,41 +1,41 @@ - - - - - - CubeBlock - Caster_CentralPipe_0 - - Fusion Pipe Straight - - Connects parts in a [Fusion System]. - - Textures\GUI\Icons\Cubes\Caster_CentralPipe_0.dds - Large - TriangleMesh - - - Models\Caster_CentralPipe_0.mwm - - - - - - - - - - - Caster_CentralPipe_0 - - - - - - - - - true - - + + + + + + CubeBlock + Caster_CentralPipe_0 + + Fusion Pipe Straight + + Connects parts in a [Fusion System]. + + Textures\GUI\Icons\Cubes\Caster_CentralPipe_0.dds + Large + TriangleMesh + + + Models\Caster_CentralPipe_0.mwm + + + + + + + + + + + Caster_CentralPipe_0 + + + + + + + + + true + + \ No newline at end of file diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_CentralPipe_90.sbc b/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_CentralPipe_90.sbc similarity index 90% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_CentralPipe_90.sbc rename to Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_CentralPipe_90.sbc index 54a72f795..8c273b41d 100644 --- a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_CentralPipe_90.sbc +++ b/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_CentralPipe_90.sbc @@ -1,42 +1,40 @@ - - - - - - CubeBlock - Caster_CentralPipe_90 - - Fusion Pipe Corner - - Connects parts in a [Fusion System]. - - Textures\GUI\Icons\Cubes\Caster_CentralPipe_90.dds - Large - TriangleMesh - - - Models\Caster_CentralPipe_90.mwm - - - - - - - - - - - Caster_CentralPipe_90 - - - - - - - - - MinusHalfY - HalfY - - + + + + + + CubeBlock + Caster_CentralPipe_90 + + Fusion Pipe Corner + + Connects parts in a [Fusion System]. + + Textures\GUI\Icons\Cubes\Caster_CentralPipe_90.dds + Large + TriangleMesh + + + Models\Caster_CentralPipe_90.mwm + + + + + + + + + + + Caster_CentralPipe_90 + + + + + + + MinusHalfY + HalfY + + \ No newline at end of file diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_CentralPipe_T.sbc b/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_CentralPipe_T.sbc similarity index 97% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_CentralPipe_T.sbc rename to Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_CentralPipe_T.sbc index e22b5e3ea..51500b91a 100644 --- a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_CentralPipe_T.sbc +++ b/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_CentralPipe_T.sbc @@ -1,34 +1,34 @@ - - - - - - CubeBlock - Caster_CentralPipe_T - - Fusion Pipe T - - Connects parts in a [Fusion System]. - - Textures\GUI\Icons\Cubes\Caster_CentralPipe_T.dds - Large - TriangleMesh - - - Models\Caster_CentralPipe_T.mwm - - - - - - - - - - - Caster_CentralPipe_T - Z - true - - + + + + + + CubeBlock + Caster_CentralPipe_T + + Fusion Pipe T + + Connects parts in a [Fusion System]. + + Textures\GUI\Icons\Cubes\Caster_CentralPipe_T.dds + Large + TriangleMesh + + + Models\Caster_CentralPipe_T.mwm + + + + + + + + + + + Caster_CentralPipe_T + Z + true + + \ No newline at end of file diff --git a/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_Controller.sbc b/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_Controller.sbc new file mode 100644 index 000000000..fec27f4fc --- /dev/null +++ b/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_Controller.sbc @@ -0,0 +1,28 @@ + + + + + + CubeBlock + Caster_Controller + + {LOC:DisplayName_Caster_Controller} + {LOC:Description_Caster_Controller} + Textures\GUI\Icons\Cubes\Caster_Controller.dds + Large + TriangleMesh + + + Models\Caster_Controller.mwm + + + + + + + + Caster_Controller + Y + + + diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_Controller.sbc.disabled b/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_Controller.sbc.disabled similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_Controller.sbc.disabled rename to Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_Controller.sbc.disabled diff --git a/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_ConveyorCap.sbc b/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_ConveyorCap.sbc new file mode 100644 index 000000000..65d07bcc1 --- /dev/null +++ b/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_ConveyorCap.sbc @@ -0,0 +1,76 @@ + + + + + + OxygenTank + Caster_ConveyorCap + + Fusion Conveyor Port + + Allows the attached Fusion System assembly to draw hydrogen from tanks. + Required in survival, optional in creative. + + Textures\GUI\Icons\Cubes\Cubes\Caster_ConveyorCap.dds + Large + TriangleMesh + + + Models\Caster_ConveyorCap.mwm + + + + + + + + + + + + + + + + + Caster_ConveyorCap + Reactors + Factory + 0.001 + 0.000001 + 250000 + 0.75 + + 2 + 2 + 2 + + + GasProperties + Hydrogen + + + HydrogenBottles + + 30 + Damage_WeapExpl_Damaged + ParticleWeapExpl + Extended + Explosion_Warhead_02 + WepSmallWarheadExpl + 25 + 0.005 + 5 + 250000 + 0.000075 + WepSmallWarheadExpl + Explosion_Warhead_02 + + 100 + 300 + 600 + + Y + + + \ No newline at end of file diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_Feeder.sbc b/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_Feeder.sbc similarity index 97% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_Feeder.sbc rename to Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_Feeder.sbc index c1daf6503..76d539085 100644 --- a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_Feeder.sbc +++ b/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_Feeder.sbc @@ -1,35 +1,35 @@ - - - - - - CubeBlock - Caster_Feeder - - Fusion Accelerator Feeder - - Connects [Fusion Accelerator] loops to the [Fusion System]. - Terminates [Fusion Accelerators] in a loop, and connects to [Fusion Pipes]. - Longer loops produce and store extra [Fusion Power]. - - Textures\GUI\Icons\Cubes\Caster_Feeder.dds - Large - TriangleMesh - - - Models\Caster_Feeder.mwm - - - - - - - - - - - Caster_Feeder - true - - + + + + + + CubeBlock + Caster_Feeder + + Fusion Accelerator Feeder + + Connects [Fusion Accelerator] loops to the [Fusion System]. + Terminates [Fusion Accelerators] in a loop, and connects to [Fusion Pipes]. + Longer loops produce and store extra [Fusion Power]. + + Textures\GUI\Icons\Cubes\Caster_Feeder.dds + Large + TriangleMesh + + + Models\Caster_Feeder.mwm + + + + + + + + + + + Caster_Feeder + true + + \ No newline at end of file diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_FocusLens.sbc b/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_FocusLens.sbc similarity index 79% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_FocusLens.sbc rename to Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_FocusLens.sbc index 5ea9452ee..a3e9a7f41 100644 --- a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_FocusLens.sbc +++ b/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_FocusLens.sbc @@ -14,7 +14,7 @@ Textures\GUI\Icons\Cubes\Caster_FocusLens.dds Large TriangleMesh - + Models\Caster_FocusLens.mwm @@ -23,15 +23,19 @@ - + + + + + Caster_FocusLens Thrust - 100 + 34560000 0.200 0.000002 1 @@ -55,6 +59,7 @@ 5000 0.1 Fusion_Thruster_Sound + Y \ No newline at end of file diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_Reactor.sbc b/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_Reactor.sbc similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_Reactor.sbc rename to Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Caster_Reactor.sbc diff --git a/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/ExtendableRadiatorBase.sbc b/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/ExtendableRadiatorBase.sbc new file mode 100644 index 000000000..7425abeef --- /dev/null +++ b/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/ExtendableRadiatorBase.sbc @@ -0,0 +1,31 @@ + + + + + + TerminalBlock + ExtendableRadiatorBase + + Retractable Radiator Base + + Allows attached radiator panels to be retracted and extended. + + Textures\GUI\Icons\Cubes\ExtendableRadiatorBase.dds + Large + TriangleMesh + + + Models\ExtendableRadiatorBase.mwm + + + + + + + + + + ExtendableRadiatorBase + + + \ No newline at end of file diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Heat_FlatRadiator.sbc b/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Heat_FlatRadiator.sbc similarity index 93% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Heat_FlatRadiator.sbc rename to Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Heat_FlatRadiator.sbc index de26076e2..f332111a8 100644 --- a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Heat_FlatRadiator.sbc +++ b/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Heat_FlatRadiator.sbc @@ -1,33 +1,33 @@ - - - - - - CubeBlock - Heat_FlatRadiator - - Fusion Radiator Flat - - Dissipates heat generated by Fusion Systems on the same ship. - - Textures\GUI\Icons\Cubes\Heat_FlatRadiator.dds - Large - TriangleMesh - - - Models\Heat_FlatRadiator.mwm - - - - - - - - - - - - Heat_FlatRadiator - - - + + + + + + CubeBlock + Heat_FlatRadiator + + Fusion Radiator Flat + + Dissipates heat generated by Fusion Systems on the same ship. + + Textures\GUI\Icons\Cubes\Heat_FlatRadiator.dds + Large + TriangleMesh + + + Models\Heat_FlatRadiator.mwm + + + + + + + + + + + + Heat_FlatRadiator + + + \ No newline at end of file diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Heat_Heatsink.sbc b/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Heat_Heatsink.sbc similarity index 87% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Heat_Heatsink.sbc rename to Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Heat_Heatsink.sbc index 1dfc08db5..e37774cab 100644 --- a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/CubeBlocks/Heat_Heatsink.sbc +++ b/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/Heat_Heatsink.sbc @@ -1,32 +1,31 @@ - - - - - - CubeBlock - Heat_Heatsink - - Fusion Heatsink - - Stores built-up heat from fusion systems. - - Textures\GUI\Icons\Cubes\Heat_Heatsink.dds - Large - TriangleMesh - - - Models\Heat_Heatsink.mwm - - - - - - - - - - - Heat_Heatsink - - + + + + + + CubeBlock + Heat_Heatsink + + Fusion Heatsink + + Stores built-up heat from fusion systems. + + Textures\GUI\Icons\Cubes\Heat_Heatsink.dds + Large + TriangleMesh + + + Models\Heat_Heatsink.mwm + + + + + + + + + Heat_Heatsink + true + + \ No newline at end of file diff --git a/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/RadiatorPanel.sbc b/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/RadiatorPanel.sbc new file mode 100644 index 000000000..886baf42e --- /dev/null +++ b/Utility Mods/MoA Fusion Systems/Data/CubeBlocks/RadiatorPanel.sbc @@ -0,0 +1,34 @@ + + + + + + CubeBlock + RadiatorPanel + + Retractable Radiator Panel + + A simple radiator panel. Can be retracted when attached to a base, but still functions as a radiator when standalone. + + Textures\GUI\Icons\Cubes\RadiatorPanel.dds + Large + TriangleMesh + + + Models\RadiatorPanel.mwm + + + + + RadiatorPanel + + + + + + + Y + X + + + \ No newline at end of file diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/EntityComponents.sbc b/Utility Mods/MoA Fusion Systems/Data/EntityComponents.sbc similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/EntityComponents.sbc rename to Utility Mods/MoA Fusion Systems/Data/EntityComponents.sbc diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Fusion_Thruster_Audio.sbc b/Utility Mods/MoA Fusion Systems/Data/Fusion_Thruster_Audio.sbc similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Fusion_Thruster_Audio.sbc rename to Utility Mods/MoA Fusion Systems/Data/Fusion_Thruster_Audio.sbc diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Fusion_TransparentMaterials.sbc b/Utility Mods/MoA Fusion Systems/Data/Fusion_TransparentMaterials.sbc similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Fusion_TransparentMaterials.sbc rename to Utility Mods/MoA Fusion Systems/Data/Fusion_TransparentMaterials.sbc diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Particle_CasterFocusLens.sbc b/Utility Mods/MoA Fusion Systems/Data/Particle_CasterFocusLens.sbc similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Particle_CasterFocusLens.sbc rename to Utility Mods/MoA Fusion Systems/Data/Particle_CasterFocusLens.sbc diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/Communication/DefinitionAPI.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/Communication/DefinitionAPI.cs similarity index 95% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/Communication/DefinitionAPI.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/Communication/DefinitionAPI.cs index 5461f5e36..d65731723 100644 --- a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/Communication/DefinitionAPI.cs +++ b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/Communication/DefinitionAPI.cs @@ -7,8 +7,7 @@ using VRage.Utils; using VRageMath; -namespace StarCore.FusionSystems. - Communication +namespace Epstein_Fusion_DS.Communication { /// /// Class used to communicate with the Modular Assemblies Framework mod.

@@ -20,7 +19,7 @@ public class ModularDefinitionApi /// /// The expected API version. Don't touch this unless you're developing for the Modular Assemblies Framework. /// - public const int ApiVersion = 2; + public const int ApiVersion = 3; /// /// Triggered whenever the API is ready - added to by the constructor or manually. @@ -164,18 +163,18 @@ public IMyCubeGrid GetAssemblyGrid(int assemblyId) /// Registers an Action triggered on assembly removal. /// /// - public void AddOnAssemblyClose(Action action) + public void RegisterOnAssemblyClose(string definitionName, Action action) { - _addOnAssemblyClose?.Invoke(action); + _registerOnAssemblyClose?.Invoke(definitionName, action); } /// /// De-registers an Action(AssemblyId) triggered on assembly removal. /// /// - public void RemoveOnAssemblyClose(Action action) + public void UnregisterOnAssemblyClose(string definitionName, Action action) { - _removeOnAssemblyClose?.Invoke(action); + _unregisterOnAssemblyClose?.Invoke(definitionName, action); } /// @@ -195,9 +194,9 @@ public void RecreateAssembly(int assemblyId) /// public T GetAssemblyProperty(int assemblyId, string propertyName) { - var value = _getAssemblyProperty(assemblyId, propertyName); + object value = _getAssemblyProperty(assemblyId, propertyName); - return value == null ? default(T) : (T)value; + return value == null ? default(T) : (T) value; } /// @@ -284,6 +283,7 @@ public string[] RegisterDefinitions(DefinitionDefs.ModularDefinitionContainer mo RegisterOnPartAdd(definition.Name, definition.OnPartAdd); RegisterOnPartRemove(definition.Name, definition.OnPartRemove); RegisterOnPartDestroy(definition.Name, definition.OnPartDestroy); + RegisterOnAssemblyClose(definition.Name, definition.OnAssemblyClose); if (validDefinitions.Contains(definition.Name)) definition.OnInit?.Invoke(); @@ -441,8 +441,8 @@ public void RemoveChatCommand(string command) private Func _getMemberParts; private Func _getBasePart; private Func _getAssemblyGrid; - private Action> _addOnAssemblyClose; - private Action> _removeOnAssemblyClose; + private Action> _registerOnAssemblyClose; + private Action> _unregisterOnAssemblyClose; private Action _recreateAssembly; private Func _getAssemblyProperty; private Action _setAssemblyProperty; @@ -499,8 +499,8 @@ public bool ApiAssign() SetApiMethod("GetMemberParts", ref _getMemberParts); SetApiMethod("GetBasePart", ref _getBasePart); SetApiMethod("GetAssemblyGrid", ref _getAssemblyGrid); - SetApiMethod("AddOnAssemblyClose", ref _addOnAssemblyClose); - SetApiMethod("RemoveOnAssemblyClose", ref _removeOnAssemblyClose); + SetApiMethod("RegisterOnAssemblyClose", ref _registerOnAssemblyClose); + SetApiMethod("UnregisterOnAssemblyClose", ref _unregisterOnAssemblyClose); SetApiMethod("RecreateAssembly", ref _recreateAssembly); SetApiMethod("GetAssemblyProperty", ref _getAssemblyProperty); SetApiMethod("SetAssemblyProperty", ref _setAssemblyProperty); @@ -663,6 +663,14 @@ public class ModularPhysicalDefinition /// public Action OnPartDestroy { get; set; } + /// + /// Called when an assembly is closed. Note - OnPartRemove will not be called. + /// + /// Arg1 is PhysicalAssemblyId + /// + /// + public Action OnAssemblyClose { get; set; } + /// /// All allowed SubtypeIds. The mod will likely misbehave if two mods allow the same blocks, so please be cautious. /// diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/Communication/DefinitionCollector.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/Communication/DefinitionCollector.cs similarity index 74% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/Communication/DefinitionCollector.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/Communication/DefinitionCollector.cs index a298ea1e7..9490077e1 100644 --- a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/Communication/DefinitionCollector.cs +++ b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/Communication/DefinitionCollector.cs @@ -1,8 +1,8 @@ -using StarCore.FusionSystems.Communication; -using static StarCore.FusionSystems.Communication.DefinitionDefs; +using Epstein_Fusion_DS.Communication; +using static Epstein_Fusion_DS.Communication.DefinitionDefs; // ReSharper disable once CheckNamespace -namespace StarCore.FusionSystems +namespace Epstein_Fusion_DS { internal partial class ModularDefinition { @@ -20,7 +20,7 @@ internal void LoadDefinitions(params ModularPhysicalDefinition[] defs) /// internal static ModularDefinitionContainer GetBaseDefinitions() { - return new StarCore.FusionSystems.ModularDefinition().Container; + return new Epstein_Fusion_DS.ModularDefinition().Container; } } } \ No newline at end of file diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/Communication/ModularDefinitionSender.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/Communication/ModularDefinitionSender.cs similarity index 62% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/Communication/ModularDefinitionSender.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/Communication/ModularDefinitionSender.cs index 550a9cdab..2cf873fc8 100644 --- a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/Communication/ModularDefinitionSender.cs +++ b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/Communication/ModularDefinitionSender.cs @@ -1,9 +1,8 @@ using VRage.Game.Components; using VRage.Utils; -using static StarCore.FusionSystems.Communication.DefinitionDefs; +using static Epstein_Fusion_DS.Communication.DefinitionDefs; -namespace StarCore.FusionSystems. - Communication +namespace Epstein_Fusion_DS.Communication { [MySessionComponentDescriptor(MyUpdateOrder.Simulation, int.MinValue)] internal class ModularDefinitionSender : MySessionComponentBase @@ -16,20 +15,20 @@ public override void LoadData() $"{ModContext.ModName}.ModularDefinition: Init new ModularAssembliesDefinition"); // Init - StoredDef = ModularDefinition.GetBaseDefinitions(); + StoredDef = Epstein_Fusion_DS.ModularDefinition.GetBaseDefinitions(); // Send definitions over as soon as the API loads, and create the API before anything else can init. - ModularDefinition.ModularApi.Init(ModContext, SendDefinitions); + Epstein_Fusion_DS.ModularDefinition.ModularApi.Init(ModContext, SendDefinitions); } protected override void UnloadData() { - ModularDefinition.ModularApi.UnloadData(); + Epstein_Fusion_DS.ModularDefinition.ModularApi.UnloadData(); } private void SendDefinitions() { - ModularDefinition.ModularApi.RegisterDefinitions(StoredDef); + Epstein_Fusion_DS.ModularDefinition.ModularApi.RegisterDefinitions(StoredDef); } } } \ No newline at end of file diff --git a/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts.cs new file mode 100644 index 000000000..00f82c1c0 --- /dev/null +++ b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts.cs @@ -0,0 +1,200 @@ +using System.Collections.Generic; +using Epstein_Fusion_DS.FusionParts; +using VRageMath; +using static Epstein_Fusion_DS.Communication.DefinitionDefs; + +namespace Epstein_Fusion_DS +{ + internal partial class ModularDefinition + { + // You can declare functions in here, and they are shared between all other ModularDefinition files. + + // This is the important bit. + private ModularPhysicalDefinition ModularFusion => new ModularPhysicalDefinition + { + // Unique name of the definition. + Name = "Modular_Fusion", + + OnInit = () => { SFusionManager.I.FusionDefinition = this; }, + + // Triggers whenever a new part is added to an assembly. + OnPartAdd = SFusionManager.I.OnPartAdd, + + // Triggers whenever a part is removed from an assembly. + OnPartRemove = SFusionManager.I.OnPartRemove, + + // Triggers whenever a part is destroyed, simultaneously with OnPartRemove + OnPartDestroy = (physicalAssemblyId, blockEntity, isBaseBlock) => + { + // You can remove this function, and any others if need be. + }, + + OnAssemblyClose = assemblyId => + { + SFusionManager.I.FusionSystems.Remove(assemblyId); + }, + + // The most important block in an assembly. Connection checking starts here. + BaseBlockSubtype = null, + + // All SubtypeIds that can be part of this assembly. + AllowedBlockSubtypes = new[] + { + "Caster_FocusLens", + + "Caster_Accelerator_0", + "Caster_Accelerator_90", + "Caster_CentralPipe_0", + "Caster_CentralPipe_90", + "Caster_CentralPipe_T", + "Caster_Feeder", + //"Caster_Controller", + "Caster_Reactor", + "Caster_ConveyorCap", + }, + + // Allowed connection directions & whitelists, measured in blocks. + // If an allowed SubtypeId is not included here, connections are allowed on all sides. + // If the connection type whitelist is empty, all allowed subtypes may connect on that side. + AllowedConnections = new Dictionary> + { + // Note - Offsets line up with BuildInfo block orientation. + // Note - Offsets are measured from the center of the block; in this case, the Caster_FocusLens is a 3x3 that has connections on the back in a plus shape. + #region Drives + + { + "Caster_FocusLens", new Dictionary + { + [new Vector3I(1, 0, 2)] = AllowedPipeConnections, + [new Vector3I(-1, 0, 2)] = AllowedPipeConnections, + [new Vector3I(0, 1, 2)] = AllowedPipeConnections, + [new Vector3I(0, -1, 2)] = AllowedPipeConnections, + } + }, + + #endregion + + { + "Caster_Reactor", new Dictionary + { + [new Vector3I(0, 2, 0)] = AllowedPipeConnections, + [new Vector3I(0, -2, 0)] = AllowedPipeConnections, + } + }, + { + "Caster_Accelerator_0", new Dictionary + { + { + Vector3I.Forward, new[] + { + "Caster_Accelerator_0", + "Caster_Accelerator_90", + "Caster_Feeder" + } + }, + { + Vector3I.Backward, new[] + { + "Caster_Accelerator_0", + "Caster_Accelerator_90", + "Caster_Feeder" + } + } + } + }, + { + "Caster_Accelerator_90", new Dictionary + { + { + Vector3I.Forward, new[] + { + "Caster_Accelerator_0", + "Caster_Accelerator_90", + "Caster_Feeder" + } + }, + { + Vector3I.Right, new[] + { + "Caster_Accelerator_0", + "Caster_Accelerator_90", + "Caster_Feeder" + } + } + } + }, + { + "Caster_CentralPipe_0", new Dictionary + { + [Vector3I.Forward] = AllowedPipeConnections, + [Vector3I.Backward] = AllowedPipeConnections, + } + }, + { + "Caster_CentralPipe_90", new Dictionary + { + [Vector3I.Forward] = AllowedPipeConnections, + [Vector3I.Right] = AllowedPipeConnections, + } + }, + { + "Caster_CentralPipe_T", new Dictionary + { + [Vector3I.Forward] = AllowedPipeConnections, + [Vector3I.Right] = AllowedPipeConnections, + [Vector3I.Backward] = AllowedPipeConnections, + } + }, + { + "Caster_Feeder", new Dictionary + { + { + Vector3I.Forward, AllowedPipeConnections + }, + { + Vector3I.Backward, AllowedPipeConnections + }, + + { + Vector3I.Up, new[] + { + "Caster_Accelerator_0", + "Caster_Accelerator_90", + "Caster_Feeder" + } + }, + { + Vector3I.Down, new[] + { + "Caster_Accelerator_0", + "Caster_Accelerator_90", + "Caster_Feeder" + } + } + } + }, + { + "Caster_ConveyorCap", new Dictionary + { + { + Vector3I.Backward, AllowedPipeConnections + } + } + } + } + }; + + private static readonly string[] AllowedPipeConnections = + { + "Caster_FocusLens", + + "Caster_CentralPipe_0", + "Caster_CentralPipe_90", + "Caster_CentralPipe_T", + "Caster_Feeder", + //"Caster_Controller", + "Caster_Reactor", + "Caster_ConveyorCap" + }; + } +} \ No newline at end of file diff --git a/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/FusionConveyor/ConveyorCap.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/FusionConveyor/ConveyorCap.cs new file mode 100644 index 000000000..32f504114 --- /dev/null +++ b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/FusionConveyor/ConveyorCap.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections.Generic; +using Sandbox.Common.ObjectBuilders; +using Sandbox.ModAPI; +using Sandbox.ModAPI.Interfaces.Terminal; +using VRage.Game.Components; +using VRage.ModAPI; +using VRage.ObjectBuilders; + +namespace Epstein_Fusion_DS.FusionParts.FusionConveyor +{ + /// + /// Forces stockpile on and prevents players from disabling it on caster conveyor tanks. + /// + [MyEntityComponentDescriptor(typeof(MyObjectBuilder_OxygenTank), false, "Caster_ConveyorCap")] + // ReSharper disable once UnusedType.Global + internal class ConveyorCap : MyGameLogicComponent + { + private static readonly string[] ValidSubtypes = { + "Caster_ConveyorCap" + }; + + + private IMyGasTank _block; + + public override void Init(MyObjectBuilder_EntityBase objectBuilder) + { + base.Init(objectBuilder); + + _block = (IMyGasTank)Entity; + NeedsUpdate |= MyEntityUpdateEnum.BEFORE_NEXT_FRAME; + } + + public override void UpdateOnceBeforeFrame() + { + ControlsManager.DoOnce(); + base.UpdateOnceBeforeFrame(); + + if (_block?.CubeGrid?.Physics == null) // ignore projected and other non-physical grids + return; + + NeedsUpdate |= MyEntityUpdateEnum.EACH_FRAME; + } + + public override void UpdateAfterSimulation() + { + base.UpdateAfterSimulation(); + + if (!_block.Stockpile) + _block.Stockpile = true; + } + + private static class ControlsManager + { + // we love digi + private static bool _done; + + public static void DoOnce() + { + if (_done) + return; + + RemoveControls(); + RemoveActions(); + + _done = true; + } + + private static void RemoveControls() + { + List controls; + + MyAPIGateway.TerminalControls.GetControls(out controls); + + foreach (IMyTerminalControl c in controls) + { + switch (c.Id) + { + case "Stockpile": + { + c.Visible = block => + !ConveyorCap.ValidSubtypes.Contains(block.BlockDefinition.SubtypeId); + break; + } + } + } + } + + private static void RemoveActions() + { + List actions; + + MyAPIGateway.TerminalControls.GetActions(out actions); + + foreach (IMyTerminalAction a in actions) + { + switch (a.Id) + { + case "Stockpile": + case "Stockpile_On": + case "Stockpile_Off": + { + a.Enabled = block => + !ConveyorCap.ValidSubtypes.Contains(block.BlockDefinition.SubtypeId); + break; + } + } + } + } + } + } +} diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/FusionPart.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/FusionPart.cs similarity index 92% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/FusionPart.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/FusionPart.cs index bf67064a9..209b879a1 100644 --- a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/FusionPart.cs +++ b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/FusionPart.cs @@ -1,12 +1,12 @@ using System; using System.Collections.Generic; using System.Text; +using Epstein_Fusion_DS.Communication; +using Epstein_Fusion_DS.HeatParts; using ProtoBuf; using Sandbox.Game.EntityComponents; using Sandbox.ModAPI; using Sandbox.ModAPI.Interfaces.Terminal; -using StarCore.FusionSystems.Communication; -using StarCore.FusionSystems.HeatParts; using VRage.Game; using VRage.Game.Components; using VRage.Game.ModAPI; @@ -17,7 +17,7 @@ using VRage.Sync; using VRage.Utils; -namespace StarCore.FusionSystems.FusionParts +namespace Epstein_Fusion_DS.FusionParts { public abstract class FusionPart : MyGameLogicComponent, IMyEventProxy where T : IMyCubeBlock @@ -46,18 +46,21 @@ public abstract class FusionPart : MyGameLogicComponent, IMyEventProxy public MySync PowerUsageSync; internal FusionPartSettings Settings; - internal static ModularDefinitionApi ModularApi => ModularDefinition.ModularApi; + internal static ModularDefinitionApi ModularApi => Epstein_Fusion_DS.ModularDefinition.ModularApi; /// /// Block subtypes allowed. /// - internal abstract string BlockSubtype { get; } + internal abstract string[] BlockSubtypes { get; } /// /// Human-readable name for this part type. /// internal abstract string ReadableName { get; } + internal virtual Func MinOverrideLimit { get; } = b => 0.01f; + internal virtual Func MaxOverrideLimit { get; } = b => 4; + #region Controls private void CreateControls() @@ -83,7 +86,7 @@ private void CreateControls() boostPowerToggle.OnText = MyStringId.GetOrCompute("On"); boostPowerToggle.OffText = MyStringId.GetOrCompute("Off"); - boostPowerToggle.Visible = block => block.BlockDefinition.SubtypeName == BlockSubtype; + boostPowerToggle.Visible = block => BlockSubtypes.Contains(block.BlockDefinition.SubtypeName); boostPowerToggle.SupportsMultipleBlocks = true; boostPowerToggle.Enabled = block => true; @@ -106,7 +109,7 @@ private void CreateControls() builder?.Append(Math.Round(block.GameLogic.GetAs>()?.PowerUsageSync.Value * 100 ?? 0)) .Append('%'); - powerUsageSlider.Visible = block => block.BlockDefinition.SubtypeName == BlockSubtype; + powerUsageSlider.Visible = block => BlockSubtypes.Contains(block.BlockDefinition.SubtypeName); powerUsageSlider.SupportsMultipleBlocks = true; powerUsageSlider.Enabled = block => true; @@ -120,7 +123,7 @@ private void CreateControls() boostPowerUsageSlider.Tooltip = MyStringId.GetOrCompute( $"Fusion Power generation this {ReadableName} should use when Override is enabled."); - boostPowerUsageSlider.SetLimits(0.01f, 4.0f); + boostPowerUsageSlider.SetLimits(MinOverrideLimit, MaxOverrideLimit); boostPowerUsageSlider.Getter = block => block.GameLogic.GetAs>()?.OverridePowerUsageSync.Value ?? 0; boostPowerUsageSlider.Setter = (block, value) => @@ -131,7 +134,7 @@ private void CreateControls() Math.Round(block.GameLogic.GetAs>()?.OverridePowerUsageSync.Value * 100 ?? 0)) .Append('%'); - boostPowerUsageSlider.Visible = block => block.BlockDefinition.SubtypeName == BlockSubtype; + boostPowerUsageSlider.Visible = block => BlockSubtypes.Contains(block.BlockDefinition.SubtypeName); boostPowerUsageSlider.SupportsMultipleBlocks = true; boostPowerUsageSlider.Enabled = block => true; @@ -157,7 +160,7 @@ private void CreateControls() if (logic != null) sb.Append(logic.OverrideEnabled.Value ? "OVR On" : "OVR Off"); }; boostPowerAction.Icon = @"Textures\GUI\Icons\Actions\Toggle.dds"; - boostPowerAction.Enabled = block => block.BlockDefinition.SubtypeName == BlockSubtype; + boostPowerAction.Enabled = block => BlockSubtypes.Contains(block.BlockDefinition.SubtypeName); MyAPIGateway.TerminalControls.AddAction(boostPowerAction); } @@ -168,7 +171,7 @@ private void CreateControls() private void AssignDetailedInfoGetter(IMyTerminalBlock block, List controls) { - if (block?.BlockDefinition.SubtypeName != BlockSubtype) + if (!BlockSubtypes.Contains(block.BlockDefinition.SubtypeName)) return; block.RefreshCustomInfo(); block.SetDetailedInfoDirty(); diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/FusionReactor/FusionReactorLogic.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/FusionReactor/FusionReactorLogic.cs similarity index 93% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/FusionReactor/FusionReactorLogic.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/FusionReactor/FusionReactorLogic.cs index f95a2d4d0..a29983433 100644 --- a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/FusionReactor/FusionReactorLogic.cs +++ b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/FusionReactor/FusionReactorLogic.cs @@ -5,7 +5,7 @@ using VRage.ModAPI; using VRage.ObjectBuilders; -namespace StarCore.FusionSystems.FusionParts.FusionReactor +namespace Epstein_Fusion_DS.FusionParts.FusionReactor { [MyEntityComponentDescriptor(typeof(MyObjectBuilder_Reactor), false, "Caster_Reactor")] public class FusionReactorLogic : FusionPart @@ -14,7 +14,7 @@ public class FusionReactorLogic : FusionPart private float _bufferReactorOutput; - internal override string BlockSubtype => "Caster_Reactor"; + internal override string[] BlockSubtypes => new[] { "Caster_Reactor" }; internal override string ReadableName => "Reactor"; @@ -89,7 +89,9 @@ public override void Init(MyObjectBuilder_EntityBase definition) public override void UpdateAfterSimulation() { base.UpdateAfterSimulation(); - var storagePct = MemberSystem?.PowerStored / MemberSystem?.MaxPowerStored ?? 0; + var storagePct = (MemberSystem?.PowerStored / MemberSystem?.MaxPowerStored) ?? 0; + if (float.IsNaN(storagePct) || float.IsInfinity(storagePct)) + storagePct = 0; if (storagePct <= 0) { diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/FusionThruster/FusionThrusterLogic.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/FusionThruster/FusionThrusterLogic.cs similarity index 56% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/FusionThruster/FusionThrusterLogic.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/FusionThruster/FusionThrusterLogic.cs index 74ca353c7..10f34ad4f 100644 --- a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/FusionThruster/FusionThrusterLogic.cs +++ b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/FusionThruster/FusionThrusterLogic.cs @@ -1,49 +1,66 @@ using System; +using System.Collections.Generic; using Sandbox.Common.ObjectBuilders; using Sandbox.ModAPI; using VRage.Game.Components; using VRage.ModAPI; using VRage.ObjectBuilders; -using VRageMath; -namespace StarCore.FusionSystems.FusionParts.FusionThruster +namespace Epstein_Fusion_DS.FusionParts.FusionThruster { - [MyEntityComponentDescriptor(typeof(MyObjectBuilder_Thrust), false, "Caster_FocusLens")] + [MyEntityComponentDescriptor(typeof(MyObjectBuilder_Thrust), false, + "Caster_FocusLens" + )] public class FusionThrusterLogic : FusionPart { private int _bufferBlockCount = 1; private float _bufferThrustOutput; - internal override string BlockSubtype => "Caster_FocusLens"; + internal override string[] BlockSubtypes => new[] + { + "Caster_FocusLens", + }; + internal override string ReadableName => "Thruster"; + internal override Func MinOverrideLimit => + b => 1; + internal override Func MaxOverrideLimit => + b => DriveSettings[b.BlockDefinition.SubtypeId].MaxOverclock; + + internal static readonly Dictionary DriveSettings = new Dictionary + { + ["Caster_FocusLens"] = new DriveSetting(4.00f, 1.5f, 34.56f*2*1000000), + }; + public override void UpdatePower(float powerGeneration, float newtonsPerFusionPower, int numberThrusters) { BufferPowerGeneration = powerGeneration; _bufferBlockCount = numberThrusters; - var consumptionMultiplier = - OverrideEnabled.Value - ? OverridePowerUsageSync - : PowerUsageSync.Value; // This is ugly, let's make it better. - consumptionMultiplier /= numberThrusters; + var overrideModifier = (OverrideEnabled ? OverridePowerUsageSync : PowerUsageSync).Value; - // Power generation consumed (per second) - var powerConsumption = powerGeneration * 60 * consumptionMultiplier; + var thrustOutput = Block.CurrentThrust; + var maxThrustOutput = DriveSettings[Block.BlockDefinition.SubtypeId].BaseThrust * overrideModifier; + // This formula is very dumb but it just about does the trick. Approaches 200% efficiency at zero usage, and 0% at 2x usage. + var efficiencyMultiplier = DriveSettings[Block.BlockDefinition.SubtypeId].EfficiencyModifier + * + (2 - 1/(DriveSettings[Block.BlockDefinition.SubtypeId].BaseThrust/maxThrustOutput)); - var efficiencyMultiplier = 1 / (0.489f + consumptionMultiplier); + // Power generation consumed (per second) + var powerConsumption = thrustOutput / newtonsPerFusionPower / efficiencyMultiplier; // Power generated (per second) - var thrustOutput = efficiencyMultiplier * powerConsumption * newtonsPerFusionPower; - _bufferThrustOutput = thrustOutput; + //var thrustOutput = efficiencyMultiplier * powerConsumption * newtonsPerFusionPower; + _bufferThrustOutput = maxThrustOutput; MaxPowerConsumption = powerConsumption / 60; InfoText.Clear(); InfoText.AppendLine( - $"\nOutput: {Math.Round(thrustOutput, 1)}/{Math.Round(powerGeneration * 60 * newtonsPerFusionPower, 1)}"); - InfoText.AppendLine($"Input: {Math.Round(powerConsumption, 1)}/{Math.Round(powerGeneration * 60, 1)}"); - InfoText.AppendLine($"Efficiency: {Math.Round(efficiencyMultiplier * 100)}%"); + $"\nOutput: {thrustOutput/1000000:F1}/{maxThrustOutput/1000000:F1} MN"); + InfoText.AppendLine($"Input: {powerConsumption:F1}/{powerGeneration * 60:F1}"); + InfoText.AppendLine($"Efficiency: {efficiencyMultiplier * 100:F1}%"); // Convert back into power per tick if (!IsShutdown) @@ -89,7 +106,9 @@ public override void Init(MyObjectBuilder_EntityBase definition) public override void UpdateAfterSimulation() { base.UpdateAfterSimulation(); - var storagePct = MemberSystem?.PowerStored / MemberSystem?.MaxPowerStored ?? 0; + var storagePct = (MemberSystem?.PowerStored / MemberSystem?.MaxPowerStored) ?? 0; + if (float.IsNaN(storagePct) || float.IsInfinity(storagePct)) + storagePct = 0; if (storagePct <= 0.05f) { @@ -120,5 +139,30 @@ public override void UpdateAfterSimulation() } #endregion + + public struct DriveSetting + { + /// + /// Efficiency modifier for converting fusing rate into power. + /// + public float EfficiencyModifier; + + /// + /// Maximum overclock, in percent. + /// + public float MaxOverclock; + + /// + /// Default thrust output. + /// + public float BaseThrust; + + public DriveSetting(float efficiencyModifier, float maxOverclock, float baseThrust) + { + EfficiencyModifier = efficiencyModifier; + MaxOverclock = maxOverclock; + BaseThrust = baseThrust; + } + } } } \ No newline at end of file diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/S_FusionArm.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/S_FusionArm.cs similarity index 92% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/S_FusionArm.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/S_FusionArm.cs index 2e3a13a68..db4b5e5c1 100644 --- a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/S_FusionArm.cs +++ b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/S_FusionArm.cs @@ -1,11 +1,12 @@ using System; using System.Collections.Generic; using System.Linq; -using StarCore.FusionSystems.Communication; +using Epstein_Fusion_DS.Communication; +using Epstein_Fusion_DS.HudHelpers; using VRage.Game.ModAPI; using VRageMath; -namespace StarCore.FusionSystems. +namespace Epstein_Fusion_DS. FusionParts { /// @@ -18,7 +19,7 @@ internal struct SFusionArm private const float BlockPowerStorage = 32f; private const float SharedPropertyModifier = 0.05f; - private static ModularDefinitionApi ModularApi => ModularDefinition.ModularApi; + private static ModularDefinitionApi ModularApi => Epstein_Fusion_DS.ModularDefinition.ModularApi; public readonly bool IsValid; @@ -75,7 +76,7 @@ public SFusionArm(IMyCubeBlock newPart, string rootSubtype) private static bool PerformScan(IMyCubeBlock blockEntity, ref HashSet parts, string stopAtSubtype) { if (ModularApi.IsDebug()) - DebugDraw.DebugDraw.AddGridPoint(blockEntity.Position, + DebugDraw.AddGridPoint(blockEntity.Position, blockEntity.CubeGrid, Color.Blue, 2); var connectedBlocks = ModularApi.GetConnectedBlocks(blockEntity, "Modular_Fusion", false); diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/S_FusionManager.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/S_FusionManager.cs similarity index 80% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/S_FusionManager.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/S_FusionManager.cs index f8b55cfaf..69eaae41d 100644 --- a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/S_FusionManager.cs +++ b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/S_FusionManager.cs @@ -1,21 +1,19 @@ using System.Collections.Generic; using System.Linq; -using StarCore.FusionSystems.Communication; +using Epstein_Fusion_DS.Communication; using VRage.Game.ModAPI; -namespace StarCore.FusionSystems.FusionParts +namespace Epstein_Fusion_DS.FusionParts { internal class SFusionManager { public static SFusionManager I = new SFusionManager(); - private bool _didRegisterAssemblyClose; - private int _ticks; public ModularDefinition FusionDefinition; public Dictionary FusionSystems = new Dictionary(); public ModularDefinition HeatDefinition; - private static ModularDefinitionApi ModularApi => ModularDefinition.ModularApi; + private static ModularDefinitionApi ModularApi => Epstein_Fusion_DS.ModularDefinition.ModularApi; public void Load() { @@ -29,12 +27,6 @@ public void Unload() public void UpdateTick() { - if (!_didRegisterAssemblyClose && (ModularApi?.IsReady ?? false)) - { - ModularApi.AddOnAssemblyClose(assemblyId => FusionSystems.Remove(assemblyId)); - _didRegisterAssemblyClose = true; - } - foreach (var fusionSystem in FusionSystems.Values) fusionSystem.UpdateTick(); diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/S_FusionSystem.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/S_FusionSystem.cs similarity index 76% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/S_FusionSystem.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/S_FusionSystem.cs index e3cb18d23..60dc96174 100644 --- a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/S_FusionSystem.cs +++ b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/FusionParts/S_FusionSystem.cs @@ -1,20 +1,20 @@ using System; using System.Collections.Generic; using System.Linq; +using Epstein_Fusion_DS.Communication; +using Epstein_Fusion_DS.FusionParts.FusionReactor; +using Epstein_Fusion_DS.FusionParts.FusionThruster; using Sandbox.ModAPI; -using StarCore.FusionSystems.Communication; -using StarCore.FusionSystems.FusionParts.FusionReactor; -using StarCore.FusionSystems.FusionParts.FusionThruster; -using StarCore.FusionSystems.HeatParts; using VRage.Game.ModAPI; -namespace StarCore.FusionSystems. +namespace Epstein_Fusion_DS. FusionParts { internal class SFusionSystem { public const float MegawattsPerFusionPower = 32; - public const float NewtonsPerFusionPower = 12800000; + public const float NewtonsPerFusionPower = 1500000; + public const float HydrogenPerFusionPower = 42; public readonly IMyCubeGrid Grid; public readonly List Arms = new List(); @@ -37,8 +37,11 @@ internal class SFusionSystem /// public float PowerGeneration; + public float MaxPowerGeneration; + public readonly List Reactors = new List(); public readonly List Thrusters = new List(); + public readonly List Tanks = new List(); public SFusionSystem(int physicalAssemblyId) { @@ -55,7 +58,7 @@ public float PowerStored set { ModularApi.SetAssemblyProperty(PhysicalAssemblyId, "PowerStored", value); } } - private static ModularDefinitionApi ModularApi => ModularDefinition.ModularApi; + private static ModularDefinitionApi ModularApi => Epstein_Fusion_DS.ModularDefinition.ModularApi; public void AddPart(IMyCubeBlock newPart) { @@ -134,6 +137,11 @@ public void AddPart(IMyCubeBlock newPart) } } + if (newPart is IMyGasTank) + { + Tanks.Add(newPart as IMyGasTank); + } + UpdatePower(); } @@ -149,6 +157,7 @@ public void RemovePart(IMyCubeBlock part) var logic = part.GameLogic.GetAs(); logic.MemberSystem = null; Thrusters.Remove(logic); + logic.UpdatePower(PowerGeneration, NewtonsPerFusionPower, Thrusters.Count); } if (part is IMyReactor) @@ -156,6 +165,12 @@ public void RemovePart(IMyCubeBlock part) var logic = part.GameLogic.GetAs(); logic.MemberSystem = null; Reactors.Remove(logic); + logic.UpdatePower(PowerGeneration, NewtonsPerFusionPower, Thrusters.Count); + } + + if (part is IMyGasTank) + { + Tanks.Remove(part as IMyGasTank); } foreach (var arm in Arms.ToList()) @@ -173,7 +188,6 @@ public void RemovePart(IMyCubeBlock part) private void UpdatePower(bool updateReactors = false) { - //var generationModifier = 1 / (HeatManager.I.GetGridHeatLevel(Grid) + 0.5f); var generationModifier = 1; var powerGeneration = float.Epsilon; var powerCapacity = float.Epsilon; @@ -204,15 +218,43 @@ private void UpdatePower(bool updateReactors = false) // Subtract power usage afterwards so that all reactors have the same stats. PowerGeneration = powerGeneration; + MaxPowerGeneration = PowerGeneration; MaxPowerStored = powerCapacity; PowerConsumption = totalPowerUsage; - PowerGeneration -= totalPowerUsage; + + // Net PowerGeneration for h2 usage calcs + if (PowerStored + PowerGeneration > MaxPowerStored + PowerConsumption) + PowerGeneration = MaxPowerStored - PowerStored + PowerConsumption; + + if (!MyAPIGateway.Session.CreativeMode) + { + double availableGas = Tanks.Sum(t => t.FilledRatio * t.Capacity); + double gasNeeded = PowerGeneration * HydrogenPerFusionPower; + + if (Tanks.Count == 0 || availableGas <= gasNeeded) + { + PowerGeneration = 0; + } + else if (MyAPIGateway.Session.IsServer) + { + foreach (var tank in Tanks) + { + double tankConsumption = gasNeeded < tank.FilledRatio * tank.Capacity ? gasNeeded : tank.FilledRatio * tank.Capacity; + tank.ChangeFilledRatio(tank.FilledRatio - tankConsumption / tank.Capacity, true); + gasNeeded -= tankConsumption; + + if (gasNeeded <= 0) + break; + } + } + } // Update PowerStored + PowerStored -= PowerConsumption; PowerStored += PowerGeneration; if (PowerStored > MaxPowerStored) PowerStored = MaxPowerStored; ModularApi.SetAssemblyProperty(PhysicalAssemblyId, "HeatGeneration", - PowerConsumption * MegawattsPerFusionPower); + PowerConsumption * MegawattsPerFusionPower * 3); } public void UpdateTick() diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts.cs similarity index 66% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts.cs index cb50d9cfc..5490a45a9 100644 --- a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts.cs +++ b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts.cs @@ -1,11 +1,11 @@ using System; using System.Collections.Generic; -using StarCore.FusionSystems.FusionParts; -using StarCore.FusionSystems.HeatParts; +using Epstein_Fusion_DS.FusionParts; +using Epstein_Fusion_DS.HeatParts; using VRageMath; -using static StarCore.FusionSystems.Communication.DefinitionDefs; +using static Epstein_Fusion_DS.Communication.DefinitionDefs; -namespace StarCore.FusionSystems +namespace Epstein_Fusion_DS { internal partial class ModularDefinition { @@ -28,6 +28,11 @@ internal partial class ModularDefinition // Triggers whenever a part is destroyed, simultaneously with OnPartRemove OnPartDestroy = null, + OnAssemblyClose = assemblyId => + { + HeatManager.I.RemoveAssembly(assemblyId); + }, + // The most important block in an assembly. Connection checking starts here. BaseBlockSubtype = null, @@ -35,7 +40,10 @@ internal partial class ModularDefinition AllowedBlockSubtypes = new[] { "Heat_Heatsink", - "Heat_FlatRadiator" + "Heat_FlatRadiator", + "RadiatorPanel", + "ExtendableRadiatorBase", + "ActiveRadiator", }, // Allowed connection directions & whitelists, measured in blocks. @@ -53,23 +61,23 @@ internal partial class ModularDefinition ["Heat_FlatRadiator"] = new Dictionary { [Vector3I.Forward] = Array.Empty(), + [Vector3I.Up] = Array.Empty(), + [Vector3I.Down] = Array.Empty(), + [Vector3I.Left] = Array.Empty(), + [Vector3I.Right] = Array.Empty(), + }, + ["RadiatorPanel"] = new Dictionary + { + [Vector3I.Down] = Array.Empty(), + [Vector3I.Up] = Array.Empty(), + }, + ["ExtendableRadiatorBase"] = new Dictionary + { [Vector3I.Up] = new[] { - "Heat_FlatRadiator" - }, - [Vector3I.Down] = new[] - { - "Heat_FlatRadiator" + "RadiatorPanel" }, - [Vector3I.Left] = new[] - { - "Heat_FlatRadiator" - }, - [Vector3I.Right] = new[] - { - "Heat_FlatRadiator" - } - } + }, } }; } diff --git a/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/Definitions/HeatPartDefinition.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/Definitions/HeatPartDefinition.cs new file mode 100644 index 000000000..16eca682c --- /dev/null +++ b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/Definitions/HeatPartDefinition.cs @@ -0,0 +1,28 @@ +using System; +using VRage.Game.ModAPI; + +namespace Epstein_Fusion_DS.HeatParts.Definitions +{ + internal class HeatPartDefinition + { + /// + /// The subtype of the heat part block. + /// + public string SubtypeId; + + /// + /// Amount of heat removed per second by one block. + /// + public float HeatDissipation; + + /// + /// Amount of heat that can be stored by one block. + /// + public float HeatCapacity; + + /// + /// Optional line of sight check. Returns the occlusion percentage (dissipation efficiency modifier) of the input radiator. Set to null if unneeded. + /// + public Func LoSCheck; + } +} diff --git a/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/Definitions/HeatPartDefinitions.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/Definitions/HeatPartDefinitions.cs new file mode 100644 index 000000000..18dd35caf --- /dev/null +++ b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/Definitions/HeatPartDefinitions.cs @@ -0,0 +1,153 @@ +using Epstein_Fusion_DS.Communication; +using System.Collections.Generic; +using System.Linq; +using Epstein_Fusion_DS.HudHelpers; +using Sandbox.ModAPI; +using VRage.Game.ModAPI; +using VRageMath; + +namespace Epstein_Fusion_DS.HeatParts.Definitions +{ + internal static class HeatPartDefinitions + { + private static ModularDefinitionApi ModularApi => Epstein_Fusion_DS.ModularDefinition.ModularApi; + + public static HeatPartDefinition GetDefinition(string subtypeId) => + Definitions.FirstOrDefault(d => d.SubtypeId == subtypeId); + + public static bool HasDefinition(string subtypeId) => + Definitions.Any(d => d.SubtypeId == subtypeId); + + /// + /// Internal buffer list for cell casting + /// + private static readonly List _cellPositions = new List(); + + /// + /// Array of all heat part definitions + /// + public static readonly HeatPartDefinition[] Definitions = + { + new HeatPartDefinition + { + SubtypeId = "Heat_Heatsink", + HeatCapacity = 60, + HeatDissipation = 0, + LoSCheck = null + }, + new HeatPartDefinition + { + SubtypeId = "Heat_FlatRadiator", + HeatCapacity = 0, + HeatDissipation = 2, + LoSCheck = radiatorBlock => CheckGridIntersect(radiatorBlock, Vector3I.Zero, Vector3I.Backward) ? 0 : 1 + }, + new HeatPartDefinition + { + SubtypeId = "MDA_Radiator_1x2", + HeatCapacity = 0, + HeatDissipation = 4, + LoSCheck = radiatorBlock => + { + float occlusionModifier = 0; + + if (!CheckGridIntersect(radiatorBlock, Vector3I.Up, Vector3I.Forward)) + occlusionModifier += 1 / 6f; + if (!CheckGridIntersect(radiatorBlock, Vector3I.Up, Vector3I.Backward)) + occlusionModifier += 1 / 6f; + + if (!CheckGridIntersect(radiatorBlock, Vector3I.Zero, Vector3I.Forward)) + occlusionModifier += 1 / 6f; + if (!CheckGridIntersect(radiatorBlock, Vector3I.Zero, Vector3I.Backward)) + occlusionModifier += 1 / 6f; + + if (!CheckGridIntersect(radiatorBlock, Vector3I.Down, Vector3I.Forward)) + occlusionModifier += 1 / 6f; + if (!CheckGridIntersect(radiatorBlock, Vector3I.Down, Vector3I.Backward)) + occlusionModifier += 1 / 6f; + + return occlusionModifier; + } + }, + new HeatPartDefinition + { + SubtypeId = "RadiatorPanel", + HeatCapacity = 0, + HeatDissipation = 2, + LoSCheck = radiatorBlock => + { + float occlusionModifier = 0; + + if (!CheckGridIntersect(radiatorBlock, Vector3I.Zero, Vector3I.Right)) + occlusionModifier += 1 / 2f; + if (!CheckGridIntersect(radiatorBlock, Vector3I.Zero, Vector3I.Left)) + occlusionModifier += 1 / 2f; + + return occlusionModifier; + } + }, + new HeatPartDefinition + { + SubtypeId = "ActiveRadiator", + HeatCapacity = 60, + HeatDissipation = 50, + LoSCheck = radiatorBlock => + { + float occlusionModifier = 0; + + Vector3I[] checkPositions = + { + new Vector3I(1, 0, -1), + new Vector3I(0, 0, -1), + new Vector3I(-1, 0, -1), + + new Vector3I(1, 0, 0), + Vector3I.Zero, + new Vector3I(-1, 0, 0), + + new Vector3I(1, 0, 1), + new Vector3I(0, 0, 1), + new Vector3I(-1, 0, 1), + }; + + foreach (var pos in checkPositions) + if (!CheckGridIntersect(radiatorBlock, pos, Vector3I.Up)) + occlusionModifier += 1f / checkPositions.Length; + + if (!CheckGridIntersect(radiatorBlock, Vector3I.Zero, Vector3I.Up)) + occlusionModifier += 1 / 2f; + if (!CheckGridIntersect(radiatorBlock, Vector3I.Right, Vector3I.Up)) + occlusionModifier += 1 / 2f; + + return occlusionModifier; + } + } + }; + + private static bool CheckGridIntersect(IMyCubeBlock block, Vector3I checkOffset, Vector3I checkDirection) + { + _cellPositions.Clear(); + + var grid = block.CubeGrid; + var blockMatrix = block.WorldMatrix; + var gridMaxExtents = Vector3.Distance(grid.Max, grid.Min) * grid.GridSize; + var checkStartPosition = Vector3D.Transform(checkOffset * block.CubeGrid.GridSize, ref blockMatrix); + + if (ModularApi.IsDebug()) + DebugDraw.AddLine(checkStartPosition, + checkStartPosition + Vector3D.TransformNormal(checkDirection, ref blockMatrix) * gridMaxExtents, Color.Bisque, 2); + + block.CubeGrid.RayCastCells(checkStartPosition, + checkStartPosition + Vector3D.TransformNormal(checkDirection, ref blockMatrix) * gridMaxExtents, _cellPositions); + + foreach (var cellPosition in _cellPositions) + { + var testBlock = grid.GetCubeBlock(cellPosition); + if (testBlock != null && testBlock != block.SlimBlock) + return true; + } + + return false; + } + } +} diff --git a/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/ExtendableRadiators/ActiveRadiatorAnimation.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/ExtendableRadiators/ActiveRadiatorAnimation.cs new file mode 100644 index 000000000..b21d9f7df --- /dev/null +++ b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/ExtendableRadiators/ActiveRadiatorAnimation.cs @@ -0,0 +1,62 @@ +using Sandbox.ModAPI; +using VRage.Game; +using VRage.Game.Components; +using VRage.Game.Entity; +using VRage.Game.ModAPI; +using VRage.ModAPI; +using VRage.ObjectBuilders; +using VRageMath; + +namespace Epstein_Fusion_DS.HeatParts.ExtendableRadiators +{ + [MyEntityComponentDescriptor(typeof(MyObjectBuilder_TerminalBlock), false, "ActiveRadiator")] + internal class ActiveRadiatorAnimation : MyGameLogicComponent + { + private IMyCubeBlock Block; + private MyEntitySubpart FanPart; + private MyParticleEffect Particle; + + public override void Init(MyObjectBuilder_EntityBase objectBuilder) + { + base.Init(objectBuilder); + + Block = (IMyCubeBlock)Entity; + + NeedsUpdate |= MyEntityUpdateEnum.BEFORE_NEXT_FRAME; + } + + public override void UpdateOnceBeforeFrame() + { + base.UpdateOnceBeforeFrame(); + + if (Block?.CubeGrid?.Physics == null || MyAPIGateway.Utilities.IsDedicated) + return; + + FanPart = Block.GetSubpart("blades"); + + MyParticlesManager.TryCreateParticleEffect("ActiveRadiatorParticle", ref MatrixD.Identity, ref Vector3D.Zero, Block.Render.GetRenderObjectID(), out Particle); + + NeedsUpdate |= MyEntityUpdateEnum.EACH_FRAME; + } + + public override void UpdateAfterSimulation() + { + float heatLevel = HeatManager.I.GetGridHeatLevel(Block.CubeGrid); + + Matrix refMatrix = MatrixD.CreateFromAxisAngle(Vector3D.Up, -0.1 * heatLevel) * FanPart.PositionComp.LocalMatrixRef; + refMatrix.Translation = FanPart.PositionComp.LocalMatrixRef.Translation; + FanPart.PositionComp.SetLocalMatrix(ref refMatrix); + + if (heatLevel < 0.15) + heatLevel = 0; + + Particle.UserBirthMultiplier = heatLevel * heatLevel; + Particle.UserVelocityMultiplier = heatLevel * heatLevel; + } + + public override void Close() + { + Particle?.Close(); + } + } +} diff --git a/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/ExtendableRadiators/ExtendableRadiator.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/ExtendableRadiators/ExtendableRadiator.cs new file mode 100644 index 000000000..8e8c80e10 --- /dev/null +++ b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/ExtendableRadiators/ExtendableRadiator.cs @@ -0,0 +1,282 @@ +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using Epstein_Fusion_DS.Communication; +using Epstein_Fusion_DS.HudHelpers; +using ProtoBuf; +using Sandbox.Game.Entities; +using Sandbox.Game.EntityComponents; +using Sandbox.ModAPI; +using VRage.Game; +using VRage.Game.Components; +using VRage.Game.ModAPI; +using VRage.ModAPI; +using VRage.ObjectBuilders; +using VRageMath; + +namespace Epstein_Fusion_DS.HeatParts.ExtendableRadiators +{ + [MyEntityComponentDescriptor(typeof(MyObjectBuilder_TerminalBlock), false, "ExtendableRadiatorBase")] + internal class ExtendableRadiator : MyGameLogicComponent + { + public static readonly Guid RadiatorGuid = new Guid("e6b87818-5fd8-47a6-a480-3365e20214e1"); + public static readonly string[] ValidPanelSubtypes = + { + "RadiatorPanel", + }; + + + public IMyCubeBlock Block; + internal StoredRadiator[] StoredRadiators = Array.Empty(); + internal RadiatorAnimation Animation; + + private bool _isExtended = true; + public bool IsExtended + { + get + { + return _isExtended; + } + set + { + if (Animation.IsActive) + return; + + if (value) + ExtendPanels(); + else + RetractPanels(); + _isExtended = value; + } + } + + public override void Init(MyObjectBuilder_EntityBase objectBuilder) + { + base.Init(objectBuilder); + + Block = (IMyCubeBlock)Entity; + + NeedsUpdate |= MyEntityUpdateEnum.BEFORE_NEXT_FRAME; + } + + public override void UpdateOnceBeforeFrame() + { + RadiatorControls.DoOnce(); + base.UpdateOnceBeforeFrame(); + + if (Block?.CubeGrid?.Physics == null) + return; + + LoadSettings(); + + try + { + SaveSettings(); + } + catch (Exception ex) + { + ModularDefinition.ModularApi.Log(ex.ToString()); + } + + Animation = new RadiatorAnimation(this); + NeedsUpdate |= MyEntityUpdateEnum.EACH_FRAME; + //NeedsUpdate |= MyEntityUpdateEnum.EACH_100TH_FRAME; + } + + public override void UpdateAfterSimulation() + { + base.UpdateAfterSimulation(); + + // This is stupid, but prevents the mod profiler cost from being incurred every tick per block when inactive + if (Animation.IsActive) + Animation.UpdateTick(); + } + + public override bool IsSerialized() + { + try + { + SaveSettings(); + } + catch (Exception ex) + { + ModularDefinition.ModularApi.Log(ex.ToString()); + } + + return base.IsSerialized(); + } + + internal void SaveSettings() + { + if (Block == null) + return; // called too soon or after it was already closed, ignore + + if (StoredRadiators == null) + throw new NullReferenceException($"Settings == null on entId={Entity?.EntityId}; Test log 1"); + + if (MyAPIGateway.Utilities == null) + throw new NullReferenceException($"MyAPIGateway.Utilities == null; entId={Entity?.EntityId}; Test log 2"); + + if (Block.Storage == null) + Block.Storage = new MyModStorageComponent(); + + Block.Storage.SetValue(RadiatorGuid, Convert.ToBase64String(MyAPIGateway.Utilities.SerializeToBinary(StoredRadiators))); + } + + internal void LoadSettings() + { + if (Block.Storage == null) + return; + + string rawData; + if (!Block.Storage.TryGetValue(RadiatorGuid, out rawData)) + return; + + try + { + var loadedSettings = MyAPIGateway.Utilities.SerializeFromBinary(Convert.FromBase64String(rawData)) ?? Array.Empty(); + + StoredRadiators = loadedSettings; + _isExtended = StoredRadiators.Length == 0; + + for (int i = 0; i < StoredRadiators.Length; i++) + { + if (Block.LocalMatrix == StoredRadiators[i].BaseLocalMatrix) + break; + + var matrix = Matrix.Invert(StoredRadiators[i].BaseLocalMatrix) * Block.LocalMatrix; + + StoredRadiators[i].ObjectBuilder.Min = Block.Position + (Vector3I)Block.LocalMatrix.Up * (i+1); + StoredRadiators[i].LocalMatrix *= matrix; + StoredRadiators[i].ObjectBuilder.Orientation = Quaternion.CreateFromRotationMatrix(StoredRadiators[i].LocalMatrix); + + var matrix2 = StoredRadiators[i].LocalMatrix; + StoredRadiators[i].ObjectBuilder.BlockOrientation = new MyBlockOrientation(ref matrix2); + + StoredRadiators[i].BaseLocalMatrix = Block.LocalMatrix; + } + } + catch (Exception e) + { + ModularDefinition.ModularApi.Log(e.ToString()); + } + } + + public void ExtendPanels() + { + if (_isExtended || Animation.IsActive) + return; + + Vector3I nextPosition = Block.Position; + + try + { + // TODO move this to clientside + for (int i = 0; i < StoredRadiators.Length; i++) + { + nextPosition += (Vector3I)(Block.LocalMatrix.Up * (i + 1)); + + if (Block.CubeGrid.CubeExists(nextPosition)) + { + MyAPIGateway.Utilities.ShowNotification("Block already exists at position!"); + DebugDraw.AddGridPoint(nextPosition, Block.CubeGrid, Color.Red, 4); + _isExtended = false; + return; + } + } + + for (int i = 0; i < StoredRadiators.Length; i++) + { + StoredRadiators[i].ObjectBuilder.Name = null; + + var newBlock = Block.CubeGrid.AddBlock(StoredRadiators[i].ObjectBuilder, true); + if (newBlock?.FatBlock != null) + newBlock.FatBlock.Visible = false; + else + ModularDefinition.ModularApi.Log($"Stored radiator panel is null!\n Builder: {StoredRadiators[i].ObjectBuilder == null}\n Slimblock: {newBlock == null}\n Fatblock: {newBlock?.FatBlock == null}"); + } + + Animation.StartExtension(); + } + catch (Exception ex) + { + ModularDefinition.ModularApi.Log(ex.ToString()); + } + } + + /// + /// Panels start invisible for the animation to play. This makes them visible again. + /// + public void MakePanelsVisible() + { + IMyCubeBlock nextBlock; + int idx = 1; + + while (GetNextPanel(idx, out nextBlock)) + { + nextBlock.Visible = true; + idx++; + } + + StoredRadiators = Array.Empty(); + } + + public void RetractPanels() + { + if (!_isExtended) + return; + + IMyCubeBlock nextBlock; + List builders = new List(); + int idx = 1; + + while (GetNextPanel(idx, out nextBlock)) + { + var builder = nextBlock.GetObjectBuilderCubeBlock(true); + + builder.BlockOrientation = nextBlock.Orientation; + + Matrix matrix; + builders.Add(new StoredRadiator(builder, nextBlock.LocalMatrix, nextBlock.CalculateCurrentModel(out matrix), Block.LocalMatrix)); + + nextBlock.CubeGrid.RemoveBlock(nextBlock.SlimBlock, true); + idx++; + } + + StoredRadiators = builders.ToArray(); + + Animation.StartRetraction(); + } + + internal bool GetNextPanel(int idx, out IMyCubeBlock next) + { + IMySlimBlock block = Block.CubeGrid.GetCubeBlock((Vector3I)(Block.Position + Block.LocalMatrix.Up * idx)); + if (block == null || !ValidPanelSubtypes.Contains(block.BlockDefinition.Id.SubtypeName)) + { + next = null; + return false; + } + + next = block.FatBlock; + return true; + } + + [ProtoContract] + internal struct StoredRadiator + { + [ProtoMember(1)] public MyObjectBuilder_CubeBlock ObjectBuilder; + [ProtoMember(2)] public Matrix LocalMatrix; + [ProtoMember(4)] public Matrix BaseLocalMatrix; + [ProtoMember(3)] public string Model; + + + public StoredRadiator(MyObjectBuilder_CubeBlock objectBuilder, Matrix localMatrix, string model, Matrix baseLocalMatrix) + { + ObjectBuilder = objectBuilder; + LocalMatrix = localMatrix; + Model = model; + BaseLocalMatrix = baseLocalMatrix; + } + } + } +} diff --git a/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/ExtendableRadiators/RadiatorAnimation.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/ExtendableRadiators/RadiatorAnimation.cs new file mode 100644 index 000000000..f152477a5 --- /dev/null +++ b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/ExtendableRadiators/RadiatorAnimation.cs @@ -0,0 +1,207 @@ +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using Epstein_Fusion_DS.HudHelpers; +using Sandbox.Engine.Physics; +using Sandbox.Game.Entities; +using Sandbox.ModAPI; +using VRage.Game.Components; +using VRage.Game.Entity; +using VRage.Game.ModAPI; +using VRage.ModAPI; +using VRage.ObjectBuilders; +using VRageMath; +using CollisionLayers = Sandbox.Engine.Physics.MyPhysics.CollisionLayers; +using Color = VRageMath.Color; + +namespace Epstein_Fusion_DS.HeatParts.ExtendableRadiators +{ + internal class RadiatorAnimation + { + public readonly ExtendableRadiator Radiator; + public bool IsActive = false; + public bool IsExtending = false; + + private HashSet _animationEntities = new HashSet(); + + public RadiatorAnimation(ExtendableRadiator radiator) + { + Radiator = radiator; + } + + public void StartExtension() + { + IsActive = true; + IsExtending = true; + } + + public void StartRetraction() + { + IsActive = true; + IsExtending = false; + } + + private int _animationTick = 0; + public void UpdateTick() + { + if (!IsActive) + return; + + _animationTick++; + + if (IsExtending) + { + // Extension animation + + if (_animationTick == 1) + { + MyEntity parentEntity = (MyEntity) Radiator.Block; + Matrix localMatrixOffset = Matrix.Invert(Radiator.Block.LocalMatrix); + + for (int i = 0; i < Radiator.StoredRadiators.Length; i++) + { + _animationEntities.Add(new AnimationPanel(Radiator.StoredRadiators[i].Model, Radiator.StoredRadiators[i].LocalMatrix * localMatrixOffset, parentEntity)); + parentEntity = _animationEntities.Last(); + localMatrixOffset = Matrix.Invert(Radiator.StoredRadiators[i].LocalMatrix); + } + + int idx = 0; + foreach (var entity in _animationEntities) + { + if (idx == 0) + { + entity.RotateAroundLocalAxis(1.1781); + entity.MoveLocalSpace(entity.RightVector * -0.75f); + } + else + { + entity.RotateAroundLocalAxis(1.1781*2); + } + + idx++; + } + } + + if (_animationTick <= 120) + { + int idx = 0; + foreach (var entity in _animationEntities) + { + if (idx == 0) + { + entity.RotateAroundLocalAxis(-1.1781/120); + entity.MoveLocalSpace(entity.RightVector * 0.75f/120); + } + else + { + entity.RotateAroundLocalAxis(-1.1781/120*2); + } + + idx++; + } + + return; + } + + Reset(); + Radiator.MakePanelsVisible(); + } + else + { + // Retraction animation + + if (_animationTick == 1) + { + MyEntity parentEntity = (MyEntity) Radiator.Block; + Matrix localMatrixOffset = Matrix.Invert(Radiator.Block.LocalMatrix); + + for (int i = 0; i < Radiator.StoredRadiators.Length; i++) + { + _animationEntities.Add(new AnimationPanel(Radiator.StoredRadiators[i].Model, Radiator.StoredRadiators[i].LocalMatrix * localMatrixOffset, parentEntity)); + parentEntity = _animationEntities.Last(); + localMatrixOffset = Matrix.Invert(Radiator.StoredRadiators[i].LocalMatrix); + } + } + + if (_animationTick <= 120) + { + int idx = 0; + foreach (var entity in _animationEntities) + { + if (idx == 0) + { + entity.RotateAroundLocalAxis(1.1781/120); + entity.MoveLocalSpace(entity.RightVector * -0.75f/120); + } + else + { + entity.RotateAroundLocalAxis(1.1781/120*2); + } + + idx++; + } + + return; + } + + Reset(); + return; + } + } + + private void Reset() + { + _animationTick = 0; + IsActive = false; + + foreach (var entity in _animationEntities) + entity.Close(); + _animationEntities.Clear(); + } + + private sealed class AnimationPanel : MyEntity + { + /// + /// As the block rotates, its orientation changes. RightVector is used to translate the block relative to itself after rotation. + /// + public readonly Vector3D RightVector; + private Vector3D _rotationPoint = new Vector3D(-0.5, 1.25, 0); + private readonly bool _isUpsideDown; + + public AnimationPanel(string model, Matrix localMatrix, MyEntity parent) + { + Init(null, model, parent, 1); + if (string.IsNullOrEmpty(model)) + Flags &= ~EntityFlags.Visible; + Save = false; + NeedsWorldMatrix = true; + + PositionComp.SetLocalMatrix(ref localMatrix); + MyEntities.Add(this); + + RightVector = PositionComp.LocalMatrixRef.Right; + + _isUpsideDown = PositionComp.LocalMatrixRef.Up.Y * PositionComp.LocalMatrixRef.Translation.Y > 0; + if (_isUpsideDown) + _rotationPoint *= -1; + } + + public void RotateAroundLocalAxis(double amount) + { + Matrix newMatrix = Utils.RotateMatrixAroundPoint(PositionComp.LocalMatrixRef, + Vector3D.Transform(_rotationPoint, PositionComp.LocalMatrixRef), PositionComp.LocalMatrixRef.Backward, amount); + PositionComp.SetLocalMatrix(ref newMatrix); + } + + public void MoveLocalSpace(Vector3 amount) + { + if (_isUpsideDown) + amount *= -1; + + Matrix newMatrix = PositionComp.LocalMatrixRef; + newMatrix.Translation += amount; + PositionComp.SetLocalMatrix(ref newMatrix); + } + } + } +} diff --git a/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/ExtendableRadiators/RadiatorControls.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/ExtendableRadiators/RadiatorControls.cs new file mode 100644 index 000000000..ea8e7739e --- /dev/null +++ b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/ExtendableRadiators/RadiatorControls.cs @@ -0,0 +1,80 @@ +using System.Text; +using Sandbox.ModAPI; +using Sandbox.ModAPI.Interfaces.Terminal; +using VRage.Utils; + +namespace Epstein_Fusion_DS.HeatParts.ExtendableRadiators +{ + internal static class RadiatorControls + { + private static bool _done = false; + + static bool CustomVisibleCondition(IMyTerminalBlock b) + { + // only visible for the blocks having this gamelogic comp + return b?.GameLogic?.GetAs() != null; + } + + public static void DoOnce() // called by GyroLogic.cs + { + if (_done) + return; + _done = true; + + // these are all the options and they're not all required so use only what you need. + CreateControls(); + } + + private static void CreateControls() + { + { + var c = MyAPIGateway.TerminalControls.CreateControl("Radiator_ToggleExtended"); + c.Title = MyStringId.GetOrCompute("Toggle Extension"); + c.Tooltip = MyStringId.GetOrCompute("Extends or retracts radiator panels attached to this block."); + c.SupportsMultipleBlocks = true; + + c.Visible = CustomVisibleCondition; + + c.OnText = MyStringId.GetOrCompute("Extended"); + c.OffText = MyStringId.GetOrCompute("Retracted"); + + c.Getter = (b) => b?.GameLogic?.GetAs()?.IsExtended ?? false; + c.Setter = (b, v) => + { + var logic = b?.GameLogic?.GetAs(); + if (logic != null) + logic.IsExtended = v; + c.UpdateVisual(); + }; + + MyAPIGateway.TerminalControls.AddControl(c); + } + + { + var a = MyAPIGateway.TerminalControls.CreateAction("Radiator_ToggleExtended"); + a.Name = new StringBuilder("Toggle Extension"); + a.ValidForGroups = true; + + a.Enabled = CustomVisibleCondition; + + a.Writer = (block, builder) => + { + builder.Clear(); + if (block?.GameLogic?.GetAs()?.IsExtended ?? false) + builder.Append("Extended"); + else + builder.Append("Retracted"); + }; + + a.Action = (block) => + { + var logic = block?.GameLogic?.GetAs(); + if (logic != null) + logic.IsExtended = !logic.IsExtended; + }; + + MyAPIGateway.TerminalControls.AddAction(a); + } + } + } +} diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/GridHeatManager.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/GridHeatManager.cs similarity index 87% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/GridHeatManager.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/GridHeatManager.cs index 229748faf..34e874fc3 100644 --- a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/GridHeatManager.cs +++ b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/GridHeatManager.cs @@ -1,10 +1,10 @@ using System.Collections.Generic; +using Epstein_Fusion_DS.Communication; using Sandbox.Game.Entities; -using StarCore.FusionSystems.Communication; using VRage.Game.ModAPI; using VRageMath; -namespace StarCore.FusionSystems.HeatParts +namespace Epstein_Fusion_DS.HeatParts { internal class GridHeatManager { @@ -30,7 +30,7 @@ public GridHeatManager(IMyCubeGrid grid) Grid = (MyCubeGrid)grid; } - private static ModularDefinitionApi ModularApi => ModularDefinition.ModularApi; + private static ModularDefinitionApi ModularApi => Epstein_Fusion_DS.ModularDefinition.ModularApi; public MyCubeGrid Grid { get; } @@ -58,6 +58,11 @@ public void UpdateTick() HeatRatio = HeatStored / (HeatCapacity + BaseHeatCapacity); } + public void RemoveAssembly(int assemblyId) + { + _heatSystems.Remove(assemblyId); + } + private void Update15Tick() { var gridSize = (Grid.Max - Grid.Min + Vector3I.One) * Grid.GridSize; @@ -88,7 +93,10 @@ public void OnPartAdd(int assemblyId, IMyCubeBlock block, bool isBaseBlock) public void OnPartRemove(int assemblyId, IMyCubeBlock block, bool isBaseBlock) { - var system = _heatSystems[assemblyId]; + var system = _heatSystems.GetValueOrDefault(assemblyId, null); + if (system == null) + return; + system.OnPartRemove(block); if (system.BlockCount <= 0) diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/HeatManager.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/HeatManager.cs similarity index 91% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/HeatManager.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/HeatManager.cs index 6558142f9..d770a90f5 100644 --- a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/HeatManager.cs +++ b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/HeatManager.cs @@ -1,9 +1,10 @@ using System.Collections.Generic; +using System.Linq; using Sandbox.ModAPI; using VRage.Game.ModAPI; using VRage.ModAPI; -namespace StarCore.FusionSystems.HeatParts +namespace Epstein_Fusion_DS.HeatParts { internal class HeatManager { @@ -34,6 +35,12 @@ public void UpdateTick() system.UpdateTick(); } + public void RemoveAssembly(int assemblyId) + { + foreach (var system in _heatSystems.Values) + system.RemoveAssembly(assemblyId); + } + public float GetGridHeatLevel(IMyCubeGrid grid) { return _heatSystems.GetValueOrDefault(grid, null)?.HeatRatio ?? -1; diff --git a/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/HeatSystem.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/HeatSystem.cs new file mode 100644 index 000000000..50ac777fa --- /dev/null +++ b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HeatParts/HeatSystem.cs @@ -0,0 +1,141 @@ +using System.Collections.Generic; +using System.Linq; +using Epstein_Fusion_DS.Communication; +using Epstein_Fusion_DS.HeatParts.Definitions; +using VRage.Game.ModAPI; +using VRageMath; + +namespace Epstein_Fusion_DS.HeatParts +{ + internal class HeatSystem + { + /// + /// Maps radiator blocks to their heat dissipation. + /// + private readonly Dictionary _radiatorBlocks = new Dictionary(); + + public int AssemblyId; + + public GridHeatManager Parent; + + + public HeatSystem(int assemblyId, GridHeatManager parent) + { + AssemblyId = assemblyId; + Parent = parent; + + HeatDissipation = 0; + HeatCapacity = 0; + + Parent.Grid.OnBlockAdded += UpdateLoS; + Parent.Grid.OnBlockRemoved += UpdateLoS; + } + + private static ModularDefinitionApi ModularApi => Epstein_Fusion_DS.ModularDefinition.ModularApi; + public int BlockCount { get; private set; } + + /// + /// Total heat dispersed per second by this assembly. + /// + public float HeatDissipation + { + get { return ModularApi.GetAssemblyProperty(AssemblyId, "HeatDissipation"); } + private set { ModularApi.SetAssemblyProperty(AssemblyId, "HeatDissipation", value); } + } + + /// + /// Total heat able to be stored by this assembly. + /// + public float HeatCapacity + { + get { return ModularApi.GetAssemblyProperty(AssemblyId, "HeatCapacity"); } + private set { ModularApi.SetAssemblyProperty(AssemblyId, "HeatCapacity", value); } + } + + public void OnPartAdd(IMyCubeBlock block) + { + var definition = HeatPartDefinitions.GetDefinition(block.BlockDefinition.SubtypeId); + if (definition == null) + return; + + if (definition.HeatCapacity != 0) + { + HeatCapacity += definition.HeatCapacity; + Parent.HeatCapacity += definition.HeatCapacity; + } + + if (definition.HeatDissipation != 0) + { + _radiatorBlocks.Add(block, 0); + DoLoSCheck(block); + } + + BlockCount++; + } + + public void OnPartRemove(IMyCubeBlock block) + { + var definition = HeatPartDefinitions.GetDefinition(block.BlockDefinition.SubtypeId); + if (definition == null) + return; + + if (definition.HeatCapacity != 0) + { + HeatCapacity -= definition.HeatCapacity; + Parent.HeatCapacity -= definition.HeatCapacity; + } + + if (definition.HeatDissipation != 0) + { + HeatDissipation -= _radiatorBlocks[block]; + Parent.HeatDissipation -= _radiatorBlocks[block]; + _radiatorBlocks.Remove(block); + } + + BlockCount--; + } + + public void OnClose() + { + Parent.Grid.OnBlockAdded -= UpdateLoS; + Parent.Grid.OnBlockRemoved -= UpdateLoS; + } + + private void UpdateLoS(IMySlimBlock newBlock) + { + Quaternion radQuaternion; + + foreach (var radiator in _radiatorBlocks.Keys.ToArray()) + { + radiator.Orientation.GetQuaternion(out radQuaternion); + + var offset = (Vector3I)(radQuaternion * (newBlock.Position - radiator.Position)); + var radiatorSize = (radiator.Max - radiator.Min + Vector3I.One).AbsMax(); + + // If block is in front of radiator panel + if (offset.X < radiatorSize && offset.Y < radiatorSize && offset.Z < radiatorSize) DoLoSCheck(radiator); + } + } + + private void DoLoSCheck(IMyCubeBlock radiatorBlock) + { + var definition = HeatPartDefinitions.GetDefinition(radiatorBlock.BlockDefinition.SubtypeId); + if (definition == null) + return; + + float currentDissipation = (definition.LoSCheck?.Invoke(radiatorBlock) ?? 1) * definition.HeatDissipation; + float prevDissipation = _radiatorBlocks[radiatorBlock]; + + if (currentDissipation == prevDissipation) + return; + + HeatDissipation -= prevDissipation; + Parent.HeatDissipation -= prevDissipation; + + HeatDissipation += currentDissipation; + Parent.HeatDissipation += currentDissipation; + + _radiatorBlocks[radiatorBlock] = currentDissipation; + } + } +} \ No newline at end of file diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/ConsumptionBar.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/ConsumptionBar.cs similarity index 85% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/ConsumptionBar.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/ConsumptionBar.cs index 9e261c174..a67d508dc 100644 --- a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/ConsumptionBar.cs +++ b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/ConsumptionBar.cs @@ -1,21 +1,16 @@ using System; -using RichHudFramework; -using RichHudFramework.Internal; +using Epstein_Fusion_DS.Communication; +using Epstein_Fusion_DS.FusionParts; +using Epstein_Fusion_DS.HeatParts; using RichHudFramework.UI; using RichHudFramework.UI.Client; using RichHudFramework.UI.Rendering; -using Sandbox.Game; using Sandbox.Game.Entities; using Sandbox.ModAPI; -using StarCore.FusionSystems.Communication; -using StarCore.FusionSystems.FusionParts; -using StarCore.FusionSystems.HeatParts; -using VRage.Audio; using VRage.Game.Entity; -using VRage.Input; using VRageMath; -namespace StarCore.FusionSystems.HudHelpers +namespace Epstein_Fusion_DS.HudHelpers { internal class ConsumptionBar : WindowBase { @@ -73,7 +68,7 @@ public ConsumptionBar(HudParentBase parent) : base(parent) 0); // Relative to 1920x1080 } - private static ModularDefinitionApi ModularApi => ModularDefinition.ModularApi; + private static ModularDefinitionApi ModularApi => Epstein_Fusion_DS.ModularDefinition.ModularApi; protected override void Layout() { @@ -111,6 +106,7 @@ public void Update() float totalFusionGeneration = 0; float totalFusionStored = 0; float reactorIntegrity = 0; + int reactorCount = 0; foreach (var system in SFusionManager.I.FusionSystems) { @@ -123,10 +119,15 @@ public void Update() foreach (var reactor in system.Value.Reactors) { reactorIntegrity += reactor.Block.SlimBlock.Integrity/reactor.Block.SlimBlock.MaxIntegrity; + reactorCount++; + } + foreach (var thruster in system.Value.Thrusters) + { + reactorIntegrity += thruster.Block.SlimBlock.Integrity/thruster.Block.SlimBlock.MaxIntegrity; + reactorCount++; } - - reactorIntegrity /= system.Value.Reactors.Count; } + reactorIntegrity /= reactorCount; // Hide HUD element if the grid has no fusion systems (capacity is always >0 for a fusion system) if (totalFusionCapacity == 0) @@ -148,16 +149,21 @@ public void Update() else timeToCharge = 0; - HeaderText = $"Fusion | {(totalFusionGeneration > 0 ? "+" : "-")}{Math.Round(timeToCharge)}s"; + //if (timeToCharge > 0) + // HeaderText = $"Fusion | {(totalFusionGeneration > 0 ? "+" : "-")}{Math.Round(timeToCharge)}s"; + //else + // HeaderText = $"Fusion | {totalFusionGeneration:N0}/s"; + HeaderText = $"Fusion | {totalFusionStored/totalFusionCapacity * 100:N0}%"; + _noticeLabel.Text = new RichText { - {"Reactor Integrity: ", GlyphFormat.White}, + {"Integrity: ", GlyphFormat.White}, {(reactorIntegrity*100).ToString("N0") + "%", GlyphFormat.White.WithColor(reactorIntegrity > 0.52 ? Color.White : Color.Red)} }; if (HeatManager.I.GetGridHeatLevel(playerGrid) > 0.8f) { - _noticeLabel.TextBoard.Append("\nTAKING THERMAL DAMAGE", GlyphFormat.White.WithColor(Color.Red)); + _noticeLabel.TextBoard.Append("\nTHERMAL DAMAGE", GlyphFormat.White.WithColor(Color.Red)); if (_soundEmitter == null) { diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/DebugDraw/DebugDrawManager.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/DebugDrawManager.cs similarity index 99% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/DebugDraw/DebugDrawManager.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/DebugDrawManager.cs index 2a36d77f2..2a38074db 100644 --- a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/DebugDraw/DebugDrawManager.cs +++ b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/DebugDrawManager.cs @@ -8,11 +8,9 @@ using VRage.Game.ModAPI; using VRage.Utils; using VRageMath; -using VRageRender; using static VRageRender.MyBillboard; -namespace StarCore.FusionSystems. - DebugDraw +namespace Epstein_Fusion_DS.HudHelpers { [MySessionComponentDescriptor(MyUpdateOrder.NoUpdate)] public class DebugDraw : MySessionComponentBase diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/RichHudClient.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/RichHudClient.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/RichHudClient.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/RichHudClient.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/BindManager/Bind.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/BindManager/Bind.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/BindManager/Bind.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/BindManager/Bind.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/BindManager/BindGroup.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/BindManager/BindGroup.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/BindManager/BindGroup.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/BindManager/BindGroup.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/BindManager/BindManager.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/BindManager/BindManager.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/BindManager/BindManager.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/BindManager/BindManager.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/BindManager/Control.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/BindManager/Control.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/BindManager/Control.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/BindManager/Control.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/HUD/HudCursor.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/HUD/HudCursor.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/HUD/HudCursor.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/HUD/HudCursor.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/HUD/HudMain.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/HUD/HudMain.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/HUD/HudMain.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/HUD/HudMain.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/HUD/Rendering/BillboardUtils.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/HUD/Rendering/BillboardUtils.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/HUD/Rendering/BillboardUtils.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/HUD/Rendering/BillboardUtils.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/HUD/Rendering/FontManager/FontData.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/HUD/Rendering/FontManager/FontData.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/HUD/Rendering/FontManager/FontData.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/HUD/Rendering/FontManager/FontData.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/HUD/Rendering/FontManager/FontManager.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/HUD/Rendering/FontManager/FontManager.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/HUD/Rendering/FontManager/FontManager.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/HUD/Rendering/FontManager/FontManager.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/HUD/Rendering/TextBoard.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/HUD/Rendering/TextBoard.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/HUD/Rendering/TextBoard.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/HUD/Rendering/TextBoard.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/HUD/Rendering/TextBuilder.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/HUD/Rendering/TextBuilder.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/HUD/Rendering/TextBuilder.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/HUD/Rendering/TextBuilder.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/ControlCategory.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/ControlCategory.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/ControlCategory.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/ControlCategory.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/ControlTile.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/ControlTile.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/ControlTile.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/ControlTile.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalButton.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalButton.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalButton.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalButton.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalCheckbox.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalCheckbox.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalCheckbox.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalCheckbox.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalColorPicker.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalColorPicker.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalColorPicker.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalColorPicker.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalControlBase.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalControlBase.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalControlBase.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalControlBase.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalDragBox.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalDragBox.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalDragBox.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalDragBox.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalDropdown.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalDropdown.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalDropdown.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalDropdown.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalList.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalList.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalList.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalList.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalOnOffButton.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalOnOffButton.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalOnOffButton.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalOnOffButton.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalSlider.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalSlider.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalSlider.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TerminalSlider.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TextField.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TextField.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TextField.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Controls/TextField.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/ListBoxData.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/ListBoxData.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/ListBoxData.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/ListBoxData.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/ModControlRoot.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/ModControlRoot.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/ModControlRoot.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/ModControlRoot.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Pages/ControlPage.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Pages/ControlPage.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Pages/ControlPage.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Pages/ControlPage.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Pages/RebindPage.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Pages/RebindPage.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Pages/RebindPage.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Pages/RebindPage.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Pages/TerminalPageBase.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Pages/TerminalPageBase.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Pages/TerminalPageBase.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Pages/TerminalPageBase.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Pages/TextPage.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Pages/TextPage.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Pages/TextPage.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/Pages/TextPage.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/RichHudTerminal.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/RichHudTerminal.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/RichHudTerminal.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/RichHudTerminal.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/TerminalPageCategory.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/TerminalPageCategory.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/TerminalPageCategory.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Client/UI/SettingsMenu/TerminalPageCategory.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/LICENSE b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/LICENSE similarity index 98% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/LICENSE rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/LICENSE index dd4b98af1..42871ca51 100644 --- a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/LICENSE +++ b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/LICENSE @@ -1,21 +1,21 @@ -MIT License - -Copyright (c) 2020 Zachary Hembree - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +MIT License + +Copyright (c) 2020 Zachary Hembree + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/README.md b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/README.md similarity index 99% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/README.md rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/README.md index aad2e9588..a0490c337 100644 --- a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/README.md +++ b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/README.md @@ -1,17 +1,17 @@ -## Rich HUD Framework -This is a framework for creating custom retained-mode GUI in Space Engineers workshop mods using the billboards supplied by the mod API. It's nothing fancy, but it has most of the basic functionality you'd expect from a UI framework: text rendering, custom fonts, UI layering, key binds, mouse input, everything you might need to get started creating custom GUI in Space Engineers, sans markup lanugage. Everything is done in C#. If you want an idea of what that looks like, exactly, then have a look at some of the elements in the UI [library](https://github.com/ZachHembree/RichHudFramework.Client/blob/master/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/BorderedButton.cs); most of it's pretty straightforward. - -## Getting Started -Space Engineer's mods are all compiled to independent assemblies with no references between them, for reasons I trust are apparent, but this has the obvious drawback of preventing any two mods from directly sharing code. Fortunately, the game does provide utilities for sharing data at runtime using types exposed by the game's mod API, like generic delegates and tuples. For this reason, this framework is split into three modules: Master, Client and Shared. The master module contains the implementation for things like the text renderer, bind manager, and manages the UI tree, among other things and the Client module provides wrappers and utilities that provide easy access to those systems. - -To get started using this framework, you'll need to download a copy of the [client](https://github.com/ZachHembree/RichHudFramework.Client/releases) module from releases and include it in your mod. Usage details can be found in the [wiki](https://github.com/ZachHembree/RichHudFramework.Client/wiki), in addition to a detailed overview of the framework's functions. - -## Demo -If you want to get a better idea of what you can do with this framework, [Rich HUD Master](https://steamcommunity.com/workshop/filedetails/?id=1965654081) has a demo built into the terminal that can be enabled using the chat command "/rhd toggledebug". This demo allows you to spawn most of the UI elements in the library in their default state while also allowing you to maniplate their [HUD Space](https://github.com/ZachHembree/RichHudFramework.Client/wiki/HUD-Spaces) in real time. - -![Demo menu screenshot](https://steamuserimages-a.akamaihd.net/ugc/1722038154210428899/17BC5D4D245402D3E642B36672DC840D1B7207D3/) - -## Example Mod -You can find a well-documented example Text Editor Mod [here](https://github.com/ZachHembree/TextEditorExample). Fair warning, the corresponding walkthrough in the wiki is currently outdated, and I probably won't get around to finishing it for a while. - -![Text editor screenshot](https://user-images.githubusercontent.com/6527038/117976888-3ffe4d80-b2fe-11eb-82f2-17c690fec3c5.png) +## Rich HUD Framework +This is a framework for creating custom retained-mode GUI in Space Engineers workshop mods using the billboards supplied by the mod API. It's nothing fancy, but it has most of the basic functionality you'd expect from a UI framework: text rendering, custom fonts, UI layering, key binds, mouse input, everything you might need to get started creating custom GUI in Space Engineers, sans markup lanugage. Everything is done in C#. If you want an idea of what that looks like, exactly, then have a look at some of the elements in the UI [library](https://github.com/ZachHembree/RichHudFramework.Client/blob/master/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/BorderedButton.cs); most of it's pretty straightforward. + +## Getting Started +Space Engineer's mods are all compiled to independent assemblies with no references between them, for reasons I trust are apparent, but this has the obvious drawback of preventing any two mods from directly sharing code. Fortunately, the game does provide utilities for sharing data at runtime using types exposed by the game's mod API, like generic delegates and tuples. For this reason, this framework is split into three modules: Master, Client and Shared. The master module contains the implementation for things like the text renderer, bind manager, and manages the UI tree, among other things and the Client module provides wrappers and utilities that provide easy access to those systems. + +To get started using this framework, you'll need to download a copy of the [client](https://github.com/ZachHembree/RichHudFramework.Client/releases) module from releases and include it in your mod. Usage details can be found in the [wiki](https://github.com/ZachHembree/RichHudFramework.Client/wiki), in addition to a detailed overview of the framework's functions. + +## Demo +If you want to get a better idea of what you can do with this framework, [Rich HUD Master](https://steamcommunity.com/workshop/filedetails/?id=1965654081) has a demo built into the terminal that can be enabled using the chat command "/rhd toggledebug". This demo allows you to spawn most of the UI elements in the library in their default state while also allowing you to maniplate their [HUD Space](https://github.com/ZachHembree/RichHudFramework.Client/wiki/HUD-Spaces) in real time. + +![Demo menu screenshot](https://steamuserimages-a.akamaihd.net/ugc/1722038154210428899/17BC5D4D245402D3E642B36672DC840D1B7207D3/) + +## Example Mod +You can find a well-documented example Text Editor Mod [here](https://github.com/ZachHembree/TextEditorExample). Fair warning, the corresponding walkthrough in the wiki is currently outdated, and I probably won't get around to finishing it for a while. + +![Text editor screenshot](https://user-images.githubusercontent.com/6527038/117976888-3ffe4d80-b2fe-11eb-82f2-17c690fec3c5.png) diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/ApiContainers.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/ApiContainers.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/ApiContainers.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/ApiContainers.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Collections.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Collections.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Collections.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Collections.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Extensions/CollectionExtensions.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Extensions/CollectionExtensions.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Extensions/CollectionExtensions.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Extensions/CollectionExtensions.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Extensions/MathExtensions.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Extensions/MathExtensions.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Extensions/MathExtensions.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Extensions/MathExtensions.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Extensions/VectorExtensions.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Extensions/VectorExtensions.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Extensions/VectorExtensions.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Extensions/VectorExtensions.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/ObjectPool.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/ObjectPool.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/ObjectPool.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/ObjectPool.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/PoolPolicies/ListPoolPolicy.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/PoolPolicies/ListPoolPolicy.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/PoolPolicies/ListPoolPolicy.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/PoolPolicies/ListPoolPolicy.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/PoolPolicies/StringBuilderPoolPolicy.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/PoolPolicies/StringBuilderPoolPolicy.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/PoolPolicies/StringBuilderPoolPolicy.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/PoolPolicies/StringBuilderPoolPolicy.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/TaskPool.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/TaskPool.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/TaskPool.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/TaskPool.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Utilities/Color.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Utilities/Color.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Utilities/Color.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Utilities/Color.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Utilities/Debug.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Utilities/Debug.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Utilities/Debug.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Utilities/Debug.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Utilities/ProtoBuf.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Utilities/ProtoBuf.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Utilities/ProtoBuf.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Utilities/ProtoBuf.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Utilities/Xml.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Utilities/Xml.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Utilities/Xml.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/General/Utilities/Xml.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/IO/LocalFileIO.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/IO/LocalFileIO.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/IO/LocalFileIO.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/IO/LocalFileIO.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/IO/LogIO.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/IO/LogIO.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/IO/LogIO.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/IO/LogIO.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/Internal/ExceptionHandler.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/Internal/ExceptionHandler.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/Internal/ExceptionHandler.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/Internal/ExceptionHandler.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/Internal/ModBase.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/Internal/ModBase.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/Internal/ModBase.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/Internal/ModBase.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/Internal/RichHudCore.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/Internal/RichHudCore.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/Internal/RichHudCore.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/Internal/RichHudCore.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/MsgEnums.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/MsgEnums.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/MsgEnums.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/MsgEnums.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/BindManager/BindClientAccessors.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/BindManager/BindClientAccessors.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/BindManager/BindClientAccessors.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/BindManager/BindClientAccessors.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/BindManager/BindDefinition.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/BindManager/BindDefinition.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/BindManager/BindDefinition.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/BindManager/BindDefinition.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/BindManager/BindGroupInitializer.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/BindManager/BindGroupInitializer.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/BindManager/BindGroupInitializer.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/BindManager/BindGroupInitializer.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/BindManager/CustomControls.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/BindManager/CustomControls.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/BindManager/CustomControls.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/BindManager/CustomControls.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/BindManager/IBind.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/BindManager/IBind.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/BindManager/IBind.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/BindManager/IBind.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/BindManager/IBindGroup.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/BindManager/IBindGroup.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/BindManager/IBindGroup.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/BindManager/IBindGroup.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/BindManager/IControl.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/BindManager/IControl.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/BindManager/IControl.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/BindManager/IControl.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/CmdManager.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/CmdManager.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/CmdManager.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/CmdManager.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/HudElementBase.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/HudElementBase.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/HudElementBase.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/HudElementBase.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/HudNodeBase.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/HudNodeBase.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/HudNodeBase.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/HudNodeBase.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/HudParentBase.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/HudParentBase.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/HudParentBase.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/HudParentBase.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/HudSpaceNodeBase.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/HudSpaceNodeBase.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/HudSpaceNodeBase.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/HudSpaceNodeBase.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/LabelBoxBase.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/LabelBoxBase.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/LabelBoxBase.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/LabelBoxBase.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/LabelElementBase.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/LabelElementBase.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/LabelElementBase.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/LabelElementBase.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/NodeUtils.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/NodeUtils.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/NodeUtils.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/NodeUtils.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/ParentUtils.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/ParentUtils.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/ParentUtils.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/ParentUtils.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/WindowBase.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/WindowBase.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/WindowBase.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementBases/WindowBase.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementEnums.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementEnums.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementEnums.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementEnums.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/IClickableElement.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/IClickableElement.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/IClickableElement.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/IClickableElement.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/IEntryBox.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/IEntryBox.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/IEntryBox.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/IEntryBox.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/IHudCollection.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/IHudCollection.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/IHudCollection.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/IHudCollection.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/ILabelElement.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/ILabelElement.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/ILabelElement.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/ILabelElement.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudElement.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudElement.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudElement.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudElement.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudNode.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudNode.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudNode.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudNode.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudParent.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudParent.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudParent.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudParent.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudSpaceNode.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudSpaceNode.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudSpaceNode.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElementInterfaces/IReadOnlyHudSpaceNode.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/BorderBox.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/BorderBox.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/BorderBox.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/BorderBox.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/Button.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/Button.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/Button.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/Button.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/LabelBoxButton.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/LabelBoxButton.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/LabelBoxButton.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/LabelBoxButton.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/LabelButton.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/LabelButton.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/LabelButton.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ClickableHudElements/Buttons/LabelButton.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ClickableHudElements/MouseInputElement.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ClickableHudElements/MouseInputElement.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ClickableHudElements/MouseInputElement.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ClickableHudElements/MouseInputElement.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ClickableHudElements/MouseInputFilter.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ClickableHudElements/MouseInputFilter.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ClickableHudElements/MouseInputFilter.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ClickableHudElements/MouseInputFilter.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ClickableHudElements/Sliders/SliderBar.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ClickableHudElements/Sliders/SliderBar.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ClickableHudElements/Sliders/SliderBar.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ClickableHudElements/Sliders/SliderBar.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ClickableHudElements/TextBox.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ClickableHudElements/TextBox.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ClickableHudElements/TextBox.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ClickableHudElements/TextBox.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ContainerInterfaces/IHudElementContainer.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ContainerInterfaces/IHudElementContainer.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ContainerInterfaces/IHudElementContainer.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ContainerInterfaces/IHudElementContainer.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ContainerInterfaces/IListBoxEntry.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ContainerInterfaces/IListBoxEntry.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ContainerInterfaces/IListBoxEntry.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ContainerInterfaces/IListBoxEntry.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ContainerInterfaces/IScrollBoxEntry.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ContainerInterfaces/IScrollBoxEntry.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ContainerInterfaces/IScrollBoxEntry.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ContainerInterfaces/IScrollBoxEntry.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ContainerInterfaces/ISelectionBoxEntry.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ContainerInterfaces/ISelectionBoxEntry.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ContainerInterfaces/ISelectionBoxEntry.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/ContainerInterfaces/ISelectionBoxEntry.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/Containers/HudElementContainer.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/Containers/HudElementContainer.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/Containers/HudElementContainer.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/Containers/HudElementContainer.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/Containers/HudElementTuple.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/Containers/HudElementTuple.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/Containers/HudElementTuple.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/Containers/HudElementTuple.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/Containers/ListBoxEntry.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/Containers/ListBoxEntry.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/Containers/ListBoxEntry.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/Containers/ListBoxEntry.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/Containers/ScrollBoxEntry.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/Containers/ScrollBoxEntry.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/Containers/ScrollBoxEntry.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/Containers/ScrollBoxEntry.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/Containers/ScrollBoxEntryTuple.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/Containers/ScrollBoxEntryTuple.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/Containers/ScrollBoxEntryTuple.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/Containers/ScrollBoxEntryTuple.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/Containers/SelectionBoxEntry.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/Containers/SelectionBoxEntry.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/Containers/SelectionBoxEntry.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/Containers/SelectionBoxEntry.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/EmptyHudElement.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/EmptyHudElement.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/EmptyHudElement.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/EmptyHudElement.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/HudChain.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/HudChain.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/HudChain.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/HudChain.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/HudCollection.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/HudCollection.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/HudCollection.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/HudCollection.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/Label.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/Label.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/Label.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/Label.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/LabelBox.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/LabelBox.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/LabelBox.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/LabelBox.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/TexturedBox.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/TexturedBox.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/TexturedBox.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudElements/TexturedBox.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudMainEnums.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudMainEnums.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudMainEnums.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudMainEnums.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudSpaceNodes/CamSpaceNode.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudSpaceNodes/CamSpaceNode.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudSpaceNodes/CamSpaceNode.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudSpaceNodes/CamSpaceNode.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudSpaceNodes/CustomSpaceNode.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudSpaceNodes/CustomSpaceNode.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudSpaceNodes/CustomSpaceNode.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudSpaceNodes/CustomSpaceNode.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudSpaceNodes/ScaledSpaceNode.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudSpaceNodes/ScaledSpaceNode.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudSpaceNodes/ScaledSpaceNode.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/HudSpaceNodes/ScaledSpaceNode.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/ICursor.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/ICursor.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/ICursor.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/ICursor.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/BillboardMats.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/BillboardMats.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/BillboardMats.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/BillboardMats.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/BillboardUtils.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/BillboardUtils.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/BillboardUtils.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/BillboardUtils.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/BlockBoard.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/BlockBoard.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/BlockBoard.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/BlockBoard.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/IFontMin.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/IFontMin.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/IFontMin.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/IFontMin.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/MatBoard.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/MatBoard.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/MatBoard.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/MatBoard.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/Material.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/Material.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/Material.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/Material.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/MaterialFrame.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/MaterialFrame.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/MaterialFrame.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/MaterialFrame.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/PolyBoard.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/PolyBoard.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/PolyBoard.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/PolyBoard.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/PuncturedPolyBoard.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/PuncturedPolyBoard.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/PuncturedPolyBoard.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/PuncturedPolyBoard.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/QuadBoard.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/QuadBoard.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/QuadBoard.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/QuadBoard.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/TextBuilderInterfaces/ILine.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/TextBuilderInterfaces/ILine.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/TextBuilderInterfaces/ILine.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/TextBuilderInterfaces/ILine.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/TextBuilderInterfaces/IRichChar.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/TextBuilderInterfaces/IRichChar.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/TextBuilderInterfaces/IRichChar.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/TextBuilderInterfaces/IRichChar.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/TextBuilderInterfaces/ITextBoard.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/TextBuilderInterfaces/ITextBoard.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/TextBuilderInterfaces/ITextBoard.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/TextBuilderInterfaces/ITextBoard.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/TextBuilderInterfaces/ITextBuilder.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/TextBuilderInterfaces/ITextBuilder.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/TextBuilderInterfaces/ITextBuilder.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/Rendering/TextBuilderInterfaces/ITextBuilder.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/RichText/GlyphFormat.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/RichText/GlyphFormat.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/RichText/GlyphFormat.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/RichText/GlyphFormat.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/RichText/RichText.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/RichText/RichText.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/RichText/RichText.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/RichText/RichText.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/TerminalColors.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/TerminalColors.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/TerminalColors.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/TerminalColors.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/ToolTip.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/ToolTip.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/ToolTip.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/HUD/ToolTip.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/IControlCategory.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/IControlCategory.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/IControlCategory.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/IControlCategory.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/IControlPage.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/IControlPage.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/IControlPage.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/IControlPage.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/IControlTile.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/IControlTile.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/IControlTile.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/IControlTile.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/IModControlRoot.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/IModControlRoot.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/IModControlRoot.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/IModControlRoot.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/IRebindPage.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/IRebindPage.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/IRebindPage.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/IRebindPage.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/ITerminalControl.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/ITerminalControl.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/ITerminalControl.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/ITerminalControl.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/ITerminalPage.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/ITerminalPage.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/ITerminalPage.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/ITerminalPage.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/ITerminalPageCategory.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/ITerminalPageCategory.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/ITerminalPageCategory.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/ITerminalPageCategory.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/ITextPage.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/ITextPage.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/ITextPage.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SettingsMenu/ITextPage.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SharedBinds.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SharedBinds.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SharedBinds.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/SharedBinds.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/TextInput.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/TextInput.cs similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/TextInput.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/HudHelpers/RichHud/Shared/UI/TextInput.cs diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/MasterDefinition.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/MasterDefinition.cs similarity index 90% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/MasterDefinition.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/MasterDefinition.cs index 55fe677ab..0c261dcf3 100644 --- a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/MasterDefinition.cs +++ b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/MasterDefinition.cs @@ -1,4 +1,4 @@ -namespace StarCore.FusionSystems +namespace Epstein_Fusion_DS { // turns out whoever wrote the CoreSystems definition handler is REALLY SMART. hats off to you internal partial class ModularDefinition diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/S_FusionPlayerHud.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/S_FusionPlayerHud.cs similarity index 78% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/S_FusionPlayerHud.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/S_FusionPlayerHud.cs index c1dad10fe..e21fca76b 100644 --- a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/S_FusionPlayerHud.cs +++ b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/S_FusionPlayerHud.cs @@ -1,16 +1,16 @@ using System; using System.Linq; +using Epstein_Fusion_DS.Communication; +using Epstein_Fusion_DS.FusionParts; +using Epstein_Fusion_DS.HeatParts; +using Epstein_Fusion_DS.HudHelpers; using RichHudFramework.Client; using RichHudFramework.UI.Client; using Sandbox.Game; -using StarCore.FusionSystems.Communication; -using StarCore.FusionSystems.FusionParts; -using StarCore.FusionSystems.HeatParts; -using StarCore.FusionSystems.HudHelpers; using VRage.Game.Components; using VRage.Utils; -namespace StarCore.FusionSystems +namespace Epstein_Fusion_DS { /// /// Semi-independent script for managing the player HUD. @@ -22,7 +22,7 @@ public class SFusionPlayerHud : MySessionComponentBase private int _ticks; private ConsumptionBar _consumptionBar; - private static ModularDefinitionApi ModularApi => ModularDefinition.ModularApi; + private static ModularDefinitionApi ModularApi => Epstein_Fusion_DS.ModularDefinition.ModularApi; private static SFusionManager FusionManager => SFusionManager.I; private static HeatManager HeatManager => HeatManager.I; @@ -76,7 +76,8 @@ public override void UpdateAfterSimulation() continue; MyVisualScriptLogicProvider.AddQuestlogDetailLocal( - $"[{system.PhysicalAssemblyId}] Power: {Math.Round(system.PowerStored / system.MaxPowerStored * 100f)}% ({Math.Round(system.MaxPowerStored)} @ {Math.Round(system.PowerGeneration * 60, 1)}/s) | Loops: {system.Arms.Count} | Heat: -{HeatManager.I.GetGridHeatDissipation(system.Grid):N0} +{HeatManager.I.GetGridHeatGeneration(system.Grid):N0} ({HeatManager.I.GetGridHeatLevel(system.Grid)*100:F1}%)", + $"[({system.PhysicalAssemblyId})] Thrusters: {system.Thrusters.Count} | Reactors: {system.Reactors.Count} | Loops: {system.Arms.Count} | Heat: -{HeatManager.I.GetGridHeatDissipation(system.Grid):N0} +{HeatManager.I.GetGridHeatGeneration(system.Grid):N0} ({HeatManager.I.GetGridHeatLevel(system.Grid)*100:F1}%)\n" + + $" Stored: {system.PowerStored:N0}/{system.MaxPowerStored:N0} | Generation: {system.PowerGeneration:N1}/{system.MaxPowerGeneration:N1}", false, false); displayedCount++; } diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/SyncMultipliers.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/SyncMultipliers.cs similarity index 97% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/SyncMultipliers.cs rename to Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/SyncMultipliers.cs index da216e96a..8cebec229 100644 --- a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/SyncMultipliers.cs +++ b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/SyncMultipliers.cs @@ -5,7 +5,7 @@ using VRage.Game.Components; using VRage.Game.ModAPI; -namespace StarCore.FusionSystems +namespace Epstein_Fusion_DS { [MySessionComponentDescriptor(MyUpdateOrder.AfterSimulation)] public class SyncMultipliers : MySessionComponentBase @@ -92,6 +92,9 @@ protected override void UnloadData() public static void ReactorOutput(IMyReactor reactor, float output) { + if (reactor == null || _i == null) + return; + if (Math.Abs(reactor.MaxOutput - output) < 0.1f || !_i._updateLimiter.Add(reactor)) return; @@ -115,6 +118,9 @@ public static void ReactorOutput(IMyReactor reactor, float output) public static void ThrusterOutput(IMyThrust thrust, float output) { + if (thrust == null || _i == null) + return; + if (Math.Abs(thrust.MaxThrust - output) < 1.0f || !_i._updateLimiter.Add(thrust)) return; diff --git a/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/Utils.cs b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/Utils.cs new file mode 100644 index 000000000..50d5541e1 --- /dev/null +++ b/Utility Mods/MoA Fusion Systems/Data/Scripts/ModularAssemblies/Utils.cs @@ -0,0 +1,19 @@ +using VRageMath; + +namespace Epstein_Fusion_DS +{ + public static class Utils + { + // TODO make this less inefficient. + public static Matrix RotateMatrixAroundPoint(Matrix matrix, Vector3D point, Vector3D axis, double angleRadians) + { + matrix.Translation -= point; + Matrix rotation = MatrixD.CreateFromAxisAngle(axis, angleRadians); + + Matrix transformedMatrix = matrix * rotation; + transformedMatrix.Translation += point; + + return transformedMatrix; + } + } +} diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/ctf_score_background.sbc b/Utility Mods/MoA Fusion Systems/Data/ctf_score_background.sbc similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Data/ctf_score_background.sbc rename to Utility Mods/MoA Fusion Systems/Data/ctf_score_background.sbc diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/MoA Fusion Systems.csproj.DotSettings b/Utility Mods/MoA Fusion Systems/MoA Fusion Systems.csproj.DotSettings similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/MoA Fusion Systems.csproj.DotSettings rename to Utility Mods/MoA Fusion Systems/MoA Fusion Systems.csproj.DotSettings diff --git a/Utility Mods/MoA Fusion Systems/Models/ActiveRadiator.mwm b/Utility Mods/MoA Fusion Systems/Models/ActiveRadiator.mwm new file mode 100644 index 000000000..73ae2520e Binary files /dev/null and b/Utility Mods/MoA Fusion Systems/Models/ActiveRadiator.mwm differ diff --git a/Weapon Mods/Stable/Starcore Homeworld Pack/Models/Ammo/CHP_VaygrBomberDrone.mwm b/Utility Mods/MoA Fusion Systems/Models/ActiveRadiatorBlades.mwm similarity index 51% rename from Weapon Mods/Stable/Starcore Homeworld Pack/Models/Ammo/CHP_VaygrBomberDrone.mwm rename to Utility Mods/MoA Fusion Systems/Models/ActiveRadiatorBlades.mwm index 655ecf070..413e93a05 100644 Binary files a/Weapon Mods/Stable/Starcore Homeworld Pack/Models/Ammo/CHP_VaygrBomberDrone.mwm and b/Utility Mods/MoA Fusion Systems/Models/ActiveRadiatorBlades.mwm differ diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Models/Caster_Accelerator_0.mwm b/Utility Mods/MoA Fusion Systems/Models/Caster_Accelerator_0.mwm similarity index 99% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Models/Caster_Accelerator_0.mwm rename to Utility Mods/MoA Fusion Systems/Models/Caster_Accelerator_0.mwm index 3d05bf1cb..f309a35fe 100644 Binary files a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Models/Caster_Accelerator_0.mwm and b/Utility Mods/MoA Fusion Systems/Models/Caster_Accelerator_0.mwm differ diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Models/Caster_Accelerator_90.mwm b/Utility Mods/MoA Fusion Systems/Models/Caster_Accelerator_90.mwm similarity index 99% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Models/Caster_Accelerator_90.mwm rename to Utility Mods/MoA Fusion Systems/Models/Caster_Accelerator_90.mwm index 3e7fb291e..0616b9b88 100644 Binary files a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Models/Caster_Accelerator_90.mwm and b/Utility Mods/MoA Fusion Systems/Models/Caster_Accelerator_90.mwm differ diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Models/Caster_CentralPipe_0.mwm b/Utility Mods/MoA Fusion Systems/Models/Caster_CentralPipe_0.mwm similarity index 97% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Models/Caster_CentralPipe_0.mwm rename to Utility Mods/MoA Fusion Systems/Models/Caster_CentralPipe_0.mwm index 7f47f64e2..007499192 100644 Binary files a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Models/Caster_CentralPipe_0.mwm and b/Utility Mods/MoA Fusion Systems/Models/Caster_CentralPipe_0.mwm differ diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Models/Caster_CentralPipe_90.mwm b/Utility Mods/MoA Fusion Systems/Models/Caster_CentralPipe_90.mwm similarity index 96% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Models/Caster_CentralPipe_90.mwm rename to Utility Mods/MoA Fusion Systems/Models/Caster_CentralPipe_90.mwm index e8858184e..af0f16ab1 100644 Binary files a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Models/Caster_CentralPipe_90.mwm and b/Utility Mods/MoA Fusion Systems/Models/Caster_CentralPipe_90.mwm differ diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Models/Caster_CentralPipe_T.mwm b/Utility Mods/MoA Fusion Systems/Models/Caster_CentralPipe_T.mwm similarity index 77% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Models/Caster_CentralPipe_T.mwm rename to Utility Mods/MoA Fusion Systems/Models/Caster_CentralPipe_T.mwm index 5e0a1ae57..992a00e4e 100644 Binary files a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Models/Caster_CentralPipe_T.mwm and b/Utility Mods/MoA Fusion Systems/Models/Caster_CentralPipe_T.mwm differ diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Models/Caster_Controller.mwm b/Utility Mods/MoA Fusion Systems/Models/Caster_Controller.mwm similarity index 99% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Models/Caster_Controller.mwm rename to Utility Mods/MoA Fusion Systems/Models/Caster_Controller.mwm index 7cc53b8dd..491e4fdf5 100644 Binary files a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Models/Caster_Controller.mwm and b/Utility Mods/MoA Fusion Systems/Models/Caster_Controller.mwm differ diff --git a/Utility Mods/MoA Fusion Systems/Models/Caster_ConveyorCap.mwm b/Utility Mods/MoA Fusion Systems/Models/Caster_ConveyorCap.mwm new file mode 100644 index 000000000..338dbeee1 Binary files /dev/null and b/Utility Mods/MoA Fusion Systems/Models/Caster_ConveyorCap.mwm differ diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Models/Caster_Feeder.mwm b/Utility Mods/MoA Fusion Systems/Models/Caster_Feeder.mwm similarity index 74% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Models/Caster_Feeder.mwm rename to Utility Mods/MoA Fusion Systems/Models/Caster_Feeder.mwm index 312095626..a850e37ce 100644 Binary files a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Models/Caster_Feeder.mwm and b/Utility Mods/MoA Fusion Systems/Models/Caster_Feeder.mwm differ diff --git a/Weapon Mods/Stable/Starcore Homeworld Pack/Models/Cubes/large/CHP_DroneHangarHiigaranRail.mwm b/Utility Mods/MoA Fusion Systems/Models/Caster_FocusLens.mwm similarity index 50% rename from Weapon Mods/Stable/Starcore Homeworld Pack/Models/Cubes/large/CHP_DroneHangarHiigaranRail.mwm rename to Utility Mods/MoA Fusion Systems/Models/Caster_FocusLens.mwm index 7ff66c2e7..941be2c9b 100644 Binary files a/Weapon Mods/Stable/Starcore Homeworld Pack/Models/Cubes/large/CHP_DroneHangarHiigaranRail.mwm and b/Utility Mods/MoA Fusion Systems/Models/Caster_FocusLens.mwm differ diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Models/Caster_Reactor.mwm b/Utility Mods/MoA Fusion Systems/Models/Caster_Reactor.mwm similarity index 64% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Models/Caster_Reactor.mwm rename to Utility Mods/MoA Fusion Systems/Models/Caster_Reactor.mwm index 27a35cde1..68ba7542f 100644 Binary files a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Models/Caster_Reactor.mwm and b/Utility Mods/MoA Fusion Systems/Models/Caster_Reactor.mwm differ diff --git a/Utility Mods/MoA Fusion Systems/Models/ConveyorCap.mwm b/Utility Mods/MoA Fusion Systems/Models/ConveyorCap.mwm new file mode 100644 index 000000000..c282aad5f Binary files /dev/null and b/Utility Mods/MoA Fusion Systems/Models/ConveyorCap.mwm differ diff --git a/Utility Mods/MoA Fusion Systems/Models/ExtendableRadiatorBase.mwm b/Utility Mods/MoA Fusion Systems/Models/ExtendableRadiatorBase.mwm new file mode 100644 index 000000000..c7c14fd91 Binary files /dev/null and b/Utility Mods/MoA Fusion Systems/Models/ExtendableRadiatorBase.mwm differ diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Models/Heat_FlatRadiator.mwm b/Utility Mods/MoA Fusion Systems/Models/Heat_FlatRadiator.mwm similarity index 95% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Models/Heat_FlatRadiator.mwm rename to Utility Mods/MoA Fusion Systems/Models/Heat_FlatRadiator.mwm index 98158a954..cf7f280a9 100644 Binary files a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Models/Heat_FlatRadiator.mwm and b/Utility Mods/MoA Fusion Systems/Models/Heat_FlatRadiator.mwm differ diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Models/Heat_Heatsink.mwm b/Utility Mods/MoA Fusion Systems/Models/Heat_Heatsink.mwm similarity index 99% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Models/Heat_Heatsink.mwm rename to Utility Mods/MoA Fusion Systems/Models/Heat_Heatsink.mwm index c9e8d054d..a707a0ad0 100644 Binary files a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Models/Heat_Heatsink.mwm and b/Utility Mods/MoA Fusion Systems/Models/Heat_Heatsink.mwm differ diff --git a/Weapon Mods/Stable/TaitMod_Fletcher/Models/15cmDualCaseA_Large.mwm b/Utility Mods/MoA Fusion Systems/Models/RadiatorPanel.mwm similarity index 50% rename from Weapon Mods/Stable/TaitMod_Fletcher/Models/15cmDualCaseA_Large.mwm rename to Utility Mods/MoA Fusion Systems/Models/RadiatorPanel.mwm index da7c2c1f8..d124bc746 100644 Binary files a/Weapon Mods/Stable/TaitMod_Fletcher/Models/15cmDualCaseA_Large.mwm and b/Utility Mods/MoA Fusion Systems/Models/RadiatorPanel.mwm differ diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Custom/enenra/EmissiveSpectrumAtlas_add.dds b/Utility Mods/MoA Fusion Systems/Textures/Custom/enenra/EmissiveSpectrumAtlas_add.dds similarity index 100% rename from Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Custom/enenra/EmissiveSpectrumAtlas_add.dds rename to Utility Mods/MoA Fusion Systems/Textures/Custom/enenra/EmissiveSpectrumAtlas_add.dds diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Custom/enenra/EmissiveSpectrumAtlas_cm.dds b/Utility Mods/MoA Fusion Systems/Textures/Custom/enenra/EmissiveSpectrumAtlas_cm.dds similarity index 100% rename from Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Custom/enenra/EmissiveSpectrumAtlas_cm.dds rename to Utility Mods/MoA Fusion Systems/Textures/Custom/enenra/EmissiveSpectrumAtlas_cm.dds diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Custom/enenra/EmissiveSpectrumAtlas_ng.dds b/Utility Mods/MoA Fusion Systems/Textures/Custom/enenra/EmissiveSpectrumAtlas_ng.dds similarity index 100% rename from Gamemode Mods/Stable/CombatZoneMuzzmod/Textures/Custom/enenra/EmissiveSpectrumAtlas_ng.dds rename to Utility Mods/MoA Fusion Systems/Textures/Custom/enenra/EmissiveSpectrumAtlas_ng.dds diff --git a/Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/ActiveRadiator.dds b/Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/ActiveRadiator.dds new file mode 100644 index 000000000..014c70b39 Binary files /dev/null and b/Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/ActiveRadiator.dds differ diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_Accelerator_0.dds b/Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_Accelerator_0.dds similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_Accelerator_0.dds rename to Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_Accelerator_0.dds diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_Accelerator_90.dds b/Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_Accelerator_90.dds similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_Accelerator_90.dds rename to Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_Accelerator_90.dds diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_CentralPipe_0.dds b/Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_CentralPipe_0.dds similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_CentralPipe_0.dds rename to Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_CentralPipe_0.dds diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_CentralPipe_90.dds b/Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_CentralPipe_90.dds similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_CentralPipe_90.dds rename to Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_CentralPipe_90.dds diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_CentralPipe_T.dds b/Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_CentralPipe_T.dds similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_CentralPipe_T.dds rename to Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_CentralPipe_T.dds diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_Controller.dds b/Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_Controller.dds similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_Controller.dds rename to Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_Controller.dds diff --git a/Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_ConveyorCap.dds b/Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_ConveyorCap.dds new file mode 100644 index 000000000..76d42f1f7 Binary files /dev/null and b/Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_ConveyorCap.dds differ diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_Feeder.dds b/Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_Feeder.dds similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_Feeder.dds rename to Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_Feeder.dds diff --git a/Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_FocusLens.dds b/Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_FocusLens.dds new file mode 100644 index 000000000..2b1e00074 Binary files /dev/null and b/Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_FocusLens.dds differ diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_Reactor.dds b/Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_Reactor.dds similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_Reactor.dds rename to Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Caster_Reactor.dds diff --git a/Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Cubes/Caster_ConveyorCap.dds b/Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Cubes/Caster_ConveyorCap.dds new file mode 100644 index 000000000..b16b13025 Binary files /dev/null and b/Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Cubes/Caster_ConveyorCap.dds differ diff --git a/Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/ExtendableRadiatorBase.dds b/Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/ExtendableRadiatorBase.dds new file mode 100644 index 000000000..fd0575a65 Binary files /dev/null and b/Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/ExtendableRadiatorBase.dds differ diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Heat_FlatRadiator.dds b/Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Heat_FlatRadiator.dds similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Heat_FlatRadiator.dds rename to Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Heat_FlatRadiator.dds diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Heat_Heatsink.dds b/Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Heat_Heatsink.dds similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Heat_Heatsink.dds rename to Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/Heat_Heatsink.dds diff --git a/Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/RadiatorPanel.dds b/Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/RadiatorPanel.dds new file mode 100644 index 000000000..433c6d862 Binary files /dev/null and b/Utility Mods/MoA Fusion Systems/Textures/GUI/Icons/Cubes/RadiatorPanel.dds differ diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/Particles/FusionDriveThrustMiddle.dds b/Utility Mods/MoA Fusion Systems/Textures/Particles/FusionDriveThrustMiddle.dds similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/Particles/FusionDriveThrustMiddle.dds rename to Utility Mods/MoA Fusion Systems/Textures/Particles/FusionDriveThrustMiddle.dds diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/ctf_score_background.DDS b/Utility Mods/MoA Fusion Systems/Textures/ctf_score_background.DDS similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/ctf_score_background.DDS rename to Utility Mods/MoA Fusion Systems/Textures/ctf_score_background.DDS diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/fusionBarBackground.DDS b/Utility Mods/MoA Fusion Systems/Textures/fusionBarBackground.DDS similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/fusionBarBackground.DDS rename to Utility Mods/MoA Fusion Systems/Textures/fusionBarBackground.DDS diff --git a/Utility Mods/Stable/SC_BlockRestrictions/metadata.mod b/Utility Mods/MoA Fusion Systems/metadata.mod similarity index 100% rename from Utility Mods/Stable/SC_BlockRestrictions/metadata.mod rename to Utility Mods/MoA Fusion Systems/metadata.mod diff --git a/Utility Mods/Stable/SCThrusterFX/modinfo_main.sbmi b/Utility Mods/MoA Fusion Systems/modinfo_main.sbmi similarity index 93% rename from Utility Mods/Stable/SCThrusterFX/modinfo_main.sbmi rename to Utility Mods/MoA Fusion Systems/modinfo_main.sbmi index cce294f74..20538c48f 100644 --- a/Utility Mods/Stable/SCThrusterFX/modinfo_main.sbmi +++ b/Utility Mods/MoA Fusion Systems/modinfo_main.sbmi @@ -4,7 +4,7 @@ 0 - 3033050686 + 3365316959 Steam diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/modinfo_stable.sbmi b/Utility Mods/MoA Fusion Systems/modinfo_stable.sbmi similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/modinfo_stable.sbmi rename to Utility Mods/MoA Fusion Systems/modinfo_stable.sbmi diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/packages.config b/Utility Mods/MoA Fusion Systems/packages.config similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/packages.config rename to Utility Mods/MoA Fusion Systems/packages.config diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/readme.md b/Utility Mods/MoA Fusion Systems/readme.md similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/readme.md rename to Utility Mods/MoA Fusion Systems/readme.md diff --git a/Utility Mods/MoA Fusion Systems/thumb.jpg b/Utility Mods/MoA Fusion Systems/thumb.jpg new file mode 100644 index 000000000..5d10d1353 Binary files /dev/null and b/Utility Mods/MoA Fusion Systems/thumb.jpg differ diff --git a/Gamemode Mods/Stable/Harmzone-Muzzmod/.gitignore b/Utility Mods/PaperDoll/.gitignore similarity index 100% rename from Gamemode Mods/Stable/Harmzone-Muzzmod/.gitignore rename to Utility Mods/PaperDoll/.gitignore diff --git a/Utility Mods/Stable/PaperDoll/Data/ArmorModifiers_B.sbc b/Utility Mods/PaperDoll/Data/ArmorModifiers_B.sbc similarity index 100% rename from Utility Mods/Stable/PaperDoll/Data/ArmorModifiers_B.sbc rename to Utility Mods/PaperDoll/Data/ArmorModifiers_B.sbc diff --git a/Utility Mods/Stable/PaperDoll/Data/PaperDollBackgroundMat.sbc b/Utility Mods/PaperDoll/Data/PaperDollBackgroundMat.sbc similarity index 100% rename from Utility Mods/Stable/PaperDoll/Data/PaperDollBackgroundMat.sbc rename to Utility Mods/PaperDoll/Data/PaperDollBackgroundMat.sbc diff --git a/Utility Mods/Stable/PaperDoll/Data/Scripts/Visual/API/CoreSystemsApiBase.cs b/Utility Mods/PaperDoll/Data/Scripts/Visual/API/CoreSystemsApiBase.cs similarity index 100% rename from Utility Mods/Stable/PaperDoll/Data/Scripts/Visual/API/CoreSystemsApiBase.cs rename to Utility Mods/PaperDoll/Data/Scripts/Visual/API/CoreSystemsApiBase.cs diff --git a/Utility Mods/Stable/PaperDoll/Data/Scripts/Visual/API/CoreSystemsApiBlocks.cs b/Utility Mods/PaperDoll/Data/Scripts/Visual/API/CoreSystemsApiBlocks.cs similarity index 100% rename from Utility Mods/Stable/PaperDoll/Data/Scripts/Visual/API/CoreSystemsApiBlocks.cs rename to Utility Mods/PaperDoll/Data/Scripts/Visual/API/CoreSystemsApiBlocks.cs diff --git a/Utility Mods/Stable/PaperDoll/Data/Scripts/Visual/API/CoreSystemsApiDefs.cs b/Utility Mods/PaperDoll/Data/Scripts/Visual/API/CoreSystemsApiDefs.cs similarity index 100% rename from Utility Mods/Stable/PaperDoll/Data/Scripts/Visual/API/CoreSystemsApiDefs.cs rename to Utility Mods/PaperDoll/Data/Scripts/Visual/API/CoreSystemsApiDefs.cs diff --git a/Utility Mods/Stable/PaperDoll/Data/Scripts/Visual/API/CoreSystemsApiPhantoms.cs b/Utility Mods/PaperDoll/Data/Scripts/Visual/API/CoreSystemsApiPhantoms.cs similarity index 100% rename from Utility Mods/Stable/PaperDoll/Data/Scripts/Visual/API/CoreSystemsApiPhantoms.cs rename to Utility Mods/PaperDoll/Data/Scripts/Visual/API/CoreSystemsApiPhantoms.cs diff --git a/Utility Mods/Stable/PaperDoll/Data/Scripts/Visual/API/HudAPIv2.cs b/Utility Mods/PaperDoll/Data/Scripts/Visual/API/HudAPIv2.cs similarity index 100% rename from Utility Mods/Stable/PaperDoll/Data/Scripts/Visual/API/HudAPIv2.cs rename to Utility Mods/PaperDoll/Data/Scripts/Visual/API/HudAPIv2.cs diff --git a/Utility Mods/Stable/PaperDoll/Data/Scripts/Visual/API/RtsApi.cs b/Utility Mods/PaperDoll/Data/Scripts/Visual/API/RtsApi.cs similarity index 100% rename from Utility Mods/Stable/PaperDoll/Data/Scripts/Visual/API/RtsApi.cs rename to Utility Mods/PaperDoll/Data/Scripts/Visual/API/RtsApi.cs diff --git a/Utility Mods/Stable/PaperDoll/Data/Scripts/Visual/API/ShieldApi.cs b/Utility Mods/PaperDoll/Data/Scripts/Visual/API/ShieldApi.cs similarity index 100% rename from Utility Mods/Stable/PaperDoll/Data/Scripts/Visual/API/ShieldApi.cs rename to Utility Mods/PaperDoll/Data/Scripts/Visual/API/ShieldApi.cs diff --git a/Utility Mods/Stable/PaperDoll/Data/Scripts/Visual/GridGroup.cs b/Utility Mods/PaperDoll/Data/Scripts/Visual/GridGroup.cs similarity index 100% rename from Utility Mods/Stable/PaperDoll/Data/Scripts/Visual/GridGroup.cs rename to Utility Mods/PaperDoll/Data/Scripts/Visual/GridGroup.cs diff --git a/Utility Mods/Stable/PaperDoll/Data/Scripts/Visual/GridRendering.cs b/Utility Mods/PaperDoll/Data/Scripts/Visual/GridRendering.cs similarity index 100% rename from Utility Mods/Stable/PaperDoll/Data/Scripts/Visual/GridRendering.cs rename to Utility Mods/PaperDoll/Data/Scripts/Visual/GridRendering.cs diff --git a/Utility Mods/Stable/PaperDoll/Data/Scripts/Visual/Visual.cs b/Utility Mods/PaperDoll/Data/Scripts/Visual/Visual.cs similarity index 100% rename from Utility Mods/Stable/PaperDoll/Data/Scripts/Visual/Visual.cs rename to Utility Mods/PaperDoll/Data/Scripts/Visual/Visual.cs diff --git a/Utility Mods/Stable/PaperDoll/Data/Textures/ContainerBorder.dds b/Utility Mods/PaperDoll/Data/Textures/ContainerBorder.dds similarity index 100% rename from Utility Mods/Stable/PaperDoll/Data/Textures/ContainerBorder.dds rename to Utility Mods/PaperDoll/Data/Textures/ContainerBorder.dds diff --git a/Utility Mods/Stable/PaperDoll/Data/Textures/ContainerBorderInverted.dds b/Utility Mods/PaperDoll/Data/Textures/ContainerBorderInverted.dds similarity index 100% rename from Utility Mods/Stable/PaperDoll/Data/Textures/ContainerBorderInverted.dds rename to Utility Mods/PaperDoll/Data/Textures/ContainerBorderInverted.dds diff --git a/Utility Mods/Stable/PaperDoll/Data/Textures/Particles/ContainerBorder.dds b/Utility Mods/PaperDoll/Data/Textures/Particles/ContainerBorder.dds similarity index 100% rename from Utility Mods/Stable/PaperDoll/Data/Textures/Particles/ContainerBorder.dds rename to Utility Mods/PaperDoll/Data/Textures/Particles/ContainerBorder.dds diff --git a/Utility Mods/Stable/PaperDoll/Data/Textures/Particles/ContainerBorderInverted.dds b/Utility Mods/PaperDoll/Data/Textures/Particles/ContainerBorderInverted.dds similarity index 100% rename from Utility Mods/Stable/PaperDoll/Data/Textures/Particles/ContainerBorderInverted.dds rename to Utility Mods/PaperDoll/Data/Textures/Particles/ContainerBorderInverted.dds diff --git a/Utility Mods/Stable/PaperDoll/Textures/Particles/ContainerBorderInverted.dds b/Utility Mods/PaperDoll/Textures/Particles/ContainerBorderInverted.dds similarity index 100% rename from Utility Mods/Stable/PaperDoll/Textures/Particles/ContainerBorderInverted.dds rename to Utility Mods/PaperDoll/Textures/Particles/ContainerBorderInverted.dds diff --git a/Utility Mods/Stable/PaperDoll/Textures/Particles/ContainerBorderSelectedInverted.dds b/Utility Mods/PaperDoll/Textures/Particles/ContainerBorderSelectedInverted.dds similarity index 100% rename from Utility Mods/Stable/PaperDoll/Textures/Particles/ContainerBorderSelectedInverted.dds rename to Utility Mods/PaperDoll/Textures/Particles/ContainerBorderSelectedInverted.dds diff --git a/Utility Mods/Stable/PaperDoll/Textures/Particles/ContainerBorder_O.dds b/Utility Mods/PaperDoll/Textures/Particles/ContainerBorder_O.dds similarity index 100% rename from Utility Mods/Stable/PaperDoll/Textures/Particles/ContainerBorder_O.dds rename to Utility Mods/PaperDoll/Textures/Particles/ContainerBorder_O.dds diff --git a/Utility Mods/Stable/PaperDoll/Textures/Particles/fuzzybox.dds b/Utility Mods/PaperDoll/Textures/Particles/fuzzybox.dds similarity index 100% rename from Utility Mods/Stable/PaperDoll/Textures/Particles/fuzzybox.dds rename to Utility Mods/PaperDoll/Textures/Particles/fuzzybox.dds diff --git a/Utility Mods/Stable/PaperDoll/Textures/Particles/fuzzybox.pdn b/Utility Mods/PaperDoll/Textures/Particles/fuzzybox.pdn similarity index 100% rename from Utility Mods/Stable/PaperDoll/Textures/Particles/fuzzybox.pdn rename to Utility Mods/PaperDoll/Textures/Particles/fuzzybox.pdn diff --git a/Utility Mods/Stable/PaperDoll/copy to DS and client.bat b/Utility Mods/PaperDoll/copy to DS and client.bat similarity index 100% rename from Utility Mods/Stable/PaperDoll/copy to DS and client.bat rename to Utility Mods/PaperDoll/copy to DS and client.bat diff --git a/Utility Mods/Stable/BaRCore/metadata.mod b/Utility Mods/PaperDoll/metadata.mod similarity index 100% rename from Utility Mods/Stable/BaRCore/metadata.mod rename to Utility Mods/PaperDoll/metadata.mod diff --git a/Utility Mods/Stable/PaperDoll/modinfo_main.sbmi b/Utility Mods/PaperDoll/modinfo_main.sbmi similarity index 100% rename from Utility Mods/Stable/PaperDoll/modinfo_main.sbmi rename to Utility Mods/PaperDoll/modinfo_main.sbmi diff --git a/Utility Mods/Stable/PaperDoll/modinfo_stable.sbmi b/Utility Mods/PaperDoll/modinfo_stable.sbmi similarity index 100% rename from Utility Mods/Stable/PaperDoll/modinfo_stable.sbmi rename to Utility Mods/PaperDoll/modinfo_stable.sbmi diff --git a/Utility Mods/Stable/PaperDoll/please upload.txt b/Utility Mods/PaperDoll/please upload.txt similarity index 100% rename from Utility Mods/Stable/PaperDoll/please upload.txt rename to Utility Mods/PaperDoll/please upload.txt diff --git a/Utility Mods/Stable/PaperDoll/thumb.jpg b/Utility Mods/PaperDoll/thumb.jpg similarity index 100% rename from Utility Mods/Stable/PaperDoll/thumb.jpg rename to Utility Mods/PaperDoll/thumb.jpg diff --git a/Utility Mods/Stable/SCCleanDLCCategories/Data/BlockCategories.sbc b/Utility Mods/SCCleanDLCCategories/Data/BlockCategories.sbc similarity index 100% rename from Utility Mods/Stable/SCCleanDLCCategories/Data/BlockCategories.sbc rename to Utility Mods/SCCleanDLCCategories/Data/BlockCategories.sbc diff --git a/Utility Mods/Stable/SCCleanDLCCategories/Data/Scripts/CleanDLCCategories.cs b/Utility Mods/SCCleanDLCCategories/Data/Scripts/CleanDLCCategories.cs similarity index 100% rename from Utility Mods/Stable/SCCleanDLCCategories/Data/Scripts/CleanDLCCategories.cs rename to Utility Mods/SCCleanDLCCategories/Data/Scripts/CleanDLCCategories.cs diff --git a/Utility Mods/Stable/I NEED MORE JETPACK ACCELERATION/metadata.mod b/Utility Mods/SCCleanDLCCategories/metadata.mod similarity index 100% rename from Utility Mods/Stable/I NEED MORE JETPACK ACCELERATION/metadata.mod rename to Utility Mods/SCCleanDLCCategories/metadata.mod diff --git a/Utility Mods/Stable/SCCleanDLCCategories/modinfo_main.sbmi b/Utility Mods/SCCleanDLCCategories/modinfo_main.sbmi similarity index 100% rename from Utility Mods/Stable/SCCleanDLCCategories/modinfo_main.sbmi rename to Utility Mods/SCCleanDLCCategories/modinfo_main.sbmi diff --git a/Utility Mods/Stable/SCCleanDLCCategories/modinfo_stable.sbmi b/Utility Mods/SCCleanDLCCategories/modinfo_stable.sbmi similarity index 100% rename from Utility Mods/Stable/SCCleanDLCCategories/modinfo_stable.sbmi rename to Utility Mods/SCCleanDLCCategories/modinfo_stable.sbmi diff --git a/Utility Mods/Stable/SCCleanModCategories/Data/BlockCategories.sbc b/Utility Mods/SCCleanModCategories/Data/BlockCategories.sbc similarity index 100% rename from Utility Mods/Stable/SCCleanModCategories/Data/BlockCategories.sbc rename to Utility Mods/SCCleanModCategories/Data/BlockCategories.sbc diff --git a/Utility Mods/Stable/SCCleanModCategories/Data/Scripts/CleanModCategories.cs b/Utility Mods/SCCleanModCategories/Data/Scripts/CleanModCategories.cs similarity index 68% rename from Utility Mods/Stable/SCCleanModCategories/Data/Scripts/CleanModCategories.cs rename to Utility Mods/SCCleanModCategories/Data/Scripts/CleanModCategories.cs index 347ecb9cd..5342b0542 100644 --- a/Utility Mods/Stable/SCCleanModCategories/Data/Scripts/CleanModCategories.cs +++ b/Utility Mods/SCCleanModCategories/Data/Scripts/CleanModCategories.cs @@ -41,24 +41,8 @@ public override void LoadData() /*definition.Value.Name != ".SC Tournament Weapons" && */ definition.Value.Name != ".Starcore Basic Greebles" && definition.Value.Name != "Fusion Systems" && - /*definition.Value.Name != ".SC WIP" && */ - definition.Value.Name != ".[All Access]" && - /*definition.Value.Name != ".Ship Cores" && */ - /*definition.Value.Name != ".SC Vanilla 2.0 Weapons" && */ - definition.Value.Name != "[40K]" && - /*definition.Value.Name != "[TIO]" && */ - definition.Value.Name != "[MID]" && - definition.Value.Name != "[FLAW]" && - definition.Value.Name != "[MA]" && - definition.Value.Name != "[NHI]" && - definition.Value.Name != "[ONYX]" && - definition.Value.Name != "[SA]" && - definition.Value.Name != "[HAS]" && - definition.Value.Name != "[SOL]" && - definition.Value.Name != "[FAS]" && - definition.Value.Name != "[EXO]" && - definition.Value.Name != "[BTI]" && - definition.Value.Name != "[CHP]") + !definition.Value.Name.StartsWith(".SC_") + ) { // Disable modded block categories definition.Value.Enabled = false; diff --git a/Utility Mods/Stable/MA_Afterburner/metadata.mod b/Utility Mods/SCCleanModCategories/metadata.mod similarity index 100% rename from Utility Mods/Stable/MA_Afterburner/metadata.mod rename to Utility Mods/SCCleanModCategories/metadata.mod diff --git a/Utility Mods/Stable/SCCleanModCategories/modinfo_main.sbmi b/Utility Mods/SCCleanModCategories/modinfo_main.sbmi similarity index 100% rename from Utility Mods/Stable/SCCleanModCategories/modinfo_main.sbmi rename to Utility Mods/SCCleanModCategories/modinfo_main.sbmi diff --git a/Utility Mods/Stable/SCCleanModCategories/modinfo_stable.sbmi b/Utility Mods/SCCleanModCategories/modinfo_stable.sbmi similarity index 100% rename from Utility Mods/Stable/SCCleanModCategories/modinfo_stable.sbmi rename to Utility Mods/SCCleanModCategories/modinfo_stable.sbmi diff --git a/Utility Mods/Stable/SCCleanModCategories/test.txt b/Utility Mods/SCCleanModCategories/test.txt similarity index 100% rename from Utility Mods/Stable/SCCleanModCategories/test.txt rename to Utility Mods/SCCleanModCategories/test.txt diff --git a/Utility Mods/Stable/SCCoordinateOutput/depreciated.txt b/Utility Mods/SCCoordinateOutput/depreciated.txt similarity index 100% rename from Utility Mods/Stable/SCCoordinateOutput/depreciated.txt rename to Utility Mods/SCCoordinateOutput/depreciated.txt diff --git a/Utility Mods/Stable/SCDefenseBlocks/Aristeas_copy to DS and client.bat b/Utility Mods/SCDefenseBlocks/Aristeas_copy to DS and client.bat similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/Aristeas_copy to DS and client.bat rename to Utility Mods/SCDefenseBlocks/Aristeas_copy to DS and client.bat diff --git a/Utility Mods/Stable/SCDefenseBlocks/Audio/steampressurerelease.wav b/Utility Mods/SCDefenseBlocks/Audio/steampressurerelease.wav similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/Audio/steampressurerelease.wav rename to Utility Mods/SCDefenseBlocks/Audio/steampressurerelease.wav diff --git a/Utility Mods/SCDefenseBlocks/Data/BlockVariantGroups_FieldGen.sbc b/Utility Mods/SCDefenseBlocks/Data/BlockVariantGroups_FieldGen.sbc new file mode 100644 index 000000000..5887ed448 --- /dev/null +++ b/Utility Mods/SCDefenseBlocks/Data/BlockVariantGroups_FieldGen.sbc @@ -0,0 +1,18 @@ + + + + + + + + Textures\GUI\Icons\Cubes\Core_Icon.dds + [SI] Field Generator + + + + + + + + + diff --git a/Utility Mods/Stable/SCDefenseBlocks/Data/CubeBlock_FieldGen.sbc b/Utility Mods/SCDefenseBlocks/Data/CubeBlock_FieldGen.sbc similarity index 96% rename from Utility Mods/Stable/SCDefenseBlocks/Data/CubeBlock_FieldGen.sbc rename to Utility Mods/SCDefenseBlocks/Data/CubeBlock_FieldGen.sbc index 18380c501..3e9158a6c 100644 --- a/Utility Mods/Stable/SCDefenseBlocks/Data/CubeBlock_FieldGen.sbc +++ b/Utility Mods/SCDefenseBlocks/Data/CubeBlock_FieldGen.sbc @@ -62,7 +62,7 @@ Collector FieldGen_Capacity_Upgrade - [S.I] Generator Capacity Upgrade + [SI] Generator Capacity Upgrade Textures\GUI\Icons\Cubes\Upgrade_Icon.dds Capacity Upgrade for the Generator Core. @@ -120,7 +120,7 @@ Collector FieldGen_Core - [S.I] Generator Core + [SI] Generator Core Textures\GUI\Icons\Cubes\Core_Icon.dds This Block Consumes 0-500 MW of Power, in exchange for a 0-50% Incoming Damage Reduction. diff --git a/Utility Mods/Stable/SCDefenseBlocks/Data/CubeBlocks_MetalFoam.sbc b/Utility Mods/SCDefenseBlocks/Data/CubeBlocks_MetalFoam.sbc similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/Data/CubeBlocks_MetalFoam.sbc rename to Utility Mods/SCDefenseBlocks/Data/CubeBlocks_MetalFoam.sbc diff --git a/Utility Mods/Stable/SCDefenseBlocks/Data/EntityComponents-resistblock.sbc b/Utility Mods/SCDefenseBlocks/Data/EntityComponent_FieldGen.sbc similarity index 79% rename from Utility Mods/Stable/SCDefenseBlocks/Data/EntityComponents-resistblock.sbc rename to Utility Mods/SCDefenseBlocks/Data/EntityComponent_FieldGen.sbc index c72817b85..615190df2 100644 --- a/Utility Mods/Stable/SCDefenseBlocks/Data/EntityComponents-resistblock.sbc +++ b/Utility Mods/SCDefenseBlocks/Data/EntityComponent_FieldGen.sbc @@ -3,10 +3,10 @@ ModStorageComponent - ShieldProjector + FieldGenerator - 169803f9-9800-4515-9619-e5385d5208fb + 7A7AC398-FAE3-44E5-ABD5-8AE49434DDF6 diff --git a/Utility Mods/Stable/SCDefenseBlocks/Data/EntityComponents-MoAShields.sbc b/Utility Mods/SCDefenseBlocks/Data/EntityComponents-MoAShields.sbc similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/Data/EntityComponents-MoAShields.sbc rename to Utility Mods/SCDefenseBlocks/Data/EntityComponents-MoAShields.sbc diff --git a/Utility Mods/Stable/SCDefenseBlocks/Data/EntityComponents.sbc b/Utility Mods/SCDefenseBlocks/Data/EntityComponents.sbc similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/Data/EntityComponents.sbc rename to Utility Mods/SCDefenseBlocks/Data/EntityComponents.sbc diff --git a/Utility Mods/Stable/SCDefenseBlocks/Data/MetalFoamSmoke.sbc b/Utility Mods/SCDefenseBlocks/Data/MetalFoamSmoke.sbc similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/Data/MetalFoamSmoke.sbc rename to Utility Mods/SCDefenseBlocks/Data/MetalFoamSmoke.sbc diff --git a/Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/API/APIBase.cs b/Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/API/APIBase.cs new file mode 100644 index 000000000..f16891d7f --- /dev/null +++ b/Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/API/APIBase.cs @@ -0,0 +1,232 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Sandbox.ModAPI; +using VRage.Game.Entity; + +namespace FieldGenerator.API +{ + public class FieldGeneratorAPI + { + private bool _initialized; + + private Func _getFirstFieldGeneratorOnGrid; + + private Func _isSiegeActive; + private Action _setSiegeActive; + + private Func _isSiegeCooldownActive; + private Action _setSiegeCooldownActive; + + private Func _getSiegeCooldown; + private Action _setSiegeCooldown; + + private Func _getFieldPower; + private Action _setFieldPower; + + private Func _getMaximumFieldPower; + private Func_getMinimumFieldPower; + + private Func _getPowerDraw; + + private Func _getStability; + private Action _setStability; + + /// + /// Returns first valid field generator for the specified grid EntityID. + /// + /// EntityID of the cubegrid to check against. + /// IMyFunctionalBlock of the first field generator if one exists; otherwise, null. + public IMyFunctionalBlock GetFirstFieldGeneratorOnGrid(long entityID) => _getFirstFieldGeneratorOnGrid?.Invoke(entityID) ?? null; + + /// + /// Returns whether or not the specified block is in siege mode. + /// + /// Block to check. + /// true if siege mode is active; otherwise, false. + public bool IsSiegeActive(IMyFunctionalBlock block) => _isSiegeActive?.Invoke(block) ?? false; + + /// + /// Sets the siege mode state on the given block. + /// + /// Block whose siege state will be modified. + /// Whether siege mode should be active (true) or inactive (false). + public void SetSiegeActive(IMyFunctionalBlock block, bool Active) => _setSiegeActive?.Invoke(block, Active); + + /// + /// Returns whether or not the specified blocks siege mode is on cooldown. + /// + /// Block to check. + /// true if the cooldown is active; otherwise, false. + public bool IsSiegeCooldownActive(IMyFunctionalBlock block) => _isSiegeCooldownActive?.Invoke(block) ?? false; + + /// + /// Sets the siege mode cooldown state on the given block. + /// + /// Block whose cooldown state will be modified. + /// Whether the cooldown should be active (true) or inactive (false). + public void SetSiegeCooldownActive(IMyFunctionalBlock block, bool Active) => _setSiegeCooldownActive?.Invoke(block, Active); + + /// + /// Returns the specified blocks current cooldown time. + /// + /// Block to check. + /// The siege cooldown time, or 0 if no cooldown is active. + public int GetSiegeCooldown(IMyFunctionalBlock block) => _getSiegeCooldown?.Invoke(block) ?? 0; + + /// + /// Sets the cooldown time on the given block. + /// + /// Block whose cooldown will be modified. + /// Time to set the cooldown to, in seconds. + public void SetSiegeCooldown(IMyFunctionalBlock block, int Time) => _setSiegeCooldown?.Invoke(block, Time); + + /// + /// Returns the specified block current field power. + /// + /// Block to check. + /// The current field power. + public float GetFieldPower(IMyFunctionalBlock block) => _getFieldPower?.Invoke(block) ?? 0; + + /// + /// Sets the field power on the given block. + /// + /// Block whose field power will be modified. + /// + /// The field power to set as a float, expressed as a percentage and capped by minimum/maximum field power. + /// + public void SetFieldPower(IMyFunctionalBlock block, float Power) => _setFieldPower?.Invoke(block, Power); + + /// + /// Returns the specified blocks maximum field power. + /// + /// Block to check. + /// The maximum field power. + public float GetMaximumFieldPower(IMyFunctionalBlock block) => _getMaximumFieldPower?.Invoke(block) ?? 0; + + /// + /// Returns the specified block minimum field power. + /// + /// Block to check. + /// The minimum field power. + public float GetMinimumFieldPower(IMyFunctionalBlock block) => _getMinimumFieldPower?.Invoke(block) ?? 0; + + /// + /// Returns the specified blocks current power draw. + /// + /// Block to check. + /// The current power draw. + public float GetPowerDraw(IMyFunctionalBlock block) => _getPowerDraw?.Invoke(block) ?? 0; + + /// + /// Returns the specified blocks current stability. + /// + /// Block to check. + /// The current stability. + public float GetStability(IMyFunctionalBlock block) => _getStability?.Invoke(block) ?? 0; + + /// + /// Sets the stability on the given block. + /// + /// Block whose stability will be modified. + /// + /// The stability to set as a float, expressed as a percentage with a maximum of 100. + /// + public void SetStability(IMyFunctionalBlock block, float Stability) => _setStability?.Invoke(block, Stability); + + + private const long HandlerID = 917632; + private bool _APIRegistered; + private Action _ReadyCallback; + + public bool IsReady { get; private set; } + + + public void LoadAPI(Action ReadyCallback = null) + { + if (_APIRegistered) + throw new Exception($"{GetType().Name}.LoadAPI() should not be called multiple times!"); + + _ReadyCallback = ReadyCallback; + _APIRegistered = true; + MyAPIGateway.Utilities.RegisterMessageHandler(HandlerID, HandleMessage); + MyAPIGateway.Utilities.SendModMessage(HandlerID, "APIRequest"); + } + + public void UnloadAPI() + { + MyAPIGateway.Utilities.UnregisterMessageHandler(HandlerID, HandleMessage); + + ApiAssign(null); + + _APIRegistered = false; + _initialized = false; + IsReady = false; + } + + private void HandleMessage(object obj) + { + if (_initialized || obj is string) + return; + + var dict = obj as IReadOnlyDictionary; + + if (dict == null) + return; + + ApiAssign(dict); + + IsReady = true; + _ReadyCallback?.Invoke(); + } + + public void ApiAssign(IReadOnlyDictionary delegates) + { + _initialized = delegates != null; + + AssignMethod(delegates, "GetFirstFieldGeneratorOnGrid", ref _getFirstFieldGeneratorOnGrid); + + AssignMethod(delegates, "IsSiegeActive", ref _isSiegeActive); + AssignMethod(delegates, "SetSiegeActive", ref _setSiegeActive); + + AssignMethod(delegates, "IsSiegeCooldownActive", ref _isSiegeCooldownActive); + AssignMethod(delegates, "SetSiegeCooldownActive", ref _setSiegeCooldownActive); + + AssignMethod(delegates, "GetSiegeCooldown", ref _getSiegeCooldown); + AssignMethod(delegates, "SetSiegeCooldown", ref _setSiegeCooldown); + + AssignMethod(delegates, "GetFieldPower", ref _getFieldPower); + AssignMethod(delegates, "SetFieldPower", ref _setFieldPower); + + AssignMethod(delegates, "GetMaximumFieldPower", ref _getMaximumFieldPower); + AssignMethod(delegates, "GetMinimumFieldPower", ref _getMinimumFieldPower); + + AssignMethod(delegates, "GetPowerDraw", ref _getPowerDraw); + + AssignMethod(delegates, "GetStability", ref _getStability); + AssignMethod(delegates, "SetStability", ref _setStability); + } + + private void AssignMethod(IReadOnlyDictionary delegates, string name, ref T field) + where T : class + { + if (delegates == null) + { + field = null; + return; + } + + Delegate del; + if (!delegates.TryGetValue(name, out del)) + throw new Exception($"{GetType().Name} :: Couldn't find {name} delegate of type {typeof(T)}"); + + field = del as T; + + if (field == null) + throw new Exception( + $"{GetType().Name} :: Delegate {name} is not type {typeof(T)}, instead it's: {del.GetType()}"); + } + } +} diff --git a/Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/API/APIServer.cs b/Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/API/APIServer.cs new file mode 100644 index 000000000..106649c4a --- /dev/null +++ b/Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/API/APIServer.cs @@ -0,0 +1,242 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Sandbox.ModAPI; +using VRage.Game.Entity; +using VRage.ModAPI; +using FieldGeneratorCore = Starcore.FieldGenerator.FieldGenerator; + +namespace Starcore.FieldGenerator.API +{ + public class APIProvider + { + private const long HandlerID = 917632; + private bool _registered; + + public bool IsReady { get; private set; } + + public void LoadAPI() + { + if (!_registered) + { + _registered = true; + MyAPIGateway.Utilities.RegisterMessageHandler(HandlerID, HandleMessage); + } + + IsReady = true; + + try + { + MyAPIGateway.Utilities.SendModMessage(HandlerID, FieldGeneratorSession.I.APIBackend.APIMethods); + } + catch (Exception ex) + { + Log.Error($"Field Generator API Load Failed!" + "\n" + ex); + } + } + + public void UnloadAPI() + { + if (_registered) + { + _registered = false; + MyAPIGateway.Utilities.UnregisterMessageHandler(HandlerID, HandleMessage); + } + IsReady = false; + } + + private void HandleMessage(object o) + { + if ((o as string) == "APIRequest") + MyAPIGateway.Utilities.SendModMessage(HandlerID, FieldGeneratorSession.I.APIBackend.APIMethods); + } + } + + internal class APIBackend + { + internal readonly Dictionary APIMethods; + + internal APIBackend() + { + APIMethods = new Dictionary() + { + ["GetFirstFieldGeneratorOnGrid"] = new Func(GetFirstFieldGeneratorOnGrid), + + ["IsSiegeActive"] = new Func(IsSiegeActive), + ["SetSiegeActive"] = new Action(SetSiegeActive), + + ["IsSiegeCooldownActive"] = new Func(IsSiegeCooldownActive), + ["SetSiegeCooldownActive"] = new Action(SetSiegeCooldownActive), + + ["GetSiegeCooldown"] = new Func(GetSiegeCooldown), + ["SetSiegeCooldown"] = new Action(SetSiegeCooldown), + + ["GetFieldPower"] = new Func(GetFieldPower), + ["SetFieldPower"] = new Action(SetFieldPower), + + ["GetMaximumFieldPower"] = new Func(GetMaximumFieldPower), + ["GetMinimumFieldPower"] = new Func(GetMinimumFieldPower), + + ["GetPowerDraw"] = new Func(GetPowerDraw), + + ["GetStability"] = new Func(GetStability), + ["SetStability"] = new Action(SetStability), + }; + } + + private IMyFunctionalBlock GetFirstFieldGeneratorOnGrid(long entityID) + { + if (entityID == 0) + return null; + + HashSet generators; + if (!FieldGeneratorSession.ActiveGenerators.TryGetValue(entityID, out generators)) + { + return null; + } + + var fieldGeneratorID = generators.FirstOrDefault(); + if (fieldGeneratorID == 0) + { + return null; + } + + IMyEntity generatorEntity; + if (!MyAPIGateway.Entities.TryGetEntityById(fieldGeneratorID, out generatorEntity)) + { + return null; + } + + return generatorEntity as IMyFunctionalBlock; + } + + private bool IsSiegeActive(IMyFunctionalBlock block) + { + var logic = FieldGeneratorCore.GetLogic(block.EntityId); + if (logic != null) + { + return logic.SiegeMode.Value; + } + + return false; + } + private void SetSiegeActive(IMyFunctionalBlock block, bool Active) + { + var logic = FieldGeneratorCore.GetLogic(block.EntityId); + if (logic != null) + { + logic.SiegeMode.Value = Active; + } + } + + private bool IsSiegeCooldownActive(IMyFunctionalBlock block) + { + var logic = FieldGeneratorCore.GetLogic(block.EntityId); + if (logic != null) + { + return logic.SiegeCooldownActive.Value; + } + + return false; + } + private void SetSiegeCooldownActive(IMyFunctionalBlock block, bool Active) + { + var logic = FieldGeneratorCore.GetLogic(block.EntityId); + if (logic != null) + { + logic.SiegeCooldownActive.Value = Active; + } + } + + private int GetSiegeCooldown(IMyFunctionalBlock block) + { + var logic = FieldGeneratorCore.GetLogic(block.EntityId); + if (logic != null) + { + return logic.SiegeCooldownTime.Value; + } + + return 0; + } + private void SetSiegeCooldown(IMyFunctionalBlock block, int Time) + { + var logic = FieldGeneratorCore.GetLogic(block.EntityId); + if (logic != null) + { + logic.SiegeCooldownTime.Value = Time; + } + } + + private float GetFieldPower (IMyFunctionalBlock block) + { + var logic = FieldGeneratorCore.GetLogic(block.EntityId); + if (logic != null) + { + return logic.FieldPower.Value; + } + + return 0; + } + private void SetFieldPower(IMyFunctionalBlock block, float Power) + { + var logic = FieldGeneratorCore.GetLogic(block.EntityId); + if (logic != null) + { + logic.FieldPower.Value = Power; + } + } + + private float GetMaximumFieldPower(IMyFunctionalBlock block) + { + var logic = FieldGeneratorCore.GetLogic(block.EntityId); + if (logic != null) + { + return logic.MaxFieldPower.Value; + } + + return 0; + } + private float GetMinimumFieldPower(IMyFunctionalBlock block) + { + var logic = FieldGeneratorCore.GetLogic(block.EntityId); + if (logic != null) + { + return logic.MinFieldPower.Value; + } + + return 0; + } + + private float GetPowerDraw(IMyFunctionalBlock block) + { + var logic = FieldGeneratorCore.GetLogic(block.EntityId); + if (logic != null) + { + return logic.CalculatePowerDraw(); + } + + return 0; + } + + private float GetStability(IMyFunctionalBlock block) + { + var logic = FieldGeneratorCore.GetLogic(block.EntityId); + if (logic != null) + { + return logic.Stability.Value; + } + + return 0; + } + private void SetStability(IMyFunctionalBlock block, float Stability) + { + var logic = FieldGeneratorCore.GetLogic(block.EntityId); + if (logic != null) + { + logic.Stability.Value = Stability; + } + } + } +} diff --git a/Utility Mods/Stable/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/CoreSys_API/CoreSystemsApiBase.cs b/Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/CoreSys_API/CoreSystemsApiBase.cs similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/CoreSys_API/CoreSystemsApiBase.cs rename to Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/CoreSys_API/CoreSystemsApiBase.cs diff --git a/Utility Mods/Stable/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/CoreSys_API/CoreSystemsApiBlocks.cs b/Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/CoreSys_API/CoreSystemsApiBlocks.cs similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/CoreSys_API/CoreSystemsApiBlocks.cs rename to Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/CoreSys_API/CoreSystemsApiBlocks.cs diff --git a/Utility Mods/Stable/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/CoreSys_API/CoreSystemsApiDefs.cs b/Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/CoreSys_API/CoreSystemsApiDefs.cs similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/CoreSys_API/CoreSystemsApiDefs.cs rename to Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/CoreSys_API/CoreSystemsApiDefs.cs diff --git a/Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/FieldGenerator_Config.cs b/Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/FieldGenerator_Config.cs new file mode 100644 index 000000000..7b821d10f --- /dev/null +++ b/Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/FieldGenerator_Config.cs @@ -0,0 +1,214 @@ +using System; +using System.IO; +using Sandbox.ModAPI; +using VRage.Game.Components; +using VRage.Game.ModAPI.Ingame.Utilities; // this ingame namespace is safe to use in mods as it has nothing to collide with +using VRage.Utils; + +namespace Starcore.FieldGenerator +{ + [MySessionComponentDescriptor(MyUpdateOrder.NoUpdate)] + public class FieldGenerator_Config : MySessionComponentBase + { + public static Generator_Settings Config { get; private set; } = new Generator_Settings(); + + public override void LoadData() + { + Config.Load(); + } + } + + public class Generator_Settings + { + const string VariableId = nameof(FieldGenerator_Config); // IMPORTANT: must be unique as it gets written in a shared space (sandbox.sbc) + const string FileName = "FieldGenerator_Config.ini"; // the file that gets saved to world storage under your mod's folder + const string IniSection = "FieldGenerator_Config"; + + // settings you'd be reading, and their defaults. + public bool SimplifiedMode = true; + + public int MaxModuleCount = 4; + public float PerModuleAmount = 10f; + + public float MaxPowerDraw = 500.00f; + public float MinPowerDraw = 50.00f; + + public int MaxSiegeTime = 60; + public int SiegePowerDraw = 900; + public float SiegeModeResistence = 0.9f; + + // Stability Related Settings - Locked Behind Simplified + public int DamageEventThreshold = 6; + public int ResetInterval = 3; + + public int MinBlockCount = 2500; + public int MaxBlockCount = 35000; + + public float SizeModifierMin = 1.2f; + public float SizeModifierMax = 0.8f; + + void LoadConfig(MyIni iniParser) + { + MaxModuleCount = iniParser.Get(IniSection, nameof(MaxModuleCount)).ToInt32(MaxModuleCount); + PerModuleAmount = iniParser.Get(IniSection, nameof(PerModuleAmount)).ToSingle(PerModuleAmount); + + MaxPowerDraw = iniParser.Get(IniSection, nameof(MaxPowerDraw)).ToSingle(MaxPowerDraw); + MinPowerDraw = iniParser.Get(IniSection, nameof(MinPowerDraw)).ToSingle(MinPowerDraw); + + MaxSiegeTime = iniParser.Get(IniSection, nameof(MaxSiegeTime)).ToInt32(MaxSiegeTime); + SiegePowerDraw = iniParser.Get(IniSection, nameof(SiegePowerDraw)).ToInt32(SiegePowerDraw); + SiegeModeResistence = iniParser.Get(IniSection, nameof(SiegeModeResistence)).ToSingle(SiegeModeResistence); + + SimplifiedMode = iniParser.Get(IniSection, nameof(SimplifiedMode)).ToBoolean(SimplifiedMode); + + DamageEventThreshold = iniParser.Get(IniSection, nameof(DamageEventThreshold)).ToInt32(DamageEventThreshold); + ResetInterval = iniParser.Get(IniSection, nameof(ResetInterval)).ToInt32(ResetInterval); + + MinBlockCount = iniParser.Get(IniSection, nameof(MinBlockCount)).ToInt32(MinBlockCount); + MaxBlockCount = iniParser.Get(IniSection, nameof(MaxBlockCount)).ToInt32(MaxBlockCount); + + SizeModifierMin = iniParser.Get(IniSection, nameof(SizeModifierMin)).ToSingle(SizeModifierMin); + SizeModifierMax = iniParser.Get(IniSection, nameof(SizeModifierMax)).ToSingle(SizeModifierMax); + } + + void SaveConfig(MyIni iniParser) + { + iniParser.Set(IniSection, nameof(MaxModuleCount), MaxModuleCount); + iniParser.SetComment(IniSection, nameof(MaxModuleCount), + " \n[Maximum number of upgrade modules that can be attached to the Field Generator core.]\n" + + "[Each core has 4 mounting points by default.]\n" + + "[Default: 4]"); + + iniParser.Set(IniSection, nameof(PerModuleAmount), PerModuleAmount); + iniParser.SetComment(IniSection, nameof(PerModuleAmount), + " \n[Amount of resistance each attached upgrade module provides.]\n" + + "[Default: 10.0]"); + + iniParser.Set(IniSection, nameof(MaxPowerDraw), MaxPowerDraw); + iniParser.SetComment(IniSection, nameof(MaxPowerDraw), + " \n[The maximum power draw (in MW) when the Field Generator is at full power.]\n" + + "[Default: 500 MW]"); + + iniParser.Set(IniSection, nameof(MinPowerDraw), MinPowerDraw); + iniParser.SetComment(IniSection, nameof(MinPowerDraw), + " \n[Baseline power draw (in MW) at minimum field power.]\n" + + "[Default: 50 MW]"); + + iniParser.Set(IniSection, nameof(MaxSiegeTime), MaxSiegeTime); + iniParser.SetComment(IniSection, nameof(MaxSiegeTime), + " \n[Maximum duration (in seconds) the Field Generator can remain in Siege mode.]\n" + + "[Default: 60s]\n"); + + iniParser.Set(IniSection, nameof(SiegePowerDraw), SiegePowerDraw); + iniParser.SetComment(IniSection, nameof(SiegePowerDraw), + " \n[Power draw (in MW) while Siege mode is active.]\n" + + "[Overrides normal scaled power draw.]\n" + + "[Default: 900 MW]"); + + iniParser.Set(IniSection, nameof(SiegeModeResistence), SiegeModeResistence); + iniParser.SetComment(IniSection, nameof(SiegeModeResistence), + " \n[Amount of damage resistance provided by Siege mode (0.0 to 1.0).]\n" + + "[Example: 0.9 means 90% damage reduction from normal.]\n" + + "[Default: 0.9]"); + + iniParser.Set(IniSection, nameof(SimplifiedMode), SimplifiedMode); + iniParser.SetComment(IniSection, nameof(SimplifiedMode), + " \n[Whether to disable (true) or enable (false) the advanced stability system.]\n" + + "[Default: true]"); + + iniParser.Set(IniSection, nameof(DamageEventThreshold), DamageEventThreshold); + iniParser.SetComment(IniSection, nameof(DamageEventThreshold), + " \n[Number of damage events (within ResetInterval) needed to trigger stability reduction.]\n" + + "[Default: 6]"); + + iniParser.Set(IniSection, nameof(ResetInterval), ResetInterval); + iniParser.SetComment(IniSection, nameof(ResetInterval), + " \n[Time interval (in seconds) between damage counter resets.]\n" + + "[Default: 3]"); + + iniParser.Set(IniSection, nameof(MinBlockCount), MinBlockCount); + iniParser.SetComment(IniSection, nameof(MinBlockCount), + " \n[Minimum grid block count used in the size-based stability calculation.]\n" + + "[Default: 2500]"); + + iniParser.Set(IniSection, nameof(MaxBlockCount), MaxBlockCount); + iniParser.SetComment(IniSection, nameof(MaxBlockCount), + " \n[Maximum grid block count used in the size-based stability calculation.]\n" + + "[Default: 35000]"); + + iniParser.Set(IniSection, nameof(SizeModifierMin), SizeModifierMin); + iniParser.SetComment(IniSection, nameof(SizeModifierMin), + " \n[The lower bound of the size modifier.]\n" + + "[Size Modifier can reduce or increase stability change based on the grid size. This Min is the Increase at Min Grid Size]\n" + + "[Default: 1.2]"); + + iniParser.Set(IniSection, nameof(SizeModifierMax), SizeModifierMax); + iniParser.SetComment(IniSection, nameof(SizeModifierMax), + " \n[The upper bound of the size modifier.]\n" + + "[Size Modifier can reduce or increase stability change based on the grid size. This Max is the Reduction at Max Grid Size]\n" + + "[Default: 0.8]"); + } + + // nothing to edit below this point + + public Generator_Settings() + { + } + + public void Load() + { + if(MyAPIGateway.Session.IsServer) + LoadOnHost(); + else + LoadOnClient(); + } + + void LoadOnHost() + { + MyIni iniParser = new MyIni(); + + // load file if exists then save it regardless so that it can be sanitized and updated + + if(MyAPIGateway.Utilities.FileExistsInWorldStorage(FileName, typeof(Generator_Settings))) + { + using(TextReader file = MyAPIGateway.Utilities.ReadFileInWorldStorage(FileName, typeof(Generator_Settings))) + { + string text = file.ReadToEnd(); + + MyIniParseResult result; + if(!iniParser.TryParse(text, out result)) + throw new Exception($"Config error: {result.ToString()}"); + + LoadConfig(iniParser); + } + } + + iniParser.Clear(); // remove any existing settings that might no longer exist + + SaveConfig(iniParser); + + string saveText = iniParser.ToString(); + + MyAPIGateway.Utilities.SetVariable(VariableId, saveText); + + using(TextWriter file = MyAPIGateway.Utilities.WriteFileInWorldStorage(FileName, typeof(Generator_Settings))) + { + file.Write(saveText); + } + } + + void LoadOnClient() + { + string text; + if(!MyAPIGateway.Utilities.GetVariable(VariableId, out text)) + throw new Exception("No config found in sandbox.sbc!"); + + MyIni iniParser = new MyIni(); + MyIniParseResult result; + if(!iniParser.TryParse(text, out result)) + throw new Exception($"Config error: {result.ToString()}"); + + LoadConfig(iniParser); + } + } +} \ No newline at end of file diff --git a/Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/FieldGenerator_Core.cs b/Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/FieldGenerator_Core.cs new file mode 100644 index 000000000..ab5b00db3 --- /dev/null +++ b/Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/FieldGenerator_Core.cs @@ -0,0 +1,845 @@ +using System; +using System.Linq; +using System.Text; +using System.Collections.Generic; +using ProtoBuf; +using Sandbox.Common.ObjectBuilders; +using Sandbox.Game; +using Sandbox.Game.EntityComponents; +using Sandbox.ModAPI; +using VRage.Game; +using VRage.Game.Components; +using VRage.Game.Entity; +using VRage.Game.ModAPI; +using VRage.Game.ModAPI.Network; +using VRage.ModAPI; +using VRage.Network; +using VRage.ObjectBuilders; +using VRage.Sync; +using VRageMath; +using static Draygo.API.HudAPIv2; +using static VRageRender.MyBillboard; +using Sandbox.Game.Gui; +using Draygo.API; + +namespace Starcore.FieldGenerator +{ + [MyEntityComponentDescriptor(typeof(MyObjectBuilder_Collector), false, "FieldGen_Core")] + public class FieldGenerator : MyGameLogicComponent, IMyEventProxy + { + private IMyCubeBlock Block; + private readonly bool IsServer = MyAPIGateway.Session.IsServer; + public readonly Guid SettingsID = new Guid("7A7AC398-FAE3-44E5-ABD5-8AE49434DDF6"); + + private Generator_Settings Config = FieldGenerator_Config.Config; + + private int _damageEventCounter = 0; + private float _stabilityChange = 0; + private int _resetCounter = 0; + private bool _lowStability = false; + + private int initValueDelayTicks = 60; // 1 second delay (60 ticks) + private bool valuesInitialized = false; + + #region Sync Properties + public MySync SiegeMode; + public MySync SiegeCooldownActive; + public MySync GridStopped = null; + + public MySync SiegeElapsedTime; + public MySync SiegeCooldownTime; + + public MySync FieldPower; // add on value change hook for Serverside Resistence + public MySync MaxFieldPower; + public MySync MinFieldPower; + public MySync SizeModifier; + public MySync Stability; // add on value change for handling zero stability if (IsServer && _stability == 0) HandleZeroStability(); + #endregion + + private Dictionary _coreDummies = new Dictionary(); + private HashSet _attachedModuleIds = new HashSet(); + private int _moduleCount = 0; + + private List _gridBlocks = new List(); + private int _gridBlockCount; + + private MyResourceSinkComponent Sink = null; + + HUDMessage GeneratorHUD; + StringBuilder GeneratorHUDContent; + + #region Overrides + public override void Init(MyObjectBuilder_EntityBase objectBuilder) + { + base.Init(objectBuilder); + + Block = (IMyFunctionalBlock)Entity; + + NeedsUpdate |= MyEntityUpdateEnum.BEFORE_NEXT_FRAME; + } + + public override void UpdateOnceBeforeFrame() + { + base.UpdateOnceBeforeFrame(); + + if (Block?.CubeGrid?.Physics == null) + return; + + FieldGeneratorControls.DoOnce(ModContext); + + Sink = Block.Components.Get(); + if (Sink != null) + { + Sink.SetRequiredInputFuncByType(MyResourceDistributorComponent.ElectricityId, CalculatePowerDraw); + Sink.Update(); + } + + if (IsServer) + { + Block.Model.GetDummies(_coreDummies); + Block.CubeGrid.GetBlocks(_gridBlocks); + _gridBlockCount = _gridBlocks.Count; + + LoadSettings(); + SaveSettings(); + + if (!Config.SimplifiedMode) + { + MyAPIGateway.Session.DamageSystem.RegisterBeforeDamageHandler(0, HandleDamageEvents); + } + + Block.CubeGrid.OnBlockAdded += OnBlockAdded; + Block.CubeGrid.OnBlockRemoved += OnBlockRemoved; + + SiegeCooldownActive.ValueChanged += (obj) => SaveSettings(); + SiegeElapsedTime.ValueChanged += (obj) => SaveSettings(); + SiegeCooldownTime.ValueChanged += (obj) => SaveSettings(); + MaxFieldPower.ValueChanged += (obj) => SaveSettings(); + MinFieldPower.ValueChanged += (obj) => SaveSettings(); + SizeModifier.ValueChanged += (obj) => SaveSettings(); + + SiegeMode.ValueChanged += SiegeMode_ValueChanged; + FieldPower.ValueChanged += FieldPower_ValueChanged; + Stability.ValueChanged += Stability_ValueChanged; + } + + if (!IsServer) + { + GridStopped.ValueChanged += OnGridStopValueChange; + } + + NeedsUpdate |= MyEntityUpdateEnum.EACH_FRAME; + NeedsUpdate |= MyEntityUpdateEnum.EACH_10TH_FRAME; + } + + public override void UpdateAfterSimulation() + { + base.UpdateAfterSimulation(); + + if (IsServer) + { + if (!valuesInitialized) + { + if (initValueDelayTicks > 0) + { + initValueDelayTicks--; + } + else + { + Stability.Value = 100; + InitExistingUpgrades(); + valuesInitialized = true; + } + } + } + + if (MyAPIGateway.Session.GameplayFrameCounter % 60 == 0) + { + if (Block.IsWorking) + { + if (IsServer) + { + UpdateSiegeState(); + + if (!Config.SimplifiedMode) + { + if (_lowStability && Stability.Value < 100) + { + Stability.Value = MathHelper.Clamp(Stability + 3, 0, 100); + HandleZeroStability(); + if (Stability.Value == 100) + { + _lowStability = false; + } + return; + } + + SizeModifier.Value = CalculateSizeModifier(); + + if (_damageEventCounter > Config.DamageEventThreshold) + { + _stabilityChange = -((1.6666666666667f * SizeModifier.Value) * (FieldPower.Value / 50)); + } + else + { + _stabilityChange = 3; + } + + Stability.Value = MathHelper.Clamp(Stability + _stabilityChange, 0, 100); + + if (_resetCounter < Config.ResetInterval) + { + _resetCounter++; + return; + } + else if (_resetCounter >= Config.ResetInterval) + { + _resetCounter = 0; + _damageEventCounter = 0; + return; + } + } + } + else + Sink.Update(); + } + else if (!Block.IsWorking) + { + if (IsServer) + { + if (FieldPower.Value > 0) + FieldPower.Value = 0; + + if (SiegeMode.Value) + { + CancelSiegeMode(); + SiegeMode.Value = false; + } + + HandleResistence(); + } + else + Sink.Update(); + } + } + } + + public override void UpdateAfterSimulation10() + { + base.UpdateAfterSimulation10(); + + if (IsClientInShip() || IsClientNearShip()) + { + UpdateHUD(); + } + else + PurgeHUDMessage(); + } + + public override void Close() + { + base.Close(); + + PurgeHUDMessage(); + + if (IsServer) + { + Block.CubeGrid.OnBlockAdded -= OnBlockAdded; + Block.CubeGrid.OnBlockRemoved -= OnBlockRemoved; + + SiegeCooldownActive.ValueChanged -= (obj) => SaveSettings(); + SiegeElapsedTime.ValueChanged -= (obj) => SaveSettings(); + SiegeCooldownTime.ValueChanged -= (obj) => SaveSettings(); + MaxFieldPower.ValueChanged -= (obj) => SaveSettings(); + MinFieldPower.ValueChanged -= (obj) => SaveSettings(); + SizeModifier.ValueChanged -= (obj) => SaveSettings(); + + SiegeMode.ValueChanged -= SiegeMode_ValueChanged; + FieldPower.ValueChanged -= FieldPower_ValueChanged; + Stability.ValueChanged -= Stability_ValueChanged; + } + + if (!IsServer) + { + GridStopped.ValueChanged -= OnGridStopValueChange; + } + + Block = null; + } + #endregion + + #region Event Handlers + private void OnBlockAdded(IMySlimBlock block) + { + if (block == null) + return; + + _gridBlockCount++; + + if (!_gridBlocks.Contains(block)) + _gridBlocks.Add(block); + + if (block.FatBlock != null && block.FatBlock.BlockDefinition.SubtypeId == "FieldGen_Capacity_Upgrade") + { + if (IsNeighbour(block) && IsModuleValid(block)) + { + long entityId = block.FatBlock.EntityId; + + if (!_attachedModuleIds.Contains(entityId) && _moduleCount < Config.MaxModuleCount) + { + _attachedModuleIds.Add(entityId); + _moduleCount++; + + CalculateUpgradeAmounts(); + } + } + } + } + + private void OnBlockRemoved(IMySlimBlock block) + { + if (block == null) + return; + + _gridBlockCount--; + + if (_gridBlocks.Contains(block)) + _gridBlocks.Remove(block); + + if (block.FatBlock != null && block.FatBlock.BlockDefinition.SubtypeId == "FieldGen_Capacity_Upgrade") + { + long entityId = block.FatBlock.EntityId; + + if (_attachedModuleIds.Contains(entityId)) + { + _attachedModuleIds.Remove(entityId); + _moduleCount--; + + CalculateUpgradeAmounts(); + } + } + } + + private void HandleDamageEvents(object target, ref MyDamageInformation info) + { + if (Block == null || !Block.IsWorking) + return; + + IMySlimBlock targetBlock = target as IMySlimBlock; + + if (targetBlock.CubeGrid != null && targetBlock != null) + { + IMyCubeGrid targetGrid = targetBlock.CubeGrid; + + if (targetGrid.EntityId != Block.CubeGrid.EntityId) + return; + + _damageEventCounter++; + return; + } + } + + private void HandleResistence() + { + if (Block == null) + return; + + if (!Block.IsWorking) + { + MyVisualScriptLogicProvider.SetGridGeneralDamageModifier(Block.CubeGrid.Name, 1); + return; + } + + if (SiegeMode.Value) + { + MyVisualScriptLogicProvider.SetGridGeneralDamageModifier(Block.CubeGrid.Name, (1 - Config.SiegeModeResistence)); + return; + } + else + MyVisualScriptLogicProvider.SetGridGeneralDamageModifier(Block.CubeGrid.Name, (float)Math.Round(1 - ((double)FieldPower.Value / 100), 3)); + } + + private void HandleZeroStability() + { + if (Block == null || !Block.IsWorking || Stability.Value != 0) + return; + + FieldPower.Value = 10; + _lowStability = true; + } + + private void SiegeMode_ValueChanged(MySync obj) + { + SaveSettings(); + Sink.Update(); + + if (IsServer) + HandleResistence(); + } + + private void FieldPower_ValueChanged(MySync obj) + { + FieldPower.Value = MathHelper.Clamp(obj.Value, MinFieldPower.Value, MaxFieldPower.Value); + SaveSettings(); + Sink.Update(); + + if (IsServer) + HandleResistence(); + } + + private void Stability_ValueChanged(MySync obj) + { + SaveSettings(); + + if (IsServer) + HandleZeroStability(); + } + + private void OnGridStopValueChange(MySync obj) + { + if (obj?.Value ?? false) + Block.CubeGrid.Physics.LinearVelocity = Vector3.Zero; + } + #endregion + + #region Siege Mode + private void UpdateSiegeState() + { + if (SiegeMode.Value && !SiegeCooldownActive.Value) + { + if (SiegeElapsedTime.Value + 1 <= Config.MaxSiegeTime) + { + SiegeElapsedTime.Value++; ; + SiegeBlockEnabler(Block.CubeGrid.GetFatBlocks(), false); + + if (Block.CubeGrid.Physics.LinearVelocity != Vector3D.Zero) + { + Block.CubeGrid.Physics.LinearVelocity = Vector3.Zero; + if (IsServer && !GridStopped.Value) + GridStopped.Value = true; + } + } + else + { + EndSiegeMode(); + SiegeMode.Value = false; + return; + } + } + + if (!SiegeMode.Value && !SiegeCooldownActive.Value && SiegeElapsedTime.Value > 0) + { + EndSiegeMode(); + return; + } + + if (SiegeCooldownActive.Value) + { + if (SiegeCooldownTime.Value > 0) + { + SiegeCooldownTime.Value--; + } + else + { + SiegeCooldownActive.Value = false; + } + } + } + + private void SiegeBlockEnabler(IEnumerable allFunctionalBlocks, bool enabled) + { + foreach (var block in allFunctionalBlocks) + { + if (block != null && block.BlockDefinition.SubtypeId != "FieldGen_Core") + { + var entBlock = block as MyEntity; + if (entBlock != null && FieldGeneratorSession.CoreSysAPI.HasCoreWeapon(entBlock)) + { + FieldGeneratorSession.CoreSysAPI.SetFiringAllowed(entBlock, enabled); + block.Enabled = enabled; + } + } + else + continue; + } + } + + private void EndSiegeMode() + { + if (IsServer && GridStopped.Value) + GridStopped.Value = false; + + SiegeBlockEnabler(Block.CubeGrid.GetFatBlocks(), true); + + SiegeCooldownTime.Value = (SiegeElapsedTime.Value > 5) ? (SiegeElapsedTime.Value * 2) : 5; + SiegeElapsedTime.Value = 0; + SiegeCooldownActive.Value = true; + } + + private void CancelSiegeMode() + { + if (IsServer && GridStopped.Value) + GridStopped.Value = false; + + SiegeBlockEnabler(Block.CubeGrid.GetFatBlocks(), true); + + SiegeCooldownTime.Value = 0; + SiegeElapsedTime.Value = 0; + } + #endregion + + #region Utility + public static T GetLogic(long entityId) where T : MyGameLogicComponent + { + IMyEntity targetEntity = MyAPIGateway.Entities.GetEntityById(entityId); + if (targetEntity == null) + { + Log.Info("GetLogic failed: Entity not found. Entity ID: " + entityId); + return null; + } + + IMyTerminalBlock targetBlock = targetEntity as IMyTerminalBlock; + if (targetBlock == null) + { + Log.Info("GetLogic failed: Target entity is not a terminal block. Entity ID: " + entityId); + return null; + } + + var logic = targetBlock.GameLogic?.GetAs(); + if (logic == null) + { + Log.Info("GetLogic failed: Logic component not found. Entity ID: " + entityId); + } + + return logic; + } + + private void InitExistingUpgrades() + { + List validUpgradeModules = new List(); + List neighbours = new List(); + Block.SlimBlock.GetNeighbours(neighbours); + + foreach (var n in neighbours) + { + if (n?.FatBlock == null) + { + continue; + } + else if (n.FatBlock.BlockDefinition.SubtypeId == "FieldGen_Capacity_Upgrade" && IsModuleValid(n)) + { + validUpgradeModules.Add(n.FatBlock.EntityId); + } + } + + foreach (var entityId in validUpgradeModules) + { + if (!_attachedModuleIds.Contains(entityId) && _moduleCount < Config.MaxModuleCount) + { + _attachedModuleIds.Add(entityId); + _moduleCount++; + } + } + + CalculateUpgradeAmounts(); + } + + private bool IsNeighbour(IMySlimBlock block) + { + List neighbours = new List(); + Block.SlimBlock.GetNeighbours(neighbours); + return neighbours.Contains(block); + } + + private bool IsModuleValid(IMySlimBlock neighbor) + { + var neighborDummies = new Dictionary(); + neighbor.FatBlock.Model.GetDummies(neighborDummies); + + foreach (var CoreDummy in _coreDummies) + { + Vector3D coreDummyPos = Vector3D.Transform(CoreDummy.Value.Matrix.Translation, Block.WorldMatrix); + + foreach (var neighborDummy in neighborDummies) + { + Vector3D neighborDummyPos = Vector3D.Transform(neighborDummy.Value.Matrix.Translation, neighbor.FatBlock.WorldMatrix); + + if (Vector3D.Distance(coreDummyPos, neighborDummyPos) < 0.5) + { + return true; + } + } + } + + return false; + } + + private void CalculateUpgradeAmounts() + { + MaxFieldPower.Value = MinFieldPower.Value + (_moduleCount * Config.PerModuleAmount); + + if (FieldPower.Value > MaxFieldPower.Value) + { + FieldPower.Value = MaxFieldPower.Value; + } + } + + private float CalculateSizeModifier() + { + int clampedBlockCount = MathHelper.Clamp(_gridBlockCount, Config.MinBlockCount, Config.MaxBlockCount); + float t = (float)(clampedBlockCount - Config.MinBlockCount) / (Config.MaxBlockCount - Config.MinBlockCount); + + return Config.SizeModifierMin + t * (Config.SizeModifierMax - Config.SizeModifierMin); + } + + public float CalculatePowerDraw() + { + if (SiegeMode.Value) + { + return Config.SiegePowerDraw; + } + + float maxPossibleFieldPower = Config.PerModuleAmount * Config.MaxModuleCount; + float clampedFieldPower = MathHelper.Clamp(FieldPower.Value, 0, maxPossibleFieldPower); + float t = clampedFieldPower / maxPossibleFieldPower; + + return Config.MinPowerDraw + t * (Config.MaxPowerDraw - Config.MinPowerDraw); + } + + private bool IsClientInShip() + { + if (Block != null) + { + foreach (var cockpit in Block.CubeGrid.GetFatBlocks()) + { + if (cockpit.Pilot != null && cockpit.Pilot.EntityId == MyAPIGateway.Session?.Player?.Character?.EntityId) + { + return true; + } + else + continue; + } + } + + return false; + } + + private bool IsClientNearShip() + { + if (Block != null) + { + var bound = new BoundingSphereD(Block.CubeGrid.GetPosition(), 65); + List nearEntities = MyAPIGateway.Entities.GetEntitiesInSphere(ref bound); + + foreach (var entity in nearEntities) + + if ( entity != null && entity?.EntityId == MyAPIGateway.Session?.Player?.Character?.EntityId) + { + return true; + } + else + continue; + } + + return false; + } + #endregion + + #region Settings + bool LoadSettings() + { + if (Block.Storage == null) + { + Log.Info($"LoadSettings: Block storage is null for {Block.EntityId}"); + return false; + } + + string rawData; + if (!Block.Storage.TryGetValue(SettingsID, out rawData)) + { + Log.Info($"LoadSettings: No data found for {Block.EntityId}"); + return false; + } + + try + { + var loadedSettings = MyAPIGateway.Utilities.SerializeFromBinary(Convert.FromBase64String(rawData)); + + if (loadedSettings != null) + { + Log.Info($"LoadSettings: Successfully loaded settings for {Block.EntityId}"); + + SiegeMode.Value = loadedSettings.Saved_SiegeMode; + SiegeCooldownActive.Value = loadedSettings.Saved_SiegeCooldownActive; + SiegeElapsedTime.Value = loadedSettings.Saved_SiegeElapsedTime; + SiegeCooldownTime.Value = loadedSettings.Saved_SiegeCooldownTime; + FieldPower.Value = loadedSettings.Saved_FieldPower; + MaxFieldPower.Value = loadedSettings.Saved_MaxFieldPower; + MinFieldPower.Value = loadedSettings.Saved_MinFieldPower; + SizeModifier.Value = loadedSettings.Saved_SizeModifier; + Stability.Value = loadedSettings.Saved_Stability; + + + return true; + } + } + catch (Exception e) + { + Log.Error($"Error loading settings for {Block.EntityId}!\n{e}"); + } + + return false; + } + + void SaveSettings() + { + if (Block == null) + { + Log.Info("SaveSettings called but Block is null."); + return; + } + + try + { + if (MyAPIGateway.Utilities == null) + throw new NullReferenceException($"MyAPIGateway.Utilities == null; entId={Entity?.EntityId};"); + + if (Block.Storage == null) + { + Log.Info($"Creating new storage for {Block.EntityId}"); + Block.Storage = new MyModStorageComponent(); + } + + var settings = new FieldGenSettings + { + Saved_SiegeMode = SiegeMode.Value, + Saved_SiegeCooldownActive = SiegeCooldownActive.Value, + Saved_SiegeElapsedTime = SiegeElapsedTime.Value, + Saved_SiegeCooldownTime = SiegeCooldownTime.Value, + Saved_FieldPower = FieldPower.Value, + Saved_MaxFieldPower = MaxFieldPower.Value, + Saved_MinFieldPower = MinFieldPower.Value, + Saved_SizeModifier = SizeModifier.Value, + Saved_Stability = Stability.Value, + }; + + string serializedData = Convert.ToBase64String(MyAPIGateway.Utilities.SerializeToBinary(settings)); + Block.Storage.SetValue(SettingsID, serializedData); + Log.Info($"SaveSettings: Successfully saved settings for {Block.EntityId}"); + } + catch (Exception e) + { + Log.Error($"Error saving settings for {Block.EntityId}!\n{e}"); + } + } + #endregion + + #region HUD + private void UpdateHUD() + { + if (GeneratorHUDContent == null) + { + GeneratorHUDContent = new StringBuilder(); + } + GeneratorHUDContent.Clear(); + + var fieldPower = SiegeMode.Value ? 90 : FieldPower.Value; + GeneratorHUDContent.Append(GenerateBar("Field Power:", fieldPower, MaxFieldPower.Value, false)); + + if (!Config.SimplifiedMode) + { + GeneratorHUDContent.Append(GenerateBar("Stability:", Stability.Value, 100, true)); + } + + if (SiegeMode.Value) + { + GeneratorHUDContent.Append($"\nSiege Mode Active | {SiegeElapsedTime.Value} / {Config.MaxSiegeTime}"); + } + else if (!SiegeMode.Value && SiegeCooldownActive.Value) + { + GeneratorHUDContent.Append($"\nSiege Mode On Cooldown | {SiegeCooldownTime.Value}"); + } + + if (!Block.IsWorking) + { + string reason = Block.IsFunctional ? "Insufficient Power?" : "Block Damaged!"; + GeneratorHUDContent.Append($"\nGenerator Core is Offline! | {reason}"); + } + + if (GeneratorHUD == null && FieldGeneratorSession.HudAPI.Heartbeat) + { + GeneratorHUD = new HUDMessage + ( + Message: GeneratorHUDContent, + Origin: new Vector2D(-1.2, -0.525), + TimeToLive: -1, + Scale: 0.7f, + HideHud: false, + Blend: BlendTypeEnum.PostPP, + Font: "monospace" + ); + + GeneratorHUD.Offset = GeneratorHUD.GetTextLength() / 2; + GeneratorHUD.Visible = true; + } + } + + private string GenerateBar(string label, float value, float maxValue, bool Stability) + { + if (maxValue <= 0) + maxValue = 1; + + var percentage = MathHelper.Clamp(value / maxValue, 0, 1); + var percentageReal = Math.Max(0, (int)Math.Round(percentage * 40)); + + string filledBar = new string('|', percentageReal); + string emptyBar = new string(' ', 40 - percentageReal); + + var maxPercentage = Stability ? Math.Round(percentage * 100) : FieldPower.Value; + + return $"{label}\n[{filledBar}{emptyBar}] {maxPercentage}%\n"; + } + + private void PurgeHUDMessage() + { + if (GeneratorHUD != null) + { + GeneratorHUD.Visible = false; + GeneratorHUD.DeleteMessage(); + GeneratorHUD = null; + } + } + #endregion + } + + [ProtoContract] + public class FieldGenSettings + { + [ProtoMember(41)] + public bool Saved_SiegeMode; + + [ProtoMember(42)] + public bool Saved_SiegeCooldownActive; + + [ProtoMember(43)] + public int Saved_SiegeElapsedTime; + + [ProtoMember(44)] + public int Saved_SiegeCooldownTime; + + [ProtoMember(45)] + public float Saved_FieldPower; + + [ProtoMember(46)] + public float Saved_MaxFieldPower; + + [ProtoMember(47)] + public float Saved_MinFieldPower; + + [ProtoMember(48)] + public float Saved_SizeModifier; + + [ProtoMember(49)] + public float Saved_Stability; + } +} diff --git a/Utility Mods/Stable/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/FieldGenerator_Logger.cs b/Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/FieldGenerator_Logger.cs similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/FieldGenerator_Logger.cs rename to Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/FieldGenerator_Logger.cs diff --git a/Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/FieldGenerator_Session.cs b/Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/FieldGenerator_Session.cs new file mode 100644 index 000000000..f78d81277 --- /dev/null +++ b/Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/FieldGenerator_Session.cs @@ -0,0 +1,178 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using Sandbox.Game.Entities; +using Sandbox.ModAPI; +using VRage.Game.Components; +using VRage.Game.ModAPI; +using VRage.ModAPI; + +using Starcore.FieldGenerator.API; +using CoreSystems.Api; +using Draygo.API; +using Sandbox.Game.Entities.Cube; + +namespace Starcore.FieldGenerator +{ + [MySessionComponentDescriptor(MyUpdateOrder.AfterSimulation)] + public class FieldGeneratorSession : MySessionComponentBase + { + public static FieldGeneratorSession I; + public static APIProvider APIProvider; + public static WcApi CoreSysAPI; + public static HudAPIv2 HudAPI; + + internal APIBackend APIBackend; + internal static readonly Dictionary> ActiveGenerators = new Dictionary>(); + + public override void LoadData() + { + I = this; + + InitExistingGeneratorCounts(); + + MyCubeGrid.OnBlockAddedGlobally += OnBlockAddedGlobally; + MyCubeGrid.OnBlockRemovedGlobally += OnBlockRemovedGlobally; + MyAPIGateway.Entities.OnEntityAdd += OnEntityAdd; + + APIBackend = new APIBackend(); + APIProvider = new APIProvider(); + APIProvider.LoadAPI(); + + HudAPI = new HudAPIv2(); + + CoreSysAPI = new WcApi(); + CoreSysAPI.Load(); + } + + protected override void UnloadData() + { + if (HudAPI.Heartbeat) + { + HudAPI.Unload(); + HudAPI = null; + } + + if (CoreSysAPI.IsReady) + { + CoreSysAPI.Unload(); + CoreSysAPI = null; + } + + APIProvider.UnloadAPI(); + APIProvider = null; + APIBackend = null; + + MyCubeGrid.OnBlockAddedGlobally -= OnBlockAddedGlobally; + MyCubeGrid.OnBlockRemovedGlobally -= OnBlockRemovedGlobally; + MyAPIGateway.Entities.OnEntityAdd -= OnEntityAdd; + + I = null; + } + + private void OnBlockAddedGlobally(T slimBlock) where T : IMySlimBlock + { + if (slimBlock?.FatBlock == null) + return; + if (!string.Equals(slimBlock.FatBlock.BlockDefinition.SubtypeName, "FieldGen_Core", + StringComparison.OrdinalIgnoreCase)) + return; + + var gridId = slimBlock.CubeGrid?.EntityId ?? 0; + if (gridId == 0) + return; + + HashSet set; + if (!ActiveGenerators.TryGetValue(gridId, out set)) + { + set = new HashSet(); + ActiveGenerators[gridId] = set; + } + + set.Add(slimBlock.FatBlock.EntityId); + } + + private void OnBlockRemovedGlobally(T slimBlock) where T : IMySlimBlock + { + if (slimBlock?.FatBlock == null) + return; + if (!string.Equals(slimBlock.FatBlock.BlockDefinition.SubtypeName, "FieldGen_Core", StringComparison.OrdinalIgnoreCase)) + return; + + var gridId = slimBlock.CubeGrid?.EntityId ?? 0; + if (gridId == 0) return; + + HashSet set; + if (ActiveGenerators.TryGetValue(gridId, out set)) + { + set.Remove(slimBlock.FatBlock.EntityId); + if (set.Count == 0) + ActiveGenerators.Remove(gridId); + } + } + + private void OnEntityAdd(IMyEntity ent) + { + var grid = ent as IMyCubeGrid; + if (grid == null) + return; + + var slimBlocks = new List(); + grid.GetBlocks(slimBlocks); + + foreach (var slimBlock in slimBlocks) + { + if (slimBlock?.FatBlock == null) + continue; + + if (string.Equals(slimBlock.FatBlock.BlockDefinition.SubtypeName, "FieldGen_Core", StringComparison.OrdinalIgnoreCase)) + { + var gridId = grid.EntityId; + HashSet set; + if (!ActiveGenerators.TryGetValue(gridId, out set)) + { + set = new HashSet(); + ActiveGenerators[gridId] = set; + } + set.Add(slimBlock.FatBlock.EntityId); + } + } + } + + private void InitExistingGeneratorCounts() + { + var allEntities = new HashSet(); + MyAPIGateway.Entities.GetEntities(allEntities); + foreach (var entity in allEntities) + { + var grid = entity as IMyCubeGrid; + if (grid == null) + continue; + + var slimBlocks = new List(); + grid.GetBlocks(slimBlocks); + + foreach (var slimBlock in slimBlocks) + { + if (slimBlock?.FatBlock == null) + continue; + + if (string.Equals(slimBlock.FatBlock.BlockDefinition.SubtypeName, "FieldGen_Core", StringComparison.OrdinalIgnoreCase)) + { + var gridId = grid.EntityId; + HashSet set; + if (!ActiveGenerators.TryGetValue(gridId, out set)) + { + set = new HashSet(); + ActiveGenerators[gridId] = set; + } + set.Add(slimBlock.FatBlock.EntityId); + } + } + } + } + } +} diff --git a/Utility Mods/Stable/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/FieldGenerator_TerminalControls.cs b/Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/FieldGenerator_TerminalControls.cs similarity index 87% rename from Utility Mods/Stable/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/FieldGenerator_TerminalControls.cs rename to Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/FieldGenerator_TerminalControls.cs index 544e37c6b..0b7f693dc 100644 --- a/Utility Mods/Stable/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/FieldGenerator_TerminalControls.cs +++ b/Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/FieldGenerator_TerminalControls.cs @@ -63,8 +63,8 @@ static void CreateControls() SiegeModeToggle.OffText = MyStringId.GetOrCompute("Off"); SiegeModeToggle.Visible = IsVisible; SiegeModeToggle.Enabled = CooldownEnabler; - SiegeModeToggle.Getter = (b) => b.GameLogic.GetAs().SiegeMode; - SiegeModeToggle.Setter = (b, v) => b.GameLogic.GetAs().SiegeMode = v; + SiegeModeToggle.Getter = (b) => b.GameLogic.GetAs().SiegeMode.Value; + SiegeModeToggle.Setter = (b, v) => b.GameLogic.GetAs().SiegeMode.Value = v; SiegeModeToggle.SupportsMultipleBlocks = true; MyAPIGateway.TerminalControls.AddControl(SiegeModeToggle); #endregion @@ -84,7 +84,7 @@ static void CreateControls() var logic = GetLogic(b); if (logic != null) { - return !logic.SiegeMode; + return !logic.SiegeMode.Value; } else return true; @@ -94,12 +94,12 @@ static void CreateControls() var logic = GetLogic(b); if (logic != null) { - float value = logic.FieldPower; + float value = logic.FieldPower.Value; w.Append(Math.Round(value, 1, MidpointRounding.ToEven)).Append('%'); } }; - FieldPowerSlider.Getter = (b) => b.GameLogic.GetAs().FieldPower; - FieldPowerSlider.Setter = (b, v) => b.GameLogic.GetAs().FieldPower = (int)Math.Round(v, 1); + FieldPowerSlider.Getter = (b) => b.GameLogic.GetAs().FieldPower.Value; + FieldPowerSlider.Setter = (b, v) => b.GameLogic.GetAs().FieldPower.Value = (int)Math.Round(v, 1); FieldPowerSlider.SupportsMultipleBlocks = true; MyAPIGateway.TerminalControls.AddControl(FieldPowerSlider); #endregion @@ -117,7 +117,7 @@ static void CreateActions(IMyModContext context) var logic = GetLogic(b); if (logic != null) { - logic.SiegeMode = !logic.SiegeMode; + logic.SiegeMode.Value = !logic.SiegeMode.Value; } }; SiegeToggleAction.Writer = (b, sb) => @@ -125,7 +125,7 @@ static void CreateActions(IMyModContext context) var logic = GetLogic(b); if (logic != null) { - string boolState = logic.SiegeMode ? "Active" : "Inactive"; + string boolState = logic.SiegeMode.Value ? "Active" : "Inactive"; sb.Append(boolState); } }; @@ -149,7 +149,7 @@ static void CreateActions(IMyModContext context) var logic = GetLogic(b); if (logic != null) { - logic.FieldPower += 2.5f; + logic.FieldPower.Value += 2.5f; } }; IncreasePowerAction.Writer = (b, sb) => @@ -157,7 +157,7 @@ static void CreateActions(IMyModContext context) var logic = GetLogic(b); if (logic != null) { - sb.Append($"{logic.FieldPower}%"); + sb.Append($"{logic.FieldPower.Value}%"); } }; IncreasePowerAction.InvalidToolbarTypes = new List() @@ -171,10 +171,10 @@ static void CreateActions(IMyModContext context) var logic = GetLogic(b); if (logic != null) { - return !logic.SiegeMode; + return !logic.SiegeMode.Value; } else - return true; + return false; }; MyAPIGateway.TerminalControls.AddAction(IncreasePowerAction); #endregion @@ -189,7 +189,7 @@ static void CreateActions(IMyModContext context) var logic = GetLogic(b); if (logic != null) { - logic.FieldPower -= 2.5f; + logic.FieldPower.Value -= 2.5f; } }; DecreasePowerAction.Writer = (b, sb) => @@ -197,7 +197,7 @@ static void CreateActions(IMyModContext context) var logic = GetLogic(b); if (logic != null) { - sb.Append($"{logic.FieldPower}%"); + sb.Append($"{logic.FieldPower.Value}%"); } }; DecreasePowerAction.InvalidToolbarTypes = new List() @@ -211,10 +211,10 @@ static void CreateActions(IMyModContext context) var logic = GetLogic(b); if (logic != null) { - return !logic.SiegeMode; + return !logic.SiegeMode.Value; } else - return true; + return false; }; MyAPIGateway.TerminalControls.AddAction(DecreasePowerAction); #endregion @@ -227,7 +227,7 @@ static float GetMinLimit(IMyTerminalBlock block) var logic = GetLogic(block); if (logic != null) { - return logic.MinFieldPower; + return logic.MinFieldPower.Value; } return 0; } @@ -237,7 +237,7 @@ static float GetMaxLimit(IMyTerminalBlock block) var logic = GetLogic(block); if (logic != null) { - return logic.MaxFieldPower; + return logic.MaxFieldPower.Value; } return 0; } diff --git a/Utility Mods/Stable/StarCoreMESAI/Data/Scripts/MESAPISpawning/HudAPIv2.cs b/Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/TextHUD_API/HudAPIv2.cs similarity index 96% rename from Utility Mods/Stable/StarCoreMESAI/Data/Scripts/MESAPISpawning/HudAPIv2.cs rename to Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/TextHUD_API/HudAPIv2.cs index 6d3761183..e90784382 100644 --- a/Utility Mods/Stable/StarCoreMESAI/Data/Scripts/MESAPISpawning/HudAPIv2.cs +++ b/Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/FieldGenerator/TextHUD_API/HudAPIv2.cs @@ -1,2624 +1,2624 @@ -using ProtoBuf; -using Sandbox.ModAPI; -using System; -using System.Collections.Generic; -using System.Text; -using VRage; -using VRage.Input; -using VRage.ModAPI; -using VRage.Utils; -using VRageMath; -using BlendTypeEnum = VRageRender.MyBillboard.BlendTypeEnum; - -namespace InvalidWave.Draygo.API -{ - public class HudAPIv2 - { - - public const string DefaultFont = "white"; - public const BlendTypeEnum DefaultHUDBlendType = BlendTypeEnum.PostPP; - public const BlendTypeEnum DefaultWorldBlendType = BlendTypeEnum.Standard; - - private static HudAPIv2 instance; - private const long REGISTRATIONID = 573804956; - private bool registered = false; - private Action m_onRegisteredAction; - - private Func MessageFactory; - private Action MessageSetter; - private Func MessageGetter; - private Action RemoveMessage; - - private Action m_onScreenDimensionsChanged; - - public Action OnScreenDimensionsChanged - { - get - { - return m_onScreenDimensionsChanged; - } - - set - { - m_onScreenDimensionsChanged = value; - } - } - - public enum TextOrientation : byte - { - ltr = 1, - center = 2, - rtl = 3 - } - - /// - /// Create a HudAPI Instance. Please only create one per mod. - /// - /// Callback once the HudAPI is active. You can Instantiate HudAPI objects in this Action - public HudAPIv2(Action onRegisteredAction = null) - { - if (instance != null) - { - - return; - } - instance = this; - m_onRegisteredAction = onRegisteredAction; - MyAPIGateway.Utilities.RegisterMessageHandler(REGISTRATIONID, RegisterComponents); - } - - public void Close() - { - Unload(); - } - /// - /// Unregisters mod and frees references. - /// - public void Unload() - { - MyAPIGateway.Utilities.UnregisterMessageHandler(REGISTRATIONID, RegisterComponents); - MessageFactory = null; - MessageSetter = null; - MessageGetter = null; - RemoveMessage = null; - registered = false; - m_onRegisteredAction = null; - if(instance == this) - instance = null; - } - private enum RegistrationEnum : int - { - OnScreenUpdate = 2000 - } - private void RegisterComponents(object obj) - { - if (registered) - return; - if(obj is MyTuple, Action, Func, Action>) - { - var Handlers = (MyTuple, Action, Func, Action>)obj; - MessageFactory = Handlers.Item1; - MessageSetter = Handlers.Item2; - MessageGetter = Handlers.Item3; - RemoveMessage = Handlers.Item4; - - registered = true; - if (m_onRegisteredAction != null) - m_onRegisteredAction(); - APIDialog.GetDialogMethods(MessageGetter); - MessageSet(null, (int)RegistrationEnum.OnScreenUpdate, new MyTuple(ScreenChangedHandle)); - - } - } - - /// - /// If Heartbeat is true you may call any constructor in this class. Do not call any constructor or set properties if this is false. - /// - public bool Heartbeat - { - get - { - return registered; - } - } - - - - #region Intercomm - private void DeleteMessage(object BackingObject) - { - if(BackingObject != null) - RemoveMessage(BackingObject); - } - private object CreateMessage(MessageTypes type) - { - return MessageFactory((int)type); - } - private object MessageGet(object BackingObject, int Member ) - { - return MessageGetter(BackingObject, Member); - } - private void MessageSet(object BackingObject, int Member, object Value) - { - MessageSetter(BackingObject, Member, Value); - } - private void RegisterCheck() - { - if (instance.registered == false) - { - throw new InvalidOperationException("HudAPI: Failed to create backing object. Do not instantiate without checking if heartbeat is true."); - } - } - private void ScreenChangedHandle() - { - if(m_onScreenDimensionsChanged != null) - { - m_onScreenDimensionsChanged(); - } - } - #endregion - private enum MessageTypes : int - { - HUDMessage = 0, - BillBoardHUDMessage, - EntityMessage, - SpaceMessage, - BillboardTriHUDMessage, - - MenuItem = 20, - MenuSubCategory, - MenuRootCategory, - MenuScreenInput, - MenuSliderItem, - MenuTextInput, - MenuKeybindInput, - MenuColorPickerInput, - - BoxUIContainer = 40, - BoxUIText, - BoxUIImage, - - UIDefinition = 60, - UIBehaviourDefinition - } - #region CustomDialogs - public static class APIDialog - { - private enum APIDialogs : int - { - ColorPickerDialog = 1100, - TextDialog, - KeybindDialog, - ScreenInputDialog, - SliderDialog - } - - private static Func, Action, Action, bool, bool, bool> ColorPickerDialogDelagete; - private static Func, StringBuilder, bool> TextDialogDelagete; - private static Func, StringBuilder, bool> KeybindDialogDelagete; - private static Func, Action, Action, bool> ScreenInputDialogDelagete; - private static Func, float, Func, Action, bool> SliderDialogDelagete; - internal static void GetDialogMethods(Func messageGetter) - { - ColorPickerDialogDelagete = messageGetter.Invoke((int)APIinfo.APIinfoMembers.GetDialog, (int)APIDialogs.ColorPickerDialog) - as Func, Action, Action, bool, bool, bool>; - TextDialogDelagete = messageGetter.Invoke((int)APIinfo.APIinfoMembers.GetDialog, (int)APIDialogs.TextDialog) - as Func, StringBuilder, bool>; - KeybindDialogDelagete = messageGetter.Invoke((int)APIinfo.APIinfoMembers.GetDialog, (int)APIDialogs.KeybindDialog) - as Func, StringBuilder, bool>; - ScreenInputDialogDelagete = messageGetter.Invoke((int)APIinfo.APIinfoMembers.GetDialog, (int)APIDialogs.ScreenInputDialog) - as Func, Action, Action, bool>; - SliderDialogDelagete = messageGetter.Invoke((int)APIinfo.APIinfoMembers.GetDialog, (int)APIDialogs.SliderDialog) - as Func, float, Func, Action, bool>; - } - - public static bool ColorPickerDialog(StringBuilder Title, Color InitialColor, Action onSubmit, Action onUpdate, Action onCancel, bool showAlpha, bool usehsv = false) - { - return ColorPickerDialogDelagete?.Invoke(Title, InitialColor, onSubmit, onUpdate, onCancel, showAlpha, usehsv) ?? false; - } - - public static bool TextDialog(Action onSubmit, StringBuilder Title) - { - return TextDialogDelagete?.Invoke(onSubmit, Title) ?? false; - } - - public static bool KeybindDialog(Action onSubmit, StringBuilder Title) - { - return KeybindDialogDelagete?.Invoke(onSubmit, Title) ?? false; - } - - public static bool ScreenInputDialog(StringBuilder title, Vector2D origin, Vector2D size, Action onSubmit, Action onUpdate, Action onCancel) - { - return ScreenInputDialogDelagete?.Invoke(title, origin, size, onSubmit, onUpdate, onCancel) ?? false; - } - - static public bool SliderDialog(StringBuilder title, Action onSubmit, float initialvalue, Func SliderPercentToValue, Action OnCancel) - { - return SliderDialogDelagete?.Invoke(title, onSubmit, initialvalue, SliderPercentToValue, OnCancel) ?? false; - } - } - - #endregion - - #region Info - public static class APIinfo - { - internal enum APIinfoMembers : int - { - ScreenPositionOnePX = 1000, - OnScreenUpdate, - GetBoxUIDefinition, - GetBoxUIBehaviour, - GetFontDefinition, - GetFonts, - GetDialog - } - - - /// - /// Returns the distance for one pixel in x and y directions, can be multiplied and fed into Origin, Offset, and Size parameters for precise manipulation of HUD objects. - /// - public static Vector2D ScreenPositionOnePX - { - get - { - return (Vector2D)instance.MessageGet(null, (int)APIinfoMembers.ScreenPositionOnePX); - } - } - /// - /// Available definitions: None, Default, Square - /// - /// - /// - public static BoxUIDefinition GetBoxUIDefinition(MyStringId DefinitionName) - { - return new BoxUIDefinition(instance.MessageGet(DefinitionName, (int)APIinfoMembers.GetBoxUIDefinition)); - - } - public static BoxUIBehaviourDef GetBoxUIBehaviour(MyStringId DefinitionName) - { - return new BoxUIBehaviourDef(instance.MessageGet(DefinitionName, (int)APIinfoMembers.GetBoxUIBehaviour)); - - } - - public static FontDefinition GetFontDefinition(MyStringId DefinitionName) - { - object retval = instance.MessageGet(DefinitionName, (int)APIinfoMembers.GetFontDefinition); - return new FontDefinition(retval); - - } - /// - /// Gives a list of fonts currently available in the TextHudAPI - /// - /// Fonts will be added to the collection, if null a new collection will be allocated - public static void GetFonts(List collection) - { - instance.MessageGet(collection, (int)APIinfoMembers.GetFonts); - } - - - } - #endregion - #region Messages - public enum Options : byte - { - None = 0x0, - HideHud = 0x1, - Shadowing = 0x2, - Fixed = 0x4, - FOVScale = 0x8, - Pixel = 0x10 - } - private enum MessageBaseMembers : int - { - Message = 0, - Visible, - TimeToLive, - Scale, - TextLength, - Offset, - BlendType, - Draw, - Flush, - SkipLinearRGB - } - public abstract class MessageBase - { - internal object BackingObject; - - #region Properties - /// - /// Note that if you update the stringbuilder anywhere it will update the message automatically. Use this property to set the stringbuilder object to your own or use the one generated by the constructor. - /// - public StringBuilder Message - { - get - { - return (StringBuilder)(instance.MessageGet(BackingObject, (int)MessageBaseMembers.Message)); - } - set - { - instance.MessageSet(BackingObject, (int)MessageBaseMembers.Message, value); - } - } - - - /// - /// True if HUD Element is visible, note that this will still be true if the player has their hud activated and HideHud option is set. - /// - public bool Visible - { - get - { - return (bool)(instance.MessageGet(BackingObject, (int)MessageBaseMembers.Visible)); - } - set - { - instance.MessageSet(BackingObject, (int)MessageBaseMembers.Visible, value); - } - } - - /// - /// Time to live in Draw ticks. At 0 class will close itself and will no longer update. - /// - public int TimeToLive - { - get - { - return (int)(instance.MessageGet(BackingObject, (int)MessageBaseMembers.TimeToLive)); - } - set - { - instance.MessageSet(BackingObject, (int)MessageBaseMembers.TimeToLive, value); - } - } - - - /// - /// Scale of the text elements or billboard - /// - public double Scale - { - get - { - return (double)(instance.MessageGet(BackingObject, (int)MessageBaseMembers.Scale)); - } - set - { - instance.MessageSet(BackingObject, (int)MessageBaseMembers.Scale, value); - } - } - - - /// - /// Offset the text element by this amount. Note this takes the result of GetTextLength, be sure to clear Offset.Y if you do not want to start at the lower left corner of the previous element - /// - public Vector2D Offset - { - get - { - return (Vector2D)(instance.MessageGet(BackingObject, (int)MessageBaseMembers.Offset)); - } - set - { - instance.MessageSet(BackingObject, (int)MessageBaseMembers.Offset, value); - } - } - - /// - /// put using BlendTypeEnum = VRageRender.MyBillboard.BlendTypeEnum; on top of your script to use this property. - /// - public BlendTypeEnum Blend - { - get - { - return (BlendTypeEnum)(instance.MessageGet(BackingObject, (int)MessageBaseMembers.BlendType)); - } - set - { - instance.MessageSet(BackingObject, (int)MessageBaseMembers.BlendType, value); - } - } - /// - /// Skips LinearRGB call in TextHUDAPI - /// - public bool SkipLinearRGB - { - get - { - return (bool)(instance.MessageGet(BackingObject, (int)MessageBaseMembers.SkipLinearRGB)); - } - set - { - instance.MessageSet(BackingObject, (int)MessageBaseMembers.SkipLinearRGB, value); - } - } - #endregion - - public abstract void DeleteMessage(); - - /// - /// Gets the offset of the lower right corner of the text element from the upper left. The value returned is a local translation. Screen space for screen messages, world space for world messages. Please note that the Y value is negative in screen space. - /// - /// Lower Right Corner - public Vector2D GetTextLength() - { - return (Vector2D)(instance.MessageGet(BackingObject, (int)MessageBaseMembers.TextLength)); - } - - /// - /// Manual draw method - /// - public void Draw() - { - instance.MessageGet(BackingObject, (int)MessageBaseMembers.Draw); - } - - /// - /// Clears the object cache - /// - public void Flush() - { - instance.MessageGet(BackingObject, (int)MessageBaseMembers.Flush); - } - - } - public class EntityMessage : MessageBase - { - private enum EntityMembers : int - { - Entity = 10, - LocalPosition, - Up, - Forward, - Orientation, - Max, - TransformMatrix, - Font - } - - #region Properties - /// - /// Entity text will be centered on / attached to. - /// - public IMyEntity Entity - { - get - { - return instance.MessageGet(BackingObject, (int)EntityMembers.Entity) as IMyEntity; - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Entity, value); - } - } - - - /// - /// Local translation of where the text will be in relation to the Entity it is attached to. Used to construct the TransformMatrix - /// - public Vector3D LocalPosition - { - get - { - return (Vector3D)instance.MessageGet(BackingObject, (int)EntityMembers.LocalPosition); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.LocalPosition, value); - } - } - - /// - /// Up, value used to construct the TransformMatrix - /// - public Vector3D Up - { - get - { - return (Vector3D)instance.MessageGet(BackingObject, (int)EntityMembers.Up); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Up, value); - } - } - - /// - /// Forward, value used to construct the TransformMatrix - /// - public Vector3D Forward - { - get - { - return (Vector3D)instance.MessageGet(BackingObject, (int)EntityMembers.Forward); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Forward, value); - } - } - - /// - /// Flag that sets from what direction text is written - /// - public TextOrientation Orientation - { - get - { - return (TextOrientation)instance.MessageGet(BackingObject, (int)EntityMembers.Orientation); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Orientation, (byte)value); - } - } - - - /// - /// World Boundries - /// - public Vector2D Max - { - get - { - return (Vector2D)instance.MessageGet(BackingObject, (int)EntityMembers.Max); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Max, value); - } - } - - /// - /// Sets the transformation matrix directly, use instead of LocalPosition, Up, Forward - /// - public MatrixD TransformMatrix - { - get - { - return (MatrixD)instance.MessageGet(BackingObject, (int)EntityMembers.TransformMatrix); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.TransformMatrix, value); - } - } - /// - /// Font, default is "white", "monospace" is also included. - /// - public string Font - { - get - { - return (string)(instance.MessageGet(BackingObject, (int)EntityMembers.Font)); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Font, value); - } - } - #endregion - public EntityMessage(StringBuilder Message, IMyEntity Entity, MatrixD TransformMatrix, int TimeToLive = -1, double Scale = 1, TextOrientation Orientation = TextOrientation.ltr, Vector2D? Offset = null, Vector2D? Max = null, string Font = DefaultFont) - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.EntityMessage); - if (BackingObject != null) - { - if (Max.HasValue) - this.Max = Max.Value; - this.Message = Message; - this.Entity = Entity; - this.TransformMatrix = TransformMatrix; - this.TimeToLive = TimeToLive; - this.Scale = Scale; - this.Visible = true; - this.Orientation = Orientation; - this.Blend = DefaultWorldBlendType; - if (Offset.HasValue) - { - this.Offset = Offset.Value; - } - else - { - this.Offset = Vector2D.Zero; - } - this.Font = Font; - } - - } - public EntityMessage(StringBuilder Message, IMyEntity Entity, Vector3D LocalPosition, Vector3D Forward, Vector3D Up, int TimeToLive = -1, double Scale = 1, TextOrientation Orientation = TextOrientation.ltr, Vector2D? Offset = null, Vector2D? Max = null, BlendTypeEnum Blend = DefaultWorldBlendType, string Font = DefaultFont) - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.EntityMessage); - if(BackingObject != null) - { - if (Max.HasValue) - this.Max = Max.Value; - this.Message = Message; - this.Entity = Entity; - this.LocalPosition = LocalPosition; - this.Forward = Forward; - this.Up = Up; - this.TimeToLive = TimeToLive; - this.Scale = Scale; - this.Visible = true; - this.Orientation = Orientation; - this.Blend = Blend; - if (Offset.HasValue) - { - this.Offset = Offset.Value; - } - else - { - this.Offset = Vector2D.Zero; - } - this.Font = Font; - } - - } - - public EntityMessage() - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.EntityMessage); - - } - - /// - /// Do not use this class after deleting it. - /// - public override void DeleteMessage() - { - instance.DeleteMessage(BackingObject); - BackingObject = null; - } - } - public class HUDMessage : MessageBase - { - private enum EntityMembers : int - { - Origin = 10, - Options, - ShadowColor, - Font, - InitalColor - } - #region Properties - /// - /// top left is -1, 1, bottom right is 1 -1 - /// - public Vector2D Origin - { - get - { - return (Vector2D)(instance.MessageGet(BackingObject, (int)EntityMembers.Origin)); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Origin, value); - } - } - - - /// - /// HideHud - hides when hud is hidden, shadow draw a shadow behind the text. - /// - public Options Options - { - get - { - return (Options)(instance.MessageGet(BackingObject, (int)EntityMembers.Options)); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Options, (byte)value); - } - } - - /// - /// Color of shadow behind the text - /// - public Color ShadowColor - { - get - { - return (Color)(instance.MessageGet(BackingObject, (int)EntityMembers.ShadowColor)); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.ShadowColor, value); - } - } - /// - /// Font, default is "white", "monospace" also supported, modded fonts will be supported in the future. - /// - public string Font - { - get - { - return (string)(instance.MessageGet(BackingObject, (int)EntityMembers.Font)); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Font, value); - } - } - - /// - /// Sets the initial color of the text, Default: White - /// - public Color InitialColor - { - get - { - return (Color)(instance.MessageGet(BackingObject, (int)EntityMembers.InitalColor)); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.InitalColor, value); - } - } - #endregion - - public HUDMessage(StringBuilder Message, Vector2D Origin, Vector2D? Offset = null, int TimeToLive = -1, double Scale = 1.0d, bool HideHud = true, bool Shadowing = false, Color? ShadowColor = null, BlendTypeEnum Blend = DefaultHUDBlendType, string Font = DefaultFont) - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.HUDMessage); - if(BackingObject != null) - { - this.TimeToLive = TimeToLive; - this.Origin = Origin; - this.Options = Options.None; - if (HideHud) - Options |= Options.HideHud; - if (Shadowing) - Options |= Options.Shadowing; - var blackshadow = Color.Black; - if (ShadowColor.HasValue) - ShadowColor = ShadowColor.Value; - this.Scale = Scale; - this.Message = Message; - this.Blend = Blend; - if (Offset.HasValue) - { - this.Offset = Offset.Value; - } - else - { - this.Offset = Vector2D.Zero; - } - this.Font = Font; - } - } - public HUDMessage() - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.HUDMessage); - } - - public override void DeleteMessage() - { - instance.DeleteMessage(BackingObject); - BackingObject = null; - } - - } - public class BillBoardHUDMessage : MessageBase - { - - private enum EntityMembers : int - { - Origin = 10, - Options, - BillBoardColor, - Material, - Rotation, - Width, - Height, - uvOffset, - uvSize, - TextureSize, - uvEnabled - } - - #region Properties - /// - /// top left is -1, 1, bottom right is 1 -1 - /// - public Vector2D Origin - { - get - { - return (Vector2D)instance.MessageGet(BackingObject, (int)EntityMembers.Origin); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Origin, value); - } - } - - /// - /// Use MyStringId.GetOrCompute to turn a string into a MyStringId. - /// - public MyStringId Material - { - get - { - return (MyStringId)instance.MessageGet(BackingObject, (int)EntityMembers.Material); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Material, value); - } - } - - - /// - /// Set Options, HideHud to true will hide billboard when hud is hidden. Shadowing will draw the element on the shadow layer (behind the text layer) - /// - public Options Options - { - get - { - return (Options)instance.MessageGet(BackingObject, (int)EntityMembers.Options); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Options, (byte)value); - } - } - - - /// - /// Sets the color mask of the billboard, not all billboards support this parameter. - /// - public Color BillBoardColor - { - get - { - return (Color)instance.MessageGet(BackingObject, (int)EntityMembers.BillBoardColor); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.BillBoardColor, value); - } - } - - /// - /// Rotate billboard in radians. - /// - public float Rotation - { - get - { - return (float)instance.MessageGet(BackingObject, (int)EntityMembers.Rotation); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Rotation, value); - } - } - - - /// - /// Multiplies the width of the billboard by this amount. Set Scale to 1 if you want to use this to finely control the width of the billboard, such as a value from GetTextLength - /// You might need to multiply the result of GetTextLength by 250 or maybe 500 if Scale is 1. Will need experiementing - /// - public float Width - { - get - { - return (float)instance.MessageGet(BackingObject, (int)EntityMembers.Width); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Width, value); - } - } - - - /// - /// Multiplies the height of the billboard by this amount. Set Scale to 1 if you want to use this to finely control the height of the billboard, such as a value from GetTextLength - /// - public float Height - { - get - { - return (float)instance.MessageGet(BackingObject, (int)EntityMembers.Height); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Height, value); - } - } - - /// - /// UV offset in pixels - /// - public Vector2 uvOffset - { - get - { - return (Vector2)instance.MessageGet(BackingObject, (int)EntityMembers.uvOffset); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.uvOffset, value); - } - } - /// - /// Size in pixels - /// - public Vector2 uvSize - { - get - { - return (Vector2)instance.MessageGet(BackingObject, (int)EntityMembers.uvSize); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.uvSize, value); - } - } - /// - /// Size of image in pixels (please note the height and width of the image must be the same) - /// - public float TextureSize - { - get - { - return (float)instance.MessageGet(BackingObject, (int)EntityMembers.TextureSize); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.TextureSize, value); - } - } - /// - /// Use uv parameters. Default is false. - /// - public bool uvEnabled - { - get - { - return (bool)instance.MessageGet(BackingObject, (int)EntityMembers.uvEnabled); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.uvEnabled, value); - } - } - #endregion - - public BillBoardHUDMessage(MyStringId Material, Vector2D Origin, Color BillBoardColor, Vector2D? Offset = null, int TimeToLive = -1, double Scale = 1d, float Width = 1f, float Height = 1f, float Rotation = 0, bool HideHud = true, bool Shadowing = true, BlendTypeEnum Blend = DefaultHUDBlendType) - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.BillBoardHUDMessage); - - if(BackingObject != null) - { - this.TimeToLive = TimeToLive; - this.Origin = Origin; - this.Options = Options.None; - if (HideHud) - this.Options |= Options.HideHud; - if (Shadowing) - this.Options |= Options.Shadowing; - this.BillBoardColor = BillBoardColor; - this.Scale = Scale; - this.Material = Material; - this.Rotation = Rotation; - this.Blend = Blend; - if (Offset.HasValue) - { - this.Offset = Offset.Value; - } - else - { - this.Offset = Vector2D.Zero; - } - this.Width = Width; - this.Height = Height; - } - - - } - - public BillBoardHUDMessage(MyStringId Material, Vector2D Origin, Color BillBoardColor, Vector2 uvOffset, Vector2 uvSize, float TextureSize, Vector2D? Offset = null, int TimeToLive = -1, double Scale = 1d, float Width = 1f, float Height = 1f, float Rotation = 0, bool HideHud = true, bool Shadowing = true, BlendTypeEnum Blend = DefaultHUDBlendType) - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.BillBoardHUDMessage); - - if (BackingObject != null) - { - this.uvEnabled = true; - this.uvOffset = uvOffset; - this.uvSize = uvSize; - this.TextureSize = TextureSize; - this.TimeToLive = TimeToLive; - this.Origin = Origin; - this.Options = Options.None; - if (HideHud) - this.Options |= Options.HideHud; - if (Shadowing) - this.Options |= Options.Shadowing; - this.BillBoardColor = BillBoardColor; - this.Scale = Scale; - this.Material = Material; - this.Rotation = Rotation; - this.Blend = Blend; - if (Offset.HasValue) - { - this.Offset = Offset.Value; - } - else - { - this.Offset = Vector2D.Zero; - } - this.Width = Width; - this.Height = Height; - } - - - } - - public BillBoardHUDMessage() - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.BillBoardHUDMessage); - } - - public override void DeleteMessage() - { - instance.DeleteMessage(BackingObject); - BackingObject = null; - } - } - - public class BillBoardTriHUDMessage : MessageBase - { - - private enum EntityMembers : int - { - Message = 0, - Origin = 10, - Options, - BillBoardColor, - Material, - Rotation, - Width, - Height, - p0, - p1, - p2 - } - - #region Properties - /// - /// top left is -1, 1, bottom right is 1 -1 - /// - public Vector2D Origin - { - get - { - return (Vector2D)instance.MessageGet(BackingObject, (int)EntityMembers.Origin); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Origin, value); - } - } - - /// - /// Use MyStringId.GetOrCompute to turn a string into a MyStringId. - /// - public MyStringId Material - { - get - { - return (MyStringId)instance.MessageGet(BackingObject, (int)EntityMembers.Material); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Material, value); - } - } - - - /// - /// Set Options, HideHud to true will hide billboard when hud is hidden. Shadowing will draw the element on the shadow layer (behind the text layer) - /// - public Options Options - { - get - { - return (Options)instance.MessageGet(BackingObject, (int)EntityMembers.Options); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Options, (byte)value); - } - } - - - /// - /// Sets the color mask of the billboard, not all billboards support this parameter. - /// - public Color BillBoardColor - { - get - { - return (Color)instance.MessageGet(BackingObject, (int)EntityMembers.BillBoardColor); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.BillBoardColor, value); - } - } - - /// - /// Rotate billboard in radians. - /// - public float Rotation - { - get - { - return (float)instance.MessageGet(BackingObject, (int)EntityMembers.Rotation); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Rotation, value); - } - } - - - /// - /// Multiplies the width of the billboard by this amount. Set Scale to 1 if you want to use this to finely control the width of the billboard, such as a value from GetTextLength - /// You might need to multiply the result of GetTextLength by 250 or maybe 500 if Scale is 1. Will need experiementing - /// - public float Width - { - get - { - return (float)instance.MessageGet(BackingObject, (int)EntityMembers.Width); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Width, value); - } - } - - - /// - /// Multiplies the height of the billboard by this amount. Set Scale to 1 if you want to use this to finely control the height of the billboard, such as a value from GetTextLength - /// - public float Height - { - get - { - return (float)instance.MessageGet(BackingObject, (int)EntityMembers.Height); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Height, value); - } - } - - /// - /// UV P0 (note this is percentage based between 0-1 for X,Y) - /// - public Vector2 P0 - { - get - { - return (Vector2)instance.MessageGet(BackingObject, (int)EntityMembers.p0); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.p0, value); - } - } - /// - /// UV P1 (note this is percentage based between 0-1 for X,Y) - /// - public Vector2 P1 - { - get - { - return (Vector2)instance.MessageGet(BackingObject, (int)EntityMembers.p1); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.p1, value); - } - } - /// - /// UV P2 (note this is percentage based between 0-1 for X,Y) - /// - public Vector2 P2 - { - get - { - return (Vector2)instance.MessageGet(BackingObject, (int)EntityMembers.p2); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.p2, value); - } - } - - #endregion - - - - public BillBoardTriHUDMessage(MyStringId Material, Vector2D Origin, Color BillBoardColor, Vector2 p0, Vector2 p1, Vector2 p2, Vector2D? Offset = null, int TimeToLive = -1, double Scale = 1d, float Width = 1f, float Height = 1f, float Rotation = 0, bool HideHud = true, bool Shadowing = true, BlendTypeEnum Blend = DefaultHUDBlendType) - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.BillboardTriHUDMessage); - - if (BackingObject != null) - { - - this.TimeToLive = TimeToLive; - this.Origin = Origin; - this.Options = Options.None; - if (HideHud) - this.Options |= Options.HideHud; - if (Shadowing) - this.Options |= Options.Shadowing; - this.BillBoardColor = BillBoardColor; - this.Scale = Scale; - this.Material = Material; - this.Rotation = Rotation; - this.Blend = Blend; - if (Offset.HasValue) - { - this.Offset = Offset.Value; - } - else - { - this.Offset = Vector2D.Zero; - } - this.Width = Width; - this.Height = Height; - this.P0 = p0; - this.P1 = p1; - this.P2 = p2; - } - - - } - - public BillBoardTriHUDMessage() - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.BillboardTriHUDMessage); - } - - public override void DeleteMessage() - { - instance.DeleteMessage(BackingObject); - BackingObject = null; - } - } - - public class SpaceMessage : MessageBase - { - private enum EntityMembers : int - { - WorldPosition = 10, - Up, - Left, - TxtOrientation, - Font - - } - #region Properties - /// - /// Position - /// - public Vector3D WorldPosition - { - get - { - return (Vector3D)instance.MessageGet(BackingObject, (int)EntityMembers.WorldPosition); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.WorldPosition, value); - } - } - - - /// - /// Up vector for textures - /// - public Vector3D Up - { - get - { - return (Vector3D)instance.MessageGet(BackingObject, (int)EntityMembers.Up); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Up, value); - } - } - - - /// - /// Left Vector for Textures - /// - public Vector3D Left - { - get - { - return (Vector3D)instance.MessageGet(BackingObject, (int)EntityMembers.Left); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Left, value); - } - } - /// - /// Font, default is "white", "monospace" also supported, modded fonts will be supported in the future. - /// - public string Font - { - get - { - return (string)(instance.MessageGet(BackingObject, (int)EntityMembers.Font)); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.Font, value); - } - } - - /// - /// Text orientation, from what edge text is aligned. - /// - public TextOrientation TxtOrientation - { - get - { - return (TextOrientation)instance.MessageGet(BackingObject, (int)EntityMembers.TxtOrientation); - } - set - { - instance.MessageSet(BackingObject, (int)EntityMembers.TxtOrientation, (byte)value); - } - } - #endregion - - - public SpaceMessage(StringBuilder Message, Vector3D WorldPosition, Vector3D Up, Vector3D Left, double Scale = 1, Vector2D? Offset = null, int TimeToLive = -1, TextOrientation TxtOrientation = TextOrientation.ltr, BlendTypeEnum Blend = DefaultWorldBlendType, string Font = DefaultFont) - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.SpaceMessage); - if(BackingObject != null) - { - this.TimeToLive = TimeToLive; - this.Scale = Scale; - this.WorldPosition = WorldPosition; - this.Up = Up; - this.Left = Left; - this.TxtOrientation = TxtOrientation; - this.Message = Message; - this.Blend = Blend; - if (Offset.HasValue) - { - this.Offset = Offset.Value; - } - else - { - this.Offset = Vector2D.Zero; - } - this.Font = Font; - } - - } - - public SpaceMessage() - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.SpaceMessage); - } - - public override void DeleteMessage() - { - instance.DeleteMessage(BackingObject); - BackingObject = null; - } - } - #endregion - - #region Menu - public abstract class MenuItemBase - { - private enum MenuItemBaseMembers : int - { - Text = 0, - Interactable - } - internal object BackingObject; - - /// - /// Text displayed in the category list - /// - public string Text - { - get - { - return (string)(instance.MessageGet(BackingObject, (int)MenuItemBaseMembers.Text)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuItemBaseMembers.Text, value); - } - } - /// - /// User can select this item. true by default - /// - public bool Interactable - { - get - { - return (bool)(instance.MessageGet(BackingObject, (int)MenuItemBaseMembers.Interactable)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuItemBaseMembers.Interactable, value); - } - } - } - public class MenuItem : MenuItemBase - { - private enum MenuItemMembers : int - { - OnClickAction = 100, - Parent - } - /// - /// On click event that will be fired if the user selects this item. - /// - public Action OnClick - { - get - { - return (Action)(instance.MessageGet(BackingObject, (int)MenuItemMembers.OnClickAction)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuItemMembers.OnClickAction, value); - } - } - /// - /// Must be either a MenuRootCategory or MenuSubCategory object - /// - public MenuCategoryBase Parent - { - set - { - instance.MessageSet(BackingObject, (int)MenuItemMembers.Parent, value.BackingObject); - } - } - /// - /// Basic toggle. You can use this to create on/off toggles, checkbox lists or option lists. - /// - /// Text displayed in the category list - /// Must be either a MenuRootCategory or MenuSubCategory object - /// On click event that will be fired if the user selects this item. - /// User can select this item. true by default - public MenuItem(string Text, MenuCategoryBase Parent, Action OnClick = null, bool Interactable = true) - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.MenuItem); - - this.Text = Text; - this.Parent = Parent; - this.OnClick = OnClick; - this.Interactable = Interactable; - } - } - public abstract class MenuCategoryBase : MenuItemBase - { - private enum MenuBaseCategoryMembers : int - { - Header = 100 - } - /// - /// Header text of the menu list. - /// - public string Header - { - get - { - return (string)(instance.MessageGet(BackingObject, (int)MenuBaseCategoryMembers.Header)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuBaseCategoryMembers.Header, value); - } - } - } - public class MenuRootCategory : MenuCategoryBase - { - public enum MenuFlag : int - { - None = 0, - PlayerMenu = 1, - AdminMenu = 2 - } - private enum MenuRootCategoryMembers : int - { - MenuFlag = 200 - - } - /// - /// Which menu to attach to, either Player or Admin menus. - /// - public MenuFlag Menu - { - get - { - return (MenuFlag)(instance.MessageGet(BackingObject, (int)MenuRootCategoryMembers.MenuFlag)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuRootCategoryMembers.MenuFlag, (int)value); - } - } - /// - /// Create only one of these per mod. Automatically attaches to parent lists. - /// - /// Text displayed in the root menu list - /// Which menu to attach to, either Player or Admin menus. - /// Header text of this menu list. - public MenuRootCategory(string Text, MenuFlag AttachedMenu = MenuFlag.None, string HeaderText = "Default Header") - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.MenuRootCategory); - this.Text = Text; - Header = HeaderText; - Menu = AttachedMenu; - } - } - public class MenuSubCategory : MenuCategoryBase - { - private enum MenuSubCategoryMembers : int - { - Parent = 200 - } - - /// - /// Must be either a MenuRootCategory or MenuSubCategory objectMust be either a MenuRootCategory or MenuSubCategory object - /// - public MenuCategoryBase Parent - { - set - { - instance.MessageSet(BackingObject, (int)MenuSubCategoryMembers.Parent, value.BackingObject); - } - } - - /// - /// Creates a sub category, must attach to either Root or another Sub Category. - /// - /// Text displayed in the category list - /// Must be either a MenuRootCategory or MenuSubCategory objectMust be either a MenuRootCategory or MenuSubCategory object - /// Header text of this menu list. - public MenuSubCategory(string Text, MenuCategoryBase Parent, string HeaderText = "Default Header") - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.MenuSubCategory); - this.Text = Text; - this.Header = HeaderText; - this.Parent = Parent; - } - } - public class MenuColorPickerInput : MenuItemBase - { - private enum MenuColorPickerInputMembers : int - { - OnSubmitAction = 100, - Parent, - InputDialogTitle, - OnUpdateAction, - OnCancelAction, - InitialColor, - ShowAlpha, - UseHSV - } - - /// - /// Must be either a MenuRootCategory or MenuSubCategory object - /// - public MenuCategoryBase Parent - { - set - { - instance.MessageSet(BackingObject, (int)MenuColorPickerInputMembers.Parent, value.BackingObject); - } - } - - /// - /// Titlebar of the Dialog window. - /// - public string InputDialogTitle - { - get - { - return (string)(instance.MessageGet(BackingObject, (int)MenuColorPickerInputMembers.InputDialogTitle)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuColorPickerInputMembers.InputDialogTitle, value); - } - } - - /// - /// Returns inputted color on submit. - /// - public Action OnSubmitAction - { - get - { - return (Action)(instance.MessageGet(BackingObject, (int)MenuColorPickerInputMembers.OnSubmitAction)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuColorPickerInputMembers.OnSubmitAction, value); - } - } - - /// - /// Returns color as client is manipulating the dialog. - /// - public Action OnUpdateAction - { - get - { - return (Action)(instance.MessageGet(BackingObject, (int)MenuColorPickerInputMembers.OnUpdateAction)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuColorPickerInputMembers.OnUpdateAction, value); - } - } - - /// - /// Canceled the dialog - /// - public Action OnCancelAction - { - get - { - return (Action)(instance.MessageGet(BackingObject, (int)MenuColorPickerInputMembers.OnCancelAction)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuColorPickerInputMembers.OnCancelAction, value); - } - } - - /// - /// Initial color in the dialog box - /// - public Color InitialColor - { - get - { - return (Color)(instance.MessageGet(BackingObject, (int)MenuColorPickerInputMembers.InitialColor)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuColorPickerInputMembers.InitialColor, value); - } - } - - /// - /// Shows alpha slider if true (default true) - /// - public bool ShowAlpha - { - get - { - return (bool)(instance.MessageGet(BackingObject, (int)MenuColorPickerInputMembers.ShowAlpha)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuColorPickerInputMembers.ShowAlpha, value); - } - } - - /// - /// UseHSV Values - /// - public bool UseHSV - { - get - { - return (bool)(instance.MessageGet(BackingObject, (int)MenuColorPickerInputMembers.UseHSV)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuColorPickerInputMembers.UseHSV, value); - } - } - - /// - /// Summons a dialog box that allows the user to specify a color. - /// - /// Text displayed in the category list - /// Must be either a MenuRootCategory or MenuSubCategory object - /// Initial color set in the dialog box - /// Dialog Title - /// On Submit Callback, returns color in the dialog - /// Update callback, will call per tick with the current selected color in the dialog - /// User canceled the dialog - /// Shows alpha slider if true - /// Have Sliders Represent HSV Values - public MenuColorPickerInput(string Text, MenuCategoryBase Parent, Color initialColor, string InputDialogTitle = "Enter text value", Action onSubmit = null, Action onUpdate = null, Action onCancel = null, bool showAlpha = true, bool useHSV = false) - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.MenuColorPickerInput); - this.Text = Text; - this.InputDialogTitle = InputDialogTitle; - this.OnSubmitAction = onSubmit; - this.Parent = Parent; - this.InitialColor = initialColor; - this.OnUpdateAction = onUpdate; - this.OnCancelAction = onCancel; - this.ShowAlpha = showAlpha; - this.UseHSV = useHSV; - } - } - public class MenuTextInput : MenuItemBase - { - private enum MenuTextInputMembers : int - { - OnSubmitAction = 100, - Parent, - InputDialogTitle - } - - /// - /// Must be either a MenuRootCategory or MenuSubCategory object - /// - public MenuCategoryBase Parent - { - set - { - instance.MessageSet(BackingObject, (int)MenuTextInputMembers.Parent, value.BackingObject); - } - } - - /// - /// Titlebar of the Dialog window. - /// - public string InputDialogTitle - { - get - { - return (string)(instance.MessageGet(BackingObject, (int)MenuTextInputMembers.InputDialogTitle)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuTextInputMembers.InputDialogTitle, value); - } - } - - /// - /// Returns inputted string on submit. - /// - public Action OnSubmitAction - { - get - { - return (Action)(instance.MessageGet(BackingObject, (int)MenuTextInputMembers.OnSubmitAction)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuTextInputMembers.OnSubmitAction, value); - } - } - - /// - /// Opens a text input dialog box when user selects this item. - /// - /// Text displayed in the category list - /// Must be either a MenuRootCategory or MenuSubCategory object - /// Titlebar of the Dialog window. - /// Returns inputted string on submit. - public MenuTextInput(string Text, MenuCategoryBase Parent, string InputDialogTitle = "Enter text value", Action onSubmit = null) - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.MenuTextInput); - this.Text = Text; - this.InputDialogTitle = InputDialogTitle; - this.OnSubmitAction = onSubmit; - this.Parent = Parent; - } - } - public class MenuKeybindInput : MenuItemBase - { - private enum MenuKeybindInputMembers : int - { - OnSubmitAction = 100, - Parent, - InputDialogTitle - } - - /// - /// Must be either a MenuRootCategory or MenuSubCategory object - /// - public MenuCategoryBase Parent - { - set - { - instance.MessageSet(BackingObject, (int)MenuKeybindInputMembers.Parent, value.BackingObject); - } - } - - /// - /// Titlebar of the Dialog window. - /// - public string InputDialogTitle - { - get - { - return (string)(instance.MessageGet(BackingObject, (int)MenuKeybindInputMembers.InputDialogTitle)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuKeybindInputMembers.InputDialogTitle, value); - } - } - - /// - /// Called with Key pressed, Shift Pressed, Ctrl Pressed, Alt Pressed when user Submits the dialog. - /// - public Action OnSubmitAction - { - get - { - return (Action)(instance.MessageGet(BackingObject, (int)MenuKeybindInputMembers.OnSubmitAction)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuKeybindInputMembers.OnSubmitAction, value); - } - } - - /// - /// Opens up a keybind dialog box which lets the user submit a Key + Modifiers. - /// - /// Text displayed in the category list - /// Must be either a MenuRootCategory or MenuSubCategory object - /// Titlebar of the Dialog window. - /// Called with Key pressed, Shift Pressed, Ctrl Pressed, Alt Pressed when user Submits the dialog. - public MenuKeybindInput(string Text, MenuCategoryBase Parent, string InputDialogTitle = "Keybind - Press any key", Action onSubmit = null) - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.MenuKeybindInput); - this.Text = Text; - this.InputDialogTitle = InputDialogTitle; - this.OnSubmitAction = onSubmit; - this.Parent = Parent; - } - } - public class MenuScreenInput : MenuItemBase - { - private enum MenuScreenInputMembers : int - { - OnSubmitAction = 100, - Parent, - InputDialogTitle, - Origin, - Size, - OnUpdateAction, - Cancel, - OnSelect - } - - /// - /// Must be either a MenuRootCategory or MenuSubCategory object - /// - public MenuCategoryBase Parent - { - set - { - instance.MessageSet(BackingObject, (int)MenuScreenInputMembers.Parent, value.BackingObject); - } - } - - /// - /// Titlebar of the Dialog window. - /// - public string InputDialogTitle - { - get - { - return (string)(instance.MessageGet(BackingObject, (int)MenuScreenInputMembers.InputDialogTitle)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuScreenInputMembers.InputDialogTitle, value); - } - } - /// - /// Called when user does not click the dialog box window to move it and cancels out of the dialog box. - /// - public Action OnCancel - { - get - { - return (Action)(instance.MessageGet(BackingObject, (int)MenuScreenInputMembers.Cancel)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuScreenInputMembers.Cancel, value); - } - } - /// - /// Screen position origin of the dialog box. - /// - public Vector2D Origin - { - get - { - return (Vector2D)(instance.MessageGet(BackingObject, (int)MenuScreenInputMembers.Origin)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuScreenInputMembers.Origin, value); - } - } - /// - /// Size of the dialog box. Use GetTextLength() on a Hud Object to manipulate this. Or you can specify a manual width and height APIinfo can get you the width and height of a single PX. - /// - public Vector2D Size - { - get - { - return (Vector2D)(instance.MessageGet(BackingObject, (int)MenuScreenInputMembers.Size)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuScreenInputMembers.Size, value); - } - } - /// - /// Called when user lets go of the dialog box with the final position. Please note that the result may be off the screen. Recommend clamping between -1 and 1 on each axis. - /// - public Action OnSubmitAction - { - get - { - return (Action)(instance.MessageGet(BackingObject, (int)MenuScreenInputMembers.OnSubmitAction)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuScreenInputMembers.OnSubmitAction, value); - } - } - - /// - /// Called every tick while the user is manipulating the dialog. - /// - public Action UpdateAction - { - get - { - return (Action)(instance.MessageGet(BackingObject, (int)MenuScreenInputMembers.OnUpdateAction)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuScreenInputMembers.OnUpdateAction, value); - } - } - - public Action OnSelect - { - get - { - return (Action)instance.MessageGet(BackingObject, (int)MenuScreenInputMembers.OnSelect); - } - set - { - instance.MessageSet(BackingObject, (int)MenuScreenInputMembers.OnSelect, value); - } - } - - /// - /// Summons a dialog box that gives you a screen position when completed. - /// - /// Text displayed in the category list - /// Must be either a MenuRootCategory or MenuSubCategory object - /// Screen position origin of the dialog box. - /// Size of the dialog box. Use GetTextLength() on a Hud Object to manipulate this. Or you can specify a manual width and height APIinfo can get you the width and height of a single PX. - /// Titlebar of the Dialog window. - /// Called when user lets go of the dialog box with the final position. - /// Called every tick while the user is manipulating the dialog. - /// Called when user does not click the dialog box window to move it and cancels out of the dialog box. - /// Called when user invokes this dialog box use to refresh the Size property - public MenuScreenInput(string Text, MenuCategoryBase Parent, Vector2D Origin, Vector2D Size, string InputDialogTitle = "Move this element", Action OnSubmit = null, Action Update = null, Action Cancel = null, Action OnSelect = null) - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.MenuScreenInput); - this.Text = Text; - this.InputDialogTitle = InputDialogTitle; - this.OnSubmitAction = OnSubmit; - this.UpdateAction = Update; - this.Origin = Origin; - this.Size = Size; - this.OnCancel = Cancel; - this.OnSelect = OnSelect; - this.Parent = Parent; - - } - } - public class MenuSliderInput : MenuItemBase - { - private enum MenuSliderItemMembers : int - { - OnSubmitAction = 100, - Parent, - InputDialogTitle, - InitialPercent, - SliderPercentToValue, - OnCancel - } - /// - /// Must be either a MenuRootCategory or MenuSubCategory object - /// - public MenuCategoryBase Parent - { - set - { - instance.MessageSet(BackingObject, (int)MenuSliderItemMembers.Parent, value.BackingObject); - } - } - - /// - /// Titlebar of the Dialog window. - /// - public string InputDialogTitle - { - get - { - return (string)(instance.MessageGet(BackingObject, (int)MenuSliderItemMembers.InputDialogTitle)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuSliderItemMembers.InputDialogTitle, value); - } - } - /// - /// When the dialog box first opens set the position as a percentage based on this number. Expected value between 0 and 1. - /// - public float InitialPercent - { - get - { - return (float)(instance.MessageGet(BackingObject, (int)MenuSliderItemMembers.InitialPercent)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuSliderItemMembers.InitialPercent, value); - } - } - /// - /// Percentage value of the slider when the user submits the dialog - /// - public Action OnSubmitAction - { - get - { - return (Action)(instance.MessageGet(BackingObject, (int)MenuSliderItemMembers.OnSubmitAction)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuSliderItemMembers.OnSubmitAction, value); - } - } - /// - /// Called when the user cancels the dialog window or otherwise closes the dialog box without confirming. - /// - public Action OnCancel - { - get - { - return (Action)(instance.MessageGet(BackingObject, (int)MenuSliderItemMembers.OnCancel)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuSliderItemMembers.OnCancel, value); - } - } - - /// - /// Returned value calls toString to print the text in the dialog box. Value fed to this function is the slider percentage value. - /// - public Func SliderPercentToValue - { - get - { - return (Func)(instance.MessageGet(BackingObject, (int)MenuSliderItemMembers.SliderPercentToValue)); - } - set - { - instance.MessageSet(BackingObject, (int)MenuSliderItemMembers.SliderPercentToValue, value); - } - } - - /// - /// Creates a dialog object and adds it to the Parent list. - /// - /// Text displayed in the category list - /// Must be either a MenuRootCategory or MenuSubCategory object - /// When the dialog box first opens set the position as a percentage based on this number. Expected value between 0 and 1. - /// Titlebar of the Dialog window. - /// Percentage value of the slider when the user submits the dialog - /// Returned value calls toString to print the text in the dialog box. Value fed to this function is the slider percentage value. - /// Called when the user cancels the dialog window or otherwise closes the dialog box without confirming. - public MenuSliderInput(string Text, MenuCategoryBase Parent, float InitialPercent, string InputDialogTitle = "Adjust Slider to modify value", Action OnSubmitAction = null, Func SliderPercentToValue = null, Action OnCancel = null) - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.MenuSliderItem); - this.Text = Text; - this.InputDialogTitle = InputDialogTitle; - this.OnSubmitAction = OnSubmitAction; - this.SliderPercentToValue = SliderPercentToValue; - this.InitialPercent = InitialPercent; - this.OnCancel = OnCancel; - this.Parent = Parent; - } - } - #endregion - - - /// - /// Class to allow adding fonts to the TextHUDApi - /// - public class FontDefinition - { - enum FontDefinitionMembers : int - { - AddCharacter = 0, - DefineFont, - AddKerning, - ReadOnly - - } - - [ProtoContract] - public struct FontCharacterDefinitionData - { - [ProtoMember(1)] - public char character; - [ProtoMember(2)] - public int texturesize; - [ProtoMember(3)] - public string charactercode; - [ProtoMember(4)] - public int uv1x; - [ProtoMember(5)] - public int uv1y; - [ProtoMember(6)] - public int sizex; - [ProtoMember(7)] - public int sizey; - [ProtoMember(8)] - public int aw; - [ProtoMember(9)] - public int lsb; - [ProtoMember(10)] - public bool forcewhite; - [ProtoMember(11)] - public MyStringId MaterialId; - } - - public object BackingDefinition; - - public FontDefinition(object BackingObject) - { - BackingDefinition = BackingObject; - } - - /// - /// Checks to see if the object is readonly. Once the definition is read only none of its properties can be modified or character definitions replaced. New character definitions can still be added if none exist. - /// - public bool ReadOnly - { - get - { - return (bool)instance.MessageGet(BackingDefinition, (int)FontDefinitionMembers.ReadOnly); - } - set - { - instance.MessageSet(BackingDefinition, (int)FontDefinitionMembers.ReadOnly, value); - } - } - - /// - /// Sets the global parameters for a font - /// - public void DefineFont(int fontbase, int lineheight, int fontsize) - { - MyTuple data = new MyTuple(fontbase, lineheight, fontsize); - instance.MessageSet(BackingDefinition, (int)FontDefinitionMembers.DefineFont, data); - } - - /// - /// Adds a character glyph - /// - /// TransparentMaterial definitions subtype id - /// must be square - /// code in hex - /// origin x - /// origin y - /// size x - /// size y - /// advance width - /// left side bearing - /// force character to grayscale in render - public void AddCharacter(char character, MyStringId material, int materialtexturesize, string charactercode, int uv1x, int uv1y, int sizex, int sizey, int aw, int lsb, bool forcewhite = false) - { - var data = new FontCharacterDefinitionData { character = character, MaterialId = material, texturesize = materialtexturesize, charactercode = charactercode, uv1x = uv1x, uv1y = uv1y, sizex = sizex, sizey = sizey, aw = aw, lsb = lsb, forcewhite = forcewhite }; - instance.MessageSet(BackingDefinition, (int)FontDefinitionMembers.AddCharacter, MyAPIGateway.Utilities.SerializeToBinary(data)); - } - - /// - /// Sets the kerning parameters. Right character must be defined first! - /// - /// how many pixels to move the right char - /// char that will be moved by the kerning - /// - public void AddKerning(int adjust, char right, char left) - { - MyTuple data = new MyTuple(adjust, right, left); - instance.MessageSet(BackingDefinition, (int)FontDefinitionMembers.AddKerning, data); - } - - } - - - #region BoxUI - /// - /// Creates a new BoxUIDefinition. This defines exactly how the UI texture is laid out on the screen. - /// - public class BoxUIDefinition - { - - public object BackingDefinition; - [ProtoContract] - public struct BoxUIDefinitionData - { - [ProtoMember(1)] - public MyStringId Material; - [ProtoMember(2)] - public int imagesize; - [ProtoMember(3)] - public int topwidthpx; - [ProtoMember(4)] - public int leftwidthpx; - [ProtoMember(5)] - public int bottomwidthpx; - [ProtoMember(6)] - public int rightwidthpx; - [ProtoMember(7)] - public int margin; - [ProtoMember(8)] - public int padding; - } - - public BoxUIDefinitionData BoxUIDef - { - set - { - instance.MessageSet(BackingDefinition, (int)BoxUIDefinitionMembers.Definition, MyAPIGateway.Utilities.SerializeToBinary(value)); - } - } - - /// - /// Returns the margin + padding + border values. subtract this from the total size to get the size of the content area of the object. - /// - public Vector2I Min - { - get - { - return (Vector2I)instance.MessageGet(BackingDefinition, (int)BoxUIDefinitionMembers.Min); - } - } - - enum BoxUIDefinitionMembers : int - { - Definition = 0, - Min - } - - - - public BoxUIDefinition() - { - BackingDefinition = instance.CreateMessage(MessageTypes.UIDefinition); - } - public BoxUIDefinition(MyStringId Material, int imagesize, int topwidthpx, int leftwidthpx, int bottomwidthpx, int rightwidthpx, int margin = 0, int padding = 0) - { - BackingDefinition = instance.CreateMessage(MessageTypes.UIDefinition); - var data = new BoxUIDefinitionData() - { - Material = Material, - imagesize = imagesize, - topwidthpx = topwidthpx, - leftwidthpx = leftwidthpx, - bottomwidthpx = bottomwidthpx, - rightwidthpx = rightwidthpx, - margin = margin, - padding = padding - }; - BoxUIDef = data; - - } - public BoxUIDefinition(object BackingObject) - { - BackingDefinition = BackingObject; - } - } - - - /// - /// Unused at the moment, but will be expanded on in the future. - /// - public class BoxUIBehaviourDef - { - public object BackingDefinition; - - public BoxUIBehaviourDef() - { - BackingDefinition = instance.CreateMessage(MessageTypes.UIBehaviourDefinition); - } - public BoxUIBehaviourDef(object BackingObject) - { - BackingDefinition = BackingObject; - } - } - - public abstract class BoxUIBase - { - internal object BackingObject; - internal BoxUIBase m_Parent; - private enum BoxUIBaseMembers : int - { - Origin = 0, - BackgroundColor, - Width, - Height, - Definition, - Behaviour, - Visible, - Parent, - HideHud - } - - /// - /// Sets the BoxUI's position in PX values. - /// - public Vector2I Origin - { - get - { - return (Vector2I)instance.MessageGet(BackingObject, (int)BoxUIBaseMembers.Origin); - } - set - { - instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.Origin, value); - } - } - - /// - /// Sets the width of the box in PX values - /// - public int Width - { - get - { - return (int)instance.MessageGet(BackingObject, (int)BoxUIBaseMembers.Width); - } - set - { - instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.Width, value); - } - } - - /// - /// Sets the Height in PX values - /// - public int Height - { - get - { - return (int)instance.MessageGet(BackingObject, (int)BoxUIBaseMembers.Height); - } - set - { - instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.Height, value); - } - } - - /// - /// Sets the background color, default White - /// - public Color BackgroundColor - { - get - { - return (Color)instance.MessageGet(BackingObject, (int)BoxUIBaseMembers.BackgroundColor); - } - set - { - instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.BackgroundColor, value); - } - } - /// - /// Element and subelements visible - /// - public bool Visible - { - get - { - return (bool)instance.MessageGet(BackingObject, (int)BoxUIBaseMembers.Visible); - } - set - { - instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.Visible, value); - } - } - - /// - /// Sets the backing UI definition, please set using SetDefinition - /// - public object DefinitionObject - { - get - { - return (object)instance.MessageGet(BackingObject, (int)BoxUIBaseMembers.Definition); - } - set - { - if(value is BoxUIDefinition) - { - instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.Definition, (value as BoxUIDefinition).BackingDefinition); - return; - } - instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.Definition, value); - } - } - - /// - /// Sets the backing behaviour object, please set using SetBehaviour - /// - public object BehaviourObject - { - get - { - return (object)instance.MessageGet(BackingObject, (int)BoxUIBaseMembers.Behaviour); - } - set - { - if(value is BoxUIBehaviourDef) - { - instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.Behaviour, (value as BoxUIDefinition).BackingDefinition); - return; - } - - instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.Behaviour, value); - } - } - - /// - /// Defaults to true. - /// - public bool HideHud - { - get - { - return (bool)instance.MessageGet(BackingObject, (int)BoxUIBaseMembers.HideHud); - } - set - { - instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.HideHud, value); - } - } - - /// - /// Gets or sets the parent object, please be careful not to create a circular reference. Sub objects are automatically offset by the top left corner of the parent object. - /// - public BoxUIBase Parent - { - get - { - return m_Parent; - - } - set - { - m_Parent = value; - instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.Parent, m_Parent.BackingObject); - } - } - - - public void SetDefinition(BoxUIDefinition def) - { - DefinitionObject = def.BackingDefinition; - } - - public void SetBehaviour(BoxUIBehaviourDef def) - { - BehaviourObject = def.BackingDefinition; - } - - } - public class BoxUIContainer : BoxUIBase - { - - - public BoxUIContainer() - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.BoxUIContainer); - } - } - public class BoxUIText : BoxUIBase - { - - enum BoxUITextMembers : int - { - SetTextContent = 100 - } - - public BoxUIText() - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.BoxUIText); - } - - /// - /// Automatically sets the message to use the pixel offset types. Please note that the BoxUI will control the .Origin of the Message, you can use the offset value in PX to move it. Please note Scale is now the pt size of the font. - /// - /// - public void SetTextContent(HUDMessage Message) - { - instance.MessageSet(BackingObject, (int)BoxUITextMembers.SetTextContent, Message.BackingObject); - } - } - - public class BoxUIImage : BoxUIBase - { - enum BoxUIImageMembers : int - { - SetImageContent = 100 - } - - public BoxUIImage() - { - instance.RegisterCheck(); - BackingObject = instance.CreateMessage(MessageTypes.BoxUIImage); - } - - /// - /// Sets the image, please note that image parameters will now be forced to the Pixel setting. Height and Width parameters are measured in px - /// - /// - public void SetImageContent(BillBoardHUDMessage Message) - { - instance.MessageSet(BackingObject, (int)BoxUIImageMembers.SetImageContent, Message.BackingObject); - } - } - #endregion - } +using ProtoBuf; +using Sandbox.ModAPI; +using System; +using System.Collections.Generic; +using System.Text; +using VRage; +using VRage.Input; +using VRage.ModAPI; +using VRage.Utils; +using VRageMath; +using BlendTypeEnum = VRageRender.MyBillboard.BlendTypeEnum; + +namespace Draygo.API +{ + public class HudAPIv2 + { + + public const string DefaultFont = "white"; + public const BlendTypeEnum DefaultHUDBlendType = BlendTypeEnum.PostPP; + public const BlendTypeEnum DefaultWorldBlendType = BlendTypeEnum.Standard; + + private static HudAPIv2 instance; + private const long REGISTRATIONID = 573804956; + private bool registered = false; + private Action m_onRegisteredAction; + + private Func MessageFactory; + private Action MessageSetter; + private Func MessageGetter; + private Action RemoveMessage; + + private Action m_onScreenDimensionsChanged; + + public Action OnScreenDimensionsChanged + { + get + { + return m_onScreenDimensionsChanged; + } + + set + { + m_onScreenDimensionsChanged = value; + } + } + + public enum TextOrientation : byte + { + ltr = 1, + center = 2, + rtl = 3 + } + + /// + /// Create a HudAPI Instance. Please only create one per mod. + /// + /// Callback once the HudAPI is active. You can Instantiate HudAPI objects in this Action + public HudAPIv2(Action onRegisteredAction = null) + { + if (instance != null) + { + + return; + } + instance = this; + m_onRegisteredAction = onRegisteredAction; + MyAPIGateway.Utilities.RegisterMessageHandler(REGISTRATIONID, RegisterComponents); + } + + public void Close() + { + Unload(); + } + /// + /// Unregisters mod and frees references. + /// + public void Unload() + { + MyAPIGateway.Utilities.UnregisterMessageHandler(REGISTRATIONID, RegisterComponents); + MessageFactory = null; + MessageSetter = null; + MessageGetter = null; + RemoveMessage = null; + registered = false; + m_onRegisteredAction = null; + if(instance == this) + instance = null; + } + private enum RegistrationEnum : int + { + OnScreenUpdate = 2000 + } + private void RegisterComponents(object obj) + { + if (registered) + return; + if(obj is MyTuple, Action, Func, Action>) + { + var Handlers = (MyTuple, Action, Func, Action>)obj; + MessageFactory = Handlers.Item1; + MessageSetter = Handlers.Item2; + MessageGetter = Handlers.Item3; + RemoveMessage = Handlers.Item4; + + registered = true; + if (m_onRegisteredAction != null) + m_onRegisteredAction(); + APIDialog.GetDialogMethods(MessageGetter); + MessageSet(null, (int)RegistrationEnum.OnScreenUpdate, new MyTuple(ScreenChangedHandle)); + + } + } + + /// + /// If Heartbeat is true you may call any constructor in this class. Do not call any constructor or set properties if this is false. + /// + public bool Heartbeat + { + get + { + return registered; + } + } + + + + #region Intercomm + private void DeleteMessage(object BackingObject) + { + if(BackingObject != null) + RemoveMessage(BackingObject); + } + private object CreateMessage(MessageTypes type) + { + return MessageFactory((int)type); + } + private object MessageGet(object BackingObject, int Member ) + { + return MessageGetter(BackingObject, Member); + } + private void MessageSet(object BackingObject, int Member, object Value) + { + MessageSetter(BackingObject, Member, Value); + } + private void RegisterCheck() + { + if (instance.registered == false) + { + throw new InvalidOperationException("HudAPI: Failed to create backing object. Do not instantiate without checking if heartbeat is true."); + } + } + private void ScreenChangedHandle() + { + if(m_onScreenDimensionsChanged != null) + { + m_onScreenDimensionsChanged(); + } + } + #endregion + private enum MessageTypes : int + { + HUDMessage = 0, + BillBoardHUDMessage, + EntityMessage, + SpaceMessage, + BillboardTriHUDMessage, + + MenuItem = 20, + MenuSubCategory, + MenuRootCategory, + MenuScreenInput, + MenuSliderItem, + MenuTextInput, + MenuKeybindInput, + MenuColorPickerInput, + + BoxUIContainer = 40, + BoxUIText, + BoxUIImage, + + UIDefinition = 60, + UIBehaviourDefinition + } + #region CustomDialogs + public static class APIDialog + { + private enum APIDialogs : int + { + ColorPickerDialog = 1100, + TextDialog, + KeybindDialog, + ScreenInputDialog, + SliderDialog + } + + private static Func, Action, Action, bool, bool, bool> ColorPickerDialogDelagete; + private static Func, StringBuilder, bool> TextDialogDelagete; + private static Func, StringBuilder, bool> KeybindDialogDelagete; + private static Func, Action, Action, bool> ScreenInputDialogDelagete; + private static Func, float, Func, Action, bool> SliderDialogDelagete; + internal static void GetDialogMethods(Func messageGetter) + { + ColorPickerDialogDelagete = messageGetter.Invoke((int)APIinfo.APIinfoMembers.GetDialog, (int)APIDialogs.ColorPickerDialog) + as Func, Action, Action, bool, bool, bool>; + TextDialogDelagete = messageGetter.Invoke((int)APIinfo.APIinfoMembers.GetDialog, (int)APIDialogs.TextDialog) + as Func, StringBuilder, bool>; + KeybindDialogDelagete = messageGetter.Invoke((int)APIinfo.APIinfoMembers.GetDialog, (int)APIDialogs.KeybindDialog) + as Func, StringBuilder, bool>; + ScreenInputDialogDelagete = messageGetter.Invoke((int)APIinfo.APIinfoMembers.GetDialog, (int)APIDialogs.ScreenInputDialog) + as Func, Action, Action, bool>; + SliderDialogDelagete = messageGetter.Invoke((int)APIinfo.APIinfoMembers.GetDialog, (int)APIDialogs.SliderDialog) + as Func, float, Func, Action, bool>; + } + + public static bool ColorPickerDialog(StringBuilder Title, Color InitialColor, Action onSubmit, Action onUpdate, Action onCancel, bool showAlpha, bool usehsv = false) + { + return ColorPickerDialogDelagete?.Invoke(Title, InitialColor, onSubmit, onUpdate, onCancel, showAlpha, usehsv) ?? false; + } + + public static bool TextDialog(Action onSubmit, StringBuilder Title) + { + return TextDialogDelagete?.Invoke(onSubmit, Title) ?? false; + } + + public static bool KeybindDialog(Action onSubmit, StringBuilder Title) + { + return KeybindDialogDelagete?.Invoke(onSubmit, Title) ?? false; + } + + public static bool ScreenInputDialog(StringBuilder title, Vector2D origin, Vector2D size, Action onSubmit, Action onUpdate, Action onCancel) + { + return ScreenInputDialogDelagete?.Invoke(title, origin, size, onSubmit, onUpdate, onCancel) ?? false; + } + + static public bool SliderDialog(StringBuilder title, Action onSubmit, float initialvalue, Func SliderPercentToValue, Action OnCancel) + { + return SliderDialogDelagete?.Invoke(title, onSubmit, initialvalue, SliderPercentToValue, OnCancel) ?? false; + } + } + + #endregion + + #region Info + public static class APIinfo + { + internal enum APIinfoMembers : int + { + ScreenPositionOnePX = 1000, + OnScreenUpdate, + GetBoxUIDefinition, + GetBoxUIBehaviour, + GetFontDefinition, + GetFonts, + GetDialog + } + + + /// + /// Returns the distance for one pixel in x and y directions, can be multiplied and fed into Origin, Offset, and Size parameters for precise manipulation of HUD objects. + /// + public static Vector2D ScreenPositionOnePX + { + get + { + return (Vector2D)instance.MessageGet(null, (int)APIinfoMembers.ScreenPositionOnePX); + } + } + /// + /// Available definitions: None, Default, Square + /// + /// + /// + public static BoxUIDefinition GetBoxUIDefinition(MyStringId DefinitionName) + { + return new BoxUIDefinition(instance.MessageGet(DefinitionName, (int)APIinfoMembers.GetBoxUIDefinition)); + + } + public static BoxUIBehaviourDef GetBoxUIBehaviour(MyStringId DefinitionName) + { + return new BoxUIBehaviourDef(instance.MessageGet(DefinitionName, (int)APIinfoMembers.GetBoxUIBehaviour)); + + } + + public static FontDefinition GetFontDefinition(MyStringId DefinitionName) + { + object retval = instance.MessageGet(DefinitionName, (int)APIinfoMembers.GetFontDefinition); + return new FontDefinition(retval); + + } + /// + /// Gives a list of fonts currently available in the TextHudAPI + /// + /// Fonts will be added to the collection, if null a new collection will be allocated + public static void GetFonts(List collection) + { + instance.MessageGet(collection, (int)APIinfoMembers.GetFonts); + } + + + } + #endregion + #region Messages + public enum Options : byte + { + None = 0x0, + HideHud = 0x1, + Shadowing = 0x2, + Fixed = 0x4, + FOVScale = 0x8, + Pixel = 0x10 + } + private enum MessageBaseMembers : int + { + Message = 0, + Visible, + TimeToLive, + Scale, + TextLength, + Offset, + BlendType, + Draw, + Flush, + SkipLinearRGB + } + public abstract class MessageBase + { + internal object BackingObject; + + #region Properties + /// + /// Note that if you update the stringbuilder anywhere it will update the message automatically. Use this property to set the stringbuilder object to your own or use the one generated by the constructor. + /// + public StringBuilder Message + { + get + { + return (StringBuilder)(instance.MessageGet(BackingObject, (int)MessageBaseMembers.Message)); + } + set + { + instance.MessageSet(BackingObject, (int)MessageBaseMembers.Message, value); + } + } + + + /// + /// True if HUD Element is visible, note that this will still be true if the player has their hud activated and HideHud option is set. + /// + public bool Visible + { + get + { + return (bool)(instance.MessageGet(BackingObject, (int)MessageBaseMembers.Visible)); + } + set + { + instance.MessageSet(BackingObject, (int)MessageBaseMembers.Visible, value); + } + } + + /// + /// Time to live in Draw ticks. At 0 class will close itself and will no longer update. + /// + public int TimeToLive + { + get + { + return (int)(instance.MessageGet(BackingObject, (int)MessageBaseMembers.TimeToLive)); + } + set + { + instance.MessageSet(BackingObject, (int)MessageBaseMembers.TimeToLive, value); + } + } + + + /// + /// Scale of the text elements or billboard + /// + public double Scale + { + get + { + return (double)(instance.MessageGet(BackingObject, (int)MessageBaseMembers.Scale)); + } + set + { + instance.MessageSet(BackingObject, (int)MessageBaseMembers.Scale, value); + } + } + + + /// + /// Offset the text element by this amount. Note this takes the result of GetTextLength, be sure to clear Offset.Y if you do not want to start at the lower left corner of the previous element + /// + public Vector2D Offset + { + get + { + return (Vector2D)(instance.MessageGet(BackingObject, (int)MessageBaseMembers.Offset)); + } + set + { + instance.MessageSet(BackingObject, (int)MessageBaseMembers.Offset, value); + } + } + + /// + /// put using BlendTypeEnum = VRageRender.MyBillboard.BlendTypeEnum; on top of your script to use this property. + /// + public BlendTypeEnum Blend + { + get + { + return (BlendTypeEnum)(instance.MessageGet(BackingObject, (int)MessageBaseMembers.BlendType)); + } + set + { + instance.MessageSet(BackingObject, (int)MessageBaseMembers.BlendType, value); + } + } + /// + /// Skips LinearRGB call in TextHUDAPI + /// + public bool SkipLinearRGB + { + get + { + return (bool)(instance.MessageGet(BackingObject, (int)MessageBaseMembers.SkipLinearRGB)); + } + set + { + instance.MessageSet(BackingObject, (int)MessageBaseMembers.SkipLinearRGB, value); + } + } + #endregion + + public abstract void DeleteMessage(); + + /// + /// Gets the offset of the lower right corner of the text element from the upper left. The value returned is a local translation. Screen space for screen messages, world space for world messages. Please note that the Y value is negative in screen space. + /// + /// Lower Right Corner + public Vector2D GetTextLength() + { + return (Vector2D)(instance.MessageGet(BackingObject, (int)MessageBaseMembers.TextLength)); + } + + /// + /// Manual draw method + /// + public void Draw() + { + instance.MessageGet(BackingObject, (int)MessageBaseMembers.Draw); + } + + /// + /// Clears the object cache + /// + public void Flush() + { + instance.MessageGet(BackingObject, (int)MessageBaseMembers.Flush); + } + + } + public class EntityMessage : MessageBase + { + private enum EntityMembers : int + { + Entity = 10, + LocalPosition, + Up, + Forward, + Orientation, + Max, + TransformMatrix, + Font + } + + #region Properties + /// + /// Entity text will be centered on / attached to. + /// + public IMyEntity Entity + { + get + { + return instance.MessageGet(BackingObject, (int)EntityMembers.Entity) as IMyEntity; + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.Entity, value); + } + } + + + /// + /// Local translation of where the text will be in relation to the Entity it is attached to. Used to construct the TransformMatrix + /// + public Vector3D LocalPosition + { + get + { + return (Vector3D)instance.MessageGet(BackingObject, (int)EntityMembers.LocalPosition); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.LocalPosition, value); + } + } + + /// + /// Up, value used to construct the TransformMatrix + /// + public Vector3D Up + { + get + { + return (Vector3D)instance.MessageGet(BackingObject, (int)EntityMembers.Up); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.Up, value); + } + } + + /// + /// Forward, value used to construct the TransformMatrix + /// + public Vector3D Forward + { + get + { + return (Vector3D)instance.MessageGet(BackingObject, (int)EntityMembers.Forward); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.Forward, value); + } + } + + /// + /// Flag that sets from what direction text is written + /// + public TextOrientation Orientation + { + get + { + return (TextOrientation)instance.MessageGet(BackingObject, (int)EntityMembers.Orientation); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.Orientation, (byte)value); + } + } + + + /// + /// World Boundries + /// + public Vector2D Max + { + get + { + return (Vector2D)instance.MessageGet(BackingObject, (int)EntityMembers.Max); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.Max, value); + } + } + + /// + /// Sets the transformation matrix directly, use instead of LocalPosition, Up, Forward + /// + public MatrixD TransformMatrix + { + get + { + return (MatrixD)instance.MessageGet(BackingObject, (int)EntityMembers.TransformMatrix); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.TransformMatrix, value); + } + } + /// + /// Font, default is "white", "monospace" is also included. + /// + public string Font + { + get + { + return (string)(instance.MessageGet(BackingObject, (int)EntityMembers.Font)); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.Font, value); + } + } + #endregion + public EntityMessage(StringBuilder Message, IMyEntity Entity, MatrixD TransformMatrix, int TimeToLive = -1, double Scale = 1, TextOrientation Orientation = TextOrientation.ltr, Vector2D? Offset = null, Vector2D? Max = null, string Font = DefaultFont) + { + instance.RegisterCheck(); + BackingObject = instance.CreateMessage(MessageTypes.EntityMessage); + if (BackingObject != null) + { + if (Max.HasValue) + this.Max = Max.Value; + this.Message = Message; + this.Entity = Entity; + this.TransformMatrix = TransformMatrix; + this.TimeToLive = TimeToLive; + this.Scale = Scale; + this.Visible = true; + this.Orientation = Orientation; + this.Blend = DefaultWorldBlendType; + if (Offset.HasValue) + { + this.Offset = Offset.Value; + } + else + { + this.Offset = Vector2D.Zero; + } + this.Font = Font; + } + + } + public EntityMessage(StringBuilder Message, IMyEntity Entity, Vector3D LocalPosition, Vector3D Forward, Vector3D Up, int TimeToLive = -1, double Scale = 1, TextOrientation Orientation = TextOrientation.ltr, Vector2D? Offset = null, Vector2D? Max = null, BlendTypeEnum Blend = DefaultWorldBlendType, string Font = DefaultFont) + { + instance.RegisterCheck(); + BackingObject = instance.CreateMessage(MessageTypes.EntityMessage); + if(BackingObject != null) + { + if (Max.HasValue) + this.Max = Max.Value; + this.Message = Message; + this.Entity = Entity; + this.LocalPosition = LocalPosition; + this.Forward = Forward; + this.Up = Up; + this.TimeToLive = TimeToLive; + this.Scale = Scale; + this.Visible = true; + this.Orientation = Orientation; + this.Blend = Blend; + if (Offset.HasValue) + { + this.Offset = Offset.Value; + } + else + { + this.Offset = Vector2D.Zero; + } + this.Font = Font; + } + + } + + public EntityMessage() + { + instance.RegisterCheck(); + BackingObject = instance.CreateMessage(MessageTypes.EntityMessage); + + } + + /// + /// Do not use this class after deleting it. + /// + public override void DeleteMessage() + { + instance.DeleteMessage(BackingObject); + BackingObject = null; + } + } + public class HUDMessage : MessageBase + { + private enum EntityMembers : int + { + Origin = 10, + Options, + ShadowColor, + Font, + InitalColor + } + #region Properties + /// + /// top left is -1, 1, bottom right is 1 -1 + /// + public Vector2D Origin + { + get + { + return (Vector2D)(instance.MessageGet(BackingObject, (int)EntityMembers.Origin)); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.Origin, value); + } + } + + + /// + /// HideHud - hides when hud is hidden, shadow draw a shadow behind the text. + /// + public Options Options + { + get + { + return (Options)(instance.MessageGet(BackingObject, (int)EntityMembers.Options)); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.Options, (byte)value); + } + } + + /// + /// Color of shadow behind the text + /// + public Color ShadowColor + { + get + { + return (Color)(instance.MessageGet(BackingObject, (int)EntityMembers.ShadowColor)); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.ShadowColor, value); + } + } + /// + /// Font, default is "white", "monospace" also supported, modded fonts will be supported in the future. + /// + public string Font + { + get + { + return (string)(instance.MessageGet(BackingObject, (int)EntityMembers.Font)); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.Font, value); + } + } + + /// + /// Sets the initial color of the text, Default: White + /// + public Color InitialColor + { + get + { + return (Color)(instance.MessageGet(BackingObject, (int)EntityMembers.InitalColor)); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.InitalColor, value); + } + } + #endregion + + public HUDMessage(StringBuilder Message, Vector2D Origin, Vector2D? Offset = null, int TimeToLive = -1, double Scale = 1.0d, bool HideHud = true, bool Shadowing = false, Color? ShadowColor = null, BlendTypeEnum Blend = DefaultHUDBlendType, string Font = DefaultFont) + { + instance.RegisterCheck(); + BackingObject = instance.CreateMessage(MessageTypes.HUDMessage); + if(BackingObject != null) + { + this.TimeToLive = TimeToLive; + this.Origin = Origin; + this.Options = Options.None; + if (HideHud) + Options |= Options.HideHud; + if (Shadowing) + Options |= Options.Shadowing; + var blackshadow = Color.Black; + if (ShadowColor.HasValue) + ShadowColor = ShadowColor.Value; + this.Scale = Scale; + this.Message = Message; + this.Blend = Blend; + if (Offset.HasValue) + { + this.Offset = Offset.Value; + } + else + { + this.Offset = Vector2D.Zero; + } + this.Font = Font; + } + } + public HUDMessage() + { + instance.RegisterCheck(); + BackingObject = instance.CreateMessage(MessageTypes.HUDMessage); + } + + public override void DeleteMessage() + { + instance.DeleteMessage(BackingObject); + BackingObject = null; + } + + } + public class BillBoardHUDMessage : MessageBase + { + + private enum EntityMembers : int + { + Origin = 10, + Options, + BillBoardColor, + Material, + Rotation, + Width, + Height, + uvOffset, + uvSize, + TextureSize, + uvEnabled + } + + #region Properties + /// + /// top left is -1, 1, bottom right is 1 -1 + /// + public Vector2D Origin + { + get + { + return (Vector2D)instance.MessageGet(BackingObject, (int)EntityMembers.Origin); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.Origin, value); + } + } + + /// + /// Use MyStringId.GetOrCompute to turn a string into a MyStringId. + /// + public MyStringId Material + { + get + { + return (MyStringId)instance.MessageGet(BackingObject, (int)EntityMembers.Material); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.Material, value); + } + } + + + /// + /// Set Options, HideHud to true will hide billboard when hud is hidden. Shadowing will draw the element on the shadow layer (behind the text layer) + /// + public Options Options + { + get + { + return (Options)instance.MessageGet(BackingObject, (int)EntityMembers.Options); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.Options, (byte)value); + } + } + + + /// + /// Sets the color mask of the billboard, not all billboards support this parameter. + /// + public Color BillBoardColor + { + get + { + return (Color)instance.MessageGet(BackingObject, (int)EntityMembers.BillBoardColor); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.BillBoardColor, value); + } + } + + /// + /// Rotate billboard in radians. + /// + public float Rotation + { + get + { + return (float)instance.MessageGet(BackingObject, (int)EntityMembers.Rotation); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.Rotation, value); + } + } + + + /// + /// Multiplies the width of the billboard by this amount. Set Scale to 1 if you want to use this to finely control the width of the billboard, such as a value from GetTextLength + /// You might need to multiply the result of GetTextLength by 250 or maybe 500 if Scale is 1. Will need experiementing + /// + public float Width + { + get + { + return (float)instance.MessageGet(BackingObject, (int)EntityMembers.Width); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.Width, value); + } + } + + + /// + /// Multiplies the height of the billboard by this amount. Set Scale to 1 if you want to use this to finely control the height of the billboard, such as a value from GetTextLength + /// + public float Height + { + get + { + return (float)instance.MessageGet(BackingObject, (int)EntityMembers.Height); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.Height, value); + } + } + + /// + /// UV offset in pixels + /// + public Vector2 uvOffset + { + get + { + return (Vector2)instance.MessageGet(BackingObject, (int)EntityMembers.uvOffset); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.uvOffset, value); + } + } + /// + /// Size in pixels + /// + public Vector2 uvSize + { + get + { + return (Vector2)instance.MessageGet(BackingObject, (int)EntityMembers.uvSize); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.uvSize, value); + } + } + /// + /// Size of image in pixels (please note the height and width of the image must be the same) + /// + public float TextureSize + { + get + { + return (float)instance.MessageGet(BackingObject, (int)EntityMembers.TextureSize); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.TextureSize, value); + } + } + /// + /// Use uv parameters. Default is false. + /// + public bool uvEnabled + { + get + { + return (bool)instance.MessageGet(BackingObject, (int)EntityMembers.uvEnabled); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.uvEnabled, value); + } + } + #endregion + + public BillBoardHUDMessage(MyStringId Material, Vector2D Origin, Color BillBoardColor, Vector2D? Offset = null, int TimeToLive = -1, double Scale = 1d, float Width = 1f, float Height = 1f, float Rotation = 0, bool HideHud = true, bool Shadowing = true, BlendTypeEnum Blend = DefaultHUDBlendType) + { + instance.RegisterCheck(); + BackingObject = instance.CreateMessage(MessageTypes.BillBoardHUDMessage); + + if(BackingObject != null) + { + this.TimeToLive = TimeToLive; + this.Origin = Origin; + this.Options = Options.None; + if (HideHud) + this.Options |= Options.HideHud; + if (Shadowing) + this.Options |= Options.Shadowing; + this.BillBoardColor = BillBoardColor; + this.Scale = Scale; + this.Material = Material; + this.Rotation = Rotation; + this.Blend = Blend; + if (Offset.HasValue) + { + this.Offset = Offset.Value; + } + else + { + this.Offset = Vector2D.Zero; + } + this.Width = Width; + this.Height = Height; + } + + + } + + public BillBoardHUDMessage(MyStringId Material, Vector2D Origin, Color BillBoardColor, Vector2 uvOffset, Vector2 uvSize, float TextureSize, Vector2D? Offset = null, int TimeToLive = -1, double Scale = 1d, float Width = 1f, float Height = 1f, float Rotation = 0, bool HideHud = true, bool Shadowing = true, BlendTypeEnum Blend = DefaultHUDBlendType) + { + instance.RegisterCheck(); + BackingObject = instance.CreateMessage(MessageTypes.BillBoardHUDMessage); + + if (BackingObject != null) + { + this.uvEnabled = true; + this.uvOffset = uvOffset; + this.uvSize = uvSize; + this.TextureSize = TextureSize; + this.TimeToLive = TimeToLive; + this.Origin = Origin; + this.Options = Options.None; + if (HideHud) + this.Options |= Options.HideHud; + if (Shadowing) + this.Options |= Options.Shadowing; + this.BillBoardColor = BillBoardColor; + this.Scale = Scale; + this.Material = Material; + this.Rotation = Rotation; + this.Blend = Blend; + if (Offset.HasValue) + { + this.Offset = Offset.Value; + } + else + { + this.Offset = Vector2D.Zero; + } + this.Width = Width; + this.Height = Height; + } + + + } + + public BillBoardHUDMessage() + { + instance.RegisterCheck(); + BackingObject = instance.CreateMessage(MessageTypes.BillBoardHUDMessage); + } + + public override void DeleteMessage() + { + instance.DeleteMessage(BackingObject); + BackingObject = null; + } + } + + public class BillBoardTriHUDMessage : MessageBase + { + + private enum EntityMembers : int + { + Message = 0, + Origin = 10, + Options, + BillBoardColor, + Material, + Rotation, + Width, + Height, + p0, + p1, + p2 + } + + #region Properties + /// + /// top left is -1, 1, bottom right is 1 -1 + /// + public Vector2D Origin + { + get + { + return (Vector2D)instance.MessageGet(BackingObject, (int)EntityMembers.Origin); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.Origin, value); + } + } + + /// + /// Use MyStringId.GetOrCompute to turn a string into a MyStringId. + /// + public MyStringId Material + { + get + { + return (MyStringId)instance.MessageGet(BackingObject, (int)EntityMembers.Material); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.Material, value); + } + } + + + /// + /// Set Options, HideHud to true will hide billboard when hud is hidden. Shadowing will draw the element on the shadow layer (behind the text layer) + /// + public Options Options + { + get + { + return (Options)instance.MessageGet(BackingObject, (int)EntityMembers.Options); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.Options, (byte)value); + } + } + + + /// + /// Sets the color mask of the billboard, not all billboards support this parameter. + /// + public Color BillBoardColor + { + get + { + return (Color)instance.MessageGet(BackingObject, (int)EntityMembers.BillBoardColor); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.BillBoardColor, value); + } + } + + /// + /// Rotate billboard in radians. + /// + public float Rotation + { + get + { + return (float)instance.MessageGet(BackingObject, (int)EntityMembers.Rotation); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.Rotation, value); + } + } + + + /// + /// Multiplies the width of the billboard by this amount. Set Scale to 1 if you want to use this to finely control the width of the billboard, such as a value from GetTextLength + /// You might need to multiply the result of GetTextLength by 250 or maybe 500 if Scale is 1. Will need experiementing + /// + public float Width + { + get + { + return (float)instance.MessageGet(BackingObject, (int)EntityMembers.Width); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.Width, value); + } + } + + + /// + /// Multiplies the height of the billboard by this amount. Set Scale to 1 if you want to use this to finely control the height of the billboard, such as a value from GetTextLength + /// + public float Height + { + get + { + return (float)instance.MessageGet(BackingObject, (int)EntityMembers.Height); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.Height, value); + } + } + + /// + /// UV P0 (note this is percentage based between 0-1 for X,Y) + /// + public Vector2 P0 + { + get + { + return (Vector2)instance.MessageGet(BackingObject, (int)EntityMembers.p0); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.p0, value); + } + } + /// + /// UV P1 (note this is percentage based between 0-1 for X,Y) + /// + public Vector2 P1 + { + get + { + return (Vector2)instance.MessageGet(BackingObject, (int)EntityMembers.p1); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.p1, value); + } + } + /// + /// UV P2 (note this is percentage based between 0-1 for X,Y) + /// + public Vector2 P2 + { + get + { + return (Vector2)instance.MessageGet(BackingObject, (int)EntityMembers.p2); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.p2, value); + } + } + + #endregion + + + + public BillBoardTriHUDMessage(MyStringId Material, Vector2D Origin, Color BillBoardColor, Vector2 p0, Vector2 p1, Vector2 p2, Vector2D? Offset = null, int TimeToLive = -1, double Scale = 1d, float Width = 1f, float Height = 1f, float Rotation = 0, bool HideHud = true, bool Shadowing = true, BlendTypeEnum Blend = DefaultHUDBlendType) + { + instance.RegisterCheck(); + BackingObject = instance.CreateMessage(MessageTypes.BillboardTriHUDMessage); + + if (BackingObject != null) + { + + this.TimeToLive = TimeToLive; + this.Origin = Origin; + this.Options = Options.None; + if (HideHud) + this.Options |= Options.HideHud; + if (Shadowing) + this.Options |= Options.Shadowing; + this.BillBoardColor = BillBoardColor; + this.Scale = Scale; + this.Material = Material; + this.Rotation = Rotation; + this.Blend = Blend; + if (Offset.HasValue) + { + this.Offset = Offset.Value; + } + else + { + this.Offset = Vector2D.Zero; + } + this.Width = Width; + this.Height = Height; + this.P0 = p0; + this.P1 = p1; + this.P2 = p2; + } + + + } + + public BillBoardTriHUDMessage() + { + instance.RegisterCheck(); + BackingObject = instance.CreateMessage(MessageTypes.BillboardTriHUDMessage); + } + + public override void DeleteMessage() + { + instance.DeleteMessage(BackingObject); + BackingObject = null; + } + } + + public class SpaceMessage : MessageBase + { + private enum EntityMembers : int + { + WorldPosition = 10, + Up, + Left, + TxtOrientation, + Font + + } + #region Properties + /// + /// Position + /// + public Vector3D WorldPosition + { + get + { + return (Vector3D)instance.MessageGet(BackingObject, (int)EntityMembers.WorldPosition); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.WorldPosition, value); + } + } + + + /// + /// Up vector for textures + /// + public Vector3D Up + { + get + { + return (Vector3D)instance.MessageGet(BackingObject, (int)EntityMembers.Up); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.Up, value); + } + } + + + /// + /// Left Vector for Textures + /// + public Vector3D Left + { + get + { + return (Vector3D)instance.MessageGet(BackingObject, (int)EntityMembers.Left); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.Left, value); + } + } + /// + /// Font, default is "white", "monospace" also supported, modded fonts will be supported in the future. + /// + public string Font + { + get + { + return (string)(instance.MessageGet(BackingObject, (int)EntityMembers.Font)); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.Font, value); + } + } + + /// + /// Text orientation, from what edge text is aligned. + /// + public TextOrientation TxtOrientation + { + get + { + return (TextOrientation)instance.MessageGet(BackingObject, (int)EntityMembers.TxtOrientation); + } + set + { + instance.MessageSet(BackingObject, (int)EntityMembers.TxtOrientation, (byte)value); + } + } + #endregion + + + public SpaceMessage(StringBuilder Message, Vector3D WorldPosition, Vector3D Up, Vector3D Left, double Scale = 1, Vector2D? Offset = null, int TimeToLive = -1, TextOrientation TxtOrientation = TextOrientation.ltr, BlendTypeEnum Blend = DefaultWorldBlendType, string Font = DefaultFont) + { + instance.RegisterCheck(); + BackingObject = instance.CreateMessage(MessageTypes.SpaceMessage); + if(BackingObject != null) + { + this.TimeToLive = TimeToLive; + this.Scale = Scale; + this.WorldPosition = WorldPosition; + this.Up = Up; + this.Left = Left; + this.TxtOrientation = TxtOrientation; + this.Message = Message; + this.Blend = Blend; + if (Offset.HasValue) + { + this.Offset = Offset.Value; + } + else + { + this.Offset = Vector2D.Zero; + } + this.Font = Font; + } + + } + + public SpaceMessage() + { + instance.RegisterCheck(); + BackingObject = instance.CreateMessage(MessageTypes.SpaceMessage); + } + + public override void DeleteMessage() + { + instance.DeleteMessage(BackingObject); + BackingObject = null; + } + } + #endregion + + #region Menu + public abstract class MenuItemBase + { + private enum MenuItemBaseMembers : int + { + Text = 0, + Interactable + } + internal object BackingObject; + + /// + /// Text displayed in the category list + /// + public string Text + { + get + { + return (string)(instance.MessageGet(BackingObject, (int)MenuItemBaseMembers.Text)); + } + set + { + instance.MessageSet(BackingObject, (int)MenuItemBaseMembers.Text, value); + } + } + /// + /// User can select this item. true by default + /// + public bool Interactable + { + get + { + return (bool)(instance.MessageGet(BackingObject, (int)MenuItemBaseMembers.Interactable)); + } + set + { + instance.MessageSet(BackingObject, (int)MenuItemBaseMembers.Interactable, value); + } + } + } + public class MenuItem : MenuItemBase + { + private enum MenuItemMembers : int + { + OnClickAction = 100, + Parent + } + /// + /// On click event that will be fired if the user selects this item. + /// + public Action OnClick + { + get + { + return (Action)(instance.MessageGet(BackingObject, (int)MenuItemMembers.OnClickAction)); + } + set + { + instance.MessageSet(BackingObject, (int)MenuItemMembers.OnClickAction, value); + } + } + /// + /// Must be either a MenuRootCategory or MenuSubCategory object + /// + public MenuCategoryBase Parent + { + set + { + instance.MessageSet(BackingObject, (int)MenuItemMembers.Parent, value.BackingObject); + } + } + /// + /// Basic toggle. You can use this to create on/off toggles, checkbox lists or option lists. + /// + /// Text displayed in the category list + /// Must be either a MenuRootCategory or MenuSubCategory object + /// On click event that will be fired if the user selects this item. + /// User can select this item. true by default + public MenuItem(string Text, MenuCategoryBase Parent, Action OnClick = null, bool Interactable = true) + { + instance.RegisterCheck(); + BackingObject = instance.CreateMessage(MessageTypes.MenuItem); + + this.Text = Text; + this.Parent = Parent; + this.OnClick = OnClick; + this.Interactable = Interactable; + } + } + public abstract class MenuCategoryBase : MenuItemBase + { + private enum MenuBaseCategoryMembers : int + { + Header = 100 + } + /// + /// Header text of the menu list. + /// + public string Header + { + get + { + return (string)(instance.MessageGet(BackingObject, (int)MenuBaseCategoryMembers.Header)); + } + set + { + instance.MessageSet(BackingObject, (int)MenuBaseCategoryMembers.Header, value); + } + } + } + public class MenuRootCategory : MenuCategoryBase + { + public enum MenuFlag : int + { + None = 0, + PlayerMenu = 1, + AdminMenu = 2 + } + private enum MenuRootCategoryMembers : int + { + MenuFlag = 200 + + } + /// + /// Which menu to attach to, either Player or Admin menus. + /// + public MenuFlag Menu + { + get + { + return (MenuFlag)(instance.MessageGet(BackingObject, (int)MenuRootCategoryMembers.MenuFlag)); + } + set + { + instance.MessageSet(BackingObject, (int)MenuRootCategoryMembers.MenuFlag, (int)value); + } + } + /// + /// Create only one of these per mod. Automatically attaches to parent lists. + /// + /// Text displayed in the root menu list + /// Which menu to attach to, either Player or Admin menus. + /// Header text of this menu list. + public MenuRootCategory(string Text, MenuFlag AttachedMenu = MenuFlag.None, string HeaderText = "Default Header") + { + instance.RegisterCheck(); + BackingObject = instance.CreateMessage(MessageTypes.MenuRootCategory); + this.Text = Text; + Header = HeaderText; + Menu = AttachedMenu; + } + } + public class MenuSubCategory : MenuCategoryBase + { + private enum MenuSubCategoryMembers : int + { + Parent = 200 + } + + /// + /// Must be either a MenuRootCategory or MenuSubCategory objectMust be either a MenuRootCategory or MenuSubCategory object + /// + public MenuCategoryBase Parent + { + set + { + instance.MessageSet(BackingObject, (int)MenuSubCategoryMembers.Parent, value.BackingObject); + } + } + + /// + /// Creates a sub category, must attach to either Root or another Sub Category. + /// + /// Text displayed in the category list + /// Must be either a MenuRootCategory or MenuSubCategory objectMust be either a MenuRootCategory or MenuSubCategory object + /// Header text of this menu list. + public MenuSubCategory(string Text, MenuCategoryBase Parent, string HeaderText = "Default Header") + { + instance.RegisterCheck(); + BackingObject = instance.CreateMessage(MessageTypes.MenuSubCategory); + this.Text = Text; + this.Header = HeaderText; + this.Parent = Parent; + } + } + public class MenuColorPickerInput : MenuItemBase + { + private enum MenuColorPickerInputMembers : int + { + OnSubmitAction = 100, + Parent, + InputDialogTitle, + OnUpdateAction, + OnCancelAction, + InitialColor, + ShowAlpha, + UseHSV + } + + /// + /// Must be either a MenuRootCategory or MenuSubCategory object + /// + public MenuCategoryBase Parent + { + set + { + instance.MessageSet(BackingObject, (int)MenuColorPickerInputMembers.Parent, value.BackingObject); + } + } + + /// + /// Titlebar of the Dialog window. + /// + public string InputDialogTitle + { + get + { + return (string)(instance.MessageGet(BackingObject, (int)MenuColorPickerInputMembers.InputDialogTitle)); + } + set + { + instance.MessageSet(BackingObject, (int)MenuColorPickerInputMembers.InputDialogTitle, value); + } + } + + /// + /// Returns inputted color on submit. + /// + public Action OnSubmitAction + { + get + { + return (Action)(instance.MessageGet(BackingObject, (int)MenuColorPickerInputMembers.OnSubmitAction)); + } + set + { + instance.MessageSet(BackingObject, (int)MenuColorPickerInputMembers.OnSubmitAction, value); + } + } + + /// + /// Returns color as client is manipulating the dialog. + /// + public Action OnUpdateAction + { + get + { + return (Action)(instance.MessageGet(BackingObject, (int)MenuColorPickerInputMembers.OnUpdateAction)); + } + set + { + instance.MessageSet(BackingObject, (int)MenuColorPickerInputMembers.OnUpdateAction, value); + } + } + + /// + /// Canceled the dialog + /// + public Action OnCancelAction + { + get + { + return (Action)(instance.MessageGet(BackingObject, (int)MenuColorPickerInputMembers.OnCancelAction)); + } + set + { + instance.MessageSet(BackingObject, (int)MenuColorPickerInputMembers.OnCancelAction, value); + } + } + + /// + /// Initial color in the dialog box + /// + public Color InitialColor + { + get + { + return (Color)(instance.MessageGet(BackingObject, (int)MenuColorPickerInputMembers.InitialColor)); + } + set + { + instance.MessageSet(BackingObject, (int)MenuColorPickerInputMembers.InitialColor, value); + } + } + + /// + /// Shows alpha slider if true (default true) + /// + public bool ShowAlpha + { + get + { + return (bool)(instance.MessageGet(BackingObject, (int)MenuColorPickerInputMembers.ShowAlpha)); + } + set + { + instance.MessageSet(BackingObject, (int)MenuColorPickerInputMembers.ShowAlpha, value); + } + } + + /// + /// UseHSV Values + /// + public bool UseHSV + { + get + { + return (bool)(instance.MessageGet(BackingObject, (int)MenuColorPickerInputMembers.UseHSV)); + } + set + { + instance.MessageSet(BackingObject, (int)MenuColorPickerInputMembers.UseHSV, value); + } + } + + /// + /// Summons a dialog box that allows the user to specify a color. + /// + /// Text displayed in the category list + /// Must be either a MenuRootCategory or MenuSubCategory object + /// Initial color set in the dialog box + /// Dialog Title + /// On Submit Callback, returns color in the dialog + /// Update callback, will call per tick with the current selected color in the dialog + /// User canceled the dialog + /// Shows alpha slider if true + /// Have Sliders Represent HSV Values + public MenuColorPickerInput(string Text, MenuCategoryBase Parent, Color initialColor, string InputDialogTitle = "Enter text value", Action onSubmit = null, Action onUpdate = null, Action onCancel = null, bool showAlpha = true, bool useHSV = false) + { + instance.RegisterCheck(); + BackingObject = instance.CreateMessage(MessageTypes.MenuColorPickerInput); + this.Text = Text; + this.InputDialogTitle = InputDialogTitle; + this.OnSubmitAction = onSubmit; + this.Parent = Parent; + this.InitialColor = initialColor; + this.OnUpdateAction = onUpdate; + this.OnCancelAction = onCancel; + this.ShowAlpha = showAlpha; + this.UseHSV = useHSV; + } + } + public class MenuTextInput : MenuItemBase + { + private enum MenuTextInputMembers : int + { + OnSubmitAction = 100, + Parent, + InputDialogTitle + } + + /// + /// Must be either a MenuRootCategory or MenuSubCategory object + /// + public MenuCategoryBase Parent + { + set + { + instance.MessageSet(BackingObject, (int)MenuTextInputMembers.Parent, value.BackingObject); + } + } + + /// + /// Titlebar of the Dialog window. + /// + public string InputDialogTitle + { + get + { + return (string)(instance.MessageGet(BackingObject, (int)MenuTextInputMembers.InputDialogTitle)); + } + set + { + instance.MessageSet(BackingObject, (int)MenuTextInputMembers.InputDialogTitle, value); + } + } + + /// + /// Returns inputted string on submit. + /// + public Action OnSubmitAction + { + get + { + return (Action)(instance.MessageGet(BackingObject, (int)MenuTextInputMembers.OnSubmitAction)); + } + set + { + instance.MessageSet(BackingObject, (int)MenuTextInputMembers.OnSubmitAction, value); + } + } + + /// + /// Opens a text input dialog box when user selects this item. + /// + /// Text displayed in the category list + /// Must be either a MenuRootCategory or MenuSubCategory object + /// Titlebar of the Dialog window. + /// Returns inputted string on submit. + public MenuTextInput(string Text, MenuCategoryBase Parent, string InputDialogTitle = "Enter text value", Action onSubmit = null) + { + instance.RegisterCheck(); + BackingObject = instance.CreateMessage(MessageTypes.MenuTextInput); + this.Text = Text; + this.InputDialogTitle = InputDialogTitle; + this.OnSubmitAction = onSubmit; + this.Parent = Parent; + } + } + public class MenuKeybindInput : MenuItemBase + { + private enum MenuKeybindInputMembers : int + { + OnSubmitAction = 100, + Parent, + InputDialogTitle + } + + /// + /// Must be either a MenuRootCategory or MenuSubCategory object + /// + public MenuCategoryBase Parent + { + set + { + instance.MessageSet(BackingObject, (int)MenuKeybindInputMembers.Parent, value.BackingObject); + } + } + + /// + /// Titlebar of the Dialog window. + /// + public string InputDialogTitle + { + get + { + return (string)(instance.MessageGet(BackingObject, (int)MenuKeybindInputMembers.InputDialogTitle)); + } + set + { + instance.MessageSet(BackingObject, (int)MenuKeybindInputMembers.InputDialogTitle, value); + } + } + + /// + /// Called with Key pressed, Shift Pressed, Ctrl Pressed, Alt Pressed when user Submits the dialog. + /// + public Action OnSubmitAction + { + get + { + return (Action)(instance.MessageGet(BackingObject, (int)MenuKeybindInputMembers.OnSubmitAction)); + } + set + { + instance.MessageSet(BackingObject, (int)MenuKeybindInputMembers.OnSubmitAction, value); + } + } + + /// + /// Opens up a keybind dialog box which lets the user submit a Key + Modifiers. + /// + /// Text displayed in the category list + /// Must be either a MenuRootCategory or MenuSubCategory object + /// Titlebar of the Dialog window. + /// Called with Key pressed, Shift Pressed, Ctrl Pressed, Alt Pressed when user Submits the dialog. + public MenuKeybindInput(string Text, MenuCategoryBase Parent, string InputDialogTitle = "Keybind - Press any key", Action onSubmit = null) + { + instance.RegisterCheck(); + BackingObject = instance.CreateMessage(MessageTypes.MenuKeybindInput); + this.Text = Text; + this.InputDialogTitle = InputDialogTitle; + this.OnSubmitAction = onSubmit; + this.Parent = Parent; + } + } + public class MenuScreenInput : MenuItemBase + { + private enum MenuScreenInputMembers : int + { + OnSubmitAction = 100, + Parent, + InputDialogTitle, + Origin, + Size, + OnUpdateAction, + Cancel, + OnSelect + } + + /// + /// Must be either a MenuRootCategory or MenuSubCategory object + /// + public MenuCategoryBase Parent + { + set + { + instance.MessageSet(BackingObject, (int)MenuScreenInputMembers.Parent, value.BackingObject); + } + } + + /// + /// Titlebar of the Dialog window. + /// + public string InputDialogTitle + { + get + { + return (string)(instance.MessageGet(BackingObject, (int)MenuScreenInputMembers.InputDialogTitle)); + } + set + { + instance.MessageSet(BackingObject, (int)MenuScreenInputMembers.InputDialogTitle, value); + } + } + /// + /// Called when user does not click the dialog box window to move it and cancels out of the dialog box. + /// + public Action OnCancel + { + get + { + return (Action)(instance.MessageGet(BackingObject, (int)MenuScreenInputMembers.Cancel)); + } + set + { + instance.MessageSet(BackingObject, (int)MenuScreenInputMembers.Cancel, value); + } + } + /// + /// Screen position origin of the dialog box. + /// + public Vector2D Origin + { + get + { + return (Vector2D)(instance.MessageGet(BackingObject, (int)MenuScreenInputMembers.Origin)); + } + set + { + instance.MessageSet(BackingObject, (int)MenuScreenInputMembers.Origin, value); + } + } + /// + /// Size of the dialog box. Use GetTextLength() on a Hud Object to manipulate this. Or you can specify a manual width and height APIinfo can get you the width and height of a single PX. + /// + public Vector2D Size + { + get + { + return (Vector2D)(instance.MessageGet(BackingObject, (int)MenuScreenInputMembers.Size)); + } + set + { + instance.MessageSet(BackingObject, (int)MenuScreenInputMembers.Size, value); + } + } + /// + /// Called when user lets go of the dialog box with the final position. Please note that the result may be off the screen. Recommend clamping between -1 and 1 on each axis. + /// + public Action OnSubmitAction + { + get + { + return (Action)(instance.MessageGet(BackingObject, (int)MenuScreenInputMembers.OnSubmitAction)); + } + set + { + instance.MessageSet(BackingObject, (int)MenuScreenInputMembers.OnSubmitAction, value); + } + } + + /// + /// Called every tick while the user is manipulating the dialog. + /// + public Action UpdateAction + { + get + { + return (Action)(instance.MessageGet(BackingObject, (int)MenuScreenInputMembers.OnUpdateAction)); + } + set + { + instance.MessageSet(BackingObject, (int)MenuScreenInputMembers.OnUpdateAction, value); + } + } + + public Action OnSelect + { + get + { + return (Action)instance.MessageGet(BackingObject, (int)MenuScreenInputMembers.OnSelect); + } + set + { + instance.MessageSet(BackingObject, (int)MenuScreenInputMembers.OnSelect, value); + } + } + + /// + /// Summons a dialog box that gives you a screen position when completed. + /// + /// Text displayed in the category list + /// Must be either a MenuRootCategory or MenuSubCategory object + /// Screen position origin of the dialog box. + /// Size of the dialog box. Use GetTextLength() on a Hud Object to manipulate this. Or you can specify a manual width and height APIinfo can get you the width and height of a single PX. + /// Titlebar of the Dialog window. + /// Called when user lets go of the dialog box with the final position. + /// Called every tick while the user is manipulating the dialog. + /// Called when user does not click the dialog box window to move it and cancels out of the dialog box. + /// Called when user invokes this dialog box use to refresh the Size property + public MenuScreenInput(string Text, MenuCategoryBase Parent, Vector2D Origin, Vector2D Size, string InputDialogTitle = "Move this element", Action OnSubmit = null, Action Update = null, Action Cancel = null, Action OnSelect = null) + { + instance.RegisterCheck(); + BackingObject = instance.CreateMessage(MessageTypes.MenuScreenInput); + this.Text = Text; + this.InputDialogTitle = InputDialogTitle; + this.OnSubmitAction = OnSubmit; + this.UpdateAction = Update; + this.Origin = Origin; + this.Size = Size; + this.OnCancel = Cancel; + this.OnSelect = OnSelect; + this.Parent = Parent; + + } + } + public class MenuSliderInput : MenuItemBase + { + private enum MenuSliderItemMembers : int + { + OnSubmitAction = 100, + Parent, + InputDialogTitle, + InitialPercent, + SliderPercentToValue, + OnCancel + } + /// + /// Must be either a MenuRootCategory or MenuSubCategory object + /// + public MenuCategoryBase Parent + { + set + { + instance.MessageSet(BackingObject, (int)MenuSliderItemMembers.Parent, value.BackingObject); + } + } + + /// + /// Titlebar of the Dialog window. + /// + public string InputDialogTitle + { + get + { + return (string)(instance.MessageGet(BackingObject, (int)MenuSliderItemMembers.InputDialogTitle)); + } + set + { + instance.MessageSet(BackingObject, (int)MenuSliderItemMembers.InputDialogTitle, value); + } + } + /// + /// When the dialog box first opens set the position as a percentage based on this number. Expected value between 0 and 1. + /// + public float InitialPercent + { + get + { + return (float)(instance.MessageGet(BackingObject, (int)MenuSliderItemMembers.InitialPercent)); + } + set + { + instance.MessageSet(BackingObject, (int)MenuSliderItemMembers.InitialPercent, value); + } + } + /// + /// Percentage value of the slider when the user submits the dialog + /// + public Action OnSubmitAction + { + get + { + return (Action)(instance.MessageGet(BackingObject, (int)MenuSliderItemMembers.OnSubmitAction)); + } + set + { + instance.MessageSet(BackingObject, (int)MenuSliderItemMembers.OnSubmitAction, value); + } + } + /// + /// Called when the user cancels the dialog window or otherwise closes the dialog box without confirming. + /// + public Action OnCancel + { + get + { + return (Action)(instance.MessageGet(BackingObject, (int)MenuSliderItemMembers.OnCancel)); + } + set + { + instance.MessageSet(BackingObject, (int)MenuSliderItemMembers.OnCancel, value); + } + } + + /// + /// Returned value calls toString to print the text in the dialog box. Value fed to this function is the slider percentage value. + /// + public Func SliderPercentToValue + { + get + { + return (Func)(instance.MessageGet(BackingObject, (int)MenuSliderItemMembers.SliderPercentToValue)); + } + set + { + instance.MessageSet(BackingObject, (int)MenuSliderItemMembers.SliderPercentToValue, value); + } + } + + /// + /// Creates a dialog object and adds it to the Parent list. + /// + /// Text displayed in the category list + /// Must be either a MenuRootCategory or MenuSubCategory object + /// When the dialog box first opens set the position as a percentage based on this number. Expected value between 0 and 1. + /// Titlebar of the Dialog window. + /// Percentage value of the slider when the user submits the dialog + /// Returned value calls toString to print the text in the dialog box. Value fed to this function is the slider percentage value. + /// Called when the user cancels the dialog window or otherwise closes the dialog box without confirming. + public MenuSliderInput(string Text, MenuCategoryBase Parent, float InitialPercent, string InputDialogTitle = "Adjust Slider to modify value", Action OnSubmitAction = null, Func SliderPercentToValue = null, Action OnCancel = null) + { + instance.RegisterCheck(); + BackingObject = instance.CreateMessage(MessageTypes.MenuSliderItem); + this.Text = Text; + this.InputDialogTitle = InputDialogTitle; + this.OnSubmitAction = OnSubmitAction; + this.SliderPercentToValue = SliderPercentToValue; + this.InitialPercent = InitialPercent; + this.OnCancel = OnCancel; + this.Parent = Parent; + } + } + #endregion + + + /// + /// Class to allow adding fonts to the TextHUDApi + /// + public class FontDefinition + { + enum FontDefinitionMembers : int + { + AddCharacter = 0, + DefineFont, + AddKerning, + ReadOnly + + } + + [ProtoContract] + public struct FontCharacterDefinitionData + { + [ProtoMember(1)] + public char character; + [ProtoMember(2)] + public int texturesize; + [ProtoMember(3)] + public string charactercode; + [ProtoMember(4)] + public int uv1x; + [ProtoMember(5)] + public int uv1y; + [ProtoMember(6)] + public int sizex; + [ProtoMember(7)] + public int sizey; + [ProtoMember(8)] + public int aw; + [ProtoMember(9)] + public int lsb; + [ProtoMember(10)] + public bool forcewhite; + [ProtoMember(11)] + public MyStringId MaterialId; + } + + public object BackingDefinition; + + public FontDefinition(object BackingObject) + { + BackingDefinition = BackingObject; + } + + /// + /// Checks to see if the object is readonly. Once the definition is read only none of its properties can be modified or character definitions replaced. New character definitions can still be added if none exist. + /// + public bool ReadOnly + { + get + { + return (bool)instance.MessageGet(BackingDefinition, (int)FontDefinitionMembers.ReadOnly); + } + set + { + instance.MessageSet(BackingDefinition, (int)FontDefinitionMembers.ReadOnly, value); + } + } + + /// + /// Sets the global parameters for a font + /// + public void DefineFont(int fontbase, int lineheight, int fontsize) + { + MyTuple data = new MyTuple(fontbase, lineheight, fontsize); + instance.MessageSet(BackingDefinition, (int)FontDefinitionMembers.DefineFont, data); + } + + /// + /// Adds a character glyph + /// + /// TransparentMaterial definitions subtype id + /// must be square + /// code in hex + /// origin x + /// origin y + /// size x + /// size y + /// advance width + /// left side bearing + /// force character to grayscale in render + public void AddCharacter(char character, MyStringId material, int materialtexturesize, string charactercode, int uv1x, int uv1y, int sizex, int sizey, int aw, int lsb, bool forcewhite = false) + { + var data = new FontCharacterDefinitionData { character = character, MaterialId = material, texturesize = materialtexturesize, charactercode = charactercode, uv1x = uv1x, uv1y = uv1y, sizex = sizex, sizey = sizey, aw = aw, lsb = lsb, forcewhite = forcewhite }; + instance.MessageSet(BackingDefinition, (int)FontDefinitionMembers.AddCharacter, MyAPIGateway.Utilities.SerializeToBinary(data)); + } + + /// + /// Sets the kerning parameters. Right character must be defined first! + /// + /// how many pixels to move the right char + /// char that will be moved by the kerning + /// + public void AddKerning(int adjust, char right, char left) + { + MyTuple data = new MyTuple(adjust, right, left); + instance.MessageSet(BackingDefinition, (int)FontDefinitionMembers.AddKerning, data); + } + + } + + + #region BoxUI + /// + /// Creates a new BoxUIDefinition. This defines exactly how the UI texture is laid out on the screen. + /// + public class BoxUIDefinition + { + + public object BackingDefinition; + [ProtoContract] + public struct BoxUIDefinitionData + { + [ProtoMember(1)] + public MyStringId Material; + [ProtoMember(2)] + public int imagesize; + [ProtoMember(3)] + public int topwidthpx; + [ProtoMember(4)] + public int leftwidthpx; + [ProtoMember(5)] + public int bottomwidthpx; + [ProtoMember(6)] + public int rightwidthpx; + [ProtoMember(7)] + public int margin; + [ProtoMember(8)] + public int padding; + } + + public BoxUIDefinitionData BoxUIDef + { + set + { + instance.MessageSet(BackingDefinition, (int)BoxUIDefinitionMembers.Definition, MyAPIGateway.Utilities.SerializeToBinary(value)); + } + } + + /// + /// Returns the margin + padding + border values. subtract this from the total size to get the size of the content area of the object. + /// + public Vector2I Min + { + get + { + return (Vector2I)instance.MessageGet(BackingDefinition, (int)BoxUIDefinitionMembers.Min); + } + } + + enum BoxUIDefinitionMembers : int + { + Definition = 0, + Min + } + + + + public BoxUIDefinition() + { + BackingDefinition = instance.CreateMessage(MessageTypes.UIDefinition); + } + public BoxUIDefinition(MyStringId Material, int imagesize, int topwidthpx, int leftwidthpx, int bottomwidthpx, int rightwidthpx, int margin = 0, int padding = 0) + { + BackingDefinition = instance.CreateMessage(MessageTypes.UIDefinition); + var data = new BoxUIDefinitionData() + { + Material = Material, + imagesize = imagesize, + topwidthpx = topwidthpx, + leftwidthpx = leftwidthpx, + bottomwidthpx = bottomwidthpx, + rightwidthpx = rightwidthpx, + margin = margin, + padding = padding + }; + BoxUIDef = data; + + } + public BoxUIDefinition(object BackingObject) + { + BackingDefinition = BackingObject; + } + } + + + /// + /// Unused at the moment, but will be expanded on in the future. + /// + public class BoxUIBehaviourDef + { + public object BackingDefinition; + + public BoxUIBehaviourDef() + { + BackingDefinition = instance.CreateMessage(MessageTypes.UIBehaviourDefinition); + } + public BoxUIBehaviourDef(object BackingObject) + { + BackingDefinition = BackingObject; + } + } + + public abstract class BoxUIBase + { + internal object BackingObject; + internal BoxUIBase m_Parent; + private enum BoxUIBaseMembers : int + { + Origin = 0, + BackgroundColor, + Width, + Height, + Definition, + Behaviour, + Visible, + Parent, + HideHud + } + + /// + /// Sets the BoxUI's position in PX values. + /// + public Vector2I Origin + { + get + { + return (Vector2I)instance.MessageGet(BackingObject, (int)BoxUIBaseMembers.Origin); + } + set + { + instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.Origin, value); + } + } + + /// + /// Sets the width of the box in PX values + /// + public int Width + { + get + { + return (int)instance.MessageGet(BackingObject, (int)BoxUIBaseMembers.Width); + } + set + { + instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.Width, value); + } + } + + /// + /// Sets the Height in PX values + /// + public int Height + { + get + { + return (int)instance.MessageGet(BackingObject, (int)BoxUIBaseMembers.Height); + } + set + { + instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.Height, value); + } + } + + /// + /// Sets the background color, default White + /// + public Color BackgroundColor + { + get + { + return (Color)instance.MessageGet(BackingObject, (int)BoxUIBaseMembers.BackgroundColor); + } + set + { + instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.BackgroundColor, value); + } + } + /// + /// Element and subelements visible + /// + public bool Visible + { + get + { + return (bool)instance.MessageGet(BackingObject, (int)BoxUIBaseMembers.Visible); + } + set + { + instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.Visible, value); + } + } + + /// + /// Sets the backing UI definition, please set using SetDefinition + /// + public object DefinitionObject + { + get + { + return (object)instance.MessageGet(BackingObject, (int)BoxUIBaseMembers.Definition); + } + set + { + if(value is BoxUIDefinition) + { + instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.Definition, (value as BoxUIDefinition).BackingDefinition); + return; + } + instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.Definition, value); + } + } + + /// + /// Sets the backing behaviour object, please set using SetBehaviour + /// + public object BehaviourObject + { + get + { + return (object)instance.MessageGet(BackingObject, (int)BoxUIBaseMembers.Behaviour); + } + set + { + if(value is BoxUIBehaviourDef) + { + instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.Behaviour, (value as BoxUIDefinition).BackingDefinition); + return; + } + + instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.Behaviour, value); + } + } + + /// + /// Defaults to true. + /// + public bool HideHud + { + get + { + return (bool)instance.MessageGet(BackingObject, (int)BoxUIBaseMembers.HideHud); + } + set + { + instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.HideHud, value); + } + } + + /// + /// Gets or sets the parent object, please be careful not to create a circular reference. Sub objects are automatically offset by the top left corner of the parent object. + /// + public BoxUIBase Parent + { + get + { + return m_Parent; + + } + set + { + m_Parent = value; + instance.MessageSet(BackingObject, (int)BoxUIBaseMembers.Parent, m_Parent.BackingObject); + } + } + + + public void SetDefinition(BoxUIDefinition def) + { + DefinitionObject = def.BackingDefinition; + } + + public void SetBehaviour(BoxUIBehaviourDef def) + { + BehaviourObject = def.BackingDefinition; + } + + } + public class BoxUIContainer : BoxUIBase + { + + + public BoxUIContainer() + { + instance.RegisterCheck(); + BackingObject = instance.CreateMessage(MessageTypes.BoxUIContainer); + } + } + public class BoxUIText : BoxUIBase + { + + enum BoxUITextMembers : int + { + SetTextContent = 100 + } + + public BoxUIText() + { + instance.RegisterCheck(); + BackingObject = instance.CreateMessage(MessageTypes.BoxUIText); + } + + /// + /// Automatically sets the message to use the pixel offset types. Please note that the BoxUI will control the .Origin of the Message, you can use the offset value in PX to move it. Please note Scale is now the pt size of the font. + /// + /// + public void SetTextContent(HUDMessage Message) + { + instance.MessageSet(BackingObject, (int)BoxUITextMembers.SetTextContent, Message.BackingObject); + } + } + + public class BoxUIImage : BoxUIBase + { + enum BoxUIImageMembers : int + { + SetImageContent = 100 + } + + public BoxUIImage() + { + instance.RegisterCheck(); + BackingObject = instance.CreateMessage(MessageTypes.BoxUIImage); + } + + /// + /// Sets the image, please note that image parameters will now be forced to the Pixel setting. Height and Width parameters are measured in px + /// + /// + public void SetImageContent(BillBoardHUDMessage Message) + { + instance.MessageSet(BackingObject, (int)BoxUIImageMembers.SetImageContent, Message.BackingObject); + } + } + #endregion + } } \ No newline at end of file diff --git a/Utility Mods/Stable/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/MetalFoam/FoamSettings.cs b/Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/MetalFoam/FoamSettings.cs similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/MetalFoam/FoamSettings.cs rename to Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/MetalFoam/FoamSettings.cs diff --git a/Utility Mods/Stable/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/MetalFoam/MetalFoam.cs b/Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/MetalFoam/MetalFoam.cs similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/MetalFoam/MetalFoam.cs rename to Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/MetalFoam/MetalFoam.cs diff --git a/Utility Mods/Stable/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/ResistBlock.zip b/Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/ResistBlock.zip similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/ResistBlock.zip rename to Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/ResistBlock.zip diff --git a/Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/dynresist-obselete.zip b/Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/dynresist-obselete.zip new file mode 100644 index 000000000..379774e87 Binary files /dev/null and b/Utility Mods/SCDefenseBlocks/Data/Scripts/OneFuckingFolderDeeper/dynresist-obselete.zip differ diff --git a/Utility Mods/Stable/SCDefenseBlocks/Data/foamaudio.sbc b/Utility Mods/SCDefenseBlocks/Data/foamaudio.sbc similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/Data/foamaudio.sbc rename to Utility Mods/SCDefenseBlocks/Data/foamaudio.sbc diff --git a/Utility Mods/Stable/SCDefenseBlocks/Invalid_copy to DS and client.bat b/Utility Mods/SCDefenseBlocks/Invalid_copy to DS and client.bat similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/Invalid_copy to DS and client.bat rename to Utility Mods/SCDefenseBlocks/Invalid_copy to DS and client.bat diff --git a/Utility Mods/Stable/SCDefenseBlocks/Models/Cubes/Large/Field_Gen_Core.mwm b/Utility Mods/SCDefenseBlocks/Models/Cubes/Large/Field_Gen_Core.mwm similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/Models/Cubes/Large/Field_Gen_Core.mwm rename to Utility Mods/SCDefenseBlocks/Models/Cubes/Large/Field_Gen_Core.mwm diff --git a/Utility Mods/Stable/SCDefenseBlocks/Models/Cubes/Large/Field_Gen_Upgrade.mwm b/Utility Mods/SCDefenseBlocks/Models/Cubes/Large/Field_Gen_Upgrade.mwm similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/Models/Cubes/Large/Field_Gen_Upgrade.mwm rename to Utility Mods/SCDefenseBlocks/Models/Cubes/Large/Field_Gen_Upgrade.mwm diff --git a/Utility Mods/Stable/SCDefenseBlocks/Models/Cubes/Large/SI_Field_Gen.mwm b/Utility Mods/SCDefenseBlocks/Models/Cubes/Large/SI_Field_Gen.mwm similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/Models/Cubes/Large/SI_Field_Gen.mwm rename to Utility Mods/SCDefenseBlocks/Models/Cubes/Large/SI_Field_Gen.mwm diff --git a/Utility Mods/Stable/SCDefenseBlocks/Models/LargeDecoy_MetalFoam.mwm b/Utility Mods/SCDefenseBlocks/Models/LargeDecoy_MetalFoam.mwm similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/Models/LargeDecoy_MetalFoam.mwm rename to Utility Mods/SCDefenseBlocks/Models/LargeDecoy_MetalFoam.mwm diff --git a/Utility Mods/Stable/SCDefenseBlocks/Textures/Copper_cm.dds b/Utility Mods/SCDefenseBlocks/Textures/Copper_cm.dds similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/Textures/Copper_cm.dds rename to Utility Mods/SCDefenseBlocks/Textures/Copper_cm.dds diff --git a/Utility Mods/Stable/SCDefenseBlocks/Textures/Copper_ng.dds b/Utility Mods/SCDefenseBlocks/Textures/Copper_ng.dds similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/Textures/Copper_ng.dds rename to Utility Mods/SCDefenseBlocks/Textures/Copper_ng.dds diff --git a/Utility Mods/Stable/SCDefenseBlocks/Textures/GUI/Icons/Cubes/Core_Icon.dds b/Utility Mods/SCDefenseBlocks/Textures/GUI/Icons/Cubes/Core_Icon.dds similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/Textures/GUI/Icons/Cubes/Core_Icon.dds rename to Utility Mods/SCDefenseBlocks/Textures/GUI/Icons/Cubes/Core_Icon.dds diff --git a/Utility Mods/Stable/SCDefenseBlocks/Textures/GUI/Icons/Cubes/LargeDecoy_MetalFoam.dds b/Utility Mods/SCDefenseBlocks/Textures/GUI/Icons/Cubes/LargeDecoy_MetalFoam.dds similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/Textures/GUI/Icons/Cubes/LargeDecoy_MetalFoam.dds rename to Utility Mods/SCDefenseBlocks/Textures/GUI/Icons/Cubes/LargeDecoy_MetalFoam.dds diff --git a/Utility Mods/Stable/SCDefenseBlocks/Textures/GUI/Icons/Cubes/SI_Field_Gen.dds b/Utility Mods/SCDefenseBlocks/Textures/GUI/Icons/Cubes/SI_Field_Gen.dds similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/Textures/GUI/Icons/Cubes/SI_Field_Gen.dds rename to Utility Mods/SCDefenseBlocks/Textures/GUI/Icons/Cubes/SI_Field_Gen.dds diff --git a/Utility Mods/Stable/SCDefenseBlocks/Textures/GUI/Icons/Cubes/Upgrade_Icon.dds b/Utility Mods/SCDefenseBlocks/Textures/GUI/Icons/Cubes/Upgrade_Icon.dds similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/Textures/GUI/Icons/Cubes/Upgrade_Icon.dds rename to Utility Mods/SCDefenseBlocks/Textures/GUI/Icons/Cubes/Upgrade_Icon.dds diff --git a/Utility Mods/Stable/SCDefenseBlocks/Textures/GUI/Icons/Cubes/metalfoam.png b/Utility Mods/SCDefenseBlocks/Textures/GUI/Icons/Cubes/metalfoam.png similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/Textures/GUI/Icons/Cubes/metalfoam.png rename to Utility Mods/SCDefenseBlocks/Textures/GUI/Icons/Cubes/metalfoam.png diff --git a/Utility Mods/Stable/SCDefenseBlocks/Textures/dangersign-alpha.dds b/Utility Mods/SCDefenseBlocks/Textures/dangersign-alpha.dds similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/Textures/dangersign-alpha.dds rename to Utility Mods/SCDefenseBlocks/Textures/dangersign-alpha.dds diff --git a/Utility Mods/Stable/SCDefenseBlocks/Textures/high-pressure-danger-sign-s-0513.dds b/Utility Mods/SCDefenseBlocks/Textures/high-pressure-danger-sign-s-0513.dds similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/Textures/high-pressure-danger-sign-s-0513.dds rename to Utility Mods/SCDefenseBlocks/Textures/high-pressure-danger-sign-s-0513.dds diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/metadata.mod b/Utility Mods/SCDefenseBlocks/metadata.mod similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/metadata.mod rename to Utility Mods/SCDefenseBlocks/metadata.mod diff --git a/Utility Mods/Stable/SCDefenseBlocks/modinfo_main.sbmi b/Utility Mods/SCDefenseBlocks/modinfo_main.sbmi similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/modinfo_main.sbmi rename to Utility Mods/SCDefenseBlocks/modinfo_main.sbmi diff --git a/Utility Mods/Stable/SCDefenseBlocks/modinfo_stable.sbmi b/Utility Mods/SCDefenseBlocks/modinfo_stable.sbmi similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/modinfo_stable.sbmi rename to Utility Mods/SCDefenseBlocks/modinfo_stable.sbmi diff --git a/Utility Mods/Stable/SCEntityCover/Data/EntityCoverCubeblocks.sbc b/Utility Mods/SCEntityCover/Data/EntityCoverCubeblocks.sbc similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Data/EntityCoverCubeblocks.sbc rename to Utility Mods/SCEntityCover/Data/EntityCoverCubeblocks.sbc diff --git a/Utility Mods/Stable/SCEntityCover/Data/Prefabs/#EntityCover1.sbc b/Utility Mods/SCEntityCover/Data/Prefabs/#EntityCover1.sbc similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Data/Prefabs/#EntityCover1.sbc rename to Utility Mods/SCEntityCover/Data/Prefabs/#EntityCover1.sbc diff --git a/Utility Mods/Stable/SCEntityCover/Data/Prefabs/#EntityCover2.sbc b/Utility Mods/SCEntityCover/Data/Prefabs/#EntityCover2.sbc similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Data/Prefabs/#EntityCover2.sbc rename to Utility Mods/SCEntityCover/Data/Prefabs/#EntityCover2.sbc diff --git a/Utility Mods/Stable/SCEntityCover/Data/Prefabs/#EntityCover3.sbc b/Utility Mods/SCEntityCover/Data/Prefabs/#EntityCover3.sbc similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Data/Prefabs/#EntityCover3.sbc rename to Utility Mods/SCEntityCover/Data/Prefabs/#EntityCover3.sbc diff --git a/Utility Mods/Stable/SCEntityCover/Data/Prefabs/#EntityCover4.sbc b/Utility Mods/SCEntityCover/Data/Prefabs/#EntityCover4.sbc similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Data/Prefabs/#EntityCover4.sbc rename to Utility Mods/SCEntityCover/Data/Prefabs/#EntityCover4.sbc diff --git a/Utility Mods/Stable/SCEntityCover/Data/Prefabs/#EntityCover4BLU.sbc b/Utility Mods/SCEntityCover/Data/Prefabs/#EntityCover4BLU.sbc similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Data/Prefabs/#EntityCover4BLU.sbc rename to Utility Mods/SCEntityCover/Data/Prefabs/#EntityCover4BLU.sbc diff --git a/Utility Mods/Stable/SCEntityCover/Data/Prefabs/#EntityCover4BLU.sbcB5 b/Utility Mods/SCEntityCover/Data/Prefabs/#EntityCover4BLU.sbcB5 similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Data/Prefabs/#EntityCover4BLU.sbcB5 rename to Utility Mods/SCEntityCover/Data/Prefabs/#EntityCover4BLU.sbcB5 diff --git a/Utility Mods/Stable/SCEntityCover/Data/Prefabs/#EntityCover4RED.sbc b/Utility Mods/SCEntityCover/Data/Prefabs/#EntityCover4RED.sbc similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Data/Prefabs/#EntityCover4RED.sbc rename to Utility Mods/SCEntityCover/Data/Prefabs/#EntityCover4RED.sbc diff --git a/Utility Mods/Stable/SCEntityCover/Data/Prefabs/#EntityCover4RED.sbcB5 b/Utility Mods/SCEntityCover/Data/Prefabs/#EntityCover4RED.sbcB5 similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Data/Prefabs/#EntityCover4RED.sbcB5 rename to Utility Mods/SCEntityCover/Data/Prefabs/#EntityCover4RED.sbcB5 diff --git a/Utility Mods/Stable/SCEntityCover/Data/Prefabs/#EntityCoverContainerL.sbc b/Utility Mods/SCEntityCover/Data/Prefabs/#EntityCoverContainerL.sbc similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Data/Prefabs/#EntityCoverContainerL.sbc rename to Utility Mods/SCEntityCover/Data/Prefabs/#EntityCoverContainerL.sbc diff --git a/Utility Mods/Stable/SCEntityCover/Data/Prefabs/#EntityCoverFractal.sbc b/Utility Mods/SCEntityCover/Data/Prefabs/#EntityCoverFractal.sbc similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Data/Prefabs/#EntityCoverFractal.sbc rename to Utility Mods/SCEntityCover/Data/Prefabs/#EntityCoverFractal.sbc diff --git a/Utility Mods/Stable/SCEntityCover/Data/Scripts/EntityCover/EntityCover.cs b/Utility Mods/SCEntityCover/Data/Scripts/EntityCover/EntityCover.cs similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Data/Scripts/EntityCover/EntityCover.cs rename to Utility Mods/SCEntityCover/Data/Scripts/EntityCover/EntityCover.cs diff --git a/Utility Mods/Stable/SCEntityCover/Data/Scripts/EntityCover/spawncolorcodedprefab.cs b/Utility Mods/SCEntityCover/Data/Scripts/EntityCover/spawncolorcodedprefab.cs similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Data/Scripts/EntityCover/spawncolorcodedprefab.cs rename to Utility Mods/SCEntityCover/Data/Scripts/EntityCover/spawncolorcodedprefab.cs diff --git a/Utility Mods/Stable/SCEntityCover/Data/Scripts/EntityCover/spawngencover.cs b/Utility Mods/SCEntityCover/Data/Scripts/EntityCover/spawngencover.cs similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Data/Scripts/EntityCover/spawngencover.cs rename to Utility Mods/SCEntityCover/Data/Scripts/EntityCover/spawngencover.cs diff --git a/Utility Mods/Stable/SCEntityCover/Data/Scripts/EntityCover/spawnmytheprefab.cs b/Utility Mods/SCEntityCover/Data/Scripts/EntityCover/spawnmytheprefab.cs similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Data/Scripts/EntityCover/spawnmytheprefab.cs rename to Utility Mods/SCEntityCover/Data/Scripts/EntityCover/spawnmytheprefab.cs diff --git a/Utility Mods/Stable/SCEntityCover/Models/200sq.mwm b/Utility Mods/SCEntityCover/Models/200sq.mwm similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Models/200sq.mwm rename to Utility Mods/SCEntityCover/Models/200sq.mwm diff --git a/Utility Mods/Stable/SCEntityCover/Models/Billboard1280x720.mwm b/Utility Mods/SCEntityCover/Models/Billboard1280x720.mwm similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Models/Billboard1280x720.mwm rename to Utility Mods/SCEntityCover/Models/Billboard1280x720.mwm diff --git a/Utility Mods/Stable/SCEntityCover/Models/Billboard1920x1080.mwm b/Utility Mods/SCEntityCover/Models/Billboard1920x1080.mwm similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Models/Billboard1920x1080.mwm rename to Utility Mods/SCEntityCover/Models/Billboard1920x1080.mwm diff --git a/Utility Mods/Stable/SCEntityCover/Models/ContainerL.mwm b/Utility Mods/SCEntityCover/Models/ContainerL.mwm similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Models/ContainerL.mwm rename to Utility Mods/SCEntityCover/Models/ContainerL.mwm diff --git a/Utility Mods/Stable/SCEntityCover/Models/EntityCoverEveDerelict.mwm b/Utility Mods/SCEntityCover/Models/EntityCoverEveDerelict.mwm similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Models/EntityCoverEveDerelict.mwm rename to Utility Mods/SCEntityCover/Models/EntityCoverEveDerelict.mwm diff --git a/Utility Mods/Stable/SCEntityCover/Models/REMlikeblocker.mwm b/Utility Mods/SCEntityCover/Models/REMlikeblocker.mwm similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Models/REMlikeblocker.mwm rename to Utility Mods/SCEntityCover/Models/REMlikeblocker.mwm diff --git a/Utility Mods/Stable/SCEntityCover/Models/REMlikeblocker1kmplate_blue.mwm b/Utility Mods/SCEntityCover/Models/REMlikeblocker1kmplate_blue.mwm similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Models/REMlikeblocker1kmplate_blue.mwm rename to Utility Mods/SCEntityCover/Models/REMlikeblocker1kmplate_blue.mwm diff --git a/Utility Mods/Stable/SCEntityCover/Models/REMlikeblocker1kmplate_purple.mwm b/Utility Mods/SCEntityCover/Models/REMlikeblocker1kmplate_purple.mwm similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Models/REMlikeblocker1kmplate_purple.mwm rename to Utility Mods/SCEntityCover/Models/REMlikeblocker1kmplate_purple.mwm diff --git a/Utility Mods/Stable/SCEntityCover/Models/REMlikeblocker1kmplate_red.mwm b/Utility Mods/SCEntityCover/Models/REMlikeblocker1kmplate_red.mwm similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Models/REMlikeblocker1kmplate_red.mwm rename to Utility Mods/SCEntityCover/Models/REMlikeblocker1kmplate_red.mwm diff --git a/Utility Mods/Stable/SCEntityCover/Models/REMlikeblocker2_5km_purple.mwm b/Utility Mods/SCEntityCover/Models/REMlikeblocker2_5km_purple.mwm similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Models/REMlikeblocker2_5km_purple.mwm rename to Utility Mods/SCEntityCover/Models/REMlikeblocker2_5km_purple.mwm diff --git a/Utility Mods/Stable/SCEntityCover/Models/REMlikeblocker2x.mwm b/Utility Mods/SCEntityCover/Models/REMlikeblocker2x.mwm similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Models/REMlikeblocker2x.mwm rename to Utility Mods/SCEntityCover/Models/REMlikeblocker2x.mwm diff --git a/Utility Mods/Stable/SCEntityCover/Models/REMlikeblocker2xB.mwm b/Utility Mods/SCEntityCover/Models/REMlikeblocker2xB.mwm similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Models/REMlikeblocker2xB.mwm rename to Utility Mods/SCEntityCover/Models/REMlikeblocker2xB.mwm diff --git a/Utility Mods/Stable/SCEntityCover/Models/REMlikeblockerLong25kX.mwm b/Utility Mods/SCEntityCover/Models/REMlikeblockerLong25kX.mwm similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Models/REMlikeblockerLong25kX.mwm rename to Utility Mods/SCEntityCover/Models/REMlikeblockerLong25kX.mwm diff --git a/Utility Mods/Stable/SCEntityCover/Models/REMlikeblocker_BLU.mwm b/Utility Mods/SCEntityCover/Models/REMlikeblocker_BLU.mwm similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Models/REMlikeblocker_BLU.mwm rename to Utility Mods/SCEntityCover/Models/REMlikeblocker_BLU.mwm diff --git a/Utility Mods/Stable/SCEntityCover/Models/REMlikeblocker_RED.mwm b/Utility Mods/SCEntityCover/Models/REMlikeblocker_RED.mwm similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Models/REMlikeblocker_RED.mwm rename to Utility Mods/SCEntityCover/Models/REMlikeblocker_RED.mwm diff --git a/Utility Mods/Stable/SCEntityCover/Models/REMlikeblocker_purple.mwm b/Utility Mods/SCEntityCover/Models/REMlikeblocker_purple.mwm similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Models/REMlikeblocker_purple.mwm rename to Utility Mods/SCEntityCover/Models/REMlikeblocker_purple.mwm diff --git a/Utility Mods/Stable/SCEntityCover/Models/Refinery.mwm b/Utility Mods/SCEntityCover/Models/Refinery.mwm similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Models/Refinery.mwm rename to Utility Mods/SCEntityCover/Models/Refinery.mwm diff --git a/Utility Mods/Stable/SCEntityCover/Models/essarray.mwm b/Utility Mods/SCEntityCover/Models/essarray.mwm similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Models/essarray.mwm rename to Utility Mods/SCEntityCover/Models/essarray.mwm diff --git a/Utility Mods/Stable/SCEntityCover/Models/evedepotobjectblu.mwm b/Utility Mods/SCEntityCover/Models/evedepotobjectblu.mwm similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Models/evedepotobjectblu.mwm rename to Utility Mods/SCEntityCover/Models/evedepotobjectblu.mwm diff --git a/Utility Mods/Stable/SCEntityCover/Models/evedepotobjectred.mwm b/Utility Mods/SCEntityCover/Models/evedepotobjectred.mwm similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Models/evedepotobjectred.mwm rename to Utility Mods/SCEntityCover/Models/evedepotobjectred.mwm diff --git a/Utility Mods/Stable/SCEntityCover/Models/evefreighter.mwm b/Utility Mods/SCEntityCover/Models/evefreighter.mwm similarity index 100% rename from Utility Mods/Stable/SCEntityCover/Models/evefreighter.mwm rename to Utility Mods/SCEntityCover/Models/evefreighter.mwm diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/Custom/enenra/EmissiveSpectrumAtlas_add.dds b/Utility Mods/SCEntityCover/Textures/Custom/enenra/EmissiveSpectrumAtlas_add.dds similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/Custom/enenra/EmissiveSpectrumAtlas_add.dds rename to Utility Mods/SCEntityCover/Textures/Custom/enenra/EmissiveSpectrumAtlas_add.dds diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/Custom/enenra/EmissiveSpectrumAtlas_cm.dds b/Utility Mods/SCEntityCover/Textures/Custom/enenra/EmissiveSpectrumAtlas_cm.dds similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/Custom/enenra/EmissiveSpectrumAtlas_cm.dds rename to Utility Mods/SCEntityCover/Textures/Custom/enenra/EmissiveSpectrumAtlas_cm.dds diff --git a/Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/Custom/enenra/EmissiveSpectrumAtlas_ng.dds b/Utility Mods/SCEntityCover/Textures/Custom/enenra/EmissiveSpectrumAtlas_ng.dds similarity index 100% rename from Utility Mods/Stable/Modular Assembly Mods/MoA Fusion Systems/Textures/Custom/enenra/EmissiveSpectrumAtlas_ng.dds rename to Utility Mods/SCEntityCover/Textures/Custom/enenra/EmissiveSpectrumAtlas_ng.dds diff --git a/Utility Mods/Stable/SCEntityCover/copy to DS and client.bat b/Utility Mods/SCEntityCover/copy to DS and client.bat similarity index 100% rename from Utility Mods/Stable/SCEntityCover/copy to DS and client.bat rename to Utility Mods/SCEntityCover/copy to DS and client.bat diff --git a/Utility Mods/Stable/PaperDoll/metadata.mod b/Utility Mods/SCEntityCover/metadata.mod similarity index 100% rename from Utility Mods/Stable/PaperDoll/metadata.mod rename to Utility Mods/SCEntityCover/metadata.mod diff --git a/Utility Mods/Stable/SCEntityCover/modinfo_main.sbmi b/Utility Mods/SCEntityCover/modinfo_main.sbmi similarity index 100% rename from Utility Mods/Stable/SCEntityCover/modinfo_main.sbmi rename to Utility Mods/SCEntityCover/modinfo_main.sbmi diff --git a/Utility Mods/Stable/SCEntityCover/modinfo_stable.sbmi b/Utility Mods/SCEntityCover/modinfo_stable.sbmi similarity index 100% rename from Utility Mods/Stable/SCEntityCover/modinfo_stable.sbmi rename to Utility Mods/SCEntityCover/modinfo_stable.sbmi diff --git a/Utility Mods/Stable/SCEntityCover/test.txt b/Utility Mods/SCEntityCover/test.txt similarity index 100% rename from Utility Mods/Stable/SCEntityCover/test.txt rename to Utility Mods/SCEntityCover/test.txt diff --git a/Utility Mods/Stable/SCMobilityBlocks/Aristeas_copy to DS and client.bat b/Utility Mods/SCMobilityBlocks/Aristeas_copy to DS and client.bat similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Aristeas_copy to DS and client.bat rename to Utility Mods/SCMobilityBlocks/Aristeas_copy to DS and client.bat diff --git a/Utility Mods/Stable/SCMobilityBlocks/Audio/hesfast.wav b/Utility Mods/SCMobilityBlocks/Audio/hesfast.wav similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Audio/hesfast.wav rename to Utility Mods/SCMobilityBlocks/Audio/hesfast.wav diff --git a/Utility Mods/Stable/SCMobilityBlocks/Data/AudioEffects_BlinkDrive.sbc b/Utility Mods/SCMobilityBlocks/Data/AudioEffects_BlinkDrive.sbc similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Data/AudioEffects_BlinkDrive.sbc rename to Utility Mods/SCMobilityBlocks/Data/AudioEffects_BlinkDrive.sbc diff --git a/Utility Mods/Stable/SCMobilityBlocks/Data/Blink_Test_Aristeas_Open.sbc b/Utility Mods/SCMobilityBlocks/Data/Blink_Test_Aristeas_Open.sbc similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Data/Blink_Test_Aristeas_Open.sbc rename to Utility Mods/SCMobilityBlocks/Data/Blink_Test_Aristeas_Open.sbc diff --git a/Utility Mods/Stable/SCMobilityBlocks/Data/Blink_Test_Close.sbc b/Utility Mods/SCMobilityBlocks/Data/Blink_Test_Close.sbc similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Data/Blink_Test_Close.sbc rename to Utility Mods/SCMobilityBlocks/Data/Blink_Test_Close.sbc diff --git a/Utility Mods/Stable/SCMobilityBlocks/Data/Blink_Test_V1.sbc b/Utility Mods/SCMobilityBlocks/Data/Blink_Test_V1.sbc similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Data/Blink_Test_V1.sbc rename to Utility Mods/SCMobilityBlocks/Data/Blink_Test_V1.sbc diff --git a/Utility Mods/Stable/SCMobilityBlocks/Data/BlockVariants.sbc b/Utility Mods/SCMobilityBlocks/Data/BlockVariants.sbc similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Data/BlockVariants.sbc rename to Utility Mods/SCMobilityBlocks/Data/BlockVariants.sbc diff --git a/Utility Mods/Stable/SCMobilityBlocks/Data/BlueprintClasses.sbc b/Utility Mods/SCMobilityBlocks/Data/BlueprintClasses.sbc similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Data/BlueprintClasses.sbc rename to Utility Mods/SCMobilityBlocks/Data/BlueprintClasses.sbc diff --git a/Utility Mods/Stable/SCMobilityBlocks/Data/CubeBlock_CustomBlink.sbc b/Utility Mods/SCMobilityBlocks/Data/CubeBlock_CustomBlink.sbc similarity index 95% rename from Utility Mods/Stable/SCMobilityBlocks/Data/CubeBlock_CustomBlink.sbc rename to Utility Mods/SCMobilityBlocks/Data/CubeBlock_CustomBlink.sbc index 3b872304c..67f8ae8cd 100644 --- a/Utility Mods/Stable/SCMobilityBlocks/Data/CubeBlock_CustomBlink.sbc +++ b/Utility Mods/SCMobilityBlocks/Data/CubeBlock_CustomBlink.sbc @@ -1,53 +1,53 @@ - - - - - - Collector - BlinkDriveLarge - - Standard Blink Drive - Textures\GUI\Icons\BlinkDriveIcon.dds - 1Km teleport. Holds 3 charges. Each charge takes 100MW and 60s to recharge. - Large - TriangleMesh - - - Models\Cubes\Large\BlinkDrive_Base_Large.mwm - - - - - - - - - - - - - - - - - - - - - 120 - BlinkDriveCustomLarge - Z - X - Light - - - BlockModuleProductivity - Damage_Electrical_Damaged - ParticleElectrical - Default - BlockDestroyedExplosion_Large - WepSmallWarheadExpl - false - - + + + + + + Collector + BlinkDriveLarge + + Standard Blink Drive + Textures\GUI\Icons\BlinkDriveIcon.dds + 1Km teleport. Holds 3 charges. Each charge takes 100MW and 60s to recharge. + Large + TriangleMesh + + + Models\Cubes\Large\Prototech_JumpDrive.mwm + + + + + + + + + + + + + + + + + + + + + 120 + BlinkDriveCustomLarge + Z + X + Light + + + BlockModuleProductivity + Damage_Electrical_Damaged + ParticleElectrical + Default + BlockDestroyedExplosion_Large + WepSmallWarheadExpl + false + + \ No newline at end of file diff --git a/Utility Mods/Stable/SCMobilityBlocks/Data/CubeBlocks/SC_PowerControl_CubeBlocks.sbc b/Utility Mods/SCMobilityBlocks/Data/CubeBlocks/SC_PowerControl_CubeBlocks.sbc similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Data/CubeBlocks/SC_PowerControl_CubeBlocks.sbc rename to Utility Mods/SCMobilityBlocks/Data/CubeBlocks/SC_PowerControl_CubeBlocks.sbc diff --git a/Utility Mods/Stable/SCMobilityBlocks/Data/CubeBlocks_Thruster_FocusDrive.sbc b/Utility Mods/SCMobilityBlocks/Data/CubeBlocks_Thruster_FocusDrive.sbc similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Data/CubeBlocks_Thruster_FocusDrive.sbc rename to Utility Mods/SCMobilityBlocks/Data/CubeBlocks_Thruster_FocusDrive.sbc diff --git a/Utility Mods/Stable/SCMobilityBlocks/Data/Dampeners 2x.sbc b/Utility Mods/SCMobilityBlocks/Data/Dampeners 2x.sbc similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Data/Dampeners 2x.sbc rename to Utility Mods/SCMobilityBlocks/Data/Dampeners 2x.sbc diff --git a/Utility Mods/Stable/SCMobilityBlocks/Data/EntityComponents.sbc b/Utility Mods/SCMobilityBlocks/Data/EntityComponents.sbc similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Data/EntityComponents.sbc rename to Utility Mods/SCMobilityBlocks/Data/EntityComponents.sbc diff --git a/Utility Mods/Stable/SCMobilityBlocks/Data/EntityComponents_BlinkDrive.sbc b/Utility Mods/SCMobilityBlocks/Data/EntityComponents_BlinkDrive.sbc similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Data/EntityComponents_BlinkDrive.sbc rename to Utility Mods/SCMobilityBlocks/Data/EntityComponents_BlinkDrive.sbc diff --git a/Utility Mods/Stable/SCMobilityBlocks/Data/HugeHydro.sbc b/Utility Mods/SCMobilityBlocks/Data/HugeHydro.sbc similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Data/HugeHydro.sbc rename to Utility Mods/SCMobilityBlocks/Data/HugeHydro.sbc diff --git a/Utility Mods/Stable/SCMobilityBlocks/Data/InvalidCustomBlinkParticleEnter.sbc b/Utility Mods/SCMobilityBlocks/Data/InvalidCustomBlinkParticleEnter.sbc similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Data/InvalidCustomBlinkParticleEnter.sbc rename to Utility Mods/SCMobilityBlocks/Data/InvalidCustomBlinkParticleEnter.sbc diff --git a/Utility Mods/Stable/SCMobilityBlocks/Data/InvalidCustomBlinkParticleLeave.sbc b/Utility Mods/SCMobilityBlocks/Data/InvalidCustomBlinkParticleLeave.sbc similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Data/InvalidCustomBlinkParticleLeave.sbc rename to Utility Mods/SCMobilityBlocks/Data/InvalidCustomBlinkParticleLeave.sbc diff --git a/Utility Mods/Stable/SCMobilityBlocks/Data/Particles.sbc b/Utility Mods/SCMobilityBlocks/Data/Particles.sbc similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Data/Particles.sbc rename to Utility Mods/SCMobilityBlocks/Data/Particles.sbc diff --git a/Utility Mods/Stable/SCMobilityBlocks/Data/Scripts/BY_OverclockingControl/SC_ModUtilities.cs b/Utility Mods/SCMobilityBlocks/Data/Scripts/BY_OverclockingControl/SC_ModUtilities.cs similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Data/Scripts/BY_OverclockingControl/SC_ModUtilities.cs rename to Utility Mods/SCMobilityBlocks/Data/Scripts/BY_OverclockingControl/SC_ModUtilities.cs diff --git a/Utility Mods/Stable/SCMobilityBlocks/Data/Scripts/BY_OverclockingControl/SC_PowerControl_Mod.cs b/Utility Mods/SCMobilityBlocks/Data/Scripts/BY_OverclockingControl/SC_PowerControl_Mod.cs similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Data/Scripts/BY_OverclockingControl/SC_PowerControl_Mod.cs rename to Utility Mods/SCMobilityBlocks/Data/Scripts/BY_OverclockingControl/SC_PowerControl_Mod.cs diff --git a/Utility Mods/Stable/SCMobilityBlocks/Data/Scripts/BY_OverclockingControl/SC_PowerControl_System.cs b/Utility Mods/SCMobilityBlocks/Data/Scripts/BY_OverclockingControl/SC_PowerControl_System.cs similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Data/Scripts/BY_OverclockingControl/SC_PowerControl_System.cs rename to Utility Mods/SCMobilityBlocks/Data/Scripts/BY_OverclockingControl/SC_PowerControl_System.cs diff --git a/Utility Mods/Stable/SCMobilityBlocks/Data/Scripts/InvalidsCustomBlink/CustomBlinkDrive.cs b/Utility Mods/SCMobilityBlocks/Data/Scripts/InvalidsCustomBlink/CustomBlinkDrive.cs similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Data/Scripts/InvalidsCustomBlink/CustomBlinkDrive.cs rename to Utility Mods/SCMobilityBlocks/Data/Scripts/InvalidsCustomBlink/CustomBlinkDrive.cs diff --git a/Utility Mods/Stable/SCMobilityBlocks/Data/Scripts/enenra.AQD/EmissiveControl.cs b/Utility Mods/SCMobilityBlocks/Data/Scripts/enenra.AQD/EmissiveControl.cs similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Data/Scripts/enenra.AQD/EmissiveControl.cs rename to Utility Mods/SCMobilityBlocks/Data/Scripts/enenra.AQD/EmissiveControl.cs diff --git a/Utility Mods/Stable/SCMobilityBlocks/Invalid_copy to DS and client.bat b/Utility Mods/SCMobilityBlocks/Invalid_copy to DS and client.bat similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Invalid_copy to DS and client.bat rename to Utility Mods/SCMobilityBlocks/Invalid_copy to DS and client.bat diff --git a/Utility Mods/Stable/SCMobilityBlocks/Models/AWGFocusDrive08.mwm b/Utility Mods/SCMobilityBlocks/Models/AWGFocusDrive08.mwm similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Models/AWGFocusDrive08.mwm rename to Utility Mods/SCMobilityBlocks/Models/AWGFocusDrive08.mwm diff --git a/Utility Mods/Stable/SCMobilityBlocks/Models/Cubes/Small/SC_PowerControlSystem_S.mwm b/Utility Mods/SCMobilityBlocks/Models/Cubes/Small/SC_PowerControlSystem_S.mwm similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Models/Cubes/Small/SC_PowerControlSystem_S.mwm rename to Utility Mods/SCMobilityBlocks/Models/Cubes/Small/SC_PowerControlSystem_S.mwm diff --git a/Utility Mods/Stable/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergy.mwm b/Utility Mods/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergy.mwm similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergy.mwm rename to Utility Mods/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergy.mwm diff --git a/Utility Mods/Stable/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergyConstruction_1.mwm b/Utility Mods/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergyConstruction_1.mwm similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergyConstruction_1.mwm rename to Utility Mods/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergyConstruction_1.mwm diff --git a/Utility Mods/Stable/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergyConstruction_1_LOD1.mwm b/Utility Mods/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergyConstruction_1_LOD1.mwm similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergyConstruction_1_LOD1.mwm rename to Utility Mods/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergyConstruction_1_LOD1.mwm diff --git a/Utility Mods/Stable/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergyConstruction_2.mwm b/Utility Mods/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergyConstruction_2.mwm similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergyConstruction_2.mwm rename to Utility Mods/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergyConstruction_2.mwm diff --git a/Utility Mods/Stable/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergyConstruction_2_LOD1.mwm b/Utility Mods/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergyConstruction_2_LOD1.mwm similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergyConstruction_2_LOD1.mwm rename to Utility Mods/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergyConstruction_2_LOD1.mwm diff --git a/Utility Mods/Stable/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergyConstruction_3.mwm b/Utility Mods/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergyConstruction_3.mwm similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergyConstruction_3.mwm rename to Utility Mods/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergyConstruction_3.mwm diff --git a/Utility Mods/Stable/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergyConstruction_3_LOD1.mwm b/Utility Mods/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergyConstruction_3_LOD1.mwm similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergyConstruction_3_LOD1.mwm rename to Utility Mods/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergyConstruction_3_LOD1.mwm diff --git a/Utility Mods/Stable/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergy_LOD1.mwm b/Utility Mods/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergy_LOD1.mwm similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergy_LOD1.mwm rename to Utility Mods/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergy_LOD1.mwm diff --git a/Utility Mods/Stable/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergy_LOD2.mwm b/Utility Mods/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergy_LOD2.mwm similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergy_LOD2.mwm rename to Utility Mods/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergy_LOD2.mwm diff --git a/Utility Mods/Stable/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergy_LOD3.mwm b/Utility Mods/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergy_LOD3.mwm similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergy_LOD3.mwm rename to Utility Mods/SCMobilityBlocks/Models/Cubes/Small/UpgradeEnergy_LOD3.mwm diff --git a/Utility Mods/Stable/SCMobilityBlocks/Models/Cubes/large/SC_PowerControlSystem_L.mwm b/Utility Mods/SCMobilityBlocks/Models/Cubes/large/SC_PowerControlSystem_L.mwm similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Models/Cubes/large/SC_PowerControlSystem_L.mwm rename to Utility Mods/SCMobilityBlocks/Models/Cubes/large/SC_PowerControlSystem_L.mwm diff --git a/Utility Mods/Stable/SCMobilityBlocks/Models/HugeHydrogenThruster.mwm b/Utility Mods/SCMobilityBlocks/Models/HugeHydrogenThruster.mwm similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Models/HugeHydrogenThruster.mwm rename to Utility Mods/SCMobilityBlocks/Models/HugeHydrogenThruster.mwm diff --git a/Utility Mods/Stable/SCMobilityBlocks/Models/HugeHydrogenThruster_Armored.mwm b/Utility Mods/SCMobilityBlocks/Models/HugeHydrogenThruster_Armored.mwm similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Models/HugeHydrogenThruster_Armored.mwm rename to Utility Mods/SCMobilityBlocks/Models/HugeHydrogenThruster_Armored.mwm diff --git a/Utility Mods/Stable/SCMobilityBlocks/Models/IDEA_Module.mwm b/Utility Mods/SCMobilityBlocks/Models/IDEA_Module.mwm similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Models/IDEA_Module.mwm rename to Utility Mods/SCMobilityBlocks/Models/IDEA_Module.mwm diff --git a/Utility Mods/Stable/SCMobilityBlocks/Models/IonHeavyCovered.mwm b/Utility Mods/SCMobilityBlocks/Models/IonHeavyCovered.mwm similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Models/IonHeavyCovered.mwm rename to Utility Mods/SCMobilityBlocks/Models/IonHeavyCovered.mwm diff --git a/Utility Mods/Stable/SCMobilityBlocks/Models/Underclock_Panel.mwm b/Utility Mods/SCMobilityBlocks/Models/Underclock_Panel.mwm similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Models/Underclock_Panel.mwm rename to Utility Mods/SCMobilityBlocks/Models/Underclock_Panel.mwm diff --git a/Utility Mods/Stable/SCMobilityBlocks/NewIcons/AWGFocusDrive.png b/Utility Mods/SCMobilityBlocks/NewIcons/AWGFocusDrive.png similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/NewIcons/AWGFocusDrive.png rename to Utility Mods/SCMobilityBlocks/NewIcons/AWGFocusDrive.png diff --git a/Utility Mods/Stable/SCMobilityBlocks/Textures/GUI/Icons/BlinkDriveIcon.dds b/Utility Mods/SCMobilityBlocks/Textures/GUI/Icons/BlinkDriveIcon.dds similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Textures/GUI/Icons/BlinkDriveIcon.dds rename to Utility Mods/SCMobilityBlocks/Textures/GUI/Icons/BlinkDriveIcon.dds diff --git a/Utility Mods/Stable/SCMobilityBlocks/Textures/GUI/Icons/Cubes/DampenerModule.dds b/Utility Mods/SCMobilityBlocks/Textures/GUI/Icons/Cubes/DampenerModule.dds similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Textures/GUI/Icons/Cubes/DampenerModule.dds rename to Utility Mods/SCMobilityBlocks/Textures/GUI/Icons/Cubes/DampenerModule.dds diff --git a/Utility Mods/Stable/SCMobilityBlocks/Textures/GUI/Icons/Cubes/SC_PowerControlSystem_L.dds b/Utility Mods/SCMobilityBlocks/Textures/GUI/Icons/Cubes/SC_PowerControlSystem_L.dds similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Textures/GUI/Icons/Cubes/SC_PowerControlSystem_L.dds rename to Utility Mods/SCMobilityBlocks/Textures/GUI/Icons/Cubes/SC_PowerControlSystem_L.dds diff --git a/Utility Mods/Stable/SCMobilityBlocks/Textures/Underclock_Panel.dds b/Utility Mods/SCMobilityBlocks/Textures/Underclock_Panel.dds similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/Textures/Underclock_Panel.dds rename to Utility Mods/SCMobilityBlocks/Textures/Underclock_Panel.dds diff --git a/Utility Mods/Stable/SCCleanDLCCategories/metadata.mod b/Utility Mods/SCMobilityBlocks/metadata.mod similarity index 100% rename from Utility Mods/Stable/SCCleanDLCCategories/metadata.mod rename to Utility Mods/SCMobilityBlocks/metadata.mod diff --git a/Utility Mods/Stable/SCMobilityBlocks/modinfo_main.sbmi b/Utility Mods/SCMobilityBlocks/modinfo_main.sbmi similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/modinfo_main.sbmi rename to Utility Mods/SCMobilityBlocks/modinfo_main.sbmi diff --git a/Utility Mods/Stable/SCMobilityBlocks/modinfo_stable.sbmi b/Utility Mods/SCMobilityBlocks/modinfo_stable.sbmi similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/modinfo_stable.sbmi rename to Utility Mods/SCMobilityBlocks/modinfo_stable.sbmi diff --git a/Utility Mods/Stable/SCPracticeAI/Data/EntityComponents.sbc b/Utility Mods/SCPracticeAI/Data/EntityComponents.sbc similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/Data/EntityComponents.sbc rename to Utility Mods/SCPracticeAI/Data/EntityComponents.sbc diff --git a/Utility Mods/Stable/SCPracticeAI/Data/Prefabs/BlackKnight8750AI_1.sbc b/Utility Mods/SCPracticeAI/Data/Prefabs/BlackKnight8750AI_1.sbc similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/Data/Prefabs/BlackKnight8750AI_1.sbc rename to Utility Mods/SCPracticeAI/Data/Prefabs/BlackKnight8750AI_1.sbc diff --git a/Utility Mods/Stable/SCPracticeAI/Data/Prefabs/BlackKnight8750AI_1.sbcB5 b/Utility Mods/SCPracticeAI/Data/Prefabs/BlackKnight8750AI_1.sbcB5 similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/Data/Prefabs/BlackKnight8750AI_1.sbcB5 rename to Utility Mods/SCPracticeAI/Data/Prefabs/BlackKnight8750AI_1.sbcB5 diff --git a/Utility Mods/Stable/SCPracticeAI/Data/Prefabs/Blood8750AI_1.sbc b/Utility Mods/SCPracticeAI/Data/Prefabs/Blood8750AI_1.sbc similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/Data/Prefabs/Blood8750AI_1.sbc rename to Utility Mods/SCPracticeAI/Data/Prefabs/Blood8750AI_1.sbc diff --git a/Utility Mods/Stable/SCPracticeAI/Data/Prefabs/Blood8750AI_1.sbcB5 b/Utility Mods/SCPracticeAI/Data/Prefabs/Blood8750AI_1.sbcB5 similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/Data/Prefabs/Blood8750AI_1.sbcB5 rename to Utility Mods/SCPracticeAI/Data/Prefabs/Blood8750AI_1.sbcB5 diff --git a/Utility Mods/Stable/SCPracticeAI/Data/Prefabs/Bugbear8750AI_1.sbc b/Utility Mods/SCPracticeAI/Data/Prefabs/Bugbear8750AI_1.sbc similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/Data/Prefabs/Bugbear8750AI_1.sbc rename to Utility Mods/SCPracticeAI/Data/Prefabs/Bugbear8750AI_1.sbc diff --git a/Utility Mods/Stable/SCPracticeAI/Data/Prefabs/Bugbear8750AI_1.sbcB5 b/Utility Mods/SCPracticeAI/Data/Prefabs/Bugbear8750AI_1.sbcB5 similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/Data/Prefabs/Bugbear8750AI_1.sbcB5 rename to Utility Mods/SCPracticeAI/Data/Prefabs/Bugbear8750AI_1.sbcB5 diff --git a/Utility Mods/Stable/SCPracticeAI/Data/Prefabs/Bullpup8750AI_1.sbc b/Utility Mods/SCPracticeAI/Data/Prefabs/Bullpup8750AI_1.sbc similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/Data/Prefabs/Bullpup8750AI_1.sbc rename to Utility Mods/SCPracticeAI/Data/Prefabs/Bullpup8750AI_1.sbc diff --git a/Utility Mods/Stable/SCPracticeAI/Data/Prefabs/Bullpup8750AI_1.sbcB5 b/Utility Mods/SCPracticeAI/Data/Prefabs/Bullpup8750AI_1.sbcB5 similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/Data/Prefabs/Bullpup8750AI_1.sbcB5 rename to Utility Mods/SCPracticeAI/Data/Prefabs/Bullpup8750AI_1.sbcB5 diff --git a/Utility Mods/Stable/SCPracticeAI/Data/Prefabs/Cougar8750AI_1.sbc b/Utility Mods/SCPracticeAI/Data/Prefabs/Cougar8750AI_1.sbc similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/Data/Prefabs/Cougar8750AI_1.sbc rename to Utility Mods/SCPracticeAI/Data/Prefabs/Cougar8750AI_1.sbc diff --git a/Utility Mods/Stable/SCPracticeAI/Data/Prefabs/Cougar8750AI_1.sbcB5 b/Utility Mods/SCPracticeAI/Data/Prefabs/Cougar8750AI_1.sbcB5 similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/Data/Prefabs/Cougar8750AI_1.sbcB5 rename to Utility Mods/SCPracticeAI/Data/Prefabs/Cougar8750AI_1.sbcB5 diff --git a/Utility Mods/Stable/SCPracticeAI/Data/Prefabs/GreenFrigate7000AI.sbc b/Utility Mods/SCPracticeAI/Data/Prefabs/GreenFrigate7000AI.sbc similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/Data/Prefabs/GreenFrigate7000AI.sbc rename to Utility Mods/SCPracticeAI/Data/Prefabs/GreenFrigate7000AI.sbc diff --git a/Utility Mods/Stable/SCPracticeAI/Data/Prefabs/GreenFrigate7000AI.sbcB5 b/Utility Mods/SCPracticeAI/Data/Prefabs/GreenFrigate7000AI.sbcB5 similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/Data/Prefabs/GreenFrigate7000AI.sbcB5 rename to Utility Mods/SCPracticeAI/Data/Prefabs/GreenFrigate7000AI.sbcB5 diff --git a/Utility Mods/Stable/SCPracticeAI/Data/Prefabs/Gunsled9000AI.sbc b/Utility Mods/SCPracticeAI/Data/Prefabs/Gunsled9000AI.sbc similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/Data/Prefabs/Gunsled9000AI.sbc rename to Utility Mods/SCPracticeAI/Data/Prefabs/Gunsled9000AI.sbc diff --git a/Utility Mods/Stable/SCPracticeAI/Data/Prefabs/Gunsled9000AI.sbcB5 b/Utility Mods/SCPracticeAI/Data/Prefabs/Gunsled9000AI.sbcB5 similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/Data/Prefabs/Gunsled9000AI.sbcB5 rename to Utility Mods/SCPracticeAI/Data/Prefabs/Gunsled9000AI.sbcB5 diff --git a/Utility Mods/Stable/SCPracticeAI/Data/Prefabs/Littler7000AI_2.sbc b/Utility Mods/SCPracticeAI/Data/Prefabs/Littler7000AI_2.sbc similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/Data/Prefabs/Littler7000AI_2.sbc rename to Utility Mods/SCPracticeAI/Data/Prefabs/Littler7000AI_2.sbc diff --git a/Utility Mods/Stable/SCPracticeAI/Data/Prefabs/Littler7000AI_2.sbcB5 b/Utility Mods/SCPracticeAI/Data/Prefabs/Littler7000AI_2.sbcB5 similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/Data/Prefabs/Littler7000AI_2.sbcB5 rename to Utility Mods/SCPracticeAI/Data/Prefabs/Littler7000AI_2.sbcB5 diff --git a/Utility Mods/Stable/SCPracticeAI/Data/Prefabs/NewCougar8750AI_1.sbc b/Utility Mods/SCPracticeAI/Data/Prefabs/NewCougar8750AI_1.sbc similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/Data/Prefabs/NewCougar8750AI_1.sbc rename to Utility Mods/SCPracticeAI/Data/Prefabs/NewCougar8750AI_1.sbc diff --git a/Utility Mods/Stable/SCPracticeAI/Data/Prefabs/NewCougar8750AI_1.sbcB5 b/Utility Mods/SCPracticeAI/Data/Prefabs/NewCougar8750AI_1.sbcB5 similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/Data/Prefabs/NewCougar8750AI_1.sbcB5 rename to Utility Mods/SCPracticeAI/Data/Prefabs/NewCougar8750AI_1.sbcB5 diff --git a/Utility Mods/Stable/SCPracticeAI/Data/Prefabs/RedDestroyer8000AI.sbc b/Utility Mods/SCPracticeAI/Data/Prefabs/RedDestroyer8000AI.sbc similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/Data/Prefabs/RedDestroyer8000AI.sbc rename to Utility Mods/SCPracticeAI/Data/Prefabs/RedDestroyer8000AI.sbc diff --git a/Utility Mods/Stable/SCPracticeAI/Data/Prefabs/RedDestroyer8000AI.sbcB5 b/Utility Mods/SCPracticeAI/Data/Prefabs/RedDestroyer8000AI.sbcB5 similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/Data/Prefabs/RedDestroyer8000AI.sbcB5 rename to Utility Mods/SCPracticeAI/Data/Prefabs/RedDestroyer8000AI.sbcB5 diff --git a/Utility Mods/Stable/SCPracticeAI/Data/Scripts/Spawners/Config.cs b/Utility Mods/SCPracticeAI/Data/Scripts/Spawners/Config.cs similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/Data/Scripts/Spawners/Config.cs rename to Utility Mods/SCPracticeAI/Data/Scripts/Spawners/Config.cs diff --git a/Utility Mods/Stable/SCPracticeAI/Data/Scripts/Spawners/PracticeAINetworking.cs b/Utility Mods/SCPracticeAI/Data/Scripts/Spawners/PracticeAINetworking.cs similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/Data/Scripts/Spawners/PracticeAINetworking.cs rename to Utility Mods/SCPracticeAI/Data/Scripts/Spawners/PracticeAINetworking.cs diff --git a/Utility Mods/Stable/SCPracticeAI/Data/Scripts/Spawners/PrefabMasterList.cs b/Utility Mods/SCPracticeAI/Data/Scripts/Spawners/PrefabMasterList.cs similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/Data/Scripts/Spawners/PrefabMasterList.cs rename to Utility Mods/SCPracticeAI/Data/Scripts/Spawners/PrefabMasterList.cs diff --git a/Utility Mods/Stable/SCPracticeAI/Data/Scripts/Spawners/battlespawner.cs b/Utility Mods/SCPracticeAI/Data/Scripts/Spawners/battlespawner.cs similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/Data/Scripts/Spawners/battlespawner.cs rename to Utility Mods/SCPracticeAI/Data/Scripts/Spawners/battlespawner.cs diff --git a/Utility Mods/Stable/SCPracticeAI/Data/Scripts/Spawners/oneteamspawner.cs b/Utility Mods/SCPracticeAI/Data/Scripts/Spawners/oneteamspawner.cs similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/Data/Scripts/Spawners/oneteamspawner.cs rename to Utility Mods/SCPracticeAI/Data/Scripts/Spawners/oneteamspawner.cs diff --git a/Utility Mods/Stable/SCPracticeAI/Data/Scripts/Spawners/practicespawner.cs b/Utility Mods/SCPracticeAI/Data/Scripts/Spawners/practicespawner.cs similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/Data/Scripts/Spawners/practicespawner.cs rename to Utility Mods/SCPracticeAI/Data/Scripts/Spawners/practicespawner.cs diff --git a/Utility Mods/Stable/SCPracticeAI/Data/Scripts/Spawners/thescriptthatfixeskeensfactionbullshit.cs b/Utility Mods/SCPracticeAI/Data/Scripts/Spawners/thescriptthatfixeskeensfactionbullshit.cs similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/Data/Scripts/Spawners/thescriptthatfixeskeensfactionbullshit.cs rename to Utility Mods/SCPracticeAI/Data/Scripts/Spawners/thescriptthatfixeskeensfactionbullshit.cs diff --git a/Utility Mods/Stable/SCPracticeAI/Data/Scripts/concatrecursivelyandminify.bat b/Utility Mods/SCPracticeAI/Data/Scripts/concatrecursivelyandminify.bat similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/Data/Scripts/concatrecursivelyandminify.bat rename to Utility Mods/SCPracticeAI/Data/Scripts/concatrecursivelyandminify.bat diff --git a/Utility Mods/Stable/SCPracticeAI/copy to DS and client.bat b/Utility Mods/SCPracticeAI/copy to DS and client.bat similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/copy to DS and client.bat rename to Utility Mods/SCPracticeAI/copy to DS and client.bat diff --git a/Utility Mods/Stable/SCCleanModCategories/metadata.mod b/Utility Mods/SCPracticeAI/metadata.mod similarity index 100% rename from Utility Mods/Stable/SCCleanModCategories/metadata.mod rename to Utility Mods/SCPracticeAI/metadata.mod diff --git a/Utility Mods/Stable/SCPracticeAI/modinfo_main.sbmi b/Utility Mods/SCPracticeAI/modinfo_main.sbmi similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/modinfo_main.sbmi rename to Utility Mods/SCPracticeAI/modinfo_main.sbmi diff --git a/Utility Mods/Stable/SCPracticeAI/modinfo_stable.sbmi b/Utility Mods/SCPracticeAI/modinfo_stable.sbmi similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/modinfo_stable.sbmi rename to Utility Mods/SCPracticeAI/modinfo_stable.sbmi diff --git a/Utility Mods/Stable/SCPracticeAI/wakeupsteam b/Utility Mods/SCPracticeAI/wakeupsteam similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/wakeupsteam rename to Utility Mods/SCPracticeAI/wakeupsteam diff --git a/Utility Mods/Stable/SCRelativeTopSpeed/Data/Scripts/RTS/RelativeTopSpeed.cs b/Utility Mods/SCRelativeTopSpeed/Data/Scripts/RTS/RelativeTopSpeed.cs similarity index 100% rename from Utility Mods/Stable/SCRelativeTopSpeed/Data/Scripts/RTS/RelativeTopSpeed.cs rename to Utility Mods/SCRelativeTopSpeed/Data/Scripts/RTS/RelativeTopSpeed.cs diff --git a/Utility Mods/Stable/SCRelativeTopSpeed/Data/Scripts/RTS/RtsApi.cs b/Utility Mods/SCRelativeTopSpeed/Data/Scripts/RTS/RtsApi.cs similarity index 100% rename from Utility Mods/Stable/SCRelativeTopSpeed/Data/Scripts/RTS/RtsApi.cs rename to Utility Mods/SCRelativeTopSpeed/Data/Scripts/RTS/RtsApi.cs diff --git a/Utility Mods/Stable/SCRelativeTopSpeed/Data/Scripts/RTS/RtsApiBackend.cs b/Utility Mods/SCRelativeTopSpeed/Data/Scripts/RTS/RtsApiBackend.cs similarity index 100% rename from Utility Mods/Stable/SCRelativeTopSpeed/Data/Scripts/RTS/RtsApiBackend.cs rename to Utility Mods/SCRelativeTopSpeed/Data/Scripts/RTS/RtsApiBackend.cs diff --git a/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/SENetworkAPI/Client.cs b/Utility Mods/SCRelativeTopSpeed/Data/Scripts/RTS/SENetworkAPI/Client.cs similarity index 100% rename from Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/SENetworkAPI/Client.cs rename to Utility Mods/SCRelativeTopSpeed/Data/Scripts/RTS/SENetworkAPI/Client.cs diff --git a/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/SENetworkAPI/Command.cs b/Utility Mods/SCRelativeTopSpeed/Data/Scripts/RTS/SENetworkAPI/Command.cs similarity index 100% rename from Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/SENetworkAPI/Command.cs rename to Utility Mods/SCRelativeTopSpeed/Data/Scripts/RTS/SENetworkAPI/Command.cs diff --git a/Utility Mods/Stable/SCRelativeTopSpeed/Data/Scripts/RTS/SENetworkAPI/NetSync.cs b/Utility Mods/SCRelativeTopSpeed/Data/Scripts/RTS/SENetworkAPI/NetSync.cs similarity index 100% rename from Utility Mods/Stable/SCRelativeTopSpeed/Data/Scripts/RTS/SENetworkAPI/NetSync.cs rename to Utility Mods/SCRelativeTopSpeed/Data/Scripts/RTS/SENetworkAPI/NetSync.cs diff --git a/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/SENetworkAPI/Network.cs b/Utility Mods/SCRelativeTopSpeed/Data/Scripts/RTS/SENetworkAPI/Network.cs similarity index 100% rename from Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/SENetworkAPI/Network.cs rename to Utility Mods/SCRelativeTopSpeed/Data/Scripts/RTS/SENetworkAPI/Network.cs diff --git a/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/SENetworkAPI/Server.cs b/Utility Mods/SCRelativeTopSpeed/Data/Scripts/RTS/SENetworkAPI/Server.cs similarity index 100% rename from Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/SENetworkAPI/Server.cs rename to Utility Mods/SCRelativeTopSpeed/Data/Scripts/RTS/SENetworkAPI/Server.cs diff --git a/Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/SENetworkAPI/SessionTools.cs b/Utility Mods/SCRelativeTopSpeed/Data/Scripts/RTS/SENetworkAPI/SessionTools.cs similarity index 100% rename from Gamemode Mods/Stable/SCKoth/Data/Scripts/koth/SENetworkAPI/SessionTools.cs rename to Utility Mods/SCRelativeTopSpeed/Data/Scripts/RTS/SENetworkAPI/SessionTools.cs diff --git a/Utility Mods/Stable/SCRelativeTopSpeed/Data/Scripts/RTS/Settings.cs b/Utility Mods/SCRelativeTopSpeed/Data/Scripts/RTS/Settings.cs similarity index 100% rename from Utility Mods/Stable/SCRelativeTopSpeed/Data/Scripts/RTS/Settings.cs rename to Utility Mods/SCRelativeTopSpeed/Data/Scripts/RTS/Settings.cs diff --git a/Utility Mods/Stable/SCDefenseBlocks/metadata.mod b/Utility Mods/SCRelativeTopSpeed/metadata.mod similarity index 100% rename from Utility Mods/Stable/SCDefenseBlocks/metadata.mod rename to Utility Mods/SCRelativeTopSpeed/metadata.mod diff --git a/Utility Mods/Stable/SCRelativeTopSpeed/modinfo_main.sbmi b/Utility Mods/SCRelativeTopSpeed/modinfo_main.sbmi similarity index 100% rename from Utility Mods/Stable/SCRelativeTopSpeed/modinfo_main.sbmi rename to Utility Mods/SCRelativeTopSpeed/modinfo_main.sbmi diff --git a/Utility Mods/Stable/SCRelativeTopSpeed/modinfo_stable.sbmi b/Utility Mods/SCRelativeTopSpeed/modinfo_stable.sbmi similarity index 100% rename from Utility Mods/Stable/SCRelativeTopSpeed/modinfo_stable.sbmi rename to Utility Mods/SCRelativeTopSpeed/modinfo_stable.sbmi diff --git a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/BlockRestrictions.cs b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/BlockRestrictions.cs similarity index 95% rename from Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/BlockRestrictions.cs rename to Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/BlockRestrictions.cs index b85039b5a..79141055e 100644 --- a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/BlockRestrictions.cs +++ b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/BlockRestrictions.cs @@ -36,12 +36,12 @@ using IMyMotorStator = Sandbox.ModAPI.IMyMotorStator; using IMyPistonBase = Sandbox.ModAPI.IMyPistonBase; using System.Runtime.InteropServices; -using BlockRestrictions.Settings; +using SC_BlockRestrictions.Settings; -namespace BlockRestrictions +namespace SC_BlockRestrictions { [MySessionComponentDescriptor(MyUpdateOrder.AfterSimulation)] - public class BlockRestrictions : MySessionComponentBase + public class SC_BlockRestrictions : MySessionComponentBase { HashSet _ignoreTypes = new HashSet() { @@ -205,7 +205,7 @@ void Init() BlockTypeDict[typeId] = cubeDef; } - ModSaveData = Config.ReadFileFromWorldStorage("BlockRestrictions.cfg", typeof(BlockSaveData), Logger) ?? new BlockSaveData(); + ModSaveData = Config.ReadFileFromWorldStorage("SC_BlockRestrictions.cfg", typeof(BlockSaveData), Logger) ?? new BlockSaveData(); PlayerData = Config.ReadFileFromWorldStorage("PlayerData.cfg", typeof(PlayerSaveData), Logger) ?? new PlayerSaveData(); if (PlayerData.PlayerSettings == null) @@ -322,7 +322,7 @@ void Init() Logger.AddLine($"\nBeforeStart() - Checking Entity Components"); foreach (var def in MyDefinitionManager.Static.GetEntityComponentDefinitions()) { - if (def.Id.SubtypeName.StartsWith("BlockRestrictions")) + if (def.Id.SubtypeName.StartsWith("SC_BlockRestrictions")) { Logger.AddLine($"-> Found EC: Subtype = {def.Id.SubtypeName}"); _debug.Clear(); @@ -441,7 +441,7 @@ public void SaveConfig() { UpdateAllPlayerData(); - Config.WriteFileToWorldStorage("BlockRestrictions.cfg", typeof(BlockSaveData), ModSaveData, Logger); + Config.WriteFileToWorldStorage("SC_BlockRestrictions.cfg", typeof(BlockSaveData), ModSaveData, Logger); Config.WriteFileToWorldStorage("PlayerData.cfg", typeof(PlayerSaveData), PlayerData, Logger); } @@ -537,8 +537,8 @@ public override void BeforeStart() IsDedicatedServer = MyAPIGateway.Utilities.IsDedicated; MyAPIGateway.Utilities.MessageEntered += OnMessageEntered; - Logger = new Logger("BlockRestrictions.log", MyAPIGateway.Utilities.IsDedicated); - Network = new Networking(2053202808, 02808, this, _debug); + Logger = new Logger("SC_BlockRestrictions.log", MyAPIGateway.Utilities.IsDedicated); + Network = new Networking(3344961488, 61488, this, _debug); Network.Register(); foreach (var mod in MyAPIGateway.Session.Mods) @@ -805,7 +805,7 @@ public override void UpdateAfterSimulation() catch (Exception e) { Logger?.Log($"Error in UpdateAfterSim: {e.Message}\n{e.StackTrace}", MessageType.ERROR); - ShowMessage($"An unhandled exception has occurred. Please send the 'BlockRestrictions.log' file to jTurp for analysis"); + ShowMessage($"An unhandled exception has occurred. Please send the 'SC_BlockRestrictions.log' file to jTurp for analysis"); } base.UpdateAfterSimulation(); @@ -837,7 +837,7 @@ void CheckToolbarLocal(bool force = false) try { if (_modPacket == null) - _modPacket = new ModPacket(2053202808, _restrictedDefinitions.ToList()); + _modPacket = new ModPacket(3344961488, _restrictedDefinitions.ToList()); Network.SendToMod(2307665159, _modPacket); } diff --git a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Entities/Entity.cs b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Entities/Entity.cs similarity index 96% rename from Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Entities/Entity.cs rename to Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Entities/Entity.cs index 8bf04313f..d66e8a131 100644 --- a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Entities/Entity.cs +++ b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Entities/Entity.cs @@ -36,7 +36,7 @@ using IMyMotorStator = Sandbox.ModAPI.IMyMotorStator; using IMyPistonBase = Sandbox.ModAPI.IMyPistonBase; -namespace BlockRestrictions +namespace SC_BlockRestrictions { public class Entity { @@ -51,7 +51,7 @@ public class Entity public bool IsStatic => GridCollection?.IsStatic ?? false; public bool MarkedForClose => !(GridCollection?.CubeGridHash?.Count > 0); - BlockRestrictions _mod; + SC_BlockRestrictions _mod; Dictionary _gridBlockDict; Dictionary _gridGroupDict; HashSet _gridsToAdd, _gridHash; @@ -61,7 +61,7 @@ public class Entity StringBuilder _debug; Logger _logger; - public Entity(MyCubeGrid grid, List boxList, HashSet gridHash, HashSet gridAddHash, BlockRestrictions mod, StringBuilder debug = null, Logger logger = null) + public Entity(MyCubeGrid grid, List boxList, HashSet gridHash, HashSet gridAddHash, SC_BlockRestrictions mod, StringBuilder debug = null, Logger logger = null) { _mod = mod; _boxList = boxList; diff --git a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Entities/GridCollection.cs b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Entities/GridCollection.cs similarity index 93% rename from Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Entities/GridCollection.cs rename to Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Entities/GridCollection.cs index ef016ddd4..84d8fa7b5 100644 --- a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Entities/GridCollection.cs +++ b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Entities/GridCollection.cs @@ -21,7 +21,7 @@ using CollisionLayers = Sandbox.Engine.Physics.MyPhysics.CollisionLayers; using Sandbox.Definitions; -namespace BlockRestrictions +namespace SC_BlockRestrictions { public class GridCollection { diff --git a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Networking/ModPacket.cs b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Networking/ModPacket.cs similarity index 88% rename from Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Networking/ModPacket.cs rename to Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Networking/ModPacket.cs index d5657a520..38269da83 100644 --- a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Networking/ModPacket.cs +++ b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Networking/ModPacket.cs @@ -7,7 +7,7 @@ using VRage.Game; using VRage.ObjectBuilders; -namespace BlockRestrictions +namespace SC_BlockRestrictions { public class ModPacket { diff --git a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Networking/Networking.cs b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Networking/Networking.cs similarity index 91% rename from Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Networking/Networking.cs rename to Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Networking/Networking.cs index a24ae0a6a..12da8fd9f 100644 --- a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Networking/Networking.cs +++ b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Networking/Networking.cs @@ -7,7 +7,7 @@ using VRage.ObjectBuilders; using VRage.Utils; -namespace BlockRestrictions +namespace SC_BlockRestrictions { public class Networking { @@ -15,9 +15,9 @@ public class Networking public readonly long PublishedId; List _tempPlayers; StringBuilder _debugSB; - BlockRestrictions _mod; + SC_BlockRestrictions _mod; - public Networking(long publishedId, ushort networkId, BlockRestrictions mod, StringBuilder sb) + public Networking(long publishedId, ushort networkId, SC_BlockRestrictions mod, StringBuilder sb) { PublishedId = publishedId; NetworkId = networkId; @@ -118,7 +118,7 @@ private void ReceivedPacket(ushort handlerId, byte[] rawData, ulong senderId, bo _mod?.Logger?.Log($"Error in ReceivedPacket:\n{e.Message}\n{e.StackTrace}", MessageType.ERROR); if (MyAPIGateway.Session?.LocalHumanPlayer != null) - MyAPIGateway.Utilities.ShowNotification($"[BlockRestrictions] ERROR: {GetType().FullName} -- {e.Message} | Send BlockRestrictions.log to mod author", 10000, MyFontEnum.Red); + MyAPIGateway.Utilities.ShowNotification($"[SC_BlockRestrictions] ERROR: {GetType().FullName} -- {e.Message} | Send SC_BlockRestrictions.log to mod author", 10000, MyFontEnum.Red); } } diff --git a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Networking/Packet.cs b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Networking/Packet.cs similarity index 94% rename from Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Networking/Packet.cs rename to Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Networking/Packet.cs index 0094b8772..49b9699a1 100644 --- a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Networking/Packet.cs +++ b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Networking/Packet.cs @@ -8,7 +8,7 @@ using Sandbox.ModAPI; using VRage.Utils; -namespace BlockRestrictions +namespace SC_BlockRestrictions { [ProtoInclude(1000, typeof(BlockSaveData))] [ProtoInclude(2000, typeof(SerializableBlockSetting))] diff --git a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/BlockSaveData.cs b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/BlockSaveData.cs similarity index 92% rename from Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/BlockSaveData.cs rename to Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/BlockSaveData.cs index e46614355..553e6f8c6 100644 --- a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/BlockSaveData.cs +++ b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/BlockSaveData.cs @@ -7,7 +7,7 @@ using ProtoBuf; using System.Xml.Serialization; -namespace BlockRestrictions +namespace SC_BlockRestrictions { [ProtoContract] public class BlockSaveData diff --git a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/BlockSetting.cs b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/BlockSetting.cs similarity index 94% rename from Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/BlockSetting.cs rename to Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/BlockSetting.cs index bec446541..522d316c4 100644 --- a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/BlockSetting.cs +++ b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/BlockSetting.cs @@ -6,7 +6,7 @@ using VRage.Game; using VRage.ObjectBuilders; -namespace BlockRestrictions +namespace SC_BlockRestrictions { public class BlockSetting : SettingBase { diff --git a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/DefaultSettings.cs b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/DefaultSettings.cs similarity index 88% rename from Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/DefaultSettings.cs rename to Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/DefaultSettings.cs index 6e938ea1d..7a2bc129f 100644 --- a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/DefaultSettings.cs +++ b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/DefaultSettings.cs @@ -5,7 +5,7 @@ using System.Threading.Tasks; using System.Xml.Serialization; -namespace BlockRestrictions.Settings +namespace SC_BlockRestrictions.Settings { public class DefaultSettings { diff --git a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/GroupSetting.cs b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/GroupSetting.cs similarity index 95% rename from Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/GroupSetting.cs rename to Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/GroupSetting.cs index 58a50fb30..4aed727b7 100644 --- a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/GroupSetting.cs +++ b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/GroupSetting.cs @@ -6,7 +6,7 @@ using VRage.Game; -namespace BlockRestrictions +namespace SC_BlockRestrictions { public class GroupSetting : SettingBase { diff --git a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/PlayerSaveData.cs b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/PlayerSaveData.cs similarity index 89% rename from Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/PlayerSaveData.cs rename to Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/PlayerSaveData.cs index 70bbbdacf..770159a3a 100644 --- a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/PlayerSaveData.cs +++ b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/PlayerSaveData.cs @@ -4,7 +4,7 @@ using System.Text; using System.Threading.Tasks; -namespace BlockRestrictions.Settings +namespace SC_BlockRestrictions.Settings { public class PlayerData { diff --git a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/SerializableBlockSetting.cs b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/SerializableBlockSetting.cs similarity index 95% rename from Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/SerializableBlockSetting.cs rename to Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/SerializableBlockSetting.cs index aded5535c..0aeddb35c 100644 --- a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/SerializableBlockSetting.cs +++ b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/SerializableBlockSetting.cs @@ -6,7 +6,7 @@ using ProtoBuf; -namespace BlockRestrictions +namespace SC_BlockRestrictions { [ProtoContract] diff --git a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/SerializableGroupSetting.cs b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/SerializableGroupSetting.cs similarity index 95% rename from Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/SerializableGroupSetting.cs rename to Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/SerializableGroupSetting.cs index 22762ad6d..e53d38849 100644 --- a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/SerializableGroupSetting.cs +++ b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/SerializableGroupSetting.cs @@ -10,7 +10,7 @@ using VRage.Game; using VRage.ObjectBuilders; -namespace BlockRestrictions +namespace SC_BlockRestrictions { [ProtoContract] public class SerialId diff --git a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/SettingBase.cs b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/SettingBase.cs similarity index 90% rename from Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/SettingBase.cs rename to Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/SettingBase.cs index ed8e71bf3..f37bf0f90 100644 --- a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/SettingBase.cs +++ b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Settings/SettingBase.cs @@ -4,7 +4,7 @@ using System.Text; using System.Threading.Tasks; -namespace BlockRestrictions +namespace SC_BlockRestrictions { public class SettingBase { diff --git a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Support/Config.cs b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Support/Config.cs similarity index 81% rename from Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Support/Config.cs rename to Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Support/Config.cs index 00037f78b..5493733e4 100644 --- a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Support/Config.cs +++ b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Support/Config.cs @@ -8,7 +8,7 @@ using VRage.Utils; -namespace BlockRestrictions +namespace SC_BlockRestrictions { public static class Config { @@ -27,7 +27,7 @@ public static T ReadFileFromLocalStorage(string filename, Type type, Logger l } catch (Exception e) { - MyLog.Default.WriteLineAndConsole($"Error in BlockRestrictions.Config.ReadFileFromLocalStorage: {e.Message}\n{e.StackTrace}"); + MyLog.Default.WriteLineAndConsole($"Error in SC_BlockRestrictions.Config.ReadFileFromLocalStorage: {e.Message}\n{e.StackTrace}"); log?.LogAll($"Error reading the file '{filename}' from local storage\n{e.Message}\n\n{e.StackTrace}", MessageType.ERROR); return default(T); } @@ -48,7 +48,7 @@ public static T ReadFileFromWorldStorage(string filename, Type type, Logger l } catch (Exception e) { - MyLog.Default.WriteLineAndConsole($"Error in BlockRestrictions.Config.ReadFileFromWorldStorage: {e.Message}\n{e.StackTrace}"); + MyLog.Default.WriteLineAndConsole($"Error in SC_BlockRestrictions.Config.ReadFileFromWorldStorage: {e.Message}\n{e.StackTrace}"); log?.LogAll($"Error reading the file '{filename}' from world storage\n{e.Message}\n\n{e.StackTrace}", MessageType.ERROR); return default(T); } @@ -70,7 +70,7 @@ public static void WriteFileToWorldStorage(string filename, Type type, T data } catch (Exception e) { - MyLog.Default.WriteLineAndConsole($"Error in BlockRestrictions.Config.WriteFileToWorldStorage: {e.Message}\n{e.StackTrace}"); + MyLog.Default.WriteLineAndConsole($"Error in SC_BlockRestrictions.Config.WriteFileToWorldStorage: {e.Message}\n{e.StackTrace}"); log?.LogAll($"Error writing the file '{filename}' in world storage\n{e.Message}\n\n{e.StackTrace}", MessageType.ERROR); } } @@ -90,7 +90,7 @@ public static void WriteFileToLocalStorage(string filename, Type type, T data } catch (Exception e) { - MyLog.Default.WriteLineAndConsole($"Error in BlockRestrictions.Config.WriteFileToLocalStorage: {e.Message}\n{e.StackTrace}"); + MyLog.Default.WriteLineAndConsole($"Error in SC_BlockRestrictions.Config.WriteFileToLocalStorage: {e.Message}\n{e.StackTrace}"); log?.LogAll($"Error writing the file '{filename}' in local storage\n{e.Message}\n\n{e.StackTrace}", MessageType.ERROR); } } diff --git a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Support/Logger.cs b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Support/Logger.cs similarity index 95% rename from Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Support/Logger.cs rename to Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Support/Logger.cs index 877ca31ec..2fa6319f0 100644 --- a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Support/Logger.cs +++ b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Support/Logger.cs @@ -9,7 +9,7 @@ using VRage.Game.ModAPI.Ingame.Utilities; -namespace BlockRestrictions +namespace SC_BlockRestrictions { public class Logger { diff --git a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Support/Utilities.cs b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Support/Utilities.cs similarity index 92% rename from Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Support/Utilities.cs rename to Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Support/Utilities.cs index a49999773..2426ef2ec 100644 --- a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Support/Utilities.cs +++ b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/Support/Utilities.cs @@ -11,7 +11,7 @@ using VRage.Game.ModAPI; using VRage.Utils; -namespace BlockRestrictions +namespace SC_BlockRestrictions { public static class Utilities { @@ -97,7 +97,7 @@ public static void ReturnComponentsToPlayer(Dictionary missingComps catch(Exception e) { sb?.Append($"ERROR in ReturnCompsToPlayer:\n{e.Message}\n{e.StackTrace}\n"); - MyLog.Default.WriteLineAndConsole($"ERROR in BlockRestrictions.RefundComponents! Unable to refund components to {block.OwnerId}:\n{e.Message}\n{e.StackTrace}"); + MyLog.Default.WriteLineAndConsole($"ERROR in SC_BlockRestrictions.RefundComponents! Unable to refund components to {block.OwnerId}:\n{e.Message}\n{e.StackTrace}"); } } } diff --git a/Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/info.txt b/Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/info.txt similarity index 100% rename from Utility Mods/Stable/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/info.txt rename to Utility Mods/SC_BlockRestrictions/Data/Scripts/BlockRestrictions/info.txt diff --git a/Weapon Mods/Stable/Starcore Homeworld Pack/metadata.mod b/Utility Mods/SC_BlockRestrictions/metadata.mod similarity index 100% rename from Weapon Mods/Stable/Starcore Homeworld Pack/metadata.mod rename to Utility Mods/SC_BlockRestrictions/metadata.mod diff --git a/Utility Mods/Stable/SC_BlockRestrictions/modinfo_main.sbmi b/Utility Mods/SC_BlockRestrictions/modinfo_main.sbmi similarity index 100% rename from Utility Mods/Stable/SC_BlockRestrictions/modinfo_main.sbmi rename to Utility Mods/SC_BlockRestrictions/modinfo_main.sbmi diff --git a/Utility Mods/Stable/SC_BlockRestrictions/modinfo_stable.sbmi b/Utility Mods/SC_BlockRestrictions/modinfo_stable.sbmi similarity index 100% rename from Utility Mods/Stable/SC_BlockRestrictions/modinfo_stable.sbmi rename to Utility Mods/SC_BlockRestrictions/modinfo_stable.sbmi diff --git a/Utility Mods/Stable/SC_BlockRestrictions/thumb.png b/Utility Mods/SC_BlockRestrictions/thumb.png similarity index 100% rename from Utility Mods/Stable/SC_BlockRestrictions/thumb.png rename to Utility Mods/SC_BlockRestrictions/thumb.png diff --git a/Utility Mods/Stable/SC_HitSounds/Transferred.txt b/Utility Mods/SC_HitSounds/Transferred.txt similarity index 100% rename from Utility Mods/Stable/SC_HitSounds/Transferred.txt rename to Utility Mods/SC_HitSounds/Transferred.txt diff --git a/Utility Mods/Stable/SC_KillCounter/Data/Scripts/Kill Feed/Config.cs b/Utility Mods/SC_KillCounter/Data/Scripts/Kill Feed/Config.cs similarity index 100% rename from Utility Mods/Stable/SC_KillCounter/Data/Scripts/Kill Feed/Config.cs rename to Utility Mods/SC_KillCounter/Data/Scripts/Kill Feed/Config.cs diff --git a/Utility Mods/Stable/SC_KillCounter/Data/Scripts/Kill Feed/Core.cs b/Utility Mods/SC_KillCounter/Data/Scripts/Kill Feed/Core.cs similarity index 100% rename from Utility Mods/Stable/SC_KillCounter/Data/Scripts/Kill Feed/Core.cs rename to Utility Mods/SC_KillCounter/Data/Scripts/Kill Feed/Core.cs diff --git a/Utility Mods/Stable/SC_KillCounter/Data/Scripts/Kill Feed/Logging.cs b/Utility Mods/SC_KillCounter/Data/Scripts/Kill Feed/Logging.cs similarity index 100% rename from Utility Mods/Stable/SC_KillCounter/Data/Scripts/Kill Feed/Logging.cs rename to Utility Mods/SC_KillCounter/Data/Scripts/Kill Feed/Logging.cs diff --git a/Utility Mods/Stable/SC_KillCounter/Data/Scripts/Kill Feed/MessageData.cs b/Utility Mods/SC_KillCounter/Data/Scripts/Kill Feed/MessageData.cs similarity index 100% rename from Utility Mods/Stable/SC_KillCounter/Data/Scripts/Kill Feed/MessageData.cs rename to Utility Mods/SC_KillCounter/Data/Scripts/Kill Feed/MessageData.cs diff --git a/Utility Mods/Stable/SC_KillCounter/Data/Scripts/Kill Feed/Utilities.cs b/Utility Mods/SC_KillCounter/Data/Scripts/Kill Feed/Utilities.cs similarity index 100% rename from Utility Mods/Stable/SC_KillCounter/Data/Scripts/Kill Feed/Utilities.cs rename to Utility Mods/SC_KillCounter/Data/Scripts/Kill Feed/Utilities.cs diff --git a/Utility Mods/Stable/SC_KillCounter/Data/Scripts/Kill Feed/XmlOutput.cs b/Utility Mods/SC_KillCounter/Data/Scripts/Kill Feed/XmlOutput.cs similarity index 100% rename from Utility Mods/Stable/SC_KillCounter/Data/Scripts/Kill Feed/XmlOutput.cs rename to Utility Mods/SC_KillCounter/Data/Scripts/Kill Feed/XmlOutput.cs diff --git a/Utility Mods/Stable/SCEntityCover/metadata.mod b/Utility Mods/SC_KillCounter/metadata.mod similarity index 100% rename from Utility Mods/Stable/SCEntityCover/metadata.mod rename to Utility Mods/SC_KillCounter/metadata.mod diff --git a/Utility Mods/Stable/SC_KillCounter/modinfo_main.sbmi b/Utility Mods/SC_KillCounter/modinfo_main.sbmi similarity index 100% rename from Utility Mods/Stable/SC_KillCounter/modinfo_main.sbmi rename to Utility Mods/SC_KillCounter/modinfo_main.sbmi diff --git a/Utility Mods/Stable/SC_KillCounter/modinfo_stable.sbmi b/Utility Mods/SC_KillCounter/modinfo_stable.sbmi similarity index 100% rename from Utility Mods/Stable/SC_KillCounter/modinfo_stable.sbmi rename to Utility Mods/SC_KillCounter/modinfo_stable.sbmi diff --git a/Utility Mods/Stable/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/RelativeTopSpeed.cs b/Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/RelativeTopSpeed.cs similarity index 98% rename from Utility Mods/Stable/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/RelativeTopSpeed.cs rename to Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/RelativeTopSpeed.cs index 5b4555a0b..7452bec29 100644 --- a/Utility Mods/Stable/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/RelativeTopSpeed.cs +++ b/Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/RelativeTopSpeed.cs @@ -95,14 +95,21 @@ private void SettingChanged(Settings o, Settings n, ulong sender) n.CalculateCurve(); Settings.Instance = n; SettingsChanged?.Invoke(n); - } + } protected override void UnloadData() { MyAPIGateway.Entities.OnEntityAdd -= AddGrid; MyAPIGateway.Entities.OnEntityRemove -= RemoveGrid; - RtsApiBackend.Close(); + RtsApiBackend.Close(); // Ensure the API is closed + + if (MyAPIGateway.Session != null) + { + // Unload the RTS API + var rtsApi = new RtsApi(); + rtsApi.Unload(); + } } private void AddGrid(IMyEntity ent) diff --git a/Utility Mods/Stable/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/RtsApi.cs b/Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/RtsApi.cs similarity index 92% rename from Utility Mods/Stable/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/RtsApi.cs rename to Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/RtsApi.cs index dbb091224..a00308b20 100644 --- a/Utility Mods/Stable/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/RtsApi.cs +++ b/Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/RtsApi.cs @@ -1,123 +1,126 @@ -using Sandbox.ModAPI; -using System; -using System.Collections.Generic; -using VRage.Game.ModAPI; -using VRage.Utils; - -namespace RelativeTopSpeedGV -{ - public class RtsApi - { - private const long ChannelId = 2772681332; - public bool IsReady { get; private set; } - - private Action ReadyCallback; - - private bool isRegistered = false; - - public void Load(Action readyCallback = null) - { - if (isRegistered) - throw new Exception($"{GetType().Name}.Load() should not be called multiple times!"); - - isRegistered = true; - ReadyCallback = readyCallback; - MyAPIGateway.Utilities.RegisterMessageHandler(ChannelId, HandleMessage); - MyAPIGateway.Utilities.SendModMessage(ChannelId, "ApiEndpointRequest"); - } - - public void Unload() - { - MyAPIGateway.Utilities.UnregisterMessageHandler(ChannelId, HandleMessage); - IsReady = false; - isRegistered = false; - } - - private void HandleMessage(object obj) - { - if (obj is string) // the sent "ApiEndpointRequest" will also be received here, explicitly ignoring that - return; - - var dict = obj as IReadOnlyDictionary; - - if (dict == null) - return; - - AssignMethod(dict, "GetCruiseSpeed", ref _GetCruiseSpeed); - AssignMethod(dict, "GetMaxSpeed", ref _GetMaxSpeed); - AssignMethod(dict, "GetBoost", ref _GetBoost); - AssignMethod(dict, "GetAcceleration", ref _GetAcceleration); - AssignMethod(dict, "GetAccelerationByDirection", ref _GetAccelerationByDirection); - AssignMethod(dict, "GetNegativeInfluence", ref _GetNegativeInfluence); - AssignMethod(dict, "GetReducedAngularSpeed", ref _GetReducedAngularSpeed); - - IsReady = true; - ReadyCallback?.Invoke(); - } - - private void AssignMethod(IReadOnlyDictionary delegates, string name, ref T field) where T : class - { - if (delegates == null) - { - field = null; - return; - } - - Delegate del; - if (!delegates.TryGetValue(name, out del)) - throw new Exception($"{GetType().Name} :: Couldn't find {name} delegate of type {typeof(T)}"); - - field = del as T; - - if (field == null) - throw new Exception( - $"{GetType().Name} :: Delegate {name} is not type {typeof(T)}, instead it's: {del.GetType()}"); - } - - /// - /// Returns the cruising speed of the grid. - /// - public float GetCruiseSpeed(IMyCubeGrid grid) => _GetCruiseSpeed.Invoke(grid); - private Func _GetCruiseSpeed; - - /// - /// Gets the maximum possible speed (cruise speed + max boost) - /// - public float GetMaxSpeed(IMyCubeGrid grid) => _GetMaxSpeed.Invoke(grid); - private Func _GetMaxSpeed; - - /// - /// Returns 4 values: forward boost, min, average, max - /// - public float[] GetBoost(IMyCubeGrid grid) => _GetBoost.Invoke(grid); - private Func _GetBoost; - - /// - /// Returns 4 values: forward accel, min, average, max - /// - public float[] GetAcceleration(IMyCubeGrid grid) => _GetAcceleration.Invoke(grid); - private Func _GetAcceleration; - - /// - /// Uses Base6Directions.Direction - /// forward = reverse accel - /// backward = forward accel - /// left = right accel - /// ... - /// - public float[] GetAccelerationByDirection(IMyCubeGrid grid) => _GetAccelerationByDirection.Invoke(grid); - private Func _GetAccelerationByDirection; - - /// - /// Returns the negative influence for the specified grid. - /// - public float GetNegativeInfluence(IMyCubeGrid grid) => _GetNegativeInfluence.Invoke(grid); - private Func _GetNegativeInfluence; - - /// - /// Returns the reduced angular speed for the specified grid. - /// - public float GetReducedAngularSpeed(IMyCubeGrid grid) => _GetReducedAngularSpeed.Invoke(grid); - private Func _GetReducedAngularSpeed; - } +using Sandbox.ModAPI; +using System; +using System.Collections.Generic; +using VRage.Game.ModAPI; +using VRage.Utils; + +namespace RelativeTopSpeedGV +{ + public class RtsApi + { + private const long ChannelId = 2772681332; + public bool IsReady { get; private set; } + + private Action ReadyCallback; + + private bool isRegistered = false; + + public void Load(Action readyCallback = null) + { + if (isRegistered) + throw new Exception($"{GetType().Name}.Load() should not be called multiple times!"); + + isRegistered = true; + ReadyCallback = readyCallback; + MyAPIGateway.Utilities.RegisterMessageHandler(ChannelId, HandleMessage); + MyAPIGateway.Utilities.SendModMessage(ChannelId, "ApiEndpointRequest"); + } + + public void Unload() + { + if (isRegistered) + { + MyAPIGateway.Utilities.UnregisterMessageHandler(ChannelId, HandleMessage); + IsReady = false; + isRegistered = false; + } + } + + private void HandleMessage(object obj) + { + if (obj is string) // the sent "ApiEndpointRequest" will also be received here, explicitly ignoring that + return; + + var dict = obj as IReadOnlyDictionary; + + if (dict == null) + return; + + AssignMethod(dict, "GetCruiseSpeed", ref _GetCruiseSpeed); + AssignMethod(dict, "GetMaxSpeed", ref _GetMaxSpeed); + AssignMethod(dict, "GetBoost", ref _GetBoost); + AssignMethod(dict, "GetAcceleration", ref _GetAcceleration); + AssignMethod(dict, "GetAccelerationByDirection", ref _GetAccelerationByDirection); + AssignMethod(dict, "GetNegativeInfluence", ref _GetNegativeInfluence); + AssignMethod(dict, "GetReducedAngularSpeed", ref _GetReducedAngularSpeed); + + IsReady = true; + ReadyCallback?.Invoke(); + } + + private void AssignMethod(IReadOnlyDictionary delegates, string name, ref T field) where T : class + { + if (delegates == null) + { + field = null; + return; + } + + Delegate del; + if (!delegates.TryGetValue(name, out del)) + throw new Exception($"{GetType().Name} :: Couldn't find {name} delegate of type {typeof(T)}"); + + field = del as T; + + if (field == null) + throw new Exception( + $"{GetType().Name} :: Delegate {name} is not type {typeof(T)}, instead it's: {del.GetType()}"); + } + + /// + /// Returns the cruising speed of the grid. + /// + public float GetCruiseSpeed(IMyCubeGrid grid) => _GetCruiseSpeed.Invoke(grid); + private Func _GetCruiseSpeed; + + /// + /// Gets the maximum possible speed (cruise speed + max boost) + /// + public float GetMaxSpeed(IMyCubeGrid grid) => _GetMaxSpeed.Invoke(grid); + private Func _GetMaxSpeed; + + /// + /// Returns 4 values: forward boost, min, average, max + /// + public float[] GetBoost(IMyCubeGrid grid) => _GetBoost.Invoke(grid); + private Func _GetBoost; + + /// + /// Returns 4 values: forward accel, min, average, max + /// + public float[] GetAcceleration(IMyCubeGrid grid) => _GetAcceleration.Invoke(grid); + private Func _GetAcceleration; + + /// + /// Uses Base6Directions.Direction + /// forward = reverse accel + /// backward = forward accel + /// left = right accel + /// ... + /// + public float[] GetAccelerationByDirection(IMyCubeGrid grid) => _GetAccelerationByDirection.Invoke(grid); + private Func _GetAccelerationByDirection; + + /// + /// Returns the negative influence for the specified grid. + /// + public float GetNegativeInfluence(IMyCubeGrid grid) => _GetNegativeInfluence.Invoke(grid); + private Func _GetNegativeInfluence; + + /// + /// Returns the reduced angular speed for the specified grid. + /// + public float GetReducedAngularSpeed(IMyCubeGrid grid) => _GetReducedAngularSpeed.Invoke(grid); + private Func _GetReducedAngularSpeed; + } } \ No newline at end of file diff --git a/Utility Mods/Stable/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/RtsApiBackend.cs b/Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/RtsApiBackend.cs similarity index 100% rename from Utility Mods/Stable/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/RtsApiBackend.cs rename to Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/RtsApiBackend.cs diff --git a/Utility Mods/Stable/SCRelativeTopSpeed/Data/Scripts/RTS/SENetworkAPI/Client.cs b/Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/SENetworkAPI/Client.cs similarity index 100% rename from Utility Mods/Stable/SCRelativeTopSpeed/Data/Scripts/RTS/SENetworkAPI/Client.cs rename to Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/SENetworkAPI/Client.cs diff --git a/Utility Mods/Stable/SCRelativeTopSpeed/Data/Scripts/RTS/SENetworkAPI/Command.cs b/Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/SENetworkAPI/Command.cs similarity index 100% rename from Utility Mods/Stable/SCRelativeTopSpeed/Data/Scripts/RTS/SENetworkAPI/Command.cs rename to Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/SENetworkAPI/Command.cs diff --git a/Utility Mods/Stable/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/SENetworkAPI/NetSync.cs b/Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/SENetworkAPI/NetSync.cs similarity index 100% rename from Utility Mods/Stable/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/SENetworkAPI/NetSync.cs rename to Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/SENetworkAPI/NetSync.cs diff --git a/Utility Mods/Stable/SCRelativeTopSpeed/Data/Scripts/RTS/SENetworkAPI/Network.cs b/Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/SENetworkAPI/Network.cs similarity index 100% rename from Utility Mods/Stable/SCRelativeTopSpeed/Data/Scripts/RTS/SENetworkAPI/Network.cs rename to Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/SENetworkAPI/Network.cs diff --git a/Utility Mods/Stable/SCRelativeTopSpeed/Data/Scripts/RTS/SENetworkAPI/Server.cs b/Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/SENetworkAPI/Server.cs similarity index 100% rename from Utility Mods/Stable/SCRelativeTopSpeed/Data/Scripts/RTS/SENetworkAPI/Server.cs rename to Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/SENetworkAPI/Server.cs diff --git a/Utility Mods/Stable/SCRelativeTopSpeed/Data/Scripts/RTS/SENetworkAPI/SessionTools.cs b/Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/SENetworkAPI/SessionTools.cs similarity index 100% rename from Utility Mods/Stable/SCRelativeTopSpeed/Data/Scripts/RTS/SENetworkAPI/SessionTools.cs rename to Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/SENetworkAPI/SessionTools.cs diff --git a/Utility Mods/Stable/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/Settings.cs b/Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/Settings.cs similarity index 96% rename from Utility Mods/Stable/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/Settings.cs rename to Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/Settings.cs index ac8c684b6..e5e5a5eb8 100644 --- a/Utility Mods/Stable/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/Settings.cs +++ b/Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/Data/Scripts/RTS/Settings.cs @@ -20,24 +20,24 @@ public class Settings public const string Filename = "RelativeTopSpeed.cfg"; public static readonly Settings Default = new Settings() { - EnableBoosting = false, + EnableBoosting = true, IgnoreGridsWithoutThrust = false, IgnoreGridsWithoutCockpit = false, ParachuteDeployHeight = 400, - SpeedLimit = 160, - RemoteControlSpeedLimit = 150, - LargeGrid_MinCruise = 50, - LargeGrid_MidCruise = 80, - LargeGrid_MaxCruise = 100, - LargeGrid_MaxBoostSpeed = 140, + SpeedLimit = 400, + RemoteControlSpeedLimit = 350, + LargeGrid_MinCruise = 60, + LargeGrid_MidCruise = 160, + LargeGrid_MaxCruise = 300, + LargeGrid_MaxBoostSpeed = 400, LargeGrid_ResistanceMultiplier = 1.5f, - LargeGrid_MinMass = 200000, - LargeGrid_MidMass = 5000000, - LargeGrid_MaxMass = 8000000, + LargeGrid_MinMass = 2000000, + LargeGrid_MidMass = 10000000, + LargeGrid_MaxMass = 16000000, SmallGrid_MinCruise = 60, - SmallGrid_MidCruise = 95, - SmallGrid_MaxCruise = 150, - SmallGrid_MaxBoostSpeed = 160, + SmallGrid_MidCruise = 160, + SmallGrid_MaxCruise = 300, + SmallGrid_MaxBoostSpeed = 400, SmallGrid_ResistanceMultiplyer = 1f, SmallGrid_MinMass = 10000, SmallGrid_MidMass = 300000, @@ -58,14 +58,14 @@ public class Settings //LargeGrid_Boost_b = 17f, //LargeGrid_Boost_c = 65000, //LargeGrid_Boost_d = 263, - EnableAngularLimits = true, - SmallGrid_AngularMassMult = 0.01f, + EnableAngularLimits = false, + SmallGrid_AngularMassMult = 0.1f, SmallGrid_AngularCruiseMult = 0.25f, - LargeGrid_AngularMassMult = 0.01f, + LargeGrid_AngularMassMult = 0.1f, LargeGrid_AngularCruiseMult = 0.25f, - GlobalMinAngularSpeed = 0.001f, + GlobalMinAngularSpeed = 0.5f, MaxAngularSpeed = 5f, - MinAngularSpeed = 0.01f + MinAngularSpeed = 0.0001f }; [ProtoMember(1)] diff --git a/Utility Mods/Stable/SCMobilityBlocks/metadata.mod b/Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/metadata.mod similarity index 100% rename from Utility Mods/Stable/SCMobilityBlocks/metadata.mod rename to Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/metadata.mod diff --git a/Utility Mods/Stable/SC_RelativeTopSpeed_Logarithmic_Angular/modinfo_main.sbmi b/Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/modinfo_main.sbmi similarity index 100% rename from Utility Mods/Stable/SC_RelativeTopSpeed_Logarithmic_Angular/modinfo_main.sbmi rename to Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/modinfo_main.sbmi diff --git a/Utility Mods/Stable/SC_RelativeTopSpeed_Logarithmic_Angular/modinfo_stable.sbmi b/Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/modinfo_stable.sbmi similarity index 100% rename from Utility Mods/Stable/SC_RelativeTopSpeed_Logarithmic_Angular/modinfo_stable.sbmi rename to Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/modinfo_stable.sbmi diff --git a/Utility Mods/Stable/SC_RelativeTopSpeed_Logarithmic_Angular/test.txt b/Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/test.txt similarity index 100% rename from Utility Mods/Stable/SC_RelativeTopSpeed_Logarithmic_Angular/test.txt rename to Utility Mods/SC_RelativeTopSpeed_Logarithmic_Angular/test.txt diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Audio/Empty_Sound.wav b/Utility Mods/SC_Season_4_Adjustments/Audio/Empty_Sound.wav similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Audio/Empty_Sound.wav rename to Utility Mods/SC_Season_4_Adjustments/Audio/Empty_Sound.wav diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Audio/blinkdrive/BlinkDrive.wav b/Utility Mods/SC_Season_4_Adjustments/Audio/blinkdrive/BlinkDrive.wav similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Audio/blinkdrive/BlinkDrive.wav rename to Utility Mods/SC_Season_4_Adjustments/Audio/blinkdrive/BlinkDrive.wav diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Audio/blinkdrive/BlinkDrive_Stereo.wav b/Utility Mods/SC_Season_4_Adjustments/Audio/blinkdrive/BlinkDrive_Stereo.wav similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Audio/blinkdrive/BlinkDrive_Stereo.wav rename to Utility Mods/SC_Season_4_Adjustments/Audio/blinkdrive/BlinkDrive_Stereo.wav diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Audio/notvanilla/ItWillBeOk.wav b/Utility Mods/SC_Season_4_Adjustments/Audio/notvanilla/ItWillBeOk.wav similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Audio/notvanilla/ItWillBeOk.wav rename to Utility Mods/SC_Season_4_Adjustments/Audio/notvanilla/ItWillBeOk.wav diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Audio/notvanilla/itmightbeok.wav b/Utility Mods/SC_Season_4_Adjustments/Audio/notvanilla/itmightbeok.wav similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Audio/notvanilla/itmightbeok.wav rename to Utility Mods/SC_Season_4_Adjustments/Audio/notvanilla/itmightbeok.wav diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Audio/thesoundofSilence.wav b/Utility Mods/SC_Season_4_Adjustments/Audio/thesoundofSilence.wav similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Audio/thesoundofSilence.wav rename to Utility Mods/SC_Season_4_Adjustments/Audio/thesoundofSilence.wav diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Audio/vanilla/ArcShipThrusterHydroNoPower2d.wav b/Utility Mods/SC_Season_4_Adjustments/Audio/vanilla/ArcShipThrusterHydroNoPower2d.wav similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Audio/vanilla/ArcShipThrusterHydroNoPower2d.wav rename to Utility Mods/SC_Season_4_Adjustments/Audio/vanilla/ArcShipThrusterHydroNoPower2d.wav diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Audio/vanilla/ArcShipThrusterHydroNoPower3d.wav b/Utility Mods/SC_Season_4_Adjustments/Audio/vanilla/ArcShipThrusterHydroNoPower3d.wav similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Audio/vanilla/ArcShipThrusterHydroNoPower3d.wav rename to Utility Mods/SC_Season_4_Adjustments/Audio/vanilla/ArcShipThrusterHydroNoPower3d.wav diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Audio/vanilla/ArcShipThrusterHydrogen2d.wav b/Utility Mods/SC_Season_4_Adjustments/Audio/vanilla/ArcShipThrusterHydrogen2d.wav similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Audio/vanilla/ArcShipThrusterHydrogen2d.wav rename to Utility Mods/SC_Season_4_Adjustments/Audio/vanilla/ArcShipThrusterHydrogen2d.wav diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Audio/vanilla/ArcShipThrusterHydrogen3d.wav b/Utility Mods/SC_Season_4_Adjustments/Audio/vanilla/ArcShipThrusterHydrogen3d.wav similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Audio/vanilla/ArcShipThrusterHydrogen3d.wav rename to Utility Mods/SC_Season_4_Adjustments/Audio/vanilla/ArcShipThrusterHydrogen3d.wav diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Audio/vanilla/ArcShipThrusterHydrogenPush2d.wav b/Utility Mods/SC_Season_4_Adjustments/Audio/vanilla/ArcShipThrusterHydrogenPush2d.wav similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Audio/vanilla/ArcShipThrusterHydrogenPush2d.wav rename to Utility Mods/SC_Season_4_Adjustments/Audio/vanilla/ArcShipThrusterHydrogenPush2d.wav diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Audio/vanilla/hydrobrr.wav b/Utility Mods/SC_Season_4_Adjustments/Audio/vanilla/hydrobrr.wav similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Audio/vanilla/hydrobrr.wav rename to Utility Mods/SC_Season_4_Adjustments/Audio/vanilla/hydrobrr.wav diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/ArmorDestroyed_Large_optimized.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/ArmorDestroyed_Large_optimized.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/ArmorDestroyed_Large_optimized.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/ArmorDestroyed_Large_optimized.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/ArmorDestroyed_Small_optimized.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/ArmorDestroyed_Small_optimized.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/ArmorDestroyed_Small_optimized.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/ArmorDestroyed_Small_optimized.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/Audio_shipSounds.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/Audio_shipSounds.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/Audio_shipSounds.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/Audio_shipSounds.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/B_TransparentMaterials.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/B_TransparentMaterials.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/B_TransparentMaterials.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/B_TransparentMaterials.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/BlockDestroyedExplosion_Large_optimized.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/BlockDestroyedExplosion_Large_optimized.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/BlockDestroyedExplosion_Large_optimized.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/BlockDestroyedExplosion_Large_optimized.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/BlockDestroyedExplosion_Small_optimized.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/BlockDestroyedExplosion_Small_optimized.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/BlockDestroyedExplosion_Small_optimized.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/BlockDestroyedExplosion_Small_optimized.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/BlockDestroyedExplosion_Tiny_optimized.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/BlockDestroyedExplosion_Tiny_optimized.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/BlockDestroyedExplosion_Tiny_optimized.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/BlockDestroyedExplosion_Tiny_optimized.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/BlockDestroyed_Large3x_optimized.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/BlockDestroyed_Large3x_optimized.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/BlockDestroyed_Large3x_optimized.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/BlockDestroyed_Large3x_optimized.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/BlockDestroyed_Large_optimized.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/BlockDestroyed_Large_optimized.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/BlockDestroyed_Large_optimized.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/BlockDestroyed_Large_optimized.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/BlockDestroyed_Medium_optmized.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/BlockDestroyed_Medium_optmized.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/BlockDestroyed_Medium_optmized.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/BlockDestroyed_Medium_optmized.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/BlockDestroyed_Small_optimized.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/BlockDestroyed_Small_optimized.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/BlockDestroyed_Small_optimized.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/BlockDestroyed_Small_optimized.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/BlockVariantGroups_6side.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/BlockVariantGroups_6side.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/BlockVariantGroups_6side.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/BlockVariantGroups_6side.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/CubeBlocks/Camera_Overlay_Change.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/CubeBlocks/Camera_Overlay_Change.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/CubeBlocks/Camera_Overlay_Change.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/CubeBlocks/Camera_Overlay_Change.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/CubeBlocks_6side.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/CubeBlocks_6side.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/CubeBlocks_6side.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/CubeBlocks_6side.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/CubeBlocks_DecorativePack.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/CubeBlocks_DecorativePack.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/CubeBlocks_DecorativePack.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/CubeBlocks_DecorativePack.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/CubeBlocks_DecorativePack2.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/CubeBlocks_DecorativePack2.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/CubeBlocks_DecorativePack2.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/CubeBlocks_DecorativePack2.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/CubeBlocks_DecorativePack3.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/CubeBlocks_DecorativePack3.sbc similarity index 97% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/CubeBlocks_DecorativePack3.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/CubeBlocks_DecorativePack3.sbc index 3d651f8c5..732af6236 100644 --- a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/CubeBlocks_DecorativePack3.sbc +++ b/Utility Mods/SC_Season_4_Adjustments/Data/CubeBlocks_DecorativePack3.sbc @@ -577,84 +577,6 @@ false DecorativeBlocks3 - - - - CubeBlock - LargeBlockCryoRoom - - DisplayName_Block_CryoRoom - Textures\GUI\Icons\Cubes\CryoRoom.dds - Description_CryoChamber - Large - false - TriangleMesh - - - Models\Cubes\Large\CryoRoom.mwm - Models\Cubes\Large\CryoroomInterior.mwm - Idle - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Volumetric - 0.2 - 0 - - - Volumetric - 0.2 - 0 - - - CryoRoom - Textures\GUI\Screens\cryopod_interior.dds - Y - Z - 20 - true - true - 1 - Utility - 0.00003 - BlockCryoOut - BlockCryoIn - true - Light - Damage_Electrical_Damaged - ParticleElectrical - Extended - BlockDestroyedExplosion_Large - WepSmallWarheadExpl - 15 - DecorativeBlocks3 - @@ -2756,7 +2678,6 @@ true 25 DecorativeBlocks3 - - + diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/CubeBlocks_Energy.sbc.disabledduetoconflictwithupgradablereactors b/Utility Mods/SC_Season_4_Adjustments/Data/CubeBlocks_Energy.sbc.disabledduetoconflictwithupgradablereactors similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/CubeBlocks_Energy.sbc.disabledduetoconflictwithupgradablereactors rename to Utility Mods/SC_Season_4_Adjustments/Data/CubeBlocks_Energy.sbc.disabledduetoconflictwithupgradablereactors diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/CubeBlocks_FakeAndAlsoTheHydroTanksForSomeReason.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/CubeBlocks_FakeAndAlsoTheHydroTanksForSomeReason.it'scompletelyfucked similarity index 96% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/CubeBlocks_FakeAndAlsoTheHydroTanksForSomeReason.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/CubeBlocks_FakeAndAlsoTheHydroTanksForSomeReason.it'scompletelyfucked index b790907be..105b5f372 100644 --- a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/CubeBlocks_FakeAndAlsoTheHydroTanksForSomeReason.sbc +++ b/Utility Mods/SC_Season_4_Adjustments/Data/CubeBlocks_FakeAndAlsoTheHydroTanksForSomeReason.it'scompletelyfucked @@ -1,1834 +1,1834 @@ - - - - - - CubeBlock - LargeFakeBlockSlideDoor - - Fake Door Slider - Textures\GUI\Icons\Fake.dds - true - Large - TriangleMesh - -
- - Models\SlidingDoorThatIsntaFuckingDoor_Large.mwm - - - - - - - - - - - - - Light - 900 - Starcore_FakeFuckingDoor_Slider - 1 - true - - - - CubeBlock - LargeBlockInteriorWall - - DisplayName_Block_InteriorWall - Textures\GUI\Icons\Cubes\interior_wall.dds - Description_InteriorWall - Large - - - false - - StandaloneBox - false - - - - - - - - - - - - - - - - false - - - - - - - InteriorWall - X - Light - 14 - 1 - false - Fast - - - - - - CubeBlock - LargeFakeBlockRadioAntenna - - Fake Greeble Antenna - Textures\GUI\Icons\Fake.dds - true - Large - TriangleMesh - - - Models\antenna.mwm - - - - - - - - - - - - - - - - - - Starcore_FakeAntenna - Light - Utility - 40 - Z - Y - Damage_Electrical_Damaged_Antenna - ParticleElectrical - BlockDestroyedExplosion_Large - WepSmallWarheadExpl - 100 - false - - - - - CubeBlock - LargeRefineryIndustrial - - DisplayName_Block_RefineryIndustrial - Textures\GUI\Icons\Cubes\AdvancedRefinery.dds - Description_Refinery - Large - TriangleMesh - - - Models\Cubes\Large\AdvancedRefinery.mwm - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - RefineryIndustrial - Light - 90 - Factory - 7.5 - - 2.5 - 2.5 - 2.5 - - - 0.3 - 0.6 - - 0.001 - 0.56 - - Ingots - - 1.3 - 1.0 - 2000 - Damage_HeavyMech_Damaged -
- ParticleHeavyMech - BlockRafinery - BlockRafineryProcess - Default - BlockDestroyedExplosion_Large - WepSmallWarheadExpl - 90 - - 60 - 120 - 240 - - HeavyIndustry - - - - - CubeBlock - OxygenGenerator - - DisplayName_Block_OxygenGenerator - Textures\GUI\Icons\Cubes\OxygenGenerator.dds - Description_OxygenGenerator - Large - TriangleMesh - - - Models\Cubes\Large\OxygenGenerator.mwm - - - - - - - - - - - - - - - - - true - - - - - - OxygenGenerator - Light - 22 - Reactors - Factory - 25 - 4 - - 2 - 2 - 2 - - - 0.3 - 0.6 - - 2.2 - - 0.001 - 0.5 - - - - GasProperties - Oxygen - - 10 - - - - GasProperties - Hydrogen - - 20 - - - - Ice - OxygenBottles - HydrogenBottles - - Damage_WeapExpl_Damaged - ParticleWeapExpl - BlockOxyGenProcess - BlockOxyGenIdle - Extended - BlockDestroyedExplosion_Large - WepSmallWarheadExpl - Y - Z - Y - 50 - - 300 - 600 - 1200 - - - - - - CubeBlock - LargeBlockOxygenFarm - - DisplayName_Block_OxygenFarm - Textures\GUI\Icons\Cubes\SolarHydroponics.dds - Description_OxygenFarm - Large - TriangleMesh - -
- - Models\Cubes\Large\SolarHydroponics.mwm - - - - - - - - - - - - - - - - - - Y - - - - - - OxygenFarm - Light - 30 - - 0 - 0 - -1 - - true - 0 - Factory - SolarPanels - - - GasProperties - Oxygen - - 0.03 - - 0.02 - Damage_WeapExpl_Damaged - ParticleWeapExpl - Default - BlockDestroyedExplosion_Large - WepSmallWarheadExpl - 25 - - - - - CubeBlock - LargeProductivityModule - - DisplayName_Block_ProductivityModule - Textures\GUI\Icons\Cubes\UpgradeProductivity.dds - Description_ProductivityModule - Large - TriangleMesh - - - Models\Cubes\Large\UpgradeProductivity.mwm - - - - - - - - - - - - - - - - - - - - - - ProductivityModule - Z - X - Light - - - Productivity - 0.5 - Additive - - - BlockModuleProductivity - Damage_Electrical_Damaged - ParticleElectrical - Default - BlockDestroyedExplosion_Large - WepSmallWarheadExpl - 1 - false - - - - CubeBlock - LargeEffectivenessModule - - DisplayName_Block_EffectivenessModule - Textures\GUI\Icons\Cubes\UpgradeEffectiveness.dds - Description_EffectivenessModule - Large - false - TriangleMesh - - - Models\Cubes\Large\UpgradeEffectiveness.mwm - - - - - - - - - - - - - - - - - - - - - - - EffectivenessModule - Z - X - Light - - - Effectiveness - 1.0905077 - Multiplicative - - - BlockModuleEffectiveness - Damage_Electrical_Damaged - ParticleElectrical - Default - BlockDestroyedExplosion_Large - WepSmallWarheadExpl - 1 - false - - - - CubeBlock - LargeEnergyModule - - DisplayName_Block_PowerEfficiencyModule - Textures\GUI\Icons\Cubes\UpgradeEnergy.dds - Description_PowerEfficiencyModule - Large - false - TriangleMesh - - - Models\Cubes\Large\UpgradeEnergy.mwm - - - - - - - - - - - - - - - - - - - - - - - EnergyModule - Z - X - Light - - - PowerEfficiency - 1.2228445 - Multiplicative - - - BlockModuleEfficiency - Damage_Electrical_Damaged - ParticleElectrical - Default - BlockDestroyedExplosion_Large - WepSmallWarheadExpl - 1 - false - - - - - CubeBlock - OxygenTank - - DisplayName_Block_OxygenTank - Textures\GUI\Icons\Cubes\OxygenTank.dds - Description_OxygenTank - Large - TriangleMesh - - - Models\Cubes\Large\OxygenStorage.mwm - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OxygenTank - Z - Y - Light - Reactors - Factory - 0.001 - 0.000001 - 100000 - 4 - - 2 - 2 - 2 - - - GasProperties - Oxygen - - - OxygenBottles - - 32 - Damage_WeapExpl_Damaged - ParticleWeapExpl - Explosion_Missile - WepSmallMissileExpl - Extended - BlockDestroyedExplosion_Large - WepSmallWarheadExpl - 25 - false - - 100 - 300 - 600 - - - - - CubeBlock - PassengerSeatLarge - - - DisplayName_Block_PassengerSeat - Textures\GUI\Icons\Cubes\PassengerSeat.dds - Description_PassengerSeat - Large - TriangleMesh - - - Models\Cubes\Large\PassengerSeat.mwm - passengerseat_large - false - - - - - - - - - - - - - - - - - - Volumetric - 0.2 - 0 - - - Volumetric - 0.2 - 0 - - - PassengerSeat - Y - Z - Light - 15 - true - false - false - false - Damage_Electrical_Damaged - ParticleElectrical - BlockDestroyed_Medium - PoofExplosionCat2 - 15 - false - - - - CubeBlock - TargetDummy - - DisplayName_Block_TargetDummy - Textures\GUI\Icons\Cubes\TargetDummy.dds - Description_TargetDummy - Large - TriangleMesh - - - Models\Cubes\Large\TargetDummy_base.mwm - - - - - - - - - - - - - - - - - TargetDummy - Y - Z - Light - 16 - Damage_Electrical_Damaged - ParticleElectrical - false - 25 - .09 - - 2 - .1 - 2 - - - TargetD_Torso - TargetD_Head - TargetD_RightArm - TargetD_LeftArm - - - true - true - false - false - - - 300 - 100 - 50 - 50 - - SteelPlate - 1 - 1 - 60 - Smoke_Construction - Smoke_Construction - 5 - 5 - ArcPrgConstrPh01Start - ArcPrgDeconstrPh01Start - .2 - .6 - - - - CubeBlock - VendingMachine - - DisplayName_Block_VendingMachine - Textures\GUI\Icons\Cubes\VendingMachine.dds - Description_VendingMachine - Large - TriangleMesh - - - Models\Cubes\Large\VendingMachine.mwm - - - - - - - - - - - - - - - - - - VendingMachine - Light - 20 - Conveyors - 0.002 - - 2.5 - 2.5 - 1 - - - - - - false - Z - Y - Damage_HeavyMech_Damaged - ParticleHeavyMech - BlockCollect - BlockDestroyedExplosion_Large - WepSmallWarheadExpl - 10 - Default - Economy - - - - - CubeBlock - AtmBlock - - DisplayName_Block_ATM - Textures\GUI\Icons\Cubes\ATM.dds - Description_AtmBlock - Large - TriangleMesh - - - Models\Cubes\Large\ATM.mwm - - - - - - - - - - - - - - - - - - - AtmBlock - Light - 15 - Conveyors - 0.002 - - - - Z - Y - Damage_HeavyMech_Damaged - ParticleHeavyMech - BlockCollect - BlockDestroyedExplosion_Large - WepSmallWarheadExpl - 10 - Default - false - Economy - - - - - CubeBlock - StoreBlock - - DisplayName_Block_Store - Textures\GUI\Icons\Cubes\StoreBlock.dds - Description_StoreBlock - Large - TriangleMesh - - - Models\Cubes\Large\StoreBlock.mwm - - - - - - - - - - - - - - - - - - StoreBlock - Light - 25 - Conveyors - 0.002 - - 2.5 - 2.5 - 1 - - - - - - - Z - Y - Damage_HeavyMech_Damaged - ParticleHeavyMech - BlockCollect - BlockDestroyedExplosion_Large - WepSmallWarheadExpl - 10 - Default - - - - - - CubeBlock - - - DisplayName_Block_Door - Textures\GUI\Icons\Cubes\door.dds - Description_Door - Large - TriangleMesh - - - Models\Cubes\Large\door.mwm - false - BlockDoorSmallOpen - BlockDoorSmallClose - - - - - - - - - - - - - - - - - - - - - - - - Door - Z - Y - Light - 20 - 1.5 - Doors - 1.2 - 3 - Damage_HeavyMech_Damaged - ParticleHeavyMech - Default - BlockDestroyed_Large - PoofExplosionCat3 - 115 - - - - - - CubeBlock - ReetDoor - - DisplayName_Block_Door - Textures\GUI\Icons\Cubes\door.dds - Description_Door - Large - TriangleMesh - - - Models\Cubes\Large\door.mwm - false - BlockDoorSmallOpen - BlockDoorSmallClose - - - - - - - - - - - - - - - - - - - - - - - - Door - Z - Y - Light - 20 - 1.5 - Doors - 1.2 - 3 - Damage_HeavyMech_Damaged - ParticleHeavyMech - Default - BlockDestroyed_Large - PoofExplosionCat3 - 115 - - - - - CubeBlock - SmallDoor - - DisplayName_Block_Door - Textures\GUI\Icons\Cubes\SmallDoor.dds - Description_Door - Small - TriangleMesh - - - Models\Cubes\Small\door.mwm - false - BlockDoorSmallOpen - BlockDoorSmallClose - - - - - - - - - - - - - - - - - - - - - - - Door - Z - Y - Light - 14 - 1.2 - Doors - 0.96 - 2.5 - Damage_HeavyMech_Damaged - ParticleHeavyMech - Default - BlockDestroyed_Large - PoofExplosionCat3 - 115 - - - - - CubeBlock - LargeBlockGate - - DisplayName_Block_Gate - Textures\GUI\Icons\Cubes\Gate.dds - Description_Gate - Large - TriangleMesh - - - Models\Cubes\Large\Gate.mwm - false - BlockDoorHangar - BlockDoorHangar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Gate - Z - Y - Light - 40 - Doors - 0.00001 - 0.001 - 4.83 - 1.2 - Damage_HeavyMech_Damaged - ParticleHeavyMech - Default - BlockDestroyed_Large - PoofExplosionCat3 - 115 - Frostbite - - - - - CubeBlock - LargeBlockOffsetDoor - - DisplayName_Block_OffsetDoor - Textures\GUI\Icons\Cubes\OffsetDoor.dds - Description_OffsetDoor - Large - TriangleMesh - - - Models\Cubes\Large\OffsetDoor.mwm - false - BlockDoorSmallOpen - BlockDoorSmallClose - - - - - - - - - - - - - - - - - - - - - - - - OffsetDoor - Z - Y - Light - 20 - 1.5 - Doors - 1.2 - 3 - Damage_HeavyMech_Damaged - ParticleHeavyMech - Default - BlockDestroyed_Large - PoofExplosionCat3 - 115 - Frostbite - - - - - CubeBlock - - - DisplayName_Block_AirtightHangarDoor - Textures\GUI\Icons\Cubes\HangarDoor.dds - Description_HangarDoor - Large - TriangleMesh - - -
- Models\Cubes\Large\HangarDoor_base.mwm - BlockDoorHangar - false - - - - - - - - - - - - - - - - - - - - - - AirtightHangarDoor - Z - Y - Light - 20 - Damage_HeavyMech_Damaged - ParticleHeavyMech - Doors - 0.00001 - 0.001 - 0.1 - 2.5 - Default - true - Metal - BlockDestroyed_Large - PoofExplosionCat3 - 115 - - - - - TerminalBlock - AirtightHangarDoorWarfare2A - - DisplayName_Block_AirtightHangarDoorWarfare2A - Textures\GUI\Icons\Cubes\HangarDoorWarfareA_Base.dds - Description_HangarDoor - Large - TriangleMesh - - -
- Models\Cubes\Large\HangarDoorWarfareA_Base.mwm - BlockDoorHangar - false - - - - - - - - - - - - - - - - - - - - - - - AirtightHangarDoorWarfare2A - Z - Y - Light - 20 - Damage_HeavyMech_Damaged - ParticleHeavyMech - Doors - 0.00001 - 0.001 - 0.1 - 2.5 - Default - true - Metal - BlockDestroyed_Large - PoofExplosionCat3 - 115 - Warfare2 - - - - - TerminalBlock - AirtightHangarDoorWarfare2B - - DisplayName_Block_AirtightHangarDoorWarfare2B - Textures\GUI\Icons\Cubes\HangarDoorWarfareB_Base.dds - Description_HangarDoor - Large - TriangleMesh - - -
- Models\Cubes\Large\HangarDoorWarfareB_Base.mwm - BlockDoorHangar - false - - - - - - - - - - - - - - - - - - - - - - - AirtightHangarDoorWarfare2B - Z - Y - Light - 20 - Damage_HeavyMech_Damaged - ParticleHeavyMech - Doors - 0.00001 - 0.001 - 0.1 - 2.5 - Default - true - Metal - BlockDestroyed_Large - PoofExplosionCat3 - 115 - Warfare2 - - - - - TerminalBlock - AirtightHangarDoorWarfare2C - - DisplayName_Block_AirtightHangarDoorWarfare2C - Textures\GUI\Icons\Cubes\HangarDoorWarfareC_Base.dds - Description_HangarDoor - Large - TriangleMesh - - -
- Models\Cubes\Large\HangarDoorWarfareC_Base.mwm - BlockDoorHangar - false - - - - - - - - - - - - - - - - - - - - - - - AirtightHangarDoorWarfare2C - Z - Y - Light - 20 - Damage_HeavyMech_Damaged - ParticleHeavyMech - Doors - 0.00001 - 0.001 - 0.1 - 2.5 - Default - true - Metal - BlockDestroyed_Large - PoofExplosionCat3 - 115 - Warfare2 - - - - - - - CubeBlock - SlidingHatchDoor - - DisplayName_Block_SlidingHatchDoor - Textures\GUI\Icons\Cubes\HatchDoor.dds - Description_Door - Large - TriangleMesh - - - Models\Cubes\Large\HatchDoor.mwm - false - BlockDoorHangar - BlockDoorHangar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SlidingHatchDoor - Y - X -
- Light - 26 - 1 - Doors - 3.55 - 2 - Damage_HeavyMech_Damaged - ParticleHeavyMech - Default - BlockDestroyed_Large - PoofExplosionCat3 - 115 - - Warfare2 - - - - - CubeBlock - SlidingHatchDoorHalf - - DisplayName_Block_SlidingHatchDoorHalf - Textures\GUI\Icons\Cubes\HatchDoorHalf.dds - Description_Door - Large - TriangleMesh - - - Models\Cubes\Large\HatchDoorHalf.mwm - false - BlockDoorHangar - BlockDoorHangar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SlidingHatchDoorHalf - Y - X -
- Light - 24 - 1 - Doors - 3.55 - 2 - Damage_HeavyMech_Damaged - ParticleHeavyMech - Default - BlockDestroyed_Large - PoofExplosionCat3 - 115 - - Warfare2 - - - - - OxygenTank - LargeHydrogenTankIndustrial - - DisplayName_Block_HydrogenTankIndustrial - Textures\GUI\Icons\Cubes\HydrogenTankIndustrial.dds - Description_HydrogenTank - true - Large - false - TriangleMesh - - - Models\Cubes\Large\HydrogenTankIndustrial.mwm - - - - - - - - - - - - - - - - - - - - - - - - - - - - - HydrogenTankIndustrial - Z - Y - Light - Reactors - Factory - 0.001 - 0.000001 - 15000000 - 0.75 - - 2 - 2 - 2 - - - GasProperties - Hydrogen - - - HydrogenBottles - - 50 - Damage_WeapExpl_Damaged - ParticleWeapExpl - Extended - Hydrogen_Explosion_Particle - WepLrgWarheadExpl - 25 - 0 - 50 - 1 - 0.00015 - ArcHydrogenExplosion - Hydrogen_Explosion_Particle - - 100 - 300 - 600 - - false - HeavyIndustry - - - - - OxygenTank - LargeHydrogenTank - - DisplayName_Block_HydrogenTank - Textures\GUI\Icons\Cubes\HydrogenTank.dds - Description_HydrogenTank - true - Large - false - TriangleMesh - - - Models\Cubes\Large\HydrogenTank.mwm - - - - - - - - - - - - - - - - - - - - - - - - - - - HydrogenTank - Z - Y - Light - Reactors - Factory - 0.001 - 0.000001 - 15000000 - 0.75 - - 2 - 2 - 2 - - - GasProperties - Hydrogen - - - HydrogenBottles - - 50 - Damage_WeapExpl_Damaged - ParticleWeapExpl - Hydrogen_Explosion_Particle - WepLrgWarheadExpl - Extended - 25 - 0 - 50 - 1 - 0.00015 - HydrogenExplosion - Hydrogen_Explosion_Particle - - 100 - 300 - 600 - - - - - - OxygenTank - LargeHydrogenTankSmall - - DisplayName_Block_HydrogenTankSmall - Textures\GUI\Icons\Cubes\largeHydrogenTankSmall.dds - WARNING: EXTREMELY VOLITILE - true - Large - false - TriangleMesh - - - Models\Cubes\Large\HydrogenTankSmall.mwm - - - - - - - - - - - - - - - - - - - - - - HydrogenTankSmall - Z - Y - Light - Reactors - Factory - 0.001 - 0.000001 - 1000000 - 0.75 - - 2 - 2 - 2 - - - GasProperties - Hydrogen - - - HydrogenBottles - - 32 - Damage_WeapExpl_Damaged - ParticleWeapExpl - Extended - 25 - 0 - 60 - 1 - 0.0015 - HydrogenExplosion - Hydrogen_Explosion_Particle - - 100 - 300 - 600 - - - - - + + + + + + TerminalBlock + LargeFakeBlockSlideDoor + + Fake Door Slider + Textures\GUI\Icons\Fake.dds + true + Large + TriangleMesh + +
+ + Models\SlidingDoorThatIsntaFuckingDoor_Large.mwm + + + + + + + + + + + + + Light + 900 + Starcore_FakeFuckingDoor_Slider + 1 + true + + + + TerminalBlock + LargeBlockInteriorWall + + DisplayName_Block_InteriorWall + Textures\GUI\Icons\Cubes\interior_wall.dds + Description_InteriorWall + Large + + + false + + StandaloneBox + false + + + + + + + + + + + + + + + + false + + + + + + + InteriorWall + X + Light + 14 + 1 + false + Fast + + + + + + CubeBlock + LargeFakeBlockRadioAntenna + + Fake Greeble Antenna + Textures\GUI\Icons\Fake.dds + true + Large + TriangleMesh + + + Models\antenna.mwm + + + + + + + + + + + + + + + + + + Starcore_FakeAntenna + Light + Utility + 40 + Z + Y + Damage_Electrical_Damaged_Antenna + ParticleElectrical + BlockDestroyedExplosion_Large + WepSmallWarheadExpl + 100 + false + + + + + TerminalBlock + LargeRefineryIndustrial + + DisplayName_Block_RefineryIndustrial + Textures\GUI\Icons\Cubes\AdvancedRefinery.dds + Description_Refinery + Large + TriangleMesh + + + Models\Cubes\Large\AdvancedRefinery.mwm + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + RefineryIndustrial + Light + 90 + Factory + 7.5 + + 2.5 + 2.5 + 2.5 + + + 0.3 + 0.6 + + 0.001 + 0.56 + + Ingots + + 1.3 + 1.0 + 2000 + Damage_HeavyMech_Damaged +
+ ParticleHeavyMech + BlockRafinery + BlockRafineryProcess + Default + BlockDestroyedExplosion_Large + WepSmallWarheadExpl + 90 + + 60 + 120 + 240 + + HeavyIndustry + + + + + TerminalBlock + OxygenGenerator + + DisplayName_Block_OxygenGenerator + Textures\GUI\Icons\Cubes\OxygenGenerator.dds + Description_OxygenGenerator + Large + TriangleMesh + + + Models\Cubes\Large\OxygenGenerator.mwm + + + + + + + + + + + + + + + + + true + + + + + + OxygenGenerator + Light + 22 + Reactors + Factory + 25 + 4 + + 2 + 2 + 2 + + + 0.3 + 0.6 + + 2.2 + + 0.001 + 0.5 + + + + GasProperties + Oxygen + + 10 + + + + GasProperties + Hydrogen + + 20 + + + + Ice + OxygenBottles + HydrogenBottles + + Damage_WeapExpl_Damaged + ParticleWeapExpl + BlockOxyGenProcess + BlockOxyGenIdle + Extended + BlockDestroyedExplosion_Large + WepSmallWarheadExpl + Y + Z + Y + 50 + + 300 + 600 + 1200 + + + + + + TerminalBlock + LargeBlockOxygenFarm + + DisplayName_Block_OxygenFarm + Textures\GUI\Icons\Cubes\SolarHydroponics.dds + Description_OxygenFarm + Large + TriangleMesh + +
+ + Models\Cubes\Large\SolarHydroponics.mwm + + + + + + + + + + + + + + + + + + Y + + + + + + OxygenFarm + Light + 30 + + 0 + 0 + -1 + + true + 0 + Factory + SolarPanels + + + GasProperties + Oxygen + + 0.03 + + 0.02 + Damage_WeapExpl_Damaged + ParticleWeapExpl + Default + BlockDestroyedExplosion_Large + WepSmallWarheadExpl + 25 + + + + + TerminalBlock + LargeProductivityModule + + DisplayName_Block_ProductivityModule + Textures\GUI\Icons\Cubes\UpgradeProductivity.dds + Description_ProductivityModule + Large + TriangleMesh + + + Models\Cubes\Large\UpgradeProductivity.mwm + + + + + + + + + + + + + + + + + + + + + + ProductivityModule + Z + X + Light + + + Productivity + 0.5 + Additive + + + BlockModuleProductivity + Damage_Electrical_Damaged + ParticleElectrical + Default + BlockDestroyedExplosion_Large + WepSmallWarheadExpl + 1 + false + + + + TerminalBlock + LargeEffectivenessModule + + DisplayName_Block_EffectivenessModule + Textures\GUI\Icons\Cubes\UpgradeEffectiveness.dds + Description_EffectivenessModule + Large + false + TriangleMesh + + + Models\Cubes\Large\UpgradeEffectiveness.mwm + + + + + + + + + + + + + + + + + + + + + + + EffectivenessModule + Z + X + Light + + + Effectiveness + 1.0905077 + Multiplicative + + + BlockModuleEffectiveness + Damage_Electrical_Damaged + ParticleElectrical + Default + BlockDestroyedExplosion_Large + WepSmallWarheadExpl + 1 + false + + + + TerminalBlock + LargeEnergyModule + + DisplayName_Block_PowerEfficiencyModule + Textures\GUI\Icons\Cubes\UpgradeEnergy.dds + Description_PowerEfficiencyModule + Large + false + TriangleMesh + + + Models\Cubes\Large\UpgradeEnergy.mwm + + + + + + + + + + + + + + + + + + + + + + + EnergyModule + Z + X + Light + + + PowerEfficiency + 1.2228445 + Multiplicative + + + BlockModuleEfficiency + Damage_Electrical_Damaged + ParticleElectrical + Default + BlockDestroyedExplosion_Large + WepSmallWarheadExpl + 1 + false + + + + + TerminalBlock + OxygenTank + + DisplayName_Block_OxygenTank + Textures\GUI\Icons\Cubes\OxygenTank.dds + Description_OxygenTank + Large + TriangleMesh + + + Models\Cubes\Large\OxygenStorage.mwm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OxygenTank + Z + Y + Light + Reactors + Factory + 0.001 + 0.000001 + 100000 + 4 + + 2 + 2 + 2 + + + GasProperties + Oxygen + + + OxygenBottles + + 32 + Damage_WeapExpl_Damaged + ParticleWeapExpl + Explosion_Missile + WepSmallMissileExpl + Extended + BlockDestroyedExplosion_Large + WepSmallWarheadExpl + 25 + false + + 100 + 300 + 600 + + + + + TerminalBlock + PassengerSeatLarge + + + DisplayName_Block_PassengerSeat + Textures\GUI\Icons\Cubes\PassengerSeat.dds + Description_PassengerSeat + Large + TriangleMesh + + + Models\Cubes\Large\PassengerSeat.mwm + passengerseat_large + false + + + + + + + + + + + + + + + + + + Volumetric + 0.2 + 0 + + + Volumetric + 0.2 + 0 + + + PassengerSeat + Y + Z + Light + 15 + true + false + false + false + Damage_Electrical_Damaged + ParticleElectrical + BlockDestroyed_Medium + PoofExplosionCat2 + 15 + false + + + + TerminalBlock + TargetDummy + + DisplayName_Block_TargetDummy + Textures\GUI\Icons\Cubes\TargetDummy.dds + Description_TargetDummy + Large + TriangleMesh + + + Models\Cubes\Large\TargetDummy_base.mwm + + + + + + + + + + + + + + + + + TargetDummy + Y + Z + Light + 16 + Damage_Electrical_Damaged + ParticleElectrical + false + 25 + .09 + + 2 + .1 + 2 + + + TargetD_Torso + TargetD_Head + TargetD_RightArm + TargetD_LeftArm + + + true + true + false + false + + + 300 + 100 + 50 + 50 + + SteelPlate + 1 + 1 + 60 + Smoke_Construction + Smoke_Construction + 5 + 5 + ArcPrgConstrPh01Start + ArcPrgDeconstrPh01Start + .2 + .6 + + + + TerminalBlock + VendingMachine + + DisplayName_Block_VendingMachine + Textures\GUI\Icons\Cubes\VendingMachine.dds + Description_VendingMachine + Large + TriangleMesh + + + Models\Cubes\Large\VendingMachine.mwm + + + + + + + + + + + + + + + + + + VendingMachine + Light + 20 + Conveyors + 0.002 + + 2.5 + 2.5 + 1 + + + + + + false + Z + Y + Damage_HeavyMech_Damaged + ParticleHeavyMech + BlockCollect + BlockDestroyedExplosion_Large + WepSmallWarheadExpl + 10 + Default + Economy + + + + + TerminalBlock + AtmBlock + + DisplayName_Block_ATM + Textures\GUI\Icons\Cubes\ATM.dds + Description_AtmBlock + Large + TriangleMesh + + + Models\Cubes\Large\ATM.mwm + + + + + + + + + + + + + + + + + + + AtmBlock + Light + 15 + Conveyors + 0.002 + + + + Z + Y + Damage_HeavyMech_Damaged + ParticleHeavyMech + BlockCollect + BlockDestroyedExplosion_Large + WepSmallWarheadExpl + 10 + Default + false + Economy + + + + + TerminalBlock + StoreBlock + + DisplayName_Block_Store + Textures\GUI\Icons\Cubes\StoreBlock.dds + Description_StoreBlock + Large + TriangleMesh + + + Models\Cubes\Large\StoreBlock.mwm + + + + + + + + + + + + + + + + + + StoreBlock + Light + 25 + Conveyors + 0.002 + + 2.5 + 2.5 + 1 + + + + + + + Z + Y + Damage_HeavyMech_Damaged + ParticleHeavyMech + BlockCollect + BlockDestroyedExplosion_Large + WepSmallWarheadExpl + 10 + Default + + + + + + TerminalBlock + + + DisplayName_Block_Door + Textures\GUI\Icons\Cubes\door.dds + Description_Door + Large + TriangleMesh + + + Models\Cubes\Large\door.mwm + false + BlockDoorSmallOpen + BlockDoorSmallClose + + + + + + + + + + + + + + + + + + + + + + + + Door + Z + Y + Light + 20 + 1.5 + Doors + 1.2 + 3 + Damage_HeavyMech_Damaged + ParticleHeavyMech + Default + BlockDestroyed_Large + PoofExplosionCat3 + 115 + + + + + + TerminalBlock + ReetDoor + + DisplayName_Block_Door + Textures\GUI\Icons\Cubes\door.dds + Description_Door + Large + TriangleMesh + + + Models\Cubes\Large\door.mwm + false + BlockDoorSmallOpen + BlockDoorSmallClose + + + + + + + + + + + + + + + + + + + + + + + + Door + Z + Y + Light + 20 + 1.5 + Doors + 1.2 + 3 + Damage_HeavyMech_Damaged + ParticleHeavyMech + Default + BlockDestroyed_Large + PoofExplosionCat3 + 115 + + + + + TerminalBlock + SmallDoor + + DisplayName_Block_Door + Textures\GUI\Icons\Cubes\SmallDoor.dds + Description_Door + Small + TriangleMesh + + + Models\Cubes\Small\door.mwm + false + BlockDoorSmallOpen + BlockDoorSmallClose + + + + + + + + + + + + + + + + + + + + + + + Door + Z + Y + Light + 14 + 1.2 + Doors + 0.96 + 2.5 + Damage_HeavyMech_Damaged + ParticleHeavyMech + Default + BlockDestroyed_Large + PoofExplosionCat3 + 115 + + + + + TerminalBlock + LargeBlockGate + + DisplayName_Block_Gate + Textures\GUI\Icons\Cubes\Gate.dds + Description_Gate + Large + TriangleMesh + + + Models\Cubes\Large\Gate.mwm + false + BlockDoorHangar + BlockDoorHangar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gate + Z + Y + Light + 40 + Doors + 0.00001 + 0.001 + 4.83 + 1.2 + Damage_HeavyMech_Damaged + ParticleHeavyMech + Default + BlockDestroyed_Large + PoofExplosionCat3 + 115 + Frostbite + + + + + TerminalBlock + LargeBlockOffsetDoor + + DisplayName_Block_OffsetDoor + Textures\GUI\Icons\Cubes\OffsetDoor.dds + Description_OffsetDoor + Large + TriangleMesh + + + Models\Cubes\Large\OffsetDoor.mwm + false + BlockDoorSmallOpen + BlockDoorSmallClose + + + + + + + + + + + + + + + + + + + + + + + + OffsetDoor + Z + Y + Light + 20 + 1.5 + Doors + 1.2 + 3 + Damage_HeavyMech_Damaged + ParticleHeavyMech + Default + BlockDestroyed_Large + PoofExplosionCat3 + 115 + Frostbite + + + + + TerminalBlock + + + DisplayName_Block_AirtightHangarDoor + Textures\GUI\Icons\Cubes\HangarDoor.dds + Description_HangarDoor + Large + TriangleMesh + + +
+ Models\Cubes\Large\HangarDoor_base.mwm + BlockDoorHangar + false + + + + + + + + + + + + + + + + + + + + + + AirtightHangarDoor + Z + Y + Light + 20 + Damage_HeavyMech_Damaged + ParticleHeavyMech + Doors + 0.00001 + 0.001 + 0.1 + 2.5 + Default + true + Metal + BlockDestroyed_Large + PoofExplosionCat3 + 115 + + + + + TerminalBlock + AirtightHangarDoorWarfare2A + + DisplayName_Block_AirtightHangarDoorWarfare2A + Textures\GUI\Icons\Cubes\HangarDoorWarfareA_Base.dds + Description_HangarDoor + Large + TriangleMesh + + +
+ Models\Cubes\Large\HangarDoorWarfareA_Base.mwm + BlockDoorHangar + false + + + + + + + + + + + + + + + + + + + + + + + AirtightHangarDoorWarfare2A + Z + Y + Light + 20 + Damage_HeavyMech_Damaged + ParticleHeavyMech + Doors + 0.00001 + 0.001 + 0.1 + 2.5 + Default + true + Metal + BlockDestroyed_Large + PoofExplosionCat3 + 115 + Warfare2 + + + + + TerminalBlock + AirtightHangarDoorWarfare2B + + DisplayName_Block_AirtightHangarDoorWarfare2B + Textures\GUI\Icons\Cubes\HangarDoorWarfareB_Base.dds + Description_HangarDoor + Large + TriangleMesh + + +
+ Models\Cubes\Large\HangarDoorWarfareB_Base.mwm + BlockDoorHangar + false + + + + + + + + + + + + + + + + + + + + + + + AirtightHangarDoorWarfare2B + Z + Y + Light + 20 + Damage_HeavyMech_Damaged + ParticleHeavyMech + Doors + 0.00001 + 0.001 + 0.1 + 2.5 + Default + true + Metal + BlockDestroyed_Large + PoofExplosionCat3 + 115 + Warfare2 + + + + + TerminalBlock + AirtightHangarDoorWarfare2C + + DisplayName_Block_AirtightHangarDoorWarfare2C + Textures\GUI\Icons\Cubes\HangarDoorWarfareC_Base.dds + Description_HangarDoor + Large + TriangleMesh + + +
+ Models\Cubes\Large\HangarDoorWarfareC_Base.mwm + BlockDoorHangar + false + + + + + + + + + + + + + + + + + + + + + + + AirtightHangarDoorWarfare2C + Z + Y + Light + 20 + Damage_HeavyMech_Damaged + ParticleHeavyMech + Doors + 0.00001 + 0.001 + 0.1 + 2.5 + Default + true + Metal + BlockDestroyed_Large + PoofExplosionCat3 + 115 + Warfare2 + + + + + + + TerminalBlock + SlidingHatchDoor + + DisplayName_Block_SlidingHatchDoor + Textures\GUI\Icons\Cubes\HatchDoor.dds + Description_Door + Large + TriangleMesh + + + Models\Cubes\Large\HatchDoor.mwm + false + BlockDoorHangar + BlockDoorHangar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SlidingHatchDoor + Y + X +
+ Light + 26 + 1 + Doors + 3.55 + 2 + Damage_HeavyMech_Damaged + ParticleHeavyMech + Default + BlockDestroyed_Large + PoofExplosionCat3 + 115 + + Warfare2 + + + + + TerminalBlock + SlidingHatchDoorHalf + + DisplayName_Block_SlidingHatchDoorHalf + Textures\GUI\Icons\Cubes\HatchDoorHalf.dds + Description_Door + Large + TriangleMesh + + + Models\Cubes\Large\HatchDoorHalf.mwm + false + BlockDoorHangar + BlockDoorHangar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SlidingHatchDoorHalf + Y + X +
+ Light + 24 + 1 + Doors + 3.55 + 2 + Damage_HeavyMech_Damaged + ParticleHeavyMech + Default + BlockDestroyed_Large + PoofExplosionCat3 + 115 + + Warfare2 + + + + + OxygenTank + LargeHydrogenTankIndustrial + + DisplayName_Block_HydrogenTankIndustrial + Textures\GUI\Icons\Cubes\HydrogenTankIndustrial.dds + Description_HydrogenTank + true + Large + false + TriangleMesh + + + Models\Cubes\Large\HydrogenTankIndustrial.mwm + + + + + + + + + + + + + + + + + + + + + + + + + + + + + HydrogenTankIndustrial + Z + Y + Light + Reactors + Factory + 0.001 + 0.000001 + 15000000 + 0.75 + + 2 + 2 + 2 + + + GasProperties + Hydrogen + + + HydrogenBottles + + 50 + Damage_WeapExpl_Damaged + ParticleWeapExpl + Extended + Hydrogen_Explosion_Particle + WepLrgWarheadExpl + 25 + 0 + 50 + 1 + 0.00015 + ArcHydrogenExplosion + Hydrogen_Explosion_Particle + + 100 + 300 + 600 + + false + HeavyIndustry + + + + + OxygenTank + LargeHydrogenTank + + DisplayName_Block_HydrogenTank + Textures\GUI\Icons\Cubes\HydrogenTank.dds + Description_HydrogenTank + true + Large + false + TriangleMesh + + + Models\Cubes\Large\HydrogenTank.mwm + + + + + + + + + + + + + + + + + + + + + + + + + + + HydrogenTank + Z + Y + Light + Reactors + Factory + 0.001 + 0.000001 + 15000000 + 0.75 + + 2 + 2 + 2 + + + GasProperties + Hydrogen + + + HydrogenBottles + + 50 + Damage_WeapExpl_Damaged + ParticleWeapExpl + Hydrogen_Explosion_Particle + WepLrgWarheadExpl + Extended + 25 + 0 + 50 + 1 + 0.00015 + HydrogenExplosion + Hydrogen_Explosion_Particle + + 100 + 300 + 600 + + + + + + OxygenTank + LargeHydrogenTankSmall + + DisplayName_Block_HydrogenTankSmall + Textures\GUI\Icons\Cubes\largeHydrogenTankSmall.dds + WARNING: EXTREMELY VOLITILE + true + Large + false + TriangleMesh + + + Models\Cubes\Large\HydrogenTankSmall.mwm + + + + + + + + + + + + + + + + + + + + + + HydrogenTankSmall + Z + Y + Light + Reactors + Factory + 0.001 + 0.000001 + 1000000 + 0.75 + + 2 + 2 + 2 + + + GasProperties + Hydrogen + + + HydrogenBottles + + 32 + Damage_WeapExpl_Damaged + ParticleWeapExpl + Extended + 25 + 0 + 60 + 1 + 0.0015 + HydrogenExplosion + Hydrogen_Explosion_Particle + + 100 + 300 + 600 + + + + + \ No newline at end of file diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/CubeBlocks_IndustrialPack.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/CubeBlocks_IndustrialPack.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/CubeBlocks_IndustrialPack.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/CubeBlocks_IndustrialPack.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/CubeBlocks_Logistics.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/CubeBlocks_Logistics.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/CubeBlocks_Logistics.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/CubeBlocks_Logistics.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/CubeBlocks_SparksOfTheFuturePack.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/CubeBlocks_SparksOfTheFuturePack.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/CubeBlocks_SparksOfTheFuturePack.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/CubeBlocks_SparksOfTheFuturePack.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/CubeBlocks_Thrusters.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/CubeBlocks_Thrusters.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/CubeBlocks_Thrusters.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/CubeBlocks_Thrusters.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/CubeBlocks_Warfare2.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/CubeBlocks_Warfare2.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/CubeBlocks_Warfare2.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/CubeBlocks_Warfare2.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/Damage_Electrical_Damaged_optimized.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/Damage_Electrical_Damaged_optimized.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/Damage_Electrical_Damaged_optimized.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/Damage_Electrical_Damaged_optimized.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/Damage_HeavyMech_Damaged_optimized.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/Damage_HeavyMech_Damaged_optimized.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/Damage_HeavyMech_Damaged_optimized.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/Damage_HeavyMech_Damaged_optimized.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/Damage_Reactor_Damaged_optimized.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/Damage_Reactor_Damaged_optimized.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/Damage_Reactor_Damaged_optimized.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/Damage_Reactor_Damaged_optimized.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/Damage_WeapExpl_Damaged_optimized.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/Damage_WeapExpl_Damaged_optimized.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/Damage_WeapExpl_Damaged_optimized.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/Damage_WeapExpl_Damaged_optimized.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/Decals.sbc.disabled b/Utility Mods/SC_Season_4_Adjustments/Data/Decals.sbc.disabled similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/Decals.sbc.disabled rename to Utility Mods/SC_Season_4_Adjustments/Data/Decals.sbc.disabled diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/Environment.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/Environment.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/Environment.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/Environment.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/Explosion_Warhead_30_optimized.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/Explosion_Warhead_30_optimized.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/Explosion_Warhead_30_optimized.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/Explosion_Warhead_30_optimized.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/GasProperties.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/GasProperties.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/GasProperties.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/GasProperties.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/Grid_Destruction_optimized.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/Grid_Destruction_optimized.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/Grid_Destruction_optimized.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/Grid_Destruction_optimized.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/Hud/Default.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/Hud/Default.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/Hud/Default.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/Hud/Default.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/Hydrogen_Explosion_Particle_optimized.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/Hydrogen_Explosion_Particle_optimized.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/Hydrogen_Explosion_Particle_optimized.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/Hydrogen_Explosion_Particle_optimized.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/PhysicalItems.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/PhysicalItems.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/PhysicalItems.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/PhysicalItems.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/Reactor_Explosion_Particle_optimized.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/Reactor_Explosion_Particle_optimized.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/Reactor_Explosion_Particle_optimized.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/Reactor_Explosion_Particle_optimized.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/Rotor_And_Hinge_CubeBlocks_Mechanical.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/Rotor_And_Hinge_CubeBlocks_Mechanical.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/Rotor_And_Hinge_CubeBlocks_Mechanical.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/Rotor_And_Hinge_CubeBlocks_Mechanical.sbc diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/Scripts/CoreParts/Armor.cs b/Utility Mods/SC_Season_4_Adjustments/Data/Scripts/CoreParts/Armor.cs similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/Scripts/CoreParts/Armor.cs rename to Utility Mods/SC_Season_4_Adjustments/Data/Scripts/CoreParts/Armor.cs diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/Scripts/CoreParts/BoostedThrustAndFlame/BoostedThrustAndFlame.cs b/Utility Mods/SC_Season_4_Adjustments/Data/Scripts/CoreParts/BoostedThrustAndFlame/BoostedThrustAndFlame.cs similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/Scripts/CoreParts/BoostedThrustAndFlame/BoostedThrustAndFlame.cs rename to Utility Mods/SC_Season_4_Adjustments/Data/Scripts/CoreParts/BoostedThrustAndFlame/BoostedThrustAndFlame.cs diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/Scripts/CoreParts/MasterConfig.cs b/Utility Mods/SC_Season_4_Adjustments/Data/Scripts/CoreParts/MasterConfig.cs similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/Scripts/CoreParts/MasterConfig.cs rename to Utility Mods/SC_Season_4_Adjustments/Data/Scripts/CoreParts/MasterConfig.cs diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/Scripts/CoreParts/NoDrawH2/NoDrawH2.cs b/Utility Mods/SC_Season_4_Adjustments/Data/Scripts/CoreParts/NoDrawH2/NoDrawH2.cs similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/Scripts/CoreParts/NoDrawH2/NoDrawH2.cs rename to Utility Mods/SC_Season_4_Adjustments/Data/Scripts/CoreParts/NoDrawH2/NoDrawH2.cs diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/Scripts/CoreParts/RemoveSGRotorOption/RingRotor_GameLogic.cs b/Utility Mods/SC_Season_4_Adjustments/Data/Scripts/CoreParts/RemoveSGRotorOption/RingRotor_GameLogic.cs similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/Scripts/CoreParts/RemoveSGRotorOption/RingRotor_GameLogic.cs rename to Utility Mods/SC_Season_4_Adjustments/Data/Scripts/CoreParts/RemoveSGRotorOption/RingRotor_GameLogic.cs diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/Scripts/CoreParts/RemoveSGRotorOption/RingRotor_HideButton.cs b/Utility Mods/SC_Season_4_Adjustments/Data/Scripts/CoreParts/RemoveSGRotorOption/RingRotor_HideButton.cs similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/Scripts/CoreParts/RemoveSGRotorOption/RingRotor_HideButton.cs rename to Utility Mods/SC_Season_4_Adjustments/Data/Scripts/CoreParts/RemoveSGRotorOption/RingRotor_HideButton.cs diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/Scripts/CoreParts/RemoveSGRotorOption/RingRotor_TerminalChainedDelegate.cs b/Utility Mods/SC_Season_4_Adjustments/Data/Scripts/CoreParts/RemoveSGRotorOption/RingRotor_TerminalChainedDelegate.cs similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/Scripts/CoreParts/RemoveSGRotorOption/RingRotor_TerminalChainedDelegate.cs rename to Utility Mods/SC_Season_4_Adjustments/Data/Scripts/CoreParts/RemoveSGRotorOption/RingRotor_TerminalChainedDelegate.cs diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/Scripts/CoreParts/gauge_SayNoToScrap/SayNoToScrap.cs b/Utility Mods/SC_Season_4_Adjustments/Data/Scripts/CoreParts/gauge_SayNoToScrap/SayNoToScrap.cs similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/Scripts/CoreParts/gauge_SayNoToScrap/SayNoToScrap.cs rename to Utility Mods/SC_Season_4_Adjustments/Data/Scripts/CoreParts/gauge_SayNoToScrap/SayNoToScrap.cs diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/Scripts/CoreParts/script/PartCompile.cs b/Utility Mods/SC_Season_4_Adjustments/Data/Scripts/CoreParts/script/PartCompile.cs similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/Scripts/CoreParts/script/PartCompile.cs rename to Utility Mods/SC_Season_4_Adjustments/Data/Scripts/CoreParts/script/PartCompile.cs diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/Scripts/CoreParts/script/Slave.cs b/Utility Mods/SC_Season_4_Adjustments/Data/Scripts/CoreParts/script/Slave.cs similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/Scripts/CoreParts/script/Slave.cs rename to Utility Mods/SC_Season_4_Adjustments/Data/Scripts/CoreParts/script/Slave.cs diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/Scripts/CoreParts/script/Structure.cs b/Utility Mods/SC_Season_4_Adjustments/Data/Scripts/CoreParts/script/Structure.cs similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/Scripts/CoreParts/script/Structure.cs rename to Utility Mods/SC_Season_4_Adjustments/Data/Scripts/CoreParts/script/Structure.cs diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Data/flares.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/flares.sbc similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Data/flares.sbc rename to Utility Mods/SC_Season_4_Adjustments/Data/flares.sbc diff --git a/Utility Mods/SC_Season_4_Adjustments/Data/realfake antenna.sbc b/Utility Mods/SC_Season_4_Adjustments/Data/realfake antenna.sbc new file mode 100644 index 000000000..13e65fd0d --- /dev/null +++ b/Utility Mods/SC_Season_4_Adjustments/Data/realfake antenna.sbc @@ -0,0 +1,48 @@ + + + + + CubeBlock + LargeFakeBlockRadioAntenna + + Fake Greeble Antenna + Textures\GUI\Icons\Fake.dds + true + Large + TriangleMesh + + + Models\antenna.mwm + + + + + + + + + + + + + + + + + + Starcore_FakeAntenna + Light + Utility + 40 + Z + Y + Damage_Electrical_Damaged_Antenna + ParticleElectrical + BlockDestroyedExplosion_Large + WepSmallWarheadExpl + 100 + false + + + + \ No newline at end of file diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Included.txt b/Utility Mods/SC_Season_4_Adjustments/Included.txt similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Included.txt rename to Utility Mods/SC_Season_4_Adjustments/Included.txt diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Models/Antenna.mwm b/Utility Mods/SC_Season_4_Adjustments/Models/Antenna.mwm similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Models/Antenna.mwm rename to Utility Mods/SC_Season_4_Adjustments/Models/Antenna.mwm diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Models/AntennaConstruction_1.mwm b/Utility Mods/SC_Season_4_Adjustments/Models/AntennaConstruction_1.mwm similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Models/AntennaConstruction_1.mwm rename to Utility Mods/SC_Season_4_Adjustments/Models/AntennaConstruction_1.mwm diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Models/AntennaConstruction_1_LOD0.mwm b/Utility Mods/SC_Season_4_Adjustments/Models/AntennaConstruction_1_LOD0.mwm similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Models/AntennaConstruction_1_LOD0.mwm rename to Utility Mods/SC_Season_4_Adjustments/Models/AntennaConstruction_1_LOD0.mwm diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Models/AntennaConstruction_1_LOD1.mwm b/Utility Mods/SC_Season_4_Adjustments/Models/AntennaConstruction_1_LOD1.mwm similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Models/AntennaConstruction_1_LOD1.mwm rename to Utility Mods/SC_Season_4_Adjustments/Models/AntennaConstruction_1_LOD1.mwm diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Models/AntennaConstruction_2.mwm b/Utility Mods/SC_Season_4_Adjustments/Models/AntennaConstruction_2.mwm similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Models/AntennaConstruction_2.mwm rename to Utility Mods/SC_Season_4_Adjustments/Models/AntennaConstruction_2.mwm diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Models/AntennaConstruction_2_LOD0.mwm b/Utility Mods/SC_Season_4_Adjustments/Models/AntennaConstruction_2_LOD0.mwm similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Models/AntennaConstruction_2_LOD0.mwm rename to Utility Mods/SC_Season_4_Adjustments/Models/AntennaConstruction_2_LOD0.mwm diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Models/AntennaConstruction_2_LOD1.mwm b/Utility Mods/SC_Season_4_Adjustments/Models/AntennaConstruction_2_LOD1.mwm similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Models/AntennaConstruction_2_LOD1.mwm rename to Utility Mods/SC_Season_4_Adjustments/Models/AntennaConstruction_2_LOD1.mwm diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Models/AntennaConstruction_3.mwm b/Utility Mods/SC_Season_4_Adjustments/Models/AntennaConstruction_3.mwm similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Models/AntennaConstruction_3.mwm rename to Utility Mods/SC_Season_4_Adjustments/Models/AntennaConstruction_3.mwm diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Models/AntennaConstruction_3_LOD0.mwm b/Utility Mods/SC_Season_4_Adjustments/Models/AntennaConstruction_3_LOD0.mwm similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Models/AntennaConstruction_3_LOD0.mwm rename to Utility Mods/SC_Season_4_Adjustments/Models/AntennaConstruction_3_LOD0.mwm diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Models/AntennaConstruction_3_LOD1.mwm b/Utility Mods/SC_Season_4_Adjustments/Models/AntennaConstruction_3_LOD1.mwm similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Models/AntennaConstruction_3_LOD1.mwm rename to Utility Mods/SC_Season_4_Adjustments/Models/AntennaConstruction_3_LOD1.mwm diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Models/Antenna_LOD0.mwm b/Utility Mods/SC_Season_4_Adjustments/Models/Antenna_LOD0.mwm similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Models/Antenna_LOD0.mwm rename to Utility Mods/SC_Season_4_Adjustments/Models/Antenna_LOD0.mwm diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Models/Antenna_LOD1.mwm b/Utility Mods/SC_Season_4_Adjustments/Models/Antenna_LOD1.mwm similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Models/Antenna_LOD1.mwm rename to Utility Mods/SC_Season_4_Adjustments/Models/Antenna_LOD1.mwm diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Models/Antenna_LOD2.mwm b/Utility Mods/SC_Season_4_Adjustments/Models/Antenna_LOD2.mwm similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Models/Antenna_LOD2.mwm rename to Utility Mods/SC_Season_4_Adjustments/Models/Antenna_LOD2.mwm diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Models/Antenna_LOD3.mwm b/Utility Mods/SC_Season_4_Adjustments/Models/Antenna_LOD3.mwm similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Models/Antenna_LOD3.mwm rename to Utility Mods/SC_Season_4_Adjustments/Models/Antenna_LOD3.mwm diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core.mwm b/Utility Mods/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core.mwm similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core.mwm rename to Utility Mods/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core.mwm diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_mini.mwm b/Utility Mods/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_mini.mwm similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_mini.mwm rename to Utility Mods/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_mini.mwm diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_mini_progress_01.mwm b/Utility Mods/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_mini_progress_01.mwm similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_mini_progress_01.mwm rename to Utility Mods/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_mini_progress_01.mwm diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_mini_progress_02.mwm b/Utility Mods/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_mini_progress_02.mwm similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_mini_progress_02.mwm rename to Utility Mods/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_mini_progress_02.mwm diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_progress_01.mwm b/Utility Mods/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_progress_01.mwm similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_progress_01.mwm rename to Utility Mods/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_progress_01.mwm diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_progress_02.mwm b/Utility Mods/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_progress_02.mwm similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_progress_02.mwm rename to Utility Mods/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_progress_02.mwm diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_progress_03.mwm b/Utility Mods/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_progress_03.mwm similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_progress_03.mwm rename to Utility Mods/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_progress_03.mwm diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_progress_04.mwm b/Utility Mods/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_progress_04.mwm similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_progress_04.mwm rename to Utility Mods/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_progress_04.mwm diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_progress_05.mwm b/Utility Mods/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_progress_05.mwm similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_progress_05.mwm rename to Utility Mods/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_progress_05.mwm diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_progress_06.mwm b/Utility Mods/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_progress_06.mwm similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_progress_06.mwm rename to Utility Mods/SC_Season_4_Adjustments/Models/Darth_Biomech/AI_core_progress_06.mwm diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Models/SlidingDoorThatIsntaFuckingDoor_Large.hkt b/Utility Mods/SC_Season_4_Adjustments/Models/SlidingDoorThatIsntaFuckingDoor_Large.hkt similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Models/SlidingDoorThatIsntaFuckingDoor_Large.hkt rename to Utility Mods/SC_Season_4_Adjustments/Models/SlidingDoorThatIsntaFuckingDoor_Large.hkt diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Models/SlidingDoorThatIsntaFuckingDoor_Large.mwm b/Utility Mods/SC_Season_4_Adjustments/Models/SlidingDoorThatIsntaFuckingDoor_Large.mwm similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Models/SlidingDoorThatIsntaFuckingDoor_Large.mwm rename to Utility Mods/SC_Season_4_Adjustments/Models/SlidingDoorThatIsntaFuckingDoor_Large.mwm diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Textures/Darth_Biomech/GUI/AICoreLarge.dds b/Utility Mods/SC_Season_4_Adjustments/Textures/Darth_Biomech/GUI/AICoreLarge.dds similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Textures/Darth_Biomech/GUI/AICoreLarge.dds rename to Utility Mods/SC_Season_4_Adjustments/Textures/Darth_Biomech/GUI/AICoreLarge.dds diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Textures/Darth_Biomech/GUI/AICoremini.dds b/Utility Mods/SC_Season_4_Adjustments/Textures/Darth_Biomech/GUI/AICoremini.dds similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Textures/Darth_Biomech/GUI/AICoremini.dds rename to Utility Mods/SC_Season_4_Adjustments/Textures/Darth_Biomech/GUI/AICoremini.dds diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Textures/Darth_Biomech/ai_core_add.dds b/Utility Mods/SC_Season_4_Adjustments/Textures/Darth_Biomech/ai_core_add.dds similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Textures/Darth_Biomech/ai_core_add.dds rename to Utility Mods/SC_Season_4_Adjustments/Textures/Darth_Biomech/ai_core_add.dds diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Textures/Darth_Biomech/ai_core_cm.dds b/Utility Mods/SC_Season_4_Adjustments/Textures/Darth_Biomech/ai_core_cm.dds similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Textures/Darth_Biomech/ai_core_cm.dds rename to Utility Mods/SC_Season_4_Adjustments/Textures/Darth_Biomech/ai_core_cm.dds diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Textures/Darth_Biomech/ai_core_ng.dds b/Utility Mods/SC_Season_4_Adjustments/Textures/Darth_Biomech/ai_core_ng.dds similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Textures/Darth_Biomech/ai_core_ng.dds rename to Utility Mods/SC_Season_4_Adjustments/Textures/Darth_Biomech/ai_core_ng.dds diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Textures/Darth_Biomech/ai_core_wires_add.dds b/Utility Mods/SC_Season_4_Adjustments/Textures/Darth_Biomech/ai_core_wires_add.dds similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Textures/Darth_Biomech/ai_core_wires_add.dds rename to Utility Mods/SC_Season_4_Adjustments/Textures/Darth_Biomech/ai_core_wires_add.dds diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Textures/Darth_Biomech/ai_core_wires_cm.dds b/Utility Mods/SC_Season_4_Adjustments/Textures/Darth_Biomech/ai_core_wires_cm.dds similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Textures/Darth_Biomech/ai_core_wires_cm.dds rename to Utility Mods/SC_Season_4_Adjustments/Textures/Darth_Biomech/ai_core_wires_cm.dds diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Textures/Darth_Biomech/ai_core_wires_ng.dds b/Utility Mods/SC_Season_4_Adjustments/Textures/Darth_Biomech/ai_core_wires_ng.dds similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Textures/Darth_Biomech/ai_core_wires_ng.dds rename to Utility Mods/SC_Season_4_Adjustments/Textures/Darth_Biomech/ai_core_wires_ng.dds diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Textures/GUI/Screens/camera_overlay.dds b/Utility Mods/SC_Season_4_Adjustments/Textures/GUI/Screens/camera_overlay.dds similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Textures/GUI/Screens/camera_overlay.dds rename to Utility Mods/SC_Season_4_Adjustments/Textures/GUI/Screens/camera_overlay.dds diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Textures/GUI/USEAPB.dds b/Utility Mods/SC_Season_4_Adjustments/Textures/GUI/USEAPB.dds similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Textures/GUI/USEAPB.dds rename to Utility Mods/SC_Season_4_Adjustments/Textures/GUI/USEAPB.dds diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Textures/USEAPB_add.dds b/Utility Mods/SC_Season_4_Adjustments/Textures/USEAPB_add.dds similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Textures/USEAPB_add.dds rename to Utility Mods/SC_Season_4_Adjustments/Textures/USEAPB_add.dds diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Textures/USEAPB_cm.dds b/Utility Mods/SC_Season_4_Adjustments/Textures/USEAPB_cm.dds similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Textures/USEAPB_cm.dds rename to Utility Mods/SC_Season_4_Adjustments/Textures/USEAPB_cm.dds diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/Textures/USEAPB_ng.dds b/Utility Mods/SC_Season_4_Adjustments/Textures/USEAPB_ng.dds similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/Textures/USEAPB_ng.dds rename to Utility Mods/SC_Season_4_Adjustments/Textures/USEAPB_ng.dds diff --git a/Gamemode Mods/Stable/CombatZoneMuzzmod/WAKE UP b/Utility Mods/SC_Season_4_Adjustments/forceupload similarity index 100% rename from Gamemode Mods/Stable/CombatZoneMuzzmod/WAKE UP rename to Utility Mods/SC_Season_4_Adjustments/forceupload diff --git a/Utility Mods/Stable/SCPracticeAI/metadata.mod b/Utility Mods/SC_Season_4_Adjustments/metadata.mod similarity index 100% rename from Utility Mods/Stable/SCPracticeAI/metadata.mod rename to Utility Mods/SC_Season_4_Adjustments/metadata.mod diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/modinfo_main.sbmi b/Utility Mods/SC_Season_4_Adjustments/modinfo_main.sbmi similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/modinfo_main.sbmi rename to Utility Mods/SC_Season_4_Adjustments/modinfo_main.sbmi diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/modinfo_stable.sbmi b/Utility Mods/SC_Season_4_Adjustments/modinfo_stable.sbmi similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/modinfo_stable.sbmi rename to Utility Mods/SC_Season_4_Adjustments/modinfo_stable.sbmi diff --git a/Utility Mods/Stable/SC_Season_4_Adjustments/test.txt b/Utility Mods/SC_Season_4_Adjustments/test.txt similarity index 100% rename from Utility Mods/Stable/SC_Season_4_Adjustments/test.txt rename to Utility Mods/SC_Season_4_Adjustments/test.txt diff --git a/Utility Mods/Stable/PaperDoll/.gitignore b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/.gitignore similarity index 100% rename from Utility Mods/Stable/PaperDoll/.gitignore rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/.gitignore diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Billboard1280x720.sbc b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Billboard1280x720.sbc similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Billboard1280x720.sbc rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Billboard1280x720.sbc diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Billboard176x120.sbc b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Billboard176x120.sbc similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Billboard176x120.sbc rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Billboard176x120.sbc diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Billboard1920x1080.sbc b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Billboard1920x1080.sbc similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Billboard1920x1080.sbc rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Billboard1920x1080.sbc diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Billboard352x240.sbc b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Billboard352x240.sbc similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Billboard352x240.sbc rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Billboard352x240.sbc diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Billboard720x480.sbc b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Billboard720x480.sbc similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Billboard720x480.sbc rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Billboard720x480.sbc diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Billboard88x60.sbc b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Billboard88x60.sbc similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Billboard88x60.sbc rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Billboard88x60.sbc diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Generic_Banner_1x2.sbc b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Generic_Banner_1x2.sbc similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Generic_Banner_1x2.sbc rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Generic_Banner_1x2.sbc diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Generic_Basic_Flag_Pole.sbc b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Generic_Basic_Flag_Pole.sbc similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Generic_Basic_Flag_Pole.sbc rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Generic_Basic_Flag_Pole.sbc diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Generic_Nautical_Flag_Pole.sbc b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Generic_Nautical_Flag_Pole.sbc similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Generic_Nautical_Flag_Pole.sbc rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Generic_Nautical_Flag_Pole.sbc diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Genric_Basic_Flag_Pole_45.sbc b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Genric_Basic_Flag_Pole_45.sbc similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Genric_Basic_Flag_Pole_45.sbc rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Data/CubeBlocks/Genric_Basic_Flag_Pole_45.sbc diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Data/spray_materials.sbc b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Data/spray_materials.sbc similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Data/spray_materials.sbc rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Data/spray_materials.sbc diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Data/spray_textures.sbc b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Data/spray_textures.sbc similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Data/spray_textures.sbc rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Data/spray_textures.sbc diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Billboard1.mwm b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Billboard1.mwm similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Billboard1.mwm rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Billboard1.mwm diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Billboard1280x720.mwm b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Billboard1280x720.mwm similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Billboard1280x720.mwm rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Billboard1280x720.mwm diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Billboard176x120.mwm b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Billboard176x120.mwm similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Billboard176x120.mwm rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Billboard176x120.mwm diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Billboard1920x1080.mwm b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Billboard1920x1080.mwm similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Billboard1920x1080.mwm rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Billboard1920x1080.mwm diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Billboard352x240.mwm b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Billboard352x240.mwm similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Billboard352x240.mwm rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Billboard352x240.mwm diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Billboard720x480.mwm b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Billboard720x480.mwm similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Billboard720x480.mwm rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Billboard720x480.mwm diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Billboard88x60.mwm b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Billboard88x60.mwm similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Billboard88x60.mwm rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Billboard88x60.mwm diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Billboard_Test.mwm b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Billboard_Test.mwm similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Billboard_Test.mwm rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Billboard_Test.mwm diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Banner_1x2.fbx b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Banner_1x2.fbx similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Banner_1x2.fbx rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Banner_1x2.fbx diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Banner_1x2.mwm b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Banner_1x2.mwm similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Banner_1x2.mwm rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Banner_1x2.mwm diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Banner_1x2.xml b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Banner_1x2.xml similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Banner_1x2.xml rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Banner_1x2.xml diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Banner_1x2_BS1.fbx b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Banner_1x2_BS1.fbx similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Banner_1x2_BS1.fbx rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Banner_1x2_BS1.fbx diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Banner_1x2_BS1.mwm b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Banner_1x2_BS1.mwm similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Banner_1x2_BS1.mwm rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Banner_1x2_BS1.mwm diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Basic_Flag_Pole.mwm b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Basic_Flag_Pole.mwm similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Basic_Flag_Pole.mwm rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Basic_Flag_Pole.mwm diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Basic_Flag_Pole_BS1.mwm b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Basic_Flag_Pole_BS1.mwm similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Basic_Flag_Pole_BS1.mwm rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Basic_Flag_Pole_BS1.mwm diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Nautical_Flag_Pole.mwm b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Nautical_Flag_Pole.mwm similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Nautical_Flag_Pole.mwm rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Nautical_Flag_Pole.mwm diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Nautical_Flag_Pole_BS1.mwm b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Nautical_Flag_Pole_BS1.mwm similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Nautical_Flag_Pole_BS1.mwm rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Generic_Nautical_Flag_Pole_BS1.mwm diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Genric_Basic_Flag_Pole_45.mwm b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Genric_Basic_Flag_Pole_45.mwm similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Genric_Basic_Flag_Pole_45.mwm rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Genric_Basic_Flag_Pole_45.mwm diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Genric_Basic_Flag_Pole_45_BS1.mwm b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Genric_Basic_Flag_Pole_45_BS1.mwm similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Models/Genric_Basic_Flag_Pole_45_BS1.mwm rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Models/Genric_Basic_Flag_Pole_45_BS1.mwm diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Sprays.txt b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Sprays.txt similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Sprays.txt rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Sprays.txt diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/Icons/banner12.png b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/Icons/banner12.png similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/Icons/banner12.png rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/Icons/banner12.png diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/Icons/flag.png b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/Icons/flag.png similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/Icons/flag.png rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/Icons/flag.png diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/Icons/flag45.png b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/Icons/flag45.png similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/Icons/flag45.png rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/Icons/flag45.png diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/Icons/flaglong.png b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/Icons/flaglong.png similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/Icons/flaglong.png rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/Icons/flaglong.png diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/0a6a1a13-11a6-acec-5f69-5108c59e3ef8_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/0a6a1a13-11a6-acec-5f69-5108c59e3ef8_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/0a6a1a13-11a6-acec-5f69-5108c59e3ef8_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/0a6a1a13-11a6-acec-5f69-5108c59e3ef8_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/0a6a1a13-11a6-acec-5f69-5108c59e3ef8_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/0a6a1a13-11a6-acec-5f69-5108c59e3ef8_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/0a6a1a13-11a6-acec-5f69-5108c59e3ef8_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/0a6a1a13-11a6-acec-5f69-5108c59e3ef8_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/0b615e82-a921-4dc5-479b-b6e983fd3365_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/0b615e82-a921-4dc5-479b-b6e983fd3365_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/0b615e82-a921-4dc5-479b-b6e983fd3365_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/0b615e82-a921-4dc5-479b-b6e983fd3365_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/0b615e82-a921-4dc5-479b-b6e983fd3365_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/0b615e82-a921-4dc5-479b-b6e983fd3365_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/0b615e82-a921-4dc5-479b-b6e983fd3365_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/0b615e82-a921-4dc5-479b-b6e983fd3365_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/12f55975-fe1d-6f40-6616-048ff70b7a30_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/12f55975-fe1d-6f40-6616-048ff70b7a30_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/12f55975-fe1d-6f40-6616-048ff70b7a30_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/12f55975-fe1d-6f40-6616-048ff70b7a30_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/12f55975-fe1d-6f40-6616-048ff70b7a30_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/12f55975-fe1d-6f40-6616-048ff70b7a30_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/12f55975-fe1d-6f40-6616-048ff70b7a30_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/12f55975-fe1d-6f40-6616-048ff70b7a30_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/174cd584-44fe-1ac7-8285-5e6da0170d96_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/174cd584-44fe-1ac7-8285-5e6da0170d96_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/174cd584-44fe-1ac7-8285-5e6da0170d96_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/174cd584-44fe-1ac7-8285-5e6da0170d96_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/174cd584-44fe-1ac7-8285-5e6da0170d96_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/174cd584-44fe-1ac7-8285-5e6da0170d96_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/174cd584-44fe-1ac7-8285-5e6da0170d96_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/174cd584-44fe-1ac7-8285-5e6da0170d96_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/1d5413d3-6201-2f53-a6a6-ddafbbb15e31_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/1d5413d3-6201-2f53-a6a6-ddafbbb15e31_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/1d5413d3-6201-2f53-a6a6-ddafbbb15e31_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/1d5413d3-6201-2f53-a6a6-ddafbbb15e31_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/1d5413d3-6201-2f53-a6a6-ddafbbb15e31_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/1d5413d3-6201-2f53-a6a6-ddafbbb15e31_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/1d5413d3-6201-2f53-a6a6-ddafbbb15e31_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/1d5413d3-6201-2f53-a6a6-ddafbbb15e31_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/1de9dc1b-6c57-9dae-0d5b-8abe75b10e13_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/1de9dc1b-6c57-9dae-0d5b-8abe75b10e13_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/1de9dc1b-6c57-9dae-0d5b-8abe75b10e13_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/1de9dc1b-6c57-9dae-0d5b-8abe75b10e13_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/1de9dc1b-6c57-9dae-0d5b-8abe75b10e13_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/1de9dc1b-6c57-9dae-0d5b-8abe75b10e13_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/1de9dc1b-6c57-9dae-0d5b-8abe75b10e13_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/1de9dc1b-6c57-9dae-0d5b-8abe75b10e13_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/1f6e7843-8cbe-040c-72d4-4efc5449c064_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/1f6e7843-8cbe-040c-72d4-4efc5449c064_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/1f6e7843-8cbe-040c-72d4-4efc5449c064_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/1f6e7843-8cbe-040c-72d4-4efc5449c064_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/1f6e7843-8cbe-040c-72d4-4efc5449c064_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/1f6e7843-8cbe-040c-72d4-4efc5449c064_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/1f6e7843-8cbe-040c-72d4-4efc5449c064_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/1f6e7843-8cbe-040c-72d4-4efc5449c064_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/28749513-d80d-acbc-13d6-cc5005117d03_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/28749513-d80d-acbc-13d6-cc5005117d03_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/28749513-d80d-acbc-13d6-cc5005117d03_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/28749513-d80d-acbc-13d6-cc5005117d03_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/28749513-d80d-acbc-13d6-cc5005117d03_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/28749513-d80d-acbc-13d6-cc5005117d03_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/28749513-d80d-acbc-13d6-cc5005117d03_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/28749513-d80d-acbc-13d6-cc5005117d03_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/28c15a33-99a7-1a25-3eef-8fc076e353a7_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/28c15a33-99a7-1a25-3eef-8fc076e353a7_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/28c15a33-99a7-1a25-3eef-8fc076e353a7_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/28c15a33-99a7-1a25-3eef-8fc076e353a7_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/28c15a33-99a7-1a25-3eef-8fc076e353a7_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/28c15a33-99a7-1a25-3eef-8fc076e353a7_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/28c15a33-99a7-1a25-3eef-8fc076e353a7_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/28c15a33-99a7-1a25-3eef-8fc076e353a7_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/327617e1-7e65-fa6d-6c23-4e5abdfcbb0b_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/327617e1-7e65-fa6d-6c23-4e5abdfcbb0b_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/327617e1-7e65-fa6d-6c23-4e5abdfcbb0b_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/327617e1-7e65-fa6d-6c23-4e5abdfcbb0b_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/327617e1-7e65-fa6d-6c23-4e5abdfcbb0b_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/327617e1-7e65-fa6d-6c23-4e5abdfcbb0b_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/327617e1-7e65-fa6d-6c23-4e5abdfcbb0b_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/327617e1-7e65-fa6d-6c23-4e5abdfcbb0b_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/336a25e2-ccec-7c1e-e71a-ee5296d9e586_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/336a25e2-ccec-7c1e-e71a-ee5296d9e586_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/336a25e2-ccec-7c1e-e71a-ee5296d9e586_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/336a25e2-ccec-7c1e-e71a-ee5296d9e586_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/336a25e2-ccec-7c1e-e71a-ee5296d9e586_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/336a25e2-ccec-7c1e-e71a-ee5296d9e586_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/336a25e2-ccec-7c1e-e71a-ee5296d9e586_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/336a25e2-ccec-7c1e-e71a-ee5296d9e586_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/341530a0-1fab-746a-b77e-05cfce4f521e_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/341530a0-1fab-746a-b77e-05cfce4f521e_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/341530a0-1fab-746a-b77e-05cfce4f521e_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/341530a0-1fab-746a-b77e-05cfce4f521e_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/341530a0-1fab-746a-b77e-05cfce4f521e_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/341530a0-1fab-746a-b77e-05cfce4f521e_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/341530a0-1fab-746a-b77e-05cfce4f521e_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/341530a0-1fab-746a-b77e-05cfce4f521e_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/35851e5a-04b2-a2b0-b5e3-5fcd323307fe_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/35851e5a-04b2-a2b0-b5e3-5fcd323307fe_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/35851e5a-04b2-a2b0-b5e3-5fcd323307fe_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/35851e5a-04b2-a2b0-b5e3-5fcd323307fe_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/35851e5a-04b2-a2b0-b5e3-5fcd323307fe_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/35851e5a-04b2-a2b0-b5e3-5fcd323307fe_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/35851e5a-04b2-a2b0-b5e3-5fcd323307fe_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/35851e5a-04b2-a2b0-b5e3-5fcd323307fe_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/3da22c46-b41d-c852-616a-caad635e4d1e_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/3da22c46-b41d-c852-616a-caad635e4d1e_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/3da22c46-b41d-c852-616a-caad635e4d1e_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/3da22c46-b41d-c852-616a-caad635e4d1e_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/3da22c46-b41d-c852-616a-caad635e4d1e_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/3da22c46-b41d-c852-616a-caad635e4d1e_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/3da22c46-b41d-c852-616a-caad635e4d1e_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/3da22c46-b41d-c852-616a-caad635e4d1e_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/40d03646-732b-9e52-d851-787bfe53d0a1_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/40d03646-732b-9e52-d851-787bfe53d0a1_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/40d03646-732b-9e52-d851-787bfe53d0a1_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/40d03646-732b-9e52-d851-787bfe53d0a1_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/40d03646-732b-9e52-d851-787bfe53d0a1_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/40d03646-732b-9e52-d851-787bfe53d0a1_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/40d03646-732b-9e52-d851-787bfe53d0a1_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/40d03646-732b-9e52-d851-787bfe53d0a1_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/45eaf9f6-6a41-bc75-f566-9b5bd79d8c86_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/45eaf9f6-6a41-bc75-f566-9b5bd79d8c86_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/45eaf9f6-6a41-bc75-f566-9b5bd79d8c86_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/45eaf9f6-6a41-bc75-f566-9b5bd79d8c86_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/45eaf9f6-6a41-bc75-f566-9b5bd79d8c86_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/45eaf9f6-6a41-bc75-f566-9b5bd79d8c86_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/45eaf9f6-6a41-bc75-f566-9b5bd79d8c86_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/45eaf9f6-6a41-bc75-f566-9b5bd79d8c86_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/46b1b91d-126c-d956-18c2-48f3eb709c3b_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/46b1b91d-126c-d956-18c2-48f3eb709c3b_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/46b1b91d-126c-d956-18c2-48f3eb709c3b_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/46b1b91d-126c-d956-18c2-48f3eb709c3b_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/46b1b91d-126c-d956-18c2-48f3eb709c3b_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/46b1b91d-126c-d956-18c2-48f3eb709c3b_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/46b1b91d-126c-d956-18c2-48f3eb709c3b_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/46b1b91d-126c-d956-18c2-48f3eb709c3b_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/46b9a8e0-2de4-0e19-6ac2-1e0b8d43a331_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/46b9a8e0-2de4-0e19-6ac2-1e0b8d43a331_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/46b9a8e0-2de4-0e19-6ac2-1e0b8d43a331_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/46b9a8e0-2de4-0e19-6ac2-1e0b8d43a331_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/46b9a8e0-2de4-0e19-6ac2-1e0b8d43a331_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/46b9a8e0-2de4-0e19-6ac2-1e0b8d43a331_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/46b9a8e0-2de4-0e19-6ac2-1e0b8d43a331_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/46b9a8e0-2de4-0e19-6ac2-1e0b8d43a331_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/4c5e478c-34ad-f05c-eeeb-029ac961c9dc_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/4c5e478c-34ad-f05c-eeeb-029ac961c9dc_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/4c5e478c-34ad-f05c-eeeb-029ac961c9dc_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/4c5e478c-34ad-f05c-eeeb-029ac961c9dc_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/4c5e478c-34ad-f05c-eeeb-029ac961c9dc_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/4c5e478c-34ad-f05c-eeeb-029ac961c9dc_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/4c5e478c-34ad-f05c-eeeb-029ac961c9dc_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/4c5e478c-34ad-f05c-eeeb-029ac961c9dc_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/4c7dfb03-de94-125e-3502-5460fa5aa443_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/4c7dfb03-de94-125e-3502-5460fa5aa443_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/4c7dfb03-de94-125e-3502-5460fa5aa443_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/4c7dfb03-de94-125e-3502-5460fa5aa443_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/4c7dfb03-de94-125e-3502-5460fa5aa443_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/4c7dfb03-de94-125e-3502-5460fa5aa443_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/4c7dfb03-de94-125e-3502-5460fa5aa443_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/4c7dfb03-de94-125e-3502-5460fa5aa443_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/4d101276-d5fc-0de5-938e-7f01b95f5886_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/4d101276-d5fc-0de5-938e-7f01b95f5886_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/4d101276-d5fc-0de5-938e-7f01b95f5886_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/4d101276-d5fc-0de5-938e-7f01b95f5886_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/4d101276-d5fc-0de5-938e-7f01b95f5886_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/4d101276-d5fc-0de5-938e-7f01b95f5886_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/4d101276-d5fc-0de5-938e-7f01b95f5886_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/4d101276-d5fc-0de5-938e-7f01b95f5886_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5048cf21-5e6b-e189-59c9-0ca137de527b_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5048cf21-5e6b-e189-59c9-0ca137de527b_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5048cf21-5e6b-e189-59c9-0ca137de527b_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5048cf21-5e6b-e189-59c9-0ca137de527b_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5048cf21-5e6b-e189-59c9-0ca137de527b_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5048cf21-5e6b-e189-59c9-0ca137de527b_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5048cf21-5e6b-e189-59c9-0ca137de527b_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5048cf21-5e6b-e189-59c9-0ca137de527b_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/51343b2e-3c36-4e8a-b620-813d5abaef74_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/51343b2e-3c36-4e8a-b620-813d5abaef74_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/51343b2e-3c36-4e8a-b620-813d5abaef74_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/51343b2e-3c36-4e8a-b620-813d5abaef74_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/51343b2e-3c36-4e8a-b620-813d5abaef74_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/51343b2e-3c36-4e8a-b620-813d5abaef74_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/51343b2e-3c36-4e8a-b620-813d5abaef74_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/51343b2e-3c36-4e8a-b620-813d5abaef74_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/53ac0499-fdb2-a97b-6af4-a23e3205baa2_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/53ac0499-fdb2-a97b-6af4-a23e3205baa2_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/53ac0499-fdb2-a97b-6af4-a23e3205baa2_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/53ac0499-fdb2-a97b-6af4-a23e3205baa2_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/53ac0499-fdb2-a97b-6af4-a23e3205baa2_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/53ac0499-fdb2-a97b-6af4-a23e3205baa2_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/53ac0499-fdb2-a97b-6af4-a23e3205baa2_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/53ac0499-fdb2-a97b-6af4-a23e3205baa2_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_1_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_1_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_1_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_1_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_1_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_1_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_1_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_1_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_2_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_2_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_2_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_2_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_2_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_2_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_2_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_2_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_3_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_3_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_3_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_3_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_3_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_3_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_3_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_3_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_4_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_4_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_4_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_4_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_4_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_4_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_4_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_4_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_5_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_5_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_5_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_5_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_5_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_5_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_5_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_5_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_6_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_6_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_6_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_6_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_6_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_6_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_6_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_6_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_7_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_7_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_7_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_7_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_7_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_7_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_7_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_7_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_8_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_8_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_8_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_8_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_8_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_8_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_8_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_8_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_9_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_9_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_9_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_9_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_9_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_9_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_9_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/5b9366da-391f-7318-9464-59cc1d67a51d_9_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/60121ffb-f841-266e-a835-d33ca3e94c93_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/60121ffb-f841-266e-a835-d33ca3e94c93_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/60121ffb-f841-266e-a835-d33ca3e94c93_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/60121ffb-f841-266e-a835-d33ca3e94c93_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/60121ffb-f841-266e-a835-d33ca3e94c93_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/60121ffb-f841-266e-a835-d33ca3e94c93_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/60121ffb-f841-266e-a835-d33ca3e94c93_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/60121ffb-f841-266e-a835-d33ca3e94c93_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/61f94477-3574-6c3e-a138-61301deefcee_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/61f94477-3574-6c3e-a138-61301deefcee_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/61f94477-3574-6c3e-a138-61301deefcee_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/61f94477-3574-6c3e-a138-61301deefcee_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/61f94477-3574-6c3e-a138-61301deefcee_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/61f94477-3574-6c3e-a138-61301deefcee_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/61f94477-3574-6c3e-a138-61301deefcee_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/61f94477-3574-6c3e-a138-61301deefcee_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/684689ef-fc4e-f57f-8311-81e4e46bba32_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/684689ef-fc4e-f57f-8311-81e4e46bba32_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/684689ef-fc4e-f57f-8311-81e4e46bba32_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/684689ef-fc4e-f57f-8311-81e4e46bba32_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/684689ef-fc4e-f57f-8311-81e4e46bba32_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/684689ef-fc4e-f57f-8311-81e4e46bba32_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/684689ef-fc4e-f57f-8311-81e4e46bba32_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/684689ef-fc4e-f57f-8311-81e4e46bba32_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/69a6d4b4-1415-a63f-766c-bcc2f777b064_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/69a6d4b4-1415-a63f-766c-bcc2f777b064_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/69a6d4b4-1415-a63f-766c-bcc2f777b064_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/69a6d4b4-1415-a63f-766c-bcc2f777b064_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/69a6d4b4-1415-a63f-766c-bcc2f777b064_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/69a6d4b4-1415-a63f-766c-bcc2f777b064_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/69a6d4b4-1415-a63f-766c-bcc2f777b064_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/69a6d4b4-1415-a63f-766c-bcc2f777b064_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7077428d-8fc8-64ce-98a5-f95dda7fe244_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7077428d-8fc8-64ce-98a5-f95dda7fe244_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7077428d-8fc8-64ce-98a5-f95dda7fe244_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7077428d-8fc8-64ce-98a5-f95dda7fe244_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7077428d-8fc8-64ce-98a5-f95dda7fe244_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7077428d-8fc8-64ce-98a5-f95dda7fe244_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7077428d-8fc8-64ce-98a5-f95dda7fe244_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7077428d-8fc8-64ce-98a5-f95dda7fe244_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_1_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_1_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_1_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_1_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_1_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_1_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_1_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_1_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_2_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_2_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_2_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_2_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_2_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_2_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_2_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_2_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_3_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_3_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_3_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_3_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_3_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_3_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_3_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_3_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_4_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_4_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_4_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_4_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_4_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_4_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_4_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_4_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_5_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_5_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_5_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_5_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_5_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_5_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_5_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_5_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_6_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_6_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_6_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_6_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_6_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_6_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_6_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_6_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_7_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_7_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_7_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_7_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_7_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_7_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_7_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_7_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_8_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_8_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_8_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_8_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_8_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_8_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_8_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/75728310-1168-4ef4-1f9e-c6751edf5d81_8_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/772753a9-0fee-3c3f-d481-939acbd7655b_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/772753a9-0fee-3c3f-d481-939acbd7655b_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/772753a9-0fee-3c3f-d481-939acbd7655b_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/772753a9-0fee-3c3f-d481-939acbd7655b_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/772753a9-0fee-3c3f-d481-939acbd7655b_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/772753a9-0fee-3c3f-d481-939acbd7655b_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/772753a9-0fee-3c3f-d481-939acbd7655b_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/772753a9-0fee-3c3f-d481-939acbd7655b_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/78c5188b-1d71-459c-e6d5-a4c19d22c01a_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/78c5188b-1d71-459c-e6d5-a4c19d22c01a_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/78c5188b-1d71-459c-e6d5-a4c19d22c01a_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/78c5188b-1d71-459c-e6d5-a4c19d22c01a_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/78c5188b-1d71-459c-e6d5-a4c19d22c01a_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/78c5188b-1d71-459c-e6d5-a4c19d22c01a_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/78c5188b-1d71-459c-e6d5-a4c19d22c01a_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/78c5188b-1d71-459c-e6d5-a4c19d22c01a_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7975783c-11eb-428d-dd89-eed3d0be0f1e_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7975783c-11eb-428d-dd89-eed3d0be0f1e_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7975783c-11eb-428d-dd89-eed3d0be0f1e_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7975783c-11eb-428d-dd89-eed3d0be0f1e_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7975783c-11eb-428d-dd89-eed3d0be0f1e_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7975783c-11eb-428d-dd89-eed3d0be0f1e_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7975783c-11eb-428d-dd89-eed3d0be0f1e_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7975783c-11eb-428d-dd89-eed3d0be0f1e_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7cae3db7-9b3e-2fe9-361a-5df9a65e8b4c_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7cae3db7-9b3e-2fe9-361a-5df9a65e8b4c_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7cae3db7-9b3e-2fe9-361a-5df9a65e8b4c_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7cae3db7-9b3e-2fe9-361a-5df9a65e8b4c_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7cae3db7-9b3e-2fe9-361a-5df9a65e8b4c_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7cae3db7-9b3e-2fe9-361a-5df9a65e8b4c_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7cae3db7-9b3e-2fe9-361a-5df9a65e8b4c_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7cae3db7-9b3e-2fe9-361a-5df9a65e8b4c_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7e01b576-4d15-6d5d-6f3d-e965901d7832_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7e01b576-4d15-6d5d-6f3d-e965901d7832_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7e01b576-4d15-6d5d-6f3d-e965901d7832_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7e01b576-4d15-6d5d-6f3d-e965901d7832_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7e01b576-4d15-6d5d-6f3d-e965901d7832_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7e01b576-4d15-6d5d-6f3d-e965901d7832_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7e01b576-4d15-6d5d-6f3d-e965901d7832_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/7e01b576-4d15-6d5d-6f3d-e965901d7832_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_10_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_10_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_10_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_10_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_10_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_10_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_10_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_10_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_11_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_11_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_11_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_11_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_11_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_11_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_11_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_11_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_12_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_12_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_12_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_12_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_12_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_12_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_12_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_12_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_13_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_13_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_13_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_13_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_13_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_13_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_13_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_13_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_14_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_14_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_14_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_14_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_14_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_14_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_14_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_14_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_15_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_15_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_15_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_15_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_15_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_15_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_15_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_15_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_16_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_16_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_16_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_16_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_16_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_16_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_16_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_16_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_17_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_17_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_17_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_17_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_17_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_17_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_17_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_17_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_18_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_18_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_18_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_18_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_18_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_18_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_18_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_18_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_19_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_19_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_19_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_19_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_19_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_19_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_19_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_19_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_1_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_1_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_1_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_1_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_1_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_1_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_1_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_1_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_20_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_20_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_20_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_20_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_20_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_20_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_20_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_20_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_21_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_21_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_21_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_21_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_21_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_21_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_21_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_21_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_22_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_22_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_22_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_22_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_22_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_22_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_22_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_22_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_23_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_23_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_23_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_23_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_23_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_23_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_23_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_23_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_24_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_24_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_24_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_24_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_24_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_24_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_24_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_24_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_25_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_25_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_25_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_25_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_25_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_25_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_25_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_25_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_26_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_26_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_26_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_26_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_26_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_26_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_26_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_26_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_27_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_27_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_27_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_27_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_27_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_27_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_27_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_27_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_28_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_28_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_28_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_28_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_28_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_28_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_28_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_28_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_29_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_29_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_29_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_29_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_29_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_29_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_29_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_29_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_2_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_2_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_2_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_2_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_2_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_2_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_2_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_2_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_30_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_30_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_30_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_30_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_30_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_30_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_30_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_30_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_31_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_31_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_31_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_31_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_31_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_31_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_31_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_31_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_32_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_32_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_32_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_32_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_32_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_32_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_32_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_32_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_33_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_33_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_33_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_33_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_33_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_33_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_33_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_33_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_34_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_34_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_34_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_34_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_34_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_34_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_34_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_34_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_35_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_35_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_35_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_35_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_35_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_35_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_35_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_35_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_36_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_36_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_36_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_36_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_36_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_36_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_36_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_36_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_37_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_37_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_37_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_37_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_37_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_37_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_37_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_37_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_38_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_38_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_38_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_38_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_38_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_38_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_38_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_38_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_39_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_39_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_39_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_39_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_39_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_39_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_39_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_39_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_3_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_3_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_3_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_3_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_3_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_3_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_3_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_3_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_40_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_40_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_40_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_40_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_40_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_40_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_40_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_40_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_41_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_41_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_41_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_41_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_41_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_41_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_41_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_41_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_42_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_42_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_42_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_42_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_42_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_42_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_42_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_42_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_43_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_43_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_43_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_43_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_43_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_43_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_43_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_43_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_44_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_44_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_44_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_44_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_44_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_44_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_44_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_44_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_45_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_45_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_45_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_45_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_45_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_45_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_45_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_45_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_46_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_46_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_46_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_46_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_46_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_46_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_46_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_46_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_47_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_47_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_47_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_47_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_47_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_47_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_47_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_47_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_48_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_48_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_48_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_48_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_48_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_48_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_48_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_48_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_4_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_4_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_4_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_4_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_4_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_4_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_4_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_4_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_5_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_5_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_5_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_5_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_5_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_5_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_5_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_5_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_6_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_6_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_6_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_6_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_6_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_6_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_6_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_6_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_7_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_7_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_7_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_7_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_7_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_7_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_7_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_7_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_8_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_8_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_8_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_8_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_8_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_8_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_8_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_8_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_9_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_9_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_9_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_9_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_9_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_9_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_9_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/803b9863-cb04-fb41-f8f9-8c28216a8217_9_c.dds diff --git a/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/804b8929-4764-7c61-ae6c-6523d446144b_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/804b8929-4764-7c61-ae6c-6523d446144b_0_a.dds new file mode 100644 index 000000000..30669000e Binary files /dev/null and b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/804b8929-4764-7c61-ae6c-6523d446144b_0_a.dds differ diff --git a/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/804b8929-4764-7c61-ae6c-6523d446144b_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/804b8929-4764-7c61-ae6c-6523d446144b_0_c.dds new file mode 100644 index 000000000..117ecb724 Binary files /dev/null and b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/804b8929-4764-7c61-ae6c-6523d446144b_0_c.dds differ diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/8200593e-ed36-2fd3-e980-56e42a2f668f_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/8200593e-ed36-2fd3-e980-56e42a2f668f_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/8200593e-ed36-2fd3-e980-56e42a2f668f_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/8200593e-ed36-2fd3-e980-56e42a2f668f_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/8200593e-ed36-2fd3-e980-56e42a2f668f_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/8200593e-ed36-2fd3-e980-56e42a2f668f_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/8200593e-ed36-2fd3-e980-56e42a2f668f_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/8200593e-ed36-2fd3-e980-56e42a2f668f_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/832ae139-722c-49da-8cc9-7039efc0be5b_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/832ae139-722c-49da-8cc9-7039efc0be5b_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/832ae139-722c-49da-8cc9-7039efc0be5b_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/832ae139-722c-49da-8cc9-7039efc0be5b_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/832ae139-722c-49da-8cc9-7039efc0be5b_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/832ae139-722c-49da-8cc9-7039efc0be5b_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/832ae139-722c-49da-8cc9-7039efc0be5b_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/832ae139-722c-49da-8cc9-7039efc0be5b_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/8d7dad3e-ff0e-0e42-223c-2df640a92cee_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/8d7dad3e-ff0e-0e42-223c-2df640a92cee_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/8d7dad3e-ff0e-0e42-223c-2df640a92cee_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/8d7dad3e-ff0e-0e42-223c-2df640a92cee_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/8d7dad3e-ff0e-0e42-223c-2df640a92cee_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/8d7dad3e-ff0e-0e42-223c-2df640a92cee_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/8d7dad3e-ff0e-0e42-223c-2df640a92cee_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/8d7dad3e-ff0e-0e42-223c-2df640a92cee_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/96ac5a82-3c9e-9a7c-642c-8dc55d2d9572_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/96ac5a82-3c9e-9a7c-642c-8dc55d2d9572_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/96ac5a82-3c9e-9a7c-642c-8dc55d2d9572_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/96ac5a82-3c9e-9a7c-642c-8dc55d2d9572_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/96ac5a82-3c9e-9a7c-642c-8dc55d2d9572_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/96ac5a82-3c9e-9a7c-642c-8dc55d2d9572_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/96ac5a82-3c9e-9a7c-642c-8dc55d2d9572_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/96ac5a82-3c9e-9a7c-642c-8dc55d2d9572_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/977af181-f844-246f-85de-5a6c04072533_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/977af181-f844-246f-85de-5a6c04072533_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/977af181-f844-246f-85de-5a6c04072533_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/977af181-f844-246f-85de-5a6c04072533_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/977af181-f844-246f-85de-5a6c04072533_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/977af181-f844-246f-85de-5a6c04072533_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/977af181-f844-246f-85de-5a6c04072533_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/977af181-f844-246f-85de-5a6c04072533_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/99f9d5ac-584e-1251-e306-64553ac0f42b_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/99f9d5ac-584e-1251-e306-64553ac0f42b_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/99f9d5ac-584e-1251-e306-64553ac0f42b_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/99f9d5ac-584e-1251-e306-64553ac0f42b_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/99f9d5ac-584e-1251-e306-64553ac0f42b_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/99f9d5ac-584e-1251-e306-64553ac0f42b_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/99f9d5ac-584e-1251-e306-64553ac0f42b_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/99f9d5ac-584e-1251-e306-64553ac0f42b_0_c.dds diff --git a/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/9c7795b0-7bb0-1cf6-a6de-12a436ece71a_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/9c7795b0-7bb0-1cf6-a6de-12a436ece71a_0_a.dds new file mode 100644 index 000000000..0e5a5a009 Binary files /dev/null and b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/9c7795b0-7bb0-1cf6-a6de-12a436ece71a_0_a.dds differ diff --git a/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/9c7795b0-7bb0-1cf6-a6de-12a436ece71a_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/9c7795b0-7bb0-1cf6-a6de-12a436ece71a_0_c.dds new file mode 100644 index 000000000..614977868 Binary files /dev/null and b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/9c7795b0-7bb0-1cf6-a6de-12a436ece71a_0_c.dds differ diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/a5916ba8-2ab0-911a-a7b9-87d42af3f685_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/a5916ba8-2ab0-911a-a7b9-87d42af3f685_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/a5916ba8-2ab0-911a-a7b9-87d42af3f685_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/a5916ba8-2ab0-911a-a7b9-87d42af3f685_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/a5916ba8-2ab0-911a-a7b9-87d42af3f685_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/a5916ba8-2ab0-911a-a7b9-87d42af3f685_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/a5916ba8-2ab0-911a-a7b9-87d42af3f685_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/a5916ba8-2ab0-911a-a7b9-87d42af3f685_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/afa9de63-bd99-8822-4ae7-48e017194952_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/afa9de63-bd99-8822-4ae7-48e017194952_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/afa9de63-bd99-8822-4ae7-48e017194952_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/afa9de63-bd99-8822-4ae7-48e017194952_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/afa9de63-bd99-8822-4ae7-48e017194952_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/afa9de63-bd99-8822-4ae7-48e017194952_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/afa9de63-bd99-8822-4ae7-48e017194952_0_c.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/afa9de63-bd99-8822-4ae7-48e017194952_0_c.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/b1bfa99a-94f5-4208-ce62-efae33390bbb_0_a.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/b1bfa99a-94f5-4208-ce62-efae33390bbb_0_a.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/b1bfa99a-94f5-4208-ce62-efae33390bbb_0_a.dds rename to Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/b1bfa99a-94f5-4208-ce62-efae33390bbb_0_a.dds diff --git a/Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/b1bfa99a-94f5-4208-ce62-efae33390bbb_0_c.dds b/Utility Mods/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/b1bfa99a-94f5-4208-ce62-efae33390bbb_0_c.dds similarity index 100% rename from Utility Mods/Stable/SpraysAddon-StarCore Enabler Rewards/Textures/MySprays/b1bfa99a-94f5-4208-ce62-efae33390bbb_0_c.dds rename to Utility Mods/SpraysA{"code":"deadline_exceeded","msg":"operation timed out"}