mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-26 14:39:58 +01:00
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
@@ -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
@@ -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)]")
|
||||
|
||||
@@ -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>"
|
||||
@@ -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>")
|
||||
|
||||
@@ -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
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user