Merge branch 'master' into aro-tether-wip

# Conflicts:
#	code/ZAS/_docs.dm
#	code/game/area/areas.dm
#	code/game/objects/explosion.dm
#	code/modules/holodeck/HolodeckControl.dm
#	code/modules/mob/living/say.dm
This commit is contained in:
Leshana
2017-05-16 00:04:50 -04:00
220 changed files with 2121 additions and 1183 deletions
+2 -2
View File
@@ -152,7 +152,7 @@
if(passed_smoke)
smoke = passed_smoke
else
smoke = PoolOrNew(/obj/effect/effect/smoke/chem, location)
smoke = new /obj/effect/effect/smoke/chem(location)
if(chemholder.reagents.reagent_list.len)
chemholder.reagents.trans_to_obj(smoke, chemholder.reagents.total_volume / dist, copy = 1) //copy reagents to the smoke so mob/breathe() can handle inhaling the reagents
@@ -169,7 +169,7 @@
qdel(src)
/datum/effect/effect/system/smoke_spread/chem/spores/spawnSmoke(var/turf/T, var/icon/I, var/dist = 1)
var/obj/effect/effect/smoke/chem/spores = PoolOrNew(/obj/effect/effect/smoke/chem, location)
var/obj/effect/effect/smoke/chem/spores = new /obj/effect/effect/smoke/chem(location)
spores.name = "cloud of [seed.seed_name] [seed.seed_noun]"
..(T, I, dist, spores)
+1 -1
View File
@@ -108,7 +108,7 @@
F.amount += amount
return
F = PoolOrNew(/obj/effect/effect/foam, list(location, metal))
F = new /obj/effect/effect/foam(location, metal)
F.amount = amount
if(!metal) // don't carry other chemicals if a metal foam
@@ -222,7 +222,7 @@ var/global/list/image/splatter_cache=list()
for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++)
sleep(3)
if (i > 0)
var/obj/effect/decal/cleanable/blood/b = PoolOrNew(/obj/effect/decal/cleanable/blood/splatter, src.loc)
var/obj/effect/decal/cleanable/blood/b = new /obj/effect/decal/cleanable/blood/splatter(src.loc)
b.basecolor = src.basecolor
b.update_icon()
+6 -6
View File
@@ -75,7 +75,7 @@ steam.start() -- spawns the effect
spawn(0)
if(holder)
src.location = get_turf(holder)
var/obj/effect/effect/steam/steam = PoolOrNew(/obj/effect/effect/steam, src.location)
var/obj/effect/effect/steam/steam = new /obj/effect/effect/steam(src.location)
var/direction
if(src.cardinals)
direction = pick(cardinal)
@@ -146,7 +146,7 @@ steam.start() -- spawns the effect
spawn(0)
if(holder)
src.location = get_turf(holder)
var/obj/effect/effect/sparks/sparks = PoolOrNew(/obj/effect/effect/sparks, src.location)
var/obj/effect/effect/sparks/sparks = new /obj/effect/effect/sparks(src.location)
src.total_sparks++
var/direction
if(src.cardinals)
@@ -283,7 +283,7 @@ steam.start() -- spawns the effect
spawn(0)
if(holder)
src.location = get_turf(holder)
var/obj/effect/effect/smoke/smoke = PoolOrNew(smoke_type, src.location)
var/obj/effect/effect/smoke/smoke = new smoke_type(src.location)
src.total_smoke++
smoke.color = I
var/direction = src.direction
@@ -334,7 +334,7 @@ steam.start() -- spawns the effect
var/turf/T = get_turf(src.holder)
if(T != src.oldposition)
if(isturf(T))
var/obj/effect/effect/ion_trails/I = PoolOrNew(/obj/effect/effect/ion_trails, src.oldposition)
var/obj/effect/effect/ion_trails/I = new /obj/effect/effect/ion_trails(src.oldposition)
src.oldposition = T
I.set_dir(src.holder.dir)
flick("ion_fade", I)
@@ -380,7 +380,7 @@ steam.start() -- spawns the effect
src.processing = 0
spawn(0)
if(src.number < 3)
var/obj/effect/effect/steam/I = PoolOrNew(/obj/effect/effect/steam, src.oldposition)
var/obj/effect/effect/steam/I = new /obj/effect/effect/steam(src.oldposition)
src.number++
src.oldposition = get_turf(holder)
I.set_dir(src.holder.dir)
@@ -420,7 +420,7 @@ steam.start() -- spawns the effect
start()
if (amount <= 2)
var/datum/effect/effect/system/spark_spread/s = PoolOrNew(/datum/effect/effect/system/spark_spread)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
s.set_up(2, 1, location)
s.start()
+1 -1
View File
@@ -24,7 +24,7 @@
var/obj/effect/decal/cleanable/blood/gibs/gib = null
if(sparks)
var/datum/effect/effect/system/spark_spread/s = PoolOrNew(/datum/effect/effect/system/spark_spread)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
s.set_up(2, 1, get_turf(location)) // Not sure if it's safe to pass an arbitrary object to set_up, todo
s.start()
+3 -3
View File
@@ -26,7 +26,7 @@
call(src,triggerproc)(M)
/obj/effect/mine/proc/triggerrad(obj)
var/datum/effect/effect/system/spark_spread/s = PoolOrNew(/datum/effect/effect/system/spark_spread)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
s.set_up(3, 1, src)
s.start()
obj:radiation += 50
@@ -39,7 +39,7 @@
if(ismob(obj))
var/mob/M = obj
M.Stun(30)
var/datum/effect/effect/system/spark_spread/s = PoolOrNew(/datum/effect/effect/system/spark_spread)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
s.set_up(3, 1, src)
s.start()
spawn(0)
@@ -67,7 +67,7 @@
qdel(src)
/obj/effect/mine/proc/triggerkick(obj)
var/datum/effect/effect/system/spark_spread/s = PoolOrNew(/datum/effect/effect/system/spark_spread)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
s.set_up(3, 1, src)
s.start()
qdel(obj:client)
+2 -2
View File
@@ -105,7 +105,7 @@
O = loc
for(var/i=0, i<num, i++)
var/spiderling = PoolOrNew(/obj/effect/spider/spiderling, list(src.loc, src))
var/spiderling = new /obj/effect/spider/spiderling(src.loc, src)
if(O)
O.implants += spiderling
qdel(src)
@@ -148,7 +148,7 @@
/obj/effect/spider/spiderling/proc/die()
visible_message("<span class='alert'>[src] dies!</span>")
PoolOrNew(/obj/effect/decal/cleanable/spiderling_remains, src.loc)
new /obj/effect/decal/cleanable/spiderling_remains(src.loc)
qdel(src)
/obj/effect/spider/spiderling/healthcheck()
+1 -1
View File
@@ -15,7 +15,7 @@ proc/empulse(turf/epicenter, first_range, second_range, third_range, fourth_rang
log_game("EMP with size ([first_range], [second_range], [third_range], [fourth_range]) in area [epicenter.loc.name] ")
if(first_range > 1)
var/obj/effect/overlay/pulse = PoolOrNew(/obj/effect/overlay, epicenter)
var/obj/effect/overlay/pulse = new /obj/effect/overlay(epicenter)
pulse.icon = 'icons/effects/effects.dmi'
pulse.icon_state = "emppulse"
pulse.name = "emp pulse"
+12 -2
View File
@@ -44,6 +44,16 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
far_volume += (dist <= far_dist * 0.5 ? 50 : 0) // add 50 volume if the mob is pretty close to the explosion
M.playsound_local(epicenter, 'sound/effects/explosionfar.ogg', far_volume, 1, frequency, falloff = 5)
var/close = range(world.view+round(devastation_range,1), epicenter)
// to all distanced mobs play a different sound
for(var/mob/M in world)
if(M.z == epicenter.z)
if(!(M in close))
// check if the mob can hear
if(M.ear_deaf <= 0 || !M.ear_deaf)
if(!istype(M.loc,/turf/space))
M << 'sound/effects/explosionfar.ogg'
if(adminlog)
message_admins("Explosion with [shaped ? "shaped" : "non-shaped"] size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[epicenter.x];Y=[epicenter.y];Z=[epicenter.z]'>JMP</a>)")
log_game("Explosion with [shaped ? "shaped" : "non-shaped"] size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ")
@@ -80,8 +90,8 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
var/atom/movable/AM = atom_movable
if(AM && AM.simulated) AM.ex_act(dist)
T.ex_act(dist)
T.ex_act(dist)
var/took = (world.timeofday-start)/10
//You need to press the DebugGame verb to see these now....they were getting annoying and we've collected a fair bit of data. Just -test- changes to explosion code using this please so we can compare
if(Debug2) world.log << "## DEBUG: Explosion([x0],[y0],[z0])(d[devastation_range],h[heavy_impact_range],l[light_impact_range]): Took [took] seconds."
+6 -6
View File
@@ -50,7 +50,7 @@
var/zoomdevicename = null //name used for message when binoculars/scope is used
var/zoom = 0 //1 if item is actively being used to zoom. For scoped guns and binoculars.
var/embed_chance = -1 //-1 makes it calculate embed chance, 0 won't embed, and 100 will always embed
var/embed_chance = -1 //0 won't embed, and 100 will always embed
var/icon_override = null //Used to override hardcoded clothing dmis in human clothing proc.
@@ -79,12 +79,12 @@
var/list/sprite_sheets_obj = list()
/obj/item/New()
if(embed_chance == -1)
if(sharp)
embed_chance = force/w_class
else
embed_chance = force/(w_class*3)
..()
if(embed_chance < 0)
if(sharp)
embed_chance = max(5, round(force/w_class))
else
embed_chance = max(5, round(force/(w_class*3)))
/obj/item/equipped()
..()
+58 -9
View File
@@ -77,14 +77,14 @@
/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(!ishuman(usr)) return 0
if(opened) return 0
if(contents.len) return 0
visible_message("[usr] folds up the [src.name]")
new item_path(get_turf(src))
var/folded = new item_path(get_turf(src))
spawn(0)
qdel(src)
return
return folded
/obj/structure/closet/body_bag/relaymove(mob/user,direction)
if(src.loc != get_turf(src))
@@ -115,34 +115,43 @@
/obj/item/bodybag/cryobag
name = "stasis bag"
desc = "A folded, non-reusable bag designed to prevent additional damage to an occupant, especially useful if short on time or in \
a hostile enviroment."
desc = "A non-reusable plastic bag designed to slow down bodily functions such as circulation and breathing, \
especially useful if short on time or in a hostile enviroment."
icon = 'icons/obj/cryobag.dmi'
icon_state = "bodybag_folded"
item_state = "bodybag_cryo_folded"
origin_tech = list(TECH_BIO = 4)
var/obj/item/weapon/reagent_containers/syringe/syringe
/obj/item/bodybag/cryobag/attack_self(mob/user)
var/obj/structure/closet/body_bag/cryobag/R = new /obj/structure/closet/body_bag/cryobag(user.loc)
R.add_fingerprint(user)
if(syringe)
R.syringe = syringe
syringe = null
qdel(src)
/obj/structure/closet/body_bag/cryobag
name = "stasis bag"
desc = "A non-reusable plastic bag designed to prevent additional damage to an occupant, especially useful if short on time or in \
a hostile enviroment."
desc = "A non-reusable plastic bag designed to slow down bodily functions such as circulation and breathing, \
especially useful if short on time or in a hostile enviroment."
icon = 'icons/obj/cryobag.dmi'
item_path = /obj/item/bodybag/cryobag
store_misc = 0
store_items = 0
var/used = 0
var/obj/item/weapon/tank/tank = null
var/stasis_level = 3 //Every 'this' life ticks are applied to the mob (when life_ticks%stasis_level == 1)
var/obj/item/weapon/reagent_containers/syringe/syringe
/obj/structure/closet/body_bag/cryobag/New()
tank = new /obj/item/weapon/tank/emergency/oxygen(null) //It's in nullspace to prevent ejection when the bag is opened.
..()
/obj/structure/closet/body_bag/cryobag/Destroy()
if(syringe)
qdel(syringe)
syringe = null
qdel(tank)
tank = null
..()
@@ -157,11 +166,19 @@
O.desc = "Pretty useless now.."
qdel(src)
/obj/structure/closet/body_bag/cryobag/MouseDrop(over_object, src_location, over_location)
. = ..()
if(. && syringe)
var/obj/item/bodybag/cryobag/folded = .
folded.syringe = syringe
syringe = null
/obj/structure/closet/body_bag/cryobag/Entered(atom/movable/AM)
if(ishuman(AM))
var/mob/living/carbon/human/H = AM
H.in_stasis = 1
H.Stasis(stasis_level)
src.used = 1
inject_occupant(H)
if(istype(AM, /obj/item/organ))
var/obj/item/organ/O = AM
@@ -173,7 +190,7 @@
/obj/structure/closet/body_bag/cryobag/Exited(atom/movable/AM)
if(ishuman(AM))
var/mob/living/carbon/human/H = AM
H.in_stasis = 0
H.Stasis(0)
if(istype(AM, /obj/item/organ))
var/obj/item/organ/O = AM
@@ -187,10 +204,19 @@
return tank.air_contents
..()
/obj/structure/closet/body_bag/cryobag/proc/inject_occupant(var/mob/living/carbon/human/H)
if(!syringe)
return
if(H.reagents)
syringe.reagents.trans_to_mob(H, 30, CHEM_BLOOD)
/obj/structure/closet/body_bag/cryobag/examine(mob/user)
..()
if(Adjacent(user)) //The bag's rather thick and opaque from a distance.
user << "<span class='info'>You peer into \the [src].</span>"
if(syringe)
user << "<span class='info'>It has a syringe added to it.</span>"
for(var/mob/living/L in contents)
L.examine(user)
@@ -202,5 +228,28 @@
var/obj/item/device/healthanalyzer/analyzer = W
for(var/mob/living/L in contents)
analyzer.attack(L,user)
else if(istype(W,/obj/item/weapon/reagent_containers/syringe))
if(syringe)
to_chat(user,"<span class='warning'>\The [src] already has an injector! Remove it first.</span>")
else
var/obj/item/weapon/reagent_containers/syringe/syringe = W
to_chat(user,"<span class='info'>You insert \the [syringe] into \the [src], and it locks into place.</span>")
user.unEquip(syringe)
src.syringe = syringe
syringe.loc = null
for(var/mob/living/carbon/human/H in contents)
inject_occupant(H)
break
else if(istype(W,/obj/item/weapon/screwdriver))
if(syringe)
if(used)
to_chat(user,"<span class='warning'>The injector cannot be removed now that the stasis bag has been used!</span>")
else
syringe.forceMove(src.loc)
to_chat(user,"<span class='info'>You pry \the [syringe] out of \the [src].</span>")
syringe = null
else
..()
@@ -1105,6 +1105,8 @@ var/global/list/obj/item/device/pda/PDAs = list()
if(M.stat == DEAD && M.client && (M.is_preference_enabled(/datum/client_preference/ghost_ears))) // src.client is so that ghosts don't have to listen to mice
if(istype(M, /mob/new_player))
continue
if(M.forbid_seeing_deadchat)
continue
M.show_message("<span class='game say'>PDA Message - <span class='name'>[owner]</span> -> <span class='name'>[P.owner]</span>: <span class='message'>[t]</span></span>")
if(!conversations.Find("\ref[P]"))
@@ -47,7 +47,7 @@
qdel(active_dummy)
active_dummy = null
usr << "<span class='notice'>You deactivate the [src].</span>"
var/obj/effect/overlay/T = PoolOrNew(/obj/effect/overlay, get_turf(src))
var/obj/effect/overlay/T = new /obj/effect/overlay(get_turf(src))
T.icon = 'icons/effects/effects.dmi'
flick("emppulse",T)
spawn(8) qdel(T)
@@ -55,7 +55,7 @@
playsound(get_turf(src), 'sound/effects/pop.ogg', 100, 1, -6)
var/obj/O = new saved_item(src)
if(!O) return
var/obj/effect/dummy/chameleon/C = PoolOrNew(/obj/effect/dummy/chameleon, usr.loc)
var/obj/effect/dummy/chameleon/C = new /obj/effect/dummy/chameleon(usr.loc)
C.activate(O, usr, saved_icon, saved_icon_state, saved_overlays, src)
qdel(O)
usr << "<span class='notice'>You activate the [src].</span>"
@@ -212,6 +212,8 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
alert_called = 0
update_icon()
ui_interact(user)
if(video_source)
watch_video(user)
// Proc: MouseDrop()
//Same thing PDAs do
@@ -1041,7 +1043,8 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
if(!Adjacent(user) || !video_source) return
user.set_machine(video_source)
user.reset_view(video_source)
user << "<span class='notice'>Now viewing video session. To leave camera view: OOC -> Cancel Camera View</span>"
to_chat(user,"<span class='notice'>Now viewing video session. To leave camera view, close the communicator window OR: OOC -> Cancel Camera View</span>")
to_chat(user,"<span class='notice'>To return to an active video session, use the communicator in your hand.</span>")
spawn(0)
while(user.machine == video_source && (Adjacent(user) || loc == user))
var/turf/T = get_turf(video_source)
+2 -2
View File
@@ -155,7 +155,7 @@
singular_name = "advanced trauma kit"
desc = "An advanced trauma kit for severe injuries."
icon_state = "traumakit"
heal_brute = 0
heal_brute = 5
origin_tech = list(TECH_BIO = 1)
/obj/item/stack/medical/advanced/bruise_pack/attack(mob/living/carbon/M as mob, mob/user as mob)
@@ -213,7 +213,7 @@
singular_name = "advanced burn kit"
desc = "An advanced treatment kit for severe burns."
icon_state = "burnkit"
heal_burn = 0
heal_burn = 5
origin_tech = list(TECH_BIO = 1)
-59
View File
@@ -1,59 +0,0 @@
/obj/item/weapon/dice
name = "d6"
desc = "A dice with six sides."
icon = 'icons/obj/dice.dmi'
icon_state = "d66"
w_class = ITEMSIZE_TINY
var/sides = 6
attack_verb = list("diced")
/obj/item/weapon/dice/New()
icon_state = "[name][rand(1,sides)]"
/obj/item/weapon/dice/d4
name = "d4"
desc = "A dice with four sides."
icon_state = "d44"
sides = 4
/obj/item/weapon/dice/d8
name = "d8"
desc = "A dice with eight sides."
icon_state = "d88"
sides = 8
/obj/item/weapon/dice/d10
name = "d10"
desc = "A dice with ten sides."
icon_state = "d1010"
sides = 10
/obj/item/weapon/dice/d12
name = "d12"
desc = "A dice with twelve sides."
icon_state = "d1212"
sides = 12
/obj/item/weapon/dice/d20
name = "d20"
desc = "A dice with twenty sides."
icon_state = "d2020"
sides = 20
/obj/item/weapon/dice/d100
name = "d100"
desc = "A dice with ten sides. This one is for the tens digit."
icon_state = "d10010"
sides = 10
/obj/item/weapon/dice/attack_self(mob/user as mob)
var/result = rand(1, sides)
var/comment = ""
if(sides == 20 && result == 20)
comment = "Nat 20!"
else if(sides == 20 && result == 1)
comment = "Ouch, bad luck."
icon_state = "[name][result]"
user.visible_message("<span class='notice'>[user] has thrown [src]. It lands on [result]. [comment]</span>", \
"<span class='notice'>You throw [src]. It lands on a [result]. [comment]</span>", \
"<span class='notice'>You hear [src] landing on a [result]. [comment]</span>")
@@ -107,7 +107,7 @@
spawn(0)
if(!src || !reagents.total_volume) return
var/obj/effect/effect/water/W = PoolOrNew(/obj/effect/effect/water, get_turf(src))
var/obj/effect/effect/water/W = new /obj/effect/effect/water(get_turf(src))
var/turf/my_target
if(a <= the_targets.len)
my_target = the_targets[a]
@@ -86,7 +86,7 @@
if(ptank)
ptank.loc = T
ptank = null
PoolOrNew(/obj/item/stack/rods, T)
new /obj/item/stack/rods(T)
qdel(src)
return
@@ -12,7 +12,7 @@
/obj/item/weapon/grenade/smokebomb/New()
..()
src.smoke = PoolOrNew(/datum/effect/effect/system/smoke_spread/bad)
src.smoke = new /datum/effect/effect/system/smoke_spread/bad()
src.smoke.attach(src)
/obj/item/weapon/grenade/smokebomb/Destroy()
@@ -41,6 +41,8 @@
user << "<span class='danger'>You need to have a firm grip on [C] before you can put \the [src] on!</span>"
/obj/item/weapon/handcuffs/proc/can_place(var/mob/target, var/mob/user)
if(user == target)
return 1
if(istype(user, /mob/living/silicon/robot))
if(user.Adjacent(target))
return 1
@@ -0,0 +1,96 @@
/obj/item/weapon/implant/reagent_generator
name = "reagent generator implant"
desc = "This is an implant that has attached storage and generates a reagent."
implant_color = "r"
var/datum/reagent/generated_reagent = null
var/gen_amount = 2 //amount of reagent generated per process tick
var/gen_cost = 0.5 //amount of nutrient taken from the host per process tick
var/transfer_amount = 30 //amount transferred when using verb
var/usable_volume = 120
var/list/empty_message = list("You feel as though your internal reagent implant is almost empty.")
var/list/full_message = "You feel as though your internal reagent implant is full."
var/list/emote_descriptor = list("tranfers something") //In format of [x] [emote_descriptor] into [container]
var/list/self_emote_descriptor = list("transfer") //In format of You [self_emote_descriptor] some [generated_reagent] into [container]
var/list/random_emote = list() //An emote the person with the implant may be forced to perform after a prob check, such as [X] meows.
var/assigned_proc = /mob/living/carbon/human/proc/use_reagent_implant
/obj/item/weapon/implant/reagent_generator/New()
..()
create_reagents(usable_volume)
/obj/item/weapon/implanter/reagent_generator
var/implant_type = /obj/item/weapon/implant/reagent_generator
/obj/item/weapon/implanter/reagent_generator/New()
..()
imp = new implant_type(src)
update()
return
/obj/item/weapon/implant/reagent_generator/implanted(mob/living/carbon/source)
processing_objects += src
to_chat(source, "<span class='notice'>You implant [source] with \the [src].</span>")
source.verbs |= assigned_proc
return 1
/obj/item/weapon/implant/reagent_generator/process()
var/before_gen
if(imp_in && generated_reagent)
before_gen = reagents.total_volume
if(reagents.total_volume < reagents.maximum_volume)
if(imp_in.nutrition >= gen_cost)
do_generation()
else
return
else
imp_in.verbs -= assigned_proc
return
if(reagents)
if(reagents.total_volume == reagents.maximum_volume * 0.05)
to_chat(imp_in, "<span class='notice'>[pick(empty_message)]</span>")
else if(reagents.total_volume == reagents.maximum_volume && before_gen < reagents.maximum_volume)
to_chat(imp_in, "<span class='warning'>[pick(full_message)]</span>")
/obj/item/weapon/implant/reagent_generator/proc/do_generation()
imp_in.nutrition -= gen_cost
reagents.add_reagent(generated_reagent, gen_amount)
/mob/living/carbon/human/proc/use_reagent_implant()
set name = "Transfer From Reagent Implant"
set desc = "Remove reagents from am internal reagent into a container."
set category = "Object"
set src in view(1)
do_reagent_implant(usr)
/mob/living/carbon/human/proc/do_reagent_implant(var/mob/living/carbon/human/user = usr)
if(!isliving(user) || !user.canClick())
return
if(user.incapacitated() || user.stat > CONSCIOUS)
return
var/obj/item/weapon/reagent_containers/container = user.get_active_hand()
if(!container)
to_chat(user,"<span class='notice'>You need an open container to do this!</span>")
return
var/obj/item/weapon/implant/reagent_generator/rimplant
for(var/I in src.contents)
if(istype(I, /obj/item/weapon/implant/reagent_generator))
rimplant = I
break
if(rimplant)
if(container.reagents.total_volume < container.volume)
var/container_name = container.name
if(rimplant.reagents.trans_to(container, amount = rimplant.transfer_amount))
user.visible_message("<span class='notice'>[usr] [pick(rimplant.emote_descriptor)] into \the [container_name].</span>",
"<span class='notice'>You [pick(rimplant.self_emote_descriptor)] some [rimplant.generated_reagent] into \the [container_name].</span>")
if(prob(5))
src.visible_message("<span class='notice'>[src] [pick(rimplant.random_emote)].</span>") // M-mlem.
if(rimplant.reagents.total_volume == rimplant.reagents.maximum_volume * 0.05)
to_chat(src, "<span class='notice'>[pick(rimplant.empty_message)]</span>")
+1 -1
View File
@@ -130,7 +130,7 @@
. = ..()
if(.)
var/datum/effect/effect/system/spark_spread/spark_system = PoolOrNew(/datum/effect/effect/system/spark_spread)
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
spark_system.set_up(5, 0, user.loc)
spark_system.start()
playsound(user.loc, 'sound/weapons/blade1.ogg', 50, 1)
@@ -126,7 +126,7 @@
new /obj/item/weapon/storage/pill_bottle/dylovene(src)
new /obj/item/weapon/storage/pill_bottle/tramadol(src)
new /obj/item/weapon/storage/pill_bottle/spaceacillin(src)
new /obj/item/weapon/reagent_containers/hypospray/autoinjector/clotting(src)
new /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting(src)
new /obj/item/stack/medical/splint(src)
return
@@ -161,7 +161,7 @@
if (empty)
return
for(var/i = 1 to 8)
new /obj/item/weapon/reagent_containers/hypospray/autoinjector/clotting(src)
new /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting(src)
return
/*
@@ -1,30 +1,3 @@
/obj/item/weapon/storage/pill_bottle/dice //7d6
name = "bag of dice"
desc = "It's a small bag with dice inside."
icon = 'icons/obj/dice.dmi'
icon_state = "dicebag"
/obj/item/weapon/storage/pill_bottle/dice/New()
..()
for(var/i = 1 to 7)
new /obj/item/weapon/dice( src )
/obj/item/weapon/storage/pill_bottle/dice_nerd //DnD dice
name = "bag of gaming dice"
desc = "It's a small bag with gaming dice inside."
icon = 'icons/obj/dice.dmi'
icon_state = "magicdicebag"
/obj/item/weapon/storage/pill_bottle/dice_nerd/New()
..()
new /obj/item/weapon/dice/d4( src )
new /obj/item/weapon/dice( src )
new /obj/item/weapon/dice/d8( src )
new /obj/item/weapon/dice/d10( src )
new /obj/item/weapon/dice/d12( src )
new /obj/item/weapon/dice/d20( src )
new /obj/item/weapon/dice/d100( src )
/*
* Donut Box
*/
@@ -28,6 +28,7 @@
new /obj/item/clothing/under/sl_suit(src)
new /obj/item/clothing/under/rank/bartender(src)
new /obj/item/clothing/under/rank/bartender(src)
new /obj/item/clothing/under/rank/bartender/skirt(src)
new /obj/item/clothing/under/dress/dress_saloon(src)
new /obj/item/clothing/accessory/wcoat(src)
new /obj/item/clothing/accessory/wcoat(src)
@@ -97,16 +98,24 @@
new /obj/item/clothing/under/lawyer/female(src)
new /obj/item/clothing/under/lawyer/black(src)
new /obj/item/clothing/under/lawyer/black(src)
new /obj/item/clothing/under/lawyer/black/skirt(src)
new /obj/item/clothing/under/lawyer/black/skirt(src)
new /obj/item/clothing/under/lawyer/red(src)
new /obj/item/clothing/under/lawyer/red(src)
new /obj/item/clothing/under/lawyer/red/skirt(src)
new /obj/item/clothing/under/lawyer/red/skirt(src)
new /obj/item/clothing/suit/storage/toggle/internalaffairs(src)
new /obj/item/clothing/suit/storage/toggle/internalaffairs(src)
new /obj/item/clothing/under/lawyer/bluesuit(src)
new /obj/item/clothing/under/lawyer/bluesuit(src)
new /obj/item/clothing/under/lawyer/bluesuit/skirt(src)
new /obj/item/clothing/under/lawyer/bluesuit/skirt(src)
new /obj/item/clothing/suit/storage/toggle/lawyer/bluejacket(src)
new /obj/item/clothing/suit/storage/toggle/lawyer/bluejacket(src)
new /obj/item/clothing/under/lawyer/purpsuit(src)
new /obj/item/clothing/under/lawyer/purpsuit(src)
new /obj/item/clothing/under/lawyer/purpsuit/skirt(src)
new /obj/item/clothing/under/lawyer/purpsuit/skirt(src)
new /obj/item/clothing/suit/storage/toggle/lawyer/purpjacket(src)
new /obj/item/clothing/suit/storage/toggle/lawyer/purpjacket(src)
new /obj/item/clothing/shoes/brown(src)
@@ -119,5 +128,7 @@
new /obj/item/clothing/glasses/sunglasses/big(src)
new /obj/item/clothing/under/lawyer/blue(src)
new /obj/item/clothing/under/lawyer/blue(src)
new /obj/item/clothing/under/lawyer/blue/skirt(src)
new /obj/item/clothing/under/lawyer/blue/skirt(src)
new /obj/item/device/tape/random(src)
new /obj/item/device/tape/random(src)
@@ -65,7 +65,9 @@
new /obj/item/clothing/under/dress/dress_hr(src)
new /obj/item/clothing/under/lawyer/female(src)
new /obj/item/clothing/under/lawyer/black(src)
new /obj/item/clothing/under/lawyer/black/skirt(src)
new /obj/item/clothing/under/lawyer/red(src)
new /obj/item/clothing/under/lawyer/red/skirt(src)
new /obj/item/clothing/under/lawyer/oldman(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/clothing/shoes/black(src)
@@ -74,6 +76,7 @@
new /obj/item/clothing/under/rank/head_of_personnel_whimsy(src)
new /obj/item/clothing/head/caphat/hop(src)
new /obj/item/clothing/under/gimmick/rank/head_of_personnel/suit(src)
new /obj/item/clothing/under/gimmick/rank/head_of_personnel/suit/skirt(src)
new /obj/item/clothing/glasses/sunglasses(src)
return
@@ -82,6 +82,7 @@
new /obj/item/clothing/under/det/grey/waistcoat(src)
new /obj/item/clothing/under/det/black(src)
new /obj/item/clothing/under/det/black(src)
new /obj/item/clothing/under/det/skirt(src)
new /obj/item/clothing/under/det/corporate(src)
new /obj/item/clothing/under/det/corporate(src)
new /obj/item/clothing/suit/storage/det_trench(src)
@@ -600,17 +601,25 @@
..()
new /obj/item/clothing/under/assistantformal(src)
new /obj/item/clothing/under/suit_jacket/charcoal(src)
new /obj/item/clothing/under/suit_jacket/charcoal/skirt(src)
new /obj/item/clothing/under/suit_jacket/navy(src)
new /obj/item/clothing/under/suit_jacket/navy/skirt(src)
new /obj/item/clothing/under/suit_jacket/burgundy(src)
new /obj/item/clothing/under/suit_jacket/burgundy/skirt(src)
new /obj/item/clothing/under/suit_jacket/checkered(src)
new /obj/item/clothing/under/suit_jacket/checkered/skirt(src)
new /obj/item/clothing/under/suit_jacket/tan(src)
new /obj/item/clothing/under/suit_jacket/tan/skirt(src)
new /obj/item/clothing/under/sl_suit(src)
new /obj/item/clothing/under/suit_jacket(src)
new /obj/item/clothing/under/suit_jacket/female(src)
new /obj/item/clothing/under/suit_jacket/female/skirt(src)
new /obj/item/clothing/under/suit_jacket/really_black(src)
new /obj/item/clothing/under/suit_jacket/really_black/skirt(src)
new /obj/item/clothing/under/suit_jacket/red(src)
new /obj/item/clothing/under/suit_jacket/red/skirt(src)
new /obj/item/clothing/under/scratch(src)
new /obj/item/clothing/under/scratch/skirt(src)
new /obj/item/weapon/storage/backpack/satchel(src)
new /obj/item/weapon/storage/backpack/satchel(src)
return
@@ -637,5 +646,6 @@
new /obj/item/clothing/suit/storage/hooded/wintercoat/captain(src)
new /obj/item/clothing/head/beret/centcom/captain(src)
new /obj/item/clothing/under/gimmick/rank/captain/suit(src)
new /obj/item/clothing/under/gimmick/rank/captain/suit/skirt(src)
new /obj/item/clothing/glasses/sunglasses(src)
return
+4 -4
View File
@@ -97,7 +97,7 @@
if(iswirecutter(W))
if(!shock(user, 100))
playsound(loc, 'sound/items/Wirecutter.ogg', 100, 1)
PoolOrNew(/obj/item/stack/rods, list(get_turf(src), destroyed ? 1 : 2))
new /obj/item/stack/rods(get_turf(src), destroyed ? 1 : 2)
qdel(src)
else if((isscrewdriver(W)) && (istype(loc, /turf/simulated) || anchored))
if(!shock(user, 90))
@@ -152,7 +152,7 @@
else if(!(W.flags & CONDUCT) || !shock(user, 70))
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
user.do_attack_animation(src)
user.do_attack_animation(src)
playsound(loc, 'sound/effects/grillehit.ogg', 80, 1)
switch(W.damtype)
if("fire")
@@ -170,11 +170,11 @@
density = 0
destroyed = 1
update_icon()
PoolOrNew(/obj/item/stack/rods, get_turf(src))
new /obj/item/stack/rods(get_turf(src))
else
if(health <= -6)
PoolOrNew(/obj/item/stack/rods, get_turf(src))
new /obj/item/stack/rods(get_turf(src))
qdel(src)
return
return
+1 -1
View File
@@ -65,7 +65,7 @@
if(WT.welding == 1)
if(WT.remove_fuel(0, user))
user << "<span class='notice'>Slicing lattice joints ...</span>"
PoolOrNew(/obj/item/stack/rods, src.loc)
new /obj/item/stack/rods(src.loc)
qdel(src)
return
if (istype(C, /obj/item/stack/rods))
+3 -3
View File
@@ -182,13 +182,13 @@
spawn(50)
if(src && on)
ismist = 1
mymist = PoolOrNew(/obj/effect/mist,loc)
mymist = new /obj/effect/mist(loc)
else
ismist = 1
mymist = PoolOrNew(/obj/effect/mist,loc)
mymist = new /obj/effect/mist(loc)
else if(ismist)
ismist = 1
mymist = PoolOrNew(/obj/effect/mist,loc)
mymist = new /obj/effect/mist(loc)
spawn(250)
if(src && !on)
qdel(mymist)
+2 -2
View File
@@ -92,11 +92,11 @@
index = 0
while(index < 2)
new shardtype(loc) //todo pooling?
if(reinf) PoolOrNew(/obj/item/stack/rods, loc)
if(reinf) new /obj/item/stack/rods(loc)
index++
else
new shardtype(loc) //todo pooling?
if(reinf) PoolOrNew(/obj/item/stack/rods, loc)
if(reinf) new /obj/item/stack/rods(loc)
qdel(src)
return
@@ -35,7 +35,7 @@
/obj/effect/wingrille_spawn/proc/activate()
if(activated) return
if (!locate(/obj/structure/grille) in get_turf(src))
var/obj/structure/grille/G = PoolOrNew(/obj/structure/grille, src.loc)
var/obj/structure/grille/G = new /obj/structure/grille(src.loc)
handle_grille_spawn(G)
var/list/neighbours = list()
for (var/dir in cardinal)
@@ -49,7 +49,7 @@
found_connection = 1
qdel(W)
if(!found_connection)
var/obj/structure/window/new_win = PoolOrNew(win_path, src.loc)
var/obj/structure/window/new_win = new win_path(src.loc)
new_win.set_dir(dir)
handle_window_spawn(new_win)
else