Runes stuff
This commit is contained in:
@@ -0,0 +1,6 @@
|
|||||||
|
namespace Content.Server.White.Cult.Items.Components;
|
||||||
|
|
||||||
|
[RegisterComponent]
|
||||||
|
public sealed partial class BloodBoilProjectileComponent : Component
|
||||||
|
{
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
using Content.Server.White.Cult.Items.Components;
|
||||||
|
using Content.Server.White.Cult.TimedProduction;
|
||||||
|
using Content.Shared.White.Cult;
|
||||||
|
using Content.Shared.White.Cult.Pylon;
|
||||||
|
using Robust.Shared.Physics.Events;
|
||||||
|
|
||||||
|
namespace Content.Server.White.Cult.Items.Systems;
|
||||||
|
|
||||||
|
public sealed class BloodBoilProjectileSystem : EntitySystem
|
||||||
|
{
|
||||||
|
public override void Initialize()
|
||||||
|
{
|
||||||
|
base.Initialize();
|
||||||
|
|
||||||
|
SubscribeLocalEvent<BloodBoilProjectileComponent, PreventCollideEvent>(PreventCollision);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void PreventCollision(EntityUid uid, BloodBoilProjectileComponent component, ref PreventCollideEvent args)
|
||||||
|
{
|
||||||
|
if (HasComp<CultistComponent>(args.OtherEntity) || HasComp<ConstructComponent>(args.OtherEntity) ||
|
||||||
|
HasComp<CultistFactoryComponent>(args.OtherEntity) || HasComp<SharedPylonComponent>(args.OtherEntity))
|
||||||
|
{
|
||||||
|
args.Cancelled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -997,6 +997,8 @@ public sealed partial class CultSystem : EntitySystem
|
|||||||
float severity,
|
float severity,
|
||||||
CultRuneBloodBoilComponent component)
|
CultRuneBloodBoilComponent component)
|
||||||
{
|
{
|
||||||
|
cultists = cultists.Where(HasComp<CultistComponent>).ToHashSet(); // Prevent constructs from using the rune
|
||||||
|
|
||||||
if (cultists.Count < component.SummonMinCount)
|
if (cultists.Count < component.SummonMinCount)
|
||||||
{
|
{
|
||||||
_popupSystem.PopupEntity(Loc.GetString("cult-blood-boil-rune-need-minimum"), user, user);
|
_popupSystem.PopupEntity(Loc.GetString("cult-blood-boil-rune-need-minimum"), user, user);
|
||||||
@@ -1006,17 +1008,6 @@ public sealed partial class CultSystem : EntitySystem
|
|||||||
var xformQuery = GetEntityQuery<TransformComponent>();
|
var xformQuery = GetEntityQuery<TransformComponent>();
|
||||||
var xform = xformQuery.GetComponent(rune);
|
var xform = xformQuery.GetComponent(rune);
|
||||||
|
|
||||||
foreach (var cultist in cultists)
|
|
||||||
{
|
|
||||||
if (!TryComp<BloodstreamComponent>(cultist, out var bloodstreamComponent))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
_bloodstreamSystem.TryModifyBloodLevel(cultist, -40, bloodstreamComponent, createPuddle: false);
|
|
||||||
}
|
|
||||||
|
|
||||||
var projectileCount =
|
|
||||||
(int) MathF.Round(MathHelper.Lerp(component.MinProjectiles, component.MaxProjectiles, severity));
|
|
||||||
|
|
||||||
var inRange = _lookup.GetEntitiesInRange(rune, component.ProjectileRange * severity, LookupFlags.Dynamic);
|
var inRange = _lookup.GetEntitiesInRange(rune, component.ProjectileRange * severity, LookupFlags.Dynamic);
|
||||||
inRange.RemoveWhere(x =>
|
inRange.RemoveWhere(x =>
|
||||||
!_entityManager.HasComponent<HumanoidAppearanceComponent>(x) ||
|
!_entityManager.HasComponent<HumanoidAppearanceComponent>(x) ||
|
||||||
@@ -1032,6 +1023,20 @@ public sealed partial class CultSystem : EntitySystem
|
|||||||
|
|
||||||
_random.Shuffle(list);
|
_random.Shuffle(list);
|
||||||
|
|
||||||
|
var bloodCost = -120 / cultists.Count;
|
||||||
|
|
||||||
|
foreach (var cultist in cultists)
|
||||||
|
{
|
||||||
|
if (!TryComp<BloodstreamComponent>(cultist, out var bloodstreamComponent))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
_bloodstreamSystem.TryModifyBloodLevel(cultist, bloodCost, bloodstreamComponent);
|
||||||
|
}
|
||||||
|
|
||||||
|
var projectileCount =
|
||||||
|
(int) MathF.Round(MathHelper.Lerp(component.MinProjectiles, component.MaxProjectiles, severity));
|
||||||
|
|
||||||
|
|
||||||
while (projectileCount > 0)
|
while (projectileCount > 0)
|
||||||
{
|
{
|
||||||
var target = _random.Pick(list);
|
var target = _random.Pick(list);
|
||||||
@@ -1206,6 +1211,7 @@ public sealed partial class CultSystem : EntitySystem
|
|||||||
if (teleportRune)
|
if (teleportRune)
|
||||||
{
|
{
|
||||||
var teleportRuneEntity = _entityManager.SpawnEntity(rune, transform.Value);
|
var teleportRuneEntity = _entityManager.SpawnEntity(rune, transform.Value);
|
||||||
|
_xform.AttachToGridOrMap(teleportRuneEntity);
|
||||||
|
|
||||||
_entityManager.TryGetComponent<CultRuneTeleportComponent>(teleportRuneEntity, out var sex);
|
_entityManager.TryGetComponent<CultRuneTeleportComponent>(teleportRuneEntity, out var sex);
|
||||||
{
|
{
|
||||||
@@ -1243,7 +1249,7 @@ public sealed partial class CultSystem : EntitySystem
|
|||||||
var damageSpecifier = new DamageSpecifier(_prototypeManager.Index<DamageTypePrototype>("Slash"), 10);
|
var damageSpecifier = new DamageSpecifier(_prototypeManager.Index<DamageTypePrototype>("Slash"), 10);
|
||||||
_damageableSystem.TryChangeDamage(uid, damageSpecifier, true, false);
|
_damageableSystem.TryChangeDamage(uid, damageSpecifier, true, false);
|
||||||
|
|
||||||
_entityManager.SpawnEntity(rune, transform.Value);
|
_xform.AttachToGridOrMap(_entityManager.SpawnEntity(rune, transform.Value));
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool SpawnShard(EntityUid target)
|
private bool SpawnShard(EntityUid target)
|
||||||
|
|||||||
@@ -153,3 +153,24 @@
|
|||||||
whitelist:
|
whitelist:
|
||||||
components:
|
components:
|
||||||
- Body
|
- Body
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
id: ProjectileCult
|
||||||
|
parent: BaseBulletHighVelocity
|
||||||
|
name: Blood
|
||||||
|
description: FUCK.
|
||||||
|
noSpawn: true
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: White/Cult/suka.rsi
|
||||||
|
- type: Projectile
|
||||||
|
damage:
|
||||||
|
groups:
|
||||||
|
Burn: 10
|
||||||
|
Brute: 10
|
||||||
|
- type: PointLight
|
||||||
|
enabled: true
|
||||||
|
color: "#ff4300"
|
||||||
|
radius: 2.0
|
||||||
|
energy: 7.0
|
||||||
|
- type: BloodBoilProjectile
|
||||||
|
|||||||
Reference in New Issue
Block a user