mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-18 03:26:31 +01:00
Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync
This commit is contained in:
@@ -84,7 +84,7 @@
|
||||
|
||||
else if(is_reagent_container(used_item))
|
||||
var/obj/item/reagent_containers/powder_keg = used_item
|
||||
if(!(powder_keg.reagent_flags & OPENCONTAINER))
|
||||
if(!powder_keg.is_open_container())
|
||||
return ..()
|
||||
if(istype(powder_keg, /obj/item/rag))
|
||||
return ..()
|
||||
|
||||
@@ -212,63 +212,63 @@
|
||||
electronics = null
|
||||
ae.forceMove(src.loc)
|
||||
|
||||
else if(istype(W, /obj/item/stack/sheet) && (!glass || !mineral))
|
||||
var/obj/item/stack/sheet/G = W
|
||||
if(G)
|
||||
if(G.get_amount() >= 1)
|
||||
if(!noglass)
|
||||
if(!glass)
|
||||
if(istype(G, /obj/item/stack/sheet/rglass) || istype(G, /obj/item/stack/sheet/glass))
|
||||
playsound(src, 'sound/items/tools/crowbar.ogg', 100, TRUE)
|
||||
user.visible_message(span_notice("[user] adds [G.name] to the airlock assembly."), \
|
||||
span_notice("You start to install [G.name] into the airlock assembly..."))
|
||||
if(do_after(user, 4 SECONDS, target = src))
|
||||
if(G.get_amount() < 1 || glass)
|
||||
return
|
||||
if(G.type == /obj/item/stack/sheet/rglass)
|
||||
to_chat(user, span_notice("You install [G.name] windows into the airlock assembly."))
|
||||
heat_proof_finished = 1 //reinforced glass makes the airlock heat-proof
|
||||
name = "near finished heat-proofed window airlock assembly"
|
||||
else
|
||||
to_chat(user, span_notice("You install regular glass windows into the airlock assembly."))
|
||||
name = "near finished window airlock assembly"
|
||||
G.use(1)
|
||||
glass = TRUE
|
||||
if(!nomineral && !mineral)
|
||||
if(istype(G, /obj/item/stack/sheet/mineral) && G.sheettype)
|
||||
var/M = G.sheettype
|
||||
var/mineralassembly = text2path("/obj/structure/door_assembly/door_assembly_[M]")
|
||||
if(!ispath(mineralassembly))
|
||||
to_chat(user, span_warning("You cannot add [G] to [src]!"))
|
||||
return
|
||||
if(G.get_amount() >= 2)
|
||||
playsound(src, 'sound/items/tools/crowbar.ogg', 100, TRUE)
|
||||
user.visible_message(span_notice("[user] adds [G.name] to the airlock assembly."), \
|
||||
span_notice("You start to install [G.name] into the airlock assembly..."))
|
||||
if(do_after(user, 4 SECONDS, target = src))
|
||||
if(G.get_amount() < 2 || mineral)
|
||||
return
|
||||
to_chat(user, span_notice("You install [M] plating into the airlock assembly."))
|
||||
G.use(2)
|
||||
var/obj/structure/door_assembly/MA = new mineralassembly(loc)
|
||||
|
||||
if(MA.noglass && glass) //in case the new door doesn't support glass. prevents the new one from reverting to a normal airlock after being constructed.
|
||||
var/obj/item/stack/sheet/dropped_glass
|
||||
if(heat_proof_finished)
|
||||
dropped_glass = new /obj/item/stack/sheet/rglass(drop_location())
|
||||
heat_proof_finished = FALSE
|
||||
else
|
||||
dropped_glass = new /obj/item/stack/sheet/glass(drop_location())
|
||||
glass = FALSE
|
||||
to_chat(user, span_notice("As you finish, a [dropped_glass.singular_name] falls out of [MA]'s frame."))
|
||||
|
||||
transfer_assembly_vars(src, MA, TRUE)
|
||||
else
|
||||
to_chat(user, span_warning("You need at least two sheets add a mineral cover!"))
|
||||
else
|
||||
to_chat(user, span_warning("You cannot add [G] to [src]!"))
|
||||
else if(istype(W, /obj/item/stack/sheet))
|
||||
var/obj/item/stack/sheet/sheet = W
|
||||
if(!glass && (istype(sheet, /obj/item/stack/sheet/rglass) || istype(sheet, /obj/item/stack/sheet/glass)))
|
||||
if(noglass)
|
||||
to_chat(user, span_warning("You cannot add [sheet] to [src]!"))
|
||||
return
|
||||
playsound(src, 'sound/items/tools/crowbar.ogg', 100, TRUE)
|
||||
user.visible_message(span_notice("[user] adds [sheet.name] to the airlock assembly."), \
|
||||
span_notice("You start to install [sheet.name] into the airlock assembly..."))
|
||||
if(do_after(user, 4 SECONDS, target = src))
|
||||
if(sheet.get_amount() < 1 || glass)
|
||||
return
|
||||
if(sheet.type == /obj/item/stack/sheet/rglass)
|
||||
to_chat(user, span_notice("You install [sheet.name] windows into the airlock assembly."))
|
||||
heat_proof_finished = 1 //reinforced glass makes the airlock heat-proof
|
||||
name = "near finished heat-proofed window airlock assembly"
|
||||
else
|
||||
to_chat(user, span_warning("You cannot add [G] to [src]!"))
|
||||
to_chat(user, span_notice("You install regular glass windows into the airlock assembly."))
|
||||
name = "near finished window airlock assembly"
|
||||
sheet.use(1)
|
||||
glass = TRUE
|
||||
return
|
||||
|
||||
if(istype(sheet, /obj/item/stack/sheet/mineral) && sheet.construction_path_type)
|
||||
if(nomineral || mineral)
|
||||
to_chat(user, span_warning("You cannot add [sheet] to [src]!"))
|
||||
return
|
||||
|
||||
var/M = sheet.construction_path_type
|
||||
var/mineralassembly = text2path("/obj/structure/door_assembly/door_assembly_[M]")
|
||||
if(!ispath(mineralassembly))
|
||||
to_chat(user, span_warning("You cannot add [sheet] to [src]!"))
|
||||
return
|
||||
if(sheet.get_amount() < 2)
|
||||
to_chat(user, span_warning("You need at least two sheets add a mineral cover!"))
|
||||
return
|
||||
|
||||
playsound(src, 'sound/items/tools/crowbar.ogg', 100, TRUE)
|
||||
user.visible_message(span_notice("[user] adds [sheet.name] to the airlock assembly."), \
|
||||
span_notice("You start to install [sheet.name] into the airlock assembly..."))
|
||||
if(!do_after(user, 4 SECONDS, target = src) || sheet.get_amount() < 2 || mineral)
|
||||
return
|
||||
to_chat(user, span_notice("You install [M] plating into the airlock assembly."))
|
||||
sheet.use(2)
|
||||
var/obj/structure/door_assembly/MA = new mineralassembly(loc)
|
||||
|
||||
if(MA.noglass && glass) //in case the new door doesn't support glass. prevents the new one from reverting to a normal airlock after being constructed.
|
||||
var/obj/item/stack/sheet/dropped_glass
|
||||
if(heat_proof_finished)
|
||||
dropped_glass = new /obj/item/stack/sheet/rglass(drop_location())
|
||||
heat_proof_finished = FALSE
|
||||
else
|
||||
dropped_glass = new /obj/item/stack/sheet/glass(drop_location())
|
||||
glass = FALSE
|
||||
to_chat(user, span_notice("As you finish, a [dropped_glass.singular_name] falls out of [MA]'s frame."))
|
||||
|
||||
transfer_assembly_vars(src, MA, TRUE)
|
||||
|
||||
else if((W.tool_behaviour == TOOL_SCREWDRIVER) && state == AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER )
|
||||
user.visible_message(span_notice("[user] finishes the airlock."), \
|
||||
|
||||
@@ -45,12 +45,7 @@
|
||||
|
||||
/obj/structure/girder/attackby(obj/item/W, mob/user, list/modifiers, list/attack_modifiers)
|
||||
var/skill_modifier = user.mind.get_skill_modifier(/datum/skill/construction, SKILL_SPEED_MODIFIER) //SKYRAT EDIT
|
||||
var/platingmodifier = 1
|
||||
if(HAS_TRAIT(user, TRAIT_QUICK_BUILD))
|
||||
platingmodifier = 0.7
|
||||
if(next_beep <= world.time)
|
||||
next_beep = world.time + 10
|
||||
playsound(src, 'sound/machines/clockcult/integration_cog_install.ogg', 50, TRUE)
|
||||
|
||||
add_fingerprint(user)
|
||||
|
||||
if(istype(W, /obj/item/gun/energy/plasmacutter))
|
||||
@@ -65,9 +60,14 @@
|
||||
if(!QDELETED(M))
|
||||
M.add_fingerprint(user)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(isstack(W))
|
||||
var/obj/item/stack/stack = W
|
||||
if(!stack.usable_for_construction)
|
||||
balloon_alert(user, "can't make walls with it!")
|
||||
return
|
||||
|
||||
else if(isstack(W))
|
||||
if(iswallturf(loc) || (locate(/obj/structure/falsewall) in src.loc.contents))
|
||||
balloon_alert(user, "wall already present!")
|
||||
return
|
||||
@@ -79,256 +79,260 @@
|
||||
balloon_alert(user, "need tram floors!")
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/stack/rods))
|
||||
var/obj/item/stack/rods/rod = W
|
||||
var/amount = construction_cost[rod.type]
|
||||
if(state == GIRDER_DISPLACED)
|
||||
if(rod.get_amount() < amount)
|
||||
balloon_alert(user, "need [amount] rods!")
|
||||
return
|
||||
balloon_alert(user, "concealing entrance...")
|
||||
if(do_after(user, 2 SECONDS * skill_modifier, target = src)) //SKYRAT EDIT
|
||||
if(rod.get_amount() < amount)
|
||||
return
|
||||
rod.use(amount)
|
||||
var/obj/structure/falsewall/iron/FW = new (loc)
|
||||
user.mind.adjust_experience(/datum/skill/construction, 5) //SKYRAT EDIT
|
||||
transfer_fingerprints_to(FW)
|
||||
qdel(src)
|
||||
return
|
||||
else if(state == GIRDER_REINF)
|
||||
balloon_alert(user, "need plasteel sheet!")
|
||||
return
|
||||
else
|
||||
if(rod.get_amount() < amount)
|
||||
balloon_alert(user, "need [amount] rods!")
|
||||
return
|
||||
balloon_alert(user, "adding rods...")
|
||||
if(do_after(user, 4 SECONDS * skill_modifier, target = src)) // BUBBER EDIT CHANGE - Skills - ORIGINAL: if(do_after(user, 4 SECONDS, target = src))
|
||||
if(rod.get_amount() < amount)
|
||||
return
|
||||
rod.use(amount)
|
||||
var/turf/T = get_turf(src)
|
||||
T.place_on_top(/turf/closed/wall/mineral/iron)
|
||||
user.mind.adjust_experience(/datum/skill/construction, 5) //SKYRAT EDIT
|
||||
transfer_fingerprints_to(T)
|
||||
qdel(src)
|
||||
return
|
||||
make_wall(stack, user)
|
||||
return
|
||||
|
||||
if(!istype(W, /obj/item/stack/sheet))
|
||||
return
|
||||
|
||||
var/obj/item/stack/sheet/sheets = W
|
||||
if(istype(sheets, /obj/item/stack/sheet/iron))
|
||||
var/amount = construction_cost[/obj/item/stack/sheet/iron]
|
||||
if(state == GIRDER_DISPLACED)
|
||||
if(sheets.get_amount() < amount)
|
||||
balloon_alert(user, "need [amount] sheets!")
|
||||
return
|
||||
balloon_alert(user, "concealing entrance...")
|
||||
if(do_after(user, 20 * platingmodifier * skill_modifier, target = src)) //SKYRAT EDIT
|
||||
if(sheets.get_amount() < amount)
|
||||
return
|
||||
sheets.use(amount)
|
||||
var/obj/structure/falsewall/F = new (loc)
|
||||
user.mind.adjust_experience(/datum/skill/construction, 5) //SKYRAT EDIT
|
||||
transfer_fingerprints_to(F)
|
||||
qdel(src)
|
||||
return
|
||||
else if(state == GIRDER_REINF)
|
||||
balloon_alert(user, "need plasteel sheet!")
|
||||
return
|
||||
else if(state == GIRDER_TRAM)
|
||||
if(sheets.get_amount() < amount)
|
||||
balloon_alert(user, "need [amount] sheets!")
|
||||
return
|
||||
balloon_alert(user, "adding plating...")
|
||||
if (do_after(user, 4 SECONDS * skill_modifier, target = src)) //SKYRAT EDIT
|
||||
if(sheets.get_amount() < amount)
|
||||
return
|
||||
sheets.use(amount)
|
||||
var/obj/structure/tram/alt/iron/tram_wall = new(loc)
|
||||
user.mind.adjust_experience(/datum/skill/construction, 5) //SKYRAT EDIT
|
||||
transfer_fingerprints_to(tram_wall)
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
if(sheets.get_amount() < amount)
|
||||
balloon_alert(user, "need [amount] sheets!")
|
||||
return
|
||||
balloon_alert(user, "adding plating...")
|
||||
if (do_after(user, 40 * platingmodifier * skill_modifier, target = src)) //SKYRAT EDIT
|
||||
if(sheets.get_amount() < amount)
|
||||
return
|
||||
sheets.use(amount)
|
||||
var/turf/T = get_turf(src)
|
||||
T.place_on_top(/turf/closed/wall)
|
||||
user.mind.adjust_experience(/datum/skill/construction, 5) //SKYRAT EDIT
|
||||
transfer_fingerprints_to(T)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(istype(sheets, /obj/item/stack/sheet/titaniumglass) && state == GIRDER_TRAM)
|
||||
var/amount = construction_cost[/obj/item/stack/sheet/titaniumglass]
|
||||
if(sheets.get_amount() < amount)
|
||||
balloon_alert(user, "need [amount] sheets!")
|
||||
return
|
||||
balloon_alert(user, "adding panel...")
|
||||
if (do_after(user, 2 SECONDS * skill_modifier, target = src)) //SKYRAT EDIT
|
||||
if(sheets.get_amount() < amount)
|
||||
return
|
||||
sheets.use(amount)
|
||||
var/obj/structure/tram/tram_wall = new(loc)
|
||||
user.mind.adjust_experience(/datum/skill/construction, 5) //SKYRAT EDIT
|
||||
transfer_fingerprints_to(tram_wall)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(istype(sheets, /obj/item/stack/sheet/plasteel))
|
||||
var/amount = construction_cost[/obj/item/stack/sheet/plasteel]
|
||||
if(state == GIRDER_DISPLACED)
|
||||
if(sheets.get_amount() < amount)
|
||||
balloon_alert(user, "need [amount] sheets!")
|
||||
return
|
||||
balloon_alert(user, "concealing entrance...")
|
||||
if(do_after(user, 2 SECONDS * skill_modifier, target = src)) //SKYRAT EDIT
|
||||
if(sheets.get_amount() < amount)
|
||||
return
|
||||
sheets.use(amount)
|
||||
var/obj/structure/falsewall/reinforced/FW = new (loc)
|
||||
user.mind.adjust_experience(/datum/skill/construction, 5) //SKYRAT EDIT
|
||||
transfer_fingerprints_to(FW)
|
||||
qdel(src)
|
||||
return
|
||||
else if(state == GIRDER_REINF)
|
||||
amount = 1 // hur dur let's make plasteel have different construction amounts 4norasin
|
||||
if(sheets.get_amount() < amount)
|
||||
return
|
||||
balloon_alert(user, "adding plating...")
|
||||
if(do_after(user, 50 * platingmodifier * skill_modifier, target = src)) //SKYRAT EDIT
|
||||
if(sheets.get_amount() < amount)
|
||||
return
|
||||
sheets.use(amount)
|
||||
var/turf/T = get_turf(src)
|
||||
T.place_on_top(/turf/closed/wall/r_wall)
|
||||
user.mind.adjust_experience(/datum/skill/construction, 5) //SKYRAT EDIT
|
||||
transfer_fingerprints_to(T)
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
amount = 1 // hur dur x2
|
||||
if(sheets.get_amount() < amount)
|
||||
return
|
||||
balloon_alert(user, "reinforcing frame...")
|
||||
if(do_after(user, 60 * platingmodifier * skill_modifier, target = src)) //SKYRAT EDIT
|
||||
if(sheets.get_amount() < amount)
|
||||
return
|
||||
sheets.use(amount)
|
||||
var/obj/structure/girder/reinforced/R = new (loc)
|
||||
user.mind.adjust_experience(/datum/skill/construction, 5) //SKYRAT EDIT
|
||||
transfer_fingerprints_to(R)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(istype(sheets, /obj/item/stack/sheet/mineral/plastitanium))
|
||||
if(state == GIRDER_REINF)
|
||||
if(sheets.get_amount() < 1)
|
||||
return
|
||||
balloon_alert(user, "adding plating...")
|
||||
if(do_after(user, 50*platingmodifier, target = src))
|
||||
if(sheets.get_amount() < 1)
|
||||
return
|
||||
sheets.use(1)
|
||||
var/turf/T = get_turf(src)
|
||||
T.place_on_top(/turf/closed/wall/r_wall/plastitanium)
|
||||
transfer_fingerprints_to(T)
|
||||
qdel(src)
|
||||
return
|
||||
// No return here because generic material construction handles making normal plastitanium walls
|
||||
|
||||
if(!sheets.has_unique_girder && sheets.material_type)
|
||||
if(istype(src, /obj/structure/girder/reinforced))
|
||||
balloon_alert(user, "need plasteel or plastitanium!")
|
||||
return
|
||||
var/M = sheets.sheettype
|
||||
var/amount = construction_cost["exotic_material"]
|
||||
if(state == GIRDER_TRAM)
|
||||
if(sheets.get_amount() < amount)
|
||||
balloon_alert(user, "need [amount] sheets!")
|
||||
return
|
||||
var/tram_wall_type = text2path("/obj/structure/tram/alt/[M]")
|
||||
if(!tram_wall_type)
|
||||
balloon_alert(user, "need titanium glass or mineral!")
|
||||
return
|
||||
balloon_alert(user, "adding plating...")
|
||||
if (do_after(user, 4 SECONDS * skill_modifier, target = src)) //SKYRAT EDIT
|
||||
if(sheets.get_amount() < amount)
|
||||
return
|
||||
var/obj/structure/tram/tram_wall
|
||||
tram_wall = new tram_wall_type(loc)
|
||||
user.mind.adjust_experience(/datum/skill/construction, 5) //SKYRAT EDIT
|
||||
sheets.use(amount)
|
||||
transfer_fingerprints_to(tram_wall)
|
||||
qdel(src)
|
||||
return
|
||||
if(state == GIRDER_DISPLACED)
|
||||
var/falsewall_type = text2path("/obj/structure/falsewall/[M]")
|
||||
if(sheets.get_amount() < amount)
|
||||
balloon_alert(user, "need [amount] sheets!")
|
||||
return
|
||||
balloon_alert(user, "concealing entrance...")
|
||||
if(do_after(user, 2 SECONDS * skill_modifier, target = src)) //SKYRAT EDIT
|
||||
if(sheets.get_amount() < amount)
|
||||
return
|
||||
sheets.use(amount)
|
||||
var/obj/structure/falsewall/falsewall
|
||||
user.mind.adjust_experience(/datum/skill/construction, 5) //SKYRAT EDIT
|
||||
if(falsewall_type)
|
||||
falsewall = new falsewall_type (loc)
|
||||
else
|
||||
var/obj/structure/falsewall/material/mat_falsewall = new(loc)
|
||||
var/list/material_list = list()
|
||||
material_list[GET_MATERIAL_REF(sheets.material_type)] = SHEET_MATERIAL_AMOUNT * 2
|
||||
if(material_list)
|
||||
mat_falsewall.set_custom_materials(material_list)
|
||||
falsewall = mat_falsewall
|
||||
transfer_fingerprints_to(falsewall)
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
if(sheets.get_amount() < amount)
|
||||
balloon_alert(user, "need [amount] sheets!")
|
||||
return
|
||||
balloon_alert(user, "adding plating...")
|
||||
if (do_after(user, 4 SECONDS * skill_modifier, target = src)) //SKYRAT EDIT
|
||||
if(sheets.get_amount() < amount)
|
||||
return
|
||||
sheets.use(amount)
|
||||
var/turf/T = get_turf(src)
|
||||
user.mind.adjust_experience(/datum/skill/construction, 5) //SKYRAT EDIT
|
||||
if(sheets.walltype)
|
||||
T.place_on_top(sheets.walltype)
|
||||
else
|
||||
var/turf/newturf = T.place_on_top(/turf/closed/wall/material)
|
||||
var/list/material_list = list()
|
||||
material_list[GET_MATERIAL_REF(sheets.material_type)] = SHEET_MATERIAL_AMOUNT * 2
|
||||
if(material_list)
|
||||
newturf.set_custom_materials(material_list)
|
||||
|
||||
transfer_fingerprints_to(T)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
add_hiddenprint(user)
|
||||
|
||||
else if(istype(W, /obj/item/pipe))
|
||||
if(istype(W, /obj/item/pipe))
|
||||
var/obj/item/pipe/P = W
|
||||
if (P.pipe_type in list(0, 1, 5)) //simple pipes, simple bends, and simple manifolds.
|
||||
if(!user.transfer_item_to_turf(P, drop_location()))
|
||||
return
|
||||
balloon_alert(user, "inserted pipe")
|
||||
else
|
||||
return ..()
|
||||
return
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/structure/girder/proc/make_wall(obj/item/stack/stack, mob/user)
|
||||
var/speed_modifier = 1
|
||||
if(HAS_TRAIT(user, TRAIT_QUICK_BUILD))
|
||||
speed_modifier = 0.7
|
||||
if(next_beep <= world.time)
|
||||
next_beep = world.time + 10
|
||||
playsound(src, 'sound/machines/clockcult/integration_cog_install.ogg', 50, TRUE)
|
||||
|
||||
if(istype(stack, /obj/item/stack/rods))
|
||||
var/obj/item/stack/rods/rod = stack
|
||||
var/amount = construction_cost[rod.type]
|
||||
if(state == GIRDER_DISPLACED)
|
||||
if(rod.get_amount() < amount)
|
||||
balloon_alert(user, "need [amount] rods!")
|
||||
return
|
||||
balloon_alert(user, "concealing entrance...")
|
||||
if(do_after(user, 2 SECONDS * skill_modifier, target = src)) //SKYRAT EDIT
|
||||
if(rod.get_amount() < amount)
|
||||
return
|
||||
rod.use(amount)
|
||||
var/obj/structure/falsewall/iron/FW = new (loc)
|
||||
user.mind.adjust_experience(/datum/skill/construction, 5) //SKYRAT EDIT
|
||||
transfer_fingerprints_to(FW)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(state == GIRDER_REINF)
|
||||
balloon_alert(user, "need plasteel sheet!")
|
||||
return
|
||||
|
||||
if(rod.get_amount() < amount)
|
||||
balloon_alert(user, "need [amount] rods!")
|
||||
return
|
||||
balloon_alert(user, "adding rods...")
|
||||
if(do_after(user, 4 SECONDS * skill_modifier, target = src)) // BUBBER EDIT CHANGE - Skills - ORIGINAL: if(do_after(user, 4 SECONDS, target = src))
|
||||
if(rod.get_amount() < amount)
|
||||
return
|
||||
rod.use(amount)
|
||||
var/turf/T = get_turf(src)
|
||||
T.place_on_top(/turf/closed/wall/mineral/iron)
|
||||
user.mind.adjust_experience(/datum/skill/construction, 5) //SKYRAT EDIT
|
||||
transfer_fingerprints_to(T)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(istype(stack, /obj/item/stack/sheet/iron))
|
||||
var/amount = construction_cost[/obj/item/stack/sheet/iron]
|
||||
if(state == GIRDER_DISPLACED)
|
||||
if(stack.get_amount() < amount)
|
||||
balloon_alert(user, "need [amount] sheets!")
|
||||
return
|
||||
balloon_alert(user, "concealing entrance...")
|
||||
if(do_after(user, 20 * speed_modifier, target = src))
|
||||
if(stack.get_amount() < amount)
|
||||
return
|
||||
stack.use(amount)
|
||||
var/obj/structure/falsewall/F = new (loc)
|
||||
transfer_fingerprints_to(F)
|
||||
qdel(src)
|
||||
return
|
||||
else if(state == GIRDER_REINF)
|
||||
balloon_alert(user, "need plasteel sheet!")
|
||||
return
|
||||
else if(state == GIRDER_TRAM)
|
||||
if(stack.get_amount() < amount)
|
||||
balloon_alert(user, "need [amount] sheets!")
|
||||
return
|
||||
balloon_alert(user, "adding plating...")
|
||||
if (do_after(user, 4 SECONDS, target = src))
|
||||
if(stack.get_amount() < amount)
|
||||
return
|
||||
stack.use(amount)
|
||||
var/obj/structure/tram/alt/iron/tram_wall = new(loc)
|
||||
transfer_fingerprints_to(tram_wall)
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
if(stack.get_amount() < amount)
|
||||
balloon_alert(user, "need [amount] sheets!")
|
||||
return
|
||||
balloon_alert(user, "adding plating...")
|
||||
if (do_after(user, 40 * speed_modifier, target = src))
|
||||
if(stack.get_amount() < amount)
|
||||
return
|
||||
stack.use(amount)
|
||||
var/turf/T = get_turf(src)
|
||||
T.place_on_top(/turf/closed/wall)
|
||||
transfer_fingerprints_to(T)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(istype(stack, /obj/item/stack/sheet/titaniumglass) && state == GIRDER_TRAM)
|
||||
var/amount = construction_cost[/obj/item/stack/sheet/titaniumglass]
|
||||
if(stack.get_amount() < amount)
|
||||
balloon_alert(user, "need [amount] sheets!")
|
||||
return
|
||||
balloon_alert(user, "adding panel...")
|
||||
if (do_after(user, 2 SECONDS * skill_modifier, target = src)) //SKYRAT EDIT
|
||||
if(stack.get_amount() < amount)
|
||||
return
|
||||
stack.use(amount)
|
||||
var/obj/structure/tram/tram_wall = new(loc)
|
||||
user.mind.adjust_experience(/datum/skill/construction, 5) //SKYRAT EDIT
|
||||
transfer_fingerprints_to(tram_wall)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(istype(stack, /obj/item/stack/sheet/plasteel))
|
||||
var/amount = construction_cost[/obj/item/stack/sheet/plasteel]
|
||||
if(state == GIRDER_DISPLACED)
|
||||
if(stack.get_amount() < amount)
|
||||
balloon_alert(user, "need [amount] sheets!")
|
||||
return
|
||||
balloon_alert(user, "concealing entrance...")
|
||||
if(do_after(user, 2 SECONDS, target = src))
|
||||
if(stack.get_amount() < amount)
|
||||
return
|
||||
stack.use(amount)
|
||||
var/obj/structure/falsewall/reinforced/FW = new (loc)
|
||||
transfer_fingerprints_to(FW)
|
||||
qdel(src)
|
||||
return
|
||||
else if(state == GIRDER_REINF)
|
||||
amount = 1 // hur dur let's make plasteel have different construction amounts 4norasin
|
||||
if(stack.get_amount() < amount)
|
||||
return
|
||||
balloon_alert(user, "adding plating...")
|
||||
if(do_after(user, 50 * speed_modifier, target = src))
|
||||
if(stack.get_amount() < amount)
|
||||
return
|
||||
stack.use(amount)
|
||||
var/turf/T = get_turf(src)
|
||||
T.place_on_top(/turf/closed/wall/r_wall)
|
||||
transfer_fingerprints_to(T)
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
amount = 1 // hur dur x2
|
||||
if(stack.get_amount() < amount)
|
||||
return
|
||||
balloon_alert(user, "reinforcing frame...")
|
||||
if(do_after(user, 60 * speed_modifier, target = src))
|
||||
if(stack.get_amount() < amount)
|
||||
return
|
||||
stack.use(amount)
|
||||
var/obj/structure/girder/reinforced/R = new (loc)
|
||||
transfer_fingerprints_to(R)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(istype(stack, /obj/item/stack/sheet/mineral/plastitanium))
|
||||
if(state == GIRDER_REINF)
|
||||
if(stack.get_amount() < 1)
|
||||
return
|
||||
balloon_alert(user, "adding plating...")
|
||||
if(do_after(user, 50 * speed_modifier, target = src))
|
||||
if(stack.get_amount() < 1)
|
||||
return
|
||||
stack.use(1)
|
||||
var/turf/T = get_turf(src)
|
||||
T.place_on_top(/turf/closed/wall/r_wall/plastitanium)
|
||||
transfer_fingerprints_to(T)
|
||||
qdel(src)
|
||||
return
|
||||
// No return here because generic material construction handles making normal plastitanium walls
|
||||
|
||||
if(!stack.has_unique_girder && stack.material_type)
|
||||
if(istype(src, /obj/structure/girder/reinforced))
|
||||
balloon_alert(user, "need plasteel or plastitanium!")
|
||||
return
|
||||
var/material
|
||||
if(istype(stack, /obj/item/stack/sheet))
|
||||
var/obj/item/stack/sheet/sheet = stack
|
||||
material = sheet.construction_path_type
|
||||
var/amount = construction_cost["exotic_material"]
|
||||
if(state == GIRDER_TRAM)
|
||||
if(stack.get_amount() < amount)
|
||||
balloon_alert(user, "need [amount] sheets!")
|
||||
return
|
||||
var/tram_wall_type = text2path("/obj/structure/tram/alt/[material]")
|
||||
if(!tram_wall_type)
|
||||
balloon_alert(user, "need titanium glass or mineral!")
|
||||
return
|
||||
balloon_alert(user, "adding plating...")
|
||||
if (do_after(user, 4 SECONDS * skill_modifier, target = src)) //SKYRAT EDIT
|
||||
if(stack.get_amount() < amount)
|
||||
return
|
||||
var/obj/structure/tram/tram_wall
|
||||
tram_wall = new tram_wall_type(loc)
|
||||
user.mind.adjust_experience(/datum/skill/construction, 5) //SKYRAT EDIT
|
||||
stack.use(amount)
|
||||
transfer_fingerprints_to(tram_wall)
|
||||
qdel(src)
|
||||
return
|
||||
if(state == GIRDER_DISPLACED)
|
||||
var/falsewall_type = text2path("/obj/structure/falsewall/[material]")
|
||||
if(stack.get_amount() < amount)
|
||||
balloon_alert(user, "need [amount] sheets!")
|
||||
return
|
||||
balloon_alert(user, "concealing entrance...")
|
||||
if(do_after(user, 2 SECONDS * skill_modifier, target = src)) //SKYRAT EDIT
|
||||
if(stack.get_amount() < amount)
|
||||
return
|
||||
stack.use(amount)
|
||||
var/obj/structure/falsewall/falsewall
|
||||
user.mind.adjust_experience(/datum/skill/construction, 5) //SKYRAT EDIT
|
||||
if(falsewall_type)
|
||||
falsewall = new falsewall_type (loc)
|
||||
else
|
||||
var/obj/structure/falsewall/material/mat_falsewall = new(loc)
|
||||
var/list/material_list = list()
|
||||
material_list[GET_MATERIAL_REF(stack.material_type)] = SHEET_MATERIAL_AMOUNT * 2
|
||||
if(material_list)
|
||||
mat_falsewall.set_custom_materials(material_list)
|
||||
falsewall = mat_falsewall
|
||||
transfer_fingerprints_to(falsewall)
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
if(stack.get_amount() < amount)
|
||||
balloon_alert(user, "need [amount] sheets!")
|
||||
return
|
||||
balloon_alert(user, "adding plating...")
|
||||
if (do_after(user, 4 SECONDS * skill_modifier, target = src)) //SKYRAT EDIT
|
||||
if(stack.get_amount() < amount)
|
||||
return
|
||||
stack.use(amount)
|
||||
var/turf/T = get_turf(src)
|
||||
user.mind.adjust_experience(/datum/skill/construction, 5) //SKYRAT EDIT
|
||||
if(stack.walltype)
|
||||
T.place_on_top(stack.walltype)
|
||||
else
|
||||
var/turf/newturf = T.place_on_top(/turf/closed/wall/material)
|
||||
var/list/material_list = list()
|
||||
material_list[GET_MATERIAL_REF(stack.material_type)] = SHEET_MATERIAL_AMOUNT * 2
|
||||
if(material_list)
|
||||
newturf.set_custom_materials(material_list)
|
||||
|
||||
transfer_fingerprints_to(T)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
// Screwdriver behavior for girders
|
||||
/obj/structure/girder/screwdriver_act(mob/user, obj/item/tool)
|
||||
|
||||
@@ -141,62 +141,11 @@ GLOBAL_LIST_INIT(ore_probability, list(
|
||||
*/
|
||||
/obj/effect/collapsing_demonic_portal/proc/drop_loot()
|
||||
visible_message(span_warning("Something slips out of [src]!"))
|
||||
var/loot = rand(1, 27)
|
||||
var/loot = rand(1, 100)
|
||||
switch(loot)
|
||||
if(1)
|
||||
new /obj/item/clothing/neck/cloak/wolf_coat(loc)
|
||||
if(2)
|
||||
new /obj/item/clothing/glasses/godeye(loc)
|
||||
if(3)
|
||||
new /obj/item/reagent_containers/cup/bottle/potion/flight(loc)
|
||||
if(4)
|
||||
new /obj/item/organ/heart/cursed/wizard(loc)
|
||||
if(5)
|
||||
new /obj/item/jacobs_ladder(loc)
|
||||
if(6)
|
||||
new /obj/item/rod_of_asclepius(loc)
|
||||
if(7)
|
||||
new /obj/item/warp_cube/red(loc)
|
||||
if(8)
|
||||
new /obj/item/wisp_lantern(loc)
|
||||
if(9)
|
||||
new /obj/item/immortality_talisman(loc)
|
||||
if(10)
|
||||
new /obj/item/book/granter/action/spell/summonitem(loc)
|
||||
if(11)
|
||||
new /obj/item/clothing/neck/necklace/memento_mori(loc)
|
||||
if(12)
|
||||
new /obj/item/borg/upgrade/modkit/lifesteal(loc)
|
||||
new /obj/item/bedsheet/cult(loc)
|
||||
if(13)
|
||||
new /obj/item/disk/design_disk/modkit_disc/mob_and_turf_aoe(loc)
|
||||
if(14)
|
||||
new /obj/item/disk/design_disk/modkit_disc/bounty(loc)
|
||||
if(15)
|
||||
new /obj/item/ship_in_a_bottle(loc)
|
||||
new /obj/item/oar(loc)
|
||||
if(16)
|
||||
if(1 to 80)
|
||||
new /obj/structure/closet/crate/necropolis/tendril/demonic(loc)
|
||||
if(81 to 90)
|
||||
new /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/doom(loc)
|
||||
if(17)
|
||||
new /obj/item/clothing/gloves/fingerless/punch_mitts(loc)
|
||||
new /obj/item/clothing/head/cowboy(loc)
|
||||
if(18)
|
||||
new /obj/item/soulstone/anybody(loc)
|
||||
if(19)
|
||||
new /obj/item/disk/design_disk/modkit_disc/resonator_blast(loc)
|
||||
if(20)
|
||||
new /obj/item/disk/design_disk/modkit_disc/rapid_repeater(loc)
|
||||
if(21)
|
||||
new /obj/item/slimepotion/transference(loc)
|
||||
if(22)
|
||||
new /obj/item/slime_extract/adamantine(loc)
|
||||
if(23)
|
||||
new /obj/item/weldingtool/abductor(loc)
|
||||
if(24)
|
||||
if(91 to INFINITY)
|
||||
new /obj/structure/elite_tumor(loc)
|
||||
if(25)
|
||||
new /mob/living/basic/clown/clownhulk(loc)
|
||||
if(26)
|
||||
new /obj/item/clothing/shoes/winterboots/ice_boots(loc)
|
||||
if(27)
|
||||
new /obj/item/book/granter/action/spell/sacredflame(loc)
|
||||
|
||||
@@ -237,13 +237,34 @@
|
||||
addtimer(CALLBACK(node, TYPE_PROC_REF(/atom, update_appearance)), wave_timer * 0.75)
|
||||
add_shared_particles(/particles/smoke/ash)
|
||||
for(var/i in 1 to 5) // Clears the surroundings of the ore vent before starting wave defense.
|
||||
for(var/turf/closed/mineral/rock in oview(i))
|
||||
if(istype(rock, /turf/open/misc/asteroid) && prob(35)) // so it's too common
|
||||
new /obj/effect/decal/cleanable/rubble(rock)
|
||||
if(prob(100 - (i * 15)))
|
||||
rock.gets_drilled(user)
|
||||
for(var/turf/rock in oview(i))
|
||||
|
||||
if(istype(rock, /turf/closed/mineral)) //Solid wall checks: Mine out the wall, but start skipping more as we move farther away.
|
||||
if(prob(50 + (i * 8)))
|
||||
continue
|
||||
var/turf/closed/mineral/drillable = rock
|
||||
drillable.gets_drilled(user)
|
||||
if(prob(50))
|
||||
new /obj/effect/decal/cleanable/rubble(rock)
|
||||
new /obj/effect/decal/cleanable/rubble(rock) // Only throw rubble when we actually mine something, and not all the time.
|
||||
continue //skip the rest of the checks
|
||||
|
||||
if(istype(rock, /turf/open/misc/asteroid) && prob(35)) // Open rock floors: make rubble decals occasionally.
|
||||
new /obj/effect/decal/cleanable/rubble(rock)
|
||||
continue
|
||||
|
||||
if(istype(rock, /turf/open/lava)) // Lava turfs, skip as we get farther away, otherwise produce a boulder and make it a platform, lasting the whole wave.
|
||||
if(prob(30 + (i * 8))) // We want to skip these less than the mining walls, since lava is more common to deal with.
|
||||
continue
|
||||
|
||||
var/obj/item/boulder/produced = produce_boulder(FALSE)
|
||||
var/obj/structure/lattice/catwalk/boulder/platform = produced.create_platform(rock, null, wave_timer)
|
||||
|
||||
if(!platform || !QDELETED(produced))
|
||||
qdel(produced)
|
||||
continue
|
||||
platform.alpha = 0
|
||||
platform.pixel_z = -16
|
||||
animate(platform, alpha = 255, time = 2 SECONDS, pixel_z = 0, easing = QUAD_EASING|EASE_OUT)
|
||||
sleep(0.6 SECONDS)
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -88,7 +88,6 @@ GLOBAL_LIST_INIT(mystery_magic, list(
|
||||
GLOBAL_LIST_INIT(mystery_fishing, list(
|
||||
/obj/item/storage/toolbox/fishing/master,
|
||||
/obj/item/storage/box/fish_revival_kit,
|
||||
/obj/item/circuitboard/machine/fishing_portal_generator/emagged,
|
||||
/obj/item/fishing_rod/telescopic/master,
|
||||
/obj/item/bait_can/super_baits,
|
||||
/obj/item/storage/fish_case/tiziran,
|
||||
|
||||
@@ -260,7 +260,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/shower, (-16))
|
||||
/obj/machinery/shower/proc/on_exited(datum/source, atom/movable/exiter)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(!isliving(exiter))
|
||||
if(!iscarbon(exiter))
|
||||
return
|
||||
|
||||
var/obj/machinery/shower/locate_new_shower = locate() in get_turf(exiter)
|
||||
@@ -282,8 +282,9 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/shower, (-16))
|
||||
var/mob/living/living_target = target
|
||||
check_heat(living_target)
|
||||
|
||||
living_target.apply_status_effect(/datum/status_effect/washing_regen, shower_reagent)
|
||||
living_target.add_mood_event("shower", /datum/mood_event/shower, shower_reagent)
|
||||
if(iscarbon(living_target))
|
||||
living_target.apply_status_effect(/datum/status_effect/washing_regen, shower_reagent)
|
||||
living_target.add_mood_event("shower", /datum/mood_event/shower, shower_reagent)
|
||||
|
||||
/**
|
||||
* Toggle whether shower is actually on and outputting water.
|
||||
@@ -314,7 +315,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/shower, (-16))
|
||||
if(isopenturf(loc))
|
||||
var/turf/open/tile = loc
|
||||
tile.MakeSlippery(TURF_WET_WATER, min_wet_time = 5 SECONDS, wet_time_to_add = 1 SECONDS)
|
||||
for(var/mob/living/showerer in loc)
|
||||
for(var/mob/living/carbon/showerer in loc)
|
||||
showerer.remove_status_effect(/datum/status_effect/washing_regen)
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -534,7 +534,7 @@
|
||||
icon = 'icons/obj/smooth_structures/glass_table.dmi'
|
||||
icon_state = "glass_table-0"
|
||||
base_icon_state = "glass_table"
|
||||
custom_materials = list(/datum/material/glass =SHEET_MATERIAL_AMOUNT)
|
||||
custom_materials = list(/datum/material/glass = SHEET_MATERIAL_AMOUNT)
|
||||
buildstack = /obj/item/stack/sheet/glass
|
||||
smoothing_groups = SMOOTH_GROUP_GLASS_TABLES
|
||||
canSmoothWith = SMOOTH_GROUP_GLASS_TABLES
|
||||
@@ -608,7 +608,7 @@
|
||||
icon = 'icons/obj/smooth_structures/plasmaglass_table.dmi'
|
||||
icon_state = "plasmaglass_table-0"
|
||||
base_icon_state = "plasmaglass_table"
|
||||
custom_materials = list(/datum/material/alloy/plasmaglass =SHEET_MATERIAL_AMOUNT)
|
||||
custom_materials = list(/datum/material/alloy/plasmaglass = SHEET_MATERIAL_AMOUNT)
|
||||
buildstack = /obj/item/stack/sheet/plasmaglass
|
||||
glass_shard_type = /obj/item/shard/plasma
|
||||
max_integrity = 100
|
||||
@@ -630,6 +630,7 @@
|
||||
max_integrity = 70
|
||||
smoothing_groups = SMOOTH_GROUP_WOOD_TABLES //Don't smooth with SMOOTH_GROUP_TABLES
|
||||
canSmoothWith = SMOOTH_GROUP_WOOD_TABLES
|
||||
custom_materials = list(/datum/material/wood = SHEET_MATERIAL_AMOUNT)
|
||||
|
||||
/obj/structure/table/wood/after_smash(mob/living/smashed)
|
||||
if(QDELETED(src) || prob(66))
|
||||
@@ -862,7 +863,7 @@
|
||||
icon = 'icons/obj/smooth_structures/rglass_table.dmi'
|
||||
icon_state = "rglass_table-0"
|
||||
base_icon_state = "rglass_table"
|
||||
custom_materials = list(/datum/material/glass =SHEET_MATERIAL_AMOUNT, /datum/material/iron =SHEET_MATERIAL_AMOUNT)
|
||||
custom_materials = list(/datum/material/glass = SHEET_MATERIAL_AMOUNT, /datum/material/iron = SHEET_MATERIAL_AMOUNT)
|
||||
buildstack = /obj/item/stack/sheet/rglass
|
||||
max_integrity = 150
|
||||
|
||||
@@ -872,7 +873,7 @@
|
||||
icon = 'icons/obj/smooth_structures/rplasmaglass_table.dmi'
|
||||
icon_state = "rplasmaglass_table-0"
|
||||
base_icon_state = "rplasmaglass_table"
|
||||
custom_materials = list(/datum/material/alloy/plasmaglass =SHEET_MATERIAL_AMOUNT, /datum/material/iron =SHEET_MATERIAL_AMOUNT)
|
||||
custom_materials = list(/datum/material/alloy/plasmaglass = SHEET_MATERIAL_AMOUNT, /datum/material/iron = SHEET_MATERIAL_AMOUNT)
|
||||
buildstack = /obj/item/stack/sheet/plasmarglass
|
||||
|
||||
/obj/structure/table/reinforced/titaniumglass
|
||||
@@ -881,7 +882,7 @@
|
||||
icon = 'icons/obj/smooth_structures/titaniumglass_table.dmi'
|
||||
icon_state = "titaniumglass_table-0"
|
||||
base_icon_state = "titaniumglass_table"
|
||||
custom_materials = list(/datum/material/alloy/titaniumglass =SHEET_MATERIAL_AMOUNT)
|
||||
custom_materials = list(/datum/material/alloy/titaniumglass = SHEET_MATERIAL_AMOUNT)
|
||||
buildstack = /obj/item/stack/sheet/titaniumglass
|
||||
max_integrity = 250
|
||||
|
||||
@@ -891,7 +892,7 @@
|
||||
icon = 'icons/obj/smooth_structures/plastitaniumglass_table.dmi'
|
||||
icon_state = "plastitaniumglass_table-0"
|
||||
base_icon_state = "plastitaniumglass_table"
|
||||
custom_materials = list(/datum/material/alloy/plastitaniumglass =SHEET_MATERIAL_AMOUNT)
|
||||
custom_materials = list(/datum/material/alloy/plastitaniumglass = SHEET_MATERIAL_AMOUNT)
|
||||
buildstack = /obj/item/stack/sheet/plastitaniumglass
|
||||
max_integrity = 300
|
||||
|
||||
@@ -1292,12 +1293,14 @@
|
||||
anchored = TRUE
|
||||
pass_flags_self = LETPASSTHROW //You can throw objects over this, despite its density.
|
||||
max_integrity = 20
|
||||
custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT)
|
||||
|
||||
/obj/structure/rack/skeletal
|
||||
name = "skeletal minibar"
|
||||
desc = "Rattle me boozes!"
|
||||
icon = 'icons/obj/fluff/general.dmi'
|
||||
icon_state = "minibar"
|
||||
custom_materials = list(/datum/material/bone = SHEET_MATERIAL_AMOUNT)
|
||||
|
||||
/obj/structure/rack/Initialize(mapload)
|
||||
. = ..()
|
||||
@@ -1387,7 +1390,7 @@
|
||||
icon_state = "rack_parts"
|
||||
inhand_icon_state = "rack_parts"
|
||||
obj_flags = CONDUCTS_ELECTRICITY
|
||||
custom_materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT)
|
||||
custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT)
|
||||
var/building = FALSE
|
||||
|
||||
/obj/item/rack_parts/Initialize(mapload)
|
||||
|
||||
@@ -229,6 +229,8 @@
|
||||
tube_construction = /obj/structure/c_transit_tube/station/dispenser
|
||||
base_icon_state = "dispenser0"
|
||||
open_status = STATION_TUBE_OPEN
|
||||
COOLDOWN_DECLARE(freight_output)
|
||||
COOLDOWN_DECLARE(freight_message)
|
||||
|
||||
/obj/structure/transit_tube/station/dispenser/close_animation()
|
||||
return
|
||||
@@ -249,6 +251,14 @@
|
||||
/obj/structure/transit_tube/station/dispenser/Bumped(atom/movable/AM)
|
||||
if(!(istype(AM) && AM.dir == boarding_dir) || AM.anchored)
|
||||
return
|
||||
if(!isliving(AM))
|
||||
if(!COOLDOWN_FINISHED(src, freight_output))
|
||||
if(COOLDOWN_FINISHED(src, freight_message))
|
||||
AM.visible_message(span_notice("Freight pod dispenser is recharging. Please wait."))
|
||||
COOLDOWN_START(src, freight_message, 10 SECONDS)
|
||||
return
|
||||
COOLDOWN_START(src, freight_output, 2 SECONDS)
|
||||
|
||||
var/obj/structure/transit_tube_pod/dispensed/pod = new(loc)
|
||||
AM.visible_message(span_notice("[pod] forms around [AM]."), span_notice("[pod] materializes around you."))
|
||||
playsound(src, 'sound/items/weapons/emitter2.ogg', 50, TRUE)
|
||||
|
||||
Reference in New Issue
Block a user