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
+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))