Merge branch 'master' of https://github.com/VOREStation/VOREStation into upstream-merge-8298

This commit is contained in:
MistakeNot4892
2022-08-25 14:26:20 +10:00
1603 changed files with 70496 additions and 61794 deletions
@@ -11,7 +11,7 @@
/obj/item/clothing/under/rank/chief_engineer,
/obj/item/clothing/under/rank/chief_engineer/skirt,
/obj/item/clothing/head/hardhat/white,
/obj/item/clothing/head/welding,
///obj/item/clothing/head/welding, //VOREStation Removal: Locker bloat, grr. They get fancy goggles or can raid the welding supplies locker for one of these.
/obj/item/clothing/gloves/heavy_engineer, //VOREStation Edit: chief gets the good shit
/obj/item/clothing/shoes/brown,
/obj/item/weapon/cartridge/ce,
@@ -19,18 +19,19 @@
/obj/item/device/radio/headset/heads/ce/alt,
/obj/item/weapon/storage/toolbox/mechanical,
/obj/item/clothing/suit/storage/hazardvest,
/obj/item/clothing/mask/gas,
/obj/item/device/multitool,
///obj/item/clothing/mask/gas, //VOREStation Removal: Locker bloat, grr. The fancy one below functions as a mask & helmet combined.
/obj/item/clothing/head/hardhat/firefighter/chief, //VOREStation Add: replaces the bog-standard gas mask
///obj/item/device/multitool, //VOREStation Removal: The belt they get, both standard and the fancy one, both come with one already, why stick another in here too?
/obj/item/weapon/storage/belt/utility/chief/full,
/obj/item/device/flash,
/obj/item/device/t_scanner/upgraded,
/obj/item/taperoll/engineering,
/obj/item/clothing/suit/storage/hooded/wintercoat/engineering,
///obj/item/clothing/suit/storage/hooded/wintercoat/engineering, //VOREStation Removal: Locker bloat, grr. They can grab from the engi-clothes vendor if they want the standard one.
/obj/item/clothing/suit/storage/hooded/wintercoat/engineering/ce,
/obj/item/clothing/shoes/boots/winter/engineering,
///obj/item/clothing/shoes/boots/winter/engineering, //VOREStation Removal: Locker bloat, grr. As above.
/obj/item/clothing/head/beret/engineering/ce,
/obj/item/clothing/head/beret/engineering/ce/white,
/obj/item/weapon/tank/emergency/oxygen/engi,
/obj/item/weapon/tank/emergency/oxygen/double, //VOREStation Edit: chief gets the good shit
/obj/item/weapon/reagent_containers/spray/windowsealant) //VOREStation Add
/obj/structure/closet/secure_closet/engineering_chief/Initialize()
@@ -53,6 +54,12 @@
/obj/item/weapon/module/power_control = 3,
/obj/item/device/multitool = 3)
/obj/structure/closet/secure_closet/engineering_electrical/double
starts_with = list(
/obj/item/clothing/gloves/yellow = 4,
/obj/item/weapon/storage/toolbox/electrical = 6,
/obj/item/weapon/module/power_control = 6,
/obj/item/device/multitool = 6)
/obj/structure/closet/secure_closet/engineering_welding
name = "welding supplies"
@@ -65,6 +72,13 @@
/obj/item/weapon/weldpack = 3,
/obj/item/clothing/glasses/welding = 3)
/obj/structure/closet/secure_closet/engineering_welding/double
starts_with = list(
/obj/item/clothing/head/welding = 6,
/obj/item/weapon/weldingtool/largetank = 6,
/obj/item/weapon/weldpack = 6,
/obj/item/clothing/glasses/welding = 6)
/obj/structure/closet/secure_closet/engineering_personal
name = "engineer's locker"
req_access = list(access_engine_equip)
@@ -118,7 +132,7 @@
/obj/item/clothing/suit/storage/hooded/wintercoat/engineering/atmos,
/obj/item/clothing/shoes/boots/winter/atmos,
/obj/item/weapon/tank/emergency/oxygen/engi,
/obj/item/weapon/storage/belt/utility/atmostech) //VOREStation edit. They don't get a toolbox to fill it from, so why not give a spare one that's full already?
/obj/item/weapon/storage/belt/utility/atmostech) //VOREStation edit. They don't get a toolbox to fill it from, so why not give a spare one that's full already?
/obj/structure/closet/secure_closet/atmos_personal/Initialize()
if(prob(50))
@@ -3,8 +3,10 @@
req_access = list(access_kitchen)
starts_with = list(
/obj/item/weapon/reagent_containers/food/condiment/flour = 7,
/obj/item/weapon/reagent_containers/food/condiment/sugar = 2,
/obj/item/weapon/reagent_containers/food/condiment/carton/flour = 6,
/obj/item/weapon/reagent_containers/food/condiment/carton/sugar = 1,
/obj/item/weapon/reagent_containers/food/condiment/carton/flour/rustic = 1,
/obj/item/weapon/reagent_containers/food/condiment/carton/sugar/rustic = 1,
/obj/item/weapon/reagent_containers/food/condiment/spacespice = 2
)
@@ -189,9 +189,9 @@
/obj/item/weapon/storage/lockbox/medal,
/obj/item/device/radio/headset/heads/captain,
/obj/item/device/radio/headset/heads/captain/alt,
/obj/item/weapon/gun/energy/gun,
/obj/item/gunbox/captain,
/obj/item/weapon/melee/telebaton,
/obj/item/device/flash,
/obj/item/weapon/storage/box/ids,
/obj/item/weapon/melee/rapier,
/obj/item/clothing/accessory/holster/machete/rapier)
/obj/item/clothing/accessory/holster/machete/rapier)
@@ -97,7 +97,7 @@
starts_with = list(
/obj/item/clothing/suit/fire/heavy,
/obj/item/weapon/tank/oxygen/red,
/obj/item/weapon/watertank/atmos,
/obj/item/weapon/extinguisher/atmo,
/obj/item/device/flashlight,
/obj/item/clothing/head/hardhat/firefighter/atmos)
@@ -90,7 +90,9 @@
src.set_dir(turn(src.dir, 90))
/obj/structure/closet/crate/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(opened)
if(W.is_wrench() && istype(src,/obj/structure/closet/crate/bin))
return ..()
else if(opened)
if(isrobot(user))
return
if(W.loc != user) // This should stop mounted modules ending up outside the module.
@@ -157,7 +157,7 @@
bound_height = width * world.icon_size
/obj/structure/door_assembly/proc/rename_door(mob/living/user)
var/t = sanitizeSafe(input(user, "Enter the name for the windoor.", src.name, src.created_name), MAX_NAME_LEN)
var/t = sanitizeSafe(tgui_input_text(user, "Enter the name for the windoor.", src.name, src.created_name, MAX_NAME_LEN), MAX_NAME_LEN)
if(!in_range(src, user) && src.loc != user) return
created_name = t
update_state()
+6 -6
View File
@@ -81,7 +81,7 @@
/obj/structure/flora/proc/spawn_harvest(var/path = null, var/mob/user = null)
if(!ispath(path))
return 0
var/atom/movable/AM = new path()
if(user)
user.put_in_hands(AM)
@@ -96,7 +96,7 @@
name = "bush"
icon = 'icons/obj/flora/snowflora.dmi'
icon_state = "snowbush1"
destroy_on_harvest = TRUE
harvest_tool = /obj/item/weapon/material/knife
randomize_harvest_count = FALSE
@@ -121,13 +121,13 @@
name = "bush"
icon = 'icons/obj/flora/ausflora.dmi'
icon_state = "firstbush_1"
destroy_on_harvest = TRUE
harvest_tool = /obj/item/weapon/material/knife
randomize_harvest_count = TRUE
harvest_loot = list(/obj/item/stack/material/fiber = 1)
min_harvests = 1
max_harvests = 3
max_harvests = 3
/obj/structure/flora/ausbushes/spawn_harvest(var/path = null, var/mob/user = null)
. = ..()
@@ -300,7 +300,7 @@
user.drop_from_inventory(I, src)
I.forceMove(src)
stored_item = I
src.visible_message("[bicon(src)] [bicon(I)] [user] places [I] into [src].")
src.visible_message("\icon[src][bicon(src)] \icon[I][bicon(I)] [user] places [I] into [src].")
return
else
to_chat(user, "<span class='notice'>You refrain from putting things into the plant pot.</span>")
@@ -311,7 +311,7 @@
to_chat(user, "<span class='filter_notice'><b>You see nothing of interest in [src]...</b></span>")
else
if(do_after(user, 10))
to_chat(user, "<span class='filter_notice'>You find [bicon(stored_item)] [stored_item] in [src]!</span>")
to_chat(user, "<span class='filter_notice'>You find \icon[stored_item][bicon(stored_item)] [stored_item] in [src]!</span>")
stored_item.forceMove(get_turf(src))
stored_item = null
..()
@@ -102,7 +102,7 @@
E.description_antag = "This is a 'disguised' emag, to make your escape from wherever you happen to be trapped."
H.equip_to_appropriate_slot(E)
var/newname = sanitize(input(H, "Your mind feels foggy, and you recall your name might be [H.real_name]. Would you like to change your name?", "Name change") as null|text, MAX_NAME_LEN)
var/newname = sanitize(tgui_input_text(H, "Your mind feels foggy, and you recall your name might be [H.real_name]. Would you like to change your name?", "Name change", null, MAX_NAME_LEN), MAX_NAME_LEN)
if (newname)
H.real_name = newname
@@ -224,7 +224,7 @@
var/obj/item/C = new newpath(H)
H.equip_to_appropriate_slot(C)
var/newname = sanitize(input(H, "Your mind feels foggy, and you recall your name might be [H.real_name]. Would you like to change your name?", "Name change") as null|text, MAX_NAME_LEN)
var/newname = sanitize(tgui_input_text(H, "Your mind feels foggy, and you recall your name might be [H.real_name]. Would you like to change your name?", "Name change", null, MAX_NAME_LEN), MAX_NAME_LEN)
if (newname)
H.real_name = newname
+2 -2
View File
@@ -52,14 +52,14 @@
/obj/structure/gravemarker/attackby(obj/item/weapon/W, mob/user as mob)
if(W.is_screwdriver())
var/carving_1 = sanitizeSafe(input(user, "Who is \the [src.name] for?", "Gravestone Naming", null) as text, MAX_NAME_LEN)
var/carving_1 = sanitizeSafe(tgui_input_text(user, "Who is \the [src.name] for?", "Gravestone Naming", null, MAX_NAME_LEN), MAX_NAME_LEN)
if(carving_1)
user.visible_message("[user] starts carving \the [src.name].", "You start carving \the [src.name].")
if(do_after(user, material.hardness * W.toolspeed))
user.visible_message("[user] carves something into \the [src.name].", "You carve your message into \the [src.name].")
grave_name += carving_1
update_icon()
var/carving_2 = sanitizeSafe(input(user, "What message should \the [src.name] have?", "Epitaph Carving", null) as text, MAX_NAME_LEN)
var/carving_2 = sanitizeSafe(tgui_input_text(user, "What message should \the [src.name] have?", "Epitaph Carving", null, MAX_NAME_LEN), MAX_NAME_LEN)
if(carving_2)
user.visible_message("[user] starts carving \the [src.name].", "You start carving \the [src.name].")
if(do_after(user, material.hardness * W.toolspeed))
+2 -2
View File
@@ -118,9 +118,9 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart)
. = ..(user)
if(istype(mybucket))
var/contains = mybucket.reagents.total_volume
. += "[bicon(src)] The bucket contains [contains] unit\s of liquid!"
. += "\icon[src][bicon(src)] The bucket contains [contains] unit\s of liquid!"
else
. += "[bicon(src)] There is no bucket mounted on it!"
. += "\icon[src][bicon(src)] There is no bucket mounted on it!"
/obj/structure/janitorialcart/MouseDrop_T(atom/movable/O as mob|obj, mob/living/user as mob)
if (istype(O, /obj/structure/mopbucket) && !mybucket)
@@ -8,8 +8,11 @@
opacity = 0
density = TRUE
unacidable = TRUE
plane = PLANE_BUILDMODE
/* //VOREStation Edit
/obj/effect/blocker/Initialize() // For non-gateway maps.
. = ..()
icon = null
icon_state = null
*/
+1 -1
View File
@@ -134,7 +134,7 @@
if(user.mind)
user.mind.transfer_to(vox)
spawn(1)
var/newname = sanitizeSafe(input(vox,"Enter a name, or leave blank for the default name.", "Name change","") as text, MAX_NAME_LEN)
var/newname = sanitizeSafe(tgui_input_text(vox,"Enter a name, or leave blank for the default name.", "Name change","", MAX_NAME_LEN), MAX_NAME_LEN)
if(!newname || newname == "")
var/datum/language/L = GLOB.all_languages[vox.species.default_language]
newname = L.get_random_name()
+2 -2
View File
@@ -121,7 +121,7 @@
/obj/structure/morgue/attackby(P as obj, mob/user as mob)
if (istype(P, /obj/item/weapon/pen))
var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text
var/t = tgui_input_text(user, "What would you like the label to be?", text("[]", src.name), null)
if (user.get_active_hand() != P)
return
if ((!in_range(src, usr) && src.loc != user))
@@ -249,7 +249,7 @@ GLOBAL_LIST_BOILERPLATE(all_crematoriums, /obj/structure/morgue/crematorium)
/obj/structure/morgue/crematorium/attackby(P as obj, mob/user as mob)
if (istype(P, /obj/item/weapon/pen))
var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text
var/t = tgui_input_text(user, "What would you like the label to be?", text("[]", src.name), null)
if (user.get_active_hand() != P)
return
if ((!in_range(src, usr) > 1 && src.loc != user))
@@ -60,7 +60,7 @@
var/new_bearing
if(free_rotate)
new_bearing = input(usr, "What bearing do you want to rotate \the [src] to?", "[name]") as num
new_bearing = tgui_input_number(usr, "What bearing do you want to rotate \the [src] to?", "[name]")
new_bearing = round(new_bearing)
if(new_bearing <= -1 || new_bearing > 360)
to_chat(user, "<span class='warning'>Rotating \the [src] [new_bearing] degrees would be a waste of time.</span>")
@@ -177,7 +177,7 @@
var/new_bearing
if(free_rotate)
new_bearing = input(usr, "What bearing do you want to rotate \the [src] to?", "[name]") as num
new_bearing = tgui_input_number(usr, "What bearing do you want to rotate \the [src] to?", "[name]")
new_bearing = round(new_bearing)
if(new_bearing <= -1 || new_bearing > 360)
to_chat(user, "<span class='warning'>Rotating \the [src] [new_bearing] degrees would be a waste of time.</span>")
+7 -7
View File
@@ -118,21 +118,21 @@
else
icon_state = "[icon_modifier]railing1"
if (check & 32)
add_overlay(image('icons/obj/railing.dmi', src, "[icon_modifier]corneroverlay"))
add_overlay(image(icon, src, "[icon_modifier]corneroverlay"))
if ((check & 16) || !(check & 32) || (check & 64))
add_overlay(image('icons/obj/railing.dmi', src, "[icon_modifier]frontoverlay_l"))
add_overlay(image(icon, src, "[icon_modifier]frontoverlay_l"))
if (!(check & 2) || (check & 1) || (check & 4))
add_overlay(image('icons/obj/railing.dmi', src, "[icon_modifier]frontoverlay_r"))
add_overlay(image(icon, src, "[icon_modifier]frontoverlay_r"))
if(check & 4)
switch (src.dir)
if (NORTH)
add_overlay(image('icons/obj/railing.dmi', src, "[icon_modifier]mcorneroverlay", pixel_x = 32))
add_overlay(image(icon, src, "[icon_modifier]mcorneroverlay", pixel_x = 32))
if (SOUTH)
add_overlay(image('icons/obj/railing.dmi', src, "[icon_modifier]mcorneroverlay", pixel_x = -32))
add_overlay(image(icon, src, "[icon_modifier]mcorneroverlay", pixel_x = -32))
if (EAST)
add_overlay(image('icons/obj/railing.dmi', src, "[icon_modifier]mcorneroverlay", pixel_y = -32))
add_overlay(image(icon, src, "[icon_modifier]mcorneroverlay", pixel_y = -32))
if (WEST)
add_overlay(image('icons/obj/railing.dmi', src, "[icon_modifier]mcorneroverlay", pixel_y = 32))
add_overlay(image(icon, src, "[icon_modifier]mcorneroverlay", pixel_y = 32))
/obj/structure/railing/verb/rotate_counterclockwise()
set name = "Rotate Railing Counter-Clockwise"
+7 -1
View File
@@ -2,4 +2,10 @@
icon = 'icons/obj/decals_vr.dmi'
name = "\improper ITG"
desc = "A polished metal sign which reads 'Ironcrest Transport Group'."
icon_state = "itg"
icon_state = "itg"
/obj/structure/sign/scenery/fakefireaxe
name = "decorative fire axe cabinet"
desc = "A fancy decorative indent in the wall, with an axe inside. The axe is actually a part of the indent and cannot be removed. A nostalgic reminder of older times of firefighting."
icon_state = "fireaxe1000"
icon = 'icons/obj/closet.dmi'
+51 -3
View File
@@ -25,7 +25,8 @@
/obj/item/weapon/gun/projectile/pirate,
/obj/item/clothing/accessory/permit/gun,
/obj/item/weapon/gun/projectile/dartgun,
/obj/item/clothing/gloves/black/bloodletter
/obj/item/clothing/gloves/black/bloodletter,
/obj/item/weapon/gun/energy/mouseray/metamorphosis
)
var/global/list/allocated_gamma = list()
@@ -83,6 +84,49 @@
else
return ..()
/obj/structure/trash_pile/attack_ghost(mob/observer/user as mob)
if(config.disable_player_mice)
to_chat(user, "<span class='warning'>Spawning as a mouse is currently disabled.</span>")
return
//VOREStation Add Start
if(jobban_isbanned(user, "GhostRoles"))
to_chat(user, "<span class='warning'>You cannot become a mouse because you are banned from playing ghost roles.</span>")
return
//VOREStation Add End
if(!user.MayRespawn(1))
return
var/turf/T = get_turf(src)
if(!T || (T.z in using_map.admin_levels))
to_chat(user, "<span class='warning'>You may not spawn as a mouse on this Z-level.</span>")
return
var/timedifference = world.time - user.client.time_died_as_mouse
if(user.client.time_died_as_mouse && timedifference <= mouse_respawn_time * 600)
var/timedifference_text
timedifference_text = time2text(mouse_respawn_time * 600 - timedifference,"mm:ss")
to_chat(user, "<span class='warning'>You may only spawn again as a mouse more than [mouse_respawn_time] minutes after your death. You have [timedifference_text] left.</span>")
return
var/response = tgui_alert(user, "Are you -sure- you want to become a mouse?","Are you sure you want to squeek?",list("Squeek!","Nope!"))
if(response != "Squeek!") return //Hit the wrong key...again.
var/mob/living/simple_mob/animal/passive/mouse/host
host = new /mob/living/simple_mob/animal/passive/mouse(get_turf(src))
if(host)
if(config.uneducated_mice)
host.universal_understand = 0
announce_ghost_joinleave(src, 0, "They are now a mouse.")
host.ckey = user.ckey
to_chat(host, "<span class='info'>You are now a mouse. Try to avoid interaction with players, and do not give hints away that you are more than a simple rodent.</span>")
var/atom/A = get_holder_at_turf_level(src)
A.visible_message("[host] crawls out of \the [src].")
return
/obj/structure/trash_pile/attack_hand(mob/user)
//Human mob
if(ishuman(user))
@@ -200,6 +244,8 @@
prob(2);/obj/item/toy/tennis/cyan,
prob(2);/obj/item/toy/tennis/blue,
prob(2);/obj/item/toy/tennis/purple,
prob(1);/obj/item/weapon/storage/box/brainzsnax,
prob(1);/obj/item/weapon/storage/box/brainzsnax/red,
prob(1);/obj/item/clothing/glasses/sunglasses,
prob(1);/obj/item/clothing/glasses/sunglasses/bigshot,
prob(1);/obj/item/clothing/glasses/welding,
@@ -246,7 +292,8 @@
prob(2);/obj/item/weapon/storage/box/syndie_kit/spy,
prob(2);/obj/item/weapon/grenade/anti_photon,
prob(2);/obj/item/clothing/under/hyperfiber/bluespace,
prob(2);/obj/item/weapon/reagent_containers/glass/beaker/vial/amorphorovir,
prob(2);/obj/item/selectable_item/chemistrykit/size,
prob(2);/obj/item/selectable_item/chemistrykit/gender,
prob(1);/obj/item/clothing/suit/storage/vest/heavy/merc,
prob(1);/obj/item/device/nif/bad,
prob(1);/obj/item/device/radio_jammer,
@@ -260,7 +307,8 @@
prob(1);/obj/item/weapon/storage/secure/briefcase/trashmoney,
prob(1);/obj/item/device/survivalcapsule/popcabin,
prob(1);/obj/item/weapon/reagent_containers/syringe/steroid,
prob(1);/obj/item/capture_crystal)
prob(1);/obj/item/capture_crystal,
prob(1);/obj/item/weapon/gun/energy/mouseray)
var/obj/item/I = new path()
return I
+4 -11
View File
@@ -124,7 +124,7 @@
GM.adjustBruteLoss(5)
else
to_chat(user, "<span class='notice'>You need a tighter grip.</span>")
/obj/structure/urinal
name = "urinal"
@@ -152,7 +152,7 @@
/obj/machinery/shower
name = "shower"
desc = "The HS-451. Installed in the 2550s by the Hygiene Division."
desc = "The HS-451. Installed in the 2250s by the Hygiene Division."
icon = 'icons/obj/watercloset.dmi'
icon_state = "shower"
density = FALSE
@@ -256,13 +256,7 @@
M.clean_blood()
if(isturf(loc))
var/turf/tile = loc
for(var/obj/effect/E in tile)
if(istype(E,/obj/effect/rune) || istype(E,/obj/effect/decal/cleanable) || istype(E,/obj/effect/overlay))
qdel(E)
reagents.splash(O, 10)
reagents.splash(O, 10, min_spill = 0, max_spill = 0)
/obj/machinery/shower/process()
if(!on) return
@@ -276,11 +270,10 @@
reagents.add_reagent("water", reagents.get_free_space())
/obj/machinery/shower/proc/wash_floor()
if(!ismist && is_washing)
if(is_washing)
return
is_washing = 1
var/turf/T = get_turf(src)
reagents.splash(T, reagents.total_volume)
T.clean(src)
spawn(100)
is_washing = 0
@@ -69,7 +69,7 @@
return TRUE
/obj/structure/windoor_assembly/proc/rename_door(mob/living/user)
var/t = sanitizeSafe(input(user, "Enter the name for the windoor.", src.name, src.created_name), MAX_NAME_LEN)
var/t = sanitizeSafe(tgui_input_text(user, "Enter the name for the windoor.", src.name, src.created_name, MAX_NAME_LEN), MAX_NAME_LEN)
if(!in_range(src, user) && src.loc != user) return
created_name = t
update_state()
+2 -2
View File
@@ -615,7 +615,7 @@
to_chat(user, "<span class='notice'>\The [src] is linked to \the [buffered_button].</span>")
return TRUE
// Otherwise fall back to asking them
var/t = sanitizeSafe(input(user, "Enter the ID for the window.", src.name, null), MAX_NAME_LEN)
var/t = sanitizeSafe(tgui_input_text(user, "Enter the ID for the window.", src.name, null, MAX_NAME_LEN), MAX_NAME_LEN)
if (!t && user.get_active_hand() != W && in_range(src, user))
src.id = t
to_chat(user, "<span class='notice'>The new ID of \the [src] is [id]</span>")
@@ -670,7 +670,7 @@
var/obj/item/device/multitool/MT = W
if(!id)
// If no ID is set yet (newly built button?) let them select an ID for first-time use!
var/t = sanitizeSafe(input(user, "Enter an ID for \the [src].", src.name, null), MAX_NAME_LEN)
var/t = sanitizeSafe(tgui_input_text(user, "Enter an ID for \the [src].", src.name, null, MAX_NAME_LEN), MAX_NAME_LEN)
if (t && user.get_active_hand() != W && in_range(src, user))
src.id = t
to_chat(user, "<span class='notice'>The new ID of \the [src] is [id]</span>")