diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index b9b526514b..6467990776 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -424,6 +424,41 @@ setDir(i) sleep(1) +/mob/living/simple_animal/pet/dog/corgi/Ian/narsie_act() + playsound(src, 'sound/magic/demon_dies.ogg', 75, TRUE) + var/mob/living/simple_animal/pet/dog/corgi/narsie/N = new(loc) + N.setDir(dir) + gib() + +/mob/living/simple_animal/pet/dog/corgi/narsie + name = "Nars-Ian" + desc = "Ia! Ia!" + icon_state = "narsian" + icon_living = "narsian" + icon_dead = "narsian_dead" + faction = list("dog", "cult") + gold_core_spawnable = FALSE + nofur = TRUE + +/mob/living/simple_animal/pet/dog/corgi/narsie/Life() + ..() + for(var/mob/living/simple_animal/pet/P in range(1, src)) + if(P != src && prob(5)) + visible_message("[src] devours [P]!", \ + "DELICIOUS SOULS") + playsound(src, 'sound/magic/demon_attack1.ogg', 75, TRUE) + narsie_act() + P.gib() + +/mob/living/simple_animal/pet/dog/corgi/narsie/update_corgi_fluff() + ..() + speak = list("Tari'karat-pasnar!", "IA! IA!", "BRRUUURGHGHRHR") + speak_emote = list("growls", "barks ominously") + emote_hear = list("barks echoingly!", "woofs hauntingly!", "yaps in an eldritch manner.", "mutters something unspeakable.") + emote_see = list("communes with the unnameable.", "ponders devouring some souls.", "shakes.") + +/mob/living/simple_animal/pet/dog/corgi/narsie/narsie_act() + adjustBruteLoss(-maxHealth) /mob/living/simple_animal/pet/dog/corgi/regenerate_icons() diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 6357f83286..3c1a5771c3 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -33,6 +33,7 @@ icon_state = "parrot_fly" icon_living = "parrot_fly" icon_dead = "parrot_dead" + var/icon_sit = "parrot_sit" density = FALSE health = 80 maxHealth = 80 @@ -284,7 +285,7 @@ return if(!stat && M.a_intent == INTENT_HARM) - icon_state = "parrot_fly" //It is going to be flying regardless of whether it flees or attacks + icon_state = icon_living //It is going to be flying regardless of whether it flees or attacks if(parrot_state == PARROT_PERCH) parrot_sleep_dur = parrot_sleep_max //Reset it's sleep timer if it was perched @@ -320,7 +321,7 @@ if(M.melee_damage_upper > 0 && !stat) parrot_interest = M parrot_state = PARROT_SWOOP | PARROT_ATTACK //Attack other animals regardless - icon_state = "parrot_fly" + icon_state = icon_living //Mobs with objects /mob/living/simple_animal/parrot/attackby(obj/item/O, mob/living/user, params) @@ -335,7 +336,7 @@ parrot_state |= PARROT_ATTACK else parrot_state |= PARROT_FLEE - icon_state = "parrot_fly" + icon_state = icon_living drop_held_item(0) else if(istype(O, /obj/item/reagent_containers/food/snacks/cracker)) //Poly wants a cracker. qdel(O) @@ -358,7 +359,7 @@ parrot_interest = null parrot_state = PARROT_WANDER | PARROT_FLEE //Been shot and survived! RUN LIKE HELL! //parrot_been_shot += 5 - icon_state = "parrot_fly" + icon_state = icon_living drop_held_item(0) return @@ -371,7 +372,7 @@ //Sprite update for when a parrot gets pulled if(pulledby && stat == CONSCIOUS) - icon_state = "parrot_fly" + icon_state = icon_living if(!client) parrot_state = PARROT_WANDER return @@ -400,11 +401,11 @@ if(parrot_perch && parrot_perch.loc != src.loc) //Make sure someone hasnt moved our perch on us if(parrot_perch in view(src)) parrot_state = PARROT_SWOOP | PARROT_RETURN - icon_state = "parrot_fly" + icon_state = icon_living return else parrot_state = PARROT_WANDER - icon_state = "parrot_fly" + icon_state = icon_living return if(--parrot_sleep_dur) //Zzz @@ -445,7 +446,7 @@ if(parrot_interest) emote("me", 1, "looks in [parrot_interest]'s direction and takes flight.") parrot_state = PARROT_SWOOP | PARROT_STEAL - icon_state = "parrot_fly" + icon_state = icon_living return //-----WANDERING - This is basically a 'I dont know what to do yet' state @@ -530,7 +531,7 @@ src.loc = parrot_perch.loc drop_held_item() parrot_state = PARROT_PERCH - icon_state = "parrot_sit" + icon_state = icon_sit return walk_to(src, parrot_perch, 1, parrot_speed) @@ -603,8 +604,8 @@ */ /mob/living/simple_animal/parrot/movement_delay() - if(client && stat == CONSCIOUS && parrot_state != "parrot_fly") - icon_state = "parrot_fly" + if(client && stat == CONSCIOUS && parrot_state != icon_living) + icon_state = icon_living //Because the most appropriate place to set icon_state is movement_delay(), clearly return ..() @@ -797,12 +798,12 @@ if(stat || !client) return - if(icon_state == "parrot_fly") + if(icon_state == icon_living) for(var/atom/movable/AM in view(src,1)) for(var/perch_path in desired_perches) if(istype(AM, perch_path)) src.loc = AM.loc - icon_state = "parrot_sit" + icon_state = icon_sit return to_chat(src, "There is no perch nearby to sit on!") return @@ -816,7 +817,7 @@ if(stat || !client) return - if(icon_state == "parrot_fly") + if(icon_state == icon_living) for(var/mob/living/carbon/human/H in view(src,1)) if(H.has_buckled_mobs() && H.buckled_mobs.len >= H.max_buckled_mobs) //Already has a parrot, or is being eaten by a slime continue @@ -824,7 +825,7 @@ return to_chat(src, "There is nobody nearby that you can sit on!") else - icon_state = "parrot_fly" + icon_state = icon_living parrot_state = PARROT_WANDER if(buckled) to_chat(src, "You are no longer sitting on [buckled]'s shoulder.") @@ -842,7 +843,7 @@ H.buckle_mob(src, force=1) pixel_y = 9 pixel_x = pick(-8,8) //pick left or right shoulder - icon_state = "parrot_sit" + icon_state = icon_sit parrot_state = PARROT_PERCH to_chat(src, "You sit on [H]'s shoulder.") @@ -961,6 +962,12 @@ fdel(json_file) WRITE_FILE(json_file, json_encode(file_data)) +/mob/living/simple_animal/parrot/Poly/ratvar_act() + playsound(src, 'sound/magic/clockwork/fellowship_armory.ogg', 75, TRUE) + var/mob/living/simple_animal/parrot/clock_hawk/H = new(loc) + H.setDir(dir) + dust() + /mob/living/simple_animal/parrot/Poly/ghost name = "The Ghost of Poly" desc = "Doomed to squawk the earth." @@ -996,4 +1003,27 @@ loc = H H.ContractDisease(P) parrot_interest = null - H.visible_message("[src] dive bombs into [H]'s chest and vanishes!", "[src] dive bombs into your chest, vanishing! This can't be good!") \ No newline at end of file +<<<<<<< HEAD + H.visible_message("[src] dive bombs into [H]'s chest and vanishes!", "[src] dive bombs into your chest, vanishing! This can't be good!") +======= + H.visible_message("[src] dive bombs into [H]'s chest and vanishes!", "[src] dive bombs into your chest, vanishing! This can't be good!") + + +/mob/living/simple_animal/parrot/clock_hawk + name = "clock hawk" + desc = "Cbyl jnaan penpxre! Fdhnnnjx!" + icon_state = "clock_hawk_fly" + icon_living = "clock_hawk_fly" + icon_sit = "clock_hawk_sit" + speak = list("Penpxre!", "Ratvar vf n qhzo anzr naljnl!") + speak_emote = list("squawks rustily", "says crassly", "yells brassly") + emote_hear = list("squawks rustily.", "bawks metallically!") + emote_see = list("flutters its metal wings.") + faction = list("ratvar") + gold_core_spawnable = FALSE + del_on_death = TRUE + death_sound = 'sound/magic/clockwork/anima_fragment_death.ogg' + +/mob/living/simple_animal/parrot/clock_hawk/ratvar_act() + return +>>>>>>> 60d3ce5... Adds Nars-Ian and clock hawks (#30856) diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi index 038514d22a..b860bd8426 100644 Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ diff --git a/icons/mob/pets.dmi b/icons/mob/pets.dmi index e852426e62..647781e2b1 100644 Binary files a/icons/mob/pets.dmi and b/icons/mob/pets.dmi differ