diff --git a/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm b/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm index bcc2d5e482c..2bca31b4551 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm @@ -38,6 +38,10 @@ speech_chance = 5 emote_hear = list("chitters") +/datum/ai_planning_subtree/random_speech/mothroach + speech_chance = 15 + emote_hear = list("flutters.") + /datum/ai_planning_subtree/random_speech/cow speech_chance = 1 speak = list("moo?","moo","MOOOOOO") diff --git a/code/datums/components/crafting/recipes.dm b/code/datums/components/crafting/recipes.dm index 46120b3cd67..ce0a6190a6e 100644 --- a/code/datums/components/crafting/recipes.dm +++ b/code/datums/components/crafting/recipes.dm @@ -669,6 +669,14 @@ blacklist |= typesof(/obj/item/radio/headset) blacklist |= typesof(/obj/item/radio/intercom) +/datum/crafting_recipe/mothplush + name = "Moth Plushie" + result = /obj/item/toy/plush/moth + reqs = list(/obj/item/stack/sheet/animalhide/mothroach = 1, + /obj/item/organ/internal/heart = 1, + /obj/item/stack/sheet/cloth = 3) + category = CAT_MISC + /datum/crafting_recipe/mixedbouquet name = "Mixed bouquet" result = /obj/item/bouquet diff --git a/code/game/objects/items/food/meat.dm b/code/game/objects/items/food/meat.dm index 83058babc58..717ff038c7a 100644 --- a/code/game/objects/items/food/meat.dm +++ b/code/game/objects/items/food/meat.dm @@ -865,6 +865,15 @@ . = ..() AddElement(/datum/element/swabable, CELL_LINE_TABLE_CORGI, CELL_VIRUS_TABLE_GENERIC_MOB) +/obj/item/food/meat/slab/mothroach + name = "mothroach meat" + desc = "A light slab of meat." + foodtypes = RAW | MEAT | GROSS + +/obj/item/food/meat/slab/mothroach/Initialize(mapload) + . = ..() + AddElement(/datum/element/swabable, CELL_VIRUS_TABLE_GENERIC_MOB) + /obj/item/food/meat/slab/pug name = "pug meat" desc = "Tastes like... well you know..." diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 194c7318ab5..0801fc3ab8a 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -42,6 +42,14 @@ GLOBAL_LIST_INIT(gondola_recipes, list ( \ new/datum/stack_recipe("gondola suit", /obj/item/clothing/under/costume/gondola, 2), \ )) +/obj/item/stack/sheet/animalhide/mothroach + name = "mothroach hide" + desc = "A thin layer of mothroach hide." + singular_name = "mothroach hide piece" + icon_state = "sheet-mothroach" + inhand_icon_state = "sheet-mothroach" + merge_type = /obj/item/stack/sheet/animalhide/mothroach + /obj/item/stack/sheet/animalhide/gondola name = "gondola hide" desc = "The extremely valuable product of gondola hunting." diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index a73dd3b4116..bb4fa3558ee 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -2223,6 +2223,13 @@ contains = list(/mob/living/simple_animal/hostile/retaliate/goat) crate_name = "goat crate" +/datum/supply_pack/critter/mothroach + name = "Mothroach Crate" + desc = "Put the mothroach on your head and find out what true cuteness looks like." + cost = CARGO_CRATE_VALUE * 4 + contains = list(/mob/living/basic/mothroach) + crate_name = "mothroach crate" + /datum/supply_pack/critter/monkey name = "Monkey Cube Crate" desc = "Stop monkeying around! Contains seven monkey cubes. Just add water!" diff --git a/code/modules/mob/living/basic/vermin/mothroach.dm b/code/modules/mob/living/basic/vermin/mothroach.dm new file mode 100644 index 00000000000..59ce9df0a2c --- /dev/null +++ b/code/modules/mob/living/basic/vermin/mothroach.dm @@ -0,0 +1,75 @@ +/mob/living/basic/mothroach + name = "mothroach" + desc = "This is the adorable by-product of multiple attempts at genetically mixing mothpeople with cockroaches." + icon_state = "mothroach" + icon_living = "mothroach" + icon_dead = "mothroach_dead" + held_state = "mothroach" + held_lh = 'icons/mob/animal_item_lh.dmi' + held_rh = 'icons/mob/animal_item_rh.dmi' + head_icon = 'icons/mob/animal_item_head.dmi' + butcher_results = list(/obj/item/food/meat/slab/mothroach = 3, /obj/item/stack/sheet/animalhide/mothroach = 1) + mob_biotypes = MOB_ORGANIC|MOB_BUG + mob_size = MOB_SIZE_SMALL + mobility_flags = MOBILITY_FLAGS_REST_CAPABLE_DEFAULT + health = 25 + maxHealth = 25 + speed = 1.25 + gold_core_spawnable = FRIENDLY_SPAWN + can_be_held = TRUE + worn_slot_flags = ITEM_SLOT_HEAD + + verb_say = "flutters" + verb_ask = "flutters inquisitively" + verb_exclaim = "flutters loudly" + verb_yell = "flutters loudly" + response_disarm_continuous = "shoos" + response_disarm_simple = "shoo" + response_harm_continuous = "hits" + response_harm_simple = "hit" + response_help_continuous = "pats" + response_help_simple = "pat" + + faction = list("neutral") + + ai_controller = /datum/ai_controller/basic_controller/mothroach + +/mob/living/basic/mothroach/Initialize(mapload) + . = ..() + AddElement(/datum/element/pet_bonus, "squeaks happily!") + add_verb(src, /mob/living/proc/toggle_resting) + ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) + +/mob/living/basic/mothroach/toggle_resting() + . = ..() + if(stat == DEAD) + return + if (resting) + icon_state = "[icon_living]_rest" + else + icon_state = "[icon_living]" + regenerate_icons() + +/mob/living/basic/mothroach/attack_hand(mob/living/carbon/human/user, list/modifiers) + . = ..() + if(src.stat == DEAD) + return + else + playsound(loc, 'sound/voice/moth/scream_moth.ogg', 50, TRUE) + +/mob/living/basic/mothroach/attackby(obj/item/attacking_item, mob/living/user, params) + . = ..() + if(src.stat == DEAD) + return + else + playsound(loc, 'sound/voice/moth/scream_moth.ogg', 50, TRUE) + +/datum/ai_controller/basic_controller/mothroach + blackboard = list() + + ai_traits = STOP_MOVING_WHEN_PULLED + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + planning_subtrees = list( + /datum/ai_planning_subtree/random_speech/mothroach, + ) diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi index e95e2174722..1a2cf9c36ea 100644 Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ diff --git a/icons/mob/animal_item_head.dmi b/icons/mob/animal_item_head.dmi index 74621ba0e80..6afabf22f76 100644 Binary files a/icons/mob/animal_item_head.dmi and b/icons/mob/animal_item_head.dmi differ diff --git a/icons/mob/animal_item_lh.dmi b/icons/mob/animal_item_lh.dmi new file mode 100644 index 00000000000..7fceda1454e Binary files /dev/null and b/icons/mob/animal_item_lh.dmi differ diff --git a/icons/mob/animal_item_rh.dmi b/icons/mob/animal_item_rh.dmi new file mode 100644 index 00000000000..5c354bdd99b Binary files /dev/null and b/icons/mob/animal_item_rh.dmi differ diff --git a/icons/obj/stack_objects.dmi b/icons/obj/stack_objects.dmi index 95d07d25dbc..0639e3ebc05 100644 Binary files a/icons/obj/stack_objects.dmi and b/icons/obj/stack_objects.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 32d56ef6443..0dc1a8fddb3 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3461,6 +3461,7 @@ #include "code\modules\mob\living\basic\farm_animals\cows.dm" #include "code\modules\mob\living\basic\ruin_defender\stickman.dm" #include "code\modules\mob\living\basic\vermin\cockroach.dm" +#include "code\modules\mob\living\basic\vermin\mothroach.dm" #include "code\modules\mob\living\brain\brain.dm" #include "code\modules\mob\living\brain\brain_item.dm" #include "code\modules\mob\living\brain\brain_say.dm"