diff --git a/code/modules/mob/living/simple_animal/vore/solargrub.dm b/code/modules/mob/living/simple_animal/vore/solargrub.dm
index 3e5ab8ae14..2e3c36862d 100644
--- a/code/modules/mob/living/simple_animal/vore/solargrub.dm
+++ b/code/modules/mob/living/simple_animal/vore/solargrub.dm
@@ -17,11 +17,11 @@ List of things solar grubs should be able to do:
icon_state = "solargrub"
icon_living = "solargrub"
icon_dead = "solargrub-dead"
-
+
var/charge = null //CHOMPEDIT The amount of power we sucked off, in K as in THOUSANDS.
var/can_evolve = 1 //CHOMPEDIT VAR to decide whether this subspecies is allowed to become a queen
- var/adult_form = null //CHOMPEDIT VAR that decides what mob the queen form is. ex /mob/living/simple_animal/retaliate/solarmoth
-
+ var/adult_form = "/mob/living/simple_animal/retaliate/solarmoth" //CHOMPEDIT VAR that decides what mob the queen form is. ex /mob/living/simple_animal/retaliate/solarmoth
+
faction = "grubs"
maxHealth = 50 //grubs can take a lot of harm
health = 50
@@ -61,7 +61,8 @@ List of things solar grubs should be able to do:
//VARS that were previously in LIFE but why tho, im porting all comments the original coder did too.
var/apc_drain_rate = 750 //Going to see if grubs are better as a minimal bother. previous value : 4000
var/powerdraw = 100000 // previous value 150000
-
+
+
/mob/living/simple_animal/retaliate/solargrub/PunchTarget()
if(target_mob&& prob(emp_chance))
target_mob.emp_act(4) //The weakest strength of EMP
@@ -71,7 +72,6 @@ List of things solar grubs should be able to do:
/mob/living/simple_animal/retaliate/solargrub/Life()
. = ..()
if(!. || ai_inactive) return
-
if(stance == STANCE_IDLE)
//first, check for potential cables nearby to powersink
var/turf/S = loc
@@ -86,7 +86,7 @@ List of things solar grubs should be able to do:
anchored = 1
PN = attached.powernet
PN.draw_power(powerdraw)
- charge = charge + powerdraw/1000 //This adds raw powerdraw to charge(Charge is in Ks as in 1 = 1000)
+ charge = charge + (powerdraw/1000) //This adds raw powerdraw to charge(Charge is in Ks as in 1 = 1000)
for(var/obj/machinery/power/terminal/T in PN.nodes)
if(istype(T.master, /obj/machinery/power/apc))
var/obj/machinery/power/apc/A = T.master
@@ -98,6 +98,18 @@ List of things solar grubs should be able to do:
anchored = 0
PN = null
+
+ if(prob(2) && charge >= 16000 && can_evolve == 1 && moth_amount.len <= 2) //it's reading from the moth_amount global list to determine if it can evolve.
+ anchored = 0
+ PN = attached.powernet
+ death_star()
+
+
+/mob/living/simple_animal/retaliate/solargrub/proc/death_star()
+ visible_message("\The [src]'s shell rips open and evolves!")
+ new adult_form(get_turf(src))
+ qdel(src)
+
/mob/living/simple_animal/retaliate/solargrub //active noms
vore_bump_chance = 50
vore_bump_emote = "applies minimal effort to try and slurp up"
@@ -124,4 +136,4 @@ List of things solar grubs should be able to do:
. = ..()
if(. == 0 && !is_dead())
set_light(2.5, 1, COLOR_YELLOW)
- return 1
+ return 1
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/vore/solarmoth.dm b/code/modules/mob/living/simple_animal/vore/solarmoth.dm
new file mode 100644
index 0000000000..b72924479a
--- /dev/null
+++ b/code/modules/mob/living/simple_animal/vore/solarmoth.dm
@@ -0,0 +1,136 @@
+/mob/living/simple_animal/retaliate/solarmoth
+ name = "solarmoth"
+ desc = "A majestic sparkling solarmoth. Also a slight engineering hazard."
+ icon = 'icons/mob/solarmoth.dmi' //all of these are placeholders
+ icon_state = "solarmoth"
+ icon_living = "solarmoth"
+ icon_dead = "solarmoth-dead"
+
+ faction = "grubs"
+ maxHealth = 500
+ health = 500
+ move_to_delay = 5
+
+ melee_damage_lower = 1
+ melee_damage_upper = 5
+
+ speak_chance = 1
+ emote_see = list("flutters")
+ speed = 3
+
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/grubmeat
+
+ response_help = "pokes"
+ response_disarm = "pushes"
+ response_harm = "roughly pushes"
+
+ // solar moths are not affected by atmos
+ min_oxy = 0
+ max_oxy = 0
+ min_tox = 0
+ max_tox = 0
+ min_co2 = 0
+ max_co2 = 0
+ min_n2 = 0
+ max_n2 = 0
+ minbodytemp = 0
+ heat_damage_per_tick = 0 //Even if the atmos stuff doesn't work, at least it won't take any damage.
+
+ armor = list(
+ "melee" = 50,
+ "bullet" = 90,
+ "laser" = 100,
+ "energy" = 100,
+ "bomb" = 100,
+ "bio" = 100,
+ "rad" = 100)
+
+ var/set_temperature = T0C + 10000 //Sets the target point of 10k degrees celsius
+ var/heating_power = 100000 //This controls the strength at which it heats the environment.
+ var/emp_heavy = 2
+ var/emp_med = 4
+ var/emp_light = 7
+ var/emp_long = 10
+ var/poison_per_bite = 5 //grubs cause a shock when they bite someone
+ var/poison_type = "shockchem"
+ var/poison_chance = 50
+ var/emp_chance = 20 // Beware synths
+ isEdible = 0 //You can look, but you can't lick.
+
+
+
+/mob/living/simple_animal/retaliate/solarmoth/PunchTarget()
+ if(target_mob&& prob(emp_chance))
+ target_mob.emp_act(4) //The weakest strength of EMP
+ visible_message("The moth releases a powerful shock!")
+ ..()
+
+/mob/living/simple_animal/retaliate/solarmoth/PunchTarget()
+ . = ..()
+ if(isliving(.))
+ var/mob/living/L = .
+ if(L.reagents)
+ if(prob(poison_chance))
+ L << "You feel a shock rushing through your veins."
+ L.reagents.add_reagent(poison_type, poison_per_bite)
+
+
+/mob/living/simple_animal/retaliate/solarmoth/Life()
+ . = ..()
+ if(icon_state != icon_dead)
+ var/datum/gas_mixture/env = loc.return_air() //Gets all the information on the local air.
+ var/transfer_moles = 0.25 * env.total_moles //The bigger the room, the harder it is to heat the room.
+ var/datum/gas_mixture/removed = env.remove(transfer_moles)
+ var/heat_transfer = removed.get_thermal_energy_change(set_temperature)
+ if(heat_transfer > 0 && env.temperature < T0C + 200) //This should start heating the room at a moderate pace up to 200 degrees celsius.
+ heat_transfer = min(heat_transfer , heating_power) //limit by the power rating of the heater
+ removed.add_thermal_energy(heat_transfer)
+
+ else if(heat_transfer > 0 && env.temperature < set_temperature) //Set temperature is 10,000 degrees celsius. So this thing will start cooking crazy hot between the temperatures of 200C and 10,000C.
+ heating_power = 9999999999999 //FLAME ON! This will make the moth heat up the room at an incredible rate.
+ heat_transfer = min(heat_transfer , heating_power) //limit by the power rating of the heater. Except it's hot, so yeah.
+ removed.add_thermal_energy(heat_transfer)
+
+ else
+ return
+
+ env.merge(removed)
+
+var/global/list/moth_amount = list() //global moth list for the solargrub to read. Maybe want to transfer this to global variables file??
+/mob/living/simple_animal/retaliate/solarmoth/New()
+ moth_amount += src //when this thing is created, it adds itself to the global list
+ . = ..()
+
+/mob/living/simple_animal/retaliate/solarmoth/proc/explode()
+ src.anchored = 0
+ set_light(0)
+ if(empulse(src, emp_heavy, emp_med, emp_light, emp_long))
+ qdel(src)
+ return
+
+/mob/living/simple_animal/retaliate/solarmoth/death()
+ explode()
+ ..()
+
+/mob/living/simple_animal/retaliate/solarmoth/gib() //This baby will explode no matter what you do to it.
+ explode()
+ ..()
+
+
+
+/mob/living/simple_animal/retaliate/solarmoth/handle_light()
+ . = ..()
+ if(. == 0 && !is_dead())
+ set_light(9.5, 1, COLOR_BLUE) //9.5 makes the brightness range super huge.
+ return 1
+
+
+/mob/living/simple_animal/retaliate/solarmoth //active noms
+ vore_bump_chance = 50
+ vore_bump_emote = "applies minimal effort to try and slurp up"
+ vore_active = 1
+ vore_capacity = 1
+ vore_pounce_chance = 0 //moths only eat incapacitated targets. It's too lazy burning you to a crisp to try to pounce you
+ vore_default_mode = DM_DIGEST
+
+