mirror of
https://github.com/CHOMPstation/CHOMPstation.git
synced 2026-08-29 15:06:39 +01:00
Merge branch 'master' of https://github.com/PolarisSS13/Polaris into polaris-sync-2018-02-16
# Conflicts: # code/_onclick/hud/screen_objects.dm # code/game/objects/items/weapons/storage/storage.dm # code/game/objects/structures/crates_lockers/closets/secure/medical.dm # code/modules/admin/admin_verbs.dm # code/modules/clothing/clothing.dm # code/modules/clothing/gloves/color.dm # code/modules/lore_codex/codex.dm # code/modules/mob/living/simple_animal/aliens/alien.dm # code/modules/mob/living/simple_animal/animals/cat.dm # code/modules/mob/living/simple_animal/animals/goose.dm # code/modules/mob/living/simple_animal/simple_animal.dm # code/modules/mob/mob_defines.dm # code/modules/projectiles/projectile/special.dm # html/changelogs/.all_changelog.yml # maps/southern_cross/southern_cross-1.dmm # maps/southern_cross/southern_cross-7.dmm # vorestation.dme
This commit is contained in:
@@ -247,3 +247,9 @@ var/global/list/image/splatter_cache=list()
|
||||
/obj/effect/decal/cleanable/mucus/New()
|
||||
spawn(DRYING_TIME * 2)
|
||||
dry=1
|
||||
|
||||
//This version should be used for admin spawns and pre-mapped virus vectors (e.g. in PoIs), this version does not dry
|
||||
/obj/effect/decal/cleanable/mucus/mapped/New()
|
||||
...()
|
||||
virus2 = new /datum/disease2/disease
|
||||
virus2.makerandom()
|
||||
|
||||
@@ -100,6 +100,7 @@
|
||||
icon = 'icons/effects/blood.dmi'
|
||||
icon_state = "vomit_1"
|
||||
random_icon_states = list("vomit_1", "vomit_2", "vomit_3", "vomit_4")
|
||||
var/list/datum/disease2/disease/virus2 = list()
|
||||
|
||||
/obj/effect/decal/cleanable/tomato_smudge
|
||||
name = "tomato smudge"
|
||||
|
||||
@@ -1,105 +1,274 @@
|
||||
/obj/effect/mine
|
||||
name = "Mine"
|
||||
desc = "I Better stay away from that thing."
|
||||
density = 1
|
||||
name = "land mine" //The name and description are deliberately NOT modified, so you can't game the mines you find.
|
||||
desc = "A small explosive land mine."
|
||||
density = 0
|
||||
anchored = 1
|
||||
layer = 3
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "uglymine"
|
||||
var/triggerproc = "explode" //name of the proc thats called when the mine is triggered
|
||||
var/triggered = 0
|
||||
var/smoke_strength = 3
|
||||
var/mineitemtype = /obj/item/weapon/mine
|
||||
var/panel_open = 0
|
||||
var/datum/wires/mines/wires = null
|
||||
|
||||
/obj/effect/mine/New()
|
||||
icon_state = "uglyminearmed"
|
||||
wires = new(src)
|
||||
|
||||
/obj/effect/mine/proc/explode(var/mob/living/M)
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
|
||||
triggered = 1
|
||||
s.set_up(3, 1, src)
|
||||
s.start()
|
||||
explosion(loc, 0, 2, 3, 4) //land mines are dangerous, folks.
|
||||
visible_message("\The [src.name] detonates!")
|
||||
qdel(s)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/mine/bullet_act()
|
||||
if(prob(50))
|
||||
explode()
|
||||
|
||||
/obj/effect/mine/ex_act(severity)
|
||||
if(severity <= 2 || prob(50))
|
||||
explode()
|
||||
..()
|
||||
|
||||
/obj/effect/mine/Crossed(AM as mob|obj)
|
||||
Bumped(AM)
|
||||
|
||||
/obj/effect/mine/Bumped(mob/M as mob|obj)
|
||||
|
||||
if(triggered) return
|
||||
if(triggered)
|
||||
return
|
||||
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
for(var/mob/O in viewers(world.view, src.loc))
|
||||
O << "<font color='red'>[M] triggered the \icon[src] [src]</font>"
|
||||
triggered = 1
|
||||
call(src,triggerproc)(M)
|
||||
if(istype(M, /mob/living/))
|
||||
if(!M.hovering)
|
||||
explode(M)
|
||||
|
||||
/obj/effect/mine/proc/triggerrad(obj)
|
||||
/obj/effect/mine/attackby(obj/item/W as obj, mob/living/user as mob)
|
||||
if(isscrewdriver(W))
|
||||
panel_open = !panel_open
|
||||
user.visible_message("<span class='warning'>[user] very carefully screws the mine's panel [panel_open ? "open" : "closed"].</span>",
|
||||
"<span class='notice'>You very carefully screw the mine's panel [panel_open ? "open" : "closed"].</span>")
|
||||
playsound(src.loc, W.usesound, 50, 1)
|
||||
|
||||
else if((iswirecutter(W) || ismultitool(W)) && panel_open)
|
||||
interact(user)
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/effect/mine/interact(mob/living/user as mob)
|
||||
if(!panel_open || istype(user, /mob/living/silicon/ai))
|
||||
return
|
||||
user.set_machine(src)
|
||||
wires.Interact(user)
|
||||
|
||||
/obj/effect/mine/dnascramble
|
||||
mineitemtype = /obj/item/weapon/mine/dnascramble
|
||||
|
||||
/obj/effect/mine/dnascramble/explode(var/mob/living/M)
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
|
||||
triggered = 1
|
||||
s.set_up(3, 1, src)
|
||||
s.start()
|
||||
if(M)
|
||||
M.radiation += 50
|
||||
randmutb(M)
|
||||
domutcheck(M,null)
|
||||
visible_message("\The [src.name] flashes violently before disintegrating!")
|
||||
spawn(0)
|
||||
qdel(s)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/mine/stun
|
||||
mineitemtype = /obj/item/weapon/mine/stun
|
||||
|
||||
/obj/effect/mine/stun/explode(var/mob/living/M)
|
||||
triggered = 1
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
|
||||
s.set_up(3, 1, src)
|
||||
s.start()
|
||||
obj:radiation += 50
|
||||
randmutb(obj)
|
||||
domutcheck(obj,null)
|
||||
spawn(0)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/mine/proc/triggerstun(obj)
|
||||
if(ismob(obj))
|
||||
var/mob/M = obj
|
||||
if(M)
|
||||
M.Stun(30)
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
|
||||
s.set_up(3, 1, src)
|
||||
s.start()
|
||||
visible_message("\The [src.name] flashes violently before disintegrating!")
|
||||
spawn(0)
|
||||
qdel(s)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/mine/proc/triggern2o(obj)
|
||||
//example: n2o triggerproc
|
||||
//note: im lazy
|
||||
/obj/effect/mine/n2o
|
||||
mineitemtype = /obj/item/weapon/mine/n2o
|
||||
|
||||
/obj/effect/mine/n2o/explode(var/mob/living/M)
|
||||
triggered = 1
|
||||
for (var/turf/simulated/floor/target in range(1,src))
|
||||
if(!target.blocks_air)
|
||||
target.assume_gas("sleeping_agent", 30)
|
||||
|
||||
visible_message("\The [src.name] detonates!")
|
||||
spawn(0)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/mine/proc/triggerphoron(obj)
|
||||
/obj/effect/mine/phoron
|
||||
mineitemtype = /obj/item/weapon/mine/phoron
|
||||
|
||||
/obj/effect/mine/phoron/explode(var/mob/living/M)
|
||||
triggered = 1
|
||||
for (var/turf/simulated/floor/target in range(1,src))
|
||||
if(!target.blocks_air)
|
||||
target.assume_gas("phoron", 30)
|
||||
|
||||
target.hotspot_expose(1000, CELL_VOLUME)
|
||||
|
||||
visible_message("\The [src.name] detonates!")
|
||||
spawn(0)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/mine/proc/triggerkick(obj)
|
||||
/obj/effect/mine/kick
|
||||
mineitemtype = /obj/item/weapon/mine/kick
|
||||
|
||||
/obj/effect/mine/kick/explode(var/mob/living/M)
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
|
||||
triggered = 1
|
||||
s.set_up(3, 1, src)
|
||||
s.start()
|
||||
if(M)
|
||||
qdel(M.client)
|
||||
spawn(0)
|
||||
qdel(s)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/mine/frag
|
||||
mineitemtype = /obj/item/weapon/mine/frag
|
||||
var/fragment_types = list(/obj/item/projectile/bullet/pellet/fragment)
|
||||
var/num_fragments = 20 //total number of fragments produced by the grenade
|
||||
//The radius of the circle used to launch projectiles. Lower values mean less projectiles are used but if set too low gaps may appear in the spread pattern
|
||||
var/spread_range = 7
|
||||
|
||||
/obj/effect/mine/frag/explode(var/mob/living/M)
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
|
||||
triggered = 1
|
||||
s.set_up(3, 1, src)
|
||||
s.start()
|
||||
var/turf/O = get_turf(src)
|
||||
if(!O)
|
||||
return
|
||||
src.fragmentate(O, 20, 7, list(/obj/item/projectile/bullet/pellet/fragment)) //only 20 weak fragments because you're stepping directly on it
|
||||
visible_message("\The [src.name] detonates!")
|
||||
spawn(0)
|
||||
qdel(s)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/mine/training //Name and Desc commented out so it's possible to trick people with the training mines
|
||||
// name = "training mine"
|
||||
// desc = "A mine with its payload removed, for EOD training and demonstrations."
|
||||
mineitemtype = /obj/item/weapon/mine/training
|
||||
|
||||
/obj/effect/mine/training/explode(var/mob/living/M)
|
||||
triggered = 1
|
||||
visible_message("\The [src.name]'s light flashes rapidly as it 'explodes'.")
|
||||
new src.mineitemtype(get_turf(src))
|
||||
spawn(0)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/mine/emp
|
||||
mineitemtype = /obj/item/weapon/mine/emp
|
||||
|
||||
/obj/effect/mine/emp/explode(var/mob/living/M)
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
|
||||
s.set_up(3, 1, src)
|
||||
s.start()
|
||||
qdel(obj:client)
|
||||
visible_message("\The [src.name] flashes violently before disintegrating!")
|
||||
empulse(loc, 2, 4, 7, 10, 1) // As strong as an EMP grenade
|
||||
spawn(0)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/mine/proc/explode(obj)
|
||||
explosion(loc, 0, 1, 2, 3)
|
||||
/obj/effect/mine/incendiary
|
||||
mineitemtype = /obj/item/weapon/mine/incendiary
|
||||
|
||||
/obj/effect/mine/incendiary/explode(var/mob/living/M)
|
||||
triggered = 1
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
|
||||
s.set_up(3, 1, src)
|
||||
s.start()
|
||||
if(M)
|
||||
M.adjust_fire_stacks(5)
|
||||
M.fire_act()
|
||||
visible_message("\The [src.name] bursts into flames!")
|
||||
spawn(0)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/mine/dnascramble
|
||||
name = "Radiation Mine"
|
||||
/////////////////////////////////////////////
|
||||
// The held item version of the above mines
|
||||
/////////////////////////////////////////////
|
||||
/obj/item/weapon/mine
|
||||
name = "mine"
|
||||
desc = "A small explosive mine with 'HE' and a grenade symbol on the side."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "uglymine"
|
||||
triggerproc = "triggerrad"
|
||||
var/countdown = 10
|
||||
var/minetype = /obj/effect/mine //This MUST be an /obj/effect/mine type, or it'll runtime.
|
||||
|
||||
/obj/effect/mine/phoron
|
||||
name = "Phoron Mine"
|
||||
icon_state = "uglymine"
|
||||
triggerproc = "triggerphoron"
|
||||
/obj/item/weapon/mine/attack_self(mob/user as mob) // You do not want to move or throw a land mine while priming it... Explosives + Sudden Movement = Bad Times
|
||||
add_fingerprint(user)
|
||||
msg_admin_attack("[user.name] ([user.ckey]) primed \a [src] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||
user.visible_message("[user] starts priming \the [src.name].", "You start priming \the [src.name]. Hold still!")
|
||||
if(do_after(user, 10 SECONDS))
|
||||
playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
|
||||
prime(user)
|
||||
else
|
||||
visible_message("[user] triggers \the [src.name]!", "You accidentally trigger \the [src.name]!")
|
||||
prime(user, TRUE)
|
||||
return
|
||||
|
||||
/obj/effect/mine/kick
|
||||
name = "Kick Mine"
|
||||
icon_state = "uglymine"
|
||||
triggerproc = "triggerkick"
|
||||
/obj/item/weapon/mine/proc/prime(mob/user as mob, var/explode_now = FALSE)
|
||||
visible_message("\The [src.name] beeps as the priming sequence completes.")
|
||||
var/obj/effect/mine/R = new minetype(get_turf(src))
|
||||
src.transfer_fingerprints_to(R)
|
||||
R.add_fingerprint(user)
|
||||
if(explode_now)
|
||||
R.explode(user)
|
||||
spawn(0)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/mine/n2o
|
||||
name = "N2O Mine"
|
||||
icon_state = "uglymine"
|
||||
triggerproc = "triggern2o"
|
||||
/obj/item/weapon/mine/dnascramble
|
||||
name = "radiation mine"
|
||||
desc = "A small explosive mine with a radiation symbol on the side."
|
||||
minetype = /obj/effect/mine/dnascramble
|
||||
|
||||
/obj/effect/mine/stun
|
||||
name = "Stun Mine"
|
||||
icon_state = "uglymine"
|
||||
triggerproc = "triggerstun"
|
||||
/obj/item/weapon/mine/phoron
|
||||
name = "incendiary mine"
|
||||
desc = "A small explosive mine with a fire symbol on the side."
|
||||
minetype = /obj/effect/mine/phoron
|
||||
|
||||
/obj/item/weapon/mine/kick
|
||||
name = "kick mine"
|
||||
desc = "Concentrated war crimes. Handle with care."
|
||||
minetype = /obj/effect/mine/kick
|
||||
|
||||
/obj/item/weapon/mine/n2o
|
||||
name = "nitrous oxide mine"
|
||||
desc = "A small explosive mine with three Z's on the side."
|
||||
minetype = /obj/effect/mine/n2o
|
||||
|
||||
/obj/item/weapon/mine/stun
|
||||
name = "stun mine"
|
||||
desc = "A small explosive mine with a lightning bolt symbol on the side."
|
||||
minetype = /obj/effect/mine/stun
|
||||
|
||||
/obj/item/weapon/mine/frag
|
||||
name = "fragmentation mine"
|
||||
desc = "A small explosive mine with 'FRAG' and a grenade symbol on the side."
|
||||
minetype = /obj/effect/mine/frag
|
||||
|
||||
/obj/item/weapon/mine/training
|
||||
name = "training mine"
|
||||
desc = "A mine with its payload removed, for EOD training and demonstrations."
|
||||
minetype = /obj/effect/mine/training
|
||||
|
||||
/obj/item/weapon/mine/emp
|
||||
name = "emp mine"
|
||||
desc = "A small explosive mine with a lightning bolt symbol on the side."
|
||||
minetype = /obj/effect/mine/emp
|
||||
|
||||
/obj/item/weapon/mine/incendiary
|
||||
name = "incendiary mine"
|
||||
desc = "A small explosive mine with a fire symbol on the side."
|
||||
minetype = /obj/effect/mine/incendiary
|
||||
+681
-658
File diff suppressed because it is too large
Load Diff
@@ -44,7 +44,7 @@
|
||||
|
||||
if(paddles && paddles.loc == src) //in case paddles got destroyed somehow.
|
||||
new_overlays += "[initial(icon_state)]-paddles"
|
||||
if(bcell)
|
||||
if(bcell && paddles)
|
||||
if(bcell.check_charge(paddles.chargecost))
|
||||
if(paddles.combat)
|
||||
new_overlays += "[initial(icon_state)]-combat"
|
||||
|
||||
@@ -80,7 +80,7 @@ var/list/GPS_list = list()
|
||||
|
||||
var/turf/curr = get_turf(src)
|
||||
var/area/my_area = get_area(src)
|
||||
dat += "Current location: [my_area.name] <b>([curr.x], [curr.y], [curr.z])</b>"
|
||||
dat += "Current location: [my_area.name] <b>([curr.x], [curr.y], [using_map.get_zlevel_name(curr.z)])</b>"
|
||||
dat += "[hide_signal ? "Tagged" : "Broadcasting"] as '[gps_tag]'. <a href='?src=\ref[src];tag=1'>\[Change Tag\]</a> \
|
||||
<a href='?src=\ref[src];range=1'>\[Toggle Scan Range\]</a> \
|
||||
[can_hide_signal ? "<a href='?src=\ref[src];hide=1'>\[Toggle Signal Visibility\]</a>":""]"
|
||||
@@ -103,16 +103,17 @@ var/list/GPS_list = list()
|
||||
var/area_name = their_area.name
|
||||
if(istype(their_area, /area/submap))
|
||||
area_name = "Unknown Area" // Avoid spoilers.
|
||||
var/coord = "[T.x], [T.y], [T.z]"
|
||||
var/degrees = round(Get_Angle(curr, T))
|
||||
var/Z_name = using_map.get_zlevel_name(T.z)
|
||||
var/direction = uppertext(dir2text(get_dir(curr, T)))
|
||||
var/distance = get_dist(curr, T)
|
||||
var/local = curr.z == T.z ? TRUE : FALSE
|
||||
if(!direction)
|
||||
direction = "CENTER"
|
||||
degrees = "N/A"
|
||||
|
||||
signals += " [G.gps_tag]: [area_name] ([coord]) [local ? "Dist: [distance]m Dir: [degrees]° ([direction])":""]"
|
||||
if(istype(T, /obj/item/device/gps/internal/poi))
|
||||
signals += " [G.gps_tag]: [area_name] [local ? "Dist: [round(distance, 10)]m [direction])" : "in \the [Z_name]"]"
|
||||
else
|
||||
signals += " [G.gps_tag]: [area_name] [local ? "Dist: [round(distance, 10)]m [direction])" : "in \the [Z_name]"]"
|
||||
|
||||
if(signals.len)
|
||||
dat += "Detected signals;"
|
||||
@@ -179,15 +180,6 @@ var/list/GPS_list = list()
|
||||
/obj/item/device/gps/explorer/on
|
||||
tracking = TRUE
|
||||
|
||||
/obj/item/device/gps/syndie
|
||||
icon_state = "gps-syndie"
|
||||
gps_tag = "NULL"
|
||||
desc = "A positioning system that has extended range and can detect other GPS device signals without revealing its own. How that works is best left a mystery. Alt+click to toggle power."
|
||||
origin_tech = list(TECH_MATERIAL = 2, TECH_BLUESPACE = 3, TECH_MAGNET = 2, TECH_ILLEGAL = 2)
|
||||
long_range = TRUE
|
||||
hide_signal = TRUE
|
||||
can_hide_signal = TRUE
|
||||
|
||||
/obj/item/device/gps/robot
|
||||
icon_state = "gps-b"
|
||||
gps_tag = "SYNTH0"
|
||||
@@ -207,6 +199,72 @@ var/list/GPS_list = list()
|
||||
gps_tag = "NT_BASE"
|
||||
desc = "A homing signal from NanoTrasen's outpost."
|
||||
|
||||
/obj/item/device/gps/internal/alien_vessel
|
||||
gps_tag = "Mysterious Signal"
|
||||
desc = "A signal that seems forboding."
|
||||
/obj/item/device/gps/internal/poi
|
||||
gps_tag = "Unidentified Signal"
|
||||
desc = "A signal that seems forboding."
|
||||
|
||||
/obj/item/device/gps/syndie
|
||||
icon_state = "gps-syndie"
|
||||
gps_tag = "NULL"
|
||||
desc = "A positioning system that has extended range and can detect other GPS device signals without revealing its own. How that works is best left a mystery. Alt+click to toggle power."
|
||||
origin_tech = list(TECH_MATERIAL = 2, TECH_BLUESPACE = 3, TECH_MAGNET = 2, TECH_ILLEGAL = 2)
|
||||
long_range = TRUE
|
||||
hide_signal = TRUE
|
||||
can_hide_signal = TRUE
|
||||
|
||||
/obj/item/device/gps/syndie/display(mob/user)
|
||||
if(!tracking)
|
||||
to_chat(user, "The device is off. Alt-click it to turn it on.")
|
||||
return
|
||||
if(emped)
|
||||
to_chat(user, "It's busted!")
|
||||
return
|
||||
|
||||
var/list/dat = list()
|
||||
|
||||
var/turf/curr = get_turf(src)
|
||||
var/area/my_area = get_area(src)
|
||||
dat += "Current location: [my_area.name] <b>([curr.x], [curr.y], [using_map.get_zlevel_name(curr.z)])</b>"
|
||||
dat += "[hide_signal ? "Tagged" : "Broadcasting"] as '[gps_tag]'. <a href='?src=\ref[src];tag=1'>\[Change Tag\]</a> \
|
||||
<a href='?src=\ref[src];range=1'>\[Toggle Scan Range\]</a> \
|
||||
[can_hide_signal ? "<a href='?src=\ref[src];hide=1'>\[Toggle Signal Visibility\]</a>":""]"
|
||||
|
||||
var/list/signals = list()
|
||||
|
||||
for(var/gps in GPS_list)
|
||||
var/obj/item/device/gps/G = gps
|
||||
if(G.emped || !G.tracking || G.hide_signal || G == src) // Their GPS isn't on or functional.
|
||||
continue
|
||||
var/turf/T = get_turf(G)
|
||||
var/z_level_detection = using_map.get_map_levels(curr.z, long_range)
|
||||
|
||||
if(local_mode && T.z != curr.z) // Only care about the current z-level.
|
||||
continue
|
||||
else if(!(T.z in z_level_detection)) // Too far away.
|
||||
continue
|
||||
|
||||
var/area/their_area = get_area(G)
|
||||
var/area_name = their_area.name
|
||||
if(istype(their_area, /area/submap))
|
||||
area_name = "Unknown Area" // Avoid spoilers.
|
||||
var/Z_name = using_map.get_zlevel_name(T.z)
|
||||
var/coord = "[T.x], [T.y], [Z_name]"
|
||||
var/degrees = round(Get_Angle(curr, T))
|
||||
var/direction = uppertext(dir2text(get_dir(curr, T)))
|
||||
var/distance = get_dist(curr, T)
|
||||
var/local = curr.z == T.z ? TRUE : FALSE
|
||||
if(!direction)
|
||||
direction = "CENTER"
|
||||
degrees = "N/A"
|
||||
|
||||
signals += " [G.gps_tag]: [area_name] ([coord]) [local ? "Dist: [distance]m Dir: [degrees]° ([direction])":""]"
|
||||
|
||||
if(signals.len)
|
||||
dat += "Detected signals;"
|
||||
for(var/line in signals)
|
||||
dat += line
|
||||
else
|
||||
dat += "No other signals detected."
|
||||
|
||||
var/result = dat.Join("<br>")
|
||||
to_chat(user, result)
|
||||
|
||||
@@ -109,9 +109,9 @@
|
||||
suit.icon_override = new_icon_override_file
|
||||
S.icon_override = new_icon_override_file
|
||||
to_chat(user, "You set about modifying the suit into [suit].")
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(istype(H))
|
||||
suit.species_restricted = list(H.species.get_bodytype(H))
|
||||
// var/mob/living/carbon/human/H = user
|
||||
// if(istype(H))
|
||||
// suit.species_restricted = list(H.species.get_bodytype(H)) Does not quite make sense for something usually very pliable.
|
||||
else
|
||||
var/obj/item/clothing/suit/space/void/suit = I
|
||||
suit.name = "[new_name] voidsuit"
|
||||
|
||||
@@ -54,6 +54,8 @@
|
||||
/obj/item/borg/sight/material
|
||||
name = "\proper material scanner vision"
|
||||
sight_mode = BORGMATERIAL
|
||||
icon_state = "material"
|
||||
icon = 'icons/obj/clothing/glasses.dmi'
|
||||
|
||||
/obj/item/borg/sight/hud
|
||||
name = "hud"
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
icon_state = "rods"
|
||||
|
||||
var/global/list/datum/stack_recipe/rods_recipes = list( \
|
||||
new/datum/stack_recipe("grille", /obj/structure/grille, 2, time = 10, one_per_turf = 1, on_floor = 1),
|
||||
new/datum/stack_recipe("grille", /obj/structure/grille, 2, time = 10, one_per_turf = 1, on_floor = 0),
|
||||
new/datum/stack_recipe("catwalk", /obj/structure/catwalk, 2, time = 80, one_per_turf = 1, on_floor = 1))
|
||||
|
||||
/obj/item/stack/rods/attackby(obj/item/W as obj, mob/user as mob)
|
||||
@@ -44,7 +44,7 @@ var/global/list/datum/stack_recipe/rods_recipes = list( \
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
|
||||
if(get_amount() < 2)
|
||||
user << "<span class='warning'>You need at least two rods to do this.</span>"
|
||||
to_chat(user, "<span class='warning'>You need at least two rods to do this.</span>")
|
||||
return
|
||||
|
||||
if(WT.remove_fuel(0,user))
|
||||
@@ -91,15 +91,15 @@ var/global/list/datum/stack_recipe/rods_recipes = list( \
|
||||
|
||||
else if(!in_use)
|
||||
if(get_amount() < 2)
|
||||
user << "<span class='warning'>You need at least two rods to do this.</span>"
|
||||
to_chat(user, "<span class='warning'>You need at least two rods to do this.</span>")
|
||||
return
|
||||
usr << "<span class='notice'>Assembling grille...</span>"
|
||||
to_chat(usr, "<span class='notice'>Assembling grille...</span>")
|
||||
in_use = 1
|
||||
if (!do_after(usr, 10))
|
||||
in_use = 0
|
||||
return
|
||||
var/obj/structure/grille/F = new /obj/structure/grille/ ( usr.loc )
|
||||
usr << "<span class='notice'>You assemble a grille</span>"
|
||||
to_chat(usr, "<span class='notice'>You assemble a grille</span>")
|
||||
in_use = 0
|
||||
F.add_fingerprint(usr)
|
||||
use(2)
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
* Action figures
|
||||
* Plushies
|
||||
* Toy cult sword
|
||||
* Bouquets
|
||||
*/
|
||||
|
||||
|
||||
@@ -872,6 +873,19 @@
|
||||
w_class = ITEMSIZE_LARGE
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "poked")
|
||||
|
||||
//Flowers fake & real
|
||||
|
||||
/obj/item/toy/bouquet
|
||||
name = "bouquet"
|
||||
desc = "A lovely bouquet of flowers. Smells nice!"
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "bouquet"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
|
||||
/obj/item/toy/bouquet/fake
|
||||
name = "plastic bouquet"
|
||||
desc = "A cheap plastic bouquet of flowers. Smells like cheap, toxic plastic."
|
||||
|
||||
/* NYET.
|
||||
/obj/item/weapon/toddler
|
||||
icon_state = "toddler"
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
//These bone objects are mostly for mapping and decoration. They have no actual medical use, so maybe don't try to put them in anybody.
|
||||
/obj/item/weapon/bone
|
||||
name = "bone"
|
||||
desc = "A non-descript bone. It's so old and worn you can barely tell which part of the body it's from."
|
||||
icon = 'icons/obj/bones.dmi'
|
||||
icon_state = "bone"
|
||||
force = 5
|
||||
throwforce = 6
|
||||
item_state = "bone"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked", "bonked", "boned")
|
||||
|
||||
/obj/item/weapon/bone/skull
|
||||
name = "skull"
|
||||
desc = "A skull. Judging by the shape and size, you'd guess that it might be human."
|
||||
icon_state = "skull"
|
||||
throwforce = 7
|
||||
|
||||
/obj/item/weapon/bone/skull/tajaran
|
||||
desc = "A skull. Judging by the shape and size, you'd guess that it might be tajaran."
|
||||
icon_state = "tajskull"
|
||||
|
||||
/obj/item/weapon/bone/skull/unathi
|
||||
desc = "A skull. Judging by the shape and size, you'd guess that it might be unathi."
|
||||
icon_state = "unaskull"
|
||||
|
||||
/obj/item/weapon/bone/skull/unknown
|
||||
desc = "A skull. You're not sure what species it might be, though."
|
||||
icon_state = "xenoskull"
|
||||
|
||||
/obj/item/weapon/bone/arm
|
||||
name = "arm bone"
|
||||
desc = "Wielding this, you're armed and dangerous, no bones about it."
|
||||
attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked", "bonked", "boned", "slapped", "punched")
|
||||
icon_state = "arm"
|
||||
|
||||
/obj/item/weapon/bone/leg
|
||||
name = "leg bone"
|
||||
desc = "Don't worry about getting into an argument with the owner of this. They don't have a leg to stand on."
|
||||
attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked", "bonked", "boned", "kicked")
|
||||
icon_state = "leg"
|
||||
|
||||
/obj/item/weapon/bone/ribs
|
||||
name = "ribcage"
|
||||
desc = "If you had some mallets, you could probably use this as a makeshift xylophone."
|
||||
icon_state = "ribs"
|
||||
@@ -70,3 +70,41 @@
|
||||
lit = 0
|
||||
update_icon()
|
||||
set_light(0)
|
||||
|
||||
/obj/item/weapon/flame/candle/candelabra
|
||||
name = "candelabra"
|
||||
desc = "a small gold candelabra. The cups that hold the candles save some of the wax from dripping off, allowing the candles to burn longer."
|
||||
icon = 'icons/obj/candle.dmi'
|
||||
icon_state = "candelabra"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
wax = 20000
|
||||
|
||||
/obj/item/weapon/flame/candle/candelabra/update_icon()
|
||||
if(wax == 0)
|
||||
icon_state = "candelabra_melted"
|
||||
else
|
||||
icon_state = "candelabra[lit ? "_lit" : ""]"
|
||||
|
||||
/obj/item/weapon/flame/candle/everburn
|
||||
wax = 99999
|
||||
|
||||
/obj/item/weapon/flame/candle/everburn/New()
|
||||
if(!src.lit)
|
||||
src.lit = 1
|
||||
//src.damtype = "fire"
|
||||
for(var/mob/O in viewers(usr, null))
|
||||
O.show_message("<span class='notice'>\The [name] mysteriously lights itself!.</span>", 1)
|
||||
set_light(CANDLE_LUM)
|
||||
processing_objects.Add(src)
|
||||
|
||||
/obj/item/weapon/flame/candle/candelabra/everburn
|
||||
wax = 99999
|
||||
|
||||
/obj/item/weapon/flame/candle/candelabra/everburn/New()
|
||||
if(!src.lit)
|
||||
src.lit = 1
|
||||
//src.damtype = "fire"
|
||||
for(var/mob/O in viewers(usr, null))
|
||||
O.show_message("<span class='notice'>\The [name] mysteriously lights itself!.</span>", 1)
|
||||
set_light(CANDLE_LUM)
|
||||
processing_objects.Add(src)
|
||||
|
||||
@@ -9,6 +9,10 @@
|
||||
origin_tech = list(TECH_POWER = 6, TECH_ENGINEERING = 4)
|
||||
req_components = list(/obj/item/weapon/smes_coil = 1, /obj/item/stack/cable_coil = 30)
|
||||
|
||||
/obj/item/weapon/circuitboard/smes/construct(var/obj/machinery/power/smes/buildable/S)
|
||||
if(..(S))
|
||||
S.output_attempt = 0 //built SMES default to off
|
||||
|
||||
/obj/item/weapon/circuitboard/batteryrack
|
||||
name = T_BOARD("battery rack PSU")
|
||||
build_path = /obj/machinery/power/smes/batteryrack
|
||||
|
||||
@@ -112,15 +112,11 @@
|
||||
usr << "The fingerprint hash on the card is [fingerprint_hash]."
|
||||
return
|
||||
|
||||
/obj/item/weapon/card/id/New()
|
||||
..()
|
||||
var/datum/job/jobdatum
|
||||
for(var/jobtype in typesof(/datum/job))
|
||||
var/datum/job/J = new jobtype
|
||||
if(J.title == rank)
|
||||
jobdatum = J
|
||||
access = jobdatum.get_access()
|
||||
return
|
||||
/obj/item/weapon/card/id/initialize()
|
||||
. = ..()
|
||||
var/datum/job/J = job_master.GetJob(rank)
|
||||
if(J)
|
||||
access = J.get_access()
|
||||
|
||||
/obj/item/weapon/card/id/silver
|
||||
name = "identification card"
|
||||
@@ -163,8 +159,8 @@
|
||||
item_state = "tdgreen"
|
||||
assignment = "Synthetic"
|
||||
|
||||
/obj/item/weapon/card/id/synthetic/New()
|
||||
..()
|
||||
/obj/item/weapon/card/id/synthetic/initialize()
|
||||
. = ..()
|
||||
access = get_all_station_access() + access_synth
|
||||
|
||||
/obj/item/weapon/card/id/centcom
|
||||
@@ -174,12 +170,12 @@
|
||||
registered_name = "Central Command"
|
||||
assignment = "General"
|
||||
|
||||
/obj/item/weapon/card/id/centcom/New()
|
||||
/obj/item/weapon/card/id/centcom/initialize()
|
||||
. = ..()
|
||||
access = get_all_centcom_access()
|
||||
..()
|
||||
|
||||
/obj/item/weapon/card/id/centcom/station/New()
|
||||
..()
|
||||
/obj/item/weapon/card/id/centcom/station/initialize()
|
||||
. = ..()
|
||||
access |= get_all_station_access()
|
||||
|
||||
/obj/item/weapon/card/id/centcom/ERT
|
||||
@@ -187,8 +183,8 @@
|
||||
assignment = "Emergency Response Team"
|
||||
icon_state = "centcom"
|
||||
|
||||
/obj/item/weapon/card/id/centcom/ERT/New()
|
||||
..()
|
||||
/obj/item/weapon/card/id/centcom/ERT/initialize()
|
||||
. = ..()
|
||||
access |= get_all_station_access()
|
||||
|
||||
// Department-flavor IDs
|
||||
|
||||
@@ -6,12 +6,12 @@
|
||||
var/electronic_warfare = 1
|
||||
var/mob/registered_user = null
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/New(mob/user as mob)
|
||||
..()
|
||||
/obj/item/weapon/card/id/syndicate/initialize()
|
||||
. = ..()
|
||||
access = syndicate_access.Copy()
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/station_access/New()
|
||||
..() // Same as the normal Syndicate id, only already has all station access
|
||||
/obj/item/weapon/card/id/syndicate/station_access/initialize()
|
||||
. = ..() // Same as the normal Syndicate id, only already has all station access
|
||||
access |= get_all_station_access()
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/Destroy()
|
||||
|
||||
@@ -8,17 +8,6 @@
|
||||
force_divisor = 0.3 // 18 with hardness 60 (steel)
|
||||
attack_verb = list("jabbed","stabbed","ripped")
|
||||
|
||||
/obj/item/weapon/material/knuckledusters
|
||||
name = "knuckle dusters"
|
||||
desc = "A pair of brass knuckles. Generally used to enhance the user's punches."
|
||||
icon_state = "knuckledusters"
|
||||
gender = PLURAL
|
||||
w_class = ITEMSIZE_SMALL
|
||||
force_divisor = 0.63
|
||||
dulled_divisor = 0.75 //It's a heavy bit of metal
|
||||
attack_verb = list("punched", "beaten", "struck")
|
||||
applies_material_colour = 0
|
||||
|
||||
/obj/item/weapon/material/knife/machete/hatchet
|
||||
name = "hatchet"
|
||||
desc = "A very sharp axe blade upon a short fibremetal handle. It has a long history of chopping things, but now it is used for chopping wood."
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
/obj/item/weapon/material/twohanded/update_held_icon()
|
||||
var/mob/living/M = loc
|
||||
if(istype(M) && !issmall(M) && M.item_is_in_hands(src) && !M.hands_are_full())
|
||||
if(istype(M) && M.can_wield_item(src) && is_held_twohanded(M))
|
||||
wielded = 1
|
||||
force = force_wielded
|
||||
name = "[base_name] (wielded)"
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
* Candle Box
|
||||
* Crayon Box
|
||||
* Cigarette Box
|
||||
* Vial Box
|
||||
* Box of Chocolates
|
||||
*/
|
||||
|
||||
/obj/item/weapon/storage/fancy/
|
||||
@@ -313,3 +315,34 @@
|
||||
/obj/item/weapon/storage/lockbox/vials/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/*
|
||||
* Box of Chocolates/Heart Box
|
||||
*/
|
||||
|
||||
/obj/item/weapon/storage/fancy/heartbox
|
||||
icon_state = "heartbox"
|
||||
name = "box of chocolates"
|
||||
var/startswith = 6
|
||||
max_storage_space = ITEMSIZE_COST_SMALL * 6
|
||||
can_hold = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/white,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/truffle
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/fancy/heartbox/New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/white(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/white(src)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/truffle(src)
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/fancy/heartbox/update_icon(var/itemremoved = 0)
|
||||
if (contents.len == 0)
|
||||
icon_state = "heartbox_empty"
|
||||
return
|
||||
@@ -87,7 +87,7 @@
|
||||
if(!can_place)
|
||||
return
|
||||
|
||||
if(!H || !src || !H.organs_by_name[BP_HEAD] || !H.has_eyes() || H.glasses || (H.head && (H.head.body_parts_covered & FACE)))
|
||||
if(!H || !src || !H.organs_by_name[BP_HEAD] || !H.check_has_mouth() || (H.head && (H.head.body_parts_covered & FACE)))
|
||||
return
|
||||
|
||||
user.visible_message("<span class='danger'>\The [user] has taped up \the [H]'s mouth!</span>")
|
||||
|
||||
@@ -216,7 +216,7 @@
|
||||
//prob(6);/obj/item/weapon/material/butterflyhandle,
|
||||
//prob(6);/obj/item/weapon/material/wirerod,
|
||||
prob(2);/obj/item/weapon/material/butterfly/switchblade,
|
||||
prob(2);/obj/item/weapon/material/knuckledusters,
|
||||
prob(2);/obj/item/clothing/gloves/knuckledusters,
|
||||
prob(1);/obj/item/weapon/material/knife/tacknife,
|
||||
prob(1);/obj/item/clothing/suit/storage/vest/heavy/merc,
|
||||
prob(1);/obj/item/weapon/beartrap,
|
||||
@@ -1133,4 +1133,18 @@ var/list/multi_point_spawns
|
||||
/obj/item/clothing/suit/space/void/mining/alt,
|
||||
/obj/item/clothing/head/helmet/space/void/mining/alt
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
/obj/random/landmine
|
||||
name = "Random Land Mine"
|
||||
desc = "This is a random land mine."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "uglymine"
|
||||
spawn_nothing_percentage = 25
|
||||
|
||||
/obj/random/landmine/item_to_spawn()
|
||||
return pick(prob(30);/obj/effect/mine,
|
||||
prob(25);/obj/effect/mine/frag,
|
||||
prob(25);/obj/effect/mine/emp,
|
||||
prob(10);/obj/effect/mine/stun,
|
||||
prob(10);/obj/effect/mine/incendiary,)
|
||||
@@ -38,7 +38,7 @@
|
||||
..()
|
||||
new /obj/item/clothing/suit/bio_suit/security(src)
|
||||
new /obj/item/clothing/head/bio_hood/security(src)
|
||||
|
||||
new /obj/item/weapon/gun/energy/taser/xeno/sec(src)
|
||||
|
||||
/obj/structure/closet/l3closet/janitor
|
||||
icon_state = "bio_janitor"
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
req_access = list(access_medical)
|
||||
|
||||
|
||||
New()
|
||||
/obj/structure/closet/secure_closet/medical1/New()
|
||||
..()
|
||||
new /obj/item/weapon/storage/box/autoinjectors(src)
|
||||
new /obj/item/weapon/storage/box/syringes(src)
|
||||
@@ -38,7 +38,7 @@
|
||||
req_access = list(access_surgery)
|
||||
|
||||
|
||||
New()
|
||||
/obj/structure/closet/secure_closet/medical2/New()
|
||||
..()
|
||||
new /obj/item/weapon/tank/anesthetic(src)
|
||||
new /obj/item/weapon/tank/anesthetic(src)
|
||||
@@ -60,63 +60,63 @@
|
||||
icon_broken = "securemedbroken"
|
||||
icon_off = "securemedoff"
|
||||
|
||||
New()
|
||||
..()
|
||||
if(prob(50))
|
||||
new /obj/item/weapon/storage/backpack/medic(src)
|
||||
else
|
||||
new /obj/item/weapon/storage/backpack/satchel/med(src)
|
||||
if(prob(50))
|
||||
new /obj/item/weapon/storage/backpack/dufflebag/med(src)
|
||||
new /obj/item/clothing/under/rank/nursesuit (src)
|
||||
new /obj/item/clothing/head/nursehat (src)
|
||||
switch(pick("blue", "green", "purple", "black", "navyblue"))
|
||||
if ("blue")
|
||||
new /obj/item/clothing/under/rank/medical/scrubs(src)
|
||||
new /obj/item/clothing/head/surgery/blue(src)
|
||||
if ("green")
|
||||
new /obj/item/clothing/under/rank/medical/scrubs/green(src)
|
||||
new /obj/item/clothing/head/surgery/green(src)
|
||||
if ("purple")
|
||||
new /obj/item/clothing/under/rank/medical/scrubs/purple(src)
|
||||
new /obj/item/clothing/head/surgery/purple(src)
|
||||
if ("black")
|
||||
new /obj/item/clothing/under/rank/medical/scrubs/black(src)
|
||||
new /obj/item/clothing/head/surgery/black(src)
|
||||
if ("navyblue")
|
||||
new /obj/item/clothing/under/rank/medical/scrubs/navyblue(src)
|
||||
new /obj/item/clothing/head/surgery/navyblue(src)
|
||||
switch(pick("blue", "green", "purple", "black", "navyblue"))
|
||||
if ("blue")
|
||||
new /obj/item/clothing/under/rank/medical/scrubs(src)
|
||||
new /obj/item/clothing/head/surgery/blue(src)
|
||||
if ("green")
|
||||
new /obj/item/clothing/under/rank/medical/scrubs/green(src)
|
||||
new /obj/item/clothing/head/surgery/green(src)
|
||||
if ("purple")
|
||||
new /obj/item/clothing/under/rank/medical/scrubs/purple(src)
|
||||
new /obj/item/clothing/head/surgery/purple(src)
|
||||
if ("black")
|
||||
new /obj/item/clothing/under/rank/medical/scrubs/black(src)
|
||||
new /obj/item/clothing/head/surgery/black(src)
|
||||
if ("navyblue")
|
||||
new /obj/item/clothing/under/rank/medical/scrubs/navyblue(src)
|
||||
new /obj/item/clothing/head/surgery/navyblue(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/toggle/labcoat(src)
|
||||
new /obj/item/clothing/suit/storage/toggle/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/device/radio/headset/headset_med/alt(src)
|
||||
new /obj/item/clothing/suit/storage/hooded/wintercoat/medical(src)
|
||||
new /obj/item/clothing/shoes/boots/winter/medical(src)
|
||||
new /obj/item/weapon/storage/box/freezer(src)
|
||||
new /obj/item/weapon/storage/box/freezer(src)
|
||||
new /obj/item/weapon/storage/box/freezer(src)
|
||||
return
|
||||
/obj/structure/closet/secure_closet/medical3/New()
|
||||
..()
|
||||
if(prob(50))
|
||||
new /obj/item/weapon/storage/backpack/medic(src)
|
||||
else
|
||||
new /obj/item/weapon/storage/backpack/satchel/med(src)
|
||||
if(prob(50))
|
||||
new /obj/item/weapon/storage/backpack/dufflebag/med(src)
|
||||
new /obj/item/clothing/under/rank/nursesuit (src)
|
||||
new /obj/item/clothing/head/nursehat (src)
|
||||
switch(pick("blue", "green", "purple", "black", "navyblue"))
|
||||
if ("blue")
|
||||
new /obj/item/clothing/under/rank/medical/scrubs(src)
|
||||
new /obj/item/clothing/head/surgery/blue(src)
|
||||
if ("green")
|
||||
new /obj/item/clothing/under/rank/medical/scrubs/green(src)
|
||||
new /obj/item/clothing/head/surgery/green(src)
|
||||
if ("purple")
|
||||
new /obj/item/clothing/under/rank/medical/scrubs/purple(src)
|
||||
new /obj/item/clothing/head/surgery/purple(src)
|
||||
if ("black")
|
||||
new /obj/item/clothing/under/rank/medical/scrubs/black(src)
|
||||
new /obj/item/clothing/head/surgery/black(src)
|
||||
if ("navyblue")
|
||||
new /obj/item/clothing/under/rank/medical/scrubs/navyblue(src)
|
||||
new /obj/item/clothing/head/surgery/navyblue(src)
|
||||
switch(pick("blue", "green", "purple", "black", "navyblue"))
|
||||
if ("blue")
|
||||
new /obj/item/clothing/under/rank/medical/scrubs(src)
|
||||
new /obj/item/clothing/head/surgery/blue(src)
|
||||
if ("green")
|
||||
new /obj/item/clothing/under/rank/medical/scrubs/green(src)
|
||||
new /obj/item/clothing/head/surgery/green(src)
|
||||
if ("purple")
|
||||
new /obj/item/clothing/under/rank/medical/scrubs/purple(src)
|
||||
new /obj/item/clothing/head/surgery/purple(src)
|
||||
if ("black")
|
||||
new /obj/item/clothing/under/rank/medical/scrubs/black(src)
|
||||
new /obj/item/clothing/head/surgery/black(src)
|
||||
if ("navyblue")
|
||||
new /obj/item/clothing/under/rank/medical/scrubs/navyblue(src)
|
||||
new /obj/item/clothing/head/surgery/navyblue(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/toggle/labcoat(src)
|
||||
new /obj/item/clothing/suit/storage/toggle/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/device/radio/headset/headset_med/alt(src)
|
||||
new /obj/item/clothing/suit/storage/hooded/wintercoat/medical(src)
|
||||
new /obj/item/clothing/shoes/boots/winter/medical(src)
|
||||
new /obj/item/weapon/storage/box/freezer(src)
|
||||
new /obj/item/weapon/storage/box/freezer(src)
|
||||
new /obj/item/weapon/storage/box/freezer(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/secure_closet/paramedic
|
||||
name = "paramedic locker"
|
||||
@@ -130,7 +130,7 @@
|
||||
req_access = list(access_medical_equip)
|
||||
|
||||
|
||||
New()
|
||||
/obj/structure/closet/secure_closet/paramedic/New()
|
||||
..()
|
||||
new /obj/item/weapon/storage/backpack/dufflebag/emt(src)
|
||||
new /obj/item/weapon/storage/box/autoinjectors(src)
|
||||
@@ -167,51 +167,51 @@
|
||||
icon_broken = "cmosecurebroken"
|
||||
icon_off = "cmosecureoff"
|
||||
|
||||
New()
|
||||
..()
|
||||
if(prob(50))
|
||||
new /obj/item/weapon/storage/backpack/medic(src)
|
||||
else
|
||||
new /obj/item/weapon/storage/backpack/satchel/med(src)
|
||||
if(prob(50))
|
||||
new /obj/item/weapon/storage/backpack/dufflebag/med(src)
|
||||
new /obj/item/clothing/suit/bio_suit/cmo(src)
|
||||
new /obj/item/clothing/head/bio_hood/cmo(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
switch(pick("blue", "green", "purple", "black", "navyblue"))
|
||||
if ("blue")
|
||||
new /obj/item/clothing/under/rank/medical/scrubs(src)
|
||||
new /obj/item/clothing/head/surgery/blue(src)
|
||||
if ("green")
|
||||
new /obj/item/clothing/under/rank/medical/scrubs/green(src)
|
||||
new /obj/item/clothing/head/surgery/green(src)
|
||||
if ("purple")
|
||||
new /obj/item/clothing/under/rank/medical/scrubs/purple(src)
|
||||
new /obj/item/clothing/head/surgery/purple(src)
|
||||
if ("black")
|
||||
new /obj/item/clothing/under/rank/medical/scrubs/black(src)
|
||||
new /obj/item/clothing/head/surgery/black(src)
|
||||
if ("navyblue")
|
||||
new /obj/item/clothing/under/rank/medical/scrubs/navyblue(src)
|
||||
new /obj/item/clothing/head/surgery/navyblue(src)
|
||||
new /obj/item/clothing/under/rank/chief_medical_officer(src)
|
||||
new /obj/item/clothing/under/rank/chief_medical_officer/skirt(src)
|
||||
new /obj/item/clothing/suit/storage/toggle/labcoat/cmo(src)
|
||||
new /obj/item/clothing/suit/storage/toggle/labcoat/cmoalt(src)
|
||||
new /obj/item/weapon/cartridge/cmo(src)
|
||||
new /obj/item/clothing/gloves/sterile/latex(src)
|
||||
new /obj/item/clothing/shoes/brown (src)
|
||||
new /obj/item/device/radio/headset/heads/cmo(src)
|
||||
new /obj/item/device/radio/headset/heads/cmo/alt(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/weapon/reagent_containers/hypospray/vial(src)
|
||||
new /obj/item/weapon/reagent_containers/glass/beaker/vial(src) //VOREStation Edit - An extra vial for the hypo
|
||||
new /obj/item/clothing/suit/storage/hooded/wintercoat/medical(src)
|
||||
new /obj/item/clothing/shoes/boots/winter/medical(src)
|
||||
new /obj/item/weapon/storage/box/freezer(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/taperoll/medical(src)
|
||||
return
|
||||
/obj/structure/closet/secure_closet/CMO/New()
|
||||
..()
|
||||
if(prob(50))
|
||||
new /obj/item/weapon/storage/backpack/medic(src)
|
||||
else
|
||||
new /obj/item/weapon/storage/backpack/satchel/med(src)
|
||||
if(prob(50))
|
||||
new /obj/item/weapon/storage/backpack/dufflebag/med(src)
|
||||
new /obj/item/clothing/suit/bio_suit/cmo(src)
|
||||
new /obj/item/clothing/head/bio_hood/cmo(src)
|
||||
new /obj/item/clothing/shoes/white(src)
|
||||
switch(pick("blue", "green", "purple", "black", "navyblue"))
|
||||
if ("blue")
|
||||
new /obj/item/clothing/under/rank/medical/scrubs(src)
|
||||
new /obj/item/clothing/head/surgery/blue(src)
|
||||
if ("green")
|
||||
new /obj/item/clothing/under/rank/medical/scrubs/green(src)
|
||||
new /obj/item/clothing/head/surgery/green(src)
|
||||
if ("purple")
|
||||
new /obj/item/clothing/under/rank/medical/scrubs/purple(src)
|
||||
new /obj/item/clothing/head/surgery/purple(src)
|
||||
if ("black")
|
||||
new /obj/item/clothing/under/rank/medical/scrubs/black(src)
|
||||
new /obj/item/clothing/head/surgery/black(src)
|
||||
if ("navyblue")
|
||||
new /obj/item/clothing/under/rank/medical/scrubs/navyblue(src)
|
||||
new /obj/item/clothing/head/surgery/navyblue(src)
|
||||
new /obj/item/clothing/under/rank/chief_medical_officer(src)
|
||||
new /obj/item/clothing/under/rank/chief_medical_officer/skirt(src)
|
||||
new /obj/item/clothing/suit/storage/toggle/labcoat/cmo(src)
|
||||
new /obj/item/clothing/suit/storage/toggle/labcoat/cmoalt(src)
|
||||
new /obj/item/weapon/cartridge/cmo(src)
|
||||
new /obj/item/clothing/gloves/sterile/latex(src)
|
||||
new /obj/item/clothing/shoes/brown (src)
|
||||
new /obj/item/device/radio/headset/heads/cmo(src)
|
||||
new /obj/item/device/radio/headset/heads/cmo/alt(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/weapon/reagent_containers/hypospray/vial(src)
|
||||
new /obj/item/weapon/reagent_containers/glass/beaker/vial(src) //VOREStation Edit - An extra vial for the hypo
|
||||
new /obj/item/clothing/suit/storage/hooded/wintercoat/medical(src)
|
||||
new /obj/item/clothing/shoes/boots/winter/medical(src)
|
||||
new /obj/item/weapon/storage/box/freezer(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/taperoll/medical(src)
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -220,7 +220,7 @@
|
||||
req_access = list(access_surgery)
|
||||
|
||||
|
||||
New()
|
||||
/obj/structure/closet/secure_closet/animal/New()
|
||||
..()
|
||||
new /obj/item/device/assembly/signaler(src)
|
||||
new /obj/item/device/radio/electropack(src)
|
||||
@@ -242,7 +242,7 @@
|
||||
req_access = list(access_chemistry)
|
||||
|
||||
|
||||
New()
|
||||
/obj/structure/closet/secure_closet/chemical/New()
|
||||
..()
|
||||
new /obj/item/clothing/under/rank/psych(src)
|
||||
new /obj/item/clothing/under/rank/psych/turtleneck(src)
|
||||
@@ -285,7 +285,7 @@
|
||||
req_access = list(access_psychiatrist)
|
||||
|
||||
|
||||
New()
|
||||
/obj/structure/closet/secure_closet/psych/New()
|
||||
..()
|
||||
new /obj/item/clothing/under/rank/psych(src)
|
||||
new /obj/item/clothing/under/rank/psych/turtleneck(src)
|
||||
@@ -333,9 +333,25 @@
|
||||
/obj/structure/closet/secure_closet/medical_wall/pills
|
||||
name = "pill cabinet"
|
||||
|
||||
New()
|
||||
/obj/structure/closet/secure_closet/medical_wall/pills/New()
|
||||
..()
|
||||
new /obj/item/weapon/storage/pill_bottle/tramadol(src)
|
||||
new /obj/item/weapon/storage/pill_bottle/antitox(src)
|
||||
new /obj/item/weapon/storage/pill_bottle/carbon(src)
|
||||
new /obj/random/medical/pillbottle(src)
|
||||
new /obj/random/medical/pillbottle(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/secure_closet/medical_wall/anesthetics
|
||||
name = "anesthetics wall closet"
|
||||
desc = "Used to knock people out."
|
||||
req_access = list(access_surgery)
|
||||
|
||||
/obj/structure/closet/secure_closet/medical_wall/anesthetics/New()
|
||||
..()
|
||||
new /obj/item/weapon/tank/anesthetic(src)
|
||||
new /obj/item/weapon/tank/anesthetic(src)
|
||||
new /obj/item/weapon/tank/anesthetic(src)
|
||||
new /obj/item/clothing/mask/breath/medical(src)
|
||||
new /obj/item/clothing/mask/breath/medical(src)
|
||||
new /obj/item/clothing/mask/breath/medical(src)
|
||||
return
|
||||
@@ -320,3 +320,10 @@
|
||||
if(2)
|
||||
name = "near finished "
|
||||
name += "[glass == 1 ? "window " : ""][istext(glass) ? "[glass] airlock" : base_name] assembly ([created_name])"
|
||||
|
||||
// Airlock frames are indestructable, so bullets hitting them would always be stopped.
|
||||
// To fix this, airlock assemblies will sometimes let bullets pass through, since generally the sprite shows them partially open.
|
||||
/obj/structure/door_assembly/bullet_act(var/obj/item/projectile/P)
|
||||
if(prob(40)) // Chance for the frame to let the bullet keep going.
|
||||
return PROJECTILE_CONTINUE
|
||||
return ..()
|
||||
|
||||
@@ -47,13 +47,19 @@
|
||||
animate(transform=null, pixel_x=init_px, time=6, easing=ELASTIC_EASING)
|
||||
|
||||
// Used when the tree gets hurt.
|
||||
/obj/structure/flora/tree/proc/adjust_health(var/amount)
|
||||
/obj/structure/flora/tree/proc/adjust_health(var/amount, var/is_ranged = FALSE)
|
||||
if(is_stump)
|
||||
return
|
||||
|
||||
// Bullets and lasers ruin some of the wood
|
||||
if(is_ranged && product_amount > 0)
|
||||
var/wood = initial(product_amount)
|
||||
product_amount -= round(wood * (abs(amount)/max_health))
|
||||
|
||||
health = between(0, health + amount, max_health)
|
||||
if(health <= 0)
|
||||
die()
|
||||
return
|
||||
|
||||
// Called when the tree loses all health, for whatever reason.
|
||||
/obj/structure/flora/tree/proc/die()
|
||||
@@ -81,6 +87,9 @@
|
||||
/obj/structure/flora/tree/ex_act(var/severity)
|
||||
adjust_health(-(max_health / severity))
|
||||
|
||||
/obj/structure/flora/tree/bullet_act(var/obj/item/projectile/Proj)
|
||||
if(Proj.get_structure_damage())
|
||||
adjust_health(-Proj.get_structure_damage(), TRUE)
|
||||
|
||||
/obj/structure/flora/tree/get_description_interaction()
|
||||
var/list/results = list()
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
anchored = !anchored
|
||||
user.visible_message("<span class='notice'>[user] [anchored ? "fastens" : "unfastens"] the grille.</span>", \
|
||||
"<span class='notice'>You have [anchored ? "fastened the grille to" : "unfastened the grill from"] the floor.</span>")
|
||||
"<span class='notice'>You have [anchored ? "fastened the grille to" : "unfastened the grille from"] the floor.</span>")
|
||||
return
|
||||
|
||||
//window placing begin //TODO CONVERT PROPERLY TO MATERIAL DATUM
|
||||
|
||||
@@ -522,3 +522,50 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
|
||||
/obj/item/clothing/suit/armor/alien/tank,
|
||||
/obj/item/clothing/head/helmet/alien/tank,
|
||||
)
|
||||
|
||||
/obj/structure/loot_pile/surface/bones
|
||||
name = "bone pile"
|
||||
desc = "A pile of various dusty bones. Your graverobbing instincts tell you there might be valuables here."
|
||||
icon = 'icons/obj/bones.dmi'
|
||||
icon_state = "bonepile"
|
||||
delete_on_depletion = TRUE
|
||||
|
||||
common_loot = list(
|
||||
/obj/item/weapon/bone,
|
||||
/obj/item/weapon/bone/skull,
|
||||
/obj/item/weapon/bone/skull/tajaran,
|
||||
/obj/item/weapon/bone/skull/unathi,
|
||||
/obj/item/weapon/bone/skull/unknown,
|
||||
/obj/item/weapon/bone/leg,
|
||||
/obj/item/weapon/bone/arm,
|
||||
/obj/item/weapon/bone/ribs,
|
||||
)
|
||||
uncommon_loot = list(
|
||||
/obj/item/weapon/coin/gold,
|
||||
/obj/item/weapon/coin/silver,
|
||||
/obj/item/weapon/deck/tarot,
|
||||
/obj/item/weapon/flame/lighter/zippo/gold,
|
||||
/obj/item/weapon/flame/lighter/zippo/black,
|
||||
/obj/item/weapon/material/knife/tacknife/survival,
|
||||
/obj/item/weapon/material/knife/tacknife/combatknife,
|
||||
/obj/item/weapon/material/knife/machete/hatchet,
|
||||
/obj/item/weapon/material/knife/butch,
|
||||
/obj/item/weapon/storage/wallet/random,
|
||||
/obj/item/clothing/accessory/bracelet/material/gold,
|
||||
/obj/item/clothing/accessory/bracelet/material/silver,
|
||||
/obj/item/clothing/accessory/locket,
|
||||
/obj/item/clothing/accessory/poncho/blue,
|
||||
/obj/item/clothing/shoes/boots/cowboy,
|
||||
/obj/item/clothing/suit/storage/toggle/bomber,
|
||||
/obj/item/clothing/under/frontier,
|
||||
/obj/item/clothing/under/overalls,
|
||||
/obj/item/clothing/under/pants/classicjeans/ripped,
|
||||
/obj/item/clothing/under/sl_suit
|
||||
)
|
||||
rare_loot = list(
|
||||
/obj/item/weapon/storage/belt/utility/alien/full,
|
||||
/obj/item/weapon/gun/projectile/revolver,
|
||||
/obj/item/weapon/gun/projectile/sec,
|
||||
/obj/item/weapon/gun/launcher/crossbow
|
||||
)
|
||||
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
/obj/structure/snowman
|
||||
name = "snowman"
|
||||
icon = 'icons/obj/snowman.dmi'
|
||||
icon_state = "snowman"
|
||||
desc = "A happy little snowman smiles back at you!"
|
||||
anchored = 1
|
||||
|
||||
/obj/structure/snowman/attack_hand(mob/user as mob)
|
||||
if(user.a_intent == I_HURT)
|
||||
user << "<span class='notice'>In one hit, [src] easily crumples into a pile of snow. You monster.</span>"
|
||||
var/turf/simulated/floor/F = get_turf(src)
|
||||
if (istype(F))
|
||||
new /obj/item/stack/material/snow(F)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/snowman/borg
|
||||
name = "snowborg"
|
||||
icon_state = "snowborg"
|
||||
desc = "A snowy little robot. It even has a monitor for a head."
|
||||
|
||||
/obj/structure/snowman/spider
|
||||
name = "snow spider"
|
||||
icon_state = "snowspider"
|
||||
desc = "An impressively crafted snow spider. Not nearly as creepy as the real thing."
|
||||
Reference in New Issue
Block a user