diff --git a/code/datums/helper_datums/butchering.dm b/code/datums/helper_datums/butchering.dm
index 426e57c3bca..fb41e3c00bc 100644
--- a/code/datums/helper_datums/butchering.dm
+++ b/code/datums/helper_datums/butchering.dm
@@ -302,6 +302,12 @@
amount = 1 //Only the back left foot is considered lucky.
butcher_time = 10
+/datum/butchering_product/snail_carapace
+ result = /obj/item/clothing/head/helmet/snail_helm
+ verb_name = "remove carapace"
+ verb_gerund = "removing the carapace from"
+ butcher_time = 10
+
#define TEETH_FEW /datum/butchering_product/teeth/few //4-8
#define TEETH_BUNCH /datum/butchering_product/teeth/bunch //8-16
@@ -327,6 +333,7 @@ var/global/list/animal_butchering_products = list(
/mob/living/simple_animal/hostile/deer/flesh = list(/datum/butchering_product/skin/deer, /datum/butchering_product/deer_head),
/mob/living/carbon/monkey = list(/datum/butchering_product/skin/monkey, TEETH_FEW),
/mob/living/simple_animal/rabbit = list(/datum/butchering_product/rabbit_ears, /datum/butchering_product/rabbit_foot),
+ /mob/living/simple_animal/snail = list(/datum/butchering_product/snail_carapace),
/mob/living/carbon/human = list(TEETH_HUMAN, /datum/butchering_product/skin/human),
/mob/living/carbon/human/unathi = list(TEETH_LOTS, /datum/butchering_product/skin/lizard/lots),
diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm
index f43e90d62eb..c29cead8506 100755
--- a/code/datums/supplypacks.dm
+++ b/code/datums/supplypacks.dm
@@ -2165,6 +2165,14 @@ var/list/all_supply_groups = list("Supplies","Clothing","Security","Hospitality"
containername = "cat crate"
group = "Hydroponics"
+/datum/supply_packs/snails
+ name = "Snails"
+ contains = list()
+ cost = 25
+ containertype = /obj/structure/largecrate/snails
+ containername = "snail crate"
+ group = "Hydroponics"
+
/datum/supply_packs/weedcontrol
name = "Weed control equipment"
contains = list(/obj/item/weapon/scythe,
diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm
index 6072424b23f..3dd4a361124 100644
--- a/code/game/objects/structures/crates_lockers/largecrate.dm
+++ b/code/game/objects/structures/crates_lockers/largecrate.dm
@@ -115,4 +115,15 @@
/obj/structure/largecrate/cat/attackby(obj/item/weapon/W, mob/user)
if(iscrowbar(W))
new /mob/living/simple_animal/cat/Proc(loc)
- ..()
\ No newline at end of file
+ ..()
+
+/obj/structure/largecrate/snails
+ icon_state = "lisacrate"
+
+/obj/structure/largecrate/snails/attackby(obj/item/weapon/W, mob/user)
+ if(iscrowbar(W))
+ new /mob/living/simple_animal/snail(loc)
+ new /mob/living/simple_animal/snail(loc)
+ new /mob/living/simple_animal/snail(loc)
+ new /mob/living/simple_animal/snail(loc)
+ ..()
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index a29b93a7bee..4edf75a4641 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -297,4 +297,14 @@
item_state = "chainmail_head"
armor = list(melee = 10, bullet = 15, laser = 2,energy = 2, bomb = 2, bio = 2, rad = 0)
flags = FPRINT
- siemens_coefficient = 1
\ No newline at end of file
+ siemens_coefficient = 1
+
+/obj/item/clothing/head/helmet/snail_helm
+ name = "snail helmet"
+ desc = "You feel arrogant and important just by wearing it."
+ icon_state = "snail_helm"
+ item_state = "snail_helm"
+ armor = list(melee = 10, bullet = 5, laser = 2,energy = 2, bomb = 2, bio = 2, rad = 0)
+ inhand_states = list("left_hand" = 'icons/mob/in-hand/left/hats.dmi', "right_hand" = 'icons/mob/in-hand/right/hats.dmi')
+ flags = FPRINT
+ siemens_coefficient = 1
diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm
index eafaac15ee9..cee75a05487 100644
--- a/code/modules/food/recipes_microwave.dm
+++ b/code/modules/food/recipes_microwave.dm
@@ -2738,14 +2738,14 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/pear
)
result = /obj/item/weapon/reagent_containers/food/snacks/winepear
-
+
/datum/recipe/suppermatter
reagents = list(PLASMA = 5, NITROGEN = 5)
items = list(
/obj/item/weapon/reagent_containers/food/snacks/sliceable/caramelcake
)
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/suppermatter
-
+
/datum/recipe/excitingsuppermatter
reagents = list(PLASMA = 5, OXYGEN = 5)
items = list(
@@ -2775,3 +2775,25 @@
/obj/item/weapon/reagent_containers/food/snacks/grown/peanut,
)
result = /obj/item/weapon/reagent_containers/food/snacks/peanutbutter
+
+/datum/recipe/escargot
+ reagents = list (SODIUMCHLORIDE = 1)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/meat/snail,
+ /obj/item/clothing/head/helmet/snail_helm,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/plumphelmet,
+ /obj/item/weapon/reagent_containers/food/snacks/peanutbutter,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/escargot
+
+/datum/recipe/es_cargo
+ reagents = list (SODIUMCHLORIDE = 1)
+ items = list(
+ /obj/item/weapon/reagent_containers/food/snacks/meat/snail,
+ /obj/item/clothing/head/helmet/snail_helm,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/garlic,
+ /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/plumphelmet,
+ /obj/item/stack/sheet/cardboard,
+ /obj/item/weapon/paper,
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/es_cargo
diff --git a/code/modules/mob/living/holders.dm b/code/modules/mob/living/holders.dm
index 2d8bf6b6ccf..afd7f2f5cbe 100644
--- a/code/modules/mob/living/holders.dm
+++ b/code/modules/mob/living/holders.dm
@@ -167,6 +167,14 @@
item_state = "frog"
slot_flags = SLOT_HEAD
+//SNAIL
+
+/obj/item/weapon/holder/animal/snail
+ name = "snail holder"
+ desc = "Eh, it's all gooey and sticky."
+ item_state = "snail"
+ slot_flags = SLOT_HEAD
+
//SALEM
/obj/item/weapon/holder/animal/salem
diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm
index 815dff07bc6..1b6a0da0c2a 100644
--- a/code/modules/mob/living/simple_animal/friendly/lizard.dm
+++ b/code/modules/mob/living/simple_animal/friendly/lizard.dm
@@ -28,7 +28,7 @@
idle_vision_range = 6
search_objects = 1
- var/static/list/edibles = list(/mob/living/simple_animal/cockroach, /obj/item/weapon/reagent_containers/food/snacks/roach_eggs, /mob/living/simple_animal/bee) //Add bugs to this as they get added in
+ var/static/list/edibles = list(/mob/living/simple_animal/cockroach, /obj/item/weapon/reagent_containers/food/snacks/roach_eggs, /mob/living/simple_animal/bee, /mob/living/simple_animal/snail) //Add bugs to this as they get added in
/mob/living/simple_animal/hostile/lizard/UnarmedAttack(var/atom/A)
if(is_type_in_list(A, edibles))
@@ -93,4 +93,5 @@
icon_living = "smallfrog"
icon_dead = "smallfrog_dead"
speak_emote = list("ribbits")
- holder_type = /obj/item/weapon/holder/animal/frog
\ No newline at end of file
+ holder_type = /obj/item/weapon/holder/animal/frog
+
diff --git a/code/modules/mob/living/simple_animal/snail.dm b/code/modules/mob/living/simple_animal/snail.dm
new file mode 100644
index 00000000000..c82f0ead0e8
--- /dev/null
+++ b/code/modules/mob/living/simple_animal/snail.dm
@@ -0,0 +1,135 @@
+//snail
+/mob/living/simple_animal/snail
+ species_type = /mob/living/simple_animal/snail
+ name = "space snail"
+ desc = "Taking on the world at its own pace. Larger than its cousins down on Earth."
+ icon_state = "snail"
+ icon_living = "snail"
+ icon_dead = "snail_dead"
+ speak_emote = list("") // Silent
+ response_help = "pets"
+ response_disarm = "pokes"
+ response_harm = "stomps on"
+ maxHealth = 12
+ health = 12
+
+ holder_type = /obj/item/weapon/holder/animal/snail
+
+ size = SIZE_TINY
+
+ pass_flags = PASSTABLE | PASSGRILLE | PASSMACHINE
+ stop_automated_movement_when_pulled = 1
+
+ turns_per_move = 8 //8 life ticks / move
+
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/snail
+
+ var/in_shell = 0
+ var/being_romantic = 0
+ var/mob/living/simple_animal/snail/loving_partner = null
+
+/mob/living/simple_animal/snail/Destroy()
+ if (loving_partner)
+ loving_partner.loving_partner = null
+ loving_partner = null
+ return ..()
+
+/mob/living/simple_animal/snail/bite_act(mob/living/carbon/human/H)
+ if(size >= H.size)
+ return
+
+ playsound(H,'sound/items/eatfood.ogg', rand(10,50), 1)
+ H.visible_message("[H] tries to eat \the [src], but hurts \his teeth doing so! The idiot!", "You break your teeth on \the [src]! Imbecile!")
+ return
+
+/mob/living/simple_animal/snail/Life()
+ if (timestopped)
+ return 0
+ if (in_shell)
+ in_shell--
+ return
+ if (!in_shell)
+ icon_state = initial(icon_state)
+ if (being_romantic)
+ being_romantic--
+ if (being_romantic == 0)
+ new /obj/item/weapon/reagent_containers/food/snacks/egg/snail(get_turf(src))
+ visible_message("\The [src] gently goes off its partner.")
+ loving_partner.being_romantic = 0
+ loving_partner.loving_partner = null
+ loving_partner = null
+ return
+ return ..()
+
+/mob/living/simple_animal/snail/Crossed(mob/living/O)
+ if (!in_shell)
+ recoil()
+ return ..()
+
+/mob/living/simple_animal/snail/proc/recoil()
+ if (loving_partner)
+ loving_partner.being_romantic = 0
+ loving_partner.loving_partner = null
+ loving_partner.recoil()
+ being_romantic = 0
+ loving_partner = null
+ icon_state = "snail_recoil"
+ visible_message("\The [src] stops whatever it was doing and recoils into its shell.")
+ in_shell = 5 // Shy for some cycles
+
+/mob/living/simple_animal/snail/wander_move(turf/dest)
+ ..()
+ for(var/mob/living/simple_animal/snail/partner in loc)
+ if (partner.being_romantic)
+ return // the other snail is busy
+
+ if (prob(80))
+ return
+
+ being_romantic = 15
+ loving_partner = partner
+ partner.being_romantic = 15
+ partner.loving_partner = src
+ visible_message("\The [src] begins to softly approach \the [partner]...")
+
+/mob/living/simple_animal/snail/examine(var/mob/user)
+ . = ..()
+ if (in_shell)
+ to_chat(user, "It's currently hiding in its shell.")
+ if (being_romantic)
+ to_chat(user, "It looks pretty busy.")
+
+/mob/living/simple_animal/snail/attackby(var/obj/item/O, var/mob/user, var/no_delay = FALSE, var/originator = null)
+ if (!in_shell)
+ recoil()
+ return ..()
+
+/mob/living/simple_animal/snail/kick_act(mob/living/carbon/human/M)
+ if (!in_shell)
+ recoil()
+ return ..()
+
+/mob/living/simple_animal/snail/airflow_stun()
+ if (!in_shell)
+ recoil()
+ return ..()
+
+/mob/living/simple_animal/snail/airflow_hit(atom/A)
+ if (!in_shell)
+ recoil()
+ return ..()
+
+/mob/living/simple_animal/snail/adjustBruteLoss(var/damage)
+ if (in_shell)
+ return ..(damage/2)
+ return ..()
+
+// -- Greasy snail. Lube up hallways as he go. Tougher than its regular counterpart
+/mob/living/simple_animal/snail/greasy
+ maxHealth = 40
+ health = 40
+
+/mob/living/simple_animal/snail/greasy/wander_move(turf/simulated/dest)
+ if (istype(dest) && prob(20))
+ dest.wet(800, TURF_WET_LUBE)
+ return ..()
diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm
index 5138361960e..424e6c739c4 100644
--- a/code/modules/reagents/reagent_containers/food/snacks.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks.dm
@@ -6241,3 +6241,56 @@ obj/item/weapon/reagent_containers/food/snacks/butterfingers_l
/obj/item/weapon/reagent_containers/food/snacks/breadslice/paibread/attackby(obj/item/I,mob/user,params)
return ..() //sorry no custom pai sandwiches
+
+/obj/item/weapon/reagent_containers/food/snacks/escargot
+ icon_state = "escargot"
+ name = "cooked escargot"
+ desc = "A fine treat and an exquisite cuisine."
+ inhand_states = list("left_hand" = 'icons/mob/in-hand/left/food.dmi', "right_hand" = 'icons/mob/in-hand/right/food.dmi')
+ bitesize = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/escargot/New()
+ . = ..()
+ reagents.add_reagent(NUTRIMENT,10)
+ reagents.add_reagent(SODIUMCHLORIDE, 2)
+ reagents.add_reagent(HOLYWATER, 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/es_cargo
+ icon_state = "es_cargo_closed"
+ name = "es-cargo"
+ desc = "Je-ne-veux-pas-travailler !"
+ bitesize = 1
+ inhand_states = list("left_hand" = 'icons/mob/in-hand/left/food.dmi', "right_hand" = 'icons/mob/in-hand/right/food.dmi')
+ var/open = FALSE
+
+/obj/item/weapon/reagent_containers/food/snacks/es_cargo/New()
+ . = ..()
+ reagents.add_reagent(NUTRIMENT,10)
+ reagents.add_reagent(SODIUMCHLORIDE, 2)
+ reagents.add_reagent(HOLYWATER, 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/es_cargo/can_consume(mob/living/carbon/eater, mob/user)
+ if (!open)
+ visible_message("\The [eater] cannot eat from \the [src] if it's closed, imbecile!","You must first open it!", drugged_message = "Oh lalala, this is not it, not it at all !")
+ return FALSE
+ return ..()
+
+/obj/item/weapon/reagent_containers/food/snacks/es_cargo/attack_self(var/mob/user)
+ if (!open)
+ open = TRUE
+ icon_state = "es_cargo_opened"
+ visible_message("\The [user] opens \the [src]!", drugged_message = "This smells très bon !")
+ return
+ return ..()
+
+/obj/item/weapon/reagent_containers/food/snacks/es_cargo/verb/toggle_open()
+ set name = "Toggle open"
+ set category = "Object"
+ if (!open)
+ open = TRUE
+ icon_state = "es_cargo_opened"
+ visible_message("\The [usr] opens \the [src]!", drugged_message = "This smells très bon !")
+ else
+ open = FALSE
+ icon_state = "es_cargo_closed"
+ visible_message("\The [usr] closes \the [src]!", drugged_message = "Enough for today !")
diff --git a/code/modules/reagents/reagent_containers/food/snacks/egg.dm b/code/modules/reagents/reagent_containers/food/snacks/egg.dm
index 9aa7eed67f6..1e95b7f73ed 100644
--- a/code/modules/reagents/reagent_containers/food/snacks/egg.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks/egg.dm
@@ -143,3 +143,10 @@
new choice(get_turf(src))
processing_objects.Remove(src)
qdel(src)
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/snail
+ name = "snail egg"
+ desc = "Proud and arrogant, even before birth."
+ icon_state = "egg-snail"
+ can_color = FALSE
+ hatch_type = /mob/living/simple_animal/snail
diff --git a/code/modules/reagents/reagent_containers/food/snacks/meat.dm b/code/modules/reagents/reagent_containers/food/snacks/meat.dm
index bf0c42547c5..5d6715ce43a 100644
--- a/code/modules/reagents/reagent_containers/food/snacks/meat.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks/meat.dm
@@ -319,3 +319,14 @@ var/global/list/valid_random_food_types = existing_typesof(/obj/item/weapon/reag
/obj/item/weapon/reagent_containers/food/snacks/meat/slime/New()
..()
reagents.add_reagent(SLIMEJELLY, 10)
+
+
+/obj/item/weapon/reagent_containers/food/snacks/meat/snail
+ icon_state = "snail_meat"
+ name = "snail meat"
+ desc = "How uncivilised ! You cannot be expected to eat that without cooking it, mon Dieu !"
+ inhand_states = list("left_hand" = 'icons/mob/in-hand/left/food.dmi', "right_hand" = 'icons/mob/in-hand/right/food.dmi')
+
+/obj/item/weapon/reagent_containers/food/snacks/meat/snail/New()
+ . = ..()
+ reagents.add_reagent(NUTRIMENT,5)
diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi
index 917c37c0e40..d23a83eabb7 100644
Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index c59c0e796e3..d8e5c25bc1e 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/in-hand/left/food.dmi b/icons/mob/in-hand/left/food.dmi
index d796141f787..656db6cce1c 100644
Binary files a/icons/mob/in-hand/left/food.dmi and b/icons/mob/in-hand/left/food.dmi differ
diff --git a/icons/mob/in-hand/left/hats.dmi b/icons/mob/in-hand/left/hats.dmi
new file mode 100644
index 00000000000..010a4b8fb3a
Binary files /dev/null and b/icons/mob/in-hand/left/hats.dmi differ
diff --git a/icons/mob/in-hand/left/mob_holders.dmi b/icons/mob/in-hand/left/mob_holders.dmi
index c2191432565..7cce1803312 100644
Binary files a/icons/mob/in-hand/left/mob_holders.dmi and b/icons/mob/in-hand/left/mob_holders.dmi differ
diff --git a/icons/mob/in-hand/right/altsuits.dmi b/icons/mob/in-hand/right/altsuits.dmi
index e2acb6bc027..12aaa1d35a5 100644
Binary files a/icons/mob/in-hand/right/altsuits.dmi and b/icons/mob/in-hand/right/altsuits.dmi differ
diff --git a/icons/mob/in-hand/right/food.dmi b/icons/mob/in-hand/right/food.dmi
index e3d2ed9fac6..c1cd3b152e9 100644
Binary files a/icons/mob/in-hand/right/food.dmi and b/icons/mob/in-hand/right/food.dmi differ
diff --git a/icons/mob/in-hand/right/hats.dmi b/icons/mob/in-hand/right/hats.dmi
new file mode 100644
index 00000000000..3e884fd4c12
Binary files /dev/null and b/icons/mob/in-hand/right/hats.dmi differ
diff --git a/icons/mob/in-hand/right/mob_holders.dmi b/icons/mob/in-hand/right/mob_holders.dmi
index 4bf70fa2f38..96e4d813a85 100644
Binary files a/icons/mob/in-hand/right/mob_holders.dmi and b/icons/mob/in-hand/right/mob_holders.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index 4b633a6b5e8..77d7f311888 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/food.dmi b/icons/obj/food.dmi
index 370602b84f2..b3799b99cf5 100644
Binary files a/icons/obj/food.dmi and b/icons/obj/food.dmi differ
diff --git a/vgstation13.dme b/vgstation13.dme
index 5be657e56ba..2ec044b54f7 100644
--- a/vgstation13.dme
+++ b/vgstation13.dme
@@ -1865,6 +1865,7 @@
#include "code\modules\mob\living\simple_animal\shade.dm"
#include "code\modules\mob\living\simple_animal\shade_powers.dm"
#include "code\modules\mob\living\simple_animal\simple_animal.dm"
+#include "code\modules\mob\living\simple_animal\snail.dm"
#include "code\modules\mob\living\simple_animal\vox.dm"
#include "code\modules\mob\living\simple_animal\worm.dm"
#include "code\modules\mob\living\simple_animal\bees\bees_datums.dm"