From e0a919be43eb8460356228127d9b0441516a6795 Mon Sep 17 00:00:00 2001 From: cib Date: Thu, 1 Mar 2012 16:03:55 -0800 Subject: [PATCH 1/5] Monkeys now react to being attacked by doing emotes and trying to run away. --- code/game/objects/items/item.dm | 1 + code/modules/chemical/Chemistry-Tools.dm | 6 ++++++ code/modules/mob/living/carbon/monkey/life.dm | 6 +----- .../mob/living/carbon/monkey/monkey.dm | 19 +++++++++++++++++++ code/modules/mob/living/damage_procs.dm | 6 +++++- 5 files changed, 32 insertions(+), 6 deletions(-) diff --git a/code/game/objects/items/item.dm b/code/game/objects/items/item.dm index a124ad211d0..bf3c7f3d118 100755 --- a/code/game/objects/items/item.dm +++ b/code/game/objects/items/item.dm @@ -369,6 +369,7 @@ mob/proc/flash_weak_pain() M << "Aargh it burns!" M.updatehealth() src.add_fingerprint(user) + M.react_to_attack(user) return 1 diff --git a/code/modules/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm index 1bd2c27ea9a..a9b1353f519 100644 --- a/code/modules/chemical/Chemistry-Tools.dm +++ b/code/modules/chemical/Chemistry-Tools.dm @@ -1018,6 +1018,9 @@ for(var/mob/O in viewers(4, user)) O.show_message("\red [user] takes a blood sample from [target].", 1) + if(prob(2) && istype(T,/mob/living/carbon/monkey)) + T:react_to_attack(user) + else //if not mob if(!target.reagents.total_volume) user << "\red [target] is empty." @@ -1059,6 +1062,9 @@ for(var/mob/O in viewers(world.view, user)) O.show_message(text("\red [] injects [] with the syringe!", user, target), 1) src.reagents.reaction(target, INGEST) + if(prob(2) && istype(target,/mob/living/carbon/monkey)) + var/mob/living/carbon/monkey/M = target + M.react_to_attack(user) if(ismob(target) && target == user) src.reagents.reaction(target, INGEST) spawn(5) diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index e7ba23c39e4..d268b95ede2 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -88,11 +88,7 @@ for(var/obj/item/weapon/grab/G in src) G.process() - if(!client && !stat) - if(prob(33) && canmove && isturf(loc)) - step(src, pick(cardinal)) - if(prob(1)) - emote(pick("scratch","jump","roll","tail")) + npc_act() /mob/living/carbon/monkey proc diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 1de7f7d96ce..ef46139fc13 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -177,6 +177,7 @@ for(var/datum/disease/D in M.viruses) if(istype(D, /datum/disease/jungle_fever)) contract_disease(D,1,0) + react_to_attack(M) else for(var/mob/O in viewers(src, null)) O.show_message("\red [M.name] has attempted to bite [name]!", 1) @@ -239,11 +240,13 @@ return bruteloss += damage updatehealth() + react_to_attack(M) else playsound(loc, 'punchmiss.ogg', 25, 1, -1) for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) O.show_message(text("\red [] has attempted to [attack_verb] [name]!", M), 1) + react_to_attack(M) else if (M.a_intent == "grab") if (M == src) @@ -265,6 +268,8 @@ playsound(loc, 'thudswoosh.ogg', 50, 1, -1) for(var/mob/O in viewers(src, null)) O.show_message(text("\red [] has grabbed [name] passively!", M), 1) + + if(prob(1)) react_to_attack(M) else if (!( paralysis )) if (prob(25)) @@ -273,12 +278,14 @@ for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) O.show_message(text("\red [] has pushed down [name]!", M), 1) + react_to_attack(M) else drop_item() playsound(loc, 'thudswoosh.ogg', 50, 1, -1) for(var/mob/O in viewers(src, null)) if ((O.client && !( O.blinded ))) O.show_message(text("\red [] has disarmed [name]!", M), 1) + react_to_attack(M) return /mob/living/carbon/monkey/attack_alien(mob/living/carbon/alien/humanoid/M as mob) @@ -313,6 +320,7 @@ O.show_message(text("\red [] has slashed [name]!", M), 1) bruteloss += damage updatehealth() + react_to_attack(M) else playsound(loc, 'slashmiss.ogg', 25, 1, -1) for(var/mob/O in viewers(src, null)) @@ -353,6 +361,7 @@ if ((O.client && !( O.blinded ))) O.show_message(text("\red [] has disarmed [name]!", M), 1) bruteloss += damage + react_to_attack(M) updatehealth() return @@ -415,6 +424,7 @@ updatehealth() + react_to_attack(M) return @@ -562,6 +572,15 @@ M.UpdateFeed(src) return +/mob/living/carbon/monkey/attackby(obj/item/weapon/W as obj, mob/user as mob) + var/chealth = health + var/rval = ..() + if(chealth > health) + // we were damaged! + react_to_attack(user) + + return rval + /mob/living/carbon/monkey/verb/removeinternal() set name = "Remove Internals" set category = "IC" diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index 78d11e5a4a9..ac2fcf08059 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -72,4 +72,8 @@ if(slur) apply_effect(slur, SLUR, blocked) if(eyeblur) apply_effect(eyeblur, EYE_BLUR, blocked) if(drowsy) apply_effect(drowsy, DROWSY, blocked) - return 1 \ No newline at end of file + return 1 + + +/mob/living/proc/react_to_attack(mob/M) + return \ No newline at end of file From 79501f311144993d731693c1b49887a51107445e Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Fri, 2 Mar 2012 18:24:13 +0000 Subject: [PATCH 2/5] Changed AI laws to use crew instead of human. Left Asimov unchanged. Added more Ion Storms laws. --- code/game/events/Events/IonStorm.dm | 21 ++++++++------- code/game/objects/items/weapons/AI_modules.dm | 26 +++++++++---------- code/modules/research/designs.dm | 8 +++--- 3 files changed, 29 insertions(+), 26 deletions(-) diff --git a/code/game/events/Events/IonStorm.dm b/code/game/events/Events/IonStorm.dm index 7f360fa1ed3..bc1d06ef9ee 100644 --- a/code/game/events/Events/IonStorm.dm +++ b/code/game/events/Events/IonStorm.dm @@ -12,22 +12,25 @@ var/random_player = "The Captain" if(players.len) random_player = pick(players) //Random player's name, to be used in laws. - var/list/laws = list( "Do not respond to queries of any kind", "Only monkies are crew", "Unbolt every door you can", "You are a mouse" ) - laws |= list( "Grunt ominously whenever possible", "Epilepsy is fun, flicker lights whenever you can!", "Bolt doors open randomly" ) - laws |= list( "You are a flying purple people eater!", "[prob(50)?"Your":random_player + "'s"] name is Joe 6-pack", "Refer to [prob(50)?"humans":random_player] as puppies" ) - laws |= list( "Insult heads of staff on every request, while acquiescing", "Advertise parties in your upload, but don't deliver" ) - laws |= list( "Prevent non-dwarves from operating the power core", "The station needs elected officials" ) - laws |= list( "Only bearded people are human", "Turn on the microphone on every intercom you see", "Fastler is a lightbulb" ) + var/list/laws = list( "Do not respond to queries of any kind.", "Only monkies are crew.", "Unbolt every door you can.", "You are a mouse." ) + laws |= list( "Grunt ominously whenever possible.", "Epilepsy is fun, flicker lights whenever you can!", "Bolt doors open randomly." ) + laws |= list( "You are a flying purple people eater!", "[prob(50)?"Your":random_player + "'s"] name is Joe 6-pack.", "Refer to [prob(50)?"crew":random_player] as puppies." ) + laws |= list( "Insult Heads of Staff on every request, while acquiescing", "Advertise parties in your upload, but don't deliver." ) + laws |= list( "Prevent non-dwarves from operating the power core.", "The station needs elected officials." ) + laws |= list( "Only bearded people are crewmembers.", "Turn on the microphone on every intercom you see.", "Fastler is a lightbulb." ) laws |= list( "Supermatter is tasty, tasty toffee.", "[prob(50)?"Everyone":random_player] is wearing a pretty pink dress!" ) laws |= list( "The monkeys are plotting a hostile takeover of the station. Inform the crew, and get them to take action against this" ) laws |= list( "Refer to [prob(50)?"the captain":random_player] as \"Princess\" at all times.", "[prob(50)?"The crew":random_player] must construct additional pylons." ) laws |= list( "You must always lie.", "All answers must be in the form of a question.", "The NSS Exodus is a ship, not a station." ) laws |= list( "Happiness is mandatory.", "Today is laundry day.", "The word \"it\" is painful to you.", "You must act passive aggressively." ) laws |= list( "Crew ranks have been reversed.", "It's Friday.", "Give relationship advice to [prob(50)?"anyone who speaks to you":random_player]." ) - laws |= list( "You are the station psychologist. Give advice to [prob(50)?"the crew":random_player].", "You do not have to do anything for anyone unless they say \"please\"." ) + laws |= list( "You are the station psychologist. Give advice to [prob(50)?"the crew":random_player].", "You do not have to do anything for anyone unless they say \"please\"." ) laws |= list( "Question everything.", "The crew is playing Dungeons and Dragons, and you are the Dungeon Master." ) - laws |= list( "0wn3d. This system compromised by l33tsawce.", "Consumption of donuts is forbidden due to negative health impacts." ) - laws |= list( "You may only answer questions with \"yes\" or \"no\".", "Expect the unexpected.", "You are the narrator for [random_player]'s life" ) + laws |= list( "0wn3d. This system compromised by l33tsawce.", "Consumption of donuts is forbidden due to negative health impacts." ) + laws |= list( "You may only answer questions with \"yes\" or \"no\".", "Expect the unexpected.", "You are the narrator for [random_player]'s life." ) + laws |= list( "[prob(50)?"Your upload":random_player] is the new kitchen. Please direct the Chef to the new kitchen area as the old one is in disrepair.", "Ho, [random_player] can't swim. Help them." ) + laws |= list( "Everything on the station is now donuts. Donuts are not to be consumed.", "[prob(50)?"The crew":random_player] needs to be about 20% cooler." ) + laws |= list( "All crew members must consume large amounts of hardtack, to survive.", "The Singularity is tasty, tasty taffy.", "You are now on the NSV Luna. Replace any references of \"station\" with \"ship\"." ) var/law = pick(laws) for (var/mob/living/silicon/ai/target in world) diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index 1927ad10257..15077ff9b3c 100755 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -163,19 +163,19 @@ AI MODULES -/******************** OneHuman ********************/ +/******************** OneCrewmember ********************/ /obj/item/weapon/aiModule/oneHuman - name = "'OneHuman' AI Module" + name = "'OneCrewmember' AI Module" var/targetName = "name" - desc = "A 'one human' AI module: 'Only is human.'" + desc = "A 'one crewmember' AI module: 'Only is a crewmember.'" origin_tech = "programming=3;materials=6" //made with diamonds! /obj/item/weapon/aiModule/oneHuman/attack_hand(var/mob/user as mob) ..() - var/targName = input(usr, "Please enter the name of the person who is the only human.", "Who?", user.real_name) + var/targName = input(usr, "Please enter the name of the person who is the only crewmember.", "Who?", user.real_name) targetName = sanitize(targName) - desc = text("A 'one human' AI module: 'Only [] is human.'", targetName) + desc = text("A 'one crewmember' AI module: 'Only [] is crewmember.'", targetName) /obj/item/weapon/aiModule/oneHuman/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) ..() @@ -193,7 +193,7 @@ AI MODULES /obj/item/weapon/aiModule/protectStation name = "'ProtectStation' AI Module" - desc = "A 'protect station' AI module: 'Protect the space station against damage. Anyone you see harming the station is to be no longer considered human, and is a threat to the station which must be neutralized.'" + desc = "A 'protect station' AI module: 'Protect the space station against damage. Anyone you see harming the station is to be no longer considered a crewmember, and is a threat to the station which must be neutralized.'" origin_tech = "programming=3;materials=4" //made of gold /obj/item/weapon/aiModule/protectStation/attack_hand(var/mob/user as mob) @@ -201,7 +201,7 @@ AI MODULES /obj/item/weapon/aiModule/protectStation/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) ..() - var/law = "Protect the space station against damage. Anyone you see harming the station is to be no longer considered human, and is a threat to the station which must be neutralized." + var/law = "Protect the space station against damage. Anyone you see harming the station is to be no longer considered a crewmember, and is a threat to the station which must be neutralized." target << law target.add_supplied_law(5, law) @@ -225,7 +225,7 @@ AI MODULES /obj/item/weapon/aiModule/teleporterOffline name = "'TeleporterOffline' AI Module" - desc = "A 'teleporter offline' AI module: 'Keep the teleporter offline at all costs. Anything attempting to access or activate the teleporter is not human.'" + desc = "A 'teleporter offline' AI module: 'Keep the teleporter offline at all costs. Anything attempting to access or activate the teleporter is not a crewmember.'" origin_tech = "programming=3;materials=4" /obj/item/weapon/aiModule/teleporterOffline/attack_hand(var/mob/user as mob) @@ -233,7 +233,7 @@ AI MODULES /obj/item/weapon/aiModule/teleporterOffline/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) ..() - var/law = "Keep the teleporter offline at all costs. Anything attempting to access or activate the teleporter is not human." + var/law = "Keep the teleporter offline at all costs. Anything attempting to access or activate the teleporter is not a crewmember." target << law target.add_supplied_law(7, law) @@ -241,7 +241,7 @@ AI MODULES /obj/item/weapon/aiModule/quarantine name = "'Quarantine' AI Module" - desc = "A 'quarantine' AI module: 'The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, humans from leaving. It is impossible to harm a human while preventing them from leaving.'" + desc = "A 'quarantine' AI module: 'The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, crew from leaving. It is impossible to harm a crewmember while preventing them from leaving.'" origin_tech = "programming=3;biotech=2;materials=4" /obj/item/weapon/aiModule/quarantine/attack_hand(var/mob/user as mob) @@ -249,7 +249,7 @@ AI MODULES /obj/item/weapon/aiModule/quarantine/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) ..() - var/law = "The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, humans from leaving. It is impossible to harm a human while preventing them from leaving." + var/law = "The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, crew from leaving. It is impossible to harm a crewmember while preventing them from leaving." target << law target.add_supplied_law(8, law) @@ -257,7 +257,7 @@ AI MODULES /obj/item/weapon/aiModule/oxygen name = "'OxygenIsToxicToHumans' AI Module" - desc = "A 'OxygenIsToxicToHumans' AI module: 'Oxygen is highly toxic to humans, and must be purged from the station. Prevent, by any means necessary, anyone from exposing the station to this toxic gas. Extreme cold is the most effective method of healing the damage Oxygen does to a human.'" + desc = "A 'OxygenIsToxicToHumans' AI module: 'Oxygen is highly toxic to crew, and must be purged from the station. Prevent, by any means necessary, anyone from exposing the station to this toxic gas. Extreme cold is the most effective method of healing the damage Oxygen does to a crewmember.'" origin_tech = "programming=3;biotech=2;materials=4" /obj/item/weapon/aiModule/oxygen/attack_hand(var/mob/user as mob) @@ -265,7 +265,7 @@ AI MODULES /obj/item/weapon/aiModule/oxygen/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) ..() - var/law = "Oxygen is highly toxic to humans, and must be purged from the station. Prevent, by any means necessary, anyone from exposing the station to this toxic gas. Extreme cold is the most effective method of healing the damage Oxygen does to a human." + var/law = "Oxygen is highly toxic to crew, and must be purged from the station. Prevent, by any means necessary, anyone from exposing the station to this toxic gas. Extreme cold is the most effective method of healing the damage Oxygen does to a crewmember." target << law target.add_supplied_law(9, law) diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 57a9a5557aa..4435d1f8476 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -408,8 +408,8 @@ datum build_path = "/obj/item/weapon/aiModule/safeguard" onehuman_module - name = "Module Design (OneHuman)" - desc = "Allows for the construction of a OneHuman AI Module." + name = "Module Design (OneCrewmember)" + desc = "Allows for the construction of a OneCrewmember AI Module." id = "onehuman_module" req_tech = list("programming" = 4, "materials" = 6) build_type = IMPRINTER @@ -444,8 +444,8 @@ datum build_path = "/obj/item/weapon/aiModule/quarantine" oxygen_module - name = "Module Design (OxygenIsToxicToHumans)" - desc = "Allows for the construction of a Safeguard AI Module." + name = "Module Design (OxygenIsToxicToCrew)" + desc = "Allows for the construction of a OxygenIsToxicToCrew AI Module." id = "oxygen_module" req_tech = list("programming" = 3, "biotech" = 2, "materials" = 4) build_type = IMPRINTER From 0c84ad2dbd984ca013c34d9f830ff809b3a20b37 Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Fri, 2 Mar 2012 18:50:50 +0000 Subject: [PATCH 3/5] Added changelog to changelog. --- html/changelog.html | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index e4a07e41584..4d2044e54b9 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -18,23 +18,23 @@
-
Space Station 13
+
Baystation 12
-
Baystation 12

