diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm
index e892f6785e..eae1f78b93 100644
--- a/code/modules/hydroponics/trays/tray.dm
+++ b/code/modules/hydroponics/trays/tray.dm
@@ -225,18 +225,26 @@
if(seed && seed.get_trait(TRAIT_IMMUTABLE) > 0)
return
- //Override for somatoray projectiles.
- if(istype(Proj ,/obj/item/projectile/energy/floramut)&& prob(20))
- if(istype(Proj, /obj/item/projectile/energy/floramut/gene))
- var/obj/item/projectile/energy/floramut/gene/G = Proj
- if(seed)
- seed = seed.diverge_mutate_gene(G.gene, get_turf(loc)) //get_turf just in case it's not in a turf.
- else
- mutate(1)
+ // Override for somatoray projectiles.
+ // Change the mutchance var to buff or nerf somatorays, it will be multiplied by the tier of the laser.
+ var/mutchance = 15
+ if(istype(Proj ,/obj/item/projectile/energy/floramut))
+ var/obj/item/projectile/energy/floramut/GM = Proj
+ mutchance *= GM.lasermod
+ if(prob(mutchance))
+ if(istype(Proj, /obj/item/projectile/energy/floramut/gene))
+ var/obj/item/projectile/energy/floramut/gene/G = Proj
+ if(seed)
+ seed = seed.diverge_mutate_gene(G.gene, get_turf(loc)) //get_turf just in case it's not in a turf.
+ else
+ mutate(1)
+ return
+ else if(istype(Proj ,/obj/item/projectile/energy/florayield))
+ var/obj/item/projectile/energy/floramut/GY = Proj
+ mutchance *= GY.lasermod
+ if(prob(mutchance))
+ yield_mod = min(10,yield_mod+rand(1,2))
return
- else if(istype(Proj ,/obj/item/projectile/energy/florayield) && prob(20))
- yield_mod = min(10,yield_mod+rand(1,2))
- return
..()
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index 7066e10343..4b3dd98c82 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -48,8 +48,13 @@
modifystate = "floramut"
cell_type = /obj/item/weapon/cell/device/weapon/recharge
battery_lock = 1
+
var/decl/plantgene/gene = null
+<<<<<<< HEAD
recoil_mode = 0 //CHOMP Addition
+=======
+ var/obj/item/weapon/stock_parts/micro_laser/emitter
+>>>>>>> dead3acae1... Merge pull request #11841 from FartMaster69420/somatoray
firemodes = list(
list(mode_name="induce mutations", projectile_type=/obj/item/projectile/energy/floramut, modifystate="floramut"),
@@ -57,8 +62,42 @@
list(mode_name="induce specific mutations", projectile_type=/obj/item/projectile/energy/floramut/gene, modifystate="floramut"),
)
+/obj/item/weapon/gun/energy/floragun/Initialize()
+ . = ..()
+ emitter = new(src)
+
+/obj/item/weapon/gun/energy/floragun/examine(var/mob/user)
+ . = ..()
+ if(Adjacent(user))
+ . += "It has [emitter ? emitter : "no micro laser"] installed."
+
+/obj/item/weapon/gun/energy/floragun/attackby(obj/item/W, mob/user)
+ if(istype(W, /obj/item/weapon/stock_parts/micro_laser))
+ if(!emitter)
+ user.drop_item()
+ W.loc = src
+ emitter = W
+ to_chat(user, "You install a [emitter.name] in [src].")
+ else
+ to_chat(user, "[src] already has a laser.")
+
+ else if(W.is_screwdriver())
+ if(emitter)
+ to_chat(user, "You remove the [emitter.name] from the [src].")
+ emitter.loc = get_turf(src.loc)
+ playsound(src, W.usesound, 50, 1)
+ emitter = null
+ return
+ else
+ to_chat(user, "There is no micro laser in this [src].")
+ return
+
/obj/item/weapon/gun/energy/floragun/afterattack(obj/target, mob/user, adjacent_flag)
//allow shooting into adjacent hydrotrays regardless of intent
+ if(!emitter)
+ to_chat(user, "The [src] has no laser! ")
+ playsound(src, 'sound/weapons/empty.ogg', 50, 1)
+ return
if(adjacent_flag && istype(target,/obj/machinery/portable_atmospherics/hydroponics))
user.visible_message("\The [user] fires \the [src] into \the [target]!")
Fire(target,user)
@@ -84,8 +123,16 @@
/obj/item/weapon/gun/energy/floragun/consume_next_projectile()
. = ..()
var/obj/item/projectile/energy/floramut/gene/G = .
+ var/obj/item/projectile/energy/florayield/GY = .
+ var/obj/item/projectile/energy/floramut/GM = .
+ // Inserting the upgrade level of the gun to the projectile as there isn't a better way to do this.
if(istype(G))
G.gene = gene
+ G.lasermod = emitter.rating
+ else if(istype(GY))
+ GY.lasermod = emitter.rating
+ else if(istype(GM))
+ GM.lasermod = emitter.rating
/obj/item/weapon/gun/energy/meteorgun
name = "meteor gun"
diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm
index ee75074cc7..1d85c67f5d 100644
--- a/code/modules/projectiles/projectile/special.dm
+++ b/code/modules/projectiles/projectile/special.dm
@@ -138,7 +138,7 @@
light_power = 0.5
light_color = "#33CC00"
impact_effect_type = /obj/effect/temp_visual/impact_effect/monochrome_laser
-
+ var/lasermod = 0
combustion = FALSE
/obj/item/projectile/energy/floramut/on_hit(var/atom/target, var/blocked = 0)
@@ -195,6 +195,7 @@
light_power = 0.5
light_color = "#FFFFFF"
impact_effect_type = /obj/effect/temp_visual/impact_effect/monochrome_laser
+ var/lasermod = 0
/obj/item/projectile/energy/florayield/on_hit(var/atom/target, var/blocked = 0)
var/mob/living/M = target