diff --git a/code/_helpers/names.dm b/code/_helpers/names.dm
index 20f7b2b31d..e85a607417 100644
--- a/code/_helpers/names.dm
+++ b/code/_helpers/names.dm
@@ -172,7 +172,7 @@ var/syndicate_code_response//Code response for traitors.
var/safety[] = list(1,2,3)//Tells the proc which options to remove later on.
var/nouns[] = list("love","hate","anger","peace","pride","sympathy","bravery","loyalty","honesty","integrity","compassion","charity","success","courage","deceit","skill","beauty","brilliance","pain","misery","beliefs","dreams","justice","truth","faith","liberty","knowledge","thought","information","culture","trust","dedication","progress","education","hospitality","leisure","trouble","friendships", "relaxation")
- var/drinks[] = list("vodka and tonic","gin fizz","bahama mama","manhattan","black Russian","whiskey soda","long island tea","margarita","Irish coffee"," manly dwarf","Irish cream","doctor's delight","Beepksy Smash","tequilla sunrise","brave bull","gargle blaster","bloody mary","whiskey cola","white Russian","vodka martini","martini","Cuba libre","kahlua","vodka","wine","moonshine")
+ var/drinks[] = list("vodka and tonic","gin fizz","bahama mama","manhattan","black Russian","whiskey soda","long island tea","margarita","Irish coffee"," manly dwarf","Irish cream","doctor's delight","Beepksy Smash","tequilla sunrise","brave bull","gargle blaster","bloody mary","whiskey cola","white Russian","vodka martini","martini","Cuba libre","kahlua","vodka","redwine","moonshine")
var/locations[] = teleportlocs.len ? teleportlocs : drinks//if null, defaults to drinks instead.
var/names[] = list()
diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm
index ed2869da1d..a2cbe7638b 100644
--- a/code/game/machinery/telecomms/telecomunications.dm
+++ b/code/game/machinery/telecomms/telecomunications.dm
@@ -56,7 +56,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
*/
// Loop through all linked machines and send the signal or copy.
for(var/obj/machinery/telecomms/machine in links)
- if(filter && !istype( machine, text2path(filter) ))
+ if(filter && !istype(machine, filter))
continue
if(!machine.on)
continue
@@ -288,9 +288,9 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
//Remove the level and then start adding levels that it is being broadcasted in.
signal.data["level"] = list()
- var/can_send = relay_information(signal, "/obj/machinery/telecomms/hub") // ideally relay the copied information to relays
+ var/can_send = relay_information(signal, /obj/machinery/telecomms/hub) // ideally relay the copied information to relays
if(!can_send)
- relay_information(signal, "/obj/machinery/telecomms/bus") // Send it to a bus instead, if it's linked to one
+ relay_information(signal, /obj/machinery/telecomms/bus) // Send it to a bus instead, if it's linked to one
/obj/machinery/telecomms/receiver/proc/check_receive_level(datum/signal/signal)
// If it's a direct message from a bluespace radio, we eat it and convert it into a subspace signal locally
@@ -355,11 +355,11 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
if(is_freq_listening(signal))
if(istype(machine_from, /obj/machinery/telecomms/receiver))
//If the signal is compressed, send it to the bus.
- relay_information(signal, "/obj/machinery/telecomms/bus", 1) // ideally relay the copied information to bus units
+ relay_information(signal, /obj/machinery/telecomms/bus, 1) // ideally relay the copied information to bus units
else
// Get a list of relays that we're linked to, then send the signal to their levels.
- relay_information(signal, "/obj/machinery/telecomms/relay", 1)
- relay_information(signal, "/obj/machinery/telecomms/broadcaster", 1) // Send it to a broadcaster.
+ relay_information(signal, /obj/machinery/telecomms/relay, 1)
+ relay_information(signal, /obj/machinery/telecomms/broadcaster, 1) // Send it to a broadcaster.
/*
@@ -457,7 +457,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
if(!istype(machine_from, /obj/machinery/telecomms/processor) && machine_from != src) // Signal must be ready (stupid assuming machine), let's send it
// send to one linked processor unit
- var/send_to_processor = relay_information(signal, "/obj/machinery/telecomms/processor")
+ var/send_to_processor = relay_information(signal, /obj/machinery/telecomms/processor)
if(send_to_processor)
return
@@ -466,7 +466,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
src.receive_information(signal, src)
// Try sending it!
- var/list/try_send = list("/obj/machinery/telecomms/server", "/obj/machinery/telecomms/hub", "/obj/machinery/telecomms/broadcaster", "/obj/machinery/telecomms/bus")
+ var/list/try_send = list(/obj/machinery/telecomms/server, /obj/machinery/telecomms/hub, /obj/machinery/telecomms/broadcaster, /obj/machinery/telecomms/bus)
var/i = 0
for(var/send in try_send)
if(i)
@@ -517,7 +517,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
relay_direct_information(signal, machine_from) // send the signal back to the machine
else // no bus detected - send the signal to servers instead
signal.data["slow"] += rand(5, 10) // slow the signal down
- relay_information(signal, "/obj/machinery/telecomms/server")
+ relay_information(signal, /obj/machinery/telecomms/server)
/*
@@ -643,9 +643,9 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
if(Compiler && autoruncode)
Compiler.Run(signal) // execute the code
- var/can_send = relay_information(signal, "/obj/machinery/telecomms/hub")
+ var/can_send = relay_information(signal, /obj/machinery/telecomms/hub)
if(!can_send)
- relay_information(signal, "/obj/machinery/telecomms/broadcaster")
+ relay_information(signal, /obj/machinery/telecomms/broadcaster)
/obj/machinery/telecomms/server/proc/setcode(var/t)
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 966a48141b..326301edc9 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -84,7 +84,7 @@
// Works similarly to worn sprite_sheets, except the alternate sprites are used when the clothing/refit_for_species() proc is called.
var/list/sprite_sheets_obj = list()
- var/toolspeed = 1.0 // This is a multipler on how 'fast' a tool works. e.g. setting this to 0.5 will make the tool work twice as fast.
+ var/toolspeed = 1 // This is a multipler on how 'fast' a tool works. e.g. setting this to 0.5 will make the tool work twice as fast.
var/attackspeed = DEFAULT_ATTACK_COOLDOWN // How long click delay will be when using this, in 1/10ths of a second. Checked in the user's get_attack_speed().
var/reach = 1 // Length of tiles it can reach, 1 is adjacent.
var/addblends // Icon overlay for ADD highlights when applicable.
diff --git a/code/game/objects/items/magazine.dm b/code/game/objects/items/magazine.dm
new file mode 100644
index 0000000000..59640c4c01
--- /dev/null
+++ b/code/game/objects/items/magazine.dm
@@ -0,0 +1,97 @@
+/obj/item/tabloid
+ name = "tabloid magazine"
+ desc = "It's one of those trashy tabloid magazines. It looks pretty out of date."
+ icon = 'icons/obj/magazine.dmi'
+ icon_state = "magazine"
+
+ var/headline
+ var/static/list/tabloid_states = icon_states('icons/obj/magazine.dmi')
+ var/static/list/tabloid_publishers = list(
+ "\improper Solar Enquirer",
+ "\improper Stellar Examiner",
+ "\improper Antares Daily",
+ "\improper Weekly Galactic News",
+ "\improper Spiral"
+ )
+
+ var/static/list/tabloid_headlines = list(
+ "NARCOALGORITHMS: ARE YOUR CHILDREN SAFE?",
+ "ARE GMO HUMANS POISONOUS IN BED?",
+ "TOP 10 REASONS WHY OTHER SPECIES ARE A HOAX",
+ "CENTENNIAL POSITRONIC EXTENDS LIFESPAN WITH 1 SIMPLE TRICK",
+ "TOP 10 DANGEROUS FOODS WITH CHEMICALS",
+ "NEW TERRIFYING TEEN TREND: SUN-DIVING",
+ "HAS YOUR SPOUSE BEEN REPLACED BY AN ALIEN IMPOSTER? STUDIES SUGGEST YES!",
+ "SPACE CAUSES CANCER: DOCTORS CONFIRM",
+ "ARE BODY SCANNERS TOO INVASIVE? FIND OUT INSIDE!",
+ "HAS SCIENCE GONE TOO FAR? LOCAL SCIENTIST DEBUNKS ALIEN THEORY, DECRIES THEM AS TUBE EXPERIMENTS GONE WRONG",
+ "100 DELICIOUS RECIPES LETHAL TO CARBON-BASED LIFE",
+ "TOP FIVE SPECIES WE DROVE TO EXTINCTION; NUMBER TWO WILL SHOCK YOU",
+ "LOCAL MAN HAS SEIZURE AFTER SAYING SKRELLIAN NAME; FORCED ASSIMILATION SOON?",
+ "RELIGION WAS RIGHT? SHOCK FINDINGS SHOW ALIEN SIMILARITY TO ANIMALS, EXISTENCE OF BOATS",
+ "TOP TEN REASONS WHY ONLY HUMANS ARE SENTIENT",
+ "LOCAL UNATHI SYMPATHIZER: 'I really think you should stop with these spacebaiting articles.'",
+ "DO UNATHI SYMPATHIZERS HATE THE HUMAN RACE?",
+ "WHICH PLANET HAS THE BEST LOVERS? THIS AND MORE INSIDE!",
+ "SHE SAID WE SHOULD SEE OTHER PEOPLE, SO I MARRIED A TESHARI PACK: FULL STORY INSIDE",
+ "LOSE WEIGHT THREE TIMES FASTER WITH THESE LOW-G MANEUVERS!",
+ "SHOCKING FIGURES REVEAL MORE TEENS DIE TO UNATHI HONOUR DUELS THAN GUN VIOLENCE",
+ "MY DAUGHTER JOINED A NEURAL COLLECTIVE AND NOW SHE CAN TASTE SPACETIME: FULL STORY INSIDE",
+ "WERE THE NAZIS PSYCHIC? ONE HISTORIAN TELLS ALL",
+ "TAJARANS: CUTE AND CUDDLY, OR INFILTRATING THE GOVERNMENT? FIND OUT MORE INSIDE",
+ "IS THE SOLAR GOVERNMENT CREATING AN AI SUPERINTELLIGENCE NEAR MERCURY? ONE EXPERT REVEALS SHOCKING INSIDER DETAILS!",
+ "TOP TEN HISTORICAL FIGURES THAT WERE TWO PROMETHEANS IN A TRENCHCOAT",
+ "ZADDAT: FACT OR FICTION?",
+ "TOP 10 SECRET AUGMENTS THE GOVERNMENT DOESN'T WANT YOU TO GET",
+ "ENLARGE YOUR MENTAL FACULTIES WITH THIS 1 WEIRD HAT",
+ "'HELP, MY SON THINKS HE'S A 20TH CENTURY VID CHARACTER CALLED SPOCK' AND MORE SHOCKING TALES INSIDE",
+ "18 RADICAL HIP IMPLANTS ALL THE KIDS ARE GETTING!",
+ "PRESERVED HEAD OF 21ST CENTURY CAPITALIST INSISTS THAT 'DYSON WALL' ONLY SANE SOLUTION TO RIMWARD MALCONTENTS",
+ "50 SHADES OF GREEN; BESTSELLING MULTISPECIES ROMANCE COMING TO CINEMAS",
+ "PLUTO: DWARF PLANET, OR SECRET RAMPANT AI FACILITY HELL-BENT ON CORRUPTING YOUR CHILDREN?",
+ "TOP TEN ANIME ALIENS. NUMBER 3 WILL SICKEN YOU",
+ "OCTUBER X'RALLBRE EXPOSED; NUDE PHOTOSHOOT LEAKS",
+ "WAR ON MARS AFTER NAKED MAN WAS FOUND; WERE THE ROMANS RIGHT?",
+ "REAL ALIENS ARGUE EARTH MOVIES RACIST!",
+ "HELP! I MARRIED A HEGEMONOUS SWARM INTELLIGENCE AND MY SON THINKS HE'S A ROUTER!",
+ "POSITRONICS: HUMAN INGENUITY AND GENEROSITY, OR A HORRIBLE MISTAKE? FIND OUT INSIDE!",
+ "TENTACLES OF TERROR: SKRELL BLACK OPS SEIGE NYX NAVAL DEPOT. SHOCKING PHOTOGRAPHS INSIDE!",
+ "THE FREE TRADER UNION: NEITHER FREE NOR A UNION. SHOCKING EXPOSE!",
+ "HAS THE FREE MARKET GONE TOO FAR? LUNA GLITTERPOP STAR AUCTIONS THIRD TESTICLE FOR TRANS-ORBITAL SHIPPING BONDS",
+ "THEY SAID IT WAS CANCER, BUT I KNEW IT WAS A TINY, SELF-REPLICATING CLONE OF RAY KURZWEIL: FULL STORY INSIDE",
+ "WHAT HAS TECHNOLOGY DONE? INDUSTRY BILLIONAIRE MARRIES OWN INFORMORPH MIND-COPY",
+ "REPTILLIAN ICE WARRIORS FROM ANOTHER WORLD LIVE INSIDE YOUR AIR DUCTS: HERE'S HOW TO GET RID OF THEM",
+ "10 CRITICAL THINGS YOU NEED TO KNOW ABOUT 'DRONEGATE'",
+ "THEY CALL THEM JUMPGATES BUT I'VE NEVER SEEN THEM JUMP: AN INDUSTRY INSIDER SPEAKS FOR THE FIRST TIME",
+ "EMERGENT INTELLIGENCES ARE STEALING YOUR BANK DETAILS, FETISHES: FOIL HAT RECIPE INSIDE",
+ "TIME TRAVELLERS ARE STEALING YOUR WIFI: 5 TIPS FOR DEFEATING HACKERS FROM THE FUTURE",
+ "'My mother was an alien spy': THIS CELEBRITY REVEAL WILL SHOCK AND AMAZE YOU",
+ "LUMINARY SCIENTIST SPEAKS: DIABETES IS A HYPERCORP RETROVIRUS!",
+ "'I REROUTED MY NEURAL CIRCUITRY SO THAT PAIN TASTES OF STRAWBERRIES' AND FIFTEEN OTHER CRAZY ALMACH STORIES",
+ "JOINING THE NAVY? HERE'S 15 EXPERT TIPS FOR AVOIDING BRAIN PARASITES"
+ )
+
+/obj/item/tabloid/Initialize()
+ . = ..()
+
+ pixel_x = 5-rand(10)
+ pixel_x = 5-rand(10)
+
+ icon_state = pick(tabloid_states)
+ headline = pick(tabloid_headlines)
+ name = pick(tabloid_publishers)
+
+/obj/item/tabloid/examine(mob/user, distance)
+ . = ..()
+ if(headline)
+ to_chat(user, "The headline screams, \"[headline]\"")
+
+/obj/item/tabloid/attack_self(mob/user)
+ user.visible_message(SPAN_NOTICE("\The [user] leafs idly through \the [src]."))
+ if(headline)
+ to_chat(user, "Most of it is the usual tabloid garbage, but the headline story, \"[headline]\", holds your attention for awhile.")
+ if(tabloid_headlines[headline])
+ to_chat(user, tabloid_headlines[headline])
+ else
+ to_chat(user, "Most of it is the usual tabloid garbage. You find nothing of interest.")
+ return TRUE
diff --git a/code/game/objects/items/weapons/material/misc.dm b/code/game/objects/items/weapons/material/misc.dm
index 301fff7600..73f2c9efd4 100644
--- a/code/game/objects/items/weapons/material/misc.dm
+++ b/code/game/objects/items/weapons/material/misc.dm
@@ -24,6 +24,18 @@
drop_sound = 'sound/items/drop/axe.ogg'
pickup_sound = 'sound/items/pickup/axe.ogg'
+/obj/item/weapon/material/knife/machete/hatchet/stone
+ name = "sharp rock"
+ desc = "The secret is to bang the rocks together, guys."
+ force_divisor = 0.2
+ icon_state = "rock"
+ item_state = "rock"
+ attack_verb = list("chopped", "torn", "cut")
+
+/obj/item/weapon/material/knife/machete/hatchet/stone/set_material(var/new_material)
+ var/old_name = name
+ . = ..()
+ name = old_name
/obj/item/weapon/material/knife/machete/hatchet/unathiknife
name = "duelling knife"
desc = "A length of leather-bound wood studded with razor-sharp teeth. How crude."
diff --git a/code/game/objects/structures/flora/flora.dm b/code/game/objects/structures/flora/flora.dm
index 9195de1767..a78a57ddf2 100644
--- a/code/game/objects/structures/flora/flora.dm
+++ b/code/game/objects/structures/flora/flora.dm
@@ -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
@@ -39,21 +40,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 "\The [src] seems to have something hanging from it."
/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, "You fail to harvest anything from \the [src].")
-
+ if(AM)
+ to_chat(user, SPAN_NOTICE("You harvest \the [AM] from \the [src]."))
else
- to_chat(user, "You harvest \the [AM] from \the [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)
@@ -408,19 +422,28 @@
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/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("\The [user] digs up \the [src.name].", "You dig up \the [src.name].")
- qdel(src)
- else
- user.visible_message("\The [user] pokes \the [src.name].", "You poke \the [src.name].")
-
/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 \
@@ -433,19 +456,22 @@
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
light_power = 0.6
light_color = "#FF6633"
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 \
@@ -454,10 +480,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)]"
@@ -471,20 +501,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)]"
@@ -503,26 +533,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()
@@ -530,7 +558,6 @@
if(max_harvests > 0 && harvest_count < max_harvests)
icon_state = "[initial(icon_state)][variantnum]"
-
else
icon_state = initial(icon_state)
diff --git a/code/game/objects/structures/flora/trees.dm b/code/game/objects/structures/flora/trees.dm
index a9f3658ff6..a677e46a0b 100644
--- a/code/game/objects/structures/flora/trees.dm
+++ b/code/game/objects/structures/flora/trees.dm
@@ -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
diff --git a/code/game/turfs/flooring/flooring.dm b/code/game/turfs/flooring/flooring.dm
index df5fe16aa7..da8f5d439d 100644
--- a/code/game/turfs/flooring/flooring.dm
+++ b/code/game/turfs/flooring/flooring.dm
@@ -143,7 +143,7 @@ var/list/flooring_types
/decl/flooring/grass/sif // Subtype for Sif's grass.
name = "growth"
desc = "A natural moss that has adapted to the sheer cold climate."
- flags = TURF_REMOVE_SHOVEL
+ flags = 0
icon = 'icons/turf/outdoors.dmi'
icon_base = "grass_sif"
build_type = /obj/item/stack/tile/grass/sif
@@ -152,7 +152,7 @@ var/list/flooring_types
/decl/flooring/grass/sif/forest
name = "thick growth"
desc = "A natural moss that has adapted to the sheer cold climate."
- flags = TURF_REMOVE_SHOVEL
+ flags = 0
icon = 'icons/turf/outdoors.dmi'
icon_base = "grass_sif_dark"
build_type = /obj/item/stack/tile/grass/sif/forest
diff --git a/code/game/turfs/simulated/outdoors/dirt.dm b/code/game/turfs/simulated/outdoors/dirt.dm
index 3642252da4..da2f017508 100644
--- a/code/game/turfs/simulated/outdoors/dirt.dm
+++ b/code/game/turfs/simulated/outdoors/dirt.dm
@@ -5,6 +5,7 @@
edge_blending_priority = 2
turf_layers = list(/turf/simulated/floor/outdoors/rocks)
initial_flooring = /decl/flooring/dirt
+ can_dig = TRUE
/turf/simulated/floor/outdoors/newdirt
name = "dirt"
@@ -13,6 +14,7 @@
icon_state = "dirt0"
edge_blending_priority = 2
initial_flooring = /decl/flooring/outdoors/newdirt
+ can_dig = TRUE
/decl/flooring/outdoors/newdirt
name = "dirt"
@@ -107,4 +109,5 @@
icon_state = "side-walk"
/turf/simulated/floor/outdoors/sidewalk/slab
- icon_state = "slab"
\ No newline at end of file
+ icon_state = "slab"
+
diff --git a/code/game/turfs/simulated/outdoors/grass.dm b/code/game/turfs/simulated/outdoors/grass.dm
index 327d2baf91..181ee57c4f 100644
--- a/code/game/turfs/simulated/outdoors/grass.dm
+++ b/code/game/turfs/simulated/outdoors/grass.dm
@@ -7,6 +7,7 @@ var/list/grass_types = list(
icon_state = "grass0"
edge_blending_priority = 4
initial_flooring = /decl/flooring/grass
+ can_dig = TRUE
turf_layers = list(
/turf/simulated/floor/outdoors/rocks,
/turf/simulated/floor/outdoors/dirt
@@ -42,7 +43,6 @@ var/list/grass_types = list(
var/tree_chance = 2
/*
animal_chance = 0.5
-
animal_types = list(
/mob/living/simple_mob/animal/sif/diyaab = 10,
/mob/living/simple_mob/animal/sif/glitterfly = 2,
@@ -94,4 +94,4 @@ var/list/grass_types = list(
/obj/structure/flora/sif/frostbelle = 1,
/obj/structure/flora/sif/eyes = 5,
/obj/structure/flora/sif/tendrils = 30
- )
+ )
\ No newline at end of file
diff --git a/code/game/turfs/simulated/outdoors/outdoors.dm b/code/game/turfs/simulated/outdoors/outdoors.dm
index cfed9385c6..f565b15e5f 100644
--- a/code/game/turfs/simulated/outdoors/outdoors.dm
+++ b/code/game/turfs/simulated/outdoors/outdoors.dm
@@ -24,6 +24,42 @@ var/list/turf_edge_cache = list()
// When a turf gets demoted or promoted, this list gets adjusted. The top-most layer is the layer on the bottom of the list, due to how pop() works.
var/list/turf_layers = list(/turf/simulated/floor/outdoors/rocks)
+ var/can_dig = FALSE
+ var/loot_count
+
+/turf/simulated/floor/outdoors/proc/get_loot_type()
+ if(loot_count && prob(60))
+ return pick( \
+ 12;/obj/item/weapon/reagent_containers/food/snacks/worm, \
+ 1;/obj/item/weapon/material/knife/machete/hatchet/stone \
+ )
+
+/turf/simulated/floor/outdoors/Initialize(mapload)
+ . = ..()
+ if(can_dig && prob(33))
+ loot_count = rand(1,3)
+
+/turf/simulated/floor/outdoors/attackby(obj/item/C, mob/user)
+
+ if(can_dig && istype(C, /obj/item/weapon/shovel))
+ to_chat(user, SPAN_NOTICE("\The [user] begins digging into \the [src] with \the [C]."))
+ var/delay = (3 SECONDS * C.toolspeed)
+ user.setClickCooldown(delay)
+ if(do_after(user, delay, src))
+ if(!(locate(/obj/machinery/portable_atmospherics/hydroponics/soil) in contents))
+ var/obj/machinery/portable_atmospherics/hydroponics/soil/soil = new(src)
+ user.visible_message(SPAN_NOTICE("\The [src] digs \a [soil] into \the [src]."))
+ else
+ var/loot_type = get_loot_type()
+ if(loot_type)
+ loot_count--
+ var/obj/item/loot = new loot_type(src)
+ to_chat(user, SPAN_NOTICE("You dug up \a [loot]!"))
+ else
+ to_chat(user, SPAN_NOTICE("You didn't find anything of note in \the [src]."))
+ return
+
+ . = ..()
/turf/simulated/floor/Initialize(mapload)
if(is_outdoors())
@@ -80,6 +116,7 @@ var/list/turf_edge_cache = list()
icon_state = "mud_dark"
edge_blending_priority = 3
initial_flooring = /decl/flooring/mud
+ can_dig = TRUE
/turf/simulated/floor/outdoors/rocks
name = "rocks"
diff --git a/code/game/turfs/simulated/outdoors/outdoors_attackby.dm b/code/game/turfs/simulated/outdoors/outdoors_attackby.dm
index a59676834f..1a969fee98 100644
--- a/code/game/turfs/simulated/outdoors/outdoors_attackby.dm
+++ b/code/game/turfs/simulated/outdoors/outdoors_attackby.dm
@@ -1,15 +1,7 @@
// this code here enables people to dig up worms from certain tiles.
/turf/simulated/floor/outdoors/grass/attackby(obj/item/weapon/S as obj, mob/user as mob)
- if(istype(S, /obj/item/weapon/shovel))
- to_chat(user, "You begin to dig in \the [src] with your [S].")
- if(do_after(user, 4 SECONDS * S.toolspeed))
- to_chat(user, "\The [src] has been dug up, a worm pops from the ground.")
- new /obj/item/weapon/reagent_containers/food/snacks/worm(src)
- else
- to_chat(user, "You decide to not finish digging in \the [src].")
- else if(istype(S, /obj/item/stack/tile/floor))
+ if(istype(S, /obj/item/stack/tile/floor))
ChangeTurf(/turf/simulated/floor, preserve_outdoors = TRUE)
return
- else
- ..()
\ No newline at end of file
+ . = ..()
\ No newline at end of file
diff --git a/code/modules/client/preference_setup/loadout/loadout_head.dm b/code/modules/client/preference_setup/loadout/loadout_head.dm
index 2513757c1c..67bfd7c7de 100644
--- a/code/modules/client/preference_setup/loadout/loadout_head.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_head.dm
@@ -203,6 +203,10 @@
display_name = "hat, tophat"
path = /obj/item/clothing/head/that
+/datum/gear/head/panama
+ display_name = "hat, panama"
+ path = /obj/item/clothing/head/panama
+
/datum/gear/head/wig/philosopher
display_name = "natural philosopher's wig"
path = /obj/item/clothing/head/philosopher_wig
diff --git a/code/modules/client/preference_setup/loadout/loadout_suit.dm b/code/modules/client/preference_setup/loadout/loadout_suit.dm
index 3f79abe352..84f83829da 100644
--- a/code/modules/client/preference_setup/loadout/loadout_suit.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_suit.dm
@@ -559,6 +559,18 @@
display_name = "department jacket, medical"
path = /obj/item/clothing/suit/storage/toggle/med_dep_jacket
+/datum/gear/suit/miscellaneous/light_jacket
+ display_name = "light jacket selection"
+ path = /obj/item/clothing/suit/storage/toggle/light_jacket
+
+/datum/gear/suit/miscellaneous/light_jacket/New()
+ ..()
+ var/list/jacket = list(
+ "grey light jacket" = /obj/item/clothing/suit/storage/toggle/light_jacket,
+ "dark blue light jacket" = /obj/item/clothing/suit/storage/toggle/light_jacket/blue
+ )
+ gear_tweaks += new/datum/gear_tweak/path(jacket)
+
/datum/gear/suit/miscellaneous/peacoat
display_name = "peacoat"
path = /obj/item/clothing/suit/storage/toggle/peacoat
diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm
index 8636b5b606..9f5ce96020 100644
--- a/code/modules/clothing/head/misc.dm
+++ b/code/modules/clothing/head/misc.dm
@@ -103,6 +103,11 @@
siemens_coefficient = 0.9
body_parts_covered = 0
+/obj/item/clothing/head/panama
+ name = "panama hat"
+ icon_state = "panama"
+ desc = "Columbian Pure."
+
/obj/item/clothing/head/redcoat
name = "redcoat's hat"
icon_state = "redcoat"
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index 239accf6d8..3ef5aef074 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -715,6 +715,19 @@
item_state_slots = list(slot_r_hand_str = "med_dep_jacket", slot_l_hand_str = "med_dep_jacket")
flags_inv = HIDEHOLSTER
+/obj/item/clothing/suit/storage/toggle/light_jacket
+ name = "grey light jacket"
+ desc = "A light, cozy jacket. Now in grey."
+ icon_state = "grey_dep_jacket"
+ item_state_slots = list(slot_r_hand_str = "grey_dep_jacket", slot_l_hand_str = "grey_dep_jacket")
+ flags_inv = HIDEHOLSTER
+
+/obj/item/clothing/suit/storage/toggle/light_jacket/blue
+ name = "dark blue light jacket"
+ desc = "A light, cozy jacket. Now in dark blue."
+ icon_state = "blue_dep_jacket"
+ item_state_slots = list(slot_r_hand_str = "blue_dep_jacket", slot_l_hand_str = "blue_dep_jacket")
+
/*
* Track Jackets
*/
diff --git a/code/modules/food/food/snacks.dm b/code/modules/food/food/snacks.dm
index 733fae75df..1c83b7d940 100644
--- a/code/modules/food/food/snacks.dm
+++ b/code/modules/food/food/snacks.dm
@@ -825,23 +825,18 @@
/obj/item/weapon/reagent_containers/food/snacks/carpmeat/Initialize()
. = ..()
- reagents.add_reagent("protein", 3)
- reagents.add_reagent(toxin_type, toxin_amount)
-
-/obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif
- desc = "A fillet of sivian fish meat."
- filling_color = "#2c2cff"
- color = "#2c2cff"
- toxin_type = "neurotoxic_protein"
- toxin_amount = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif/murkfish
- toxin_type = "murk_protein"
+ reagents.add_reagent("seafood", 3)
+ if(toxin_type && toxin_amount)
+ reagents.add_reagent(toxin_type, toxin_amount)
/obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish
desc = "A fillet of fish meat."
- toxin_type = "neurotoxic_protein"
- toxin_amount = 1
+ toxin_type = null
+
+/obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif
+ desc = "A fillet of sivian fish meat."
+ filling_color = "#2c2cff"
+ color = "#2c2cff"
/obj/item/weapon/reagent_containers/food/snacks/fishfingers
name = "Fish Fingers"
@@ -853,7 +848,7 @@
/obj/item/weapon/reagent_containers/food/snacks/fishfingers/Initialize()
. = ..()
- reagents.add_reagent("protein", 4)
+ reagents.add_reagent("seafood", 4)
/obj/item/weapon/reagent_containers/food/snacks/zestfish
name = "Zesty Fish"
@@ -865,11 +860,11 @@
/obj/item/weapon/reagent_containers/food/snacks/zestfish/Initialize()
. = ..()
- reagents.add_reagent("protein", 4)
+ reagents.add_reagent("seafood", 4)
-/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice
- name = "huge mushroom slice"
- desc = "A slice from a huge mushroom."
+/obj/item/weapon/reagent_containers/food/snacks/mushroomslice
+ name = "mushroom slice"
+ desc = "A slice of mushroom."
icon_state = "hugemushroomslice"
filling_color = "#E0D7C5"
center_of_mass = list("x"=17, "y"=16)
@@ -877,7 +872,7 @@
nutriment_desc = list("raw" = 2, "mushroom" = 2)
bitesize = 6
-/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice/Initialize()
+/obj/item/weapon/reagent_containers/food/snacks/mushroomslice/Initialize()
. = ..()
reagents.add_reagent("psilocybin", 3)
@@ -3572,19 +3567,6 @@
nutriment_amt = 3
nutriment_desc = list("bread" = 3)
-// potato + knife = raw sticks
-/obj/item/weapon/reagent_containers/food/snacks/grown/attackby(obj/item/weapon/W, mob/user)
- if(seed && seed.kitchen_tag && seed.kitchen_tag == "potato" && istype(W,/obj/item/weapon/material/knife))
- new /obj/item/weapon/reagent_containers/food/snacks/rawsticks(get_turf(src))
- to_chat(user, "You cut the potato.")
- qdel(src)
- else if(seed && seed.kitchen_tag && seed.kitchen_tag == "sunflower" && istype(W,/obj/item/weapon/material/knife))
- new /obj/item/weapon/reagent_containers/food/snacks/rawsunflower(get_turf(src))
- to_chat(user, "You remove the seeds from the flower, slightly damaging them.")
- qdel(src)
- else
- . = ..()
-
/obj/item/weapon/reagent_containers/food/snacks/rawsticks
name = "raw potato sticks"
desc = "Raw fries, not very tasty."
@@ -3972,7 +3954,8 @@
/obj/item/weapon/reagent_containers/food/snacks/wormsickly/Initialize()
. = ..()
- reagents.add_reagent("fishbait", 10)
+ reagents.add_reagent("fishbait", 9)
+ reagents.add_reagent("protein", 3)
/obj/item/weapon/reagent_containers/food/snacks/worm
name = "strange worm"
@@ -3985,7 +3968,8 @@
/obj/item/weapon/reagent_containers/food/snacks/worm/Initialize()
. = ..()
- reagents.add_reagent("fishbait", 20)
+ reagents.add_reagent("fishbait", 15)
+ reagents.add_reagent("protein", 5)
/obj/item/weapon/reagent_containers/food/snacks/wormdeluxe
name = "deluxe worm"
@@ -3998,7 +3982,8 @@
/obj/item/weapon/reagent_containers/food/snacks/wormdeluxe/Initialize()
. = ..()
- reagents.add_reagent("fishbait", 40)
+ reagents.add_reagent("fishbait", 30)
+ reagents.add_reagent("protein", 10)
/obj/item/weapon/reagent_containers/food/snacks/siffruit
name = "pulsing fruit"
diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm
index ff69fab758..10f79394e2 100644
--- a/code/modules/food/recipes_microwave.dm
+++ b/code/modules/food/recipes_microwave.dm
@@ -334,7 +334,7 @@ I said no!
result = /obj/item/weapon/reagent_containers/food/snacks/candiedapple
/datum/recipe/twobread
- reagents = list("wine" = 5)
+ reagents = list("redwine" = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/slice/bread,
/obj/item/weapon/reagent_containers/food/snacks/slice/bread,
@@ -785,7 +785,7 @@ I said no!
result = /obj/item/weapon/reagent_containers/food/snacks/chilicheesefries
/datum/recipe/risotto
- reagents = list("wine" = 5, "rice" = 10, "spacespice" = 1)
+ reagents = list("redwine" = 5, "rice" = 10, "spacespice" = 1)
fruit = list("mushroom" = 1)
reagent_mix = RECIPE_REAGENT_REPLACE //Get that rice and wine outta here
result = /obj/item/weapon/reagent_containers/food/snacks/risotto
diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm
index 9070dfc29b..23fdf46cfa 100644
--- a/code/modules/hydroponics/grown.dm
+++ b/code/modules/hydroponics/grown.dm
@@ -191,13 +191,17 @@
pocell.charge = pocell.maxcharge
qdel(src)
return
- else if(W.sharp)
+
+ if(W.sharp)
+
if(seed.kitchen_tag == "pumpkin") // Ugggh these checks are awful.
user.show_message("You carve a face into [src]!", 1)
new /obj/item/clothing/head/pumpkinhead (user.loc)
qdel(src)
return
- else if(seed.chems)
+
+ if(seed.chems)
+
if(W.sharp && W.edge && !isnull(seed.chems["woodpulp"]))
user.show_message("You make planks out of \the [src]!", 1)
playsound(src, 'sound/effects/woodcutting.ogg', 50, 1)
@@ -215,36 +219,49 @@
to_chat(user, "You add the newly-formed wood to the stack. It now contains [NG.amount] planks.")
qdel(src)
return
- else if(!isnull(seed.chems["potato"]))
+
+ if(seed.kitchen_tag == "sunflower")
+ new /obj/item/weapon/reagent_containers/food/snacks/rawsunflower(get_turf(src))
+ to_chat(user, SPAN_NOTICE("You remove the seeds from the flower, slightly damaging them."))
+ qdel(src)
+ return
+
+ if(seed.kitchen_tag == "potato" || !isnull(seed.chems["potato"]))
to_chat(user, "You slice \the [src] into sticks.")
new /obj/item/weapon/reagent_containers/food/snacks/rawsticks(get_turf(src))
qdel(src)
return
- else if(!isnull(seed.chems["carrotjuice"]))
+
+ if(!isnull(seed.chems["carrotjuice"]))
to_chat(user, "You slice \the [src] into sticks.")
new /obj/item/weapon/reagent_containers/food/snacks/carrotfries(get_turf(src))
qdel(src)
return
- else if(!isnull(seed.chems["pineapplejuice"]))
+
+ if(!isnull(seed.chems["pineapplejuice"]))
to_chat(user, "You slice \the [src] into rings.")
new /obj/item/weapon/reagent_containers/food/snacks/pineapple_ring(get_turf(src))
qdel(src)
return
- else if(!isnull(seed.chems["soymilk"]))
+
+ if(!isnull(seed.chems["soymilk"]))
to_chat(user, "You roughly chop up \the [src].")
new /obj/item/weapon/reagent_containers/food/snacks/soydope(get_turf(src))
qdel(src)
return
- else if(seed.get_trait(TRAIT_FLESH_COLOUR))
+
+ if(seed.get_trait(TRAIT_FLESH_COLOUR))
to_chat(user, "You slice up \the [src].")
var/slices = rand(3,5)
var/reagents_to_transfer = round(reagents.total_volume/slices)
for(var/i=1; i<=slices; i++)
var/obj/item/weapon/reagent_containers/food/snacks/fruit_slice/F = new(get_turf(src),seed)
- if(reagents_to_transfer) reagents.trans_to_obj(F,reagents_to_transfer)
+ if(reagents_to_transfer)
+ reagents.trans_to_obj(F,reagents_to_transfer)
qdel(src)
return
- ..()
+
+ . = ..()
/obj/item/weapon/reagent_containers/food/snacks/grown/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
. = ..()
diff --git a/code/modules/hydroponics/grown_predefined.dm b/code/modules/hydroponics/grown_predefined.dm
index d8187fb24e..643d27030a 100644
--- a/code/modules/hydroponics/grown_predefined.dm
+++ b/code/modules/hydroponics/grown_predefined.dm
@@ -3,6 +3,3 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus
plantname = "ambrosiadeus"
-
-/obj/item/weapon/reagent_containers/food/snacks/grown/sifpod
- plantname = "sifbulb"
diff --git a/code/modules/hydroponics/grown_sif.dm b/code/modules/hydroponics/grown_sif.dm
new file mode 100644
index 0000000000..3075fc148f
--- /dev/null
+++ b/code/modules/hydroponics/grown_sif.dm
@@ -0,0 +1,39 @@
+/obj/item/weapon/reagent_containers/food/snacks/grown/sif
+ var/seeds = 0
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/sif/Initialize(mapload, planttype) // Wild Sifplants have some seeds you can extract with a knife.
+ . = ..()
+ seeds = rand(1, 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/sif/examine(mob/user)
+ . = ..()
+ if(seeds)
+ to_chat(user, SPAN_NOTICE("You can see [seeds] seed\s in \the [src]. You might be able to extract them with a sharp object."))
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/sif/attackby(var/obj/item/weapon/W, var/mob/living/user)
+ if(seed && W.sharp && seeds > 0)
+ var/take_seeds = min(seeds, rand(1,2))
+ seeds -= take_seeds
+ to_chat(user, SPAN_NOTICE("You stick \the [W] into \the [src] and lever out [take_seeds] seed\s."))
+ for(var/i = 1 to take_seeds)
+ new /obj/item/seeds(get_turf(src), seed.name)
+ return
+ . = ..()
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/sif/sifpod
+ plantname = "sifbulb"
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/sif/wabback
+ plantname = "wabback"
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/sif/blackwabback
+ plantname = "blackwabback"
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/sif/wildwabback
+ plantname = "wildwabback"
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/sif/eyebulbs
+ plantname = "eyebulbs"
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/sif/cavebulbs
+ plantname = "cavebulbs"
diff --git a/code/modules/hydroponics/seed_packets.dm b/code/modules/hydroponics/seed_packets.dm
index af17253513..98973f22fb 100644
--- a/code/modules/hydroponics/seed_packets.dm
+++ b/code/modules/hydroponics/seed_packets.dm
@@ -13,7 +13,9 @@ GLOBAL_LIST_BOILERPLATE(all_seed_packs, /obj/item/seeds)
var/datum/seed/seed
var/modified = 0
-/obj/item/seeds/Initialize()
+/obj/item/seeds/Initialize(var/ml, var/_seed_type)
+ if(_seed_type in plant_controller.seeds)
+ seed_type = _seed_type
update_seed()
. = ..()
diff --git a/code/modules/hydroponics/seed_storage.dm b/code/modules/hydroponics/seed_storage.dm
index 66273144b7..64398ede2e 100644
--- a/code/modules/hydroponics/seed_storage.dm
+++ b/code/modules/hydroponics/seed_storage.dm
@@ -43,41 +43,46 @@
..()
wires = new(src)
if(!contraband_seeds.len)
- contraband_seeds = pick(list(
- list(
- /obj/item/seeds/ambrosiavulgarisseed = 3,
- /obj/item/seeds/greengrapeseed = 3,
- /obj/item/seeds/reishimycelium = 2,
- /obj/item/seeds/bloodtomatoseed = 1
- ),
- list(
- /obj/item/seeds/ambrosiavulgarisseed = 3,
- /obj/item/seeds/plastiseed = 3,
- /obj/item/seeds/kudzuseed = 2,
- /obj/item/seeds/rose/blood = 1
- ),
- list(
- /obj/item/seeds/ambrosiavulgarisseed = 3,
- /obj/item/seeds/amanitamycelium = 3,
- /obj/item/seeds/libertymycelium = 2,
- /obj/item/seeds/glowshroom = 1
- ),
- list(
- /obj/item/seeds/ambrosiavulgarisseed = 3,
- /obj/item/seeds/glowberryseed = 3,
- /obj/item/seeds/icepepperseed = 2,
- /obj/item/seeds/bluetomatoseed = 1
- ),
- list(
- /obj/item/seeds/durian = 2,
- /obj/item/seeds/ambrosiadeusseed = 1,
- /obj/item/seeds/killertomatoseed = 1
- ),
- list(
- /obj/item/seeds/ambrosiavulgarisseed = 3,
- /obj/item/seeds/random = 6
- )
- ))
+ contraband_seeds = pick( /// Some form of ambrosia in all lists.
+ prob(30);list( /// General produce
+ /obj/item/seeds/ambrosiavulgarisseed = 3,
+ /obj/item/seeds/greengrapeseed = 3,
+ /obj/item/seeds/icepepperseed = 2,
+ /obj/item/seeds/kudzuseed = 1
+ ),
+ prob(30);list( ///Mushroom batch
+ /obj/item/seeds/ambrosiavulgarisseed = 1,
+ /obj/item/seeds/glowberryseed = 2,
+ /obj/item/seeds/libertymycelium = 1,
+ /obj/item/seeds/reishimycelium = 2,
+ /obj/item/seeds/sporemycelium = 1
+ ),
+ prob(15);list( /// Survivalist
+ /obj/item/seeds/ambrosiadeusseed = 2,
+ /obj/item/seeds/redtowermycelium = 2,
+ /obj/item/seeds/vale = 2,
+ /obj/item/seeds/siflettuce = 2
+ ),
+ prob(20);list( /// Cold plants
+ /obj/item/seeds/ambrosiavulgarisseed = 2,
+ /obj/item/seeds/thaadra = 2,
+ /obj/item/seeds/icepepperseed = 2,
+ /obj/item/seeds/siflettuce = 1
+ ),
+ prob(10);list( ///Poison party
+ /obj/item/seeds/ambrosiavulgarisseed = 3,
+ /obj/item/seeds/surik = 1,
+ /obj/item/seeds/telriis = 1,
+ /obj/item/seeds/nettleseed = 2,
+ /obj/item/seeds/poisonberryseed = 1
+ ),
+ prob(5);list( /// Extra poison party!
+ /obj/item/seeds/ambrosiainfernusseed = 1,
+ /obj/item/seeds/amauri = 1,
+ /obj/item/seeds/surik = 1,
+ /obj/item/seeds/deathberryseed = 1 /// Very ow.
+ )
+ )
return
/obj/machinery/seed_storage/process()
diff --git a/code/modules/hydroponics/seedtypes/apples.dm b/code/modules/hydroponics/seedtypes/apples.dm
index 7044a0c6dc..4bd8a0bade 100644
--- a/code/modules/hydroponics/seedtypes/apples.dm
+++ b/code/modules/hydroponics/seedtypes/apples.dm
@@ -43,7 +43,7 @@
/datum/seed/apple/sif
name = "sifbulb"
- seed_name = "sivian tree"
+ seed_name = "sivian pod"
display_name = "sivian pod"
kitchen_tag = "apple"
chems = list("nutriment" = list(1,5),"sifsap" = list(10,20))
diff --git a/code/modules/hydroponics/trays/tray_soil.dm b/code/modules/hydroponics/trays/tray_soil.dm
index 76a3417645..4f5140a689 100644
--- a/code/modules/hydroponics/trays/tray_soil.dm
+++ b/code/modules/hydroponics/trays/tray_soil.dm
@@ -22,6 +22,16 @@
/obj/machinery/portable_atmospherics/hydroponics/soil/CanPass()
return 1
+/obj/machinery/portable_atmospherics/hydroponics/soil/attackby(obj/item/O, mob/user)
+ if(istype(O, /obj/item/weapon/shovel) && user.a_intent == I_HURT)
+ user.visible_message(SPAN_NOTICE("\The [user] begins filling in \the [src]."))
+ if(do_after(user, 3 SECONDS) && !QDELETED(src))
+ user.visible_message(SPAN_NOTICE("\The [user] fills in \the [src]."))
+ qdel(src)
+ return
+ . = ..()
+
+
// Holder for vine plants.
// Icons for plants are generated as overlays, so setting it to invisible wouldn't work.
// Hence using a blank icon.
diff --git a/code/modules/materials/materials/organic/wood.dm b/code/modules/materials/materials/organic/wood.dm
index 2f44607e8b..129f8ecc18 100644
--- a/code/modules/materials/materials/organic/wood.dm
+++ b/code/modules/materials/materials/organic/wood.dm
@@ -42,7 +42,9 @@
new /datum/stack_recipe("coilgun stock", /obj/item/weapon/coilgun_assembly, 5, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("crude fishing rod", /obj/item/weapon/material/fishing_rod/built, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("noticeboard", /obj/structure/noticeboard, 1, recycle_material = "[name]"),
- new /datum/stack_recipe("tanning rack", /obj/structure/tanning_rack, 3, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]")
+ new /datum/stack_recipe("tanning rack", /obj/structure/tanning_rack, 3, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]"),
+ new /datum/stack_recipe("roofing tile", /obj/item/stack/tile/roofing, 3, 4, 20, recycle_material = "[name]"),
+ new /datum/stack_recipe("shovel", /obj/item/weapon/shovel/wood, 2, time = 10, on_floor = TRUE, supplied_material = "[name]")
)
/datum/material/wood/sif
diff --git a/code/modules/materials/sheets/organic/tanning/hide.dm b/code/modules/materials/sheets/organic/tanning/hide.dm
index a8b229c9eb..e59d1e2d82 100644
--- a/code/modules/materials/sheets/organic/tanning/hide.dm
+++ b/code/modules/materials/sheets/organic/tanning/hide.dm
@@ -20,7 +20,7 @@
//visible message on mobs is defined as visible_message(var/message, var/self_message, var/blind_message)
user.visible_message("\The [user] starts cutting hair off \the [src]", "You start cutting the hair off \the [src]", "You hear the sound of a knife rubbing against flesh")
var/scraped = 0
- while(amount > 0 && do_after(user, 2.5 SECONDS)) // 2.5s per hide
+ while(amount > 0 && do_after(user, 2.5 SECONDS, user))
//Try locating an exisitng stack on the tile and add to there if possible
var/obj/item/stack/hairlesshide/H = null
for(var/obj/item/stack/hairlesshide/HS in user.loc) // Could be scraping something inside a locker, hence the .loc, not get_turf
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index 31dd9add81..eb15d3f6c5 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -128,6 +128,26 @@
edge = 1
var/digspeed = 40
+/obj/item/weapon/shovel/wood
+ icon_state = "whiteshovel"
+ item_state = "whiteshovel"
+ var/datum/material/material
+
+/obj/item/weapon/shovel/wood/Initialize(var/ml, var/_mat)
+ . = ..()
+ material = get_material_by_name(_mat)
+ if(!istype(material))
+ material = null
+ else
+ name = "[material.display_name] shovel"
+ matter = list("[material.name]" = 50)
+ update_icon()
+
+/obj/item/weapon/shovel/wood/update_icon()
+ . = ..()
+ color = material ? material.icon_colour : initial(color)
+ alpha = min(max(255 * material.opacity, 80), 255)
+
/obj/item/weapon/shovel/spade
name = "spade"
desc = "A small tool for digging and moving dirt."
diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index daa6e2710c..bef918a849 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -6,24 +6,25 @@ var/list/mining_overlay_cache = list()
icon = 'icons/turf/walls.dmi'
icon_state = "rock-dark"
density = 1
-
+
/turf/simulated/mineral //wall piece
name = "rock"
icon = 'icons/turf/walls.dmi'
icon_state = "rock"
- var/rock_side_icon_state = "rock_side"
- var/sand_icon_state = "asteroid"
- var/rock_icon_state = "rock"
- var/random_icon = 0
oxygen = 0
nitrogen = 0
opacity = 1
density = 1
blocks_air = 1
temperature = T0C
-
can_dirty = FALSE
+ var/floor_name = "sand"
+ var/rock_side_icon_state = "rock_side"
+ var/sand_icon_state = "asteroid"
+ var/rock_icon_state = "rock"
+ var/random_icon = 0
+
var/ore/mineral
var/sand_dug
var/mined_ore = 0
@@ -65,6 +66,10 @@ var/list/mining_overlay_cache = list()
has_resources = 1
+/turf/simulated/mineral/ChangeTurf(turf/N, tell_universe, force_lighting_update, preserve_outdoors)
+ clear_ore_effects()
+ . = ..()
+
// Alternative rock wall sprites.
/turf/simulated/mineral/light
icon_state = "rock-light"
@@ -109,6 +114,14 @@ var/list/mining_overlay_cache = list()
blocks_air = 0
can_build_into_floor = TRUE
+/turf/simulated/mineral/floor/mud
+ icon_state = "mud"
+ sand_icon_state = "mud"
+
+/turf/simulated/mineral/floor/dirt
+ icon_state = "dirt"
+ sand_icon_state = "dirt"
+
//Alternative sand floor sprite.
/turf/simulated/mineral/floor/light
icon_state = "sand-light"
@@ -140,6 +153,7 @@ var/list/mining_overlay_cache = list()
opacity = 0
blocks_air = 0
can_build_into_floor = TRUE
+ clear_ore_effects()
update_general()
/turf/simulated/mineral/proc/make_wall()
@@ -223,7 +237,7 @@ var/list/mining_overlay_cache = list()
//We are a sand floor
else
- name = "sand"
+ name = floor_name
icon = 'icons/turf/flooring/asteroid.dmi'
icon_state = sand_icon_state
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm
index fe23b86bf7..2ce8d46af7 100644
--- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm
@@ -129,7 +129,7 @@
catalogue_data = list(/datum/category_item/catalogue/fauna/javelin)
- meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif
/datum/category_item/catalogue/fauna/icebass
name = "Sivian Fauna - Glitter Bass"
@@ -156,7 +156,7 @@
catalogue_data = list(/datum/category_item/catalogue/fauna/icebass)
- meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif
var/max_red = 150
var/min_red = 50
@@ -245,7 +245,7 @@
var/image/head_image
- meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif
/mob/living/simple_mob/animal/passive/fish/rockfish/Initialize()
. = ..()
@@ -292,7 +292,7 @@
has_eye_glow = TRUE
- meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif
/datum/category_item/catalogue/fauna/murkin
name = "Sivian Fauna - Murkfish"
@@ -319,4 +319,4 @@
catalogue_data = list(/datum/category_item/catalogue/fauna/murkin)
- meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/sif/murkfish
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sif
diff --git a/code/modules/mob/new_player/sprite_accessories_ear.dm b/code/modules/mob/new_player/sprite_accessories_ear.dm
index 24e82043e4..a07b77500d 100644
--- a/code/modules/mob/new_player/sprite_accessories_ear.dm
+++ b/code/modules/mob/new_player/sprite_accessories_ear.dm
@@ -344,13 +344,43 @@
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
+/datum/sprite_accessory/ears/elfs2
+ name = "pointed ears"
+ desc = ""
+ icon_state = "ears_pointy"
+ do_colouration = 1
+ species_allowed = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
+
/datum/sprite_accessory/ears/elfs
- name = "elven ears"
+ name = "pointed ears (tall)"
desc = ""
icon_state = "elfs"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
+ species_allowed = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
+/datum/sprite_accessory/ears/elfs3
+ name = "pointed ears (down)"
+ desc = ""
+ icon_state = "ears_pointy_down"
+ do_colouration = 1
+ color_blend_mode = ICON_MULTIPLY
+ species_allowed = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
+
+/datum/sprite_accessory/ears/elfs4
+ name = "pointed ears (long)"
+ desc = ""
+ icon_state = "ears_pointy_long"
+ do_colouration = 1
+ color_blend_mode = ICON_MULTIPLY
+ species_allowed = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
+
+/datum/sprite_accessory/ears/elfs5
+ name = "pointed ears (long, down)"
+ desc = ""
+ icon_state = "ears_pointy_long_down"
+ do_colouration = 1
+ color_blend_mode = ICON_MULTIPLY
species_allowed = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
/datum/sprite_accessory/ears/sleek
diff --git a/code/modules/random_map/random_map.dm b/code/modules/random_map/random_map.dm
index d36e7a80a1..a563f16c11 100644
--- a/code/modules/random_map/random_map.dm
+++ b/code/modules/random_map/random_map.dm
@@ -24,6 +24,9 @@ var/global/list/map_count = list()
var/floor_type = /turf/simulated/floor
var/target_turf_type
+ var/skip_dense = FALSE
+ var/keep_outside = FALSE
+
// Storage for the final iteration of the map.
var/list/map = list() // Actual map.
@@ -61,11 +64,16 @@ var/global/list/map_count = list()
rand_seed(seed)
priority_process = 1
+ var/failed = FALSE
for(var/i = 0;i[capitalize(name)] generation completed in [round(0.1*(world.timeofday-start_time),0.1)] seconds.", R_DEBUG)
- return
- if(!do_not_announce) admin_notice("[capitalize(name)] failed to generate ([round(0.1*(world.timeofday-start_time),0.1)] seconds): could not produce sane map.", R_DEBUG)
+ if(!generate())
+ failed = TRUE
+
+ if(!do_not_announce)
+ if(!failed)
+ admin_notice("[capitalize(name)] generation completed in [round(0.1*(world.timeofday-start_time),0.1)] seconds.", R_DEBUG)
+ else
+ admin_notice("[capitalize(name)] failed to generate ([round(0.1*(world.timeofday-start_time),0.1)] seconds): could not produce sane map.", R_DEBUG)
/datum/random_map/proc/get_map_cell(var/x,var/y)
if(!map)
@@ -162,11 +170,11 @@ var/global/list/map_count = list()
if(!current_cell)
return 0
var/turf/T = locate((origin_x-1)+x,(origin_y-1)+y,origin_z)
- if(!T || (target_turf_type && !istype(T,target_turf_type)))
+ if(!T || (skip_dense && T.density) || (target_turf_type && !istype(T,target_turf_type)))
return 0
var/newpath = get_appropriate_path(map[current_cell])
if(newpath)
- T.ChangeTurf(newpath)
+ T.ChangeTurf(newpath, preserve_outdoors = keep_outside)
get_additional_spawns(map[current_cell],T,get_spawn_dir(x, y))
return T
diff --git a/code/modules/reagents/reactions/instant/drinks.dm b/code/modules/reagents/reactions/instant/drinks.dm
index 5630500d63..2102c2881e 100644
--- a/code/modules/reagents/reactions/instant/drinks.dm
+++ b/code/modules/reagents/reactions/instant/drinks.dm
@@ -399,7 +399,7 @@
name = "Singulo"
id = "singulo"
result = "singulo"
- required_reagents = list("vodka" = 5, "radium" = 1, "wine" = 5)
+ required_reagents = list("vodka" = 5, "radium" = 1, "redwine" = 5)
result_amount = 10
/decl/chemical_reaction/instant/drinks/alliescocktail
@@ -505,14 +505,14 @@
name = "Acid Spit"
id = "acidspit"
result = "acidspit"
- required_reagents = list("sacid" = 1, "wine" = 5)
+ required_reagents = list("sacid" = 1, "redwine" = 5)
result_amount = 6
/decl/chemical_reaction/instant/drinks/amasec
name = "Amasec"
id = "amasec"
result = "amasec"
- required_reagents = list("iron" = 1, "wine" = 5, "vodka" = 5)
+ required_reagents = list("iron" = 1, "redwine" = 5, "vodka" = 5)
result_amount = 10
/decl/chemical_reaction/instant/drinks/changelingsting
@@ -661,7 +661,7 @@
name = "Melon Spritzer"
id = "melonspritzer"
result = "melonspritzer"
- required_reagents = list("watermelonjuice" = 2, "wine" = 2, "applejuice" = 1, "limejuice" = 1)
+ required_reagents = list("watermelonjuice" = 2, "redwine" = 2, "applejuice" = 1, "limejuice" = 1)
result_amount = 6
/decl/chemical_reaction/instant/drinks/fauxfizz
@@ -915,7 +915,7 @@
name = "Wine brandy"
id = "winebrandy"
result = "winebrandy"
- required_reagents = list("wine" = 10)
+ required_reagents = list("redwine" = 10)
catalysts = list("enzyme" = 10) //10u enzyme so it requires more than is usually added. Stops overlap with wine recipe
result_amount = 5
@@ -937,7 +937,7 @@
name = "Vesper"
id = "vesper"
result = "vesper"
- required_reagents = list("gin" = 3, "vodka" = 1, "wine" = 1)
+ required_reagents = list("gin" = 3, "vodka" = 1, "redwine" = 1)
result_amount = 4
/decl/chemical_reaction/instant/drinks/rotgut
diff --git a/code/modules/reagents/reactions/instant/instant.dm b/code/modules/reagents/reactions/instant/instant.dm
index 4a6c25898d..46c9c458be 100644
--- a/code/modules/reagents/reactions/instant/instant.dm
+++ b/code/modules/reagents/reactions/instant/instant.dm
@@ -1105,14 +1105,12 @@
name = "Neutralize Carpotoxin"
id = "carpotoxin_neutral"
result = "protein"
- required_reagents = list("radium" = 1, "carpotoxin" = 1, "sifsap" = 1)
- catalysts = list("sifsap" = 10)
- result_amount = 2
+ required_reagents = list("enzyme" = 1, "carpotoxin" = 1, "sifsap" = 1)
+ result_amount = 1
/decl/chemical_reaction/instant/neutralize_spidertoxin
name = "Neutralize Spidertoxin"
id = "spidertoxin_neutral"
result = "protein"
- required_reagents = list("radium" = 1, "spidertoxin" = 1, "sifsap" = 1)
- catalysts = list("sifsap" = 10)
- result_amount = 2
\ No newline at end of file
+ required_reagents = list("enzyme" = 1, "spidertoxin" = 1, "sifsap" = 1)
+ result_amount = 1
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/borghypo.dm b/code/modules/reagents/reagent_containers/borghypo.dm
index 813a79431d..96bb210600 100644
--- a/code/modules/reagents/reagent_containers/borghypo.dm
+++ b/code/modules/reagents/reagent_containers/borghypo.dm
@@ -155,6 +155,7 @@
"milk",
"mint",
"orangejuice",
+ "redwine",
"rum",
"sake",
"sodawater",
@@ -172,8 +173,7 @@
"vodka",
"water",
"watermelonjuice",
- "whiskey",
- "wine")
+ "whiskey")
/obj/item/weapon/reagent_containers/borghypo/service/attack(var/mob/M, var/mob/user)
return
diff --git a/code/modules/reagents/reagents/food_drinks.dm b/code/modules/reagents/reagents/food_drinks.dm
index 3c85222c1b..4f549c5c1b 100644
--- a/code/modules/reagents/reagents/food_drinks.dm
+++ b/code/modules/reagents/reagents/food_drinks.dm
@@ -297,13 +297,6 @@
color = "#FFFFAA"
allergen_type = ALLERGEN_EGGS //Eggs contain egg
-/datum/reagent/nutriment/protein/murk
- name = "murkfin protein"
- id = "murk_protein"
- taste_description = "mud"
- color = "#664330"
- allergen_type = ALLERGEN_FISH //Murkfin is fish
-
/datum/reagent/nutriment/honey
name = "Honey"
id = "honey"
diff --git a/code/modules/reagents/reagents/other.dm b/code/modules/reagents/reagents/other.dm
index a479b7ada5..2bb16dbbda 100644
--- a/code/modules/reagents/reagents/other.dm
+++ b/code/modules/reagents/reagents/other.dm
@@ -627,10 +627,11 @@
M.adjustToxLoss(2 * removed)
M.adjustCloneLoss(2 * removed)
-/datum/reagent/fishbait
+/datum/reagent/nutriment/fishbait
name = "Fish Bait"
id = "fishbait"
description = "A natural slurry that particularily appeals to fish."
- taste_description = "earthy"
+ taste_description = "slimy dirt"
reagent_state = LIQUID
- color = "#62764E"
\ No newline at end of file
+ color = "#62764E"
+ nutriment_factor = 15
diff --git a/code/modules/reagents/reagents/toxins.dm b/code/modules/reagents/reagents/toxins.dm
index dde7bf21a9..b59be5c7d1 100644
--- a/code/modules/reagents/reagents/toxins.dm
+++ b/code/modules/reagents/reagents/toxins.dm
@@ -67,7 +67,7 @@
/datum/reagent/toxin/neurotoxic_protein
name = "toxic protein"
id = "neurotoxic_protein"
- description = "A weak neurotoxic chemical commonly found in Sivian fish meat."
+ description = "A weak neurotoxic chemical."
taste_description = "fish"
reagent_state = LIQUID
color = "#005555"
diff --git a/code/modules/scripting/Implementations/Telecomms.dm b/code/modules/scripting/Implementations/Telecomms.dm
index 40efd55ba1..9f83cdf933 100644
--- a/code/modules/scripting/Implementations/Telecomms.dm
+++ b/code/modules/scripting/Implementations/Telecomms.dm
@@ -275,7 +275,7 @@
newsign.data["vmask"] = 0
newsign.data["level"] = list()
- var/pass = S.relay_information(newsign, "/obj/machinery/telecomms/hub")
+ var/pass = S.relay_information(newsign, /obj/machinery/telecomms/hub)
if(!pass)
- S.relay_information(newsign, "/obj/machinery/telecomms/broadcaster") // send this simple message to broadcasters
+ S.relay_information(newsign, /obj/machinery/telecomms/broadcaster) // send this simple message to broadcasters
diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm
index e5bbf365a3..964e2a87f1 100644
--- a/code/modules/surgery/robotics.dm
+++ b/code/modules/surgery/robotics.dm
@@ -473,11 +473,9 @@
if(clean_name)
var/okay = alert(target,"New name will be '[clean_name]', ok?", "Confirmation","Cancel","Ok")
if(okay == "Ok")
- new_name = clean_name
-
- new_name = sanitizeName(new_name, allow_numbers = TRUE)
- target.name = new_name
- target.real_name = target.name
+ target.name = new_name
+ target.real_name = target.name
+ return
/datum/surgery_step/robotics/install_mmi/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("[user]'s hand slips.", \
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index 1290983bfe..b8478d3ac1 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/human_races/sprite_accessories/ears.dmi b/icons/mob/human_races/sprite_accessories/ears.dmi
index 243b901e8e..b3e21ecead 100644
Binary files a/icons/mob/human_races/sprite_accessories/ears.dmi and b/icons/mob/human_races/sprite_accessories/ears.dmi differ
diff --git a/icons/mob/items/lefthand.dmi b/icons/mob/items/lefthand.dmi
index 9ed071ffe4..98c04e2882 100644
Binary files a/icons/mob/items/lefthand.dmi and b/icons/mob/items/lefthand.dmi differ
diff --git a/icons/mob/items/lefthand_suits.dmi b/icons/mob/items/lefthand_suits.dmi
index 556b5e137f..e8ac30d008 100644
Binary files a/icons/mob/items/lefthand_suits.dmi and b/icons/mob/items/lefthand_suits.dmi differ
diff --git a/icons/mob/items/righthand.dmi b/icons/mob/items/righthand.dmi
index 3210b664b7..58dbd9d864 100644
Binary files a/icons/mob/items/righthand.dmi and b/icons/mob/items/righthand.dmi differ
diff --git a/icons/mob/items/righthand_suits.dmi b/icons/mob/items/righthand_suits.dmi
index 6cc80297b6..f34d67af35 100644
Binary files a/icons/mob/items/righthand_suits.dmi and b/icons/mob/items/righthand_suits.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index 58b92c82dd..3bdf0e7d2e 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index 4951bf32ad..cb4bab1901 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index 788bfa06ba..9878d18a39 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/flora/mushrooms.dmi b/icons/obj/flora/mushrooms.dmi
new file mode 100644
index 0000000000..755acb8d64
Binary files /dev/null and b/icons/obj/flora/mushrooms.dmi differ
diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi
index d4de5b0ed4..929a011895 100644
Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ
diff --git a/icons/obj/magazine.dmi b/icons/obj/magazine.dmi
new file mode 100644
index 0000000000..62b385510c
Binary files /dev/null and b/icons/obj/magazine.dmi differ
diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi
index 47a4d21d24..3967721435 100644
Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ
diff --git a/icons/turf/flooring/asteroid.dmi b/icons/turf/flooring/asteroid.dmi
index 9df9089658..c7f2b12948 100644
Binary files a/icons/turf/flooring/asteroid.dmi and b/icons/turf/flooring/asteroid.dmi differ
diff --git a/maps/southern_cross/southern_cross-1.dmm b/maps/southern_cross/southern_cross-1.dmm
index c6767f4d7d..df7bdbcdcc 100644
--- a/maps/southern_cross/southern_cross-1.dmm
+++ b/maps/southern_cross/southern_cross-1.dmm
@@ -22195,7 +22195,6 @@
dir = 4
},
/obj/structure/extinguisher_cabinet{
- pixel_x = 0;
pixel_y = 30
},
/turf/simulated/floor/tiled,
@@ -22817,8 +22816,7 @@
/obj/machinery/door/firedoor/border_only,
/obj/machinery/door/airlock/security{
name = "Security Checkpoint";
- req_access = list(1);
- req_one_access = list(1)
+ req_access = list(1)
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
@@ -30036,7 +30034,6 @@
"beW" = (
/obj/machinery/computer/security/telescreen{
desc = "Big Brother is watching.";
- layer = 3.4;
name = "Brig Monitor";
network = list("Prison");
pixel_y = 28
@@ -39664,8 +39661,7 @@
"bvS" = (
/obj/machinery/door/firedoor/glass,
/obj/machinery/door/airlock/glass_medical{
- name = "Medical Hardsuits";
- req_one_access = list(5)
+ name = "Medical Hardsuits"
},
/turf/simulated/floor/tiled/dark,
/area/ai_monitored/storage/eva)
@@ -47185,6 +47181,7 @@
icon_state = "frame";
pixel_y = -32
},
+/obj/item/tabloid,
/turf/simulated/floor/wood,
/area/rnd/research)
"bIY" = (
@@ -47583,8 +47580,7 @@
"bJN" = (
/obj/machinery/door/firedoor/glass,
/obj/machinery/door/airlock/glass_engineering{
- name = "Engineering Hallway";
- req_one_access = list(10)
+ name = "Engineering Hallway"
},
/turf/simulated/floor/tiled/steel_grid,
/area/engineering/hallway/atmos_hallway)
@@ -47598,8 +47594,7 @@
"bJP" = (
/obj/machinery/door/firedoor/glass,
/obj/machinery/door/airlock/glass_engineering{
- name = "Engineering Hallway";
- req_one_access = list(10)
+ name = "Engineering Hallway"
},
/obj/structure/cable/green{
d1 = 1;
@@ -49546,8 +49541,7 @@
"bNi" = (
/obj/machinery/door/firedoor/glass,
/obj/machinery/door/airlock/glass_engineering{
- name = "Engineering Hallway";
- req_one_access = list(10)
+ name = "Engineering Hallway"
},
/turf/simulated/floor/tiled/steel_grid,
/area/engineering/hallway/engineer_hallway)
@@ -50504,8 +50498,7 @@
"bOW" = (
/obj/machinery/door/firedoor/glass,
/obj/machinery/door/airlock/glass_engineering{
- name = "Engineering Hallway";
- req_one_access = list(10)
+ name = "Engineering Hallway"
},
/obj/structure/disposalpipe/segment{
dir = 4
@@ -52126,8 +52119,7 @@
/area/engineering/drone_fabrication)
"bRT" = (
/obj/machinery/door/airlock/glass_engineering{
- name = "Engineering Hallway";
- req_one_access = list(10)
+ name = "Engineering Hallway"
},
/obj/machinery/door/firedoor/glass,
/obj/structure/disposalpipe/segment,
@@ -52137,8 +52129,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/door/airlock/glass_engineering{
- name = "Engineering Hallway";
- req_one_access = list(10)
+ name = "Engineering Hallway"
},
/obj/machinery/door/firedoor/glass,
/turf/simulated/floor/tiled/steel_grid,
@@ -54424,6 +54415,7 @@
"bWj" = (
/obj/structure/table/woodentable,
/obj/item/weapon/reagent_containers/food/snacks/chips,
+/obj/item/tabloid,
/turf/simulated/floor/carpet,
/area/engineering/break_room)
"bWk" = (
@@ -89784,6 +89776,7 @@
layer = 3.1;
name = "Cafe Shutters"
},
+/obj/item/tabloid,
/turf/simulated/floor/tiled/yellow,
/area/library)
"dkx" = (
diff --git a/polaris.dme b/polaris.dme
index 747c26f838..548e69afbc 100644
--- a/polaris.dme
+++ b/polaris.dme
@@ -979,6 +979,7 @@
#include "code\game\objects\items\glassjar.dm"
#include "code\game\objects\items\gunbox.dm"
#include "code\game\objects\items\latexballoon.dm"
+#include "code\game\objects\items\magazine.dm"
#include "code\game\objects\items\paintkit.dm"
#include "code\game\objects\items\poi_items.dm"
#include "code\game\objects\items\robobag.dm"
@@ -1949,6 +1950,7 @@
#include "code\modules\hydroponics\grown.dm"
#include "code\modules\hydroponics\grown_inedible.dm"
#include "code\modules\hydroponics\grown_predefined.dm"
+#include "code\modules\hydroponics\grown_sif.dm"
#include "code\modules\hydroponics\seed.dm"
#include "code\modules\hydroponics\seed_controller.dm"
#include "code\modules\hydroponics\seed_gene_mut.dm"