Merge branch 'master' into 3/4th-closet

This commit is contained in:
S34NW
2021-11-01 10:14:41 +00:00
283 changed files with 11555 additions and 16997 deletions
@@ -1,4 +1,4 @@
/// Ion trails for spacepods and other space-flying things
/// Ion trails for jetpacks, ion thrusters and other space-flying things
/obj/effect/particle_effect/ion_trails
name = "ion trails"
icon_state = "ion_trails"
@@ -3,8 +3,7 @@
icon = 'icons/mob/screen_gen.dmi'
icon_state = "x2"
var/list/result = list(
/turf/simulated/floor/plasteel = 1,
/turf/simulated/floor/plating = 1,
/datum/nothing = 1,
/obj/effect/decal/cleanable/blood/splatter = 1,
/obj/effect/decal/cleanable/blood/oil = 1,
/obj/effect/decal/cleanable/fungus = 1)
@@ -37,25 +36,25 @@
/obj/effect/spawner/random_spawners/blood_maybe
name = "blood maybe"
result = list(
/turf/simulated/floor/plating = 20,
/datum/nothing = 20,
/obj/effect/decal/cleanable/blood/splatter = 1)
/obj/effect/spawner/random_spawners/blood_often
name = "blood often"
result = list(
/turf/simulated/floor/plating = 5,
/datum/nothing = 5,
/obj/effect/decal/cleanable/blood/splatter = 1)
/obj/effect/spawner/random_spawners/oil_maybe
name = "oil maybe"
result = list(
/turf/simulated/floor/plating = 20,
/datum/nothing = 20,
/obj/effect/decal/cleanable/blood/oil = 1)
/obj/effect/spawner/random_spawners/oil_maybe
name = "oil often"
result = list(
/turf/simulated/floor/plating = 5,
/datum/nothing = 5,
/obj/effect/decal/cleanable/blood/oil = 1)
/obj/effect/spawner/random_spawners/wall_rusted_probably
@@ -73,37 +72,37 @@
/obj/effect/spawner/random_spawners/cobweb_left_frequent
name = "cobweb left frequent"
result = list(
/turf/simulated/floor/plating = 1,
/datum/nothing = 1,
/obj/effect/decal/cleanable/cobweb = 1)
/obj/effect/spawner/random_spawners/cobweb_right_frequent
name = "cobweb right frequent"
result = list(
/turf/simulated/floor/plating = 1,
/datum/nothing = 1,
/obj/effect/decal/cleanable/cobweb2 = 1)
/obj/effect/spawner/random_spawners/cobweb_left_rare
name = "cobweb left rare"
result = list(
/turf/simulated/floor/plating = 10,
/datum/nothing = 10,
/obj/effect/decal/cleanable/cobweb = 1)
/obj/effect/spawner/random_spawners/cobweb_right_rare
name = "cobweb right rare"
result = list(
/turf/simulated/floor/plating = 10,
/datum/nothing = 10,
/obj/effect/decal/cleanable/cobweb2 = 1)
/obj/effect/spawner/random_spawners/dirt_frequent
name = "dirt frequent"
result = list(
/turf/simulated/floor/plating = 1,
/datum/nothing = 1,
/obj/effect/decal/cleanable/dirt = 1)
/obj/effect/spawner/random_spawners/dirt_rare
name = "dirt rare"
result = list(
/turf/simulated/floor/plating = 10,
/datum/nothing = 10,
/obj/effect/decal/cleanable/dirt = 1)
/obj/effect/spawner/random_spawners/fungus_maybe
@@ -307,9 +306,3 @@
name = "80pc vaultdoor 20pc wall"
result = list(/obj/machinery/door/airlock/hatch/syndicate/vault = 4,
/turf/simulated/wall/mineral/plastitanium/nodiagonal = 1)
/obj/effect/spawner/random_spawners/syndicate/layout/spacepod
name = "50pc loot spacepod"
result = list(/obj/spacepod/syndi = 1,
/obj/spacepod/syndi/unlocked = 1)
@@ -61,7 +61,7 @@
/obj/effect/spawner/window/reinforced/polarized
name = "electrochromic reinforced window spawner"
icon_state = "pwindow_spawner"
icon_state = "ewindow_spawner"
window_to_spawn_regular = /obj/structure/window/reinforced/polarized
window_to_spawn_full = /obj/structure/window/full/reinforced/polarized
-2
View File
@@ -5,8 +5,6 @@ GLOBAL_DATUM_INIT(fire_overlay, /image, image("icon" = 'icons/goonstation/effect
move_resist = null // Set in the Initialise depending on the item size. Unless it's overriden by a specific item
var/discrete = 0 // used in item_attack.dm to make an item not show an attack message to viewers
var/image/blood_overlay = null //this saves our blood splatter overlay, which will be processed not to go over the edges of the sprite
var/blood_overlay_color = null
var/item_state = null
var/lefthand_file = 'icons/mob/inhands/items_lefthand.dmi'
var/righthand_file = 'icons/mob/inhands/items_righthand.dmi'
+17 -2
View File
@@ -28,7 +28,6 @@
/obj/item/toy/crayon/New()
..()
name = "[colourName] crayon" //Makes crayons identifiable in things like grinders
drawtype = pick(pick(graffiti), pick(letters), "rune[rand(1, 8)]")
/obj/item/toy/crayon/attack_self(mob/living/user as mob)
@@ -122,31 +121,37 @@
/obj/item/toy/crayon/red
name = "red crayon"
icon_state = "crayonred"
colour = COLOR_RED
colourName = "red"
/obj/item/toy/crayon/orange
name = "orange crayon"
icon_state = "crayonorange"
colour = COLOR_ORANGE
colourName = "orange"
/obj/item/toy/crayon/yellow
name = "yellow crayon"
icon_state = "crayonyellow"
colour = COLOR_YELLOW
colourName = "yellow"
/obj/item/toy/crayon/green
name = "green crayon"
icon_state = "crayongreen"
colour = COLOR_GREEN
colourName = "green"
/obj/item/toy/crayon/blue
name = "blue crayon"
icon_state = "crayonblue"
colour = COLOR_BLUE
colourName = "blue"
/obj/item/toy/crayon/purple
name = "purple crayon"
icon_state = "crayonpurple"
colour = COLOR_PURPLE
colourName = "purple"
@@ -155,38 +160,47 @@
icon_state = pick(list("crayonred", "crayonorange", "crayonyellow", "crayongreen", "crayonblue", "crayonpurple"))
switch(icon_state)
if("crayonred")
name = "red crayon"
colour = COLOR_RED
colourName = "red"
if("crayonorange")
name = "orange crayon"
colour = COLOR_ORANGE
colourName = "orange"
if("crayonyellow")
name = "yellow crayon"
colour = COLOR_YELLOW
colourName = "yellow"
if("crayongreen")
name = "green crayon"
colour =COLOR_GREEN
colourName = "green"
if("crayonblue")
name = "blue crayon"
colour = COLOR_BLUE
colourName = "blue"
if("crayonpurple")
name = "purple crayon"
colour = COLOR_PURPLE
colourName = "purple"
..()
/obj/item/toy/crayon/black
name = "black crayon"
icon_state = "crayonblack"
colour = "#000000"
colourName = "black"
/obj/item/toy/crayon/white
name = "white crayon"
icon_state = "crayonwhite"
colour = "#FFFFFF"
colourName = "white"
/obj/item/toy/crayon/mime
icon_state = "crayonmime"
name = "mime crayon"
desc = "A very sad-looking crayon."
icon_state = "crayonmime"
colour = "#FFFFFF"
colourName = "mime"
uses = 0
@@ -211,6 +225,7 @@
..()
/obj/item/toy/crayon/rainbow
name = "rainbow crayon"
icon_state = "crayonrainbow"
colour = "#FFF000"
colourName = "rainbow"
@@ -71,8 +71,6 @@
laser_act(target, user, params)
/obj/item/laser_pointer/proc/laser_act(atom/target, mob/living/user, params)
if( !(user in (viewers(7,target))) )
return
if(!diode)
to_chat(user, "<span class='notice'>You point [src] at [target], but nothing happens!</span>")
return
@@ -82,6 +80,9 @@
if(HAS_TRAIT(user, TRAIT_CHUNKYFINGERS))
to_chat(user, "<span class='warning'>Your fingers can't press the button!</span>")
return
if(!(target in view(7, get_turf(src)))) // Use the turf as center so it won't use the potential xray of the user
to_chat(user, "<span class='warning'>There is something in the way!</span>")
return
add_fingerprint(user)
@@ -133,12 +133,18 @@
ks1type = /obj/item/encryptionkey/headset_med
/obj/item/radio/headset/headset_iaa
name = "internal affairs radio headset"
desc = "This is used by your elite legal team."
icon_state = "sec_headset"
item_state = "sec_headset"
ks2type = /obj/item/encryptionkey/headset_iaa
/obj/item/radio/headset/headset_iaa/alt
name = "internal affairs bowman headset"
desc = "This is used by your elite legal team. Protects ears from flashbangs."
flags = EARBANGPROTECT
icon_state = "sec_headset_alt"
item_state = "sec_headset_alt"
ks2type = /obj/item/encryptionkey/headset_iaa
/obj/item/radio/headset/headset_eng
name = "engineering radio headset"
@@ -170,7 +170,7 @@ effective or pretty fucking useless.
GLOB.active_jammers -= src
/obj/item/teleporter
name = "\improper Syndicate teleporter"
name = "syndicate teleporter"
desc = "A strange syndicate version of a cult veil shifter. Warrenty voided if exposed to EMP."
icon = 'icons/obj/device.dmi'
icon_state = "syndi-tele"
@@ -208,24 +208,32 @@ effective or pretty fucking useless.
charges++
/obj/item/teleporter/emp_act(severity)
var/teleported_something = FALSE
if(prob(50 / severity))
if(istype(loc, /mob/living/carbon/human))
var/mob/living/carbon/human/user = loc
to_chat(user, "<span class='userdanger'>[src] buzzes and activates!</span>")
attempt_teleport(user, TRUE)
else
visible_message("<span class='danger'>[src] activates and blinks out of existence!</span>")
do_sparks(2, 1, src)
qdel(src)
else //Well, it either is on a floor / locker, and won't teleport someone, OR it's in someones bag. As such, we need to check the turf to see if people are there.
var/turf/teleport_turf = get_turf(src)
for(var/mob/living/user in teleport_turf)
if(!teleported_something)
teleport_turf.visible_message("<span class='danger'>[src] activates sporadically, teleporting everyone around it!</span>")
teleported_something = TRUE
attempt_teleport(user, TRUE)
if(!teleported_something)
visible_message("<span class='danger'>[src] activates and blinks out of existence!</span>")
do_sparks(2, 1, src)
qdel(src)
/obj/item/teleporter/proc/attempt_teleport(mob/user, EMP_D = FALSE)
dir_correction(user)
if(!charges)
if(!charges && !EMP_D) //If it's empd, you are moving no matter what.
to_chat(user, "<span class='warning'>[src] is still recharging.</span>")
return
var/mob/living/carbon/C = user
var/turf/mobloc = get_turf(C)
var/mob/living/M = user
var/turf/mobloc = get_turf(M)
var/list/turfs = new/list()
var/found_turf = FALSE
var/list/bagholding = user.search_contents_for(/obj/item/storage/backpack/holding)
@@ -233,7 +241,7 @@ effective or pretty fucking useless.
if(!is_teleport_allowed(T.z))
break
if(!(length(bagholding) && !flawless)) //Chaos if you have a bag of holding
if(get_dir(C, T) != C.dir)
if(get_dir(M, T) != M.dir)
continue
if(T in range(user, inner_tp_range))
continue
@@ -247,13 +255,14 @@ effective or pretty fucking useless.
if(found_turf)
if(user.loc != mobloc) // No locker / mech / sleeper teleporting, that breaks stuff
to_chat(C, "<span class='danger'>[src] will not work here!</span>")
charges--
to_chat(M, "<span class='danger'>[src] will not work here!</span>")
if(charges > 0) //While we want EMP triggered teleports to drain charge, we also do not want it to go negative charge, as such we need this check here
charges--
var/turf/destination = pick(turfs)
if(tile_check(destination) || flawless) // Why is there so many bloody floor types
var/turf/fragging_location = destination
telefrag(fragging_location, user)
C.forceMove(destination)
M.forceMove(destination)
playsound(mobloc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
new/obj/effect/temp_visual/teleport_abductor/syndi_teleporter(mobloc)
playsound(destination, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
@@ -264,7 +273,7 @@ effective or pretty fucking useless.
else // Emp activated? Bag of holding? No saving throw for you
get_fragged(user, destination)
else
to_chat(C, "<span class='danger'>[src] will not work here!</span>")
to_chat(M, "<span class='danger'>[src] will not work here!</span>")
/obj/item/teleporter/proc/tile_check(turf/T)
if(istype(T, /turf/simulated/floor) || istype(T, /turf/space))
@@ -294,8 +303,8 @@ effective or pretty fucking useless.
else
saving_throw = NORTH // just in case
var/mob/living/carbon/C = user
var/turf/mobloc = get_turf(C)
var/mob/living/M = user
var/turf/mobloc = get_turf(M)
var/list/turfs = list()
var/found_turf = FALSE
for(var/turf/T in range(destination, saving_throw_distance))
@@ -314,7 +323,7 @@ effective or pretty fucking useless.
var/turf/new_destination = pick(turfs)
var/turf/fragging_location = new_destination
telefrag(fragging_location, user)
C.forceMove(new_destination)
M.forceMove(new_destination)
playsound(mobloc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
new /obj/effect/temp_visual/teleport_abductor/syndi_teleporter(mobloc)
new /obj/effect/temp_visual/teleport_abductor/syndi_teleporter(new_destination)
@@ -332,11 +341,12 @@ effective or pretty fucking useless.
playsound(destination, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
playsound(destination, "sound/magic/disintegrate.ogg", 50, TRUE)
destination.ex_act(rand(1,2))
for(var/obj/item/W in user)
if(istype(W, /obj/item/implant))
continue
if(!user.unEquip(W))
qdel(W)
if(iscarbon(user)) //don't want cyborgs dropping their stuff
for(var/obj/item/W in user)
if(istype(W, /obj/item/implant))
continue
if(!user.unEquip(W))
qdel(W)
to_chat(user, "<span class='biggerdanger'>You teleport into the wall, the teleporter tries to save you, but--</span>")
user.gib()
@@ -88,6 +88,70 @@
/obj/item/stack/tile/carpet/black/twenty
amount = 20
/obj/item/stack/tile/carpet/blue
name = "blue carpet"
icon_state = "tile-carpet-blue"
turf_type = /turf/simulated/floor/carpet/blue
/obj/item/stack/tile/carpet/blue/twenty
amount = 20
/obj/item/stack/tile/carpet/cyan
name = "cyan carpet"
icon_state = "tile-carpet-cyan"
turf_type = /turf/simulated/floor/carpet/cyan
/obj/item/stack/tile/carpet/cyan/twenty
amount = 20
/obj/item/stack/tile/carpet/green
name = "green carpet"
icon_state = "tile-carpet-green"
turf_type = /turf/simulated/floor/carpet/green
/obj/item/stack/tile/carpet/green/twenty
amount = 20
/obj/item/stack/tile/carpet/orange
name = "orange carpet"
icon_state = "tile-carpet-orange"
turf_type = /turf/simulated/floor/carpet/orange
/obj/item/stack/tile/carpet/orange/twenty
amount = 20
/obj/item/stack/tile/carpet/purple
name = "purple carpet"
icon_state = "tile-carpet-purple"
turf_type = /turf/simulated/floor/carpet/purple
/obj/item/stack/tile/carpet/purple/twenty
amount = 20
/obj/item/stack/tile/carpet/red
name = "red carpet"
icon_state = "tile-carpet-red"
turf_type = /turf/simulated/floor/carpet/red
/obj/item/stack/tile/carpet/red/twenty
amount = 20
/obj/item/stack/tile/carpet/royalblack
name = "royal black carpet"
icon_state = "tile-carpet-royalblack"
turf_type = /turf/simulated/floor/carpet/royalblack
/obj/item/stack/tile/carpet/royalblack/twenty
amount = 20
/obj/item/stack/tile/carpet/royalblue
name = "royal blue carpet"
icon_state = "tile-carpet-royalblue"
turf_type = /turf/simulated/floor/carpet/royalblue
/obj/item/stack/tile/carpet/royalblue/twenty
amount = 20
//Plasteel
/obj/item/stack/tile/plasteel
name = "floor tiles"
-23
View File
@@ -187,28 +187,5 @@
var/mob/living/carbon/human/H = user
H.update_inv_l_hand()
H.update_inv_r_hand()
// Update blood splatter
if(blood_overlay)
cut_overlay(blood_overlay)
qdel(blood_overlay)
add_blood_overlay(blood_overlay_color)
playsound(loc, extend_sound, 50, TRUE)
add_fingerprint(user)
/obj/item/melee/classic_baton/telescopic/blood_splatter_index()
return "\ref[icon]-[icon_state]"
/obj/item/melee/classic_baton/telescopic/add_blood_overlay(color)
var/index = blood_splatter_index()
var/icon/blood_splatter_icon = GLOB.blood_splatter_icons[index]
if(!blood_splatter_icon)
blood_splatter_icon = icon(icon, icon_state)
blood_splatter_icon.Blend("#ffffff", ICON_ADD)
blood_splatter_icon.Blend(icon('icons/effects/blood.dmi', "itemblood"), ICON_MULTIPLY)
blood_splatter_icon = fcopy_rsc(blood_splatter_icon)
GLOB.blood_splatter_icons[index] = blood_splatter_icon
blood_overlay = image(blood_splatter_icon)
blood_overlay.color = color
blood_overlay_color = color
add_overlay(blood_overlay)
+2 -2
View File
@@ -734,7 +734,7 @@
registered_name = "HoS"
icon_state = "HoS"
access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT,
ACCESS_FORENSICS_LOCKERS, ACCESS_PILOT, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS,
ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS,
ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING,
ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_WEAPONS)
@@ -762,7 +762,7 @@
access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS,
ACCESS_TELEPORTER, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_ATMOSPHERICS, ACCESS_EMERGENCY_STORAGE, ACCESS_EVA,
ACCESS_HEADS, ACCESS_CONSTRUCTION, ACCESS_SEC_DOORS,
ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINISAT, ACCESS_MECHANIC, ACCESS_MINERAL_STOREROOM)
ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINISAT, ACCESS_MINERAL_STOREROOM)
/obj/item/card/id/clown
name = "Pink ID"
+7
View File
@@ -170,6 +170,10 @@ LIGHTERS ARE IN LIGHTERS.DM
if(flavor_text)
var/turf/T = get_turf(src)
T.visible_message(flavor_text)
if(iscarbon(loc))
var/mob/living/carbon/C = loc
if(C.wear_mask == src) // Don't update if it's just in their hand
C.wear_mask_update(src)
set_light(2, 0.25, "#E38F46")
START_PROCESSING(SSobj, src)
@@ -262,6 +266,9 @@ LIGHTERS ARE IN LIGHTERS.DM
pixel_x = rand(-5, 5)
pixel_y = rand(-5, 5)
/obj/item/clothing/mask/cigarette/rollie/nicotine
list_reagents = list("nicotine" = 40)
/obj/item/cigbutt/roach
name = "roach"
@@ -371,6 +371,7 @@
icon = 'icons/obj/food/containers.dmi'
icon_state = "tray"
desc = "A metal tray to lay food on."
storage_slots = 8
force = 5
throwforce = 10
throw_speed = 3
@@ -231,8 +231,7 @@
/obj/item/holosign_creator/security,
/obj/item/melee/classic_baton/telescopic,
/obj/item/restraints/legcuffs/bola,
/obj/item/clothing/mask/gas/sechailer,
/obj/item/spacepod_key)
/obj/item/clothing/mask/gas/sechailer)
/obj/item/storage/belt/security/sec/populate_contents()
new /obj/item/flashlight/seclite(src)
@@ -293,6 +293,7 @@
desc = "You can't understand the runes, but the packet smells funny."
icon_state = "midoripacket"
item_state = "midoripacket"
cigarette_type = /obj/item/clothing/mask/cigarette/rollie/nicotine
/obj/item/storage/fancy/cigarettes/cigpack_shadyjims
name ="\improper Shady Jim's Super Slims"
+1 -1
View File
@@ -158,7 +158,7 @@
deductcharge(hitcost)
return
if(isrobot(M)) // Can't stunbaton borgs
if(issilicon(M)) // Can't stunbaton borgs and AIs
return ..()
if(!isliving(M))
@@ -74,7 +74,7 @@
if(istype(W, /obj/item/pen))
var/decalselection = input("Please select a decal") as null|anything in list("Atmospherics", "Bartender", "Barber", "Blueshield", "Brig Physician", "Captain",
"Cargo", "Chief Engineer", "Chaplain", "Chef", "Chemist", "Civilian", "Clown", "CMO", "Coroner", "Detective", "Engineering", "Genetics", "HOP",
"HOS", "Hydroponics", "Internal Affairs Agent", "Janitor", "Magistrate", "Mechanic", "Medical", "Mime", "Mining", "NT Representative", "Paramedic", "Pod Pilot",
"HOS", "Hydroponics", "Internal Affairs Agent", "Janitor", "Magistrate", "Medical", "Mime", "Mining", "NT Representative", "Paramedic",
"Prisoner", "Research Director", "Security", "Syndicate", "Therapist", "Virology", "Warden", "Xenobiology")
if(!decalselection)
return
@@ -2,7 +2,7 @@
/obj/structure/closet/fireaxecabinet
name = "fire axe cabinet"
desc = "There is small label that reads \"For Emergency use only\" along with details for safe use of the axe. As if."
var/obj/item/twohanded/fireaxe/fireaxe = new/obj/item/twohanded/fireaxe
var/obj/item/twohanded/fireaxe/fireaxe
icon_state = "fireaxe1000"
icon_closed = "fireaxe1000"
icon_opened = "fireaxe1100"
@@ -16,6 +16,10 @@
locked = TRUE
var/smashed = FALSE
/obj/structure/closet/fireaxecabinet/populate_contents()
fireaxe = new/obj/item/twohanded/fireaxe(src)
update_icon() // So its initial icon doesn't show it without the fireaxe
/obj/structure/closet/fireaxecabinet/examine(mob/user)
. = ..()
. += "<span class='notice'>Use a multitool to lock/unlock it.</span>"
@@ -113,8 +113,6 @@
open_door_sprite = "generic_door"
/obj/structure/closet/lawcloset/populate_contents()
new /obj/item/storage/box/tapes(src)
new /obj/item/book/manual/faxes(src)
new /obj/item/clothing/under/lawyer/female(src)
new /obj/item/clothing/under/lawyer/black(src)
new /obj/item/clothing/under/lawyer/red(src)
@@ -124,10 +122,6 @@
new /obj/item/clothing/suit/storage/lawyer/purpjacket(src)
new /obj/item/clothing/shoes/brown(src)
new /obj/item/clothing/shoes/black(src)
new /obj/item/clothing/glasses/sunglasses/big(src)
new /obj/item/clothing/glasses/sunglasses/big(src)
new /obj/item/clothing/accessory/lawyers_badge(src)
new /obj/item/clothing/accessory/lawyers_badge(src)
//Paramedic
@@ -37,6 +37,7 @@
new /obj/item/organ/internal/eyes/cybernetic/meson(src)
new /obj/item/clothing/accessory/medal/engineering(src)
new /obj/item/holosign_creator/atmos(src)
new /obj/item/rcd/preloaded(src)
/obj/structure/closet/secure_closet/engineering_electrical
@@ -121,6 +121,7 @@
new /obj/item/clothing/suit/straight_jacket(src)
new /obj/item/reagent_containers/syringe(src)
new /obj/item/reagent_containers/glass/bottle/ether(src)
new /obj/item/clipboard(src)
new /obj/item/storage/fancy/cigarettes/cigpack_med(src)
new /obj/item/storage/fancy/cigarettes/cigpack_med(src)
new /obj/item/storage/fancy/cigarettes/cigpack_med(src)
@@ -170,6 +171,8 @@
new /obj/item/door_remote/chief_medical_officer(src)
new /obj/item/reagent_containers/food/drinks/mug/cmo(src)
new /obj/item/clothing/accessory/medal/medical(src)
new /obj/item/storage/briefcase(src)
new /obj/item/clothing/mask/gas(src)
/obj/structure/closet/secure_closet/animal
@@ -110,6 +110,7 @@
new /obj/item/reagent_containers/food/drinks/mug/hos(src)
new /obj/item/organ/internal/cyberimp/eyes/hud/security(src)
new /obj/item/clothing/accessory/medal/security(src)
new /obj/item/reagent_containers/food/drinks/flask/barflask(src)
/obj/structure/closet/secure_closet/warden
name = "warden's locker"
@@ -367,8 +368,33 @@
new /obj/item/clothing/under/rank/centcom/magistrate(src)
new /obj/item/clothing/suit/judgerobe(src)
new /obj/item/clothing/head/powdered_wig(src)
new /obj/item/clothing/head/justice_wig(src)
new /obj/item/radio/headset/heads/magistrate(src)
new /obj/item/gavelblock(src)
new /obj/item/gavelhammer(src)
new /obj/item/clothing/head/justice_wig(src)
new /obj/item/clothing/accessory/medal/legal(src)
new /obj/item/clothing/accessory/lawyers_badge(src)
/obj/structure/closet/secure_closet/iaa
name = "internal affairs locker"
req_access = list(ACCESS_LAWYER)
icon_state = "iaasecure1"
icon_closed = "iaasecure"
icon_locked = "iaasecure1"
icon_opened = "iaasecureopen"
icon_broken = "iaasecurebroken"
icon_off = "iaasecureoff"
/obj/structure/closet/secure_closet/iaa/populate_contents()
new /obj/item/book/manual/faxes(src)
new /obj/item/storage/box/tapes(src)
new /obj/item/storage/secure/briefcase(src)
new /obj/item/storage/briefcase(src)
new /obj/item/storage/briefcase(src)
new /obj/item/radio/headset/headset_iaa(src)
new /obj/item/clothing/under/rank/internalaffairs(src)
new /obj/item/clothing/suit/storage/internalaffairs(src)
new /obj/item/clothing/glasses/sunglasses/big(src)
new /obj/item/clothing/glasses/sunglasses/big(src)
new /obj/item/clothing/accessory/lawyers_badge(src)
new /obj/item/clothing/accessory/lawyers_badge(src)
+2 -2
View File
@@ -26,9 +26,9 @@
if(NO_EXTINGUISHER)
return
if(MINI_EXTINGUISHER)
has_extinguisher = new/obj/item/extinguisher/mini
has_extinguisher = new /obj/item/extinguisher/mini(src)
else
has_extinguisher = new/obj/item/extinguisher
has_extinguisher = new /obj/item/extinguisher(src)
/obj/structure/extinguisher_cabinet/examine(mob/user)
. = ..()
+3 -2
View File
@@ -94,9 +94,9 @@
if(density)
smooth = SMOOTH_FALSE
clear_smooth_overlays()
icon_state = "fwall_opening"
flick("fwall_opening", src)
else
icon_state = "fwall_closing"
flick("fwall_closing", src)
/obj/structure/falsewall/update_icon()
if(density)
@@ -297,6 +297,7 @@
/obj/structure/falsewall/sandstone
name = "sandstone wall"
desc = "A wall with sandstone plating."
icon = 'icons/turf/walls/sandstone_wall.dmi'
icon_state = "sandstone"
mineral = /obj/item/stack/sheet/mineral/sandstone
walltype = /turf/simulated/wall/mineral/sandstone
-180
View File
@@ -1,180 +0,0 @@
/obj/structure/foodcart
name = "food cart"
desc = "A cart for transporting food and drinks."
icon = 'icons/obj/foodcart.dmi'
icon_state = "cart"
face_while_pulling = FALSE
anchored = 0
density = 1
//Food slots
var/list/food_slots[6]
//var/obj/item/reagent_containers/food/snacks/food1 = null
//var/obj/item/reagent_containers/food/snacks/food2 = null
//var/obj/item/reagent_containers/food/snacks/food3 = null
//var/obj/item/reagent_containers/food/snacks/food4 = null
//var/obj/item/reagent_containers/food/snacks/food5 = null
//var/obj/item/reagent_containers/food/snacks/food6 = null
//Drink slots
var/list/drink_slots[6]
//var/obj/item/reagent_containers/food/drinks/drink1 = null
//var/obj/item/reagent_containers/food/drinks/drink2 = null
//var/obj/item/reagent_containers/food/drinks/drink3 = null
//var/obj/item/reagent_containers/food/drinks/drink4 = null
//var/obj/item/reagent_containers/food/drinks/drink5 = null
//var/obj/item/reagent_containers/food/drinks/drink6 = null
/obj/structure/foodcart/proc/put_in_cart(obj/item/I, mob/user)
user.drop_item()
I.loc = src
updateUsrDialog()
to_chat(user, "<span class='notice'>You put [I] into [src].</span>")
return
/obj/structure/foodcart/attackby(obj/item/I, mob/user, params)
var/fail_msg = "<span class='notice'>There are no open spaces for this in [src].</span>"
if(!I.is_robot_module())
if(istype(I, /obj/item/reagent_containers/food/snacks))
var/success = 0
for(var/s=1,s<=6,s++)
if(!food_slots[s])
put_in_cart(I, user)
food_slots[s]=I
update_icon()
success = 1
break
if(!success)
to_chat(user, fail_msg)
else if(istype(I, /obj/item/reagent_containers/food/drinks))
var/success = 0
for(var/s=1,s<=6,s++)
if(!drink_slots[s])
put_in_cart(I, user)
drink_slots[s]=I
update_icon()
success = 1
break
if(!success)
to_chat(user, fail_msg)
else if(istype(I, /obj/item/wrench))
if(!anchored && !isinspace())
playsound(src.loc, I.usesound, 50, 1)
user.visible_message( \
"[user] tightens \the [src]'s casters.", \
"<span class='notice'> You have tightened \the [src]'s casters.</span>", \
"You hear ratchet.")
anchored = 1
else if(anchored)
playsound(src.loc, I.usesound, 50, 1)
user.visible_message( \
"[user] loosens \the [src]'s casters.", \
"<span class='notice'> You have loosened \the [src]'s casters.</span>", \
"You hear ratchet.")
anchored = 0
else
to_chat(usr, "<span class='warning'>You cannot interface your modules [src]!</span>")
/obj/structure/foodcart/attack_hand(mob/user)
user.set_machine(src)
var/dat
if(food_slots[1])
dat += "<a href='?src=[UID()];f1=1'>[food_slots[1]]</a><br>"
if(food_slots[2])
dat += "<a href='?src=[UID()];f2=1'>[food_slots[2]]</a><br>"
if(food_slots[3])
dat += "<a href='?src=[UID()];f3=1'>[food_slots[3]]</a><br>"
if(food_slots[4])
dat += "<a href='?src=[UID()];f4=1'>[food_slots[4]]</a><br>"
if(food_slots[5])
dat += "<a href='?src=[UID()];f5=1'>[food_slots[5]]</a><br>"
if(food_slots[6])
dat += "<a href='?src=[UID()];f6=1'>[food_slots[6]]</a><br>"
if(drink_slots[1])
dat += "<a href='?src=[UID()];d1=1'>[drink_slots[1]]</a><br>"
if(drink_slots[2])
dat += "<a href='?src=[UID()];d2=1'>[drink_slots[2]]</a><br>"
if(drink_slots[3])
dat += "<a href='?src=[UID()];d3=1'>[drink_slots[3]]</a><br>"
if(drink_slots[4])
dat += "<a href='?src=[UID()];d4=1'>[drink_slots[4]]</a><br>"
if(drink_slots[5])
dat += "<a href='?src=[UID()];d5=1'>[drink_slots[5]]</a><br>"
if(drink_slots[6])
dat += "<a href='?src=[UID()];d6=1'>[drink_slots[6]]</a><br>"
var/datum/browser/popup = new(user, "foodcart", name, 240, 160)
popup.set_content(dat)
popup.open()
/obj/structure/foodcart/Topic(href, href_list)
if(!in_range(src, usr))
return
if(!isliving(usr))
return
var/mob/living/user = usr
if(href_list["f1"])
if(food_slots[1])
user.put_in_hands(food_slots[1])
to_chat(user, "<span class='notice'>You take [food_slots[1]] from [src].</span>")
food_slots[1] = null
if(href_list["f2"])
if(food_slots[2])
user.put_in_hands(food_slots[2])
to_chat(user, "<span class='notice'>You take [food_slots[2]] from [src].</span>")
food_slots[2] = null
if(href_list["f3"])
if(food_slots[3])
user.put_in_hands(food_slots[3])
to_chat(user, "<span class='notice'>You take [food_slots[3]] from [src].</span>")
food_slots[3] = null
if(href_list["f4"])
if(food_slots[4])
user.put_in_hands(food_slots[4])
to_chat(user, "<span class='notice'>You take [food_slots[4]] from [src].</span>")
food_slots[4] = null
if(href_list["f5"])
if(food_slots[5])
user.put_in_hands(food_slots[5])
to_chat(user, "<span class='notice'>You take [food_slots[5]] from [src].</span>")
food_slots[5] = null
if(href_list["f6"])
if(food_slots[6])
user.put_in_hands(food_slots[6])
to_chat(user, "<span class='notice'>You take [food_slots[6]] from [src].</span>")
food_slots[6] = null
if(href_list["d1"])
if(drink_slots[1])
user.put_in_hands(drink_slots[1])
to_chat(user, "<span class='notice'>You take [drink_slots[1]] from [src].</span>")
drink_slots[1] = null
if(href_list["d2"])
if(drink_slots[2])
user.put_in_hands(drink_slots[2])
to_chat(user, "<span class='notice'>You take [drink_slots[2]] from [src].</span>")
drink_slots[2] = null
if(href_list["d3"])
if(drink_slots[3])
user.put_in_hands(drink_slots[3])
to_chat(user, "<span class='notice'>You take [drink_slots[3]] from [src].</span>")
drink_slots[3] = null
if(href_list["d4"])
if(drink_slots[4])
user.put_in_hands(drink_slots[4])
to_chat(user, "<span class='notice'>You take [drink_slots[4]] from [src].</span>")
drink_slots[4] = null
if(href_list["d5"])
if(drink_slots[5])
user.put_in_hands(drink_slots[5])
to_chat(user, "<span class='notice'>You take [drink_slots[5]] from [src].</span>")
drink_slots[5] = null
if(href_list["d6"])
if(drink_slots[6])
user.put_in_hands(drink_slots[6])
to_chat(user, "<span class='notice'>You take [drink_slots[6]] from [src].</span>")
drink_slots[6] = null
update_icon() //Not really needed without overlays, but keeping just in case
updateUsrDialog()
/obj/structure/foodcart/deconstruct(disassembled = TRUE)
if(!(flags & NODECONSTRUCT))
new /obj/item/stack/sheet/metal(loc, 4)
qdel(src)
+2
View File
@@ -175,6 +175,8 @@ GLOBAL_LIST_EMPTY(safes)
/obj/structure/safe/attackby(obj/item/I, mob/user, params)
if(open)
if(I.flags && ABSTRACT)
return
if(broken && istype(I, /obj/item/safe_internals) && do_after(user, 2 SECONDS, target = src))
to_chat(user, "<span class='notice'>You replace the broken mechanism.</span>")
qdel(I)
@@ -76,7 +76,7 @@
if(!has_buckled_mobs())
return
var/mob/living/buckled_mob = buckled_mobs[1]
if(istype(A, /obj/machinery/door))
if(istype(A, /obj/machinery/door) || istype(A, /obj/machinery/gateway))
A.Bumped(buckled_mob)
if(propelled)
+3 -1
View File
@@ -508,6 +508,7 @@
/obj/structure/window/reinforced/polarized
name = "electrochromic window"
desc = "Adjusts its tint with voltage. Might take a few good hits to shatter it."
glass_amount = 2
var/id
/obj/machinery/button/windowtint
@@ -674,8 +675,9 @@
/obj/structure/window/full/reinforced/polarized
name = "electrochromic window"
desc = "Adjusts its tint with voltage. Might take a few good hits to shatter it."
glass_amount = 4
var/id
/obj/structure/window/full/reinforced/tinted
name = "tinted window"
desc = "It looks rather strong and opaque. Might take a few good hits to shatter it."