mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-24 04:28:12 +01:00
Merge branch 'master' into upstream-merge-8298
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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. You’re a weird spooky space monster, so the bar is probably not where you’d want to go if you intend to survive. Of course, you’re 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
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user