diff --git a/code/modules/food_and_drinks/food/foods/baked_goods.dm b/code/modules/food_and_drinks/food/foods/baked_goods.dm index 1aedaf3f4c7..1115b42014e 100644 --- a/code/modules/food_and_drinks/food/foods/baked_goods.dm +++ b/code/modules/food_and_drinks/food/foods/baked_goods.dm @@ -345,7 +345,7 @@ /obj/item/reagent_containers/food/snacks/donut/sprinkles name = "frosted donut" icon_state = "donut2" - list_reagents = list("nutriment" = 3, "sugar" = 2, "spinkles" = 2) + list_reagents = list("nutriment" = 3, "sugar" = 2, "sprinkles" = 2) filling_color = "#FF69B4" randomized_sprinkles = 0 diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_table.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_table.dm index 8d91fd14258..9bfb1eb4260 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_table.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_table.dm @@ -252,4 +252,12 @@ ) tools = list(/obj/item/kitchen/sushimat) result = /obj/item/reagent_containers/food/snacks/sliceable/Tai_maki + category = CAT_FOOD + +/datum/crafting_recipe/food/cak + name = "Living cat/cake hybrid" + reqs = list( + /obj/item/organ/internal/heart = 1, + ) + result = /mob/living/simple_animal/pet/cat/cak category = CAT_FOOD \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/animal_defense.dm b/code/modules/mob/living/simple_animal/animal_defense.dm index 309a13468a3..636df89885d 100644 --- a/code/modules/mob/living/simple_animal/animal_defense.dm +++ b/code/modules/mob/living/simple_animal/animal_defense.dm @@ -13,7 +13,7 @@ if(INTENT_HARM, INTENT_DISARM) M.do_attack_animation(src, ATTACK_EFFECT_PUNCH) visible_message("[M] [response_harm] [src]!") - playsound(loc, "punch", 25, 1, -1) + playsound(loc, attacked_sound, 25, 1, -1) attack_threshold_check(harm_intent_damage) add_attack_logs(M, src, "Melee attacked with fists") updatehealth() diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index e1d61c5aa55..676dbccc628 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -177,3 +177,94 @@ minbodytemp = 0 melee_damage_lower = 5 melee_damage_upper = 15 + +/mob/living/simple_animal/pet/cat/cak + name = "Keeki" + desc = "It's a cat made out of cake. It looks like a brain would fit into its head." + icon_state = "cak" + icon_living = "cak" + icon_resting = "cak_rest" + icon_dead = "cak_dead" + health = 50 + maxHealth = 50 + harm_intent_damage = 10 + butcher_results = list( + /obj/item/organ/internal/heart = 1, + /obj/item/reagent_containers/food/snacks/birthdaycakeslice = 3, + /obj/item/reagent_containers/food/snacks/meat = 2 + ) + response_harm = "takes a bite out of" + attacked_sound = "sound/items/eatfood.ogg" + deathmessage = "loses its false life and collapses!" + death_sound = "bodyfall" + var/obj/item/organ/internal/brain/brain = null + +/mob/living/simple_animal/pet/cat/cak/Life() + ..() + if(stat) + return + if(health < maxHealth) + adjustBruteLoss(-4) + for(var/obj/item/reagent_containers/food/snacks/donut/D in range(1, src)) + if(D.icon_state != "donut2") + D.name = "frosted donut" + D.icon_state = "donut2" + D.reagents.add_reagent("sprinkles", 2) + D.filling_color = "#FF69B4" + +/mob/living/simple_animal/pet/cat/cak/attackby(obj/item/O, mob/living/user, params) + if(istype(O, /obj/item/organ/internal/brain)) + var/obj/item/organ/internal/brain/B = O + if(brain) //There's already a brain in it. + to_chat(user, "There's already a brain in [src]!") + return + if(!B.brainmob.key) + var/ghost_can_reenter = 0 + if(B.brainmob.mind) + for(var/mob/dead/observer/G in GLOB.player_list) + if(G.can_reenter_corpse && G.mind == B.brainmob.mind) + ghost_can_reenter = 1 + break + for(var/mob/living/simple_animal/S in GLOB.player_list) + if(S in GLOB.respawnable_list) + ghost_can_reenter = 1 + break + if(!ghost_can_reenter) + to_chat(user, "[B] is completely unresponsive; there's no point.") + return + + to_chat(user, "You install [B] in [src]!") + + user.drop_item() + B.forceMove(src) + brain = B + transfer_personality(B) + + return 1 + + + if(istype(O, /obj/item/kitchen/knife)) + to_chat(user, "You cut out the brain from [src].") + eject_brain() + return 1 + + else if(user.a_intent == INTENT_HARM && user.reagents) + user.reagents.add_reagent("nutriment", 0.4) + user.reagents.add_reagent("vitamin", 0.4) + +/mob/living/simple_animal/pet/cat/cak/proc/transfer_personality(obj/item/organ/internal/brain/B) + mind = B.brainmob.mind + mind.key = B.brainmob.key + ckey = B.brainmob.ckey + name = "Keeki" + desc = "It's a cat made out of cake. It looks like a real brain is in it's head." + rename_self("cake cat") + +/mob/living/simple_animal/pet/cat/cak/proc/eject_brain() + var/turf/T = get_turf(src) + brain.forceMove(T) + desc = "It's a cat made out of cake. It looks like a brain would fit into its head." + if(mind) + mind.transfer_to(brain.brainmob) + brain = null + name = "Keeki" \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index a5e7bad699f..27e544e56d6 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -76,6 +76,7 @@ var/sentience_type = SENTIENCE_ORGANIC // Sentience type, for slime potions var/list/loot = list() //list of things spawned at mob's loc when it dies var/del_on_death = 0 //causes mob to be deleted on death, useful for mobs that spawn lootable corpses + var/attacked_sound = "punch" var/deathmessage = "" var/death_sound = null //The sound played on death diff --git a/icons/mob/pets.dmi b/icons/mob/pets.dmi index 4f46db21354..3c3cbddaf93 100644 Binary files a/icons/mob/pets.dmi and b/icons/mob/pets.dmi differ