* Removed arbitrary modifier scaling. The bleed amount is now 1-1 in units.
* Added some comments to explain the blood and bleed code
* added some comments
* added some comments
* profusely bleeding message scales with max bleed rate
* Added some comments
* Added some comments (tm)
* Halved the speed bleed rate heals.
* Changed the wording of a comment to make the function of the values more clear
* Changed bleed rate values, made heat heal more bleed rate
* doubled crit chance, since damage types were reduced
* Made iron restore more blood, 2->4u per 1u
* Starting to add the blood pack
* add bloodlevel to healingcomponent
* Created code support in the healing system for restoring blood
* first test of blood pack prototype
* More pack testing, and defining the yml stack
* yml syntax fix
* adds bloodpack tag
* Successfully added the item, but the effect and deletion after using the item is not working yet.
* the blood regen worksgit add -A!
* blood pack is entirely functioning
* Removed bleed rate healing from brute pack
* Comment correction
* I tried
* Removed bleed stats from corrupted corgi, they inherit same stats from basemob
* Removed bleed stats from xeno, they inherit same stats from a base mob
* Removed bleed stats from diona, they inherit same stats from a base mob
* Removed bleed stats from slimes, they inherit same stats from a base mob
* All mobs now heal bloodloss damage at a rate of 1 instead of 0.25 when healthy
* The cautery now closes bleed wounds
* Nerf blood pack bleed rate heal
* Added 2 blood packs to medicine locker
* Added 2 blood packs to wall medicine locker
* Minor YML fix to chemistry locker, no changes in game
* Added tag to medical belt for blood pack, added 2 blood packs to medical belt
* Added 1 gauze to medical belt
* 5 blood packs addded to nanomed plus
* nanomed inventory change
* 2 blood packs added to medical supplies crate from cargo
* Moved 1 gauze from med kit to advanced med kit
* Moved 1 tricord pill from advanced med kit to basic med kit
* added 2 ointment to burn kit
* Moved ina syringe from burn treatment to oxygen kit
* Removed one gauze from brute kit
* Added one bloodpack to brute med kit
* Moved tranex acid syringe from advanced first aid to brute kit
* Poison medipen moved from advanced first aid kit to toxin kit
* Removed health analyzer from advanced first aid kit
* removed one brute pack from advanced aid kit
* added one ointment to advanced aid kit
* Added one blood pack to advanced aid kit
* Added 2 blood packs to combat med kit
* Starting with adding the license for the tg sprite
* Adds the blood pack sprite and meta.json code
* I forgor to actually code the sprite in
* Advanced med kit missing one blood pack
* Replaced tricord pill with emergency medipen in cobat kit
* Removed emergency pen from combat kit, there's no space for it
* Revert "I tried"
This reverts commit
94c2e28df3200993d3f09b72ecabc838ea5ae5c0.
* Trying to fix yml test fail
* Try again
* attempt number 3
* Restock crate price was too low
* fixing merge conflict without making a HUGE mess this time
* ???
* again
* again
* Can I add the newline now maybe???
* Revert "Can I add the newline now maybe???"
This reverts commit
22d26706a65a24633f7da1dea6315012e2d3ac6f.
* Adds the doafter fix code from Keron to the blood level healing
* minor typo fix
* Feedback from Emisse and sloth; Removed chance based feedback on cauterizing
* comment fix
/// How much should bleeding should be reduced every update interval?
/// </summary>
[DataField("bleedReductionAmount")]
- public float BleedReductionAmount = 1.0f;
+ public float BleedReductionAmount = 0.5f;
/// <summary>
/// How high can <see cref="BleedAmount"/> go?
// as well as stop their bleeding to a certain extent.
if (bloodstream.BleedAmount > 0)
{
- TryModifyBloodLevel(uid, (-bloodstream.BleedAmount) / 20, bloodstream);
+ // Blood is removed from the bloodstream at a 1-1 rate with the bleed amount
+ TryModifyBloodLevel(uid, (-bloodstream.BleedAmount), bloodstream);
+ // Bleed rate is reduced by the bleed reduction amount in the bloodstream component.
TryModifyBleedAmount(uid, -bloodstream.BleedReductionAmount, bloodstream);
}
if (bloodloss.Empty)
return;
+ // Does the calculation of how much bleed rate should be added/removed, then applies it
var oldBleedAmount = component.BleedAmount;
var total = bloodloss.Total;
var totalFloat = total.Float();
TryModifyBleedAmount(uid, totalFloat, component);
- var prob = Math.Clamp(totalFloat / 50, 0, 1);
- var healPopupProb = Math.Clamp(Math.Abs(totalFloat) / 25, 0, 1);
+ /// <summary>
+ /// Critical hit. Causes target to lose blood, using the bleed rate modifier of the weapon, currently divided by 5
+ /// The crit chance is currently the bleed rate modifier divided by 25.
+ /// Higher damage weapons have a higher chance to crit!
+ /// </summary>
+ var prob = Math.Clamp(totalFloat / 25, 0, 1);
if (totalFloat > 0 && _robustRandom.Prob(prob))
{
TryModifyBloodLevel(uid, (-total) / 5, component);
_audio.PlayPvs(component.InstantBloodSound, uid);
}
- else if (totalFloat < 0 && oldBleedAmount > 0 && _robustRandom.Prob(healPopupProb))
+
+ // Heat damage will cauterize, causing the bleed rate to be reduced.
+ else if (totalFloat < 0 && oldBleedAmount > 0)
{
// Magically, this damage has healed some bleeding, likely
// because it's burn damage that cauterized their wounds.
uid, PopupType.Medium);
}
}
-
+ /// <summary>
+ /// Shows text on health examine, based on bleed rate and blood level.
+ /// </summary>
private void OnHealthBeingExamined(EntityUid uid, BloodstreamComponent component, HealthBeingExaminedEvent args)
{
- if (component.BleedAmount > 10)
+ // Shows profusely bleeding at half the max bleed rate.
+ if (component.BleedAmount > component.MaxBleedAmount / 2)
{
args.Message.PushNewline();
args.Message.AddMarkup(Loc.GetString("bloodstream-component-profusely-bleeding", ("target", Identity.Entity(uid, EntityManager))));
}
+ // Shows bleeding message when bleeding, but less than profusely.
else if (component.BleedAmount > 0)
{
args.Message.PushNewline();
args.Message.AddMarkup(Loc.GetString("bloodstream-component-bleeding", ("target", Identity.Entity(uid, EntityManager))));
}
+ // If the mob's blood level is below the damage threshhold, the pale message is added.
if (GetBloodLevelPercentage(uid, component) < component.BloodlossThreshold)
{
args.Message.PushNewline();
[ViewVariables(VVAccess.ReadWrite)]
public float BloodlossModifier = 0.0f;
+ /// <summary>
+ /// Restore missing blood.
+ /// </summary>
+ [DataField("ModifyBloodLevel")]
+ [ViewVariables(VVAccess.ReadWrite)]
+ public float ModifyBloodLevel = 0.0f;
+
/// <remarks>
/// The supported damage types are specified using a <see cref="DamageContainerPrototype"/>s. For a
/// HealingComponent this filters what damage container type this component should work on. If null,
if (healing.BloodlossModifier != 0)
_bloodstreamSystem.TryModifyBleedAmount(uid, healing.BloodlossModifier);
+ // Restores missing blood
+ if (healing.ModifyBloodLevel != 0)
+ _bloodstreamSystem.TryModifyBloodLevel(uid, healing.ModifyBloodLevel);
+
var healed = _damageable.TryChangeDamage(uid, healing.Damage, true, origin: args.Args.User);
if (healed == null && healing.BloodlossModifier != 0)
sprite: Objects/Specific/Service/vending_machine_restock.rsi
state: base
product: CrateVendingMachineRestockMedicalFilled
- cost: 1500
+ cost: 1750
category: Medical
group: market
amount: 2
- id: Gauze
amount: 2
+ - id: Bloodpack
+ amount: 2
- id: BoxLatexGloves
amount: 1
- id: BoxSterileMask
- type: StorageFill
contents:
- id: Brutepack
- amount: 3
+ amount: 2
- id: Ointment
- amount: 3
+ amount: 2
+ - id: Bloodpack
+ amount: 2
+ - id: Gauze
+ amount: 1
- id: EmergencyMedipen #You never know what people are going to latejoin into
- type: entity
amount: 1
- id: Brutepack
amount: 2
- - id: Gauze
- amount: 1
- id: Ointment
amount: 2
+ - id: PillTricordrazine
+ amount: 3
# see https://github.com/tgstation/blob/master/code/game/objects/items/storage/firstaid.dm for example contents
- type: entity
- type: StorageFill
contents:
- id: Ointment
- amount: 2
+ amount: 4
- id: PillKelotane
amount: 3
- - id: SyringeInaprovaline
- amount: 1
- type: entity
id: MedkitBruteFilled
- id: PillIron
amount: 2
- id: Gauze
- amount: 2
+ amount: 1
+ - id: Bloodpack
+ amount: 1
+ - id: SyringeTranexamicAcid
+ amount: 1
- type: entity
id: MedkitToxinFilled
amount: 1
- id: PillDylovene
amount: 3
+ - id: AntiPoisonMedipen
+ amount: 1
- type: entity
id: MedkitOxygenFilled
- id: PillDexalin
amount: 3
- id: SyringeInaprovaline
- amount: 1
+ amount: 2
- type: entity
id: MedkitRadiationFilled
components:
- type: StorageFill
contents:
- - id: HandheldHealthAnalyzer
- amount: 1
- id: Brutepack
- amount: 3 # TO DO: Advanced fills
- - id: SyringeTranexamicAcid
- amount: 1
- - id: PillTricordrazine
+ amount: 2 # TO DO: Advanced fills
+ - id: Gauze
amount: 1
- - id: AntiPoisonMedipen
+ - id: Ointment
amount: 1
+ - id: Bloodpack
+ amount: 2
- type: entity
id: MedkitCombatFilled
amount: 1 # TO DO: More combat meds
- id: SyringeTranexamicAcid
amount: 1
- - id: PillTricordrazine
- amount: 1
- id: AntiPoisonMedipen
amount: 1
+ - id: Bloodpack
+ amount: 2
- type: entity
id: StimkitFilled
amount: 2
- id: Ointment
amount: 2
+ - id: Bloodpack
+ amount: 2
- type: entity
id: LockerWallMedicalFilled
amount: 2
- id: Ointment
amount: 2
+ - id: Bloodpack
+ amount: 2
- type: entity
- type: StorageFill
contents:
- id: BoxSyringe
+ amount: 1
- id: BoxBeaker
+ amount: 1
- id: BoxPillCanister
+ amount: 1
- id: BoxBottle
- - id: BoxBottle
+ amount: 2
HandheldHealthAnalyzer: 3
Brutepack: 5
Ointment: 5
+ Bloodpack: 5
EpinephrineChemistryBottle: 3
Syringe: 5
- type: vendingMachineInventory
id: NanoMedInventory
startingInventory:
- Brutepack: 5
- Ointment: 5
+ Brutepack: 3
+ Ointment: 3
+ Bloodpack: 3
EpinephrineChemistryBottle: 3
- Syringe: 5
+ Syringe: 3
Blunt: 5
# Represents which damage types should be modified
-# in relation to how they cause bloodloss damage.
+# in relation to how they cause bleed rate.
- type: damageModifierSet
id: BloodlossHuman
coefficients:
- Blunt: 0.8
- Slash: 2.5
- Piercing: 2.0
+ Blunt: 0.08
+ Slash: 0.25
+ Piercing: 0.2
Shock: 0.0
Cold: 0.0
- Heat: -0.25 # heat damage cauterizes wounds!
+ Heat: -1 # heat damage cauterizes wounds, but will still hurt obviously.
Poison: 0.0
Radiation: 0.0
Asphyxiation: 0.0
- Bottle
- Spray
- Brutepack
+ - Bloodpack
- Gauze
- Ointment
- CigPack
gender: epicene
- type: Bloodstream
bloodReagent: DemonsBlood
- bloodlossDamage:
- types:
- Bloodloss:
- 1
- bloodlossHealDamage:
- types:
- Bloodloss:
- -0.25
- type: Damageable
damageContainer: Biological
damageModifierSet: Infernal
bloodlossHealDamage:
types:
Bloodloss:
- -0.25
+ -1
- type: InteractionOutline
- type: Fixtures
fixtures:
bloodlossHealDamage:
types:
Bloodloss:
- -0.25
+ -1
- type: Damageable
damageContainer: Biological
- type: RadiationReceiver
excess: 200
- type: Bloodstream
bloodReagent: FluorosulfuricAcid
- bloodlossDamage:
- types:
- Bloodloss:
- 1
- bloodlossHealDamage:
- types:
- Bloodloss:
- -0.25
- type: MeleeWeapon
hidden: true
angle: 0
bloodlossHealDamage:
types:
Bloodloss:
- -0.25
+ -1
- type: InteractionOutline
- type: Fixtures
fixtures:
bloodlossHealDamage:
types:
Bloodloss:
- -0.25
+ -1
- type: Stamina
- type: StatusEffects
allowed:
amount: 5
- type: Bloodstream
bloodReagent: Water
- bloodlossDamage:
- types:
- Bloodloss:
- 1
- bloodlossHealDamage:
- types:
- Bloodloss:
- -0.25
- type: Fixtures
fixtures:
- shape:
damageModifierSet: Slime
- type: Bloodstream
bloodReagent: Slime # TODO Color slime blood based on their slime color or smth
- bloodlossDamage:
- types:
- Bloodloss:
- 1
- bloodlossHealDamage:
- types:
- Bloodloss:
- -0.25
- type: Barotrauma
damage:
types:
damage:
groups:
Brute: -15 # 5 for each type in the group
- bloodlossModifier: -3 # a little bit of bloodloss healing.
healingBeginSound:
path: "/Audio/Items/Medical/brutepack_begin.ogg"
healingEndSound:
- type: StackPrice
price: 10
+- type: entity
+ name: blood pack
+ description: Contains a groundbreaking universal blood replacement created by Nanotrasen's advanced medical science.
+ parent: BaseHealingItem
+ id: Bloodpack
+ components:
+ - type: Tag
+ tags:
+ - Bloodpack
+ - type: Sprite
+ state: bloodpack
+ - type: Healing
+ damageContainer: Biological
+ damage:
+ types:
+ bloodloss: -0.5 #for whatever godforsaken reason I cannot touch blood level without healing one of these, so fuck it, bleed rate healing
+ ModifyBloodLevel: 10
+ healingBeginSound:
+ path: "/Audio/Items/Medical/brutepack_begin.ogg"
+ healingEndSound:
+ path: "/Audio/Items/Medical/brutepack_end.ogg"
+ - type: Stack
+ stackType: Bloodpack
+ count: 10
+ - type: StackPrice
+ price: 10
+
- type: entity
name: roll of gauze
description: Some sterile gauze to wrap around bloody stumps.
- type: Item
sprite: Objects/Specific/Medical/Surgery/cautery.rsi
- type: ItemCooldown
+ - type: MeleeWeapon
+ damage:
+ types:
+ Heat: 5
+ soundHit:
+ path: /Audio/Effects/lightburn.ogg
# Drill
Medicine:
effects:
- !type:ModifyBloodLevel
- amount: 2
+ amount: 4
- type: reagent
id: Lithium
-- type: stack
+- type: stack
id: Ointment
name: ointment
icon: { sprite: "/Textures/Objects/Specific/Medical/medical.rsi", state: ointment }
icon: { sprite: "/Textures/Objects/Specific/Medical/medical.rsi", state: gauze }
spawn: Brutepack
maxCount: 10
+
+- type: stack
+ id: Bloodpack
+ name: bloodpack
+ icon: { sprite: "/Textures/Objects/Specific/Medical/medical.rsi", state: bloodpack }
+ spawn: Bloodpack
+ maxCount: 10
- type: Tag
id: BikeHorn
+- type: Tag
+ id: Bloodpack
+
- type: Tag
id: BodyBag
{
"version": 1,
"license": "CC-BY-SA-3.0",
- "copyright": "Taken from cev-eris at https://github.com/discordia-space/CEV-Eris/commit/740ff31a81313086cf16761f3677cf1e2ab46c93",
+ "copyright": "Taken from cev-eris at https://github.com/discordia-space/CEV-Eris/commit/740ff31a81313086cf16761f3677cf1e2ab46c93 and Taken from tgstation at https://github.com/tgstation/tgstation/blob/623290915c2292b56da11048deb62d758e1e3fb4/icons/obj/bloodpack.dmi",
"size": {
"x": 32,
"y": 32
{
"name": "ointment-inhand-right",
"directions": 4
+ },
+ {
+ "name": "bloodpack"
}
]
}