Merge branch 'master' into upstream-merge-8298

This commit is contained in:
Novacat
2022-03-04 09:57:28 -05:00
committed by GitHub
825 changed files with 158690 additions and 79022 deletions
+41 -32
View File
@@ -112,7 +112,7 @@
user.visible_message("[user] smears paint on [src], covering the entire thing in paint.", "You smear paint on [src], changing the color of the entire thing.", runemessage = "smears paint")
update_appearance()
return
if(user.a_intent == I_HELP)
tgui_interact(user)
else
@@ -215,7 +215,7 @@
return canvas_color
/obj/item/canvas/proc/try_rename(mob/user)
var/new_name = stripped_input(user,"What do you want to name the painting?")
var/new_name = stripped_input(user,"What do you want to name the painting?", max_length = 250)
if(new_name != painting_name && new_name && CanUseTopic(user, GLOB.tgui_physical_state))
painting_name = new_name
SStgui.update_uis(src)
@@ -291,7 +291,7 @@
if(new_color)
selected_color = new_color
color_drop.color = new_color
cut_overlays()
if(hud_level)
add_overlay(color_drop)
@@ -316,21 +316,10 @@
name = "painting frame"
desc = "The perfect showcase for your favorite deathtrap memories."
icon = 'icons/obj/decals.dmi'
//custom_materials = list(/datum/material/wood = 2000)
//flags_1 = NONE
refund_amt = 5
refund_type = /obj/item/stack/material/wood
icon_state = "frame-empty"
/obj/item/frame/painting/try_build(turf/on_wall, mob/user as mob)
if(get_dist(on_wall, user) > 1)
return
var/ndir = get_dir(on_wall, user)
if (!(ndir in cardinal))
return
if(!istype(on_wall, /turf/simulated/wall))
to_chat(user, "<span class='warning'>Frame cannot be placed on this spot.</span>")
return
new /obj/structure/sign/painting(get_turf(user), ndir, TRUE)
qdel(src)
build_machine_type = /obj/structure/sign/painting
/obj/structure/sign/painting
name = "Painting"
@@ -346,6 +335,8 @@
var/desc_with_canvas
var/persistence_id
var/loaded = FALSE
var/curator = "nobody! Report bug if you see this."
var/static/list/art_appreciators = list()
//Presets for art gallery mapping, for paintings to be shared across stations
/obj/structure/sign/painting/public
@@ -356,10 +347,11 @@
/obj/structure/sign/painting/library_secure
name = "\improper Curated Painting Exhibit mounting"
desc = "For masterpieces hand-picked by the curator."
desc_with_canvas = "A masterpiece hand-picked by the curator, supposedly."
desc = "For masterpieces hand-picked by the librarian."
desc_with_canvas = "A masterpiece hand-picked by the librarian, supposedly."
persistence_id = "library"
req_one_access = list(access_library)
curator = "Librarian"
/obj/structure/sign/painting/chapel_secure
name = "\improper Religious Painting Exhibit mounting"
@@ -367,13 +359,15 @@
desc_with_canvas = "A masterpiece hand-picked by the chaplain, supposedly."
persistence_id = "chapel"
req_one_access = list(access_chapel_office)
curator = "Chaplain"
/obj/structure/sign/painting/library_private // keep your smut away from prying eyes, or non-librarians at least
name = "\improper Private Painting Exhibit mounting"
desc = "For art pieces deemed too subversive or too illegal to be shared outside of curators."
desc = "For art pieces deemed too subversive or too illegal to be shared outside of librarians."
desc_with_canvas = "A painting hung away from lesser minds."
persistence_id = "library_private"
req_one_access = list(access_library)
curator = "Librarian"
/obj/structure/sign/painting/away_areas // for very hard-to-get-to areas
name = "\improper Remote Painting Exhibit mounting"
@@ -413,17 +407,18 @@
if(current_canvas)
current_canvas.tgui_interact(user)
. += "<span class='notice'>Use wirecutters to remove the painting.</span>"
. += "<span class='notice'>Paintings hung here are curated based on interest. The more often someone EXAMINEs the painting, the longer it will stay in rotation.</span>"
// Painting loaded and persistent frame, give a hint about removal safety
if(persistence_id)
if(loaded)
. += "<span class='notice'>Don't worry, the currently framed painting has already been entered into the archives and can be safely removed. It will still be used on future shifts.</span>"
. += "<span class='warning'>Don't worry, the currently framed painting has already been entered into the archives and can be safely removed. It will still be used on future shifts.</span>"
back_of_the_line(user)
else
. += "<span class='warning'>This painting has not been entered into the archives yet. Removing it will prevent that from happening.</span>"
/obj/structure/sign/painting/proc/frame_canvas(mob/user,obj/item/canvas/new_canvas)
if(!allowed(user))
to_chat(user, "<span class='warning'>You're not comfortable framing this canvas in such a prestigious spot!</span>")
to_chat(user, "<span class='notice'>Access lock prevents you from putting a painting into this frame. Ask [curator] for help!</span>")
return
if(user.drop_from_inventory(new_canvas, src))
current_canvas = new_canvas
@@ -434,7 +429,7 @@
/obj/structure/sign/painting/proc/unframe_canvas(mob/living/user)
if(!allowed(user))
to_chat(user, "<span class='warning'>You're not comfortable removing this prestigious canvas!</span>")
to_chat(user, "<span class='notice'>Access lock prevents you from removing paintings from this frame. Ask [curator] ((or admins)) for help!</span>")
return
if(current_canvas)
current_canvas.forceMove(drop_location())
@@ -483,12 +478,12 @@
/obj/structure/sign/painting/proc/load_persistent()
if(!persistence_id || !LAZYLEN(SSpersistence.unpicked_paintings))
return
var/list/painting_category = list()
for (var/list/P in SSpersistence.unpicked_paintings)
if(P["persistence_id"] == persistence_id)
painting_category[++painting_category.len] = P
var/list/painting
while(!painting)
if(!length(painting_category))
@@ -500,7 +495,7 @@
continue //and try again
painting = chosen
SSpersistence.unpicked_paintings -= list(chosen)
var/title = painting["title"]
var/author_name = painting["author"]
var/author_ckey = painting["ckey"]
@@ -509,7 +504,7 @@
var/obj/item/canvas/new_canvas
var/w = I.Width()
var/h = I.Height()
for(var/T in typesof(/obj/item/canvas))
new_canvas = T
if(initial(new_canvas.width) == w && initial(new_canvas.height) == h)
@@ -519,7 +514,7 @@
if(!new_canvas)
warning("Couldn't find a canvas to match [w]x[h] of painting")
return
new_canvas.fill_grid_from_icon(I)
new_canvas.generated_icon = I
new_canvas.icon_generated = TRUE
@@ -540,7 +535,7 @@
return
if(!current_canvas.painting_name)
current_canvas.painting_name = "Untitled Artwork"
var/data = current_canvas.get_data_string()
var/md5 = md5(lowertext(data))
for(var/list/entry in SSpersistence.all_paintings)
@@ -549,10 +544,10 @@
var/png_directory = "data/persistent/paintings/[persistence_id]/"
var/png_path = png_directory + "[md5].png"
var/result = rustg_dmi_create_png(png_path,"[current_canvas.width]","[current_canvas.height]",data)
if(result)
CRASH("Error saving persistent painting: [result]")
SSpersistence.all_paintings += list(list(
"persistence_id" = persistence_id,
"title" = current_canvas.painting_name,
@@ -561,6 +556,20 @@
"ckey" = current_canvas.author_ckey
))
/obj/structure/sign/painting/proc/back_of_the_line(mob/user)
if(user.ckey in art_appreciators)
return
if(!persistence_id || !current_canvas || current_canvas.no_save)
return
var/data = current_canvas.get_data_string()
var/md5 = md5(lowertext(data))
for(var/list/entry in SSpersistence.all_paintings)
if(entry["md5"] == md5 && entry["persistence_id"] == persistence_id)
SSpersistence.all_paintings.Remove(list(entry))
SSpersistence.all_paintings.Add(list(entry))
art_appreciators += user.ckey
to_chat(user, "<span class='notice'>Showing interest in this painting renews its position in the curator database.</span>")
/obj/structure/sign/painting/vv_get_dropdown()
. = ..()
VV_DROPDOWN_OPTION("removepainting", "Remove Persistent Painting")
@@ -1444,6 +1444,13 @@
"stripes" = COLOR_OFF_WHITE,
"glass" = COLOR_WHITE
)
/decl/closet_appearance/wall_double/survival
color = COLOR_CYAN_BLUE
decals = null
extra_decals = list(
"stripe_outer" = COLOR_WHITE
)
// Carts
/decl/closet_appearance/cart
@@ -32,6 +32,11 @@
"stripes_horizontal" = COLOR_SKY_BLUE
)
/decl/closet_appearance/secure_closet/talon/miner
extra_decals = list(
"stripes_horizontal" = COLOR_BEASTY_BROWN
)
/decl/closet_appearance/secure_closet/talon/captain
extra_decals = list(
"stripes_horizontal" = COLOR_GOLD
@@ -12,7 +12,7 @@
/obj/item/clothing/under/rank/chief_engineer/skirt,
/obj/item/clothing/head/hardhat/white,
/obj/item/clothing/head/welding,
/obj/item/clothing/gloves/yellow,
/obj/item/clothing/gloves/heavy_engineer, //VOREStation Edit: chief gets the good shit
/obj/item/clothing/shoes/brown,
/obj/item/weapon/cartridge/ce,
/obj/item/device/radio/headset/heads/ce,
@@ -6,6 +6,7 @@
starts_with = list(
/obj/item/weapon/storage/bag/plants,
/obj/item/clothing/under/rank/hydroponics,
/obj/item/clothing/gloves/botanic_leather,
/obj/item/device/analyzer/plant_analyzer,
/obj/item/device/radio/headset/headset_service,
/obj/item/clothing/head/greenbandana,
@@ -183,3 +183,44 @@
/obj/structure/closet/walllocker_double/hydrant/east
pixel_x = 32
dir = EAST
/obj/structure/closet/walllocker_double/survival
desc = "A wall mounted storage cabinet. It contains a small amount of emergency supplies for wilderness survival, but they probably won't last very long."
name = "Emergency Survival Wall Cabinet"
icon = 'icons/obj/closets/bases/wall_double.dmi'
closet_appearance = /decl/closet_appearance/wall_double/survival
density = FALSE
anchored = TRUE
store_mobs = 0
wall_mounted = 1
plane = TURF_PLANE
layer = ABOVE_TURF_LAYER
starts_with = list(
/obj/item/clothing/suit/space/emergency,
/obj/item/clothing/head/helmet/space/emergency,
/obj/item/clothing/mask/breath,
/obj/item/weapon/tank/oxygen,
/obj/item/device/suit_cooling_unit/emergency,
/obj/item/device/gps,
/obj/item/weapon/material/knife/tacknife/survival,
/obj/random/mre,
/obj/item/device/flashlight/color/yellow,
/obj/item/device/flashlight/flare,
/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle)
/obj/structure/closet/walllocker_double/survival/north
pixel_y = 32
dir = SOUTH
/obj/structure/closet/walllocker_double/survival/south
pixel_y = -32
dir = NORTH
/obj/structure/closet/walllocker_double/survival/west
pixel_x = -32
dir = WEST
/obj/structure/closet/walllocker_double/survival/east
pixel_x = 32
dir = EAST
@@ -453,6 +453,7 @@
/obj/item/clothing/head/caphat/cap,
/obj/item/clothing/head/caphat/beret,
/obj/item/clothing/under/rank/captain,
/obj/item/clothing/under/dress/dress_cap/femformal,
/obj/item/clothing/shoes/brown,
/obj/item/clothing/gloves/captain,
/obj/item/clothing/under/dress/dress_cap,
@@ -32,7 +32,7 @@
if(AM.simulated)
AM.forceMove(T)
//VOREStation Add Start
if(isanimal(AM))
if(isanimal(AM))
var/mob/living/simple_mob/AMBLINAL = AM
if(!AMBLINAL.mind)
AMBLINAL.ghostjoin = 1
@@ -65,6 +65,11 @@
ME.attach(H)
..()
/obj/structure/largecrate/donksoftvendor
name = "\improper Donk-Soft vendor crate"
desc = "A hefty wooden crate displaying the logo of Donk-Soft. It's rather heavy."
starts_with = list(/obj/machinery/vending/donksoft)
/obj/structure/largecrate/vehicle
name = "vehicle crate"
desc = "Wulf Aeronautics says it comes in a box for the consumer's sake... How is this so light?"
@@ -121,3 +126,7 @@
/obj/structure/largecrate/animal/chick
name = "chicken crate"
starts_with = list(/mob/living/simple_mob/animal/passive/chick = 5)
/obj/structure/largecrate/animal/catslug
name = "catslug carrier"
starts_with = list(/mob/living/simple_mob/vore/alienanimals/catslug)
+96 -35
View File
@@ -13,6 +13,7 @@
var/min_x_scale = 0.9
var/min_y_scale = 0.9
var/removal_tool = /obj/item/weapon/shovel
var/harvest_tool = null // The type of item used to harvest the plant.
var/harvest_count = 0
var/destroy_on_harvest = FALSE
@@ -40,23 +41,34 @@
. = ..()
if(harvest_count < max_harvests)
. += get_harvestable_desc()
if(harvest_tool)
var/obj/item/tool = harvest_tool
. += SPAN_NOTICE("\The [src] can be harvested with \a [initial(tool.name)].")
if(removal_tool)
var/obj/item/tool = removal_tool
. += SPAN_NOTICE("\The [src] can be removed with \a [initial(tool.name)].")
/obj/structure/flora/proc/get_harvestable_desc()
return "<span class='notice'>\The [src] seems to have something hanging from it.</span>"
/obj/structure/flora/attackby(var/obj/item/weapon/W, var/mob/living/user)
if(can_harvest(W))
var/harvest_spawn = pickweight(harvest_loot)
var/atom/movable/AM = spawn_harvest(harvest_spawn, user)
if(!AM)
to_chat(user, "<span class='notice'>You fail to harvest anything from \the [src].</span>")
if(AM)
to_chat(user, SPAN_NOTICE("You harvest \the [AM] from \the [src]."))
else
to_chat(user, "<span class='notice'>You harvest \the [AM] from \the [src].</span>")
if(harvest_count >= max_harvests && destroy_on_harvest)
qdel(src)
return
to_chat(user, SPAN_NOTICE("You fail to harvest anything from \the [src]."))
return
if(removal_tool && istype(W, removal_tool))
to_chat(user, SPAN_WARNING("You start uprooting \the [src]..."))
if(do_after(user, 30))
visible_message(SPAN_NOTICE("\The [user] uproots and discards \the [src]!"))
qdel(src)
return
..(W, user)
@@ -450,19 +462,64 @@
desc = "This is a tiny well lit decorative christmas tree."
icon_state = "plant-xmas"
/obj/structure/flora/mushroom
name = "mushroom"
desc = "Hey, this one seems like a fun guy."
icon_state = "mush1"
icon = 'icons/obj/flora/mushrooms.dmi'
harvest_loot = list(/obj/item/weapon/reagent_containers/food/snacks/mushroomslice = 1)
harvest_tool = /obj/item/weapon/material/knife
max_harvests = 2
min_harvests = 0
/obj/structure/flora/mushroom/Initialize()
. = ..()
icon_state = "mush[rand(1,4)]"
if(prob(50))
adjust_scale(-1, 1)
pixel_x = rand(-4, 4)
/obj/random/pottedplant
name = "random potted plant"
desc = "This is a random potted plant."
/obj/random/pottedplant/item_to_spawn()
return pick(
prob(10);/obj/structure/flora/pottedplant,
prob(10);/obj/structure/flora/pottedplant/large,
prob(10);/obj/structure/flora/pottedplant/fern,
prob(10);/obj/structure/flora/pottedplant/overgrown,
prob(10);/obj/structure/flora/pottedplant/bamboo,
prob(10);/obj/structure/flora/pottedplant/largebush,
prob(10);/obj/structure/flora/pottedplant/thinbush,
prob(10);/obj/structure/flora/pottedplant/mysterious,
prob(10);/obj/structure/flora/pottedplant/smalltree,
prob(10);/obj/structure/flora/pottedplant/unusual,
prob(10);/obj/structure/flora/pottedplant/orientaltree,
prob(10);/obj/structure/flora/pottedplant/smallcactus,
prob(10);/obj/structure/flora/pottedplant/tall,
prob(10);/obj/structure/flora/pottedplant/sticky,
prob(10);/obj/structure/flora/pottedplant/smelly,
prob(10);/obj/structure/flora/pottedplant/small,
prob(10);/obj/structure/flora/pottedplant/aquatic,
prob(10);/obj/structure/flora/pottedplant/shoot,
prob(10);/obj/structure/flora/pottedplant/flower,
prob(10);/obj/structure/flora/pottedplant/crystal,
prob(10);/obj/structure/flora/pottedplant/subterranean,
prob(10);/obj/structure/flora/pottedplant/minitree,
prob(10);/obj/structure/flora/pottedplant/stoutbush,
prob(10);/obj/structure/flora/pottedplant/drooping,
prob(10);/obj/structure/flora/pottedplant/tropical,
prob(10);/obj/structure/flora/pottedplant/dead,
prob(10);/obj/structure/flora/pottedplant/decorative,
prob(1);/obj/structure/flora/pottedplant/xmas
)
/obj/structure/flora/sif
icon = 'icons/obj/flora/sifflora.dmi'
/obj/structure/flora/sif/attack_hand(mob/user)
if (user.a_intent == I_HURT)
if(do_after(user, 5 SECONDS))
user.visible_message("<span class='filter_notice'>\The [user] digs up \the [src.name].", "You dig up \the [src.name].</span>")
qdel(src)
else
user.visible_message("<span class='filter_notice'>\The [user] pokes \the [src.name].", "You poke \the [src.name].</span>")
/datum/category_item/catalogue/flora/subterranean_bulbs
name = "Sivian Flora - Subterranean Bulbs"
name = "Sivian Flora - Cavebulbs"
desc = "A plant which is native to Sif, it continues the trend of being a bioluminescent specimen. These plants \
are generally suited for conditions experienced in caverns, which are generally dark and cold. It is not \
known why this plant evolved to be bioluminescent, however this property has, unintentionally, allowed for \
@@ -475,7 +532,7 @@
value = CATALOGUER_REWARD_EASY
/obj/structure/flora/sif/subterranean
name = "subterranean plant"
name = "subterranean bulbs"
desc = "This is a subterranean plant. It's bulbous ends glow faintly."
icon_state = "glowplant"
light_range = 2
@@ -483,12 +540,15 @@
light_color = "#FF6633"
light_on = TRUE
catalogue_data = list(/datum/category_item/catalogue/flora/subterranean_bulbs)
harvest_loot = list(/obj/item/weapon/reagent_containers/food/snacks/grown/sif/cavebulbs = 1)
harvest_tool = /obj/item/weapon/material/knife
max_harvests = 2
min_harvests = 0
/obj/structure/flora/sif/subterranean/Initialize()
icon_state = "[initial(icon_state)][rand(1,2)]"
. = ..()
/datum/category_item/catalogue/flora/eyebulbs
name = "Sivian Flora - Eyebulbs"
desc = "A plant native to Sif. On the end of its stems are bulbs which visually resemble \
@@ -497,10 +557,14 @@
value = CATALOGUER_REWARD_EASY
/obj/structure/flora/sif/eyes
name = "mysterious bulbs"
desc = "This is a mysterious looking plant. They kind of look like eyeballs. Creepy."
name = "eyebulbs"
desc = "This is a mysterious-looking plant. They kind of look like eyeballs. Creepy."
icon_state = "eyeplant"
catalogue_data = list(/datum/category_item/catalogue/flora/eyebulbs)
harvest_tool = /obj/item/weapon/material/knife
max_harvests = 2
min_harvests = 0
harvest_loot = list(/obj/item/weapon/reagent_containers/food/snacks/grown/sif/eyebulbs = 1)
/obj/structure/flora/sif/eyes/Initialize()
icon_state = "[initial(icon_state)][rand(1,3)]"
@@ -514,20 +578,20 @@
value = CATALOGUER_REWARD_TRIVIAL
/obj/structure/flora/sif/tendrils
name = "stocky tendrils"
name = "wabback tendrils"
desc = "A 'plant' made up of hardened moss. It has tiny hairs that bunch together to look like snow."
icon_state = "grass"
randomize_size = TRUE
catalogue_data = list(/datum/category_item/catalogue/flora/mosstendrils)
harvest_tool = /obj/item/weapon/material/knife
max_harvests = 1
min_harvests = -4
max_harvests = 3
min_harvests = 0
harvest_loot = list(
/obj/item/seeds/wabback = 15,
/obj/item/seeds/blackwabback = 1,
/obj/item/seeds/wildwabback = 30
)
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/wabback = 15,
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/blackwabback = 1,
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/wildwabback = 30
)
/obj/structure/flora/sif/tendrils/Initialize()
icon_state = "[initial(icon_state)][rand(1,3)]"
@@ -546,26 +610,24 @@
value = CATALOGUER_REWARD_HARD
/obj/structure/flora/sif/frostbelle
name = "gnarly shrub"
name = "frostbelle shrub"
desc = "A stocky plant with fins bearing luminescent veins along its branches."
icon_state = "grass"
icon_state = "frostbelle"
randomize_size = TRUE
catalogue_data = list(/datum/category_item/catalogue/flora/frostbelle)
harvest_tool = /obj/item/weapon/material/knife
max_harvests = 2
min_harvests = -4
min_harvests = 0
harvest_loot = list(
/obj/item/weapon/reagent_containers/food/snacks/frostbelle = 1
)
)
var/variantnum = null
/obj/structure/flora/sif/frostbelle/Initialize()
. = ..()
variantnum = rand(1,3)
update_icon()
/obj/structure/flora/sif/frostbelle/update_icon()
@@ -573,7 +635,6 @@
if(max_harvests > 0 && harvest_count < max_harvests)
icon_state = "[initial(icon_state)][variantnum]"
else
icon_state = initial(icon_state)
+3 -3
View File
@@ -271,12 +271,12 @@
harvest_tool = /obj/item/weapon/material/knife
max_harvests = 2
min_harvests = -4
min_harvests = 0
harvest_loot = list(
/obj/item/weapon/reagent_containers/food/snacks/siffruit = 20,
/obj/item/weapon/reagent_containers/food/snacks/grown/sifpod = 5,
/obj/item/weapon/reagent_containers/food/snacks/grown/sif/sifpod = 5,
/obj/item/seeds/sifbulb = 1
)
)
var/light_shift = 0
@@ -80,11 +80,6 @@
to_chat(M, "<span class='warning'>You may be a spooky space monster, but your role is to facilitate spooky space monster roleplay, not to fight the station and kill people. You can of course eat and/or digest people as you like if OOC prefs align, but this should be done as part of roleplay. If you intend to fight the station and kill people and such, you need permission from the staff team. GENERALLY, this role should avoid well populated areas. Youre a weird spooky space monster, so the bar is probably not where youd want to go if you intend to survive. Of course, youre welcome to try to make friends and roleplay how you will in this regard, but something to keep in mind.</span>")
newPred.ckey = M.ckey
newPred.visible_message("<span class='warning'>[newPred] emerges from somewhere!</span>")
if(prob(announce_prob))
spawn(2 MINUTES)
command_announcement.Announce("Unexpected biosignature detected in the maintenance tunnels of [station_name()].", "Lifesign Alert")
qdel(src)
/obj/structure/ghost_pod/ghost_activated/maintpred/no_announce
@@ -119,11 +114,6 @@
newMorph.ckey = M.ckey
newMorph.visible_message("<span class='warning'>A morph appears to crawl out of somewhere.</span>")
if(prob(announce_prob))
spawn(2 MINUTES)
command_announcement.Announce("Unexpected biosignature detected in the maintenance tunnels of [station_name()].", "Lifesign Alert")
qdel(src)
/obj/structure/ghost_pod/ghost_activated/morphspawn/no_announce
+4 -4
View File
@@ -300,8 +300,8 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
uncommon_loot = list(
/obj/item/weapon/storage/box/sinpockets,
/obj/item/weapon/storage/box/practiceshells,
/obj/item/weapon/storage/box/blanks,
/obj/item/ammo_magazine/ammo_box/b12g/practice,
/obj/item/ammo_magazine/ammo_box/b12g/blank,
/obj/item/weapon/storage/box/smokes,
/obj/item/weapon/storage/box/metalfoam,
/obj/item/weapon/storage/box/handcuffs,
@@ -311,8 +311,8 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
rare_loot = list(
/obj/item/weapon/storage/box/flashbangs,
/obj/item/weapon/storage/box/empslite,
/obj/item/weapon/storage/box/flashshells,
/obj/item/weapon/storage/box/stunshells,
/obj/item/ammo_magazine/ammo_box/b12g/flash,
/obj/item/ammo_magazine/ammo_box/b12g/stunshell,
/obj/item/weapon/storage/box/teargas
)
+9 -1
View File
@@ -99,6 +99,7 @@
if(do_after(user, 40, src))
to_chat(user, "<span class='notice'>You dissasembled the low wall!</span>")
dismantle()
return
// Handle placing things
if(isrobot(user))
@@ -121,7 +122,14 @@
return FALSE
return TRUE
/obj/structure/low_wall/MouseDrop_T(obj/O, mob/user, src_location, over_location, src_control, over_control, params)
/obj/structure/low_wall/MouseDrop_T(atom/movable/AM, mob/user, src_location, over_location, src_control, over_control, params)
if(AM == user)
var/mob/living/H = user
if(istype(H) && can_climb(H))
do_climb(AM)
var/obj/O = AM
if(!istype(O))
return
if(istype(O, /obj/structure/window))
var/obj/structure/window/W = O
if(Adjacent(W) && !W.anchored)
+2 -1
View File
@@ -75,6 +75,7 @@
return TryToSwitchState(user)
/obj/structure/simple_door/AltClick(mob/user as mob)
. = ..()
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
if(!Adjacent(user))
return
@@ -82,7 +83,7 @@
src.visible_message("<span class='warning'>[user] hammers on \the [src]!</span>", "<span class='warning'>Someone hammers loudly on \the [src]!</span>")
src.add_fingerprint(user)
playsound(src, knock_hammer_sound, 50, 0, 3)
else
else if(user.a_intent == I_HELP)
src.visible_message("[user] knocks on \the [src].", "Someone knocks on \the [src].")
src.add_fingerprint(user)
playsound(src, knock_sound, 50, 0, 3)
@@ -334,7 +334,7 @@
corner_piece = TRUE
//color variations
//Middle sofas first
/obj/structure/bed/chair/sofa
sofa_material = "carpet"
@@ -379,92 +379,92 @@
/obj/structure/bed/chair/sofa/corner
icon_state = "sofacorner"
/obj/structure/bed/chair/sofa/brown/left
icon_state = "sofaend_left"
/obj/structure/bed/chair/sofa/left/brown
sofa_material = "leather"
/obj/structure/bed/chair/sofa/brown/right
icon_state = "sofaend_right"
/obj/structure/bed/chair/sofa/right/brown
sofa_material = "leather"
/obj/structure/bed/chair/sofa/brown/corner
icon_state = "sofacorner"
/obj/structure/bed/chair/sofa/corner/brown
sofa_material = "leather"
/obj/structure/bed/chair/sofa/teal/left
icon_state = "sofaend_left"
/obj/structure/bed/chair/sofa/left/teal
sofa_material = "teal"
/obj/structure/bed/chair/sofa/teal/right
icon_state = "sofaend_right"
/obj/structure/bed/chair/sofa/right/teal
sofa_material = "teal"
/obj/structure/bed/chair/sofa/teal/corner
icon_state = "sofacorner"
/obj/structure/bed/chair/sofa/corner/teal
sofa_material = "teal"
/obj/structure/bed/chair/sofa/black/left
icon_state = "sofaend_left"
/obj/structure/bed/chair/sofa/left/black
sofa_material = "black"
/obj/structure/bed/chair/sofa/black/right
icon_state = "sofaend_right"
/obj/structure/bed/chair/sofa/right/black
sofa_material = "black"
/obj/structure/bed/chair/sofa/black/corner
icon_state = "sofacorner"
/obj/structure/bed/chair/sofa/corner/black
sofa_material = "black"
/obj/structure/bed/chair/sofa/green/left
icon_state = "sofaend_left"
/obj/structure/bed/chair/sofa/left/green
sofa_material = "green"
/obj/structure/bed/chair/sofa/green/right
icon_state = "sofaend_right"
/obj/structure/bed/chair/sofa/right/green
sofa_material = "green"
/obj/structure/bed/chair/sofa/green/corner
icon_state = "sofacorner"
/obj/structure/bed/chair/sofa/corner/green
sofa_material = "green"
/obj/structure/bed/chair/sofa/purp/left
icon_state = "sofaend_left"
/obj/structure/bed/chair/sofa/left/purp
sofa_material = "purple"
/obj/structure/bed/chair/sofa/purp/right
icon_state = "sofaend_right"
/obj/structure/bed/chair/sofa/right/purp
sofa_material = "purple"
/obj/structure/bed/chair/sofa/purp/corner
icon_state = "sofacorner"
/obj/structure/bed/chair/sofa/corner/purp
sofa_material = "purple"
/obj/structure/bed/chair/sofa/blue/left
icon_state = "sofaend_left"
/obj/structure/bed/chair/sofa/left/blue
sofa_material = "blue"
/obj/structure/bed/chair/sofa/blue/right
icon_state = "sofaend_right"
/obj/structure/bed/chair/sofa/right/blue
sofa_material = "blue"
/obj/structure/bed/chair/sofa/blue/corner
icon_state = "sofacorner"
/obj/structure/bed/chair/sofa/corner/blue
sofa_material = "blue"
/obj/structure/bed/chair/sofa/beige/left
icon_state = "sofaend_left"
/obj/structure/bed/chair/sofa/left/beige
sofa_material = "beige"
/obj/structure/bed/chair/sofa/beige/right
icon_state = "sofaend_right"
/obj/structure/bed/chair/sofa/right/beige
sofa_material = "beige"
/obj/structure/bed/chair/sofa/beige/corner
icon_state = "sofacorner"
/obj/structure/bed/chair/sofa/corner/beige
sofa_material = "beige"
/obj/structure/bed/chair/sofa/lime/left
icon_state = "sofaend_left"
/obj/structure/bed/chair/sofa/left/lime
sofa_material = "lime"
/obj/structure/bed/chair/sofa/lime/right
icon_state = "sofaend_right"
/obj/structure/bed/chair/sofa/right/lime
sofa_material = "lime"
/obj/structure/bed/chair/sofa/lime/corner
icon_state = "sofacorner"
/obj/structure/bed/chair/sofa/corner/lime
sofa_material = "lime"
/obj/structure/bed/chair/sofa/yellow/left
icon_state = "sofaend_left"
/obj/structure/bed/chair/sofa/left/yellow
sofa_material = "yellow"
/obj/structure/bed/chair/sofa/yellow/right
icon_state = "sofaend_right"
/obj/structure/bed/chair/sofa/right/yellow
sofa_material = "yellow"
/obj/structure/bed/chair/sofa/yellow/corner
icon_state = "sofacorner"
/obj/structure/bed/chair/sofa/corner/yellow
sofa_material = "yellow"
/obj/structure/bed/chair/sofa/orange/left
icon_state = "sofaend_left"
/obj/structure/bed/chair/sofa/left/orange
sofa_material = "orange"
/obj/structure/bed/chair/sofa/orange/right
icon_state = "sofaend_right"
/obj/structure/bed/chair/sofa/right/orange
sofa_material = "orange"
/obj/structure/bed/chair/sofa/orange/corner
icon_state = "sofacorner"
/obj/structure/bed/chair/sofa/corner/orange
sofa_material = "orange"
@@ -24,7 +24,8 @@
/obj/item/weapon/gun/energy/netgun,
/obj/item/weapon/gun/projectile/pirate,
/obj/item/clothing/accessory/permit/gun,
/obj/item/weapon/gun/projectile/dartgun
/obj/item/weapon/gun/projectile/dartgun,
/obj/item/clothing/gloves/black/bloodletter
)
var/global/list/allocated_gamma = list()
@@ -69,13 +70,13 @@
var/mob/living/L = user
//They're in it, and want to get out.
if(L.loc == src)
var/choice = tgui_alert(usr, "Do you want to exit \the [src]?","Un-Hide?",list("Exit","Stay"))
var/choice = tgui_alert(user, "Do you want to exit \the [src]?","Un-Hide?",list("Exit","Stay"))
if(choice == "Exit")
if(L == hider)
hider = null
L.forceMove(get_turf(src))
else if(!hider)
var/choice = tgui_alert(usr, "Do you want to hide in \the [src]?","Un-Hide?",list("Hide","Stay"))
var/choice = tgui_alert(user, "Do you want to hide in \the [src]?","Un-Hide?",list("Hide","Stay"))
if(choice == "Hide" && !hider) //Check again because PROMPT
L.forceMove(src)
hider = L
@@ -200,6 +201,7 @@
prob(2);/obj/item/toy/tennis/blue,
prob(2);/obj/item/toy/tennis/purple,
prob(1);/obj/item/clothing/glasses/sunglasses,
prob(1);/obj/item/clothing/glasses/sunglasses/bigshot,
prob(1);/obj/item/clothing/glasses/welding,
prob(1);/obj/item/clothing/gloves/yellow,
prob(1);/obj/item/clothing/head/bio_hood/general,
@@ -231,10 +233,11 @@
prob(4);/obj/item/weapon/storage/pill_bottle/happy,
prob(4);/obj/item/weapon/storage/pill_bottle/zoom,
prob(4);/obj/item/seeds/ambrosiavulgarisseed,
prob(4);/obj/item/weapon/gun/energy/sizegun,
prob(4);/obj/item/weapon/gun/energy/sizegun/old,
prob(3);/obj/item/weapon/material/butterfly,
prob(3);/obj/item/weapon/material/butterfly/switchblade,
prob(3);/obj/item/clothing/gloves/knuckledusters,
prob(3);/obj/item/clothing/gloves/heavy_engineer,
prob(3);/obj/item/weapon/reagent_containers/syringe/drugs,
prob(2);/obj/item/weapon/implanter/sizecontrol,
prob(2);/obj/item/weapon/handcuffs/fuzzy,
@@ -255,7 +258,8 @@
prob(1);/obj/item/weapon/storage/box/survival/space,
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/weapon/reagent_containers/syringe/steroid,
prob(1);/obj/item/capture_crystal)
var/obj/item/I = new path()
return I