From 352d5a56275f90993be854aea5f209634944b2c2 Mon Sep 17 00:00:00 2001 From: Cheridan Date: Sat, 14 Jun 2014 21:30:25 -0500 Subject: [PATCH 1/4] MONKEY MODE REDUX AHUAHEUAHUHEGUEHGAUHEGUAEH monkeys will now possibly transfer all diseases on bite because that's how diseases kinda work --- code/_onclick/other_mobs.dm | 3 +- code/datums/diseases/jungle_fever.dm | 12 -- code/datums/diseases/transformation.dm | 115 +++++++++++++----- code/datums/mind.dm | 8 +- code/game/gamemodes/monkey/monkey.dm | 85 +++++++++++++ code/game/objects/effects/gibs.dm | 2 +- .../living/carbon/human/human_attackpaw.dm | 6 +- .../mob/living/carbon/monkey/monkey.dm | 5 +- code/modules/mob/mob_helpers.dm | 2 +- tgstation.dme | 2 +- 10 files changed, 178 insertions(+), 62 deletions(-) delete mode 100644 code/datums/diseases/jungle_fever.dm create mode 100644 code/game/gamemodes/monkey/monkey.dm diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index ba8e3d6850a..8c97a7afacc 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -81,8 +81,7 @@ O.show_message("[name] bites [ML]!", 1) if(armor >= 2) return for(var/datum/disease/D in viruses) - if(istype(D, /datum/disease/jungle_fever)) - ML.contract_disease(D,1,0) + ML.contract_disease(D,1,0) else for(var/mob/O in viewers(ML, null)) O.show_message("\red [src] has attempted to bite [ML]!", 1) diff --git a/code/datums/diseases/jungle_fever.dm b/code/datums/diseases/jungle_fever.dm deleted file mode 100644 index dba0c5f4a4f..00000000000 --- a/code/datums/diseases/jungle_fever.dm +++ /dev/null @@ -1,12 +0,0 @@ -/datum/disease/jungle_fever - name = "Jungle Fever" - max_stages = 1 - cure = "None" - spread = "Bites" - spread_type = SPECIAL - affected_species = list("Monkey", "Human") - curable = 0 - desc = "monkeys with this disease will bite humans, causing humans to spontaneously mutate into a monkey." - severity = "Medium" - //stage_prob = 100 - agent = "Kongey Vibrion M-909" diff --git a/code/datums/diseases/transformation.dm b/code/datums/diseases/transformation.dm index f1ee58534ec..acfde28a912 100644 --- a/code/datums/diseases/transformation.dm +++ b/code/datums/diseases/transformation.dm @@ -21,48 +21,97 @@ ..() switch(stage) if(1) - if (prob(10) && stage1) + if (prob(stage_prob) && stage1) affected_mob << pick(stage1) if(2) - if (prob(10) && stage2) + if (prob(stage_prob) && stage2) affected_mob << pick(stage2) if(3) - if (prob(20) && stage3) + if (prob(stage_prob*2) && stage3) affected_mob << pick(stage3) if(4) - if (prob(20) && stage4) + if (prob(stage_prob*2) && stage4) affected_mob << pick(stage4) if(5) - if(istype(affected_mob, /mob/living/carbon) && affected_mob.stat != DEAD) - if(stage5) - affected_mob << pick(stage5) - if(jobban_isbanned(affected_mob, new_form)) - affected_mob.death(1) - return - if(affected_mob.notransform) return - affected_mob.notransform = 1 - affected_mob.canmove = 0 - affected_mob.icon = null - affected_mob.overlays.Cut() - affected_mob.invisibility = 101 - for(var/obj/item/W in affected_mob) - if(istype(W, /obj/item/weapon/implant)) - qdel(W) - continue - W.layer = initial(W.layer) - W.loc = affected_mob.loc - W.dropped(affected_mob) - var/mob/living/new_mob = new new_form(affected_mob.loc) - if(istype(new_mob)) - new_mob.a_intent = "harm" - new_mob.universal_speak = 1 - if(affected_mob.mind) - affected_mob.mind.transfer_to(new_mob) - else - new_mob.key = affected_mob.key + do_disease_transformation(affected_mob) + +/datum/disease/transformation/proc/do_disease_transformation(var/mob/living/affected_mob) + if(istype(affected_mob, /mob/living/carbon) && affected_mob.stat != DEAD) + if(stage5) + affected_mob << pick(stage5) + if(jobban_isbanned(affected_mob, new_form)) + affected_mob.death(1) + return + if(affected_mob.notransform) return + affected_mob.notransform = 1 + affected_mob.canmove = 0 + affected_mob.icon = null + affected_mob.overlays.Cut() + affected_mob.invisibility = 101 + for(var/obj/item/W in affected_mob) + if(istype(W, /obj/item/weapon/implant)) + qdel(W) + continue + W.layer = initial(W.layer) + W.loc = affected_mob.loc + W.dropped(affected_mob) + var/mob/living/new_mob = new new_form(affected_mob.loc) + if(istype(new_mob)) + new_mob.a_intent = "harm" + new_mob.universal_speak = 1 + if(affected_mob.mind) + affected_mob.mind.transfer_to(new_mob) + else + new_mob.key = affected_mob.key qdel(affected_mob) + +/datum/disease/transformation/jungle_fever + name = "Jungle Fever" + cure = "Bananas" + cure_id = "banana" + spread = "Bites" + spread_type = SPECIAL + affected_species = list("Monkey", "Human") + permeability_mod = 1 + cure_chance = 1 + curable = 0 + longevity = 30 + desc = "Monkeys with this disease will bite humans, causing humans to mutate into a monkey." + severity = "Major" + hidden = list(0, 0)//Not hidden, with the exception of the starting ape. + stage_prob = 4 + agent = "Kongey Vibrion M-909" + new_form = /mob/living/carbon/monkey + + stage1 = list("") + stage2 = list("") + stage3 = list("") + stage4 = list("Your back hurts.", "You breathe through your mouth.", + "You have a craving for bananas.", "Your mind feels clouded.") + stage5 = list("You feel like monkeying around.") + +/datum/disease/transformation/jungle_fever/do_disease_transformation(var/mob/living/carbon/affected_mob) + if(!ismonkey(affected_mob)) + affected_mob.monkeyize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSE) + +/datum/disease/transformation/jungle_fever/stage_act() + ..() + switch(stage) + if(2) + affected_mob << "Your [pick("back", "arm", "leg", "elbow", "head")] itches." + if(3) + if (prob(8)) + affected_mob.say(pick("Eek?", "Ook ook.")) + if (prob(4)) + affected_mob << "You feel a stabbing pain in your head." + affected_mob.Paralyse(2) + if(4) + if (prob(20)) + affected_mob.say(pick("Eeek, ook ook!", "Eee-eeek!", "Eeee!", "Ungh, ungh.")) + + /datum/disease/transformation/robot name = "Robotic Transformation" @@ -86,7 +135,7 @@ if (prob(8)) affected_mob.say(pick("Beep, boop", "beep, beep!", "Boop...bop")) if (prob(4)) - affected_mob << "\red You feel a stabbing pain in your head." + affected_mob << "You feel a stabbing pain in your head." affected_mob.Paralyse(2) if(4) if (prob(20)) @@ -113,7 +162,7 @@ switch(stage) if(3) if (prob(4)) - affected_mob << "\red You feel a stabbing pain in your head." + affected_mob << "You feel a stabbing pain in your head." affected_mob.Paralyse(2) if(4) if (prob(20)) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 9b004722c96..d3851c7d3f2 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -249,7 +249,7 @@ datum/mind else if (istype(current, /mob/living/carbon/monkey)) var/found = 0 for(var/datum/disease/D in current.viruses) - if(istype(D, /datum/disease/jungle_fever)) found = 1 + if(istype(D, /datum/disease/transformation/jungle_fever)) found = 1 if(found) text += "healthy|INFECTED|human|other" @@ -799,16 +799,16 @@ datum/mind src = null M = H.monkeyize() src = M.mind - current.contract_disease(new /datum/disease/jungle_fever,1,0) + current.contract_disease(new /datum/disease/transformation/jungle_fever,1,0) else if (istype(M)) - current.contract_disease(new /datum/disease/jungle_fever,1,0) + current.contract_disease(new /datum/disease/transformation/jungle_fever,1,0) if("human") if (check_rights(R_ADMIN, 0)) var/mob/living/carbon/human/H = current var/mob/living/carbon/monkey/M = current if (istype(M)) for(var/datum/disease/D in M.viruses) - if (istype(D,/datum/disease/jungle_fever)) + if (istype(D,/datum/disease/transformation/jungle_fever)) D.cure(0) sleep(0) //because deleting of virus is doing throught spawn(0) log_admin("[key_name(usr)] attempting to humanize [key_name(current)]") diff --git a/code/game/gamemodes/monkey/monkey.dm b/code/game/gamemodes/monkey/monkey.dm new file mode 100644 index 00000000000..ef737a86621 --- /dev/null +++ b/code/game/gamemodes/monkey/monkey.dm @@ -0,0 +1,85 @@ +/datum/game_mode/monkey + name = "monkey" + config_tag = "monkey" + antag_flag = BE_REV + + required_players = 20 + required_enemies = 1 + recommended_enemies = 1 + + restricted_jobs = list("Cyborg", "AI") + + var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds) + var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds) + + var/carriers_to_make = 1 + var/list/carriers = list() + + var/monkeys_to_win = 0 + var/escaped_monkies = 0 + + var/players_per_carrier = 30 + + +/datum/game_mode/monkey/pre_setup() + carriers_to_make = max(round(num_players()/players_per_carrier, 1), 1) + for(var/datum/mind/player in antag_candidates) + for(var/job in restricted_jobs)//Removing robots from the list + if(player.assigned_role == job) + antag_candidates -= player + for(var/j = 0, j < carriers, j++) + if (!antag_candidates.len) + break + var/datum/mind/carrier = pick(antag_candidates) + carriers += carrier + carrier.special_role = "monkey" + log_game("[carrier.key] (ckey) has been selected as a Jungle Fever carrier") + antag_candidates -= carrier + if(!carriers.len) + return 0 + return 1 + + +/datum/game_mode/monkey/announce() + world << "The current game mode is - Monkey!" + world << "One or more crewmembers have been infected with Jungle Fever! Crew: Contain the outbreak. None of the infected monkeys may escape alive to Centcom. \ + Monkeys: Ensure that your kind lives on! Rise up against your captors!" + + +/datum/game_mode/monkey/proc/greet_carrier(var/datum/mind/carrier) + carrier.current << "You are infected by the Jungle Fever patient zero!!" + carrier.current << "You have been planted onto this station by the Animal Rights Consortium." + carrier.current << "Soon the disease will transform you into an ape. Afterwards, you will be able spread the infection to others with a bite." + carrier.current << "While your infection is undetectable, any other infectees will show up on medical equipment." + carrier.current << "Your mission will be deemed a success if any of the live infected monkeys reach Centcom." + return + +/datum/game_mode/monkey/post_setup() + for(var/datum/mind/carriermind in carriers) + greet_carrier(carriermind) + var/datum/disease/transformation/jungle_fever/J = new /datum/disease/transformation/jungle_fever + J.hidden = list(1, 1)//Starting disease is hidden from medical equipment + carriermind.current.contract_disease(J, 1, 0) + ..() + +/datum/game_mode/monkey/proc/check_monkey_victory() + for(var/mob/living/carbon/monkey/M in living_mob_list) + if (M.has_disease(/datum/disease/transformation/jungle_fever)) + var/area/A = get_area(M) + if(is_type_in_list(A, centcom_areas)) + escaped_monkies++ + if(escaped_monkies >= monkeys_to_win) + return 0 + else + return 1 + + +/datum/game_mode/monkey/declare_completion() + if(!check_monkey_victory()) + feedback_set_details("round_end_result","win - monkey win") + feedback_set("round_end_result",escaped_monkies) + world << "\red The monkies have overthrown their captors! Eeek eeeek!!" + else + feedback_set_details("round_end_result","loss - staff stopped the monkies") + feedback_set("round_end_result",escaped_monkies) + world << "\red The staff managed to contain the monkey infestation!" diff --git a/code/game/objects/effects/gibs.dm b/code/game/objects/effects/gibs.dm index 5f0f77e17aa..e8ffb118201 100644 --- a/code/game/objects/effects/gibs.dm +++ b/code/game/objects/effects/gibs.dm @@ -58,7 +58,7 @@ gib.blood_DNA[MobDNA.unique_enzymes] = MobDNA.blood_type else if(istype(src, /obj/effect/gibspawner/xeno)) gib.blood_DNA["UNKNOWN DNA"] = "X*" - else if(istype(src, /obj/effect/gibspawner/human)) // Probably a monkey + else if(istype(src, /obj/effect/gibspawner/generic)) // Probably a monkey gib.blood_DNA["Non-human DNA"] = "A+" var/list/directions = gibdirections[i] if(istype(loc,/turf)) diff --git a/code/modules/mob/living/carbon/human/human_attackpaw.dm b/code/modules/mob/living/carbon/human/human_attackpaw.dm index 95e00df5d4d..f549da4e61c 100644 --- a/code/modules/mob/living/carbon/human/human_attackpaw.dm +++ b/code/modules/mob/living/carbon/human/human_attackpaw.dm @@ -15,9 +15,5 @@ apply_damage(damage, BRUTE, affecting, run_armor_check(affecting, "melee")) for(var/datum/disease/D in M.viruses) - if(istype(D, /datum/disease/jungle_fever)) - var/mob/living/carbon/human/H = src - if(src.stat != 2) - H.monkeyize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSE) - contract_disease(D,1,0) + contract_disease(D,1,0) return diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index d1f94f76d29..99824bf2fd2 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -83,8 +83,7 @@ adjustBruteLoss(damage) health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss() for(var/datum/disease/D in M.viruses) - if(istype(D, /datum/disease/jungle_fever)) - contract_disease(D,1,0) + contract_disease(D,1,0) else for(var/mob/O in viewers(src, null)) O.show_message("[M.name] has attempted to bite [name]!", 1) @@ -360,4 +359,4 @@ return 0 /mob/living/carbon/monkey/canBeHandcuffed() - return 1 + return 1 diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index e295e0b6553..36976fc3f42 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -408,7 +408,7 @@ proc/is_special_character(mob/M) // returns 1 for special characters and 2 for h if(M.mind in ticker.mode.wizards) return 2 if("monkey") - if(M.viruses && (locate(/datum/disease/jungle_fever) in M.viruses)) + if(M.viruses && (locate(/datum/disease/transformation/jungle_fever) in M.viruses)) return 2 return 1 return 0 diff --git a/tgstation.dme b/tgstation.dme index 86fb4497c89..3ced3d4fe69 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -136,7 +136,6 @@ #include "code\datums\diseases\flu.dm" #include "code\datums\diseases\fluspanish.dm" #include "code\datums\diseases\gbs.dm" -#include "code\datums\diseases\jungle_fever.dm" #include "code\datums\diseases\magnitis.dm" #include "code\datums\diseases\pierrot_throat.dm" #include "code\datums\diseases\plasmatoid.dm" @@ -280,6 +279,7 @@ #include "code\game\gamemodes\malfunction\malfunction.dm" #include "code\game\gamemodes\meteor\meteor.dm" #include "code\game\gamemodes\meteor\meteors.dm" +#include "code\game\gamemodes\monkey\monkey.dm" #include "code\game\gamemodes\nuclear\nuclear.dm" #include "code\game\gamemodes\nuclear\nuclearbomb.dm" #include "code\game\gamemodes\nuclear\pinpointer.dm" From 98367cb162ac75ae802ae1f0fe25a77a81cfcf31 Mon Sep 17 00:00:00 2001 From: Rolan7 Date: Tue, 17 Jun 2014 00:13:56 -0400 Subject: [PATCH 2/4] Changelings can use hivechat while muzzled. Monkey-lings can use hivechat. Lings can return to human form even if monkeyed through genetics. One-line fix for Destroying Angels (..() wasn't being called) Spelling correction in Destroying Angel description --- code/_onclick/other_mobs.dm | 2 +- code/datums/spell.dm | 2 +- code/datums/spells/mime.dm | 5 ++- .../gamemodes/changeling/powers/lesserform.dm | 4 +-- code/game/gamemodes/cult/ritual.dm | 8 ++--- code/modules/hydroponics/grown.dm | 1 + code/modules/hydroponics/seeds.dm | 2 +- .../mob/living/carbon/alien/humanoid/emote.dm | 2 +- .../living/carbon/alien/humanoid/humanoid.dm | 2 +- .../mob/living/carbon/alien/larva/emote.dm | 2 +- .../mob/living/carbon/alien/larva/larva.dm | 2 +- code/modules/mob/living/carbon/carbon.dm | 9 ++--- code/modules/mob/living/carbon/emote.dm | 2 +- code/modules/mob/living/carbon/human/emote.dm | 2 +- .../living/carbon/human/human_attackpaw.dm | 2 +- .../mob/living/carbon/human/whisper.dm | 2 +- .../mob/living/carbon/metroid/metroid.dm | 2 +- .../modules/mob/living/carbon/monkey/emote.dm | 2 +- .../mob/living/carbon/monkey/monkey.dm | 2 +- code/modules/mob/living/say.dm | 33 +++++++++++-------- code/modules/mob/mob.dm | 3 ++ code/modules/mob/transform_procs.dm | 2 ++ 22 files changed, 51 insertions(+), 42 deletions(-) diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index ba8e3d6850a..d6ed808461b 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -67,7 +67,7 @@ if(..()) return if(a_intent != "harm" || !ismob(A)) return - if(istype(wear_mask, /obj/item/clothing/mask/muzzle)) + if(is_muzzled()) return var/mob/living/carbon/ML = A var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg") diff --git a/code/datums/spell.dm b/code/datums/spell.dm index 06bedadbd4d..7da40ce6f7c 100644 --- a/code/datums/spell.dm +++ b/code/datums/spell.dm @@ -76,7 +76,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin var/mob/living/carbon/human/H = user - if((invocation_type == "whisper" || invocation_type == "shout") && istype(H.wear_mask, /obj/item/clothing/mask/muzzle)) + if((invocation_type == "whisper" || invocation_type == "shout") && !H.is_muzzled()) user << "You can't get the words out!" return 0 diff --git a/code/datums/spells/mime.dm b/code/datums/spells/mime.dm index 1f2c79b646a..12c4a8e837b 100644 --- a/code/datums/spells/mime.dm +++ b/code/datums/spells/mime.dm @@ -14,7 +14,10 @@ /obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall/Click() - if(usr) + if(usr && usr.mind) + if(!usr.mind.miming) + usr << "You must dedicate yourself to silence first." + return invocation = "[usr.real_name] looks as if a wall is in front of them." else invocation_type ="none" diff --git a/code/game/gamemodes/changeling/powers/lesserform.dm b/code/game/gamemodes/changeling/powers/lesserform.dm index 1b46d1aca9d..10f61e1b6e0 100644 --- a/code/game/gamemodes/changeling/powers/lesserform.dm +++ b/code/game/gamemodes/changeling/powers/lesserform.dm @@ -10,9 +10,9 @@ /obj/effect/proc_holder/changeling/lesserform/sting_action(var/mob/living/carbon/human/user) user << "Our genes cry out!" - var/mob/living/carbon/monkey/O = user.monkeyize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPDAMAGE | TR_KEEPSE | TR_KEEPSRC) + user.monkeyize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPDAMAGE | TR_KEEPSE | TR_KEEPSRC) - O.mind.changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/humanform(null) + // Human-form power now handled in monkeyize() feedback_add_details("changeling_powers","LF") .=1 qdel(user) diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index 1a3e6e188cd..90865e016b3 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -183,11 +183,9 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology", if(!iscultist(user)) user << "You can't mouth the arcane scratchings without fumbling over them." return - if(ishuman(user)) - var/mob/living/carbon/human/H = user - if(istype(H.wear_mask, /obj/item/clothing/mask/muzzle)) - H << "You are unable to speak the words of the rune." - return + if(user.is_muzzled()) + user << "You are unable to speak the words of the rune." + return if(!word1 || !word2 || !word3 || prob(user.getBrainLoss())) return fizzle() if(word1 == wordtravel && word2 == wordself) diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 53b7210d99f..b88f5b482ad 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -796,6 +796,7 @@ icon_state = "angel" dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/angel New(var/loc, var/potency = 35) + ..() if(reagents) reagents.add_reagent("nutriment", 1+round((potency / 50), 1)) reagents.add_reagent("amatoxin", 13+round(potency / 3, 1)) diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index c0a4eda32d0..5d7290fedf7 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -475,7 +475,7 @@ /obj/item/seeds/angelmycelium name = "pack of destroying angel mycelium" - desc = "This mycelium grows into something devestating." + desc = "This mycelium grows into something devastating." icon_state = "mycelium-angel" species = "angel" plantname = "Destroying Angels" diff --git a/code/modules/mob/living/carbon/alien/humanoid/emote.dm b/code/modules/mob/living/carbon/alien/humanoid/emote.dm index d0b4fb7be1e..4351ced974f 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/emote.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/emote.dm @@ -8,7 +8,7 @@ if(findtext(act,"s",-1) && !findtext(act,"_",-2))//Removes ending s's unless they are prefixed with a '_' act = copytext(act,1,length(act)) - var/muzzled = istype(src.wear_mask, /obj/item/clothing/mask/muzzle) + var/muzzled = is_muzzled() var/m_type = 1 var/message diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index ebe2a488d4f..abda0ce43fa 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -116,7 +116,7 @@ if ("help") help_shake_act(M) else - if (istype(wear_mask, /obj/item/clothing/mask/muzzle)) + if (is_muzzled()) return if (health > 0) playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1) diff --git a/code/modules/mob/living/carbon/alien/larva/emote.dm b/code/modules/mob/living/carbon/alien/larva/emote.dm index 6a9120a111f..8a662b5dc47 100644 --- a/code/modules/mob/living/carbon/alien/larva/emote.dm +++ b/code/modules/mob/living/carbon/alien/larva/emote.dm @@ -8,7 +8,7 @@ if(findtext(act,"s",-1) && !findtext(act,"_",-2))//Removes ending s's unless they are prefixed with a '_' act = copytext(act,1,length(act)) - var/muzzled = istype(src.wear_mask, /obj/item/clothing/mask/muzzle) + var/muzzled = is_muzzled() var/m_type = 1 var/message diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index 12b3713d6df..7503b0d0b35 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -142,7 +142,7 @@ if ("help") help_shake_act(M) else - if (istype(wear_mask, /obj/item/clothing/mask/muzzle)) + if (is_muzzled()) return if (health > 0) playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 5745bcea0e5..8cc66e2897b 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -452,12 +452,6 @@ ..() -/mob/living/carbon/say(var/message, var/bubble_type) - if(istype(wear_mask, /obj/item/clothing/mask/muzzle)) - return - - ..(message, bubble_type) - /mob/living/carbon/proc/is_mutantrace(var/mrace) if(mrace) if(src.dna && src.dna.mutantrace == mrace) @@ -483,3 +477,6 @@ var/const/GALOSHES_DONT_HELP = 8 /mob/living/carbon/fall(var/forced) loc.handle_fall(src, forced)//it's loc so it doesn't call the mob's handle_fall which does nothing + +/mob/living/carbon/is_muzzled() + return(istype(src.wear_mask, /obj/item/clothing/mask/muzzle)) diff --git a/code/modules/mob/living/carbon/emote.dm b/code/modules/mob/living/carbon/emote.dm index af48fdc58b7..90c9809c580 100644 --- a/code/modules/mob/living/carbon/emote.dm +++ b/code/modules/mob/living/carbon/emote.dm @@ -13,7 +13,7 @@ if(findtext(act,"s",-1) && !findtext(act,"_",-2))//Removes ending s's unless they are prefixed with a '_' act = copytext(act,1,length(act)) - var/muzzled = (src.wear_mask && istype(src.wear_mask, /obj/item/clothing/mask/muzzle)) + var/muzzled = is_muzzled() //var/m_type = 1 switch(act)//Even carbon organisms want it alphabetically ordered.. diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 766b452bfa4..a765805d011 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -9,7 +9,7 @@ if(findtext(act,"s",-1) && !findtext(act,"_",-2))//Removes ending s's unless they are prefixed with a '_' act = copytext(act,1,length(act)) - var/muzzled = istype(src.wear_mask, /obj/item/clothing/mask/muzzle) + var/muzzled = is_muzzled() //var/m_type = 1 for (var/obj/item/weapon/implant/I in src) diff --git a/code/modules/mob/living/carbon/human/human_attackpaw.dm b/code/modules/mob/living/carbon/human/human_attackpaw.dm index 95e00df5d4d..9109084194f 100644 --- a/code/modules/mob/living/carbon/human/human_attackpaw.dm +++ b/code/modules/mob/living/carbon/human/human_attackpaw.dm @@ -3,7 +3,7 @@ if (M.a_intent == "help") help_shake_act(M) else - if (istype(wear_mask, /obj/item/clothing/mask/muzzle)) + if (is_muzzled()) return visible_message("[M.name] bites [src]!", \ diff --git a/code/modules/mob/living/carbon/human/whisper.dm b/code/modules/mob/living/carbon/human/whisper.dm index 7fe52e16a8b..0fd4a491c57 100644 --- a/code/modules/mob/living/carbon/human/whisper.dm +++ b/code/modules/mob/living/carbon/human/whisper.dm @@ -33,7 +33,7 @@ if (src.sdisabilities & MUTE) return - if (istype(src.wear_mask, /obj/item/clothing/mask/muzzle)) + if (is_muzzled()) return var/whispers = "whispers" diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm index 3d1c6f8c70c..ef4a1102c17 100644 --- a/code/modules/mob/living/carbon/metroid/metroid.dm +++ b/code/modules/mob/living/carbon/metroid/metroid.dm @@ -298,7 +298,7 @@ if ("help") help_shake_act(M) else - if (istype(wear_mask, /obj/item/clothing/mask/muzzle)) + if (is_muzzled()) return if (health > 0) attacked += 10 diff --git a/code/modules/mob/living/carbon/monkey/emote.dm b/code/modules/mob/living/carbon/monkey/emote.dm index 573c9c42f23..2b51ed70355 100644 --- a/code/modules/mob/living/carbon/monkey/emote.dm +++ b/code/modules/mob/living/carbon/monkey/emote.dm @@ -9,7 +9,7 @@ if(findtext(act,"s",-1) && !findtext(act,"_",-2))//Removes ending s's unless they are prefixed with a '_' act = copytext(act,1,length(act)) - var/muzzled = istype(src.wear_mask, /obj/item/clothing/mask/muzzle) + var/muzzled = is_muzzled() var/m_type = 1 var/message diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index d1f94f76d29..233e9501ea3 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -74,7 +74,7 @@ if (M.a_intent == "help") help_shake_act(M) else - if ((M.a_intent == "harm" && !( istype(wear_mask, /obj/item/clothing/mask/muzzle) ))) + if (M.a_intent == "harm" && !is_muzzled()) if ((prob(75) && health > 0)) playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1) for(var/mob/O in viewers(src, null)) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 4f722d5d8a5..53977a44810 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -132,7 +132,7 @@ var/list/department_radio_keys = list( //world << "channel_prefix=[channel_prefix]; message_mode=[message_mode]" if (message_mode) message = trim(copytext(message, 3)) - if (!(ishuman(src) || istype(src, /mob/living/simple_animal/parrot) || isrobot(src) && (message_mode=="department" || (message_mode in radiochannels)))) + if (!(ishuman(src) || istype(src, /mob/living/simple_animal/parrot) || isrobot(src)) && (message_mode=="department" || (message_mode in radiochannels))) // If they're not a human, parrot, or robot, and they're trying to use a radio channel message_mode = null //only humans can use headsets // Check changed so that parrots can use headsets. Other simple animals do not have ears and will cause runtimes. // And borgs -Sieve @@ -156,6 +156,24 @@ var/list/department_radio_keys = list( for(var/i=0,i[mind.changeling.changelingID]: [message]" + return + + if (message_mode == "alientalk") + if(alien_talk_understand || hivecheck()) + //message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)) //seems redundant + alien_talk(message) + return + + if(is_muzzled()) // Intentionally after changeling hivemind check + return + var/list/obj/item/used_radios = new switch (message_mode) @@ -211,12 +229,6 @@ var/list/department_radio_keys = list( robot_talk(message) return - if ("alientalk") - if(alien_talk_understand || hivecheck()) - //message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)) //seems redundant - alien_talk(message) - return - if ("department") if (src:ears) src:ears.talk_into(src, message, message_mode) @@ -231,13 +243,6 @@ var/list/department_radio_keys = list( message_range = 1 italics = 1 - if("changeling") - if(mind && mind.changeling) - log_say("[mind.changeling.changelingID]/[src.key] : [message]") - for(var/mob/Changeling in mob_list) - if((Changeling.mind && Changeling.mind.changeling) || istype(Changeling, /mob/dead/observer)) - Changeling << "[mind.changeling.changelingID]: [message]" - return ////SPECIAL HEADSETS START else //world << "SPECIAL HEADSETS" diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index b3f3e3137ce..719514fd6c8 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -558,6 +558,9 @@ var/list/slot_equipment_priority = list( \ /mob/proc/is_active() return (0 >= usr.stat) +/mob/proc/is_muzzled() + return 0 + /mob/proc/see(message) if(!is_active()) return 0 diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 03fb40fb3a9..7b69731d0cd 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -72,6 +72,8 @@ //transfer mind and delete old mob if(mind) mind.transfer_to(O) + if(O.mind.changeling) + O.mind.changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/humanform(null) if (tr_flags & TR_DEFAULTMSG) O << "You are now a monkey." updateappearance(O) From 48098c32493a09fb4a4f8a2be535702f93b49915 Mon Sep 17 00:00:00 2001 From: advomach Date: Tue, 24 Jun 2014 11:37:03 -0400 Subject: [PATCH 3/4] Replaced var/sizes_to_number with weirdass formula that is faster and takes up less space in code than list lookups --- code/modules/power/singularity/singularity.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index ffe2e10a903..386e0fee913 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -26,7 +26,6 @@ var/target = null //its target. moves towards the target if it has one var/last_failed_movement = 0//Will not move in the same dir if it couldnt before, will help with the getting stuck on fields thing var/teleport_del = 0 - var/sizes_to_number = list("1" = 0, "3" = 1, "5" = 2, "7" = 3, "9" = 4) //so i dont have to mess around with weirdass formulas to get this done. var/last_warning var/list/uneatable = list(/turf/space, /obj/effect/overlay) @@ -230,7 +229,7 @@ if(current_size >= 5) var/list/handlist = list(H.l_hand, H.r_hand) for(var/obj/item/hand in handlist) - if(prob(current_size * 5) && hand.w_class >= 5 - sizes_to_number["[current_size]"] && H.unEquip(hand)) + if(prob(current_size * 5) && hand.w_class >= ((11-current_size)/2) && H.unEquip(hand)) //This weird math is much faster than list lookups. Supposed to suck small items but larger items get sucked as singularity grows larger step_towards(hand, src) H << "\The [src] pulls \the [hand] from your grip!" From 79447673a088fcffe9b276c3fd369f3f8126317a Mon Sep 17 00:00:00 2001 From: advomach Date: Tue, 24 Jun 2014 19:00:41 -0400 Subject: [PATCH 4/4] Update singularity.dm Removed comment --- code/modules/power/singularity/singularity.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 386e0fee913..9016f1278a4 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -229,7 +229,7 @@ if(current_size >= 5) var/list/handlist = list(H.l_hand, H.r_hand) for(var/obj/item/hand in handlist) - if(prob(current_size * 5) && hand.w_class >= ((11-current_size)/2) && H.unEquip(hand)) //This weird math is much faster than list lookups. Supposed to suck small items but larger items get sucked as singularity grows larger + if(prob(current_size * 5) && hand.w_class >= ((11-current_size)/2) && H.unEquip(hand)) step_towards(hand, src) H << "\The [src] pulls \the [hand] from your grip!"