mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
[MIRROR] Various upports (#10293)
Co-authored-by: Guti <32563288+TheCaramelion@users.noreply.github.com> Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
73ccdbb648
commit
aa0da49558
@@ -1,4 +1,4 @@
|
||||
|
||||
/*
|
||||
//########################## CONTRABAND ;3333333333333333333 -Agouri ###################################################
|
||||
|
||||
/obj/item/contraband
|
||||
@@ -240,3 +240,31 @@
|
||||
|
||||
/obj/structure/sign/poster/custom
|
||||
roll_type = /obj/item/contraband/poster/custom
|
||||
*/
|
||||
/obj/item/contraband/package
|
||||
name = "contraband"
|
||||
desc = "A tightly sealed package. Dare to look inside?"
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "deliverycrate5"
|
||||
item_state = "table_parts"
|
||||
w_class = ITEMSIZE_HUGE
|
||||
|
||||
/obj/item/contraband/package/attack_self(mob/user)
|
||||
var/contraband = pick(
|
||||
/obj/item/reagent_containers/glass/beaker/vial/macrocillin,
|
||||
/obj/item/reagent_containers/glass/beaker/vial/microcillin,
|
||||
/obj/item/gun/energy/sizegun,
|
||||
/obj/item/clothing/mask/muzzle,
|
||||
/obj/item/pda/clown,
|
||||
/obj/item/pda/mime,
|
||||
/obj/item/storage/fancy/cigar/havana,
|
||||
/obj/item/card/emag_broken,
|
||||
/obj/item/sleevemate,
|
||||
/obj/item/disk/nifsoft/compliance,
|
||||
/obj/item/seeds/ambrosiadeusseed,
|
||||
/obj/item/seeds/ambrosiavulgarisseed,
|
||||
/obj/item/bodysnatcher)
|
||||
|
||||
user.put_in_hands(new contraband(user.loc))
|
||||
to_chat(user, span_notice("You unwrap the package."))
|
||||
qdel(src)
|
||||
|
||||
@@ -1,73 +0,0 @@
|
||||
// Light Painter.
|
||||
|
||||
|
||||
/obj/item/lightpainter
|
||||
name = "light painter"
|
||||
desc = "A device to configure the emission color of lighting fixtures. Use this device in-hand to set/reset the color. Use the device on a light fixture to assign the color."
|
||||
icon = 'icons/obj/janitor.dmi'
|
||||
icon_state = "lightreplacer0"
|
||||
color = "#bbbbff"
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
matter = list(MAT_STEEL = 5000,MAT_GLASS = 1500)
|
||||
|
||||
var/static/dcolor = "#e0eff0"
|
||||
var/static/dnightcolor = "#efcc86"
|
||||
//set color values.
|
||||
var/setcolor = "#e0eff0"
|
||||
var/setnightcolor = "#efcc86"
|
||||
var/resetmode = 1
|
||||
|
||||
var/dimming = 0.7 // multiply value to dim lights from setcolor to nightcolor
|
||||
|
||||
|
||||
/obj/item/lightpainter/New()
|
||||
. = ..()
|
||||
|
||||
/obj/item/lightpainter/examine(mob/user)
|
||||
. = ..()
|
||||
if(get_dist(user, src) <= 2)
|
||||
if(resetmode)
|
||||
. += "It is currently resetting light colors."
|
||||
else
|
||||
. += "It is currently coloring lights."
|
||||
|
||||
/obj/item/lightpainter/attack_self(mob/user)
|
||||
|
||||
if(!resetmode)
|
||||
resetmode = 1
|
||||
to_chat(usr, span_infoplain("Painter reset."))
|
||||
else
|
||||
var/color_input = tgui_color_picker(usr,"","Choose Light Color",setcolor)
|
||||
if(color_input)
|
||||
setcolor = sanitize_hexcolor(color_input)
|
||||
var/list/setcolorRGB = hex2rgb(setcolor)
|
||||
var/setcolorR = num2hex(setcolorRGB[1] * dimming, 2)
|
||||
var/setcolorG = num2hex(setcolorRGB[2] * dimming, 2)
|
||||
var/setcolorB = num2hex(setcolorRGB[3] * dimming, 2)
|
||||
setnightcolor = addtext("#", setcolorR, setcolorG, setcolorB)
|
||||
resetmode = 0
|
||||
to_chat(usr, span_infoplain("Painter color set."))
|
||||
|
||||
|
||||
/obj/item/lightpainter/proc/ColorLight(var/obj/machinery/light/target, var/mob/living/U)
|
||||
|
||||
src.add_fingerprint(U)
|
||||
|
||||
if(resetmode)
|
||||
to_chat(U, span_notice("You reset the color of the [target.get_fitting_name()]."))
|
||||
target.brightness_color = dcolor
|
||||
target.brightness_color_ns = dnightcolor
|
||||
else
|
||||
to_chat(U, span_notice("You set the color of the [target.get_fitting_name()]."))
|
||||
|
||||
target.brightness_color = setcolor
|
||||
target.brightness_color_ns = setnightcolor
|
||||
|
||||
if(target.nightshift_enabled)
|
||||
target.light_color = target.brightness_color_ns
|
||||
else
|
||||
target.light_color = target.brightness_color
|
||||
|
||||
target.set_light(0)
|
||||
target.update()
|
||||
@@ -219,3 +219,76 @@
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
// Light Painter.
|
||||
|
||||
/obj/item/lightpainter
|
||||
name = "light painter"
|
||||
desc = "A device to configure the emission color of lighting fixtures. Use this device in-hand to set/reset the color. Use the device on a light fixture to assign the color."
|
||||
icon = 'icons/obj/janitor.dmi'
|
||||
icon_state = "lightreplacer0"
|
||||
color = "#bbbbff"
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
matter = list(MAT_STEEL = 5000,MAT_GLASS = 1500)
|
||||
|
||||
var/static/dcolor = "#e0eff0"
|
||||
var/static/dnightcolor = "#efcc86"
|
||||
//set color values.
|
||||
var/setcolor = "#e0eff0"
|
||||
var/setnightcolor = "#efcc86"
|
||||
var/resetmode = 1
|
||||
|
||||
var/dimming = 0.7 // multiply value to dim lights from setcolor to nightcolor
|
||||
|
||||
|
||||
/obj/item/lightpainter/New()
|
||||
. = ..()
|
||||
|
||||
/obj/item/lightpainter/examine(mob/user)
|
||||
. = ..()
|
||||
if(get_dist(user, src) <= 2)
|
||||
if(resetmode)
|
||||
. += "It is currently resetting light colors."
|
||||
else
|
||||
. += "It is currently coloring lights."
|
||||
|
||||
/obj/item/lightpainter/attack_self(mob/user)
|
||||
|
||||
if(!resetmode)
|
||||
resetmode = 1
|
||||
to_chat(user, span_infoplain("Painter reset."))
|
||||
else
|
||||
var/color_input = tgui_color_picker(user,"","Choose Light Color",setcolor)
|
||||
if(color_input)
|
||||
setcolor = sanitize_hexcolor(color_input)
|
||||
var/list/setcolorRGB = hex2rgb(setcolor)
|
||||
var/setcolorR = num2hex(setcolorRGB[1] * dimming, 2)
|
||||
var/setcolorG = num2hex(setcolorRGB[2] * dimming, 2)
|
||||
var/setcolorB = num2hex(setcolorRGB[3] * dimming, 2)
|
||||
setnightcolor = addtext("#", setcolorR, setcolorG, setcolorB)
|
||||
resetmode = 0
|
||||
to_chat(user, span_infoplain("Painter color set."))
|
||||
|
||||
|
||||
/obj/item/lightpainter/proc/ColorLight(var/obj/machinery/light/target, var/mob/living/U)
|
||||
|
||||
src.add_fingerprint(U)
|
||||
|
||||
if(resetmode)
|
||||
to_chat(U, span_notice("You reset the color of the [target.get_fitting_name()]."))
|
||||
target.brightness_color = dcolor
|
||||
target.brightness_color_ns = dnightcolor
|
||||
else
|
||||
to_chat(U, span_notice("You set the color of the [target.get_fitting_name()]."))
|
||||
|
||||
target.brightness_color = setcolor
|
||||
target.brightness_color_ns = setnightcolor
|
||||
|
||||
if(target.nightshift_enabled)
|
||||
target.light_color = target.brightness_color_ns
|
||||
else
|
||||
target.light_color = target.brightness_color
|
||||
|
||||
target.set_light(0)
|
||||
target.update()
|
||||
|
||||
72
code/game/objects/items/holosign_creator.dm
Normal file
72
code/game/objects/items/holosign_creator.dm
Normal file
@@ -0,0 +1,72 @@
|
||||
/obj/item/holosign_creator
|
||||
name = "holographic sign projector"
|
||||
desc = "A handy-dandy holographic projector that displays a janitorial sign."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "signmaker"
|
||||
item_state = "electronic"
|
||||
force = 0
|
||||
w_class = 2
|
||||
throwforce = 0
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
var/list/signs = list()
|
||||
var/max_signs = 10
|
||||
var/creation_time = 0 //time to create a holosign in deciseconds.
|
||||
var/holosign_type = /obj/structure/holosign/wetsign
|
||||
var/holocreator_busy = FALSE //to prevent placing multiple holo barriers at once
|
||||
|
||||
/obj/item/holosign_creator/afterattack(atom/target, mob/user, clickchain_flags, list/params)
|
||||
. = ..()
|
||||
if(!check_allowed_items(target, 1))
|
||||
return
|
||||
var/turf/T = get_turf(target)
|
||||
var/obj/structure/holosign/H = locate(holosign_type) in T
|
||||
if(H)
|
||||
to_chat(user, span_notice("You use [src] to deactivate [H]."))
|
||||
qdel(H)
|
||||
else
|
||||
if(holocreator_busy)
|
||||
to_chat(user, span_notice("[src] is busy creating a hologram."))
|
||||
return
|
||||
if(signs.len < max_signs)
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 20, 1)
|
||||
if(creation_time)
|
||||
holocreator_busy = TRUE
|
||||
if(!do_after(user, creation_time, target = target))
|
||||
holocreator_busy = FALSE
|
||||
return
|
||||
holocreator_busy = FALSE
|
||||
if(signs.len >= max_signs)
|
||||
return
|
||||
if(is_blocked_turf(T, TRUE)) //don't try to sneak dense stuff on our tile during the wait.
|
||||
return
|
||||
H = new holosign_type(get_turf(target), src)
|
||||
to_chat(user, span_notice("You create \a [H] with [src]."))
|
||||
else
|
||||
to_chat(user, span_notice("[src] is projecting at max capacity!"))
|
||||
|
||||
/obj/item/holosign_creator/attack_self(mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(signs.len)
|
||||
for(var/H in signs)
|
||||
qdel(H)
|
||||
to_chat(user, span_notice("You clear all active holograms."))
|
||||
|
||||
/obj/item/holosign_creator/combifan
|
||||
name = "ATMOS holo-combifan projector"
|
||||
desc = "A holographic projector that creates holographic combi-fans that prevent changes in atmosphere and temperature conditions. Somehow."
|
||||
icon_state = "signmaker_engi"
|
||||
holosign_type = /obj/structure/holosign/barrier/combifan
|
||||
creation_time = 0
|
||||
max_signs = 3
|
||||
|
||||
/obj/item/holosign_creator/medical
|
||||
name = "Vey-Med barrier projector"
|
||||
desc = "A holographic projector that creates Vey-Medical holobarriers. Useful during quarantines since they halt those with malicious diseases."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "signmaker_med"
|
||||
holosign_type = /obj/structure/holosign/barrier/medical
|
||||
creation_time = 0
|
||||
max_signs = 6
|
||||
12
code/game/objects/items/toys/target_toy.dm
Normal file
12
code/game/objects/items/toys/target_toy.dm
Normal file
@@ -0,0 +1,12 @@
|
||||
/obj/item/storage/briefcase/target_toy
|
||||
starts_with = list(
|
||||
/obj/item/paper/target,
|
||||
/obj/item/gun/projectile/revolver/toy/big_iron,
|
||||
/obj/item/grenade/confetti = 2
|
||||
)
|
||||
|
||||
/obj/item/paper/target
|
||||
name = "target notice"
|
||||
|
||||
/obj/item/paper/target/New()
|
||||
info = "Your target is " + span_bold("[random_name(pick(MALE,FEMALE))]") + ". Make sure they don't get out of there alive."
|
||||
@@ -772,3 +772,338 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
name = "\improper badass Zippo lighter"
|
||||
desc = "An absolutely badass zippo lighter. Just look at that skull!"
|
||||
icon_state = "skullzippo"
|
||||
|
||||
/obj/item/flame/lighter/supermatter
|
||||
name = "Hardlight Supermatter Zippo" // Base SM Lighter
|
||||
desc = "State of the Art Supermatter Lighter."
|
||||
description_fluff = "A zippo style lighter with a tiny supermatter sliver held by a hardlight shield. When lighting a cigar, make sure to hover the tip near the sliver, not against it!"
|
||||
icon_state = "SMzippo"
|
||||
item_state = "SMzippo"
|
||||
activation_sound = 'sound/items/zippo_on_alt.ogg'
|
||||
deactivation_sound = 'sound/items/zippo_off.ogg'
|
||||
|
||||
/obj/item/flame/lighter/supermatter/syndismzippo
|
||||
name = "Phoron Supermatter Zippo" // Syndicate SM Lighter
|
||||
desc = "State of the Art Supermatter Lighter."
|
||||
description_fluff = "A red zippo style lighter with a tiny supermatter sliver held by a phoron field."
|
||||
icon_state = "SyndiSMzippo"
|
||||
item_state = "SyndiSMzippo"
|
||||
activation_sound = 'sound/items/zippo_on_alt.ogg'
|
||||
deactivation_sound = 'sound/items/zippo_off.ogg'
|
||||
|
||||
/obj/item/flame/lighter/supermatter/expsmzippo
|
||||
name = "Experimental SM Lighter" // Dangerous WIP (admin/event only ATM)
|
||||
desc = "State of the Art Supermatter Lighter"
|
||||
description_fluff = "A unique take originating from the zippo design, a shard of supermatter placed within lead-lined walls. Cautious, VERY DANGEROUS do NOT touch!"
|
||||
icon_state = "ExpSMzippo"
|
||||
item_state = "ExpSMzippo"
|
||||
activation_sound = 'sound/items/button-open.ogg'
|
||||
deactivation_sound = 'sound/items/button-close.ogg'
|
||||
|
||||
// safe smzippo
|
||||
/obj/item/flame/lighter/supermatter/attack_self(mob/living/user)
|
||||
if(!base_state)
|
||||
base_state = icon_state
|
||||
if(!lit)
|
||||
lit = 1
|
||||
icon_state = "[base_state]on"
|
||||
item_state = "[base_state]on"
|
||||
playsound(src, activation_sound, 75, 1)
|
||||
if(prob(50))
|
||||
user.visible_message(span_rose("[user] safely activates the [src] with a push of a button!"))
|
||||
else
|
||||
if(prob(95))
|
||||
user.visible_message(span_notice("After a few attempts, [user] manages to excite the supermatter within the [src]."))
|
||||
else // Just like the cheap lighter, this time you can shock/burn yourself a little on the hardlight shield
|
||||
to_chat(user, span_warning("You hurt yourself on the shielding!"))
|
||||
if (user.get_left_hand() == src)
|
||||
user.apply_damage(1,SEARING,"l_hand")
|
||||
user.apply_damage(2,ELECTROCUTE,"l_hand")
|
||||
user.apply_damage(3,CLONE,"l_hand")
|
||||
user.apply_damage(4,ELECTROMAG,"l_hand")
|
||||
else
|
||||
user.apply_damage(1,SEARING,"r_hand")
|
||||
user.apply_damage(2,ELECTROCUTE,"r_hand")
|
||||
user.apply_damage(3,CLONE,"r_hand")
|
||||
user.apply_damage(4,ELECTROMAG,"r_hand")
|
||||
user.visible_message(span_notice("After a few attempts, [user] manages to activate the [src], they however sting themselves on the shielding!"))
|
||||
|
||||
set_light(2)
|
||||
START_PROCESSING(SSobj, src)
|
||||
else
|
||||
lit = 0
|
||||
icon_state = "[base_state]"
|
||||
item_state = "[base_state]"
|
||||
playsound(src, deactivation_sound, 75, 1)
|
||||
if(istype(src, /obj/item/flame/lighter/supermatter) )
|
||||
user.visible_message(span_rose("You hear a quiet click, as [user] shuts the [src] without even looking at what they're doing."))
|
||||
else
|
||||
user.visible_message(span_notice("[user] quietly shuts the [src]."))
|
||||
|
||||
set_light(0)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return
|
||||
|
||||
|
||||
/obj/item/flame/lighter/supermatter/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
||||
if(!istype(M, /mob))
|
||||
return
|
||||
|
||||
if(lit == 1)
|
||||
M.IgniteMob()
|
||||
add_attack_logs(user,M,"Lit on fire with [src]")
|
||||
|
||||
if(istype(M.wear_mask, /obj/item/clothing/mask/smokable/cigarette) && user.zone_sel.selecting == O_MOUTH && lit)
|
||||
var/obj/item/clothing/mask/smokable/cigarette/cig = M.wear_mask
|
||||
if(M == user)
|
||||
cig.attackby(src, user)
|
||||
else
|
||||
if(istype(src, /obj/item/flame/lighter/supermatter))
|
||||
cig.light(span_rose("[user] whips the [name] out and holds it for [M]."))
|
||||
else
|
||||
cig.light(span_notice("[user] holds the [name] out for [M], and lights the [cig.name]."))
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/flame/lighter/supermatter/process()
|
||||
var/turf/location = get_turf(src)
|
||||
if(location)
|
||||
location.hotspot_expose(700, 5)
|
||||
return
|
||||
|
||||
// syndicate smzippo
|
||||
/obj/item/flame/lighter/supermatter/syndismzippo/attack_self(mob/living/user)
|
||||
if(!base_state)
|
||||
base_state = icon_state
|
||||
if(!lit)
|
||||
lit = 1
|
||||
icon_state = "[base_state]on"
|
||||
item_state = "[base_state]on"
|
||||
playsound(src, activation_sound, 75, 1)
|
||||
if(prob(50))
|
||||
user.visible_message(span_rose("[user] safely activates the [src] with a push of a button!"))
|
||||
else
|
||||
if(prob(95))
|
||||
user.visible_message(span_notice("After a few attempts, [user] manages to excite the supermatter within the [src]."))
|
||||
else // Just like with the cheap lighter, but this time you can hurt yourself on the heated phoron field
|
||||
to_chat(user, span_warning("You singe yourself on the phoron shielding the excited supermatter!"))
|
||||
if (user.get_left_hand() == src)
|
||||
user.apply_damage(30,HALLOSS,"l_hand")
|
||||
user.apply_effect(20,IRRADIATE)
|
||||
user.apply_damage(5,BURN,"l_hand")
|
||||
user.apply_damage(5,ELECTROCUTE,"l_hand")
|
||||
else
|
||||
user.apply_damage(30,HALLOSS,"r_hand")
|
||||
user.apply_effect(20,IRRADIATE)
|
||||
user.apply_damage(5,BURN,"r_hand")
|
||||
user.apply_damage(5,ELECTROCUTE,"r_hand")
|
||||
user.visible_message(span_notice("After a few attempts, [user] manages to activate the [src], they however burn themselves with the heated phoron field!"))
|
||||
|
||||
set_light(2)
|
||||
START_PROCESSING(SSobj, src)
|
||||
else
|
||||
lit = 0
|
||||
icon_state = "[base_state]"
|
||||
item_state = "[base_state]"
|
||||
playsound(src, deactivation_sound, 75, 1)
|
||||
if(istype(src, /obj/item/flame/lighter/supermatter/syndismzippo) )
|
||||
user.visible_message(span_rose("You hear a quiet click, as [user] shuts the [src] without even looking at what they're doing."))
|
||||
else
|
||||
user.visible_message(span_notice("[user] quietly shuts the [src]."))
|
||||
|
||||
set_light(0)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return
|
||||
|
||||
|
||||
/obj/item/flame/lighter/supermatter/syndismzippo/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
||||
if(!istype(M, /mob))
|
||||
return
|
||||
|
||||
if(lit == 1)
|
||||
M.IgniteMob()
|
||||
add_attack_logs(user,M,"Lit on fire with [src]")
|
||||
|
||||
if(istype(M.wear_mask, /obj/item/clothing/mask/smokable/cigarette) && user.zone_sel.selecting == O_MOUTH && lit)
|
||||
var/obj/item/clothing/mask/smokable/cigarette/cig = M.wear_mask
|
||||
if(M == user)
|
||||
cig.attackby(src, user)
|
||||
else
|
||||
if(istype(src, /obj/item/flame/lighter/supermatter/syndismzippo))
|
||||
cig.light(span_rose("[user] whips the [name] out and holds it for [M]."))
|
||||
else
|
||||
cig.light(span_notice("[user] holds the [name] out for [M], and lights the [cig.name]."))
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/flame/lighter/process()
|
||||
var/turf/location = get_turf(src)
|
||||
if(location)
|
||||
location.hotspot_expose(700, 5)
|
||||
return
|
||||
|
||||
// Experimental smzippo
|
||||
/obj/item/flame/lighter/supermatter/expsmzippo/attack_self(mob/living/user)
|
||||
if (!base_state)
|
||||
base_state = icon_state
|
||||
if (!lit)
|
||||
lit = 1
|
||||
icon_state = "[base_state]on"
|
||||
item_state = "[base_state]on"
|
||||
playsound(src, activation_sound, 75, 1)
|
||||
var/i = rand(1, 100)
|
||||
switch(i)
|
||||
if(1 to 22)
|
||||
to_chat(user, span_rose("[user] safely reveals the supermatter shard within the [src]!"))
|
||||
user.visible_message(span_rose("You safely revealed the supermatter shard within the [src]!"))
|
||||
if (user.get_left_hand() == src)
|
||||
user.apply_damage(1, IRRADIATE, "l_hand")
|
||||
else // Even using this safely will irradiate you a tiny tiny bit.
|
||||
user.apply_damage(1, IRRADIATE, "r_hand")
|
||||
if(23 to 33)
|
||||
to_chat(user, span_warning("[user]'s hand slipped and they brush against the supermatter within [src]!"))
|
||||
user.visible_message(span_notice("You accidentally grazed your hand across the supermatter!"))
|
||||
if (user.get_left_hand() == src)
|
||||
user.apply_damage(10, IRRADIATE, "l_hand")
|
||||
user.apply_damage(20, BURN, "l_hand")
|
||||
user.apply_damage(20, ELECTROCUTE, "l_hand")
|
||||
user.apply_damage(50, AGONY, "l_hand")
|
||||
else // One of the outcomes will burn and shock you, the pain is the worst part of this one though.
|
||||
user.apply_damage(10, IRRADIATE, "r_hand")
|
||||
user.apply_damage(20, BURN, "r_hand")
|
||||
user.apply_damage(20, ELECTROCUTE, "r_hand")
|
||||
user.apply_damage(50, AGONY, "r_hand")
|
||||
if(34 to 44)
|
||||
to_chat(user, span_warning("[user] burned themselves on the [src]!"))
|
||||
user.visible_message(span_notice("You accidentally burn yourself on the [src]!"))
|
||||
if (user.get_left_hand() == src)
|
||||
user.apply_damage(30, IRRADIATE, "l_hand")
|
||||
user.apply_damage(20, SEARING, "l_hand")
|
||||
user.apply_damage(15, BURN, "l_hand")
|
||||
else // One of the outcomes is pure burn and radiation.
|
||||
user.apply_damage(30, IRRADIATE, "r_hand")
|
||||
user.apply_damage(20, SEARING, "r_hand")
|
||||
user.apply_damage(15, BURN, "r_hand")
|
||||
if(45 to 55)
|
||||
to_chat(user, span_warning("[user] fumbled the [src] and the supermatter let out sparks!"))
|
||||
user.visible_message(span_notice("You fumble the [src], letting the supermatter spark as the case opens!"))
|
||||
if (user.get_left_hand() == src)
|
||||
user.apply_damage(1, ELECTROCUTE, "l_hand")
|
||||
user.apply_damage(100, ELECTROMAG, "l_hand")
|
||||
else // This one is mostly dangerous to synthetics and it will EMP you. But otherwise it's safe.
|
||||
user.apply_damage(1, ELECTROCUTE, "r_hand")
|
||||
user.apply_damage(100, ELECTROMAG, "r_hand")
|
||||
if(56 to 66)
|
||||
to_chat(user, span_warning("[user] struggles to open their [src], but when they do they get burned by the extreme heat within!"))
|
||||
user.visible_message(span_notice("You struggle to get the case to open, and when it does the heat that pours out of the [src] burns!"))
|
||||
if (user.get_left_hand() == src)
|
||||
user.apply_damage(1, IRRADIATE, "l_hand")
|
||||
user.apply_damage(1, BRUISE, "l_hand")
|
||||
user.apply_damage(200, BURN, "l_hand")
|
||||
user.drop_l_hand()
|
||||
else // This will INSTA-DUST your hand that you're holding the item in, and then make you drop the lighter.
|
||||
user.apply_damage(1, IRRADIATE, "r_hand")
|
||||
user.apply_damage(1, BRUISE, "r_hand")
|
||||
user.apply_damage(200, BURN, "r_hand")
|
||||
user.drop_r_hand()
|
||||
if(67 to 77)
|
||||
to_chat(user, span_warning("Ouch! While pushing on the release to open the [src], [user]'s finger slipped right as the case opened, pressing their finger firm against the supermatter!"))
|
||||
user.visible_message(span_notice("You accidentally pushed your finger against the supermatter!"))
|
||||
if (user.get_left_hand() == src)
|
||||
user.apply_damage(50, HALLOSS, "l_hand")
|
||||
user.apply_damage(40, IRRADIATE, "l_hand")
|
||||
user.apply_damage(30, BURN, "l_hand")
|
||||
user.apply_damage(20, TOX, "l_hand")
|
||||
user.apply_damage(10, ELECTROCUTE, "l_hand")
|
||||
user.apply_effect(25, STUTTER)
|
||||
user.apply_effect(15, SLUR)
|
||||
user.apply_effect(5, STUN)
|
||||
else // This one is VERY punishing, you get a ton of damage, a lot of pain, and a minor stun. Once the stun goes away you'll be stuttering for awhile as if in crit.
|
||||
user.apply_damage(50, HALLOSS, "r_hand")
|
||||
user.apply_damage(40, IRRADIATE, "r_hand")
|
||||
user.apply_damage(30, BURN, "r_hand")
|
||||
user.apply_damage(20, TOX, "r_hand")
|
||||
user.apply_damage(10, ELECTROCUTE, "r_hand")
|
||||
user.apply_effect(25, STUTTER)
|
||||
user.apply_effect(15, SLUR)
|
||||
user.apply_effect(5, STUN)
|
||||
if(78 to 88)
|
||||
to_chat(user, span_notice("[user] managed to pinch themselves on the case of their [src]... it could have been worse."))
|
||||
user.visible_message(span_notice("You manage to pinch yourself on the case!"))
|
||||
if (user.get_left_hand() == src)
|
||||
user.apply_damage(1, CLONE, "l_hand")
|
||||
user.apply_damage(1, HALLOSS, "l_hand")
|
||||
else // Aside from the base, this one isn't punishing outside of giving you genetic damage.
|
||||
user.apply_damage(1, CLONE, "r_hand")
|
||||
user.apply_damage(1, HALLOSS, "r_hand")
|
||||
if(89 to 99)
|
||||
to_chat(user, span_notice("[user] opened the [src] but forgot that you aren't supposed to look at supermatter!"))
|
||||
user.visible_message(span_notice("You find yourself looking at the supermatter for longer than you should..."))
|
||||
if (user.get_left_hand() == src)
|
||||
user.apply_damage(15, HALLOSS, "l_hand")
|
||||
user.apply_effect(5, WEAKEN)
|
||||
user.apply_damage(15, IRRADIATE, "l_hand")
|
||||
user.apply_effect(100, EYE_BLUR)
|
||||
user.apply_effect(50, AGONY)
|
||||
user.apply_damage(5, OXY)
|
||||
user.eye_blurry = 10
|
||||
else // This one just blinds and blurs your screen, but otherwise doesn't actually risk harming you. Even the oxy damage heals on its own.
|
||||
user.apply_damage(15, HALLOSS, "r_hand")
|
||||
user.apply_effect(5, WEAKEN)
|
||||
user.apply_damage(15, IRRADIATE, "l_hand")
|
||||
user.apply_effect(100, EYE_BLUR)
|
||||
user.apply_effect(50, AGONY)
|
||||
user.apply_damage(15, OXY)
|
||||
user.eye_blurry = 10
|
||||
if(100) // This is the part that makes it admin only for the moment, it spawns 500 rads from the carbon's position, and dusts the carbon instantly. It does also drop everything unlike the supermatter crystal though, so hopefully you won't lose any items if you fumble this badly!
|
||||
to_chat(user, span_warning("OH NO! [user] almost dropped their live [src]! Thank goodness they caught it... by the glowing yellow crystal... oh."))
|
||||
user.visible_message(span_danger("You almost dropped your [src], thank goodness you caught it! By the glowing crystal within. You find your ears filled with unearthly ringing and your last thought is \"Oh, fuck.\""))
|
||||
user.drop_r_hand() // To ensure the lighter is dropped <3
|
||||
user.drop_l_hand() // To ensure the lighter is dropped <3
|
||||
for(var/obj/item/e in user)
|
||||
user.drop_from_inventory(e)
|
||||
log_and_message_admins("[user] dusted themselves and caused massive radiation with [src]!",user)
|
||||
user.dust()
|
||||
var/rads = 500
|
||||
SSradiation.radiate(src, rads)
|
||||
|
||||
set_light(5)
|
||||
START_PROCESSING(SSobj, src)
|
||||
else
|
||||
lit = 0
|
||||
icon_state = "[base_state]"
|
||||
item_state = "[base_state]"
|
||||
playsound(src, deactivation_sound, 75, 1)
|
||||
if (istype(src, /obj/item/flame/lighter/supermatter/expsmzippo))
|
||||
user.visible_message(span_rose("You hear a quiet click, as [user] closes the [src]."))
|
||||
else
|
||||
user.visible_message(span_notice("[user] quietly shuts the [src]."))
|
||||
|
||||
set_light(0)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/flame/lighter/supermatter/expsmzippo/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
||||
if (!istype(M, /mob))
|
||||
return
|
||||
|
||||
if (lit == 1)
|
||||
M.IgniteMob()
|
||||
add_attack_logs(user, M, "Lit on fire with [src]")
|
||||
|
||||
if (istype(M.wear_mask, /obj/item/clothing/mask/smokable/cigarette) && user.zone_sel.selecting == O_MOUTH && lit)
|
||||
var/obj/item/clothing/mask/smokable/cigarette/cig = M.wear_mask
|
||||
if (M == user)
|
||||
cig.attackby(src, user)
|
||||
else
|
||||
if (istype(src, /obj/item/flame/lighter/supermatter/expsmzippo))
|
||||
cig.light(span_rose("[user] whips the [name] out and holds it for [M]."))
|
||||
else
|
||||
cig.light(span_notice("[user] holds the [name] out for [M], and lights the [cig.name]."))
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/flame/lighter/supermatter/expsmzippo/process()
|
||||
var/turf/location = get_turf(src)
|
||||
if (location)
|
||||
location.hotspot_expose(700, 5)
|
||||
return
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/item/mail
|
||||
name = "mail"
|
||||
desc = "An officially postmarked, tamper-evident parcel regulated by CentComm and made of high-quality materials."
|
||||
icon = 'modular_chomp/icons/obj/bureaucracy.dmi'
|
||||
desc = "An officially postmarked, tamper-evident parcel regulated by CentCom and made of high-quality materials."
|
||||
icon = 'icons/obj/bureaucracy.dmi'
|
||||
icon_state = "mail_small"
|
||||
item_flags = NOBLUDGEON
|
||||
w_class = ITEMSIZE_SMALL
|
||||
@@ -80,7 +80,7 @@
|
||||
var/set_recipient = FALSE
|
||||
var/set_content = FALSE
|
||||
var/sealed = FALSE
|
||||
var/list/mail_recipients = list()
|
||||
var/list/mail_recipients
|
||||
|
||||
/obj/item/mail/blank/attackby(obj/item/W, mob/user)
|
||||
..()
|
||||
@@ -95,7 +95,7 @@
|
||||
set_content = FALSE
|
||||
user.drop_item()
|
||||
W.forceMove(src)
|
||||
balloon_alert(user, "Placed the [W] into the [src]")
|
||||
to_chat(user, "Placed the [W] into the [src]")
|
||||
set_content = TRUE
|
||||
description_info = "Click with an empty hand to seal it, or Alt-Click to retrieve the object out."
|
||||
return
|
||||
@@ -134,7 +134,6 @@
|
||||
|
||||
/obj/item/mail/blank/attack_self(mob/user)
|
||||
if(!sealed)
|
||||
balloon_alert(user, "Sealing the envelope...")
|
||||
if(!do_after(user, 1.5 SECONDS, target = user))
|
||||
sealed = FALSE
|
||||
sealed = TRUE
|
||||
@@ -177,14 +176,14 @@
|
||||
var/obj/item/destTagger/O = W
|
||||
if(O.currTag)
|
||||
if(src.sortTag != O.currTag)
|
||||
balloon_alert(user, "You have labeled the destination as [O.currTag].")
|
||||
to_chat(user, span_notice("You have labeled the destination as [O.currTag]."))
|
||||
src.sortTag = O.currTag
|
||||
playsound(src, 'sound/machines/twobeep.ogg', 50, 1)
|
||||
W.description_info = " It is labeled for [O.currTag]"
|
||||
else
|
||||
balloon_alert(user, "The mail is already labeled for [O.currTag].")
|
||||
to_chat(user, span_notice("The mail is already labeled for [O.currTag]."))
|
||||
else
|
||||
balloon_alert(user, "You need to set a destination first!")
|
||||
to_chat(user, span_danger("You need to set a destination first!"))
|
||||
return
|
||||
|
||||
/obj/item/mail/attack_self(mob/user)
|
||||
@@ -194,15 +193,14 @@
|
||||
|
||||
/obj/item/mail/proc/unwrap(mob/user)
|
||||
if(recipient && user != recipient)
|
||||
balloon_alert(user, "You can't open somebody's mail! That's <em>illegal</em>")
|
||||
to_chat(user, span_danger("You can't open somebody's mail! That's <em>illegal</em>"))
|
||||
return FALSE
|
||||
|
||||
if(opening)
|
||||
balloon_alert(user, "You are already opening that!")
|
||||
to_chat(user, span_danger("You are already opening that!"))
|
||||
return FALSE
|
||||
|
||||
opening = TRUE
|
||||
balloon_alert(user, "Unwrapping...")
|
||||
if(!do_after(user, 1.5 SECONDS, target = user))
|
||||
opening = FALSE
|
||||
return FALSE
|
||||
@@ -231,7 +229,7 @@
|
||||
if(!preset_goodies)
|
||||
var/list/job_goodies = this_job.get_mail_goodies(new_recipient, current_title)
|
||||
if(LAZYLEN(job_goodies))
|
||||
if(this_job.exclusive_mail_goodies)
|
||||
if(this_job.get_mail_goodies())
|
||||
goodies = job_goodies
|
||||
else
|
||||
goodies += job_goodies
|
||||
@@ -299,12 +297,12 @@
|
||||
new chosen(ground_mail)
|
||||
log_and_message_admins("spawned [chosen] inside an envelope at ([usr.x],[usr.y],[usr.z])")
|
||||
|
||||
feedback_add_details("admin_verb","SE")
|
||||
feedback_add_details("admin_verb","SM")
|
||||
|
||||
// Mail Crate
|
||||
/obj/structure/closet/crate/mail
|
||||
name = "mail crate"
|
||||
desc = "An official mail crate from CentComm"
|
||||
desc = "An official mail crate from CentCom"
|
||||
points_per_crate = 0
|
||||
closet_appearance = /decl/closet_appearance/crate/nanotrasen
|
||||
|
||||
@@ -331,7 +329,7 @@
|
||||
/obj/item/storage/bag/mail
|
||||
name = "mail bag"
|
||||
desc = "A bag for letters, envelopes and other postage."
|
||||
icon = 'modular_chomp/icons/obj/bureaucracy.dmi'
|
||||
icon = 'icons/obj/bureaucracy.dmi'
|
||||
icon_state = "mailbag"
|
||||
slot_flags = SLOT_BELT | SLOT_POCKET
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
@@ -356,7 +354,7 @@
|
||||
desc = "Sponsored by the Intergalactic Mail Service, this device logs mail deliveries in exchance for financial compensation."
|
||||
force = 0
|
||||
throwforce = 0
|
||||
icon = 'modular_chomp/icons/obj/bureaucracy.dmi'
|
||||
icon = 'icons/obj/bureaucracy.dmi'
|
||||
icon_state = "mail_scanner"
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = ITEMSIZE_SMALL
|
||||
@@ -374,34 +372,34 @@
|
||||
if(istype(A, /obj/item/mail))
|
||||
var/obj/item/mail/saved_mail = A
|
||||
if(saved_mail.scanned)
|
||||
user.balloon_alert(user, "This letter has already been scanned!")
|
||||
playsound(loc, 'modular_chomp/sound/items/mail/maildenied.ogg', 50, TRUE)
|
||||
to_chat(user, span_danger("This letter has already been scanned!"))
|
||||
playsound(loc, 'sound/items/mail/maildenied.ogg', 50, TRUE)
|
||||
return
|
||||
user.balloon_alert(user, "Mail added to database")
|
||||
playsound(loc, 'modular_chomp/sound/items/mail/mailscanned.ogg', 50, TRUE)
|
||||
to_chat(user, span_notice("Mail added to database"))
|
||||
playsound(loc, 'sound/items/mail/mailscanned.ogg', 50, TRUE)
|
||||
saved = A
|
||||
return
|
||||
if(isliving(A))
|
||||
var/mob/living/M = A
|
||||
|
||||
if(!saved)
|
||||
user.balloon_alert(user, "No logged mail!")
|
||||
playsound(loc, 'modular_chomp/sound/items/mail/maildenied.ogg', 50, TRUE)
|
||||
to_chat(user, span_danger("No logged mail!"))
|
||||
playsound(loc, 'sound/items/mail/maildenied.ogg', 50, TRUE)
|
||||
return
|
||||
|
||||
var/mob/living/recipient = saved.recipient
|
||||
|
||||
if(M.stat == DEAD)
|
||||
to_chat(user, span_warning("Consent Verification failed: You can't deliver mail to a corpse!"))
|
||||
playsound(loc, 'modular_chomp/sound/items/mail/maildenied.ogg', 50, TRUE)
|
||||
playsound(loc, 'sound/items/mail/maildenied.ogg', 50, TRUE)
|
||||
return
|
||||
if(M.real_name != recipient.real_name)
|
||||
to_chat(user, span_warning("Identity Verification failed: Target is not authorized recipient of this envelope!"))
|
||||
playsound(loc, 'modular_chomp/sound/items/mail/maildenied.ogg', 50, TRUE)
|
||||
playsound(loc, 'sound/items/mail/maildenied.ogg', 50, TRUE)
|
||||
return
|
||||
if(!M.client)
|
||||
to_chat(user, span_warning("Consent Verification failed: The scanner does not accept orders from SSD crewmemmbers!"))
|
||||
playsound(loc, 'modular_chomp/sound/items/mail/maildenied.ogg', 50, TRUE)
|
||||
playsound(loc, 'sound/items/mail/maildenied.ogg', 50, TRUE)
|
||||
return
|
||||
|
||||
saved.scanned = TRUE
|
||||
@@ -409,7 +407,7 @@
|
||||
|
||||
cargo_points = rand(5, 10)
|
||||
to_chat(user, span_notice("Succesful delivery acknowledged! [cargo_points] points added to Supply."))
|
||||
playsound(loc, 'modular_chomp/sound/items/mail/mailapproved.ogg', 50, TRUE)
|
||||
playsound(loc, 'sound/items/mail/mailapproved.ogg', 50, TRUE)
|
||||
SSsupply.points += cargo_points
|
||||
|
||||
// JUNK MAIL STUFF
|
||||
@@ -440,7 +438,7 @@
|
||||
/obj/item/reagent_containers/food/snacks/donkpocket/spicy,
|
||||
/obj/item/reagent_containers/food/snacks/donkpocket/teriyaki,
|
||||
/obj/item/toy/figure,
|
||||
/obj/item/contraband,
|
||||
/obj/item/contraband/package,
|
||||
/obj/item/tool/screwdriver/sdriver,
|
||||
/obj/item/storage/briefcase/target_toy
|
||||
))
|
||||
@@ -460,7 +458,7 @@
|
||||
/obj/item/reagent_containers/food/snacks/donkpocket/spicy = "[initial(name)] with NEW SPICY-POCKET.",
|
||||
/obj/item/reagent_containers/food/snacks/donkpocket/teriyaki = "[initial(name)] with NEW TERIYAKI-POCKET.",
|
||||
/obj/item/toy/figure = "[initial(name)] from DoN**K*oC",
|
||||
/obj/item/contraband = "[pick("oddly shaped", "strangely wrapped", "weird", "bulging")] [initial(name)]",
|
||||
/obj/item/contraband/package = "[pick("oddly shaped", "strangely wrapped", "weird", "bulging")] [initial(name)]",
|
||||
/obj/item/tool/screwdriver/sdriver = "[initial(name)] for Proffesor Who",
|
||||
/obj/item/storage/briefcase/target_toy = "[initial(name)] for SIMPATHY, SUCCESS, MANHATTAN, BELIEFS"
|
||||
)
|
||||
108
code/game/objects/structures/holosign.dm
Normal file
108
code/game/objects/structures/holosign.dm
Normal file
@@ -0,0 +1,108 @@
|
||||
/obj/structure/holosign
|
||||
name = "holo sign"
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
anchored = TRUE
|
||||
var/obj/item/holosign_creator/projector
|
||||
var/health = 10
|
||||
explosion_resistance = 1
|
||||
|
||||
/obj/structure/holosign/Initialize(mapload, source_projector)
|
||||
. = ..()
|
||||
if(source_projector)
|
||||
projector = source_projector
|
||||
projector.signs += src
|
||||
/* if(overlays) // Fucking god damnit why do we have to have an entire different subsystem for this shit from other codebases.
|
||||
overlays.add_overlay(src, icon, icon_state, ABOVE_MOB_LAYER, plane, dir, alpha, RESET_ALPHA) //you see mobs under it, but you hit them like they are above it
|
||||
alpha = 0
|
||||
*/
|
||||
|
||||
/obj/structure/holosign/Destroy()
|
||||
if(projector)
|
||||
projector.signs -= src
|
||||
projector = null
|
||||
return ..()
|
||||
|
||||
/obj/structure/holosign/attack_hand(mob/user, list/params)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
user.setClickCooldown(user.get_attack_speed())
|
||||
user.do_attack_animation(src)
|
||||
take_damage(5)
|
||||
playsound(loc, 'sound/weapons/egloves.ogg', 80, 1)
|
||||
|
||||
/obj/structure/holosign/attackby(obj/item/W as obj, mob/user as mob)
|
||||
user.setClickCooldown(user.get_attack_speed(W))
|
||||
user.do_attack_animation(src)
|
||||
playsound(loc, 'sound/weapons/egloves.ogg', 80, 1)
|
||||
take_damage(W.force)
|
||||
|
||||
/obj/structure/holosign/take_damage(var/damage)
|
||||
health -= damage
|
||||
spawn(1) healthcheck()
|
||||
return 1
|
||||
|
||||
/obj/structure/holosign/proc/healthcheck()
|
||||
if(health <= 0)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/holosign/wetsign
|
||||
name = "wet floor sign"
|
||||
desc = "The words flicker as if they mean nothing."
|
||||
icon_state = "holosign"
|
||||
|
||||
/obj/structure/holosign/barrier/combifan
|
||||
name = "holo combifan"
|
||||
desc = "A holographic barrier resembling a blue-accented tiny fan. Though it does not prevent solid objects from passing through, gas and temperature changes are kept out."
|
||||
icon_state = "holo_firelock"
|
||||
anchored = TRUE
|
||||
density = FALSE
|
||||
layer = ABOVE_TURF_LAYER
|
||||
can_atmos_pass = ATMOS_PASS_NO
|
||||
alpha = 150
|
||||
|
||||
/obj/structure/holosign/barrier/combifan/Destroy()
|
||||
update_nearby_tiles()
|
||||
return ..()
|
||||
|
||||
/obj/structure/holosign/barrier/combifan/Initialize(mapload)
|
||||
.=..()
|
||||
update_nearby_tiles()
|
||||
|
||||
/obj/structure/holosign/barrier/medical
|
||||
name = "\improper Vey-Med holobarrier"
|
||||
desc = "A holobarrier that uses biometrics to detect viruses. Denies passing to personnel with easily-detected, malicious viruses. Good for quarantines."
|
||||
icon_state = "holo_medical"
|
||||
alpha = 125
|
||||
var/buzzed = 0
|
||||
|
||||
/obj/structure/holosign/barrier/medical/CanPass(atom/movable/mover, border_dir)
|
||||
. = ..()
|
||||
if(mover.has_buckled_mobs())
|
||||
for(var/mob/living/L as anything in buckled_mobs)
|
||||
if(ishuman(L))
|
||||
if(CheckHuman(L))
|
||||
return FALSE
|
||||
if(ishuman(mover))
|
||||
return CheckHuman(mover)
|
||||
return TRUE
|
||||
|
||||
/obj/structure/holosign/barrier/medical/Bumped(atom/movable/AM)
|
||||
. = ..()
|
||||
if(ishuman(AM) && !CheckHuman(AM))
|
||||
if(buzzed < world.time)
|
||||
playsound(get_turf(src), 'sound/machines/buzz-sigh.ogg', 50, 1)
|
||||
buzzed = (world.time + 60)
|
||||
|
||||
icon_state = "holo_medical-deny"
|
||||
addtimer(VARSET_CALLBACK(src, icon_state, "holo_medical"), 10 SECONDS, TIMER_DELETE_ME)
|
||||
|
||||
/obj/structure/holosign/barrier/medical/proc/CheckHuman(mob/living/carbon/human/H)
|
||||
if(istype(H.get_species(), SPECIES_XENOCHIMERA))
|
||||
return FALSE
|
||||
if(H.GetViruses())
|
||||
for(var/datum/disease/D in H.GetViruses())
|
||||
if(D.severity == NONTHREAT)
|
||||
continue
|
||||
return FALSE
|
||||
return TRUE
|
||||
Reference in New Issue
Block a user