diff --git a/code/defines/obj/hydro.dm b/code/defines/obj/hydro.dm
index 7cb2439cc68..b2854f21d36 100644
--- a/code/defines/obj/hydro.dm
+++ b/code/defines/obj/hydro.dm
@@ -389,6 +389,72 @@
plant_type = 0
growthstages = 6
+/obj/item/seeds/koiseed
+ name = "pack of koibean seeds"
+ desc = "These seeds grow into koibean plants."
+ icon_state = "seed-koibean"
+ species = "soybean"
+ plantname = "Koibean Plants"
+ productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/koibeans"
+ lifespan = 25
+ endurance = 15
+ maturation = 4
+ production = 4
+ yield = 3
+ potency = 10
+ plant_type = 0
+ growthstages = 4
+
+/obj/item/seeds/moonflowerseed
+ name = "pack of moonflower seeds"
+ desc = "These seeds grow into moonflowers."
+ icon_state = "seed-moonflower"
+ species = "moonflower"
+ plantname = "Moonflowers"
+ productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/moonflower"
+ lifespan = 25
+ endurance = 20
+ maturation = 6
+ production = 2
+ yield = 2
+ potency = 15
+ oneharvest = 1
+ growthstages = 3
+ plant_type = 0
+
+/obj/item/seeds/novaflowerseed
+ name = "pack of novaflower seeds"
+ desc = "These seeds grow into novaflowers."
+ icon_state = "seed-novaflower"
+ species = "novaflower"
+ plantname = "Novaflowers"
+ productname = "/obj/item/weapon/grown/novaflower"
+ lifespan = 25
+ endurance = 20
+ maturation = 6
+ production = 2
+ yield = 2
+ potency = 20
+ oneharvest = 1
+ growthstages = 3
+ plant_type = 0
+
+/obj/item/seeds/chillighost
+ name = "pack of ghost chilli seeds"
+ desc = "These seeds grow into a chili said to be the hottest in the galaxy."
+ icon_state = "seed-chilighost"
+ species = "chilighost"
+ plantname = "chilighost"
+ productname = "/obj/item/weapon/reagent_containers/food/snacks/grown/ghost_chilli"
+ lifespan = 20
+ endurance = 10
+ maturation = 10
+ production = 10
+ yield = 3
+ potency = 20
+ plant_type = 0
+ growthstages = 6
+
/obj/item/seeds/wheatseed
name = "pack of wheat seeds"
desc = "These may, or may not, grow into weed."
@@ -1161,6 +1227,29 @@
throw_range = 3
plant_type = 1
seed = "/obj/item/seeds/sunflower"
+
+/obj/item/weapon/grown/novaflower
+ name = "novaflower"
+ desc = "These beautiful flowers have a crisp smokey scent, like a summer bonfire."
+ icon = 'icons/obj/harvest.dmi'
+ icon_state = "novaflower"
+ damtype = "fire"
+ force = 0
+ flags = TABLEPASS
+ throwforce = 1
+ w_class = 1.0
+ throw_speed = 1
+ throw_range = 3
+ plant_type = 0
+ seed = "/obj/item/seeds/novaflower"
+ attack_verb = list("seared", "heated", "whacked", "steamed")
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1)
+ reagents.add_reagent("capsaicin", round(potency, 1))
+ force = round((5+potency/5), 1)
+
/*
/obj/item/weapon/grown/gibtomato
desc = "A plump tomato."
diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm
index 7b72fc1353f..c314c1c0f62 100644
--- a/code/game/gamemodes/changeling/changeling.dm
+++ b/code/game/gamemodes/changeling/changeling.dm
@@ -8,7 +8,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
name = "changeling"
config_tag = "changeling"
restricted_jobs = list("AI", "Cyborg")
- protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Blueshield")
+ protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Blueshield", "Nanotrasen Representative")
required_players = 2
required_players_secret = 10
required_enemies = 1
diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm
index 59d4734b200..c8a7852af1a 100644
--- a/code/game/gamemodes/cult/cult.dm
+++ b/code/game/gamemodes/cult/cult.dm
@@ -20,7 +20,7 @@
/datum/game_mode/cult
name = "cult"
config_tag = "cult"
- restricted_jobs = list("Chaplain","AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Blueshield")
+ restricted_jobs = list("Chaplain","AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Blueshield", "Nanotrasen Representative")
protected_jobs = list()
required_players = 5
required_players_secret = 15
diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm
index c852c6e7aaf..c841e47e43c 100644
--- a/code/game/gamemodes/revolution/revolution.dm
+++ b/code/game/gamemodes/revolution/revolution.dm
@@ -14,7 +14,7 @@
/datum/game_mode/revolution
name = "revolution"
config_tag = "revolution"
- restricted_jobs = list("Security Officer", "Warden", "Detective", "AI", "Cyborg","Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer", "Blueshield")
+ restricted_jobs = list("Security Officer", "Warden", "Detective", "AI", "Cyborg","Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer", "Blueshield", "Nanotrasen Representative")
required_players = 4
required_players_secret = 15
required_enemies = 3
diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm
index cb3ca41dc8a..d21e1897de2 100644
--- a/code/game/gamemodes/traitor/traitor.dm
+++ b/code/game/gamemodes/traitor/traitor.dm
@@ -8,7 +8,7 @@
name = "traitor"
config_tag = "traitor"
restricted_jobs = list("Cyborg")//They are part of the AI if he is traitor so are they, they use to get double chances
- protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Blueshield")//AI", Currently out of the list as malf does not work for shit
+ protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Blueshield", "Nanotrasen Representative")//AI", Currently out of the list as malf does not work for shit
required_players = 0
required_enemies = 1
recommended_enemies = 4
diff --git a/code/game/machinery/hydroponics.dm b/code/game/machinery/hydroponics.dm
index a0f8c371e41..a635507a160 100644
--- a/code/game/machinery/hydroponics.dm
+++ b/code/game/machinery/hydroponics.dm
@@ -323,6 +323,14 @@ obj/machinery/hydroponics/proc/mutatespecie() // Mutagent produced a new plant!
del(myseed)
myseed = new /obj/item/seeds/angelmycelium
+ else if ( istype(myseed, /obj/item/seeds/sunflowerseed ))
+ del(myseed)
+ switch(rand(1,100))
+ if(1 to 50)
+ myseed = new /obj/item/seeds/moonflowerseed
+ if(51 to 100)
+ myseed = new /obj/item/seeds/novaflowerseed
+
else if ( istype(myseed, /obj/item/seeds/lemonseed ))
del(myseed)
myseed = new /obj/item/seeds/cashseed
@@ -337,11 +345,23 @@ obj/machinery/hydroponics/proc/mutatespecie() // Mutagent produced a new plant!
else if ( istype(myseed, /obj/item/seeds/chiliseed ))
del(myseed)
- myseed = new /obj/item/seeds/icepepperseed
+ switch(rand(1,100))
+ if(1 to 50)
+ myseed = new /obj/item/seeds/icepepperseed
+ if(51 to 100)
+ myseed = new /obj/item/seeds/chillighost
+
+ else if ( istype(myseed, /obj/item/seeds/soyaseed ))
+ del(myseed)
+ myseed = new /obj/item/seeds/koiseed
else if ( istype(myseed, /obj/item/seeds/appleseed ))
del(myseed)
- myseed = new /obj/item/seeds/goldappleseed
+ switch(rand(1,100))
+ if(1 to 50)
+ myseed = new /obj/item/seeds/goldappleseed
+ if(51 to 100)
+ myseed = new /obj/item/seeds/poisonedappleseed
else if ( istype(myseed, /obj/item/seeds/berryseed ))
del(myseed)
diff --git a/code/game/objects/items/weapons/hydroponics.dm b/code/game/objects/items/weapons/hydroponics.dm
index 054e2b217a6..ccda10b4d6a 100644
--- a/code/game/objects/items/weapons/hydroponics.dm
+++ b/code/game/objects/items/weapons/hydroponics.dm
@@ -130,6 +130,31 @@
M << " [user] smacks you with a sunflower!FLOWER POWER"
user << " Your sunflower's FLOWER POWER strikes [M]"
+/*
+ * Sun/Novaflower
+ */
+/obj/item/weapon/grown/sunflower/attack(mob/M as mob, mob/user as mob)
+ M << " [user] smacks you with a sunflower!FLOWER POWER"
+ user << " Your sunflower's FLOWER POWER strikes [M]"
+
+/obj/item/weapon/grown/novaflower/attack(mob/living/carbon/M as mob, mob/user as mob)
+ if(!..()) return
+ if(istype(M, /mob/living))
+ M << "\red You are heated by the warmth of the of the [name]!"
+ M.bodytemperature += potency/2 * TEMPERATURE_DAMAGE_COEFFICIENT
+
+/obj/item/weapon/grown/novaflower/afterattack(atom/A as mob|obj, mob/user as mob,proximity)
+ if(!proximity) return
+ if(endurance > 0)
+ endurance -= rand(1,(endurance/3)+1)
+ else
+ usr << "All the petals have fallen off the [name] from violent whacking."
+ del(src)
+
+/obj/item/weapon/grown/novaflower/pickup(mob/living/carbon/human/user as mob)
+ if(!user.gloves)
+ user << "\red The [name] burns your bare hand!"
+ user.adjustFireLoss(rand(1,5))
/*
* Nettle
diff --git a/code/game/objects/items/weapons/ninja_manuscript.dm b/code/game/objects/items/weapons/ninja_manuscript.dm
new file mode 100644
index 00000000000..8c8674a42c7
--- /dev/null
+++ b/code/game/objects/items/weapons/ninja_manuscript.dm
@@ -0,0 +1,30 @@
+/obj/item/weapon/ninja_manuscript
+ name = "Manuscript"
+ desc = "A mysterious manuscript..."
+ icon = 'icons/obj/library.dmi'
+ icon_state = "book1"
+ throw_speed = 1
+ throw_range = 5
+ w_class = 3
+ flags = TABLEPASS
+ attack_verb = list("bashed", "whacked", "educated")
+
+ var/charges = 1
+
+/obj/item/weapon/ninja_manuscript/attack_self(var/mob/user as mob)
+
+ if(charges <= 0)
+ user << "\red The manuscript's power appears spent..."
+ return
+
+ else
+ user << "\blue You intently read the manuscript and come to the realization that true balance is achieved through self-will."
+ user << "\blue You relax and concentrate deeply; something in your mind alights ablaze and you realize the only way to true balance is the way of the Ninja."
+
+ charges--
+
+
+ user.mind.assigned_role = "MODE"
+ user.mind.special_role = "Ninja"
+
+ return
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm
index 39b4ba39800..5a529b40df3 100644
--- a/code/game/objects/items/weapons/storage/bags.dm
+++ b/code/game/objects/items/weapons/storage/bags.dm
@@ -94,7 +94,7 @@
max_combined_w_class = 200 //Doesn't matter what this is, so long as it's more or equal to storage_slots * plants.w_class
max_w_class = 3
w_class = 1
- can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/grown","/obj/item/seeds","/obj/item/weapon/grown")
+ can_hold = list("/obj/item/weapon/reagent_containers/food/snacks/grown","/obj/item/seeds","/obj/item/weapon/grown", "/obj/item/stack/tile/grass")
/obj/item/weapon/storage/bag/plants/portaseeder
diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm
index c13aafb5927..a6389dd9a9e 100644
--- a/code/game/objects/structures/crates_lockers/largecrate.dm
+++ b/code/game/objects/structures/crates_lockers/largecrate.dm
@@ -62,3 +62,18 @@
for(var/i = 0, i < num, i++)
new /mob/living/simple_animal/chick(loc)
..()
+
+/obj/structure/largecrate/ninja
+ name = "Mysterious Crate"
+ icon_state = "lisacrate"
+
+/obj/structure/largecrate/ninja/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(istype(W, /obj/item/weapon/crowbar))
+ new /obj/item/clothing/gloves/space_ninja(loc)
+ new /obj/item/clothing/mask/gas/voice/space_ninja(loc)
+ new /obj/item/clothing/shoes/space_ninja(loc)
+ new /obj/item/clothing/head/helmet/space/space_ninja(loc)
+ new /obj/item/clothing/suit/space/space_ninja(loc)
+ new /obj/item/weapon/ninja_manuscript(loc)
+ ..()
+
diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm
index 6a9bd1ca04d..5af896c881a 100644
--- a/code/modules/reagents/Chemistry-Machinery.dm
+++ b/code/modules/reagents/Chemistry-Machinery.dm
@@ -54,17 +54,17 @@
dispensable_reagents = sortList(dispensable_reagents)
if(broken_on_spawn)
- var/amount = pick(1,2,2,3,4)
+ var/amount = pick(3,3,4)
var/list/options = list()
- options[/obj/item/weapon/stock_parts/capacitor/adv] = "Add an advanced capacitor to fix it."
+ options[/obj/item/weapon/stock_parts/capacitor/super] = "Add a super capacitor to fix it."
options[/obj/item/weapon/stock_parts/console_screen] = "Replace the console screen to fix it."
options[/obj/item/weapon/stock_parts/manipulator/pico] = "Upgrade to a pico manipulator to fix it."
- options[/obj/item/weapon/stock_parts/matter_bin/adv] = "Give it an advanced matter bin to fix it."
- options[/obj/item/stack/sheet/mineral/diamond] = "Line up a cut diamond with the nozzle to fix it."
- options[/obj/item/stack/sheet/mineral/uranium] = "Position a uranium sheet inside to fix it."
- options[/obj/item/stack/sheet/mineral/plasma] = "Enter a block of plasma to fix it."
- options[/obj/item/stack/sheet/mineral/silver] = "Cover the internals with a silver lining to fix it."
- options[/obj/item/stack/sheet/mineral/gold] = "Wire a golden filament to fix it."
+ options[/obj/item/weapon/stock_parts/matter_bin/super] = "Give it a super matter bin to fix it."
+ options[/obj/item/weapon/cell/super] = "Replace the reagent synthesizer with a super capacity cell to fix it."
+ options[/obj/item/device/mass_spectrometer/adv] = "Replace the reagent scanner with an advanced mass spectrometer to fix it"
+ options[/obj/item/weapon/stock_parts/micro_laser/ultra] = "Repair the reagent synthesizer with an ultra-high-power micro-laser to fix it"
+ options[/obj/item/device/reagent_scanner/adv] = "Replace the reagent scanner with an advanced reagent scanner to fix it"
+ options[/obj/item/stack/nanopaste] = "Apply some nanopaste to the broken nozzles to fix it."
options[/obj/item/stack/sheet/plasteel] = "Surround the outside with a plasteel cover to fix it."
options[/obj/item/stack/sheet/rglass] = "Insert a pane of reinforced glass to fix it."
@@ -882,6 +882,7 @@
/obj/item/stack/sheet/mineral/gold = list("gold" = 20),
/obj/item/weapon/grown/nettle = list("sacid" = 0),
/obj/item/weapon/grown/deathnettle = list("pacid" = 0),
+ /obj/item/weapon/grown/novaflower = list("capsaicin" = 0),
//Blender Stuff
/obj/item/weapon/reagent_containers/food/snacks/grown/soybeans = list("soymilk" = 0),
diff --git a/code/modules/reagents/reagent_containers/food/snacks/grown.dm b/code/modules/reagents/reagent_containers/food/snacks/grown.dm
index cada51cf361..8c4a51129e4 100644
--- a/code/modules/reagents/reagent_containers/food/snacks/grown.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks/grown.dm
@@ -541,6 +541,44 @@
reagents.add_reagent("nutriment", 1+round((potency / 20), 1))
bitesize = 1+round(reagents.total_volume / 2, 1)
+/obj/item/weapon/reagent_containers/food/snacks/grown/koibeans
+ seed = "/obj/item/seeds/koiseed"
+ name = "koibean"
+ desc = "Something about these seems fishy."
+ icon_state = "koibeans"
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 30), 1))
+ reagents.add_reagent("carpotoxin", 1+round((potency / 20), 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/moonflower
+ seed = "/obj/item/seeds/moonflowerseed"
+ name = "moonflower"
+ desc = "Store in a location at least 50 yards away from werewolves."
+ icon_state = "moonflower"
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 50), 1))
+ reagents.add_reagent("moonshine", 1+round((potency / 10), 1))
+ bitesize = 1+round(reagents.total_volume / 2, 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/grown/ghost_chilli
+ seed = "/obj/item/seeds/chillighost"
+ name = "ghost chili"
+ desc = "It seems to be vibrating gently."
+ icon_state = "ghostchilipepper"
+ var/mob/held_mob
+ New()
+ ..()
+ spawn(5) //So potency can be set in the proc that creates these crops
+ reagents.add_reagent("nutriment", 1+round((potency / 25), 1))
+ reagents.add_reagent("capsaicin", 8+round(potency / 2, 1))
+ reagents.add_reagent("condensedcapsaicin", 4+round(potency / 4, 1))
+ bitesize = 1+round(reagents.total_volume / 4, 1)
+
/obj/item/weapon/reagent_containers/food/snacks/grown/tomato
seed = "/obj/item/seeds/tomatoseed"
name = "tomato"
diff --git a/code/modules/research/xenoarchaeology/artifact/artifact.dm b/code/modules/research/xenoarchaeology/artifact/artifact.dm
index 6300a6d71a4..669ae3d17b0 100644
--- a/code/modules/research/xenoarchaeology/artifact/artifact.dm
+++ b/code/modules/research/xenoarchaeology/artifact/artifact.dm
@@ -13,9 +13,10 @@
artifact_id = "[pick("kappa","sigma","antaeres","beta","omicron","iota","epsilon","omega","gamma","delta","tau","alpha")]-[rand(100,999)]"
artifact_find_type = pick(\
+ 5;/obj/structure/largecrate/ninja,\
5;/obj/machinery/power/supermatter,\
5;/obj/structure/constructshell,\
- 5;/obj/machinery/syndicate_beacon,\
+ 5;/obj/machinery/wish_granter,\
25;/obj/machinery/power/supermatter/shard,\
50;/obj/structure/cult/pylon,\
100;/obj/machinery/auto_cloner,\
diff --git a/icons/obj/harvest.dmi b/icons/obj/harvest.dmi
index 3b110ac901c..d3a7b1f724f 100644
Binary files a/icons/obj/harvest.dmi and b/icons/obj/harvest.dmi differ
diff --git a/icons/obj/hydroponics.dmi b/icons/obj/hydroponics.dmi
index b55226386de..08ed0d2eaca 100644
Binary files a/icons/obj/hydroponics.dmi and b/icons/obj/hydroponics.dmi differ
diff --git a/icons/obj/seeds.dmi b/icons/obj/seeds.dmi
index 2567f7828ed..46f1ce55fe6 100644
Binary files a/icons/obj/seeds.dmi and b/icons/obj/seeds.dmi differ
diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi
index 7b8edd1343e..2f3eb4b4269 100644
Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