Compare commits

...

83 Commits

Author SHA1 Message Date
Redrover1760 02be1ef282 Merge branch 'main' of https://github.com/Monolith-Station/Monolith 2026-04-03 20:48:51 -04:00
Redrover1760 85c4a0c9ec fixes grilles protecting biomass 2026-04-03 20:48:12 -04:00
monolith8319 baeb53ee82 Automated Changelog (#3578) 2026-04-03 18:29:42 +00:00
Redrover1760 933dc75c33 Buffs Standard Borg HP, Removes Negative Burn Armor (#3578) 2026-04-03 21:29:10 +03:00
monolith8319 fc45f016ee Automated Changelog (#3602) 2026-04-03 18:28:53 +00:00
Ilya246 6a719f7c39 Adc Piloting Boost (#3602) 2026-04-03 21:28:23 +03:00
monolith8319 d83db373fe Automated Changelog (#3667) 2026-04-03 18:27:01 +00:00
monolith8319 ccec7894c6 Automated Changelog (#3680) 2026-04-03 18:26:27 +00:00
Redrover1760 3319b5f0d3 Makes Tsf Mech Blips Lighter (#3667) 2026-04-03 21:26:26 +03:00
EldritchPineapple 81d9ae37e3 Medicated Suture and Meshes Buff (#3680) 2026-04-03 21:25:56 +03:00
monolith8319 1990f2a272 Automated Changelog (#3636) 2026-04-03 17:46:40 +00:00
Kiithnaras 3665639420 Laser Weapon Improvements (#3636) 2026-04-03 20:46:11 +03:00
monolith8319 20e2ceb0db Automated Changelog (#3673) 2026-04-03 17:45:43 +00:00
chuga-git 84a116fd27 Torpedo/GPO Speed Buffs (#3673) 2026-04-03 20:45:12 +03:00
monolith8319 c3c402d380 Automated Changelog (#3681) 2026-04-03 17:43:07 +00:00
Redrover1760 92e8677e82 Research Datafarms Buffs (#3681) 2026-04-03 20:42:36 +03:00
monolith8319 65365135e3 Automated Changelog (#3285) 2026-04-03 11:09:38 +00:00
monolith8319 62e372c9d2 Automated Changelog (#3195) 2026-04-03 11:09:08 +00:00
NazrinNya 4279c1977d Hullmods (#3285)
Co-authored-by: NazrinNya <macrohard@macrohard.localhost>
2026-04-03 14:08:54 +03:00
NazrinNya 6406a7cf4f Non-POI Vends Are Now Free. (#3195)
Co-authored-by: NazrinNya <macrohard@macrohard.localhost>
Co-authored-by: UnicornOnLSD <149102472+UnicornOnLSD@users.noreply.github.com>
Co-authored-by: Redrover1760 <39284090+Redrover1760@users.noreply.github.com>
2026-04-03 14:08:39 +03:00
monolith8319 806e22e8b4 Automated Changelog (#3679) 2026-04-03 09:51:27 +00:00
EckoAurum c2934d0bd7 Fix Borg Hand Whitelist Bug (#3679) 2026-04-03 09:50:59 +00:00
monolith8319 5316f1fdd9 Automated Changelog (#3678) 2026-04-03 09:04:37 +00:00
Ilya246 66fed8d2a2 Kill Shield Ramming (#3678) 2026-04-03 12:04:09 +03:00
monolith8319 28e3584a67 Automated Changelog (#3677) 2026-04-02 18:53:22 +00:00
Ilya246 78c94ddbc4 Far Reaches IV, New Drone (#3677) 2026-04-02 20:52:53 +02:00
monolith8319 cef95a03bf Automated Changelog (#3559) 2026-04-02 17:25:51 +00:00
Ilya246 bd3a35ee64 New Drone: Bracket, Refactor Drone Yaml a Bit (#3559) 2026-04-02 17:25:02 +00:00
Redrover1760 0b50c919e4 Stops Sloppy Vgroid Debug/Localhost Crashing (#3597) 2026-04-02 10:37:55 -04:00
monolith8319 afcf994545 Automated Changelog (#3672) 2026-04-01 22:09:20 +00:00
UnicornOnLSD 5aaee26a09 Adds a Single OREBOX to the DIS Rig (#3672) 2026-04-02 00:08:49 +02:00
monolith8319 fb3c49bd09 Automated Changelog (#3635) 2026-04-01 16:22:35 +00:00
Redrover1760 2c381cbcd0 Makes Biomass Less Painful to Deal With (#3635) 2026-04-01 12:22:03 -04:00
Ilya246 f4e3ac2478 Fix Logspam 2 (#3661) 2026-03-31 09:12:58 -04:00
Anri 31de4af5e2 Remove Repeat Work in ThermalSignatureSystem (#3631)
Co-authored-by: Ilya246 <57039557+Ilya246@users.noreply.github.com>
2026-03-31 11:28:47 +00:00
Ilya246 5e67e63032 Fix Server Log Spam (#3657) 2026-03-31 06:46:54 +00:00
Redrover1760 f3919fafc1 Revert "Merge branch 'april1st' into main" (#3655) 2026-03-30 21:01:19 -04:00
Redrover1760 974b78863b Merge branch 'april1st' into main 2026-03-30 20:48:47 -04:00
monolith8319 1654bd5cf8 Automated Changelog (#3650) 2026-03-30 19:42:07 +00:00
mikus d353667f97 [April 1st] Only True Noticers (#3650) 2026-03-30 15:41:35 -04:00
monolith8319 47116d8ba7 Automated Changelog (#3648) 2026-03-30 18:16:21 +00:00
Ilya246 9bd6d5f3f2 [April 1st] Asteroid Update (#3648) 2026-03-30 18:15:50 +00:00
Corrupt 1dc696deb6 AAAAA (#3646) 2026-03-30 19:34:15 +02:00
monolith8319 f2df23dc81 Automated Changelog (#3645) 2026-03-30 17:33:41 +00:00
mikus 76d6ea96e0 [April 1st] New Company (#3645)
Co-authored-by: Ilya246 <57039557+Ilya246@users.noreply.github.com>
2026-03-30 17:33:10 +00:00
monolith8319 93ba265e00 Automated Changelog (#3642) 2026-03-30 17:08:08 +00:00
tonotom1 16f73ec031 [April 1st] Buffs Space Pen (#3642) 2026-03-30 17:07:38 +00:00
monolith8319 7a0f0d04c5 Automated Changelog (#3641) 2026-03-30 16:42:14 +00:00
mikus bcce8e67a3 [April 1st] 65 (#3641) 2026-03-30 16:41:45 +00:00
monolith8319 5afcdd9379 Automated Changelog (#3615) 2026-03-30 16:22:32 +00:00
mikus 01c7ea464a [April 1st] 65 (#3615) 2026-03-30 16:22:01 +00:00
monolith8319 4df38cc9cc Automated Changelog (#3640) 2026-03-30 15:45:53 +00:00
mikus 8c0d2a50df [April 1st] Clanker Rebalance (#3640) 2026-03-30 15:45:19 +00:00
monolith8319 2d8105de13 Automated Changelog (#3611) 2026-03-30 15:43:28 +00:00
burrrkeye 01bb73bf56 [APRIL 1st] Charon Rebalance (#3611)
Co-authored-by: Corrupt <compeldominik6@gmail.com>
Co-authored-by: monolith8319 <195513600+monolith8319@users.noreply.github.com>
2026-03-30 15:42:55 +00:00
monolith8319 f11c83a96e Automated Changelog (#3626) 2026-03-30 04:38:58 +00:00
mikus 36d1740829 [April 1st] Adjusts (#3626) 2026-03-30 08:38:28 +04:00
monolith8319 c7a34dfc22 Automated Changelog (#3627) 2026-03-29 18:38:24 +00:00
Redrover1760 e366c4d7cc [April 1st] Adds a Very Fair Drone to the Game (#3627)
Co-authored-by: Corrupt <compeldominik6@gmail.com>
Co-authored-by: monolith8319 <195513600+monolith8319@users.noreply.github.com>
Co-authored-by: Ilya246 <57039557+Ilya246@users.noreply.github.com>
Co-authored-by: EckoAurum <202461799+EckoAurum@users.noreply.github.com>
Co-authored-by: ScarletLightweaver <82061820+ScarletLightweaverSS14@users.noreply.github.com>
2026-03-29 14:37:54 -04:00
monolith8319 5d5f6b4654 Automated Changelog (#3622) 2026-03-29 18:10:30 +00:00
mikus 165f9950b5 {April 1st] Brings Back the Tactics of Evil Hidden TSF Ninja Warriors (#3622) 2026-03-29 14:10:01 -04:00
monolith8319 ef9858936d Automated Changelog (#3619) 2026-03-29 18:09:42 +00:00
Redrover1760 d0a95f5d8b [April 1st] Upgrades Bomb Collars (#3619)
Co-authored-by: Corrupt <compeldominik6@gmail.com>
Co-authored-by: monolith8319 <195513600+monolith8319@users.noreply.github.com>
Co-authored-by: Ilya246 <57039557+Ilya246@users.noreply.github.com>
Co-authored-by: EckoAurum <202461799+EckoAurum@users.noreply.github.com>
Co-authored-by: ScarletLightweaver <82061820+ScarletLightweaverSS14@users.noreply.github.com>
2026-03-29 14:09:11 -04:00
monolith8319 ee386b0633 Automated Changelog (#3623) 2026-03-29 18:08:59 +00:00
mikus de38cc18ef [April 1st] Buffs Shortband (#3623) 2026-03-29 14:08:28 -04:00
monolith8319 ca928bdc83 Automated Changelog (#3625) 2026-03-29 17:56:37 +00:00
mikus cee6ce9566 [April 1st] Updates Ownership of the Treasury to the Bank Of America (#3625) 2026-03-29 17:56:06 +00:00
monolith8319 984a2c9b71 Automated Changelog (#3624) 2026-03-29 17:16:08 +00:00
Ilya246 548e9eccb6 [April 1st] Mobile Pois 2 (#3624) 2026-03-29 17:15:36 +00:00
monolith8319 cd817abd2c Automated Changelog (#3620) 2026-03-29 16:54:09 +00:00
NazrinNya f276df8fe9 [1 April] Add Larp (#3620)
Co-authored-by: NazrinNya <macrohard@macrohard.localhost>
2026-03-29 16:53:40 +00:00
monolith8319 dd323be01d Automated Changelog (#3621) 2026-03-29 16:53:31 +00:00
mikus 0cf9b35f08 [April 1st] Adds New Forms of Energy Production (#3621) 2026-03-29 19:52:59 +03:00
monolith8319 351b225102 Automated Changelog (#3616) 2026-03-29 15:47:58 +00:00
gonz0 496432881e [April 1st] Detroit Borers (#3616) 2026-03-29 11:47:30 -04:00
monolith8319 5798b57788 Automated Changelog (#3612) 2026-03-29 14:46:04 +00:00
mikus ec88162ac0 [April 1st] Adds New Type of Bluespace Drive (#3612) 2026-03-29 14:45:36 +00:00
monolith8319 3992aa846f Automated Changelog (#3610) 2026-03-29 14:18:14 +00:00
Ilya246 4b62f35f10 [April 1st] ilya changes round 2 (#3610) 2026-03-29 14:17:46 +00:00
mikus c5241854ce [April 1st] Piras314 Wrote This (#3606) 2026-03-29 13:57:07 +00:00
mikus c3f687a493 [April 1st] Rebalances Gunnery Controls (#3605) 2026-03-29 13:40:19 +00:00
Ilya246 7b00d623e0 [April 1st] Ilya April1st Changes Round 1 (#3603) 2026-03-29 13:24:54 +00:00
mikus dafbb5f3d8 [April 1st] Makes Borgs Balanced (#3604) 2026-03-29 13:24:41 +00:00
62 changed files with 7172 additions and 297 deletions
@@ -76,7 +76,7 @@ public sealed class DamageOverlayUiController : UIController
{
if (mobState == null && !EntityManager.TryGetComponent(entity, out mobState) ||
thresholds == null && !EntityManager.TryGetComponent(entity, out thresholds) ||
damageable == null && !EntityManager.TryGetComponent(entity, out damageable))
damageable == null && !EntityManager.TryGetComponent(entity, out damageable))
return;
if (!_mobThresholdSystem.TryGetIncapThreshold(entity, out var foundThreshold, thresholds))
@@ -94,47 +94,48 @@ public sealed class DamageOverlayUiController : UIController
switch (mobState.CurrentState)
{
case MobState.Alive:
{
if (EntityManager.HasComponent<PainNumbnessComponent>(entity))
{
_overlay.BruteLevel = 0;
}
else if (damageable.DamagePerGroup.TryGetValue("Brute", out var bruteDamage))
{
_overlay.BruteLevel = FixedPoint2.Min(1f, bruteDamage / critThreshold).Float();
}
if (!EntityManager.HasComponent<PainNumbnessComponent>(entity)) // Mono - makes this look better
{
if (damageable.DamagePerGroup.TryGetValue("Brute", out var bruteDamage))
_overlay.BruteLevel = FixedPoint2.Min(1f, bruteDamage / critThreshold).Float();
if (damageable.DamagePerGroup.TryGetValue("Burn", out var burnDamage)) // Adds burn damage to pain overlay - Mono
_overlay.BruteLevel = FixedPoint2.Min(1f, _overlay.BruteLevel + (burnDamage / critThreshold)).Float();
}
else
_overlay.BruteLevel = 0;
if (damageable.DamagePerGroup.TryGetValue("Airloss", out var oxyDamage))
{
_overlay.OxygenLevel = FixedPoint2.Min(1f, oxyDamage / critThreshold).Float();
}
if (damageable.DamagePerGroup.TryGetValue("Airloss", out var oxyDamage))
{
_overlay.OxygenLevel = FixedPoint2.Min(1f, oxyDamage / critThreshold).Float();
}
if (_overlay.BruteLevel < 0.05f) // Don't show damage overlay if they're near enough to max.
{
_overlay.BruteLevel = 0;
}
if (_overlay.BruteLevel < 0.05f) // Don't show damage overlay if they're near enough to max.
{
_overlay.BruteLevel = 0;
}
_overlay.CritLevel = 0;
_overlay.DeadLevel = 0;
break;
}
_overlay.CritLevel = 0;
_overlay.DeadLevel = 0;
break;
}
case MobState.Critical:
{
if (!_mobThresholdSystem.TryGetDeadPercentage(entity,
FixedPoint2.Max(0.0, damageable.TotalDamage), out var critLevel))
return;
_overlay.CritLevel = critLevel.Value.Float();
{
if (!_mobThresholdSystem.TryGetDeadPercentage(entity,
FixedPoint2.Max(0.0, damageable.TotalDamage), out var critLevel))
return;
_overlay.CritLevel = critLevel.Value.Float();
_overlay.BruteLevel = 0;
_overlay.DeadLevel = 0;
break;
}
_overlay.BruteLevel = 0;
_overlay.DeadLevel = 0;
break;
}
case MobState.Dead:
{
_overlay.BruteLevel = 0;
_overlay.CritLevel = 0;
break;
}
{
_overlay.BruteLevel = 0;
_overlay.CritLevel = 0;
break;
}
}
}
}
@@ -82,7 +82,7 @@ namespace Content.Client.VendingMachines.UI
/// Populates the list of available items on the vending machine interface
/// and sets icons based on their prototypes
/// </summary>
public void Populate(List<VendingMachineInventoryEntry> inventory, float priceModifier, int balance, int? cashSlotBalance) // Frontier: add balance, cashSlotBalance
public void Populate(List<VendingMachineInventoryEntry> inventory, float priceModifier, int balance, int? cashSlotBalance, bool requiresCash) // Frontier: add balance, cashSlotBalance
{
UpdateBalance(balance); // Frontier
UpdateCashSlotBalance(cashSlotBalance); // Frontier
@@ -124,84 +124,11 @@ namespace Content.Client.VendingMachines.UI
_dummies.Add(entry.ID, dummy);
}
// Frontier: item pricing
// ok so we dont really have access to the pricing system so we are doing a quick price check
// based on prototype info since the items inside a vending machine dont actually exist as entities
// until they are spawned. So this little alg does the following:
// first, checks for a staticprice component, and if it has one, checks to make sure its not 0 since
// stacks and other items have 0 cost.
// If the price is 0, then we check for both a stack price and a stack component, since if it has one
// it should have the other too, and then calculates the price based on that.
// If the price is still 0 or non-existant (this is the case for food and containers since their value is
// determined dynamically by their contents/inventory), it then falls back to the default mystery
// hardcoded value of 20xMarketModifier.
var cost = 20;
if (prototype != null && prototype.TryGetComponent<StaticPriceComponent>(out var priceComponent, _entityManager.ComponentFactory))
{
if (priceComponent.Price != 0)
{
var price = (float)priceComponent.Price;
cost = (int)(price * priceModifier);
}
else
{
if (prototype.TryGetComponent<StackPriceComponent>(out var stackPrice, _entityManager.ComponentFactory)
&& prototype.TryGetComponent<StackComponent>(out var stack, _entityManager.ComponentFactory))
{
var price = stackPrice.Price * stack.Count;
cost = (int)(price * priceModifier);
}
else
cost = (int)(cost * priceModifier);
}
}
else
cost = (int)(cost * priceModifier);
if (prototype != null && prototype.TryGetComponent<SolutionContainerManagerComponent>(out var priceSolutions, _entityManager.ComponentFactory))
{
if (priceSolutions.Solutions != null)
{
foreach (var solution in priceSolutions.Solutions.Values)
{
foreach (var (reagent, quantity) in solution.Contents)
{
if (!_prototypeManager.TryIndex<ReagentPrototype>(reagent.Prototype,
out var reagentProto))
continue;
// TODO check ReagentData for price information?
var costReagent = quantity.Float() * reagentProto.PricePerUnit;
cost += (int)(costReagent * priceModifier);
}
}
}
}
// End Frontier: item pricing
// Frontier: calculate vending price (this duplicates Content.Server.PricingSystem.GetVendPrice - this should be moved to Content.Shared if possible)
if (prototype != null)
{
var price = 0.0;
if (prototype.TryGetComponent<StaticPriceComponent>(out var staticComp, _entityManager.ComponentFactory) && staticComp.VendPrice > 0.0)
{
price += staticComp.VendPrice;
}
else if (prototype.TryGetComponent<StackPriceComponent>(out var stackComp, _entityManager.ComponentFactory) && stackComp.VendPrice > 0.0)
{
price += stackComp.VendPrice;
}
// If there is anything that explicitly sets vending price - higher OR lower, override the base.
if (price > 0.0)
{
cost = (int)price;
}
}
// End Frontier
var itemName = Identity.Name(dummy, _entityManager);
var cost = 0; // mono
if (requiresCash) // frontier
cost = GetPrice(entry, prototype, priceModifier);
string itemText;
// Frontier: unlimited vending
@@ -211,7 +138,6 @@ namespace Content.Client.VendingMachines.UI
itemText = $"[{BankSystemExtensions.ToSpesoString(cost)}] {itemName}";
// End Frontier: unlimited vending
if (itemText.Length > longestEntry.Length)
longestEntry = itemText;
@@ -223,6 +149,88 @@ namespace Content.Client.VendingMachines.UI
SetSizeAfterUpdate(longestEntry.Length, inventory.Count);
}
// Mono: Moved out frontier pricing logic to the separate method
private int GetPrice(VendingMachineInventoryEntry entry, EntityPrototype? prototype, float priceModifier){
// Frontier: item pricing
// ok so we dont really have access to the pricing system so we are doing a quick price check
// based on prototype info since the items inside a vending machine dont actually exist as entities
// until they are spawned. So this little alg does the following:
// first, checks for a staticprice component, and if it has one, checks to make sure its not 0 since
// stacks and other items have 0 cost.
// If the price is 0, then we check for both a stack price and a stack component, since if it has one
// it should have the other too, and then calculates the price based on that.
// If the price is still 0 or non-existant (this is the case for food and containers since their value is
// determined dynamically by their contents/inventory), it then falls back to the default mystery
// hardcoded value of 20xMarketModifier.
var cost = 20;
if (prototype != null && prototype.TryGetComponent<StaticPriceComponent>(out var priceComponent, _entityManager.ComponentFactory))
{
if (priceComponent.Price != 0)
{
var price = (float)priceComponent.Price;
cost = (int)(price * priceModifier);
}
else
{
if (prototype.TryGetComponent<StackPriceComponent>(out var stackPrice, _entityManager.ComponentFactory)
&& prototype.TryGetComponent<StackComponent>(out var stack, _entityManager.ComponentFactory))
{
var price = stackPrice.Price * stack.Count;
cost = (int)(price * priceModifier);
}
else
cost = (int)(cost * priceModifier);
}
}
else
cost = (int)(cost * priceModifier);
if (prototype != null && prototype.TryGetComponent<SolutionContainerManagerComponent>(out var priceSolutions, _entityManager.ComponentFactory))
{
if (priceSolutions.Solutions != null)
{
foreach (var solution in priceSolutions.Solutions.Values)
{
foreach (var (reagent, quantity) in solution.Contents)
{
if (!_prototypeManager.TryIndex<ReagentPrototype>(reagent.Prototype,
out var reagentProto))
continue;
// TODO check ReagentData for price information?
var costReagent = quantity.Float() * reagentProto.PricePerUnit;
cost += (int)(costReagent * priceModifier);
}
}
}
}
// End Frontier: item pricing
// Frontier: calculate vending price (this duplicates Content.Server.PricingSystem.GetVendPrice - this should be moved to Content.Shared if possible)
if (prototype != null)
{
var price = 0.0;
if (prototype.TryGetComponent<StaticPriceComponent>(out var staticComp, _entityManager.ComponentFactory) && staticComp.VendPrice > 0.0)
{
price += staticComp.VendPrice;
}
else if (prototype.TryGetComponent<StackPriceComponent>(out var stackComp, _entityManager.ComponentFactory) && stackComp.VendPrice > 0.0)
{
price += stackComp.VendPrice;
}
// If there is anything that explicitly sets vending price - higher OR lower, override the base.
if (price > 0.0)
{
cost = (int)price;
}
}
return cost;
// End Frontier
}
// Frontier
public void UpdateBalance(int balance)
{
@@ -30,6 +30,8 @@ namespace Content.Client.VendingMachines
[ViewVariables]
private int _cashSlotBalance = 0;
// End Frontier
[ViewVariables]
private bool _requiresCash; // mono
public VendingMachineBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
{
@@ -74,6 +76,7 @@ namespace Content.Client.VendingMachines
if (EntMan.TryGetComponent<VendingMachineComponent>(Owner, out var vendingMachine))
{
_cashSlotBalance = vendingMachine.CashSlotBalance;
_requiresCash = vendingMachine.RequiresCash; // mono
if (vendingMachine.CashSlotName != null)
cashSlotValue = _cashSlotBalance;
}
@@ -83,7 +86,7 @@ namespace Content.Client.VendingMachines
}
// End Frontier
_menu?.Populate(_cachedInventory, _mod, _balance, cashSlotValue); // Frontier: add _balance
_menu?.Populate(_cachedInventory, _mod, _balance, cashSlotValue, _requiresCash); // Frontier: add _balance, mono: add _requiresCash
}
private void OnItemSelected(GUIBoundKeyEventArgs args, ListData data)
@@ -273,12 +273,20 @@ public sealed class MoverController : SharedMoverController
// Mono: all below code handling shuttle movement has been heavily modified by Monolith
//
/// <summary>
/// Get a shuttle's torque.
/// </summary>
public float GetTorque(ShuttleComponent shuttle)
{
return shuttle.AngularThrust * shuttle.AngularMultiplier;
}
/// <summary>
/// Get a shuttle's angular acceleration.
/// </summary>
public float GetAngularAcceleration(ShuttleComponent shuttle, PhysicsComponent body)
{
return shuttle.AngularThrust * body.InvI;
return GetTorque(shuttle) * body.InvI;
}
/// <summary>
@@ -302,7 +310,7 @@ public sealed class MoverController : SharedMoverController
// prevent NaNs
dir *= dir.X == 0 ? vertScale : dir.Y == 0 ? horizScale : MathF.Min(horizScale, vertScale);
return dir;
return dir * shuttle.AccelerationMultiplier;
}
public Vector2 GetDirectionAccel(Vector2 dir, ShuttleComponent shuttle, PhysicsComponent body)
@@ -323,7 +331,7 @@ public sealed class MoverController : SharedMoverController
var twr = thrust.Length() / body.Mass;
var twrMult = MathF.Pow(twr / shuttle.BaseMaxVelocityTWR, shuttle.MaxVelocityScalingExponent);
return vel.Normalized() * MathF.Min(shuttle.BaseMaxLinearVelocity * twrMult, MathF.Min(shuttle.UpperMaxVelocity, shuttle.SetMaxVelocity));
return vel.Normalized() * MathF.Min(shuttle.BaseMaxLinearVelocity * twrMult * shuttle.MaxVelMultiplier, MathF.Min(shuttle.UpperMaxVelocity, shuttle.SetMaxVelocity));
}
private void HandleShuttleMovement(float frameTime)
@@ -335,6 +343,9 @@ public sealed class MoverController : SharedMoverController
// query all our pilots for input
var toRemove = new List<EntityUid>();
var angularMul = 0f;
var accelMul = 0f;
var maxVelMul = 0f;
foreach (var pilot in piloted.InputSources)
{
var inputsEv = new GetShuttleInputsEvent(frameTime, uid);
@@ -343,7 +354,12 @@ public sealed class MoverController : SharedMoverController
if (!inputsEv.GotInput)
toRemove.Add(pilot);
else if (inputsEv.Input != null)
{
inputs.Add(inputsEv.Input.Value);
angularMul += inputsEv.AngularMul;
accelMul += inputsEv.AccelMul;
maxVelMul += inputsEv.MaxVelMul;
}
}
foreach (var remUid in toRemove)
@@ -359,6 +375,7 @@ public sealed class MoverController : SharedMoverController
{
_thruster.DisableLinearThrusters(shuttle);
PhysicsSystem.SetSleepingAllowed(uid, body, true);
shuttle.AngularMultiplier = shuttle.AccelerationMultiplier = shuttle.MaxVelMultiplier = 1f;
continue;
}
PhysicsSystem.SetSleepingAllowed(uid, body, false);
@@ -377,6 +394,13 @@ public sealed class MoverController : SharedMoverController
angularInput /= count;
brakeInput /= count;
angularMul /= count;
accelMul /= count;
maxVelMul /= count;
shuttle.AngularMultiplier = angularMul;
shuttle.AccelerationMultiplier = accelMul;
shuttle.MaxVelMultiplier = maxVelMul;
var shuttleNorthAngle = _xformSystem.GetWorldRotation(uid);
// handle movement: brake
@@ -524,7 +548,7 @@ public sealed class MoverController : SharedMoverController
}
else
{
var torque = shuttle.AngularThrust * -angularInput;
var torque = GetTorque(shuttle) * -angularInput;
// Need to cap the velocity if 1 tick of input brings us over cap so we don't continuously
// edge onto the cap over and over.
@@ -9,9 +9,10 @@ public record struct ShuttleInput(Vector2 Strafe, float Rotation, float Brakes);
/// <summary>
/// Raised on pilots to get inputs given to a shuttle.
/// If GotInput is false, this piloted is removed from input sources.
/// Also queries for multipliers to acceleration and max speed.
/// </summary>
[ByRefEvent]
public record struct GetShuttleInputsEvent(float FrameTime, EntityUid ShuttleUid, ShuttleInput? Input = null, bool GotInput = false);
public record struct GetShuttleInputsEvent(float FrameTime, EntityUid ShuttleUid, ShuttleInput? Input = null, bool GotInput = false, float AngularMul = 1f, float AccelMul = 1f, float MaxVelMul = 1f);
[ByRefEvent]
public record struct PilotedShuttleRelayedEvent<TEvent>(TEvent Args);
@@ -105,6 +105,24 @@ namespace Content.Server.Shuttles.Components
/// </summar>
[DataField]
public Vector2 LastThrust = Vector2.Zero;
/// <summary>
/// Multiplier to angular thrust. Set depending on pilot.
/// </summary
[ViewVariables]
public float AngularMultiplier = 1f;
/// <summary>
/// Multiplier to linear thrust. Set depending on pilot.
/// </summary
[ViewVariables]
public float AccelerationMultiplier = 1f;
/// <summary>
/// Multiplier to max velocity. Set depending on pilot.
/// </summary
[ViewVariables]
public float MaxVelMultiplier = 1f;
// </Mono>
}
}
@@ -225,16 +225,19 @@ public sealed partial class ShuttleSystem
var inelasticVel = totalInertia / (ourMass + otherMass);
// Mono Edit - partial credit to https://github.com/Sector-Crescent/Hullrot/pull/692
//ShipShieldedComp is removed when shields are broken, only reduces energy delivered when shields are active. ShipShieldsSystem ln 256.
//ShipShieldedComp is removed when shields are broken, reduces both energies when shields are active. ShipShieldsSystem ln 256.
float shieldFactor = 1f;
if (TryComp<ShipShieldedComponent>(args.OurEntity, out var ShipShieldedComponent) //Our ship collision resistance
&& TryComp<ShipShieldEmitterComponent>(ShipShieldedComponent.Source, out var ShipShieldEmitterComponent)
)
toUsEnergy *= ShipShieldEmitterComponent.CollisionResistanceMultiplier;
shieldFactor *= ShipShieldEmitterComponent.CollisionResistanceMultiplier;
if (TryComp<ShipShieldedComponent>(args.OtherEntity, out var OtherShipShieldedComponent) //Other ship collision resistance
&& TryComp<ShipShieldEmitterComponent>(OtherShipShieldedComponent.Source, out var OtherShipShieldEmitterComponent)
)
toOtherEnergy *= OtherShipShieldEmitterComponent.CollisionResistanceMultiplier;
shieldFactor *= OtherShipShieldEmitterComponent.CollisionResistanceMultiplier;
toUsEnergy *= shieldFactor;
toOtherEnergy *= shieldFactor;
// Mono Edit end
DoGridImpact((args.OurEntity, ourGrid, ourXform, ourBody), args.OurFixture, inelasticVel, ourVelocity, ourTile, ourTiles, toUsEnergy);
@@ -346,11 +346,11 @@ namespace Content.Server.VendingMachines
if (TryComp<MarketModifierComponent>(component.Owner, out var modifier))
price *= modifier.Mod;
var totalPrice = (int) price;
var totalPrice = component.RequiresCash ? (int) price : 0;
// If any price has a vendor price, explicitly use its value - higher OR lower, over others.
var priceVend = _pricing.GetEstimatedVendPrice(proto);
if (priceVend > 0.0) // if vending price exists, overwrite it.
if (priceVend > 0.0 && component.RequiresCash) // if vending price exists, overwrite it.
totalPrice = (int) priceVend;
if (IsAuthorized(uid, sender, component))
@@ -0,0 +1,51 @@
using System.Linq;
using Content.Server._Mono.Grid;
using Content.Server.Administration;
using Content.Shared._Mono.Grid;
using Content.Shared.Administration;
using Robust.Shared.Console;
using Robust.Shared.Map.Components;
using Robust.Shared.Prototypes;
namespace Content.Server._Mono.Administration.Commands;
/// <summary>
/// Command that allows you to apply grid modifiers to existing grids
/// </summary>
[AdminCommand(AdminFlags.Admin)]
public sealed class AddGridModifier : IConsoleCommand
{
[Dependency] private readonly IEntityManager _entManager = default!;
public string Command => "addgridmodifier";
public string Description => "Applies grid modification to chosen grid.";
public string Help => $"Usage: {Command} <gridUid> <modification...>";
public void Execute(IConsoleShell shell, string argStr, string[] args)
{
if (args.Length < 2)
shell.WriteLine($"Not enough arguments.\n{Help}");
if (!NetEntity.TryParse(args[0], out var uidNet) || !_entManager.TryGetEntity(uidNet, out var uid))
{
shell.WriteLine($"Invalid entity id.");
return;
}
if (!_entManager.TryGetComponent(uid, out MapGridComponent? map))
{
shell.WriteLine($"Entity is not a grid.");
return;
}
List<ProtoId<GridModificationPrototype>> modifiers = [];
var gridMod = _entManager.System<GridModifierSystem>();
foreach (var mod in args.Skip(1))
{
modifiers.Add(mod);
}
gridMod.ModifyGrid(uid.Value, modifiers);
}
}
@@ -9,7 +9,6 @@ using Content.Shared.Weapons.Ranged.Components;
using Content.Shared.Weapons.Ranged.Systems;
using Robust.Shared.Map.Components;
using Robust.Shared.Timing;
using System;
namespace Content.Server._Mono.Detection;
@@ -21,18 +20,22 @@ public sealed class ThermalSignatureSystem : EntitySystem
[Dependency] private readonly SharedPowerReceiverSystem _power = default!;
[Dependency] private readonly IGameTiming _timing = default!;
private float _updateInterval = 0.5f;
private float _updateAccumulator = 0f;
private EntityQuery<MapGridComponent> _gridQuery;
private const float UpdateIntervalSeconds = 1f;
private static readonly TimeSpan UpdateInterval = TimeSpan.FromSeconds(UpdateIntervalSeconds);
private TimeSpan _nextUpdateTime;
private const float HeatChangeThreshold = 1.02f;
private EntityQuery<ThermalSignatureComponent> _sigQuery;
private EntityQuery<GunComponent> _gunQuery;
private Dictionary<EntityUid, ThermalSignatureComponent> _gridCompMap = new();
private EntityQuery<MapGridComponent> _mapGridQuery;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<GridInitializeEvent>(OnGridInitialized);
// some of this could also be handled in shared but there's no point since PVS is a thing
SubscribeLocalEvent<MachineThermalSignatureComponent, GetThermalSignatureEvent>(OnMachineGetSignature);
SubscribeLocalEvent<PassiveThermalSignatureComponent, GetThermalSignatureEvent>(OnPassiveGetSignature);
@@ -42,9 +45,14 @@ public sealed class ThermalSignatureSystem : EntitySystem
SubscribeLocalEvent<ThrusterComponent, GetThermalSignatureEvent>(OnThrusterGetSignature);
SubscribeLocalEvent<FTLDriveComponent, GetThermalSignatureEvent>(OnFTLGetSignature);
_gridQuery = GetEntityQuery<MapGridComponent>();
_sigQuery = GetEntityQuery<ThermalSignatureComponent>();
_gunQuery = GetEntityQuery<GunComponent>();
_mapGridQuery = GetEntityQuery<MapGridComponent>();
}
private void OnGridInitialized(GridInitializeEvent args)
{
EnsureComp<ThermalSignatureComponent>(args.EntityUid);
}
private void OnGunShot(Entity<ThermalSignatureComponent> ent, ref GunShotEvent args)
@@ -87,48 +95,45 @@ public sealed class ThermalSignatureSystem : EntitySystem
public override void Update(float frameTime)
{
_updateAccumulator += frameTime;
if (_updateAccumulator < _updateInterval)
if (_timing.CurTime < _nextUpdateTime)
return;
_updateAccumulator -= _updateInterval;
var interval = _updateInterval;
_nextUpdateTime = _timing.CurTime + UpdateInterval;
_gridCompMap.Clear();
var gridQuery = EntityQueryEnumerator<MapGridComponent>();
while (gridQuery.MoveNext(out var uid, out _))
var gridQuery = EntityQueryEnumerator<MapGridComponent, ThermalSignatureComponent>();
while (gridQuery.MoveNext(out _, out _, out var gridSigComp))
{
if (!_sigQuery.TryComp(uid, out var sigComp))
sigComp = EnsureComp<ThermalSignatureComponent>(uid);
sigComp.TotalHeat = 0f;
_gridCompMap.Add(uid, sigComp);
gridSigComp.TotalHeat = 0f;
}
var query = EntityQueryEnumerator<ThermalSignatureComponent>();
while (query.MoveNext(out var uid, out var sigComp))
{
var ev = new GetThermalSignatureEvent(interval);
var ev = new GetThermalSignatureEvent();
RaiseLocalEvent(uid, ref ev);
sigComp.StoredHeat += ev.Signature * interval;
sigComp.StoredHeat *= MathF.Pow(sigComp.HeatDissipation, interval);
if (_gridCompMap.ContainsKey(uid))
sigComp.StoredHeat += ev.Signature * UpdateIntervalSeconds;
sigComp.StoredHeat *= MathF.Pow(sigComp.HeatDissipation, UpdateIntervalSeconds);
if (_mapGridQuery.HasComp(uid))
{
sigComp.TotalHeat += sigComp.StoredHeat;
// don't sync it if it didn't change heat much since last time, we don't need to sync 500 cold asteroids every system update
if (sigComp.TotalHeat <= sigComp.LastUpdateHeat * HeatChangeThreshold
&& sigComp.TotalHeat >= sigComp.LastUpdateHeat / HeatChangeThreshold)
continue;
sigComp.LastUpdateHeat = sigComp.TotalHeat;
Dirty(uid, sigComp);
}
else
{
var xform = Transform(uid);
sigComp.TotalHeat = sigComp.StoredHeat;
if (xform.GridUid != null && _gridCompMap.TryGetValue(xform.GridUid.Value, out var gridSig))
if (xform.GridUid != null && _sigQuery.TryGetComponent(xform.GridUid.Value, out var gridSig))
gridSig.TotalHeat += sigComp.StoredHeat;
}
}
foreach (var (uid, sigComp) in _gridCompMap)
{
Dirty(uid, sigComp); // sync to client
}
}
}
@@ -0,0 +1,11 @@
using Content.Shared._Mono.Grid;
using Robust.Shared.Prototypes;
namespace Content.Server._Mono.Grid;
[RegisterComponent]
public sealed partial class GridModifierComponent : Component
{
[DataField]
public List<ProtoId<GridModificationPrototype>> Modifications = [];
}
@@ -0,0 +1,56 @@
using Content.Shared._Mono.Grid;
using Content.Shared._Mono.ShipRepair;
using Robust.Shared.Map.Components;
using Robust.Shared.Prototypes;
namespace Content.Server._Mono.Grid;
/// <summary>
/// This handles grid modification on initialization.
/// </summary>
public sealed class GridModifierSystem : SharedGridModifierSystem
{
[Dependency] private readonly IPrototypeManager _protoMan = default!;
[Dependency] private readonly IComponentFactory _factory = default!;
[Dependency] private readonly SharedShipRepairSystem _repair = default!;
private List<EntityUid> _snapQueue = [];
public override void Initialize()
{
SubscribeLocalEvent<GridModifierComponent, MapInitEvent>(OnInit);
}
public override void Update(float frameTime)
{
foreach (var uid in _snapQueue)
{
_repair.GenerateRepairData(uid);
}
_snapQueue.Clear();
}
private void OnInit(EntityUid uid, GridModifierComponent component, MapInitEvent args)
{
ModifyGrid(uid, component.Modifications);
}
public void ModifyGrid(EntityUid uid, List<ProtoId<GridModificationPrototype>> modifiers)
{
if (!HasComp<MapGridComponent>(uid))
return;
foreach (var modProto in modifiers)
{
if (!_protoMan.TryIndex(modProto, out var mod))
continue;
foreach (var modifier in mod.Modifiers)
{
modifier.Modify(uid, EntityManager, _factory);
}
}
_snapQueue.Add(uid);
}
}
@@ -107,7 +107,8 @@ public sealed partial class RadarBlipSystem : EntitySystem
if (blipGrid != null)
{
var gridXform = Transform(blipGrid.Value);
blipVelocity -= _physics.GetLinearVelocity(blipGrid.Value, coord.Position);
if (TryComp<PhysicsComponent>(blipGrid.Value, out var gridBody)) // prevent log spam
blipVelocity -= _physics.GetLinearVelocity(blipGrid.Value, coord.Position, gridBody);
// it's local-frame velocity so rotate it too
blipVelocity = (-gridXform.LocalRotation).RotateVec(blipVelocity);
// and also offset the rotation
@@ -0,0 +1,17 @@
namespace Content.Server._Mono.Shuttles.Components;
/// <summary>
/// Modifies how shuttles piloted by this entity drive.
/// </summary>
[RegisterComponent]
public sealed partial class ShuttleBoostingPilotComponent : Component
{
[DataField]
public float AngularMultiplier = 1f;
[DataField]
public float AccelerationMultiplier = 1f;
[DataField]
public float MaxVelMultiplier = 1f;
}
@@ -0,0 +1,21 @@
using Content.Server._Mono.Shuttles.Components;
using Content.Server.Physics.Controllers;
namespace Content.Server._Mono.Shuttles.Systems;
public sealed partial class ShuttleBoostingPilotSystem : EntitySystem
{
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<ShuttleBoostingPilotComponent, GetShuttleInputsEvent>(OnGetInputs);
}
private void OnGetInputs(Entity<ShuttleBoostingPilotComponent> ent, ref GetShuttleInputsEvent args)
{
args.AngularMul *= ent.Comp.AngularMultiplier;
args.AccelMul *= ent.Comp.AccelerationMultiplier;
args.MaxVelMul *= ent.Comp.MaxVelMultiplier;
}
}
@@ -16,7 +16,7 @@ public sealed partial class GridSpawnerComponent : Component
[DataField]
public ProtoId<LocalizedDatasetPrototype>? NameDataset = null;
[DataField]
[DataField, AlwaysPushInheritance]
public ComponentRegistry AddComponents = new();
[DataField]
@@ -38,7 +38,6 @@ public sealed class VendingMachinePurchaseSystem : EntitySystem
var purchaseComponent = AddComp<VendingMachinePurchaseComponent>(purchasedEntity);
purchaseComponent.PurchaseGrid = vendingTransform.GridUid.Value;
purchaseComponent.OriginalPurchasePrice = purchasePrice;
purchaseComponent.VendingMachine = vendingMachine;
Dirty(purchasedEntity, purchaseComponent);
}
@@ -177,7 +177,7 @@ public sealed class LinkedLifecycleGridSystem : EntitySystem
// Deletes a grid, reparenting every humanoid and player character that's on it.
public void UnparentPlayersFromGrid(EntityUid grid, bool deleteGrid, bool ignoreLifeStage = false)
{
if (!ignoreLifeStage && MetaData(grid).EntityLifeStage >= EntityLifeStage.Terminating)
if (!ignoreLifeStage && TerminatingOrDeleted(grid))
return;
var reparentEntities = GetEntitiesToReparent(grid);
@@ -131,6 +131,10 @@ namespace Content.Shared.Movement.Systems
private void OnMoverGetState(Entity<InputMoverComponent> entity, ref ComponentGetState args)
{
// Mono
if (TerminatingOrDeleted(entity.Comp.RelativeEntity))
entity.Comp.RelativeEntity = null;
args.State = new InputMoverComponentState()
{
CanMove = entity.Comp.CanMove,
@@ -247,6 +247,12 @@ namespace Content.Shared.VendingMachines
[DataField]
public double? LastPurchasePrice;
// End Frontier: taxes, cash slot
/// <summary>
/// Mono: Makes all positions in vending machines free if set false
/// </summary>
[DataField]
public bool RequiresCash = false;
}
[Serializable, NetSerializable]
@@ -82,7 +82,7 @@ public sealed partial class ShipShieldEmitterComponent : Component
public SoundSpecifier PowerDownSound = new SoundPathSpecifier("/Audio/Effects/teleport_departure.ogg");
/// <summary>
/// While shield is active, reduces impact energy from grid collisions by this much.
/// While shield is active, multiplies impact energy to both grids from grid collisions by this much.
/// </summary>
[DataField]
public float CollisionResistanceMultiplier = 1.0f;
@@ -9,6 +9,9 @@ namespace Content.Shared._Mono.Detection;
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
public sealed partial class ThermalSignatureComponent : Component
{
[ViewVariables(VVAccess.ReadOnly)]
public float LastUpdateHeat = 0f;
[DataField]
public float StoredHeat = 0f;
@@ -0,0 +1,16 @@
using Robust.Shared.Prototypes;
namespace Content.Shared._Mono.Grid;
/// <summary>
/// This prototypes stores all grid modifiers to process them.
/// </summary>
[Prototype("gridModifier")]
public sealed partial class GridModificationPrototype : IPrototype
{
[IdDataField]
public string ID { get; private set; } = default!;
[DataField]
public List<GridModifier> Modifiers = [];
}
+17
View File
@@ -0,0 +1,17 @@
using JetBrains.Annotations;
namespace Content.Shared._Mono.Grid;
[ImplicitDataDefinitionForInheritors]
[MeansImplicitUse]
public abstract partial class GridModifier
{
protected string _id => GetType().Name;
[DataField]
public string Comp = "Transform";
public abstract void Modify(EntityUid gridUid, EntityManager system, IComponentFactory? factory = null);
}
@@ -0,0 +1,72 @@
using Content.Shared.Whitelist;
using JetBrains.Annotations;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
namespace Content.Shared._Mono.Grid.Modifiers;
[UsedImplicitly]
public sealed partial class GridModEntityReplace : GridModifier
{
[DataField(required: true)]
public List<ReplaceData> Data = [];
[Dependency] private readonly IRobustRandom _random = new RobustRandom();
public override void Modify(EntityUid gridUid, EntityManager system, IComponentFactory? factory = null)
{
if (factory == null)
return;
var whitelistSystem = system.System<EntityWhitelistSystem>();
var gridModSystem = system.System<SharedGridModifierSystem>();
var comp = factory.GetComponent(Comp);
var ents = new HashSet<Entity<IComponent>>();
gridModSystem.GetGridEntities(gridUid, ents, comp.GetType());
foreach (var ent in ents)
{
var meta = system.MetaQuery.GetComponent(ent);
var xform = system.TransformQuery.GetComponent(ent);
if (meta.EntityPrototype == null)
continue;
foreach (var rD in Data)
{
if (whitelistSystem.IsWhitelistFailOrNull(rD.Whitelist, ent) && meta.EntityPrototype.ID != rD.ToReplace)
continue;
if (!_random.Prob(rD.Chance))
continue;
var pos = xform.Coordinates;
system.QueueDeleteEntity(ent);
system.SpawnAtPosition(rD.ReplaceWith, pos);
break;
}
}
}
}
[DataDefinition]
[Serializable]
public sealed partial class ReplaceData
{
[DataField]
public EntityWhitelist? Whitelist;
[DataField]
public EntProtoId? ToReplace;
[DataField(required: true)]
public EntProtoId ReplaceWith;
[DataField]
public float Chance = 0.2f;
}
@@ -0,0 +1,21 @@
namespace Content.Shared._Mono.Grid;
/// <summary>
/// Methods required from this system to be used in GridModifiers logic.
/// </summary>
public abstract class SharedGridModifierSystem : EntitySystem
{
public void GetGridEntities(EntityUid gridUid, HashSet<Entity<IComponent>> entities, Type compType)
{
foreach (var (uid, comp) in EntityManager.GetAllComponents(compType, true))
{
var xform = Transform(uid);
if (xform.GridUid != gridUid)
continue;
entities.Add((uid, comp));
}
}
}
@@ -22,11 +22,4 @@ public sealed partial class VendingMachinePurchaseComponent : Component
/// </summary>
[DataField, AutoNetworkedField]
public double OriginalPurchasePrice;
/// <summary>
/// The entity ID of the vending machine this was purchased from.
/// Stored for reference and potential future features.
/// </summary>
[DataField, AutoNetworkedField]
public EntityUid VendingMachine;
}
@@ -137,7 +137,6 @@ public sealed partial class HandPlaceholderSystem : EntitySystem
return;
SetPlaceholder(target, ent);
SetEnabled(target, true);
SetEnabled(ent, false); // allow inserting into the source container
@@ -153,6 +152,7 @@ public sealed partial class HandPlaceholderSystem : EntitySystem
}
_hands.DoPickup(user, hand, target, hands); // Force pickup - empty hands are not okay
SetEnabled(target, true);
_interaction.DoContactInteraction(user, target); // allow for forensics and other systems to work (why does hands system not do this???)
}
}
+138
View File
@@ -19158,3 +19158,141 @@ Entries:
id: 2112
time: '2026-03-30T16:56:00.0000000+00:00'
url: https://github.com/Monolith-Station/Monolith/pull/3643
- author: Redrover1760
changes:
- type: Tweak
message: Biomass spread rate, health, and slowdown reduced.
id: 2113
time: '2026-04-01T16:22:03.0000000+00:00'
url: https://github.com/Monolith-Station/Monolith/pull/3635
- author: UnicornOnLSD
changes:
- type: Add
message: Management has sent an ore box to the DIS Rig after customer complaints.
id: 2114
time: '2026-04-01T22:08:49.0000000+00:00'
url: https://github.com/Monolith-Station/Monolith/pull/3672
- author: Ilya246
changes:
- type: Add
message: >-
Added new drone to the far reaches, specially for those who liked the
dodging sniper drone.
- type: Tweak
message: Far reaches 3 now contains slightly more medium drones by proportion.
- type: Tweak
message: Far reach drones now display their names.
id: 2115
time: '2026-04-02T17:25:02.0000000+00:00'
url: https://github.com/Monolith-Station/Monolith/pull/3559
- author: Ilya246
changes:
- type: Add
message: Added Far Reaches IV and a new drone to find in it.
- type: Tweak
message: >-
Reduced overall drone spawnrate, but increased proportion of more
advanced drones further out.
id: 2116
time: '2026-04-02T18:52:53.0000000+00:00'
url: https://github.com/Monolith-Station/Monolith/pull/3677
- author: Ilya246
changes:
- type: Tweak
message: Shield ram damage reduction now applies to both colliding grids.
id: 2117
time: '2026-04-03T09:04:09.0000000+00:00'
url: https://github.com/Monolith-Station/Monolith/pull/3678
- author: EckoAurum
changes:
- type: Fix
message: Fixed Cyborgs obtaining non-whitelisted hands.
id: 2118
time: '2026-04-03T09:50:59.0000000+00:00'
url: https://github.com/Monolith-Station/Monolith/pull/3679
- author: NazrinNya
changes:
- type: Tweak
message: Most of non-poi vend catalogs are completely free now.
id: 2119
time: '2026-04-03T11:08:39.0000000+00:00'
url: https://github.com/Monolith-Station/Monolith/pull/3195
- author: NazrinNya
changes:
- type: Add
message: Added Hullmods, currently admin-only.
id: 2120
time: '2026-04-03T11:08:54.0000000+00:00'
url: https://github.com/Monolith-Station/Monolith/pull/3285
- author: Redrover1760
changes:
- type: Tweak
message: Faction datafarms now produce 200 science per second instead of 35.
- type: Tweak
message: >-
Normal research datafarms now produce 20 science per second instead of
10.
id: 2121
time: '2026-04-03T17:42:36.0000000+00:00'
url: https://github.com/Monolith-Station/Monolith/pull/3681
- author: chuga-git
changes:
- type: Add
message: >-
ASM-220 "Trident" 500mm torpedo rack and GPOB-L Light Munitions Bay are
now anchorable.
- type: Add
message: ASM-220 HE and ECM torpedos are now significantly faster.
id: 2122
time: '2026-04-03T17:45:12.0000000+00:00'
url: https://github.com/Monolith-Station/Monolith/pull/3673
- author: Kiithnaras
changes:
- type: Tweak
message: >-
Improvements to capacity and firing mechanics of many common Laser and
Energy weapons.
id: 2123
time: '2026-04-03T17:46:11.0000000+00:00'
url: https://github.com/Monolith-Station/Monolith/pull/3636
- author: EldritchPineapple
changes:
- type: Tweak
message: >-
recipes in the med assembler have been changed to make regenerative
meshes and medicated sutures easier to craft
id: 2124
time: '2026-04-03T18:25:56.0000000+00:00'
url: https://github.com/Monolith-Station/Monolith/pull/3680
- author: Redrover1760
changes:
- type: Tweak
message: Increased TSF Mech Blip visibility
id: 2125
time: '2026-04-03T18:26:26.0000000+00:00'
url: https://github.com/Monolith-Station/Monolith/pull/3667
- author: Ilya246
changes:
- type: Add
message: >-
ADCs now get piloting boosts (bonus acceleration, turn, max speed) to
give them an advantage over ADMs.
id: 2126
time: '2026-04-03T18:28:23.0000000+00:00'
url: https://github.com/Monolith-Station/Monolith/pull/3602
- author: Redrover1760
changes:
- type: Tweak
message: >-
Civilian/Merc borg HP buffed 150->200, civ/merc borg burn damage
modifier reduced from 1.5 to 1.
id: 2127
time: '2026-04-03T18:29:10.0000000+00:00'
url: https://github.com/Monolith-Station/Monolith/pull/3578
- author: Redrover1760
changes:
- type: Tweak
message: Burn damage is now added to the red damage overlay
id: 2128
time: '2026-04-04T00:37:54.0000000+00:00'
url: https://github.com/Monolith-Station/Monolith/pull/3682
@@ -5,7 +5,7 @@ meta:
forkId: ""
forkVersion: ""
time: 03/27/2026 19:43:44
entityCount: 10732
entityCount: 10733
maps:
- 1
grids:
@@ -14998,6 +14998,13 @@ entities:
- type: Transform
pos: -24.5489,50.522743
parent: 2
- proto: BiomeSourceFarReachesIV
entities:
- uid: 12345
components:
- type: Transform
pos: -24.5489,50.522743
parent: 2
- proto: BiomeSourceInnerRing
entities:
- uid: 999
@@ -0,0 +1,870 @@
meta:
format: 7
category: Grid
engineVersion: 271.2.0
forkId: ""
forkVersion: ""
time: 03/25/2026 17:21:49
entityCount: 134
maps: []
grids:
- 1
orphans:
- 1
nullspace: []
tilemap:
6: Space
0: FloorBlueCircuit
3: FloorHullReinforced
4: Lattice
12: LatticeCornerNE
7: LatticeCornerNW
10: LatticeCornerSE
13: LatticeCornerSW
1: Plating
11: PlatingCornerNE
5: PlatingCornerNW
8: PlatingCornerSE
9: PlatingCornerSW
2: PlatingDamaged
entities:
- proto: ""
entities:
- uid: 1
components:
- type: MetaData
name: grid
- type: Transform
parent: invalid
- type: MapGrid
chunks:
0,0:
ind: 0,0
tiles: AAAAAAAAAAEAAAAAAAACAAAAAAAAAwAAAAAAAAQAAAAAAAADAAAAAAAABQAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAEAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAAHAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAABAAAAAAAAAwAAAAAAAAEAAAAAAAABAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAABAAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAIAAAAAAAAAQAAAAAAAAQAAAAAAAABAAAAAAAAAQAAAAAAAAkAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAKAAAAAAAAAQAAAAAAAAkAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAA==
version: 7
0,-1:
ind: 0,-1
tiles: BgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAACAAAAAAAABQAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAAAAAAAAAAAAIAAAAAAAADAAAAAAAABwAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAA==
version: 7
-1,0:
ind: -1,0
tiles: BgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAsAAAAAAAADAAAAAAAABAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAwAAAAAAAADAAAAAAAAAwAAAAAAAAMAAAAAAAABAAAAAAAAAQAAAAAAAAEAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAEAAAAAAAAAwAAAAAAAAMAAAAAAAADAAAAAAAAAQAAAAAAAAEAAAAAAAADAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAACAAAAAAAAAEAAAAAAAABAAAAAAAABAAAAAAAAAEAAAAAAAAJAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAIAAAAAAAAAQAAAAAAAA0AAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAA==
version: 7
-1,-1:
ind: -1,-1
tiles: BgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAALAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAYAAAAAAAAGAAAAAAAABgAAAAAAAAwAAAAAAAADAAAAAAAAAgAAAAAAAA==
version: 7
- type: Broadphase
- type: Physics
bodyStatus: InAir
fixedRotation: False
bodyType: Dynamic
- type: Fixtures
fixtures: {}
- type: OccluderTree
- type: SpreaderGrid
spreadQueues:
Kudzu: []
Smoke: []
MetalFoam: []
Puddle: []
- type: Shuttle
dampingModifier: 0.25
- type: GridPathfinding
- type: Gravity
gravityShakeSound: !type:SoundPathSpecifier
path: /Audio/Effects/alert.ogg
- type: DecalGrid
chunkCollection:
version: 2
nodes: []
- type: GridAtmosphere
version: 2
data:
chunkSize: 4
- type: GasTileOverlay
- type: RadiationGridResistance
- proto: APCBasic
entities:
- uid: 62
components:
- type: Transform
pos: 1.5,0.5
parent: 1
- proto: CableApcExtension
entities:
- uid: 73
components:
- type: Transform
pos: 1.5,0.5
parent: 1
- uid: 74
components:
- type: Transform
pos: 0.5,0.5
parent: 1
- uid: 75
components:
- type: Transform
pos: -0.5,0.5
parent: 1
- uid: 76
components:
- type: Transform
pos: -1.5,0.5
parent: 1
- uid: 77
components:
- type: Transform
pos: -2.5,0.5
parent: 1
- uid: 78
components:
- type: Transform
pos: -3.5,0.5
parent: 1
- uid: 79
components:
- type: Transform
pos: -3.5,1.5
parent: 1
- uid: 80
components:
- type: Transform
pos: 2.5,0.5
parent: 1
- uid: 81
components:
- type: Transform
pos: 4.5,0.5
parent: 1
- uid: 82
components:
- type: Transform
pos: 3.5,0.5
parent: 1
- uid: 83
components:
- type: Transform
pos: 4.5,1.5
parent: 1
- uid: 84
components:
- type: Transform
pos: -4.5,1.5
parent: 1
- uid: 85
components:
- type: Transform
pos: 5.5,1.5
parent: 1
- proto: CableHV
entities:
- uid: 63
components:
- type: Transform
pos: -1.5,0.5
parent: 1
- uid: 64
components:
- type: Transform
pos: -0.5,0.5
parent: 1
- uid: 65
components:
- type: Transform
pos: 0.5,-0.5
parent: 1
- uid: 66
components:
- type: Transform
pos: 1.5,-0.5
parent: 1
- uid: 67
components:
- type: Transform
pos: -0.5,-0.5
parent: 1
- uid: 68
components:
- type: Transform
pos: 1.5,0.5
parent: 1
- uid: 69
components:
- type: Transform
pos: 2.5,0.5
parent: 1
- uid: 91
components:
- type: Transform
pos: 3.5,0.5
parent: 1
- uid: 131
components:
- type: Transform
pos: 3.5,1.5
parent: 1
- proto: CableMV
entities:
- uid: 70
components:
- type: Transform
pos: -0.5,0.5
parent: 1
- uid: 71
components:
- type: Transform
pos: 1.5,0.5
parent: 1
- uid: 72
components:
- type: Transform
pos: 0.5,0.5
parent: 1
- uid: 132
components:
- type: Transform
pos: 3.5,1.5
parent: 1
- uid: 133
components:
- type: Transform
pos: 3.5,0.5
parent: 1
- uid: 134
components:
- type: Transform
pos: 2.5,0.5
parent: 1
- proto: ClothingBackpackDroneLootT22
entities:
- uid: 98
components:
- type: Transform
pos: 0.22172669,0.18755352
parent: 1
- proto: GeneratorRTG
entities:
- uid: 56
components:
- type: Transform
pos: -0.5,-0.5
parent: 1
- uid: 57
components:
- type: Transform
pos: 0.5,-0.5
parent: 1
- uid: 58
components:
- type: Transform
pos: 1.5,-0.5
parent: 1
- uid: 59
components:
- type: Transform
pos: -1.5,0.5
parent: 1
- uid: 60
components:
- type: Transform
pos: 2.5,0.5
parent: 1
- proto: Grille
entities:
- uid: 20
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -6.5,2.5
parent: 1
- uid: 21
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -3.5,0.5
parent: 1
- uid: 22
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -3.5,3.5
parent: 1
- uid: 24
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 4.5,0.5
parent: 1
- uid: 26
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 4.5,3.5
parent: 1
- uid: 29
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 7.5,2.5
parent: 1
- proto: GrilleDiagonal
entities:
- uid: 30
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -6.5,1.5
parent: 1
- uid: 31
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 7.5,1.5
parent: 1
- uid: 32
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 3.5,-0.5
parent: 1
- uid: 33
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -2.5,-0.5
parent: 1
- uid: 129
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 1.5,-1.5
parent: 1
- uid: 130
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -0.5,-1.5
parent: 1
- proto: PlasmaReinforcedWindowDirectional
entities:
- uid: 86
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -4.5,0.5
parent: 1
- uid: 88
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 5.5,1.5
parent: 1
- uid: 89
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 4.5,1.5
parent: 1
- uid: 90
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 5.5,2.5
parent: 1
- uid: 92
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -4.5,1.5
parent: 1
- uid: 93
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -4.5,2.5
parent: 1
- uid: 94
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 5.5,0.5
parent: 1
- uid: 95
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -3.5,1.5
parent: 1
- uid: 96
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -2.5,0.5
parent: 1
- uid: 97
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 3.5,0.5
parent: 1
- proto: RadarEdgeMarkerCenter
entities:
- uid: 123
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 0.5,2.5
parent: 1
- uid: 124
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 0.5,1.5
parent: 1
- proto: RadarEdgeMarkerDiagonal
entities:
- uid: 101
components:
- type: Transform
pos: 5.5,1.5
parent: 1
- uid: 115
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -1.5,2.5
parent: 1
- uid: 116
components:
- type: Transform
pos: 2.5,2.5
parent: 1
- uid: 119
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -4.5,1.5
parent: 1
- proto: RadarEdgeMarkerHalftiltLeft
entities:
- uid: 118
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 5.5,2.5
parent: 1
- uid: 126
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 5.5,3.5
parent: 1
- proto: RadarEdgeMarkerHalftiltRight
entities:
- uid: 8
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -4.5,3.5
parent: 1
- uid: 36
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -4.5,2.5
parent: 1
- proto: RadarEdgeMarkerStraight
entities:
- uid: 99
components:
- type: Transform
pos: 3.5,0.5
parent: 1
- uid: 100
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -1.5,0.5
parent: 1
- uid: 102
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -0.5,0.5
parent: 1
- uid: 103
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 0.5,0.5
parent: 1
- uid: 104
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 1.5,0.5
parent: 1
- uid: 105
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 2.5,0.5
parent: 1
- uid: 106
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -2.5,0.5
parent: 1
- uid: 107
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -2.5,0.5
parent: 1
- uid: 108
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -5.5,3.5
parent: 1
- uid: 109
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -3.5,1.5
parent: 1
- uid: 110
components:
- type: Transform
pos: -3.5,1.5
parent: 1
- uid: 111
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -4.5,0.5
parent: 1
- uid: 112
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 6.5,3.5
parent: 1
- uid: 113
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 4.5,1.5
parent: 1
- uid: 114
components:
- type: Transform
pos: 5.5,0.5
parent: 1
- uid: 117
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -2.5,1.5
parent: 1
- uid: 121
components:
- type: Transform
pos: 3.5,1.5
parent: 1
- uid: 122
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 3.5,1.5
parent: 1
- uid: 127
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 3.5,0.5
parent: 1
- proto: SmallGyroscope
entities:
- uid: 9
components:
- type: Transform
pos: 0.5,-1.5
parent: 1
- proto: SmallThruster
entities:
- uid: 28
components:
- type: Transform
pos: 4.5,2.5
parent: 1
- uid: 54
components:
- type: Transform
pos: -3.5,2.5
parent: 1
- proto: SpawnMobAttackerCoreStaticSmart
entities:
- uid: 10
components:
- type: Transform
pos: 0.5,0.5
parent: 1
- proto: SubstationBasic
entities:
- uid: 55
components:
- type: Transform
pos: -0.5,0.5
parent: 1
- proto: SubstationWallBasic
entities:
- uid: 2
components:
- type: Transform
pos: 3.5,1.5
parent: 1
- proto: Thruster
entities:
- uid: 12
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -4.5,0.5
parent: 1
- uid: 13
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -3.5,1.5
parent: 1
- uid: 14
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 5.5,0.5
parent: 1
- uid: 15
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 4.5,1.5
parent: 1
- uid: 16
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -2.5,0.5
parent: 1
- uid: 17
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -1.5,-0.5
parent: 1
- uid: 18
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 3.5,0.5
parent: 1
- uid: 19
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 2.5,-0.5
parent: 1
- proto: ThrusterLarge
entities:
- uid: 5
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 6.5,2.5
parent: 1
- uid: 120
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -5.5,1.5
parent: 1
- proto: WallReinforced
entities:
- uid: 6
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -2.5,2.5
parent: 1
- uid: 7
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 3.5,2.5
parent: 1
- uid: 11
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 5.5,3.5
parent: 1
- uid: 23
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -4.5,4.5
parent: 1
- uid: 25
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 5.5,4.5
parent: 1
- uid: 27
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: 3.5,3.5
parent: 1
- uid: 37
components:
- type: Transform
pos: 6.5,3.5
parent: 1
- uid: 38
components:
- type: Transform
pos: -1.5,2.5
parent: 1
- uid: 39
components:
- type: Transform
pos: 2.5,2.5
parent: 1
- uid: 40
components:
- type: Transform
pos: 0.5,2.5
parent: 1
- uid: 45
components:
- type: Transform
pos: -2.5,1.5
parent: 1
- uid: 46
components:
- type: Transform
pos: -1.5,1.5
parent: 1
- uid: 47
components:
- type: Transform
pos: 0.5,1.5
parent: 1
- uid: 48
components:
- type: Transform
pos: 2.5,1.5
parent: 1
- uid: 49
components:
- type: Transform
pos: 3.5,1.5
parent: 1
- uid: 50
components:
- type: Transform
pos: -0.5,1.5
parent: 1
- uid: 51
components:
- type: Transform
pos: 1.5,1.5
parent: 1
- uid: 61
components:
- type: Transform
pos: 1.5,0.5
parent: 1
- uid: 87
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -4.5,3.5
parent: 1
- uid: 125
components:
- type: Transform
pos: -5.5,3.5
parent: 1
- uid: 128
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -2.5,3.5
parent: 1
- proto: WallReinforcedDiagonal
entities:
- uid: 34
components:
- type: Transform
pos: -6.5,3.5
parent: 1
- uid: 35
components:
- type: Transform
pos: -5.5,4.5
parent: 1
- uid: 41
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: -1.5,3.5
parent: 1
- uid: 42
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 6.5,4.5
parent: 1
- uid: 43
components:
- type: Transform
rot: -1.5707963267948966 rad
pos: 7.5,3.5
parent: 1
- uid: 44
components:
- type: Transform
pos: 2.5,3.5
parent: 1
- uid: 52
components:
- type: Transform
rot: 1.5707963267948966 rad
pos: -5.5,0.5
parent: 1
- uid: 53
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 6.5,0.5
parent: 1
- proto: WeaponTurretPinhole
entities:
- uid: 3
components:
- type: Transform
rot: 3.141592653589793 rad
pos: -0.5,2.5
parent: 1
- uid: 4
components:
- type: Transform
rot: 3.141592653589793 rad
pos: 1.5,2.5
parent: 1
...
File diff suppressed because it is too large Load Diff
+12 -4
View File
@@ -4,8 +4,8 @@ meta:
engineVersion: 271.2.0
forkId: ""
forkVersion: ""
time: 03/29/2026 13:24:50
entityCount: 860
time: 04/01/2026 21:50:52
entityCount: 861
maps: []
grids:
- 1
@@ -101,10 +101,10 @@ entities:
- type: OccluderTree
- type: SpreaderGrid
spreadQueues:
Kudzu: []
Smoke: []
Puddle: []
MetalFoam: []
Smoke: []
Kudzu: []
- type: Shuttle
dampingModifier: 0.25
- type: GridPathfinding
@@ -598,6 +598,7 @@ entities:
- type: Roof
data:
0,2: 0
- type: ThermalSignature
- proto: AirAlarm
entities:
- uid: 10
@@ -3404,6 +3405,13 @@ entities:
- type: Transform
pos: -3.5,-0.5
parent: 1
- proto: OreBox
entities:
- uid: 418
components:
- type: Transform
pos: 0.5,21.5
parent: 1
- proto: OreProcessor
entities:
- uid: 336
@@ -47,8 +47,8 @@
- type: MobThresholds
thresholds:
0: Alive
150: Critical # Monolith
250: Dead # Monolith
200: Critical # Monolith
300: Dead # Monolith
stateAlertDict:
Alive: BorgHealth
Critical: BorgCrit
@@ -191,7 +191,7 @@
thresholds:
- trigger:
!type:DamageTrigger
damage: 75
damage: 100 # Monolith
behaviors:
- !type:PlaySoundBehavior
sound:
@@ -200,7 +200,7 @@
volume: 5
- trigger:
!type:DamageTrigger
damage: 350 # Monolith
damage: 400 # Monolith
behaviors:
- !type:PlaySoundBehavior
sound:
@@ -22,8 +22,8 @@
soundGunshot:
path: /Audio/Weapons/Guns/Gunshots/laser.ogg
- type: Battery
maxCharge: 1000
startingCharge: 1000
maxCharge: 1500 # Mono: 1k >> 1.5k
startingCharge: 1500 # Mono: 1k >> 1.5k
- type: StaticPrice
price: 500
- type: Cautery # Shitmed
@@ -68,7 +68,7 @@
path: /Audio/Weapons/Guns/Gunshots/laser.ogg
- type: HitscanBatteryAmmoProvider
proto: RedLightLaser
fireCost: 50
fireCost: 20 # Mono: pistol lasers shoot efficiently
- type: PowerCellSlot
cellSlotId: gun_magazine
- type: ItemSlots
@@ -107,6 +107,9 @@
- type: Tag
tags:
- Sidearm
- type: Battery # Mono: Keeps charge for smaller energy weapons
maxCharge: 1000
startingCharge: 1000
- type: Clothing
sprite: Objects/Weapons/Guns/Battery/taser.rsi
quickEquip: false
@@ -146,6 +149,14 @@
shader: unshaded
- type: Item
sprite: Objects/Weapons/Guns/Battery/svalinn.rsi
- type: Gun
burstCooldown: 0.75
burstFireRate: 3
shotsPerBurst: 3
selectedMode: SemiAuto
availableModes:
- SemiAuto
- Burst
- type: MagazineVisuals
magState: mag
steps: 5
@@ -169,7 +180,7 @@
shader: unshaded
- type: HitscanBatteryAmmoProvider
proto: RedMediumLaser
fireCost: 83.3
fireCost: 33.3 # Mono: 83.3 >> 33.3
- type: MagazineVisuals
magState: mag
steps: 5
@@ -201,7 +212,7 @@
sprite: Objects/Weapons/Guns/Battery/makeshift.rsi
- type: HitscanBatteryAmmoProvider
proto: RedLaser
fireCost: 62.5
fireCost: 35 # Mono: 62.5 >> 35
- type: Battery
maxCharge: 500
startingCharge: 500
@@ -262,7 +273,7 @@
- SemiAuto
- type: HitscanBatteryAmmoProvider
proto: RedLaserPractice
fireCost: 35 #Mono: 62.5 >> 35
fireCost: 30 #Mono: 62.5 >> 30
- type: StaticPrice
price: 300
@@ -276,9 +287,14 @@
price: 500
- type: HitscanBatteryAmmoProvider
proto: RedMediumLaser #Mono: RedLaser >> RedMediumLaser
fireCost: 35 #Mono: 62.5 >> 35
fireCost: 30 #Mono: 62.5 >> 30
- type: PirateBountyItem # Mono
id: StandardFactionLongarm
- type: Gun
selectedMode: SemiAuto
availableModes:
- SemiAuto
- FullAuto
- type: entity
name: LWC pulse pistol
@@ -495,7 +511,7 @@
path: /Audio/Weapons/Guns/Gunshots/laser_cannon.ogg
- type: HitscanBatteryAmmoProvider
proto: RedHeavyLaser
fireCost: 250
fireCost: 160
- type: Battery
maxCharge: 4000
startingCharge: 4000
@@ -555,7 +571,7 @@
path: /Audio/Weapons/Guns/Gunshots/laser3.ogg
- type: HitscanBatteryAmmoProvider
proto: XrayLaser
fireCost: 200
fireCost: 133.3
- type: MagazineVisuals
magState: mag
steps: 5
@@ -727,7 +743,7 @@
path: /Audio/Weapons/Guns/Gunshots/laser_cannon.ogg
- type: HitscanBatteryAmmoProvider
proto: RedMediumLaser
fireCost: 100
fireCost: 50 # Mono: 100 >> 50
- type: BatterySelfRecharger
autoRecharge: true
autoRechargeRate: 40
@@ -774,10 +790,10 @@
path: /Audio/Weapons/Guns/Gunshots/laser_cannon.ogg
- type: HitscanBatteryAmmoProvider
proto: RedMediumLaser
fireCost: 100
fireCost: 50 # Mono: 100 >> 50
- type: BatterySelfRecharger
autoRecharge: true
autoRechargeRate: 30
autoRechargeRate: 20 # Mono 30 >> 20
- type: MagazineVisuals
magState: mag
steps: 5
@@ -202,7 +202,7 @@
# mask: # Frontier
# - FullTileMask # Frontier
layer:
- GlassLayer # Frontier: WallLayer<GlassLayer
- DiagonalGlassLayer # Mono: WallLayer<DiagonalGlassLayer
- type: Construction
graph: GrilleDiagonal
node: grilleDiagonal
@@ -240,7 +240,7 @@
# mask: # Frontier
# - FullTileMask # Frontier
layer:
- GlassLayer # Frontier: WallLayer<GlassLayer
- DiagonalGlassLayer # Mono: WallLayer<DiagonalGlassLayer
- type: Construction
graph: GrilleDiagonal
node: clockworkGrilleDiagonal
@@ -352,6 +352,10 @@
- type: Construction # Mono
graph: Girder
node: plastitaniumWall
- type: Tag # Mono
tags:
- Wall
- WallT3
- type: entity
parent: [ WallPlastitaniumDiagonalIndestructible, BaseWallTierTwo ] # Mono
@@ -15,7 +15,6 @@
time: 10
group: Medicinal
solids:
FoodPoppy: 1
Brutepack: 1
MaterialCloth1: 1
reagents:
@@ -30,10 +29,9 @@
time: 10
group: Medicinal
solids:
FoodAloe: 1
Ointment: 1
MaterialCloth1: 1
reagents:
Sigynate: 20
Leporazine: 20
Dermaline: 20
recipeType: MedicalAssembler # Frontier
@@ -39,6 +39,16 @@
# priority: 2500 #should not matter, but big enough to override all the rest
- type: entity
id: BiomeSourceFarReachesIV
parent: BaseBiomeSource
name: far reaches IV biome source
components:
- type: SpaceBiomeSource
id: BiomeFarReachesIV
swapDistance: 50000 # fallback
priority: 125
- type: entity
id: BiomeSourceFarReachesIII
parent: BaseBiomeSource
@@ -46,7 +56,7 @@
components:
- type: SpaceBiomeSource
id: BiomeFarReachesIII
swapDistance: 28000 #beyond this is fallback
swapDistance: 30000
priority: 250
- type: entity
@@ -17,6 +17,11 @@
#far reaches
- type: ambientSpaceBiome
id: BiomeFarReachesIV
name: Far Reaches IV
description: "Is it really worth it?"
- type: ambientSpaceBiome
id: BiomeFarReachesIII
name: Far Reaches III
@@ -112,6 +112,12 @@
### BIOME AMBIENT
# far reaches III
- type: ambientMusic
id: BiomeFarReachesIV
sound:
collection: BiomeFarReachesIII
# far reaches III
- type: ambientMusic
id: BiomeFarReachesIII
@@ -26,20 +26,27 @@
path: /Audio/_DV/Weapons/Guns/Gunshots/laser.ogg
soundEmpty:
path: /Audio/_DV/Weapons/Guns/Empty/dry_fire.ogg
burstFireRate: 4 # Mono burstfire and modeswitching
shotsPerBurst: 3
burstCooldown: 0.75
selectedMode: SemiAuto
availableModes:
- SemiAuto
- Burst
- type: Battery
maxCharge: 2250 # Mono 2000->2250
startingCharge: 2250 # Mono 2000->2250
- type: ProjectileBatteryAmmoProvider
proto: BulletDisabler
fireCost: 75 # 100->75
fireCost: 45 # 100->45
- type: EnergyGun
fireModes:
- proto: BulletDisabler
fireCost: 75 # 100->75
fireCost: 45 # Mono 100->45
name: disable
state: disabler
- proto: BulletEnergyGunLaser
fireCost: 150 # 200->150
fireCost: 75 # Mono 200->75
name: kill
state: lethal
- type: MagazineVisuals
@@ -86,6 +93,13 @@
path: /Audio/_DV/Weapons/Guns/Gunshots/laser.ogg
soundEmpty:
path: /Audio/_DV/Weapons/Guns/Empty/dry_fire.ogg
burstFireRate: 4 # Mono burstfire and modeswitching
shotsPerBurst: 3
burstCooldown: 0.75
selectedMode: SemiAuto
availableModes:
- SemiAuto
- Burst
- type: Battery
maxCharge: 2250 # Mono 2000->2250
startingCharge: 2250 # Mono 2000->2250
@@ -94,15 +108,15 @@
autoRechargeRate: 25
- type: ProjectileBatteryAmmoProvider
proto: BulletDisabler
fireCost: 75 # 100->75
fireCost: 45 # 100->45
- type: EnergyGun
fireModes:
- proto: BulletDisabler
fireCost: 75 # 100->75
fireCost: 45 # Mono 100->45
name: disable
state: disabler
- proto: BulletEnergyGunLaser
fireCost: 150 # 200->150
fireCost: 75 # Mono 200->75
name: kill
state: lethal
- type: MagazineVisuals
@@ -144,24 +158,31 @@
sprite: _DV/Objects/Weapons/Guns/Battery/multiphase_energygun.rsi
- type: Gun
fireRate: 2.5
shotsPerBurst: 3
burstCooldown: 0.5
burstFireRate: 6
selectedMode: SemiAuto
availableModes:
- SemiAuto
- Burst
soundGunshot:
path: /Audio/_DV/Weapons/Guns/Gunshots/laser.ogg
soundEmpty:
path: /Audio/_DV/Weapons/Guns/Empty/dry_fire.ogg
- type: Battery
maxCharge: 3750 # Mono 2000->3750
startingCharge: 3750 # Mono 2000->3750
maxCharge: 3600 # Mono 2000->3600
startingCharge: 3600 # Mono 2000->3600
- type: ProjectileBatteryAmmoProvider
proto: BulletDisabler
fireCost: 75 # Mono 100 -> 75
fireCost: 60 # Mono 100 -> 60
- type: EnergyGun
fireModes:
- proto: BulletDisabler
fireCost: 75 # Mono 100 -> 75
fireCost: 60 # Mono 100 -> 60
name: disable
state: disabler
- proto: BulletEnergyGunLaser
fireCost: 150 # Mono 200 -> 150
fireCost: 90 # Mono 200 -> 90
name: lethal
state: lethal
# - proto: BulletEnergyGunIon
@@ -10,12 +10,24 @@
Slash: 0.9
Piercing: 0.9
# Chimera
- type: damageModifierSet
id: Chimera
coefficients:
Heat: 1.4
Cold: 0.6
Radiation: 1.55
Shock: 1.2
Blunt: 0.2
Slash: 0.6
# Cyborgs
- type: damageModifierSet # Mono
id: BaseBorgChassis
coefficients:
Heat: 1.5
Heat: 1
Cold: 0
Shock: 2.5
Blunt: 0.6
@@ -141,6 +153,7 @@
Piercing: 6
Heat: 5
# IPC
- type: damageModifierSet
@@ -34,21 +34,21 @@
thresholds:
- trigger:
!type:DamageTrigger
damage: 40
damage: 30
behaviors:
- !type:DoActsBehavior
acts: [ "Destruction" ]
- type: TrayScanReveal
- type: Kudzu
growthTickChance: 0.2
spreadChance: 0.5
spreadChance: 0.35
# Heals each time it manages to do a growth tick:
damageRecovery:
types:
Slash: -1.25
Heat: -1.25
Cold: -1.25
Blunt: -1.5
Slash: -1
Heat: -1
Cold: -1
Blunt: -1.25
- type: Flammable
fireSpread: true
alwaysCombustible: true
@@ -58,8 +58,8 @@
Heat: 9
- type: AtmosExposed
- type: SpeedModifierContacts
walkSpeedModifier: 0.25
sprintSpeedModifier: 0.25
walkSpeedModifier: 0.45
sprintSpeedModifier: 0.45
ignoreWhitelist:
tags:
- Chimera
@@ -1,10 +0,0 @@
- type: damageModifierSet
id: Chimera
coefficients:
Heat: 1.4
Cold: 0.6
Radiation: 1.55
Shock: 1.2
Blunt: 0.2
Slash: 0.6
Piercing: 1
@@ -374,6 +374,10 @@
- MonoRemnantCoreTitle
- MonoRemnantAdjective
- MonoRemnantNoun
- type: ShuttleBoostingPilot
angularMultiplier: 1.5
accelerationMultiplier: 1.4
maxVelMultiplier: 1.1
- type: entity
id: AiHeldRedacted
@@ -80,7 +80,7 @@
openState: tsfgygax-open
brokenState: tsfgygax-broken
- type: RadarBlip # Mono
radarColor: "#047ABD"
radarColor: "#028EDE"
scale: 1.5
requireNoGrid: true
shape: square
@@ -134,7 +134,7 @@
openState: tsfdurand-open
brokenState: tsfdurand-broken
- type: RadarBlip # Mono
radarColor: "#047ABD"
radarColor: "#028EDE"
scale: 1.5
requireNoGrid: true
shape: square
@@ -297,7 +297,7 @@
openState: tsfbroadsword-open
brokenState: tsfbroadsword-broken
- type: RadarBlip
radarColor: "#047ABD"
radarColor: "#028EDE"
scale: 3
requireNoGrid: true
shape: square
@@ -380,7 +380,7 @@
openState: tsfbroadsword-open
brokenState: tsfbroadsword-broken
- type: RadarBlip
radarColor: "#047ABD"
radarColor: "#028EDE"
scale: 3
requireNoGrid: true
shape: square
@@ -525,7 +525,7 @@
openState: tsfflail-open
brokenState: tsfflail-broken
- type: RadarBlip
radarColor: "#047ABD"
radarColor: "#028EDE"
scale: 3
requireNoGrid: true
shape: square
@@ -616,7 +616,7 @@
openState: tsfflail-open
brokenState: tsfflail-broken
- type: RadarBlip
radarColor: "#047ABD"
radarColor: "#028EDE"
scale: 3
requireNoGrid: true
shape: square
@@ -691,7 +691,7 @@
openState: tsfflail-open
brokenState: tsfflail-broken
- type: RadarBlip
radarColor: "#047ABD"
radarColor: "#028EDE"
scale: 3
requireNoGrid: true
shape: square
@@ -73,11 +73,11 @@
- type: MiningGatheringSoft
- type: MiningGatheringHard
- type: TargetSeeking
acceleration: 20
acceleration: 30
detectionRange: 750
scanArc: 75
launchSpeed: 25
maxSpeed: 70
launchSpeed: 60
maxSpeed: 150
trackDelay: 3
# destructible components below
- type: Damageable
@@ -179,8 +179,8 @@
acceleration: 70
detectionRange: 750
scanArc: 15
launchSpeed: 45
maxSpeed: 250
launchSpeed: 60
maxSpeed: 275
trackDelay: 1
- type: Explosive
explosionType: Default
@@ -303,11 +303,11 @@
- type: MiningGatheringSoft
- type: MiningGatheringHard
- type: TargetSeeking
acceleration: 20
acceleration: 25
detectionRange: 750
scanArc: 45
launchSpeed: 25
maxSpeed: 70
launchSpeed: 50
maxSpeed: 140
trackDelay: 3
- type: EmpOnTrigger
range: 7
@@ -1,7 +1,7 @@
- type: entity
id: WeaponTurretLightMunitionsBay
name: GPOB-L Light Munitions Bay
parent: BallisticArtilleryUnanchorableCartridge
parent: BallisticArtilleryCartridge
description: A relatively small, armored munitions bay capable of holding up to two lightweight ordinance packages. Typically found on light spacecraft, particularly bombers, and provide a limited use method of damaging targets far above the user's weight class.
components:
- type: StaticPrice
@@ -16,7 +16,7 @@
range: 700
- type: GunSignalControl
- type: Gun
projectileSpeed: 10
projectileSpeed: 50
fireRate: 0.8
recoil: 5
shootThermalSignature: 8000000 # ~2.8km
@@ -1,7 +1,7 @@
- type: entity
id: WeaponTurretASM220
name: ASM-220 "Trident" 500mm torpedo rack
parent: BallisticArtilleryUnanchorableCartridge
parent: BallisticArtilleryCartridge
description: A heavy built-in torpedo rack for cruisers which relies on manual loading, usually done at harbor. Despite this, it has the largest missiles in the sector.
components:
- type: StaticPrice
@@ -96,7 +96,7 @@
guides:
- Science
- type: ResearchPointSource
pointsPerSecond: 10
pointsPerSecond: 20
active: true
- type: entity
@@ -107,7 +107,7 @@
components:
- type: ResearchClient
- type: ResearchPointSource
pointsPerSecond: 35
pointsPerSecond: 200
active: true
- type: ApcPowerReceiver
powerLoad: 10000
@@ -141,6 +141,8 @@
color: "#b3aa79"
- state: stripe2
color: "#009360"
- type: ApcPowerReceiver
powerLoad: 40000
- type: PointLight
radius: 1.1
energy: 1.1
@@ -6,6 +6,7 @@
components:
- type: VendingMachine
pack: WeaponryWorksVendPOIMercInventory
requiresCash: true
- type: AccessReader
access: [["Mercenary"], ["Security"]]
@@ -86,6 +87,7 @@
# denyState: deny-unshaded
ejectDelay: 1.9
initialStockQuality: 1
requiresCash: true
- type: MarketModifier
mod: 10
- type: Advertise
@@ -127,6 +129,7 @@
ejectDelay: 1.9
initialStockQuality: 0.35
- type: entity
parent: [VendingMachineAstroVend, BaseStructureDisableAnchoring]
id: VendingMachinePMCclothingsPOI
@@ -43,6 +43,10 @@
- type: ShipRepairable
repairTime: 2
repairCost: 3
- type: Tag
tags:
- Wall
- WallT1
- type: entity
abstract: true
@@ -87,6 +91,10 @@
- type: ShipRepairable
repairTime: 3
repairCost: 6
- type: Tag
tags:
- Wall
- WallT2
- type: entity
abstract: true
@@ -131,6 +139,10 @@
- type: ShipRepairable
repairTime: 5
repairCost: 8
- type: Tag
tags:
- Wall
- WallT3
- type: entity
abstract: true
@@ -175,6 +187,10 @@
- type: ShipRepairable
repairTime: 10
repairCost: 12
- type: Tag
tags:
- Wall
- WallT4
- type: entity
abstract: true
@@ -10,6 +10,18 @@
outputMultiplier: 5000.0 # We scale density up significantly for more human-friendly numbers.
minimum: 0.25
- type: noiseChannel
id: DensityVeryRare
noiseType: Perlin
fractalLacunarityByPi: 0.666666666
remapTo0Through1: true
clippingRanges:
- 0.4, 0.6
clippedValue: 30
inputMultiplier: 3
outputMultiplier: 7500.0
minimum: 0.25
- type: noiseChannel
id: WreckRare
noiseType: Perlin
@@ -18,8 +30,8 @@
- 0.0, 0.4
clippedValue: 0
remapTo0Through1: true
inputMultiplier: 16 # Makes wreck concentration very low noise at scale.
outputMultiplier: 0.35
outputMultiplier: 0
minimum: 0.2 # constant probability
# region Far Ring
- type: spaceBiome
@@ -175,14 +187,14 @@
prob: 0.3
orGroup: wreck
- id: MonoDroneSpawnerT2Inner
prob: 2.5
prob: 1.5
orGroup: wreck
- type: spaceBiome
id: MonoWorldgenVeryFarT2Middle
parent: MonoWorldgenVeryFarT1
priority: -3
distanceRange: null
distanceRange: 25000, 30000
chunkComponents:
- type: NoiseDrivenDebrisSelector
noiseChannel: WreckRare
@@ -203,5 +215,35 @@
prob: 0.3
orGroup: wreck
- id: MonoDroneSpawnerT2Middle
prob: 2.5
prob: 1.5
orGroup: wreck
- type: spaceBiome
id: MonoWorldgenVeryFarT2Far
parent: MonoWorldgenVeryFarT1
priority: -4
distanceRange: null
chunkComponents:
- type: DebrisFeaturePlacerController
densityNoiseChannel: DensityVeryRare
- type: NoiseDrivenDebrisSelector
debrisTable:
- id: NFWreckDebrisSmall
prob: 0.5
orGroup: wreck
- id: NFWreckDebrisMedium
prob: 1
orGroup: wreck
- id: NFWreckDebrisLarge
prob: 0.5
orGroup: wreck
- id: NFWreckDebrisBrassLarge
prob: 0.3
orGroup: wreck
- id: NFWreckDebrisBrassExtraLarge
prob: 0.9
orGroup: wreck
- id: MonoDroneSpawnerT2Far
prob: 1
orGroup: wreck
@@ -1,3 +1,34 @@
#region Random Spawners
- type: entity
id: SpawnDroneBase
parent: MarkerBase
abstract: true
components:
- type: GridSpawner
addComponents:
- type: IFF
flags: AlwaysShowColor
color: "#9a2020"
- type: GridCleanupGrid
cleanupAcceleration: 3
ignorePowered: true
ignoreIFF: true
ignorePrice: true
distanceOverride: 1024 # so it doesn't despawn while in view
- type: RandomMetadata
nameSeparator: ""
nameSegments:
- DroneTitle
- " 0x"
- DroneHex
- DroneHex
- DroneHex
- DroneHex
- DroneHex
- DroneHex
nameGrid: false
- type: entity
id: MonoDroneSpawnerT1
parent: MarkerBase
@@ -31,53 +62,77 @@
table: !type:NestedSelector
tableId: DroneSpawnTableT2Middle
- type: entity
id: MonoDroneSpawnerT2Far
parent: MarkerBase
categories: [Spawner]
components:
- type: EntityTableSpawner
table: !type:NestedSelector
tableId: DroneSpawnTableT2Far
#endregion
#region Tables
- type: entityTable
id: DroneTableT21
table: !type:GroupSelector
children:
- id: SpawnDroneWasp
weight: 10
- id: SpawnDroneCrown
weight: 10
- id: SpawnDroneGust
weight: 10
- id: SpawnDronePiercer
weight: 10
- type: entityTable
id: DroneTableT22
table: !type:GroupSelector
children:
- id: SpawnDroneMedusa
weight: 10
- id: SpawnDroneAssembly
weight: 10
- id: SpawnDroneBracket
weight: 10
- type: entityTable
id: DroneTableT23
table: !type:GroupSelector
children:
- id: SpawnDroneMauler
weight: 10
- type: entityTable
id: DroneSpawnTableT2Middle
table: !type:GroupSelector
children:
# T2 small
- id: SpawnDroneWasp
weight: 20
- id: SpawnDroneCrown
weight: 20
- id: SpawnDroneGust
weight: 20
- id: SpawnDronePiercer
- !type:NestedSelector
tableId: DroneTableT21
weight: 20
# T2 medium
- id: SpawnDroneMedusa
weight: 10
- id: SpawnDroneAssembly
- !type:NestedSelector
tableId: DroneTableT22
weight: 10
- type: entity
id: SpawnDroneBase
parent: MarkerBase
abstract: true
components:
- type: GridSpawner
addComponents:
- type: IFF
flags: AlwaysShowColor
color: "#9a2020"
- type: GridCleanupGrid
cleanupAcceleration: 3
ignorePowered: true
ignoreIFF: true
ignorePrice: true
distanceOverride: 1024 # so it doesn't despawn while in view
- type: RandomMetadata
nameSeparator: ""
nameSegments:
- DroneTitle
- " 0x"
- DroneHex
- DroneHex
- DroneHex
- DroneHex
- DroneHex
- DroneHex
nameGrid: false
- type: entityTable
id: DroneSpawnTableT2Far
table: !type:GroupSelector
children:
# T2 medium
- !type:NestedSelector
tableId: DroneTableT22
weight: 20
# T2 large
- !type:NestedSelector
tableId: DroneTableT23
weight: 10
#endregion
#region Debug
@@ -87,6 +142,19 @@
components:
- type: GridSpawner
path: /Maps/_Mono/Shuttles/World/needle.yml
addComponents:
- type: RandomMetadata
nameSeparator: ""
nameSegments:
- "NEEDLE"
- " 0x"
- DroneHex
- DroneHex
- DroneHex
- DroneHex
- DroneHex
- DroneHex
nameGrid: false
- type: entity
id: SpawnDroneWedge
@@ -94,16 +162,22 @@
components:
- type: GridSpawner
path: /Maps/_Mono/Shuttles/World/wedge.yml
addComponents:
- type: RandomMetadata
nameSeparator: ""
nameSegments:
- "WEDGE"
- " 0x"
- DroneHex
- DroneHex
- DroneHex
- DroneHex
- DroneHex
- DroneHex
nameGrid: false
#region T1
- type: entity
id: SpawnDroneGust
parent: SpawnDroneBase
components:
- type: GridSpawner
path: /Maps/_Mono/Shuttles/World/gust.yml
- type: entity
id: SpawnDroneBasicSmall
parent: SpawnDroneBase
@@ -124,6 +198,19 @@
components:
- type: GridSpawner
path: /Maps/_Mono/Shuttles/World/mpulsar.yml
addComponents:
- type: RandomMetadata
nameSeparator: ""
nameSegments:
- "PULSAR"
- " 0x"
- DroneHex
- DroneHex
- DroneHex
- DroneHex
- DroneHex
- DroneHex
nameGrid: false
- type: entity
id: SpawnDroneLance
@@ -131,15 +218,61 @@
components:
- type: GridSpawner
path: /Maps/_Mono/Shuttles/World/lance.yml
addComponents:
- type: RandomMetadata
nameSeparator: ""
nameSegments:
- "LANCE"
- " 0x"
- DroneHex
- DroneHex
- DroneHex
- DroneHex
- DroneHex
- DroneHex
nameGrid: false
#region T2-1
- type: entity
id: SpawnDroneGust
parent: SpawnDroneBase
components:
- type: GridSpawner
path: /Maps/_Mono/Shuttles/World/gust.yml
addComponents:
- type: RandomMetadata
nameSeparator: ""
nameSegments:
- "GUST"
- " 0x"
- DroneHex
- DroneHex
- DroneHex
- DroneHex
- DroneHex
- DroneHex
nameGrid: false
- type: entity
id: SpawnDroneWasp
parent: SpawnDroneBase
components:
- type: GridSpawner
path: /Maps/_Mono/Shuttles/World/wasp.yml
addComponents:
- type: RandomMetadata
nameSeparator: ""
nameSegments:
- "WASP"
- " 0x"
- DroneHex
- DroneHex
- DroneHex
- DroneHex
- DroneHex
- DroneHex
nameGrid: false
- type: entity
id: SpawnDroneCrown
@@ -147,6 +280,19 @@
components:
- type: GridSpawner
path: /Maps/_Mono/Shuttles/World/crown.yml
addComponents:
- type: RandomMetadata
nameSeparator: ""
nameSegments:
- "CROWN"
- " 0x"
- DroneHex
- DroneHex
- DroneHex
- DroneHex
- DroneHex
- DroneHex
nameGrid: false
- type: entity
id: SpawnDronePiercer
@@ -154,6 +300,19 @@
components:
- type: GridSpawner
path: /Maps/_Mono/Shuttles/World/piercer.yml
addComponents:
- type: RandomMetadata
nameSeparator: ""
nameSegments:
- "PIERCER"
- " 0x"
- DroneHex
- DroneHex
- DroneHex
- DroneHex
- DroneHex
- DroneHex
nameGrid: false
#region T2-2
@@ -163,6 +322,19 @@
components:
- type: GridSpawner
path: /Maps/_Mono/Shuttles/World/medusa.yml
addComponents:
- type: RandomMetadata
nameSeparator: ""
nameSegments:
- "MEDUSA"
- " 0x"
- DroneHex
- DroneHex
- DroneHex
- DroneHex
- DroneHex
- DroneHex
nameGrid: false
- type: entity
id: SpawnDroneAssembly
@@ -170,3 +342,59 @@
components:
- type: GridSpawner
path: /Maps/_Mono/Shuttles/World/assembly.yml
addComponents:
- type: RandomMetadata
nameSeparator: ""
nameSegments:
- "ASSEMBLY"
- " 0x"
- DroneHex
- DroneHex
- DroneHex
- DroneHex
- DroneHex
- DroneHex
nameGrid: false
- type: entity
id: SpawnDroneBracket
parent: SpawnDroneBase
components:
- type: GridSpawner
path: /Maps/_Mono/Shuttles/World/bracket.yml
addComponents:
- type: RandomMetadata
nameSeparator: ""
nameSegments:
- "BRACKET"
- " 0x"
- DroneHex
- DroneHex
- DroneHex
- DroneHex
- DroneHex
- DroneHex
nameGrid: false
#region T2-3
- type: entity
id: SpawnDroneMauler
parent: SpawnDroneBase
components:
- type: GridSpawner
path: /Maps/_Mono/Shuttles/World/mauler.yml
addComponents:
- type: RandomMetadata
nameSeparator: ""
nameSegments:
- "MAULER"
- " 0x"
- DroneHex
- DroneHex
- DroneHex
- DroneHex
- DroneHex
- DroneHex
nameGrid: false
@@ -0,0 +1,84 @@
- type: gridModifier
id: DegradedHull
modifiers:
- !type:GridModEntityReplace
comp: Occluder
data:
- chance: 0.25
whitelist:
tags:
- WallT2
replaceWith: WallSolid
- chance: 0.6
whitelist:
tags:
- WallT3
replaceWith: WallReinforced
- chance: 1
whitelist:
tags:
- WallT4
replaceWith: WallPlastitanium
- type: gridModifier
id: DestroyedHull
modifiers:
- !type:GridModEntityReplace
comp: Occluder
data:
- chance: 0.7
toReplace: WallSolid
replaceWith: Girder
- chance: 0.25
whitelist:
tags:
- WallT2
replaceWith: ReinforcedGirder
- chance: 0.4
whitelist:
tags:
- WallT2
replaceWith: WallSolid
- chance: 0.8
whitelist:
tags:
- WallT3
replaceWith: WallReinforced
- chance: 1
whitelist:
tags:
- WallT4
replaceWith: WallReinforced
- type: gridModifier
id: ReinforcedHull
modifiers:
- !type:GridModEntityReplace
comp: Occluder
data:
- chance: 0.8
toReplace: WallSolid
replaceWith: WallReinforced
- chance: 0.45
whitelist:
tags:
- WallT2
replaceWith: WallPlastitanium
- chance: 0.25
whitelist:
tags:
- WallT3
replaceWith: WallPlastitaniumCapital
- type: gridModifier
id: DamagedThrusters
modifiers:
- !type:GridModEntityReplace
comp: Thruster
data:
- chance: 0.25
whitelist:
components:
- Thruster
replaceWith: MachineFrameDestroyed
+13
View File
@@ -491,6 +491,19 @@
- type: Tag
id: Dragoon
# Walls
- type: Tag
id: WallT1
- type: Tag
id: WallT2
- type: Tag
id: WallT3
- type: Tag
id: WallT4
# Bomb Collars
- type: Tag
@@ -91,14 +91,18 @@
startingCharge: 4000
- type: HitscanBatteryAmmoProvider
proto: RedLaser
fireCost: 80
fireCost: 32
- type: Gun
selectedMode: FullAuto
availableModes:
- Burst
- FullAuto
fireRate: 8
minAngle: 1
maxAngle: 10
burstFireRate: 12
shotsPerBurst: 5
burstCooldown: 0.5
soundGunshot:
path: /Audio/_DV/Weapons/Guns/Gunshots/laser.ogg
soundEmpty:
@@ -135,6 +139,14 @@
- state: inhand-right
- state: inhand-right-unshaded
shader: unshaded
- type: Gun
burstCooldown: 0.75
burstFireRate: 3
shotsPerBurst: 3
selectedMode: SemiAuto
availableModes:
- SemiAuto
- Burst
- type: StaticPrice # Mono
price: 150
@@ -163,6 +163,17 @@
- WeaponLaserCarbine
categories: [ HideSpawnMenu ]
id: WeaponLaserCarbineExpedition
components:
- type: Gun
burstCooldown: 0.5
burstFireRate: 3
shotsPerBurst: 3
selectedMode: SemiAuto
availableModes:
- SemiAuto
- Burst
- FullAuto
- type: entity
parent:
@@ -9,6 +9,7 @@
offState: off
brokenState: broken
normalState: normal-unshaded
requiresCash: true
# ejectState: eject-unshaded No sprite, see chefvend/dinnerware/BODA/etc for expamples
- type: Advertise
pack: CuddlyCritterAds
@@ -40,6 +41,7 @@
offState: off
brokenState: broken
normalState: normal-unshaded
requiresCash: true
# ejectState: eject-unshaded No sprite, see chefvend/dinnerware/BODA/etc for expamples
- type: Advertise
pack: AstroVendAds
@@ -79,6 +81,7 @@
normalState: normal-unshaded
ejectState: eject-unshaded
denyState: deny-unshaded
requiresCash: true
# - type: Advertise
# pack: FlatpackVendAds
- type: Sprite
@@ -190,6 +193,7 @@
components:
- type: VendingMachine
pack: BountyVendPOIInventory
requiresCash: true
- type: entity
id: VendingMachineArcadia
@@ -204,6 +208,7 @@
offState: off
brokenState: broken
normalState: normal-unshaded
requiresCash: true
# ejectState: eject-unshaded No sprite, see chefvend/dinnerware/BODA/etc for expamples
# denyState: deny-unshaded
ejectDelay: 3
@@ -264,6 +269,7 @@
components:
- type: VendingMachine
pack: LessLethalVendPOIInventory
requiresCash: true
- type: entity
parent: VendingMachine
@@ -281,6 +287,7 @@
ejectState: eject-unshaded
denyState: deny-unshaded
ejectDelay: 3
requiresCash: true
- type: Advertise
pack: LessLethalVendAds
- type: Sprite
@@ -311,6 +318,7 @@
normalState: normal-unshaded
ejectState: eject-unshaded
denyState: deny-unshaded
requiresCash: true
# - type: Advertise
# pack: AutoTuneVendAds
- type: Sprite
@@ -360,6 +368,7 @@
normalState: normal-unshaded
ejectState: eject-unshaded
denyState: deny-unshaded
requiresCash: true
- type: Advertise
pack: MegaSeedAds
- type: Sprite
@@ -390,6 +399,7 @@
offState: off
brokenState: broken
normalState: normal-unshaded
requiresCash: true
- type: Advertise
pack: NfsdDrobeAds
- type: Sprite
@@ -440,6 +450,7 @@
offState: off
brokenState: broken
normalState: normal-unshaded
requiresCash: true
- type: Advertise
pack: NfsdDrobeAds
- type: Sprite
@@ -462,6 +473,7 @@
components:
- type: VendingMachine
pack: NFPTechInventory
requiresCash: true
- type: AccessReader
access: [["HeadOfPersonnel"]]
- type: MarketModifier
@@ -562,6 +574,7 @@
ejectState: eject-unshaded
denyState: deny-unshaded
ejectDelay: 2.1
requiresCash: true
- type: Advertise
pack: FuelVendAds
- type: SpeakOnUIClosed
@@ -586,6 +599,7 @@
offState: off
brokenState: broken
normalState: normal-unshaded
requiresCash: true
# ejectState: eject-unshaded No sprite, see chefvend/dinnerware/BODA/etc for expamples
- type: Advertise
pack: CiviMedAds
@@ -634,6 +648,7 @@
offState: off
brokenState: broken
normalState: normal-unshaded
requiresCash: true
# ejectState: eject-unshaded No sprite, see chefvend/dinnerware/BODA/etc for expamples
- type: Advertise
pack: ValetDrobeAds
@@ -667,6 +682,7 @@
offState: off
brokenState: broken
normalState: normal-unshaded
requiresCash: true
# ejectState: eject-unshaded No sprite, see chefvend/dinnerware/BODA/etc for expamples
- type: Advertise
pack: MailVendAds
@@ -696,6 +712,7 @@
components:
- type: VendingMachine
pack: WeaponryWorksVendPOIInventory
requiresCash: true
- type: entity
parent: [VendingMachineEngivend, BaseStructureDisableAnchoring]
@@ -704,6 +721,7 @@
components:
- type: VendingMachine
pack: EngiVendPOIInventory
requiresCash: true
- type: entity
parent: [VendingMachineVendomat, BaseStructureDisableAnchoring]
@@ -712,6 +730,7 @@
components:
- type: VendingMachine
pack: VendomatPOIInventory
requiresCash: true
- type: entity
parent: [VendingMachineYouTool, BaseStructureDisableAnchoring]
@@ -720,6 +739,7 @@
components:
- type: VendingMachine
pack: YouToolPOIInventory
requiresCash: true
- type: entity
parent: [VendingMachineSalvage, BaseStructureDisableAnchoring]
@@ -728,6 +748,7 @@
components:
- type: VendingMachine
pack: NFSalvageEquipmentPOIInventory
requiresCash: true
- type: entity
parent: [VendingMachineMediDrobe, BaseStructureDisableAnchoring]
@@ -736,6 +757,7 @@
components:
- type: VendingMachine
pack: MediDrobeInventory
requiresCash: true
- type: entity
parent: [VendingMachinePottedPlantVend, BaseStructureDisableAnchoring]
@@ -744,6 +766,7 @@
components:
- type: VendingMachine
pack: PottedPlantVendInventory
requiresCash: true
- type: entity
parent: [VendingMachineGames, BaseStructureDisableAnchoring]
@@ -752,6 +775,7 @@
components:
- type: VendingMachine
pack: GoodCleanFunInventory
requiresCash: true
- type: entity
parent: [VendingMachineCigs, BaseStructureDisableAnchoring]
@@ -760,6 +784,7 @@
components:
- type: VendingMachine
pack: CigaretteMachineInventory
requiresCash: true
- type: entity
parent: [VendingMachineBooze, BaseStructureDisableAnchoring]
@@ -768,6 +793,7 @@
components:
- type: VendingMachine
pack: BoozeOMatInventory
requiresCash: true
# Gas Tank Dispenser
@@ -778,3 +804,4 @@
components:
- type: VendingMachine
pack: TankDispenserEVAPOIInventory
requiresCash: true
@@ -10,3 +10,4 @@
- MonoWorldgenVeryFarT1 # Mono
- MonoWorldgenVeryFarT2Inner # Mono
- MonoWorldgenVeryFarT2Middle # Mono
- MonoWorldgenVeryFarT2Far # Mono
@@ -8,7 +8,7 @@
Players must have valid in-character reasons to kill or attack another player.
- Any conflict is allowed with a [color=red][bold]proper, reasonable RP reason[/bold][/color]. A stolen magazine may be reasoning for a fistfight, but not a meatgrinder.
-- Vessel crew is allowed to KOS anyone who hacks or breaks their locked doors under "Castle doctrine".
-- Vessel crew is allowed to KOS anyone who hacks or breaks their locked doors under "Castle doctrine".
- Combat should arise naturally through roleplay, with proper escalation and meaningful interaction.
-- Combat escalation should be stated in local, shortband, or broadband chat/radio channels and must be clearly declared to those involved. (ex. "It's over Jackson, die fucker!!" in local chat, or shortband)
- Escalation to combat immediately is allowed in select circumstances such as command bounties, confirmed pirates, chimera/ADC, etc.