Merge branch 'master' into upstream-merge-31737
This commit is contained in:
@@ -221,8 +221,10 @@
|
||||
var/y_distance = TO.y - FROM.y
|
||||
var/x_distance = TO.x - FROM.x
|
||||
for (var/atom/movable/A in urange(12, FROM )) // iterate thru list of mobs in the area
|
||||
if(istype(A, /obj/item/device/radio/beacon)) continue // don't teleport beacons because that's just insanely stupid
|
||||
if(A.anchored) continue
|
||||
if(istype(A, /obj/item/device/radio/beacon))
|
||||
continue // don't teleport beacons because that's just insanely stupid
|
||||
if(A.anchored)
|
||||
continue
|
||||
|
||||
var/turf/newloc = locate(A.x + x_distance, A.y + y_distance, TO.z) // calculate the new place
|
||||
if(!A.Move(newloc) && newloc) // if the atom, for some reason, can't move, FORCE them to move! :) We try Move() first to invoke any movement-related checks the atom needs to perform after moving
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "We're leaving together\n\
|
||||
But still it's farewell\n\
|
||||
And maybe we'll come back\n\
|
||||
To earth, who can tell?"
|
||||
To Earth, who can tell?"
|
||||
|
||||
var/displayed_text
|
||||
var/atom/attached_to
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
/obj/effect/decal/HandleTurfChange(turf/T)
|
||||
..()
|
||||
if(T == loc && (isspaceturf(T) || isclosedturf(T) || islava(T) || istype(T, /turf/open/water) || istype(T, /turf/open/chasm)))
|
||||
if(T == loc && (isspaceturf(T) || isclosedturf(T) || islava(T) || istype(T, /turf/open/water) || ischasm(T)))
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/turf_decal
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
opacity = 0
|
||||
anchored = TRUE
|
||||
density = FALSE
|
||||
layer = WALL_OBJ_LAYER
|
||||
layer = EDGED_TURF_LAYER
|
||||
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
var/amount = 3
|
||||
animate_movement = 0
|
||||
@@ -216,6 +216,7 @@
|
||||
density = TRUE
|
||||
opacity = 1 // changed in New()
|
||||
anchored = TRUE
|
||||
layer = EDGED_TURF_LAYER
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
name = "foamed metal"
|
||||
desc = "A lightweight foamed metal wall."
|
||||
@@ -259,13 +260,12 @@
|
||||
|
||||
//Atmos Backpack Resin, transparent, prevents atmos and filters the air
|
||||
/obj/structure/foamedmetal/resin
|
||||
name = "ATMOS Resin"
|
||||
desc = "A lightweight, transparent resin used to suffocate fires, scrub the air of toxins, and restore the air to a safe temperature"
|
||||
name = "\improper ATMOS Resin"
|
||||
desc = "A lightweight, transparent resin used to suffocate fires, scrub the air of toxins, and restore the air to a safe temperature."
|
||||
opacity = FALSE
|
||||
icon_state = "atmos_resin"
|
||||
alpha = 120
|
||||
max_integrity = 10
|
||||
layer = EDGED_TURF_LAYER
|
||||
|
||||
/obj/structure/foamedmetal/resin/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -254,7 +254,7 @@
|
||||
..()
|
||||
GLOB.prisonwarp += loc
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
|
||||
/obj/effect/landmark/ert_spawn
|
||||
name = "Emergencyresponseteam"
|
||||
|
||||
@@ -310,7 +310,7 @@
|
||||
/obj/effect/landmark/servant_of_ratvar/Initialize(mapload)
|
||||
..()
|
||||
GLOB.servant_spawns += loc
|
||||
qdel(src)
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
//City of Cogs entrances
|
||||
/obj/effect/landmark/city_of_cogs
|
||||
@@ -320,7 +320,7 @@
|
||||
/obj/effect/landmark/city_of_cogs/Initialize(mapload)
|
||||
..()
|
||||
GLOB.city_of_cogs_spawns += loc
|
||||
qdel(src)
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
//generic event spawns
|
||||
/obj/effect/landmark/event_spawn
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/obj/structure/spider
|
||||
name = "web"
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
desc = "it's stringy and sticky"
|
||||
desc = "It's stringy and sticky."
|
||||
anchored = TRUE
|
||||
density = FALSE
|
||||
max_integrity = 15
|
||||
@@ -48,7 +48,7 @@
|
||||
|
||||
/obj/structure/spider/eggcluster
|
||||
name = "egg cluster"
|
||||
desc = "They seem to pulse slightly with an inner life"
|
||||
desc = "They seem to pulse slightly with an inner life."
|
||||
icon_state = "eggs"
|
||||
var/amount_grown = 0
|
||||
var/player_spiders = 0
|
||||
@@ -205,7 +205,7 @@
|
||||
|
||||
/obj/structure/spider/cocoon
|
||||
name = "cocoon"
|
||||
desc = "Something wrapped in silky spider web"
|
||||
desc = "Something wrapped in silky spider web."
|
||||
icon_state = "cocoon1"
|
||||
max_integrity = 60
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/proc/empulse(turf/epicenter, heavy_range, light_range, log=0)
|
||||
if(!epicenter) return
|
||||
if(!epicenter)
|
||||
return
|
||||
|
||||
if(!isturf(epicenter))
|
||||
epicenter = get_turf(epicenter.loc)
|
||||
|
||||
@@ -558,7 +558,8 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
..()
|
||||
if(current_size >= STAGE_FOUR)
|
||||
throw_at(S,14,3, spin=0)
|
||||
else return
|
||||
else
|
||||
return
|
||||
|
||||
/obj/item/throw_impact(atom/A)
|
||||
if(A && !QDELETED(A))
|
||||
|
||||
@@ -431,7 +431,7 @@ ARCD
|
||||
|
||||
/obj/item/construction/rcd/arcd
|
||||
name = "advanced rapid-construction-device (ARCD)"
|
||||
desc = "A prototype RCD with ranged capability and extended capacity"
|
||||
desc = "A prototype RCD with ranged capability and extended capacity."
|
||||
max_matter = 300
|
||||
matter = 300
|
||||
delay_mod = 0.6
|
||||
|
||||
@@ -30,10 +30,10 @@ RPD
|
||||
var/selected=0
|
||||
|
||||
/datum/pipe_info/New(pid,direction,dt)
|
||||
src.id=pid
|
||||
src.icon_state=GLOB.pipeID2State["[pid]"]
|
||||
src.dir = direction
|
||||
src.dirtype=dt
|
||||
id=pid
|
||||
icon_state=GLOB.pipeID2State["[pid]"]
|
||||
dir = direction
|
||||
dirtype=dt
|
||||
|
||||
/datum/pipe_info/proc/Render(dispenser,label)
|
||||
return "<li><a href='?src=\ref[dispenser];makepipe=[id];dir=[dir];type=[dirtype]'>[label]</a></li>"
|
||||
@@ -67,10 +67,10 @@ GLOBAL_LIST_INIT(disposalpipeID2State, list(
|
||||
icon_state = "meterX"
|
||||
|
||||
/datum/pipe_info/disposal/New(var/pid,var/dt)
|
||||
src.id=pid
|
||||
src.icon_state=GLOB.disposalpipeID2State[pid+1]
|
||||
src.dir = SOUTH
|
||||
src.dirtype=dt
|
||||
id=pid
|
||||
icon_state=GLOB.disposalpipeID2State[pid+1]
|
||||
dir = SOUTH
|
||||
dirtype=dt
|
||||
if(pid<DISP_END_BIN || pid>DISP_END_CHUTE)
|
||||
icon_state = "con[icon_state]"
|
||||
|
||||
@@ -80,13 +80,13 @@ GLOBAL_LIST_INIT(disposalpipeID2State, list(
|
||||
//find these defines in code\game\machinery\pipe\consruction.dm
|
||||
GLOBAL_LIST_INIT(RPD_recipes, list(
|
||||
"Pipes" = list(
|
||||
"Pipe" = new /datum/pipe_info(PIPE_SIMPLE, 1, PIPE_BENDABLE),
|
||||
//"Bent Pipe" = new /datum/pipe_info(PIPE_SIMPLE, 5, PIPE_BENT),
|
||||
"Manifold" = new /datum/pipe_info(PIPE_MANIFOLD, 1, PIPE_TRINARY),
|
||||
"Manual Valve" = new /datum/pipe_info(PIPE_MVALVE, 1, PIPE_BINARY),
|
||||
"Digital Valve" = new /datum/pipe_info(PIPE_DVALVE, 1, PIPE_BINARY),
|
||||
"4-Way Manifold" = new /datum/pipe_info(PIPE_4WAYMANIFOLD, 1, PIPE_QUAD),
|
||||
"Bluespace Pipe" = new /datum/pipe_info(PIPE_BLUESPACE, 1, PIPE_UNARY),
|
||||
"Pipe" = new /datum/pipe_info(PIPE_SIMPLE, 1, PIPE_BENDABLE),
|
||||
//"Bent Pipe" = new /datum/pipe_info(PIPE_SIMPLE, 5, PIPE_BENT),
|
||||
"Manifold" = new /datum/pipe_info(PIPE_MANIFOLD, 1, PIPE_TRINARY),
|
||||
"Manual Valve" = new /datum/pipe_info(PIPE_MVALVE, 1, PIPE_BINARY),
|
||||
"Digital Valve" = new /datum/pipe_info(PIPE_DVALVE, 1, PIPE_BINARY),
|
||||
"4-Way Manifold" = new /datum/pipe_info(PIPE_4WAYMANIFOLD, 1, PIPE_QUAD),
|
||||
"Layer Manifold" = new /datum/pipe_info(PIPE_LAYER_MANIFOLD, 1, PIPE_BINARY),
|
||||
),
|
||||
"Devices"=list(
|
||||
"Connector" = new /datum/pipe_info(PIPE_CONNECTOR, 1, PIPE_UNARY),
|
||||
@@ -153,6 +153,7 @@ GLOBAL_LIST_INIT(RPD_recipes, list(
|
||||
)
|
||||
var/paint_color="grey"
|
||||
var/screen = CATEGORY_ATMOS //Starts on the atmos tab.
|
||||
var/piping_layer = PIPING_LAYER_DEFAULT
|
||||
|
||||
/obj/item/pipe_dispenser/New()
|
||||
. = ..()
|
||||
@@ -201,6 +202,14 @@ GLOBAL_LIST_INIT(RPD_recipes, list(
|
||||
dat += "<span class='linkOn'>Atmospherics</span> <A href='?src=\ref[src];screen=[CATEGORY_DISPOSALS];dmake=0;type=0'>Disposals</A><BR>"
|
||||
else if(screen == CATEGORY_DISPOSALS)
|
||||
dat += "<A href='?src=\ref[src];screen=[CATEGORY_ATMOS];makepipe=0;dir=1;type=0'>Atmospherics</A> <span class='linkOn'>Disposals</span><BR>"
|
||||
var/generated_layer_list = ""
|
||||
var/layers_total = PIPING_LAYER_MAX - PIPING_LAYER_MIN + 1
|
||||
for(var/iter = PIPING_LAYER_MIN, iter <= layers_total, iter++)
|
||||
if(iter == piping_layer)
|
||||
generated_layer_list += "<span class='linkOn'><A href='?src=\ref[src];setlayer=[iter]'>[iter]</A></span>"
|
||||
else
|
||||
generated_layer_list += "<A href='?src=\ref[src];setlayer=[iter]'>[iter]</A>"
|
||||
dat += "Atmospherics Piping Layer: [generated_layer_list]<BR>"
|
||||
dat += "</ul>"
|
||||
|
||||
var/icon/preview=null
|
||||
@@ -459,7 +468,7 @@ GLOBAL_LIST_INIT(RPD_recipes, list(
|
||||
usr << browse(null, "window=pipedispenser")
|
||||
return
|
||||
usr.set_machine(src)
|
||||
src.add_fingerprint(usr)
|
||||
add_fingerprint(usr)
|
||||
if(href_list["screen"])
|
||||
screen = text2num(href_list["screen"])
|
||||
show_menu(usr)
|
||||
@@ -469,11 +478,18 @@ GLOBAL_LIST_INIT(RPD_recipes, list(
|
||||
p_flipped = text2num(href_list["flipped"])
|
||||
show_menu(usr)
|
||||
|
||||
if(href_list["setlayer"])
|
||||
if(!isnum(href_list["setlayer"]))
|
||||
piping_layer = text2num(href_list["setlayer"])
|
||||
else
|
||||
piping_layer = href_list["setlayer"]
|
||||
show_menu(usr)
|
||||
|
||||
if(href_list["eatpipes"])
|
||||
p_class = EATING_MODE
|
||||
p_conntype=-1
|
||||
p_dir=1
|
||||
src.spark_system.start()
|
||||
spark_system.start()
|
||||
playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0)
|
||||
show_menu(usr)
|
||||
|
||||
@@ -481,13 +497,13 @@ GLOBAL_LIST_INIT(RPD_recipes, list(
|
||||
p_class = PAINT_MODE
|
||||
p_conntype = -1
|
||||
p_dir = 1
|
||||
src.spark_system.start()
|
||||
spark_system.start()
|
||||
playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0)
|
||||
show_menu(usr)
|
||||
|
||||
if(href_list["set_color"])
|
||||
paint_color = href_list["set_color"]
|
||||
src.spark_system.start()
|
||||
spark_system.start()
|
||||
playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0)
|
||||
show_menu(usr)
|
||||
|
||||
@@ -496,7 +512,7 @@ GLOBAL_LIST_INIT(RPD_recipes, list(
|
||||
p_dir = text2num(href_list["dir"])
|
||||
p_conntype = text2num(href_list["type"])
|
||||
p_class = ATMOS_MODE
|
||||
src.spark_system.start()
|
||||
spark_system.start()
|
||||
playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0)
|
||||
show_menu(usr)
|
||||
|
||||
@@ -504,7 +520,7 @@ GLOBAL_LIST_INIT(RPD_recipes, list(
|
||||
p_class = METER_MODE
|
||||
p_conntype = -1
|
||||
p_dir = 1
|
||||
src.spark_system.start()
|
||||
spark_system.start()
|
||||
playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0)
|
||||
show_menu(usr)
|
||||
|
||||
@@ -513,7 +529,7 @@ GLOBAL_LIST_INIT(RPD_recipes, list(
|
||||
p_conntype = text2num(href_list["type"])
|
||||
p_dir = 1
|
||||
p_class = DISPOSALS_MODE
|
||||
src.spark_system.start()
|
||||
spark_system.start()
|
||||
playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0)
|
||||
show_menu(usr)
|
||||
|
||||
@@ -522,10 +538,18 @@ GLOBAL_LIST_INIT(RPD_recipes, list(
|
||||
if(!user.IsAdvancedToolUser() || istype(A, /turf/open/space/transit))
|
||||
return ..()
|
||||
|
||||
var/atmos_piping_mode = p_class == ATMOS_MODE || p_class == METER_MODE
|
||||
var/temp_piping_layer
|
||||
if(atmos_piping_mode)
|
||||
if(istype(A, /obj/machinery/atmospherics))
|
||||
var/obj/machinery/atmospherics/AM = A
|
||||
temp_piping_layer = AM.piping_layer
|
||||
A = get_turf(user)
|
||||
|
||||
//make sure what we're clicking is valid for the current mode
|
||||
var/is_paintable = (p_class == PAINT_MODE && istype(A, /obj/machinery/atmospherics/pipe))
|
||||
var/is_consumable = (p_class == EATING_MODE && (istype(A, /obj/item/pipe) || istype(A, /obj/item/pipe_meter) || istype(A, /obj/structure/disposalconstruct)))
|
||||
var/can_make_pipe = ((p_class == ATMOS_MODE || p_class == METER_MODE || p_class == DISPOSALS_MODE) && isturf(A))
|
||||
var/can_make_pipe = ((atmos_piping_mode || p_class == DISPOSALS_MODE) && isturf(A))
|
||||
|
||||
if(!is_paintable && !is_consumable && !can_make_pipe)
|
||||
return ..()
|
||||
@@ -540,10 +564,8 @@ GLOBAL_LIST_INIT(RPD_recipes, list(
|
||||
if(PAINT_MODE) //Paint pipes
|
||||
var/obj/machinery/atmospherics/pipe/P = A
|
||||
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
|
||||
P.add_atom_colour(paint_colors[paint_color], FIXED_COLOUR_PRIORITY)
|
||||
P.pipe_color = paint_colors[paint_color]
|
||||
P.paint(paint_colors[paint_color])
|
||||
user.visible_message("<span class='notice'>[user] paints \the [P] [paint_color].</span>","<span class='notice'>You paint \the [P] [paint_color].</span>")
|
||||
P.update_node_icon()
|
||||
return
|
||||
|
||||
if(EATING_MODE) //Eating pipes
|
||||
@@ -558,21 +580,29 @@ GLOBAL_LIST_INIT(RPD_recipes, list(
|
||||
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
|
||||
if(do_after(user, 2, target = A))
|
||||
activate()
|
||||
var/obj/item/pipe/P = new (A, pipe_type=queued_p_type, dir=queued_p_dir)
|
||||
var/obj/item/pipe/P = new(A, queued_p_type, queued_p_dir)
|
||||
P.flipped = queued_p_flipped
|
||||
P.update()
|
||||
P.add_fingerprint(usr)
|
||||
if(!isnull(temp_piping_layer))
|
||||
P.setPipingLayer(temp_piping_layer)
|
||||
else
|
||||
P.setPipingLayer(piping_layer)
|
||||
|
||||
if(METER_MODE) //Making pipe meters
|
||||
to_chat(user, "<span class='notice'>You start building a meter...</span>")
|
||||
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
|
||||
if(do_after(user, 2, target = A))
|
||||
activate()
|
||||
new /obj/item/pipe_meter(A)
|
||||
var/obj/item/pipe_meter/PM = new /obj/item/pipe_meter(A)
|
||||
if(!isnull(temp_piping_layer))
|
||||
PM.setAttachLayer(temp_piping_layer)
|
||||
else
|
||||
PM.setAttachLayer(piping_layer)
|
||||
|
||||
if(DISPOSALS_MODE) //Making disposals pipes
|
||||
if(isclosedturf(A))
|
||||
to_chat(user, "<span class='warning'>[src]'s error light flickers; there's something in the way!</span>")
|
||||
to_chat(user, "<span class='warning'>\the [src]'s error light flickers; there's something in the way!</span>")
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You start building a disposals pipe...</span>")
|
||||
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
// APC HULL
|
||||
/obj/item/wallframe/apc
|
||||
name = "\improper APC frame"
|
||||
desc = "Used for repairing or building APCs"
|
||||
desc = "Used for repairing or building APCs."
|
||||
icon_state = "apc"
|
||||
result_path = /obj/machinery/power/apc
|
||||
inverse = 1
|
||||
|
||||
@@ -224,7 +224,7 @@ update_label("John Doe", "Clowny")
|
||||
|
||||
/obj/item/card/id/centcom
|
||||
name = "\improper CentCom ID"
|
||||
desc = "An ID straight from Cent. Com."
|
||||
desc = "An ID straight from Central Command."
|
||||
icon_state = "centcom"
|
||||
registered_name = "Central Command"
|
||||
assignment = "General"
|
||||
@@ -235,7 +235,7 @@ update_label("John Doe", "Clowny")
|
||||
|
||||
/obj/item/card/id/ert
|
||||
name = "\improper CentCom ID"
|
||||
desc = "A ERT ID card"
|
||||
desc = "An ERT ID card."
|
||||
icon_state = "centcom"
|
||||
registered_name = "Emergency Response Team Commander"
|
||||
assignment = "Emergency Response Team Commander"
|
||||
@@ -351,6 +351,6 @@ update_label("John Doe", "Clowny")
|
||||
|
||||
/obj/item/card/id/away/old/apc
|
||||
name = "APC Access ID"
|
||||
desc = "Special ID card to allow access to APCs"
|
||||
desc = "Special ID card to allow access to APCs."
|
||||
icon_state = "centcom"
|
||||
access = list(ACCESS_ENGINE_EQUIP)
|
||||
access = list(ACCESS_ENGINE_EQUIP)
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
icon = 'icons/obj/wizard.dmi'
|
||||
icon_state = "scroll2"
|
||||
desc = "An official document entrusting the governance of the station \
|
||||
and surrounding space to the Captain. "
|
||||
and surrounding space to the Captain."
|
||||
var/used = FALSE
|
||||
var/name_type = "station"
|
||||
|
||||
|
||||
@@ -16,7 +16,8 @@
|
||||
to_chat(user, "<span class='notice'>You pet [src]. You swear it looks up at you.</span>")
|
||||
owner = user
|
||||
owned = 1
|
||||
else return ..()
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/toy/plush/carpplushie/dehy_carp/proc/Swell()
|
||||
desc = "It's growing!"
|
||||
|
||||
@@ -617,7 +617,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
P.show_recieved_message(msg,src)
|
||||
if(!multiple)
|
||||
show_to_ghosts(user,msg)
|
||||
log_talk(user,"[key_name(user)] (PDA: [initial(name)]) sent \"[message]\" to [key_name(P,null,TRUE)]",LOGPDA)
|
||||
log_talk(user,"[key_name(user)] (PDA: [initial(name)]) sent \"[message]\" to [P.name]",LOGPDA)
|
||||
else
|
||||
if(!multiple)
|
||||
to_chat(user, "<span class='notice'>ERROR: Server isn't responding.</span>")
|
||||
@@ -849,7 +849,8 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
user.show_message("<span class='notice'>No radiation detected.</span>")
|
||||
|
||||
/obj/item/device/pda/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity)
|
||||
if(!proximity) return
|
||||
if(!proximity)
|
||||
return
|
||||
switch(scanmode)
|
||||
|
||||
if(3)
|
||||
@@ -899,7 +900,8 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
|
||||
|
||||
/obj/item/device/pda/proc/explode() //This needs tuning.
|
||||
if(!detonatable) return
|
||||
if(!detonatable)
|
||||
return
|
||||
var/turf/T = get_turf(src)
|
||||
|
||||
if (ismob(loc))
|
||||
@@ -1011,5 +1013,6 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
. = list()
|
||||
// Returns a list of PDAs which can be viewed from another PDA/message monitor.
|
||||
for(var/obj/item/device/pda/P in GLOB.PDAs)
|
||||
if(!P.owner || P.toff || P.hidden) continue
|
||||
if(!P.owner || P.toff || P.hidden)
|
||||
continue
|
||||
. += P
|
||||
|
||||
@@ -202,7 +202,8 @@
|
||||
|
||||
var/datum/radio_frequency/frequency = SSradio.return_frequency(1435)
|
||||
|
||||
if(!frequency) return
|
||||
if(!frequency)
|
||||
return
|
||||
|
||||
var/datum/signal/status_signal = new
|
||||
status_signal.source = src
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
/obj/item/cartridge/virus/clown
|
||||
name = "\improper Honkworks 5.0 cartridge"
|
||||
icon_state = "cart-clown"
|
||||
desc = "A data cartridge for portable microcomputers. It smells vaguely of banannas"
|
||||
desc = "A data cartridge for portable microcomputers. It smells vaguely of bananas."
|
||||
access = CART_CLOWN
|
||||
|
||||
/obj/item/cartridge/virus/clown/send_virus(obj/item/device/pda/target, mob/living/U)
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
origin_tech = "syndicate=1;engineering=3"
|
||||
flags_1 = NOBLUDGEON_1
|
||||
flags_1 = NOBLUDGEON_1
|
||||
|
||||
var/obj/machinery/camera/current = null
|
||||
|
||||
@@ -124,7 +124,8 @@
|
||||
// 15 second intervals ~ 1/4 minute
|
||||
var/m = round(time_diff/4)
|
||||
var/s = (time_diff - 4*m) * 15
|
||||
if(!s) s = "00"
|
||||
if(!s)
|
||||
s = "00"
|
||||
html += "Last seen near [outstring] ([m]:[s] minute\s ago)<br>"
|
||||
if( C && (C.bug == src)) //Checks to see if the camera has a bug
|
||||
html += "<a href='?src=\ref[src];emp=\ref[C]'>\[Disable\]</a>"
|
||||
@@ -218,7 +219,7 @@
|
||||
var/list/cameras = flatten_list(bugged_cameras)
|
||||
var/obj/machinery/camera/C = locate(href_list["emp"]) in cameras
|
||||
if(C && istype(C) && C.bug == src)
|
||||
C.emp_act(EMP_HEAVY)
|
||||
C.emp_act(EMP_HEAVY)
|
||||
C.bug = null
|
||||
bugged_cameras -= C.c_tag
|
||||
interact()
|
||||
|
||||
@@ -32,7 +32,8 @@
|
||||
toggle()
|
||||
|
||||
/obj/item/device/chameleon/afterattack(atom/target, mob/user , proximity)
|
||||
if(!proximity) return
|
||||
if(!proximity)
|
||||
return
|
||||
if(!check_sprite(target))
|
||||
return
|
||||
if(!active_dummy)
|
||||
@@ -51,7 +52,8 @@
|
||||
return FALSE
|
||||
|
||||
/obj/item/device/chameleon/proc/toggle()
|
||||
if(!can_use || !saved_appearance) return
|
||||
if(!can_use || !saved_appearance)
|
||||
return
|
||||
if(active_dummy)
|
||||
eject_all()
|
||||
playsound(get_turf(src), 'sound/effects/pop.ogg', 100, 1, -6)
|
||||
|
||||
@@ -124,6 +124,8 @@ GLOBAL_LIST_EMPTY(GPS_list)
|
||||
a = copytext(sanitize(a), 1, 20)
|
||||
gpstag = a
|
||||
. = TRUE
|
||||
name = "global positioning system ([gpstag])"
|
||||
|
||||
if("power")
|
||||
toggletracking(usr)
|
||||
. = TRUE
|
||||
@@ -134,15 +136,6 @@ GLOBAL_LIST_EMPTY(GPS_list)
|
||||
global_mode = !global_mode
|
||||
. = TRUE
|
||||
|
||||
/obj/item/device/gps/Topic(href, href_list)
|
||||
..()
|
||||
if(href_list["tag"] )
|
||||
var/a = input("Please enter desired tag.", name, gpstag) as text
|
||||
a = uppertext(copytext(sanitize(a), 1, 5))
|
||||
if(in_range(src, usr))
|
||||
gpstag = a
|
||||
name = "global positioning system ([gpstag])"
|
||||
attack_self(usr)
|
||||
|
||||
/obj/item/device/gps/science
|
||||
icon_state = "gps-s"
|
||||
|
||||
@@ -192,7 +192,8 @@
|
||||
|
||||
if(target.status != LIGHT_OK)
|
||||
if(CanUse(U))
|
||||
if(!Use(U)) return
|
||||
if(!Use(U))
|
||||
return
|
||||
to_chat(U, "<span class='notice'>You replace the [target.fitting] with \the [src].</span>")
|
||||
|
||||
if(target.status != LIGHT_EMPTY)
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
name = "multitool"
|
||||
desc = "Used for pulsing wires to test which to cut. Not recommended by doctors."
|
||||
icon_state = "multitool"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
|
||||
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
|
||||
force = 5
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
throwforce = 0
|
||||
@@ -74,7 +74,7 @@
|
||||
break
|
||||
|
||||
/obj/item/device/multitool/ai_detect/admin
|
||||
desc = "Used for pulsing wires to test which to cut. Not recommended by doctors. Has a strange tag that says 'Grief in Safety'" //What else should I say for a meme item?
|
||||
desc = "Used for pulsing wires to test which to cut. Not recommended by doctors. Has a strange tag that says 'Grief in Safety'." //What else should I say for a meme item?
|
||||
track_delay = 5
|
||||
|
||||
/obj/item/device/multitool/ai_detect/admin/multitool_detect()
|
||||
@@ -98,4 +98,4 @@
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "multitool"
|
||||
toolspeed = 0.1
|
||||
origin_tech = "magnets=5;engineering=5;abductor=3"
|
||||
origin_tech = "magnets=5;engineering=5;abductor=3"
|
||||
|
||||
@@ -128,16 +128,26 @@
|
||||
if(pai)
|
||||
src.cut_overlays()
|
||||
switch(emotion)
|
||||
if(1) src.add_overlay("pai-happy")
|
||||
if(2) src.add_overlay("pai-cat")
|
||||
if(3) src.add_overlay("pai-extremely-happy")
|
||||
if(4) src.add_overlay("pai-face")
|
||||
if(5) src.add_overlay("pai-laugh")
|
||||
if(6) src.add_overlay("pai-off")
|
||||
if(7) src.add_overlay("pai-sad")
|
||||
if(8) src.add_overlay("pai-angry")
|
||||
if(9) src.add_overlay("pai-what")
|
||||
if(10) src.add_overlay("pai-null")
|
||||
if(1)
|
||||
src.add_overlay("pai-happy")
|
||||
if(2)
|
||||
src.add_overlay("pai-cat")
|
||||
if(3)
|
||||
src.add_overlay("pai-extremely-happy")
|
||||
if(4)
|
||||
src.add_overlay("pai-face")
|
||||
if(5)
|
||||
src.add_overlay("pai-laugh")
|
||||
if(6)
|
||||
src.add_overlay("pai-off")
|
||||
if(7)
|
||||
src.add_overlay("pai-sad")
|
||||
if(8)
|
||||
src.add_overlay("pai-angry")
|
||||
if(9)
|
||||
src.add_overlay("pai-what")
|
||||
if(10)
|
||||
src.add_overlay("pai-null")
|
||||
|
||||
/obj/item/device/paicard/proc/alertUpdate()
|
||||
visible_message("<span class ='info'>[src] flashes a message across its screen, \"Additional personalities available for download.\"", "<span class='notice'>[src] bleeps electronically.</span>")
|
||||
|
||||
@@ -122,11 +122,11 @@
|
||||
channels = list("Service" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/headset_cent
|
||||
name = "centcom radio encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the centcom channel, use :y."
|
||||
name = "\improper CentCom radio encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the CentCom channel, use :y."
|
||||
icon_state = "cent_cypherkey"
|
||||
independent = TRUE
|
||||
channels = list("CentCom" = 1)
|
||||
channels = list("CentCom" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/ai //ported from NT, this goes 'inside' the AI.
|
||||
channels = list("Command" = 1, "Security" = 1, "Engineering" = 1, "Science" = 1, "Medical" = 1, "Supply" = 1, "Service" = 1, "AI Private" = 1)
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
|
||||
/obj/item/device/radio/headset/syndicate/alt //undisguised bowman with flash protection
|
||||
name = "syndicate headset"
|
||||
desc = "A syndicate headset that can be used to hear all radio frequencies. Protects ears from flashbangs. \nTo access the syndicate channel, use ; before speaking."
|
||||
desc = "A syndicate headset that can be used to hear all radio frequencies. Protects ears from flashbangs.\nTo access the syndicate channel, use ; before speaking."
|
||||
origin_tech = "syndicate=3"
|
||||
icon_state = "syndie_headset"
|
||||
item_state = "syndie_headset"
|
||||
@@ -71,50 +71,50 @@
|
||||
|
||||
/obj/item/device/radio/headset/headset_sec
|
||||
name = "security radio headset"
|
||||
desc = "This is used by your elite security force. \nTo access the security channel, use :s."
|
||||
desc = "This is used by your elite security force.\nTo access the security channel, use :s."
|
||||
icon_state = "sec_headset"
|
||||
keyslot = new /obj/item/device/encryptionkey/headset_sec
|
||||
|
||||
/obj/item/device/radio/headset/headset_sec/alt
|
||||
name = "security bowman headset"
|
||||
desc = "This is used by your elite security force. Protects ears from flashbangs. \nTo access the security channel, use :s."
|
||||
desc = "This is used by your elite security force. Protects ears from flashbangs.\nTo access the security channel, use :s."
|
||||
icon_state = "sec_headset_alt"
|
||||
item_state = "sec_headset_alt"
|
||||
flags_2 = BANG_PROTECT_2
|
||||
|
||||
/obj/item/device/radio/headset/headset_eng
|
||||
name = "engineering radio headset"
|
||||
desc = "When the engineers wish to chat like girls. \nTo access the engineering channel, use :e. "
|
||||
desc = "When the engineers wish to chat like girls.\nTo access the engineering channel, use :e."
|
||||
icon_state = "eng_headset"
|
||||
keyslot = new /obj/item/device/encryptionkey/headset_eng
|
||||
|
||||
/obj/item/device/radio/headset/headset_rob
|
||||
name = "robotics radio headset"
|
||||
desc = "Made specifically for the roboticists, who cannot decide between departments. \nTo access the engineering channel, use :e. For research, use :n."
|
||||
desc = "Made specifically for the roboticists, who cannot decide between departments.\nTo access the engineering channel, use :e. For research, use :n."
|
||||
icon_state = "rob_headset"
|
||||
keyslot = new /obj/item/device/encryptionkey/headset_rob
|
||||
|
||||
/obj/item/device/radio/headset/headset_med
|
||||
name = "medical radio headset"
|
||||
desc = "A headset for the trained staff of the medbay. \nTo access the medical channel, use :m."
|
||||
desc = "A headset for the trained staff of the medbay.\nTo access the medical channel, use :m."
|
||||
icon_state = "med_headset"
|
||||
keyslot = new /obj/item/device/encryptionkey/headset_med
|
||||
|
||||
/obj/item/device/radio/headset/headset_sci
|
||||
name = "science radio headset"
|
||||
desc = "A sciency headset. Like usual. \nTo access the science channel, use :n."
|
||||
desc = "A sciency headset. Like usual.\nTo access the science channel, use :n."
|
||||
icon_state = "sci_headset"
|
||||
keyslot = new /obj/item/device/encryptionkey/headset_sci
|
||||
|
||||
/obj/item/device/radio/headset/headset_medsci
|
||||
name = "medical research radio headset"
|
||||
desc = "A headset that is a result of the mating between medical and science. \nTo access the medical channel, use :m. For science, use :n."
|
||||
desc = "A headset that is a result of the mating between medical and science.\nTo access the medical channel, use :m. For science, use :n."
|
||||
icon_state = "medsci_headset"
|
||||
keyslot = new /obj/item/device/encryptionkey/headset_medsci
|
||||
|
||||
/obj/item/device/radio/headset/headset_com
|
||||
name = "command radio headset"
|
||||
desc = "A headset with a commanding channel. \nTo access the command channel, use :c."
|
||||
desc = "A headset with a commanding channel.\nTo access the command channel, use :c."
|
||||
icon_state = "com_headset"
|
||||
keyslot = new /obj/item/device/encryptionkey/headset_com
|
||||
|
||||
@@ -123,75 +123,75 @@
|
||||
|
||||
/obj/item/device/radio/headset/heads/captain
|
||||
name = "\proper the captain's headset"
|
||||
desc = "The headset of the king. \nChannels are as follows: :c - command, :s - security, :e - engineering, :u - supply, :v - service, :m - medical, :n - science."
|
||||
desc = "The headset of the king.\nChannels are as follows: :c - command, :s - security, :e - engineering, :u - supply, :v - service, :m - medical, :n - science."
|
||||
icon_state = "com_headset"
|
||||
keyslot = new /obj/item/device/encryptionkey/heads/captain
|
||||
|
||||
/obj/item/device/radio/headset/heads/captain/alt
|
||||
name = "\proper the captain's bowman headset"
|
||||
desc = "The headset of the boss. Protects ears from flashbangs. \nChannels are as follows: :c - command, :s - security, :e - engineering, :u - supply, :v - service, :m - medical, :n - science."
|
||||
desc = "The headset of the boss. Protects ears from flashbangs.\nChannels are as follows: :c - command, :s - security, :e - engineering, :u - supply, :v - service, :m - medical, :n - science."
|
||||
icon_state = "com_headset_alt"
|
||||
item_state = "com_headset_alt"
|
||||
flags_2 = BANG_PROTECT_2
|
||||
|
||||
/obj/item/device/radio/headset/heads/rd
|
||||
name = "\proper the research director's headset"
|
||||
desc = "Headset of the fellow who keeps society marching towards technological singularity. \nTo access the science channel, use :n. For command, use :c."
|
||||
desc = "Headset of the fellow who keeps society marching towards technological singularity.\nTo access the science channel, use :n. For command, use :c."
|
||||
icon_state = "com_headset"
|
||||
keyslot = new /obj/item/device/encryptionkey/heads/rd
|
||||
|
||||
/obj/item/device/radio/headset/heads/hos
|
||||
name = "\proper the head of security's headset"
|
||||
desc = "The headset of the man in charge of keeping order and protecting the station. \nTo access the security channel, use :s. For command, use :c."
|
||||
desc = "The headset of the man in charge of keeping order and protecting the station.\nTo access the security channel, use :s. For command, use :c."
|
||||
icon_state = "com_headset"
|
||||
keyslot = new /obj/item/device/encryptionkey/heads/hos
|
||||
|
||||
/obj/item/device/radio/headset/heads/hos/alt
|
||||
name = "\proper the head of security's bowman headset"
|
||||
desc = "The headset of the man in charge of keeping order and protecting the station. Protects ears from flashbangs. \nTo access the security channel, use :s. For command, use :c."
|
||||
desc = "The headset of the man in charge of keeping order and protecting the station. Protects ears from flashbangs.\nTo access the security channel, use :s. For command, use :c."
|
||||
icon_state = "com_headset_alt"
|
||||
item_state = "com_headset_alt"
|
||||
flags_2 = BANG_PROTECT_2
|
||||
|
||||
/obj/item/device/radio/headset/heads/ce
|
||||
name = "\proper the chief engineer's headset"
|
||||
desc = "The headset of the guy in charge of keeping the station powered and undamaged. \nTo access the engineering channel, use :e. For command, use :c."
|
||||
desc = "The headset of the guy in charge of keeping the station powered and undamaged.\nTo access the engineering channel, use :e. For command, use :c."
|
||||
icon_state = "com_headset"
|
||||
keyslot = new /obj/item/device/encryptionkey/heads/ce
|
||||
|
||||
/obj/item/device/radio/headset/heads/cmo
|
||||
name = "\proper the chief medical officer's headset"
|
||||
desc = "The headset of the highly trained medical chief. \nTo access the medical channel, use :m. For command, use :c."
|
||||
desc = "The headset of the highly trained medical chief.\nTo access the medical channel, use :m. For command, use :c."
|
||||
icon_state = "com_headset"
|
||||
keyslot = new /obj/item/device/encryptionkey/heads/cmo
|
||||
|
||||
/obj/item/device/radio/headset/heads/hop
|
||||
name = "\proper the head of personnel's headset"
|
||||
desc = "The headset of the guy who will one day be captain. \nChannels are as follows: :u - supply, :v - service, :c - command."
|
||||
desc = "The headset of the guy who will one day be captain.\nChannels are as follows: :u - supply, :v - service, :c - command."
|
||||
icon_state = "com_headset"
|
||||
keyslot = new /obj/item/device/encryptionkey/heads/hop
|
||||
|
||||
/obj/item/device/radio/headset/headset_cargo
|
||||
name = "supply radio headset"
|
||||
desc = "A headset used by the QM and his slaves. \nTo access the supply channel, use :u."
|
||||
desc = "A headset used by the QM and his slaves.\nTo access the supply channel, use :u."
|
||||
icon_state = "cargo_headset"
|
||||
keyslot = new /obj/item/device/encryptionkey/headset_cargo
|
||||
|
||||
/obj/item/device/radio/headset/headset_cargo/mining
|
||||
name = "mining radio headset"
|
||||
desc = "Headset used by shaft miners. \nTo access the supply channel, use :u. For science, use :n."
|
||||
desc = "Headset used by shaft miners.\nTo access the supply channel, use :u. For science, use :n."
|
||||
icon_state = "mine_headset"
|
||||
keyslot = new /obj/item/device/encryptionkey/headset_mining
|
||||
|
||||
/obj/item/device/radio/headset/headset_srv
|
||||
name = "service radio headset"
|
||||
desc = "Headset used by the service staff, tasked with keeping the station full, happy and clean. \nTo access the service channel, use :v."
|
||||
desc = "Headset used by the service staff, tasked with keeping the station full, happy and clean.\nTo access the service channel, use :v."
|
||||
icon_state = "srv_headset"
|
||||
keyslot = new /obj/item/device/encryptionkey/headset_service
|
||||
|
||||
/obj/item/device/radio/headset/headset_cent
|
||||
name = "\improper CentCom headset"
|
||||
desc = "A headset used by the upper echelons of Nanotrasen. \nTo access the centcom channel, use :y."
|
||||
desc = "A headset used by the upper echelons of Nanotrasen.\nTo access the CentCom channel, use :y."
|
||||
icon_state = "cent_headset"
|
||||
keyslot = new /obj/item/device/encryptionkey/headset_com
|
||||
keyslot2 = new /obj/item/device/encryptionkey/headset_cent
|
||||
@@ -201,7 +201,7 @@
|
||||
|
||||
/obj/item/device/radio/headset/headset_cent/alt
|
||||
name = "\improper CentCom bowman headset"
|
||||
desc = "A headset especially for emergency response personnel. Protects ears from flashbangs. \nTo access the centcom channel, use :y."
|
||||
desc = "A headset especially for emergency response personnel. Protects ears from flashbangs.\nTo access the CentCom channel, use :y."
|
||||
icon_state = "cent_headset_alt"
|
||||
item_state = "cent_headset_alt"
|
||||
keyslot = null
|
||||
|
||||
@@ -195,9 +195,11 @@
|
||||
return ITALICS | REDUCE_RANGE
|
||||
|
||||
/obj/item/device/radio/proc/talk_into_impl(atom/movable/M, message, channel, list/spans, datum/language/language)
|
||||
if(!on) return // the device has to be on
|
||||
if(!on)
|
||||
return // the device has to be on
|
||||
// Fix for permacell radios, but kinda eh about actually fixing them.
|
||||
if(!M || !message) return
|
||||
if(!M || !message)
|
||||
return
|
||||
|
||||
if(wires.is_cut(WIRE_TX))
|
||||
return
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
item_state = "ttv"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/bombs_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/bombs_righthand.dmi'
|
||||
desc = "Regulates the transfer of air between two tanks"
|
||||
desc = "Regulates the transfer of air between two tanks."
|
||||
var/obj/item/tank/tank_one
|
||||
var/obj/item/tank/tank_two
|
||||
var/obj/item/device/assembly/attached_device
|
||||
|
||||
@@ -171,7 +171,7 @@
|
||||
|
||||
/obj/item/dnainjector/stuttmut
|
||||
name = "\improper DNA injector (Stutt.)"
|
||||
desc = "Makes you s-s-stuttterrr"
|
||||
desc = "Makes you s-s-stuttterrr."
|
||||
add_mutations_static = list(NERVOUS)
|
||||
|
||||
/obj/item/dnainjector/antistutt
|
||||
|
||||
@@ -157,19 +157,24 @@
|
||||
if(precision)
|
||||
the_targets -= my_target
|
||||
var/datum/reagents/R = new/datum/reagents(5)
|
||||
if(!W) return
|
||||
if(!W)
|
||||
return
|
||||
W.reagents = R
|
||||
R.my_atom = W
|
||||
if(!W || !src) return
|
||||
if(!W || !src)
|
||||
return
|
||||
src.reagents.trans_to(W,1)
|
||||
for(var/b=0, b<power, b++)
|
||||
step_towards(W,my_target)
|
||||
if(!W || !W.reagents) return
|
||||
if(!W || !W.reagents)
|
||||
return
|
||||
W.reagents.reaction(get_turf(W))
|
||||
for(var/A in get_turf(W))
|
||||
if(!W) return
|
||||
if(!W)
|
||||
return
|
||||
W.reagents.reaction(A)
|
||||
if(W.loc == my_target) break
|
||||
if(W.loc == my_target)
|
||||
break
|
||||
sleep(2)
|
||||
|
||||
else
|
||||
|
||||
@@ -529,7 +529,7 @@
|
||||
|
||||
/obj/item/grenade/chem_grenade/bioterrorfoam
|
||||
name = "Bio terror foam grenade"
|
||||
desc = "Tiger Cooperative chemical foam grenade. Causes temporary irration, blindness, confusion, mutism, and mutations to carbon based life forms. Contains additional spore toxin"
|
||||
desc = "Tiger Cooperative chemical foam grenade. Causes temporary irration, blindness, confusion, mutism, and mutations to carbon based life forms. Contains additional spore toxin."
|
||||
stage = READY
|
||||
|
||||
/obj/item/grenade/chem_grenade/bioterrorfoam/Initialize()
|
||||
|
||||
@@ -137,7 +137,7 @@
|
||||
message_say = "FOR THE HIVE!"
|
||||
else if(role == "cultist")
|
||||
message_say = "FOR NAR-SIE!"
|
||||
else if(role == "revolutionary" || role == "head revolutionary")
|
||||
else if(is_revolutionary(user))
|
||||
message_say = "VIVA LA REVOLUTION!"
|
||||
user.say(message_say)
|
||||
explosion(user,0,2,0) //Cheap explosion imitation because putting prime() here causes runtimes
|
||||
@@ -183,7 +183,7 @@
|
||||
message_say = "FOR THE HIVE!"
|
||||
else if(role == "cultist")
|
||||
message_say = "FOR NAR-SIE!"
|
||||
else if(role == "revolutionary" || role == "head revolutionary")
|
||||
else if(is_revolutionary(user))
|
||||
message_say = "VIVA LA REVOLUTION!"
|
||||
user.say(message_say)
|
||||
target = user
|
||||
|
||||
@@ -50,4 +50,4 @@
|
||||
for(var/mob/living/carbon/L in T)
|
||||
L.adjustStaminaLoss(stamina_damage)
|
||||
L.bodytemperature -= 230
|
||||
qdel(src)
|
||||
qdel(src)
|
||||
@@ -86,7 +86,7 @@
|
||||
|
||||
/obj/item/holosign_creator/cyborg
|
||||
name = "Energy Barrier Projector"
|
||||
desc = "A holographic projector that creates fragile energy fields"
|
||||
desc = "A holographic projector that creates fragile energy fields."
|
||||
creation_time = 15
|
||||
max_signs = 9
|
||||
holosign_type = /obj/structure/holosign/barrier/cyborg
|
||||
|
||||
@@ -52,6 +52,8 @@
|
||||
/obj/item/nullrod/godhand
|
||||
icon_state = "disintegrate"
|
||||
item_state = "disintegrate"
|
||||
lefthand_file = 'icons/mob/inhands/items_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/items_righthand.dmi'
|
||||
name = "god hand"
|
||||
desc = "This hand of yours glows with an awesome power!"
|
||||
flags_1 = ABSTRACT_1 | NODROP_1 | DROPDEL_1
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
/obj/item/implant/exile
|
||||
name = "exile implant"
|
||||
desc = "Prevents you from returning from away missions"
|
||||
desc = "Prevents you from returning from away missions."
|
||||
origin_tech = "materials=2;biotech=3;magnets=2;bluespace=3"
|
||||
activated = 0
|
||||
|
||||
|
||||
@@ -19,14 +19,18 @@
|
||||
|
||||
/obj/item/implant/mindshield/implant(mob/living/target, mob/user, silent = 0)
|
||||
if(..())
|
||||
if((target.mind in (SSticker.mode.head_revolutionaries)) || target.mind.unconvertable)
|
||||
if(!target.mind)
|
||||
return TRUE
|
||||
if(target.mind.has_antag_datum(/datum/antagonist/rev/head) || target.mind.unconvertable)
|
||||
if(!silent)
|
||||
target.visible_message("<span class='warning'>[target] seems to resist the implant!</span>", "<span class='warning'>You feel something interfering with your mental conditioning, but you resist it!</span>")
|
||||
removed(target, 1)
|
||||
qdel(src)
|
||||
return FALSE
|
||||
if(target.mind in SSticker.mode.revolutionaries)
|
||||
SSticker.mode.remove_revolutionary(target.mind, FALSE, user)
|
||||
|
||||
var/datum/antagonist/rev/rev = target.mind.has_antag_datum(/datum/antagonist/rev)
|
||||
if(rev)
|
||||
rev.remove_revolutionary(FALSE, user)
|
||||
if(!silent)
|
||||
if(target.mind in SSticker.mode.cult)
|
||||
to_chat(target, "<span class='warning'>You feel something interfering with your mental conditioning, but you resist it!</span>")
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/item/implant/weapons_auth
|
||||
name = "firearms authentication implant"
|
||||
desc = "Lets you shoot your guns"
|
||||
desc = "Lets you shoot your guns."
|
||||
icon_state = "auth"
|
||||
origin_tech = "magnets=2;programming=7;biotech=5;syndicate=5"
|
||||
activated = 0
|
||||
|
||||
@@ -151,7 +151,7 @@
|
||||
|
||||
/obj/machinery/implantchair/genepurge
|
||||
name = "Genetic purifier"
|
||||
desc = "Used to purge human genome of foreign influences"
|
||||
desc = "Used to purge a human genome of foreign influences."
|
||||
special = TRUE
|
||||
special_name = "Purge genome"
|
||||
injection_cooldown = 0
|
||||
|
||||
@@ -35,7 +35,8 @@
|
||||
|
||||
|
||||
/obj/item/mop/afterattack(atom/A, mob/user, proximity)
|
||||
if(!proximity) return
|
||||
if(!proximity)
|
||||
return
|
||||
|
||||
if(reagents.total_volume < 1)
|
||||
to_chat(user, "<span class='warning'>Your mop is dry!</span>")
|
||||
|
||||
@@ -79,7 +79,8 @@
|
||||
|
||||
|
||||
/obj/item/paint/afterattack(turf/target, mob/user, proximity)
|
||||
if(!proximity) return
|
||||
if(!proximity)
|
||||
return
|
||||
if(paintleft <= 0)
|
||||
icon_state = "paint_empty"
|
||||
return
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/item/toy/plush
|
||||
name = "plush"
|
||||
desc = "this is the special coder plush, do not steal"
|
||||
desc = "This is the special coder plush, do not steal."
|
||||
icon = 'icons/obj/plushes.dmi'
|
||||
icon_state = "debug"
|
||||
attack_verb = list("thumped", "whomped", "bumped")
|
||||
|
||||
@@ -223,7 +223,7 @@
|
||||
|
||||
/obj/item/pneumatic_cannon/pie
|
||||
name = "pie cannon"
|
||||
desc = "Load cream pie for optimal results"
|
||||
desc = "Load cream pie for optimal results."
|
||||
force = 10
|
||||
icon_state = "piecannon"
|
||||
gasPerThrow = 0
|
||||
|
||||
@@ -207,7 +207,7 @@
|
||||
name = "blue banner"
|
||||
icon_state = "banner-blue"
|
||||
item_state = "banner-blue"
|
||||
desc = "A banner with the logo of the blue deity"
|
||||
desc = "A banner with the logo of the blue deity."
|
||||
|
||||
/obj/item/storage/backpack/bannerpack
|
||||
name = "nanotrasen banner backpack"
|
||||
|
||||
@@ -684,4 +684,4 @@
|
||||
/obj/item/borg/sight/hud/sec/New()
|
||||
..()
|
||||
hud = new /obj/item/clothing/glasses/hud/security(src)
|
||||
return
|
||||
return
|
||||
@@ -172,7 +172,7 @@
|
||||
|
||||
/obj/item/borg/upgrade/syndicate
|
||||
name = "illegal equipment module"
|
||||
desc = "Unlocks the hidden, deadlier functions of a cyborg"
|
||||
desc = "Unlocks the hidden, deadlier functions of a cyborg."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
require_module = 1
|
||||
origin_tech = "combat=4;syndicate=1"
|
||||
|
||||
@@ -58,7 +58,8 @@
|
||||
return
|
||||
|
||||
/obj/item/twohanded/singularityhammer/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity)
|
||||
if(!proximity) return
|
||||
if(!proximity)
|
||||
return
|
||||
if(wielded)
|
||||
if(charged == 5)
|
||||
charged = 0
|
||||
|
||||
@@ -256,6 +256,18 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \
|
||||
/obj/item/stack/sheet/cardboard/fifty
|
||||
amount = 50
|
||||
|
||||
/obj/item/stack/sheet/cardboard/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/stamp/clown) && !istype(loc, /obj/item/storage))
|
||||
var/atom/droploc = drop_location()
|
||||
if(use(1))
|
||||
playsound(I, 'sound/items/bikehorn.ogg', 50, 1, -1)
|
||||
to_chat(user, "<span class='notice'>You stamp the cardboard! Its a clown box! Honk!</span>")
|
||||
if (amount >= 0)
|
||||
new/obj/item/storage/box/clown(droploc) //bugfix
|
||||
else
|
||||
. = ..()
|
||||
|
||||
|
||||
/*
|
||||
* Runed Metal
|
||||
*/
|
||||
|
||||
@@ -136,7 +136,8 @@
|
||||
if (usr.restrained() || usr.stat || usr.get_active_held_item() != src)
|
||||
return
|
||||
if (href_list["make"])
|
||||
if (get_amount() < 1) qdel(src) //Never should happen
|
||||
if (get_amount() < 1)
|
||||
qdel(src) //Never should happen
|
||||
|
||||
var/datum/stack_recipe/R = recipes[text2num(href_list["make"])]
|
||||
var/multiplier = text2num(href_list["multiplier"])
|
||||
@@ -296,7 +297,7 @@
|
||||
|
||||
|
||||
/obj/item/stack/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, merge_type))
|
||||
if(istype(W, merge_type) && amount < max_amount)
|
||||
var/obj/item/stack/S = W
|
||||
merge(S)
|
||||
to_chat(user, "<span class='notice'>Your [S.name] stack now contains [S.get_amount()] [S.singular_name]\s.</span>")
|
||||
|
||||
@@ -309,7 +309,7 @@
|
||||
/obj/item/storage/backpack/satchel/flat/secret/Initialize()
|
||||
. = ..()
|
||||
|
||||
if(isfloorturf(loc) && !istype(loc, /turf/open/floor/plating/))
|
||||
if(isfloorturf(loc) && !isplatingturf(loc))
|
||||
hide(1)
|
||||
|
||||
/obj/item/storage/backpack/satchel/flat/secret/hide(intact)
|
||||
@@ -518,7 +518,7 @@
|
||||
new /obj/item/ammo_box/foambox/riot(src)
|
||||
|
||||
/obj/item/storage/backpack/duffelbag/syndie/med/bioterrorbundle
|
||||
desc = "A large duffel bag containing a deadly chemicals, a chemical spray, chemical grenade, a Donksoft assault rifle, riot grade darts, a minature syringe gun, and a box of syringes"
|
||||
desc = "A large duffel bag containing a deadly chemicals, a chemical spray, chemical grenade, a Donksoft assault rifle, riot grade darts, a minature syringe gun, and a box of syringes."
|
||||
|
||||
/obj/item/storage/backpack/duffelbag/syndie/med/bioterrorbundle/PopulateContents()
|
||||
new /obj/item/reagent_containers/spray/chemsprayer/bioterror(src)
|
||||
|
||||
@@ -173,7 +173,8 @@
|
||||
// Modified handle_item_insertion. Would prefer not to, but...
|
||||
/obj/item/storage/bag/sheetsnatcher/handle_item_insertion(obj/item/W, prevent_warning = 0)
|
||||
var/obj/item/stack/sheet/S = W
|
||||
if(!istype(S)) return 0
|
||||
if(!istype(S))
|
||||
return 0
|
||||
|
||||
var/amount
|
||||
var/inserted = 0
|
||||
@@ -254,7 +255,8 @@
|
||||
// Instead of removing
|
||||
/obj/item/storage/bag/sheetsnatcher/remove_from_storage(obj/item/W, atom/new_location)
|
||||
var/obj/item/stack/sheet/S = W
|
||||
if(!istype(S)) return 0
|
||||
if(!istype(S))
|
||||
return 0
|
||||
|
||||
//I would prefer to drop a new stack, but the item/attack_hand code
|
||||
// that calls this can't recieve a different object than you clicked on.
|
||||
|
||||
@@ -250,7 +250,7 @@
|
||||
|
||||
/obj/item/storage/belt/soulstone
|
||||
name = "soul stone belt"
|
||||
desc = "Designed for ease of access to the shards during a fight, as to not let a single enemy spirit slip away"
|
||||
desc = "Designed for ease of access to the shards during a fight, as to not let a single enemy spirit slip away."
|
||||
icon_state = "soulstonebelt"
|
||||
item_state = "soulstonebelt"
|
||||
storage_slots = 6
|
||||
|
||||
@@ -607,6 +607,29 @@
|
||||
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>")
|
||||
|
||||
/////clown box & honkbot assembly
|
||||
obj/item/storage/box/clown
|
||||
name = "clown box"
|
||||
desc = "A colorful cardboard box for the clown"
|
||||
icon_state = "clownbox"
|
||||
illustration = null
|
||||
|
||||
/obj/item/storage/box/clown/attackby(obj/item/I, mob/user, params)
|
||||
if((istype(I, /obj/item/bodypart/l_arm/robot)) || (istype(I, /obj/item/bodypart/r_arm/robot)))
|
||||
if(contents.len) //prevent accidently deleting contents
|
||||
to_chat(user, "<span class='warning'>You need to empty [src] out first!</span>")
|
||||
return
|
||||
if(!user.temporarilyRemoveItemFromInventory(I))
|
||||
return
|
||||
qdel(I)
|
||||
to_chat(user, "<span class='notice'>You add some wheels to the [src]! You've got an honkbot assembly now! Honk!</span>")
|
||||
var/obj/item/honkbot_assembly/A = new
|
||||
qdel(src)
|
||||
user.put_in_hands(A)
|
||||
else
|
||||
return ..()
|
||||
|
||||
//////
|
||||
/obj/item/storage/box/hug/medical/PopulateContents()
|
||||
new /obj/item/stack/medical/bruise_pack(src)
|
||||
new /obj/item/stack/medical/ointment(src)
|
||||
@@ -730,7 +753,7 @@
|
||||
/obj/item/storage/box/ingredients //This box is for the randomely chosen version the chef spawns with, it shouldn't actually exist.
|
||||
name = "ingredients box"
|
||||
illustration = "fruit"
|
||||
var/theme_name
|
||||
var/theme_name
|
||||
|
||||
/obj/item/storage/box/ingredients/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -27,10 +27,9 @@
|
||||
for(var/i = 1 to storage_slots)
|
||||
new spawn_type(src)
|
||||
|
||||
/obj/item/storage/fancy/update_icon(itemremoved = 0)
|
||||
/obj/item/storage/fancy/update_icon()
|
||||
if(fancy_open)
|
||||
var/total_contents = src.contents.len - itemremoved
|
||||
icon_state = "[icon_type]box[total_contents]"
|
||||
icon_state = "[icon_type]box[contents.len]"
|
||||
else
|
||||
icon_state = "[icon_type]box"
|
||||
|
||||
@@ -38,9 +37,9 @@
|
||||
..()
|
||||
if(fancy_open)
|
||||
if(contents.len == 1)
|
||||
to_chat(user, "There is one [src.icon_type] left.")
|
||||
to_chat(user, "There is one [icon_type] left.")
|
||||
else
|
||||
to_chat(user, "There are [contents.len <= 0 ? "no" : "[src.contents.len]"] [src.icon_type]s left.")
|
||||
to_chat(user, "There are [contents.len <= 0 ? "no" : "[contents.len]"] [icon_type]s left.")
|
||||
|
||||
/obj/item/storage/fancy/attack_self(mob/user)
|
||||
fancy_open = !fancy_open
|
||||
@@ -58,9 +57,7 @@
|
||||
|
||||
/obj/item/storage/fancy/remove_from_storage(obj/item/W, atom/new_location, burn = 0)
|
||||
fancy_open = TRUE
|
||||
. = ..()
|
||||
//Recall update icon with the fancy item snowflake arg (ugh)
|
||||
update_icon(1)
|
||||
return ..()
|
||||
|
||||
/*
|
||||
* Donut Box
|
||||
|
||||
@@ -71,7 +71,8 @@
|
||||
if (istype(src.loc, /obj/item/assembly))
|
||||
icon = src.loc
|
||||
if(!in_range(src, user))
|
||||
if (icon == src) to_chat(user, "<span class='notice'>If you want any more information you'll need to get closer.</span>")
|
||||
if (icon == src)
|
||||
to_chat(user, "<span class='notice'>If you want any more information you'll need to get closer.</span>")
|
||||
return
|
||||
|
||||
to_chat(user, "<span class='notice'>The pressure gauge reads [round(src.air_contents.return_pressure(),0.01)] kPa.</span>")
|
||||
|
||||
@@ -480,7 +480,8 @@
|
||||
|
||||
|
||||
/obj/item/weldingtool/afterattack(atom/O, mob/user, proximity)
|
||||
if(!proximity) return
|
||||
if(!proximity)
|
||||
return
|
||||
|
||||
if(welding)
|
||||
remove_fuel(1)
|
||||
|
||||
@@ -49,7 +49,8 @@
|
||||
return
|
||||
|
||||
/obj/item/toy/balloon/afterattack(atom/A as mob|obj, mob/user, proximity)
|
||||
if(!proximity) return
|
||||
if(!proximity)
|
||||
return
|
||||
if (istype(A, /obj/structure/reagent_dispensers))
|
||||
var/obj/structure/reagent_dispensers/RD = A
|
||||
if(RD.reagents.total_volume <= 0)
|
||||
@@ -274,7 +275,7 @@
|
||||
*/
|
||||
/obj/item/toy/foamblade
|
||||
name = "foam armblade"
|
||||
desc = "it says \"Sternside Changs #1 fan\" on it. "
|
||||
desc = "It says \"Sternside Changs #1 fan\" on it."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "foamblade"
|
||||
item_state = "arm_blade"
|
||||
@@ -287,7 +288,7 @@
|
||||
|
||||
/obj/item/toy/windupToolbox
|
||||
name = "windup toolbox"
|
||||
desc = "A replica toolbox that rumbles when you turn the key"
|
||||
desc = "A replica toolbox that rumbles when you turn the key."
|
||||
icon_state = "his_grace"
|
||||
item_state = "artistic_toolbox"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/toolbox_lefthand.dmi'
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/obj/item/banhammer
|
||||
desc = "A banhammer"
|
||||
desc = "A banhammer."
|
||||
name = "banhammer"
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "toyhammer"
|
||||
@@ -192,7 +192,7 @@
|
||||
|
||||
/obj/item/katana
|
||||
name = "katana"
|
||||
desc = "Woefully underpowered in D20"
|
||||
desc = "Woefully underpowered in D20."
|
||||
icon_state = "katana"
|
||||
item_state = "katana"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
|
||||
@@ -201,7 +201,7 @@
|
||||
slot_flags = SLOT_BELT | SLOT_BACK
|
||||
force = 40
|
||||
throwforce = 10
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
block_chance = 50
|
||||
@@ -257,7 +257,7 @@
|
||||
|
||||
/obj/item/throwing_star
|
||||
name = "throwing star"
|
||||
desc = "An ancient weapon still used to this day due to it's ease of lodging itself into victim's body parts"
|
||||
desc = "An ancient weapon still used to this day, due to its ease of lodging itself into its victim's body parts."
|
||||
icon_state = "throwingstar"
|
||||
item_state = "eshield0"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi'
|
||||
@@ -390,7 +390,7 @@
|
||||
|
||||
/obj/item/ectoplasm
|
||||
name = "ectoplasm"
|
||||
desc = "spooky"
|
||||
desc = "Spooky."
|
||||
gender = PLURAL
|
||||
icon = 'icons/obj/wizard.dmi'
|
||||
icon_state = "ectoplasm"
|
||||
@@ -590,6 +590,7 @@
|
||||
name = "slapper"
|
||||
desc = "This is how real men fight."
|
||||
icon_state = "latexballon"
|
||||
item_state = "nothing"
|
||||
force = 1
|
||||
throwforce = 0
|
||||
flags_1 = DROPDEL_1 | ABSTRACT_1
|
||||
|
||||
@@ -7,8 +7,12 @@
|
||||
damage_amount = run_obj_armor(damage_amount, damage_type, damage_flag, attack_dir)
|
||||
if(damage_amount >= 0.1)
|
||||
. = damage_amount
|
||||
obj_integrity = max(obj_integrity - damage_amount, 0)
|
||||
var/old_integ = obj_integrity
|
||||
obj_integrity = max(old_integ - damage_amount, 0)
|
||||
if(obj_integrity <= 0)
|
||||
var/int_fail = integrity_failure
|
||||
if(int_fail && old_integ > int_fail)
|
||||
obj_break(damage_flag)
|
||||
obj_destruction(damage_flag)
|
||||
else if(integrity_failure)
|
||||
if(obj_integrity <= integrity_failure)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/proc/radiation_pulse(turf/epicenter, heavy_range, light_range, severity, log=0)
|
||||
if(!epicenter || !severity) return
|
||||
if(!epicenter || !severity)
|
||||
return
|
||||
|
||||
if(!isturf(epicenter))
|
||||
epicenter = get_turf(epicenter.loc)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/structure/sign/barsign // All Signs are 64 by 32 pixels, they take two tiles
|
||||
name = "Bar Sign"
|
||||
desc = "A bar sign with no writing on it"
|
||||
desc = "A bar sign with no writing on it."
|
||||
icon = 'icons/obj/barsigns.dmi'
|
||||
icon_state = "empty"
|
||||
req_access = list(ACCESS_BAR)
|
||||
|
||||
@@ -21,10 +21,6 @@
|
||||
var/buildstacktype = /obj/item/stack/sheet/metal
|
||||
var/buildstackamount = 2
|
||||
|
||||
/obj/structure/bed/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>It's held together by a couple of <b>bolts</b>.</span>")
|
||||
|
||||
/obj/structure/bed/deconstruct(disassembled = TRUE)
|
||||
if(!(flags_1 & NODECONSTRUCT_1))
|
||||
if(buildstacktype)
|
||||
@@ -117,7 +113,8 @@
|
||||
R.loaded = new/obj/structure/bed/roller(R)
|
||||
qdel(src) //"Load"
|
||||
return
|
||||
else return ..()
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/roller/attack_self(mob/user)
|
||||
deploy_roller(user, user.loc)
|
||||
@@ -144,7 +141,7 @@
|
||||
|
||||
/obj/item/roller/robo/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "The dock is [loaded ? "loaded" : "empty"].")
|
||||
to_chat(user, "The dock is [loaded ? "loaded" : "empty"]")
|
||||
|
||||
/obj/item/roller/robo/deploy_roller(mob/user, atom/location)
|
||||
if(loaded)
|
||||
@@ -197,5 +194,5 @@
|
||||
|
||||
/obj/structure/bed/alien
|
||||
name = "resting contraption"
|
||||
desc = "This looks similar to contraptions from earth. Could aliens be stealing our technology?"
|
||||
icon_state = "abed"
|
||||
desc = "This looks similar to contraptions from Earth. Could aliens be stealing our technology?"
|
||||
icon_state = "abed"
|
||||
|
||||
@@ -352,6 +352,7 @@
|
||||
max_integrity = 150
|
||||
buildstacktype = /obj/item/stack/tile/brass
|
||||
buildstackamount = 1
|
||||
item_chair = null
|
||||
|
||||
/obj/structure/chair/brass/Destroy()
|
||||
STOP_PROCESSING(SSfastprocess, src)
|
||||
|
||||
@@ -109,7 +109,6 @@
|
||||
new /obj/item/clothing/gloves/krav_maga/sec(src)
|
||||
new /obj/item/door_remote/head_of_security(src)
|
||||
new /obj/item/gun/ballistic/shotgun/automatic/combat/compact(src)
|
||||
new /obj/item/pinpointer/crew(src)
|
||||
|
||||
/obj/structure/closet/secure_closet/security
|
||||
name = "security officer's locker"
|
||||
|
||||
@@ -1,180 +1,180 @@
|
||||
/* Utility Closets
|
||||
* Contains:
|
||||
* Emergency Closet
|
||||
* Fire Closet
|
||||
* Tool Closet
|
||||
* Radiation Closet
|
||||
* Bombsuit Closet
|
||||
* Hydrant
|
||||
* First Aid
|
||||
*/
|
||||
|
||||
/*
|
||||
* Emergency Closet
|
||||
*/
|
||||
/obj/structure/closet/emcloset
|
||||
name = "emergency closet"
|
||||
desc = "It's a storage unit for emergency breath masks and O2 tanks."
|
||||
icon_state = "emergency"
|
||||
|
||||
/obj/structure/closet/emcloset/anchored
|
||||
anchored = TRUE
|
||||
|
||||
/obj/structure/closet/emcloset/PopulateContents()
|
||||
..()
|
||||
|
||||
if (prob(40))
|
||||
new /obj/item/storage/toolbox/emergency(src)
|
||||
|
||||
switch (pickweight(list("small" = 40, "aid" = 25, "tank" = 20, "both" = 10, "nothing" = 4, "delete" = 1)))
|
||||
if ("small")
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
|
||||
if ("aid")
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
new /obj/item/storage/firstaid/o2(src)
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
|
||||
if ("tank")
|
||||
new /obj/item/tank/internals/air(src)
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
|
||||
if ("both")
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
|
||||
if ("nothing")
|
||||
// doot
|
||||
|
||||
// teehee
|
||||
if ("delete")
|
||||
qdel(src)
|
||||
|
||||
//If you want to re-add fire, just add "fire" = 15 to the pick list.
|
||||
/*if ("fire")
|
||||
new /obj/structure/closet/firecloset(src.loc)
|
||||
qdel(src)*/
|
||||
|
||||
/*
|
||||
* Fire Closet
|
||||
*/
|
||||
/obj/structure/closet/firecloset
|
||||
name = "fire-safety closet"
|
||||
desc = "It's a storage unit for fire-fighting supplies."
|
||||
icon_state = "fire"
|
||||
|
||||
/obj/structure/closet/firecloset/PopulateContents()
|
||||
..()
|
||||
|
||||
new /obj/item/clothing/suit/fire/firefighter(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/tank/internals/oxygen/red(src)
|
||||
new /obj/item/extinguisher(src)
|
||||
new /obj/item/clothing/head/hardhat/red(src)
|
||||
|
||||
/obj/structure/closet/firecloset/full/PopulateContents()
|
||||
new /obj/item/clothing/suit/fire/firefighter(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/device/flashlight(src)
|
||||
new /obj/item/tank/internals/oxygen/red(src)
|
||||
new /obj/item/extinguisher(src)
|
||||
new /obj/item/clothing/head/hardhat/red(src)
|
||||
|
||||
/*
|
||||
* Tool Closet
|
||||
*/
|
||||
/obj/structure/closet/toolcloset
|
||||
name = "tool closet"
|
||||
desc = "It's a storage unit for tools."
|
||||
icon_state = "eng"
|
||||
icon_door = "eng_tool"
|
||||
|
||||
/obj/structure/closet/toolcloset/PopulateContents()
|
||||
..()
|
||||
if(prob(40))
|
||||
new /obj/item/clothing/suit/hazardvest(src)
|
||||
if(prob(70))
|
||||
new /obj/item/device/flashlight(src)
|
||||
if(prob(70))
|
||||
new /obj/item/screwdriver(src)
|
||||
if(prob(70))
|
||||
new /obj/item/wrench(src)
|
||||
if(prob(70))
|
||||
new /obj/item/weldingtool(src)
|
||||
if(prob(70))
|
||||
new /obj/item/crowbar(src)
|
||||
if(prob(70))
|
||||
new /obj/item/wirecutters(src)
|
||||
if(prob(70))
|
||||
new /obj/item/device/t_scanner(src)
|
||||
if(prob(20))
|
||||
new /obj/item/storage/belt/utility(src)
|
||||
if(prob(30))
|
||||
new /obj/item/stack/cable_coil/random(src)
|
||||
if(prob(30))
|
||||
new /obj/item/stack/cable_coil/random(src)
|
||||
if(prob(30))
|
||||
new /obj/item/stack/cable_coil/random(src)
|
||||
if(prob(20))
|
||||
new /obj/item/device/multitool(src)
|
||||
if(prob(5))
|
||||
new /obj/item/clothing/gloves/color/yellow(src)
|
||||
if(prob(40))
|
||||
new /obj/item/clothing/head/hardhat(src)
|
||||
|
||||
|
||||
/*
|
||||
* Radiation Closet
|
||||
*/
|
||||
/obj/structure/closet/radiation
|
||||
name = "radiation suit closet"
|
||||
desc = "It's a storage unit for rad-protective suits."
|
||||
icon_state = "eng"
|
||||
icon_door = "eng_rad"
|
||||
|
||||
/obj/structure/closet/radiation/PopulateContents()
|
||||
..()
|
||||
new /obj/item/device/geiger_counter(src)
|
||||
new /obj/item/clothing/suit/radiation(src)
|
||||
new /obj/item/clothing/head/radiation(src)
|
||||
|
||||
/*
|
||||
* Bombsuit closet
|
||||
*/
|
||||
/obj/structure/closet/bombcloset
|
||||
name = "\improper EOD closet"
|
||||
desc = "It's a storage unit for explosion-protective suits."
|
||||
icon_state = "bomb"
|
||||
|
||||
/obj/structure/closet/bombcloset/PopulateContents()
|
||||
..()
|
||||
new /obj/item/clothing/suit/bomb_suit( src )
|
||||
new /obj/item/clothing/under/color/black( src )
|
||||
new /obj/item/clothing/shoes/sneakers/black( src )
|
||||
new /obj/item/clothing/head/bomb_hood( src )
|
||||
|
||||
|
||||
/obj/structure/closet/bombclosetsecurity
|
||||
name = "\improper EOD closet"
|
||||
desc = "It's a storage unit for explosion-protective suits."
|
||||
icon_state = "bomb"
|
||||
|
||||
/obj/structure/closet/bombclosetsecurity/PopulateContents()
|
||||
new /obj/item/clothing/suit/bomb_suit/security( src )
|
||||
new /obj/item/clothing/under/rank/security( src )
|
||||
new /obj/item/clothing/shoes/sneakers/brown( src )
|
||||
new /obj/item/clothing/head/bomb_hood/security( src )
|
||||
|
||||
/*
|
||||
* Ammunition
|
||||
*/
|
||||
/obj/structure/closet/ammunitionlocker
|
||||
name = "ammunition locker"
|
||||
|
||||
/obj/structure/closet/ammunitionlocker/PopulateContents()
|
||||
..()
|
||||
for(var/i in 1 to 8)
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(src)
|
||||
/* Utility Closets
|
||||
* Contains:
|
||||
* Emergency Closet
|
||||
* Fire Closet
|
||||
* Tool Closet
|
||||
* Radiation Closet
|
||||
* Bombsuit Closet
|
||||
* Hydrant
|
||||
* First Aid
|
||||
*/
|
||||
|
||||
/*
|
||||
* Emergency Closet
|
||||
*/
|
||||
/obj/structure/closet/emcloset
|
||||
name = "emergency closet"
|
||||
desc = "It's a storage unit for emergency breath masks and O2 tanks."
|
||||
icon_state = "emergency"
|
||||
|
||||
/obj/structure/closet/emcloset/anchored
|
||||
anchored = TRUE
|
||||
|
||||
/obj/structure/closet/emcloset/PopulateContents()
|
||||
..()
|
||||
|
||||
if (prob(40))
|
||||
new /obj/item/storage/toolbox/emergency(src)
|
||||
|
||||
switch (pickweight(list("small" = 40, "aid" = 25, "tank" = 20, "both" = 10, "nothing" = 4, "delete" = 1)))
|
||||
if ("small")
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
|
||||
if ("aid")
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
new /obj/item/storage/firstaid/o2(src)
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
|
||||
if ("tank")
|
||||
new /obj/item/tank/internals/air(src)
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
|
||||
if ("both")
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
|
||||
if ("nothing")
|
||||
// doot
|
||||
|
||||
// teehee
|
||||
if ("delete")
|
||||
qdel(src)
|
||||
|
||||
//If you want to re-add fire, just add "fire" = 15 to the pick list.
|
||||
/*if ("fire")
|
||||
new /obj/structure/closet/firecloset(src.loc)
|
||||
qdel(src)*/
|
||||
|
||||
/*
|
||||
* Fire Closet
|
||||
*/
|
||||
/obj/structure/closet/firecloset
|
||||
name = "fire-safety closet"
|
||||
desc = "It's a storage unit for fire-fighting supplies."
|
||||
icon_state = "fire"
|
||||
|
||||
/obj/structure/closet/firecloset/PopulateContents()
|
||||
..()
|
||||
|
||||
new /obj/item/clothing/suit/fire/firefighter(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/tank/internals/oxygen/red(src)
|
||||
new /obj/item/extinguisher(src)
|
||||
new /obj/item/clothing/head/hardhat/red(src)
|
||||
|
||||
/obj/structure/closet/firecloset/full/PopulateContents()
|
||||
new /obj/item/clothing/suit/fire/firefighter(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
new /obj/item/device/flashlight(src)
|
||||
new /obj/item/tank/internals/oxygen/red(src)
|
||||
new /obj/item/extinguisher(src)
|
||||
new /obj/item/clothing/head/hardhat/red(src)
|
||||
|
||||
/*
|
||||
* Tool Closet
|
||||
*/
|
||||
/obj/structure/closet/toolcloset
|
||||
name = "tool closet"
|
||||
desc = "It's a storage unit for tools."
|
||||
icon_state = "eng"
|
||||
icon_door = "eng_tool"
|
||||
|
||||
/obj/structure/closet/toolcloset/PopulateContents()
|
||||
..()
|
||||
if(prob(40))
|
||||
new /obj/item/clothing/suit/hazardvest(src)
|
||||
if(prob(70))
|
||||
new /obj/item/device/flashlight(src)
|
||||
if(prob(70))
|
||||
new /obj/item/screwdriver(src)
|
||||
if(prob(70))
|
||||
new /obj/item/wrench(src)
|
||||
if(prob(70))
|
||||
new /obj/item/weldingtool(src)
|
||||
if(prob(70))
|
||||
new /obj/item/crowbar(src)
|
||||
if(prob(70))
|
||||
new /obj/item/wirecutters(src)
|
||||
if(prob(70))
|
||||
new /obj/item/device/t_scanner(src)
|
||||
if(prob(20))
|
||||
new /obj/item/storage/belt/utility(src)
|
||||
if(prob(30))
|
||||
new /obj/item/stack/cable_coil/random(src)
|
||||
if(prob(30))
|
||||
new /obj/item/stack/cable_coil/random(src)
|
||||
if(prob(30))
|
||||
new /obj/item/stack/cable_coil/random(src)
|
||||
if(prob(20))
|
||||
new /obj/item/device/multitool(src)
|
||||
if(prob(5))
|
||||
new /obj/item/clothing/gloves/color/yellow(src)
|
||||
if(prob(40))
|
||||
new /obj/item/clothing/head/hardhat(src)
|
||||
|
||||
|
||||
/*
|
||||
* Radiation Closet
|
||||
*/
|
||||
/obj/structure/closet/radiation
|
||||
name = "radiation suit closet"
|
||||
desc = "It's a storage unit for rad-protective suits."
|
||||
icon_state = "eng"
|
||||
icon_door = "eng_rad"
|
||||
|
||||
/obj/structure/closet/radiation/PopulateContents()
|
||||
..()
|
||||
new /obj/item/device/geiger_counter(src)
|
||||
new /obj/item/clothing/suit/radiation(src)
|
||||
new /obj/item/clothing/head/radiation(src)
|
||||
|
||||
/*
|
||||
* Bombsuit closet
|
||||
*/
|
||||
/obj/structure/closet/bombcloset
|
||||
name = "\improper EOD closet"
|
||||
desc = "It's a storage unit for explosion-protective suits."
|
||||
icon_state = "bomb"
|
||||
|
||||
/obj/structure/closet/bombcloset/PopulateContents()
|
||||
..()
|
||||
new /obj/item/clothing/suit/bomb_suit(src)
|
||||
new /obj/item/clothing/under/color/black(src)
|
||||
new /obj/item/clothing/shoes/sneakers/black(src)
|
||||
new /obj/item/clothing/head/bomb_hood(src)
|
||||
|
||||
/obj/structure/closet/bombcloset/security/PopulateContents()
|
||||
new /obj/item/clothing/suit/bomb_suit/security(src)
|
||||
new /obj/item/clothing/under/rank/security(src)
|
||||
new /obj/item/clothing/shoes/jackboots(src)
|
||||
new /obj/item/clothing/head/bomb_hood/security(src)
|
||||
|
||||
/obj/structure/closet/bombcloset/white/PopulateContents()
|
||||
new /obj/item/clothing/suit/bomb_suit/white(src)
|
||||
new /obj/item/clothing/under/color/black(src)
|
||||
new /obj/item/clothing/shoes/sneakers/black(src)
|
||||
new /obj/item/clothing/head/bomb_hood/white(src)
|
||||
|
||||
/*
|
||||
* Ammunition
|
||||
*/
|
||||
/obj/structure/closet/ammunitionlocker
|
||||
name = "ammunition locker"
|
||||
|
||||
/obj/structure/closet/ammunitionlocker/PopulateContents()
|
||||
..()
|
||||
for(var/i in 1 to 8)
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(src)
|
||||
|
||||
@@ -115,7 +115,7 @@
|
||||
/obj/structure/displaycase/attackby(obj/item/W, mob/user, params)
|
||||
if(W.GetID() && !broken && openable)
|
||||
if(allowed(user))
|
||||
to_chat(user, "<span class='notice'>You [open ? "close":"open"] [src].</span>")
|
||||
to_chat(user, "<span class='notice'>You [open ? "close":"open"] the [src]</span>")
|
||||
toggle_lock(user)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>Access denied.</span>")
|
||||
@@ -140,9 +140,9 @@
|
||||
to_chat(user, "<span class='notice'>You remove the destroyed case</span>")
|
||||
qdel(src)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You start to [open ? "close":"open"] [src].</span>")
|
||||
to_chat(user, "<span class='notice'>You start to [open ? "close":"open"] the [src]</span>")
|
||||
if(do_after(user, 20*W.toolspeed, target = src))
|
||||
to_chat(user, "<span class='notice'>You [open ? "close":"open"] [src].</span>")
|
||||
to_chat(user, "<span class='notice'>You [open ? "close":"open"] the [src]</span>")
|
||||
toggle_lock(user)
|
||||
else if(open && !showpiece)
|
||||
if(user.transferItemToLoc(W, src))
|
||||
|
||||
@@ -250,7 +250,7 @@
|
||||
|
||||
/obj/structure/door_assembly/door_assembly_clown
|
||||
name = "bananium airlock assembly"
|
||||
desc = "Honk"
|
||||
desc = "Honk."
|
||||
icon = 'icons/obj/doors/airlocks/station/bananium.dmi'
|
||||
airlock_type = /obj/machinery/door/airlock/clown
|
||||
anchored = TRUE
|
||||
@@ -576,7 +576,8 @@
|
||||
user.visible_message("[user] wires the airlock assembly.", \
|
||||
"<span class='notice'>You start to wire the airlock assembly...</span>")
|
||||
if(do_after(user, 40, target = src))
|
||||
if(C.get_amount() < 1 || state != 0) return
|
||||
if(C.get_amount() < 1 || state != 0)
|
||||
return
|
||||
C.use(1)
|
||||
src.state = 1
|
||||
to_chat(user, "<span class='notice'>You wire the airlock assembly.</span>")
|
||||
@@ -638,7 +639,8 @@
|
||||
user.visible_message("[user] adds [G.name] to the airlock assembly.", \
|
||||
"<span class='notice'>You start to install [G.name] into the airlock assembly...</span>")
|
||||
if(do_after(user, 40, target = src))
|
||||
if(G.get_amount() < 1 || mineral) return
|
||||
if(G.get_amount() < 1 || mineral)
|
||||
return
|
||||
if(!istype(G, /obj/item/stack/sheet/glass))
|
||||
to_chat(user, "<span class='notice'>You install [G.name] windows into the airlock assembly.</span>")
|
||||
heat_proof_finished = 1 //plasma & reinforced glass makes the airlock heat-proof
|
||||
@@ -666,7 +668,8 @@
|
||||
user.visible_message("[user] adds [G.name] to the airlock assembly.", \
|
||||
"<span class='notice'>You start to install [G.name] into the airlock assembly...</span>")
|
||||
if(do_after(user, 40, target = src))
|
||||
if(G.get_amount() < 2 || mineral) return
|
||||
if(G.get_amount() < 2 || mineral)
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You install [M] plating into the airlock assembly.</span>")
|
||||
G.use(2)
|
||||
mineral = "[M]"
|
||||
|
||||
@@ -323,7 +323,7 @@
|
||||
|
||||
/obj/structure/flora/rock
|
||||
icon_state = "basalt"
|
||||
desc = "A volcanic rock"
|
||||
desc = "A volcanic rock."
|
||||
icon = 'icons/obj/flora/rocks.dmi'
|
||||
resistance_flags = FIRE_PROOF
|
||||
density = TRUE
|
||||
@@ -334,7 +334,7 @@
|
||||
|
||||
/obj/structure/flora/rock/pile
|
||||
icon_state = "lavarocks"
|
||||
desc = "A pile of rocks"
|
||||
desc = "A pile of rocks."
|
||||
|
||||
/obj/structure/flora/rock/pile/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -458,7 +458,7 @@
|
||||
//Ancient cryogenic sleepers. Players become NT crewmen from a hundred year old space station, now on the verge of collapse.
|
||||
/obj/effect/mob_spawn/human/oldsec
|
||||
name = "old cryogenics pod"
|
||||
desc = "A humming cryo pod. You can barely recognise a security uniform underneath the built up ice. The machine is attempting to wake up its occupant"
|
||||
desc = "A humming cryo pod. You can barely recognise a security uniform underneath the built up ice. The machine is attempting to wake up its occupant."
|
||||
mob_name = "a security officer"
|
||||
icon = 'icons/obj/cryogenic2.dmi'
|
||||
icon_state = "sleeper"
|
||||
@@ -482,7 +482,7 @@
|
||||
|
||||
/obj/effect/mob_spawn/human/oldeng
|
||||
name = "old cryogenics pod"
|
||||
desc = "A humming cryo pod. You can barely recognise an engineering uniform underneath the built up ice. The machine is attempting to wake up its occupant"
|
||||
desc = "A humming cryo pod. You can barely recognise an engineering uniform underneath the built up ice. The machine is attempting to wake up its occupant."
|
||||
mob_name = "an engineer"
|
||||
icon = 'icons/obj/cryogenic2.dmi'
|
||||
icon_state = "sleeper"
|
||||
@@ -506,7 +506,7 @@
|
||||
|
||||
/obj/effect/mob_spawn/human/oldsci
|
||||
name = "old cryogenics pod"
|
||||
desc = "A humming cryo pod. You can barely recognise a science uniform underneath the built up ice. The machine is attempting to wake up its occupant"
|
||||
desc = "A humming cryo pod. You can barely recognise a science uniform underneath the built up ice. The machine is attempting to wake up its occupant."
|
||||
mob_name = "a scientist"
|
||||
icon = 'icons/obj/cryogenic2.dmi'
|
||||
icon_state = "sleeper"
|
||||
|
||||
@@ -35,7 +35,8 @@
|
||||
if(RCD_WINDOWGRILLE)
|
||||
if(the_rcd.window_type == /obj/structure/window/reinforced/fulltile)
|
||||
return list("mode" = RCD_WINDOWGRILLE, "delay" = 40, "cost" = 12)
|
||||
else return list("mode" = RCD_WINDOWGRILLE, "delay" = 20, "cost" = 8)
|
||||
else
|
||||
return list("mode" = RCD_WINDOWGRILLE, "delay" = 20, "cost" = 8)
|
||||
return FALSE
|
||||
|
||||
/obj/structure/grille/rcd_act(mob/user, var/obj/item/construction/rcd/the_rcd, passed_mode)
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
|
||||
/obj/structure/holosign/barrier/cyborg/hacked
|
||||
name = "Charged Energy Field"
|
||||
desc = "A powerful energy field that blocks movement. Energy arcs off it"
|
||||
desc = "A powerful energy field that blocks movement. Energy arcs off it."
|
||||
max_integrity = 20
|
||||
var/shockcd = 0
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
name = "meat spike"
|
||||
icon = 'icons/obj/kitchen.dmi'
|
||||
icon_state = "spike"
|
||||
desc = "A spike for collecting meat from animals"
|
||||
desc = "A spike for collecting meat from animals."
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
buckle_lying = 0
|
||||
@@ -148,4 +148,4 @@
|
||||
new /obj/item/stack/rods(loc, 4)
|
||||
qdel(src)
|
||||
|
||||
#undef VIABLE_MOB_CHECK
|
||||
#undef VIABLE_MOB_CHECK
|
||||
@@ -68,14 +68,15 @@
|
||||
START_PROCESSING(SSfastprocess, src)
|
||||
|
||||
/obj/machinery/manned_turret/process()
|
||||
if(!LAZYLEN(buckled_mobs))
|
||||
if (!update_positioning())
|
||||
return PROCESS_KILL
|
||||
update_positioning()
|
||||
|
||||
/obj/machinery/manned_turret/proc/update_positioning()
|
||||
if (!LAZYLEN(buckled_mobs))
|
||||
return FALSE
|
||||
var/mob/living/controller = buckled_mobs[1]
|
||||
if(!istype(controller))
|
||||
return
|
||||
return FALSE
|
||||
var/client/C = controller.client
|
||||
if(C)
|
||||
var/atom/A = C.mouseObject
|
||||
@@ -143,14 +144,13 @@
|
||||
addtimer(CALLBACK(src, /obj/machinery/manned_turret/.proc/fire_helper, user), i*rate_of_fire)
|
||||
|
||||
/obj/machinery/manned_turret/proc/fire_helper(mob/user)
|
||||
if(user.incapacitated())
|
||||
if(user.incapacitated() || !(user in buckled_mobs))
|
||||
return
|
||||
update_positioning() //REFRESH MOUSE TRACKING!!
|
||||
var/turf/targets_from = get_turf(src)
|
||||
if(QDELETED(target))
|
||||
target = target_turf
|
||||
var/obj/item/projectile/P = new projectile_type(targets_from)
|
||||
P.current = targets_from
|
||||
P.starting = targets_from
|
||||
P.firer = user
|
||||
P.original = target
|
||||
|
||||
@@ -15,7 +15,8 @@
|
||||
return
|
||||
|
||||
for(var/obj/item/I in loc)
|
||||
if(notices > 4) break
|
||||
if(notices > 4)
|
||||
break
|
||||
if(istype(I, /obj/item/paper))
|
||||
I.loc = src
|
||||
notices++
|
||||
|
||||
@@ -2,45 +2,51 @@
|
||||
name = "reflector frame"
|
||||
icon = 'icons/obj/stock_parts.dmi'
|
||||
icon_state = "box_0"
|
||||
desc = "An angled mirror for reflecting lasers. This one does so at a 90 degree angle."
|
||||
desc = "An angled mirror for reflecting lasers."
|
||||
anchored = FALSE
|
||||
density = TRUE
|
||||
layer = BELOW_OBJ_LAYER
|
||||
var/finished = 0
|
||||
var/admin = 0 //Can't be rotated or deconstructed
|
||||
var/finished = FALSE
|
||||
var/admin = FALSE //Can't be rotated or deconstructed
|
||||
var/framebuildstacktype = /obj/item/stack/sheet/metal
|
||||
var/framebuildstackamount = 5
|
||||
var/buildstacktype = /obj/item/stack/sheet/metal
|
||||
var/buildstackamount = 0
|
||||
var/list/allowed_projectile_typecache = list(/obj/item/projectile/beam)
|
||||
var/rotation_angle = -1
|
||||
|
||||
/obj/structure/reflector/Initialize()
|
||||
. = ..()
|
||||
allowed_projectile_typecache = typecacheof(allowed_projectile_typecache)
|
||||
if(rotation_angle == -1)
|
||||
setAngle(dir2angle(dir))
|
||||
else
|
||||
setAngle(rotation_angle)
|
||||
|
||||
/obj/structure/reflector/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>Alt-click to adjust its direction.</span>")
|
||||
|
||||
/obj/structure/reflector/Moved()
|
||||
setAngle(dir_map_to_angle(dir))
|
||||
return ..()
|
||||
|
||||
/obj/structure/reflector/proc/dir_map_to_angle(dir)
|
||||
return 0
|
||||
|
||||
/obj/structure/reflector/bullet_act(obj/item/projectile/P)
|
||||
var/turf/reflector_turf = get_turf(src)
|
||||
var/turf/reflect_turf
|
||||
var/new_dir = get_reflection(src.dir,P.dir)
|
||||
if(!istype(P, /obj/item/projectile/beam))
|
||||
return..()
|
||||
if(new_dir)
|
||||
reflect_turf = get_step(reflect_turf, new_dir)
|
||||
else
|
||||
visible_message("<span class='notice'>[src] is hit by the [P]!</span>")
|
||||
new_dir = 0
|
||||
return ..() //Hits as normal, explodes or emps or whatever
|
||||
|
||||
reflect_turf = get_step(loc,new_dir)
|
||||
|
||||
P.original = reflect_turf
|
||||
P.starting = reflector_turf
|
||||
P.current = reflector_turf
|
||||
P.yo = reflect_turf.y - reflector_turf.y
|
||||
P.xo = reflect_turf.x - reflector_turf.x
|
||||
P.range = initial(P.range) //Keep the projectile healthy as long as its bouncing off things
|
||||
new_dir = 0
|
||||
return - 1
|
||||
var/pdir = P.dir
|
||||
var/pangle = P.Angle
|
||||
var/ploc = get_turf(P)
|
||||
if(!finished || !allowed_projectile_typecache[P.type] || !(P.dir in GLOB.cardinals))
|
||||
return ..()
|
||||
if(auto_reflect(P, pdir, ploc, pangle) != -1)
|
||||
return ..()
|
||||
return -1
|
||||
|
||||
/obj/structure/reflector/proc/auto_reflect(obj/item/projectile/P, pdir, turf/ploc, pangle)
|
||||
P.ignore_source_check = TRUE
|
||||
return -1
|
||||
|
||||
/obj/structure/reflector/attackby(obj/item/W, mob/user, params)
|
||||
if(admin)
|
||||
@@ -56,83 +62,74 @@
|
||||
qdel(src)
|
||||
else if(istype(W, /obj/item/weldingtool))
|
||||
var/obj/item/weldingtool/WT = W
|
||||
switch(anchored)
|
||||
if(0)
|
||||
if (WT.remove_fuel(0,user))
|
||||
playsound(src.loc, 'sound/items/welder2.ogg', 50, 1)
|
||||
user.visible_message("[user.name] starts to weld [src] to the floor.", \
|
||||
"<span class='notice'>You start to weld \the [src] to the floor...</span>", \
|
||||
"<span class='italics'>You hear welding.</span>")
|
||||
if (do_after(user,20*W.toolspeed, target = src))
|
||||
if(!src || !WT.isOn())
|
||||
return
|
||||
anchored = TRUE
|
||||
to_chat(user, "<span class='notice'>You weld \the [src] to the floor.</span>")
|
||||
if(1)
|
||||
if (WT.remove_fuel(0,user))
|
||||
playsound(src.loc, 'sound/items/welder2.ogg', 50, 1)
|
||||
user.visible_message("[user.name] starts to cut [src] free from the floor.", \
|
||||
"<span class='notice'>You start to cut \the [src] free from the floor...</span>", \
|
||||
"<span class='italics'>You hear welding.</span>")
|
||||
if (do_after(user,20*W.toolspeed, target = src))
|
||||
if(!src || !WT.isOn())
|
||||
return
|
||||
anchored = 0
|
||||
to_chat(user, "<span class='notice'>You cut \the [src] free from the floor.</span>")
|
||||
if(!anchored)
|
||||
if (WT.remove_fuel(0,user))
|
||||
playsound(src, 'sound/items/welder2.ogg', 50, 1)
|
||||
user.visible_message("[user] starts to weld [src] to the floor.", "<span class='notice'>You start to weld [src] to the floor...</span>", "<span class='italics'>You hear welding.</span>")
|
||||
if (do_after(user,20*W.toolspeed, target = src))
|
||||
if(!WT.isOn())
|
||||
return
|
||||
anchored = TRUE
|
||||
to_chat(user, "<span class='notice'>You weld [src] to the floor.</span>")
|
||||
else
|
||||
if (WT.remove_fuel(0,user))
|
||||
playsound(src, 'sound/items/welder2.ogg', 50, 1)
|
||||
user.visible_message("[user] starts to cut [src] free from the floor.", "<span class='notice'>You start to cut [src] free from the floor...</span>", "<span class='italics'>You hear welding.</span>")
|
||||
if (do_after(user,20*W.toolspeed, target = src))
|
||||
if(!WT.isOn())
|
||||
return
|
||||
anchored = FALSE
|
||||
to_chat(user, "<span class='notice'>You cut [src] free from the floor.</span>")
|
||||
//Finishing the frame
|
||||
else if(istype(W, /obj/item/stack/sheet))
|
||||
if(finished)
|
||||
return
|
||||
var/obj/item/stack/sheet/S = W
|
||||
if(istype(W, /obj/item/stack/sheet/glass))
|
||||
if(S.get_amount() < 5)
|
||||
if(S.use(5))
|
||||
new /obj/structure/reflector/single (loc)
|
||||
qdel (src)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You need five sheets of glass to create a reflector!</span>")
|
||||
return
|
||||
else
|
||||
S.use(5)
|
||||
new /obj/structure/reflector/single (src.loc)
|
||||
qdel (src)
|
||||
if(istype(W, /obj/item/stack/sheet/rglass))
|
||||
if(S.get_amount() < 10)
|
||||
if(S.use(10))
|
||||
new /obj/structure/reflector/double (loc)
|
||||
qdel(src)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You need ten sheets of reinforced glass to create a double reflector!</span>")
|
||||
return
|
||||
else
|
||||
S.use(10)
|
||||
new /obj/structure/reflector/double (src.loc)
|
||||
qdel(src)
|
||||
if(istype(W, /obj/item/stack/sheet/mineral/diamond))
|
||||
if(S.get_amount() >= 1)
|
||||
S.use(1)
|
||||
new /obj/structure/reflector/box (src.loc)
|
||||
if(S.use(1))
|
||||
new /obj/structure/reflector/box (loc)
|
||||
qdel(src)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/structure/reflector/proc/get_reflection(srcdir,pdir)
|
||||
return 0
|
||||
|
||||
|
||||
/obj/structure/reflector/verb/rotate()
|
||||
set name = "Rotate"
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
|
||||
if(usr.stat || !usr.canmove || usr.restrained())
|
||||
/obj/structure/reflector/proc/rotate(mob/user)
|
||||
if (anchored)
|
||||
to_chat(user, "<span class='warning'>It is fastened to the floor!</span>")
|
||||
return FALSE
|
||||
var/new_angle = input(user, "Input a new angle for primary reflection face.", "Reflector Angle") as null|num
|
||||
if(!user.canUseTopic(src, be_close=TRUE))
|
||||
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
|
||||
return
|
||||
if (src.anchored)
|
||||
to_chat(usr, "<span class='warning'>It is fastened to the floor!</span>")
|
||||
return 0
|
||||
src.setDir(turn(src.dir, 270))
|
||||
return 1
|
||||
setAngle(NORM_ROT(new_angle))
|
||||
return TRUE
|
||||
|
||||
/obj/structure/reflector/proc/setAngle(new_angle)
|
||||
rotation_angle = new_angle
|
||||
setDir(NORTH)
|
||||
var/matrix/M = new
|
||||
M.Turn(new_angle)
|
||||
transform = M
|
||||
|
||||
/obj/structure/reflector/AltClick(mob/user)
|
||||
..()
|
||||
if(!user.canUseTopic(src, be_close=TRUE))
|
||||
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
|
||||
return
|
||||
else
|
||||
rotate()
|
||||
rotate(user)
|
||||
|
||||
|
||||
//TYPES OF REFLECTORS, SINGLE, DOUBLE, BOX
|
||||
@@ -144,25 +141,30 @@
|
||||
icon = 'icons/obj/structures.dmi'
|
||||
icon_state = "reflector"
|
||||
desc = "A double sided angled mirror for reflecting lasers. This one does so at a 90 degree angle."
|
||||
finished = 1
|
||||
var/static/list/rotations = list("[NORTH]" = list("[SOUTH]" = WEST, "[EAST]" = NORTH),
|
||||
"[EAST]" = list("[SOUTH]" = EAST, "[WEST]" = NORTH),
|
||||
"[SOUTH]" = list("[NORTH]" = EAST, "[WEST]" = SOUTH),
|
||||
"[WEST]" = list("[NORTH]" = WEST, "[EAST]" = SOUTH) )
|
||||
finished = TRUE
|
||||
buildstacktype = /obj/item/stack/sheet/glass
|
||||
buildstackamount = 5
|
||||
|
||||
/obj/structure/reflector/single/anchored
|
||||
anchored = TRUE
|
||||
|
||||
/obj/structure/reflector/single/get_reflection(srcdir,pdir)
|
||||
var/new_dir = rotations["[srcdir]"]["[pdir]"]
|
||||
return new_dir
|
||||
|
||||
/obj/structure/reflector/single/mapping
|
||||
admin = 1
|
||||
admin = TRUE
|
||||
anchored = TRUE
|
||||
|
||||
/obj/structure/reflector/single/auto_reflect(obj/item/projectile/P, pdir, turf/ploc, pangle)
|
||||
var/incidence = get_angle_of_incidence(rotation_angle, P.Angle)
|
||||
var/incidence_norm = get_angle_of_incidence(rotation_angle, P.Angle, FALSE)
|
||||
if((incidence_norm > -90) && (incidence_norm < 90))
|
||||
return FALSE
|
||||
var/new_angle_s = rotation_angle + incidence
|
||||
while(new_angle_s > 180) // Translate to regular projectile degrees
|
||||
new_angle_s -= 360
|
||||
while(new_angle_s < -180)
|
||||
new_angle_s += 360
|
||||
P.Angle = new_angle_s
|
||||
return ..()
|
||||
|
||||
//DOUBLE
|
||||
|
||||
/obj/structure/reflector/double
|
||||
@@ -170,25 +172,31 @@
|
||||
icon = 'icons/obj/structures.dmi'
|
||||
icon_state = "reflector_double"
|
||||
desc = "A double sided angled mirror for reflecting lasers. This one does so at a 90 degree angle."
|
||||
finished = 1
|
||||
var/static/list/double_rotations = list("[NORTH]" = list("[NORTH]" = WEST, "[EAST]" = SOUTH, "[SOUTH]" = EAST, "[WEST]" = NORTH),
|
||||
"[EAST]" = list("[NORTH]" = EAST, "[WEST]" = SOUTH, "[SOUTH]" = WEST, "[EAST]" = NORTH),
|
||||
"[SOUTH]" = list("[NORTH]" = EAST, "[WEST]" = SOUTH, "[SOUTH]" = WEST, "[EAST]" = NORTH),
|
||||
"[WEST]" = list("[NORTH]" = WEST, "[EAST]" = SOUTH, "[SOUTH]" = EAST, "[WEST]" = NORTH) )
|
||||
finished = TRUE
|
||||
buildstacktype = /obj/item/stack/sheet/rglass
|
||||
buildstackamount = 10
|
||||
|
||||
/obj/structure/reflector/double/anchored
|
||||
anchored = TRUE
|
||||
|
||||
/obj/structure/reflector/double/get_reflection(srcdir,pdir)
|
||||
var/new_dir = double_rotations["[srcdir]"]["[pdir]"]
|
||||
return new_dir
|
||||
|
||||
/obj/structure/reflector/double/mapping
|
||||
admin = 1
|
||||
admin = TRUE
|
||||
anchored = TRUE
|
||||
|
||||
/obj/structure/reflector/double/auto_reflect(obj/item/projectile/P, pdir, turf/ploc, pangle)
|
||||
var/incidence = get_angle_of_incidence(rotation_angle, P.Angle)
|
||||
var/incidence_norm = get_angle_of_incidence(rotation_angle, P.Angle, FALSE)
|
||||
var/invert = ((incidence_norm > -90) && (incidence_norm < 90))
|
||||
var/new_angle_s = rotation_angle + incidence
|
||||
if(invert)
|
||||
new_angle_s += 180
|
||||
while(new_angle_s > 180) // Translate to regular projectile degrees
|
||||
new_angle_s -= 360
|
||||
while(new_angle_s < -180)
|
||||
new_angle_s += 360
|
||||
P.Angle = new_angle_s
|
||||
return ..()
|
||||
|
||||
//BOX
|
||||
|
||||
/obj/structure/reflector/box
|
||||
@@ -196,35 +204,32 @@
|
||||
icon = 'icons/obj/structures.dmi'
|
||||
icon_state = "reflector_box"
|
||||
desc = "A box with an internal set of mirrors that reflects all laser fire in a single direction."
|
||||
finished = 1
|
||||
var/static/list/box_rotations = list("[NORTH]" = list("[SOUTH]" = NORTH, "[EAST]" = NORTH, "[WEST]" = NORTH, "[NORTH]" = NORTH),
|
||||
"[EAST]" = list("[SOUTH]" = EAST, "[EAST]" = EAST, "[WEST]" = EAST, "[NORTH]" = EAST),
|
||||
"[SOUTH]" = list("[SOUTH]" = SOUTH, "[EAST]" = SOUTH, "[WEST]" = SOUTH, "[NORTH]" = SOUTH),
|
||||
"[WEST]" = list("[SOUTH]" = WEST, "[EAST]" = WEST, "[WEST]" = WEST, "[NORTH]" = WEST) )
|
||||
finished = TRUE
|
||||
buildstacktype = /obj/item/stack/sheet/mineral/diamond
|
||||
buildstackamount = 1
|
||||
|
||||
/obj/structure/reflector/box/anchored
|
||||
anchored = TRUE
|
||||
|
||||
/obj/structure/reflector/box/get_reflection(srcdir,pdir)
|
||||
var/new_dir = box_rotations["[srcdir]"]["[pdir]"]
|
||||
return new_dir
|
||||
|
||||
|
||||
/obj/structure/reflector/box/mapping
|
||||
admin = 1
|
||||
admin = TRUE
|
||||
anchored = TRUE
|
||||
|
||||
/obj/structure/reflector/box/auto_reflect(obj/item/projectile/P)
|
||||
P.Angle = rotation_angle
|
||||
return ..()
|
||||
|
||||
/obj/structure/reflector/ex_act()
|
||||
if(admin)
|
||||
return
|
||||
else
|
||||
..()
|
||||
return ..()
|
||||
|
||||
/obj/structure/reflector/dir_map_to_angle(dir)
|
||||
return dir2angle(dir)
|
||||
|
||||
/obj/structure/reflector/singularity_act()
|
||||
if(admin)
|
||||
return
|
||||
else
|
||||
..()
|
||||
return ..()
|
||||
|
||||
@@ -53,7 +53,8 @@ FLOOR SAFES
|
||||
if(tumbler_2_pos == tumbler_2_open)
|
||||
to_chat(user, "<span class='italics'>You hear a [pick("tink", "krink", "plink")] from [src].</span>")
|
||||
if(tumbler_1_pos == tumbler_1_open && tumbler_2_pos == tumbler_2_open)
|
||||
if(user) visible_message("<i><b>[pick("Spring", "Sprang", "Sproing", "Clunk", "Krunk")]!</b></i>")
|
||||
if(user)
|
||||
visible_message("<i><b>[pick("Spring", "Sprang", "Sproing", "Clunk", "Krunk")]!</b></i>")
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
/obj/structure/showcase/fakesec
|
||||
name = "\improper CentCom security records"
|
||||
desc = "Used to view and edit personnel's security records"
|
||||
desc = "Used to view and edit personnel's security records."
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
icon_state = "computer"
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
|
||||
/obj/structure/showcase/machinery/signal_decrypter
|
||||
name = "subsystem signal decrypter"
|
||||
desc = "A strange machine thats supposedly used to help pick up and decrypt wave signals. "
|
||||
desc = "A strange machine that's supposedly used to help pick up and decrypt wave signals."
|
||||
icon = 'icons/obj/machines/telecomms.dmi'
|
||||
icon_state = "processor"
|
||||
|
||||
|
||||
@@ -217,7 +217,7 @@
|
||||
|
||||
/obj/structure/sign/kiddieplaque
|
||||
name = "AI developers plaque"
|
||||
desc = "Next to the extremely long list of names and job titles, there is a drawing of a little child. The child appears to be retarded. Beneath the image, someone has scratched the word \"PACKETS\""
|
||||
desc = "Next to the extremely long list of names and job titles, there is a drawing of a little child. The child appears to be retarded. Beneath the image, someone has scratched the word \"PACKETS\"."
|
||||
icon_state = "kiddieplaque"
|
||||
|
||||
/obj/structure/sign/kiddieplaque/badger
|
||||
|
||||
@@ -244,7 +244,7 @@
|
||||
/obj/structure/statue/diamond
|
||||
max_integrity = 1000
|
||||
material_drop_type = /obj/item/stack/sheet/mineral/diamond
|
||||
desc = "This is a very expensive diamond statue"
|
||||
desc = "This is a very expensive diamond statue."
|
||||
|
||||
/obj/structure/statue/diamond/captain
|
||||
name = "statue of THE captain."
|
||||
|
||||
@@ -41,23 +41,20 @@
|
||||
/obj/structure/table/proc/deconstruction_hints(mob/user)
|
||||
to_chat(user, "<span class='notice'>The top is <b>screwed</b> on, but the main <b>bolts</b> are also visible.</span>")
|
||||
|
||||
/obj/structure/table/Initialize()
|
||||
. = ..()
|
||||
for(var/obj/structure/table/T in src.loc)
|
||||
if(T != src)
|
||||
qdel(T)
|
||||
|
||||
/obj/structure/table/update_icon()
|
||||
if(smooth)
|
||||
queue_smooth(src)
|
||||
queue_smooth_neighbors(src)
|
||||
|
||||
/obj/structure/table/narsie_act()
|
||||
new /obj/structure/table/wood(src.loc)
|
||||
var/atom/A = loc
|
||||
qdel(src)
|
||||
new /obj/structure/table/wood(A)
|
||||
|
||||
/obj/structure/table/ratvar_act()
|
||||
new /obj/structure/table/reinforced/brass(src.loc)
|
||||
|
||||
var/atom/A = loc
|
||||
qdel(src)
|
||||
new /obj/structure/table/reinforced/brass(A)
|
||||
|
||||
/obj/structure/table/attack_paw(mob/user)
|
||||
attack_hand(user)
|
||||
@@ -315,13 +312,15 @@
|
||||
if(deconstruction_ready)
|
||||
to_chat(user, "<span class='notice'>You start strengthening the reinforced table...</span>")
|
||||
if (do_after(user, 50*W.toolspeed, target = src))
|
||||
if(!src || !WT.isOn()) return
|
||||
if(!src || !WT.isOn())
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You strengthen the table.</span>")
|
||||
deconstruction_ready = 0
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You start weakening the reinforced table...</span>")
|
||||
if (do_after(user, 50*W.toolspeed, target = src))
|
||||
if(!src || !WT.isOn()) return
|
||||
if(!src || !WT.isOn())
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You weaken the table.</span>")
|
||||
deconstruction_ready = 1
|
||||
else
|
||||
|
||||
@@ -88,7 +88,8 @@
|
||||
/obj/structure/transit_tube_pod/Process_Spacemove()
|
||||
if(moving) //No drifting while moving in the tubes
|
||||
return 1
|
||||
else return ..()
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/structure/transit_tube_pod/proc/follow_tube()
|
||||
set waitfor = 0
|
||||
@@ -182,4 +183,4 @@
|
||||
return
|
||||
|
||||
/obj/structure/transit_tube_pod/return_temperature()
|
||||
return air_contents.temperature
|
||||
return air_contents.temperature
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/structure/trap
|
||||
name = "IT'S A TRAP"
|
||||
desc = "stepping on me is a guaranteed bad day"
|
||||
desc = "Stepping on me is a guaranteed bad day."
|
||||
icon = 'icons/obj/hand_of_god_structures.dmi'
|
||||
icon_state = "trap"
|
||||
density = FALSE
|
||||
|
||||
@@ -199,7 +199,15 @@
|
||||
var/obj/effect/mist/mymist = null
|
||||
var/ismist = 0 //needs a var so we can make it linger~
|
||||
var/watertemp = "normal" //freezing, normal, or boiling
|
||||
var/datum/looping_sound/showering/soundloop
|
||||
|
||||
/obj/machinery/shower/Initialize()
|
||||
. = ..()
|
||||
soundloop = new(list(src), FALSE)
|
||||
|
||||
/obj/machinery/shower/Destroy()
|
||||
QDEL_NULL(soundloop)
|
||||
return ..()
|
||||
|
||||
/obj/effect/mist
|
||||
name = "mist"
|
||||
@@ -215,6 +223,7 @@
|
||||
update_icon()
|
||||
add_fingerprint(M)
|
||||
if(on)
|
||||
soundloop.start()
|
||||
wash_turf()
|
||||
for(var/atom/movable/G in loc)
|
||||
if(isliving(G))
|
||||
@@ -223,6 +232,7 @@
|
||||
else if(isobj(G)) // Skip the light objects
|
||||
wash_obj(G)
|
||||
else
|
||||
soundloop.stop()
|
||||
if(isopenturf(loc))
|
||||
var/turf/open/tile = loc
|
||||
tile.MakeSlippery(min_wet_time = 5, wet_time_to_add = 1)
|
||||
@@ -368,6 +378,15 @@
|
||||
else
|
||||
L.clean_blood()
|
||||
|
||||
/obj/machinery/shower/proc/contamination_cleanse(atom/movable/thing)
|
||||
var/datum/component/radioactive/healthy_green_glow = thing.GetComponent(/datum/component/radioactive)
|
||||
if(!healthy_green_glow || QDELETED(healthy_green_glow))
|
||||
return
|
||||
var/strength = healthy_green_glow.strength
|
||||
if(strength <= RAD_BACKGROUND_RADIATION)
|
||||
qdel(healthy_green_glow)
|
||||
return
|
||||
healthy_green_glow.strength = max(strength-1, 0)
|
||||
|
||||
/obj/machinery/shower/process()
|
||||
if(on)
|
||||
@@ -377,6 +396,7 @@
|
||||
wash_mob(AM)
|
||||
else if(isobj(AM))
|
||||
wash_obj(AM)
|
||||
contamination_cleanse(AM)
|
||||
|
||||
/obj/machinery/shower/deconstruct(disassembled = TRUE)
|
||||
new /obj/item/stack/sheet/metal (loc, 3)
|
||||
|
||||
@@ -98,7 +98,8 @@
|
||||
playsound(loc, 'sound/items/welder2.ogg', 50, 1)
|
||||
|
||||
if(do_after(user, 40*W.toolspeed, target = src))
|
||||
if(!src || !WT.isOn()) return
|
||||
if(!src || !WT.isOn())
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You disassemble the windoor assembly.</span>")
|
||||
var/obj/item/stack/sheet/rglass/RG = new (get_turf(src), 5)
|
||||
RG.add_fingerprint(user)
|
||||
|
||||
@@ -212,6 +212,7 @@
|
||||
to_chat(user, "<span class='notice'>You begin to [anchored ? "unscrew the window from":"screw the window to"] the floor...</span>")
|
||||
if(do_after(user, decon_speed*I.toolspeed, target = src, extra_checks = CALLBACK(src, .proc/check_anchored, anchored)))
|
||||
anchored = !anchored
|
||||
air_update_turf(TRUE)
|
||||
update_nearby_icons()
|
||||
to_chat(user, "<span class='notice'>You [anchored ? "fasten the window to":"unfasten the window from"] the floor.</span>")
|
||||
return
|
||||
@@ -334,7 +335,6 @@
|
||||
return FALSE
|
||||
|
||||
setDir(target_dir)
|
||||
air_update_turf(1)
|
||||
ini_dir = dir
|
||||
add_fingerprint(usr)
|
||||
return TRUE
|
||||
@@ -363,11 +363,9 @@
|
||||
move_update_air(T)
|
||||
|
||||
/obj/structure/window/CanAtmosPass(turf/T)
|
||||
if(get_dir(loc, T) == dir)
|
||||
return !density
|
||||
if(dir == FULLTILE_WINDOW_DIR)
|
||||
return !density
|
||||
return 1
|
||||
if(!anchored || !density)
|
||||
return TRUE
|
||||
return !(FULLTILE_WINDOW_DIR == dir || dir == get_dir(loc, T))
|
||||
|
||||
//This proc is used to update the icons of nearby windows.
|
||||
/obj/structure/window/proc/update_nearby_icons()
|
||||
@@ -650,7 +648,7 @@
|
||||
/obj/structure/window/reinforced/clockwork/Initialize(mapload, direct)
|
||||
if(fulltile)
|
||||
made_glow = TRUE
|
||||
..()
|
||||
. = ..()
|
||||
QDEL_LIST(debris)
|
||||
var/amount_of_gears = 2
|
||||
if(fulltile)
|
||||
|
||||
Reference in New Issue
Block a user