diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index 3074c797f6e..8f118599e67 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -26,3 +26,4 @@ #define BE_CULTIST 256 #define BE_BLOB 512 #define BE_NINJA 1024 +#define BE_MONKEY 2048 diff --git a/code/_globalvars/configuration.dm b/code/_globalvars/configuration.dm index 6522caafe81..5d3a5f8030b 100644 --- a/code/_globalvars/configuration.dm +++ b/code/_globalvars/configuration.dm @@ -44,5 +44,6 @@ var/list/be_special_flags = list( "pAI" = BE_PAI, "Cultist" = BE_CULTIST, "Blob" = BE_BLOB, - "Ninja" = BE_NINJA + "Ninja" = BE_NINJA, + "Monkey" = BE_MONKEY ) diff --git a/code/datums/disease.dm b/code/datums/disease.dm index c64a4cba5a6..3a37ce32022 100644 --- a/code/datums/disease.dm +++ b/code/datums/disease.dm @@ -176,8 +176,6 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease if(affected_mob) if(resistance && !(type in affected_mob.resistances)) affected_mob.resistances += type - /*if(istype(src, /datum/disease/alien_embryo)) //Get rid of the infection flag if it's a xeno embryo. - affected_mob.status_flags &= ~(XENO_HOST)*/ affected_mob.viruses -= src //remove the datum from the list del(src) //delete the datum to stop it processing return diff --git a/code/datums/diseases/transformation.dm b/code/datums/diseases/transformation.dm index b4079e34b63..a7b87bb5f58 100644 --- a/code/datums/diseases/transformation.dm +++ b/code/datums/diseases/transformation.dm @@ -71,7 +71,7 @@ name = "Jungle Fever" cure = "Bananas" cure_id = "banana" - spread = "Bites" + spread = "Monkey Bites" spread_type = SPECIAL affected_species = list("Monkey", "Human") permeability_mod = 1 @@ -85,32 +85,38 @@ agent = "Kongey Vibrion M-909" new_form = /mob/living/carbon/monkey - stage1 = list("") - stage2 = list("") - stage3 = list("") + stage1 = null + stage2 = null + stage3 = null 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)) + if(ticker && istype(ticker.mode, /datum/game_mode/monkey)) + ticker.mode:ape_infectees |= affected_mob.mind 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(prob(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)) + if(prob(4)) affected_mob << "You feel a stabbing pain in your head." - affected_mob.Paralyse(2) + affected_mob.confused += 10 if(4) - if (prob(20)) + if(prob(3)) affected_mob.say(pick("Eeek, ook ook!", "Eee-eeek!", "Eeee!", "Ungh, ungh.")) +/datum/disease/transformation/jungle_fever/cure() + if(ticker && istype(ticker.mode, /datum/game_mode/monkey)) + ticker.mode:ape_infectees.Remove(affected_mob.mind) + ..() + /datum/disease/transformation/robot @@ -121,7 +127,7 @@ agent = "R2D2 Nanomachines" desc = "This disease, actually acute nanomachine infection, converts the victim into a cyborg." hidden = list(0, 0) - stage1 = list("") + stage1 = null stage2 = list("Your joints feel stiff.", "\red Beep...boop..") stage3 = list("\red Your joints feel very stiff.", "Your skin feels loose.", "\red You can feel something move...inside.") stage4 = list("\red Your skin feels very loose.", "\red You can feel... something...inside you.") @@ -150,7 +156,7 @@ cure_chance = 5 agent = "Rip-LEY Alien Microbes" hidden = list(0, 0) - stage1 = list("") + stage1 = null stage2 = list("Your throat feels scratchy.", "\red Kill...") stage3 = list("\red Your throat feels very scratchy.", "Your skin feels tight.", "\red You can feel something move...inside.") stage4 = list("\red Your skin feels very tight.", "\red Your blood boils!", "\red You can feel... something...inside you.") diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index adfa3244e9c..c865bdf2789 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -221,6 +221,7 @@ if(BE_WIZARD) roletext="wizard" if(BE_REV) roletext="revolutionary" if(BE_CULTIST) roletext="cultist" + if(BE_MONKEY) roletext="monkey" // Ultimate randomizing code right here diff --git a/code/game/gamemodes/monkey/monkey.dm b/code/game/gamemodes/monkey/monkey.dm index ef737a86621..43502623a87 100644 --- a/code/game/gamemodes/monkey/monkey.dm +++ b/code/game/gamemodes/monkey/monkey.dm @@ -1,9 +1,9 @@ /datum/game_mode/monkey name = "monkey" config_tag = "monkey" - antag_flag = BE_REV + antag_flag = BE_MONKEY - required_players = 20 + required_players = 2 //20 required_enemies = 1 recommended_enemies = 1 @@ -15,19 +15,23 @@ var/carriers_to_make = 1 var/list/carriers = list() + var/list/ape_infectees = list() + var/monkeys_to_win = 0 - var/escaped_monkies = 0 + var/escaped_monkeys = 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++) + + for(var/j = 0, j < carriers_to_make, j++) if (!antag_candidates.len) break var/datum/mind/carrier = pick(antag_candidates) @@ -35,6 +39,7 @@ 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 @@ -47,19 +52,23 @@ /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 are 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 << "While your infection strain is undetectable by scanners, 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) + ape_infectees += carriermind + + var/datum/disease/D = new /datum/disease/transformation/jungle_fever + D.hidden = list(1,1) + D.holder = carriermind.current + D.affected_mob = carriermind.current + carriermind.current.viruses += D ..() /datum/game_mode/monkey/proc/check_monkey_victory() @@ -67,8 +76,8 @@ 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) + escaped_monkeys++ + if(escaped_monkeys >= monkeys_to_win) return 0 else return 1 @@ -77,9 +86,9 @@ /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!!" + feedback_set("round_end_result",escaped_monkeys) + world << "\red The monkeys 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) + feedback_set_details("round_end_result","loss - staff stopped the monkeys") + feedback_set("round_end_result",escaped_monkeys) world << "\red The staff managed to contain the monkey infestation!" diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index 537e58654f1..410282a754f 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -176,7 +176,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept @param vmessage: If specified, will display this as the message; such as "chimpering" - for monkies if the mob is not understood. Stored in signal.data["vmessage"]. + for monkeys if the mob is not understood. Stored in signal.data["vmessage"]. @param radio: Reference to the radio broadcasting the message, stored in signal.data["radio"] diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index cb810a376e9..d9b91ef9f84 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -489,6 +489,20 @@ dat += "
| Monkey | ||
| [M.real_name][M.client ? "" : " (logged out)"][M.stat == 2 ? " (DEAD)" : ""] | " + dat += "PM | " + else + dat += "|
| Monkey not found! |