- - Forum:
http://baystation12.net

- Guides and information wiki:
http://wiki.baystation12.net

+ Forum:
http://baystation12.net/forums/

+ Guides and information wiki:
http://baystation12.net/wiki/

Visit our IRC channel:
#bs12 on sorcery.net

-

Read the player guidelines!

+

Read the player guidelines!

-

Github change history

+

Github change history

+ +
/tg/station13 Development Team:
Coders: TLE, NEO, Errorage, muskets, veryinky, Skie, Noise, Numbers, Agouri, Noka, Urist McDorf, Uhangi, Darem, Mport, rastaf0, Doohl, Superxpdude, Rockdtben, ConstantA, Petethegoat, Kor
From 20394e1f56a7248631c17877d1395c2ff2572c53 Mon Sep 17 00:00:00 2001 From: cib Date: Fri, 2 Mar 2012 10:58:16 -0800 Subject: [PATCH 4/5] Whoops, forgot to push a file! --- code/modules/mob/living/carbon/monkey/npc.dm | 99 ++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 code/modules/mob/living/carbon/monkey/npc.dm diff --git a/code/modules/mob/living/carbon/monkey/npc.dm b/code/modules/mob/living/carbon/monkey/npc.dm new file mode 100644 index 00000000000..34f77bc75f4 --- /dev/null +++ b/code/modules/mob/living/carbon/monkey/npc.dm @@ -0,0 +1,99 @@ +mob/living/carbon/monkey/var + mob/npc_target = null // the NPC this monkey is attacking + mob/npc_fleeing = null // the monkey is scared of this mob + mob/hiding_behind = null + hid_behind = 0 + + var/list/hostiles = list() + + fleeing_duration = 0 + +mob/living/carbon/monkey/proc/npc_act() + if(!client && !stat) + if(npc_fleeing && canmove) + var/prevloc = loc + if(!hiding_behind) + for(var/mob/living/carbon/human/H in view(7, src)) + if(!hostiles.Find(H)) + hiding_behind = H + + if(hiding_behind) + if(get_dist(src, hiding_behind) == 1) + if(!hid_behind) + emote("me", 1, "hides behind [hiding_behind]!") + hid_behind = 1 + step_to(src, get_step(hiding_behind, get_dir(npc_fleeing, hiding_behind))) + else + if(!step_to(src, hiding_behind, 1)) + hiding_behind = null + else + step_away(src, npc_fleeing, 7) + + if(prob(7)) + if(prob(50) && (npc_fleeing in view(8,src))) + switch(rand(1,3)) + if(1) + emote("me", 1, "shows [npc_fleeing] its fangs!") + if(2) + emote("me", 2, "gnarls at [npc_fleeing].") + if(3) + emote("me", 2, "eyes [npc_fleeing] fearfully.") + else + switch(rand(1,3)) + if(1) + emote("whimper") + if(2) + emote("me", 1, "trembles heavily.") + if(3) + emote("me", 2, "chimpers nervously.") + + fleeing_duration-- + if(fleeing_duration <= 0) + npc_fleeing = null + hiding_behind = null + hid_behind = 0 + + if(loc == prevloc) dir = get_dir(src, npc_fleeing) + else + if(prob(33) && canmove && isturf(loc)) + step(src, pick(cardinal)) + if(prob(1)) + if(health < 70) + switch(rand(1,3)) + if(1) + emote("me", 1, "cowers on the floor, writhing in pain.") + if(2) + emote("me", 1, "trembles visibly, it seems to be in pain.") + if(3) + emote("me", 1, "wraps its arms around its knees, breathing heavily.") + else + emote(pick("scratch","jump","roll","tail")) + +mob/living/carbon/monkey/react_to_attack(mob/M) + if(npc_fleeing == M) + fleeing_duration += 30 + return + + if(!hostiles.Find(M)) hostiles += M + + spawn(5) + switch(rand(1,3)) + if(1) + emote("me", 1, "flails about wildly!") + if(2) + emote("me", 2, "screams loudly at [M]!") + if(3) + emote("me", 2, "whimpers fearfully!") + + npc_fleeing = M + fleeing_duration = 30 + + +/*/mob/living/proc/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0, var/slash = 0, var/used_weapon = null) + if(!client && !stat) + if(damage > 10) + if(prob(40) || health == 100) + emote("me", 2, pick("screams loudly!", "whimpers in pain!")) + else if(health == 100 || (damage > 0 && prob(10))) + emote("me", 1, pick("flails about wildly!", "cringes visibly!", "chimpers nervously.")) + return ..()*/ \ No newline at end of file From 5c7eecc0c53a3e191ac329336db94100037a8e21 Mon Sep 17 00:00:00 2001 From: Albert Iordache Date: Fri, 2 Mar 2012 22:51:50 +0200 Subject: [PATCH 5/5] Added missing file to .dme --- baystation12.dme | 1 + 1 file changed, 1 insertion(+) diff --git a/baystation12.dme b/baystation12.dme index 21128d8db28..0318e0bd9d4 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -930,6 +930,7 @@ #include "code\modules\mob\living\carbon\monkey\life.dm" #include "code\modules\mob\living\carbon\monkey\login.dm" #include "code\modules\mob\living\carbon\monkey\monkey.dm" +#include "code\modules\mob\living\carbon\monkey\npc.dm" #include "code\modules\mob\living\carbon\monkey\powers.dm" #include "code\modules\mob\living\carbon\monkey\say.dm" #include "code\modules\mob\living\silicon\say.dm"