diff --git a/modular_chomp/code/datums/crafting/items.dm b/modular_chomp/code/datums/crafting/items.dm
new file mode 100644
index 0000000000..5cfb323f93
--- /dev/null
+++ b/modular_chomp/code/datums/crafting/items.dm
@@ -0,0 +1,299 @@
+#define MAT_WISP "strange wisp"
+#define MAT_FROSCALE "frost scale"
+#define MAT_CRYSCALE "crystal scale"
+#define MAT_DREAMSCALE "furred scale"
+#define MAT_SHELLCHITIN "shell chitin"
+
+/datum/material/wisp
+ name = MAT_WISP
+ icon_colour = "#F13C00"
+ stack_type = /obj/item/stack/material/wisp
+ stack_origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 4)
+ icon_base = "solid"
+ icon_reinf = "reinf_mesh"
+ integrity = 30
+ weight = 10
+ ignition_point = T0C+600
+ melting_point = T0C+800
+ protectiveness = 5
+ conductive = 0
+ opacity = 0.5
+ reflectivity = 30
+ supply_conversion_value = 6
+
+/obj/item/stack/material/wisp
+ name = "Strange Wisp"
+ desc = "The by-product of mob grinding."
+ icon = 'modular_chomp/icons/obj/crafting.dmi'
+ icon_state = "wisp"
+ default_type = MAT_WISP
+ no_variants = FALSE
+ pass_color = TRUE
+ strict_color_stacking = TRUE
+
+
+/datum/material/frostscale
+ name = MAT_FROSCALE
+ icon_colour = "#0000CC"
+ stack_type = /obj/item/stack/material/frostscale
+ stack_origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 4)
+ icon_base = "solid"
+ icon_reinf = "reinf_mesh"
+ integrity = 250
+ weight = 50
+ ignition_point = T0C+20
+ melting_point = T0C+40
+ protectiveness = 30
+ conductive = 0
+ opacity = 0.5
+ reflectivity = 0
+ supply_conversion_value = 8
+
+/obj/item/stack/material/frostscale
+ name = "Frost Scale"
+ desc = "The by-product of mob grinding."
+ icon = 'modular_chomp/icons/obj/crafting.dmi'
+ icon_state = "scale"
+ color = "#0000CC"
+ default_type = MAT_FROSCALE
+ no_variants = FALSE
+ pass_color = TRUE
+ strict_color_stacking = TRUE
+
+/datum/material/crystalscale
+ name = MAT_CRYSCALE
+ icon_colour = "#006633"
+ stack_type = /obj/item/stack/material/crystalscale
+ stack_origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 4)
+ icon_base = "solid"
+ icon_reinf = "reinf_mesh"
+ integrity = 250
+ weight = 10
+ radiation_resistance = 25 //less then lead because it's lighter then lead.
+ protectiveness = 30
+ conductive = 0
+ opacity = 0.25
+ reflectivity = 60
+ supply_conversion_value = 4
+
+/obj/item/stack/material/crystalscale
+ name = "Crystak Scale"
+ desc = "The by-product of mob grinding."
+ icon = 'modular_chomp/icons/obj/crafting.dmi'
+ icon_state = "scale"
+ color = "#006633"
+ default_type = MAT_CRYSCALE
+ no_variants = FALSE
+ pass_color = TRUE
+ strict_color_stacking = TRUE
+
+/datum/material/dreamscale
+ name = MAT_DREAMSCALE
+ icon_colour = "#006633"
+ stack_type = /obj/item/stack/material/dreamscale
+ stack_origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 4)
+ icon_base = "solid"
+ icon_reinf = "reinf_mesh"
+ integrity = 200
+ weight = 30
+ ignition_point = T0C+200
+ melting_point = T0C+400
+ protectiveness = 60
+ reflectivity = 30
+ supply_conversion_value = 1
+
+/obj/item/stack/material/dreamscale
+ name = "Dream Scale"
+ desc = "The by-product of mob grinding."
+ icon = 'modular_chomp/icons/obj/crafting.dmi'
+ icon_state = "scale"
+ default_type = MAT_DREAMSCALE
+ no_variants = FALSE
+ pass_color = TRUE
+ strict_color_stacking = TRUE
+
+/datum/material/shellchitin
+ name = MAT_SHELLCHITIN
+ icon_colour = "#006633"
+ stack_type = /obj/item/stack/material/dreamscale
+ stack_origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 4)
+ icon_base = "solid"
+ icon_reinf = "reinf_mesh"
+ integrity = 250
+ weight = 100
+ ignition_point = T0C+300
+ melting_point = T0C+600
+ protectiveness = 50
+ reflectivity = 0
+ supply_conversion_value = 1
+
+/obj/item/stack/material/shellchitin
+ name = "Shell Chitin"
+ desc = "The by-product of mob grinding."
+ icon = 'modular_chomp/icons/obj/crafting.dmi'
+ icon_state = "shell"
+ default_type = MAT_SHELLCHITIN
+ no_variants = FALSE
+ pass_color = TRUE
+ strict_color_stacking = TRUE
+
+//Putting this here for now because in intial PRs, I enjoy making/altering as few files as possible.
+//Solar ray stuff
+/obj/item/clothing/suit/armor/firecloak
+ name = "solar cloak"
+ desc = "A strange cloak made from remnants of solar rays."
+ icon = 'icons/inventory/accessory/item.dmi'
+ icon_state = "seccloak"
+ color = "#F13C00"
+ body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
+ cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
+ armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 0, rad = 0)
+
+/obj/item/clothing/suit/armor/firecloak/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack")
+ if(istype(damage_source, /obj/item/projectile))
+ return FALSE
+ if(attacker && attacker != user)
+ shoot_fire(attacker)
+ else
+ return FALSE
+
+/obj/item/clothing/suit/armor/firecloak/proc/shoot_fire(mob/target)
+ var/obj/item/projectile/P = new /obj/item/projectile/fire(get_turf(src))
+ P.launch_projectile(target, BP_TORSO, src)
+
+/obj/item/weapon/material/sword/rapier/solar
+ name = "solar rapier"
+ desc = "A slender, fancy and sharply pointed sword, wisps of fire swirling around it."
+ icon_state = "rapier"
+ item_state = "rapier"
+ slot_flags = SLOT_BELT
+ applies_material_colour = 0
+ force_divisor = 0.50
+ color = "#F13C00"
+
+/obj/item/weapon/material/sword/rapier/solar/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
+ . = ..()
+ target.add_modifier(/datum/modifier/fire/weak, 12 SECONDS) //should be 12 damage?
+
+//Icicle
+/obj/item/weapon/gun/energy/icelauncher
+ name = "Strange Pistol"
+ desc = "A homemade and somehow functional icicle launcher."
+ icon = 'icons/obj/gun_ch.dmi'
+ icon_state = "ziplas"
+ item_state = "ziplas"
+ color = "#0000CC"
+ w_class = ITEMSIZE_SMALL
+ slot_flags = SLOT_BELT|SLOT_BACK
+ charge_cost = 300 //You got 5 shot
+ battery_lock = 1
+ projectile_type = /obj/item/projectile/icicle //But it hurts a lot
+ cell_type = /obj/item/weapon/cell/device/weapon
+
+/obj/item/clothing/shoes/boots/frost
+ name = "frost boots"
+ desc = "Handmade boots of scavanged bits."
+ icon_state = "winterboots"
+ color = "#0000CC"
+ cold_protection = FEET
+ min_cold_protection_temperature = SHOE_MIN_COLD_PROTECTION_TEMPERATURE
+ heat_protection = FEET
+ max_heat_protection_temperature = SHOE_MAX_HEAT_PROTECTION_TEMPERATURE
+ snow_speed = -1
+ rock_climbing = TRUE
+ item_flags = NOSLIP
+
+//Turtle
+/obj/item/weapon/material/twohanded/sledgehammer/gravity
+ name = "Gravity Sledgehammer"
+ desc = "A sledgehammer in bits of a gravity turtle's shell."
+ unwielded_force_divisor = 0.25
+ force_divisor = 0.40 //
+ dulled_divisor = 0.80 //Still metal on a stick
+ w_class = ITEMSIZE_LARGE
+ slot_flags = SLOT_BACK
+ force_wielded = 25
+ applies_material_colour = 1
+
+/obj/item/weapon/material/twohanded/sledgehammer/gravity/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
+ . = ..()
+ var/atom/target_zone = get_edge_target_turf(user,get_dir(user, target))
+ if(!target.anchored)
+ target.throw_at(target_zone, 6, 2, user, FALSE)
+ user.visible_message("\The [src] discharges with a thunderous boom!")
+ playsound(src, 'sound/weapons/resonator_blast.ogg', 100, 1, -1)
+
+//Eel stuff
+/obj/item/weapon/material/twohanded/fireaxe/scythe/harvester
+ name = "Scaled Scythe"
+ desc = "A scythe cladded in dream eel scales, allowing for better defense at the cost of offense."
+ force_wielded = 18
+ force_divisor = 0.3 // 18 with hardness 60 (steel)
+ unwielded_force_divisor = 0.10
+ var/defend_chance = 50
+ var/projectile_parry_chance = 50
+
+/obj/item/clothing/suit/armor/alien/dreamercloak
+ name = "Dreamer Cloak"
+ desc = "A strange cloak, something about it feels off."
+ icon = 'icons/inventory/accessory/item.dmi'
+ icon_state = "seccloak" //custom sprite for this for sure.
+ armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
+ block_chance = 35
+ slowdown = -0.5
+
+//uggg, why isnt this apart of the base material melee weapons
+/obj/item/weapon/material/twohanded/fireaxe/scythe/harvester/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack")
+ if(.)
+ return .
+ if(default_parry_check(user, attacker, damage_source) && prob(defend_chance))
+ user.visible_message("\The [user] parries [attack_text] with \the [src]!")
+ return 1
+ if(unique_parry_check(user, attacker, damage_source) && prob(projectile_parry_chance))
+ user.visible_message("\The [user] deflects [attack_text] with \the [src]!")
+ return 1
+
+ return 0
+
+/obj/item/clothing/gloves/toxinregen
+ name = "purging gloves"
+ desc = "A pair of gloves with a small storage of green liquid on the outside. On the inside, a a hypodermic needle can be seen \
+ on each glove."
+ icon_state = "regen"
+ item_state = "graygloves"
+ siemens_coefficient = 0
+ cold_protection = HANDS
+ min_cold_protection_temperature = GLOVES_MIN_COLD_PROTECTION_TEMPERATURE
+ heat_protection = HANDS
+ max_heat_protection_temperature = GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE
+
+/obj/item/clothing/gloves/toxinregen/equipped(var/mob/living/carbon/human/H)
+ if(H && H.gloves == src)
+ wearer = H
+ if(wearer.can_feel_pain())
+ to_chat(H, "You feel a stabbing sensation in your hands as you slide \the [src] on!")
+ wearer.custom_pain("You feel a sharp pain in your hands!",1)
+ ..()
+
+/obj/item/clothing/gloves/toxinregen/dropped(var/mob/living/carbon/human/H)
+ ..()
+ if(wearer)
+ if(wearer.can_feel_pain())
+ to_chat(wearer, "You feel the hypodermic needles as you slide \the [src] off!")
+ wearer.custom_pain("Your hands hurt like hell!",1)
+ wearer = null
+
+/obj/item/clothing/gloves/toxinregen/New()
+ START_PROCESSING(SSobj, src)
+ ..()
+
+/obj/item/clothing/gloves/toxinregen/Destroy()
+ wearer = null
+ STOP_PROCESSING(SSobj, src)
+ return ..()
+
+/obj/item/clothing/gloves/toxinregen/process()
+ if(!wearer || wearer.isSynthetic() || wearer.stat == DEAD || wearer.nutrition <= 10)
+ return
+ if(wearer.getToxLoss())
+ wearer.adjustToxLoss(-0.5)
\ No newline at end of file
diff --git a/modular_chomp/code/datums/crafting/recipes.dm b/modular_chomp/code/datums/crafting/recipes.dm
index 63736b1ea7..cfbf18b849 100644
--- a/modular_chomp/code/datums/crafting/recipes.dm
+++ b/modular_chomp/code/datums/crafting/recipes.dm
@@ -31,4 +31,95 @@
list(/obj/item/stack/material/leather = 1)
)
time = 240
- category = CAT_MISC
\ No newline at end of file
+ category = CAT_MISC
+
+
+/datum/crafting_recipe/solarcloak
+ name = "solar cloak"
+ result = /obj/item/clothing/suit/armor/firecloak
+ reqs = list(
+ list(/obj/item/stack/material/cloth = 10),
+ list(/obj/item/stack/material/wisp = 2)
+ )
+ time = 60
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/dreamcloak
+ name = "solar cloak"
+ result = /obj/item/clothing/suit/armor/alien/dreamercloak
+ reqs = list(
+ list(/obj/item/stack/material/cloth = 10),
+ list(/obj/item/stack/material/dreamscale = 2)
+ )
+ time = 60
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/toxinregengloves
+ name = "purging gloves"
+ result = /obj/item/clothing/gloves/toxinregen
+ reqs = list(
+ list(/obj/item/stack/material/cloth = 10),
+ list(/obj/item/stack/material/crystalscale = 2),
+ list(/obj/item/stack/material/resin = 8),
+ /obj/item/weapon/stock_parts/capacitor = 1
+ )
+ time = 60
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/iceboots
+ name = "frost boots"
+ result = /obj/item/clothing/shoes/boots/frost
+ reqs = list(
+ list(/obj/item/stack/material/frostscale = 2),
+ /obj/item/clothing/shoes/boots/winter = 1
+ )
+ time = 60
+ category = CAT_CLOTHING
+
+/datum/crafting_recipe/strangepistol
+ name = "Strange Weapon"
+ result = /obj/item/weapon/gun/energy/icelauncher
+ reqs = list(
+ list(/obj/item/stack/material/steel = 8),
+ list(/obj/item/stack/material/plastic = 3),
+ list(/obj/item/weapon/cell/device = 1),
+ list(/obj/item/stack/material/frostscale = 2)
+ )
+ time = 60
+ category = CAT_WEAPONRY
+ subcategory = CAT_WEAPON
+
+/datum/crafting_recipe/solarrapier
+ name = "Solar Rapier"
+ result = /obj/item/weapon/material/sword/rapier/solar
+ reqs = list(
+ list(/obj/item/stack/material/steel = 15),
+ list(/obj/item/stack/material/leather = 3),
+ list(/obj/item/stack/material/wisp = 2)
+ )
+ time = 60
+ category = CAT_WEAPONRY
+ subcategory = CAT_WEAPON
+
+/datum/crafting_recipe/gravityhammer
+ name = "Gravity Hammer"
+ result = /obj/item/weapon/material/twohanded/sledgehammer/gravity
+ reqs = list(list(/obj/item/stack/material/steel = 15),
+ list(/obj/item/stack/material/leather = 3),
+ list(/obj/item/stack/material/shellchitin = 2),
+ list(/obj/item/weapon/cell/high = 1)
+ )
+ time = 60
+ category = CAT_WEAPONRY
+ subcategory = CAT_WEAPON
+
+/datum/crafting_recipe/harvester
+ name = "Harvester"
+ result = /obj/item/weapon/material/twohanded/fireaxe/scythe/harvester
+ reqs = list(list(/obj/item/stack/material/steel = 15),
+ list(/obj/item/stack/material/leather = 3),
+ list(/obj/item/stack/material/dreamscale = 2)
+ )
+ time = 60
+ category = CAT_WEAPONRY
+ subcategory = CAT_WEAPON
\ No newline at end of file
diff --git a/modular_chomp/code/datums/supplypacks/misc.dm b/modular_chomp/code/datums/supplypacks/misc.dm
new file mode 100644
index 0000000000..9641fc496a
--- /dev/null
+++ b/modular_chomp/code/datums/supplypacks/misc.dm
@@ -0,0 +1,34 @@
+/datum/supply_pack/misc/solarray
+ name = "Exotic crate - Solar Ray"
+ contains = list()
+ cost = 100
+ containertype = /obj/structure/largecrate/animal/solarray
+ containername = "Exotic crate"
+
+/datum/supply_pack/misc/livingice
+ name = "Exotic crate - Living Ice"
+ contains = list()
+ cost = 100
+ containertype = /obj/structure/largecrate/animal/livingice
+ containername = "Exotic crate"
+
+/datum/supply_pack/misc/radcrab
+ name = "Exotic crate - Crystaline Crab"
+ contains = list()
+ cost = 100
+ containertype = /obj/structure/largecrate/animal/radcrab
+ containername = "Exotic crate"
+
+/datum/supply_pack/misc/dreameel
+ name = "Exotic crate - Dream Eel"
+ contains = list()
+ cost = 100
+ containertype = /obj/structure/largecrate/animal/dreameel
+ containername = "Exotic crate"
+
+/datum/supply_pack/misc/gravityshell
+ name = "Exotic crate - Gravity Shell"
+ contains = list()
+ cost = 100
+ containertype = /obj/structure/largecrate/animal/gravityshell
+ containername = "Exotic crate"
\ No newline at end of file
diff --git a/modular_chomp/code/game/objects/structures/crate_lockers/largecrate.dm b/modular_chomp/code/game/objects/structures/crate_lockers/largecrate.dm
index 034459d944..9920576c9f 100644
--- a/modular_chomp/code/game/objects/structures/crate_lockers/largecrate.dm
+++ b/modular_chomp/code/game/objects/structures/crate_lockers/largecrate.dm
@@ -23,3 +23,28 @@
name = "SWOOPIE XL CleanBot Starter Kit"
desc = "WARNING: HAZARDOUS CONTENTS. HANDLE WITH CAUTION. Consult spiritual observer intervention to avoid rogue units. (That means ghosts. Ominous.)"
starts_with = list(/mob/living/simple_mob/vore/aggressive/corrupthound/swoopie)
+
+/obj/structure/largecrate/animal/solarray
+ name = "Exotic crate"
+ desc = "WARNING: HAZARDOUS CONTENTS. HANDLE WITH CAUTION"
+ starts_with = list(/mob/living/simple_mob/vore/spacecritter/solarray)
+
+/obj/structure/largecrate/animal/livingice
+ name = "Exotic crate"
+ desc = "WARNING: HAZARDOUS CONTENTS. HANDLE WITH CAUTION"
+ starts_with = list(/mob/living/simple_mob/vore/spacecritter/livingice)
+
+/obj/structure/largecrate/animal/radcrab
+ name = "Exotic crate"
+ desc = "WARNING: HAZARDOUS CONTENTS. HANDLE WITH CAUTION"
+ starts_with = list(/mob/living/simple_mob/vore/spacecritter/radcrab)
+
+/obj/structure/largecrate/animal/dreameel
+ name = "Exotic crate"
+ desc = "WARNING: HAZARDOUS CONTENTS. HANDLE WITH CAUTION"
+ starts_with = list(/mob/living/simple_mob/vore/spacecritter/dreameel)
+
+/obj/structure/largecrate/animal/gravityshell
+ name = "Exotic crate"
+ desc = "WARNING: HAZARDOUS CONTENTS. HANDLE WITH CAUTION"
+ starts_with = list(/mob/living/simple_mob/vore/spacecritter/gravityshell)
\ No newline at end of file
diff --git a/modular_chomp/code/modules/event/dangerinfestation.dm b/modular_chomp/code/modules/event/dangerinfestation.dm
index 21905d5887..862995d913 100644
--- a/modular_chomp/code/modules/event/dangerinfestation.dm
+++ b/modular_chomp/code/modules/event/dangerinfestation.dm
@@ -57,18 +57,18 @@
danger = rand(0,2)
switch(danger)
if(DANGER_CRAB)
- spawn_types = list(/mob/living/simple_mob/vore/radcrab)
+ spawn_types = list(/mob/living/simple_mob/vore/spacecritter/radcrab)
min_number = 1
max_number = 4
dangerstring = "crystaline crabs"
if(DANGER_ICE)
- spawn_types = list(/mob/living/simple_mob/vore/livingice)
+ spawn_types = list(/mob/living/simple_mob/vore/spacecritter/livingice)
min_number = 1
max_number = 4
dangerstring = "strange entities"
if(DANGER_RAY)
- spawn_types = list(/mob/living/simple_mob/vore/solarray)
+ spawn_types = list(/mob/living/simple_mob/vore/spacecritter/solarray)
min_number = 1
max_number = 4
dangerstring = "solar rays"
diff --git a/modular_chomp/code/modules/event/event_container_ch.dm b/modular_chomp/code/modules/event/event_container_ch.dm
index 8321a41c01..c0e867e6e8 100644
--- a/modular_chomp/code/modules/event/event_container_ch.dm
+++ b/modular_chomp/code/modules/event/event_container_ch.dm
@@ -111,6 +111,7 @@
//Spacedust doesn't work, commenting this out.
//new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space Dust", /datum/event/dust, 0, list(ASSIGNMENT_ENGINEER = 20), 1, 0, 50),
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Supply Demand", /datum/event/supply_demand, 0, list(ASSIGNMENT_ANY = 5, ASSIGNMENT_SCIENCE = 15, ASSIGNMENT_GARDENER = 10, ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_MEDICAL = 15), 1),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Exotic Infestation", /datum/event/dangerinfestation, -30, list(ASSIGNMENT_ENGINEER = 20, ASSIGNMENT_SCIENCE = 5, ASSIGNMENT_ANY = 2)),
//Check if wormhole code is good and then move to enabled.
// new /datum/event_meta(EVENT_LEVEL_MODERATE, "Wormholes", /datum/event/wormholes, 20, list(ASSIGNMENT_ANY = 5)),
// new /datum/event_meta(EVENT_LEVEL_MODERATE, "Lost Spiders", /datum/event/spider_migration, 0, list(ASSIGNMENT_SECURITY = 30), 1), //YW EDIT //CHOMPStation Edit: Moved to disabled. This is a YW feature that spawns spiders on carp spawns.
@@ -130,7 +131,7 @@
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Space Vines", /datum/event/spacevine, 20, list(ASSIGNMENT_ENGINEER = 15), 1),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Supply Demand", /datum/event/supply_demand, 0, list(ASSIGNMENT_ANY = 5, ASSIGNMENT_SCIENCE = 15, ASSIGNMENT_GARDENER = 10, ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_MEDICAL = 15), 1, min_jobs = list(ASSIGNMENT_CARGO = 1)),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Viral Infection", /datum/event/viral_infection, -50, list(ASSIGNMENT_MEDICAL = 25), 1, min_jobs = list(ASSIGNMENT_MEDICAL = 2)),
- new /datum/event_meta(EVENT_LEVEL_MAJOR, "Excotic Infestation", /datum/event/dangerinfestation, -60, list(ASSIGNMENT_ENGINEER = 15, ASSIGNMENT_SCIENCE = 5, ASSIGNMENT_ANY = 1)),
+ new /datum/event_meta(EVENT_LEVEL_MAJOR, "Exotic Horde Infestation", /datum/event/highdangerinfestation, -50, list(ASSIGNMENT_ENGINEER = 20, ASSIGNMENT_SCIENCE = 5, ASSIGNMENT_ANY = 2)),
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meaty Ores Wave", /datum/event/meteor_wave/meatyores, -90, list(ASSIGNMENT_ENGINEER = 50, ASSIGNMENT_MEDICAL = 10, ASSIGNMENT_ANY = 1), 1, min_jobs = list(ASSIGNMENT_ENGINEER = 1)),
)
add_disabled_events(list(
diff --git a/modular_chomp/code/modules/event/heavydangerinfestation.dm b/modular_chomp/code/modules/event/heavydangerinfestation.dm
new file mode 100644
index 0000000000..cc9b648850
--- /dev/null
+++ b/modular_chomp/code/modules/event/heavydangerinfestation.dm
@@ -0,0 +1,124 @@
+#define LOC_RIOT 0
+#define LOC_ATMOS 1
+#define LOC_DISPOSAL 2
+#define LOC_TECH 3
+#define LOC_VAULT 4
+#define LOC_VIRO 5
+#define LOC_BRIDGE 6
+#define LOC_BRIG 7
+
+#define DANGER_CRAB 0
+#define DANGER_ICE 1
+#define DANGER_RAY 2
+#define DANGER_EEL 3
+#define DANGER_TURTLE 4
+
+//infestation event of a diffrent variety
+//meant for engineering and science to exploit
+/datum/event/highdangerinfestation
+ announceWhen = 10
+ endWhen = 11
+ var/location
+ var/locstring
+ var/danger
+ var/dangerstring
+
+/datum/event/highdangerinfestation/start()
+ location = rand(0,7)
+ var/list/turf/simulated/floor/turfs = list()
+ var/spawn_area_type
+ switch(location)
+ if(LOC_RIOT)
+ spawn_area_type = /area/security/riot_control
+ locstring = "riot control"
+ if(LOC_ATMOS)
+ spawn_area_type = /area/engineering/atmos
+ locstring = "atmospherics"
+ if(LOC_DISPOSAL)
+ spawn_area_type = /area/maintenance/disposal
+ locstring = "the disposal"
+ if(LOC_TECH)
+ spawn_area_type = /area/storage/tech
+ locstring = "technical storage"
+ if(LOC_VAULT)
+ spawn_area_type = /area/security/nuke_storage
+ locstring = "the vault"
+ if(LOC_VIRO)
+ spawn_area_type = /area/medical/virology
+ locstring = "the virogoly"
+ if(LOC_BRIDGE)
+ spawn_area_type = /area/bridge
+ locstring = "the bridge"
+ if(LOC_BRIG)
+ spawn_area_type = /area/security/prison
+ locstring = "the brig"
+
+ for(var/areapath in typesof(spawn_area_type))
+ var/area/A = locate(areapath)
+ for(var/turf/simulated/floor/F in A.contents)
+ //VOREStation Edit - Fixes event
+ var/blocked = FALSE
+ for(var/atom/movable/AM in F)
+ if(AM.density)
+ blocked = TRUE
+ if(!blocked)
+ turfs += F
+
+ var/list/spawn_types = list()
+ var/min_number
+ var/max_number
+ danger = rand(0,4)
+ switch(danger)
+ if(DANGER_CRAB)
+ spawn_types = list(/mob/living/simple_mob/vore/spacecritter/radcrab)
+ min_number = 2
+ max_number = 6
+ dangerstring = "crystaline crabs"
+ if(DANGER_ICE)
+ spawn_types = list(/mob/living/simple_mob/vore/spacecritter/livingice)
+ min_number = 2
+ max_number = 6
+ dangerstring = "strange entities"
+
+ if(DANGER_RAY)
+ spawn_types = list(/mob/living/simple_mob/vore/spacecritter/solarray)
+ min_number = 2
+ max_number = 6
+ dangerstring = "solar rays"
+ if(DANGER_EEL)
+ spawn_types = list(/mob/living/simple_mob/vore/spacecritter/dreameel)
+ min_number = 2
+ max_number = 6
+ dangerstring = "strange entities"
+ if(DANGER_TURTLE)
+ spawn_types = list(/mob/living/simple_mob/vore/spacecritter/gravityshell)
+ min_number = 2
+ max_number = 6
+ dangerstring = "strange entities"
+
+ spawn(0)
+ var/num = rand(min_number,max_number)
+ while(turfs.len > 0 && num > 0)
+ var/turf/simulated/floor/T = pick(turfs)
+ turfs.Remove(T)
+ num--
+ var/spawn_type = pick(spawn_types)
+ new spawn_type(T)
+
+/datum/event/highdangerinfestation/announce()
+ command_announcement.Announce("Bioscans indicate that [dangerstring] have been entered [locstring]. Contain them before they start causing damage.", "Alien infestation")
+
+#undef LOC_RIOT
+#undef LOC_ATMOS
+#undef LOC_DISPOSAL
+#undef LOC_TECH
+#undef LOC_VAULT
+#undef LOC_VIRO
+#undef LOC_BRIDGE
+#undef LOC_BRIG
+
+#undef DANGER_CRAB
+#undef DANGER_ICE
+#undef DANGER_RAY
+#undef DANGER_EEL
+#undef DANGER_TURTLE
\ No newline at end of file
diff --git a/modular_chomp/code/modules/food/food/snacks/meat.dm b/modular_chomp/code/modules/food/food/snacks/meat.dm
index 4c809a662d..be6c3ddf0a 100644
--- a/modular_chomp/code/modules/food/food/snacks/meat.dm
+++ b/modular_chomp/code/modules/food/food/snacks/meat.dm
@@ -53,4 +53,30 @@
/obj/item/weapon/reagent_containers/food/snacks/metroidmeat/Initialize()
. = ..()
reagents.add_reagent("protein", 3)
- reagents.add_reagent("liquidlife", 3)
\ No newline at end of file
+ reagents.add_reagent("liquidlife", 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/meat/raymeat
+ name = "Solar Ray Meat"
+ desc = "You aren't sure how ediable this is"
+ icon_state = "meat"
+ center_of_mass = list("x"=17, "y"=16)
+ nutriment_amt = 3
+ nutriment_desc = list("protein" = 3, "capsaicin" = 8, "condensedcapsaicin" = 8)
+
+
+/obj/item/weapon/reagent_containers/food/snacks/meat/eelmeat
+ name = "Eel Meat"
+ desc = "A slice from an eel"
+ icon_state = "meat"
+ center_of_mass = list("x"=17, "y"=16)
+ nutriment_amt = 3
+ nutriment_desc = list("protein" = 3, "shockchem" = 1)
+
+
+/obj/item/weapon/reagent_containers/food/snacks/meat/gravityshell
+ name = "Gravity Shell Meat"
+ desc = "A slice from a gravity shell"
+ icon_state = "meat"
+ center_of_mass = list("x"=17, "y"=16)
+ nutriment_amt = 3
+ nutriment_desc = list("protein" = 24)
\ No newline at end of file
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/event.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/event.dm
index 3a87d30b07..5246ca6523 100644
--- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/event.dm
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/event.dm
@@ -1,282 +1,3 @@
-/mob/living/simple_mob/vore/solarray //solar moth lite, dies to water
- name = "solar ray"
- desc = "A sting ray of fire, drifting around"
- icon = 'modular_chomp/icons/mob/spaceinvader.dmi'
- icon_state = "solarray"
- icon_living = "solarray"
- icon_dead = "solarray-dead"
- health = 30
- maxHealth = 30
-
- movement_cooldown = 3 // Lower is faster.
- aquatic_movement = 0 // If set, the mob will move through fluids with no hinderance.
-
- minbodytemp = 0 // Minimum "okay" temperature in kelvin
- maxbodytemp = 10000 // Maximum of above
- heat_damage_per_tick = 3 // Amount of damage applied if animal's body temperature is higher than maxbodytemp
- cold_damage_per_tick = 2 // Same as heat_damage_per_tick, only if the bodytemperature it's lower than minbodytemp
-
- min_oxy = 0 // Oxygen in moles, minimum, 0 is 'no minimum'
- max_oxy = 0 // Oxygen in moles, maximum, 0 is 'no maximum'
- min_tox = 0 // Phoron min
- max_tox = 0 // Phoron max
- min_co2 = 0 // CO2 min
- max_co2 = 0 // CO2 max
- min_n2 = 0 // N2 min
- max_n2 = 0 // N2 max
- unsuitable_atoms_damage = 2 // This damage is taken when atmos doesn't fit all the requirements above
-
- melee_damage_lower = 12 // Lower bound of randomized melee damage
- melee_damage_upper = 12 // Upper bound of randomized melee damage
- attacktext = list("incinerate") // "You are [attacktext] by the mob!"
- melee_miss_chance = 0 // percent chance to miss a melee attack.
- attack_armor_type = "energy" // What armor does this check?
- attack_armor_pen = 30 // How much armor pen this attack has.
- attack_sharp = FALSE // Is the attack sharp?
- attack_edge = FALSE // Does the attack have an edge?
-
- melee_attack_delay = 1.5 // If set, the mob will do a windup animation and can miss if the target moves out of the way.
- ai_holder_type = /datum/ai_holder/simple_mob/retaliate
- hovering = TRUE
-
- //Damage resistances
- grab_resist = 0 // Chance for a grab attempt to fail. Note that this is not a true resist and is just a prob() of failure.
- resistance = 0 // Damage reduction for all types
- armor = list( // Values for normal getarmor() checks
- "melee" = 90,
- "bullet" = 95,
- "laser" = 100,
- "energy" = 100,
- "bomb" = 0,
- "bio" = 100,
- "rad" = 100
- )
- armor_soak = list( // Values for getsoak() checks.
- "melee" = 7,
- "bullet" = 7,
- "laser" = 7,
- "energy" = 7,
- "bomb" = 0,
- "bio" = 0,
- "rad" = 0
- )
-
- heat_resist = 1.0
- cold_resist = 1.0
- shock_resist = 0.0
- water_resist = 0.0
- taser_kill = 0
-
- var/mycolour = COLOR_RED //Variable Lighting colours
- var/original_temp = null //Value to remember temp
- var/set_temperature = T0C + 5000 //Sets the target point of 10k degrees celsius
- var/heating_power = 50000
-
-/mob/living/simple_mob/vore/solarray/Life()
- . = ..()
- if(icon_state != icon_dead) //I mean on death() Life() should disable but i guess doesnt hurt to make sure -shark
- var/turf/moth_loc = get_turf(src)
- if(isturf(moth_loc) && moth_loc.air)
- var/datum/gas_mixture/env = moth_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 = original_temp*100 //Changed to work variable -shark //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)
-
-
-
- //Since I'm changing hyper mode to be variable we need to store old power
- original_temp = heating_power
-
-/mob/living/simple_mob/vore/livingice //frost solar moth or blue slime on crack. Dies to lasers or slighly toasty rooms
- name = "living icicle"
- desc = "A strange creature, a floating shard of ice"
- icon = 'modular_chomp/icons/mob/spaceinvader.dmi'
- icon_state = "hermitcrab"
- icon_living = "hermitcrab"
- icon_dead = "hermitcrab-dead"
- health = 30
- maxHealth = 30
-
- movement_cooldown = 3 //VOREStation Edit - 1 is slower than normal human speed // Lower is faster.
- aquatic_movement = 0 // If set, the mob will move through fluids with no hinderance.
-
- minbodytemp = 0 // Minimum "okay" temperature in kelvin
- maxbodytemp = 300 // Maximum of above
- heat_damage_per_tick = 15 // Amount of damage applied if animal's body temperature is higher than maxbodytemp
- cold_damage_per_tick = 15 // Same as heat_damage_per_tick, only if the bodytemperature it's lower than minbodytemp
-
- min_oxy = 0 // Oxygen in moles, minimum, 0 is 'no minimum'
- max_oxy = 0 // Oxygen in moles, maximum, 0 is 'no maximum'
- min_tox = 0 // Phoron min
- max_tox = 6 // Phoron max
- min_co2 = 0 // CO2 min
- max_co2 = 0 // CO2 max
- min_n2 = 0 // N2 min
- max_n2 = 0 // N2 max
- unsuitable_atoms_damage = 2 // This damage is taken when atmos doesn't fit all the requirements above
-
- melee_damage_lower = 30 // Lower bound of randomized melee damage
- melee_damage_upper = 30 // Upper bound of randomized melee damage
- attacktext = list("attacked") // "You are [attacktext] by the mob!"
- melee_miss_chance = 0 // percent chance to miss a melee attack.
- attack_armor_type = "melee" // What armor does this check?
- attack_armor_pen = 0 // How much armor pen this attack has.
- attack_sharp = FALSE // Is the attack sharp?
- attack_edge = FALSE // Does the attack have an edge?
-
- melee_attack_delay = 3 // If set, the mob will do a windup animation and can miss if the target moves out of the way..
-
- ai_holder_type = /datum/ai_holder/simple_mob/retaliate
- hovering = TRUE
-
- //Damage resistances
- grab_resist = 0 // Chance for a grab attempt to fail. Note that this is not a true resist and is just a prob() of failure.
- resistance = 0 // Damage reduction for all types
- armor = list( // Values for normal getarmor() checks
- "melee" = 100,
- "bullet" = 100,
- "laser" = 0,
- "energy" = 0,
- "bomb" = 0,
- "bio" = 100,
- "rad" = 100
- )
- armor_soak = list( // Values for getsoak() checks.
- "melee" = 7,
- "bullet" = 7,
- "laser" = 0,
- "energy" = 0,
- "bomb" = 0,
- "bio" = 0,
- "rad" = 0
- )
-
- heat_resist = 0.0
- cold_resist = 0.0
- shock_resist = 0.0
- water_resist = 1.0
-
-/mob/living/simple_mob/vore/livingice/proc/cold_aura()
- for(var/mob/living/L in view(2, src))
- var/turf/T = get_turf(src)
- var/datum/gas_mixture/env = T.return_air()
- if(env)
- env.add_thermal_energy(-5 * 1000)
-
-/mob/living/simple_mob/vore/radcrab //bullets, melee, and cold all crack the poor thing's shell
- name = "crystaline crab"
- desc = "A largeish hermit crab glowing green, irradting the nearby area"
- icon = 'modular_chomp/icons/mob/spaceinvader.dmi'
- icon_state = "hermitcrab"
- icon_living = "hermitcrab"
- icon_dead = "hermitcrab-dead"
- health = 30
- maxHealth = 30
-
- movement_cooldown = 3 //VOREStation Edit - 1 is slower than normal human speed // Lower is faster.
- aquatic_movement = 1 // If set, the mob will move through fluids with no hinderance.
-
- minbodytemp = 260 // Minimum "okay" temperature in kelvin
- maxbodytemp = 10000 // Maximum of above
- heat_damage_per_tick = 15 // Amount of damage applied if animal's body temperature is higher than maxbodytemp
- cold_damage_per_tick = 15 // Same as heat_damage_per_tick, only if the bodytemperature it's lower than minbodytemp
-
- min_oxy = 0 // Oxygen in moles, minimum, 0 is 'no minimum'
- max_oxy = 0 // Oxygen in moles, maximum, 0 is 'no maximum'
- min_tox = 0 // Phoron min
- max_tox = 0 // Phoron max
- min_co2 = 0 // CO2 min
- max_co2 = 5 // CO2 max
- min_n2 = 0 // N2 min
- max_n2 = 0 // N2 max
- unsuitable_atoms_damage = 2 // This damage is taken when atmos doesn't fit all the requirements above
-
- melee_damage_lower = 2 // Lower bound of randomized melee damage
- melee_damage_upper = 2 // Upper bound of randomized melee damage
- attacktext = list("pinches") // "You are [attacktext] by the mob!"
- melee_miss_chance = 0 // percent chance to miss a melee attack.
- attack_armor_type = "melee" // What armor does this check?
- attack_armor_pen = 100 // How much armor pen this attack has.
- attack_sharp = TRUE // Is the attack sharp?
- attack_edge = TRUE // Does the attack have an edge?
-
- melee_attack_delay = 0 // If set, the mob will do a windup animation and can miss if the target moves out of the way.
- ai_holder_type = /datum/ai_holder/simple_mob/retaliate
- hovering = TRUE
-
- //Damage resistances
- grab_resist = 0 // Chance for a grab attempt to fail. Note that this is not a true resist and is just a prob() of failure.
- resistance = 0 // Damage reduction for all types
- armor = list( // Values for normal getarmor() checks
- "melee" = -50,
- "bullet" = 0,
- "laser" = 100,
- "energy" = 100,
- "bomb" = 0,
- "bio" = 100,
- "rad" = 100
- )
- armor_soak = list( // Values for getsoak() checks.
- "melee" = 0,
- "bullet" = 0,
- "laser" = 7,
- "energy" = 7,
- "bomb" = 0,
- "bio" = 0,
- "rad" = 0
- )
-
- heat_resist = 0.0
- cold_resist = 0.0
- shock_resist = 0.0
- water_resist = 1.0
- taser_kill = 0
- var/rads = 75
-
-/mob/living/simple_mob/vore/radcrab/handle_special()
- if(stat != DEAD)
- irradiate()
- ..()
-
-/mob/living/simple_mob/vore/radcrab/proc/irradiate()
- SSradiation.radiate(src, rads)
-
-/mob/living/simple_mob/vore/solarray
- vore_bump_chance = 80
- vore_bump_emote = "devours"
- vore_active = 1
- vore_capacity = 1
- vore_pounce_chance = 0
- vore_default_mode = DM_DIGEST
-
-/mob/living/simple_mob/vore/livingice
- vore_bump_chance = 0
- vore_bump_emote = "devours"
- vore_active = 1
- vore_capacity = 1
- vore_pounce_chance = 0
- vore_default_mode = DM_DIGEST
-
-/mob/living/simple_mob/vore/radcrab
- vore_bump_chance = 40
- vore_bump_emote = "devours"
- vore_active = 1
- vore_capacity = 1
- vore_pounce_chance = 0
- vore_default_mode = DM_DIGEST
/mob/living/simple_mob/vore/aggressive/rat
maxHealth = 75
diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/spacecritters.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/spacecritters.dm
new file mode 100644
index 0000000000..5506462924
--- /dev/null
+++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/spacecritters.dm
@@ -0,0 +1,436 @@
+/mob/living/simple_mob/vore/spacecritter
+ icon = 'modular_chomp/icons/mob/spaceinvader.dmi'
+ health = 30
+ maxHealth = 30
+ movement_cooldown = 3
+ aquatic_movement = 0
+
+ minbodytemp = 0
+ maxbodytemp = 10000 // Maximum of above
+ heat_damage_per_tick = 3
+ cold_damage_per_tick = 2
+
+ min_oxy = 0
+ max_oxy = 0
+ min_tox = 0
+ max_tox = 0
+ min_co2 = 0
+ max_co2 = 0
+ min_n2 = 0
+ max_n2 = 0
+ unsuitable_atoms_damage = 2
+
+ melee_damage_lower = 12
+ melee_damage_upper = 12
+ melee_miss_chance = 0
+ melee_attack_delay = 1.5
+ ai_holder_type = /datum/ai_holder/simple_mob/retaliate
+ hovering = TRUE
+
+ heat_resist = 1.0
+ cold_resist = 1.0
+ shock_resist = 0.0
+ water_resist = 1.0
+ taser_kill = 0
+ var/evolve = "/mob/living/simple_mob/vore/solarray/galaxyray"
+ var/feed = "/obj/item/weapon/ore/phoron"
+ var/evolvekey = "/obj/item/stack/material/tritium"
+ var/copy = "/mob/living/simple_mob/vore/solarray"
+
+
+/mob/living/simple_mob/vore/spacecritter/attackby(var/obj/item/O, var/mob/user)
+ if(istype(O, evolvekey))
+ user.drop_from_inventory(O)
+ qdel(O)
+ evolve()
+ if(istype(O, feed))
+ user.drop_from_inventory(O)
+ qdel(O)
+ duplicate()
+ else
+ .=..()
+
+/mob/living/simple_mob/vore/spacecritter/proc/evolve()
+ var/mob/living/L
+ L = new evolve(get_turf(src))
+ if(mind)
+ src.mind.transfer_to(L)
+ visible_message("\The [src] suddenly evolves!")
+ qdel(src)
+
+/mob/living/simple_mob/vore/spacecritter/proc/duplicate()
+ visible_message("\The [src] splits into two!")
+ new copy (src.loc)
+
+
+/mob/living/simple_mob/vore/spacecritter/solarray //solar moth lite, dies to water
+ name = "solar ray"
+ desc = "A sting ray of fire, drifting around"
+ icon = 'modular_chomp/icons/mob/spaceinvader.dmi'
+ icon_state = "solarray"
+ icon_living = "solarray"
+ icon_dead = "solarray-dead"
+ attacktext = list("incinerate")
+ attack_armor_type = "energy"
+ attack_armor_pen = 30
+ water_resist = 0
+
+ var/mycolour = COLOR_RED //Variable Lighting colours
+ var/original_temp = null //Value to remember temp
+ var/set_temperature = T0C + 5000 //Sets the target point of 10k degrees celsius
+ var/heating_power = 50000
+
+ evolve = "/mob/living/simple_mob/vore/solarray/galaxyray"
+ feed = "/obj/item/weapon/ore/phoron"
+ evolvekey = "/obj/item/stack/material/tritium"
+ copy = "/mob/living/simple_mob/vore/spacecritter/solarray"
+
+
+/mob/living/simple_mob/vore/spacecritter/solarray/Life()
+ . = ..()
+ if(icon_state != icon_dead) //I mean on death() Life() should disable but i guess doesnt hurt to make sure -shark
+ var/turf/moth_loc = get_turf(src)
+ if(isturf(moth_loc) && moth_loc.air)
+ var/datum/gas_mixture/env = moth_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 = original_temp*100 //Changed to work variable -shark //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)
+
+
+
+ //Since I'm changing hyper mode to be variable we need to store old power
+ original_temp = heating_power
+
+/mob/living/simple_mob/vore/spacecritter/solarray/galaxyray
+ name = "galaxy ray"
+ icon_state = "galaxyray"
+ icon_living = "galaxyray"
+ health = 75
+ maxHealth = 75
+ set_temperature = T0C + 15000
+ heating_power = 150000
+ size_multiplier = 1.5
+
+/mob/living/simple_mob/vore/spacecritter/livingice //dark blue slime but more chilly. Dies to lasers or slighly toasty rooms
+ name = "living icicle"
+ desc = "A strange creature, a crab like creature seemingly made of ice"
+ icon = 'modular_chomp/icons/mob/spaceinvader.dmi'
+ icon_state = "livingice"
+ icon_living = "livingice"
+ icon_dead = "livingice-dead"
+ minbodytemp = 0 // Minimum "okay" temperature in kelvin
+ maxbodytemp = 300 // Maximum of above
+ hovering = FALSE
+ heat_resist = 0.2
+ cold_resist = 1.0
+
+ evolve = "/mob/living/simple_mob/vore/spacecritter/livingice/iceberg"
+ feed = "/obj/item/stack/material/snow"
+ evolvekey = "/obj/item/weapon/reagent_containers/food/snacks/coldchili"
+ copy = "/mob/living/simple_mob/vore/spacecritter/livingice"
+
+ var/chilltemp = -20
+
+/mob/living/simple_mob/vore/spacecritter/livingice/handle_special()
+ if(stat != DEAD)
+ cold_aura()
+ ..()
+
+/mob/living/simple_mob/vore/spacecritter/livingice/proc/cold_aura()
+ for(var/mob/living/L in view(2, src))
+ var/turf/T = get_turf(src)
+ var/datum/gas_mixture/env = T.return_air()
+ if(env)
+ env.add_thermal_energy(chilltemp * 1000)
+
+/mob/living/simple_mob/vore/spacecritter/livingice/iceberg
+ name = "living iceberg"
+ desc = "A giant strange creature, a crab like creature seemingly made of ice"
+ size_multiplier = 3.0
+ health = 75
+ maxHealth = 75
+ chilltemp = -50
+
+/mob/living/simple_mob/vore/spacecritter/radcrab //bullets, melee, and cold all crack the poor thing's shell
+ name = "crystaline crab"
+ desc = "A largeish hermit crab glowing green, irradting the nearby area"
+ icon = 'modular_chomp/icons/mob/spaceinvader.dmi'
+ icon_state = "hermitcrab"
+ icon_living = "hermitcrab"
+ icon_dead = "hermitcrab-dead"
+ aquatic_movement = 1 // If set, the mob will move through fluids with no hinderance.
+
+ minbodytemp = 260 // Minimum "okay" temperature in kelvin
+ maxbodytemp = 10000 // Maximum of above
+ melee_damage_lower = 2 // Lower bound of randomized melee damage
+ melee_damage_upper = 2 // Upper bound of randomized melee damage
+ attacktext = list("pinches") // "You are [attacktext] by the mob!"
+ attack_armor_type = "melee" // What armor does this check?
+ attack_armor_pen = 100 // How much armor pen this attack has.
+ var/rads = 50
+ evolve = "/mob/living/simple_mob/vore/spacecritter/radcrab/supermattercrab"
+ feed = "/obj/item/weapon/ore/uranium"
+ evolvekey = "/obj/item/stack/material/uranium"
+ copy = "/mob/living/simple_mob/vore/spacecritter/radcrab"
+
+/mob/living/simple_mob/vore/spacecritter/radcrab/handle_special()
+ if(stat != DEAD)
+ irradiate()
+ ..()
+
+/mob/living/simple_mob/vore/spacecritter/radcrab/proc/irradiate()
+ SSradiation.radiate(src, rads)
+
+/mob/living/simple_mob/vore/spacecritter/radcrab/supermattercrab
+ size_multiplier = 1.5
+ health = 75
+ maxHealth = 75
+ rads = 150
+ name = "energized crystaline crab"
+ icon_state = "superhermitcrab"
+ icon_living = "superhermitcrab"
+ icon_dead = "hermitcrab-dead"
+
+/mob/living/simple_mob/vore/spacecritter/dreameel
+ name = "dream eel"
+ desc = "A eel floating through it's own thick cloud"
+ icon = 'modular_chomp/icons/mob/spaceinvader.dmi'
+ icon_state = "dreameel"
+ icon_living = "dreameel"
+ icon_dead = "dreameel-dead"
+ movement_cooldown = -1 // Lower is faster.
+ attacktext = list("bitten") // "You are [attacktext] by the mob!"
+ var/artifact_master = /datum/component/artifact_master/dreameel
+ evolve = "/mob/living/simple_mob/vore/spacecritter/dreameel/nightmare"
+ feed = "/obj/item/weapon/reagent_containers/food/snacks/carpmeat"
+ evolvekey = "/obj/item/stack/material/phoron"
+ copy = "/mob/living/simple_mob/vore/spacecritter/dreameel"
+
+/datum/component/artifact_master/dreameel
+ make_effects = list(
+ /datum/artifact_effect/gassleeping
+ )
+
+/mob/living/simple_mob/vore/spacecritter/dreameel/nightmare
+ name = "dream eel"
+ desc = "A eel floating through it's own thick cloud"
+ icon = 'modular_chomp/icons/mob/spaceinvader.dmi'
+ icon_state = "dreameel"
+ icon_living = "dreameel"
+ movement_cooldown = -5
+ color = "#9933FF"
+
+ artifact_master = /datum/component/artifact_master/nightmare
+
+/datum/component/artifact_master/nightmare
+ make_effects = list(
+ /datum/artifact_effect/gasphoron
+ )
+
+/mob/living/simple_mob/vore/spacecritter/gravityshell
+ name = "Gravity Shell"
+ desc = "A metallic turtle"
+ icon = 'modular_chomp/icons/mob/spaceinvader.dmi'
+ icon_state = "gravityshell"
+ icon_living = "gravityshell"
+ icon_dead = "gravityshell-dead"
+ movement_cooldown = 5 // Lower is faster.
+ armor_soak = list( // Values for getsoak() checks.
+ "melee" = 7,
+ "bullet" = 7,
+ "laser" = 7,
+ "energy" = 7,
+ "bomb" = 0,
+ "bio" = 0,
+ "rad" = 0
+ )
+ var/artifact_master = /datum/component/artifact_master/gravity
+
+ evolve = "/mob/living/simple_mob/vore/spacecritter/gravityshell/cleanse"
+ feed = "/obj/item/stack/material/concrete"
+ evolvekey = "/obj/item/stack/material/tritium"
+ copy = "/mob/living/simple_mob/vore/spacecritter/gravityshell"
+
+/datum/component/artifact_master/gravity
+ make_effects = list(
+ /datum/artifact_effect/extreme/gravity_wave
+ )
+
+/mob/living/simple_mob/vore/spacecritter/gravityshell/cleanse
+ size_multiplier = 0.5
+ health = 75
+ maxHealth = 75
+ artifact_master = /datum/component/artifact_master/gasoxy
+ icon_state = "cleanseshell"
+ icon_living = "cleanseshell"
+ icon_dead = "cleanseshell-dead"
+
+/datum/component/artifact_master/gasoxy
+ make_effects = list(
+ /datum/artifact_effect/gasoxy
+ )
+
+
+/mob/living/simple_mob/vore/spacecritter/solarray
+ vore_bump_chance = 80
+ vore_bump_emote = "devours"
+ vore_active = 1
+ vore_capacity = 1
+ vore_pounce_chance = 0
+ vore_default_mode = DM_DIGEST
+
+/mob/living/simple_mob/vore/spacecritter/livingice
+ vore_bump_chance = 0
+ vore_bump_emote = "devours"
+ vore_active = 1
+ vore_capacity = 1
+ vore_pounce_chance = 0
+ vore_default_mode = DM_DIGEST
+
+/mob/living/simple_mob/vore/spacecritter/radcrab
+ vore_bump_chance = 40
+ vore_bump_emote = "devours"
+ vore_active = 1
+ vore_capacity = 1
+ vore_pounce_chance = 0
+ vore_default_mode = DM_DIGEST
+
+/mob/living/simple_mob/vore/spacecritter/dreameel
+ vore_bump_chance = 40
+ vore_bump_emote = "devours"
+ vore_active = 1
+ vore_capacity = 1
+ vore_pounce_chance = 0
+ vore_default_mode = DM_DIGEST
+
+/mob/living/simple_mob/vore/spacecritter/gravityshell
+ vore_bump_chance = 40
+ vore_bump_emote = "devours"
+ vore_active = 1
+ vore_capacity = 1
+ vore_pounce_chance = 0
+ vore_default_mode = DM_DIGEST
+
+
+/mob/living/simple_mob/vore/solarray
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/raymeat
+ meat_amount = 8
+
+ tame_items = list(
+ /obj/item/stack/tile/grass = 50
+ )
+
+ butchery_loot = list(\
+ /obj/item/stack/material/wisp = 3\
+ )
+
+ harvest_tool = /obj/item/weapon/weldingtool
+ harvest_cooldown = 10 MINUTES
+ harvest_delay = 30 SECONDS
+ harvest_recent = 0
+ harvest_per_hit = 1
+ harvest_verb = "harvested"
+ harvest_results = list(
+ /obj/item/stack/material/wisp = 1
+ )
+
+/mob/living/simple_mob/vore/livingice
+ meat_type = /obj/item/stack/material/snow
+ meat_amount = 18
+
+ tame_items = list(
+ /obj/item/stack/material/snow = 10
+ )
+
+ butchery_loot = list(\
+ /obj/item/stack/material/frostscale = 3\
+ )
+
+ harvest_tool = /obj/item/weapon/tool/wirecutters
+ harvest_cooldown = 10 MINUTES
+ harvest_delay = 30 SECONDS
+ harvest_recent = 0
+ harvest_per_hit = 1
+ harvest_verb = "harvested"
+ harvest_results = list(
+ /obj/item/stack/material/frostscale = 1
+ )
+
+/mob/living/simple_mob/vore/radcrab
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/crabmeat
+ meat_amount = 8
+
+ tame_items = list(
+ /obj/item/weapon/ore/uranium = 50
+ )
+
+ butchery_loot = list(\
+ /obj/item/stack/material/crystalscale = 3\
+ )
+
+ harvest_tool = /obj/item/weapon/tool/crowbar
+ harvest_cooldown = 10 MINUTES
+ harvest_delay = 30 SECONDS
+ harvest_recent = 0
+ harvest_per_hit = 1
+ harvest_verb = "harvested"
+ harvest_results = list(
+ /obj/item/stack/material/crystalscale = 1
+ )
+
+/mob/living/simple_mob/vore/dreameel
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/eelmeat
+ meat_amount = 2
+
+ tame_items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/meat/gravityshell = 40
+ )
+
+ butchery_loot = list(\
+ /obj/item/stack/material/dreamscale = 3\
+ )
+
+ harvest_tool = /obj/item/weapon/tool/wirecutters
+ harvest_cooldown = 10 MINUTES
+ harvest_delay = 30 SECONDS
+ harvest_recent = 0
+ harvest_per_hit = 1
+ harvest_verb = "harvested"
+ harvest_results = list(
+ /obj/item/stack/material/dreamscale = 1
+ )
+
+/mob/living/simple_mob/vore/gravityshell
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/gravityshell
+ meat_amount = 8
+
+ tame_items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/crabmeat = 50
+ )
+
+ butchery_loot = list(\
+ /obj/item/stack/material/shellchitin = 3\
+ )
+
+ harvest_tool = /obj/item/weapon/tool/crowbar
+ harvest_cooldown = 10 MINUTES
+ harvest_delay = 30 SECONDS
+ harvest_recent = 0
+ harvest_per_hit = 1
+ harvest_verb = "harvested"
+ harvest_results = list(
+ /obj/item/stack/material/shellchitin = 1
+ )
diff --git a/modular_chomp/icons/mob/spaceinvader.dmi b/modular_chomp/icons/mob/spaceinvader.dmi
index 7151f5499b..62226c3e16 100644
Binary files a/modular_chomp/icons/mob/spaceinvader.dmi and b/modular_chomp/icons/mob/spaceinvader.dmi differ
diff --git a/modular_chomp/icons/obj/crafting.dmi b/modular_chomp/icons/obj/crafting.dmi
new file mode 100644
index 0000000000..02ba9c0107
Binary files /dev/null and b/modular_chomp/icons/obj/crafting.dmi differ
diff --git a/vorestation.dme b/vorestation.dme
index 415884089a..af488b0bae 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -4615,6 +4615,7 @@
#include "modular_chomp\code\datums\components\gargoyle.dm"
#include "modular_chomp\code\datums\components\squeak.dm"
#include "modular_chomp\code\datums\components\xenoqueen.dm"
+#include "modular_chomp\code\datums\crafting\items.dm"
#include "modular_chomp\code\datums\crafting\recipes.dm"
#include "modular_chomp\code\datums\interfaces\appearance.dm"
#include "modular_chomp\code\datums\outfits\jobs\cargo.dm"
@@ -4622,6 +4623,7 @@
#include "modular_chomp\code\datums\outfits\jobs\noncrew.dm"
#include "modular_chomp\code\datums\supplypacks\contraband.dm"
#include "modular_chomp\code\datums\supplypacks\medical.dm"
+#include "modular_chomp\code\datums\supplypacks\misc.dm"
#include "modular_chomp\code\datums\supplypacks\science.dm"
#include "modular_chomp\code\datums\supplypacks\security.dm"
#include "modular_chomp\code\datums\underwear\socks.dm"
@@ -4716,6 +4718,7 @@
#include "modular_chomp\code\modules\emotes\definitions\audible_pain.dm"
#include "modular_chomp\code\modules\event\dangerinfestation.dm"
#include "modular_chomp\code\modules\event\event_container_ch.dm"
+#include "modular_chomp\code\modules\event\heavydangerinfestation.dm"
#include "modular_chomp\code\modules\events\meatyores.dm"
#include "modular_chomp\code\modules\exploration\lootsafe.dm"
#include "modular_chomp\code\modules\food\drinkgglass\metaglass.dm"
@@ -4839,6 +4842,7 @@
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\greatwolf.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\jelly.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\smokestar.dm"
+#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\spacecritters.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\swoopie.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\vore.dm"
#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\wolf.dm"