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"