mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-22 19:47:22 +01:00
Merge remote-tracking branch 'upstream/master' into zombies
This commit is contained in:
@@ -53,11 +53,11 @@
|
||||
|
||||
if(istype(target, /turf/simulated/mineral))
|
||||
var/turf/simulated/mineral/M = target
|
||||
M.ChangeTurf(/turf/simulated/floor/plating/airless/asteroid)
|
||||
M.ChangeTurf(/turf/simulated/floor/plating/asteroid/airless)
|
||||
|
||||
if(istype(target, /turf/simulated/floor))
|
||||
var/turf/simulated/floor/F = target
|
||||
F.ChangeTurf(/turf/space)
|
||||
F.ChangeTurf(F.baseturf)
|
||||
|
||||
if(istype(target, /turf/simulated/wall))
|
||||
var/turf/simulated/wall/W = target
|
||||
|
||||
@@ -186,3 +186,11 @@
|
||||
icon_state = "confetti1"
|
||||
random_icon_states = list("confetti1", "confetti2", "confetti3")
|
||||
anchored = TRUE
|
||||
|
||||
/obj/effect/decal/cleanable/insectguts
|
||||
name = "cockroach guts"
|
||||
desc = "One bug squashed. Four more will rise in its place."
|
||||
icon = 'icons/effects/blood.dmi'
|
||||
icon_state = "xfloor1"
|
||||
random_icon_states = list("xfloor1", "xfloor2", "xfloor3", "xfloor4", "xfloor5", "xfloor6", "xfloor7")
|
||||
anchored = TRUE
|
||||
@@ -0,0 +1,15 @@
|
||||
/obj/effect/turf_decal
|
||||
icon = 'icons/turf/decals.dmi'
|
||||
icon_state = "warningline"
|
||||
layer = TURF_DECAL_LAYER
|
||||
|
||||
/obj/effect/turf_decal/Initialize(mapload)
|
||||
. = ..()
|
||||
qdel(src) // return INITIALIZE_HINT_QDEL <-- Doesn't work
|
||||
|
||||
/obj/effect/turf_decal/ComponentInitialize()
|
||||
. = ..()
|
||||
var/turf/T = loc
|
||||
if(!istype(T)) //you know this will happen somehow
|
||||
CRASH("Turf decal initialized in an object/nullspace")
|
||||
T.AddComponent(/datum/component/decal, icon, icon_state, dir, CLEAN_GOD, color, null, null, alpha)
|
||||
@@ -0,0 +1,5 @@
|
||||
/obj/effect/turf_decal/sand
|
||||
icon_state = "sandyfloor"
|
||||
|
||||
/obj/effect/turf_decal/sand/plating
|
||||
icon_state = "sandyplating"
|
||||
@@ -0,0 +1,152 @@
|
||||
/obj/effect/turf_decal/stripes/line
|
||||
icon_state = "warningline"
|
||||
|
||||
/obj/effect/turf_decal/stripes/end
|
||||
icon_state = "warn_end"
|
||||
|
||||
/obj/effect/turf_decal/stripes/corner
|
||||
icon_state = "warninglinecorner"
|
||||
|
||||
/obj/effect/turf_decal/stripes/box
|
||||
icon_state = "warn_box"
|
||||
|
||||
/obj/effect/turf_decal/stripes/full
|
||||
icon_state = "warn_full"
|
||||
|
||||
/obj/effect/turf_decal/stripes/asteroid/line
|
||||
icon_state = "ast_warn"
|
||||
|
||||
/obj/effect/turf_decal/stripes/asteroid/end
|
||||
icon_state = "ast_warn_end"
|
||||
|
||||
/obj/effect/turf_decal/stripes/asteroid/corner
|
||||
icon_state = "ast_warn_corner"
|
||||
|
||||
/obj/effect/turf_decal/stripes/asteroid/box
|
||||
icon_state = "ast_warn_box"
|
||||
|
||||
/obj/effect/turf_decal/stripes/asteroid/full
|
||||
icon_state = "ast_warn_full"
|
||||
|
||||
/obj/effect/turf_decal/stripes/white/line
|
||||
icon_state = "warningline_white"
|
||||
|
||||
/obj/effect/turf_decal/stripes/white/end
|
||||
icon_state = "warn_end_white"
|
||||
|
||||
/obj/effect/turf_decal/stripes/white/corner
|
||||
icon_state = "warninglinecorner_white"
|
||||
|
||||
/obj/effect/turf_decal/stripes/white/box
|
||||
icon_state = "warn_box_white"
|
||||
|
||||
/obj/effect/turf_decal/stripes/white/full
|
||||
icon_state = "warn_full_white"
|
||||
|
||||
/obj/effect/turf_decal/stripes/red/line
|
||||
icon_state = "warningline_red"
|
||||
|
||||
/obj/effect/turf_decal/stripes/red/end
|
||||
icon_state = "warn_end_red"
|
||||
|
||||
/obj/effect/turf_decal/stripes/red/corner
|
||||
icon_state = "warninglinecorner_red"
|
||||
|
||||
/obj/effect/turf_decal/stripes/red/box
|
||||
icon_state = "warn_box_red"
|
||||
|
||||
/obj/effect/turf_decal/stripes/red/full
|
||||
icon_state = "warn_full_red"
|
||||
|
||||
/obj/effect/turf_decal/delivery
|
||||
icon_state = "delivery"
|
||||
|
||||
/obj/effect/turf_decal/delivery/white
|
||||
icon_state = "delivery_white"
|
||||
|
||||
/obj/effect/turf_decal/delivery/red
|
||||
icon_state = "delivery_red"
|
||||
|
||||
/obj/effect/turf_decal/bot
|
||||
icon_state = "bot"
|
||||
|
||||
/obj/effect/turf_decal/bot/right
|
||||
icon_state = "bot_right"
|
||||
|
||||
/obj/effect/turf_decal/bot/left
|
||||
icon_state = "bot_left"
|
||||
|
||||
/obj/effect/turf_decal/bot_white
|
||||
icon_state = "bot_white"
|
||||
|
||||
/obj/effect/turf_decal/bot_white/right
|
||||
icon_state = "bot_right_white"
|
||||
|
||||
/obj/effect/turf_decal/bot_white/left
|
||||
icon_state = "bot_left_white"
|
||||
|
||||
/obj/effect/turf_decal/bot_red
|
||||
icon_state = "bot_red"
|
||||
|
||||
/obj/effect/turf_decal/bot_red/right
|
||||
icon_state = "bot_right_red"
|
||||
|
||||
/obj/effect/turf_decal/bot_red/left
|
||||
icon_state = "bot_left_red"
|
||||
|
||||
/obj/effect/turf_decal/loading_area
|
||||
icon_state = "loadingarea"
|
||||
|
||||
/obj/effect/turf_decal/loading_area/white
|
||||
icon_state = "loadingarea_white"
|
||||
|
||||
/obj/effect/turf_decal/loading_area/red
|
||||
icon_state = "loadingarea_red"
|
||||
|
||||
/obj/effect/turf_decal/caution
|
||||
icon_state = "caution"
|
||||
|
||||
/obj/effect/turf_decal/caution/white
|
||||
icon_state = "caution_white"
|
||||
|
||||
/obj/effect/turf_decal/caution/red
|
||||
icon_state = "caution_red"
|
||||
|
||||
/obj/effect/turf_decal/caution/stand_clear
|
||||
icon_state = "stand_clear"
|
||||
|
||||
/obj/effect/turf_decal/caution/stand_clear/white
|
||||
icon_state = "stand_clear_white"
|
||||
|
||||
/obj/effect/turf_decal/caution/stand_clear/red
|
||||
icon_state = "stand_clear_red"
|
||||
|
||||
/obj/effect/turf_decal/arrows
|
||||
icon_state = "arrows"
|
||||
|
||||
/obj/effect/turf_decal/arrows/white
|
||||
icon_state = "arrows_white"
|
||||
|
||||
/obj/effect/turf_decal/arrows/red
|
||||
icon_state = "arrows_red"
|
||||
|
||||
/obj/effect/turf_decal/box
|
||||
icon_state = "box"
|
||||
|
||||
/obj/effect/turf_decal/box/corners
|
||||
icon_state = "box_corners"
|
||||
|
||||
/obj/effect/turf_decal/box/white
|
||||
icon_state = "box_white"
|
||||
|
||||
/obj/effect/turf_decal/box/white/corners
|
||||
icon_state = "box_corners_white"
|
||||
|
||||
/obj/effect/turf_decal/box/red
|
||||
icon_state = "box_red"
|
||||
|
||||
/obj/effect/turf_decal/box/red/corners
|
||||
icon_state = "box_corners_red"
|
||||
|
||||
/obj/effect/turf_decal/plaque
|
||||
icon_state = "plaque"
|
||||
@@ -0,0 +1,39 @@
|
||||
/obj/effect/turf_decal/tile
|
||||
name = "tile decal"
|
||||
icon_state = "tile_corner"
|
||||
layer = TURF_PLATING_DECAL_LAYER
|
||||
alpha = 110
|
||||
|
||||
/obj/effect/turf_decal/tile/blue
|
||||
name = "blue corner"
|
||||
color = "#52B4E9"
|
||||
|
||||
/obj/effect/turf_decal/tile/green
|
||||
name = "green corner"
|
||||
color = "#9FED58"
|
||||
|
||||
/obj/effect/turf_decal/tile/yellow
|
||||
name = "yellow corner"
|
||||
color = "#EFB341"
|
||||
|
||||
/obj/effect/turf_decal/tile/red
|
||||
name = "red corner"
|
||||
color = "#DE3A3A"
|
||||
|
||||
/obj/effect/turf_decal/tile/bar
|
||||
name = "bar corner"
|
||||
color = "#791500"
|
||||
alpha = 130
|
||||
|
||||
/obj/effect/turf_decal/tile/purple
|
||||
name = "purple corner"
|
||||
color = "#D381C9"
|
||||
|
||||
/obj/effect/turf_decal/tile/brown
|
||||
name = "brown corner"
|
||||
color = "#A46106"
|
||||
|
||||
/obj/effect/turf_decal/tile/neutral
|
||||
name = "neutral corner"
|
||||
color = "#D4D4D4"
|
||||
alpha = 50
|
||||
@@ -0,0 +1,12 @@
|
||||
/obj/effect/turf_decal/weather
|
||||
name = "sandy floor"
|
||||
icon_state = "sandyfloor"
|
||||
|
||||
/obj/effect/turf_decal/weather/snow
|
||||
name = "snowy floor"
|
||||
icon_state = "snowyfloor"
|
||||
|
||||
/obj/effect/turf_decal/weather/snow/corner
|
||||
name = "snow corner piece"
|
||||
icon = 'icons/turf/snow.dmi'
|
||||
icon_state = "snow_corner"
|
||||
@@ -0,0 +1,73 @@
|
||||
/obj/effect/baseturf_helper //Set the baseturfs of every turf in the /area/ it is placed.
|
||||
name = "baseturf editor"
|
||||
icon = 'icons/effects/mapping_helpers.dmi'
|
||||
icon_state = ""
|
||||
|
||||
var/baseturf
|
||||
|
||||
layer = POINT_LAYER
|
||||
|
||||
/obj/effect/baseturf_helper/Initialize(mapload)
|
||||
. = ..()
|
||||
var/area/thearea = get_area(src)
|
||||
for(var/turf/T in get_area_turfs(thearea, z))
|
||||
replace_baseturf(T)
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
/obj/effect/baseturf_helper/proc/replace_baseturf(turf/thing)
|
||||
if(thing.baseturf != thing.type)
|
||||
thing.baseturf = baseturf
|
||||
|
||||
/obj/effect/baseturf_helper/space
|
||||
name = "space baseturf editor"
|
||||
baseturf = /turf/space
|
||||
|
||||
/obj/effect/baseturf_helper/asteroid
|
||||
name = "asteroid baseturf editor"
|
||||
baseturf = /turf/simulated/floor/plating/asteroid
|
||||
|
||||
/obj/effect/baseturf_helper/asteroid/airless
|
||||
name = "asteroid airless baseturf editor"
|
||||
baseturf = /turf/simulated/floor/plating/asteroid/airless
|
||||
|
||||
/obj/effect/baseturf_helper/asteroid/basalt
|
||||
name = "asteroid basalt baseturf editor"
|
||||
baseturf = /turf/simulated/floor/plating/asteroid/basalt
|
||||
|
||||
/obj/effect/baseturf_helper/asteroid/snow
|
||||
name = "asteroid snow baseturf editor"
|
||||
baseturf = /turf/simulated/floor/plating/asteroid/snow
|
||||
|
||||
/obj/effect/baseturf_helper/beach/sand
|
||||
name = "beach sand baseturf editor"
|
||||
baseturf = /turf/simulated/floor/beach/sand
|
||||
|
||||
/obj/effect/baseturf_helper/beach/water
|
||||
name = "water baseturf editor"
|
||||
baseturf = /turf/simulated/floor/beach/water
|
||||
|
||||
/obj/effect/baseturf_helper/lava
|
||||
name = "lava baseturf editor"
|
||||
baseturf = /turf/simulated/floor/plating/lava/smooth
|
||||
|
||||
/obj/effect/baseturf_helper/lava_land/surface
|
||||
name = "lavaland baseturf editor"
|
||||
baseturf = /turf/simulated/floor/plating/lava/smooth/lava_land_surface
|
||||
|
||||
/obj/effect/mapping_helpers
|
||||
icon = 'icons/effects/mapping_helpers.dmi'
|
||||
icon_state = ""
|
||||
var/late = FALSE
|
||||
|
||||
/obj/effect/mapping_helpers/Initialize(mapload)
|
||||
..()
|
||||
|
||||
return late ? INITIALIZE_HINT_LATELOAD : qdel(src) // INITIALIZE_HINT_QDEL <-- Doesn't work
|
||||
|
||||
/obj/effect/mapping_helpers/no_lava
|
||||
icon_state = "no_lava"
|
||||
|
||||
/obj/effect/mapping_helpers/no_lava/New()
|
||||
var/turf/T = get_turf(src)
|
||||
T.flags |= NO_LAVA_GEN
|
||||
. = ..()
|
||||
@@ -3,68 +3,126 @@
|
||||
desc = "Looks unstable. Best to test it with the clown."
|
||||
icon = 'icons/obj/stationobjs.dmi'
|
||||
icon_state = "portal"
|
||||
density = 1
|
||||
unacidable = 1//Can't destroy energy portals.
|
||||
var/failchance = 5
|
||||
density = TRUE
|
||||
unacidable = TRUE
|
||||
anchored = TRUE
|
||||
|
||||
var/obj/item/target = null
|
||||
var/creator = null
|
||||
anchored = 1
|
||||
var/precision = 1 // how close to the portal you will teleport. 0 = on the portal, 1 = adjacent
|
||||
var/can_multitool_to_remove = 0
|
||||
|
||||
var/failchance = 5
|
||||
var/fail_icon = "portal1"
|
||||
|
||||
var/precision = TRUE // how close to the portal you will teleport. FALSE = on the portal, TRUE = adjacent
|
||||
var/can_multitool_to_remove = FALSE
|
||||
var/ignore_tele_proof_area_setting = FALSE
|
||||
|
||||
/obj/effect/portal/Bumped(mob/M as mob|obj)
|
||||
teleport(M)
|
||||
|
||||
/obj/effect/portal/New(loc, turf/target, creator=null, lifespan=300)
|
||||
/obj/effect/portal/New(loc, turf/target, creator = null, lifespan = 300)
|
||||
..()
|
||||
|
||||
GLOB.portals += src
|
||||
src.loc = loc
|
||||
|
||||
src.target = target
|
||||
src.creator = creator
|
||||
|
||||
if(lifespan > 0)
|
||||
spawn(lifespan)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/portal/Destroy()
|
||||
GLOB.portals -= src
|
||||
if(istype(creator, /obj))
|
||||
|
||||
if(isobj(creator))
|
||||
var/obj/O = creator
|
||||
O.portal_destroyed(src)
|
||||
|
||||
creator = null
|
||||
target = null
|
||||
return ..()
|
||||
|
||||
/obj/effect/portal/proc/teleport(atom/movable/M as mob|obj)
|
||||
if(istype(M, /obj/effect)) //sparks don't teleport
|
||||
/obj/effect/portal/singularity_pull()
|
||||
return
|
||||
|
||||
/obj/effect/portal/singularity_act()
|
||||
return
|
||||
|
||||
/obj/effect/portal/Crossed(atom/movable/AM)
|
||||
if(isobserver(AM))
|
||||
return ..()
|
||||
|
||||
if(!teleport(AM))
|
||||
return ..()
|
||||
|
||||
/obj/effect/portal/attack_tk(mob/user)
|
||||
return
|
||||
|
||||
/obj/effect/portal/attack_hand(mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(M.anchored&&istype(M, /obj/mecha))
|
||||
return
|
||||
if(!( target ))
|
||||
qdel(src)
|
||||
return
|
||||
if(istype(M, /atom/movable))
|
||||
if(prob(failchance))
|
||||
src.icon_state = "portal1"
|
||||
if(!do_teleport(M, locate(rand(5, world.maxx - 5), rand(5, world.maxy -5), 3), 0, bypass_area_flag = ignore_tele_proof_area_setting)) // Try to send them to deep space.
|
||||
invalid_teleport()
|
||||
else
|
||||
if(!do_teleport(M, target, precision, bypass_area_flag = ignore_tele_proof_area_setting)) // Try to send them to a turf adjacent to target.
|
||||
invalid_teleport()
|
||||
if(get_turf(user) == get_turf(src))
|
||||
teleport(user)
|
||||
if(Adjacent(user))
|
||||
user.forceMove(get_turf(src))
|
||||
|
||||
/obj/effect/portal/attack_ghost(mob/dead/observer/O)
|
||||
if(target)
|
||||
O.forceMove(target)
|
||||
|
||||
/obj/effect/portal/attackby(obj/item/A, mob/user)
|
||||
if(istype(A, /obj/item/multitool) && can_multitool_to_remove)
|
||||
if(ismultitool(A) && can_multitool_to_remove)
|
||||
qdel(src)
|
||||
else if(user && Adjacent(user))
|
||||
user.forceMove(get_turf(src))
|
||||
return TRUE
|
||||
|
||||
/obj/effect/portal/proc/can_teleport(atom/movable/M)
|
||||
. = TRUE
|
||||
|
||||
if(!istype(M))
|
||||
. = FALSE
|
||||
|
||||
if(!M.simulated || iseffect(M))
|
||||
. = FALSE
|
||||
|
||||
if(M.anchored && ismecha(M))
|
||||
. = FALSE
|
||||
|
||||
/obj/effect/portal/proc/teleport(atom/movable/M)
|
||||
if(!can_teleport(M))
|
||||
return FALSE
|
||||
|
||||
if(!target)
|
||||
qdel(src)
|
||||
return FALSE
|
||||
|
||||
if(ismegafauna(M))
|
||||
message_admins("[M] has used a portal at [ADMIN_VERBOSEJMP(src)] made by [key_name_admin(usr)].")
|
||||
|
||||
if(prob(failchance))
|
||||
icon_state = fail_icon
|
||||
if(!do_teleport(M, locate(rand(5, world.maxx - 5), rand(5, world.maxy -5), 3), 0, bypass_area_flag = ignore_tele_proof_area_setting)) // Try to send them to deep space.
|
||||
invalid_teleport()
|
||||
return FALSE
|
||||
else
|
||||
if(!do_teleport(M, target, precision, bypass_area_flag = ignore_tele_proof_area_setting)) // Try to send them to a turf adjacent to target.
|
||||
invalid_teleport()
|
||||
return FALSE
|
||||
|
||||
return TRUE
|
||||
|
||||
/obj/effect/portal/proc/invalid_teleport()
|
||||
visible_message("<span class='warning'>[src] flickers and fails due to bluespace interference!</span>")
|
||||
do_sparks(5, 0, loc)
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/effect/portal/redspace
|
||||
name = "redspace portal"
|
||||
desc = "A portal capable of bypassing bluespace interference."
|
||||
icon_state = "portal1"
|
||||
failchance = 0
|
||||
precision = 0
|
||||
ignore_tele_proof_area_setting = TRUE
|
||||
ignore_tele_proof_area_setting = TRUE
|
||||
|
||||
@@ -242,7 +242,8 @@
|
||||
/obj/item/gun/projectile/automatic/toy/pistol/enforcer = 50,
|
||||
/obj/item/gun/projectile/shotgun/toy = 50,
|
||||
/obj/item/gun/projectile/shotgun/toy/crossbow = 50,
|
||||
/obj/item/gun/projectile/shotgun/toy/tommygun = 50
|
||||
/obj/item/gun/projectile/shotgun/toy/tommygun = 50,
|
||||
/obj/item/gun/projectile/automatic/sniper_rifle/toy = 50
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -47,3 +47,8 @@
|
||||
name = "reinforced plasma window spawner"
|
||||
icon_state = "pwindow_spawner"
|
||||
windowtospawn = /obj/structure/window/plasmareinforced
|
||||
|
||||
/obj/effect/spawner/window/shuttle
|
||||
name = "shuttle window spawner"
|
||||
icon_state = "swindow_spawner"
|
||||
windowtospawn = /obj/structure/window/shuttle
|
||||
|
||||
@@ -228,4 +228,65 @@
|
||||
randomdir = FALSE
|
||||
pixel_y = -16
|
||||
pixel_x = -16
|
||||
duration = 20
|
||||
duration = 20
|
||||
|
||||
/obj/effect/temp_visual/bleed
|
||||
name = "bleed"
|
||||
icon = 'icons/effects/bleed.dmi'
|
||||
icon_state = "bleed0"
|
||||
duration = 10
|
||||
var/shrink = TRUE
|
||||
|
||||
/obj/effect/temp_visual/bleed/Initialize(mapload, atom/size_calc_target)
|
||||
. = ..()
|
||||
var/size_matrix = matrix()
|
||||
if(size_calc_target)
|
||||
layer = size_calc_target.layer + 0.01
|
||||
var/icon/I = icon(size_calc_target.icon, size_calc_target.icon_state, size_calc_target.dir)
|
||||
size_matrix = matrix() * (I.Height()/world.icon_size)
|
||||
transform = size_matrix //scale the bleed overlay's size based on the target's icon size
|
||||
var/matrix/M = transform
|
||||
if(shrink)
|
||||
M = size_matrix * 0.1
|
||||
else
|
||||
M = size_matrix * 2
|
||||
animate(src, alpha = 20, transform = M, time = duration, flags = ANIMATION_PARALLEL)
|
||||
|
||||
/obj/effect/temp_visual/bleed/explode
|
||||
icon_state = "bleed10"
|
||||
duration = 12
|
||||
shrink = FALSE
|
||||
|
||||
/obj/effect/temp_visual/small_smoke
|
||||
icon_state = "smoke"
|
||||
duration = 50
|
||||
|
||||
/obj/effect/temp_visual/small_smoke/halfsecond
|
||||
duration = 5
|
||||
|
||||
/obj/effect/temp_visual/dir_setting/firing_effect
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "firing_effect"
|
||||
duration = 2
|
||||
|
||||
/obj/effect/temp_visual/dir_setting/firing_effect/setDir(newdir)
|
||||
switch(newdir)
|
||||
if(NORTH)
|
||||
layer = BELOW_MOB_LAYER
|
||||
pixel_x = rand(-3,3)
|
||||
pixel_y = rand(4,6)
|
||||
if(SOUTH)
|
||||
pixel_x = rand(-3,3)
|
||||
pixel_y = rand(-1,1)
|
||||
else
|
||||
pixel_x = rand(-1,1)
|
||||
pixel_y = rand(-1,1)
|
||||
..()
|
||||
|
||||
/obj/effect/temp_visual/dir_setting/firing_effect/energy
|
||||
icon_state = "firing_effect_energy"
|
||||
duration = 3
|
||||
|
||||
/obj/effect/temp_visual/dir_setting/firing_effect/magic
|
||||
icon_state = "shieldsparkles"
|
||||
duration = 3
|
||||
@@ -1,16 +1,23 @@
|
||||
//temporary visual effects
|
||||
/obj/effect/temp_visual
|
||||
anchored = 1
|
||||
icon_state = "nothing"
|
||||
anchored = TRUE
|
||||
layer = ABOVE_MOB_LAYER
|
||||
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
var/duration = 10
|
||||
var/duration = 10 //in deciseconds
|
||||
var/randomdir = TRUE
|
||||
var/timerid
|
||||
|
||||
/obj/effect/temp_visual/New()
|
||||
/obj/effect/temp_visual/Initialize(mapload)
|
||||
. = ..()
|
||||
if(randomdir)
|
||||
setDir(pick(cardinal))
|
||||
|
||||
QDEL_IN(src, duration)
|
||||
timerid = QDEL_IN(src, duration)
|
||||
|
||||
/obj/effect/temp_visual/Destroy()
|
||||
. = ..()
|
||||
deltimer(timerid)
|
||||
|
||||
/obj/effect/temp_visual/singularity_act()
|
||||
return
|
||||
@@ -24,7 +31,7 @@
|
||||
/obj/effect/temp_visual/dir_setting
|
||||
randomdir = FALSE
|
||||
|
||||
/obj/effect/temp_visual/dir_setting/New(loc, set_dir)
|
||||
/obj/effect/temp_visual/dir_setting/Initialize(mapload, set_dir)
|
||||
if(set_dir)
|
||||
setDir(set_dir)
|
||||
..()
|
||||
. = ..()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//TODO: Flash range does nothing currently
|
||||
|
||||
/proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, ignorecap = 0, flame_range = 0 ,silent = 0, smoke = 1, cause = null, breach = TRUE)
|
||||
/proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, ignorecap = 0, flame_range = 0, silent = 0, smoke = 1, cause = null, breach = TRUE)
|
||||
src = null //so we don't abort once src is deleted
|
||||
epicenter = get_turf(epicenter)
|
||||
|
||||
|
||||
@@ -89,7 +89,6 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d
|
||||
var/list/sprite_sheets = null
|
||||
var/icon_override = null //Used to override hardcoded clothing dmis in human clothing proc.
|
||||
var/sprite_sheets_obj = null //Used to override hardcoded clothing inventory object dmis in human clothing proc.
|
||||
var/list/species_fit = null //This object has a different appearance when worn by these species
|
||||
|
||||
var/trip_verb = TV_TRIP
|
||||
var/trip_chance = 0
|
||||
@@ -150,6 +149,10 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d
|
||||
/obj/item/blob_act()
|
||||
qdel(src)
|
||||
|
||||
/obj/item/water_act(volume, temperature, source, method = TOUCH)
|
||||
. = ..()
|
||||
extinguish()
|
||||
|
||||
/obj/item/verb/move_to_top()
|
||||
set name = "Move To Top"
|
||||
set category = null
|
||||
@@ -605,4 +608,29 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d
|
||||
if(!ismob(loc))
|
||||
return
|
||||
var/mob/owner = loc
|
||||
owner.regenerate_icons()
|
||||
var/flags = slot_flags
|
||||
if(flags & SLOT_OCLOTHING)
|
||||
owner.update_inv_wear_suit()
|
||||
if(flags & SLOT_ICLOTHING)
|
||||
owner.update_inv_w_uniform()
|
||||
if(flags & SLOT_GLOVES)
|
||||
owner.update_inv_gloves()
|
||||
if(flags & SLOT_EYES)
|
||||
owner.update_inv_glasses()
|
||||
if(flags & SLOT_EARS)
|
||||
owner.update_inv_ears()
|
||||
if(flags & SLOT_MASK)
|
||||
owner.update_inv_wear_mask()
|
||||
if(flags & SLOT_HEAD)
|
||||
owner.update_inv_head()
|
||||
if(flags & SLOT_FEET)
|
||||
owner.update_inv_shoes()
|
||||
if(flags & SLOT_ID)
|
||||
owner.update_inv_wear_id()
|
||||
if(flags & SLOT_BELT)
|
||||
owner.update_inv_belt()
|
||||
if(flags & SLOT_BACK)
|
||||
owner.update_inv_back()
|
||||
if(flags & SLOT_PDA)
|
||||
owner.update_inv_wear_pda()
|
||||
|
||||
|
||||
@@ -65,8 +65,8 @@
|
||||
|
||||
|
||||
/obj/item/areaeditor/permit/create_area()
|
||||
..()
|
||||
qdel(src)
|
||||
if(..())
|
||||
qdel(src)
|
||||
|
||||
//free golem blueprints, like permit but can claim as much as needed
|
||||
|
||||
@@ -186,25 +186,26 @@
|
||||
|
||||
|
||||
/obj/item/areaeditor/proc/create_area()
|
||||
var/area_created = FALSE
|
||||
var/res = detect_room(get_turf(usr))
|
||||
if(!istype(res,/list))
|
||||
switch(res)
|
||||
if(ROOM_ERR_SPACE)
|
||||
to_chat(usr, "<span class='warning'>The new area must be completely airtight.</span>")
|
||||
return
|
||||
return area_created
|
||||
if(ROOM_ERR_TOOLARGE)
|
||||
to_chat(usr, "<span class='warning'>The new area is too large.</span>")
|
||||
return
|
||||
return area_created
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>Error! Please notify administration.</span>")
|
||||
return
|
||||
return area_created
|
||||
var/list/turf/turfs = res
|
||||
var/str = trim(stripped_input(usr,"New area name:", "Blueprint Editing", "", MAX_NAME_LEN))
|
||||
if(!str || !length(str)) //cancel
|
||||
return
|
||||
return area_created
|
||||
if(length(str) > 50)
|
||||
to_chat(usr, "<span class='warning'>The given name is too long. The area remains undefined.</span>")
|
||||
return
|
||||
return area_created
|
||||
var/area/A = new
|
||||
A.name = str
|
||||
A.power_equip = FALSE
|
||||
@@ -220,7 +221,8 @@
|
||||
thing.change_area(old_area, A)
|
||||
|
||||
interact()
|
||||
return
|
||||
area_created = TRUE
|
||||
return area_created
|
||||
|
||||
/obj/item/areaeditor/proc/edit_area()
|
||||
var/area/A = get_area()
|
||||
|
||||
@@ -22,6 +22,10 @@
|
||||
owned = 0
|
||||
return ..()
|
||||
|
||||
/obj/item/toy/carpplushie/dehy_carp/water_act(volume, temperature, source, method = TOUCH)
|
||||
. = ..()
|
||||
if(volume >= 1)
|
||||
Swell()
|
||||
|
||||
/obj/item/toy/carpplushie/dehy_carp/afterattack(obj/O, mob/user,proximity)
|
||||
if(!proximity) return
|
||||
|
||||
@@ -292,10 +292,10 @@
|
||||
color = null
|
||||
|
||||
/obj/item/flashlight/flare/glowstick/random/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
var/T = pick(typesof(/obj/item/flashlight/flare/glowstick) - /obj/item/flashlight/flare/glowstick/random - /obj/item/flashlight/flare/glowstick/emergency)
|
||||
new T(loc)
|
||||
return INITIALIZE_HINT_QDEL
|
||||
qdel(src) // return INITIALIZE_HINT_QDEL <-- Doesn't work
|
||||
|
||||
/obj/item/flashlight/flare/extinguish_light()
|
||||
visible_message("<span class='danger'>[src] dims slightly before scattering the shadows around it.</span>")
|
||||
|
||||
@@ -591,6 +591,9 @@ REAGENT SCANNER
|
||||
var/scan_time = 10 SECONDS //how long does it take to scan
|
||||
var/scan_cd = 60 SECONDS //how long before we can scan again
|
||||
|
||||
/obj/item/bodyanalyzer/get_cell()
|
||||
return power_supply
|
||||
|
||||
/obj/item/bodyanalyzer/advanced
|
||||
cell_type = /obj/item/stock_parts/cell/upgraded/plus
|
||||
|
||||
|
||||
@@ -39,6 +39,9 @@
|
||||
var/poison_dose = 20
|
||||
var/poison_total = 60
|
||||
|
||||
/obj/item/documents/syndicate/mining
|
||||
desc = "\"Top Secret\" documents detailing Syndicate plasma mining operations."
|
||||
|
||||
/obj/item/documents/syndicate/yellow/trapped/pickup(user)
|
||||
if(ishuman(user) && poison_total > 0)
|
||||
var/mob/living/carbon/human/H = user
|
||||
|
||||
@@ -31,31 +31,9 @@
|
||||
if(..())
|
||||
return
|
||||
|
||||
R.notify_ai(2)
|
||||
R.reset_module()
|
||||
|
||||
R.uneq_all()
|
||||
R.sight_mode = null
|
||||
R.hands.icon_state = "nomod"
|
||||
R.icon_state = "robot"
|
||||
R.module.remove_subsystems_and_actions(R)
|
||||
QDEL_NULL(R.module)
|
||||
|
||||
R.camera.network.Remove(list("Engineering", "Medical", "Mining Outpost"))
|
||||
R.rename_character(R.real_name, R.get_default_name("Default"))
|
||||
R.languages = list()
|
||||
R.speech_synthesizer_langs = list()
|
||||
|
||||
R.update_icons()
|
||||
R.update_headlamp()
|
||||
|
||||
R.speed = 0 // Remove upgrades.
|
||||
R.ionpulse = 0
|
||||
R.magpulse = 0
|
||||
R.add_language("Robot Talk", 1)
|
||||
|
||||
R.status_flags |= CANPUSH
|
||||
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/obj/item/borg/upgrade/rename
|
||||
name = "cyborg reclassification board"
|
||||
|
||||
@@ -25,6 +25,15 @@ var/global/list/datum/stack_recipe/rod_recipes = list ( \
|
||||
/obj/item/stack/rods/cyborg
|
||||
materials = list()
|
||||
|
||||
/obj/item/stack/rods/ten
|
||||
amount = 10
|
||||
|
||||
/obj/item/stack/rods/twentyfive
|
||||
amount = 25
|
||||
|
||||
/obj/item/stack/rods/fifty
|
||||
amount = 50
|
||||
|
||||
/obj/item/stack/rods/New(loc, amount=null)
|
||||
..()
|
||||
recipes = rod_recipes
|
||||
|
||||
@@ -32,6 +32,7 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \
|
||||
created_window = /obj/structure/window/basic
|
||||
full_window = /obj/structure/window/full/basic
|
||||
merge_type = /obj/item/stack/sheet/glass
|
||||
point_value = 1
|
||||
|
||||
/obj/item/stack/sheet/glass/fifty
|
||||
amount = 50
|
||||
@@ -90,6 +91,7 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \
|
||||
created_window = /obj/structure/window/reinforced
|
||||
full_window = /obj/structure/window/full/reinforced
|
||||
merge_type = /obj/item/stack/sheet/rglass
|
||||
point_value = 4
|
||||
|
||||
/obj/item/stack/sheet/rglass/cyborg
|
||||
materials = list()
|
||||
@@ -113,6 +115,7 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \
|
||||
origin_tech = "plasmatech=2;materials=2"
|
||||
created_window = /obj/structure/window/plasmabasic
|
||||
full_window = /obj/structure/window/full/plasmabasic
|
||||
point_value = 19
|
||||
|
||||
/obj/item/stack/sheet/plasmaglass/New(loc, amount)
|
||||
recipes = GLOB.pglass_recipes
|
||||
@@ -154,6 +157,7 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \
|
||||
created_window = /obj/structure/window/plasmareinforced
|
||||
full_window = /obj/structure/window/full/plasmareinforced
|
||||
armor = list("melee" = 20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0)
|
||||
point_value = 23
|
||||
|
||||
/obj/item/stack/sheet/plasmarglass/New(loc, amount)
|
||||
recipes = GLOB.prglass_recipes
|
||||
|
||||
@@ -125,6 +125,55 @@ var/global/list/datum/stack_recipe/sinew_recipes = list ( \
|
||||
flags = NOBLUDGEON
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
layer = MOB_LAYER
|
||||
var/static/list/can_strengthen_clothing
|
||||
|
||||
/obj/item/stack/sheet/animalhide/goliath_hide/Initialize(mapload)
|
||||
. = ..()
|
||||
if(!can_strengthen_clothing)
|
||||
can_strengthen_clothing = typecacheof(list(
|
||||
/obj/item/clothing/suit/space/hardsuit/mining,
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/mining,
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/miner,
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/miner,
|
||||
/obj/item/clothing/suit/hooded/explorer,
|
||||
/obj/item/clothing/head/hooded/explorer,
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/explorer,
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/explorer
|
||||
))
|
||||
|
||||
/obj/item/stack/sheet/animalhide/goliath_hide/afterattack(atom/target, mob/user, proximity_flag)
|
||||
if(proximity_flag)
|
||||
if(is_type_in_typecache(target, can_strengthen_clothing))
|
||||
var/obj/item/clothing/C = target
|
||||
var/current_armor = C.armor
|
||||
if(current_armor["melee"] < 60)
|
||||
current_armor["melee"] = min(current_armor["melee"] + 10, 60)
|
||||
to_chat(user, "<span class='info'>You strengthen [target], improving its resistance against melee attacks.</span>")
|
||||
use(1)
|
||||
else
|
||||
to_chat(user, "<span class='info'>You can't improve [C] any further.</span>")
|
||||
return
|
||||
if(istype(target, /obj/mecha/working/ripley))
|
||||
var/obj/mecha/D = target
|
||||
if(D.icon_state != "ripley-open")
|
||||
to_chat(user, "<span class='info'>You can't add armour onto the mech while someone is inside!</span>")
|
||||
return
|
||||
var/list/damage_absorption = D.damage_absorption
|
||||
if(damage_absorption["brute"] > 0.3)
|
||||
damage_absorption["brute"] = max(damage_absorption["brute"] - 0.1, 0.3)
|
||||
damage_absorption["bullet"] = damage_absorption["bullet"] - 0.05
|
||||
damage_absorption["fire"] = damage_absorption["fire"] - 0.05
|
||||
damage_absorption["laser"] = damage_absorption["laser"] - 0.025
|
||||
to_chat(user, "<span class='info'>You strengthen [target], improving its resistance against melee attacks.</span>")
|
||||
use(1)
|
||||
D.overlays += image("icon"="mecha.dmi", "icon_state"="ripley-g-open")
|
||||
D.desc = "Autonomous Power Loader Unit. Its armour is enhanced with some goliath hide plates."
|
||||
if(damage_absorption["brute"] == 0.3)
|
||||
D.overlays += image("icon"="mecha.dmi", "icon_state"="ripley-g-full-open")
|
||||
D.desc = "Autonomous Power Loader Unit. It's wearing a fearsome carapace entirely composed of goliath hide plates - the pilot must be an experienced monster hunter."
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You can't improve [D] any further!</span>")
|
||||
return
|
||||
|
||||
/obj/item/stack/sheet/animalhide/ashdrake
|
||||
name = "ash drake hide"
|
||||
@@ -156,7 +205,12 @@ var/global/list/datum/stack_recipe/sinew_recipes = list ( \
|
||||
else
|
||||
..()
|
||||
|
||||
//Step two - washing..... it's actually in washing machine code.
|
||||
//Step two - washing (also handled by water reagent code and washing machine code)
|
||||
/obj/item/stack/sheet/hairlesshide/water_act(volume, temperature, source, method = TOUCH)
|
||||
. = ..()
|
||||
if(volume >= 10)
|
||||
new /obj/item/stack/sheet/wetleather(get_turf(src), amount)
|
||||
qdel(src)
|
||||
|
||||
//Step three - drying
|
||||
/obj/item/stack/sheet/wetleather/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
|
||||
@@ -108,6 +108,11 @@ var/global/list/datum/stack_recipe/adamantine_recipes = list(
|
||||
new /datum/stack_recipe("incomplete servant golem shell", /obj/item/golem_shell/servant, req_amount = 1, res_amount = 1), \
|
||||
)
|
||||
|
||||
var/global/list/datum/stack_recipe/snow_recipes = list(
|
||||
new/datum/stack_recipe("snowman", /obj/structure/snowman, 5, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("Snowball", /obj/item/snowball, 1)
|
||||
)
|
||||
|
||||
/obj/item/stack/sheet/mineral
|
||||
force = 5
|
||||
throwforce = 5
|
||||
@@ -139,6 +144,7 @@ var/global/list/datum/stack_recipe/adamantine_recipes = list(
|
||||
origin_tech = "materials=6"
|
||||
sheettype = "diamond"
|
||||
materials = list(MAT_DIAMOND=MINERAL_MATERIAL_AMOUNT)
|
||||
point_value = 25
|
||||
|
||||
/obj/item/stack/sheet/mineral/diamond/New()
|
||||
..()
|
||||
@@ -151,6 +157,7 @@ var/global/list/datum/stack_recipe/adamantine_recipes = list(
|
||||
origin_tech = "materials=5"
|
||||
sheettype = "uranium"
|
||||
materials = list(MAT_URANIUM=MINERAL_MATERIAL_AMOUNT)
|
||||
point_value = 20
|
||||
|
||||
/obj/item/stack/sheet/mineral/uranium/New()
|
||||
..()
|
||||
@@ -165,6 +172,7 @@ var/global/list/datum/stack_recipe/adamantine_recipes = list(
|
||||
materials = list(MAT_PLASMA=MINERAL_MATERIAL_AMOUNT)
|
||||
burn_state = FLAMMABLE
|
||||
burntime = 5
|
||||
point_value = 20
|
||||
|
||||
/obj/item/stack/sheet/mineral/plasma/New()
|
||||
..()
|
||||
@@ -191,6 +199,7 @@ var/global/list/datum/stack_recipe/adamantine_recipes = list(
|
||||
origin_tech = "materials=4"
|
||||
sheettype = "gold"
|
||||
materials = list(MAT_GOLD=MINERAL_MATERIAL_AMOUNT)
|
||||
point_value = 20
|
||||
|
||||
/obj/item/stack/sheet/mineral/gold/New()
|
||||
..()
|
||||
@@ -203,6 +212,7 @@ var/global/list/datum/stack_recipe/adamantine_recipes = list(
|
||||
origin_tech = "materials=4"
|
||||
sheettype = "silver"
|
||||
materials = list(MAT_SILVER=MINERAL_MATERIAL_AMOUNT)
|
||||
point_value = 20
|
||||
|
||||
/obj/item/stack/sheet/mineral/silver/New()
|
||||
..()
|
||||
@@ -215,6 +225,7 @@ var/global/list/datum/stack_recipe/adamantine_recipes = list(
|
||||
origin_tech = "materials=4"
|
||||
sheettype = "bananium"
|
||||
materials = list(MAT_BANANIUM=MINERAL_MATERIAL_AMOUNT)
|
||||
point_value = 50
|
||||
|
||||
/obj/item/stack/sheet/mineral/bananium/New(loc, amount=null)
|
||||
..()
|
||||
@@ -228,6 +239,7 @@ var/global/list/datum/stack_recipe/adamantine_recipes = list(
|
||||
sheettype = "tranquillite"
|
||||
materials = list(MAT_TRANQUILLITE=MINERAL_MATERIAL_AMOUNT)
|
||||
wall_allowed = FALSE //no tranquilite walls in code
|
||||
point_value = 50
|
||||
|
||||
/obj/item/stack/sheet/mineral/tranquillite/New(loc, amount=null)
|
||||
..()
|
||||
@@ -248,6 +260,7 @@ var/global/list/datum/stack_recipe/adamantine_recipes = list(
|
||||
throw_range = 3
|
||||
sheettype = "titanium"
|
||||
materials = list(MAT_TITANIUM=MINERAL_MATERIAL_AMOUNT)
|
||||
point_value = 20
|
||||
|
||||
var/global/list/datum/stack_recipe/titanium_recipes = list (
|
||||
new/datum/stack_recipe("titanium tile", /obj/item/stack/tile/mineral/titanium, 1, 4, 20),
|
||||
@@ -277,6 +290,7 @@ var/global/list/datum/stack_recipe/titanium_recipes = list (
|
||||
throw_range = 3
|
||||
sheettype = "plastitanium"
|
||||
materials = list(MAT_TITANIUM=2000, MAT_PLASMA=2000)
|
||||
point_value = 45
|
||||
|
||||
var/global/list/datum/stack_recipe/plastitanium_recipes = list (
|
||||
new/datum/stack_recipe("plas-titanium tile", /obj/item/stack/tile/mineral/plastitanium, 1, 4, 20),
|
||||
@@ -321,3 +335,19 @@ var/global/list/datum/stack_recipe/plastitanium_recipes = list (
|
||||
/obj/item/stack/sheet/mineral/adamantine/New(loc, amount = null)
|
||||
recipes = adamantine_recipes
|
||||
..()
|
||||
|
||||
/*
|
||||
* Snow
|
||||
*/
|
||||
/obj/item/stack/sheet/mineral/snow
|
||||
name = "snow"
|
||||
icon_state = "sheet-snow"
|
||||
item_state = "sheet-snow"
|
||||
singular_name = "snow block"
|
||||
force = 1
|
||||
throwforce = 2
|
||||
merge_type = /obj/item/stack/sheet/mineral/snow
|
||||
|
||||
/obj/item/stack/sheet/mineral/snow/New(loc, amount = null)
|
||||
recipes = snow_recipes
|
||||
..()
|
||||
|
||||
@@ -105,6 +105,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list(
|
||||
flags = CONDUCT
|
||||
origin_tech = "materials=1"
|
||||
merge_type = /obj/item/stack/sheet/metal
|
||||
point_value = 2
|
||||
|
||||
/obj/item/stack/sheet/metal/cyborg
|
||||
materials = list()
|
||||
@@ -151,6 +152,7 @@ var/global/list/datum/stack_recipe/plasteel_recipes = list(
|
||||
flags = CONDUCT
|
||||
origin_tech = "materials=2"
|
||||
merge_type = /obj/item/stack/sheet/plasteel
|
||||
point_value = 23
|
||||
|
||||
/obj/item/stack/sheet/plasteel/New(var/loc, var/amount=null)
|
||||
recipes = plasteel_recipes
|
||||
@@ -385,8 +387,8 @@ var/global/list/datum/stack_recipe/brass_recipes = list (\
|
||||
GLOBAL_LIST_INIT(plastic_recipes, list(
|
||||
new /datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 5, one_per_turf = 1, on_floor = 1, time = 40), \
|
||||
new /datum/stack_recipe("wet floor sign", /obj/item/caution, 2), \
|
||||
new /datum/stack_recipe("water bottle", /obj/item/reagent_containers/food/drinks/waterbottle/empty), \
|
||||
new /datum/stack_recipe("large water bottle", /obj/item/reagent_containers/food/drinks/waterbottle/large/empty,3), \
|
||||
new /datum/stack_recipe("water bottle", /obj/item/reagent_containers/glass/beaker/waterbottle/empty), \
|
||||
new /datum/stack_recipe("large water bottle", /obj/item/reagent_containers/glass/beaker/waterbottle/large/empty,3), \
|
||||
new /datum/stack_recipe("plastic crate", /obj/structure/closet/crate/plastic, 10, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("plastic ashtray", /obj/item/ashtray/plastic, 2, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("plastic fork", /obj/item/kitchen/utensil/pfork, 1, on_floor = 1), \
|
||||
|
||||
@@ -9,22 +9,10 @@
|
||||
attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "smashed")
|
||||
var/perunit = MINERAL_MATERIAL_AMOUNT
|
||||
var/sheettype = null //this is used for girders in the creation of walls/false walls
|
||||
var/point_value = 0 //turn-in value for the gulag stacker - loosely relative to its rarity.
|
||||
|
||||
var/created_window = null //apparently glass sheets don't share a base type for glass specifically, so each had to define these vars individually
|
||||
var/full_window = null //moving the var declaration to here so this can be checked cleaner until someone is willing to make them share a base type properly
|
||||
usesound = 'sound/items/deconstruct.ogg'
|
||||
toolspeed = 1
|
||||
var/wall_allowed = TRUE //determines if sheet can be used in wall construction or not.
|
||||
|
||||
|
||||
// Since the sheetsnatcher was consolidated into weapon/storage/bag we now use
|
||||
// item/attackby() properly, making this unnecessary
|
||||
|
||||
/*/obj/item/stack/sheet/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/storage/bag/sheetsnatcher))
|
||||
var/obj/item/storage/bag/sheetsnatcher/S = W
|
||||
if(!S.mode)
|
||||
S.add(src,user)
|
||||
else
|
||||
for(var/obj/item/stack/sheet/stack in locate(src.x,src.y,src.z))
|
||||
S.add(stack,user)
|
||||
..()*/
|
||||
|
||||
@@ -111,16 +111,11 @@
|
||||
|
||||
if(istype(E, /datum/stack_recipe))
|
||||
var/datum/stack_recipe/R = E
|
||||
var/max_multiplier = round(src.amount / R.req_amount)
|
||||
var/max_multiplier = round(amount / R.req_amount)
|
||||
var/title
|
||||
var/can_build = 1
|
||||
can_build = can_build && (max_multiplier > 0)
|
||||
/*
|
||||
if(R.one_per_turf)
|
||||
can_build = can_build && !(locate(R.result_type) in usr.loc)
|
||||
if(R.on_floor)
|
||||
can_build = can_build && istype(usr.loc, /turf/simulated/floor)
|
||||
*/
|
||||
|
||||
if(R.res_amount > 1)
|
||||
title += "[R.res_amount]x [R.title]\s"
|
||||
else
|
||||
@@ -131,12 +126,13 @@
|
||||
else
|
||||
t1 += "[title]"
|
||||
continue
|
||||
if(R.max_res_amount>1 && max_multiplier>1)
|
||||
if(R.max_res_amount > 1 && max_multiplier > 1)
|
||||
max_multiplier = min(max_multiplier, round(R.max_res_amount / R.res_amount))
|
||||
t1 += " |"
|
||||
var/list/multipliers = list(5,10,25)
|
||||
|
||||
var/list/multipliers = list(5, 10, 25)
|
||||
for(var/n in multipliers)
|
||||
if(max_multiplier>=n)
|
||||
if(max_multiplier >= n)
|
||||
t1 += " <A href='?src=[UID()];make=[i];multiplier=[n]'>[n * R.res_amount]x</A>"
|
||||
if(!(max_multiplier in multipliers))
|
||||
t1 += " <A href='?src=[UID()];make=[i];multiplier=[max_multiplier]'>[max_multiplier * R.res_amount]x</A>"
|
||||
@@ -165,7 +161,7 @@
|
||||
|
||||
var/datum/stack_recipe/R = recipes_list[text2num(href_list["make"])]
|
||||
var/multiplier = text2num(href_list["multiplier"])
|
||||
if(!multiplier)
|
||||
if(!multiplier || multiplier <= 0 || multiplier > 50) // Href exploit checks
|
||||
multiplier = 1
|
||||
|
||||
if(amount < R.req_amount * multiplier)
|
||||
|
||||
@@ -170,6 +170,20 @@
|
||||
icon_state = "tile_pod"
|
||||
turf_type = /turf/simulated/floor/pod
|
||||
|
||||
/obj/item/stack/tile/pod/light
|
||||
name = "light pod floor tile"
|
||||
singular_name = "light pod floor tile"
|
||||
desc = "A lightly colored grooved floor tile."
|
||||
icon_state = "tile_podlight"
|
||||
turf_type = /turf/simulated/floor/pod
|
||||
|
||||
/obj/item/stack/tile/pod/dark
|
||||
name = "dark pod floor tile"
|
||||
singular_name = "dark pod floor tile"
|
||||
desc = "A darkly colored grooved floor tile."
|
||||
icon_state = "tile_poddark"
|
||||
turf_type = /turf/simulated/floor/pod/dark
|
||||
|
||||
/obj/item/stack/tile/arcade_carpet
|
||||
name = "arcade carpet"
|
||||
singular_name = "arcade carpet"
|
||||
|
||||
@@ -1496,6 +1496,18 @@ obj/item/toy/cards/deck/syndicate/black
|
||||
else
|
||||
icon_state = "chainsaw0"
|
||||
|
||||
/*
|
||||
* Cat Toy
|
||||
*/
|
||||
/obj/item/toy/cattoy
|
||||
name = "toy mouse"
|
||||
desc = "A colorful toy mouse!"
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "toy_mouse"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
resistance_flags = FLAMMABLE
|
||||
var/cooldown = 0
|
||||
|
||||
/*
|
||||
* Action Figures
|
||||
*/
|
||||
|
||||
@@ -333,7 +333,7 @@ GLOBAL_LIST_INIT(rcd_door_types, list(
|
||||
return FALSE
|
||||
playsound(loc, usesound, 50, 1)
|
||||
var/turf/AT = A
|
||||
AT.ChangeTurf(/turf/space)
|
||||
AT.ChangeTurf(AT.baseturf)
|
||||
return TRUE
|
||||
return FALSE
|
||||
to_chat(user, "<span class='warning'>ERROR! Not enough matter in unit to deconstruct this floor!</span>")
|
||||
|
||||
@@ -325,6 +325,10 @@
|
||||
origin_tech = "syndicate=1"
|
||||
var/registered_user = null
|
||||
untrackable = 1
|
||||
var/anyone = FALSE //Can anyone forge the ID or just syndicate?
|
||||
|
||||
/obj/item/card/id/syndicate/anyone
|
||||
anyone = TRUE
|
||||
|
||||
/obj/item/card/id/syndicate/New()
|
||||
access = initial_access.Copy()
|
||||
@@ -344,7 +348,7 @@
|
||||
if(istype(O, /obj/item/card/id))
|
||||
var/obj/item/card/id/I = O
|
||||
if(istype(user, /mob/living) && user.mind)
|
||||
if(user.mind.special_role)
|
||||
if(user.mind.special_role || anyone)
|
||||
to_chat(usr, "<span class='notice'>The card's microscanners activate as you pass it over \the [I], copying its access.</span>")
|
||||
src.access |= I.access //Don't copy access if user isn't an antag -- to prevent metagaming
|
||||
|
||||
|
||||
@@ -31,7 +31,6 @@ LIGHTERS ARE IN LIGHTERS.DM
|
||||
var/lastHolder = null
|
||||
var/smoketime = 300
|
||||
var/chem_volume = 30
|
||||
species_fit = list("Vox", "Unathi", "Tajaran", "Vulpkanin", "Grey")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/mask.dmi',
|
||||
"Unathi" = 'icons/mob/species/unathi/mask.dmi',
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
origin_tech = "biotech=4"
|
||||
actions_types = list(/datum/action/item_action/toggle_paddles)
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/back.dmi'
|
||||
)
|
||||
@@ -23,6 +22,9 @@
|
||||
var/obj/item/stock_parts/cell/high/bcell = null
|
||||
var/combat = 0 //can we revive through space suits?
|
||||
|
||||
/obj/item/defibrillator/get_cell()
|
||||
return bcell
|
||||
|
||||
/obj/item/defibrillator/New() //starts without a cell for rnd
|
||||
..()
|
||||
paddles = make_paddles()
|
||||
|
||||
@@ -24,6 +24,10 @@
|
||||
if(!istype(C))
|
||||
return
|
||||
|
||||
if(flags & NODROP)
|
||||
to_chat(user, "<span class='warning'>[src] is stuck to your hand!</span>")
|
||||
return
|
||||
|
||||
if((CLUMSY in user.mutations) && prob(50) && (!ignoresClumsy))
|
||||
to_chat(user, "<span class='warning'>Uh... how do those things work?!</span>")
|
||||
apply_cuffs(user, user)
|
||||
|
||||
@@ -165,6 +165,22 @@
|
||||
origin_tech = "materials=3;combat=4"
|
||||
attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "cut")
|
||||
|
||||
/obj/item/kitchen/knife/combat/survival
|
||||
name = "survival knife"
|
||||
icon_state = "survivalknife"
|
||||
desc = "A hunting grade survival knife."
|
||||
force = 15
|
||||
throwforce = 15
|
||||
|
||||
/obj/item/kitchen/knife/combat/survival/bone
|
||||
name = "bone dagger"
|
||||
item_state = "bone_dagger"
|
||||
icon_state = "bone_dagger"
|
||||
lefthand_file = 'icons/mob/inhands/items_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/items_righthand.dmi'
|
||||
desc = "A sharpened bone. The bare minimum in survival."
|
||||
materials = list()
|
||||
|
||||
/obj/item/kitchen/knife/combat/cyborg
|
||||
name = "cyborg knife"
|
||||
icon = 'icons/obj/items_cyborg.dmi'
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
var/active = 0
|
||||
var/force_on = 30 //force when active
|
||||
var/throwforce_on = 20
|
||||
var/faction_bonus_force = 0 //Bonus force dealt against certain factions
|
||||
var/list/nemesis_factions //Any mob with a faction that exists in this list will take bonus damage/effects
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
var/w_class_on = WEIGHT_CLASS_BULKY
|
||||
var/icon_state_on = "axe1"
|
||||
@@ -13,6 +15,19 @@
|
||||
var/brightness_on = 2
|
||||
var/colormap = list(red=LIGHT_COLOR_RED, blue=LIGHT_COLOR_LIGHTBLUE, green=LIGHT_COLOR_GREEN, purple=LIGHT_COLOR_PURPLE, rainbow=LIGHT_COLOR_WHITE)
|
||||
|
||||
/obj/item/melee/energy/attack(mob/living/target, mob/living/carbon/human/user)
|
||||
var/nemesis_faction = FALSE
|
||||
if(LAZYLEN(nemesis_factions))
|
||||
for(var/F in target.faction)
|
||||
if(F in nemesis_factions)
|
||||
nemesis_faction = TRUE
|
||||
force += faction_bonus_force
|
||||
nemesis_effects(user, target)
|
||||
break
|
||||
. = ..()
|
||||
if(nemesis_faction)
|
||||
force -= faction_bonus_force
|
||||
|
||||
/obj/item/melee/energy/suicide_act(mob/user)
|
||||
user.visible_message(pick("<span class='suicide'>[user] is slitting [user.p_their()] stomach open with the [name]! It looks like [user.p_theyre()] trying to commit seppuku.</span>", \
|
||||
"<span class='suicide'>[user] is falling on the [name]! It looks like [user.p_theyre()] trying to commit suicide.</span>"))
|
||||
@@ -225,3 +240,127 @@
|
||||
desc = "An extremely sharp blade made out of hard light. Packs quite a punch."
|
||||
icon_state = "lightblade"
|
||||
item_state = "lightblade"
|
||||
|
||||
/obj/item/melee/energy/proc/nemesis_effects(mob/living/user, mob/living/target)
|
||||
return
|
||||
|
||||
/obj/item/melee/energy/cleaving_saw
|
||||
name = "cleaving saw"
|
||||
desc = "This saw, effective at drawing the blood of beasts, transforms into a long cleaver that makes use of centrifugal force."
|
||||
force = 12
|
||||
force_on = 20 //force when active
|
||||
throwforce = 20
|
||||
throwforce_on = 20
|
||||
icon = 'icons/obj/lavaland/artefacts.dmi'
|
||||
lefthand_file = 'icons/mob/inhands/64x64_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/64x64_righthand.dmi'
|
||||
inhand_x_dimension = 64
|
||||
inhand_y_dimension = 64
|
||||
icon_state = "cleaving_saw"
|
||||
icon_state_on = "cleaving_saw_open"
|
||||
slot_flags = SLOT_BELT
|
||||
var/attack_verb_off = list("attacked", "sawed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
attack_verb_on = list("cleaved", "swiped", "slashed", "chopped")
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
sharp = TRUE
|
||||
faction_bonus_force = 30
|
||||
nemesis_factions = list("mining", "boss")
|
||||
var/transform_cooldown
|
||||
var/swiping = FALSE
|
||||
|
||||
/obj/item/melee/energy/cleaving_saw/nemesis_effects(mob/living/user, mob/living/target)
|
||||
var/datum/status_effect/saw_bleed/B = target.has_status_effect(STATUS_EFFECT_SAWBLEED)
|
||||
if(!B)
|
||||
if(!active) //This isn't in the above if-check so that the else doesn't care about active
|
||||
target.apply_status_effect(STATUS_EFFECT_SAWBLEED)
|
||||
else
|
||||
B.add_bleed(B.bleed_buildup)
|
||||
|
||||
/obj/item/melee/energy/cleaving_saw/attack_self(mob/living/carbon/user)
|
||||
transform_weapon(user)
|
||||
|
||||
/obj/item/melee/energy/cleaving_saw/proc/transform_weapon(mob/living/user, supress_message_text)
|
||||
if(transform_cooldown > world.time)
|
||||
return FALSE
|
||||
|
||||
transform_cooldown = world.time + (CLICK_CD_MELEE * 0.5)
|
||||
user.changeNext_move(CLICK_CD_MELEE * 0.25)
|
||||
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(H.disabilities & CLUMSY && prob(50))
|
||||
to_chat(H, "<span class='warning'>You accidentally cut yourself with [src], like a doofus!</span>")
|
||||
H.take_organ_damage(10,10)
|
||||
active = !active
|
||||
if(active)
|
||||
force = force_on
|
||||
throwforce = throwforce_on
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
throw_speed = 4
|
||||
if(attack_verb_on.len)
|
||||
attack_verb = attack_verb_on
|
||||
if(!item_color)
|
||||
icon_state = icon_state_on
|
||||
set_light(brightness_on)
|
||||
else
|
||||
icon_state = "sword[item_color]"
|
||||
set_light(brightness_on, l_color=colormap[item_color])
|
||||
w_class = w_class_on
|
||||
playsound(user, 'sound/magic/fellowship_armory.ogg', 35, TRUE, frequency = 90000 - (active * 30000))
|
||||
to_chat(user, "<span class='notice'>You open [src]. It will now cleave enemies in a wide arc and deal additional damage to fauna.</span>")
|
||||
else
|
||||
force = initial(force)
|
||||
throwforce = initial(throwforce)
|
||||
hitsound = initial(hitsound)
|
||||
throw_speed = initial(throw_speed)
|
||||
if(attack_verb_on.len)
|
||||
attack_verb = list()
|
||||
icon_state = initial(icon_state)
|
||||
w_class = initial(w_class)
|
||||
playsound(user, 'sound/magic/fellowship_armory.ogg', 35, 1) //changed it from 50% volume to 35% because deafness
|
||||
set_light(0)
|
||||
to_chat(user, "<span class='notice'>You close [src]. It will now attack rapidly and cause fauna to bleed.</span>")
|
||||
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.update_inv_l_hand()
|
||||
H.update_inv_r_hand()
|
||||
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/item/melee/energy/cleaving_saw/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>It is [active ? "open, will cleave enemies in a wide arc and deal additional damage to fauna":"closed, and can be used for rapid consecutive attacks that cause fauna to bleed"].<br>\
|
||||
Both modes will build up existing bleed effects, doing a burst of high damage if the bleed is built up high enough.<br>\
|
||||
Transforming it immediately after an attack causes the next attack to come out faster.</span>")
|
||||
|
||||
/obj/item/melee/energy/cleaving_saw/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is [active ? "closing [src] on [user.p_their()] neck" : "opening [src] into [user.p_their()] chest"]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
transform_cooldown = 0
|
||||
transform_weapon(user, TRUE)
|
||||
return BRUTELOSS
|
||||
|
||||
/obj/item/melee/energy/cleaving_saw/melee_attack_chain(mob/user, atom/target, params)
|
||||
..()
|
||||
if(!active)
|
||||
user.changeNext_move(CLICK_CD_MELEE * 0.5) //when closed, it attacks very rapidly
|
||||
|
||||
/obj/item/melee/energy/cleaving_saw/attack(mob/living/target, mob/living/carbon/human/user)
|
||||
if(!active || swiping || !target.density || get_turf(target) == get_turf(user))
|
||||
if(!active)
|
||||
faction_bonus_force = 0
|
||||
..()
|
||||
if(!active)
|
||||
faction_bonus_force = initial(faction_bonus_force)
|
||||
else
|
||||
var/turf/user_turf = get_turf(user)
|
||||
var/dir_to_target = get_dir(user_turf, get_turf(target))
|
||||
swiping = TRUE
|
||||
var/static/list/cleaving_saw_cleave_angles = list(0, -45, 45) //so that the animation animates towards the target clicked and not towards a side target
|
||||
for(var/i in cleaving_saw_cleave_angles)
|
||||
var/turf/T = get_step(user_turf, turn(dir_to_target, i))
|
||||
for(var/mob/living/L in T)
|
||||
if(user.Adjacent(L) && L.density)
|
||||
melee_attack_chain(user, L)
|
||||
swiping = FALSE
|
||||
@@ -67,4 +67,38 @@
|
||||
force = 10
|
||||
throwforce = 7
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
attack_verb = list("slashed", "stabbed", "sliced", "caned")
|
||||
attack_verb = list("slashed", "stabbed", "sliced", "caned")
|
||||
|
||||
/obj/item/melee/flyswatter
|
||||
name = "flyswatter"
|
||||
desc = "Useful for killing insects of all sizes."
|
||||
icon_state = "flyswatter"
|
||||
item_state = "flyswatter"
|
||||
force = 1
|
||||
throwforce = 1
|
||||
attack_verb = list("swatted", "smacked")
|
||||
hitsound = 'sound/effects/snap.ogg'
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
//Things in this list will be instantly splatted. Flyman weakness is handled in the flyman species weakness proc.
|
||||
var/list/strong_against
|
||||
|
||||
/obj/item/melee/flyswatter/Initialize(mapload)
|
||||
. = ..()
|
||||
strong_against = typecacheof(list(
|
||||
/mob/living/simple_animal/hostile/poison/bees/,
|
||||
/mob/living/simple_animal/butterfly,
|
||||
/mob/living/simple_animal/cockroach,
|
||||
/obj/item/queen_bee
|
||||
))
|
||||
|
||||
/obj/item/melee/flyswatter/afterattack(atom/target, mob/user, proximity_flag)
|
||||
. = ..()
|
||||
if(proximity_flag)
|
||||
if(is_type_in_typecache(target, strong_against))
|
||||
new /obj/effect/decal/cleanable/insectguts(target.drop_location())
|
||||
to_chat(user, "<span class='warning'>You easily splat the [target].</span>")
|
||||
if(istype(target, /mob/living/))
|
||||
var/mob/living/bug = target
|
||||
bug.death(1)
|
||||
else
|
||||
qdel(target)
|
||||
@@ -4,6 +4,9 @@
|
||||
|
||||
#define RPD_COOLDOWN_TIME 4 //How long should we have to wait between dispensing pipes?
|
||||
#define RPD_WALLBUILD_TIME 40 //How long should drilling into a wall take?
|
||||
#define RPD_MENU_ROTATE "Rotate pipes" //Stuff for radial menu
|
||||
#define RPD_MENU_FLIP "Flip pipes" //Stuff for radial menu
|
||||
#define RPD_MENU_DELETE "Delete pipes" //Stuff for radial menu
|
||||
|
||||
/obj/item/rpd
|
||||
name = "rapid pipe dispenser"
|
||||
@@ -172,6 +175,9 @@ var/list/pipemenu = list(
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
|
||||
/obj/item/rpd/AltClick(mob/user)
|
||||
radial_menu(user)
|
||||
|
||||
/obj/item/rpd/ui_data(mob/user, ui_key = "main", datum/topic_state/state = inventory_state)
|
||||
var/data[0]
|
||||
data["iconrotation"] = iconrotation
|
||||
@@ -200,6 +206,44 @@ var/list/pipemenu = list(
|
||||
return
|
||||
SSnanoui.update_uis(src)
|
||||
|
||||
//RPD radial menu
|
||||
|
||||
/obj/item/rpd/proc/check_menu(mob/living/user)
|
||||
if(!istype(user))
|
||||
return
|
||||
if(user.incapacitated())
|
||||
return
|
||||
if(loc != user)
|
||||
return
|
||||
return TRUE
|
||||
|
||||
/obj/item/rpd/proc/radial_menu(mob/user)
|
||||
if(!check_menu(user))
|
||||
to_chat(user, "<span class='notice'>You can't do that right now!</span>")
|
||||
return
|
||||
var/list/choices = list(
|
||||
RPD_MENU_ROTATE = image(icon = 'icons/obj/interface.dmi', icon_state = "rpd_rotate"),
|
||||
RPD_MENU_FLIP = image(icon = 'icons/obj/interface.dmi', icon_state = "rpd_flip"),
|
||||
RPD_MENU_DELETE = image(icon = 'icons/obj/interface.dmi', icon_state = "rpd_delete"),
|
||||
"UI" = image(icon = 'icons/obj/interface.dmi', icon_state = "ui_interact")
|
||||
)
|
||||
var/selected_mode = show_radial_menu(user, src, choices, custom_check = CALLBACK(src, .proc/check_menu, user))
|
||||
if(!check_menu(user))
|
||||
return
|
||||
if(selected_mode == "UI")
|
||||
ui_interact(user)
|
||||
else
|
||||
switch(selected_mode)
|
||||
if(RPD_MENU_ROTATE)
|
||||
mode = RPD_ROTATE_MODE
|
||||
if(RPD_MENU_FLIP)
|
||||
mode = RPD_FLIP_MODE
|
||||
if(RPD_MENU_DELETE)
|
||||
mode = RPD_DELETE_MODE
|
||||
else
|
||||
return //Either nothing was selected, or an invalid mode was selected
|
||||
to_chat(user, "<span class='notice'>You set [src]'s mode.</span>")
|
||||
|
||||
/obj/item/rpd/afterattack(atom/target, mob/user, proximity)
|
||||
..()
|
||||
if(loc != user)
|
||||
@@ -236,3 +280,6 @@ var/list/pipemenu = list(
|
||||
|
||||
#undef RPD_COOLDOWN_TIME
|
||||
#undef RPD_WALLBUILD_TIME
|
||||
#undef RPD_MENU_ROTATE
|
||||
#undef RPD_MENU_FLIP
|
||||
#undef RPD_MENU_DELETE
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
gender = PLURAL
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "soap"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
throwforce = 0
|
||||
throw_speed = 4
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
storage_slots = 21
|
||||
burn_state = FLAMMABLE
|
||||
burntime = 20
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/back.dmi'
|
||||
)
|
||||
@@ -52,6 +51,7 @@
|
||||
desc = "A backpack that opens into a localized pocket of Blue Space."
|
||||
origin_tech = "bluespace=5;materials=4;engineering=4;plasmatech=5"
|
||||
icon_state = "holdingpack"
|
||||
item_state = "holdingpack"
|
||||
max_w_class = WEIGHT_CLASS_HUGE
|
||||
max_combined_w_class = 35
|
||||
burn_state = FIRE_PROOF
|
||||
@@ -158,6 +158,12 @@
|
||||
item_state = "engiepack"
|
||||
burn_state = FIRE_PROOF
|
||||
|
||||
/obj/item/storage/backpack/explorer
|
||||
name = "explorer bag"
|
||||
desc = "A robust backpack for stashing your loot."
|
||||
icon_state = "explorerpack"
|
||||
item_state = "explorerpack"
|
||||
|
||||
/obj/item/storage/backpack/botany
|
||||
name = "botany backpack"
|
||||
desc = "It's a backpack made of all-natural fibers."
|
||||
@@ -235,6 +241,12 @@
|
||||
icon_state = "satchel-eng"
|
||||
burn_state = FIRE_PROOF
|
||||
|
||||
/obj/item/storage/backpack/satchel/explorer
|
||||
name = "explorer satchel"
|
||||
desc = "A robust satchel for stashing your loot."
|
||||
icon_state = "satchel-explorer"
|
||||
item_state = "securitypack"
|
||||
|
||||
/obj/item/storage/backpack/satchel_med
|
||||
name = "medical satchel"
|
||||
desc = "A sterile satchel used in medical departments."
|
||||
@@ -345,6 +357,21 @@
|
||||
new /obj/item/ammo_box/magazine/m12g/buckshot(src)
|
||||
new /obj/item/ammo_box/magazine/m12g/dragon(src)
|
||||
|
||||
/obj/item/storage/backpack/duffel/mining_conscript/noid
|
||||
name = "mining conscription kit"
|
||||
desc = "A kit containing everything a crewmember needs to support a shaft miner in the field."
|
||||
|
||||
/obj/item/storage/backpack/duffel/mining_conscript/noid/New()
|
||||
..()
|
||||
new /obj/item/pickaxe(src)
|
||||
new /obj/item/clothing/glasses/meson(src)
|
||||
new /obj/item/t_scanner/adv_mining_scanner/lesser(src)
|
||||
new /obj/item/storage/bag/ore(src)
|
||||
new /obj/item/clothing/under/rank/miner/lavaland(src)
|
||||
new /obj/item/encryptionkey/headset_cargo(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
|
||||
|
||||
/obj/item/storage/backpack/duffel/syndie/ammo/smg
|
||||
desc = "A large duffel bag, packed to the brim with C-20r magazines."
|
||||
|
||||
|
||||
@@ -385,7 +385,8 @@
|
||||
/obj/item/flashlight,
|
||||
/obj/item/reagent_containers/spray,
|
||||
/obj/item/soap,
|
||||
/obj/item/holosign_creator
|
||||
/obj/item/holosign_creator,
|
||||
/obj/item/melee/flyswatter,
|
||||
)
|
||||
|
||||
/obj/item/storage/belt/janitor/full/New()
|
||||
@@ -396,6 +397,7 @@
|
||||
new /obj/item/soap(src)
|
||||
new /obj/item/grenade/chem_grenade/cleaner(src)
|
||||
new /obj/item/grenade/chem_grenade/cleaner(src)
|
||||
new /obj/item/melee/flyswatter(src)
|
||||
update_icon()
|
||||
|
||||
/obj/item/storage/belt/lazarus
|
||||
@@ -723,3 +725,52 @@
|
||||
|
||||
new /obj/item/analyzer(src)
|
||||
new /obj/item/healthanalyzer(src)
|
||||
|
||||
/obj/item/storage/belt/mining
|
||||
name = "explorer's webbing"
|
||||
desc = "A versatile chest rig, cherished by miners and hunters alike."
|
||||
icon_state = "explorer1"
|
||||
item_state = "explorer1"
|
||||
storage_slots = 6
|
||||
max_w_class = WEIGHT_CLASS_BULKY
|
||||
use_item_overlays = 0
|
||||
can_hold = list(
|
||||
/obj/item/crowbar,
|
||||
/obj/item/screwdriver,
|
||||
/obj/item/weldingtool,
|
||||
/obj/item/wirecutters,
|
||||
/obj/item/wrench,
|
||||
/obj/item/multitool,
|
||||
/obj/item/flashlight,
|
||||
/obj/item/stack/cable_coil,
|
||||
/obj/item/analyzer,
|
||||
/obj/item/extinguisher/mini,
|
||||
/obj/item/radio,
|
||||
/obj/item/clothing/gloves,
|
||||
/obj/item/resonator,
|
||||
/obj/item/mining_scanner,
|
||||
/obj/item/pickaxe,
|
||||
/obj/item/stack/sheet/animalhide,
|
||||
/obj/item/stack/sheet/sinew,
|
||||
/obj/item/stack/sheet/bone,
|
||||
/obj/item/lighter,
|
||||
/obj/item/storage/fancy/cigarettes,
|
||||
/obj/item/reagent_containers/food/drinks/bottle,
|
||||
/obj/item/stack/medical,
|
||||
/obj/item/kitchen/knife,
|
||||
/obj/item/reagent_containers/hypospray,
|
||||
/obj/item/gps,
|
||||
/obj/item/storage/bag/ore,
|
||||
/obj/item/survivalcapsule,
|
||||
/obj/item/t_scanner/adv_mining_scanner,
|
||||
/obj/item/reagent_containers/food/pill,
|
||||
/obj/item/stack/ore,
|
||||
/obj/item/reagent_containers/food/drinks,
|
||||
/obj/item/organ/internal/hivelord_core,
|
||||
/obj/item/wormhole_jaunter,
|
||||
/obj/item/storage/bag/plants,
|
||||
/obj/item/stack/marker_beacon)
|
||||
|
||||
/obj/item/storage/belt/mining/New()
|
||||
..()
|
||||
new /obj/item/survivalcapsule(src)
|
||||
@@ -191,6 +191,15 @@
|
||||
new /obj/item/reagent_containers/glass/beaker( src )
|
||||
new /obj/item/reagent_containers/glass/beaker( src )
|
||||
|
||||
/obj/item/storage/box/beakers/bluespace
|
||||
name = "box of bluespace beakers"
|
||||
icon_state = "beaker"
|
||||
|
||||
/obj/item/storage/box/beakers/bluespace/New()
|
||||
..()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/reagent_containers/glass/beaker/bluespace(src)
|
||||
|
||||
/obj/item/storage/box/iv_bags
|
||||
name = "IV Bags"
|
||||
desc = "A box full of empty IV bags."
|
||||
@@ -536,6 +545,10 @@
|
||||
for(var/i in 1 to 5)
|
||||
new monkey_cube_type(src)
|
||||
|
||||
/obj/item/storage/box/monkeycubes/syndicate
|
||||
desc = "Waffle Co. brand monkey cubes. Just add water and a dash of subterfuge!"
|
||||
monkey_cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/syndicate
|
||||
|
||||
/obj/item/storage/box/monkeycubes/farwacubes
|
||||
name = "farwa cube box"
|
||||
desc = "Drymate brand farwa cubes. Just add water!"
|
||||
@@ -1044,6 +1057,56 @@
|
||||
new /obj/item/circuitboard/circuit_imprinter(src)
|
||||
new /obj/item/circuitboard/rdconsole/public(src)
|
||||
|
||||
/obj/item/storage/box/stockparts/basic //for ruins where it's a bad idea to give access to an autolathe/protolathe, but still want to make stock parts accessible
|
||||
name = "box of stock parts"
|
||||
desc = "Contains a variety of basic stock parts."
|
||||
|
||||
/obj/item/storage/box/stockparts/basic/New()
|
||||
..()
|
||||
for(var/i in 1 to 3)
|
||||
new /obj/item/stock_parts/capacitor(src)
|
||||
new /obj/item/stock_parts/scanning_module(src)
|
||||
new /obj/item/stock_parts/manipulator(src)
|
||||
new /obj/item/stock_parts/micro_laser(src)
|
||||
new /obj/item/stock_parts/matter_bin(src)
|
||||
|
||||
/obj/item/storage/box/stockparts/deluxe
|
||||
name = "box of deluxe stock parts"
|
||||
desc = "Contains a variety of deluxe stock parts."
|
||||
|
||||
/obj/item/storage/box/stockparts/deluxe/New()
|
||||
for(var/i in 1 to 3)
|
||||
new /obj/item/stock_parts/capacitor/quadratic(src)
|
||||
new /obj/item/stock_parts/scanning_module/triphasic(src)
|
||||
new /obj/item/stock_parts/manipulator/femto(src)
|
||||
new /obj/item/stock_parts/micro_laser/quadultra(src)
|
||||
new /obj/item/stock_parts/matter_bin/bluespace(src)
|
||||
|
||||
/obj/item/storage/box/mininghardsuit
|
||||
name = "Boxed Mining Hardsuit"
|
||||
desc = "Contains a mining hardsuit and helmet. For mining."
|
||||
|
||||
/obj/item/storage/box/mininghardsuit/New()
|
||||
..()
|
||||
new /obj/item/clothing/suit/space/hardsuit/mining(src)
|
||||
new /obj/item/clothing/head/helmet/space/hardsuit/mining(src)
|
||||
|
||||
/obj/item/storage/box/hug
|
||||
name = "box of hugs"
|
||||
desc = "A special box for sensitive people."
|
||||
icon_state = "hugbox"
|
||||
foldable = null
|
||||
|
||||
/obj/item/storage/box/hug/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] clamps the box of hugs on [user.p_their()] jugular! Guess it wasn't such a hugbox after all..</span>")
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/storage/box/hug/attack_self(mob/user)
|
||||
..()
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
playsound(loc, "rustle", 50, 1, -5)
|
||||
user.visible_message("<span class='notice'>[user] hugs \the [src].</span>","<span class='notice'>You hug \the [src].</span>")
|
||||
|
||||
#undef NODESIGN
|
||||
#undef NANOTRASEN
|
||||
#undef SYNDI
|
||||
|
||||
@@ -62,6 +62,7 @@
|
||||
/obj/item/storage/fancy/egg_box
|
||||
icon_state = "eggbox"
|
||||
icon_type = "egg"
|
||||
item_state = "eggbox"
|
||||
name = "egg box"
|
||||
storage_slots = 12
|
||||
can_hold = list(/obj/item/reagent_containers/food/snacks/egg)
|
||||
|
||||
@@ -1,112 +1,120 @@
|
||||
/obj/item/storage/box/syndicate/
|
||||
New()
|
||||
..()
|
||||
switch(pickweight(list("bloodyspai" = 1, "thief" = 1, "bond" = 1, "sabotage" = 1, "payday" = 1, "implant" = 1, "hacker" = 1, "darklord" = 1, "gadgets" = 1, "professional" = 1)))
|
||||
if("bloodyspai") // 28TC
|
||||
new /obj/item/twohanded/garrote(src)
|
||||
new /obj/item/pinpointer/advpinpointer(src)
|
||||
new /obj/item/clothing/mask/chameleon(src)
|
||||
new /obj/item/clothing/under/chameleon(src)
|
||||
new /obj/item/card/id/syndicate(src)
|
||||
new /obj/item/flashlight/emp(src)
|
||||
new /obj/item/storage/fancy/cigarettes/cigpack_syndicate(src)
|
||||
new /obj/item/clothing/glasses/hud/security/chameleon(src)
|
||||
new /obj/item/camera_bug(src)
|
||||
return
|
||||
/obj/item/storage/box/syndicate/New()
|
||||
..()
|
||||
switch(pickweight(list("bloodyspai" = 1, "thief" = 1, "bond" = 1, "sabotage" = 1, "payday" = 1, "implant" = 1, "hacker" = 1, "darklord" = 1, "professional" = 1)))
|
||||
if("bloodyspai") // 35TC + one 0TC
|
||||
new /obj/item/clothing/under/chameleon(src) // 2TC
|
||||
new /obj/item/clothing/mask/chameleon(src) // 0TC
|
||||
new /obj/item/card/id/syndicate(src) // 2TC
|
||||
new /obj/item/clothing/shoes/chameleon/noslip(src) // 2TC
|
||||
new /obj/item/camera_bug(src) // 1TC
|
||||
new /obj/item/multitool/ai_detect(src) // 1TC
|
||||
new /obj/item/encryptionkey/syndicate(src) // 2TC
|
||||
new /obj/item/twohanded/garrote(src) // 10TC
|
||||
new /obj/item/pinpointer/advpinpointer(src) // 4TC
|
||||
new /obj/item/storage/fancy/cigarettes/cigpack_syndicate(src) // 2TC
|
||||
new /obj/item/flashlight/emp(src) // 2TC
|
||||
new /obj/item/clothing/glasses/hud/security/chameleon(src) // 2TC
|
||||
new /obj/item/chameleon(src) // 8TC
|
||||
return
|
||||
|
||||
if("thief") // 30TC
|
||||
new /obj/item/gun/energy/kinetic_accelerator/crossbow(src)
|
||||
new /obj/item/chameleon(src)
|
||||
new /obj/item/clothing/gloves/color/black/thief(src)
|
||||
new /obj/item/card/id/syndicate(src)
|
||||
new /obj/item/clothing/shoes/chameleon/noslip(src)
|
||||
new /obj/item/storage/box/syndie_kit/safecracking(src)
|
||||
return
|
||||
if("thief") // 40TC
|
||||
new /obj/item/gun/energy/kinetic_accelerator/crossbow(src) // 12TC
|
||||
new /obj/item/chameleon(src) // 8TC
|
||||
new /obj/item/clothing/glasses/thermal/syndi(src) // 6TC
|
||||
new /obj/item/clothing/gloves/color/black/thief(src) // 6TC
|
||||
new /obj/item/card/id/syndicate(src) // 2TC
|
||||
new /obj/item/clothing/shoes/chameleon/noslip(src) // 2TC
|
||||
new /obj/item/storage/backpack/satchel_flat(src) // 2TC
|
||||
new /obj/item/encryptionkey/syndicate(src) // 2TC
|
||||
return
|
||||
|
||||
if("bond") // 29TC + Healing Cocktail + armored suit jacket
|
||||
new /obj/item/gun/projectile/automatic/pistol(src)
|
||||
new /obj/item/suppressor(src)
|
||||
new /obj/item/ammo_box/magazine/m10mm/hp(src)
|
||||
new /obj/item/ammo_box/magazine/m10mm/ap(src)
|
||||
new /obj/item/encryptionkey/syndicate(src)
|
||||
new /obj/item/reagent_containers/food/drinks/drinkingglass/alliescocktail(src) // This drink heals now
|
||||
new /obj/item/card/id/syndicate(src)
|
||||
new /obj/item/dnascrambler(src)
|
||||
new /obj/item/storage/box/syndie_kit/emp(src)
|
||||
new /obj/item/CQC_manual(src)
|
||||
new /obj/item/clothing/under/suit_jacket/really_black(src)
|
||||
new /obj/item/clothing/suit/storage/lawyer/blackjacket/armored(src)
|
||||
return
|
||||
if("bond") // 33TC + three 0TC
|
||||
new /obj/item/gun/projectile/automatic/pistol(src) // 4TC
|
||||
new /obj/item/suppressor(src) // 1TC
|
||||
new /obj/item/ammo_box/magazine/m10mm/hp(src) // 3TC
|
||||
new /obj/item/ammo_box/magazine/m10mm/ap(src) // 2TC
|
||||
new /obj/item/clothing/under/suit_jacket/really_black(src) // 0TC
|
||||
new /obj/item/card/id/syndicate(src) // 2TC
|
||||
new /obj/item/clothing/suit/storage/lawyer/blackjacket/armored(src) // 0TC
|
||||
new /obj/item/encryptionkey/syndicate(src) // 2TC
|
||||
new /obj/item/reagent_containers/food/drinks/drinkingglass/alliescocktail(src) // 0TC
|
||||
new /obj/item/dnascrambler(src) // 4TC
|
||||
new /obj/item/storage/box/syndie_kit/emp(src) // 2TC
|
||||
new /obj/item/CQC_manual(src) // 13TC
|
||||
return
|
||||
|
||||
if("sabotage") // 31TC + RCD + Insuls
|
||||
new /obj/item/powersink(src)
|
||||
new /obj/item/grenade/syndieminibomb(src)
|
||||
new /obj/item/card/emag(src)
|
||||
new /obj/item/grenade/clusterbuster/n2o(src)
|
||||
new /obj/item/clothing/gloves/color/yellow(src)
|
||||
new /obj/item/rcd/preloaded(src)
|
||||
new /obj/item/storage/box/syndie_kit/space(src)
|
||||
return
|
||||
if("sabotage") // 47TC + three 0TC
|
||||
new /obj/item/grenade/plastic/c4(src) // 1TC
|
||||
new /obj/item/grenade/plastic/c4(src) // 1TC
|
||||
new /obj/item/camera_bug(src) // 1TC
|
||||
new /obj/item/powersink(src) // 10TC
|
||||
new /obj/item/cartridge/syndicate(src) // 6TC
|
||||
new /obj/item/rcd/preloaded(src) // 0TC
|
||||
new /obj/item/card/emag(src) // 6TC
|
||||
new /obj/item/clothing/gloves/color/yellow(src) // 0TC
|
||||
new /obj/item/grenade/syndieminibomb(src) // 6TC
|
||||
new /obj/item/grenade/clusterbuster/n2o(src) // 0TC
|
||||
new /obj/item/storage/box/syndie_kit/space(src) // 4TC
|
||||
new /obj/item/encryptionkey/syndicate(src) // 2TC
|
||||
return
|
||||
|
||||
if("payday") // 31TC + armored suit jacket
|
||||
new /obj/item/gun/projectile/revolver(src)
|
||||
new /obj/item/ammo_box/a357(src)
|
||||
new /obj/item/ammo_box/a357(src)
|
||||
new /obj/item/card/emag(src)
|
||||
new /obj/item/grenade/plastic/c4(src)
|
||||
new /obj/item/card/id/syndicate(src)
|
||||
new /obj/item/clothing/under/suit_jacket/really_black(src)
|
||||
new /obj/item/clothing/suit/storage/lawyer/blackjacket/armored(src)
|
||||
new /obj/item/clothing/gloves/color/latex/nitrile(src)
|
||||
new /obj/item/clothing/mask/gas/clown_hat(src)
|
||||
new /obj/item/thermal_drill(src)
|
||||
return
|
||||
if("payday") // 33TC + four 0TC
|
||||
new /obj/item/gun/projectile/revolver(src) // 13TC
|
||||
new /obj/item/ammo_box/a357(src) // 3TC
|
||||
new /obj/item/ammo_box/a357(src) // 3TC
|
||||
new /obj/item/card/emag(src) // 6TC
|
||||
new /obj/item/grenade/plastic/c4(src) // 1TC
|
||||
new /obj/item/card/id/syndicate(src) // 2TC
|
||||
new /obj/item/clothing/under/suit_jacket/really_black(src) //0TC
|
||||
new /obj/item/clothing/suit/storage/lawyer/blackjacket/armored(src) //0TC
|
||||
new /obj/item/clothing/gloves/color/latex/nitrile(src) //0 TC
|
||||
new /obj/item/clothing/mask/gas/clown_hat(src) // 0TC
|
||||
new /obj/item/thermal_drill(src) // 3TC
|
||||
new /obj/item/encryptionkey/syndicate(src) // 2TC
|
||||
return
|
||||
|
||||
if("implant") // 35TC
|
||||
new /obj/item/implanter/uplink(src)
|
||||
new /obj/item/implanter/adrenalin(src)
|
||||
new /obj/item/implanter/storage(src)
|
||||
new /obj/item/implanter/freedom(src)
|
||||
return
|
||||
if("implant") // 39TC + ten free TC
|
||||
new /obj/item/implanter/freedom(src) // 5TC
|
||||
new /obj/item/implanter/uplink(src) // 14TC (ten free TC)
|
||||
new /obj/item/implanter/emp(src) // 0TC
|
||||
new /obj/item/implanter/adrenalin(src) // 8TC
|
||||
new /obj/item/implanter/explosive(src) // 2TC
|
||||
new /obj/item/implanter/storage(src) // 8TC
|
||||
new /obj/item/encryptionkey/syndicate(src) // 2TC
|
||||
return
|
||||
|
||||
if("hacker") // 22TC + Ion law uploader
|
||||
new /obj/item/aiModule/syndicate(src)
|
||||
new /obj/item/encryptionkey/binary(src)
|
||||
new /obj/item/encryptionkey/syndicate(src)
|
||||
new /obj/item/aiModule/toyAI(src)
|
||||
new /obj/item/card/emag(src)
|
||||
return
|
||||
if("hacker") // 30TC + one 0TC
|
||||
new /obj/item/aiModule/syndicate(src) // 12TC
|
||||
new /obj/item/card/emag(src) // 6TC
|
||||
new /obj/item/encryptionkey/syndicate(src) // 2TC
|
||||
new /obj/item/encryptionkey/binary(src) // 5TC
|
||||
new /obj/item/aiModule/toyAI(src) // 0TC
|
||||
new /obj/item/multitool/ai_detect(src) // 1TC
|
||||
new /obj/item/storage/box/syndie_kit/c4 // 4TC
|
||||
return
|
||||
|
||||
if("darklord") // 23TC + TK implant
|
||||
new /obj/item/melee/energy/sword/saber/red(src)
|
||||
new /obj/item/melee/energy/sword/saber/red(src)
|
||||
new /obj/item/dnainjector/telemut/darkbundle(src)
|
||||
new /obj/item/clothing/suit/hooded/chaplain_hoodie(src)
|
||||
new /obj/item/card/id/syndicate(src)
|
||||
new /obj/item/clothing/shoes/chameleon/noslip(src)
|
||||
new /obj/item/clothing/mask/chameleon(src)
|
||||
return
|
||||
if("darklord") // 22TC + two 0TC
|
||||
new /obj/item/melee/energy/sword/saber/red(src) // 8TC
|
||||
new /obj/item/melee/energy/sword/saber/red(src) // 8TC
|
||||
new /obj/item/dnainjector/telemut/darkbundle(src) // 0TC
|
||||
new /obj/item/clothing/suit/hooded/chaplain_hoodie(src) // 0TC
|
||||
new /obj/item/card/id/syndicate(src) // 2TC
|
||||
new /obj/item/clothing/shoes/chameleon/noslip(src) // 2TC
|
||||
new /obj/item/clothing/mask/chameleon(src) // 2TC
|
||||
new /obj/item/encryptionkey/syndicate(src) // 2TC
|
||||
return
|
||||
|
||||
if("gadgets") // 30TC
|
||||
new /obj/item/clothing/gloves/color/yellow/power(src)
|
||||
new /obj/item/pen/sleepy(src)
|
||||
new /obj/item/clothing/shoes/chameleon/noslip(src)
|
||||
new /obj/item/clothing/glasses/thermal/syndi(src)
|
||||
new /obj/item/flashlight/emp(src)
|
||||
new /obj/item/stamp/chameleon(src)
|
||||
new /obj/item/multitool/ai_detect(src)
|
||||
return
|
||||
|
||||
if("professional") // 29TC + armored suit jacket + insulated combat gloves
|
||||
new /obj/item/gun/projectile/automatic/sniper_rifle/soporific(src) // Unique version that starts with soporific rounds loaded and cannot be suppressed
|
||||
new /obj/item/ammo_box/magazine/sniper_rounds/soporific(src)
|
||||
new /obj/item/ammo_box/magazine/sniper_rounds/soporific(src)
|
||||
new /obj/item/pen/edagger(src)
|
||||
new /obj/item/clothing/glasses/thermal/syndi/sunglasses(src)
|
||||
new /obj/item/clothing/under/suit_jacket/really_black(src)
|
||||
new /obj/item/clothing/suit/storage/lawyer/blackjacket/armored(src)
|
||||
new /obj/item/clothing/gloves/combat(src)
|
||||
return
|
||||
if("professional") // 32 TC + two 0TC
|
||||
new /obj/item/gun/projectile/automatic/sniper_rifle/syndicate/penetrator(src) // 16TC
|
||||
new /obj/item/ammo_box/magazine/sniper_rounds/penetrator(src) // 5TC
|
||||
new /obj/item/ammo_box/magazine/sniper_rounds/soporific(src) // 3TC
|
||||
new /obj/item/clothing/glasses/thermal/syndi/sunglasses(src) // 6TC
|
||||
new /obj/item/clothing/gloves/combat(src) // 0 TC
|
||||
new /obj/item/clothing/under/suit_jacket/really_black(src) // 0 TC
|
||||
new /obj/item/clothing/suit/storage/lawyer/blackjacket/armored(src) // 0TC
|
||||
new /obj/item/pen/edagger(src) // 2TC
|
||||
new /obj/item/encryptionkey/syndicate(src) // 2TC
|
||||
return
|
||||
|
||||
/obj/item/storage/box/syndie_kit
|
||||
name = "Box"
|
||||
|
||||
@@ -20,6 +20,9 @@
|
||||
user.visible_message("<span class='suicide'>[user] is putting the live [name] in [user.p_their()] mouth! It looks like [user.p_theyre()] trying to commit suicide.</span>")
|
||||
return FIRELOSS
|
||||
|
||||
/obj/item/melee/baton/get_cell()
|
||||
return bcell
|
||||
|
||||
/obj/item/melee/baton/New()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
@@ -192,6 +192,15 @@
|
||||
var/obj/structure/grille/G = A
|
||||
G.take_damage(40, BRUTE, "melee", 0)
|
||||
|
||||
/obj/item/twohanded/fireaxe/boneaxe // Blatant imitation of the fireaxe, but made out of bone.
|
||||
icon_state = "bone_axe0"
|
||||
name = "bone axe"
|
||||
desc = "A large, vicious axe crafted out of several sharpened bone plates and crudely tied together. Made of monsters, by killing monsters, for killing monsters."
|
||||
force_wielded = 23
|
||||
|
||||
/obj/item/twohanded/fireaxe/boneaxe/update_icon()
|
||||
icon_state = "bone_axe[wielded]"
|
||||
|
||||
/*
|
||||
* Double-Bladed Energy Swords - Cheridan
|
||||
*/
|
||||
@@ -347,6 +356,19 @@
|
||||
explosive.prime()
|
||||
qdel(src)
|
||||
|
||||
/obj/item/twohanded/spear/bonespear //Blatant imitation of spear, but made out of bone. Not valid for explosive modification.
|
||||
icon_state = "bone_spear0"
|
||||
name = "bone spear"
|
||||
desc = "A haphazardly-constructed yet still deadly weapon. The pinnacle of modern technology."
|
||||
force = 11
|
||||
force_unwielded = 11
|
||||
force_wielded = 20 //I have no idea how to balance
|
||||
throwforce = 22
|
||||
armour_penetration = 15 //Enhanced armor piercing
|
||||
|
||||
/obj/item/twohanded/spear/bonespear/update_icon()
|
||||
icon_state = "bone_spear[wielded]"
|
||||
|
||||
//GREY TIDE
|
||||
/obj/item/twohanded/spear/grey_tide
|
||||
icon_state = "spearglass0"
|
||||
|
||||
@@ -87,6 +87,12 @@ LINEN BINS
|
||||
dream_messages = list("yellow")
|
||||
nightmare_messages = list("locker full of banana peels")
|
||||
|
||||
/obj/item/bedsheet/black
|
||||
icon_state = "sheetblack"
|
||||
item_color = "sheetblack"
|
||||
dream_messages = list("black")
|
||||
nightmare_messages = list("the void of space")
|
||||
|
||||
/obj/item/bedsheet/mime
|
||||
name = "mime's blanket"
|
||||
desc = "A very soothing striped blanket. All the noise just seems to fade out when you're under the covers in this."
|
||||
|
||||
@@ -76,6 +76,7 @@
|
||||
new /obj/item/radio/headset/headset_service(src)
|
||||
new /obj/item/cartridge/janitor(src)
|
||||
new /obj/item/flashlight(src)
|
||||
new /obj/item/melee/flyswatter(src)
|
||||
new /obj/item/clothing/shoes/galoshes(src)
|
||||
new /obj/item/soap(src)
|
||||
new /obj/item/caution(src)
|
||||
|
||||
@@ -28,17 +28,30 @@
|
||||
name = "kitchen cabinet"
|
||||
req_access = list(access_kitchen)
|
||||
|
||||
New()
|
||||
..()
|
||||
for(var/i in 1 to 3)
|
||||
new /obj/item/reagent_containers/food/condiment/flour(src)
|
||||
new /obj/item/reagent_containers/food/condiment/rice(src)
|
||||
new /obj/item/reagent_containers/food/condiment/sugar(src)
|
||||
/obj/structure/closet/secure_closet/freezer/kitchen/New()
|
||||
..()
|
||||
for(var/i in 1 to 3)
|
||||
new /obj/item/reagent_containers/food/condiment/flour(src)
|
||||
new /obj/item/reagent_containers/food/condiment/rice(src)
|
||||
new /obj/item/reagent_containers/food/condiment/sugar(src)
|
||||
|
||||
|
||||
/obj/structure/closet/secure_closet/freezer/kitchen/mining
|
||||
req_access = list()
|
||||
|
||||
/obj/structure/closet/secure_closet/freezer/kitchen/maintenance
|
||||
name = "maintenance refrigerator"
|
||||
desc = "This refrigerator looks quite dusty, is there anything edible still inside?"
|
||||
req_access = list()
|
||||
|
||||
/obj/structure/closet/secure_closet/freezer/kitchen/maintenance/New()
|
||||
..()
|
||||
for(var/i = 0, i < 5, i++)
|
||||
new /obj/item/reagent_containers/food/condiment/milk(src)
|
||||
for(var/i = 0, i < 5, i++)
|
||||
new /obj/item/reagent_containers/food/condiment/soymilk(src)
|
||||
for(var/i = 0, i < 2, i++)
|
||||
new /obj/item/storage/fancy/egg_box(src)
|
||||
|
||||
/obj/structure/closet/secure_closet/freezer/meat
|
||||
name = "meat fridge"
|
||||
@@ -54,6 +67,9 @@
|
||||
for(var/i in 1 to 4)
|
||||
new /obj/item/reagent_containers/food/snacks/meat/monkey(src)
|
||||
|
||||
/obj/structure/closet/secure_closet/freezer/meat/open
|
||||
req_access = null
|
||||
locked = FALSE
|
||||
|
||||
/obj/structure/closet/secure_closet/freezer/fridge
|
||||
name = "refrigerator"
|
||||
@@ -72,6 +88,9 @@
|
||||
for(var/i in 1 to 2)
|
||||
new /obj/item/storage/fancy/egg_box(src)
|
||||
|
||||
/obj/structure/closet/secure_closet/freezer/fridge/open
|
||||
req_access = null
|
||||
locked = FALSE
|
||||
|
||||
/obj/structure/closet/secure_closet/freezer/money
|
||||
name = "freezer"
|
||||
|
||||
@@ -19,6 +19,9 @@
|
||||
icon_closed = "emergency"
|
||||
icon_opened = "emergencyopen"
|
||||
|
||||
/obj/structure/closet/emcloset/anchored
|
||||
anchored = TRUE
|
||||
|
||||
/obj/structure/closet/emcloset/New()
|
||||
..()
|
||||
|
||||
|
||||
@@ -93,14 +93,14 @@ GLOBAL_LIST_INIT(captain_display_cases, list())
|
||||
icon = 'icons/obj/stationobjs.dmi'
|
||||
icon_state = "glassbox20"
|
||||
desc = "A display case for prized possessions. It taunts you to kick it."
|
||||
density = 1
|
||||
anchored = 1
|
||||
unacidable = 1 //Dissolving the case would also delete the contents.
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
unacidable = TRUE //Dissolving the case would also delete the contents.
|
||||
var/health = 30
|
||||
var/obj/item/occupant = null
|
||||
var/destroyed = 0
|
||||
var/locked = 0
|
||||
var/burglar_alarm = 0
|
||||
var/destroyed = FALSE
|
||||
var/locked = FALSE
|
||||
var/burglar_alarm = FALSE
|
||||
var/ue = null
|
||||
var/image/occupant_overlay = null
|
||||
var/obj/item/airlock_electronics/circuit
|
||||
@@ -116,8 +116,8 @@ GLOBAL_LIST_INIT(captain_display_cases, list())
|
||||
/obj/structure/displaycase/captains_laser
|
||||
name = "captain's display case"
|
||||
desc = "A display case for the captain's antique laser gun. Hooked up with an anti-theft system."
|
||||
burglar_alarm = 1
|
||||
locked = 1
|
||||
burglar_alarm = TRUE
|
||||
locked = TRUE
|
||||
req_access = list(access_captain)
|
||||
start_showpiece_type = /obj/item/gun/energy/laser/captain
|
||||
|
||||
@@ -205,7 +205,7 @@ GLOBAL_LIST_INIT(captain_display_cases, list())
|
||||
return
|
||||
|
||||
/obj/structure/displaycase/proc/burglar_alarm()
|
||||
if(burglar_alarm)
|
||||
if(burglar_alarm && is_station_contact(z))
|
||||
var/area/alarmed = get_area(src)
|
||||
alarmed.burglaralert(src)
|
||||
visible_message("<span class='danger'>The burglar alarm goes off!</span>")
|
||||
@@ -215,10 +215,10 @@ GLOBAL_LIST_INIT(captain_display_cases, list())
|
||||
sleep(74) // 7.4 seconds long
|
||||
|
||||
/obj/structure/displaycase/update_icon()
|
||||
if(src.destroyed)
|
||||
src.icon_state = "glassbox2b"
|
||||
if(destroyed)
|
||||
icon_state = "glassbox2b"
|
||||
else
|
||||
src.icon_state = "glassbox2[locked]"
|
||||
icon_state = "glassbox2[locked]"
|
||||
overlays = 0
|
||||
if(occupant)
|
||||
var/icon/occupant_icon=getFlatIcon(occupant)
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
//Fluff structures serve no purpose and exist only for enriching the environment. They can be destroyed with a wrench.
|
||||
|
||||
/obj/structure/fluff
|
||||
name = "fluff structure"
|
||||
desc = "Fluffier than a sheep. This shouldn't exist."
|
||||
icon = 'icons/obj/stationobjs.dmi'
|
||||
icon_state = "minibar"
|
||||
anchored = TRUE
|
||||
density = FALSE
|
||||
opacity = 0
|
||||
var/deconstructible = TRUE
|
||||
|
||||
/obj/structure/fluff/attackby(obj/item/I, mob/living/user, params)
|
||||
if(istype(I, /obj/item/wrench) && deconstructible)
|
||||
user.visible_message("<span class='notice'>[user] starts disassembling [src]...</span>", "<span class='notice'>You start disassembling [src]...</span>")
|
||||
playsound(loc, I.usesound, 50, 1)
|
||||
if(do_after(src, 50 * I.toolspeed, target = src))
|
||||
user.visible_message("<span class='notice'>[user] disassembles [src]!</span>", "<span class='notice'>You break down [src] into scrap metal.</span>")
|
||||
playsound(user, 'sound/items/deconstruct.ogg', 50, 1)
|
||||
new/obj/item/stack/sheet/metal(drop_location())
|
||||
qdel(src)
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/structure/fluff/empty_terrarium //Empty terrariums are created when a preserved terrarium in a lavaland seed vault is activated.
|
||||
name = "empty terrarium"
|
||||
desc = "An ancient machine that seems to be used for storing plant matter. Its hatch is ajar."
|
||||
icon = 'icons/obj/lavaland/spawners.dmi'
|
||||
icon_state = "terrarium_open"
|
||||
density = TRUE
|
||||
|
||||
/obj/structure/fluff/empty_sleeper //Empty sleepers are created by a good few ghost roles in lavaland.
|
||||
name = "empty sleeper"
|
||||
desc = "An open sleeper. It looks as though it would be awaiting another patient, were it not broken."
|
||||
icon = 'icons/obj/cryogenic2.dmi'
|
||||
icon_state = "sleeper-open"
|
||||
|
||||
/obj/structure/fluff/empty_sleeper/nanotrasen
|
||||
name = "broken hypersleep chamber"
|
||||
desc = "A Nanotrasen hypersleep chamber - this one appears broken. \
|
||||
There are exposed bolts for easy disassembly using a wrench."
|
||||
icon_state = "sleeper-o"
|
||||
|
||||
/obj/structure/fluff/empty_sleeper/syndicate
|
||||
icon_state = "sleeper_s-open"
|
||||
|
||||
/obj/structure/fluff/empty_cryostasis_sleeper //Empty cryostasis sleepers are created when a malfunctioning cryostasis sleeper in a lavaland shelter is activated
|
||||
name = "empty cryostasis sleeper"
|
||||
desc = "Although comfortable, this sleeper won't function as anything but a bed ever again."
|
||||
icon = 'icons/obj/lavaland/spawners.dmi'
|
||||
icon_state = "cryostasis_sleeper_open"
|
||||
|
||||
/obj/structure/fluff/drake_statue //Ash drake status spawn on either side of the necropolis gate in lavaland.
|
||||
name = "drake statue"
|
||||
desc = "A towering basalt sculpture of a proud and regal drake. Its eyes are six glowing gemstones."
|
||||
icon = 'icons/effects/64x64.dmi'
|
||||
icon_state = "drake_statue"
|
||||
pixel_x = -16
|
||||
density = TRUE
|
||||
deconstructible = FALSE
|
||||
layer = EDGED_TURF_LAYER
|
||||
|
||||
/obj/structure/fluff/drake_statue/falling //A variety of statue in disrepair; parts are broken off and a gemstone is missing
|
||||
desc = "A towering basalt sculpture of a drake. Cracks run down its surface and parts of it have fallen off."
|
||||
icon_state = "drake_statue_falling"
|
||||
@@ -1,87 +1,83 @@
|
||||
/obj/structure/lattice
|
||||
desc = "A lightweight support lattice."
|
||||
name = "lattice"
|
||||
icon = 'icons/obj/structures.dmi'
|
||||
icon_state = "latticefull"
|
||||
density = 0
|
||||
anchored = 1.0
|
||||
desc = "A lightweight support lattice."
|
||||
icon = 'icons/obj/smooth_structures/lattice.dmi'
|
||||
icon_state = "lattice"
|
||||
density = FALSE
|
||||
anchored = TRUE
|
||||
armor = list(melee = 50, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
layer = 2.3 //under pipes
|
||||
layer = LATTICE_LAYER //under pipes
|
||||
plane = FLOOR_PLANE
|
||||
// flags = CONDUCT
|
||||
var/number_of_rods = 1
|
||||
canSmoothWith = list(/obj/structure/lattice,
|
||||
/turf/simulated/floor,
|
||||
/turf/simulated/wall,
|
||||
/obj/structure/falsewall)
|
||||
smooth = SMOOTH_MORE
|
||||
|
||||
/obj/structure/lattice/New()
|
||||
..()
|
||||
if(!(istype(src.loc, /turf/space)))
|
||||
qdel(src)
|
||||
for(var/obj/structure/lattice/LAT in src.loc)
|
||||
/obj/structure/lattice/Initialize(mapload)
|
||||
. = ..()
|
||||
for(var/obj/structure/lattice/LAT in loc)
|
||||
if(LAT != src)
|
||||
qdel(LAT)
|
||||
icon = 'icons/obj/smoothlattice.dmi'
|
||||
icon_state = "latticeblank"
|
||||
updateOverlays()
|
||||
for(var/dir in cardinal)
|
||||
var/obj/structure/lattice/L
|
||||
if(locate(/obj/structure/lattice, get_step(src, dir)))
|
||||
L = locate(/obj/structure/lattice, get_step(src, dir))
|
||||
L.updateOverlays()
|
||||
QDEL_IN(LAT, 0)
|
||||
|
||||
/obj/structure/lattice/Destroy()
|
||||
for(var/dir in cardinal)
|
||||
var/obj/structure/lattice/L
|
||||
if(locate(/obj/structure/lattice, get_step(src, dir)))
|
||||
L = locate(/obj/structure/lattice, get_step(src, dir))
|
||||
L.updateOverlays(src.loc)
|
||||
return ..()
|
||||
/obj/structure/lattice/examine(mob/user)
|
||||
..()
|
||||
deconstruction_hints(user)
|
||||
|
||||
/obj/structure/lattice/proc/deconstruction_hints(mob/user)
|
||||
to_chat(user, "<span class='notice'>The rods look like they could be <b>cut</b>. There's space for more <i>rods</i> or a <i>tile</i>.</span>")
|
||||
|
||||
/obj/structure/lattice/attackby(obj/item/C, mob/user, params)
|
||||
if(resistance_flags & INDESTRUCTIBLE)
|
||||
return
|
||||
if(istype(C, /obj/item/wirecutters))
|
||||
to_chat(user, "<span class='notice'>Slicing [name] joints...</span>")
|
||||
deconstruct()
|
||||
else
|
||||
var/turf/T = get_turf(src)
|
||||
return T.attackby(C, user) //hand this off to the turf instead (for building plating, catwalks, etc)
|
||||
|
||||
/obj/structure/lattice/deconstruct(disassembled = TRUE)
|
||||
new /obj/item/stack/rods(get_turf(src), number_of_rods)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/lattice/blob_act()
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/structure/lattice/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
if(1)
|
||||
qdel(src)
|
||||
return
|
||||
if(2.0)
|
||||
if(2)
|
||||
qdel(src)
|
||||
if(3)
|
||||
return
|
||||
if(3.0)
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
/obj/structure/lattice/attackby(obj/item/C as obj, mob/user as mob, params)
|
||||
if(istype(C, /obj/item/stack/tile/plasteel) || istype(C, /obj/item/stack/rods))
|
||||
var/turf/T = get_turf(src)
|
||||
T.attackby(C, user) //BubbleWrap - hand this off to the underlying turf instead
|
||||
return
|
||||
if(istype(C, /obj/item/weldingtool))
|
||||
var/obj/item/weldingtool/WT = C
|
||||
if(WT.remove_fuel(0, user))
|
||||
to_chat(user, "<span class='notice'>Slicing lattice joints...</span>")
|
||||
new /obj/item/stack/rods(src.loc)
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/structure/lattice/proc/updateOverlays()
|
||||
//if(!(istype(src.loc, /turf/space)))
|
||||
// qdel(src)
|
||||
spawn(1)
|
||||
overlays = list()
|
||||
|
||||
var/dir_sum = 0
|
||||
|
||||
for(var/direction in cardinal)
|
||||
if(locate(/obj/structure/lattice, get_step(src, direction)))
|
||||
dir_sum += direction
|
||||
else
|
||||
if(!(istype(get_step(src, direction), /turf/space)))
|
||||
dir_sum += direction
|
||||
|
||||
icon_state = "lattice[dir_sum]"
|
||||
return
|
||||
|
||||
/obj/structure/lattice/singularity_pull(S, current_size)
|
||||
if(current_size >= STAGE_FOUR)
|
||||
qdel(src)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/lattice/catwalk
|
||||
name = "catwalk"
|
||||
desc = "A catwalk for easier EVA maneuvering and cable placement."
|
||||
icon = 'icons/obj/smooth_structures/catwalk.dmi'
|
||||
icon_state = "catwalk"
|
||||
number_of_rods = 2
|
||||
smooth = SMOOTH_TRUE
|
||||
canSmoothWith = null
|
||||
|
||||
/obj/structure/lattice/catwalk/deconstruction_hints(mob/user)
|
||||
to_chat(user, "<span class='notice'>The supporting rods look like they could be <b>cut</b>.</span>")
|
||||
|
||||
/obj/structure/lattice/catwalk/Move()
|
||||
var/turf/T = loc
|
||||
for(var/obj/structure/cable/C in T)
|
||||
C.deconstruct()
|
||||
..()
|
||||
|
||||
/obj/structure/lattice/catwalk/deconstruct()
|
||||
var/turf/T = loc
|
||||
for(var/obj/structure/cable/C in T)
|
||||
C.deconstruct()
|
||||
..()
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
|
||||
/obj/structure/mineral_door/Move()
|
||||
var/turf/T = loc
|
||||
..()
|
||||
. = ..()
|
||||
move_update_air(T)
|
||||
|
||||
/obj/structure/mineral_door/Bumped(atom/user)
|
||||
@@ -133,7 +133,7 @@
|
||||
if(istype(W, /obj/item/pickaxe))
|
||||
var/obj/item/pickaxe/digTool = W
|
||||
to_chat(user, "<span class='notice'>You start digging \the [src].</span>")
|
||||
if(do_after(user, digTool.digspeed * hardness, target = src) && src)
|
||||
if(do_after(user, 40 * digTool.toolspeed * hardness, target = src) && src)
|
||||
to_chat(user, "<span class='notice'>You finished digging.</span>")
|
||||
deconstruct(TRUE)
|
||||
else if(user.a_intent != INTENT_HARM)
|
||||
|
||||
@@ -106,6 +106,11 @@
|
||||
desc = "A warning sign which reads 'HARD VACUUM AHEAD'"
|
||||
icon_state = "space"
|
||||
|
||||
/obj/structure/sign/vacuum/external
|
||||
name = "\improper EXTERNAL AIRLOCK"
|
||||
desc = "A warning sign which reads 'EXTERNAL AIRLOCK'."
|
||||
layer = MOB_LAYER
|
||||
|
||||
/obj/structure/sign/deathsposal
|
||||
name = "\improper DISPOSAL LEADS TO SPACE"
|
||||
desc = "A warning sign which reads 'DISPOSAL LEADS TO SPACE'"
|
||||
@@ -131,6 +136,15 @@
|
||||
desc = "A warning sign which reads 'NO SMOKING'"
|
||||
icon_state = "nosmoking2"
|
||||
|
||||
/obj/structure/sign/radiation
|
||||
name = "\improper HAZARDOUS RADIATION"
|
||||
desc = "A warning sign alerting the user of potential radiation hazards."
|
||||
icon_state = "radiation"
|
||||
|
||||
/obj/structure/sign/radiation/rad_area
|
||||
name = "\improper RADIOACTIVE AREA"
|
||||
desc = "A warning sign which reads 'RADIOACTIVE AREA'."
|
||||
|
||||
/obj/structure/sign/redcross
|
||||
name = "medbay"
|
||||
desc = "The Intergalactic symbol of Medical institutions. You'll probably get help here.'"
|
||||
@@ -161,21 +175,6 @@
|
||||
desc = "A dead and stuffed Diona nymph, mounted on a board."
|
||||
icon_state = "kidanplaque"
|
||||
|
||||
/obj/structure/sign/science //These 3 have multiple types, just var-edit the icon_state to whatever one you want on the map
|
||||
name = "\improper SCIENCE!"
|
||||
desc = "A warning sign which reads 'SCIENCE!'"
|
||||
icon_state = "science1"
|
||||
|
||||
/obj/structure/sign/chemistry
|
||||
name = "\improper CHEMISTRY"
|
||||
desc = "A warning sign which reads 'CHEMISTRY'"
|
||||
icon_state = "chemistry1"
|
||||
|
||||
/obj/structure/sign/botany
|
||||
name = "\improper HYDROPONICS"
|
||||
desc = "A warning sign which reads 'HYDROPONICS'"
|
||||
icon_state = "hydro1"
|
||||
|
||||
/obj/structure/sign/mech
|
||||
name = "\improper mech painting"
|
||||
desc = "A painting of a mech"
|
||||
@@ -211,6 +210,74 @@
|
||||
desc = "A glowing dragon invites you in."
|
||||
icon_state = "chinese"
|
||||
|
||||
/obj/structure/sign/science
|
||||
name = "\improper SCIENCE!"
|
||||
desc = "A warning sign which reads 'SCIENCE!'"
|
||||
icon_state = "science1"
|
||||
|
||||
/obj/structure/sign/chemistry
|
||||
name = "\improper CHEMISTRY"
|
||||
desc = "A warning sign which reads 'CHEMISTRY'"
|
||||
icon_state = "chemistry1"
|
||||
|
||||
/obj/structure/sign/botany
|
||||
name = "\improper HYDROPONICS"
|
||||
desc = "A warning sign which reads 'HYDROPONICS'"
|
||||
icon_state = "hydro1"
|
||||
|
||||
/obj/structure/sign/xenobio
|
||||
name = "\improper XENOBIOLOGY"
|
||||
desc = "A sign labelling an area as a place where xenobiological entities are researched."
|
||||
icon_state = "xenobio"
|
||||
|
||||
/obj/structure/sign/evac
|
||||
name = "\improper EVACUATION"
|
||||
desc = "A sign labelling an area where evacuation procedures take place."
|
||||
icon_state = "evac"
|
||||
|
||||
/obj/structure/sign/drop
|
||||
name = "\improper DROP PODS"
|
||||
desc = "A sign labelling an area where drop pod loading procedures take place."
|
||||
icon_state = "drop"
|
||||
|
||||
/obj/structure/sign/custodian
|
||||
name = "\improper CUSTODIAN"
|
||||
desc = "A sign labelling an area where the custodian works."
|
||||
icon_state = "custodian"
|
||||
|
||||
/obj/structure/sign/engineering
|
||||
name = "\improper ENGINEERING"
|
||||
desc = "A sign labelling an area where engineers work."
|
||||
icon_state = "engine"
|
||||
|
||||
/obj/structure/sign/cargo
|
||||
name = "\improper CARGO"
|
||||
desc = "A sign labelling an area where cargo ships dock."
|
||||
icon_state = "cargo"
|
||||
|
||||
/obj/structure/sign/security
|
||||
name = "\improper SECURITY"
|
||||
desc = "A sign labelling an area where the law is law."
|
||||
icon_state = "security"
|
||||
|
||||
/obj/structure/sign/holy
|
||||
name = "\improper HOLY"
|
||||
desc = "A sign labelling a religious area."
|
||||
icon_state = "holy"
|
||||
|
||||
/obj/structure/sign/restroom
|
||||
name = "\improper RESTROOM"
|
||||
desc = "A sign labelling a restroom."
|
||||
icon_state = "restroom"
|
||||
|
||||
/obj/structure/sign/medbay
|
||||
name = "\improper MEDBAY"
|
||||
desc = "The Intergalactic symbol of Medical institutions. You'll probably get help here."
|
||||
icon_state = "bluecross"
|
||||
|
||||
/obj/structure/sign/medbay/alt
|
||||
icon_state = "bluecross2"
|
||||
|
||||
/obj/structure/sign/directions/science
|
||||
name = "\improper Research Division"
|
||||
desc = "A direction sign, pointing out which way the Research Division is."
|
||||
@@ -235,3 +302,18 @@
|
||||
name = "\improper Escape Arm"
|
||||
desc = "A direction sign, pointing out which way escape shuttle dock is."
|
||||
icon_state = "direction_evac"
|
||||
|
||||
/obj/structure/sign/directions/cargo
|
||||
name = "\improper Cargo Department"
|
||||
desc = "A direction sign, pointing out which way the Cargo department is."
|
||||
icon_state = "direction_supply"
|
||||
|
||||
/obj/structure/sign/explosives
|
||||
name = "\improper HIGH EXPLOSIVES"
|
||||
desc = "A warning sign which reads 'HIGH EXPLOSIVES'."
|
||||
icon_state = "explosives"
|
||||
|
||||
/obj/structure/sign/explosives/alt
|
||||
name = "\improper HIGH EXPLOSIVES"
|
||||
desc = "A warning sign which reads 'HIGH EXPLOSIVES'."
|
||||
icon_state = "explosives2"
|
||||
@@ -13,7 +13,7 @@
|
||||
return ..()
|
||||
|
||||
/obj/structure/target_stake/Move()
|
||||
..()
|
||||
. = ..()
|
||||
// Move the pinned target along with the stake
|
||||
if(pinned_target in view(3, src))
|
||||
pinned_target.loc = loc
|
||||
|
||||
@@ -600,7 +600,7 @@
|
||||
wateract = (W.wash(user, src))
|
||||
busy = 0
|
||||
if(wateract)
|
||||
W.water_act(20,310.15,src)
|
||||
W.water_act(20, 310.15, src)
|
||||
if("Disconnect")
|
||||
user.visible_message("<span class='notice'>[user] starts disconnecting [src].</span>", "<span class='notice'>You begin disconnecting [src]...</span>")
|
||||
if(do_after(user, 40 * O.toolspeed, target = src))
|
||||
@@ -633,7 +633,7 @@
|
||||
wateract = (O.wash(user, src))
|
||||
busy = 0
|
||||
if(wateract)
|
||||
O.water_act(20,310.15,src)
|
||||
O.water_act(20, 310.15, src)
|
||||
|
||||
/obj/structure/sink/update_icon()
|
||||
..()
|
||||
|
||||
@@ -46,7 +46,7 @@ obj/structure/windoor_assembly/Destroy()
|
||||
|
||||
/obj/structure/windoor_assembly/Move()
|
||||
var/turf/T = loc
|
||||
..()
|
||||
. = ..()
|
||||
setDir(ini_dir)
|
||||
move_update_air(T)
|
||||
|
||||
|
||||
@@ -431,7 +431,7 @@ var/global/wcCommon = pick(list("#379963", "#0d8395", "#58b5c3", "#49e46e", "#8f
|
||||
|
||||
/obj/structure/window/Move()
|
||||
var/turf/T = loc
|
||||
..()
|
||||
. = ..()
|
||||
setDir(ini_dir)
|
||||
move_update_air(T)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user