diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm
index ba8e3d6850a..46cbbab20f3 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")
@@ -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 8749abed60d..b4079e34b63 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 1e2f7d20e0e..16700334986 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/datums/spell.dm b/code/datums/spell.dm
index c792d2845cc..e7b69221cf4 100644
--- a/code/datums/spell.dm
+++ b/code/datums/spell.dm
@@ -77,7 +77,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/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/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm
index 1832f971b2d..12dfeb163be 100644
--- a/code/modules/hydroponics/grown.dm
+++ b/code/modules/hydroponics/grown.dm
@@ -798,6 +798,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 b92d4c01cfd..eb89d6cf49b 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 a174229de6b..997fa314919 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 48c63c2dca8..f2dfb348f29 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/getTrail()
if(getBruteLoss() < 300)
if(prob(50))
@@ -475,4 +469,7 @@ var/const/GALOSHES_DONT_HELP = 8
loc.handle_slip(src, s_amount, w_amount, O, lube)
/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
+ 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..17d1e721587 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]!", \
@@ -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/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 019ae65f053..bb0692ae4a1 100644
--- a/code/modules/mob/living/carbon/metroid/metroid.dm
+++ b/code/modules/mob/living/carbon/metroid/metroid.dm
@@ -296,7 +296,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 edf55266ea4..8d27c77df82 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)
visible_message("[M.name] bites [name]!", \
@@ -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
visible_message("[M.name] has attempted to bite [name]!", \
"[M.name] has attempted to bite [name]!")
@@ -378,4 +377,4 @@
if(isloyal(src))
threatcount -= 1
- return threatcount
\ No newline at end of file
+ return threatcount
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 77b21a0098c..f12b0e16d68 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
@@ -795,4 +798,4 @@ var/list/slot_equipment_priority = list( \
return
/mob/proc/assess_threat() //For sec bot threat assessment
- return
\ No newline at end of file
+ return
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 25d81d559cb..16aabeec14c 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/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index dae51d0cc97..0258e2f08a8 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)
diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm
index ffe2e10a903..9016f1278a4 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))
step_towards(hand, src)
H << "\The [src] pulls \the [hand] from your grip!"
diff --git a/tgstation.dme b/tgstation.dme
index c01bdc15e3a..122af9afb85 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"