diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 206156f08ce..24bbaa3b2d8 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -265,6 +265,14 @@ var/list/uplink_items = list() excludefrom = list("nuclear emergency") surplus = 50 +/datum/uplink_item/dangerous/flamethrower + name = "Flamethrower" + desc = "A flamethrower, fueled by a portion of highly flammable biotoxins stolen previously from Nanotrasen stations. Make a statement by roasting the filth in their own greed. Use with caution." + item = /obj/item/weapon/flamethrower/full/tank + cost = 11 + gamemodes = list("nuclear emergency") + surplus = 40 + /datum/uplink_item/dangerous/sword name = "Energy Sword" desc = "The esword is an edged weapon with a blade of pure energy. The sword is small enough to be pocketed when inactive. Activating it produces a loud, distinctive noise." @@ -587,6 +595,14 @@ var/list/uplink_items = list() item = /obj/item/weapon/aiModule/syndicate cost = 14 +/datum/uplink_item/device_tools/magboots + name = "Blood-Red Magboots" + desc = "A pair of magnetic boots with a Syndicate paintjob that assist with freer movement in space or on-station during gravitational generator failures. \ + These reverse-engineered knockoffs of Nanotrasen's 'Advanced Magboots' slow you down in simulated-gravity environments much like the standard issue variety." + item = /obj/item/clothing/shoes/magboots/syndie + cost = 5 + gamemodes = list("nuclear emergency") + /datum/uplink_item/device_tools/plastic_explosives name = "Composition C-4" desc = "C-4 is plastic explosive of the common variety Composition C. You can use it to breach walls or connect a signaler to its wiring to make it remotely detonable. It has a modifiable timer with a minimum setting of 10 seconds." diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm index e6ae1d5d560..1f2e7ea2aa2 100644 --- a/code/game/jobs/job/science.dm +++ b/code/game/jobs/job/science.dm @@ -98,9 +98,11 @@ equip(var/mob/living/carbon/human/H) if(!H) return 0 + switch(H.backbag) + if(2) H.equip_or_collect(new /obj/item/weapon/storage/backpack(H), slot_back) + if(3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back) + if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) H.equip_or_collect(new /obj/item/device/radio/headset/headset_sci(H), slot_l_ear) - if(H.backbag == 2) H.equip_or_collect(new /obj/item/weapon/storage/backpack(H), slot_back) - if(H.backbag == 3) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back) H.equip_or_collect(new /obj/item/clothing/under/rank/roboticist(H), slot_w_uniform) H.equip_or_collect(new /obj/item/clothing/shoes/black(H), slot_shoes) H.equip_or_collect(new /obj/item/device/pda/roboticist(H), slot_wear_pda) diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index af8b8e2fe5f..70b2b5fe03e 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -24,13 +24,12 @@ /obj/item/weapon/flamethrower/Destroy() if(weldtool) - del(weldtool) + qdel(weldtool) if(igniter) - del(igniter) + qdel(igniter) if(ptank) - del(ptank) + qdel(ptank) ..() - return /obj/item/weapon/flamethrower/process() @@ -60,8 +59,8 @@ item_state = "flamethrower_0" return -/obj/item/weapon/flamethrower/afterattack(atom/target, mob/user, proximity) - if(!proximity) return +/obj/item/weapon/flamethrower/afterattack(atom/target, mob/user, flag) + if(flag) return // too close // Make sure our user is still holding us if(user && user.get_active_hand() == src) var/turf/target_turf = get_turf(target) @@ -83,7 +82,7 @@ ptank.loc = T ptank = null new /obj/item/stack/rods(T) - del(src) + qdel(src) return if(isscrewdriver(W) && igniter && !lit) @@ -163,7 +162,6 @@ usr.set_machine(src) if(href_list["light"]) if(!ptank) return - if(ptank.air_contents.toxins < 1) return if(!status) return lit = !lit if(lit) @@ -184,22 +182,26 @@ update_icon() return +/obj/item/weapon/flamethrower/CheckParts() + weldtool = locate(/obj/item/weapon/weldingtool) in contents + igniter = locate(/obj/item/device/assembly/igniter) in contents + update_icon() //Called from turf.dm turf/dblclick /obj/item/weapon/flamethrower/proc/flame_turf(turflist) if(!lit || operating) return operating = 1 + var/turf/previousturf = get_turf(src) for(var/turf/simulated/T in turflist) if(!T.air) break - if(!previousturf && length(turflist)>1) - previousturf = get_turf(src) + if(T == previousturf) continue //so we don't burn the tile we be standin on - if(previousturf && LinkBlocked(previousturf, T)) + if(!T.CanAtmosPass(previousturf)) break ignite_turf(T) sleep(1) - previousturf = null + previousturf = T operating = 0 for(var/mob/M in viewers(1, loc)) if((M.client && M.machine == src)) @@ -222,10 +224,16 @@ /obj/item/weapon/flamethrower/full/New(var/loc) ..() - weldtool = new /obj/item/weapon/weldingtool(src) + if(!weldtool) + weldtool = new /obj/item/weapon/weldingtool(src) weldtool.status = 0 - igniter = new /obj/item/device/assembly/igniter(src) + if(!igniter) + igniter = new /obj/item/device/assembly/igniter(src) igniter.secured = 0 status = 1 update_icon() - return \ No newline at end of file + +/obj/item/weapon/flamethrower/full/tank/New(var/loc) + ..() + ptank = new /obj/item/weapon/tank/plasma/full(src) + update_icon() \ No newline at end of file diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm deleted file mode 100644 index edb18ae8d58..00000000000 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ /dev/null @@ -1,827 +0,0 @@ -/* Surgery Tools - * Contains: - * Retractor - * Hemostat - * Cautery - * Surgical Drill - * Scalpel - * Circular Saw - */ - -/* - * Retractor - */ -/obj/item/weapon/retractor - name = "retractor" - desc = "Retracts stuff." - icon = 'icons/obj/surgery.dmi' - icon_state = "retractor" - m_amt = 6000 - g_amt = 3000 - flags = CONDUCT - w_class = 2.0 - origin_tech = "materials=1;biotech=1" - -/*HAHA, SUCK IT, 2000 LINES OF SPAGHETTI CODE! - -NOW YOUR JOB IOS DONE BY ONLY 500 LINES OF SPAGHETTI CODE! - -LOOK FOR SURGERY.DM*/ - -/* -/obj/item/weapon/retractor/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(!istype(M)) - return - - var/mob/living/carbon/human/H = M - if(istype(H) && ( \ - (H.head && H.head.flags & HEADCOVERSEYES) || \ - (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || \ - (H.glasses && H.glasses.flags & GLASSESCOVERSEYES) \ - )) - user << "\red You're going to need to remove that mask/helmet/glasses first." - return - - var/mob/living/carbon/monkey/Mo = M - if(istype(Mo) && ( \ - (Mo.wear_mask && Mo.wear_mask.flags & MASKCOVERSEYES) \ - )) - user << "\red You're going to need to remove that mask/helmet/glasses first." - return - - if(istype(M, /mob/living/carbon/alien) || istype(M, /mob/living/carbon/slime))//Aliens don't have eyes./N - user << "\red You cannot locate any eyes on this creature!" - return - - switch(M.eye_op_stage) - if(1.0) - if(M != user) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [M] is having his eyes retracted by [user].", 1) - M << "\red [user] begins to seperate your eyes with [src]!" - user << "\red You seperate [M]'s eyes with [src]!" - else - user.visible_message( \ - "\red [user] begins to have his eyes retracted.", \ - "\red You begin to pry open your eyes with [src]!" \ - ) - if(M == user && prob(25)) - user << "\red You mess up!" - if(istype(M, /mob/living/carbon/human)) - var/obj/item/organ/external/affecting = M:get_organ("head") - if(affecting.take_damage(15)) - M:UpdateDamageIcon() - M.updatehealth() - else - M.take_organ_damage(15) - - M:eye_op_stage = 2.0 - - else if(user.zone_sel.selecting == "chest") - switch(M:alien_op_stage) - if(3.0) - var/mob/living/carbon/human/H = M - if(!istype(H)) - return ..() - - if(H.wear_suit || H.w_uniform) - user << "\red You're going to need to remove that suit/jumpsuit first." - return - - var/obj/item/alien_embryo/A = locate() in M.contents - if(!A) - return ..() - user.visible_message("\red [user] begins to pull something out of [M]'s chest.", "\red You begin to pull the alien organism out of [M]'s chest.") - - spawn(20 + rand(0,50)) - if(!A || A.loc != M) - return - - if(M == user && prob(25)) - user << "\red You mess up!" - if(istype(M, /mob/living/carbon/human)) - var/obj/item/organ/external/affecting = M:get_organ("chest") - if(affecting.take_damage(30)) - M:UpdateDamageIcon() - else - M.take_organ_damage(30) - - if(A.stage > 3) - var/chance = 15 + max(0, A.stage - 3) * 10 - if(prob(chance)) - A.AttemptGrow(0) - M:alien_op_stage = 4.0 - - if(M) - user.visible_message("\red [user] pulls an alien organism out of [M]'s chest.", "\red You pull the alien organism out of [M]'s chest.") - A.loc = M.loc //alien embryo handles cleanup - - else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human)))) - return ..() - - return -*/ - -/* - * Hemostat - */ -/obj/item/weapon/hemostat - name = "hemostat" - desc = "You think you have seen this before." - icon = 'icons/obj/surgery.dmi' - icon_state = "hemostat" - m_amt = 5000 - g_amt = 2500 - flags = CONDUCT - w_class = 2.0 - origin_tech = "materials=1;biotech=1" - attack_verb = list("attacked", "pinched") - -/* -/obj/item/weapon/hemostat/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(!istype(M)) - return - - if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/table/, M.loc) && M.lying && prob(50)))) - return ..() - - if(user.zone_sel.selecting == "groin") - if(istype(M, /mob/living/carbon/human)) - switch(M:appendix_op_stage) - if(1.0) - if(M != user) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [user] is beginning to clamp bleeders in [M]'s abdomen cut open with [src].", 1) - M << "\red [user] begins to clamp bleeders in your abdomen with [src]!" - user << "\red You clamp bleeders in [M]'s abdomen with [src]!" - M:appendix_op_stage = 2.0 - if(4.0) - if(M != user) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [user] is removing [M]'s appendix with [src].", 1) - M << "\red [user] begins to remove your appendix with [src]!" - user << "\red You remove [M]'s appendix with [src]!" - for(var/datum/disease/D in M.viruses) - if(istype(D, /datum/disease/appendicitis)) - new /obj/item/weapon/reagent_containers/food/snacks/appendix/inflamed(get_turf(M)) - M:appendix_op_stage = 5.0 - return - new /obj/item/weapon/reagent_containers/food/snacks/appendix(get_turf(M)) - M:appendix_op_stage = 5.0 - return - - if (user.zone_sel.selecting == "eyes") - - var/mob/living/carbon/human/H = M - if(istype(H) && ( \ - (H.head && H.head.flags & HEADCOVERSEYES) || \ - (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || \ - (H.glasses && H.glasses.flags & GLASSESCOVERSEYES) \ - )) - user << "\red You're going to need to remove that mask/helmet/glasses first." - return - - var/mob/living/carbon/monkey/Mo = M - if(istype(Mo) && ( \ - (Mo.wear_mask && Mo.wear_mask.flags & MASKCOVERSEYES) \ - )) - user << "\red You're going to need to remove that mask/helmet/glasses first." - return - - if(istype(M, /mob/living/carbon/alien))//Aliens don't have eyes./N - user << "\red You cannot locate any eyes on this creature!" - return - - switch(M.eye_op_stage) - if(2.0) - if(M != user) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [M] is having his eyes mended by [user].", 1) - M << "\red [user] begins to mend your eyes with [src]!" - user << "\red You mend [M]'s eyes with [src]!" - else - user.visible_message( \ - "\red [user] begins to have his eyes mended.", \ - "\red You begin to mend your eyes with [src]!" \ - ) - if(M == user && prob(25)) - user << "\red You mess up!" - if(istype(M, /mob/living/carbon/human)) - var/obj/item/organ/external/affecting = M:get_organ("head") - if(affecting.take_damage(15)) - M:UpdateDamageIcon() - M.updatehealth() - else - M.take_organ_damage(15) - M:eye_op_stage = 3.0 - - else if(user.zone_sel.selecting == "chest") - if(M:alien_op_stage == 2.0 || M:alien_op_stage == 3.0) - var/mob/living/carbon/human/H = M - if(!istype(H)) - return ..() - - if(H.wear_suit || H.w_uniform) - user << "\red You're going to need to remove that suit/jumpsuit first." - return - - user.visible_message("\red [user] begins to dig around in [M]'s chest.", "\red You begin to dig around in [M]'s chest.") - - spawn(20 + (M:alien_op_stage == 3 ? 0 : rand(0,50))) - if(M == user && prob(25)) - user << "\red You mess up!" - if(istype(M, /mob/living/carbon/human)) - var/obj/item/organ/external/affecting = M:get_organ("chest") - if(affecting.take_damage(30)) - M:UpdateDamageIcon() - else - M.take_organ_damage(30) - - var/obj/item/alien_embryo/A = locate() in M.contents - if(A) - var/dat = "\blue You found an unknown alien organism in [M]'s chest!" - if(A.stage < 4) - dat += " It's small and weak, barely the size of a foetus." - if(A.stage > 3) - dat += " It's grown quite large, and writhes slightly as you look at it." - if(prob(10)) - A.AttemptGrow() - user << dat - M:alien_op_stage = 3.0 - else - user << "\blue You find nothing of interest." - - else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human)))) - return ..() - - return -*/ - -/* - * Cautery - */ -/obj/item/weapon/cautery - name = "cautery" - desc = "This stops bleeding." - icon = 'icons/obj/surgery.dmi' - icon_state = "cautery" - m_amt = 2500 - g_amt = 750 - flags = CONDUCT - w_class = 2.0 - origin_tech = "materials=1;biotech=1" - attack_verb = list("burnt") - -/* -/obj/item/weapon/cautery/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(!istype(M)) - return - - if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/table/, M.loc) && M.lying && prob(50)))) - return ..() - - if(user.zone_sel.selecting == "groin") - if(istype(M, /mob/living/carbon/human)) - switch(M:appendix_op_stage) - if(5.0) - if(M != user) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [user] is beginning to cauterize the incision in [M]'s abdomen with [src].", 1) - M << "\red [user] begins to cauterize the incision in your abdomen with [src]!" - user << "\red You cauterize the incision in [M]'s abdomen with [src]!" - M:appendix_op_stage = 6.0 - for(var/datum/disease/appendicitis in M.viruses) - appendicitis.cure() - return - - if (user.zone_sel.selecting == "eyes") - - var/mob/living/carbon/human/H = M - if(istype(H) && ( \ - (H.head && H.head.flags & HEADCOVERSEYES) || \ - (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || \ - (H.glasses && H.glasses.flags & GLASSESCOVERSEYES) \ - )) - user << "\red You're going to need to remove that mask/helmet/glasses first." - return - - var/mob/living/carbon/monkey/Mo = M - if(istype(Mo) && ( \ - (Mo.wear_mask && Mo.wear_mask.flags & MASKCOVERSEYES) \ - )) - user << "\red You're going to need to remove that mask/helmet/glasses first." - return - - if(istype(M, /mob/living/carbon/alien))//Aliens don't have eyes./N - user << "\red You cannot locate any eyes on this creature!" - return - - switch(M.eye_op_stage) - if(3.0) - if(M != user) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [M] is having his eyes cauterized by [user].", 1) - M << "\red [user] begins to cauterize your eyes!" - user << "\red You cauterize [M]'s eyes with [src]!" - else - user.visible_message( \ - "\red [user] begins to have his eyes cauterized.", \ - "\red You begin to cauterize your eyes!" \ - ) - if(M == user && prob(25)) - user << "\red You mess up!" - if(istype(M, /mob/living/carbon/human)) - var/obj/item/organ/external/affecting = M:get_organ("head") - if(affecting.take_damage(15)) - M:UpdateDamageIcon() - M.updatehealth() - else - M.take_organ_damage(15) - M.sdisabilities &= ~BLIND - M.eye_stat = 0 - M:eye_op_stage = 0.0 - - else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human)))) - return ..() - - return -*/ - -/* - * Surgical Drill - */ -/obj/item/weapon/surgicaldrill - name = "surgical drill" - desc = "You can drill using this item. You dig?" - icon = 'icons/obj/surgery.dmi' - icon_state = "drill" - hitsound = 'sound/weapons/circsawhit.ogg' - m_amt = 10000 - g_amt = 6000 - flags = CONDUCT - force = 15.0 - w_class = 2.0 - origin_tech = "materials=1;biotech=1" - attack_verb = list("drilled") - - suicide_act(mob/user) - viewers(user) << pick("\red [user] is pressing the [src.name] to \his temple and activating it! It looks like \he's trying to commit suicide.", \ - "\red [user] is pressing [src.name] to \his chest and activating it! It looks like \he's trying to commit suicide.") - return (BRUTELOSS) - -/* - * Scalpel - */ -/obj/item/weapon/scalpel - name = "scalpel" - desc = "Cut, cut, and once more cut." - icon = 'icons/obj/surgery.dmi' - icon_state = "scalpel" - flags = CONDUCT - force = 10.0 - sharp = 1 - edge = 1 - w_class = 2.0 - throwforce = 5.0 - throw_speed = 3 - throw_range = 5 - m_amt = 4000 - g_amt = 1000 - origin_tech = "materials=1;biotech=1" - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - - suicide_act(mob/user) - viewers(user) << pick("\red [user] is slitting \his wrists with the [src.name]! It looks like \he's trying to commit suicide.", \ - "\red [user] is slitting \his throat with the [src.name]! It looks like \he's trying to commit suicide.", \ - "\red [user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.") - return (BRUTELOSS) - -/* -/obj/item/weapon/scalpel/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(!istype(M)) - return ..() - - //if(M.mutations & HUSK) return ..() - - if((CLUMSY in user.mutations) && prob(50)) - M = user - return eyestab(M,user) - - if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/table/, M.loc) && M.lying && prob(50)))) - return ..() - - src.add_fingerprint(user) - - if(user.zone_sel.selecting == "groin") - if(istype(M, /mob/living/carbon/human)) - switch(M:appendix_op_stage) - if(0.0) - if(M != user) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [M] is beginning to have his abdomen cut open with [src] by [user].", 1) - M << "\red [user] begins to cut open your abdomen with [src]!" - user << "\red You cut [M]'s abdomen open with [src]!" - M:appendix_op_stage = 1.0 - if(3.0) - if(M != user) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [M] is beginning to have his appendix seperated with [src] by [user].", 1) - M << "\red [user] begins to seperate your appendix with [src]!" - user << "\red You seperate [M]'s appendix with [src]!" - M:appendix_op_stage = 4.0 - return - - if(user.zone_sel.selecting == "head" || istype(M, /mob/living/carbon/slime)) - - var/mob/living/carbon/human/H = M - if(istype(H) && ( \ - (H.head && H.head.flags & HEADCOVERSEYES) || \ - (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || \ - (H.glasses && H.glasses.flags & GLASSESCOVERSEYES) \ - )) - user << "\red You're going to need to remove that mask/helmet/glasses first." - return - - var/mob/living/carbon/monkey/Mo = M - if(istype(Mo) && ( \ - (Mo.wear_mask && Mo.wear_mask.flags & MASKCOVERSEYES) \ - )) - user << "\red You're going to need to remove that mask/helmet/glasses first." - return - - switch(M:brain_op_stage) - if(0.0) - if(istype(M, /mob/living/carbon/slime)) - if(M.stat == 2) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [M.name] is beginning to have its flesh cut open with [src] by [user].", 1) - M << "\red [user] begins to cut open your flesh with [src]!" - user << "\red You cut [M]'s flesh open with [src]!" - M:brain_op_stage = 1.0 - - return - - if(M != user) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [M] is beginning to have his head cut open with [src] by [user].", 1) - M << "\red [user] begins to cut open your head with [src]!" - user << "\red You cut [M]'s head open with [src]!" - else - user.visible_message( \ - "\red [user] begins to cut open his skull with [src]!", \ - "\red You begin to cut open your head with [src]!" \ - ) - - if(M == user && prob(25)) - user << "\red You mess up!" - if(istype(M, /mob/living/carbon/human)) - var/obj/item/organ/external/affecting = M:get_organ("head") - if(affecting.take_damage(15)) - M:UpdateDamageIcon() - else - M.take_organ_damage(15) - - if(istype(M, /mob/living/carbon/human)) - var/obj/item/organ/external/affecting = M:get_organ("head") - affecting.take_damage(7) - else - M.take_organ_damage(7) - - M.updatehealth() - M:brain_op_stage = 1.0 - - if(1) - if(istype(M, /mob/living/carbon/slime)) - if(M.stat == 2) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [M.name] is having its silky innards cut apart with [src] by [user].", 1) - M << "\red [user] begins to cut apart your innards with [src]!" - user << "\red You cut [M]'s silky innards apart with [src]!" - M:brain_op_stage = 2.0 - return - if(2.0) - if(istype(M, /mob/living/carbon/slime)) - if(M.stat == 2) - var/mob/living/carbon/slime/slime = M - if(slime.cores > 0) - if(istype(M, /mob/living/carbon/slime)) - user << "\red You attempt to remove [M]'s core, but [src] is ineffective!" - return - - if(M != user) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [M] is having his connections to the brain delicately severed with [src] by [user].", 1) - M << "\red [user] begins to cut open your head with [src]!" - user << "\red You cut [M]'s head open with [src]!" - else - user.visible_message( \ - "\red [user] begin to delicately remove the connections to his brain with [src]!", \ - "\red You begin to cut open your head with [src]!" \ - ) - if(M == user && prob(25)) - user << "\red You nick an artery!" - if(istype(M, /mob/living/carbon/human)) - var/obj/item/organ/external/affecting = M:get_organ("head") - if(affecting.take_damage(75)) - M:UpdateDamageIcon() - else - M.take_organ_damage(75) - - if(istype(M, /mob/living/carbon/human)) - var/obj/item/organ/external/affecting = M:get_organ("head") - affecting.take_damage(7) - else - M.take_organ_damage(7) - - M.updatehealth() - M:brain_op_stage = 3.0 - else - ..() - return - - else if(user.zone_sel.selecting == "eyes") - user << "\blue So far so good." - - var/mob/living/carbon/human/H = M - if(istype(H) && ( \ - (H.head && H.head.flags & HEADCOVERSEYES) || \ - (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || \ - (H.glasses && H.glasses.flags & GLASSESCOVERSEYES) \ - )) - user << "\red You're going to need to remove that mask/helmet/glasses first." - return - - var/mob/living/carbon/monkey/Mo = M - if(istype(Mo) && ( \ - (Mo.wear_mask && Mo.wear_mask.flags & MASKCOVERSEYES) \ - )) - user << "\red You're going to need to remove that mask/helmet/glasses first." - return - - if(istype(M, /mob/living/carbon/alien) || istype(M, /mob/living/carbon/slime))//Aliens don't have eyes./N - user << "\red You cannot locate any eyes on this creature!" - return - - switch(M:eye_op_stage) - if(0.0) - if(M != user) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [M] is beginning to have his eyes incised with [src] by [user].", 1) - M << "\red [user] begins to cut open your eyes with [src]!" - user << "\red You make an incision around [M]'s eyes with [src]!" - else - user.visible_message( \ - "\red [user] begins to cut around his eyes with [src]!", \ - "\red You begin to cut open your eyes with [src]!" \ - ) - if(M == user && prob(25)) - user << "\red You mess up!" - if(istype(M, /mob/living/carbon/human)) - var/obj/item/organ/external/affecting = M:get_organ("head") - if(affecting.take_damage(15)) - M:UpdateDamageIcon() - else - M.take_organ_damage(15) - - user << "\blue So far so good before." - M.updatehealth() - M:eye_op_stage = 1.0 - user << "\blue So far so good after." - - else if(user.zone_sel.selecting == "chest") - switch(M:alien_op_stage) - if(0.0) - var/mob/living/carbon/human/H = M - if(!istype(H)) - return ..() - - if(H.wear_suit || H.w_uniform) - user << "\red You're going to need to remove that suit/jumpsuit first." - return - - user.visible_message("\red [user] begins to slice open [M]'s chest.", "\red You begin to slice open [M]'s chest.") - - spawn(rand(20,50)) - if(M == user && prob(25)) - user << "\red You mess up!" - if(istype(M, /mob/living/carbon/human)) - var/obj/item/organ/external/affecting = M:get_organ("chest") - if(affecting.take_damage(15)) - M:UpdateDamageIcon() - else - M.take_organ_damage(15) - - M:alien_op_stage = 1.0 - user << "\blue So far so good." - - else - return ..() -/* wat - else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human)))) - return ..()*/ - return -*/ - -/* - * Circular Saw - */ -/obj/item/weapon/circular_saw - name = "circular saw" - desc = "For heavy duty cutting." - icon = 'icons/obj/surgery.dmi' - icon_state = "saw3" - hitsound = 'sound/weapons/circsawhit.ogg' - flags = CONDUCT - force = 15.0 - w_class = 2.0 - throwforce = 9.0 - throw_speed = 3 - throw_range = 5 - m_amt = 10000 - g_amt = 6000 - origin_tech = "materials=1;biotech=1" - attack_verb = list("attacked", "slashed", "sawed", "cut") - sharp = 1 - edge = 1 - -/* -/obj/item/weapon/circular_saw/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - if(!istype(M)) - return ..() - - if((CLUMSY in user.mutations) && prob(50)) - M = user - return eyestab(M,user) - - if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/table/, M.loc) && M.lying && prob(50)))) - return ..() - - src.add_fingerprint(user) - - if(user.zone_sel.selecting == "head" || istype(M, /mob/living/carbon/slime)) - - var/mob/living/carbon/human/H = M - if(istype(H) && ( \ - (H.head && H.head.flags & HEADCOVERSEYES) || \ - (H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || \ - (H.glasses && H.glasses.flags & GLASSESCOVERSEYES) \ - )) - user << "\red You're going to need to remove that mask/helmet/glasses first." - return - - var/mob/living/carbon/monkey/Mo = M - if(istype(Mo) && ( \ - (Mo.wear_mask && Mo.wear_mask.flags & MASKCOVERSEYES) \ - )) - user << "\red You're going to need to remove that mask/helmet/glasses first." - return - - switch(M:brain_op_stage) - if(1.0) - if(istype(M, /mob/living/carbon/slime)) - return - if(M != user) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [M] has his skull sawed open with [src] by [user].", 1) - M << "\red [user] begins to saw open your head with [src]!" - user << "\red You saw [M]'s head open with [src]!" - else - user.visible_message( \ - "\red [user] saws open his skull with [src]!", \ - "\red You begin to saw open your head with [src]!" \ - ) - if(M == user && prob(25)) - user << "\red You mess up!" - if(istype(M, /mob/living/carbon/human)) - var/obj/item/organ/external/affecting = M:get_organ("head") - if(affecting.take_damage(40)) - M:UpdateDamageIcon() - M.updatehealth() - else - M.take_organ_damage(40) - - if(istype(M, /mob/living/carbon/human)) - var/obj/item/organ/external/affecting = M:get_organ("head") - affecting.take_damage(7) - else - M.take_organ_damage(7) - - M.updatehealth() - M:brain_op_stage = 2.0 - - if(2.0) - if(istype(M, /mob/living/carbon/slime)) - if(M.stat == 2) - var/mob/living/carbon/slime/slime = M - if(slime.cores > 0) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [M.name] is having one of its cores sawed out with [src] by [user].", 1) - - slime.cores-- - M << "\red [user] begins to remove one of your cores with [src]! ([slime.cores] cores remaining)" - user << "\red You cut one of [M]'s cores out with [src]! ([slime.cores] cores remaining)" - - new slime.coretype(M.loc) - - if(slime.cores <= 0) - M.icon_state = "[slime.colour] baby slime dead-nocore" - - return - - if(3.0) - /*if(M.mind && M.mind.changeling) - user << "\red The neural tissue regrows before your eyes as you cut it." - return*/ - - if(M != user) - for(var/mob/O in (viewers(M) - user - M)) - O.show_message("\red [M] has his spine's connection to the brain severed with [src] by [user].", 1) - M << "\red [user] severs your brain's connection to the spine with [src]!" - user << "\red You sever [M]'s brain's connection to the spine with [src]!" - else - user.visible_message( \ - "\red [user] severs his brain's connection to the spine with [src]!", \ - "\red You sever your brain's connection to the spine with [src]!" \ - ) - - user.attack_log += "\[[time_stamp()]\] Debrained [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])" - M.attack_log += "\[[time_stamp()]\] Debrained by [user.name] ([user.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])" - - log_attack("[user.name] ([user.ckey]) debrained [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])") - - - var/obj/item/brain/B = new() - M.put_in_hands(B) - B.transfer_identity(M) - - M:brain_op_stage = 4.0 - M.death()//You want them to die after the brain was transferred, so not to trigger client death() twice. - - else - ..() - return - - else if(user.zone_sel.selecting == "chest") - switch(M:alien_op_stage) - if(1.0) - var/mob/living/carbon/human/H = M - if(!istype(H)) - return ..() - - if(H.wear_suit || H.w_uniform) - user << "\red You're going to need to remove that suit/jumpsuit first." - return - - user.visible_message("\red [user] begins to slice through the bone of [M]'s chest.", "\red You begin to slice through the bone of [M]'s chest.") - - spawn(20 + rand(0,50)) - if(M == user && prob(25)) - user << "\red You mess up!" - if(istype(M, /mob/living/carbon/human)) - var/obj/item/organ/external/affecting = M:get_organ("chest") - if(affecting.take_damage(15)) - M:UpdateDamageIcon() - else - M.take_organ_damage(15) - - M:alien_op_stage = 2.0 - user << "\blue So far so good." - - else - return ..() -/* - else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human)))) - return ..() -*/ - return -*/ - -//misc, formerly from code/defines/weapons.dm -/obj/item/weapon/bonegel - name = "bone gel" - icon = 'icons/obj/surgery.dmi' - icon_state = "bone-gel" - force = 0 - w_class = 2.0 - throwforce = 1.0 - -/obj/item/weapon/FixOVein - name = "FixOVein" - icon = 'icons/obj/surgery.dmi' - icon_state = "fixovein" - force = 0 - throwforce = 1.0 - origin_tech = "materials=1;biotech=3" - w_class = 2.0 - var/usage_amount = 10 - -/obj/item/weapon/bonesetter - name = "bone setter" - icon = 'icons/obj/surgery.dmi' - icon_state = "bone setter" - force = 8.0 - throwforce = 9.0 - throw_speed = 3 - throw_range = 5 - w_class = 2.0 - attack_verb = list("attacked", "hit", "bludgeoned") diff --git a/code/game/objects/items/weapons/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm index 70f7a8235a4..6ed37dac59f 100644 --- a/code/game/objects/items/weapons/tanks/tank_types.dm +++ b/code/game/objects/items/weapons/tanks/tank_types.dm @@ -95,7 +95,6 @@ /obj/item/weapon/tank/plasma/New() ..() - src.air_contents.toxins = (3*ONE_ATMOSPHERE)*70/(R_IDEAL_GAS_EQUATION*T20C) return @@ -110,6 +109,12 @@ F.ptank = src user.unEquip(src) src.loc = F + F.update_icon() + return + +/obj/item/weapon/tank/plasma/full/New() + ..() + src.air_contents.toxins = (10*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C) return /obj/item/weapon/tank/plasma/plasmaman diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm index 09dcc02bafd..2755ddafed5 100644 --- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm +++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm @@ -29,7 +29,6 @@ new /obj/item/clothing/mask/gas/syndicate(src) new /obj/item/clothing/suit/space/rig/syndi(src) new /obj/item/weapon/tank/jetpack/oxygen/harness(src) - new /obj/item/clothing/shoes/magboots/syndie(src) /obj/structure/closet/syndicate/nuclear desc = "It's a storage unit for a Syndicate boarding party.." diff --git a/code/modules/reagents/newchem/medicine.dm b/code/modules/reagents/newchem/medicine.dm index bac4521f8ed..a4f712ba524 100644 --- a/code/modules/reagents/newchem/medicine.dm +++ b/code/modules/reagents/newchem/medicine.dm @@ -106,7 +106,7 @@ datum/reagent/charcoal id = "charcoal" description = "Activated charcoal helps to absorb toxins." reagent_state = LIQUID - color = "#C8A5DC" + color = "#000000" datum/reagent/charcoal/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index 749900bfdf4..425fa31279e 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -3,10 +3,10 @@ desc = "Retracts stuff." icon = 'icons/obj/surgery.dmi' icon_state = "retractor" - m_amt = 10000 - g_amt = 5000 + m_amt = 6000 + g_amt = 3000 flags = CONDUCT - w_class = 1.0 + w_class = 2.0 origin_tech = "materials=1;biotech=1" @@ -28,8 +28,8 @@ desc = "This stops bleeding." icon = 'icons/obj/surgery.dmi' icon_state = "cautery" - m_amt = 5000 - g_amt = 2500 + m_amt = 2500 + g_amt = 750 flags = CONDUCT w_class = 1.0 origin_tech = "materials=1;biotech=1" @@ -42,8 +42,8 @@ icon = 'icons/obj/surgery.dmi' icon_state = "drill" hitsound = 'sound/weapons/circsawhit.ogg' - m_amt = 15000 - g_amt = 10000 + m_amt = 10000 + g_amt = 6000 flags = CONDUCT force = 15.0 w_class = 3.0 @@ -63,12 +63,14 @@ icon_state = "scalpel" flags = CONDUCT force = 10.0 + sharp = 1 + edge = 1 w_class = 1.0 throwforce = 5.0 throw_speed = 3 throw_range = 5 - m_amt = 10000 - g_amt = 5000 + m_amt = 4000 + g_amt = 1000 origin_tech = "materials=1;biotech=1" attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") hitsound = 'sound/weapons/bladeslice.ogg' @@ -84,7 +86,7 @@ name = "circular saw" desc = "For heavy duty cutting." icon = 'icons/obj/surgery.dmi' - icon_state = "saw" + icon_state = "saw3" hitsound = 'sound/weapons/circsawhit.ogg' flags = CONDUCT force = 15.0 @@ -92,12 +94,42 @@ throwforce = 9.0 throw_speed = 3 throw_range = 5 - m_amt = 20000 - g_amt = 10000 + m_amt = 10000 + g_amt = 6000 origin_tech = "materials=1;biotech=1" attack_verb = list("attacked", "slashed", "sawed", "cut") +//misc, formerly from code/defines/weapons.dm +/obj/item/weapon/bonegel + name = "bone gel" + icon = 'icons/obj/surgery.dmi' + icon_state = "bone-gel" + force = 0 + w_class = 2.0 + throwforce = 1.0 + +/obj/item/weapon/FixOVein + name = "FixOVein" + icon = 'icons/obj/surgery.dmi' + icon_state = "fixovein" + force = 0 + throwforce = 1.0 + origin_tech = "materials=1;biotech=3" + w_class = 2.0 + var/usage_amount = 10 + +/obj/item/weapon/bonesetter + name = "bone setter" + icon = 'icons/obj/surgery.dmi' + icon_state = "bone setter" + force = 8.0 + throwforce = 9.0 + throw_speed = 3 + throw_range = 5 + w_class = 2.0 + attack_verb = list("attacked", "hit", "bludgeoned") + /obj/item/weapon/surgical_drapes name = "surgical drapes" desc = "Nanotrasen brand surgical drapes provide optimal safety and infection control." diff --git a/paradise.dme b/paradise.dme index 626082f54a3..8d8289392fd 100644 --- a/paradise.dme +++ b/paradise.dme @@ -710,7 +710,6 @@ #include "code\game\objects\items\weapons\staff.dm" #include "code\game\objects\items\weapons\stock_parts.dm" #include "code\game\objects\items\weapons\stunbaton.dm" -#include "code\game\objects\items\weapons\surgery_tools.dm" #include "code\game\objects\items\weapons\swords_axes_etc.dm" #include "code\game\objects\items\weapons\syndie_uplink.dm" #include "code\game\objects\items\weapons\table_rack_parts.dm"