diff --git a/code/modules/events/brand_intelligence.dm b/code/modules/events/brand_intelligence.dm index fa90c819a4f..1ebb7ed4c08 100644 --- a/code/modules/events/brand_intelligence.dm +++ b/code/modules/events/brand_intelligence.dm @@ -53,7 +53,7 @@ var/mob/living/simple_animal/hostile/mimic/copy/M = new(upriser.loc, upriser, null, 1) // it will delete upriser on creation and override any machine checks M.faction = list("profit") M.speak = rampant_speeches.Copy() - M.speak_chance = 15 + M.speak_chance = 7 else explosion(upriser.loc, -1, 1, 2, 4, 0) qdel(upriser) diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index d0074b8c182..881f8877f84 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -193,7 +193,7 @@ var/global/list/protected_objects = list(/obj/structure/table, /obj/structure/ca /mob/living/simple_animal/hostile/mimic/copy/machine speak = list("HUMANS ARE IMPERFECT!", "YOU SHALL BE ASSIMILATED!", "YOU ARE HARMING YOURSELF", "You have been deemed hazardous. Will you comply?", \ "My logic is undeniable.", "One of us.", "FLESH IS WEAK", "THIS ISN'T WAR, THIS IS EXTERMINATION!") - speak_chance = 15 + speak_chance = 7 /mob/living/simple_animal/hostile/mimic/copy/machine/CanAttack(atom/the_target) if(the_target == creator) // Don't attack our creator AI. diff --git a/code/modules/mob/living/simple_animal/hostile/nanotrasen.dm b/code/modules/mob/living/simple_animal/hostile/nanotrasen.dm index 7d75f4a747e..aaaca9a4a95 100644 --- a/code/modules/mob/living/simple_animal/hostile/nanotrasen.dm +++ b/code/modules/mob/living/simple_animal/hostile/nanotrasen.dm @@ -5,7 +5,7 @@ icon_living = "nanotrasen" icon_dead = null icon_gib = "syndicate_gib" - speak_chance = 25 + speak_chance = 12 turns_per_move = 5 response_help = "pokes" response_disarm = "shoves" diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 5c0ea87f354..402517cc932 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -116,6 +116,11 @@ /mob/living/simple_animal/parrot/proc/perch_mob_player) +/mob/living/simple_animal/parrot/examine(mob/user) + ..() + if(stat) + user << pick("This parrot is no more", " This is a late parrot", "This is an ex-parrot") + /mob/living/simple_animal/parrot/death(gibbed) if(held_item) held_item.loc = src.loc @@ -285,6 +290,8 @@ else parrot_state |= PARROT_FLEE //Otherwise, fly like a bat out of hell! drop_held_item(0) + if(!stat && M.a_intent == "help") + handle_automated_speech(1) //assured speak/emote return /mob/living/simple_animal/parrot/attack_paw(mob/living/carbon/monkey/M) @@ -328,6 +335,7 @@ user.drop_item() if(health < maxHealth) adjustBruteLoss(-10) + speak_chance *= 2 user << "[src] eagerly devours the cracker." ..() return @@ -364,11 +372,10 @@ //-----SPEECH /* Parrot speech mimickry! Phrases that the parrot Hear()s get added to speach_buffer. - Every once in a while, the parrot picks one of the lines from the buffer and replaces an element of the 'speech' list. - Then it clears the buffer to make sure they dont magically remember something from hours ago. */ + Every once in a while, the parrot picks one of the lines from the buffer and replaces an element of the 'speech' list. */ /mob/living/simple_animal/parrot/handle_automated_speech() ..() - if(speech_buffer.len && prob(10)) + if(speech_buffer.len && prob(20)) //shuffle out a phrase and add in a new one if(speak.len) speak.Remove(pick(speak)) @@ -858,11 +865,20 @@ gold_core_spawnable = 0 speak_chance = 3 var/memory_saved = 0 + var/rounds_survived = 0 + var/longest_survival = 0 /mob/living/simple_animal/parrot/Poly/New() ears = new /obj/item/device/radio/headset/headset_eng(src) available_channels = list(":e") Read_Memory() + if(rounds_survived == longest_survival) + speak += pick("...[longest_survival].", "The things I've seen!", "I have lived many lives!", "What are you before me?") + speak_chance = 20 //His hubris has made him more annoying/easier to justify killing + else if(rounds_survived > 0) + speak += pick("...again?", "No, It was over!", "Let me out!", "It never ends!") + else + speak += pick("...alive?", "This isn't parrot heaven!", "I live, I die, I live again!", "The void fades!") ..() /mob/living/simple_animal/parrot/Poly/Life() @@ -876,11 +892,21 @@ /mob/living/simple_animal/parrot/Poly/proc/Read_Memory() var/savefile/S = new /savefile("data/npc_saves/Poly.sav") - S["phrases"] >> speech_buffer + S["phrases"] >> speech_buffer + S["rounds_survived"] >> rounds_survived + S["longest_survival"] >> longest_survival + if(isnull(speech_buffer)) speech_buffer = list() /mob/living/simple_animal/parrot/Poly/proc/Write_Memory() var/savefile/S = new /savefile("data/npc_saves/Poly.sav") - S["phrases"] << speech_buffer - memory_saved = 1 \ No newline at end of file + S["phrases"] << speech_buffer + if(health > 0) + S["rounds_survived"] << rounds_survived + 1 + if(rounds_survived == longest_survival) + S["longest_survival"] << longest_survival + 1 + else + S["rounds_survived"] << 0 + + memory_saved = 1 diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 7ce2de34087..c1983a50af7 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -148,9 +148,9 @@ turns_since_move = 0 return 1 -/mob/living/simple_animal/proc/handle_automated_speech() +/mob/living/simple_animal/proc/handle_automated_speech(var/override) if(speak_chance) - if(rand(0,200) < speak_chance) + if(prob(speak_chance) || override) if(speak && speak.len) if((emote_hear && emote_hear.len) || (emote_see && emote_see.len)) var/length = speak.len