Merge remote-tracking branch 'upstream/master' into SPIN_ME_RIGHT_ROUND

This commit is contained in:
tigercat2000
2018-10-21 11:46:39 -07:00
54 changed files with 3460 additions and 3506 deletions
+46 -45
View File
@@ -17,15 +17,16 @@
name = "body bags"
desc = "This box contains body bags."
icon_state = "bodybags"
New()
..()
new /obj/item/bodybag(src)
new /obj/item/bodybag(src)
new /obj/item/bodybag(src)
new /obj/item/bodybag(src)
new /obj/item/bodybag(src)
new /obj/item/bodybag(src)
new /obj/item/bodybag(src)
/obj/item/storage/box/bodybags/New()
..()
new /obj/item/bodybag(src)
new /obj/item/bodybag(src)
new /obj/item/bodybag(src)
new /obj/item/bodybag(src)
new /obj/item/bodybag(src)
new /obj/item/bodybag(src)
new /obj/item/bodybag(src)
/obj/structure/closet/body_bag
@@ -40,47 +41,47 @@
density = 0
attackby(W as obj, mob/user as mob, params)
if(istype(W, /obj/item/pen))
var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text
if(user.get_active_hand() != W)
return
if(!in_range(src, user) && src.loc != user)
return
t = sanitize(copytext(t,1,MAX_MESSAGE_LEN))
if(t)
src.name = "body bag - "
src.name += t
src.overlays += image(src.icon, "bodybag_label")
else
src.name = "body bag"
//..() //Doesn't need to run the parent. Since when can fucking bodybags be welded shut? -Agouri
/obj/structure/closet/body_bag/attackby(W as obj, mob/user as mob, params)
if(istype(W, /obj/item/pen))
var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text
if(user.get_active_hand() != W)
return
else if(istype(W, /obj/item/wirecutters))
to_chat(user, "You cut the tag off the bodybag")
if(!in_range(src, user) && src.loc != user)
return
t = sanitize(copytext(t,1,MAX_MESSAGE_LEN))
if(t)
src.name = "body bag - "
src.name += t
src.overlays += image(src.icon, "bodybag_label")
else
src.name = "body bag"
src.overlays.Cut()
return
//..() //Doesn't need to run the parent. Since when can fucking bodybags be welded shut? -Agouri
return
else if(istype(W, /obj/item/wirecutters))
to_chat(user, "You cut the tag off the bodybag")
src.name = "body bag"
src.overlays.Cut()
return
close()
if(..())
density = 0
return 1
return 0
/obj/structure/closet/body_bag/close()
if(..())
density = 0
return 1
return 0
MouseDrop(over_object, src_location, over_location)
..()
if((over_object == usr && (in_range(src, usr) || usr.contents.Find(src))))
if(!ishuman(usr)) return
if(opened) return 0
if(contents.len) return 0
visible_message("[usr] folds up the [src.name]")
new item_path(get_turf(src))
spawn(0)
qdel(src)
return
/obj/structure/closet/body_bag/MouseDrop(over_object, src_location, over_location)
..()
if((over_object == usr && (in_range(src, usr) || usr.contents.Find(src))))
if(!ishuman(usr)) return
if(opened) return 0
if(contents.len) return 0
visible_message("[usr] folds up the [src.name]")
new item_path(get_turf(src))
spawn(0)
qdel(src)
return
/obj/structure/closet/body_bag/relaymove(mob/user as mob)
if(user.stat)
@@ -89,4 +90,4 @@
// Make it possible to escape from bodybags in morgues and crematoriums
if(loc && (isturf(loc) || istype(loc, /obj/structure/morgue) || istype(loc, /obj/structure/crematorium)))
if(!open())
to_chat(user, "<span class='notice'>It won't budge!</span>")
to_chat(user, "<span class='notice'>It won't budge!</span>")
@@ -46,9 +46,10 @@
return
/obj/item/radio/beacon/bacon //Probably a better way of doing this, I'm lazy.
proc/digest_delay()
/obj/item/radio/beacon/bacon/proc/digest_delay()
spawn(600)
qdel(src)
qdel(src)
// SINGULO BEACON SPAWNER
/obj/item/radio/beacon/syndicate
@@ -82,4 +83,4 @@
new /obj/machinery/syndicatebomb( user.loc )
playsound(src, 'sound/effects/pop.ogg', 100, 1, 1)
qdel(src)
return
return
+15 -15
View File
@@ -159,21 +159,21 @@
var/b2y1 = 0
var/b2y2 = 0
New(var/obj/item/target/Target, var/pixel_x = 0, var/pixel_y = 0)
if(!Target) return
/datum/bullethole/New(obj/item/target/Target, pixel_x = 0, pixel_y = 0)
if(!Target) return
// Randomize the first box
b1x1 = pixel_x - pick(1,1,1,1,2,2,3,3,4)
b1x2 = pixel_x + pick(1,1,1,1,2,2,3,3,4)
b1y = pixel_y
if(prob(35))
b1y += rand(-4,4)
// Randomize the first box
b1x1 = pixel_x - pick(1,1,1,1,2,2,3,3,4)
b1x2 = pixel_x + pick(1,1,1,1,2,2,3,3,4)
b1y = pixel_y
if(prob(35))
b1y += rand(-4,4)
// Randomize the second box
b2x = pixel_x
if(prob(35))
b2x += rand(-4,4)
b2y1 = pixel_y + pick(1,1,1,1,2,2,3,3,4)
b2y2 = pixel_y - pick(1,1,1,1,2,2,3,3,4)
// Randomize the second box
b2x = pixel_x
if(prob(35))
b2x += rand(-4,4)
b2y1 = pixel_y + pick(1,1,1,1,2,2,3,3,4)
b2y2 = pixel_y - pick(1,1,1,1,2,2,3,3,4)
Target.bulletholes.Add(src)
Target.bulletholes.Add(src)
+45 -46
View File
@@ -10,53 +10,52 @@
w_class = WEIGHT_CLASS_SMALL
attack_verb = list("warned", "cautioned", "smashed")
proximity_sign
var/timing = 0
var/armed = 0
var/timepassed = 0
/obj/item/caution/proximity_sign
var/timing = 0
var/armed = 0
var/timepassed = 0
attack_self(mob/user as mob)
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(H.mind.assigned_role != "Janitor")
return
if(armed)
armed = 0
to_chat(user, "<span class='notice'>You disarm \the [src].</span>")
return
timing = !timing
if(timing)
processing_objects.Add(src)
else
armed = 0
timepassed = 0
to_chat(H, "<span class='notice'>You [timing ? "activate \the [src]'s timer, you have 15 seconds." : "de-activate \the [src]'s timer."]</span>")
/obj/item/caution/proximity_sign/attack_self(mob/user as mob)
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(H.mind.assigned_role != "Janitor")
return
if(armed)
armed = 0
to_chat(user, "<span class='notice'>You disarm \the [src].</span>")
return
timing = !timing
if(timing)
processing_objects.Add(src)
else
armed = 0
timepassed = 0
to_chat(H, "<span class='notice'>You [timing ? "activate \the [src]'s timer, you have 15 seconds." : "de-activate \the [src]'s timer."]</span>")
process()
if(!timing)
processing_objects.Remove(src)
timepassed++
if(timepassed >= 15 && !armed)
armed = 1
timing = 0
/obj/item/caution/proximity_sign/process()
if(!timing)
processing_objects.Remove(src)
timepassed++
if(timepassed >= 15 && !armed)
armed = 1
timing = 0
HasProximity(atom/movable/AM as mob|obj)
if(armed)
if(istype(AM, /mob/living/carbon) && !istype(AM, /mob/living/carbon/brain))
var/mob/living/carbon/C = AM
if(C.m_intent != MOVE_INTENT_WALK)
src.visible_message("The [src.name] beeps, \"Running on wet floors is hazardous to your health.\"")
explosion(src.loc,-1,0,2)
if(ishuman(C))
dead_legs(C)
if(src)
qdel(src)
proc/dead_legs(mob/living/carbon/human/H as mob)
var/obj/item/organ/external/l = H.get_organ("l_leg")
var/obj/item/organ/external/r = H.get_organ("r_leg")
if(l)
l.droplimb(0, DROPLIMB_SHARP)
if(r)
r.droplimb(0, DROPLIMB_SHARP)
/obj/item/caution/proximity_sign/HasProximity(atom/movable/AM as mob|obj)
if(armed)
if(istype(AM, /mob/living/carbon) && !istype(AM, /mob/living/carbon/brain))
var/mob/living/carbon/C = AM
if(C.m_intent != MOVE_INTENT_WALK)
src.visible_message("The [src.name] beeps, \"Running on wet floors is hazardous to your health.\"")
explosion(src.loc,-1,0,2)
if(ishuman(C))
dead_legs(C)
if(src)
qdel(src)
/obj/item/caution/proximity_sign/proc/dead_legs(mob/living/carbon/human/H as mob)
var/obj/item/organ/external/l = H.get_organ("l_leg")
var/obj/item/organ/external/r = H.get_organ("r_leg")
if(l)
l.droplimb(0, DROPLIMB_SHARP)
if(r)
r.droplimb(0, DROPLIMB_SHARP)
+183 -138
View File
@@ -159,9 +159,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 2
New()
block = HULKBLOCK
..()
/obj/item/dnainjector/hulkmut/New()
block = HULKBLOCK
..()
/obj/item/dnainjector/antihulk
name = "DNA-Injector (Anti-Hulk)"
@@ -169,9 +170,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 2
New()
block = HULKBLOCK
..()
/obj/item/dnainjector/antihulk/New()
block = HULKBLOCK
..()
/obj/item/dnainjector/xraymut
name = "DNA-Injector (Xray)"
@@ -179,9 +181,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 8
New()
block = XRAYBLOCK
..()
/obj/item/dnainjector/xraymut/New()
block = XRAYBLOCK
..()
/obj/item/dnainjector/antixray
name = "DNA-Injector (Anti-Xray)"
@@ -189,10 +192,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 8
New()
block = XRAYBLOCK
..()
/obj/item/dnainjector/antixray/New()
block = XRAYBLOCK
..()
/obj/item/dnainjector/firemut
name = "DNA-Injector (Fire)"
@@ -200,9 +203,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 10
New()
block = FIREBLOCK
..()
/obj/item/dnainjector/firemut/New()
block = FIREBLOCK
..()
/obj/item/dnainjector/antifire
name = "DNA-Injector (Anti-Fire)"
@@ -210,9 +214,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 10
New()
block = FIREBLOCK
..()
/obj/item/dnainjector/antifire/New()
block = FIREBLOCK
..()
/obj/item/dnainjector/telemut
name = "DNA-Injector (Tele.)"
@@ -220,9 +225,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 12
New()
block = TELEBLOCK
..()
/obj/item/dnainjector/telemut/New()
block = TELEBLOCK
..()
/obj/item/dnainjector/telemut/darkbundle
name = "DNA injector"
@@ -235,9 +241,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 12
New()
block = TELEBLOCK
..()
/obj/item/dnainjector/antitele/New()
block = TELEBLOCK
..()
/obj/item/dnainjector/nobreath
name = "DNA-Injector (Breathless)"
@@ -245,9 +252,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 2
New()
block = BREATHLESSBLOCK
..()
/obj/item/dnainjector/nobreath/New()
block = BREATHLESSBLOCK
..()
/obj/item/dnainjector/antinobreath
name = "DNA-Injector (Anti-Breathless)"
@@ -255,9 +263,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 2
New()
block = BREATHLESSBLOCK
..()
/obj/item/dnainjector/antinobreath/New()
block = BREATHLESSBLOCK
..()
/obj/item/dnainjector/remoteview
name = "DNA-Injector (Remote View)"
@@ -265,9 +274,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 2
New()
block = REMOTEVIEWBLOCK
..()
/obj/item/dnainjector/remoteview/New()
block = REMOTEVIEWBLOCK
..()
/obj/item/dnainjector/antiremoteview
name = "DNA-Injector (Anti-Remote View)"
@@ -275,9 +285,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 2
New()
block = REMOTEVIEWBLOCK
..()
/obj/item/dnainjector/antiremoteview/New()
block = REMOTEVIEWBLOCK
..()
/obj/item/dnainjector/regenerate
name = "DNA-Injector (Regeneration)"
@@ -285,9 +296,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 2
New()
block = REGENERATEBLOCK
..()
/obj/item/dnainjector/regenerate/New()
block = REGENERATEBLOCK
..()
/obj/item/dnainjector/antiregenerate
name = "DNA-Injector (Anti-Regeneration)"
@@ -295,9 +307,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 2
New()
block = REGENERATEBLOCK
..()
/obj/item/dnainjector/antiregenerate/New()
block = REGENERATEBLOCK
..()
/obj/item/dnainjector/runfast
name = "DNA-Injector (Increase Run)"
@@ -305,9 +318,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 2
New()
block = INCREASERUNBLOCK
..()
/obj/item/dnainjector/runfast/New()
block = INCREASERUNBLOCK
..()
/obj/item/dnainjector/antirunfast
name = "DNA-Injector (Anti-Increase Run)"
@@ -315,9 +329,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 2
New()
block = INCREASERUNBLOCK
..()
/obj/item/dnainjector/antirunfast/New()
block = INCREASERUNBLOCK
..()
/obj/item/dnainjector/morph
name = "DNA-Injector (Morph)"
@@ -325,9 +340,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 2
New()
block = MORPHBLOCK
..()
/obj/item/dnainjector/morph/New()
block = MORPHBLOCK
..()
/obj/item/dnainjector/antimorph
name = "DNA-Injector (Anti-Morph)"
@@ -335,9 +351,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 2
New()
block = MORPHBLOCK
..()
/obj/item/dnainjector/antimorph/New()
block = MORPHBLOCK
..()
/obj/item/dnainjector/noprints
name = "DNA-Injector (No Prints)"
@@ -345,9 +362,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 2
New()
block = NOPRINTSBLOCK
..()
/obj/item/dnainjector/noprints/New()
block = NOPRINTSBLOCK
..()
/obj/item/dnainjector/antinoprints
name = "DNA-Injector (Anti-No Prints)"
@@ -355,9 +373,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 2
New()
block = NOPRINTSBLOCK
..()
/obj/item/dnainjector/antinoprints/New()
block = NOPRINTSBLOCK
..()
/obj/item/dnainjector/insulation
name = "DNA-Injector (Shock Immunity)"
@@ -365,9 +384,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 2
New()
block = SHOCKIMMUNITYBLOCK
..()
/obj/item/dnainjector/insulation/New()
block = SHOCKIMMUNITYBLOCK
..()
/obj/item/dnainjector/antiinsulation
name = "DNA-Injector (Anti-Shock Immunity)"
@@ -375,9 +395,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 2
New()
block = SHOCKIMMUNITYBLOCK
..()
/obj/item/dnainjector/antiinsulation/New()
block = SHOCKIMMUNITYBLOCK
..()
/obj/item/dnainjector/midgit
name = "DNA-Injector (Small Size)"
@@ -385,9 +406,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 2
New()
block = SMALLSIZEBLOCK
..()
/obj/item/dnainjector/midgit/New()
block = SMALLSIZEBLOCK
..()
/obj/item/dnainjector/antimidgit
name = "DNA-Injector (Anti-Small Size)"
@@ -395,9 +417,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 2
New()
block = SMALLSIZEBLOCK
..()
/obj/item/dnainjector/antimidgit/New()
block = SMALLSIZEBLOCK
..()
/////////////////////////////////////
/obj/item/dnainjector/antiglasses
@@ -406,9 +429,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 1
New()
block = GLASSESBLOCK
..()
/obj/item/dnainjector/antiglasses/New()
block = GLASSESBLOCK
..()
/obj/item/dnainjector/glassesmut
name = "DNA-Injector (Glasses)"
@@ -416,9 +440,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 1
New()
block = GLASSESBLOCK
..()
/obj/item/dnainjector/glassesmut/New()
block = GLASSESBLOCK
..()
/obj/item/dnainjector/epimut
name = "DNA-Injector (Epi.)"
@@ -426,9 +451,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 3
New()
block = EPILEPSYBLOCK
..()
/obj/item/dnainjector/epimut/New()
block = EPILEPSYBLOCK
..()
/obj/item/dnainjector/antiepi
name = "DNA-Injector (Anti-Epi.)"
@@ -436,9 +462,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 3
New()
block = EPILEPSYBLOCK
..()
/obj/item/dnainjector/antiepi/New()
block = EPILEPSYBLOCK
..()
/obj/item/dnainjector/anticough
name = "DNA-Injector (Anti-Cough)"
@@ -446,9 +473,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 5
New()
block = COUGHBLOCK
..()
/obj/item/dnainjector/anticough/New()
block = COUGHBLOCK
..()
/obj/item/dnainjector/coughmut
name = "DNA-Injector (Cough)"
@@ -456,9 +484,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 5
New()
block = COUGHBLOCK
..()
/obj/item/dnainjector/coughmut/New()
block = COUGHBLOCK
..()
/obj/item/dnainjector/clumsymut
name = "DNA-Injector (Clumsy)"
@@ -466,9 +495,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 6
New()
block = CLUMSYBLOCK
..()
/obj/item/dnainjector/clumsymut/New()
block = CLUMSYBLOCK
..()
/obj/item/dnainjector/anticlumsy
name = "DNA-Injector (Anti-Clumy)"
@@ -476,9 +506,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 6
New()
block = CLUMSYBLOCK
..()
/obj/item/dnainjector/anticlumsy/New()
block = CLUMSYBLOCK
..()
/obj/item/dnainjector/antitour
name = "DNA-Injector (Anti-Tour.)"
@@ -486,9 +517,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 7
New()
block = TWITCHBLOCK
..()
/obj/item/dnainjector/antitour/New()
block = TWITCHBLOCK
..()
/obj/item/dnainjector/tourmut
name = "DNA-Injector (Tour.)"
@@ -496,9 +528,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 7
New()
block = TWITCHBLOCK
..()
/obj/item/dnainjector/tourmut/New()
block = TWITCHBLOCK
..()
/obj/item/dnainjector/stuttmut
name = "DNA-Injector (Stutt.)"
@@ -506,9 +539,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 9
New()
block = NERVOUSBLOCK
..()
/obj/item/dnainjector/stuttmut/New()
block = NERVOUSBLOCK
..()
/obj/item/dnainjector/antistutt
@@ -517,9 +551,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 9
New()
block = NERVOUSBLOCK
..()
/obj/item/dnainjector/antistutt/New()
block = NERVOUSBLOCK
..()
/obj/item/dnainjector/blindmut
name = "DNA-Injector (Blind)"
@@ -527,9 +562,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 11
New()
block = BLINDBLOCK
..()
/obj/item/dnainjector/blindmut/New()
block = BLINDBLOCK
..()
/obj/item/dnainjector/antiblind
name = "DNA-Injector (Anti-Blind)"
@@ -537,9 +573,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 11
New()
block = BLINDBLOCK
..()
/obj/item/dnainjector/antiblind/New()
block = BLINDBLOCK
..()
/obj/item/dnainjector/telemut
name = "DNA-Injector (Tele.)"
@@ -547,9 +584,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 12
New()
block = TELEBLOCK
..()
/obj/item/dnainjector/telemut/New()
block = TELEBLOCK
..()
/obj/item/dnainjector/antitele
name = "DNA-Injector (Anti-Tele.)"
@@ -557,9 +595,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 12
New()
block = TELEBLOCK
..()
/obj/item/dnainjector/antitele/New()
block = TELEBLOCK
..()
/obj/item/dnainjector/deafmut
name = "DNA-Injector (Deaf)"
@@ -567,9 +606,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 13
New()
block = DEAFBLOCK
..()
/obj/item/dnainjector/deafmut/New()
block = DEAFBLOCK
..()
/obj/item/dnainjector/antideaf
name = "DNA-Injector (Anti-Deaf)"
@@ -577,9 +617,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 13
New()
block = DEAFBLOCK
..()
/obj/item/dnainjector/antideaf/New()
block = DEAFBLOCK
..()
/obj/item/dnainjector/hallucination
name = "DNA-Injector (Halluctination)"
@@ -587,9 +628,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 2
New()
block = HALLUCINATIONBLOCK
..()
/obj/item/dnainjector/hallucination/New()
block = HALLUCINATIONBLOCK
..()
/obj/item/dnainjector/antihallucination
name = "DNA-Injector (Anti-Hallucination)"
@@ -597,9 +639,10 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 2
New()
block = HALLUCINATIONBLOCK
..()
/obj/item/dnainjector/antihallucination/New()
block = HALLUCINATIONBLOCK
..()
/obj/item/dnainjector/h2m
name = "DNA-Injector (Human > Monkey)"
@@ -607,9 +650,10 @@
datatype = DNA2_BUF_SE
value = 0xFFF
//block = 14
New()
block = MONKEYBLOCK
..()
/obj/item/dnainjector/h2m/New()
block = MONKEYBLOCK
..()
/obj/item/dnainjector/m2h
name = "DNA-Injector (Monkey > Human)"
@@ -617,6 +661,7 @@
datatype = DNA2_BUF_SE
value = 0x001
//block = 14
New()
block = MONKEYBLOCK
..()
/obj/item/dnainjector/m2h/New()
block = MONKEYBLOCK
..()
+48 -48
View File
@@ -6,52 +6,52 @@
icon_state = "lepopen"
var/used = null
/obj/item/dnascrambler/update_icon()
if(used)
icon_state = "lepopen0"
else
icon_state = "lepopen"
/obj/item/dnascrambler/attack(mob/M as mob, mob/user as mob)
if(!M || !user)
return
if(!ishuman(M) || !ishuman(user))
return
if(used)
return
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(NO_DNA in H.dna.species.species_traits)
to_chat(user, "<span class='warning'>You failed to inject [M], as [M.p_they()] [M.p_have()] no DNA to scramble, nor flesh to inject.</span>")
return
if(M == user)
user.visible_message("<span class='danger'>[user] injects [user.p_them()]self with [src]!</span>")
injected(user, user)
else
user.visible_message("<span class='danger'>[user] is trying to inject [M] with [src]!</span>")
if(do_mob(user,M,30))
user.visible_message("<span class='danger'>[user] injects [M] with [src].</span>")
injected(M, user)
else
to_chat(user, "<span class='warning'>You failed to inject [M].</span>")
/obj/item/dnascrambler/proc/injected(var/mob/living/carbon/human/target, var/mob/living/carbon/user)
if(istype(target))
var/mob/living/carbon/human/H = target
scramble(1, H, 100)
H.real_name = random_name(H.gender, H.dna.species.name) //Give them a name that makes sense for their species.
H.sync_organ_dna(assimilate = 1)
H.update_body(0)
H.reset_hair() //No more winding up with hairstyles you're not supposed to have, and blowing your cover.
H.reset_markings() //...Or markings.
H.dna.ResetUIFrom(H)
target.update_icons()
add_attack_logs(user, target, "injected with [src]")
used = 1
update_icon()
if(used)
icon_state = "lepopen0"
else
icon_state = "lepopen"
attack(mob/M as mob, mob/user as mob)
if(!M || !user)
return
if(!ishuman(M) || !ishuman(user))
return
if(used)
return
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(NO_DNA in H.dna.species.species_traits)
to_chat(user, "<span class='warning'>You failed to inject [M], as [M.p_they()] [M.p_have()] no DNA to scramble, nor flesh to inject.</span>")
return
if(M == user)
user.visible_message("<span class='danger'>[user] injects [user.p_them()]self with [src]!</span>")
injected(user, user)
else
user.visible_message("<span class='danger'>[user] is trying to inject [M] with [src]!</span>")
if(do_mob(user,M,30))
user.visible_message("<span class='danger'>[user] injects [M] with [src].</span>")
injected(M, user)
else
to_chat(user, "<span class='warning'>You failed to inject [M].</span>")
proc/injected(var/mob/living/carbon/human/target, var/mob/living/carbon/user)
if(istype(target))
var/mob/living/carbon/human/H = target
scramble(1, H, 100)
H.real_name = random_name(H.gender, H.dna.species.name) //Give them a name that makes sense for their species.
H.sync_organ_dna(assimilate = 1)
H.update_body(0)
H.reset_hair() //No more winding up with hairstyles you're not supposed to have, and blowing your cover.
H.reset_markings() //...Or markings.
H.dna.ResetUIFrom(H)
target.update_icons()
add_attack_logs(user, target, "injected with [src]")
used = 1
update_icon()
name = "used " + name
name = "used " + name
@@ -432,18 +432,18 @@
desc = "Used for emergency sealing of air breaches."
stage = READY
New()
..()
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
/obj/item/grenade/chem_grenade/metalfoam/New()
..()
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
B1.reagents.add_reagent("aluminum", 30)
B2.reagents.add_reagent("fluorosurfactant", 10)
B2.reagents.add_reagent("sacid", 10)
B1.reagents.add_reagent("aluminum", 30)
B2.reagents.add_reagent("fluorosurfactant", 10)
B2.reagents.add_reagent("sacid", 10)
beakers += B1
beakers += B2
update_icon()
beakers += B1
beakers += B2
update_icon()
/obj/item/grenade/chem_grenade/incendiary
@@ -451,19 +451,19 @@
desc = "Used for clearing rooms of living things."
stage = READY
New()
..()
var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
/obj/item/grenade/chem_grenade/incendiary/New()
..()
var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
B1.reagents.add_reagent("phosphorus", 25)
B2.reagents.add_reagent("plasma", 25)
B2.reagents.add_reagent("sacid", 25)
B1.reagents.add_reagent("phosphorus", 25)
B2.reagents.add_reagent("plasma", 25)
B2.reagents.add_reagent("sacid", 25)
beakers += B1
beakers += B2
update_icon()
beakers += B1
beakers += B2
update_icon()
/obj/item/grenade/chem_grenade/antiweed
@@ -471,20 +471,20 @@
desc = "Used for purging large areas of invasive plant species. Contents under pressure. Do not directly inhale contents."
stage = READY
New()
..()
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
/obj/item/grenade/chem_grenade/antiweed/New()
..()
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
B1.reagents.add_reagent("atrazine", 30)
B1.reagents.add_reagent("potassium", 20)
B2.reagents.add_reagent("phosphorus", 20)
B2.reagents.add_reagent("sugar", 20)
B2.reagents.add_reagent("atrazine", 10)
B1.reagents.add_reagent("atrazine", 30)
B1.reagents.add_reagent("potassium", 20)
B2.reagents.add_reagent("phosphorus", 20)
B2.reagents.add_reagent("sugar", 20)
B2.reagents.add_reagent("atrazine", 10)
beakers += B1
beakers += B2
update_icon()
beakers += B1
beakers += B2
update_icon()
/obj/item/grenade/chem_grenade/cleaner
@@ -492,18 +492,18 @@
desc = "BLAM!-brand foaming space cleaner. In a special applicator for rapid cleaning of wide areas."
stage = READY
New()
..()
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
/obj/item/grenade/chem_grenade/cleaner/New()
..()
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
B1.reagents.add_reagent("fluorosurfactant", 40)
B2.reagents.add_reagent("cleaner", 10)
B2.reagents.add_reagent("water", 40) //when you make pre-designed foam reactions that carry the reagents, always add water last
B1.reagents.add_reagent("fluorosurfactant", 40)
B2.reagents.add_reagent("cleaner", 10)
B2.reagents.add_reagent("water", 40) //when you make pre-designed foam reactions that carry the reagents, always add water last
beakers += B1
beakers += B2
update_icon()
beakers += B1
beakers += B2
update_icon()
/obj/item/grenade/chem_grenade/teargas
@@ -511,19 +511,19 @@
desc = "Used for nonlethal riot control. Contents under pressure. Do not directly inhale contents."
stage = READY
New()
..()
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
/obj/item/grenade/chem_grenade/teargas/New()
..()
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
B1.reagents.add_reagent("condensedcapsaicin", 25)
B1.reagents.add_reagent("potassium", 25)
B2.reagents.add_reagent("phosphorus", 25)
B2.reagents.add_reagent("sugar", 25)
B1.reagents.add_reagent("condensedcapsaicin", 25)
B1.reagents.add_reagent("potassium", 25)
B2.reagents.add_reagent("phosphorus", 25)
B2.reagents.add_reagent("sugar", 25)
beakers += B1
beakers += B2
update_icon()
beakers += B1
beakers += B2
update_icon()
/obj/item/grenade/chem_grenade/facid
name = "acid grenade"
@@ -550,19 +550,19 @@
desc = "Contains sarin gas; extremely deadly and fast acting; use with extreme caution."
stage = READY
New()
..()
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
/obj/item/grenade/chem_grenade/saringas/New()
..()
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
B1.reagents.add_reagent("sarin", 25)
B1.reagents.add_reagent("potassium", 25)
B2.reagents.add_reagent("phosphorus", 25)
B2.reagents.add_reagent("sugar", 25)
B1.reagents.add_reagent("sarin", 25)
B1.reagents.add_reagent("potassium", 25)
B2.reagents.add_reagent("phosphorus", 25)
B2.reagents.add_reagent("sugar", 25)
beakers += B1
beakers += B2
update_icon()
beakers += B1
beakers += B2
update_icon()
#undef EMPTY
#undef WIRED
@@ -10,44 +10,34 @@
var/path = 0
var/affected_area = 2
prime()
..()
playsound(src.loc, 'sound/items/bikehorn.ogg', 25, -3)
/*
for(var/turf/simulated/floor/T in view(affected_area, src.loc))
if(prob(75))
banana(T)
*/
var/i = 0
var/number = 0
for(var/direction in alldirs)
for(i = 0; i < 2; i++)
number++
var/obj/item/grown/bananapeel/traitorpeel/peel = new /obj/item/grown/bananapeel/traitorpeel(get_turf(src.loc))
/* var/direction = pick(alldirs)
var/spaces = pick(1;150, 2)
var/a = 0
for(a = 0; a < spaces; a++)
step(peel,direction)*/
var/a = 1
if(number & 2)
for(a = 1; a <= 2; a++)
step(peel,direction)
else
/obj/item/grenade/clown_grenade/prime()
..()
playsound(src.loc, 'sound/items/bikehorn.ogg', 25, -3)
/*
for(var/turf/simulated/floor/T in view(affected_area, src.loc))
if(prob(75))
banana(T)
*/
var/i = 0
var/number = 0
for(var/direction in alldirs)
for(i = 0; i < 2; i++)
number++
var/obj/item/grown/bananapeel/traitorpeel/peel = new /obj/item/grown/bananapeel/traitorpeel(get_turf(src.loc))
/* var/direction = pick(alldirs)
var/spaces = pick(1;150, 2)
var/a = 0
for(a = 0; a < spaces; a++)
step(peel,direction)*/
var/a = 1
if(number & 2)
for(a = 1; a <= 2; a++)
step(peel,direction)
new /obj/item/grown/bananapeel/traitorpeel(get_turf(src.loc))
qdel(src)
return
/*
proc/banana(turf/T as turf)
if(!T || !istype(T))
return
if(locate(/obj/structure/grille) in T)
return
if(locate(/obj/structure/window) in T)
return
new /obj/item/grown/bananapeel/traitorpeel(T)
*/
else
step(peel,direction)
new /obj/item/grown/bananapeel/traitorpeel(get_turf(src.loc))
qdel(src)
return
/obj/item/grown/bananapeel/traitorpeel
trip_stun = 0
@@ -3,17 +3,17 @@
desc = "From the makers of BLAM! brand foaming space cleaner, this bomb guarantees steady work for any janitor."
stage = 2
New()
..()
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/list/muck = list("blood","carbon","flour","radium")
var/filth = pick(muck - "radium") // not usually radioactive
/obj/item/grenade/chem_grenade/dirt/New()
..()
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/list/muck = list("blood","carbon","flour","radium")
var/filth = pick(muck - "radium") // not usually radioactive
B1.reagents.add_reagent(filth,25)
if(prob(25))
B1.reagents.add_reagent(pick(muck - filth,25)) // but sometimes...
B1.reagents.add_reagent(filth,25)
if(prob(25))
B1.reagents.add_reagent(pick(muck - filth,25)) // but sometimes...
beakers += B1
beakers += B1
/obj/item/grenade/chem_grenade/meat
@@ -22,18 +22,18 @@
stage = 2
New()
..()
var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
/obj/item/grenade/chem_grenade/meat/New()
..()
var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
B1.reagents.add_reagent("blood",60)
if(prob(5))
B1.reagents.add_reagent("blood",1) // Quality control problems, causes a mess
B2.reagents.add_reagent("cryoxadone",30)
B1.reagents.add_reagent("blood",60)
if(prob(5))
B1.reagents.add_reagent("blood",1) // Quality control problems, causes a mess
B2.reagents.add_reagent("cryoxadone",30)
beakers += B1
beakers += B2
beakers += B1
beakers += B2
/obj/item/grenade/chem_grenade/holywater
payload_name = "holy water"
@@ -41,11 +41,11 @@
stage = 2
det_time = 30
New()
..()
var/obj/item/reagent_containers/glass/beaker/large/B = new(src)
B.reagents.add_reagent("holywater",100)
beakers += B
/obj/item/grenade/chem_grenade/holywater/New()
..()
var/obj/item/reagent_containers/glass/beaker/large/B = new(src)
B.reagents.add_reagent("holywater",100)
beakers += B
/obj/item/grenade/chem_grenade/hellwater
payload_name = "hell water"
@@ -53,15 +53,15 @@
stage = 2
det_time = 30
New()
..()
var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
B1.reagents.add_reagent("hell_water",80)
B1.reagents.add_reagent("sugar",20)
B2.reagents.add_reagent("hell_water", 60)
B2.reagents.add_reagent("potassium", 20)
B2.reagents.add_reagent("phosphorus", 20)
/obj/item/grenade/chem_grenade/hellwater/New()
..()
var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
B1.reagents.add_reagent("hell_water",80)
B1.reagents.add_reagent("sugar",20)
B2.reagents.add_reagent("hell_water", 60)
B2.reagents.add_reagent("potassium", 20)
B2.reagents.add_reagent("phosphorus", 20)
/obj/item/grenade/chem_grenade/drugs
@@ -69,40 +69,40 @@
desc = "How does it work?"
stage = 2
New()
..()
var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
/obj/item/grenade/chem_grenade/drugs/New()
..()
var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
B1.reagents.add_reagent("space_drugs", 25)
B1.reagents.add_reagent("lsd", 25)
B1.reagents.add_reagent("potassium", 25)
B2.reagents.add_reagent("phosphorus", 25)
B2.reagents.add_reagent("sugar", 25)
B1.reagents.add_reagent("space_drugs", 25)
B1.reagents.add_reagent("lsd", 25)
B1.reagents.add_reagent("potassium", 25)
B2.reagents.add_reagent("phosphorus", 25)
B2.reagents.add_reagent("sugar", 25)
beakers += B1
beakers += B2
update_icon()
beakers += B1
beakers += B2
update_icon()
/obj/item/grenade/chem_grenade/ethanol
payload_name = "ethanol"
desc = "Ach, that hits the spot."
stage = 2
New()
..()
var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
/obj/item/grenade/chem_grenade/ethanol/New()
..()
var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
B1.reagents.add_reagent("ethanol", 75)
B1.reagents.add_reagent("potassium", 25)
B2.reagents.add_reagent("phosphorus", 25)
B2.reagents.add_reagent("sugar", 25)
B2.reagents.add_reagent("ethanol", 25)
B1.reagents.add_reagent("ethanol", 75)
B1.reagents.add_reagent("potassium", 25)
B2.reagents.add_reagent("phosphorus", 25)
B2.reagents.add_reagent("sugar", 25)
B2.reagents.add_reagent("ethanol", 25)
beakers += B1
beakers += B2
update_icon()
beakers += B1
beakers += B2
update_icon()
// -------------------------------------
// Grenades using new grenade assemblies
@@ -208,107 +208,67 @@
payload_name = "EMP"
stage = 2
New()
..()
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
B1.reagents.add_reagent("uranium",50)
B2.reagents.add_reagent("iron",50)
beakers += B1
beakers += B2
/obj/item/grenade/chem_grenade/emp/New()
..()
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
B1.reagents.add_reagent("uranium",50)
B2.reagents.add_reagent("iron",50)
beakers += B1
beakers += B2
// Assembly Variants
/obj/item/grenade/chem_grenade/emp/remote
New()
..()
CreateDefaultTrigger(/obj/item/assembly/signaler)
/obj/item/grenade/chem_grenade/emp/remote/New()
..()
CreateDefaultTrigger(/obj/item/assembly/signaler)
/obj/item/grenade/chem_grenade/emp/prox
New()
..()
CreateDefaultTrigger(/obj/item/assembly/prox_sensor)
/obj/item/grenade/chem_grenade/emp/prox/New()
..()
CreateDefaultTrigger(/obj/item/assembly/prox_sensor)
/obj/item/grenade/chem_grenade/emp/mine
New()
..()
CreateDefaultTrigger(/obj/item/assembly/mousetrap)
// --------------------------------------
// Dangerous slime core grenades
// --------------------------------------
/*
/obj/item/grenade/chem_grenade/large/bluespace
payload_name = "bluespace slime"
desc = "A standard grenade casing containing weaponized slime extract."
stage = 2
New()
..()
var/obj/item/slime_extract/bluespace/B1 = new(src)
B1.Uses = rand(1,3)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
B2.reagents.add_reagent("plasma",5 * B1.Uses)
beakers += B1
beakers += B2
/obj/item/grenade/chem_grenade/large/bluespace/prox
New()
..()
CreateDefaultTrigger(/obj/item/assembly/prox_sensor)
/obj/item/grenade/chem_grenade/large/bluespace/mine
New()
..()
CreateDefaultTrigger(/obj/item/assembly/mousetrap)
/obj/item/grenade/chem_grenade/large/bluespace/remote
New()
..()
CreateDefaultTrigger(/obj/item/assembly/signaler)
*/
/obj/item/grenade/chem_grenade/emp/mine/New()
..()
CreateDefaultTrigger(/obj/item/assembly/mousetrap)
/obj/item/grenade/chem_grenade/large/monster
payload_name = "gold slime"
desc = "A standard grenade containing weaponized slime extract."
stage = 2
New()
..()
var/obj/item/slime_extract/gold/B1 = new(src)
B1.Uses = rand(1,3)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
B2.reagents.add_reagent("plasma",5 * B1.Uses)
beakers += B1
beakers += B2
/obj/item/grenade/chem_grenade/large/monster/New()
..()
var/obj/item/slime_extract/gold/B1 = new(src)
B1.Uses = rand(1,3)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
B2.reagents.add_reagent("plasma",5 * B1.Uses)
beakers += B1
beakers += B2
/obj/item/grenade/chem_grenade/large/monster/prox
New()
..()
CreateDefaultTrigger(/obj/item/assembly/prox_sensor)
/obj/item/grenade/chem_grenade/large/monster/prox/New()
..()
CreateDefaultTrigger(/obj/item/assembly/prox_sensor)
/obj/item/grenade/chem_grenade/large/monster/mine
New()
..()
CreateDefaultTrigger(/obj/item/assembly/mousetrap)
/obj/item/grenade/chem_grenade/large/monster/mine/New()
..()
CreateDefaultTrigger(/obj/item/assembly/mousetrap)
/obj/item/grenade/chem_grenade/large/monster/remote
New()
..()
CreateDefaultTrigger(/obj/item/assembly/signaler)
/obj/item/grenade/chem_grenade/large/monster/remote/New()
..()
CreateDefaultTrigger(/obj/item/assembly/signaler)
/obj/item/grenade/chem_grenade/large/feast
payload_name = "silver slime"
desc = "A standard grenade containing weaponized slime extract."
stage = 2
New()
..()
var/obj/item/slime_extract/silver/B1 = new(src)
B1.Uses = rand(1,3)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
B2.reagents.add_reagent("plasma",5 * B1.Uses)
beakers += B1
beakers += B2
/obj/item/grenade/chem_grenade/large/feast/New()
..()
var/obj/item/slime_extract/silver/B1 = new(src)
B1.Uses = rand(1,3)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
B2.reagents.add_reagent("plasma",5 * B1.Uses)
beakers += B1
beakers += B2
// --------------------------------------
// Syndie Kits
@@ -316,25 +276,30 @@
/obj/item/storage/box/syndie_kit/remotegrenade
name = "Remote Grenade Kit"
New()
..()
new /obj/item/grenade/chem_grenade/explosion/remote(src)
new /obj/item/multitool(src) // used to adjust the chemgrenade's signaller
new /obj/item/assembly/signaler(src)
return
/obj/item/storage/box/syndie_kit/remotegrenade/New()
..()
new /obj/item/grenade/chem_grenade/explosion/remote(src)
new /obj/item/multitool(src) // used to adjust the chemgrenade's signaller
new /obj/item/assembly/signaler(src)
return
/obj/item/storage/box/syndie_kit/remoteemp
name = "Remote EMP Kit"
New()
..()
new /obj/item/grenade/chem_grenade/emp/remote(src)
new /obj/item/multitool(src) // used to adjust the chemgrenade's signaller
new /obj/item/assembly/signaler(src)
return
/obj/item/storage/box/syndie_kit/remoteemp/New()
..()
new /obj/item/grenade/chem_grenade/emp/remote(src)
new /obj/item/multitool(src) // used to adjust the chemgrenade's signaller
new /obj/item/assembly/signaler(src)
return
/obj/item/storage/box/syndie_kit/remotelube
name = "Remote Lube Kit"
New()
..()
new /obj/item/grenade/chem_grenade/lube(src)
new /obj/item/multitool(src) // used to adjust the chemgrenade's signaller
new /obj/item/assembly/signaler(src)
return
/obj/item/storage/box/syndie_kit/remotelube/New()
..()
new /obj/item/grenade/chem_grenade/lube(src)
new /obj/item/multitool(src) // used to adjust the chemgrenade's signaller
new /obj/item/assembly/signaler(src)
return
@@ -8,31 +8,31 @@
slot_flags = SLOT_BELT
var/datum/effect_system/smoke_spread/bad/smoke
New()
..()
src.smoke = new /datum/effect_system/smoke_spread/bad
src.smoke.attach(src)
/obj/item/grenade/smokebomb/New()
..()
src.smoke = new /datum/effect_system/smoke_spread/bad
src.smoke.attach(src)
Destroy()
QDEL_NULL(smoke)
return ..()
/obj/item/grenade/smokebomb/Destroy()
QDEL_NULL(smoke)
return ..()
prime()
playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
src.smoke.set_up(10, 0, usr.loc)
spawn(0)
src.smoke.start()
sleep(10)
src.smoke.start()
sleep(10)
src.smoke.start()
sleep(10)
src.smoke.start()
/obj/item/grenade/smokebomb/prime()
playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
src.smoke.set_up(10, 0, usr.loc)
spawn(0)
src.smoke.start()
sleep(10)
src.smoke.start()
sleep(10)
src.smoke.start()
sleep(10)
src.smoke.start()
for(var/obj/structure/blob/B in view(8,src))
var/damage = round(30/(get_dist(B,src)+1))
B.health -= damage
B.update_icon()
sleep(80)
qdel(src)
return
for(var/obj/structure/blob/B in view(8,src))
var/damage = round(30/(get_dist(B,src)+1))
B.health -= damage
B.update_icon()
sleep(80)
qdel(src)
return
+1 -2
View File
@@ -24,8 +24,7 @@
icon_on = "zippoon"
icon_off = "zippo"
/obj/item/lighter/random
New()
/obj/item/lighter/random/New()
var/color = pick("r","c","y","g")
icon_on = "lighter-[color]-on"
icon_off = "lighter-[color]"
+15 -15
View File
@@ -89,25 +89,25 @@
icon_state = "lightning"
desc = "test lightning"
New()
/obj/item/lightning/New()
icon = midicon
icon_state = "1"
afterattack(atom/A as mob|obj|turf|area, mob/living/user as mob|obj, flag, params)
var/angle = get_angle(A, user)
// to_chat(world, angle)
angle = round(angle) + 45
if(angle > 180)
angle -= 180
else
angle += 180
/obj/item/lightning/afterattack(atom/A as mob|obj|turf|area, mob/living/user as mob|obj, flag, params)
var/angle = get_angle(A, user)
//to_chat(world, angle)
angle = round(angle) + 45
if(angle > 180)
angle -= 180
else
angle += 180
if(!angle)
angle = 1
// to_chat(world, "adjusted [angle]")
icon_state = "[angle]"
// to_chat(world, "[angle] [(get_dist(user, A) - 1)]")
user.Beam(A, "lightning", 'icons/obj/zap.dmi', 50, 15)
if(!angle)
angle = 1
//to_chat(world, "adjusted [angle]")
icon_state = "[angle]"
//to_chat(world, "[angle] [(get_dist(user, A) - 1)]")
user.Beam(A, "lightning", 'icons/obj/zap.dmi', 50, 15)
/obj/item/newton
name = "newton cradle"
@@ -185,10 +185,9 @@
desc = "An NT Deluxe satchel, with the finest quality leather and the company logo in a thin gold stitch"
icon_state = "nt_deluxe"
/obj/item/storage/backpack/satchel/withwallet
New()
..()
new /obj/item/storage/wallet/random( src )
/obj/item/storage/backpack/satchel/withwallet/New()
..()
new /obj/item/storage/wallet/random(src)
/obj/item/storage/backpack/satchel_norm
name = "satchel"
+95 -95
View File
@@ -207,122 +207,122 @@
w_class = WEIGHT_CLASS_NORMAL
allow_quick_empty = 1 // this function is superceded
New()
..()
//verbs -= /obj/item/storage/verb/quick_empty
//verbs += /obj/item/storage/bag/sheetsnatcher/quick_empty
/obj/item/storage/bag/sheetsnatcher/New()
..()
//verbs -= /obj/item/storage/verb/quick_empty
//verbs += /obj/item/storage/bag/sheetsnatcher/quick_empty
can_be_inserted(obj/item/W as obj, stop_messages = 0)
if(!istype(W,/obj/item/stack/sheet) || istype(W,/obj/item/stack/sheet/mineral/sandstone) || istype(W,/obj/item/stack/sheet/wood))
if(!stop_messages)
to_chat(usr, "The snatcher does not accept [W].")
return 0 //I don't care, but the existing code rejects them for not being "sheets" *shrug* -Sayu
var/current = 0
for(var/obj/item/stack/sheet/S in contents)
current += S.amount
if(capacity == current)//If it's full, you're done
if(!stop_messages)
to_chat(usr, "<span class='warning'>The snatcher is full.</span>")
return 0
return 1
/obj/item/storage/bag/sheetsnatcher/can_be_inserted(obj/item/W as obj, stop_messages = 0)
if(!istype(W,/obj/item/stack/sheet) || istype(W,/obj/item/stack/sheet/mineral/sandstone) || istype(W,/obj/item/stack/sheet/wood))
if(!stop_messages)
to_chat(usr, "The snatcher does not accept [W].")
return 0 //I don't care, but the existing code rejects them for not being "sheets" *shrug* -Sayu
var/current = 0
for(var/obj/item/stack/sheet/S in contents)
current += S.amount
if(capacity == current)//If it's full, you're done
if(!stop_messages)
to_chat(usr, "<span class='warning'>The snatcher is full.</span>")
return 0
return 1
// Modified handle_item_insertion. Would prefer not to, but...
handle_item_insertion(obj/item/W as obj, prevent_warning = 0)
var/obj/item/stack/sheet/S = W
if(!istype(S)) return 0
/obj/item/storage/bag/sheetsnatcher/handle_item_insertion(obj/item/W as obj, prevent_warning = 0)
var/obj/item/stack/sheet/S = W
if(!istype(S)) return 0
var/amount
var/inserted = 0
var/current = 0
for(var/obj/item/stack/sheet/S2 in contents)
current += S2.amount
if(capacity < current + S.amount)//If the stack will fill it up
amount = capacity - current
var/amount
var/inserted = 0
var/current = 0
for(var/obj/item/stack/sheet/S2 in contents)
current += S2.amount
if(capacity < current + S.amount)//If the stack will fill it up
amount = capacity - current
else
amount = S.amount
for(var/obj/item/stack/sheet/sheet in contents)
if(S.type == sheet.type) // we are violating the amount limitation because these are not sane objects
sheet.amount += amount // they should only be removed through procs in this file, which split them up.
S.amount -= amount
inserted = 1
break
if(!inserted || !S.amount)
usr.unEquip(S)
usr.update_icons() //update our overlays
if(usr.client && usr.s_active != src)
usr.client.screen -= S
S.dropped(usr)
if(!S.amount)
qdel(S)
else
amount = S.amount
S.loc = src
for(var/obj/item/stack/sheet/sheet in contents)
if(S.type == sheet.type) // we are violating the amount limitation because these are not sane objects
sheet.amount += amount // they should only be removed through procs in this file, which split them up.
S.amount -= amount
inserted = 1
break
if(!inserted || !S.amount)
usr.unEquip(S)
usr.update_icons() //update our overlays
if(usr.client && usr.s_active != src)
usr.client.screen -= S
S.dropped(usr)
if(!S.amount)
qdel(S)
else
S.loc = src
orient2hud(usr)
if(usr.s_active)
usr.s_active.show_to(usr)
update_icon()
return 1
orient2hud(usr)
if(usr.s_active)
usr.s_active.show_to(usr)
update_icon()
return 1
// Sets up numbered display to show the stack size of each stored mineral
// NOTE: numbered display is turned off currently because it's broken
orient2hud(mob/user as mob)
var/adjusted_contents = contents.len
/obj/item/storage/bag/sheetsnatcher/orient2hud(mob/user as mob)
var/adjusted_contents = contents.len
//Numbered contents display
var/list/datum/numbered_display/numbered_contents
if(display_contents_with_number)
numbered_contents = list()
adjusted_contents = 0
for(var/obj/item/stack/sheet/I in contents)
adjusted_contents++
var/datum/numbered_display/D = new/datum/numbered_display(I)
D.number = I.amount
numbered_contents.Add( D )
//Numbered contents display
var/list/datum/numbered_display/numbered_contents
if(display_contents_with_number)
numbered_contents = list()
adjusted_contents = 0
for(var/obj/item/stack/sheet/I in contents)
adjusted_contents++
var/datum/numbered_display/D = new/datum/numbered_display(I)
D.number = I.amount
numbered_contents.Add( D )
var/row_num = 0
var/col_count = min(7,storage_slots) -1
if(adjusted_contents > 7)
row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width.
src.standard_orient_objs(row_num, col_count, numbered_contents)
return
var/row_num = 0
var/col_count = min(7,storage_slots) -1
if(adjusted_contents > 7)
row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width.
src.standard_orient_objs(row_num, col_count, numbered_contents)
return
// Modified quick_empty verb drops appropriate sized stacks
quick_empty()
var/location = get_turf(src)
for(var/obj/item/stack/sheet/S in contents)
while(S.amount)
var/obj/item/stack/sheet/N = new S.type(location)
var/stacksize = min(S.amount,N.max_amount)
N.amount = stacksize
S.amount -= stacksize
if(!S.amount)
qdel(S) // todo: there's probably something missing here
orient2hud(usr)
if(usr.s_active)
usr.s_active.show_to(usr)
update_icon()
/obj/item/storage/bag/sheetsnatcher/quick_empty()
var/location = get_turf(src)
for(var/obj/item/stack/sheet/S in contents)
while(S.amount)
var/obj/item/stack/sheet/N = new S.type(location)
var/stacksize = min(S.amount,N.max_amount)
N.amount = stacksize
S.amount -= stacksize
if(!S.amount)
qdel(S) // todo: there's probably something missing here
orient2hud(usr)
if(usr.s_active)
usr.s_active.show_to(usr)
update_icon()
// Instead of removing
remove_from_storage(obj/item/W as obj, atom/new_location)
var/obj/item/stack/sheet/S = W
if(!istype(S)) return 0
/obj/item/storage/bag/sheetsnatcher/remove_from_storage(obj/item/W as obj, atom/new_location)
var/obj/item/stack/sheet/S = W
if(!istype(S)) return 0
//I would prefer to drop a new stack, but the item/attack_hand code
// that calls this can't recieve a different object than you clicked on.
//Therefore, make a new stack internally that has the remainder.
// -Sayu
//I would prefer to drop a new stack, but the item/attack_hand code
// that calls this can't recieve a different object than you clicked on.
//Therefore, make a new stack internally that has the remainder.
// -Sayu
if(S.amount > S.max_amount)
var/obj/item/stack/sheet/temp = new S.type(src)
temp.amount = S.amount - S.max_amount
S.amount = S.max_amount
if(S.amount > S.max_amount)
var/obj/item/stack/sheet/temp = new S.type(src)
temp.amount = S.amount - S.max_amount
S.amount = S.max_amount
return ..(S,new_location)
return ..(S,new_location)
// -----------------------------
// Sheet Snatcher (Cyborg)
+25 -25
View File
@@ -631,21 +631,21 @@
max_combined_w_class = 280
can_hold = list()
New()
..()
new /obj/item/crowbar(src)
new /obj/item/screwdriver(src)
new /obj/item/weldingtool/hugetank(src)
new /obj/item/wirecutters(src)
new /obj/item/wrench(src)
new /obj/item/multitool(src)
new /obj/item/stack/cable_coil(src)
/obj/item/storage/belt/bluespace/admin/New()
..()
new /obj/item/crowbar(src)
new /obj/item/screwdriver(src)
new /obj/item/weldingtool/hugetank(src)
new /obj/item/wirecutters(src)
new /obj/item/wrench(src)
new /obj/item/multitool(src)
new /obj/item/stack/cable_coil(src)
new /obj/item/restraints/handcuffs(src)
new /obj/item/dnainjector/xraymut(src)
new /obj/item/dnainjector/firemut(src)
new /obj/item/dnainjector/telemut(src)
new /obj/item/dnainjector/hulkmut(src)
new /obj/item/restraints/handcuffs(src)
new /obj/item/dnainjector/xraymut(src)
new /obj/item/dnainjector/firemut(src)
new /obj/item/dnainjector/telemut(src)
new /obj/item/dnainjector/hulkmut(src)
// new /obj/item/spellbook(src) // for smoke effects, door openings, etc
// new /obj/item/magic/spellbook(src)
@@ -660,15 +660,15 @@
max_combined_w_class = 280
can_hold = list()
New()
..()
new /obj/item/crowbar(src)
new /obj/item/screwdriver(src)
new /obj/item/weldingtool/hugetank(src)
new /obj/item/wirecutters(src)
new /obj/item/wrench(src)
new /obj/item/multitool(src)
new /obj/item/stack/cable_coil(src)
/obj/item/storage/belt/bluespace/sandbox/New()
..()
new /obj/item/crowbar(src)
new /obj/item/screwdriver(src)
new /obj/item/weldingtool/hugetank(src)
new /obj/item/wirecutters(src)
new /obj/item/wrench(src)
new /obj/item/multitool(src)
new /obj/item/stack/cable_coil(src)
new /obj/item/analyzer(src)
new /obj/item/healthanalyzer(src)
new /obj/item/analyzer(src)
new /obj/item/healthanalyzer(src)