diff --git a/code/WorkInProgress/surgery.dm b/code/WorkInProgress/surgery.dm
index ab19b0e525c..3989e7d8804 100644
--- a/code/WorkInProgress/surgery.dm
+++ b/code/WorkInProgress/surgery.dm
@@ -308,6 +308,9 @@ proc/spread_germs_to_organ(datum/organ/external/E, mob/living/carbon/human/user)
/datum/surgery_step/fix_vein
required_tool = /obj/item/weapon/FixOVein
+ min_duration = 70
+ max_duration = 90
+
can_use(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
@@ -855,7 +858,8 @@ proc/spread_germs_to_organ(datum/organ/external/E, mob/living/carbon/human/user)
target.cores--
user.visible_message("\blue [user] cuts out one of [target]'s cores with \the [tool].",, \
"\blue You cut out one of [target]'s cores with \the [tool]. [target.cores] cores left.")
- new/obj/item/metroid_core(target.loc)
+ if(target.cores >= 0)
+ new/obj/item/metroid_core(target.loc)
if(target.cores <= 0)
target.icon_state = "baby roro dead-nocore"
diff --git a/code/WorkInProgress/virus2/dishincubator.dm b/code/WorkInProgress/virus2/dishincubator.dm
index e6d0da12394..f2aefe07ead 100644
--- a/code/WorkInProgress/virus2/dishincubator.dm
+++ b/code/WorkInProgress/virus2/dishincubator.dm
@@ -165,5 +165,5 @@
if(beaker)
if(!beaker.reagents.remove_reagent("virusfood",5))
foodsupply += 10
- if(!beaker.reagents.remove_reagent("toxins",1))
+ if(!beaker.reagents.remove_reagent("toxin",1))
toxins += 1
\ No newline at end of file
diff --git a/code/datums/organs/organ_external.dm b/code/datums/organs/organ_external.dm
index da3c60bf304..acac9585819 100644
--- a/code/datums/organs/organ_external.dm
+++ b/code/datums/organs/organ_external.dm
@@ -188,7 +188,9 @@
if(W.internal && !W.is_treated())
// internal wounds get worse over time
W.open_wound(0.1 * wound_update_accuracy)
- owner.vessel.remove_reagent("blood",0.2 * W.damage * wound_update_accuracy)
+ owner.vessel.remove_reagent("blood",0.07 * W.damage * wound_update_accuracy)
+ if(prob(1 * wound_update_accuracy))
+ owner.custom_pain("You feel a stabbing pain in your [display_name]!",1)
if(W.bandaged || W.salved)
// slow healing
@@ -489,9 +491,11 @@
W = new wound_type(damage)
// Possibly trigger an internal wound, too.
- if(damage > 10 && prob(damage) && type != BURN)
+ var/local_damage = brute_dam + burn_dam + damage
+ if(damage > 10 && type != BURN && local_damage > 20 && prob(damage))
var/datum/wound/internal_bleeding/I = new (15)
wounds += I
+ owner.custom_pain("You feel something rip in your [display_name]!", 1)
// check whether we can add the wound to an existing wound
for(var/datum/wound/other in wounds)
diff --git a/code/game/dna.dm b/code/game/dna.dm
index 80a250620f0..c6b27658158 100644
--- a/code/game/dna.dm
+++ b/code/game/dna.dm
@@ -116,9 +116,10 @@
uni_identity = temp
var/mutstring = ""
- for(var/i = 1, i <= 13, i++)
+ for(var/i = 1, i <= STRUCDNASIZE, i++)
mutstring += add_zero2(num2hex(rand(1,1024)),3)
+
struc_enzymes = mutstring
unique_enzymes = md5(character.real_name)
diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm
index 8dce6c6e441..fbdc336282d 100644
--- a/code/game/gamemodes/gameticker.dm
+++ b/code/game/gamemodes/gameticker.dm
@@ -300,7 +300,8 @@ var/global/datum/controller/gameticker/ticker
emergency_shuttle.process()
- if(!mode.explosion_in_progress && mode.check_finished())
+ var/mode_finished = mode.check_finished() || (emergency_shuttle.location == 2 && emergency_shuttle.alert == 1)
+ if(!mode.explosion_in_progress && mode_finished)
current_state = GAME_STATE_FINISHED
spawn
diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm
index 37f1a721aae..2ea34728e9e 100644
--- a/code/game/jobs/access.dm
+++ b/code/game/jobs/access.dm
@@ -499,7 +499,7 @@
// hack for alt titles
if(istype(loc, /mob))
var/mob/M = loc
- if(M.mind.role_alt_title == jobName && M.mind.assigned_role in get_all_jobs())
+ if(M.mind && M.mind.role_alt_title == jobName && M.mind.assigned_role in get_all_jobs())
return M.mind.assigned_role
if(istype(src, /obj/item/device/pda))
diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm
index 5e6f6e9d1fc..3bb0f83bad9 100644
--- a/code/game/machinery/adv_med.dm
+++ b/code/game/machinery/adv_med.dm
@@ -235,6 +235,9 @@
else
dat += text("[]\tHealth %: [] ([])
", (occupant.health > 50 ? "" : ""), occupant.health, t1)
+ if(occupant.virus2)
+ dat += text("Viral pathogen detected in blood stream.
")
+
dat += text("[]\t-Brute Damage %: []
", (occupant.getBruteLoss() < 60 ? "" : ""), occupant.getBruteLoss())
dat += text("[]\t-Respiratory Damage %: []
", (occupant.getOxyLoss() < 60 ? "" : ""), occupant.getOxyLoss())
dat += text("[]\t-Toxin Content %: []
", (occupant.getToxLoss() < 60 ? "" : ""), occupant.getToxLoss())
diff --git a/code/game/machinery/bots/ed209bot.dm b/code/game/machinery/bots/ed209bot.dm
index 4fa8f095fe0..f43b43ac07d 100644
--- a/code/game/machinery/bots/ed209bot.dm
+++ b/code/game/machinery/bots/ed209bot.dm
@@ -820,14 +820,14 @@ Auto Patrol: []"},
projectile = /obj/item/projectile/energy/electrode
else if(lasercolor == "b")
if (src.emagged == 2)
- projectile = /obj/item/projectile/beam/omnitag
+ projectile = /obj/item/projectile/beam/lastertag/omni
else
- projectile = /obj/item/projectile/beam/bluetag
+ projectile = /obj/item/projectile/beam/lastertag/blue
else if(lasercolor == "r")
if (src.emagged == 2)
- projectile = /obj/item/projectile/beam/omnitag
+ projectile = /obj/item/projectile/beam/lastertag/omni
else
- projectile = /obj/item/projectile/beam/redtag
+ projectile = /obj/item/projectile/beam/lastertag/red
if (!( istype(U, /turf) ))
return
@@ -1011,7 +1011,7 @@ Auto Patrol: []"},
/obj/machinery/bot/ed209/bullet_act(var/obj/item/projectile/Proj)
if((src.lasercolor == "b") && (src.disabled == 0))
- if(istype(Proj, /obj/item/projectile/beam/redtag))
+ if(istype(Proj, /obj/item/projectile/beam/lastertag/red))
src.disabled = 1
del (Proj)
sleep(100)
@@ -1019,7 +1019,7 @@ Auto Patrol: []"},
else
..()
else if((src.lasercolor == "r") && (src.disabled == 0))
- if(istype(Proj, /obj/item/projectile/beam/bluetag))
+ if(istype(Proj, /obj/item/projectile/beam/lastertag/blue))
src.disabled = 1
del (Proj)
sleep(100)
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index cba4e84c484..4370b1044f5 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -133,7 +133,7 @@
return 0
- src.heal_level = rand(75,100) //Randomizes what health the clone is when ejected
+ src.heal_level = rand(0,40) //Randomizes what health the clone is when ejected
src.attempting = 1 //One at a time!!
src.locked = 1
diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm
index 7be13d3d1e3..a16b545c196 100644
--- a/code/game/machinery/portable_turret.dm
+++ b/code/game/machinery/portable_turret.dm
@@ -76,8 +76,8 @@
// All energy-based weapons are applicable
switch(E.type)
if(/obj/item/weapon/gun/energy/laser/bluetag)
- projectile = /obj/item/projectile/beam/bluetag
- eprojectile = /obj/item/projectile/beam/omnitag//This bolt will stun ERRYONE with a vest
+ projectile = /obj/item/projectile/beam/lastertag/blue
+ eprojectile = /obj/item/projectile/beam/lastertag/omni//This bolt will stun ERRYONE with a vest
iconholder = null
reqpower = 100
lasercolor = "b"
@@ -90,8 +90,8 @@
shot_delay = 30
if(/obj/item/weapon/gun/energy/laser/redtag)
- projectile = /obj/item/projectile/beam/redtag
- eprojectile = /obj/item/projectile/beam/omnitag
+ projectile = /obj/item/projectile/beam/lastertag/red
+ eprojectile = /obj/item/projectile/beam/lastertag/omni
iconholder = null
reqpower = 100
lasercolor = "r"
@@ -375,13 +375,13 @@ Status: []
"},
if (src.health <= 0)
src.die() // the death process :(
if((src.lasercolor == "b") && (src.disabled == 0))
- if(istype(Proj, /obj/item/projectile/beam/redtag))
+ if(istype(Proj, /obj/item/projectile/beam/lastertag/red))
src.disabled = 1
del (Proj)
sleep(100)
src.disabled = 0
if((src.lasercolor == "r") && (src.disabled == 0))
- if(istype(Proj, /obj/item/projectile/beam/bluetag))
+ if(istype(Proj, /obj/item/projectile/beam/lastertag/blue))
src.disabled = 1
del (Proj)
sleep(100)
diff --git a/code/game/machinery/turrets.dm b/code/game/machinery/turrets.dm
index 990b823ef15..ae5dd51891d 100644
--- a/code/game/machinery/turrets.dm
+++ b/code/game/machinery/turrets.dm
@@ -221,9 +221,9 @@
if(4)
A = new /obj/item/projectile/change( loc )
if(5)
- A = new /obj/item/projectile/beam/bluetag( loc )
+ A = new /obj/item/projectile/beam/lastertag/blue( loc )
if(6)
- A = new /obj/item/projectile/beam/redtag( loc )
+ A = new /obj/item/projectile/beam/lastertag/red( loc )
A.original = target.loc
use_power(500)
else
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 2793ce28d80..55b2be019e9 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -158,6 +158,10 @@ MASS SPECTROMETER
if(e.status & ORGAN_BROKEN)
user.show_message(text("\red Bone fractures detected. Advanced scanner required for location."), 1)
break
+ for(var/datum/organ/external/e in H.organs)
+ for(var/datum/wound/W in e.wounds) if(W.internal)
+ user.show_message(text("\red Internal bleeding detected. Advanced scanner required for location."), 1)
+ break
if(M:vessel)
var/blood_volume = round(M:vessel.get_reagent_amount("blood"))
var/blood_percent = blood_volume / 560
diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm
index e98c28e7dc4..555dbe1caea 100644
--- a/code/game/objects/items/devices/taperecorder.dm
+++ b/code/game/objects/items/devices/taperecorder.dm
@@ -124,8 +124,8 @@
usr << "You can't clear the memory while playing or recording!"
return
else
- storedinfo -= storedinfo
- timestamp -= timestamp
+ if(storedinfo) storedinfo.Cut()
+ if(timestamp) timestamp.Cut()
timerecorded = 0
usr << "Memory cleared."
return
diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm
index b91b5a560d3..2ab6bbc9caf 100644
--- a/code/game/objects/items/weapons/kitchen.dm
+++ b/code/game/objects/items/weapons/kitchen.dm
@@ -86,13 +86,12 @@
else
H.Stun(time)
if(H.stat != 2) H.stat = 1
- for(var/mob/O in viewers(H, null))
- O.show_message(text("\red [] has been knocked unconscious!", H), 1, "\red You hear someone fall.", 2)
+ user.visible_message("\red [H] has been knocked unconscious!", "\red You knock [H] unconscious!")
+ return
else
- H << text("\red [] tried to knock you unconscious!",user)
+ H.visible_message("\red [user] tried to knock [H] unconscious!", "\red [user] tried to knock you unconscious!")
H.eye_blurry += 3
-
- return
+ return ..()
/*
* Trays - Agouri
diff --git a/code/game/objects/items/weapons/manuals.dm b/code/game/objects/items/weapons/manuals.dm
index 5d67a68caca..6cba41021be 100644
--- a/code/game/objects/items/weapons/manuals.dm
+++ b/code/game/objects/items/weapons/manuals.dm
@@ -589,7 +589,7 @@
-
+