Staging -> Master (#41929)
Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com> Co-authored-by: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com>
This commit is contained in:
commit
517b37698d
7 changed files with 57 additions and 38 deletions
|
|
@ -1,4 +1,3 @@
|
|||
using System.Linq;
|
||||
using Content.Shared.Alert;
|
||||
using Content.Shared.Body.Components;
|
||||
using Content.Shared.Body.Events;
|
||||
|
|
@ -71,49 +70,41 @@ public abstract class SharedBloodstreamSystem : EntitySystem
|
|||
bloodstream.NextUpdate += bloodstream.AdjustedUpdateInterval;
|
||||
DirtyField(uid, bloodstream, nameof(BloodstreamComponent.NextUpdate)); // needs to be dirtied on the client so it can be rerolled during prediction
|
||||
|
||||
if (!SolutionContainer.ResolveSolution(uid, bloodstream.BloodSolutionName, ref bloodstream.BloodSolution, out var bloodSolution))
|
||||
if (!SolutionContainer.ResolveSolution(uid, bloodstream.BloodSolutionName, ref bloodstream.BloodSolution))
|
||||
continue;
|
||||
|
||||
// Blood level regulation. Must be alive.
|
||||
TryRegulateBloodLevel(uid, bloodstream.BloodRefreshAmount);
|
||||
|
||||
// Removes blood from the bloodstream based on bleed amount (bleed rate)
|
||||
// as well as stop their bleeding to a certain extent.
|
||||
if (bloodstream.BleedAmount > 0)
|
||||
if (!_mobStateSystem.IsDead(uid))
|
||||
{
|
||||
var ev = new BleedModifierEvent(bloodstream.BleedAmount, bloodstream.BleedReductionAmount);
|
||||
RaiseLocalEvent(uid, ref ev);
|
||||
TryRegulateBloodLevel(uid, bloodstream.BloodRefreshAmount);
|
||||
|
||||
// Blood is removed from the bloodstream at a 1-1 rate with the bleed amount
|
||||
TryBleedOut((uid, bloodstream), ev.BleedAmount);
|
||||
TickBleed((uid, bloodstream));
|
||||
|
||||
// Bleed rate is reduced by the bleed reduction amount in the bloodstream component.
|
||||
TryModifyBleedAmount((uid, bloodstream), -ev.BleedReductionAmount);
|
||||
// deal bloodloss damage if their blood level is below a threshold.
|
||||
var bloodPercentage = GetBloodLevel(uid);
|
||||
if (bloodPercentage < bloodstream.BloodlossThreshold)
|
||||
{
|
||||
// bloodloss damage is based on the base value, and modified by how low your blood level is.
|
||||
var amt = bloodstream.BloodlossDamage / (0.1f + bloodPercentage);
|
||||
|
||||
_damageableSystem.TryChangeDamage(uid, amt, ignoreResistances: false, interruptsDoAfters: false);
|
||||
|
||||
// Apply dizziness as a symptom of bloodloss.
|
||||
// The effect is applied in a way that it will never be cleared without being healthy.
|
||||
// Multiplying by 2 is arbitrary but works for this case, it just prevents the time from running out
|
||||
_status.TrySetStatusEffectDuration(uid, Bloodloss);
|
||||
}
|
||||
else
|
||||
{
|
||||
// If they're healthy, we'll try and heal some bloodloss instead.
|
||||
_damageableSystem.TryChangeDamage(uid, bloodstream.BloodlossHealDamage * bloodPercentage, ignoreResistances: true, interruptsDoAfters: false);
|
||||
|
||||
_status.TryRemoveStatusEffect(uid, Bloodloss);
|
||||
}
|
||||
}
|
||||
|
||||
// deal bloodloss damage if their blood level is below a threshold.
|
||||
var bloodPercentage = GetBloodLevel(uid);
|
||||
if (bloodPercentage < bloodstream.BloodlossThreshold && !_mobStateSystem.IsDead(uid))
|
||||
else
|
||||
{
|
||||
// bloodloss damage is based on the base value, and modified by how low your blood level is.
|
||||
var amt = bloodstream.BloodlossDamage / (0.1f + bloodPercentage);
|
||||
|
||||
_damageableSystem.TryChangeDamage(uid, amt, ignoreResistances: false, interruptsDoAfters: false);
|
||||
|
||||
// Apply dizziness as a symptom of bloodloss.
|
||||
// The effect is applied in a way that it will never be cleared without being healthy.
|
||||
// Multiplying by 2 is arbitrary but works for this case, it just prevents the time from running out
|
||||
_status.TrySetStatusEffectDuration(uid, Bloodloss);
|
||||
}
|
||||
else if (!_mobStateSystem.IsDead(uid))
|
||||
{
|
||||
// If they're healthy, we'll try and heal some bloodloss instead.
|
||||
_damageableSystem.TryChangeDamage(
|
||||
uid,
|
||||
bloodstream.BloodlossHealDamage * bloodPercentage,
|
||||
ignoreResistances: true, interruptsDoAfters: false);
|
||||
|
||||
_status.TryRemoveStatusEffect(uid, Bloodloss);
|
||||
TickBleed((uid, bloodstream));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -437,6 +428,23 @@ public abstract class SharedBloodstreamSystem : EntitySystem
|
|||
return true;
|
||||
}
|
||||
|
||||
public void TickBleed(Entity<BloodstreamComponent> entity)
|
||||
{
|
||||
// Removes blood from the bloodstream based on bleed amount (bleed rate)
|
||||
// as well as stop their bleeding to a certain extent.
|
||||
if (entity.Comp.BleedAmount <= 0)
|
||||
return;
|
||||
|
||||
var ev = new BleedModifierEvent(entity.Comp.BleedAmount, entity.Comp.BleedReductionAmount);
|
||||
RaiseLocalEvent(entity, ref ev);
|
||||
|
||||
// Blood is removed from the bloodstream at a 1-1 rate with the bleed amount
|
||||
TryBleedOut(entity.AsNullable(), ev.BleedAmount);
|
||||
|
||||
// Bleed rate is reduced by the bleed reduction amount in the bloodstream component.
|
||||
TryModifyBleedAmount(entity.AsNullable(), -ev.BleedReductionAmount);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Removes blood by spilling out the bloodstream.
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -284,7 +284,7 @@ public abstract class SharedMagicSystem : EntitySystem
|
|||
var ent = Spawn(ev.Prototype, fromMap);
|
||||
var direction = _transform.ToMapCoordinates(toCoords).Position -
|
||||
fromMap.Position;
|
||||
_gunSystem.ShootProjectile(ent, direction, userVelocity, ev.Performer, ev.Performer);
|
||||
_gunSystem.ShootProjectile(ent, direction, userVelocity, ev.Performer, ev.Performer, 25f);
|
||||
}
|
||||
// End Projectile Spells
|
||||
#endregion
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@
|
|||
- SemiAuto
|
||||
soundGunshot:
|
||||
path: /Audio/Weapons/Guns/Gunshots/kinetic_accel.ogg
|
||||
projectileSpeed: 25
|
||||
- type: AmmoCounter
|
||||
- type: Appearance
|
||||
- type: GenericVisualizer
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@
|
|||
- type: Gun
|
||||
soundGunshot:
|
||||
path: /Audio/Weapons/Guns/Gunshots/Magic/staff_healing.ogg
|
||||
projectileSpeed: 25
|
||||
- type: BasicEntityAmmoProvider
|
||||
proto: ProjectileHealingBolt
|
||||
capacity: 10
|
||||
|
|
@ -34,6 +35,7 @@
|
|||
- type: Gun
|
||||
soundGunshot:
|
||||
path: /Audio/Weapons/Guns/Gunshots/Magic/staff_door.ogg
|
||||
projectileSpeed: 25
|
||||
- type: BasicEntityAmmoProvider
|
||||
proto: ProjectilePolyboltDoor
|
||||
capacity: 10
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
- type: Gun
|
||||
soundGunshot:
|
||||
path: /Audio/Weapons/Guns/Gunshots/Magic/staff_animation.ogg
|
||||
projectileSpeed: 25
|
||||
- type: BasicEntityAmmoProvider
|
||||
proto: ProjectilePolyboltCarp
|
||||
capacity: 5
|
||||
|
|
@ -52,6 +53,7 @@
|
|||
fireRate: 0.25
|
||||
soundGunshot:
|
||||
path: /Audio/Magic/fireball.ogg
|
||||
projectileSpeed: 25
|
||||
- type: BasicEntityAmmoProvider
|
||||
proto: ProjectileFireball
|
||||
capacity: 5
|
||||
|
|
@ -72,6 +74,7 @@
|
|||
- type: Gun
|
||||
soundGunshot:
|
||||
path: /Audio/Weapons/Guns/Gunshots/Magic/staff_animation.ogg
|
||||
projectileSpeed: 25
|
||||
- type: BasicEntityAmmoProvider
|
||||
proto: ProjectileLocker
|
||||
capacity: 5
|
||||
|
|
@ -107,6 +110,7 @@
|
|||
- type: Gun
|
||||
soundGunshot:
|
||||
path: /Audio/Weapons/Guns/Gunshots/mateba.ogg # PUNCH
|
||||
projectileSpeed: 25
|
||||
- type: BasicEntityAmmoProvider
|
||||
proto: BulletInstakillMagic
|
||||
capacity: 3
|
||||
|
|
@ -126,6 +130,7 @@
|
|||
- type: Gun
|
||||
soundGunshot:
|
||||
path: /Audio/Weapons/Guns/Gunshots/Magic/staff_door.ogg
|
||||
projectileSpeed: 25
|
||||
- type: BasicEntityAmmoProvider
|
||||
proto: ProjectilePolyboltDoor
|
||||
capacity: 10
|
||||
|
|
|
|||
|
|
@ -633,6 +633,7 @@
|
|||
fireRate: 0.5
|
||||
soundGunshot:
|
||||
path: /Audio/Weapons/Guns/Gunshots/taser.ogg
|
||||
projectileSpeed: 25
|
||||
- type: BatteryAmmoProvider
|
||||
proto: BulletTaser
|
||||
fireCost: 200
|
||||
|
|
@ -985,7 +986,7 @@
|
|||
components:
|
||||
- type: BatterySelfRecharger
|
||||
autoRechargeRate: 30
|
||||
# "remove" wield bonus and penalty so borgs can use it
|
||||
# "remove" wield bonus and penalty so borgs can use it
|
||||
- type: GunWieldBonus
|
||||
minAngle: 0
|
||||
maxAngle: 0
|
||||
|
|
|
|||
|
|
@ -12,6 +12,8 @@
|
|||
|
||||
- type: reaction
|
||||
id: AmmoniaFromBlood
|
||||
requiredMixerCategories:
|
||||
- Stir # prevents evaporating vox blood, TODO: make it react only X units per second; make bloodstream an open thermal system
|
||||
minTemp: 370
|
||||
reactants:
|
||||
AmmoniaBlood:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue