diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm
index 821f42ee1b1..1dbaeb1a3f6 100644
--- a/code/_onclick/item_attack.dm
+++ b/code/_onclick/item_attack.dm
@@ -140,7 +140,7 @@
if(istype(M, /mob/living/carbon/human))
- M:attacked_by(src, user, def_zone)
+ return M:attacked_by(src, user, def_zone)
else
switch(damtype)
if("brute")
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index 1503ff6ebe1..a7ad25934af 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -249,6 +249,12 @@
if (src.occupant.reagents.get_reagent_amount("inaprovaline") < 30)
src.occupant.reagents.add_reagent("inaprovaline", 60)
+ //So clones will remain asleep for long enough to get them into cryo (Bay RP edit)
+ if (src.occupant.reagents.get_reagent_amount("stoxin") < 10)
+ src.occupant.reagents.add_reagent("stoxin", 5)
+ if (src.occupant.reagents.get_reagent_amount("chloralhydrate") < 1)
+ src.occupant.reagents.add_reagent("chloralhydrate", 1)
+
//Also heal some oxyloss ourselves because inaprovaline is so bad at preventing it!!
src.occupant.adjustOxyLoss(-4)
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index e4ad72dadbd..3a0de6a8006 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -211,7 +211,9 @@ obj/machinery/computer/cryopod/Topic(href, href_list)
//Update any existing objectives involving this mob.
for(var/datum/objective/O in all_objectives)
- if(O.target && istype(O.target,/datum/mind))
+ if(istype(O,/datum/objective/mutiny)) //We don't want revs to get objectives that aren't for heads of staff. Letting them win or lose based on cryo is silly so we remove the objective.
+ del(O) //TODO: Update rev objectives on login by head (may happen already?) ~ Z
+ else if(O.target && istype(O.target,/datum/mind))
if(O.target == occupant.mind)
if(O.owner && O.owner.current)
O.owner.current << "\red You get the feeling your target is no longer within your reach. Time for Plan [pick(list("A","B","C","D","X","Y","Z"))]..."
diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm
index 640fc00afcd..03d97e0e1f3 100644
--- a/code/game/machinery/shieldgen.dm
+++ b/code/game/machinery/shieldgen.dm
@@ -384,7 +384,7 @@
user.visible_message("[user] turned the shield generator off.", \
"You turn off the shield generator.", \
"You hear heavy droning fade out.")
- src.cleanup()
+ for(var/dir in list(1,2,4,8)) src.cleanup(dir)
else
src.active = 1
icon_state = "Shield_Gen +a"
@@ -424,14 +424,7 @@
"You hear heavy droning fade out")
icon_state = "Shield_Gen"
src.active = 0
- spawn(1)
- src.cleanup(1)
- spawn(1)
- src.cleanup(2)
- spawn(1)
- src.cleanup(4)
- spawn(1)
- src.cleanup(8)
+ for(var/dir in list(1,2,4,8)) src.cleanup(dir)
/obj/machinery/shieldwallgen/proc/setup_field(var/NSEW = 0)
var/turf/T = src.loc
diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm
index e6a1a4dff81..8b9d914bc24 100644
--- a/code/game/objects/items/weapons/swords_axes_etc.dm
+++ b/code/game/objects/items/weapons/swords_axes_etc.dm
@@ -153,7 +153,7 @@
playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1)
add_fingerprint(user)
- if(blood_overlay && (blood_DNA.len >= 1)) //updates blood overlay, if any
+ if(blood_overlay && (blood_DNA.len >= 1)) //updates blood overlay, if any
overlays.Cut()//this might delete other item overlays as well but eeeeeeeh
var/icon/I = new /icon(src.icon, src.icon_state)
@@ -176,12 +176,10 @@
else
user.take_organ_damage(2*force)
return
-
- if(!..()) return
- playsound(src.loc, "swing_hit", 50, 1, -1)
- //target.Stun(4) //naaah
- target.Weaken(4)
- return
+ if(..())
+ playsound(src.loc, "swing_hit", 50, 1, -1)
+ target.Weaken(4)
+ return
else
return ..()
@@ -216,8 +214,6 @@
/*
* Energy Axe
*/
-/obj/item/weapon/melee/energy/axe/attack(target as mob, mob/user as mob)
- ..()
/obj/item/weapon/melee/energy/axe/attack_self(mob/user as mob)
src.active = !( src.active )
diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm
index 5c50973691a..3655effb9e6 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -372,18 +372,21 @@
usr << "\red Your thermals intensify the welder's glow. Your eyes itch and burn severely."
user.eye_blurry += rand(12,20)
E.damage += rand(12, 16)
- if(E.damage > 10 && safety < 2)
- user << "\red Your eyes are really starting to hurt. This can't be good for you!"
- if (E.damage >= E.min_broken_damage)
- user << "\red You go blind!"
- user.sdisabilities |= BLIND
- else if (E.damage >= E.min_bruised_damage)
- user << "\red You go blind!"
- user.eye_blind = 5
- user.eye_blurry = 5
- user.disabilities |= NEARSIGHTED
- spawn(100)
- user.disabilities &= ~NEARSIGHTED
+ if(safety<2)
+
+ if(E.damage > 10)
+ user << "\red Your eyes are really starting to hurt. This can't be good for you!"
+
+ if (E.damage >= E.min_broken_damage)
+ user << "\red You go blind!"
+ user.sdisabilities |= BLIND
+ else if (E.damage >= E.min_bruised_damage)
+ user << "\red You go blind!"
+ user.eye_blind = 5
+ user.eye_blurry = 5
+ user.disabilities |= NEARSIGHTED
+ spawn(100)
+ user.disabilities &= ~NEARSIGHTED
return
diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm
index 5e326335973..379ef4cb6bc 100644
--- a/code/modules/clothing/shoes/miscellaneous.dm
+++ b/code/modules/clothing/shoes/miscellaneous.dm
@@ -129,7 +129,7 @@
/obj/item/clothing/shoes/swimmingfins
desc = "Help you swim good."
name = "swimming fins"
- icon_state = "flippers"
+ icon_state = "flipperfeet"
flags = NOSLIP
slowdown = SHOES_SLOWDOWN+1
species_restricted = null
diff --git a/code/modules/clothing/spacesuits/rig.dm b/code/modules/clothing/spacesuits/rig.dm
index 2ea4ffcc618..cec9f6ff394 100644
--- a/code/modules/clothing/spacesuits/rig.dm
+++ b/code/modules/clothing/spacesuits/rig.dm
@@ -13,6 +13,7 @@
heat_protection = HEAD
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE
species_restricted = list("exclude","Unathi","Tajaran","Skrell","Diona","Vox")
+
attack_self(mob/user)
if(!isturf(user.loc))
user << "You cannot turn the light on while in this [user.loc]" //To prevent some lighting anomalities.
@@ -24,6 +25,10 @@
if(on) user.SetLuminosity(user.luminosity + brightness_on)
else user.SetLuminosity(user.luminosity - brightness_on)
+ if(istype(user,/mob/living/carbon/human))
+ var/mob/living/carbon/human/H = user
+ H.update_inv_head()
+
pickup(mob/user)
if(on)
user.SetLuminosity(user.luminosity + brightness_on)
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 0988430a6b0..5d0949ac695 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1114,82 +1114,6 @@
del(feet_blood_DNA)
return 1
-mob/living/carbon/human/yank_out_object()
- set category = "Object"
- set name = "Yank out object"
- set desc = "Remove an embedded item at the cost of bleeding and pain."
- set src in view(1)
-
- if(!isliving(usr) || usr.next_move > world.time)
- return
- usr.next_move = world.time + 20
-
- if(usr.stat == 1)
- usr << "You are unconcious and cannot do that!"
- return
-
- if(usr.restrained())
- usr << "You are restrained and cannot do that!"
- return
-
- var/list/valid_objects = list()
- var/datum/organ/external/affected = null
- var/mob/living/carbon/human/S = src
- var/mob/living/carbon/human/U = usr
- var/self = null
-
- if(S == U)
- self = 1 // Removing object from yourself.
-
- valid_objects = get_visible_implants(1)
-
- if(!valid_objects.len)
- if(self)
- src << "You have nothing stuck in your wounds that is large enough to remove without surgery."
- else
- U << "[src] has nothing stuck in their wounds that is large enough to remove without surgery."
- return
-
- var/obj/item/weapon/selection = input("What do you want to yank out?", "Embedded objects") in valid_objects
-
- for(var/datum/organ/external/organ in organs) //Grab the organ holding the implant.
- for(var/obj/item/weapon/O in organ.implants)
- if(O == selection)
- affected = organ
- if(self)
- src << "You attempt to get a good grip on the [selection] in your [affected.display_name] with bloody fingers."
- else
- U << "You attempt to get a good grip on the [selection] in [S]'s [affected.display_name] with bloody fingers."
-
- if(istype(U,/mob/living/carbon/human/)) U.bloody_hands(S)
-
- if(!do_after(U, 80))
- return
-
- if(!selection || !affected || !S || !U)
- return
-
- if(self)
- visible_message("[src] rips [selection] out of their [affected.display_name] in a welter of blood.","You rip [selection] out of your [affected] in a welter of blood.")
- else
- visible_message("[usr] rips [selection] out of [src]'s [affected.display_name] in a welter of blood.","[usr] rips [selection] out of your [affected] in a welter of blood.")
-
- selection.loc = get_turf(src)
- affected.implants -= selection
- shock_stage+=10
-
- for(var/obj/item/weapon/O in pinned)
- if(O == selection)
- pinned -= O
- if(!pinned.len)
- anchored = 0
-
- if(prob(10)) //I'M SO ANEMIC I COULD JUST -DIE-.
- var/datum/wound/internal_bleeding/I = new (15)
- affected.wounds += I
- custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 1)
- return 1
-
/mob/living/carbon/human/proc/get_visible_implants(var/class = 0)
var/list/visible_implants = list()
diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm
index 742cbdd641f..dcd32822254 100644
--- a/code/modules/mob/living/carbon/human/human_damage.dm
+++ b/code/modules/mob/living/carbon/human/human_damage.dm
@@ -251,6 +251,7 @@ This function restores all organs.
if( (damage > (10*W.w_class)) && ( (sharp && !ismob(W.loc)) || prob(damage/W.w_class) ) )
organ.implants += W
visible_message("\The [W] sticks in the wound!")
+ src.verbs += /mob/proc/yank_out_object
W.add_blood(src)
if(ismob(W.loc))
var/mob/living/H = W.loc
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index b1a20b144ed..c7273d5d345 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -99,6 +99,7 @@ emp_act
(SP.loc) = organ
organ.implants += SP
visible_message("The projectile sticks in the wound!")
+ src.verbs += /mob/proc/yank_out_object
SP.add_blood(src)
return (..(P , def_zone))
@@ -195,14 +196,14 @@ emp_act
target_zone = user.zone_sel.selecting
if(!target_zone)
visible_message("\red [user] misses [src] with \the [I]!")
- return
+ return 0
var/datum/organ/external/affecting = get_organ(target_zone)
if (!affecting)
- return
+ return 0
if(affecting.status & ORGAN_DESTROYED)
user << "What [affecting.display_name]?"
- return
+ return 0
var/hit_area = affecting.display_name
if((user != src) && check_shields(I.force, "the [I.name]"))
@@ -219,7 +220,7 @@ emp_act
var/obj/item/weapon/card/emag/emag = I
emag.uses--
affecting.sabotaged = 1
- return
+ return 1
if(I.attack_verb.len)
visible_message("\red [src] has been [pick(I.attack_verb)] in the [hit_area] with [I.name] by [user]!")
@@ -274,6 +275,7 @@ emp_act
if(bloody)
bloody_body(src)
+ return 1
/mob/living/carbon/human/proc/bloody_hands(var/mob/living/source, var/amount = 2)
if (gloves)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index ecfe8feae5d..c69b25d4935 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -895,7 +895,7 @@ note dizziness decrements automatically in the mob's Life() proc.
/mob/proc/flash_weak_pain()
flick("weak_pain",pain)
-mob/verb/yank_out_object()
+mob/proc/yank_out_object()
set category = "Object"
set name = "Yank out object"
set desc = "Remove an embedded item at the cost of bleeding and pain."
@@ -921,9 +921,13 @@ mob/verb/yank_out_object()
if(S == U)
self = 1 // Removing object from yourself.
- for(var/obj/item/weapon/W in embedded)
- if(W.w_class >= 2)
- valid_objects += W
+ if(istype(src,/mob/living/carbon/human))
+ var/mob/living/carbon/human/H = src
+ valid_objects = H.get_visible_implants(1)
+ else
+ for(var/obj/item/weapon/W in embedded)
+ if(W.w_class >= 2)
+ valid_objects += W
if(!valid_objects.len)
if(self)
@@ -948,6 +952,27 @@ mob/verb/yank_out_object()
visible_message("[src] rips [selection] out of their body.","You rip [selection] out of your body.")
else
visible_message("[usr] rips [selection] out of [src]'s body.","[usr] rips [selection] out of your body.")
+ src.verbs -= /mob/proc/yank_out_object
+
+ if(istype(src,/mob/living/carbon/human))
+
+ var/mob/living/carbon/human/H = src
+ var/datum/organ/external/affected
+
+ for(var/datum/organ/external/organ in H.organs) //Grab the organ holding the implant.
+ for(var/obj/item/weapon/O in organ.implants)
+ if(O == selection)
+ affected = organ
+
+ affected.implants -= selection
+ H.shock_stage+=10
+ H.bloody_hands(S)
+
+ if(prob(10)) //I'M SO ANEMIC I COULD JUST -DIE-.
+ var/datum/wound/internal_bleeding/I = new (15)
+ affected.wounds += I
+ H.custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 1)
+ return 1
selection.loc = get_turf(src)
diff --git a/code/modules/supermatter/supermatter.dm b/code/modules/supermatter/supermatter.dm
index a83723583b1..8547c42fdd2 100644
--- a/code/modules/supermatter/supermatter.dm
+++ b/code/modules/supermatter/supermatter.dm
@@ -93,20 +93,6 @@
if(!istype(L)) //We are in a crate or somewhere that isn't turf, if we return to turf resume processing but for now.
return //Yeah just stop.
- //Ok, get the air from the turf
- var/datum/gas_mixture/env = L.return_air()
-
- //Remove gas from surrounding area
- var/datum/gas_mixture/removed = env.remove(gasefficency * env.total_moles)
-
- if(!removed || !removed.total_moles)
- damage += max((power-1600)/10, 0)
- power = min(power, 1600)
- return 1
-
- damage_archived = damage
- damage = max( damage + ( (removed.temperature - 800) / 150 ) , 0 )
-
if(damage > warning_point) // while the core is still damaged and it's still worth noting its status
if((world.timeofday - lastwarning) / 10 >= WARNING_DELAY)
var/stability = num2text(round((damage / explosion_point) * 100))
@@ -134,6 +120,22 @@
explode()
+ //Ok, get the air from the turf
+ var/datum/gas_mixture/env = L.return_air()
+
+ //Remove gas from surrounding area
+ var/datum/gas_mixture/removed = env.remove(gasefficency * env.total_moles)
+
+ if(!removed || !removed.total_moles)
+ damage += max((power-1600)/10, 0)
+ power = min(power, 1600)
+ return 1
+
+ if (!removed)
+ return 1
+
+ damage_archived = damage
+ damage = max( damage + ( (removed.temperature - 800) / 150 ) , 0 )
//Ok, 100% oxygen atmosphere = best reaction
//Maxes out at 100% oxygen pressure
oxygen = max(min((removed.oxygen - (removed.nitrogen * NITROGEN_RETARDATION_FACTOR)) / MOLES_CELLSTANDARD, 1), 0)
@@ -177,7 +179,7 @@
for(var/mob/living/carbon/human/l in view(src, min(7, round(power ** 0.25)))) // If they can see it without mesons on. Bad on them.
if(!istype(l.glasses, /obj/item/clothing/glasses/meson))
- l.hallucination = max(0, min(200, l.hallucination + power * config_hallucination_power * sqrt( 1 / get_dist(l, src) ) ) )
+ l.hallucination = max(0, min(200, l.hallucination + power * config_hallucination_power * sqrt( 1 / max(1,get_dist(l, src)) ) ) )
for(var/mob/living/l in range(src, round((power / 100) ** 0.25)))
var/rads = (power / 10) * sqrt( 1 / get_dist(l, src) )
diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi
index 94aba05f82a..ba5a2bc5406 100644
Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ
diff --git a/icons/mob/mask.dmi b/icons/mob/mask.dmi
index 1d1e631837b..49399082f6e 100644
Binary files a/icons/mob/mask.dmi and b/icons/mob/mask.dmi differ