Merge pull request #4000 from Cheridan/terribleidea

MONKEY MODE REDUX
This commit is contained in:
Aranclanos
2014-06-30 16:27:22 -03:00
10 changed files with 177 additions and 61 deletions
+1 -2
View File
@@ -81,8 +81,7 @@
O.show_message("<span class='danger'>[name] bites [ML]!</span>", 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 <B>[src] has attempted to bite [ML]!</B>", 1)
-12
View File
@@ -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"
+82 -33
View File
@@ -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("<span class='warning'>Your back hurts.</span>", "<span class='warning'>You breathe through your mouth.</span>",
"<span class='warning'>You have a craving for bananas.</span>", "<span class='warning'>Your mind feels clouded.</span>")
stage5 = list("<span class='warning'>You feel like monkeying around.</span>")
/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 << "<span class='notice'>Your [pick("back", "arm", "leg", "elbow", "head")] itches.</span>"
if(3)
if (prob(8))
affected_mob.say(pick("Eek?", "Ook ook."))
if (prob(4))
affected_mob << "<span class='danger'>You feel a stabbing pain in your head.</span>"
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 << "<span class='danger'>You feel a stabbing pain in your head.</span>"
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 << "<span class='danger'>You feel a stabbing pain in your head.</span>"
affected_mob.Paralyse(2)
if(4)
if (prob(20))
+4 -4
View File
@@ -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 += "<a href='?src=\ref[src];monkey=healthy'>healthy</a>|<b>INFECTED</b>|<a href='?src=\ref[src];monkey=human'>human</a>|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)]")
+85
View File
@@ -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 << "<B>The current game mode is - Monkey!</B>"
world << "<B>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!</B>"
/datum/game_mode/monkey/proc/greet_carrier(var/datum/mind/carrier)
carrier.current << "<B><span class = 'notice'>You are infected by the Jungle Fever patient zero!!</B>"
carrier.current << "<b>You have been planted onto this station by the Animal Rights Consortium.</b>"
carrier.current << "<b>Soon the disease will transform you into an ape. Afterwards, you will be able spread the infection to others with a bite.</b>"
carrier.current << "<b>While your infection is undetectable, any other infectees will show up on medical equipment.</b>"
carrier.current << "<b>Your mission will be deemed a success if any of the live infected monkeys reach Centcom.</b>"
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 <FONT size = 3><B> The monkies have overthrown their captors! Eeek eeeek!!</B></FONT>"
else
feedback_set_details("round_end_result","loss - staff stopped the monkies")
feedback_set("round_end_result",escaped_monkies)
world << "\red <FONT size = 3><B> The staff managed to contain the monkey infestation!</B></FONT>"
+1 -1
View File
@@ -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))
@@ -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
@@ -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("<span class='danger'>[M.name] has attempted to bite [name]!</span>", \
"<span class='userdanger'>[M.name] has attempted to bite [name]!</span>")
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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"