Merge remote-tracking branch 'upstream/master' into pAI-Drone-Port

This commit is contained in:
DZD
2015-01-07 15:48:29 -05:00
452 changed files with 29149 additions and 40077 deletions
+350 -390
View File
@@ -1,172 +1,135 @@
/* Alien Effects!
/* Alien shit!
* Contains:
* effect/alien
* structure/alien
* Resin
* Weeds
* Acid
* Egg
* effect/acid
*/
/*
* effect/alien
*/
/obj/effect/alien
name = "alien thing"
desc = "theres something alien about this"
/obj/structure/alien
icon = 'icons/mob/alien.dmi'
// unacidable = 1 //Aliens won't ment their own.
/*
* Resin
*/
/obj/effect/alien/resin
/obj/structure/alien/resin
name = "resin"
desc = "Looks like some kind of slimy growth."
desc = "Looks like some kind of thick resin."
icon_state = "resin"
density = 1
opacity = 1
anchored = 1
var/health = 200
var/turf/linked_turf
wall
name = "resin wall"
desc = "Purple slime solidified into a wall."
icon_state = "resinwall" //same as resin, but consistency ho!
membrane
name = "resin membrane"
desc = "Purple slime just thin enough to let light pass through."
icon_state = "resinmembrane"
opacity = 0
health = 120
/obj/effect/alien/resin/New()
var/resintype = null
/obj/structure/alien/resin/New(location)
relativewall_neighbours()
..()
linked_turf = get_turf(src)
linked_turf.thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT
/obj/effect/alien/resin/Destroy()
if(linked_turf)
linked_turf.thermal_conductivity = initial(linked_turf.thermal_conductivity)
..()
/obj/effect/alien/resin/proc/healthcheck()
if(health <=0)
density = 0
qdel(src)
return
/obj/effect/alien/resin/bullet_act(var/obj/item/projectile/Proj)
/obj/structure/alien/resin/Destroy()
var/turf/T = loc
loc = null
T.relativewall_neighbours()
..()
/obj/structure/alien/resin/Move()
..()
/obj/structure/alien/resin/wall
name = "resin wall"
desc = "Thick resin solidified into a wall."
icon_state = "wall0" //same as resin, but consistency ho!
resintype = "wall"
/obj/structure/alien/resin/wall/New()
relativewall_neighbours()
..()
/obj/structure/alien/resin/membrane
name = "resin membrane"
desc = "Resin just thin enough to let light pass through."
icon_state = "membrane0"
opacity = 0
health = 120
resintype = "membrane"
/obj/structure/alien/resin/membrane/New()
relativewall_neighbours()
..()
/obj/structure/alien/resin/proc/healthcheck()
if(health <=0)
del(src)
/obj/structure/alien/resin/bullet_act(obj/item/projectile/Proj)
health -= Proj.damage
..()
healthcheck()
return
/obj/effect/alien/resin/ex_act(severity)
/obj/structure/alien/resin/ex_act(severity, target)
switch(severity)
if(1.0)
health-=50
health -= 150
if(2.0)
health-=50
health -= 100
if(3.0)
if (prob(50))
health-=50
else
health-=25
health -= 50
healthcheck()
return
/obj/effect/alien/resin/blob_act()
health-=50
/obj/structure/alien/resin/blob_act()
health -= 50
healthcheck()
return
/obj/effect/alien/resin/meteorhit()
health-=50
healthcheck()
return
/obj/effect/alien/resin/hitby(AM as mob|obj)
/obj/structure/alien/resin/hitby(atom/movable/AM)
..()
for(var/mob/O in viewers(src, null))
O.show_message("\red <B>[src] was hit by [AM].</B>", 1)
visible_message("<span class='danger'>[src] was hit by [AM].</span>")
var/tforce = 0
if(ismob(AM))
if(!isobj(AM))
tforce = 10
else
tforce = AM:throwforce
var/obj/O = AM
tforce = O.throwforce
playsound(loc, 'sound/effects/attackblob.ogg', 100, 1)
health = max(0, health - tforce)
health -= tforce
healthcheck()
..()
return
/obj/effect/alien/resin/attack_hand()
if (M_HULK in usr.mutations)
usr << "\blue You easily destroy the [name]."
for(var/mob/O in oviewers(src))
O.show_message("\red [usr] destroys the [name]!", 1)
/obj/structure/alien/resin/attack_hand(mob/living/user)
if(M_HULK in user.mutations)
user.visible_message("<span class='danger'>[user] destroys [src]!</span>")
health = 0
else
usr << "\blue You claw at the [name]."
for(var/mob/O in oviewers(src))
O.show_message("\red [usr] claws at the [name]!", 1)
health -= rand(5,10)
healthcheck()
return
healthcheck()
/obj/effect/alien/resin/attack_paw()
return attack_hand()
/obj/effect/alien/resin/attack_alien()
if (islarva(usr))//Safety check for larva. /N
/obj/structure/alien/resin/attack_paw(mob/user)
return attack_hand(user)
/obj/structure/alien/resin/attack_alien(mob/living/user)
if(islarva(user))
return
usr << "\green You claw at the [name]."
for(var/mob/O in oviewers(src))
O.show_message("\red [usr] claws at the resin!", 1)
user.visible_message("<span class='danger'>[user] claws at the resin!</span>")
playsound(loc, 'sound/effects/attackblob.ogg', 100, 1)
health -= rand(40, 60)
health -= 50
if(health <= 0)
usr << "\green You slice the [name] to pieces."
for(var/mob/O in oviewers(src))
O.show_message("\red [usr] slices the [name] apart!", 1)
user.visible_message("<span class='danger'>[user] slices the [name] apart!</span>")
healthcheck()
return
/obj/effect/alien/resin/attackby(obj/item/weapon/W as obj, mob/user as mob)
/*if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2)
var/obj/item/weapon/grab/G = W
if(isalien(user)&&(ishuman(G.affecting)||ismonkey(G.affecting)))
//Only aliens can stick humans and monkeys into resin walls. Also, the wall must not have a person inside already.
if(!affecting)
if(G.state<2)
user << "\red You need a better grip to do that!"
return
G.affecting.loc = src
G.affecting.paralysis = 10
for(var/mob/O in viewers(world.view, src))
if (O.client)
O << text("\green [] places [] in the resin wall!", G.assailant, G.affecting)
affecting=G.affecting
del(W)
spawn(0)
process()
else
user << "\red This wall is already occupied."
return */
var/aforce = W.force
health = max(0, health - aforce)
/obj/structure/alien/resin/attackby(obj/item/I, mob/living/user)
health -= I.force
playsound(loc, 'sound/effects/attackblob.ogg', 100, 1)
healthcheck()
..()
return
/obj/effect/alien/resin/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(air_group) return 0
/obj/structure/alien/resin/CanPass(atom/movable/mover, turf/target, height=0)
if(istype(mover) && mover.checkpass(PASSGLASS))
return !opacity
return !density
@@ -175,130 +138,232 @@
/*
* Weeds
*/
#define NODERANGE 3
/obj/effect/alien/weeds
name = "weeds"
desc = "Weird purple weeds."
/obj/structure/alien/weeds
gender = PLURAL
name = "resin floor"
desc = "A thick resin surface covers the floor."
icon_state = "weeds"
anchored = 1
density = 0
layer = 2
var/health = 15
var/obj/effect/alien/weeds/node/linked_node = null
var/obj/structure/alien/weeds/node/linked_node = null
/obj/effect/alien/weeds/Destroy()
if(linked_node)
linked_node.connected_weeds.Remove(src)
linked_node = null
/obj/structure/alien/weeds/New(pos, node)
..()
/obj/effect/alien/weeds/node
icon_state = "weednode"
name = "purple sac"
desc = "Weird purple octopus-like thing."
layer = 3
luminosity = NODERANGE
var/node_range = NODERANGE
var/list/obj/effect/alien/weeds/connected_weeds
/obj/effect/alien/weeds/node/Destroy()
for(var/obj/effect/alien/weeds/W in connected_weeds)
W.linked_node = null
..()
/obj/effect/alien/weeds/node/New()
connected_weeds = new()
..(src.loc, src)
/obj/effect/alien/weeds/New(pos, var/obj/effect/alien/weeds/node/N)
..()
linked_node = node
if(istype(loc, /turf/space))
qdel(src)
del(src)
return
linked_node = N
if(linked_node)
linked_node.connected_weeds.Add(src)
if(icon_state == "weeds")icon_state = pick("weeds", "weeds1", "weeds2")
if(icon_state == "weeds")
icon_state = pick("weeds", "weeds1", "weeds2")
fullUpdateWeedOverlays()
spawn(rand(150, 200))
if(src)
Life()
return
/obj/effect/alien/weeds/proc/Life()
//set background = 1
/obj/structure/alien/weeds/Destroy()
var/turf/T = loc
loc = null
for (var/obj/structure/alien/weeds/W in range(1,T))
W.updateWeedOverlays()
..()
/obj/structure/alien/weeds/proc/Life()
set background = BACKGROUND_ENABLED
var/turf/U = get_turf(src)
/*
if (locate(/obj/movable, U))
U = locate(/obj/movable, U)
if(U.density == 1)
del(src)
return
Alien plants should do something if theres a lot of poison
if(U.poison> 200000)
health -= round(U.poison/200000)
update()
return
*/
if (istype(U, /turf/space))
if(istype(U, /turf/space))
del(src)
return
if(!linked_node || (get_dist(linked_node, src) > linked_node.node_range) )
return
direction_loop:
for(var/dirn in cardinal)
var/turf/T = get_step(src, dirn)
if (!istype(T) || T.density || locate(/obj/effect/alien/weeds) in T || istype(T.loc, /area/arrival) || istype(T, /turf/space))
if (!istype(T) || T.density || locate(/obj/structure/alien/weeds) in T || istype(T, /turf/space))
continue
// if (locate(/obj/movable, T)) // don't propogate into movables
// continue
if(!linked_node || get_dist(linked_node, src) > linked_node.node_range)
return
for(var/obj/O in T)
if(O.density)
continue direction_loop
new /obj/effect/alien/weeds(T, linked_node)
new /obj/structure/alien/weeds(T, linked_node)
/obj/effect/alien/weeds/ex_act(severity)
switch(severity)
if(1.0)
qdel(src)
if(2.0)
if (prob(50))
qdel(src)
if(3.0)
if (prob(5))
qdel(src)
return
/obj/structure/alien/weeds/ex_act(severity, target)
del(src)
/obj/effect/alien/weeds/fire_act(null, temperature, volume)
if(temperature > T0C+200)
health -= 1 * temperature
/obj/structure/alien/weeds/attackby(obj/item/I, mob/user)
if(I.attack_verb.len)
visible_message("<span class='danger'>[user] has [pick(I.attack_verb)] [src] with [I]!</span>")
else
visible_message("<span class='danger'>[user] has attacked [src] with [I]!</span>")
var/damage = I.force / 4.0
if(istype(I, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = I
if(WT.remove_fuel(0, user))
damage = 15
playsound(loc, 'sound/items/Welder.ogg', 100, 1)
health -= damage
healthcheck()
/obj/structure/alien/weeds/proc/healthcheck()
if(health <= 0)
del(src)
/obj/structure/alien/weeds/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(exposed_temperature > 300)
health -= 5
healthcheck()
/obj/structure/alien/weeds/proc/updateWeedOverlays()
/obj/effect/alien/weeds/attackby(var/obj/item/weapon/W, var/mob/user)
if(W.attack_verb.len)
visible_message("\red <B>\The [src] have been [pick(W.attack_verb)] with \the [W][(user ? " by [user]." : ".")]")
overlays.Cut()
var/turf/N = get_step(src, NORTH)
var/turf/S = get_step(src, SOUTH)
var/turf/E = get_step(src, EAST)
var/turf/W = get_step(src, WEST)
if(!locate(/obj/structure/alien) in N.contents)
if(istype(N, /turf/simulated/floor))
src.overlays += image('icons/mob/alien.dmi', "weeds_side_s", layer=2, pixel_y = 32)
if(!locate(/obj/structure/alien) in S.contents)
if(istype(S, /turf/simulated/floor))
src.overlays += image('icons/mob/alien.dmi', "weeds_side_n", layer=2, pixel_y = -32)
if(!locate(/obj/structure/alien) in E.contents)
if(istype(E, /turf/simulated/floor))
src.overlays += image('icons/mob/alien.dmi', "weeds_side_w", layer=2, pixel_x = 32)
if(!locate(/obj/structure/alien) in W.contents)
if(istype(W, /turf/simulated/floor))
src.overlays += image('icons/mob/alien.dmi', "weeds_side_e", layer=2, pixel_x = -32)
/obj/structure/alien/weeds/proc/fullUpdateWeedOverlays()
for (var/obj/structure/alien/weeds/W in range(1,src))
W.updateWeedOverlays()
//Weed nodes
/obj/structure/alien/weeds/node
name = "glowing resin"
desc = "Blue bioluminescence shines from beneath the surface."
icon_state = "weednode"
luminosity = 1
var/node_range = NODERANGE
/obj/structure/alien/weeds/node/New()
..(loc, src)
#undef NODERANGE
/*
* Egg
*/
//for the status var
#define BURST 0
#define BURSTING 1
#define GROWING 2
#define GROWN 3
#define MIN_GROWTH_TIME 1800 //time it takes to grow a hugger
#define MAX_GROWTH_TIME 3000
/obj/structure/alien/egg
name = "egg"
desc = "A large mottled egg."
icon_state = "egg_growing"
density = 0
anchored = 1
var/health = 100
var/status = GROWING //can be GROWING, GROWN or BURST; all mutually exclusive
/obj/structure/alien/egg/New()
new /obj/item/clothing/mask/facehugger(src)
..()
spawn(rand(MIN_GROWTH_TIME, MAX_GROWTH_TIME))
Grow()
/obj/structure/alien/egg/attack_paw(mob/user)
if(isalien(user))
switch(status)
if(BURST)
user << "<span class='notice'>You clear the hatched egg.</span>"
playsound(loc, 'sound/effects/attackblob.ogg', 100, 1)
del(src)
return
if(GROWING)
user << "<span class='notice'>The child is not developed yet.</span>"
return
if(GROWN)
user << "<span class='notice'>You retrieve the child.</span>"
Burst(0)
return
else
visible_message("\red <B>\The [src] have been attacked with \the [W][(user ? " by [user]." : ".")]")
return attack_hand(user)
var/damage = W.force / 4.0
if(istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
/obj/structure/alien/egg/attack_hand(mob/user)
user << "<span class='notice'>It feels slimy.</span>"
/obj/structure/alien/egg/proc/GetFacehugger()
return locate(/obj/item/clothing/mask/facehugger) in contents
/obj/structure/alien/egg/proc/Grow()
icon_state = "egg"
status = GROWN
/obj/structure/alien/egg/proc/Burst(var/kill = 1) //drops and kills the hugger if any is remaining
if(status == GROWN || status == GROWING)
icon_state = "egg_hatched"
flick("egg_opening", src)
status = BURSTING
spawn(15)
status = BURST
var/obj/item/clothing/mask/facehugger/child = GetFacehugger()
if(child)
child.loc = get_turf(src)
if(kill && istype(child))
child.Die()
else
for(var/mob/M in range(1,src))
if(CanHug(M))
child.Attach(M)
break
/obj/structure/alien/egg/bullet_act(obj/item/projectile/Proj)
health -= Proj.damage
..()
healthcheck()
/obj/structure/alien/egg/attackby(obj/item/I, mob/user)
if(I.attack_verb.len)
visible_message("<span class='danger'>[user] has [pick(I.attack_verb)] [src] with [I]!</span>")
else
visible_message("<span class='danger'>[user] has attacked [src] with [I]!</span>")
var/damage = I.force / 4
if(istype(I, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = I
if(WT.remove_fuel(0, user))
damage = 15
@@ -307,204 +372,22 @@ Alien plants should do something if theres a lot of poison
health -= damage
healthcheck()
/obj/effect/alien/weeds/proc/healthcheck()
/obj/structure/alien/egg/proc/healthcheck()
if(health <= 0)
qdel(src)
if(status != BURST && status != BURSTING)
Burst()
else if(status == BURST && prob(50))
del(src) //Remove the egg after it has been hit after bursting.
/obj/effect/alien/weeds/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(exposed_temperature > 300)
health -= 5
healthcheck()
/*/obj/effect/alien/weeds/burn(fi_amount)
if (fi_amount > 18000)
spawn( 0 )
del(src)
return
return 0
return 1
*/
#undef NODERANGE
/*
* Acid
*/
/obj/effect/alien/acid
name = "acid"
desc = "Burbling corrossive stuff. I wouldn't want to touch it."
icon_state = "acid"
density = 0
opacity = 0
anchored = 1
var/atom/target
var/ticks = 0
var/target_strength = 0
/obj/effect/alien/acid/New(loc, target)
..(loc)
src.target = target
if(isturf(target)) // Turf take twice as long to take down.
target_strength = 8
else
target_strength = 4
tick()
/obj/effect/alien/acid/proc/tick()
if(!target)
del(src)
ticks += 1
if(ticks >= target_strength)
for(var/mob/O in hearers(src, null))
O.show_message("\green <B>[src.target] collapses under its own weight into a puddle of goop and undigested debris!</B>", 1)
if(istype(target, /turf/simulated/wall)) // I hate turf code.
var/turf/simulated/wall/W = target
W.dismantle_wall(1)
else
del(target)
del(src)
return
switch(target_strength - ticks)
if(6)
visible_message("\green <B>[src.target] is holding up against the acid!</B>")
if(4)
visible_message("\green <B>[src.target]\s structure is being melted by the acid!</B>")
if(2)
visible_message("\green <B>[src.target] is struggling to withstand the acid!</B>")
if(0 to 1)
visible_message("\green <B>[src.target] begins to crumble under the acid!</B>")
spawn(rand(150, 200)) tick()
/*
* Egg
*/
/var/const //for the status var
BURST = 0
BURSTING = 1
GROWING = 2
GROWN = 3
MIN_GROWTH_TIME = 1800 //time it takes to grow a hugger
MAX_GROWTH_TIME = 3000
/obj/effect/alien/egg
desc = "It looks like a weird egg"
name = "egg"
icon_state = "egg_growing"
density = 0
anchored = 1
var/health = 100
var/status = GROWING //can be GROWING, GROWN or BURST; all mutually exclusive
New()
if(aliens_allowed)
..()
spawn(rand(MIN_GROWTH_TIME,MAX_GROWTH_TIME))
Grow()
else
del(src)
attack_paw(user as mob)
if(isalien(user))
switch(status)
if(BURST)
user << "\red You clear the hatched egg."
del(src)
return
if(GROWING)
user << "\red The child is not developed yet."
return
if(GROWN)
user << "\red You retrieve the child."
Burst(0)
return
else
return attack_hand(user)
attack_hand(user as mob)
user << "It feels slimy."
return
proc/GetFacehugger()
return locate(/mob/living/carbon/alien/facehugger) in contents
proc/Grow()
icon_state = "egg"
status = GROWN
new /mob/living/carbon/alien/facehugger(src)
return
proc/Burst(var/kill = 1) //drops and kills the hugger if any is remaining
if(status == GROWN || status == GROWING)
var/mob/living/carbon/alien/facehugger/child = GetFacehugger()
icon_state = "egg_hatched"
flick("egg_opening", src)
status = BURSTING
spawn(15)
status = BURST
if(!child)
src.visible_message("\red The egg bursts apart revealing nothing")
status = "GROWN"
new /obj/effect/decal/cleanable/xenoblood(src)
loc.contents += child//need to write the code for giving it to the alien later
if(kill && istype(child))
child.death()
else
child.cancel_camera()
for(var/mob/M in range(1,src))
if(CanHug(M))
child.Attach(M)
break
/obj/effect/alien/egg/bullet_act(var/obj/item/projectile/Proj)
health -= Proj.damage
..()
healthcheck()
return
/obj/effect/alien/egg/attackby(var/obj/item/weapon/W, var/mob/user)
if(health <= 0)
return
if(W.attack_verb.len)
src.visible_message("\red <B>\The [src] has been [pick(W.attack_verb)] with \the [W][(user ? " by [user]." : ".")]")
else
src.visible_message("\red <B>\The [src] has been attacked with \the [W][(user ? " by [user]." : ".")]")
var/damage = W.force / 4.0
if(istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
if(WT.remove_fuel(0, user))
damage = 15
playsound(get_turf(src), 'sound/items/Welder.ogg', 100, 1)
src.health -= damage
src.healthcheck()
/obj/effect/alien/egg/proc/healthcheck()
if(health <= 0)
Burst()
/obj/effect/alien/egg/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
/obj/structure/alien/egg/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(exposed_temperature > 500)
health -= 5
healthcheck()
/obj/effect/alien/egg/HasProximity(atom/movable/AM as mob|obj)
/obj/structure/alien/egg/HasProximity(atom/movable/AM)
if(status == GROWN)
if(!CanHug(AM))
return
@@ -514,3 +397,80 @@ Alien plants should do something if theres a lot of poison
return
Burst(0)
#undef BURST
#undef BURSTING
#undef GROWING
#undef GROWN
#undef MIN_GROWTH_TIME
#undef MAX_GROWTH_TIME
/*
* Acid
*/
/obj/effect/acid
gender = PLURAL
name = "acid"
desc = "Burbling corrossive stuff."
icon = 'icons/effects/effects.dmi'
icon_state = "acid"
density = 0
opacity = 0
anchored = 1
unacidable = 1
var/atom/target
var/ticks = 0
var/target_strength = 0
/obj/effect/acid/New(loc, targ)
..(loc)
target = targ
//handle APCs and newscasters and stuff nicely
pixel_x = target.pixel_x
pixel_y = target.pixel_y
if(isturf(target)) //Turfs take twice as long to take down.
target_strength = 640
else
target_strength = 320
tick()
/obj/effect/acid/proc/tick()
if(!target)
del(src)
ticks++
if(ticks >= target_strength)
target.visible_message("<span class='warning'>[target] collapses under its own weight into a puddle of goop and undigested debris!</span>")
if(istype(target, /turf/simulated/wall))
var/turf/simulated/wall/W = target
W.dismantle_wall(1)
else
del(target)
del(src)
return
x = target.x
y = target.y
z = target.z
switch(target_strength - ticks)
if(480)
visible_message("<span class='warning'>[target] is holding up against the acid!</span>")
if(320)
visible_message("<span class='warning'>[target] is being melted by the acid!</span>")
if(160)
visible_message("<span class='warning'>[target] is struggling to withstand the acid!</span>")
if(80)
visible_message("<span class='warning'>[target] begins to crumble under the acid!</span>")
spawn(1)
if(src)
tick()
+5
View File
@@ -17,6 +17,11 @@
anchored = 1
layer = 50
/obj/effect/decal/chempuff
name = "chemicals"
icon = 'icons/obj/chempuff.dmi'
pass_flags = PASSTABLE | PASSGRILLE
/obj/effect/decal/snow
name="snow"
density=0
@@ -165,6 +165,8 @@ steam.start() -- spawns the effect
if (istype(T, /turf))
T.hotspot_expose(1000, 100)
spawn (100)
delete()
/obj/effect/effect/sparks/Destroy()
var/turf/T = src.loc
+1 -1
View File
@@ -166,7 +166,7 @@
del(src)
/obj/effect/landmark/costume/scratch/New()
new /obj/item/clothing/gloves/white(src.loc)
new /obj/item/clothing/gloves/color/white(src.loc)
new /obj/item/clothing/shoes/white(src.loc)
new /obj/item/clothing/under/scratch(src.loc)
if (prob(30))
+1 -1
View File
@@ -455,7 +455,7 @@
if(!disable_warning)
usr << "You somehow have a suit with no defined allowed items for suit storage, stop that."
return 0
if(src.w_class > 3)
if(src.w_class > 4)
if(!disable_warning)
usr << "The [name] is too big to attach."
return 0
@@ -1,36 +0,0 @@
// Bluespace crystals, used in telescience and when crushed it will blink you to a random turf.
/obj/item/bluespace_crystal
name = "bluespace crystal"
desc = "A glowing bluespace crystal, not much is known about how they work. It looks very delicate."
icon = 'icons/obj/telescience.dmi'
icon_state = "bluespace_crystal"
w_class = 1
origin_tech = "bluespace=4;materials=3"
var/blink_range = 8 // The teleport range when crushed/thrown at someone.
/obj/item/bluespace_crystal/New()
..()
pixel_x = rand(-5, 5)
pixel_y = rand(-5, 5)
/obj/item/bluespace_crystal/attack_self(var/mob/user)
blink_mob(user)
user.drop_item()
user.visible_message("<span class='notice'>[user] crushes the [src]!</span>")
qdel(src)
/obj/item/bluespace_crystal/proc/blink_mob(var/mob/living/L)
do_teleport(L, get_turf(L), blink_range, asoundin = 'sound/effects/phasein.ogg')
/obj/item/bluespace_crystal/throw_impact(atom/hit_atom)
..()
if(isliving(hit_atom))
blink_mob(hit_atom)
qdel(src)
// Artifical bluespace crystal, doesn't give you much research.
/obj/item/bluespace_crystal/artificial
name = "artificial bluespace crystal"
desc = "An artificially made bluespace crystal, it looks delicate."
origin_tech = "bluespace=2"
blink_range = 4 // Not as good as the organic stuff!
@@ -129,6 +129,22 @@ var/global/list/obj/item/device/pda/PDAs = list()
icon_state = "pda-captain"
detonate = 0
//toff = 1
/obj/item/device/pda/heads/ntrep
default_cartridge = /obj/item/weapon/cartridge/supervisor
icon_state = "pda-h"
/obj/item/device/pda/heads/ntrec
default_cartridge = /obj/item/weapon/cartridge/supervisor
icon_state = "pda-h"
/obj/item/device/pda/heads/magistrate
default_cartridge = /obj/item/weapon/cartridge/supervisor
icon_state = "pda-h"
/obj/item/device/pda/heads/blueshield
default_cartridge = /obj/item/weapon/cartridge/hos
icon_state = "pda-h"
/obj/item/device/pda/cargo
default_cartridge = /obj/item/weapon/cartridge/quartermaster
@@ -192,6 +208,10 @@ var/global/list/obj/item/device/pda/PDAs = list()
/obj/item/device/pda/geneticist
default_cartridge = /obj/item/weapon/cartridge/medical
icon_state = "pda-genetics"
/obj/item/device/pda/centcom
default_cartridge = /obj/item/weapon/cartridge/centcom
icon_state = "pda-h"
// Special AI/pAI PDAs that cannot explode.
@@ -196,6 +196,35 @@
access_reagent_scanner = 1
access_status_display = 1
access_atmos = 1
/obj/item/weapon/cartridge/captain/New()
..()
spawn(5)
radio = new /obj/item/radio/integrated/beepsky(src)
/obj/item/weapon/cartridge/supervisor
name = "Easy-Record DELUXE"
icon_state = "cart-h"
access_status_display = 1
access_security = 1
/obj/item/weapon/cartridge/centcom
name = "Value-PAK Cartridge"
desc = "Now with 200% more value!"
icon_state = "cart-c"
access_quartermaster = 1
access_janitor = 1
access_engine = 1
access_security = 1
access_medical = 1
access_reagent_scanner = 1
access_status_display = 1
access_atmos = 1
/obj/item/weapon/cartridge/centcom/New()
..()
spawn(5)
radio = new /obj/item/radio/integrated/beepsky(src)
/obj/item/weapon/cartridge/syndicate
name = "Detomatix Cartridge"
+6 -3
View File
@@ -18,7 +18,6 @@
/obj/item/device/flash/proc/clown_check(mob/user)
if(user && (M_CLUMSY in user.mutations) && prob(50))
flash_carbon(user, user, 15, 0)
user.visible_message("<span class='disarm'>[user] blinds [user] with the flash!</span>")
return 0
return 1
@@ -42,7 +41,7 @@
times_used = max(0, times_used) //sanity
/obj/item/device/flash/proc/try_use_flash(var/mob/user)
/obj/item/device/flash/proc/try_use_flash(var/mob/user = null)
flash_recharge(user)
if(broken)
@@ -67,6 +66,11 @@
if(user && convert)
terrible_conversion_proc(M, user)
M.Stun(1)
user.visible_message("<span class='disarm'>[user] blinds [M] with the flash!</span>")
return 1
else
user.visible_message("<span class='disarm'>[user] fails to blind [M] with the flash!</span>")
return 0
/obj/item/device/flash/attack(mob/living/M, mob/user)
if(!try_use_flash(user))
@@ -74,7 +78,6 @@
if(iscarbon(M))
flash_carbon(M, user, 5, 1)
user.visible_message("<span class='disarm'>[user] blinds [M] with the flash!</span>")
return 1
else if(issilicon(M))
-84
View File
@@ -1,84 +0,0 @@
var/list/sps_list = list()
/obj/item/device/sps
name = "space positioning system"
desc = "Helping lost spacemen find their way through the planets since 2016."
icon = 'icons/obj/telescience.dmi'
icon_state = "gps-c"
w_class = 2.0
slot_flags = SLOT_BELT
origin_tech = "materials=2;magnets=3;bluespace=2"
var/spstag = "COM0"
var/emped = 0
var/turf/locked_location
/obj/item/device/sps/New()
..()
sps_list.Add(src)
name = "space positioning system ([spstag])"
overlays += "working"
/obj/item/device/sps/Destroy()
sps_list.Remove(src)
..()
/obj/item/device/sps/emp_act(severity)
emped = 1
overlays -= "working"
overlays += "emp"
spawn(300)
emped = 0
overlays -= "emp"
overlays += "working"
/obj/item/device/sps/attack_self(mob/user as mob)
var/obj/item/device/sps/t = ""
var/sps_window_height = 110 + sps_list.len * 20 // Variable window height, depending on how many sps units there are to show
if(emped)
t += "ERROR"
else
t += "<A href='?src=\ref[src];tag=1'>Set Tag</A><A href='?src=\ref[src];refresh=1'>Refresh</A>"
t += "<BR>Tag: [spstag]"
if(locked_location && locked_location.loc)
t += "<BR>Bluespace coordinates saved: [locked_location.loc]"
sps_window_height += 20
for(var/obj/item/device/sps/G in sps_list)
var/turf/pos = get_turf(G)
var/area/sps_area = get_area(G)
var/tracked_spstag = G.spstag
if(G.emped == 1)
t += "<BR>[tracked_spstag]: ERROR"
else
t += "<BR>[tracked_spstag]: [format_text(sps_area.name)] ([pos.x], [pos.y], [pos.z])"
var/datum/browser/popup = new(user, "sps", name, 360, min(sps_window_height, 800))
popup.set_content(t)
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
popup.open()
/obj/item/device/sps/Topic(href, href_list)
..()
if(href_list["tag"] )
var/a = input("Please enter desired tag.", name, spstag) as text
a = uppertext(copytext(sanitize(a), 1, 5))
if(src.loc == usr)
spstag = a
name = "space positioning system ([spstag])"
attack_self(usr)
if(href_list["refresh"] )
if(src.loc == usr)
attack_self(usr)
/obj/item/device/sps/science
icon_state = "gps-s"
spstag = "SCI0"
/obj/item/device/sps/engineering
icon_state = "gps-e"
spstag = "ENG0"
/obj/item/device/sps/mining
icon_state = "gps-m"
spstag = "MINE0"
desc = "A positioning system helpful for rescuing trapped or injured miners, keeping one on you at all times while mining might just save your life."
@@ -107,7 +107,7 @@
M.Weaken(10)
if(master && wires & 1)
if(master)
master.receive_signal()
return
@@ -19,123 +19,130 @@
icon_state = "cypherkey"
channels = list("Syndicate" = 1)
origin_tech = "syndicate=3"
syndie = 1//Signifies that it de-crypts Syndicate transmissions
syndie = 1 //Signifies that it de-crypts Syndicate transmissions
/obj/item/device/encryptionkey/syndicate/hacked
name = "Standard Encryption Key"
desc = "An encryption key for a radio headset. Has no special codes in it. Looks more sophisticated than usual."
channels = list("Command" = 0, "Security" = 0, "Engineering" = 0, "Science" = 0, "Medical" = 0, "Supply" = 0)
desc = "An encryption key for a radio headset. Has no special codes in it. Looks more sophisticated than usual."
channels = list("Command" = 0, "Security" = 0, "Engineering" = 0, "Science" = 0, "Medical" = 0, "Supply" = 0, "Service" = 0, "Syndicate" = 1)
origin_tech = "syndicate=3"
syndie = 1
/obj/item/device/encryptionkey/binary
name = "binary translator key"
desc = "An encryption key for a radio headset. To access the binary channel, use :b."
icon_state = "cypherkey"
translate_binary = 1
origin_tech = "syndicate=3"
/obj/item/device/encryptionkey/headset_sec
name = "Security Radio Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "sec_cypherkey"
channels = list("Security" = 1)
/obj/item/device/encryptionkey/headset_eng
name = "Engineering Radio Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "eng_cypherkey"
channels = list("Engineering" = 1)
/obj/item/device/encryptionkey/headset_rob
name = "Robotics Radio Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "rob_cypherkey"
channels = list("Engineering" = 1, "Science" = 1)
/obj/item/device/encryptionkey/headset_med
name = "Medical Radio Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "med_cypherkey"
channels = list("Medical" = 1)
/obj/item/device/encryptionkey/headset_sci
name = "Science Radio Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "sci_cypherkey"
channels = list("Science" = 1)
/obj/item/device/encryptionkey/headset_medsci
name = "Medical Research Radio Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "medsci_cypherkey"
channels = list("Medical" = 1, "Science" = 1)
/obj/item/device/encryptionkey/headset_com
name = "Command Radio Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "com_cypherkey"
channels = list("Command" = 1)
/obj/item/device/encryptionkey/heads/captain
name = "Captain's Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "cap_cypherkey"
channels = list("Command" = 1, "Security" = 1, "Engineering" = 0, "Science" = 0, "Medical" = 0, "Supply" = 0, "Service" = 0)
/obj/item/device/encryptionkey/heads/rd
name = "Research Director's Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "rd_cypherkey"
channels = list("Science" = 1, "Command" = 1)
/obj/item/device/encryptionkey/heads/hos
name = "Head of Security's Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "hos_cypherkey"
channels = list("Security" = 1, "Command" = 1)
/obj/item/device/encryptionkey/heads/ce
name = "Chief Engineer's Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "ce_cypherkey"
channels = list("Engineering" = 1, "Command" = 1)
/obj/item/device/encryptionkey/heads/cmo
name = "Chief Medical Officer's Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "cmo_cypherkey"
channels = list("Medical" = 1, "Command" = 1)
/obj/item/device/encryptionkey/heads/hop
name = "Head of Personnel's Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "hop_cypherkey"
channels = list("Supply" = 1, "Service" = 1, "Command" = 1, "Security" = 0)
channels = list("Supply" = 1, "Service" = 1, "Security" = 0, "Command" = 1)
/obj/item/device/encryptionkey/heads/ntrep
name = "Nanotrasen Representative's Encryption Key"
icon_state = "com_cypherkey"
channels = list("Command" = 1, "Security" = 0, "Engineering" = 0, "Science" = 0, "Medical" = 0, "Supply" = 0, "Service" = 0)
/obj/item/device/encryptionkey/heads/ntrec
name = "Nanotrasen Recruiter's Encryption Key"
icon_state = "com_cypherkey"
channels = list("Command" = 1, "Security" = 0)
/obj/item/device/encryptionkey/heads/magistrate
name = "Magistrate's Encryption Key"
icon_state = "com_cypherkey"
channels = list("Command" = 1, "Security" = 1)
/obj/item/device/encryptionkey/heads/blueshield
name = "Blueshield's Encryption Key"
icon_state = "com_cypherkey"
channels = list("Command" = 1, "Security" = 1)
/*
/obj/item/device/encryptionkey/headset_mine
name = "Mining Radio Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "mine_cypherkey"
channels = list("Mining" = 1)
/obj/item/device/encryptionkey/heads/qm
name = "Quartermaster's Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "qm_cypherkey"
channels = list("Cargo" = 1, "Mining" = 1)
*/
/obj/item/device/encryptionkey/headset_cargo
name = "Supply Radio Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "cargo_cypherkey"
channels = list("Supply" = 1)
/obj/item/device/encryptionkey/headset_service
name = "Service Radio Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon_state = "srv_cypherkey"
channels = list("Service" = 1)
/obj/item/device/encryptionkey/ert
name = "Nanotrasen ERT Radio Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
channels = list("Response Team" = 1, "Science" = 1, "Command" = 1, "Medical" = 1, "Engineering" = 1, "Security" = 1, "Supply" = 1, "Service" = 1)
/obj/item/device/encryptionkey/heads/ai_integrated //ported from bay, this goes 'inside' the AI.
@@ -17,7 +17,6 @@
/obj/item/device/radio/headset/New()
..()
keyslot1 = new /obj/item/device/encryptionkey/
recalculateChannels()
@@ -52,119 +51,147 @@
desc = "This is used by your elite security force. To access the security channel, use :s."
icon_state = "sec_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/headset_sec
keyslot1 = new /obj/item/device/encryptionkey/headset_sec
/obj/item/device/radio/headset/headset_eng
name = "engineering radio headset"
desc = "When the engineers wish to chat like girls. To access the engineering channel, use :e. "
icon_state = "eng_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/headset_eng
keyslot1 = new /obj/item/device/encryptionkey/headset_eng
/obj/item/device/radio/headset/headset_rob
name = "robotics radio headset"
desc = "Made specifically for the roboticists who cannot decide between departments. To access the engineering channel, use :e. For research, use :n."
icon_state = "rob_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/headset_rob
keyslot1 = new /obj/item/device/encryptionkey/headset_rob
/obj/item/device/radio/headset/headset_med
name = "medical radio headset"
desc = "A headset for the trained staff of the medbay. To access the medical channel, use :m."
icon_state = "med_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/headset_med
keyslot1 = new /obj/item/device/encryptionkey/headset_med
/obj/item/device/radio/headset/headset_sci
name = "science radio headset"
desc = "A sciency headset. Like usual. To access the science channel, use :n."
icon_state = "sci_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/headset_sci
keyslot1 = new /obj/item/device/encryptionkey/headset_sci
/obj/item/device/radio/headset/headset_medsci
name = "medical research radio headset"
desc = "A headset that is a result of the mating between medical and science. To access the medical channel, use :m. For science, use :n."
icon_state = "medsci_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/headset_medsci
keyslot1 = new /obj/item/device/encryptionkey/headset_medsci
/obj/item/device/radio/headset/headset_com
name = "command radio headset"
desc = "A headset with a commanding channel. To access the command channel, use :c."
icon_state = "com_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/headset_com
keyslot1 = new /obj/item/device/encryptionkey/headset_com
/obj/item/device/radio/headset/heads/captain
name = "captain's headset"
desc = "The headset of the boss. Channels are as follows: :c - command, :s - security, :e - engineering, :u - supply, :z - service, :m - medical, :n - science."
icon_state = "com_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/heads/captain
keyslot1 = new /obj/item/device/encryptionkey/heads/captain
/obj/item/device/radio/headset/heads/rd
name = "Research Director's headset"
desc = "Headset of the researching God. To access the science channel, use :n. For command, use :c."
icon_state = "com_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/heads/rd
keyslot1 = new /obj/item/device/encryptionkey/heads/rd
/obj/item/device/radio/headset/heads/hos
name = "head of security's headset"
desc = "The headset of the man who protects your worthless lifes. To access the security channel, use :s. For command, use :c."
icon_state = "com_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/heads/hos
keyslot1 = new /obj/item/device/encryptionkey/heads/hos
/obj/item/device/radio/headset/heads/ce
name = "chief engineer's headset"
desc = "The headset of the guy who is in charge of morons. To access the engineering channel, use :e. For command, use :c."
icon_state = "com_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/heads/ce
keyslot1 = new /obj/item/device/encryptionkey/heads/ce
/obj/item/device/radio/headset/heads/cmo
name = "chief medical officer's headset"
desc = "The headset of the highly trained medical chief. To access the medical channel, use :m. For command, use :c."
icon_state = "com_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/heads/cmo
keyslot1 = new /obj/item/device/encryptionkey/heads/cmo
/obj/item/device/radio/headset/heads/hop
name = "head of personnel's headset"
desc = "The headset of the guy who will one day be captain. Channels are as follows: :u - supply, :z - service, :c - command, :s - security"
desc = "The headset of the guy who will one day be captain. Channels are as follows: :u - supply, :z - service, :s - security, :c - command."
icon_state = "com_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/heads/hop
keyslot1 = new /obj/item/device/encryptionkey/heads/hop
/*
/obj/item/device/radio/headset/headset_mine
name = "mining radio headset"
desc = "Headset used by miners. How useless. To access the mining channel, use :d."
icon_state = "mine_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/headset_mine
keyslot1 = new /obj/item/device/encryptionkey/headset_mine
/obj/item/device/radio/headset/heads/qm
name = "quartermaster's headset"
desc = "The headset of the man who control your toiletpaper supply. To access the cargo channel, use :q. For mining, use :d."
icon_state = "cargo_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/heads/qm
keyslot1 = new /obj/item/device/encryptionkey/heads/qm
*/
/obj/item/device/radio/headset/headset_cargo
name = "supply radio headset"
desc = "A headset used by the QM and his slaves. To access the supply channel, use :u."
desc = "A headset used by the cargo department. To access the supply channel, use :u."
icon_state = "cargo_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/headset_cargo
keyslot1 = new /obj/item/device/encryptionkey/headset_cargo
/obj/item/device/radio/headset/headset_service
name = "service radio headset"
desc = "Headset used by the service staff, tasked with keeping the station full, happy and clean. To access the service channel, use :z."
icon_state = "srv_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/headset_service
keyslot1 = new /obj/item/device/encryptionkey/headset_service
/obj/item/device/radio/headset/heads/ntrep
name = "nanotrasen representative's headset"
desc = "The headset of the Nanotrasen Representative. Channels are as follows: :c - command, :s - security, :e - engineering, :u - supply, :z - service, :m - medical, :n - science."
icon_state = "com_headset"
item_state = "headset"
keyslot1 = new /obj/item/device/encryptionkey/heads/ntrep
/obj/item/device/radio/headset/heads/ntrec
name = "nanotrasen recruiter's headset"
desc = "The headset of the Nanotrasen Recruiter. Channels are as follows: :c - command, :s - security."
icon_state = "com_headset"
item_state = "headset"
keyslot1 = new /obj/item/device/encryptionkey/heads/ntrec
/obj/item/device/radio/headset/heads/magistrate
name = "magistrate's headset"
desc = "The headset of the Magistrate. Channels are as follows: :c - command, :s - security."
icon_state = "com_headset"
item_state = "headset"
keyslot1 = new /obj/item/device/encryptionkey/heads/magistrate
/obj/item/device/radio/headset/heads/blueshield
name = "blueshield's headset"
desc = "The headset of the Blueshield. Channels are as follows: :c - command, :s - security."
icon_state = "com_headset"
item_state = "headset"
keyslot1 = new /obj/item/device/encryptionkey/heads/blueshield
/obj/item/device/radio/headset/ert
name = "CentCom Response Team headset"
@@ -172,7 +199,7 @@
icon_state = "com_headset"
item_state = "headset"
freerange = 1
keyslot2 = new /obj/item/device/encryptionkey/ert
keyslot1 = new /obj/item/device/encryptionkey/ert
//The below was ported from Baystation.
/obj/item/device/radio/headset/heads/ai_integrated //No need to care about icons, it should be hidden inside the AI anyway.
@@ -223,7 +250,7 @@
user << "You pop out the encryption keys in the headset!"
else
user << "This headset doesn't have any encryption keys! How useless..."
user << "This headset doesn't have any unique encryption keys! How useless..."
if(istype(W, /obj/item/device/encryptionkey/))
if(keyslot1 && keyslot2)
@@ -4,7 +4,7 @@
icon_state = "intercom"
anchored = 1
w_class = 4.0
canhear_range = 2
canhear_range = 5
flags = FPRINT | CONDUCT | TABLEPASS | NOBLOODY
var/number = 0
var/anyai = 1
@@ -196,7 +196,7 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
/obj/item/device/radio/proc/isWireCut(var/index)
return wires.IsIndexCut(index)
/obj/item/device/radio/proc/autosay(var/message, var/from, var/channel) //BS12 EDIT
/obj/item/device/radio/proc/autosay(var/message, var/from, var/channel, var/zlevel = list(1)) //BS12 EDIT
var/datum/radio_frequency/connection = null
if(channel && channels && channels.len > 0)
if (channel == "department")
@@ -215,7 +215,7 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
Broadcast_Message(connection, A,
0, "*garbled automated announcement*", src,
message, from, "Automated Announcement", from, "synthesized voice",
4, 0, list(1), 1459)
4, 0, zlevel, connection.frequency)
del(A)
return
+5 -2
View File
@@ -91,7 +91,8 @@ REAGENT SCANNER
/obj/item/device/healthanalyzer
name = "Health Analyzer"
icon_state = "health"
item_state = "analyzer"
item_state = "healthanalyzer"
icon_override = 'icons/mob/in-hand/tools.dmi'
desc = "A hand-held body scanner able to distinguish vital signs of the subject."
flags = FPRINT | TABLEPASS | CONDUCT
slot_flags = SLOT_BELT
@@ -188,8 +189,10 @@ REAGENT SCANNER
var/datum/data/record/V = virusDB[ID]
user.show_message(text("\red Warning: Pathogen [V.fields["name"]] detected in subject's blood. Known antigen : [V.fields["antigen"]]"))
// user.show_message(text("\red Warning: Unknown pathogen detected in subject's blood."))
if(M.getStaminaLoss())
user.show_message("<span class='info'>Subject appears to be suffering from fatigue.</span>")
if (M.getCloneLoss())
user.show_message("\red Subject appears to have been imperfectly cloned.")
user.show_message("<span class='warning'>Subject appears to have [M.getCloneLoss() > 30 ? "severe" : "minor"] cellular damage.</span>")
// if (M.reagents && M.reagents.get_reagent_amount("inaprovaline"))
// user.show_message("\blue Bloodstream Analysis located [M.reagents:get_reagent_amount("inaprovaline")] units of rejuvenation chemicals.")
if (M.has_brain_worms())
@@ -75,7 +75,8 @@ effective or pretty fucking useless.
/obj/item/device/rad_laser
name = "Health Analyzer"
icon_state = "health"
item_state = "analyzer"
item_state = "healthanalyzer"
icon_override = 'icons/mob/in-hand/tools.dmi'
desc = "A hand-held body scanner able to distinguish vital signs of the subject. A strange microlaser is hooked on to the scanning end."
flags = FPRINT | TABLEPASS | CONDUCT
slot_flags = SLOT_BELT
+16 -22
View File
@@ -12,13 +12,11 @@
/obj/item/stack/medical/attack(mob/living/carbon/M as mob, mob/user as mob)
if (!istype(M))
user << "\red \The [src] cannot be applied to [M]!"
user << "<span class='danger'>\The [src] cannot be applied to [M]!</span>"
return 1
if ( ! (istype(user, /mob/living/carbon/human) || \
istype(user, /mob/living/silicon) || \
istype(user, /mob/living/carbon/monkey) && ticker && ticker.mode.name == "monkey") )
user << "\red You don't have the dexterity to do this!"
if (!(istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon) || istype(user, /mob/living/carbon/monkey) && ticker && ticker.mode.name == "monkey"))
user << "<span class='danger'>You don't have the dexterity to do this!</span>"
return 1
if (istype(M, /mob/living/carbon/human))
@@ -27,33 +25,30 @@
if(affecting.display_name == "head")
if(H.head && istype(H.head,/obj/item/clothing/head/helmet/space))
user << "\red You can't apply [src] through [H.head]!"
user << "<span class='danger'>You can't apply [src] through [H.head]!</span>"
return 1
else
if(H.wear_suit && istype(H.wear_suit,/obj/item/clothing/suit/space))
user << "\red You can't apply [src] through [H.wear_suit]!"
user << "<span class='danger'>You can't apply [src] through [H.wear_suit]!</span>"
return 1
if(affecting.status & ORGAN_ROBOT)
user << "\red This isn't useful at all on a robotic limb.."
user << "<span class='danger'>This can't be used on a robotic limb.</span>"
return 1
if(affecting.status & ORGAN_PEG)
user << "\red This isn't useful at all on a peg limb. It's fucking wood."
user << "<span class='danger'>This can't be used on a peg limb.</span>"
return 1
H.UpdateDamageIcon()
else
M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2))
user.visible_message( \
"\blue [M] has been applied with [src] by [user].", \
"\blue You apply \the [src] to [M]." \
)
user.visible_message("<span class='notice'>[M] has been applied with [src] by [user].</span>","<span class='notice'>You apply \the [src] to [M].</span>")
use(1)
M.updatehealth()
/obj/item/stack/medical/bruise_pack
name = "roll of gauze"
singular_name = "gauze length"
@@ -80,21 +75,19 @@
if (W.current_stage <= W.max_bleeding_stage)
user.visible_message( "\blue [user] bandages \the [W.desc] on [M]'s [affecting.display_name].", \
"\blue You bandage \the [W.desc] on [M]'s [affecting.display_name]." )
//H.add_side_effect("Itch")
else if (istype(W,/datum/wound/bruise))
user.visible_message( "\blue [user] places a bruise patch over \the [W.desc] on [M]'s [affecting.display_name].", \
"\blue You place a bruise patch over \the [W.desc] on [M]'s [affecting.display_name]." )
else
user.visible_message( "\blue [user] places a bandaid over \the [W.desc] on [M]'s [affecting.display_name].", \
"\blue You place a bandaid over \the [W.desc] on [M]'s [affecting.display_name]." )
use(1)
else
if (can_operate(H)) //Checks if mob is lying down on table for surgery
if (do_surgery(H,user,src))
return
else
user << "<span class='notice'>The [affecting.display_name] is cut open, you'll need more than a bandage!</span>"
affecting.heal_damage(src.heal_brute, src.heal_burn, 0)
use(1)
else
M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2))
use(1)
/obj/item/stack/medical/ointment
name = "ointment"
desc = "Used to treat those nasty burns."
@@ -119,6 +112,7 @@
else
user.visible_message( "\blue [user] salves the wounds on [M]'s [affecting.display_name].", \
"\blue You salve the wounds on [M]'s [affecting.display_name]." )
affecting.heal_damage(src.heal_brute, src.heal_burn, 0)
use(1)
else
if (can_operate(H)) //Checks if mob is lying down on table for surgery
@@ -18,7 +18,7 @@
desc = "HOLY SHEET! That is a lot of glass."
singular_name = "glass sheet"
icon_state = "sheet-glass"
g_amt = 3750
g_amt = MINERAL_MATERIAL_AMOUNT
origin_tech = "materials=1"
var/created_window = /obj/structure/window/basic
var/full_window = /obj/structure/window/full/basic
@@ -127,8 +127,8 @@
desc = "Glass which seems to have rods or something stuck in them."
singular_name = "reinforced glass sheet"
icon_state = "sheet-rglass"
g_amt = 3750
m_amt = 1875
g_amt = MINERAL_MATERIAL_AMOUNT
m_amt = MINERAL_MATERIAL_AMOUNT / 2
origin_tech = "materials=2"
var/created_window = /obj/structure/window/reinforced
var/full_window = /obj/structure/window/full/reinforced
@@ -246,7 +246,7 @@
desc = "A very strong and very resistant sheet of a plasma-glass alloy."
singular_name = "glass sheet"
icon_state = "sheet-plasmaglass"
g_amt = 7500
g_amt = MINERAL_MATERIAL_AMOUNT * 2
origin_tech = "materials=3;plasma=2"
var/created_window = /obj/structure/window/plasmabasic
var/full_window = /obj/structure/window/full/plasmabasic
@@ -335,8 +335,8 @@
desc = "Plasma glass which seems to have rods or something stuck in them."
singular_name = "reinforced plasma glass sheet"
icon_state = "sheet-plasmarglass"
g_amt = 7500
m_amt = 1875
g_amt = MINERAL_MATERIAL_AMOUNT * 2
m_amt = MINERAL_MATERIAL_AMOUNT / 2
origin_tech = "materials=4;plasma=2"
var/created_window = /obj/structure/window/plasmareinforced
var/full_window = /obj/structure/window/full/plasmareinforced
@@ -8,7 +8,7 @@
throw_speed = 3
throw_range = 3
attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "smashed")
var/perunit = 3750
var/perunit = MINERAL_MATERIAL_AMOUNT
var/sheettype = null //this is used for girders in the creation of walls/false walls
+8 -8
View File
@@ -161,15 +161,15 @@
return
return
/obj/item/stack/proc/use(var/amount)
src.amount-=amount
if (src.amount<=0)
var/oldsrc = src
src = null //dont kill proc after del()
/obj/item/stack/proc/use(var/used)
if (amount < used)
return 0
amount -= used
if (amount <= 0)
if(usr)
usr.before_take_item(oldsrc)
qdel(oldsrc)
return
usr.before_take_item(src, 1)
qdel(src)
return 1
/obj/item/stack/proc/add_to_stacks(mob/usr as mob)
var/obj/item/stack/oldsrc = src
+14 -14
View File
@@ -6,7 +6,7 @@ RCD
*/
/obj/item/weapon/rcd
name = "rapid-construction-device (RCD)"
desc = "A device used to rapidly build walls/floor."
desc = "A device used to rapidly build and deconstruct walls and floors."
icon = 'icons/obj/items.dmi'
icon_state = "rcd"
opacity = 0
@@ -18,7 +18,7 @@ RCD
throw_speed = 3
throw_range = 5
w_class = 3.0
m_amt = 30000
m_amt = 100000
origin_tech = "engineering=4;materials=2"
var/datum/effect/effect/system/spark_spread/spark_system
var/matter = 0
@@ -29,7 +29,7 @@ RCD
New()
desc = "A RCD. It currently holds [matter]/30 matter-units."
desc = "A RCD. It currently holds [matter]/100 matter-units."
src.spark_system = new /datum/effect/effect/system/spark_spread
spark_system.set_up(5, 0, src)
spark_system.attach(src)
@@ -39,15 +39,15 @@ RCD
attackby(obj/item/weapon/W, mob/user)
..()
if(istype(W, /obj/item/weapon/rcd_ammo))
if((matter + 10) > 30)
if((matter + 20) > 100)
user << "<span class='notice'>The RCD cant hold any more matter-units.</span>"
return
user.drop_item()
del(W)
matter += 10
matter += 20
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
user << "<span class='notice'>The RCD now holds [matter]/30 matter-units.</span>"
desc = "A RCD. It currently holds [matter]/30 matter-units."
user << "<span class='notice'>The RCD now holds [matter]/100 matter-units.</span>"
desc = "A RCD. It currently holds [matter]/100 matter-units."
return
@@ -148,11 +148,11 @@ RCD
return 0
if(istype(A, /obj/machinery/door/airlock))
if(checkResource(10, user))
if(checkResource(20, user))
user << "Deconstructing Airlock..."
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
if(do_after(user, 50))
if(!useResource(10, user)) return 0
if(!useResource(20, user)) return 0
activate()
del(A)
return 1
@@ -166,7 +166,7 @@ RCD
if(matter < amount)
return 0
matter -= amount
desc = "A RCD. It currently holds [matter]/30 matter-units."
desc = "A RCD. It currently holds [matter]/100 matter-units."
return 1
/obj/item/weapon/rcd/proc/checkResource(var/amount, var/mob/user)
@@ -174,17 +174,17 @@ RCD
/obj/item/weapon/rcd/borg/useResource(var/amount, var/mob/user)
if(!isrobot(user))
return 0
return user:cell:use(amount * 30)
return user:cell:use(amount * 160)
/obj/item/weapon/rcd/borg/checkResource(var/amount, var/mob/user)
if(!isrobot(user))
return 0
return user:cell:charge >= (amount * 30)
return user:cell:charge >= (amount * 160)
/obj/item/weapon/rcd/borg/New()
..()
desc = "A device used to rapidly build walls/floor."
canRwall = 0
desc = "A device used to rapidly build and deconstruct walls and floors."
canRwall = 1
/obj/item/weapon/rcd_ammo
name = "compressed matter cartridge"
-59
View File
@@ -1,59 +0,0 @@
/obj/item/weapon/rcs
name = "rapid-crate-sender (RCS)"
desc = "Use this to send crates and closets to cargo telepads."
icon = 'icons/obj/items.dmi'
icon_state = "rcs"
opacity = 0
density = 0
anchored = 0.0
flags = FPRINT | CONDUCT
force = 10.0
throwforce = 10.0
throw_speed = 1
throw_range = 5
var/rcharges = 10
var/obj/machinery/pad = null
var/last_charge = 30
var/mode = 0
var/rand_x = 0
var/rand_y = 0
var/emagged = 0
var/teleporting = 0
/obj/item/weapon/rcs/New()
processing_objects.Add(src)
desc = "Use this to send crates and closets to cargo telepads. There are [rcharges] charges left."
/obj/item/weapon/rcs/Destroy()
processing_objects.Remove(src)
..()
/obj/item/weapon/rcs/process()
if(rcharges > 10)
rcharges = 10
if(last_charge == 0)
rcharges++
desc = "Use this to send crates and closets to cargo telepads. There are [rcharges] charges left."
last_charge = 30
else
last_charge--
/obj/item/weapon/rcs/attack_self(mob/user)
if(emagged)
if(mode == 0)
mode = 1
playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
user << "\red The telepad locator has become uncalibrated."
else
mode = 0
playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
user << "\blue You calibrate the telepad locator."
/obj/item/weapon/rcs/attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/weapon/card/emag) && emagged == 0)
emagged = 1
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, src)
s.start()
user << "\red You emag the RCS. Click on it to toggle between modes."
return
+356 -151
View File
@@ -1,159 +1,364 @@
/obj/item/weapon/melee/defibrilator
name = "emergency defibrilator"
desc = "A handheld emergency defibrilator, used to bring people back from the brink of death or put them there."
icon_state = "defib_full"
item_state = "defib"
flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT
//backpack item
/obj/item/weapon/defibrillator
name = "defibrillator"
desc = "A device that delivers powerful shocks to detachable paddles that resuscitate incapacitated patients."
icon = 'icons/obj/weapons.dmi'
icon_state = "defibunit"
item_state = "defibunit"
icon_override = 'icons/mob/in-hand/tools.dmi'
slot_flags = SLOT_BACK
force = 5
throwforce = 5
w_class = 3
var/emagged = 0
var/charges = 10
var/status = 0
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread
origin_tech = "biotech=3"
throwforce = 6
w_class = 4
origin_tech = "biotech=4"
action_button_name = "Toggle Paddles"
icon_action_button = "action_defibunit"
suicide_act(mob/user)
viewers(user) << "\red <b>[user] is putting the live paddles on \his chest! It looks like \he's trying to commit suicide.</b>"
return (OXYLOSS)
var/on = 0 //if the paddles are equipped (1) or on the defib (0)
var/safety = 1 //if you can zap people with the defibs on harm mode
var/powered = 0 //if there's a cell in the defib with enough power for a revive, blocks paddles from reviving otherwise
var/obj/item/weapon/twohanded/shockpaddles/paddles
var/obj/item/weapon/cell/high/bcell = null
/obj/item/weapon/melee/defibrilator/update_icon()
if(!status)
if(charges >= 7)
icon_state = "defib_full"
if(charges <= 6 && charges >= 4)
icon_state = "defib_half"
if(charges <= 3 && charges >= 1)
icon_state = "defib_low"
if(charges <= 0)
icon_state = "defib_empty"
else
if(charges >= 7)
icon_state = "defibpaddleout_full"
if(charges <= 6 && charges >= 4)
icon_state = "defibpaddleout_half"
if(charges <= 3 && charges >= 1)
icon_state = "defibpaddleout_low"
/obj/item/weapon/melee/defibrilator/attack_self(mob/user as mob)
if(status && (M_CLUMSY in user.mutations) && prob(50))
spark_system.attach(user)
spark_system.set_up(5, 0, src)
spark_system.start()
user << "\red You touch the paddles together shorting the device."
user.Weaken(5)
charges--
if(charges < 1)
status = 0
update_icon()
return
if(charges > 0)
status = !status
user << "<span class='notice'>\The [src] is now [status ? "on" : "off"].</span>"
playsound(get_turf(src), "sparks", 75, 1, -1)
update_icon()
else
status = 0
user << "<span class='warning'>\The [src] is out of charge.</span>"
add_fingerprint(user)
/obj/item/weapon/melee/defibrilator/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/item/weapon/defibrillator/New() //starts without a cell for rnd
..()
if(istype(W, /obj/item/weapon/card/emag))
var/image/I = image("icon" = "icons/obj/weapons.dmi", "icon_state" = "defib_emag")
if(emagged == 0)
emagged = 1
usr << "\red [W] unlocks [src]'s safety protocols"
overlays += I
else
emagged = 0
usr << "\blue [W] sets [src]'s safety protocols"
overlays -= I
paddles = make_paddles()
update_icon()
return
/obj/item/weapon/melee/defibrilator/attack(mob/M as mob, mob/user as mob)
var/tobehealed
var/threshhold = -config.health_threshold_dead
var/mob/living/carbon/human/H = M
if(!ishuman(M))
..()
return
if(status)
if(user.a_intent == "hurt" && emagged)
H.visible_message("<span class='danger'>[M.name] has been touched by the defibrilator paddles by [user]!</span>")
if(charges >= 2)
H.Weaken(10)
H.adjustOxyLoss(10)
else
H.Weaken(5)
H.adjustOxyLoss(5)
H.updatehealth() //forces health update before next life tick
spark_system.attach(M)
spark_system.set_up(5, 0, M)
spark_system.start()
charges -= 2
if(charges < 0)
charges = 0
if(!charges)
status = 0
/obj/item/weapon/defibrillator/loaded/New() //starts with hicap
..()
paddles = make_paddles()
bcell = new(src)
update_icon()
return
/obj/item/weapon/defibrillator/update_icon()
update_power()
update_overlays()
update_charge()
/obj/item/weapon/defibrillator/proc/update_power()
if(bcell)
if(bcell.charge < paddles.revivecost)
powered = 0
else
powered = 1
else
powered = 0
/obj/item/weapon/defibrillator/proc/update_overlays()
overlays.Cut()
if(!on)
overlays += "defibunit-paddles"
if(powered)
overlays += "defibunit-powered"
if(!bcell)
overlays += "defibunit-nocell"
if(!safety)
overlays += "defibunit-emagged"
/obj/item/weapon/defibrillator/proc/update_charge()
if(powered) //so it doesn't show charge if it's unpowered
if(bcell)
var/ratio = bcell.charge / bcell.maxcharge
ratio = Ceiling(ratio*4) * 25
overlays += "defibunit-charge[ratio]"
/obj/item/weapon/defibrillator/CheckParts()
bcell = locate(/obj/item/weapon/cell) in contents
update_icon()
/obj/item/weapon/defibrillator/ui_action_click()
if(usr.get_item_by_slot(slot_back) == src)
toggle_paddles()
else
usr << "<span class='warning'>Put the defibrillator on your back first!</span>"
return
/obj/item/weapon/defibrillator/attackby(obj/item/weapon/W, mob/user)
if(istype(W, /obj/item/weapon/cell))
var/obj/item/weapon/cell/C = W
if(bcell)
user << "<span class='notice'>[src] already has a cell.</span>"
else
if(C.maxcharge < paddles.revivecost)
user << "<span class='notice'>[src] requires a higher capacity cell.</span>"
return
user.drop_item()
W.loc = src
bcell = W
user << "<span class='notice'>You install a cell in [src].</span>"
if(istype(W, /obj/item/weapon/card/emag))
if(safety)
safety = 0
user << "<span class='warning'>You silently disable [src]'s safety protocols with the [W]."
else
safety = 1
user << "<span class='notice'>You silently enable [src]'s safety protocols with the [W]."
if(istype(W, /obj/item/weapon/screwdriver))
if(bcell)
bcell.updateicon()
bcell.loc = get_turf(src.loc)
bcell = null
user << "<span class='notice'>You remove the cell from the [src].</span>"
update_icon()
return
/obj/item/weapon/defibrillator/emp_act(severity)
if(bcell)
deductcharge(1000 / severity)
if(bcell.reliability != 100 && prob(50/severity))
bcell.reliability -= 10 / severity
if(safety)
safety = 0
src.visible_message("<span class='notice'>[src] beeps: Safety protocols disabled!</span>")
playsound(get_turf(src), 'sound/machines/twobeep.ogg', 50, 0)
else
safety = 1
src.visible_message("<span class='notice'>[src] beeps: Safety protocols enabled!</span>")
playsound(get_turf(src), 'sound/machines/twobeep.ogg', 50, 0)
update_icon()
..()
/obj/item/weapon/defibrillator/verb/toggle_paddles()
set name = "Toggle Paddles"
set category = "Object"
on = !on
var/mob/living/carbon/human/user = usr
if(on)
//Detach the paddles into the user's hands
if(!usr.put_in_hands(paddles))
on = 0
user << "<span class='warning'>You need a free hand to hold the paddles!</span>"
update_icon()
playsound(get_turf(src), 'sound/weapons/Egloves.ogg', 50, 1, -1)
user.attack_log += "\[[time_stamp()]\]<font color='red'> Defibrilated [H.name] ([H.ckey]) with [src.name]</font>"
H.attack_log += "\[[time_stamp()]\]<font color='orange'> Defibrilated by [user.name] ([user.ckey]) with [src.name]</font>"
log_attack("<font color='red'>[user.name] ([user.ckey]) defibrilated [H.name] ([H.ckey]) with [src.name]</font>" )
if(!iscarbon(user))
M.LAssailant = null
else
M.LAssailant = user
return
H.visible_message("\blue [user] places the defibrilator paddles on [M.name]'s chest.", "\blue You place the defibrilator paddles on [M.name]'s chest.")
if(do_after(user, 10))
if(H.stat == 2 || H.stat == DEAD)
var/uni = 0
var/armor = 0
var/health = H.health
for(var/obj/item/carried_item in H.contents)
if(istype(carried_item, /obj/item/clothing/under))
uni = 1
if(istype(carried_item, /obj/item/clothing/suit/armor))
armor = 1
if(uni && armor)
if(prob(30))
spark_system.attach(M)
spark_system.start()
if(prob(30))
tobehealed = health + threshhold
tobehealed -= 5 //They get 5 health in crit to heal the person or inject stabalizers
H.adjustOxyLoss(tobehealed)
else if(uni || armor)
if(prob(30))
spark_system.attach(M)
spark_system.start()
if(prob(60))
tobehealed = health + threshhold
tobehealed -= 5 //They get 5 health in crit to heal the person or inject stabalizers
H.adjustOxyLoss(tobehealed)
else
if(prob(90))
tobehealed = health + threshhold
tobehealed -= 5 //They get 5 health in crit to heal the person or inject stabalizers
H.adjustOxyLoss(tobehealed)
H.updatehealth() //forces a health update, otherwise the oxyloss adjustment wouldnt do anything
M.visible_message("\red [M]'s body convulses a bit.")
var/datum/organ/external/temp = H.get_organ("head")
if(H.health > -100 && !(temp.status & ORGAN_DESTROYED) && !(M_NOCLONE in H.mutations) && !H.suiciding)
viewers(M) << "\blue [src] beeps: Resuscitation successful."
spawn(0)
H.stat = 1
dead_mob_list -= H
living_mob_list |= H
H.emote("gasp")
else
viewers(M) << "\blue [src] beeps: Resuscitation failed."
charges--
if(charges < 1)
charges = 0
status = 0
update_icon()
paddles.loc = user
else
//Remove from their hands and back onto the defib unit
remove_paddles(user)
update_icon()
return
/obj/item/weapon/defibrillator/proc/make_paddles()
return new /obj/item/weapon/twohanded/shockpaddles(src)
/obj/item/weapon/defibrillator/equipped(mob/user, slot)
if(slot != slot_back)
remove_paddles(user)
update_icon()
/obj/item/weapon/defibrillator/proc/remove_paddles(mob/user)
var/mob/living/carbon/human/M = user
if(paddles in get_both_hands(M))
M.u_equip(paddles)
update_icon()
return
/obj/item/weapon/defibrillator/Destroy()
if(on)
var/M = get(paddles, /mob)
remove_paddles(M)
..()
update_icon()
return
/obj/item/weapon/defibrillator/proc/deductcharge(var/chrgdeductamt)
if(bcell)
if(bcell.charge < (paddles.revivecost+chrgdeductamt))
powered = 0
update_icon()
if(bcell.use(chrgdeductamt))
update_icon()
return 1
else
update_icon()
return 0
/obj/item/weapon/defibrillator/proc/cooldowncheck(var/mob/user)
spawn(50)
if(bcell)
if(bcell.charge >= paddles.revivecost)
user.visible_message("<span class='notice'>[src] beeps: Unit ready.</span>")
playsound(get_turf(src), 'sound/machines/twobeep.ogg', 50, 0)
else
user.visible_message("\blue [src] beeps: Patient is not in a valid state.")
user.visible_message("<span class='notice'>[src] beeps: Charge depleted.</span>")
playsound(get_turf(src), 'sound/machines/twobeep.ogg', 50, 0)
paddles.cooldown = 0
paddles.update_icon()
update_icon()
//paddles
/obj/item/weapon/twohanded/shockpaddles
name = "defibrillator paddles"
desc = "A pair of plastic-gripped paddles with flat metal surfaces that are used to deliver powerful electric shocks."
icon = 'icons/obj/weapons.dmi'
icon_state = "defibpaddles"
item_state = "defibpaddles"
icon_override = 'icons/mob/in-hand/tools.dmi'
force = 0
throwforce = 6
w_class = 4
var/revivecost = 1000
var/cooldown = 0
var/busy = 0
var/obj/item/weapon/defibrillator/defib
/obj/item/weapon/twohanded/shockpaddles/New(mainunit)
..()
if(check_defib_exists(mainunit, src))
defib = mainunit
loc = defib
busy = 0
update_icon()
return
/obj/item/weapon/twohanded/shockpaddles/update_icon()
icon_state = "defibpaddles[wielded]"
item_state = "defibpaddles[wielded]"
if(cooldown)
icon_state = "defibpaddles[wielded]_cooldown"
/obj/item/weapon/twohanded/shockpaddles/suicide_act(mob/user)
user.visible_message("<span class='danger'>[user] is putting the live paddles on \his chest! It looks like \he's trying to commit suicide.</span>")
defib.deductcharge(revivecost)
playsound(get_turf(src), 'sound/weapons/Egloves.ogg', 50, 1, -1)
return (OXYLOSS)
/obj/item/weapon/twohanded/shockpaddles/dropped(mob/user as mob)
if(user)
var/obj/item/weapon/twohanded/O = user.get_inactive_hand()
if(istype(O))
O.unwield()
user << "<span class='notice'>The paddles snap back into the main unit.</span>"
defib.on = 0
loc = defib
defib.update_icon()
return unwield()
/obj/item/weapon/twohanded/shockpaddles/proc/check_defib_exists(mainunit, var/mob/living/carbon/human/M, var/obj/O)
if (!mainunit || !istype(mainunit, /obj/item/weapon/defibrillator)) //To avoid weird issues from admin spawns
M.u_equip(O)
qdel(O)
return 0
else
return 1
/obj/item/weapon/twohanded/shockpaddles/attack(mob/M as mob, mob/user as mob)
var/tobehealed
var/threshold = -config.health_threshold_dead
var/mob/living/carbon/human/H = M
if(busy)
return
if(!defib.powered)
user.visible_message("<span class='notice'>[defib] beeps: Unit is unpowered.</span>")
playsound(get_turf(src), 'sound/machines/twobeep.ogg', 50, 0)
return
if(!wielded)
user << "<span class='boldnotice'>You need to wield the paddles in both hands before you can use them on someone!</span>"
return
if(cooldown)
user << "<span class='notice'>[defib] is recharging.</span>"
return
if(!ishuman(M))
user << "<span class='notice'>The instructions on [defib] don't mention how to revive that...</span>"
return
else
if(user.a_intent == "harm" && !defib.safety)
busy = 1
H.visible_message("<span class='danger'>[user] has touched [H.name] with [src]!</span>", \
"<span class='userdanger'>[user] has touched [H.name] with [src]!</span>")
H.adjustStaminaLoss(50)
H.Weaken(5)
H.updatehealth() //forces health update before next life tick
playsound(get_turf(src), 'sound/weapons/Egloves.ogg', 50, 1, -1)
H.emote("gasp")
add_logs(user, M, "stunned", object="defibrillator")
defib.deductcharge(revivecost)
cooldown = 1
busy = 0
update_icon()
defib.cooldowncheck(user)
return
if(user.zone_sel && user.zone_sel.selecting == "chest")
user.visible_message("<span class='warning'>[user] begins to place [src] on [M.name]'s chest.</span>", "<span class='warning'>You begin to place [src] on [M.name]'s chest.</span>")
busy = 1
update_icon()
if(do_after(user, 30)) //beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process
user.visible_message("<span class='notice'>[user] places [src] on [M.name]'s chest.</span>", "<span class='warning'>You place [src] on [M.name]'s chest.</span>")
playsound(get_turf(src), 'sound/weapons/flash.ogg', 50, 0)
var/mob/dead/observer/ghost = H.get_ghost()
var/tplus = world.time - H.timeofdeath
var/tlimit = 3000 //past this much time the patient is unrecoverable (in deciseconds)
var/tloss = 900 //brain damage starts setting in on the patient after some time left rotting
var/total_burn = 0
var/total_brute = 0
if(do_after(user, 20)) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total
for(var/obj/item/carried_item in H.contents)
if((istype(carried_item, /obj/item/clothing/suit/armor)) || (istype(carried_item, /obj/item/clothing/suit/space)))
user.visible_message("<span class='notice'>[defib] buzzes: Patient's chest is obscured. Operation aborted.</span>")
playsound(get_turf(src), 'sound/machines/buzz-sigh.ogg', 50, 0)
busy = 0
update_icon()
return
if(H.stat == 2)
var/health = H.health
M.visible_message("<span class='warning'>[M]'s body convulses a bit.")
playsound(get_turf(src), "bodyfall", 50, 1)
playsound(get_turf(src), 'sound/weapons/Egloves.ogg', 50, 1, -1)
for(var/datum/organ/external/O in H.organs)
total_brute += O.brute_dam
total_burn += O.burn_dam
if(H.health <= config.health_threshold_dead && total_burn <= 180 && total_brute <= 180 && !H.suiciding && !ghost && tplus < tlimit && !(M_NOCLONE in H.mutations))
tobehealed = health + threshold
tobehealed -= 5 //They get 5 of each type of damage healed so excessive combined damage will not immediately kill them after they get revived
H.adjustOxyLoss(tobehealed)
H.adjustToxLoss(tobehealed)
H.adjustFireLoss(tobehealed)
H.adjustBruteLoss(tobehealed)
user.visible_message("<span class='boldnotice'>[defib] pings: Resuscitation successful.</span>")
playsound(get_turf(src), 'sound/machines/ping.ogg', 50, 0)
H.stat = 1
if(H in dead_mob_list)
dead_mob_list -= H
living_mob_list += H
H.emote("gasp")
if(tplus > tloss)
H.setBrainLoss( max(0, min(99, ((tlimit - tplus) / tlimit * 100))))
H.updatehealth()
defib.deductcharge(revivecost)
add_logs(user, M, "revived", object="defibrillator")
else
if(tplus > tlimit)
user.visible_message("<span class='boldnotice'>[defib] buzzes: Resuscitation failed - Heart tissue damage beyond point of no return for defibrillation.</span>")
else if(total_burn >= 180 || total_brute >= 180)
user.visible_message("<span class='boldnotice'>[defib] buzzes: Resuscitation failed - Severe tissue damage detected.</span>")
else
user.visible_message("<span class='notice'>[defib] buzzes: Resuscitation failed.</span>")
if(ghost)
ghost << "<span class='ghostalert'>Your heart is being defibrillated. Return to your body if you want to be revived!</span> (Verbs -> Ghost -> Re-enter corpse)"
ghost << sound('sound/effects/genetics.ogg')
playsound(get_turf(src), 'sound/machines/buzz-two.ogg', 50, 0)
defib.deductcharge(revivecost)
update_icon()
cooldown = 1
defib.cooldowncheck(user)
else
user.visible_message("<span class='notice'>[defib] buzzes: Patient is not in a valid state. Operation aborted.</span>")
playsound(get_turf(src), 'sound/machines/buzz-sigh.ogg', 50, 0)
busy = 0
update_icon()
else
user << "<span class='notice'>You need to target your patient's chest with [src].</span>"
return
@@ -63,9 +63,9 @@
else
return buf.dna.SetUIValue(real_block,val)
/obj/item/weapon/dnainjector/proc/inject(mob/M as mob, mob/user as mob)
/obj/item/weapon/dnainjector/proc/inject(mob/living/M as mob, mob/user as mob)
if(istype(M,/mob/living))
M.radiation += rand(5,20)
M.apply_effect(rand(5,20),IRRADIATE,0)
if (!(M_NOCLONE in M.mutations)) // prevents drained people from having their DNA changed
// UI in syringe.
@@ -417,7 +417,7 @@
B1.reagents.add_reagent("fuel",20)
B2.reagents.add_reagent("plasma", 15)
B2.reagents.add_reagent("sacid", 15)
B1.reagents.add_reagent("fuel",20)
B1.reagents.add_reagent("incendiaryfuel",20)
beakers += B1
beakers += B2
+9 -6
View File
@@ -141,9 +141,12 @@ var/last_chew = 0
..()
if(istype(I, /obj/item/stack/rods))
var/obj/item/stack/rods/R = I
var/obj/item/weapon/wirerod/W = new /obj/item/weapon/wirerod
R.use(1)
user.put_in_hands(W)
user << "<span class='notice'>You wrap the cable restraint around the top of the rod.</span>"
del(src)
if (R.use(1))
var/obj/item/weapon/wirerod/W = new /obj/item/weapon/wirerod
user.u_equip(src)
user.put_in_hands(W)
user << "<span class='notice'>You wrap the cable restraint around the top of the rod.</span>"
del(src)
else
user << "<span class='warning'>You need one rod to make a wired rod.</span>"
return
@@ -5,7 +5,7 @@
icon = 'icons/obj/device.dmi'
icon_state = "implant"
var/implanted = null
var/mob/imp_in = null
var/mob/living/imp_in = null
var/datum/organ/external/part = null
_color = "b"
var/allow_reagents = 0
@@ -429,6 +429,7 @@ the implant may become unstable and either pre-maturely inject the subject or si
source.SetStunned(0)
source.SetWeakened(0)
source.SetParalysis(0)
imp_in.adjustStaminaLoss(-75)
source.lying = 0
source.update_canmove()
@@ -50,8 +50,8 @@
edge = 1
/obj/item/weapon/melee/energy/sword/cyborg
var/hitcost = 500
var/hitcost = 500
/obj/item/weapon/melee/energy/sword/cyborg/attack(mob/M, var/mob/living/silicon/robot/R)
if(R.cell)
var/obj/item/weapon/cell/C = R.cell
@@ -62,7 +62,7 @@
//C.use(hitcost)
..()
return
/obj/item/weapon/melee/energy/sword/pirate
name = "energy cutlass"
desc = "Arrrr matey."
@@ -72,7 +72,7 @@
name = "energy blade"
desc = "A concentrated beam of energy in the shape of a blade. Very stylish... and lethal."
icon_state = "blade"
force = 70.0//Normal attacks deal very high damage.
force = 30.0 //Normal attacks deal esword damage
sharp = 1
edge = 1
throwforce = 1//Throwing or dropping the item deletes it.
@@ -9,6 +9,7 @@
* Mining Satchel
* Plant Bag
* Sheet Snatcher
* Book Bag
*
* -Sayu
*/
@@ -307,3 +308,19 @@
w_class = 1
can_hold = list("/obj/item/weapon/coin","/obj/item/weapon/spacecash")
// -----------------------------
// Book bag
// -----------------------------
/obj/item/weapon/storage/bag/books
name = "book bag"
desc = "A bag for books."
icon = 'icons/obj/library.dmi'
icon_state = "bookbag"
display_contents_with_number = 0 //This would look really stupid otherwise
storage_slots = 7
max_combined_w_class = 21
max_w_class = 3
w_class = 4 //Bigger than a book because physics
can_hold = list(/obj/item/weapon/book, /obj/item/weapon/spellbook) //No bibles, consistent with bookcase
@@ -68,6 +68,7 @@
new /obj/item/weapon/crowbar(src)
new /obj/item/weapon/wirecutters(src)
new /obj/item/device/t_scanner(src)
new /obj/item/weapon/extinguisher/mini(src)
@@ -92,7 +93,7 @@
"/obj/item/stack/medical",
"/obj/item/device/flashlight/pen",
"/obj/item/clothing/mask/surgical",
"/obj/item/clothing/gloves/latex",
"/obj/item/clothing/gloves/color/latex",
"/obj/item/weapon/reagent_containers/hypospray/autoinjector"
)
@@ -85,13 +85,13 @@
New()
..()
new /obj/item/clothing/gloves/latex(src)
new /obj/item/clothing/gloves/latex(src)
new /obj/item/clothing/gloves/latex(src)
new /obj/item/clothing/gloves/latex(src)
new /obj/item/clothing/gloves/latex(src)
new /obj/item/clothing/gloves/latex(src)
new /obj/item/clothing/gloves/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
/obj/item/weapon/storage/box/masks
name = "sterile masks"
@@ -152,23 +152,6 @@
new /obj/item/weapon/dnainjector/m2h(src)
new /obj/item/weapon/dnainjector/m2h(src)
/obj/item/weapon/storage/box/blanks
name = "box of birdshot shells"
desc = "It has a picture of a gun and several warning symbols on the front."
m_amt = 41000
New()
..()
new /obj/item/ammo_casing/shotgun/birdshot(src)
new /obj/item/ammo_casing/shotgun/birdshot(src)
new /obj/item/ammo_casing/shotgun/birdshot(src)
new /obj/item/ammo_casing/shotgun/birdshot(src)
new /obj/item/ammo_casing/shotgun/birdshot(src)
new /obj/item/ammo_casing/shotgun/birdshot(src)
new /obj/item/ammo_casing/shotgun/birdshot(src)
/obj/item/weapon/storage/box/gauge
name = "box of 12 gauge slugs"
desc = "It has a picture of a gun and several warning symbols on the front."
@@ -12,6 +12,7 @@
name = "first-aid kit"
desc = "It's an emergency medical kit for those serious boo-boos."
icon_state = "firstaid"
icon_override = 'icons/mob/in-hand/medkits.dmi'
throw_speed = 2
throw_range = 8
var/empty = 0
@@ -55,8 +56,8 @@
return
/obj/item/weapon/storage/firstaid/toxin
name = "toxin first aid"
desc = "Used to treat when you have a high amoutn of toxins in your body."
name = "toxin first aid kit"
desc = "Used to treat when you have a high amounts of toxins in your body."
icon_state = "antitoxin"
item_state = "firstaid-toxin"
@@ -76,7 +77,7 @@
return
/obj/item/weapon/storage/firstaid/o2
name = "oxygen deprivation first aid"
name = "oxygen deprivation first aid kit"
desc = "A box full of oxygen goodies."
icon_state = "o2"
item_state = "firstaid-o2"
@@ -18,7 +18,7 @@
if("bond")
new /obj/item/weapon/gun/projectile/automatic/pistol(src)
new /obj/item/weapon/silencer(src)
new /obj/item/weapon/suppressor(src)
new /obj/item/ammo_box/magazine/m10mm(src)
new /obj/item/ammo_box/magazine/m10mm(src)
new /obj/item/clothing/under/chameleon(src)
+9 -1
View File
@@ -196,4 +196,12 @@
throwforce = 5
stunforce = 5
hitcost = 3750
slot_flags = null
slot_flags = null
/obj/item/weapon/melee/baton/cattleprod/update_icon()
if(status)
icon_state = "stunprod_active"
else if(!bcell)
icon_state = "stunprod_nocell"
else
icon_state = "stunprod"
@@ -33,22 +33,24 @@
active = !active
if (active)
force = 30
throwforce = 20
if(istype(src,/obj/item/weapon/melee/energy/sword/pirate))
icon_state = "cutlass1"
else
icon_state = "sword[blade_color]"
w_class = 4
playsound(user, 'sound/weapons/saberon.ogg', 50, 1)
playsound(user, 'sound/weapons/saberon.ogg', 35, 1)
hitsound = 'sound/weapons/blade1.ogg'
user << "\blue [src] is now active."
else
force = 3
throwforce = 5.0
if(istype(src,/obj/item/weapon/melee/energy/sword/pirate))
icon_state = "cutlass0"
else
icon_state = "sword0"
w_class = 2
playsound(user, 'sound/weapons/saberoff.ogg', 50, 1)
playsound(user, 'sound/weapons/saberoff.ogg', 35, 1)
hitsound = "swing_hit"
user << "\blue [src] can now be concealed."
if(istype(user,/mob/living/carbon/human))
@@ -149,9 +149,12 @@ Frequency:
else
L["[com.id] (Inactive)"] = com.target
var/list/turfs = list( )
var/area/A
for(var/turf/T in orange(10))
if(T.x>world.maxx-8 || T.x<8) continue //putting them at the edge is dumb
if(T.y>world.maxy-8 || T.y<8) continue
A = get_area(T)
if (A.tele_proof == 1) continue // Telescience-proofed areas require a beacon.
turfs += T
if(turfs.len)
L["None (Dangerous)"] = pick(turfs)
@@ -170,4 +173,3 @@ Frequency:
active_portals++
src.add_fingerprint(user)
return
+13 -9
View File
@@ -443,8 +443,8 @@
*/
/obj/item/weapon/crowbar
name = "crowbar"
desc = "Used to hit floors"
name = "pocket crowbar"
desc = "A small crowbar. This handy tool is useful for lots of things, such as prying floor tiles or opening unpowered doors."
icon = 'icons/obj/items.dmi'
icon_state = "crowbar"
flags = FPRINT | TABLEPASS| CONDUCT
@@ -462,6 +462,16 @@
icon_state = "red_crowbar"
item_state = "crowbar_red"
/obj/item/weapon/crowbar/large
name = "crowbar"
desc = "It's a big crowbar. It doesn't fit in your pockets, because it's big."
force = 12
w_class = 3
throw_speed = 3
throw_range = 3
m_amt = 66
icon_state = "crowbar_large"
/obj/item/weapon/weldingtool/attack(mob/M as mob, mob/user as mob)
if(hasorgans(M))
@@ -480,19 +490,13 @@
if(S.brute_dam)
var/obj/item/weapon/weldingtool/WT = src
if (WT.remove_fuel(0,user))
if (WT.remove_fuel(0,null))
playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1)
S.heal_damage(15,0,0,1)
user.visible_message("\red \The [user] patches some dents on \the [M]'s [S.display_name] with \the [src].")
if(istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M
H.updatehealth()
if(istype(M,/mob/living/carbon/human/machine) && M.stat == 0) // If an IPC is brought back to life by welding it, which is possible, update the mob list
if(M in dead_mob_list)
dead_mob_list -= M
respawnable_list -= M
living_mob_list += M
mob_list += M
return
else
user << "\red You need more welding fuel to complete this task."
+7 -5
View File
@@ -158,12 +158,13 @@ obj/item/weapon/twohanded/
name = "fire axe"
desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?"
force = 5
throwforce = 15
sharp = 1
edge = 1
w_class = 4.0
slot_flags = SLOT_BACK
force_unwielded = 10
force_wielded = 40
force_unwielded = 5
force_wielded = 24
attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut")
hitsound = 'sound/weapons/bladeslice.ogg'
@@ -203,7 +204,7 @@ obj/item/weapon/twohanded/
throw_range = 5
w_class = 2.0
force_unwielded = 3
force_wielded = 30
force_wielded = 34
wieldsound = 'sound/weapons/saberon.ogg'
unwieldsound = 'sound/weapons/saberoff.ogg'
flags = FPRINT | TABLEPASS | NOSHIELD
@@ -287,8 +288,9 @@ obj/item/weapon/twohanded/
w_class = 4.0
slot_flags = SLOT_BACK
force_unwielded = 10
force_wielded = 13
throwforce = 15
force_wielded = 18 // Was 13, Buffed - RR
throwforce = 20
throw_speed = 3
flags = FPRINT | TABLEPASS | NOSHIELD
attack_verb = list("attacked", "poked", "jabbed", "torn", "gored")
@@ -57,7 +57,7 @@
machine_name = "AutoDrobe"
icon_state = "refill_costume"
charges = 19// of 58
/obj/item/weapon/vending_refill/hatdispenser
machine_name = "hat"
icon_state = "refill_costume"
@@ -67,8 +67,13 @@
machine_name = "suit"
icon_state = "refill_costume"
charges = 68// of 206
/obj/item/weapon/vending_refill/shoedispenser
machine_name = "shoe"
icon_state = "refill_costume"
charges = 30// of 91
charges = 30// of 91
/obj/item/weapon/vending_refill/clothing
machine_name = "ClothesMate"
icon_state = "refill_clothes"
charges = 20// of 62
@@ -167,6 +167,10 @@ obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob)
..()
if(istype(I, /obj/item/weapon/shard))
var/obj/item/weapon/twohanded/spear/S = new /obj/item/weapon/twohanded/spear
user.u_equip(I)
user.u_equip(src)
user.put_in_hands(S)
user << "<span class='notice'>You fasten the glass shard to the top of the rod with the cable.</span>"
del(I)
@@ -174,6 +178,10 @@ obj/item/weapon/wirerod/attackby(var/obj/item/I, mob/user as mob)
else if(istype(I, /obj/item/weapon/wirecutters))
var/obj/item/weapon/melee/baton/cattleprod/P = new /obj/item/weapon/melee/baton/cattleprod
user.u_equip(I)
user.u_equip(src)
user.put_in_hands(P)
user << "<span class='notice'>You fasten the wirecutters to the top of the rod with the cable, prongs outward.</span>"
del(I)
@@ -55,9 +55,11 @@
sleep(2)
new /obj/item/weapon/gun/energy/laser/redtag(src)
new /obj/item/weapon/gun/energy/laser/redtag(src)
new /obj/item/weapon/gun/energy/laser/redtag(src)
new /obj/item/clothing/suit/redtag(src)
new /obj/item/clothing/suit/redtag(src)
new /obj/item/clothing/suit/redtag(src)
new /obj/item/clothing/head/helmet/redtaghelm(src)
/obj/structure/closet/lasertag/blue
name = "blue laser tag equipment"
@@ -70,5 +72,8 @@
sleep(2)
new /obj/item/weapon/gun/energy/laser/bluetag(src)
new /obj/item/weapon/gun/energy/laser/bluetag(src)
new /obj/item/weapon/gun/energy/laser/bluetag(src)
new /obj/item/clothing/suit/bluetag(src)
new /obj/item/clothing/suit/bluetag(src)
new /obj/item/clothing/suit/bluetag(src)
new /obj/item/clothing/suit/bluetag(src)
new /obj/item/clothing/head/helmet/bluetaghelm(src)
@@ -67,10 +67,10 @@
new /obj/item/clothing/head/helmet/swat(src)
new /obj/item/clothing/mask/gas(src)
new /obj/item/clothing/mask/gas(src)
new /obj/item/clothing/shoes/swat(src)
new /obj/item/clothing/shoes/swat(src)
new /obj/item/clothing/suit/armor/swat(src)
new /obj/item/clothing/suit/armor/swat(src)
new /obj/item/clothing/shoes/combat/swat(src)
new /obj/item/clothing/shoes/combat/swat(src)
new /obj/item/clothing/suit/space/deathsquad(src)
new /obj/item/clothing/suit/space/deathsquad(src)
new /obj/item/clothing/under/syndicate/tacticool(src)
new /obj/item/clothing/under/syndicate/tacticool(src)
@@ -123,10 +123,10 @@
new /obj/item/device/radio/headset/headset_med(src)
new /obj/item/clothing/head/soft/blue(src)
new /obj/item/clothing/head/soft/blue(src)
new /obj/item/clothing/gloves/latex(src)
new /obj/item/clothing/gloves/latex(src)
new /obj/item/clothing/gloves/latex(src)
new /obj/item/clothing/gloves/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/head/soft/blue(src)
@@ -23,7 +23,7 @@
new /obj/item/blueprints(src)
new /obj/item/clothing/under/rank/chief_engineer(src)
new /obj/item/clothing/head/hardhat/white(src)
new /obj/item/clothing/head/welding(src)
new /obj/item/clothing/glasses/welding/superior(src)
new /obj/item/clothing/gloves/yellow(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/weapon/cartridge/ce(src)
@@ -69,7 +69,7 @@
/obj/structure/closet/secure_closet/engineering_welding
name = "Welding Supplies"
req_access = list(access_construction)
req_access = list(access_engine_equip)
icon_state = "secureengweld1"
icon_closed = "secureengweld"
icon_locked = "secureengweld1"
@@ -122,6 +122,7 @@
new /obj/item/weapon/cartridge/engineering(src)
new /obj/item/taperoll/engineering(src)
return
/obj/structure/closet/secure_closet/atmos_personal
name = "Technician's Locker"
req_access = list(access_atmospherics)
@@ -136,6 +137,10 @@
New()
..()
sleep(2)
new /obj/item/device/radio/headset/headset_eng(src)
new /obj/item/weapon/cartridge/atmos(src)
new /obj/item/weapon/storage/toolbox/mechanical(src)
new /obj/item/taperoll/engineering(src)
if(prob(50))
new /obj/item/weapon/storage/backpack/industrial(src)
else
@@ -144,14 +149,11 @@
new /obj/item/clothing/tie/storage/brown_vest(src)
else
new /obj/item/clothing/tie/storage/webbing(src)
new /obj/item/clothing/suit/fire/firefighter(src)
new /obj/item/clothing/head/hardhat/red(src)
new /obj/item/device/flashlight(src)
new /obj/item/weapon/extinguisher(src)
new /obj/item/device/radio/headset/headset_eng(src)
new /obj/item/clothing/suit/storage/hazardvest(src)
new /obj/item/clothing/mask/gas(src)
new /obj/item/clothing/glasses/meson(src)
new /obj/item/weapon/cartridge/atmos(src)
new /obj/item/taperoll/engineering(src)
new /obj/item/weapon/tank/emergency_oxygen/engi(src)
new /obj/item/clothing/suit/fire/atmos(src)
new /obj/item/clothing/head/hardhat/atmos(src)
return
@@ -69,51 +69,28 @@
new /obj/item/weapon/storage/backpack/medic(src)
else
new /obj/item/weapon/storage/backpack/satchel_med(src)
new /obj/item/clothing/under/rank/nursesuit (src)
new /obj/item/clothing/head/nursehat (src)
switch(pick("blue", "green", "purple"))
if ("blue")
new /obj/item/clothing/under/rank/medical/blue(src)
new /obj/item/clothing/head/surgery/blue(src)
if ("green")
new /obj/item/clothing/under/rank/medical/green(src)
new /obj/item/clothing/head/surgery/green(src)
if ("purple")
new /obj/item/clothing/under/rank/medical/purple(src)
new /obj/item/clothing/head/surgery/purple(src)
switch(pick("blue", "green", "purple"))
if ("blue")
new /obj/item/clothing/under/rank/medical/blue(src)
new /obj/item/clothing/head/surgery/blue(src)
if ("green")
new /obj/item/clothing/under/rank/medical/green(src)
new /obj/item/clothing/head/surgery/green(src)
if ("purple")
new /obj/item/clothing/under/rank/medical/purple(src)
new /obj/item/clothing/head/surgery/purple(src)
new /obj/item/clothing/under/rank/medical(src)
new /obj/item/clothing/under/rank/nurse(src)
new /obj/item/clothing/under/rank/orderly(src)
new /obj/item/clothing/suit/storage/labcoat(src)
new /obj/item/clothing/suit/storage/fr_jacket(src)
new /obj/item/clothing/shoes/white(src)
// new /obj/item/weapon/cartridge/medical(src)
new /obj/item/device/radio/headset/headset_med(src)
new /obj/item/clothing/gloves/color/latex/nitrile(src)
new /obj/item/weapon/defibrillator/loaded(src)
new /obj/item/weapon/storage/belt/medical(src)
new /obj/item/clothing/glasses/hud/health(src)
return
// Psychiatrist's pill bottle
/obj/item/weapon/storage/pill_bottle/psychiatrist
name = "psychiatrist's pill bottle"
desc = "Contains various pills to calm or sedate patients."
/obj/item/weapon/storage/pill_bottle/psychiatrist/New()
..()
new /obj/item/weapon/reagent_containers/pill/citalopram(src)
new /obj/item/weapon/reagent_containers/pill/citalopram(src)
new /obj/item/weapon/reagent_containers/pill/methylphenidate(src)
new /obj/item/weapon/reagent_containers/pill/methylphenidate(src)
/obj/structure/closet/secure_closet/psychiatrist
name = "Psychiatrist's Locker"
req_access = list(access_psychiatrist)
@@ -164,12 +141,12 @@
if ("purple")
new /obj/item/clothing/under/rank/medical/purple(src)
new /obj/item/clothing/head/surgery/purple(src)
new /obj/item/clothing/under/rank/chief_medical_officer(src)
new /obj/item/clothing/suit/storage/labcoat/cmo(src)
new /obj/item/weapon/cartridge/cmo(src)
new /obj/item/clothing/gloves/latex(src)
new /obj/item/clothing/under/rank/chief_medical_officer(src)
new /obj/item/clothing/shoes/brown (src)
new /obj/item/device/radio/headset/heads/cmo(src)
new /obj/item/clothing/gloves/color/latex/nitrile(src)
new /obj/item/weapon/defibrillator/loaded(src)
new /obj/item/weapon/storage/belt/medical(src)
new /obj/item/device/flash(src)
new /obj/item/weapon/reagent_containers/hypospray(src)
@@ -43,7 +43,7 @@
new /obj/item/clothing/suit/storage/labcoat(src)
new /obj/item/weapon/cartridge/rd(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/gloves/latex(src)
new /obj/item/clothing/gloves/color/latex(src)
new /obj/item/device/radio/headset/heads/rd(src)
new /obj/item/weapon/tank/air(src)
new /obj/item/clothing/mask/gas(src)
@@ -24,7 +24,7 @@
new /obj/item/weapon/cartridge/captain(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/device/radio/headset/heads/captain(src)
new /obj/item/clothing/gloves/captain(src)
new /obj/item/clothing/gloves/color/captain(src)
new /obj/item/weapon/gun/energy/gun(src)
return
@@ -48,7 +48,7 @@
new /obj/item/weapon/cartridge/hop(src)
new /obj/item/device/radio/headset/heads/hop(src)
new /obj/item/weapon/storage/box/ids(src)
new /obj/item/weapon/storage/box/ids( src )
new /obj/item/weapon/storage/box/PDAs(src)
new /obj/item/clothing/suit/armor/vest(src)
new /obj/item/weapon/gun/energy/gun(src)
new /obj/item/device/flash(src)
@@ -100,21 +100,21 @@
new /obj/item/weapon/storage/backpack/security(src)
else
new /obj/item/weapon/storage/backpack/satchel_sec(src)
new /obj/item/clothing/suit/armor/vest(src)
new /obj/item/clothing/under/rank/head_of_security/jensen(src)
new /obj/item/clothing/under/rank/head_of_security/corp(src)
new /obj/item/clothing/mask/gas/sechailer/hos(src)
new /obj/item/weapon/cartridge/hos(src)
new /obj/item/device/radio/headset/heads/hos(src)
new /obj/item/clothing/under/rank/head_of_security/jensen(src)
new /obj/item/clothing/under/rank/head_of_security/corp(src)
new /obj/item/clothing/suit/armor/hos(src)
new /obj/item/clothing/head/HoS(src)
new /obj/item/clothing/glasses/sunglasses/sechud(src)
new /obj/item/taperoll/police(src)
new /obj/item/weapon/shield/riot(src)
new /obj/item/weapon/storage/lockbox/loyalty(src)
new /obj/item/weapon/storage/box/flashbangs(src)
new /obj/item/weapon/storage/belt/security(src)
new /obj/item/device/flash(src)
new /obj/item/clothing/mask/gas/sechailer/hos(src)
new /obj/item/weapon/shield/riot(src)
new /obj/item/weapon/melee/baton/loaded(src)
new /obj/item/weapon/gun/energy/gun(src)
new /obj/item/weapon/gun/energy/advtaser(src)
new /obj/item/weapon/storage/belt/security(src)
new /obj/item/taperoll/police(src)
new /obj/item/clothing/tie/holster/armpit(src)
return
@@ -138,20 +138,20 @@
new /obj/item/weapon/storage/backpack/security(src)
else
new /obj/item/weapon/storage/backpack/satchel_sec(src)
new /obj/item/clothing/suit/armor/vest/security(src)
new /obj/item/device/radio/headset/headset_sec(src)
new /obj/item/clothing/suit/armor/vest/warden(src)
new /obj/item/clothing/head/warden(src)
new /obj/item/clothing/under/rank/warden(src)
new /obj/item/clothing/under/rank/warden/corp(src)
new /obj/item/clothing/suit/armor/vest/warden(src)
new /obj/item/clothing/head/helmet/warden(src)
new /obj/item/clothing/mask/gas/sechailer/warden(src)
new /obj/item/device/radio/headset/headset_sec(src)
new /obj/item/clothing/glasses/sunglasses/sechud(src)
new /obj/item/clothing/mask/gas/sechailer/warden(src)
new /obj/item/taperoll/police(src)
new /obj/item/weapon/storage/box/handcuffs(src)
new /obj/item/weapon/storage/box/flashbangs(src)
new /obj/item/weapon/storage/belt/security(src)
new /obj/item/weapon/reagent_containers/spray/pepper(src)
new /obj/item/weapon/melee/baton/loaded(src)
new /obj/item/weapon/gun/energy/taser(src)
new /obj/item/weapon/gun/energy/advtaser(src)
new /obj/item/weapon/storage/belt/security(src)
new /obj/item/weapon/storage/box/holobadge(src)
return
@@ -175,21 +175,20 @@
else
new /obj/item/weapon/storage/backpack/satchel_sec(src)
new /obj/item/clothing/suit/armor/vest/security(src)
new /obj/item/clothing/head/helmet(src)
new /obj/item/clothing/mask/gas/sechailer(src)
new /obj/item/device/radio/headset/headset_sec(src)
new /obj/item/weapon/storage/belt/security(src)
new /obj/item/device/flash(src)
new /obj/item/clothing/head/beret/sec(src)
new /obj/item/weapon/reagent_containers/spray/pepper(src)
new /obj/item/device/flash(src)
new /obj/item/weapon/grenade/flashbang(src)
new /obj/item/weapon/melee/baton/loaded(src)
new /obj/item/weapon/gun/energy/taser(src)
new /obj/item/weapon/storage/belt/security(src)
new /obj/item/clothing/mask/gas/sechailer(src)
new /obj/item/clothing/glasses/sunglasses/sechud(src)
new /obj/item/weapon/melee/baton/loaded(src)
new /obj/item/taperoll/police(src)
return
/obj/structure/closet/secure_closet/blueshield
name = "Blueshield Locker"
name = "Blueshield's Locker"
req_access = list(access_blueshield)
icon_state = "bssecure1"
icon_closed = "bssecure"
@@ -201,17 +200,72 @@
New()
..()
sleep(2)
new /obj/item/weapon/storage/briefcase(src)
new /obj/item/weapon/storage/firstaid/adv(src)
new /obj/item/weapon/gun/projectile/revolver/detective(src)
new /obj/item/weapon/storage/belt/security(src)
new /obj/item/weapon/grenade/flashbang(src)
new /obj/item/weapon/melee/baton/loaded(src)
new /obj/item/weapon/gun/energy/taser(src)
new /obj/item/clothing/glasses/sunglasses(src)
new /obj/item/clothing/under/rank/centcom_officer(src)
new /obj/item/device/flash(src)
new /obj/item/weapon/handcuffs(src)
new /obj/item/weapon/melee/baton/loaded(src)
new /obj/item/clothing/glasses/sunglasses(src)
new /obj/item/clothing/glasses/hud/health_advanced
new /obj/item/clothing/head/beret/centcom/officer(src)
new /obj/item/clothing/under/rank/centcom_officer(src)
new /obj/item/clothing/suit/armor/vest/fluff/deus_blueshield(src)
new /obj/item/clothing/shoes/centcom(src)
new /obj/item/clothing/tie/blue(src)
return
/obj/structure/closet/secure_closet/ntrep
name = "Nanotrasen Representative's Locker"
req_access = list(access_ntrep)
icon_state = "ntsecure1"
icon_closed = "ntsecure"
icon_locked = "ntsecure1"
icon_opened = "ntsecureopen"
icon_broken = "ntsecurebroken"
icon_off = "ntsecureoff"
New()
..()
sleep(2)
new /obj/item/weapon/storage/briefcase(src)
new /obj/item/device/paicard(src)
new /obj/item/device/flash(src)
new /obj/item/clothing/glasses/sunglasses(src)
new /obj/item/clothing/under/rank/centcom_officer(src)
new /obj/item/clothing/gloves/color/white(src)
new /obj/item/clothing/shoes/centcom(src)
new /obj/item/clothing/under/lawyer/oldman(src)
new /obj/item/clothing/under/lawyer/black(src)
new /obj/item/clothing/under/lawyer/female(src)
return
/obj/structure/closet/secure_closet/ntrec
name = "Nanotrasen Recruiter's Locker"
req_access = list(access_ntrec)
icon_state = "ntsecure1"
icon_closed = "ntsecure"
icon_locked = "ntsecure1"
icon_opened = "ntsecureopen"
icon_broken = "ntsecurebroken"
icon_off = "ntsecureoff"
New()
..()
sleep(2)
new /obj/item/weapon/storage/briefcase(src)
new /obj/item/weapon/storage/box/ids(src)
new /obj/item/weapon/storage/box/PDAs(src)
new /obj/item/device/flash(src)
new /obj/item/clothing/glasses/sunglasses(src)
new /obj/item/clothing/under/rank/centcom_officer(src)
new /obj/item/clothing/gloves/color/white(src)
new /obj/item/clothing/shoes/centcom(src)
new /obj/item/clothing/under/lawyer/oldman(src)
new /obj/item/clothing/under/lawyer/black(src)
new /obj/item/clothing/under/lawyer/female(src)
return
@@ -269,9 +323,10 @@
new /obj/item/clothing/head/det_hat(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/weapon/storage/box/evidence(src)
new /obj/item/weapon/clipboard(src)
new /obj/item/device/radio/headset/headset_sec(src)
new /obj/item/device/detective_scanner(src)
new /obj/item/clothing/suit/armor/det_suit(src)
new /obj/item/clothing/suit/armor/vest/det_suit(src)
new /obj/item/ammo_box/c38(src)
new /obj/item/ammo_box/c38(src)
new /obj/item/weapon/gun/projectile/revolver/detective(src)
@@ -229,19 +229,4 @@
if(!opened)
icon_state = icon_closed
else
icon_state = icon_opened
/obj/structure/closet/ammunitionlocker
name = "ammunition locker"
/obj/structure/closet/ammunitionlocker/New()
..()
sleep(2)
new /obj/item/ammo_casing/shotgun/beanbag(src)
new /obj/item/ammo_casing/shotgun/beanbag(src)
new /obj/item/ammo_casing/shotgun/beanbag(src)
new /obj/item/ammo_casing/shotgun/beanbag(src)
new /obj/item/ammo_casing/shotgun/beanbag(src)
new /obj/item/ammo_casing/shotgun/beanbag(src)
new /obj/item/ammo_casing/shotgun/beanbag(src)
new /obj/item/ammo_casing/shotgun/beanbag(src)
icon_state = icon_opened
@@ -68,6 +68,8 @@
new /obj/item/clothing/under/color/black(src)
new /obj/item/clothing/under/color/black(src)
new /obj/item/clothing/under/color/black(src)
if(prob(25))
new /obj/item/clothing/suit/jacket/leather(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
@@ -217,6 +219,27 @@
new /obj/item/clothing/shoes/white(src)
return
/obj/structure/closet/wardrobe/white/medical
name = "medical doctor's wardrobe"
/obj/structure/closet/wardrobe/white/medical/New()
new /obj/item/clothing/under/rank/nursesuit (src)
new /obj/item/clothing/head/nursehat (src)
new /obj/item/clothing/under/rank/nurse(src)
new /obj/item/clothing/under/rank/orderly(src)
new /obj/item/clothing/suit/storage/fr_jacket(src)
new /obj/item/clothing/suit/storage/fr_jacket(src)
new /obj/item/clothing/suit/storage/fr_jacket(src)
new /obj/item/clothing/under/rank/medical/blue(src)
new /obj/item/clothing/head/surgery/blue(src)
new /obj/item/clothing/under/rank/medical/green(src)
new /obj/item/clothing/head/surgery/green(src)
new /obj/item/clothing/under/rank/medical/purple(src)
new /obj/item/clothing/head/surgery/purple(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/shoes/black(src)
return
/obj/structure/closet/wardrobe/pjs
name = "Pajama wardrobe"
@@ -69,4 +69,8 @@
/obj/structure/closet/critter/cat
name = "cat crate"
content_mob = /mob/living/simple_animal/cat
content_mob = /mob/living/simple_animal/cat
/obj/structure/closet/critter/fox
name = "fox crate"
content_mob = /mob/living/simple_animal/fox
@@ -1,3 +1,4 @@
/obj/structure/stool/bed/chair/e_chair
name = "electric chair"
desc = "Looks absolutely SHOCKING!"
@@ -27,13 +28,15 @@
set name = "Toggle Electric Chair"
set category = "Object"
set src in oview(1)
if(usr.stat || !usr.canmove || usr.restrained())
return
if(on)
on = 0
icon_state = "echair0"
else
on = 1
icon_state = "echair1"
shock()
usr << "<span class='notice'>You switch [on ? "on" : "off"] [src].</span>"
return
@@ -70,8 +73,10 @@
sleep(1)
buckled_mob.burn_skin(85)
buckled_mob.Stun(600)
on = 0
visible_message("<span class='danger'>The electric chair went off!</span>", "<span class='danger'>You hear a deep sharp shock!</span>")
A.power_light = light
A.updateicon()
return
return
+2 -2
View File
@@ -110,7 +110,7 @@
health -= M.melee_damage_upper
healthcheck()
return
/obj/structure/grille/mech_melee_attack(obj/mecha/M)
if(..())
playsound(loc, 'sound/effects/grillehit.ogg', 80, 1)
@@ -132,7 +132,7 @@
if(!Proj) return
//Tasers and the like should not damage grilles.
if(Proj.damage_type == HALLOSS)
if(Proj.damage_type == STAMINA)
return
src.health -= Proj.damage*0.2
@@ -297,6 +297,7 @@
icon_state = "inf_box"
item_state = "syringe_kit"
max_combined_w_class = 21
w_class = 3
New()
..()
+1 -10
View File
@@ -89,16 +89,7 @@
/obj/structure/lamarr/proc/Break()
if(occupied)
new /mob/living/carbon/alien/facehugger/lamarr(src.loc)
new /obj/item/clothing/mask/facehugger/lamarr(src.loc)
occupied = 0
update_icon()
return
/mob/living/carbon/alien/facehugger/lamarr
name = "Lamarr"
desc = "The worst she might do is attempt to... couple with your head."//hope we don't get sued over a harmless reference, rite?
sterile = 1
gender = FEMALE
/obj/item/clothing/mask/facehugger/lamarr/New()//to prevent deleting it if aliums are disabled
return
@@ -297,5 +297,4 @@
CheckHardness()
playsound(loc, 'sound/effects/attackblob.ogg', 100, 1)
..()
..()
@@ -22,7 +22,7 @@
"<span class='warning'>[buckled_mob.name] struggles to break free of the gelatinous resin...</span>",\
"<span class='warning'>You struggle to break free from the gelatinous resin...</span>",\
"<span class='notice'>You hear squelching...</span>")
spawn(1200)
spawn(600)
if(user && buckled_mob && user.buckled == src)
buckled_mob.pixel_y = 0
unbuckle()
@@ -51,11 +51,21 @@
M.loc = src.loc
M.dir = src.dir
M.update_canmove()
M.pixel_y = 6
M.pixel_y += 1
M.pixel_x += 2
M.anchored = anchored
src.buckled_mob = M
src.add_fingerprint(user)
src.overlays += image('icons/mob/alien.dmi', "nestoverlay", layer=6)
return
/obj/structure/stool/bed/nest/unbuckle()
if(buckled_mob)
buckled_mob.pixel_y -= 1
buckled_mob.pixel_x -= 2
overlays.Cut()
..()
/obj/structure/stool/bed/nest/attackby(obj/item/weapon/W as obj, mob/user as mob)
var/aforce = W.force
health = max(0, health - aforce)
@@ -104,11 +104,7 @@
// datum, there might be problems if I don't...
/obj/structure/transit_tube_pod/return_air()
var/datum/gas_mixture/GM = new()
GM.oxygen = air_contents.oxygen
GM.carbon_dioxide = air_contents.carbon_dioxide
GM.nitrogen = air_contents.nitrogen
GM.toxins = air_contents.toxins
GM.temperature = air_contents.temperature
GM.copy_from(air_contents)
return GM
// For now, copying what I found in an unused FEA file (and almost identical in a
+15 -15
View File
@@ -8,32 +8,32 @@ var/global/wcColored
var/list/brig = list("#aa0808", "#7f0606", "#ff0000")
var/list/common = list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8fcf44", "#ffffff")
wcBar = pick(bar)
wcBar = pick(bar)
wcBrig = pick(brig)
wcCommon = pick(common)
/obj/proc/color_windows(var/obj/W as obj)
if(!wcColored)
sleep(50) // Sleeping to make sure the glass has initialized on the map
wcColored = 1
var/list/wcBarAreas = list(/area/crew_quarters/bar)
var/list/wcBrigAreas = list(/area/security,/area/security/main,/area/security/lobby,/area/security/brig,/area/security/permabrig,/area/security/prison,/area/security/prison/cell_block/A,/area/security/prison/cell_block/B,/area/security/prison/cell_block/C,/area/security/execution,/area/security/processing,/area/security/interrogation,/area/security/interrogationobs,/area/security/evidence,/area/security/prisonlockers,/area/security/medbay,/area/security/processing,/area/security/warden,/area/security/armoury,/area/security/securearmoury,/area/security/armoury/gamma,/area/security/securehallway,/area/security/hos,/area/security/podbay,/area/security/detectives_office,/area/security/range,/area/security/nuke_storage,/area/security/checkpoint,/area/security/checkpoint2,/area/security/checkpoint2,/area/security/checkpoint/supply,/area/security/checkpoint/engineering,/area/security/checkpoint/medical,/area/security/checkpoint/science,/area/security/vacantoffice,/area/security/vacantoffice2,/area/prison,/area/prison/arrival_airlock,/area/prison/control,/area/prison/crew_quarters,/area/prison/rec_room,/area/prison/closet,/area/prison/hallway/fore,/area/prison/hallway/aft,/area/prison/hallway/port,/area/prison/hallway/starboard,/area/prison/morgue,/area/prison/medical_research,/area/prison/medical,/area/prison/solar,/area/prison/podbay,/area/prison/solar_control,/area/prison/solitary,/area/prison/cell_block,/area/prison/cell_block/A,/area/prison/cell_block/B,/area/prison/cell_block/C,/area/shuttle/gamma/space,/area/shuttle/gamma/station)
var/list/wcBrigAreas = list(/area/security,/area/security/main,/area/security/lobby,/area/security/brig,/area/security/permabrig,/area/security/prison,/area/security/prison/cell_block/A,/area/security/prison/cell_block/B,/area/security/prison/cell_block/C,/area/security/execution,/area/security/processing,/area/security/interrogation,/area/security/interrogationobs,/area/security/evidence,/area/security/prisonlockers,/area/security/medbay,/area/security/processing,/area/security/warden,/area/security/armoury,/area/security/securearmoury,/area/security/armoury/gamma,/area/security/securehallway,/area/security/hos,/area/security/podbay,/area/security/detectives_office,/area/security/range,/area/security/nuke_storage,/area/security/customs,/area/security/customs2,/area/security/checkpoint,/area/security/checkpoint2,/area/security/checkpoint2,/area/security/checkpoint/supply,/area/security/checkpoint/engineering,/area/security/checkpoint/medical,/area/security/checkpoint/science,/area/security/vacantoffice,/area/security/vacantoffice2,/area/prison,/area/prison/arrival_airlock,/area/prison/control,/area/prison/crew_quarters,/area/prison/rec_room,/area/prison/closet,/area/prison/hallway/fore,/area/prison/hallway/aft,/area/prison/hallway/port,/area/prison/hallway/starboard,/area/prison/morgue,/area/prison/medical_research,/area/prison/medical,/area/prison/solar,/area/prison/podbay,/area/prison/solar_control,/area/prison/solitary,/area/prison/cell_block,/area/prison/cell_block/A,/area/prison/cell_block/B,/area/prison/cell_block/C,/area/shuttle/gamma/space,/area/shuttle/gamma/station,/area/security/prisonershuttle)
var/newcolor
for(var/A in wcBarAreas)
if(W.areaMaster == locate(A))
newcolor = wcBar
break
for(var/A in wcBrigAreas)
if(W.areaMaster == locate(A))
newcolor = wcBrig
break
if(!newcolor)
if(!newcolor)
newcolor = wcCommon
return newcolor
/obj/structure/window
@@ -56,10 +56,10 @@ var/global/wcColored
var/sheets = 1 // Number of sheets needed to build this window (determines how much shit is spawned by destroy())
// var/silicate = 0 // number of units of silicate
// var/icon/silicateIcon = null // the silicated icon
/obj/structure/window/bullet_act(var/obj/item/projectile/Proj)
//Tasers and the like should not damage windows.
if(Proj.damage_type == HALLOSS)
if(Proj.damage_type == STAMINA)
return
health -= Proj.damage
@@ -281,7 +281,7 @@ var/global/wcColored
if(G.amount>=G.max_amount)
continue
G.attackby(NG, user)
if (reinf)
var/obj/item/stack/rods/NR = new (src.loc)
for (var/obj/item/stack/rods/R in src.loc)
@@ -289,7 +289,7 @@ var/global/wcColored
continue
if(R.amount>=R.max_amount)
continue
R.attackby(NR, user)
R.attackby(NR, user)
user << "<span class='notice'>You have disassembled the window.</span>"
disassembled = 1
@@ -316,8 +316,8 @@ var/global/wcColored
/obj/structure/window/mech_melee_attack(obj/mecha/M)
if(..())
hit(M.force, 1)
hit(M.force, 1)
/obj/structure/window/proc/hit(var/damage, var/sound_effect = 1)
if(reinf) damage *= 0.5
health = max(0, health - damage)