Merge branch 'master' into A_Tailer's_art
This commit is contained in:
@@ -42,6 +42,9 @@
|
||||
/obj/effect/decal/cleanable/glass/ex_act()
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/decal/cleanable/glass/plasma
|
||||
icon_state = "plasmatiny"
|
||||
|
||||
/obj/effect/decal/cleanable/dirt
|
||||
name = "dirt"
|
||||
desc = "Someone should clean that up."
|
||||
|
||||
@@ -36,4 +36,203 @@
|
||||
/obj/effect/turf_decal/tile/neutral
|
||||
name = "neutral corner"
|
||||
color = "#D4D4D4"
|
||||
alpha = 50
|
||||
alpha = 50
|
||||
|
||||
/obj/effect/turf_decal/trimline
|
||||
layer = TURF_PLATING_DECAL_LAYER
|
||||
alpha = 110
|
||||
icon_state = "trimline_box"
|
||||
|
||||
/obj/effect/turf_decal/trimline/white
|
||||
color = "#FFFFFF"
|
||||
|
||||
/obj/effect/turf_decal/trimline/white/line
|
||||
name = "trim decal"
|
||||
icon_state = "trimline"
|
||||
|
||||
/obj/effect/turf_decal/trimline/white/corner
|
||||
icon_state = "trimline_corner"
|
||||
|
||||
/obj/effect/turf_decal/trimline/white/end
|
||||
icon_state = "trimline_end"
|
||||
|
||||
/obj/effect/turf_decal/trimline/white/filled
|
||||
icon_state = "trimline_box_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/white/filled/line
|
||||
icon_state = "trimline_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/white/filled/corner
|
||||
icon_state = "trimline_corner_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/white/filled/end
|
||||
icon_state = "trimline_end_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/red
|
||||
color = "#DE3A3A"
|
||||
|
||||
/obj/effect/turf_decal/trimline/red/line
|
||||
icon_state = "trimline"
|
||||
|
||||
/obj/effect/turf_decal/trimline/red/corner
|
||||
icon_state = "trimline_corner"
|
||||
|
||||
/obj/effect/turf_decal/trimline/red/end
|
||||
icon_state = "trimline_end"
|
||||
|
||||
/obj/effect/turf_decal/trimline/red/filled
|
||||
icon_state = "trimline_box_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/red/filled/line
|
||||
icon_state = "trimline_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/red/filled/corner
|
||||
icon_state = "trimline_corner_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/red/filled/end
|
||||
icon_state = "trimline_end_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/green
|
||||
color = "#9FED58"
|
||||
|
||||
/obj/effect/turf_decal/trimline/green/line
|
||||
icon_state = "trimline"
|
||||
|
||||
/obj/effect/turf_decal/trimline/green/corner
|
||||
icon_state = "trimline_corner"
|
||||
|
||||
/obj/effect/turf_decal/trimline/green/end
|
||||
icon_state = "trimline_end"
|
||||
|
||||
/obj/effect/turf_decal/trimline/green/filled
|
||||
icon_state = "trimline_box_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/green/filled/line
|
||||
icon_state = "trimline_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/green/filled/corner
|
||||
icon_state = "trimline_corner_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/green/filled/end
|
||||
icon_state = "trimline_end_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/blue
|
||||
color = "#52B4E9"
|
||||
|
||||
/obj/effect/turf_decal/trimline/blue/line
|
||||
icon_state = "trimline"
|
||||
|
||||
/obj/effect/turf_decal/trimline/blue/corner
|
||||
icon_state = "trimline_corner"
|
||||
|
||||
/obj/effect/turf_decal/trimline/blue/end
|
||||
icon_state = "trimline_end"
|
||||
|
||||
/obj/effect/turf_decal/trimline/blue/filled
|
||||
icon_state = "trimline_box_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line
|
||||
icon_state = "trimline_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/blue/filled/corner
|
||||
icon_state = "trimline_corner_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/blue/filled/end
|
||||
icon_state = "trimline_end_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/yellow
|
||||
color = "#EFB341"
|
||||
|
||||
/obj/effect/turf_decal/trimline/yellow/line
|
||||
icon_state = "trimline"
|
||||
|
||||
/obj/effect/turf_decal/trimline/yellow/corner
|
||||
icon_state = "trimline_corner"
|
||||
|
||||
/obj/effect/turf_decal/trimline/yellow/end
|
||||
icon_state = "trimline_end"
|
||||
|
||||
/obj/effect/turf_decal/trimline/yellow/filled
|
||||
icon_state = "trimline_box_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/yellow/filled/line
|
||||
icon_state = "trimline_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/yellow/filled/corner
|
||||
icon_state = "trimline_corner_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/yellow/filled/end
|
||||
icon_state = "trimline_end_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/purple
|
||||
color = "#D381C9"
|
||||
|
||||
/obj/effect/turf_decal/trimline/purple/line
|
||||
icon_state = "trimline"
|
||||
|
||||
/obj/effect/turf_decal/trimline/purple/corner
|
||||
icon_state = "trimline_corner"
|
||||
|
||||
/obj/effect/turf_decal/trimline/purple/end
|
||||
icon_state = "trimline_end"
|
||||
|
||||
/obj/effect/turf_decal/trimline/purple/filled
|
||||
icon_state = "trimline_box_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/purple/filled/line
|
||||
icon_state = "trimline_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/purple/filled/corner
|
||||
icon_state = "trimline_corner_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/purple/filled/end
|
||||
icon_state = "trimline_end_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/brown
|
||||
color = "#A46106"
|
||||
|
||||
/obj/effect/turf_decal/trimline/brown/line
|
||||
icon_state = "trimline"
|
||||
|
||||
/obj/effect/turf_decal/trimline/brown/corner
|
||||
icon_state = "trimline_corner"
|
||||
|
||||
/obj/effect/turf_decal/trimline/brown/end
|
||||
icon_state = "trimline_end"
|
||||
|
||||
/obj/effect/turf_decal/trimline/brown/filled
|
||||
icon_state = "trimline_box_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/brown/filled/line
|
||||
icon_state = "trimline_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/brown/filled/corner
|
||||
icon_state = "trimline_corner_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/brown/filled/end
|
||||
icon_state = "trimline_end_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/neutral
|
||||
color = "#D4D4D4"
|
||||
alpha = 50
|
||||
|
||||
/obj/effect/turf_decal/trimline/neutral/line
|
||||
icon_state = "trimline"
|
||||
|
||||
/obj/effect/turf_decal/trimline/neutral/corner
|
||||
icon_state = "trimline_corner"
|
||||
|
||||
/obj/effect/turf_decal/trimline/neutral/end
|
||||
icon_state = "trimline_end"
|
||||
|
||||
/obj/effect/turf_decal/trimline/neutral/filled
|
||||
icon_state = "trimline_box_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/neutral/filled/line
|
||||
icon_state = "trimline_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/neutral/filled/corner
|
||||
icon_state = "trimline_corner_fill"
|
||||
|
||||
/obj/effect/turf_decal/trimline/brown/filled/end
|
||||
icon_state = "trimline_end_fill"
|
||||
@@ -133,7 +133,7 @@
|
||||
/obj/effect/spawner/bundle/costume/holiday_priest
|
||||
name = "holiday priest costume spawner"
|
||||
items = list(
|
||||
/obj/item/clothing/suit/holidaypriest)
|
||||
/obj/item/clothing/suit/chaplain/holidaypriest)
|
||||
|
||||
/obj/effect/spawner/bundle/costume/marisawizard
|
||||
name = "marisa wizard costume spawner"
|
||||
|
||||
@@ -68,6 +68,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
var/strip_delay = 40 //In deciseconds, how long an item takes to remove from another person
|
||||
var/breakouttime = 0
|
||||
var/list/materials
|
||||
var/reskinned = FALSE
|
||||
|
||||
var/list/attack_verb //Used in attackby() to say how something was attacked "[x] has been [z.attack_verb] by [y] with [z]"
|
||||
var/list/species_exception = null // list() of species types, if a species cannot put items in a certain slot, but species type is in list, it will be able to wear that item
|
||||
|
||||
@@ -37,6 +37,7 @@ RLD
|
||||
var/has_ammobar = FALSE //controls whether or not does update_icon apply ammo indicator overlays
|
||||
var/ammo_sections = 10 //amount of divisions in the ammo indicator overlay/number of ammo indicator states
|
||||
var/custom_range = 7
|
||||
var/upgrade = FALSE
|
||||
|
||||
/obj/item/construction/Initialize()
|
||||
. = ..()
|
||||
@@ -82,6 +83,11 @@ RLD
|
||||
loaded = loadwithsheets(W, sheetmultiplier * 0.25, user) // 1 matter for 1 floortile, as 4 tiles are produced from 1 metal
|
||||
if(loaded)
|
||||
to_chat(user, "<span class='notice'>[src] now holds [matter]/[max_matter] matter-units.</span>")
|
||||
else if(istype(W, /obj/item/rcd_upgrade))
|
||||
to_chat(user, "<span class='notice'>You upgrade the RCD with the [W]!</span>")
|
||||
upgrade = TRUE
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
qdel(W)
|
||||
else
|
||||
return ..()
|
||||
update_icon() //ensures that ammo counters (if present) get updated
|
||||
@@ -148,6 +154,7 @@ RLD
|
||||
has_ammobar = TRUE
|
||||
var/mode = 1
|
||||
var/ranged = FALSE
|
||||
var/computer_dir = 1
|
||||
var/airlock_type = /obj/machinery/door/airlock
|
||||
var/airlock_glass = FALSE // So the floor's rcd_act knows how much ammo to use
|
||||
var/window_type = /obj/structure/window/fulltile
|
||||
@@ -270,6 +277,28 @@ RLD
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/item/construction/rcd/proc/change_computer_dir(mob/user)
|
||||
if(!user)
|
||||
return
|
||||
var/list/computer_dirs = list(
|
||||
"NORTH" = image(icon = 'icons/mob/radial.dmi', icon_state = "cnorth"),
|
||||
"EAST" = image(icon = 'icons/mob/radial.dmi', icon_state = "ceast"),
|
||||
"SOUTH" = image(icon = 'icons/mob/radial.dmi', icon_state = "csouth"),
|
||||
"WEST" = image(icon = 'icons/mob/radial.dmi', icon_state = "cwest")
|
||||
)
|
||||
var/computerdirs = show_radial_menu(user, src, computer_dirs, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE, tooltips = TRUE)
|
||||
if(!check_menu(user))
|
||||
return
|
||||
switch(computerdirs)
|
||||
if("NORTH")
|
||||
computer_dir = 1
|
||||
if("EAST")
|
||||
computer_dir = 4
|
||||
if("SOUTH")
|
||||
computer_dir = 2
|
||||
if("WEST")
|
||||
computer_dir = 8
|
||||
|
||||
/obj/item/construction/rcd/proc/change_airlock_setting(mob/user)
|
||||
if(!user)
|
||||
return
|
||||
@@ -434,10 +463,15 @@ RLD
|
||||
..()
|
||||
var/list/choices = list(
|
||||
"Airlock" = image(icon = 'icons/mob/radial.dmi', icon_state = "airlock"),
|
||||
"Deconstruct" = image(icon= 'icons/mob/radial.dmi', icon_state = "delete"),
|
||||
"Grilles & Windows" = image(icon = 'icons/mob/radial.dmi', icon_state = "grillewindow"),
|
||||
"Floors & Walls" = image(icon = 'icons/mob/radial.dmi', icon_state = "wallfloor")
|
||||
)
|
||||
if(upgrade)
|
||||
choices += list(
|
||||
"Deconstruct" = image(icon= 'icons/mob/radial.dmi', icon_state = "delete"),
|
||||
"Machine Frames" = image(icon = 'icons/mob/radial.dmi', icon_state = "machine"),
|
||||
"Computer Frames" = image(icon = 'icons/mob/radial.dmi', icon_state = "computer_dir"),
|
||||
)
|
||||
if(mode == RCD_AIRLOCK)
|
||||
choices += list(
|
||||
"Change Access" = image(icon = 'icons/mob/radial.dmi', icon_state = "access"),
|
||||
@@ -459,6 +493,12 @@ RLD
|
||||
mode = RCD_DECONSTRUCT
|
||||
if("Grilles & Windows")
|
||||
mode = RCD_WINDOWGRILLE
|
||||
if("Machine Frames")
|
||||
mode = RCD_MACHINE
|
||||
if("Computer Frames")
|
||||
mode = RCD_COMPUTER
|
||||
change_computer_dir(user)
|
||||
return
|
||||
if("Change Access")
|
||||
change_airlock_access(user)
|
||||
return
|
||||
@@ -511,6 +551,7 @@ RLD
|
||||
no_ammo_message = "<span class='warning'>Insufficient charge.</span>"
|
||||
desc = "A device used to rapidly build walls and floors."
|
||||
canRturf = TRUE
|
||||
upgrade = TRUE
|
||||
|
||||
|
||||
/obj/item/construction/rcd/borg/useResource(amount, mob/user)
|
||||
@@ -542,6 +583,9 @@ RLD
|
||||
/obj/item/construction/rcd/loaded
|
||||
matter = 160
|
||||
|
||||
/obj/item/construction/rcd/loaded/upgraded
|
||||
upgrade = TRUE
|
||||
|
||||
/obj/item/construction/rcd/combat
|
||||
name = "Combat RCD"
|
||||
desc = "A device used to rapidly build and deconstruct. Reload with metal, plasteel, glass or compressed matter cartridges. This RCD has been upgraded to be able to remove Rwalls!"
|
||||
@@ -582,7 +626,7 @@ RLD
|
||||
name = "admin RCD"
|
||||
max_matter = INFINITY
|
||||
matter = INFINITY
|
||||
|
||||
upgrade = TRUE
|
||||
|
||||
// Ranged RCD
|
||||
|
||||
@@ -776,6 +820,12 @@ RLD
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/rcd_upgrade
|
||||
name = "RCD advanced design disk"
|
||||
desc = "It contains the design for machine frames, computer frames, and deconstruction."
|
||||
icon = 'icons/obj/module.dmi'
|
||||
icon_state = "datadisk3"
|
||||
|
||||
#undef GLOW_MODE
|
||||
#undef LIGHT_MODE
|
||||
#undef REMOVE_MODE
|
||||
|
||||
@@ -134,12 +134,14 @@ RSF
|
||||
return
|
||||
|
||||
/obj/item/cookiesynth/emag_act(mob/user)
|
||||
. = ..()
|
||||
obj_flags ^= EMAGGED
|
||||
if(obj_flags & EMAGGED)
|
||||
to_chat(user, "<span class='warning'>You short out [src]'s reagent safety checker!</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You reset [src]'s reagent safety checker!</span>")
|
||||
toxin = 0
|
||||
toxin = FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/item/cookiesynth/attack_self(mob/user)
|
||||
var/mob/living/silicon/robot/P = null
|
||||
@@ -180,7 +182,7 @@ RSF
|
||||
to_chat(user, "Fabricating Cookie..")
|
||||
var/obj/item/reagent_containers/food/snacks/cookie/S = new /obj/item/reagent_containers/food/snacks/cookie(T)
|
||||
if(toxin)
|
||||
S.reagents.add_reagent("chloralhydratedelayed", 10)
|
||||
S.reagents.add_reagent("chloralhydrate", 10)
|
||||
if (iscyborg(user))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
R.cell.charge -= 100
|
||||
|
||||
@@ -93,34 +93,22 @@
|
||||
/obj/item/card/emag/afterattack(atom/target, mob/user, proximity)
|
||||
. = ..()
|
||||
var/atom/A = target
|
||||
if(!proximity && prox_check)
|
||||
if(!proximity && prox_check || !(isobj(A) || issilicon(A) || isbot(A) || isdrone(A)))
|
||||
return
|
||||
if(istype(A, /obj/item/storage) && !(istype(A, /obj/item/storage/lockbox) || istype(A, /obj/item/storage/pod)))
|
||||
return
|
||||
//Citadel changes: modular code misfiring, so we're bypassing into main code.
|
||||
if(!uses)
|
||||
user.visible_message("<span class='warning'>[src] emits a weak spark. It's burnt out!</span>")
|
||||
playsound(src, 'sound/effects/light_flicker.ogg', 100, 1)
|
||||
return
|
||||
else if(uses <= 3)
|
||||
playsound(src, 'sound/effects/light_flicker.ogg', 30, 1) //Tiiiiiiny warning sound to let ya know your emag's almost dead
|
||||
|
||||
if(isturf(A))
|
||||
if(!A.emag_act(user))
|
||||
return
|
||||
if(istype(A,/obj/item/storage/lockbox) || istype(A, /obj/item/storage/pod))
|
||||
A.emag_act(user)
|
||||
uses = max(uses - 1, 0)
|
||||
if(!uses)
|
||||
user.visible_message("<span class='warning'>[src] fizzles and sparks. It seems like it's out of charges.</span>")
|
||||
playsound(src, 'sound/effects/light_flicker.ogg', 100, 1)
|
||||
if(istype(A,/obj/item/storage))
|
||||
return
|
||||
if(!(isobj(A) || issilicon(A) || isbot(A) || isdrone(A)))
|
||||
return
|
||||
else
|
||||
A.emag_act(user)
|
||||
uses = max(uses - 1, 0)
|
||||
if(!uses)
|
||||
user.visible_message("<span class='warning'>[src] fizzles and sparks. It seems like it's out of charges.</span>")
|
||||
playsound(src, 'sound/effects/light_flicker.ogg', 100, 1)
|
||||
uses = max(uses - 1, 0)
|
||||
if(!uses)
|
||||
user.visible_message("<span class='warning'>[src] fizzles and sparks. It seems like it's out of charges.</span>")
|
||||
playsound(src, 'sound/effects/light_flicker.ogg', 100, 1)
|
||||
|
||||
|
||||
/obj/item/card/emagfake
|
||||
|
||||
@@ -764,20 +764,22 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
..()
|
||||
|
||||
/obj/item/clothing/mask/vape/emag_act(mob/user)// I WON'T REGRET WRITTING THIS, SURLY.
|
||||
if(screw)
|
||||
if(!(obj_flags & EMAGGED))
|
||||
cut_overlays()
|
||||
obj_flags |= EMAGGED
|
||||
super = FALSE
|
||||
to_chat(user, "<span class='warning'>You maximize the voltage of [src].</span>")
|
||||
add_overlay("vapeopen_high")
|
||||
var/datum/effect_system/spark_spread/sp = new /datum/effect_system/spark_spread //for effect
|
||||
sp.set_up(5, 1, src)
|
||||
sp.start()
|
||||
else
|
||||
to_chat(user, "<span class='warning'>[src] is already emagged!</span>")
|
||||
else
|
||||
. = ..()
|
||||
if(!screw)
|
||||
to_chat(user, "<span class='notice'>You need to open the cap to do that.</span>")
|
||||
return
|
||||
if(obj_flags & EMAGGED)
|
||||
to_chat(user, "<span class='warning'>[src] is already emagged!</span>")
|
||||
return
|
||||
cut_overlays()
|
||||
obj_flags |= EMAGGED
|
||||
super = FALSE
|
||||
to_chat(user, "<span class='warning'>You maximize the voltage of [src].</span>")
|
||||
add_overlay("vapeopen_high")
|
||||
var/datum/effect_system/spark_spread/sp = new /datum/effect_system/spark_spread //for effect
|
||||
sp.set_up(5, 1, src)
|
||||
sp.start()
|
||||
return TRUE
|
||||
|
||||
/obj/item/clothing/mask/vape/attack_self(mob/user)
|
||||
if(reagents.total_volume > 0)
|
||||
|
||||
@@ -162,10 +162,11 @@
|
||||
|
||||
/obj/item/circuitboard/computer/prisoner
|
||||
name = "Prisoner Management Console (Computer Board)"
|
||||
build_path = /obj/machinery/computer/prisoner
|
||||
build_path = /obj/machinery/computer/prisoner/management
|
||||
|
||||
/obj/item/circuitboard/computer/gulag_teleporter_console
|
||||
name = "Labor Camp teleporter console (Computer Board)"
|
||||
build_path = /obj/machinery/computer/gulag_teleporter_computer
|
||||
build_path = /obj/machinery/computer/prisoner/gulag_teleporter_computer
|
||||
|
||||
/obj/item/circuitboard/computer/rdconsole/production
|
||||
name = "R&D Console Production Only (Computer Board)"
|
||||
@@ -217,10 +218,13 @@
|
||||
to_chat(user, "<span class='notice'>The spectrum chip is unresponsive.</span>")
|
||||
|
||||
/obj/item/circuitboard/computer/cargo/emag_act(mob/living/user)
|
||||
if(!(obj_flags & EMAGGED))
|
||||
contraband = TRUE
|
||||
obj_flags |= EMAGGED
|
||||
to_chat(user, "<span class='notice'>You adjust [src]'s routing and receiver spectrum, unlocking special supplies and contraband.</span>")
|
||||
. = ..()
|
||||
if(obj_flags & EMAGGED)
|
||||
return
|
||||
contraband = TRUE
|
||||
obj_flags |= EMAGGED
|
||||
to_chat(user, "<span class='notice'>You adjust [src]'s routing and receiver spectrum, unlocking special supplies and contraband.</span>")
|
||||
return TRUE
|
||||
|
||||
/obj/item/circuitboard/computer/cargo/express
|
||||
name = "Express Supply Console (Computer Board)"
|
||||
@@ -234,8 +238,12 @@
|
||||
obj_flags &= ~EMAGGED
|
||||
|
||||
/obj/item/circuitboard/computer/cargo/express/emag_act(mob/living/user)
|
||||
to_chat(user, "<span class='notice'>You change the routing protocols, allowing the Drop Pod to land anywhere on the station.</span>")
|
||||
obj_flags |= EMAGGED
|
||||
. = SEND_SIGNAL(src, COMSIG_ATOM_EMAG_ACT)
|
||||
if(obj_flags & EMAGGED)
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You change the routing protocols, allowing the Drop Pod to land anywhere on the station.</span>")
|
||||
obj_flags |= EMAGGED
|
||||
return TRUE
|
||||
|
||||
/obj/item/circuitboard/computer/cargo/request
|
||||
name = "Supply Request Console (Computer Board)"
|
||||
@@ -366,4 +374,4 @@
|
||||
|
||||
/obj/item/circuitboard/computer/nanite_cloud_controller
|
||||
name = "Nanite Cloud Control (Computer Board)"
|
||||
build_path = /obj/machinery/computer/nanite_cloud_controller
|
||||
build_path = /obj/machinery/computer/nanite_cloud_controller
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
#define RANDOM_GRAFFITI "Random Graffiti"
|
||||
#define RANDOM_LETTER "Random Letter"
|
||||
#define RANDOM_PUNCTUATION "Random Punctuation"
|
||||
#define RANDOM_NUMBER "Random Number"
|
||||
#define RANDOM_SYMBOL "Random Symbol"
|
||||
#define RANDOM_DRAWING "Random Drawing"
|
||||
#define RANDOM_ORIENTED "Random Oriented"
|
||||
#define RANDOM_RUNE "Random Rune"
|
||||
#define RANDOM_ANY "Random Anything"
|
||||
@@ -32,16 +35,16 @@
|
||||
var/drawtype
|
||||
var/text_buffer = ""
|
||||
|
||||
var/list/graffiti = list("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa","body","cyka","arrow","star","poseur tag","prolizard","antilizard", "tile") //cit edit
|
||||
var/list/letters = list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z")
|
||||
var/list/numerals = list("0","1","2","3","4","5","6","7","8","9")
|
||||
var/list/oriented = list("arrow","body") // These turn to face the same way as the drawer
|
||||
var/list/runes = list("rune1","rune2","rune3","rune4","rune5","rune6")
|
||||
var/list/randoms = list(RANDOM_ANY, RANDOM_RUNE, RANDOM_ORIENTED,
|
||||
RANDOM_NUMBER, RANDOM_GRAFFITI, RANDOM_LETTER)
|
||||
var/list/graffiti_large_h = list("yiffhell", "secborg", "paint")
|
||||
var/static/list/graffiti = list("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa","body","cyka","star","poseur tag","prolizard","antilizard", "tile")
|
||||
var/static/list/symbols = list("danger","firedanger","electricdanger","biohazard","radiation","safe","evac","space","med","trade","shop","food","peace","like","skull","nay","heart","credit")
|
||||
var/static/list/drawings = list("smallbrush","brush","largebrush","splatter","snake","stickman","carp","ghost","clown","taser","disk","fireaxe","toolbox","corgi","cat","toilet","blueprint","beepsky","scroll","bottle","shotgun")
|
||||
var/static/list/oriented = list("arrow","line","thinline","shortline","body","chevron","footprint","clawprint","pawprint") // These turn to face the same way as the drawer
|
||||
var/static/list/runes = list("rune1","rune2","rune3","rune4","rune5","rune6")
|
||||
var/static/list/randoms = list(RANDOM_ANY, RANDOM_RUNE, RANDOM_ORIENTED,
|
||||
RANDOM_NUMBER, RANDOM_GRAFFITI, RANDOM_LETTER, RANDOM_SYMBOL, RANDOM_PUNCTUATION, RANDOM_DRAWING)
|
||||
var/static/list/graffiti_large_h = list("yiffhell", "secborg", "paint")
|
||||
|
||||
var/list/all_drawables
|
||||
var/static/list/all_drawables = graffiti + symbols + drawings + oriented + runes + graffiti_large_h
|
||||
|
||||
var/paint_mode = PAINT_NORMAL
|
||||
|
||||
@@ -54,8 +57,6 @@
|
||||
var/instant = FALSE
|
||||
var/self_contained = TRUE // If it deletes itself when it is empty
|
||||
|
||||
var/list/validSurfaces = list(/turf/open/floor)
|
||||
|
||||
var/edible = TRUE // That doesn't mean eating it is a good idea
|
||||
|
||||
var/list/reagent_contents = list("nutriment" = 1)
|
||||
@@ -71,6 +72,9 @@
|
||||
var/datum/team/gang/gang //For marking territory.
|
||||
var/gang_tag_delay = 30 //this is the delay for gang mode tag applications on anything that gang = true on.
|
||||
|
||||
/obj/item/toy/crayon/proc/isValidSurface(surface)
|
||||
return istype(surface, /turf/open/floor)
|
||||
|
||||
/obj/item/toy/crayon/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is jamming [src] up [user.p_their()] nose and into [user.p_their()] brain. It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return (BRUTELOSS|OXYLOSS)
|
||||
@@ -81,7 +85,6 @@
|
||||
if(name == "crayon")
|
||||
name = "[item_color] crayon"
|
||||
|
||||
all_drawables = graffiti + letters + numerals + oriented + runes + graffiti_large_h
|
||||
drawtype = pick(all_drawables)
|
||||
|
||||
refill()
|
||||
@@ -153,55 +156,62 @@
|
||||
to_chat(user, "<span class='notice'>The cap on [src] is now [is_capped ? "on" : "off"].</span>")
|
||||
update_icon()
|
||||
|
||||
/obj/item/toy/crayon/ui_data()
|
||||
var/list/data = list()
|
||||
data["drawables"] = list()
|
||||
var/list/D = data["drawables"]
|
||||
/obj/item/toy/crayon/proc/staticDrawables()
|
||||
|
||||
. = list()
|
||||
|
||||
var/list/g_items = list()
|
||||
D += list(list("name" = "Graffiti", "items" = g_items))
|
||||
. += list(list("name" = "Graffiti", "items" = g_items))
|
||||
for(var/g in graffiti)
|
||||
g_items += list(list("item" = g))
|
||||
|
||||
var/list/glh_items = list()
|
||||
D += list(list("name" = "Graffiti Large Horizontal", "items" = glh_items))
|
||||
. += list(list("name" = "Graffiti Large Horizontal", "items" = glh_items))
|
||||
for(var/glh in graffiti_large_h)
|
||||
glh_items += list(list("item" = glh))
|
||||
|
||||
var/list/L_items = list()
|
||||
D += list(list("name" = "Letters", "items" = L_items))
|
||||
for(var/L in letters)
|
||||
L_items += list(list("item" = L))
|
||||
var/list/S_items = list()
|
||||
. += list(list("name" = "Symbols", "items" = S_items))
|
||||
for(var/S in symbols)
|
||||
S_items += list(list("item" = S))
|
||||
|
||||
var/list/N_items = list()
|
||||
D += list(list(name = "Numerals", "items" = N_items))
|
||||
for(var/N in numerals)
|
||||
N_items += list(list("item" = N))
|
||||
var/list/D_items = list()
|
||||
. += list(list("name" = "Drawings", "items" = D_items))
|
||||
for(var/D in drawings)
|
||||
D_items += list(list("item" = D))
|
||||
|
||||
var/list/O_items = list()
|
||||
D += list(list(name = "Oriented", "items" = O_items))
|
||||
. += list(list(name = "Oriented", "items" = O_items))
|
||||
for(var/O in oriented)
|
||||
O_items += list(list("item" = O))
|
||||
|
||||
var/list/R_items = list()
|
||||
D += list(list(name = "Runes", "items" = R_items))
|
||||
. += list(list(name = "Runes", "items" = R_items))
|
||||
for(var/R in runes)
|
||||
R_items += list(list("item" = R))
|
||||
|
||||
var/list/rand_items = list()
|
||||
D += list(list(name = "Random", "items" = rand_items))
|
||||
. += list(list(name = "Random", "items" = rand_items))
|
||||
for(var/i in randoms)
|
||||
rand_items += list(list("item" = i))
|
||||
|
||||
data["selected_stencil"] = drawtype
|
||||
data["text_buffer"] = text_buffer
|
||||
|
||||
data["has_cap"] = has_cap
|
||||
data["is_capped"] = is_capped
|
||||
data["can_change_colour"] = can_change_colour
|
||||
data["current_colour"] = paint_color
|
||||
/obj/item/toy/crayon/ui_data()
|
||||
|
||||
return data
|
||||
var/static/list/crayon_drawables
|
||||
|
||||
if (!crayon_drawables)
|
||||
crayon_drawables = staticDrawables()
|
||||
|
||||
. = list()
|
||||
.["drawables"] = crayon_drawables
|
||||
.["selected_stencil"] = drawtype
|
||||
.["text_buffer"] = text_buffer
|
||||
|
||||
.["has_cap"] = has_cap
|
||||
.["is_capped"] = is_capped
|
||||
.["can_change_colour"] = can_change_colour
|
||||
.["current_colour"] = paint_color
|
||||
|
||||
/obj/item/toy/crayon/ui_act(action, list/params)
|
||||
if(..())
|
||||
@@ -216,6 +226,7 @@
|
||||
if(stencil in all_drawables + randoms)
|
||||
drawtype = stencil
|
||||
. = TRUE
|
||||
text_buffer = ""
|
||||
if(stencil in graffiti_large_h)
|
||||
paint_mode = PAINT_LARGE_HORIZONTAL
|
||||
text_buffer = ""
|
||||
@@ -235,18 +246,16 @@
|
||||
update_icon()
|
||||
|
||||
/obj/item/toy/crayon/proc/crayon_text_strip(text)
|
||||
var/list/base = string2charlist(lowertext(text))
|
||||
var/list/out = list()
|
||||
for(var/a in base)
|
||||
if(a in (letters|numerals))
|
||||
out += a
|
||||
return jointext(out,"")
|
||||
var/static/regex/crayon_r = new /regex(@"[^\w!?,.=%#&+\/\-]")
|
||||
return replacetext(lowertext(text), crayon_r, "")
|
||||
|
||||
/obj/item/toy/crayon/afterattack(atom/target, mob/user, proximity, params)
|
||||
. = ..()
|
||||
if(!proximity || !check_allowed_items(target))
|
||||
return
|
||||
|
||||
var/static/list/punctuation = list("!","?",".",",","/","+","-","=","%","#","&")
|
||||
|
||||
var/cost = 1
|
||||
if(paint_mode == PAINT_LARGE_HORIZONTAL)
|
||||
cost = 5
|
||||
@@ -264,13 +273,19 @@
|
||||
if(istype(target, /obj/effect/decal/cleanable))
|
||||
target = target.loc
|
||||
|
||||
if(!is_type_in_list(target,validSurfaces))
|
||||
if(!isValidSurface(target))
|
||||
return
|
||||
|
||||
var/drawing = drawtype
|
||||
switch(drawtype)
|
||||
if(RANDOM_LETTER)
|
||||
drawing = pick(letters)
|
||||
drawing = ascii2text(rand(97, 122)) // a-z
|
||||
if(RANDOM_PUNCTUATION)
|
||||
drawing = pick(punctuation)
|
||||
if(RANDOM_SYMBOL)
|
||||
drawing = pick(symbols)
|
||||
if(RANDOM_DRAWING)
|
||||
drawing = pick(drawings)
|
||||
if(RANDOM_GRAFFITI)
|
||||
drawing = pick(graffiti)
|
||||
if(RANDOM_RUNE)
|
||||
@@ -278,17 +293,23 @@
|
||||
if(RANDOM_ORIENTED)
|
||||
drawing = pick(oriented)
|
||||
if(RANDOM_NUMBER)
|
||||
drawing = pick(numerals)
|
||||
drawing = ascii2text(rand(48, 57)) // 0-9
|
||||
if(RANDOM_ANY)
|
||||
drawing = pick(all_drawables)
|
||||
|
||||
var/temp = "rune"
|
||||
if(drawing in letters)
|
||||
if(is_alpha(drawing))
|
||||
temp = "letter"
|
||||
else if(drawing in graffiti)
|
||||
temp = "graffiti"
|
||||
else if(drawing in numerals)
|
||||
else if(is_digit(drawing))
|
||||
temp = "number"
|
||||
else if(drawing in punctuation)
|
||||
temp = "punctuation mark"
|
||||
else if(drawing in symbols)
|
||||
temp = "symbol"
|
||||
else if(drawing in drawings)
|
||||
temp = "drawing"
|
||||
else if(drawing in graffiti|oriented)
|
||||
temp = "graffiti"
|
||||
|
||||
// If a gang member is using a gang spraycan, it'll behave differently
|
||||
var/gang_mode = FALSE
|
||||
@@ -338,7 +359,7 @@
|
||||
return
|
||||
|
||||
if(length(text_buffer))
|
||||
drawing = copytext(text_buffer,1,2)
|
||||
drawing = text_buffer[1]
|
||||
|
||||
|
||||
var/list/turf/affected_turfs = list()
|
||||
@@ -362,7 +383,7 @@
|
||||
if(PAINT_LARGE_HORIZONTAL)
|
||||
var/turf/left = locate(target.x-1,target.y,target.z)
|
||||
var/turf/right = locate(target.x+1,target.y,target.z)
|
||||
if(is_type_in_list(left, validSurfaces) && is_type_in_list(right, validSurfaces))
|
||||
if(isValidSurface(left) && isValidSurface(right))
|
||||
var/obj/effect/decal/cleanable/crayon/C = new(left, paint_color, drawing, temp, graf_rot, PAINT_LARGE_HORIZONTAL_ICON)
|
||||
C.add_hiddenprint(user)
|
||||
affected_turfs += left
|
||||
@@ -377,8 +398,9 @@
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You spray a [temp] on \the [target.name]</span>")
|
||||
|
||||
if(length(text_buffer))
|
||||
if(length(text_buffer) > 1)
|
||||
text_buffer = copytext(text_buffer,2)
|
||||
SStgui.update_uis(src)
|
||||
|
||||
if(post_noise)
|
||||
audible_message("<span class='notice'>You hear spraying.</span>")
|
||||
@@ -516,7 +538,7 @@
|
||||
|
||||
charges = -1
|
||||
|
||||
/obj/item/toy/crayon/rainbow/afterattack(atom/target, mob/user, proximity)
|
||||
/obj/item/toy/crayon/rainbow/afterattack(atom/target, mob/user, proximity, params)
|
||||
paint_color = rgb(rand(0,255), rand(0,255), rand(0,255))
|
||||
. = ..()
|
||||
|
||||
@@ -591,12 +613,14 @@
|
||||
can_change_colour = TRUE
|
||||
gang = TRUE //Gang check is true for all things upon the honored hierarchy of spraycans, except those that are FALSE.
|
||||
|
||||
validSurfaces = list(/turf/open/floor, /turf/closed/wall)
|
||||
reagent_contents = list("welding_fuel" = 1, "ethanol" = 1)
|
||||
|
||||
pre_noise = TRUE
|
||||
post_noise = FALSE
|
||||
|
||||
/obj/item/toy/crayon/spraycan/isValidSurface(surface)
|
||||
return (istype(surface, /turf/open/floor) || istype(surface, /turf/closed/wall))
|
||||
|
||||
/obj/item/toy/crayon/spraycan/suicide_act(mob/user)
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(is_capped || !actually_paints)
|
||||
@@ -622,8 +646,8 @@
|
||||
|
||||
return (OXYLOSS)
|
||||
|
||||
/obj/item/toy/crayon/spraycan/New()
|
||||
..()
|
||||
/obj/item/toy/crayon/spraycan/Initialize()
|
||||
. = ..()
|
||||
// If default crayon red colour, pick a more fun spraycan colour
|
||||
if(!paint_color)
|
||||
paint_color = pick("#DA0000","#FF9300","#FFF200","#A8E61D","#00B7EF",
|
||||
@@ -640,7 +664,7 @@
|
||||
to_chat(user, "It is empty.")
|
||||
to_chat(user, "<span class='notice'>Alt-click [src] to [ is_capped ? "take the cap off" : "put the cap on"].</span>")
|
||||
|
||||
/obj/item/toy/crayon/spraycan/afterattack(atom/target, mob/user, proximity)
|
||||
/obj/item/toy/crayon/spraycan/afterattack(atom/target, mob/user, proximity, params)
|
||||
if(!proximity)
|
||||
return
|
||||
|
||||
@@ -656,8 +680,7 @@
|
||||
playsound(user.loc, 'sound/effects/spray.ogg', 25, 1, 5)
|
||||
|
||||
var/mob/living/carbon/C = target
|
||||
user.visible_message("<span class='danger'>[user] sprays [src] into the face of [target]!</span>")
|
||||
to_chat(target, "<span class='userdanger'>[user] sprays [src] into your face!</span>")
|
||||
C.visible_message("<span class='danger'>[user] sprays [src] into the face of [C]!</span>", "<span class='userdanger'>[user] sprays [src] into your face!</span>")
|
||||
|
||||
if(C.client)
|
||||
C.blur_eyes(3)
|
||||
@@ -678,13 +701,14 @@
|
||||
|
||||
return
|
||||
|
||||
if(istype(target, /obj/structure/window))
|
||||
if(isobj(target))
|
||||
if(actually_paints)
|
||||
target.add_atom_colour(paint_color, WASHABLE_COLOUR_PRIORITY)
|
||||
if(color_hex2num(paint_color) < 255)
|
||||
target.set_opacity(255)
|
||||
else
|
||||
target.set_opacity(initial(target.opacity))
|
||||
if(istype(target, /obj/structure/window))
|
||||
if(color_hex2num(paint_color) < 255)
|
||||
target.set_opacity(255)
|
||||
else
|
||||
target.set_opacity(initial(target.opacity))
|
||||
. = use_charges(user, 2)
|
||||
var/fraction = min(1, . / reagents.maximum_volume)
|
||||
reagents.reaction(target, TOUCH, fraction * volume_multiplier)
|
||||
@@ -692,6 +716,7 @@
|
||||
|
||||
if(pre_noise || post_noise)
|
||||
playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5)
|
||||
user.visible_message("[user] coats [target] with spray paint!", "<span class='notice'>You coat [target] with spray paint.</span>")
|
||||
return
|
||||
|
||||
. = ..()
|
||||
@@ -709,7 +734,7 @@
|
||||
desc = "A metallic container containing shiny synthesised paint."
|
||||
charges = -1
|
||||
|
||||
/obj/item/toy/crayon/spraycan/borg/afterattack(atom/target,mob/user,proximity)
|
||||
/obj/item/toy/crayon/spraycan/borg/afterattack(atom/target,mob/user,proximity, params)
|
||||
var/diff = ..()
|
||||
if(!iscyborg(user))
|
||||
to_chat(user, "<span class='notice'>How did you get this?</span>")
|
||||
@@ -754,7 +779,9 @@
|
||||
|
||||
reagent_contents = list("lube" = 1, "banana" = 1)
|
||||
volume_multiplier = 5
|
||||
validSurfaces = list(/turf/open/floor)
|
||||
|
||||
/obj/item/toy/crayon/spraycan/lubecan/isValidSurface(surface)
|
||||
return istype(surface, /turf/open/floor)
|
||||
|
||||
/obj/item/toy/crayon/spraycan/mimecan
|
||||
name = "silent spraycan"
|
||||
@@ -794,6 +821,9 @@
|
||||
|
||||
#undef RANDOM_GRAFFITI
|
||||
#undef RANDOM_LETTER
|
||||
#undef RANDOM_PUNCTUATION
|
||||
#undef RANDOM_SYMBOL
|
||||
#undef RANDOM_DRAWING
|
||||
#undef RANDOM_NUMBER
|
||||
#undef RANDOM_ORIENTED
|
||||
#undef RANDOM_RUNE
|
||||
|
||||
@@ -140,12 +140,10 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/defibrillator/emag_act(mob/user)
|
||||
if(safety)
|
||||
safety = FALSE
|
||||
to_chat(user, "<span class='warning'>You silently disable [src]'s safety protocols with the cryptographic sequencer.</span>")
|
||||
else
|
||||
safety = TRUE
|
||||
to_chat(user, "<span class='notice'>You silently enable [src]'s safety protocols with the cryptographic sequencer.</span>")
|
||||
. = ..()
|
||||
safety = !safety
|
||||
to_chat(user, "<span class='warning'>You silently [safety ? "enable" : "disable"] [src]'s safety protocols with the cryptographic sequencer.</span>")
|
||||
return TRUE
|
||||
|
||||
/obj/item/defibrillator/emp_act(severity)
|
||||
. = ..()
|
||||
|
||||
@@ -714,6 +714,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
return
|
||||
if((last_text && world.time < last_text + 10) || (everyone && last_everyone && world.time < last_everyone + PDA_SPAM_DELAY))
|
||||
return
|
||||
var/emoji_message = emoji_parse(message)
|
||||
if(prob(1))
|
||||
message += "\nSent from my PDA"
|
||||
// Send the signal
|
||||
@@ -734,7 +735,8 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
"name" = "[owner]",
|
||||
"job" = "[ownjob]",
|
||||
"message" = message,
|
||||
"targets" = string_targets
|
||||
"targets" = string_targets,
|
||||
"emoji_message" = emoji_message
|
||||
))
|
||||
if (picture)
|
||||
signal.data["photo"] = picture
|
||||
@@ -751,13 +753,13 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
// Log it in our logs
|
||||
tnote += "<i><b>→ To [target_text]:</b></i><br>[signal.format_message()]<br>"
|
||||
// Show it to ghosts
|
||||
var/ghost_message = "<span class='name'>[owner] </span><span class='game say'>PDA Message</span> --> <span class='name'>[target_text]</span>: <span class='message'>[signal.format_message()]</span>"
|
||||
var/ghost_message = "<span class='name'>[owner] </span><span class='game say'>PDA Message</span> --> <span class='name'>[target_text]</span>: <span class='message'>[signal.format_message(TRUE)]</span>"
|
||||
for(var/mob/M in GLOB.player_list)
|
||||
if(isobserver(M) && M.client && (M.client.prefs.chat_toggles & CHAT_GHOSTPDA))
|
||||
to_chat(M, "[FOLLOW_LINK(M, user)] [ghost_message]")
|
||||
// Log in the talk log
|
||||
user.log_talk(message, LOG_PDA, tag="PDA: [initial(name)] to [target_text]")
|
||||
to_chat(user, "<span class='info'>Message sent to [target_text]: \"[message]\"</span>")
|
||||
to_chat(user, "<span class='info'>Message sent to [target_text]: \"[emoji_message]\"</span>")
|
||||
if (!silent)
|
||||
playsound(src, 'sound/machines/terminal_success.ogg', 15, 1)
|
||||
// Reset the photo
|
||||
@@ -787,7 +789,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
hrefstart = "<a href='?src=[REF(L)];track=[html_encode(signal.data["name"])]'>"
|
||||
hrefend = "</a>"
|
||||
|
||||
to_chat(L, "[icon2html(src)] <b>Message from [hrefstart][signal.data["name"]] ([signal.data["job"]])[hrefend], </b>[signal.format_message()] (<a href='byond://?src=[REF(src)];choice=Message;skiprefresh=1;target=[REF(signal.source)]'>Reply</a>)")
|
||||
to_chat(L, "[icon2html(src)] <b>Message from [hrefstart][signal.data["name"]] ([signal.data["job"]])[hrefend], </b>[signal.format_message(TRUE)] (<a href='byond://?src=[REF(src)];choice=Message;skiprefresh=1;target=[REF(signal.source)]'>Reply</a>)")
|
||||
|
||||
update_icon(TRUE)
|
||||
|
||||
|
||||
@@ -158,7 +158,7 @@
|
||||
if(!M.radiation)
|
||||
to_chat(user, "<span class='notice'>[icon2html(src, user)] Radiation levels within normal boundaries.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='boldannounce'>[icon2html(src, user)] Subject is irradiated. Radiation levels: [M.radiation].</span>")
|
||||
to_chat(user, "<span class='boldannounce'>[icon2html(src, user)] Subject is irradiated. Radiation levels: [M.radiation] rad.</span>")
|
||||
|
||||
if(rad_strength)
|
||||
to_chat(user, "<span class='boldannounce'>[icon2html(src, user)] Target contains radioactive contamination. Radioactive strength: [rad_strength]</span>")
|
||||
@@ -192,13 +192,15 @@
|
||||
update_icon()
|
||||
|
||||
/obj/item/geiger_counter/emag_act(mob/user)
|
||||
. = ..()
|
||||
if(obj_flags & EMAGGED)
|
||||
return
|
||||
if(scanning)
|
||||
to_chat(user, "<span class='warning'>Turn off [src] before you perform this action!</span>")
|
||||
return 0
|
||||
return
|
||||
to_chat(user, "<span class='warning'>You override [src]'s radiation storing protocols. It will now generate small doses of radiation, and stored rads are now projected into creatures you scan.</span>")
|
||||
obj_flags |= EMAGGED
|
||||
return TRUE
|
||||
|
||||
/obj/item/geiger_counter/cyborg
|
||||
var/datum/component/mobhook
|
||||
|
||||
@@ -149,9 +149,11 @@
|
||||
to_chat(user, "<span class='notice'>You fill \the [src] with lights from \the [S]. " + status_string() + "</span>")
|
||||
|
||||
/obj/item/lightreplacer/emag_act()
|
||||
. = ..()
|
||||
if(obj_flags & EMAGGED)
|
||||
return
|
||||
Emag()
|
||||
return TRUE
|
||||
|
||||
/obj/item/lightreplacer/attack_self(mob/user)
|
||||
to_chat(user, status_string())
|
||||
|
||||
@@ -38,11 +38,13 @@
|
||||
speech_args[SPEECH_SPANS] |= voicespan
|
||||
|
||||
/obj/item/megaphone/emag_act(mob/user)
|
||||
. = ..()
|
||||
if(obj_flags & EMAGGED)
|
||||
return
|
||||
to_chat(user, "<span class='warning'>You overload \the [src]'s voice synthesizer.</span>")
|
||||
obj_flags |= EMAGGED
|
||||
voicespan = list(SPAN_REALLYBIG, "userdanger")
|
||||
return TRUE
|
||||
|
||||
/obj/item/megaphone/sec
|
||||
name = "security megaphone"
|
||||
|
||||
@@ -32,6 +32,24 @@
|
||||
var/datum/integrated_io/selected_io = null //functional for integrated circuits.
|
||||
var/mode = 0
|
||||
|
||||
/obj/item/multitool/chaplain
|
||||
name = "\improper hypertool"
|
||||
desc = "Used for pulsing wires to test which to cut. Also emits microwaves to fry some brains!"
|
||||
damtype = BRAIN
|
||||
force = 18
|
||||
armour_penetration = 35
|
||||
hitsound = 'sound/effects/sparks4.ogg'
|
||||
var/chaplain_spawnable = TRUE
|
||||
total_mass = TOTAL_MASS_MEDIEVAL_WEAPON
|
||||
throw_speed = 3
|
||||
throw_range = 4
|
||||
throwforce = 10
|
||||
obj_flags = UNIQUE_RENAME
|
||||
|
||||
/obj/item/multitool/chaplain/Initialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/anti_magic, TRUE, TRUE)
|
||||
|
||||
/obj/item/multitool/examine(mob/user)
|
||||
..()
|
||||
if(selected_io)
|
||||
|
||||
@@ -215,8 +215,7 @@ SLIME SCANNER
|
||||
msg += "\t<span class='info'>Brain Activity Level: [(200 - M.getBrainLoss())/2]%.</span>\n"
|
||||
if(M.radiation)
|
||||
msg += "\t<span class='alert'>Subject is irradiated.</span>\n"
|
||||
if(advanced)
|
||||
msg += "\t<span class='info'>Radiation Level: [M.radiation]%.</span>\n"
|
||||
msg += "\t<span class='info'>Radiation Level: [M.radiation] rad</span>\n"
|
||||
|
||||
if(advanced && M.hallucinating())
|
||||
msg += "\t<span class='info'>Subject is hallucinating.</span>\n"
|
||||
|
||||
@@ -448,7 +448,15 @@
|
||||
oneuse = FALSE
|
||||
remarks = list("So that is how icing is made!", "Placing fruit on top? How simple...", "Huh layering cake seems harder then this...", "This book smells like candy", "A clown must have made this page, or they forgot to spell check it before printing...", "Wait, a way to cook slime to be safe?")
|
||||
|
||||
//Later content when I have free time - Trilby Date:02-Aug-2019
|
||||
/obj/item/book/granter/crafting_recipe/coldcooking //IceCream
|
||||
name = "Cooking with Ice"
|
||||
desc = "A cook book that teaches you many old icecream treats."
|
||||
crafting_recipe_types = list(/datum/crafting_recipe/food/banana_split, /datum/crafting_recipe/food/root_float, /datum/crafting_recipe/food/bluecharrie_float, /datum/crafting_recipe/food/charrie_float)
|
||||
icon_state = "cooking_learing_ice"
|
||||
oneuse = FALSE
|
||||
remarks = list("Looks like these would sell much better in a plasma fire...", "Using glass bowls rather then cones?", "Mixing soda and ice-cream?", "Tall glasses with of liquids and solids...", "Just add a bit of icecream and cherry on top?")
|
||||
|
||||
//Later content when I have free time - Trilby Date:24-Aug-2019
|
||||
|
||||
/obj/item/book/granter/crafting_recipe/under_the_oven //Illegal cook book
|
||||
name = "Under The Oven"
|
||||
@@ -457,11 +465,3 @@
|
||||
icon_state = "cooking_learing_illegal"
|
||||
oneuse = FALSE
|
||||
remarks = list()
|
||||
|
||||
/obj/item/book/granter/crafting_recipe/coldcooking //IceCream
|
||||
name = "Cooking with Ice"
|
||||
desc = "A cook book that teaches you many old icecream treats."
|
||||
crafting_recipe_types = list()
|
||||
icon_state = "cooking_learing_ice"
|
||||
oneuse = FALSE
|
||||
remarks = list()
|
||||
@@ -1,5 +1,6 @@
|
||||
/obj/item/restraints
|
||||
breakouttime = 600
|
||||
var/demoralize_criminals = TRUE // checked on carbon/carbon.dm to decide wheter to apply the handcuffed negative moodlet or not.
|
||||
|
||||
/obj/item/restraints/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] is strangling [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
@@ -220,6 +221,7 @@
|
||||
name = "fake handcuffs"
|
||||
desc = "Fake handcuffs meant for gag purposes."
|
||||
breakouttime = 10 //Deciseconds = 1s
|
||||
demoralize_criminals = FALSE
|
||||
|
||||
/obj/item/restraints/handcuffs/fake/kinky
|
||||
name = "kinky handcuffs"
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
lefthand_file = 'icons/mob/inhands/equipment/toolbox_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/toolbox_righthand.dmi'
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
w_class = WEIGHT_CLASS_GIGANTIC
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
force = 12
|
||||
total_mass = TOTAL_MASS_NORMAL_ITEM // average toolbox
|
||||
attack_verb = list("robusted")
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
desc = "God wills it!"
|
||||
icon_state = "knight_templar"
|
||||
item_state = "knight_templar"
|
||||
allowed = list(/obj/item/storage/book/bible, HOLY_WEAPONS, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
|
||||
// CITADEL CHANGES: More variants
|
||||
/obj/item/clothing/suit/armor/riot/chaplain/teutonic
|
||||
@@ -122,7 +123,6 @@
|
||||
icon_state = "studentuni"
|
||||
item_state = "studentuni"
|
||||
body_parts_covered = ARMS|CHEST
|
||||
allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
|
||||
/obj/item/clothing/head/helmet/chaplain/cage
|
||||
name = "cage"
|
||||
@@ -166,7 +166,6 @@
|
||||
icon_state = "witchhunter"
|
||||
item_state = "witchhunter"
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS
|
||||
allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
|
||||
/obj/item/clothing/head/helmet/chaplain/witchunter_hat
|
||||
name = "witchunter hat"
|
||||
@@ -191,7 +190,7 @@
|
||||
icon_state = "chaplain_hoodie"
|
||||
item_state = "chaplain_hoodie"
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS
|
||||
allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
allowed = list(/obj/item/storage/book/bible, HOLY_WEAPONS, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
hoodtype = /obj/item/clothing/head/hooded/chaplain_hood
|
||||
|
||||
/obj/item/clothing/head/hooded/chaplain_hood
|
||||
@@ -229,8 +228,8 @@
|
||||
throwforce = 10
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
obj_flags = UNIQUE_RENAME
|
||||
var/reskinned = FALSE
|
||||
var/chaplain_spawnable = TRUE
|
||||
total_mass = TOTAL_MASS_MEDIEVAL_WEAPON
|
||||
|
||||
/obj/item/nullrod/Initialize()
|
||||
. = ..()
|
||||
@@ -247,10 +246,8 @@
|
||||
/obj/item/nullrod/proc/reskin_holy_weapon(mob/M)
|
||||
if(GLOB.holy_weapon_type)
|
||||
return
|
||||
var/obj/item/nullrod/holy_weapon
|
||||
var/list/holy_weapons_list = typesof(/obj/item/nullrod) + list(
|
||||
/obj/item/melee/transforming/energy/sword/cx/chaplain
|
||||
)
|
||||
var/obj/item/holy_weapon
|
||||
var/list/holy_weapons_list = subtypesof(/obj/item/nullrod) + list(HOLY_WEAPONS)
|
||||
var/list/display_names = list()
|
||||
for(var/V in holy_weapons_list)
|
||||
var/obj/item/nullrod/rodtype = V
|
||||
@@ -273,6 +270,13 @@
|
||||
qdel(src)
|
||||
M.put_in_active_hand(holy_weapon)
|
||||
|
||||
/obj/item/nullrod/proc/jedi_spin(mob/living/user)
|
||||
for(var/i in list(NORTH,SOUTH,EAST,WEST,EAST,SOUTH,NORTH,SOUTH,EAST,WEST,EAST,SOUTH))
|
||||
user.setDir(i)
|
||||
if(i == WEST)
|
||||
user.emote("flip")
|
||||
sleep(1)
|
||||
|
||||
/obj/item/nullrod/godhand
|
||||
icon_state = "disintegrate"
|
||||
item_state = "disintegrate"
|
||||
@@ -328,7 +332,6 @@
|
||||
sharpness = IS_SHARP
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
total_mass = TOTAL_MASS_MEDIEVAL_WEAPON
|
||||
|
||||
/obj/item/nullrod/claymore/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
if(attack_type == PROJECTILE_ATTACK)
|
||||
@@ -522,7 +525,6 @@
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
attack_verb = list("smashed", "bashed", "hammered", "crunched")
|
||||
total_mass = TOTAL_MASS_MEDIEVAL_WEAPON
|
||||
|
||||
/obj/item/nullrod/chainsaw
|
||||
name = "chainsaw hand"
|
||||
@@ -585,6 +587,7 @@
|
||||
lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi'
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
force = 12
|
||||
reach = 2
|
||||
attack_verb = list("whipped", "lashed")
|
||||
hitsound = 'sound/weapons/chainhit.ogg'
|
||||
@@ -661,6 +664,44 @@
|
||||
lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi'
|
||||
|
||||
/obj/item/nullrod/claymore/bostaff/attack(mob/target, mob/living/user)
|
||||
add_fingerprint(user)
|
||||
if((HAS_TRAIT(user, TRAIT_CLUMSY)) && prob(50))
|
||||
to_chat(user, "<span class ='warning'>You club yourself over the head with [src].</span>")
|
||||
user.Knockdown(60)
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.apply_damage(2*force, BRUTE, BODY_ZONE_HEAD)
|
||||
else
|
||||
user.take_bodypart_damage(2*force)
|
||||
return
|
||||
if(iscyborg(target))
|
||||
return ..()
|
||||
if(!isliving(target))
|
||||
return ..()
|
||||
var/mob/living/carbon/C = target
|
||||
if(C.stat || C.health < 0 || C.staminaloss > 130 )
|
||||
to_chat(user, "<span class='warning'>It would be dishonorable to attack a foe while they cannot retaliate.</span>")
|
||||
return
|
||||
if(user.a_intent == INTENT_DISARM)
|
||||
if(!ishuman(target))
|
||||
return ..()
|
||||
var/mob/living/carbon/human/H = target
|
||||
var/list/fluffmessages = list("[user] clubs [H] with [src]!", \
|
||||
"[user] smacks [H] with the butt of [src]!", \
|
||||
"[user] broadsides [H] with [src]!", \
|
||||
"[user] smashes [H]'s head with [src]!", \
|
||||
"[user] beats [H] with front of [src]!", \
|
||||
"[user] twirls and slams [H] with [src]!")
|
||||
H.visible_message("<span class='warning'>[pick(fluffmessages)]</span>", \
|
||||
"<span class='userdanger'>[pick(fluffmessages)]</span>")
|
||||
playsound(get_turf(user), 'sound/effects/woodhit.ogg', 75, 1, -1)
|
||||
H.adjustStaminaLoss(rand(12,18))
|
||||
if(prob(25))
|
||||
(INVOKE_ASYNC(src, .proc/jedi_spin, user))
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/nullrod/tribal_knife
|
||||
icon_state = "crysknife"
|
||||
item_state = "crysknife"
|
||||
@@ -674,7 +715,6 @@
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
item_flags = SLOWS_WHILE_IN_HAND
|
||||
total_mass = TOTAL_MASS_NORMAL_ITEM
|
||||
|
||||
/obj/item/nullrod/tribal_knife/Initialize(mapload)
|
||||
. = ..()
|
||||
@@ -704,8 +744,8 @@
|
||||
name = "egyptian staff"
|
||||
desc = "A tutorial in mummification is carved into the staff. You could probably craft the wraps if you had some cloth."
|
||||
icon = 'icons/obj/guns/magic.dmi'
|
||||
icon_state = "pharoah_sceptre"
|
||||
item_state = "pharoah_sceptre"
|
||||
icon_state = "pharaoh_sceptre"
|
||||
item_state = "pharaoh_sceptre"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
@@ -180,8 +180,13 @@
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
force = 12 //9 hit crit
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
var/cooldown = 0
|
||||
var/cooldown = 13
|
||||
var/on = TRUE
|
||||
var/last_hit = 0
|
||||
var/stun_stam_cost_coeff = 1.25
|
||||
var/hardstun_ds = 1
|
||||
var/softstun_ds = 0
|
||||
var/stam_dmg = 30
|
||||
|
||||
/obj/item/melee/classic_baton/attack(mob/living/target, mob/living/user)
|
||||
if(!on)
|
||||
@@ -207,12 +212,10 @@
|
||||
if(!isliving(target))
|
||||
return
|
||||
if (user.a_intent == INTENT_HARM)
|
||||
if(!..())
|
||||
return
|
||||
if(!iscyborg(target))
|
||||
if(!..() || !iscyborg(target))
|
||||
return
|
||||
else
|
||||
if(cooldown <= world.time)
|
||||
if(last_hit < world.time)
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
if (H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK))
|
||||
@@ -220,7 +223,7 @@
|
||||
if(check_martial_counter(H, user))
|
||||
return
|
||||
playsound(get_turf(src), 'sound/effects/woodhit.ogg', 75, 1, -1)
|
||||
target.Knockdown(60)
|
||||
target.Knockdown(softstun_ds, TRUE, FALSE, hardstun_ds, stam_dmg)
|
||||
log_combat(user, target, "stunned", src)
|
||||
src.add_fingerprint(user)
|
||||
target.visible_message("<span class ='danger'>[user] has knocked down [target] with [src]!</span>", \
|
||||
@@ -229,7 +232,7 @@
|
||||
target.LAssailant = null
|
||||
else
|
||||
target.LAssailant = user
|
||||
cooldown = world.time + 40
|
||||
last_hit = world.time + cooldown
|
||||
user.adjustStaminaLossBuffered(getweight())//CIT CHANGE - makes swinging batons cost stamina
|
||||
|
||||
/obj/item/melee/classic_baton/telescopic
|
||||
@@ -245,7 +248,7 @@
|
||||
item_flags = NONE
|
||||
force = 0
|
||||
on = FALSE
|
||||
total_mass = TOTAL_MASS_SMALL_ITEM
|
||||
total_mass = TOTAL_MASS_NORMAL_ITEM
|
||||
|
||||
/obj/item/melee/classic_baton/telescopic/suicide_act(mob/user)
|
||||
var/mob/living/carbon/human/H = user
|
||||
|
||||
@@ -90,14 +90,14 @@
|
||||
add_fingerprint(user)
|
||||
|
||||
|
||||
/obj/item/paint/afterattack(turf/target, mob/user, proximity)
|
||||
/obj/item/paint/afterattack(atom/target, mob/user, proximity)
|
||||
. = ..()
|
||||
if(!proximity)
|
||||
return
|
||||
if(paintleft <= 0)
|
||||
icon_state = "paint_empty"
|
||||
return
|
||||
if(!istype(target) || isspaceturf(target))
|
||||
if(!isturf(target) || isspaceturf(target))
|
||||
return
|
||||
var/newcolor = "#" + item_color
|
||||
target.add_atom_colour(newcolor, WASHABLE_COLOUR_PRIORITY)
|
||||
@@ -105,12 +105,14 @@
|
||||
/obj/item/paint/paint_remover
|
||||
gender = PLURAL
|
||||
name = "paint remover"
|
||||
desc = "Used to remove color from floors and walls."
|
||||
desc = "Used to remove color from anything."
|
||||
icon_state = "paint_neutral"
|
||||
|
||||
/obj/item/paint/paint_remover/afterattack(turf/target, mob/user, proximity)
|
||||
/obj/item/paint/paint_remover/afterattack(atom/target, mob/user, proximity)
|
||||
. = ..()
|
||||
if(!proximity)
|
||||
return
|
||||
if(istype(target) && target.color != initial(target.color))
|
||||
if(!isturf(target) || !isobj(target))
|
||||
return
|
||||
if(target.color != initial(target.color))
|
||||
target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
||||
|
||||
@@ -629,7 +629,7 @@
|
||||
|
||||
/obj/item/toy/plush/mothplushie
|
||||
name = "insect plushie"
|
||||
desc = "An adorable stuffed toy that resembles some kind of insect"
|
||||
desc = "An adorable stuffed toy that resembles some kind of insect."
|
||||
icon_state = "bumble"
|
||||
item_state = "bumble"
|
||||
squeak_override = list('modular_citadel/sound/voice/mothsqueak.ogg' = 1)
|
||||
@@ -773,8 +773,10 @@
|
||||
item_state = "blep"
|
||||
|
||||
/obj/item/toy/plush/mammal/circe
|
||||
desc = "A luxuriously soft toy that resembles a nine-tailed kitsune."
|
||||
icon_state = "circe"
|
||||
item_state = "circe"
|
||||
attack_verb = list("medicated", "tailhugged", "kissed")
|
||||
|
||||
/obj/item/toy/plush/mammal/robin
|
||||
icon_state = "robin"
|
||||
@@ -839,8 +841,10 @@
|
||||
item_state = "rae"
|
||||
|
||||
/obj/item/toy/plush/mammal/zed
|
||||
desc = "A masked stuffed toy that resembles a fierce miner. He even comes with his own little crusher!"
|
||||
icon_state = "zed"
|
||||
item_state = "zed"
|
||||
attack_verb = list("ENDED", "CRUSHED", "GNOMED")
|
||||
|
||||
/obj/item/toy/plush/mammal/justin
|
||||
icon_state = "justin"
|
||||
@@ -852,6 +856,12 @@
|
||||
item_state = "reece"
|
||||
attack_verb = list("healed", "cured", "demoted")
|
||||
|
||||
/obj/item/toy/plush/mammal/redwood
|
||||
desc = "An adorable stuffed toy resembling a Nanotrasen Captain. That just happens to be a bunny."
|
||||
icon_state = "redwood"
|
||||
item_state = "redwood"
|
||||
attack_verb = list("ordered", "bapped", "reprimanded")
|
||||
|
||||
/obj/item/toy/plush/mammal/dog
|
||||
desc = "An adorable stuffed toy that resembles a canine."
|
||||
icon_state = "katlin"
|
||||
@@ -898,6 +908,12 @@
|
||||
obj_flags = UNIQUE_RENAME
|
||||
unique_reskin = list("Goodboye" = "fritz", "Badboye" = "fritz_bad")
|
||||
|
||||
/obj/item/toy/plush/mammal/dog/jesse
|
||||
desc = "An adorable wolf toy that resembles a cream-colored wolf. He has a little pride flag!"
|
||||
icon_state = "jesse"
|
||||
item_state = "jesse"
|
||||
attack_verb = list("greeted", "merc'd", "howdy'd")
|
||||
|
||||
/obj/item/toy/plush/catgirl
|
||||
name = "feline plushie"
|
||||
desc = "An adorable stuffed toy that resembles a feline."
|
||||
@@ -935,3 +951,15 @@
|
||||
item_state = "fermis"
|
||||
attack_verb = list("cuddled", "petpatted", "wigglepurred")
|
||||
squeak_override = list('modular_citadel/sound/voice/merowr.ogg' = 1)
|
||||
|
||||
/obj/item/toy/plush/catgirl/mariaf
|
||||
desc = "An adorable stuffed toy that resembles a very tall cat girl."
|
||||
icon_state = "mariaf"
|
||||
item_state = "mariaf"
|
||||
attack_verb = list("hugged", "stabbed", "licked")
|
||||
|
||||
/obj/item/toy/plush/catgirl/maya
|
||||
desc = "An adorable stuffed toy that resembles an angry cat girl. She has her own tiny nuke disk!"
|
||||
icon_state = "maya"
|
||||
item_state = "maya"
|
||||
attack_verb = list("nuked", "arrested", "harmbatonned")
|
||||
|
||||
@@ -282,11 +282,13 @@
|
||||
var/cooldown = 0
|
||||
|
||||
/obj/item/harmalarm/emag_act(mob/user)
|
||||
. = ..()
|
||||
obj_flags ^= EMAGGED
|
||||
if(obj_flags & EMAGGED)
|
||||
to_chat(user, "<font color='red'>You short out the safeties on [src]!</font>")
|
||||
else
|
||||
to_chat(user, "<font color='red'>You reset the safeties on [src]!</font>")
|
||||
return TRUE
|
||||
|
||||
/obj/item/harmalarm/attack_self(mob/user)
|
||||
var/safety = !(obj_flags & EMAGGED)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
var/locked = FALSE
|
||||
var/installed = 0
|
||||
var/require_module = 0
|
||||
var/module_type = null
|
||||
var/list/module_type
|
||||
// if true, is not stored in the robot to be ejected
|
||||
// if module is reset
|
||||
var/one_use = FALSE
|
||||
@@ -18,7 +18,7 @@
|
||||
if(R.stat == DEAD)
|
||||
to_chat(user, "<span class='notice'>[src] will not function on a deceased cyborg.</span>")
|
||||
return FALSE
|
||||
if(module_type && !istype(R.module, module_type))
|
||||
if(module_type && !is_type_in_list(R.module, module_type))
|
||||
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
|
||||
to_chat(user, "There's no mounting point for the module!")
|
||||
return FALSE
|
||||
@@ -93,7 +93,6 @@
|
||||
desc = "Used to cool a mounted disabler, increasing the potential current in it and thus its recharge rate."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
require_module = 1
|
||||
//module_type = /obj/item/robot_module/security
|
||||
|
||||
/obj/item/borg/upgrade/disablercooler/action(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
@@ -141,7 +140,7 @@
|
||||
desc = "A diamond drill replacement for the mining module's standard drill."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
require_module = 1
|
||||
module_type = /obj/item/robot_module/miner
|
||||
module_type = list(/obj/item/robot_module/miner)
|
||||
|
||||
/obj/item/borg/upgrade/ddrill/action(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
@@ -173,7 +172,7 @@
|
||||
desc = "A satchel of holding replacement for mining cyborg's ore satchel module."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
require_module = 1
|
||||
module_type = /obj/item/robot_module/miner
|
||||
module_type = list(/obj/item/robot_module/miner)
|
||||
|
||||
/obj/item/borg/upgrade/soh/action(mob/living/silicon/robot/R)
|
||||
. = ..()
|
||||
@@ -200,7 +199,7 @@
|
||||
desc = "A trash bag of holding replacement for the janiborg's standard trash bag."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
require_module = 1
|
||||
module_type = /obj/item/robot_module/janitor
|
||||
module_type = list(/obj/item/robot_module/janitor, /obj/item/robot_module/scrubpup)
|
||||
|
||||
/obj/item/borg/upgrade/tboh/action(mob/living/silicon/robot/R)
|
||||
. = ..()
|
||||
@@ -227,7 +226,7 @@
|
||||
desc = "An advanced mop replacement for the janiborg's standard mop."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
require_module = 1
|
||||
module_type = /obj/item/robot_module/janitor
|
||||
module_type = list(/obj/item/robot_module/janitor, /obj/item/robot_module/scrubpup)
|
||||
|
||||
/obj/item/borg/upgrade/amop/action(mob/living/silicon/robot/R)
|
||||
. = ..()
|
||||
@@ -276,7 +275,7 @@
|
||||
icon_state = "ash_plating"
|
||||
resistance_flags = LAVA_PROOF | FIRE_PROOF
|
||||
require_module = 1
|
||||
module_type = /obj/item/robot_module/miner
|
||||
module_type = list(/obj/item/robot_module/miner)
|
||||
|
||||
/obj/item/borg/upgrade/lavaproof/action(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
@@ -405,7 +404,9 @@
|
||||
to produce more advanced and complex medical reagents."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
require_module = 1
|
||||
module_type = /obj/item/robot_module/medical
|
||||
module_type = list(/obj/item/robot_module/medical,
|
||||
/obj/item/robot_module/syndicate_medical,
|
||||
/obj/item/robot_module/medihound)
|
||||
var/list/additional_reagents = list()
|
||||
|
||||
/obj/item/borg/upgrade/hypospray/action(mob/living/silicon/robot/R, user = usr)
|
||||
@@ -467,7 +468,9 @@
|
||||
defibrillator, for on the scene revival."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
require_module = 1
|
||||
module_type = /obj/item/robot_module/medical
|
||||
module_type = list(/obj/item/robot_module/medical,
|
||||
/obj/item/robot_module/syndicate_medical,
|
||||
/obj/item/robot_module/medihound)
|
||||
|
||||
/obj/item/borg/upgrade/defib/action(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
@@ -489,7 +492,9 @@
|
||||
out procedures"
|
||||
icon_state = "cyborg_upgrade3"
|
||||
require_module = 1
|
||||
module_type = /obj/item/robot_module/medical
|
||||
module_type = list(/obj/item/robot_module/medical,
|
||||
/obj/item/robot_module/syndicate_medical,
|
||||
/obj/item/robot_module/medihound)
|
||||
|
||||
/obj/item/borg/upgrade/processor/action(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
@@ -514,7 +519,7 @@
|
||||
/obj/item/robot_module/medical,
|
||||
/obj/item/robot_module/syndicate_medical,
|
||||
/obj/item/robot_module/medihound,
|
||||
/obj/item/robot_module/borgi)
|
||||
/obj/item/robot_module/borgi)
|
||||
|
||||
/obj/item/borg/upgrade/advhealth/action(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
@@ -598,7 +603,7 @@
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "borgrped"
|
||||
require_module = TRUE
|
||||
module_type = /obj/item/robot_module/engineering
|
||||
module_type = list(/obj/item/robot_module/engineering)
|
||||
|
||||
/obj/item/borg/upgrade/rped/action(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
@@ -626,7 +631,9 @@
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "pinpointer_crew"
|
||||
require_module = TRUE
|
||||
module_type = /obj/item/robot_module/medical
|
||||
module_type = list(/obj/item/robot_module/medical,
|
||||
/obj/item/robot_module/syndicate_medical,
|
||||
/obj/item/robot_module/medihound)
|
||||
|
||||
/obj/item/borg/upgrade/pinpointer/action(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
@@ -664,3 +671,33 @@
|
||||
desc = "Allows you to to turn a cyborg into a clown, honk."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
new_module = /obj/item/robot_module/clown
|
||||
|
||||
// Citadel's Vtech Controller
|
||||
/obj/effect/proc_holder/silicon/cyborg/vtecControl
|
||||
name = "vTec Control"
|
||||
desc = "Allows finer-grained control of the vTec speed boost."
|
||||
action_icon = 'icons/mob/actions.dmi'
|
||||
action_icon_state = "Chevron_State_0"
|
||||
|
||||
var/currentState = 0
|
||||
var/maxReduction = 2
|
||||
|
||||
|
||||
/obj/effect/proc_holder/silicon/cyborg/vtecControl/Click(mob/living/silicon/robot/user)
|
||||
var/mob/living/silicon/robot/self = usr
|
||||
|
||||
currentState = (currentState + 1) % 3
|
||||
|
||||
if(usr)
|
||||
switch(currentState)
|
||||
if (0)
|
||||
self.speed = maxReduction
|
||||
if (1)
|
||||
self.speed -= maxReduction*0.5
|
||||
if (2)
|
||||
self.speed -= maxReduction*1.25
|
||||
|
||||
action.button_icon_state = "Chevron_State_[currentState]"
|
||||
action.UpdateButtonIcon()
|
||||
|
||||
return
|
||||
|
||||
@@ -23,7 +23,7 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 100)
|
||||
resistance_flags = ACID_PROOF
|
||||
merge_type = /obj/item/stack/sheet/glass
|
||||
grind_results = list("silicon" = 20)
|
||||
grind_results = list(/datum/reagent/silicon = 20)
|
||||
point_value = 1
|
||||
|
||||
/obj/item/stack/sheet/glass/suicide_act(mob/living/carbon/user)
|
||||
@@ -87,7 +87,7 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 75, "acid" = 100)
|
||||
resistance_flags = ACID_PROOF
|
||||
merge_type = /obj/item/stack/sheet/plasmaglass
|
||||
grind_results = list("silicon" = 20, "plasma" = 10)
|
||||
grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/toxin/plasma = 10)
|
||||
|
||||
/obj/item/stack/sheet/plasmaglass/fifty
|
||||
amount = 50
|
||||
@@ -138,7 +138,7 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 100)
|
||||
resistance_flags = ACID_PROOF
|
||||
merge_type = /obj/item/stack/sheet/rglass
|
||||
grind_results = list("silicon" = 20, "iron" = 10)
|
||||
grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/iron = 10)
|
||||
point_value = 4
|
||||
|
||||
/obj/item/stack/sheet/rglass/attackby(obj/item/W, mob/user, params)
|
||||
@@ -177,11 +177,11 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \
|
||||
singular_name = "reinforced plasma glass sheet"
|
||||
icon_state = "sheet-prglass"
|
||||
item_state = "sheet-prglass"
|
||||
materials = list(MAT_PLASMA=MINERAL_MATERIAL_AMOUNT * 0.5, MAT_GLASS=MINERAL_MATERIAL_AMOUNT, MAT_METAL = MINERAL_MATERIAL_AMOUNT * 0.5,)
|
||||
materials = list(MAT_PLASMA=MINERAL_MATERIAL_AMOUNT * 0.5, MAT_GLASS=MINERAL_MATERIAL_AMOUNT, MAT_METAL=MINERAL_MATERIAL_AMOUNT * 0.5,)
|
||||
armor = list("melee" = 20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100)
|
||||
resistance_flags = ACID_PROOF
|
||||
merge_type = /obj/item/stack/sheet/plasmarglass
|
||||
grind_results = list("silicon" = 20, "plasma" = 10, "iron" = 10)
|
||||
grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/toxin/plasma = 10, /datum/reagent/iron = 10)
|
||||
point_value = 23
|
||||
|
||||
/obj/item/stack/sheet/plasmarglass/Initialize(mapload, new_amount, merge = TRUE)
|
||||
@@ -243,8 +243,9 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
|
||||
resistance_flags = ACID_PROOF
|
||||
armor = list("melee" = 100, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 100)
|
||||
max_integrity = 40
|
||||
var/cooldown = 0
|
||||
sharpness = IS_SHARP
|
||||
var/icon_prefix
|
||||
|
||||
|
||||
/obj/item/shard/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is slitting [user.p_their()] [pick("wrists", "throat")] with the shard of glass! It looks like [user.p_theyre()] trying to commit suicide.</span>")
|
||||
@@ -266,9 +267,19 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
|
||||
if("large")
|
||||
pixel_x = rand(-5, 5)
|
||||
pixel_y = rand(-5, 5)
|
||||
var/matrix/M = matrix(transform)
|
||||
M.Turn(rand(-170, 170))
|
||||
transform = M
|
||||
if (icon_prefix)
|
||||
icon_state = "[icon_prefix][icon_state]"
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
if(T && is_station_level(T.z))
|
||||
SSblackbox.record_feedback("tally", "station_mess_created", 1, name)
|
||||
|
||||
/obj/item/shard/Destroy()
|
||||
. = ..()
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
if(T && is_station_level(T.z))
|
||||
SSblackbox.record_feedback("tally", "station_mess_destroyed", 1, name)
|
||||
|
||||
/obj/item/shard/afterattack(atom/A as mob|obj, mob/user, proximity)
|
||||
. = ..()
|
||||
@@ -298,6 +309,7 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
|
||||
return ..()
|
||||
|
||||
/obj/item/shard/welder_act(mob/living/user, obj/item/I)
|
||||
..()
|
||||
if(I.use_tool(src, user, 0, volume=50))
|
||||
var/obj/item/stack/sheet/glass/NG = new (user.loc)
|
||||
for(var/obj/item/stack/sheet/glass/G in user.loc)
|
||||
@@ -316,4 +328,13 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
|
||||
playsound(loc, 'sound/effects/glass_step.ogg', 30, 1)
|
||||
else
|
||||
playsound(loc, 'sound/effects/glass_step.ogg', 50, 1)
|
||||
. = ..()
|
||||
return ..()
|
||||
|
||||
/obj/item/shard/plasma
|
||||
name = "purple shard"
|
||||
desc = "A nasty looking shard of plasma glass."
|
||||
force = 6
|
||||
throwforce = 11
|
||||
icon_state = "plasmalarge"
|
||||
materials = list(MAT_PLASMA=MINERAL_MATERIAL_AMOUNT * 0.5, MAT_GLASS=MINERAL_MATERIAL_AMOUNT)
|
||||
icon_prefix = "plasma"
|
||||
@@ -46,6 +46,7 @@
|
||||
item_flags = NO_MAT_REDEMPTION
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 50)
|
||||
component_type = /datum/component/storage/concrete/bluespace/bag_of_holding
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/storage/backpack/holding/satchel
|
||||
name = "satchel of holding"
|
||||
@@ -53,6 +54,7 @@
|
||||
icon_state = "holdingsat"
|
||||
item_state = "holdingsat"
|
||||
species_exception = list(/datum/species/angel)
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/storage/backpack/holding/ComponentInitialize()
|
||||
. = ..()
|
||||
@@ -81,6 +83,7 @@
|
||||
icon_state = "giftbag0"
|
||||
item_state = "giftbag"
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/storage/backpack/santabag/ComponentInitialize()
|
||||
. = ..()
|
||||
@@ -133,6 +136,8 @@
|
||||
desc = "It's a special backpack made exclusively for Nanotrasen officers."
|
||||
icon_state = "captainpack"
|
||||
item_state = "captainpack"
|
||||
resistance_flags = FIRE_PROOF
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/storage/backpack/industrial
|
||||
name = "industrial backpack"
|
||||
@@ -140,6 +145,7 @@
|
||||
icon_state = "engiepack"
|
||||
item_state = "engiepack"
|
||||
resistance_flags = FIRE_PROOF
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/storage/backpack/botany
|
||||
name = "botany backpack"
|
||||
@@ -194,6 +200,8 @@
|
||||
desc = "A tough satchel with extra pockets."
|
||||
icon_state = "satchel-eng"
|
||||
item_state = "engiepack"
|
||||
resistance_flags = FIRE_PROOF
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/storage/backpack/satchel/med
|
||||
name = "medical satchel"
|
||||
@@ -261,6 +269,8 @@
|
||||
desc = "An exclusive satchel for Nanotrasen officers."
|
||||
icon_state = "satchel-cap"
|
||||
item_state = "captainpack"
|
||||
resistance_flags = FIRE_PROOF
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/storage/backpack/satchel/flat
|
||||
name = "smuggler's satchel"
|
||||
@@ -356,6 +366,7 @@
|
||||
new /obj/item/cautery(src)
|
||||
new /obj/item/surgical_drapes(src)
|
||||
new /obj/item/clothing/mask/surgical(src)
|
||||
new /obj/item/reagent_containers/medspray/sterilizine(src)
|
||||
new /obj/item/razor(src)
|
||||
|
||||
/obj/item/storage/backpack/duffelbag/sec
|
||||
@@ -377,12 +388,15 @@
|
||||
new /obj/item/cautery(src)
|
||||
new /obj/item/surgical_drapes(src)
|
||||
new /obj/item/clothing/mask/surgical(src)
|
||||
new /obj/item/reagent_containers/medspray/sterilizine(src)
|
||||
|
||||
/obj/item/storage/backpack/duffelbag/engineering
|
||||
name = "industrial duffel bag"
|
||||
desc = "A large duffel bag for holding extra tools and supplies."
|
||||
icon_state = "duffel-eng"
|
||||
item_state = "duffel-eng"
|
||||
resistance_flags = FIRE_PROOF
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/storage/backpack/duffelbag/durathread
|
||||
name = "durathread duffel bag"
|
||||
@@ -398,6 +412,7 @@
|
||||
icon_state = "duffel-drone"
|
||||
item_state = "duffel-drone"
|
||||
resistance_flags = FIRE_PROOF
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/storage/backpack/duffelbag/drone/PopulateContents()
|
||||
new /obj/item/screwdriver(src)
|
||||
@@ -407,6 +422,7 @@
|
||||
new /obj/item/stack/cable_coil/random(src)
|
||||
new /obj/item/wirecutters(src)
|
||||
new /obj/item/multitool(src)
|
||||
new /obj/item/pipe_dispenser(src)
|
||||
|
||||
/obj/item/storage/backpack/duffelbag/clown
|
||||
name = "clown's duffel bag"
|
||||
@@ -424,6 +440,7 @@
|
||||
icon_state = "duffel-syndie"
|
||||
item_state = "duffel-syndieammo"
|
||||
slowdown = 0
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/storage/backpack/duffelbag/syndie/ComponentInitialize()
|
||||
. = ..()
|
||||
@@ -469,6 +486,7 @@
|
||||
new /obj/item/mmi/syndie(src)
|
||||
new /obj/item/implantcase(src)
|
||||
new /obj/item/implanter(src)
|
||||
new /obj/item/reagent_containers/medspray/sterilizine(src)
|
||||
|
||||
/obj/item/storage/backpack/duffelbag/syndie/surgery_adv
|
||||
name = "advanced surgery duffel bag"
|
||||
@@ -488,6 +506,7 @@
|
||||
new /obj/item/mmi/syndie(src)
|
||||
new /obj/item/implantcase(src)
|
||||
new /obj/item/implanter(src)
|
||||
new /obj/item/reagent_containers/medspray/sterilizine(src)
|
||||
|
||||
/obj/item/storage/backpack/duffelbag/syndie/ammo
|
||||
name = "ammunition duffel bag"
|
||||
|
||||
@@ -81,6 +81,7 @@
|
||||
desc = "The latest and greatest in custodial convenience, a trashbag that is capable of holding vast quantities of garbage."
|
||||
icon_state = "bluetrashbag"
|
||||
item_flags = NO_MAT_REDEMPTION
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/storage/bag/trash/bluespace/ComponentInitialize()
|
||||
. = ..()
|
||||
@@ -105,6 +106,7 @@
|
||||
component_type = /datum/component/storage/concrete/stack
|
||||
var/spam_protection = FALSE //If this is TRUE, the holder won't receive any messages when they fail to pick up ore through crossing it
|
||||
var/datum/component/mobhook
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/storage/bag/ore/ComponentInitialize()
|
||||
. = ..()
|
||||
@@ -391,6 +393,7 @@
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "bspace_biobag"
|
||||
desc = "A bag for the safe transportation and disposal of biowaste and other biological materials."
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/storage/bag/bio/holding/ComponentInitialize()
|
||||
. = ..()
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
icon_state = "utilitybelt"
|
||||
item_state = "utility"
|
||||
content_overlays = TRUE
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE //because this is easier than trying to have showers wash all contents.
|
||||
|
||||
/obj/item/storage/belt/utility/ComponentInitialize()
|
||||
. = ..()
|
||||
@@ -344,6 +345,7 @@
|
||||
desc = "A set of tactical webbing worn by Syndicate boarding parties."
|
||||
icon_state = "militarywebbing"
|
||||
item_state = "militarywebbing"
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/storage/belt/military/ComponentInitialize()
|
||||
. = ..()
|
||||
@@ -530,6 +532,7 @@
|
||||
desc = "A belt designed to hold various rods of power. A veritable fanny pack of exotic magic."
|
||||
icon_state = "soulstonebelt"
|
||||
item_state = "soulstonebelt"
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/storage/belt/wands/ComponentInitialize()
|
||||
. = ..()
|
||||
@@ -599,7 +602,7 @@
|
||||
icon_state = "bandolier-durathread"
|
||||
item_state = "bandolier-durathread"
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
|
||||
/obj/item/storage/belt/bandolier/durathread/ComponentInitialize()
|
||||
. = ..()
|
||||
GET_COMPONENT(STR, /datum/component/storage)
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
resistance_flags = FLAMMABLE
|
||||
var/foldable = /obj/item/stack/sheet/cardboard
|
||||
var/illustration = "writing"
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE //exploits ahoy
|
||||
|
||||
/obj/item/storage/box/Initialize(mapload)
|
||||
. = ..()
|
||||
|
||||
@@ -40,9 +40,18 @@
|
||||
|
||||
/obj/item/storage/briefcase/lawyer/family
|
||||
name = "battered briefcase"
|
||||
desc = "An old briefcase, this one has seen better days in its time. It's clear they don't make them nowadays as good as they used to. Comes with an added belt clip!"
|
||||
icon_state = "gbriefcase"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/briefcase_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/briefcase_righthand.dmi'
|
||||
desc = "An old briefcase with a golden trim. It's clear they don't make them as good as they used to. Comes with an added belt clip!"
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
|
||||
/obj/item/storage/briefcase/lawyer/family/ComponentInitialize()
|
||||
. = ..()
|
||||
GET_COMPONENT(STR, /datum/component/storage)
|
||||
STR.max_w_class = WEIGHT_CLASS_NORMAL
|
||||
STR.max_combined_w_class = 14
|
||||
|
||||
/obj/item/storage/briefcase/lawyer/family/PopulateContents()
|
||||
new /obj/item/stamp/law(src)
|
||||
new /obj/item/pen/fountain(src)
|
||||
|
||||
@@ -48,14 +48,16 @@
|
||||
to_chat(user, "<span class='danger'>It's locked!</span>")
|
||||
|
||||
/obj/item/storage/lockbox/emag_act(mob/user)
|
||||
if(!broken)
|
||||
broken = TRUE
|
||||
SEND_SIGNAL(src, COMSIG_TRY_STORAGE_SET_LOCKSTATE, FALSE)
|
||||
desc += "It appears to be broken."
|
||||
icon_state = src.icon_broken
|
||||
if(user)
|
||||
visible_message("<span class='warning'>\The [src] has been broken by [user] with an electromagnetic card!</span>")
|
||||
return
|
||||
. = ..()
|
||||
if(broken)
|
||||
return
|
||||
broken = TRUE
|
||||
SEND_SIGNAL(src, COMSIG_TRY_STORAGE_SET_LOCKSTATE, FALSE)
|
||||
desc += "It appears to be broken."
|
||||
icon_state = src.icon_broken
|
||||
if(user)
|
||||
visible_message("<span class='warning'>\The [src] has been broken by [user] with an electromagnetic card!</span>")
|
||||
return TRUE
|
||||
|
||||
/obj/item/storage/lockbox/Entered()
|
||||
. = ..()
|
||||
|
||||
@@ -19,6 +19,7 @@ GLOBAL_LIST_EMPTY(rubber_toolbox_icons)
|
||||
var/latches = "single_latch"
|
||||
var/has_latches = TRUE
|
||||
var/can_rubberify = TRUE
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE //very protecc too
|
||||
|
||||
/obj/item/storage/toolbox/Initialize(mapload)
|
||||
. = ..()
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/item/storage/box/syndicate
|
||||
|
||||
/obj/item/storage/box/syndicate/PopulateContents()
|
||||
switch (pickweight(list("bloodyspai" = 3, "stealth" = 2, "bond" = 2, "screwed" = 2, "sabotage" = 3, "guns" = 2, "murder" = 2, "implant" = 1, "hacker" = 3, "darklord" = 1, "sniper" = 1, "metaops" = 1, "ninja" = 1)))
|
||||
switch (pickweight(list("bloodyspai" = 3, "stealth" = 2, "bond" = 2, "screwed" = 2, "sabotage" = 3, "guns" = 2, "murder" = 2, "baseball" = 1, "implant" = 1, "hacker" = 3, "darklord" = 1, "sniper" = 1, "metaops" = 1, "ninja" = 1)))
|
||||
if("bloodyspai") // 30 tc now this is more right
|
||||
new /obj/item/clothing/under/chameleon(src) // 2 tc since it's not the full set
|
||||
new /obj/item/clothing/mask/chameleon(src) // Goes with above
|
||||
@@ -52,7 +52,7 @@
|
||||
new /obj/item/clothing/under/suit_jacket/really_black(src)
|
||||
new /obj/item/screwdriver/power(src) //2 tc item
|
||||
|
||||
if("murder") // 35 tc now
|
||||
if("murder") // 35 tc
|
||||
new /obj/item/melee/transforming/energy/sword/saber(src)
|
||||
new /obj/item/clothing/glasses/thermal/syndi(src)
|
||||
new /obj/item/card/emag(src)
|
||||
@@ -62,6 +62,17 @@
|
||||
new /obj/item/clothing/glasses/phantomthief/syndicate(src)
|
||||
new /obj/item/reagent_containers/syringe/stimulants(src)
|
||||
|
||||
if("baseball") // 42~ tc
|
||||
new /obj/item/melee/baseball_bat/ablative/syndi(src) //Lets say 12 tc, lesser sleeping carp
|
||||
new /obj/item/clothing/glasses/sunglasses/garb(src) //Lets say 2 tc
|
||||
new /obj/item/card/emag(src) //6 tc
|
||||
new /obj/item/clothing/shoes/sneakers/noslip(src) //2tc
|
||||
new /obj/item/encryptionkey/syndicate(src) //1tc
|
||||
new /obj/item/autosurgeon/anti_drop(src) //Lets just say 7~
|
||||
new /obj/item/clothing/under/syndicate/baseball(src) //3tc
|
||||
new /obj/item/clothing/head/soft/baseball(src) //Lets say 4 tc
|
||||
new /obj/item/reagent_containers/hypospray/medipen/stimulants/baseball(src) //lets say 5tc
|
||||
|
||||
if("implant") // 67+ tc holy shit what the fuck this is a lottery disguised as fun boxes isn't it?
|
||||
new /obj/item/implanter/freedom(src)
|
||||
new /obj/item/implanter/uplink/precharged(src)
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
/obj/item/reagent_containers/syringe,
|
||||
/obj/item/screwdriver,
|
||||
/obj/item/valentine,
|
||||
/obj/item/stamp))
|
||||
/obj/item/stamp,
|
||||
/obj/item/key))
|
||||
|
||||
/obj/item/storage/wallet/Exited(atom/movable/AM)
|
||||
. = ..()
|
||||
@@ -60,7 +61,7 @@
|
||||
/obj/item/storage/wallet/update_icon()
|
||||
var/new_state = "wallet"
|
||||
if(front_id)
|
||||
new_state = "wallet_[front_id.icon_state]"
|
||||
new_state = "wallet_id"
|
||||
if(new_state != icon_state) //avoid so many icon state changes.
|
||||
icon_state = new_state
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
name = "brass crowbar"
|
||||
desc = "A brass crowbar. It feels faintly warm to the touch."
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
icon_state = "crowbar_brass"
|
||||
icon_state = "crowbar_clock"
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/crowbar/bronze
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
name = "brass screwdriver"
|
||||
desc = "A screwdriver made of brass. The handle feels freezing cold."
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
icon_state = "screwdriver_brass"
|
||||
icon_state = "screwdriver_clock"
|
||||
item_state = "screwdriver_brass"
|
||||
toolspeed = 0.5
|
||||
random_color = FALSE
|
||||
|
||||
@@ -360,7 +360,7 @@
|
||||
name = "brass welding tool"
|
||||
desc = "A brass welder that seems to constantly refuel itself. It is faintly warm to the touch."
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
icon_state = "brasswelder"
|
||||
icon_state = "clockwelder"
|
||||
item_state = "brasswelder"
|
||||
|
||||
/obj/item/weldingtool/bronze
|
||||
|
||||
@@ -63,9 +63,9 @@
|
||||
|
||||
/obj/item/wirecutters/brass
|
||||
name = "brass wirecutters"
|
||||
desc = "A pair of wirecutters made of brass. The handle feels freezing cold to the touch."
|
||||
desc = "A pair of eloquent wirecutters made of brass. The handle feels freezing cold to the touch."
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
icon_state = "cutters_brass"
|
||||
icon_state = "cutters_clock"
|
||||
random_color = FALSE
|
||||
toolspeed = 0.5
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
name = "brass wrench"
|
||||
desc = "A brass wrench. It's faintly warm to the touch."
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
icon_state = "wrench_brass"
|
||||
icon_state = "wrench_clock"
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/wrench/bronze
|
||||
|
||||
@@ -44,6 +44,10 @@
|
||||
icon_state = "plate"
|
||||
resistance_flags = NONE
|
||||
|
||||
/obj/item/trash/plate/alt
|
||||
desc = "Still some dip left. Sadly still just trash..."
|
||||
icon_state = "plate1"
|
||||
|
||||
/obj/item/trash/pistachios
|
||||
name = "pistachios pack"
|
||||
icon_state = "pistachios_pack"
|
||||
|
||||
@@ -487,6 +487,7 @@
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30)
|
||||
var/obj/item/grenade/explosive = null
|
||||
var/war_cry = "AAAAARGH!!!"
|
||||
var/icon_prefix = "spearglass"
|
||||
|
||||
/obj/item/twohanded/spear/Initialize()
|
||||
. = ..()
|
||||
@@ -529,7 +530,7 @@
|
||||
if(explosive)
|
||||
icon_state = "spearbomb[wielded]"
|
||||
else
|
||||
icon_state = "spearglass[wielded]"
|
||||
icon_state = "[icon_prefix][wielded]"
|
||||
|
||||
/obj/item/twohanded/spear/afterattack(atom/movable/AM, mob/user, proximity)
|
||||
. = ..()
|
||||
@@ -556,6 +557,13 @@
|
||||
src.war_cry = input
|
||||
|
||||
/obj/item/twohanded/spear/CheckParts(list/parts_list)
|
||||
var/obj/item/shard/tip = locate() in parts_list
|
||||
if (istype(tip, /obj/item/shard/plasma))
|
||||
force_wielded = 19
|
||||
force_unwielded = 11
|
||||
throwforce = 21
|
||||
icon_prefix = "spearplasma"
|
||||
qdel(tip)
|
||||
var/obj/item/twohanded/spear/S = locate() in parts_list
|
||||
if(S)
|
||||
if(S.explosive)
|
||||
|
||||
@@ -229,7 +229,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
||||
/obj/item/katana/cursed
|
||||
slot_flags = null
|
||||
|
||||
/obj/item/katana/Initialize()
|
||||
/obj/item/katana/cursed/Initialize()
|
||||
. = ..()
|
||||
ADD_TRAIT(src, TRAIT_NODROP, CURSED_ITEM_TRAIT)
|
||||
|
||||
@@ -255,7 +255,9 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
||||
var/obj/item/twohanded/spear/S = new /obj/item/twohanded/spear
|
||||
|
||||
remove_item_from_storage(user)
|
||||
qdel(I)
|
||||
if (!user.transferItemToLoc(I, S))
|
||||
return
|
||||
S.CheckParts(list(I))
|
||||
qdel(src)
|
||||
|
||||
user.put_in_hands(S)
|
||||
@@ -513,6 +515,19 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
||||
var/homerun_able = 0
|
||||
total_mass = 2.7 //a regular wooden major league baseball bat weighs somewhere between 2 to 3.4 pounds, according to google
|
||||
|
||||
/obj/item/melee/baseball_bat/chaplain
|
||||
name = "blessed baseball bat"
|
||||
desc = "There ain't a cult in the league that can withstand a swatter."
|
||||
force = 14
|
||||
throwforce = 14
|
||||
obj_flags = UNIQUE_RENAME
|
||||
var/chaplain_spawnable = TRUE
|
||||
total_mass = TOTAL_MASS_MEDIEVAL_WEAPON
|
||||
|
||||
/obj/item/melee/baseball_bat/chaplain/Initialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/anti_magic, TRUE, TRUE)
|
||||
|
||||
/obj/item/melee/baseball_bat/homerun
|
||||
name = "home run bat"
|
||||
desc = "This thing looks dangerous... Dangerously good at baseball, that is."
|
||||
@@ -563,6 +578,12 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
||||
playsound(turf, 'sound/weapons/effects/batreflect2.ogg', 50, 1)
|
||||
return 1
|
||||
|
||||
/obj/item/melee/baseball_bat/ablative/syndi
|
||||
name = "syndicate major league bat"
|
||||
desc = "A metal bat made by the syndicate for the major league team."
|
||||
force = 18 //Spear damage...
|
||||
throwforce = 30
|
||||
|
||||
/obj/item/melee/flyswatter
|
||||
name = "flyswatter"
|
||||
desc = "Useful for killing insects of all sizes."
|
||||
|
||||
@@ -112,12 +112,16 @@
|
||||
|
||||
|
||||
/obj/structure/sign/barsign/emag_act(mob/user)
|
||||
. = ..()
|
||||
if(broken || (obj_flags & EMAGGED))
|
||||
to_chat(user, "<span class='warning'>Nothing interesting happens!</span>")
|
||||
return
|
||||
obj_flags |= EMAGGED
|
||||
to_chat(user, "<span class='notice'>You emag the barsign. Takeover in progress...</span>")
|
||||
sleep(10 SECONDS)
|
||||
addtimer(CALLBACK(src, .proc/syndie_bar_good), 10 SECONDS)
|
||||
return TRUE
|
||||
|
||||
/obj/structure/sign/barsign/proc/syndie_bar_good()
|
||||
set_sign(new /datum/barsign/hiddensigns/syndibarsign)
|
||||
req_access = list(ACCESS_SYNDICATE)
|
||||
|
||||
|
||||
@@ -489,3 +489,19 @@
|
||||
. = ..()
|
||||
if(has_gravity())
|
||||
playsound(src, 'sound/machines/clockcult/integration_cog_install.ogg', 50, TRUE)
|
||||
|
||||
/obj/structure/chair/sofa
|
||||
name = "old ratty sofa"
|
||||
icon_state = "sofamiddle"
|
||||
icon = 'icons/obj/sofa.dmi'
|
||||
buildstackamount = 1
|
||||
item_chair = null
|
||||
|
||||
/obj/structure/chair/sofa/left
|
||||
icon_state = "sofaend_left"
|
||||
|
||||
/obj/structure/chair/sofa/right
|
||||
icon_state = "sofaend_right"
|
||||
|
||||
/obj/structure/chair/sofa/corner
|
||||
icon_state = "sofacorner"
|
||||
File diff suppressed because it is too large
Load Diff
@@ -111,9 +111,9 @@
|
||||
new /obj/item/clothing/accessory/pocketprotector/cosmetology(src)
|
||||
new /obj/item/clothing/under/rank/chaplain(src)
|
||||
new /obj/item/clothing/shoes/sneakers/black(src)
|
||||
new /obj/item/clothing/suit/nun(src)
|
||||
new /obj/item/clothing/suit/chaplain/nun(src)
|
||||
new /obj/item/clothing/head/nun_hood(src)
|
||||
new /obj/item/clothing/suit/holidaypriest(src)
|
||||
new /obj/item/clothing/suit/chaplain/holidaypriest(src)
|
||||
new /obj/item/storage/backpack/cultpack(src)
|
||||
new /obj/item/storage/fancy/candle_box(src)
|
||||
new /obj/item/storage/fancy/candle_box(src)
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
new /obj/item/extinguisher/advanced(src)
|
||||
new /obj/item/storage/photo_album/CE(src)
|
||||
new /obj/item/storage/lockbox/medal/engineering(src)
|
||||
new /obj/item/construction/rcd/loaded/upgraded(src)
|
||||
|
||||
/obj/structure/closet/secure_closet/engineering_electrical
|
||||
name = "electrical supplies locker"
|
||||
|
||||
@@ -79,4 +79,4 @@
|
||||
var/n_color = input(H, "Choose your [garment_type]'\s color.", "Character Preference", default_color) as color|null
|
||||
if(!n_color || !H.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
|
||||
return default_color
|
||||
return sanitize_hexcolor(n_color)
|
||||
return sanitize_hexcolor(n_color, 3, FALSE, default_color)
|
||||
|
||||
@@ -100,6 +100,14 @@
|
||||
to_chat(user, "<span class='notice'>You start adding [B] to [src]...</span>")
|
||||
if(do_after(user, 20, target = src) && B.use(1))
|
||||
make_new_table(/obj/structure/table/bronze)
|
||||
else if(istype(I, /obj/item/stack/sheet/plasmaglass))
|
||||
var/obj/item/stack/sheet/plasmaglass/G = I
|
||||
if(G.get_amount() < 1)
|
||||
to_chat(user, "<span class='warning'>You need one plasmaglass sheet to do this!</span>")
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You start adding [G] to [src]...</span>")
|
||||
if(do_after(user, 20, target = src) && G.use(1))
|
||||
make_new_table(/obj/structure/table/plasmaglass)
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
anchored = TRUE
|
||||
layer = TABLE_LAYER
|
||||
climbable = TRUE
|
||||
obj_flags = CAN_BE_HIT|SHOVABLE_ONTO
|
||||
pass_flags = LETPASSTHROW //You can throw objects over this, despite it's density.")
|
||||
var/frame = /obj/structure/table_frame
|
||||
var/framestack = /obj/item/stack/rods
|
||||
@@ -115,6 +116,9 @@
|
||||
log_combat(user, pushed_mob, "placed")
|
||||
|
||||
/obj/structure/table/proc/tablepush(mob/living/user, mob/living/pushed_mob)
|
||||
if(HAS_TRAIT(user, TRAIT_PACIFISM))
|
||||
to_chat(user, "<span class='danger'>Throwing [pushed_mob] onto the table might hurt them!</span>")
|
||||
return
|
||||
var/added_passtable = FALSE
|
||||
if(!pushed_mob.pass_flags & PASSTABLE)
|
||||
added_passtable = TRUE
|
||||
@@ -125,14 +129,23 @@
|
||||
if(pushed_mob.loc != loc) //Something prevented the tabling
|
||||
return
|
||||
pushed_mob.Knockdown(40)
|
||||
pushed_mob.visible_message("<span class='danger'>[user] pushes [pushed_mob] onto [src].</span>", \
|
||||
"<span class='userdanger'>[user] pushes [pushed_mob] onto [src].</span>")
|
||||
log_combat(user, pushed_mob, "pushed")
|
||||
pushed_mob.visible_message("<span class='danger'>[user] slams [pushed_mob] onto [src]!</span>", \
|
||||
"<span class='userdanger'>[user] slams you onto [src]!</span>")
|
||||
log_combat(user, pushed_mob, "tabled", null, "onto [src]")
|
||||
if(!ishuman(pushed_mob))
|
||||
return
|
||||
var/mob/living/carbon/human/H = pushed_mob
|
||||
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "table", /datum/mood_event/table)
|
||||
|
||||
/obj/structure/table/shove_act(mob/living/target, mob/living/user)
|
||||
if(!target.resting)
|
||||
target.Knockdown(SHOVE_KNOCKDOWN_TABLE)
|
||||
user.visible_message("<span class='danger'>[user.name] shoves [target.name] onto \the [src]!</span>",
|
||||
"<span class='danger'>You shove [target.name] onto \the [src]!</span>", null, COMBAT_MESSAGE_RANGE)
|
||||
target.forceMove(src.loc)
|
||||
log_combat(user, target, "shoved", "onto [src] (table)")
|
||||
return TRUE
|
||||
|
||||
/obj/structure/table/attackby(obj/item/I, mob/user, params)
|
||||
if(!(flags_1 & NODECONSTRUCT_1))
|
||||
if(istype(I, /obj/item/screwdriver) && deconstruction_ready)
|
||||
@@ -258,6 +271,53 @@
|
||||
for(var/obj/item/shard/S in debris)
|
||||
S.color = NARSIE_WINDOW_COLOUR
|
||||
|
||||
/*
|
||||
* Plasmaglass tables
|
||||
*/
|
||||
/obj/structure/table/plasmaglass
|
||||
name = "plasmaglass table"
|
||||
desc = "A glasstable, but it's pink and more sturdy. What will Nanotrasen design next with plasma?"
|
||||
icon = 'icons/obj/smooth_structures/plasmaglass_table.dmi'
|
||||
icon_state = "plasmaglass_table"
|
||||
climbable = TRUE
|
||||
buildstack = /obj/item/stack/sheet/plasmaglass
|
||||
canSmoothWith = null
|
||||
max_integrity = 270
|
||||
resistance_flags = ACID_PROOF
|
||||
armor = list("melee" = 10, "bullet" = 5, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100)
|
||||
var/list/debris = list()
|
||||
|
||||
/obj/structure/table/plasmaglass/New()
|
||||
. = ..()
|
||||
debris += new frame
|
||||
debris += new /obj/item/shard/plasma
|
||||
|
||||
/obj/structure/table/plasmaglass/Destroy()
|
||||
QDEL_LIST(debris)
|
||||
. = ..()
|
||||
|
||||
/obj/structure/table/plasmaglass/proc/check_break(mob/living/M)
|
||||
return
|
||||
|
||||
/obj/structure/table/plasmaglass/deconstruct(disassembled = TRUE, wrench_disassembly = 0)
|
||||
if(!(flags_1 & NODECONSTRUCT_1))
|
||||
if(disassembled)
|
||||
..()
|
||||
return
|
||||
else
|
||||
var/turf/T = get_turf(src)
|
||||
playsound(T, "shatter", 50, 1)
|
||||
for(var/X in debris)
|
||||
var/atom/movable/AM = X
|
||||
AM.forceMove(T)
|
||||
debris -= AM
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/table/plasmaglass/narsie_act()
|
||||
color = NARSIE_WINDOW_COLOUR
|
||||
for(var/obj/item/shard/S in debris)
|
||||
S.color = NARSIE_WINDOW_COLOUR
|
||||
|
||||
/*
|
||||
* Wooden tables
|
||||
*/
|
||||
|
||||
@@ -281,6 +281,8 @@
|
||||
. += new /obj/effect/decal/cleanable/glass(location)
|
||||
if (reinf)
|
||||
. += new /obj/item/stack/rods(location, (fulltile ? 2 : 1))
|
||||
if (fulltile)
|
||||
. += new /obj/item/shard(location)
|
||||
|
||||
/obj/structure/window/proc/can_be_rotated(mob/user,rotation_type)
|
||||
if(anchored)
|
||||
@@ -409,6 +411,15 @@
|
||||
glass_type = /obj/item/stack/sheet/plasmaglass
|
||||
rad_insulation = RAD_NO_INSULATION
|
||||
|
||||
/obj/structure/window/plasma/spawnDebris(location)
|
||||
. = list()
|
||||
. += new /obj/item/shard/plasma(location)
|
||||
. += new /obj/effect/decal/cleanable/glass/plasma(location)
|
||||
if (reinf)
|
||||
. += new /obj/item/stack/rods(location, (fulltile ? 2 : 1))
|
||||
if (fulltile)
|
||||
. += new /obj/item/shard/plasma(location)
|
||||
|
||||
/obj/structure/window/plasma/spawner/east
|
||||
dir = EAST
|
||||
|
||||
|
||||
Reference in New Issue
Block a user