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