mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-20 20:45:28 +01:00
Merge remote-tracking branch 'origin' into hedges
This commit is contained in:
@@ -61,7 +61,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark)
|
||||
// you are refactoring shitty landmark code.
|
||||
/obj/effect/landmark/start/assistant
|
||||
name = "Assistant"
|
||||
icon_state = "Assistant"
|
||||
icon_state = "Assistant" //icon_state is case sensitive. why are all of these capitalized? because fuck you that's why
|
||||
|
||||
/obj/effect/landmark/start/assistant/override
|
||||
jobspawn_override = TRUE
|
||||
@@ -151,6 +151,10 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark)
|
||||
name = "Medical Doctor"
|
||||
icon_state = "Medical Doctor"
|
||||
|
||||
/obj/effect/landmark/start/paramedic
|
||||
name = "Paramedic"
|
||||
icon_state = "Paramedic"
|
||||
|
||||
/obj/effect/landmark/start/scientist
|
||||
name = "Scientist"
|
||||
icon_state = "Scientist"
|
||||
|
||||
@@ -71,6 +71,8 @@ AI MODULES
|
||||
GLOB.lawchanges.Add("[time] <B>:</B> [user.name]([user.key]) used [src.name] on [ainame]([aikey]).[law2log ? " The law specified [law2log]" : ""]")
|
||||
log_law("[user.key]/[user.name] used [src.name] on [aikey]/([ainame]) from [AREACOORD(user)].[law2log ? " The law specified [law2log]" : ""]")
|
||||
message_admins("[ADMIN_LOOKUPFLW(user)] used [src.name] on [ADMIN_LOOKUPFLW(law_datum.owner)] from [AREACOORD(user)].[law2log ? " The law specified [law2log]" : ""]")
|
||||
if(law_datum.owner)
|
||||
deadchat_broadcast("<b> changed <span class='name'>[ainame]</span>'s laws at [get_area_name(user, TRUE)].</b>", "<span class='name'>[user]</span>", follow_target=user, message_type=DEADCHAT_LAWCHANGE)
|
||||
|
||||
//The proc that actually changes the silicon's laws.
|
||||
/obj/item/aiModule/proc/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow = FALSE)
|
||||
|
||||
@@ -700,6 +700,7 @@ RLD
|
||||
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
|
||||
matter = 200
|
||||
max_matter = 200
|
||||
var/matter_divisor = 35
|
||||
var/mode = LIGHT_MODE
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
actions_types = list(/datum/action/item_action/pick_color)
|
||||
@@ -723,7 +724,7 @@ RLD
|
||||
..()
|
||||
|
||||
/obj/item/construction/rld/update_icon()
|
||||
icon_state = "rld-[round(matter/35)]"
|
||||
icon_state = "rld-[round(matter/matter_divisor)]"
|
||||
..()
|
||||
|
||||
|
||||
@@ -759,7 +760,7 @@ RLD
|
||||
if(istype(A, /obj/machinery/light/))
|
||||
if(checkResource(deconcost, user))
|
||||
to_chat(user, "<span class='notice'>You start deconstructing [A]...</span>")
|
||||
user.Beam(A,icon_state="nzcrentrs_power",time=15)
|
||||
user.Beam(A,icon_state="light_beam",time=15)
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, TRUE)
|
||||
if(do_after(user, decondelay, target = A))
|
||||
if(!useResource(deconcost, user))
|
||||
@@ -773,7 +774,7 @@ RLD
|
||||
var/turf/closed/wall/W = A
|
||||
if(checkResource(floorcost, user))
|
||||
to_chat(user, "<span class='notice'>You start building a wall light...</span>")
|
||||
user.Beam(A,icon_state="nzcrentrs_power",time=15)
|
||||
user.Beam(A,icon_state="light_beam",time=15)
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, TRUE)
|
||||
playsound(src.loc, 'sound/effects/light_flicker.ogg', 50, FALSE)
|
||||
if(do_after(user, floordelay, target = A))
|
||||
@@ -819,7 +820,7 @@ RLD
|
||||
var/turf/open/floor/F = A
|
||||
if(checkResource(floorcost, user))
|
||||
to_chat(user, "<span class='notice'>You start building a floor light...</span>")
|
||||
user.Beam(A,icon_state="nzcrentrs_power",time=15)
|
||||
user.Beam(A,icon_state="light_beam",time=15)
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, TRUE)
|
||||
playsound(src.loc, 'sound/effects/light_flicker.ogg', 50, TRUE)
|
||||
if(do_after(user, floordelay, target = A))
|
||||
@@ -848,6 +849,17 @@ RLD
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/construction/rld/mini
|
||||
name = "mini-rapid-light-device (MRLD)"
|
||||
desc = "A device used to rapidly provide lighting sources to an area. Reload with metal, plasteel, glass or compressed matter cartridges."
|
||||
icon = 'icons/obj/tools.dmi'
|
||||
icon_state = "rld-5"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
|
||||
matter = 100
|
||||
max_matter = 100
|
||||
matter_divisor = 20
|
||||
|
||||
/obj/item/construction/plumbing
|
||||
name = "Plumbing Constructor"
|
||||
desc = "An expertly modified RCD outfitted to construct plumbing machinery."
|
||||
|
||||
@@ -125,3 +125,111 @@
|
||||
user.put_in_hands(ink)
|
||||
to_chat(user, "<span class='notice'>You remove [ink] from [src].</span>")
|
||||
ink = null
|
||||
|
||||
/obj/item/airlock_painter/decal
|
||||
name = "decal painter"
|
||||
desc = "An airlock painter, reprogramed to use a different style of paint in order to apply decals for floor tiles as well, in addition to repainting doors. Decals break when the floor tiles are removed. Alt-Click to change design."
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
icon_state = "decal_sprayer"
|
||||
item_state = "decalsprayer"
|
||||
custom_materials = list(/datum/material/iron=2000, /datum/material/glass=500)
|
||||
var/stored_dir = 2
|
||||
var/stored_color = ""
|
||||
var/stored_decal = "warningline"
|
||||
var/stored_decal_total = "warningline"
|
||||
var/color_list = list("","red","white")
|
||||
var/dir_list = list(1,2,4,8)
|
||||
var/decal_list = list(list("Warning Line","warningline"),
|
||||
list("Warning Line Corner","warninglinecorner"),
|
||||
list("Caution Label","caution"),
|
||||
list("Directional Arrows","arrows"),
|
||||
list("Stand Clear Label","stand_clear"),
|
||||
list("Box","box"),
|
||||
list("Box Corner","box_corners"),
|
||||
list("Delivery Marker","delivery"),
|
||||
list("Warning Box","warn_full"))
|
||||
|
||||
/obj/item/airlock_painter/decal/afterattack(atom/target, mob/user, proximity)
|
||||
. = ..()
|
||||
var/turf/open/floor/F = target
|
||||
if(!proximity)
|
||||
to_chat(user, "<span class='notice'>You need to get closer!</span>")
|
||||
return
|
||||
if(use_paint(user) && isturf(F))
|
||||
F.AddComponent(/datum/component/decal, 'icons/turf/decals.dmi', stored_decal_total, stored_dir, CLEAN_STRONG, color, null, null, alpha)
|
||||
|
||||
/obj/item/airlock_painter/decal/attack_self(mob/user)
|
||||
if((ink) && (ink.charges >= 1))
|
||||
to_chat(user, "<span class='notice'>[src] beeps to prevent you from removing the toner until out of charges.</span>")
|
||||
return
|
||||
. = ..()
|
||||
|
||||
/obj/item/airlock_painter/decal/AltClick(mob/user)
|
||||
. = ..()
|
||||
ui_interact(user)
|
||||
|
||||
/obj/item/airlock_painter/decal/Initialize()
|
||||
. = ..()
|
||||
ink = new /obj/item/toner/large(src)
|
||||
|
||||
/obj/item/airlock_painter/decal/proc/update_decal_path()
|
||||
var/yellow_fix = "" //This will have to do until someone refactor's markings.dm
|
||||
if (stored_color)
|
||||
yellow_fix = "_"
|
||||
stored_decal_total = "[stored_decal][yellow_fix][stored_color]"
|
||||
return
|
||||
|
||||
/obj/item/airlock_painter/decal/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "decal_painter", name, 500, 400, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/item/airlock_painter/decal/ui_data(mob/user)
|
||||
var/list/data = list()
|
||||
data["decal_direction"] = stored_dir
|
||||
data["decal_color"] = stored_color
|
||||
data["decal_style"] = stored_decal
|
||||
data["decal_list"] = list()
|
||||
data["color_list"] = list()
|
||||
data["dir_list"] = list()
|
||||
|
||||
for(var/i in decal_list)
|
||||
data["decal_list"] += list(list(
|
||||
"name" = i[1],
|
||||
"decal" = i[2]
|
||||
))
|
||||
for(var/j in color_list)
|
||||
data["color_list"] += list(list(
|
||||
"colors" = j
|
||||
))
|
||||
for(var/k in dir_list)
|
||||
data["dir_list"] += list(list(
|
||||
"dirs" = k
|
||||
))
|
||||
return data
|
||||
|
||||
/obj/item/airlock_painter/decal/ui_act(action,list/params)
|
||||
if(..())
|
||||
return
|
||||
switch(action)
|
||||
//Lists of decals and designs
|
||||
if("select decal")
|
||||
var/selected_decal = params["decals"]
|
||||
stored_decal = selected_decal
|
||||
if("select color")
|
||||
var/selected_color = params["colors"]
|
||||
stored_color = selected_color
|
||||
if("selected direction")
|
||||
var/selected_direction = text2num(params["dirs"])
|
||||
stored_dir = selected_direction
|
||||
update_decal_path()
|
||||
. = TRUE
|
||||
|
||||
/obj/item/airlock_painter/decal/debug
|
||||
name = "extreme decal painter"
|
||||
icon_state = "decal_sprayer_ex"
|
||||
|
||||
/obj/item/airlock_painter/decal/debug/Initialize()
|
||||
. = ..()
|
||||
ink = new /obj/item/toner/extreme(src)
|
||||
|
||||
@@ -182,7 +182,7 @@
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You insert [I] into [src], adding [cash_money] credits to the linked account.</span>")
|
||||
|
||||
to_chat(user, "<span class='notice'>The linked account now reports a balance of $[registered_account.account_balance].</span>")
|
||||
to_chat(user, "<span class='notice'>The linked account now reports a balance of [registered_account.account_balance] cr.</span>")
|
||||
qdel(I)
|
||||
|
||||
/obj/item/card/id/proc/mass_insert_money(list/money, mob/user)
|
||||
@@ -276,11 +276,11 @@
|
||||
if(mining_points)
|
||||
. += "There's [mining_points] mining equipment redemption point\s loaded onto this card."
|
||||
if(registered_account)
|
||||
. += "The account linked to the ID belongs to '[registered_account.account_holder]' and reports a balance of $[registered_account.account_balance]."
|
||||
. += "The account linked to the ID belongs to '[registered_account.account_holder]' and reports a balance of [registered_account.account_balance] cr."
|
||||
if(registered_account.account_job)
|
||||
var/datum/bank_account/D = SSeconomy.get_dep_account(registered_account.account_job.paycheck_department)
|
||||
if(D)
|
||||
. += "The [D.account_holder] reports a balance of $[D.account_balance]."
|
||||
. += "The [D.account_holder] reports a balance of [D.account_balance] cr."
|
||||
. += "<span class='info'>Alt-Click the ID to pull money from the linked account in the form of holochips.</span>"
|
||||
. += "<span class='info'>You can insert credits into the linked account by pressing holochips, cash, or coins against the ID.</span>"
|
||||
if(registered_account.account_holder == user.real_name)
|
||||
|
||||
@@ -934,6 +934,17 @@
|
||||
/obj/item/stack/sheet/glass = 1)
|
||||
def_components = list(/obj/item/stack/ore/bluespace_crystal = /obj/item/stack/ore/bluespace_crystal/artificial)
|
||||
|
||||
/obj/item/circuitboard/machine/bepis
|
||||
name = "BEPIS Chamber (Machine Board)"
|
||||
icon_state = "science"
|
||||
build_path = /obj/machinery/rnd/bepis
|
||||
req_components = list(
|
||||
/obj/item/stack/cable_coil = 5,
|
||||
/obj/item/stock_parts/capacitor = 1,
|
||||
/obj/item/stock_parts/manipulator = 1,
|
||||
/obj/item/stock_parts/micro_laser = 1,
|
||||
/obj/item/stock_parts/scanning_module = 1)
|
||||
|
||||
//Security
|
||||
|
||||
/obj/item/circuitboard/machine/protolathe/department/security
|
||||
|
||||
@@ -23,3 +23,78 @@
|
||||
..()
|
||||
var/choice = input("Select a species", "Human Spawner", null) in GLOB.species_list
|
||||
selected_species = GLOB.species_list[choice]
|
||||
|
||||
/obj/item/debug/omnitool
|
||||
name = "omnitool"
|
||||
desc = "The original hypertool, born before them all. Use it in hand to unleash it's true power."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "hypertool"
|
||||
item_state = "hypertool"
|
||||
toolspeed = 0.1
|
||||
tool_behaviour = null
|
||||
|
||||
/obj/item/debug/omnitool/examine()
|
||||
. = ..()
|
||||
. += " The mode is: [tool_behaviour]"
|
||||
|
||||
/obj/item/debug/omnitool/proc/check_menu(mob/user)
|
||||
if(!istype(user))
|
||||
return FALSE
|
||||
if(user.incapacitated() || !user.Adjacent(src))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/item/debug/omnitool/attack_self(mob/user)
|
||||
if(!user)
|
||||
return
|
||||
var/list/tool_list = list(
|
||||
"Crowbar" = image(icon = 'icons/obj/tools.dmi', icon_state = "crowbar"),
|
||||
"Multitool" = image(icon = 'icons/obj/device.dmi', icon_state = "multitool"),
|
||||
"Screwdriver" = image(icon = 'icons/obj/tools.dmi', icon_state = "screwdriver_map"),
|
||||
"Wirecutters" = image(icon = 'icons/obj/tools.dmi', icon_state = "cutters_map"),
|
||||
"Wrench" = image(icon = 'icons/obj/tools.dmi', icon_state = "wrench"),
|
||||
"Welding Tool" = image(icon = 'icons/obj/tools.dmi', icon_state = "miniwelder"),
|
||||
"Analyzer" = image(icon = 'icons/obj/device.dmi', icon_state = "analyzer"),
|
||||
"Mining Tool" = image(icon = 'icons/obj/mining.dmi', icon_state = "minipick"),
|
||||
"Shovel" = image(icon = 'icons/obj/mining.dmi', icon_state = "spade"),
|
||||
"Retractor" = image(icon = 'icons/obj/surgery.dmi', icon_state = "retractor"),
|
||||
"Hemostat" = image(icon = 'icons/obj/surgery.dmi', icon_state = "hemostat"),
|
||||
"Cautery" = image(icon = 'icons/obj/surgery.dmi', icon_state = "cautery"),
|
||||
"Drill" = image(icon = 'icons/obj/surgery.dmi', icon_state = "drill"),
|
||||
"Scalpel" = image(icon = 'icons/obj/surgery.dmi', icon_state = "scalpel"),
|
||||
"Saw" = image(icon = 'icons/obj/surgery.dmi', icon_state = "saw")
|
||||
)
|
||||
var/tool_result = show_radial_menu(user, src, tool_list, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE, tooltips = TRUE)
|
||||
if(!check_menu(user))
|
||||
return
|
||||
switch(tool_result)
|
||||
if("Crowbar")
|
||||
tool_behaviour = TOOL_CROWBAR
|
||||
if("Multitool")
|
||||
tool_behaviour = TOOL_MULTITOOL
|
||||
if("Screwdriver")
|
||||
tool_behaviour = TOOL_SCREWDRIVER
|
||||
if("Wirecutters")
|
||||
tool_behaviour = TOOL_WIRECUTTER
|
||||
if("Wrench")
|
||||
tool_behaviour = TOOL_WRENCH
|
||||
if("Welding Tool")
|
||||
tool_behaviour = TOOL_WELDER
|
||||
if("Analyzer")
|
||||
tool_behaviour = TOOL_ANALYZER
|
||||
if("Mining Tool")
|
||||
tool_behaviour = TOOL_MINING
|
||||
if("Shovel")
|
||||
tool_behaviour = TOOL_SHOVEL
|
||||
if("Retractor")
|
||||
tool_behaviour = TOOL_RETRACTOR
|
||||
if("Hemostat")
|
||||
tool_behaviour = TOOL_HEMOSTAT
|
||||
if("Cautery")
|
||||
tool_behaviour = TOOL_CAUTERY
|
||||
if("Drill")
|
||||
tool_behaviour = TOOL_DRILL
|
||||
if("Scalpel")
|
||||
tool_behaviour = TOOL_SCALPEL
|
||||
if("Saw")
|
||||
tool_behaviour = TOOL_SAW
|
||||
|
||||
@@ -22,6 +22,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
item_flags = NOBLUDGEON
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
slot_flags = ITEM_SLOT_ID | ITEM_SLOT_BELT
|
||||
actions_types = list(/datum/action/item_action/toggle_light)
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
|
||||
@@ -94,10 +95,13 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
return
|
||||
|
||||
if(id)
|
||||
. += "<span class='notice'>Alt-click to remove the id.</span>"
|
||||
. += "<span class='notice'>Alt-click to remove the ID.</span>" //won't name ID on examine in case it's stolen
|
||||
|
||||
if(inserted_item && (!isturf(loc)))
|
||||
. += "<span class='notice'>Ctrl-click to remove [inserted_item].</span>"
|
||||
. += "<span class='notice'>Ctrl-click to remove [inserted_item].</span>" //traitor pens are disguised so we're fine naming them on examine
|
||||
|
||||
if((!isnull(cartridge)))
|
||||
. += "<span class='notice'>Ctrl+Shift-click to remove the cartridge.</span>" //won't name cart on examine in case it's Detomatix
|
||||
|
||||
/obj/item/pda/Initialize()
|
||||
. = ..()
|
||||
@@ -448,13 +452,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
owner = id.registered_name
|
||||
update_label()
|
||||
if("Eject")//Ejects the cart, only done from hub.
|
||||
if (!isnull(cartridge))
|
||||
U.put_in_hands(cartridge)
|
||||
to_chat(U, "<span class='notice'>You remove [cartridge] from [src].</span>")
|
||||
scanmode = PDA_SCANNER_NONE
|
||||
cartridge.host_pda = null
|
||||
cartridge = null
|
||||
update_icon()
|
||||
eject_cart(U)
|
||||
|
||||
//MENU FUNCTIONS===================================
|
||||
|
||||
@@ -475,7 +473,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
//MAIN FUNCTIONS===================================
|
||||
|
||||
if("Light")
|
||||
toggle_light()
|
||||
toggle_light(U)
|
||||
if("Medical Scan")
|
||||
if(scanmode == PDA_SCANNER_MEDICAL)
|
||||
scanmode = PDA_SCANNER_NONE
|
||||
@@ -624,6 +622,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
|
||||
. = id
|
||||
id = null
|
||||
updateSelfDialog()
|
||||
update_icon()
|
||||
|
||||
if(ishuman(loc))
|
||||
@@ -752,19 +751,24 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
else
|
||||
remove_pen()
|
||||
|
||||
/obj/item/pda/CtrlClick()
|
||||
/obj/item/pda/CtrlClick(mob/user)
|
||||
..()
|
||||
|
||||
if(isturf(loc)) //stops the user from dragging the PDA by ctrl-clicking it.
|
||||
return
|
||||
|
||||
remove_pen()
|
||||
remove_pen(user)
|
||||
|
||||
/obj/item/pda/CtrlShiftClick(mob/user)
|
||||
..()
|
||||
eject_cart(user)
|
||||
|
||||
/obj/item/pda/verb/verb_toggle_light()
|
||||
set name = "Toggle light"
|
||||
set category = "Object"
|
||||
set name = "Toggle Flashlight"
|
||||
set src in oview(1)
|
||||
|
||||
toggle_light()
|
||||
toggle_light(usr)
|
||||
|
||||
/obj/item/pda/verb/verb_remove_id()
|
||||
set category = "Object"
|
||||
@@ -781,10 +785,17 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
set name = "Remove Pen"
|
||||
set src in usr
|
||||
|
||||
remove_pen()
|
||||
remove_pen(usr)
|
||||
|
||||
/obj/item/pda/proc/toggle_light()
|
||||
if(issilicon(usr) || !usr.canUseTopic(src, BE_CLOSE))
|
||||
/obj/item/pda/verb/verb_eject_cart()
|
||||
set category = "Object"
|
||||
set name = "Eject Cartridge"
|
||||
set src in usr
|
||||
|
||||
eject_cart(usr)
|
||||
|
||||
/obj/item/pda/proc/toggle_light(mob/user)
|
||||
if(issilicon(user) || !user.canUseTopic(src, BE_CLOSE))
|
||||
return
|
||||
if(fon)
|
||||
fon = FALSE
|
||||
@@ -793,19 +804,34 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
fon = TRUE
|
||||
set_light(f_lum)
|
||||
update_icon()
|
||||
for(var/X in actions)
|
||||
var/datum/action/A = X
|
||||
A.UpdateButtonIcon()
|
||||
|
||||
/obj/item/pda/proc/remove_pen()
|
||||
/obj/item/pda/proc/remove_pen(mob/user)
|
||||
|
||||
if(issilicon(usr) || !usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
|
||||
if(issilicon(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) //TK doesn't work even with this removed but here for readability
|
||||
return
|
||||
|
||||
if(inserted_item)
|
||||
usr.put_in_hands(inserted_item)
|
||||
to_chat(usr, "<span class='notice'>You remove [inserted_item] from [src].</span>")
|
||||
user.put_in_hands(inserted_item)
|
||||
to_chat(user, "<span class='notice'>You remove [inserted_item] from [src].</span>")
|
||||
inserted_item = null
|
||||
update_icon()
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>This PDA does not have a pen in it!</span>")
|
||||
to_chat(user, "<span class='warning'>This PDA does not have a pen in it!</span>")
|
||||
|
||||
/obj/item/pda/proc/eject_cart(mob/user)
|
||||
if(issilicon(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) //TK disabled to stop cartridge teleporting into hand
|
||||
return
|
||||
if (!isnull(cartridge))
|
||||
user.put_in_hands(cartridge)
|
||||
to_chat(user, "<span class='notice'>You eject [cartridge] from [src].</span>")
|
||||
scanmode = PDA_SCANNER_NONE
|
||||
cartridge.host_pda = null
|
||||
cartridge = null
|
||||
updateSelfDialog()
|
||||
update_icon()
|
||||
|
||||
//trying to insert or remove an id
|
||||
/obj/item/pda/proc/id_check(mob/user, obj/item/card/id/I)
|
||||
@@ -842,12 +868,14 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
|
||||
// access to status display signals
|
||||
/obj/item/pda/attackby(obj/item/C, mob/user, params)
|
||||
if(istype(C, /obj/item/cartridge) && !cartridge)
|
||||
if(istype(C, /obj/item/cartridge))
|
||||
if(!user.transferItemToLoc(C, src))
|
||||
return
|
||||
eject_cart(user)
|
||||
cartridge = C
|
||||
cartridge.host_pda = src
|
||||
to_chat(user, "<span class='notice'>You insert [cartridge] into [src].</span>")
|
||||
updateSelfDialog()
|
||||
update_icon()
|
||||
|
||||
else if(istype(C, /obj/item/card/id))
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
var/last_use = 0
|
||||
var/next_use = 0
|
||||
var/obj/effect/abstract/sync_holder/sync_holder
|
||||
var/resync_timer
|
||||
|
||||
/obj/item/desynchronizer/attack_self(mob/living/user)
|
||||
if(world.time < next_use)
|
||||
@@ -54,16 +55,20 @@
|
||||
SEND_SIGNAL(AM, COMSIG_MOVABLE_SECLUDED_LOCATION)
|
||||
last_use = world.time
|
||||
icon_state = "desynchronizer-on"
|
||||
addtimer(CALLBACK(src, .proc/resync), duration)
|
||||
resync_timer = addtimer(CALLBACK(src, .proc/resync), duration , TIMER_STOPPABLE)
|
||||
|
||||
/obj/item/desynchronizer/proc/resync()
|
||||
new /obj/effect/temp_visual/desynchronizer(sync_holder.drop_location())
|
||||
QDEL_NULL(sync_holder)
|
||||
if(resync_timer)
|
||||
deltimer(resync_timer)
|
||||
resync_timer = null
|
||||
icon_state = initial(icon_state)
|
||||
next_use = world.time + (world.time - last_use) // Could be 2*world.time-last_use but that would just be confusing
|
||||
|
||||
/obj/item/desynchronizer/Destroy()
|
||||
resync()
|
||||
if(sync_holder)
|
||||
resync()
|
||||
return ..()
|
||||
|
||||
/obj/effect/abstract/sync_holder
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
/obj/item/stack/circuit_stack
|
||||
name = "polycircuit aggregate"
|
||||
desc = "A dense, overdesigned cluster of electronics which attempted to function as a multipurpose circuit electronic. Circuits can be removed from it... if you don't bleed out in the process."
|
||||
icon_state = "circuit_mess"
|
||||
item_state = "rods"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
max_amount = 8
|
||||
var/circuit_type = /obj/item/electronics/airlock
|
||||
var/chosen_circuit = "airlock"
|
||||
|
||||
/obj/item/stack/circuit_stack/attack_self(mob/user)// Prevents the crafting menu, and tells you how to use it.
|
||||
to_chat(user, "<span class='warning'>You can't use [src] by itself, you'll have to try and remove one of these circuits by hand... carefully.</span>")
|
||||
|
||||
/obj/item/stack/circuit_stack/attack_hand(mob/user)
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(!user.get_inactive_held_item() == src)
|
||||
return ..()
|
||||
else
|
||||
if(zero_amount())
|
||||
return
|
||||
chosen_circuit = input("What type of circuit would you like to remove?", "Choose a Circuit Type", chosen_circuit) in list("airlock","firelock","fire alarm","air alarm","APC")
|
||||
if(zero_amount())
|
||||
return
|
||||
switch(chosen_circuit)
|
||||
if("airlock")
|
||||
circuit_type = /obj/item/electronics/airlock
|
||||
if("firelock")
|
||||
circuit_type = /obj/item/electronics/firelock
|
||||
if("fire alarm")
|
||||
circuit_type = /obj/item/electronics/firealarm
|
||||
if("air alarm")
|
||||
circuit_type = /obj/item/electronics/airalarm
|
||||
if("APC")
|
||||
circuit_type = /obj/item/electronics/apc
|
||||
to_chat(user, "<span class='notice'>You spot your circuit, and carefully attempt to remove it from [src], hold still!</span>")
|
||||
if(do_after(user, 30, target = user))
|
||||
if(!src || QDELETED(src))//Sanity Check.
|
||||
return
|
||||
var/returned_circuit = new circuit_type(src)
|
||||
user.put_in_hands(returned_circuit)
|
||||
use(1)
|
||||
if(!amount)
|
||||
to_chat(user, "<span class='notice'>You navigate the sharp edges of circuitry and remove the last board.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You navigate the sharp edges of circuitry and remove a single board from [src]</span>")
|
||||
else
|
||||
H.apply_damage(15, BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM))
|
||||
to_chat(user, "<span class='warning'>You give yourself a wicked cut on [src]'s many sharp corners and edges!</span>")
|
||||
..()
|
||||
|
||||
/obj/item/stack/circuit_stack/full
|
||||
amount = 8
|
||||
@@ -2,16 +2,16 @@
|
||||
name = "antigravity grenade"
|
||||
icon_state = "emp"
|
||||
item_state = "emp"
|
||||
|
||||
|
||||
var/range = 7
|
||||
var/forced_value = 0
|
||||
var/duration = 300
|
||||
|
||||
/obj/item/grenade/antigravity/prime()
|
||||
update_mob()
|
||||
|
||||
|
||||
for(var/turf/T in view(range,src))
|
||||
var/datum/component/C = T.AddComponent(/datum/component/forced_gravity,forced_value)
|
||||
QDEL_IN(C,duration)
|
||||
|
||||
T.AddElement(/datum/element/forced_gravity, forced_value)
|
||||
addtimer(CALLBACK(T, /datum/.proc/RemoveElement, forced_value), duration)
|
||||
|
||||
qdel(src)
|
||||
|
||||
@@ -0,0 +1,117 @@
|
||||
//~*~*~*~*SPARKLER*~*~*~*~*~*~
|
||||
|
||||
/obj/item/sparkler
|
||||
name = "sparkler"
|
||||
desc = "A little stick coated with metal power and barium nitrate, burns with a pleasing sparkle."
|
||||
icon = 'icons/obj/holiday_misc.dmi'
|
||||
icon_state = "sparkler"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
heat = 1000
|
||||
var/burntime = 60
|
||||
var/lit = FALSE
|
||||
|
||||
/obj/item/sparkler/fire_act(exposed_temperature, exposed_volume)
|
||||
light()
|
||||
|
||||
/obj/item/sparkler/attackby(obj/item/W, mob/user, params)
|
||||
var/ignition_msg = W.ignition_effect(src, user)
|
||||
if(ignition_msg)
|
||||
light(user, ignition_msg)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/sparkler/proc/light(mob/user, message)
|
||||
if(lit)
|
||||
return
|
||||
if(user && message)
|
||||
user.visible_message(message)
|
||||
lit = TRUE
|
||||
icon_state = "sparkler_on"
|
||||
force = 6
|
||||
hitsound = 'sound/items/welder.ogg'
|
||||
name = "lit [initial(name)]"
|
||||
attack_verb = list("burnt")
|
||||
set_light(l_range = 2, l_power = 2)
|
||||
damtype = "fire"
|
||||
START_PROCESSING(SSobj, src)
|
||||
playsound(src, 'sound/effects/fuse.ogg', 20, TRUE)
|
||||
update_icon()
|
||||
|
||||
/obj/item/sparkler/process()
|
||||
burntime--
|
||||
if(burntime < 1)
|
||||
new /obj/item/stack/rods(drop_location())
|
||||
qdel(src)
|
||||
else
|
||||
open_flame(heat)
|
||||
|
||||
/obj/item/sparkler/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
..()
|
||||
|
||||
/obj/item/sparkler/ignition_effect(atom/A, mob/user)
|
||||
. = "<span class='notice'>[user] gracefully lights [A] with [src].</span>"
|
||||
|
||||
/obj/item/sparkler/get_temperature()
|
||||
return lit * heat
|
||||
|
||||
//~*~*~*~*FIRECRACKER*~*~*~*~*~*~
|
||||
|
||||
/obj/item/grenade/firecracker
|
||||
name = "large firecracker"
|
||||
desc = "Outlawed in most of the sector. Doubles as an excellent finger remover."
|
||||
icon = 'icons/obj/holiday_misc.dmi'
|
||||
icon_state = "firecracker"
|
||||
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
item_state = "flare"
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
det_time = 30
|
||||
|
||||
/obj/item/grenade/firecracker/attack_self(mob/user) // You need to light it manually.
|
||||
return
|
||||
|
||||
/obj/item/grenade/firecracker/attackby(obj/item/W, mob/user, params)
|
||||
var/ignition_msg = W.ignition_effect(src, user)
|
||||
if(ignition_msg && !active)
|
||||
visible_message(ignition_msg)
|
||||
preprime(user)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/grenade/firecracker/fire_act(exposed_temperature, exposed_volume)
|
||||
prime()
|
||||
|
||||
obj/item/grenade/firecracker/wirecutter_act(mob/living/user, obj/item/I)
|
||||
if(active)
|
||||
return
|
||||
if(det_time)
|
||||
det_time -= 10
|
||||
to_chat(user, "<span class='notice'>You shorten the fuse of [src] with [I].")
|
||||
playsound(src, 'sound/items/wirecutter.ogg', 20, TRUE)
|
||||
icon_state = initial(icon_state) + "_[det_time]"
|
||||
update_icon()
|
||||
else
|
||||
to_chat(user, "<span class='danger'>You've already removed all of the fuse!")
|
||||
|
||||
obj/item/grenade/firecracker/preprime(mob/user, delayoverride, msg = TRUE, volume = 80)
|
||||
var/turf/T = get_turf(src)
|
||||
log_grenade(user, T)
|
||||
if(user)
|
||||
add_fingerprint(user)
|
||||
if(msg)
|
||||
to_chat(user, "<span class='warning'>You prime [src]! [capitalize(DisplayTimeText(det_time))]!</span>")
|
||||
playsound(src, 'sound/effects/fuse.ogg', volume, TRUE)
|
||||
active = TRUE
|
||||
icon_state = initial(icon_state) + "_active"
|
||||
addtimer(CALLBACK(src, .proc/prime), isnull(delayoverride)? det_time : delayoverride)
|
||||
|
||||
/obj/item/grenade/firecracker/prime()
|
||||
update_mob()
|
||||
var/explosion_loc = get_turf(src)
|
||||
qdel(src)
|
||||
explosion(explosion_loc,-1,-1,2)
|
||||
|
||||
|
||||
@@ -316,6 +316,7 @@
|
||||
checktank = FALSE
|
||||
range_multiplier = 3
|
||||
throw_amount = 1
|
||||
pressureSetting = 2
|
||||
maxWeightClass = 2 //a single magspear
|
||||
spin_item = FALSE
|
||||
var/static/list/magspear_typecache = typecacheof(/obj/item/throwing_star/magspear)
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
item_state = "banner_medical"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/banners_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/banners_righthand.dmi'
|
||||
job_loyalties = list("Medical Doctor", "Chemist", "Geneticist", "Virologist", "Chief Medical Officer")
|
||||
job_loyalties = list("Medical Doctor", "Chemist", "Virologist", "Chief Medical Officer")
|
||||
warcry = "No wounds cannot be healed!"
|
||||
|
||||
/obj/item/banner/medical/mundane
|
||||
@@ -131,7 +131,7 @@
|
||||
item_state = "banner_science"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/banners_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/banners_righthand.dmi'
|
||||
job_loyalties = list("Scientist", "Roboticist", "Research Director")
|
||||
job_loyalties = list("Scientist", "Roboticist", "Research Director", "Geneticist",)
|
||||
warcry = "For Cuban Pete!"
|
||||
|
||||
/obj/item/banner/science/mundane
|
||||
|
||||
@@ -72,3 +72,8 @@
|
||||
icon_state = "spacecash1000"
|
||||
singular_name = "one thousand credit bill"
|
||||
value = 1000
|
||||
|
||||
/obj/item/stack/spacecash/c10000
|
||||
icon_state = "spacecash10000"
|
||||
singular_name = "ten thousand credit bill"
|
||||
value = 10000
|
||||
|
||||
@@ -114,6 +114,9 @@
|
||||
grind_results = list(/datum/reagent/cellulose = 2)
|
||||
custom_price = 100
|
||||
|
||||
/obj/item/stack/medical/gauze/twelve
|
||||
amount = 12
|
||||
|
||||
/obj/item/stack/medical/gauze/heal(mob/living/M, mob/user)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
|
||||
@@ -282,6 +282,7 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \
|
||||
new/datum/stack_recipe("mining satchel", /obj/item/storage/bag/ore, 4), \
|
||||
new/datum/stack_recipe("chemistry bag", /obj/item/storage/bag/chemistry, 4), \
|
||||
new/datum/stack_recipe("bio bag", /obj/item/storage/bag/bio, 4), \
|
||||
new/datum/stack_recipe("construction bag", /obj/item/storage/bag/construction, 4), \
|
||||
null, \
|
||||
new/datum/stack_recipe("improvised gauze", /obj/item/stack/medical/gauze/improvised, 1, 2, 6), \
|
||||
new/datum/stack_recipe("rag", /obj/item/reagent_containers/glass/rag, 1), \
|
||||
|
||||
@@ -175,6 +175,16 @@
|
||||
/obj/item/plunger
|
||||
))
|
||||
|
||||
/obj/item/storage/belt/medical/paramedic/PopulateContents()
|
||||
new /obj/item/sensor_device(src)
|
||||
new /obj/item/flashlight/pen(src)
|
||||
new /obj/item/stack/medical/gauze/twelve(src)
|
||||
new /obj/item/reagent_containers/syringe(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/epinephrine(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/calomel(src)
|
||||
new /obj/item/reagent_containers/glass/bottle/formaldehyde(src)
|
||||
update_icon()
|
||||
|
||||
/obj/item/storage/belt/security
|
||||
name = "security belt"
|
||||
desc = "Can hold security gear like handcuffs and flashes."
|
||||
|
||||
@@ -451,7 +451,7 @@
|
||||
name = "box of teriyaki-flavoured donk-pockets"
|
||||
icon_state = "donkpocketboxteriyaki"
|
||||
donktype = /obj/item/reagent_containers/food/snacks/donkpocket/teriyaki
|
||||
|
||||
|
||||
/obj/item/storage/box/donkpockets/donkpocketpizza
|
||||
name = "box of pizza-flavoured donk-pockets"
|
||||
icon_state = "donkpocketboxpizza"
|
||||
@@ -466,7 +466,7 @@
|
||||
name = "box of berry-flavoured donk-pockets"
|
||||
icon_state = "donkpocketboxberry"
|
||||
donktype = /obj/item/reagent_containers/food/snacks/donkpocket/berry
|
||||
|
||||
|
||||
/obj/item/storage/box/donkpockets/donkpockethonk
|
||||
name = "box of banana-flavoured donk-pockets"
|
||||
icon_state = "donkpocketboxbanana"
|
||||
@@ -1201,3 +1201,42 @@
|
||||
/obj/item/storage/box/material=1
|
||||
)
|
||||
generate_items_inside(items_inside,src)
|
||||
|
||||
/obj/item/storage/box/fireworks
|
||||
name = "box of fireworks"
|
||||
desc = "Contains an assortment of fireworks."
|
||||
illustration = "flashbang"
|
||||
|
||||
/obj/item/storage/box/fireworks/PopulateContents()
|
||||
for(var/i in 1 to 3)
|
||||
new/obj/item/sparkler(src)
|
||||
new/obj/item/grenade/firecracker(src)
|
||||
new /obj/item/toy/snappop(src)
|
||||
|
||||
/obj/item/storage/box/fireworks/dangerous
|
||||
|
||||
/obj/item/storage/box/fireworks/dangerous/PopulateContents()
|
||||
for(var/i in 1 to 3)
|
||||
new/obj/item/sparkler(src)
|
||||
new/obj/item/grenade/firecracker(src)
|
||||
if(prob(20))
|
||||
new /obj/item/grenade/syndieminibomb/concussion/frag(src)
|
||||
else
|
||||
new /obj/item/toy/snappop(src)
|
||||
|
||||
/obj/item/storage/box/firecrackers
|
||||
name = "box of firecrackers"
|
||||
desc = "A box filled with illegal firecracker. You wonder who still makes these."
|
||||
icon_state = "syndiebox"
|
||||
|
||||
/obj/item/storage/box/firecrackers/PopulateContents()
|
||||
for(var/i in 1 to 7)
|
||||
new/obj/item/grenade/firecracker(src)
|
||||
|
||||
/obj/item/storage/box/sparklers
|
||||
name = "box of sparklers"
|
||||
desc = "A box of NT brand sparklers, burns hot even in the cold of space-winter."
|
||||
|
||||
/obj/item/storage/box/sparklers/PopulateContents()
|
||||
for(var/i in 1 to 7)
|
||||
new/obj/item/sparkler(src)
|
||||
|
||||
@@ -1376,6 +1376,11 @@
|
||||
icon_state = "md"
|
||||
toysay = "The patient is already dead!"
|
||||
|
||||
/obj/item/toy/figure/paramedic
|
||||
name = "Paramedic action figure"
|
||||
icon_state = "paramedic"
|
||||
toysay = "And the best part? I'm not even a real doctor!"
|
||||
|
||||
/obj/item/toy/figure/mime
|
||||
name = "Mime action figure"
|
||||
icon_state = "mime"
|
||||
|
||||
@@ -843,8 +843,9 @@
|
||||
|
||||
/obj/item/twohanded/binoculars/unwield(mob/user)
|
||||
. = ..()
|
||||
UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED)
|
||||
listeningTo = null
|
||||
if(listeningTo)
|
||||
UnregisterSignal(listeningTo, COMSIG_MOVABLE_MOVED)
|
||||
listeningTo = null
|
||||
user.visible_message("<span class='notice'>[user] lowers [src].</span>", "<span class='notice'>You lower [src].</span>")
|
||||
item_state = "binoculars"
|
||||
user.regenerate_icons()
|
||||
|
||||
@@ -246,6 +246,7 @@
|
||||
if(brain.force_replace_ai_name)
|
||||
A.fully_replace_character_name(A.name, brain.replacement_ai_name())
|
||||
SSblackbox.record_feedback("amount", "ais_created", 1)
|
||||
deadchat_broadcast(" has been brought online at <b>[get_area_name(A, TRUE)]</b>.", "<span class='name'>[A]</span>", follow_target=A)
|
||||
qdel(src)
|
||||
else
|
||||
state = AI_READY_CORE
|
||||
|
||||
@@ -195,9 +195,9 @@
|
||||
/obj/item/clothing/under/rank/medical/doctor/purple = 1,
|
||||
/obj/item/clothing/under/rank/medical/doctor = 3,
|
||||
/obj/item/clothing/suit/toggle/labcoat = 3,
|
||||
/obj/item/clothing/suit/toggle/labcoat/emt = 3,
|
||||
/obj/item/clothing/suit/toggle/labcoat/paramedic = 3,
|
||||
/obj/item/clothing/shoes/sneakers/white = 3,
|
||||
/obj/item/clothing/head/soft/emt = 3)
|
||||
/obj/item/clothing/head/soft/paramedic = 3)
|
||||
generate_items_inside(items_inside,src)
|
||||
return
|
||||
|
||||
@@ -243,7 +243,7 @@
|
||||
|
||||
/obj/structure/closet/wardrobe/genetics_white/PopulateContents()
|
||||
var/static/items_inside = list(
|
||||
/obj/item/clothing/under/rank/medical/geneticist = 2,
|
||||
/obj/item/clothing/under/rank/rnd/geneticist = 2,
|
||||
/obj/item/clothing/shoes/sneakers/white = 2,
|
||||
/obj/item/clothing/suit/toggle/labcoat/genetics = 2,
|
||||
/obj/item/storage/backpack/genetics = 2,
|
||||
|
||||
@@ -22,8 +22,6 @@
|
||||
user.visible_message("<span class='notice'>[user] fells [src] with the [W].</span>","<span class='notice'>You fell [src] with the [W].</span>", "<span class='hear'>You hear the sound of a tree falling.</span>")
|
||||
playsound(get_turf(src), 'sound/effects/meteorimpact.ogg', 100 , FALSE, FALSE)
|
||||
user.log_message("cut down [src] at [AREACOORD(src)]", LOG_ATTACK)
|
||||
if(istype(src, /obj/structure/flora/tree/pine/xmas))
|
||||
message_admins("[ADMIN_LOOKUPFLW(user)][ADMIN_SMITE(user)] cut down [src] at [ADMIN_COORDJMP(src)]")
|
||||
for(var/i=1 to log_amount)
|
||||
new /obj/item/grown/log/tree(get_turf(src))
|
||||
var/obj/structure/flora/stump/S = new(loc)
|
||||
@@ -58,6 +56,7 @@
|
||||
desc = "A wondrous decorated Christmas tree."
|
||||
icon_state = "pine_c"
|
||||
icon_states = null
|
||||
flags_1 = NODECONSTRUCT_1 //protected by the christmas spirit
|
||||
|
||||
/obj/structure/flora/tree/pine/xmas/presents
|
||||
icon_state = "pinepresents"
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
#define STAIR_TERMINATOR_NO 1
|
||||
#define STAIR_TERMINATOR_YES 2
|
||||
|
||||
// dir determines the direction of travel to go upwards (due to lack of sprites, currently only 1 and 2 make sense)
|
||||
// stairs require /turf/open/openspace as the tile above them to work
|
||||
// dir determines the direction of travel to go upwards
|
||||
// stairs require /turf/open/openspace as the tile above them to work, unless your stairs have 'force_open_above' set to TRUE
|
||||
// multiple stair objects can be chained together; the Z level transition will happen on the final stair object in the chain
|
||||
|
||||
/obj/structure/stairs
|
||||
@@ -16,6 +16,18 @@
|
||||
var/terminator_mode = STAIR_TERMINATOR_AUTOMATIC
|
||||
var/turf/listeningTo
|
||||
|
||||
/obj/structure/stairs/north
|
||||
dir = NORTH
|
||||
|
||||
/obj/structure/stairs/south
|
||||
dir = SOUTH
|
||||
|
||||
/obj/structure/stairs/east
|
||||
dir = EAST
|
||||
|
||||
/obj/structure/stairs/west
|
||||
dir = WEST
|
||||
|
||||
/obj/structure/stairs/Initialize(mapload)
|
||||
if(force_open_above)
|
||||
force_open_above()
|
||||
|
||||
@@ -160,5 +160,6 @@
|
||||
name = "unattached transit tube pod"
|
||||
icon = 'icons/obj/atmospherics/pipes/transit_tube.dmi'
|
||||
icon_state = "pod"
|
||||
desc = "Could probably be <b>dragged</b> into an open Transit Tube."
|
||||
anchored = FALSE
|
||||
density = FALSE
|
||||
|
||||
Reference in New Issue
Block a user