Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync

This commit is contained in:
xPokee
2025-10-03 07:05:54 -04:00
517 changed files with 24339 additions and 21253 deletions
@@ -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 ..()
+56 -56
View File
@@ -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."), \
+255 -251
View File
@@ -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,
+5 -4
View File
@@ -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
+10 -7
View File
@@ -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)