mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-25 01:22:58 +00:00
Moved the spacecraft folder into the unused section, moved syndiebeacon into machinery. Research moved into Modules. Virus2 moved into WIP - is anyone even working on this, it looks almost done? Computer2,optics,pda2,experimental moved unto unused. WIP Chemistry things moved into Chemical Module Cameras.dm moved into weapons GameKit.dm moved into unused BrokenInHands.dm moved into unused Removed Grillify.dm Moved all of the files listed as unused in the mining module to unused Removed several empty folders in modules Moved cloning.dm into machinery Moved NewBan.dm into admin Changed humanoid aliens new_life.dm into life.dm Moved beast mob into unused Moved hivebot into unused Moved carpedexplosion.dm into unused Moved ai_lockdown.dm verb into unused and removed it from the AIs verb list as it didn't actually do anything. Removed mastercontroler2.dm Moved savefile.dm from human to new_player Bugfix People spawning on the starting screen on rev/cult should be fixed. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1964 316c924e-a436-60f5-8080-3fe189b3f50e
332 lines
9.3 KiB
Plaintext
332 lines
9.3 KiB
Plaintext
//To simplify, all diseases have 4 stages, with effects starting at stage 2
|
|
//Stage 1 = Rest,Minor disease
|
|
//Stage 2 = Minimal effect
|
|
//Stage 3 = Medium effect
|
|
//Stage 4 = Death/Really Really really bad effect
|
|
|
|
|
|
/proc/infect_virus2(var/mob/living/carbon/M,var/datum/disease2/disease/disease,var/forced = 0)
|
|
if(prob(disease.infectionchance))
|
|
if(M.virus2)
|
|
return
|
|
else
|
|
var/score = 0
|
|
if(!forced)
|
|
if(istype(M, /mob/living/carbon/human))
|
|
if(M:gloves)
|
|
score += 5
|
|
if(istype(M:wear_suit, /obj/item/clothing/suit/space)) score += 10
|
|
if(istype(M:wear_suit, /obj/item/clothing/suit/bio_suit)) score += 10
|
|
if(istype(M:head, /obj/item/clothing/head/helmet/space)) score += 5
|
|
if(istype(M:head, /obj/item/clothing/head/bio_hood)) score += 5
|
|
if(M.wear_mask)
|
|
score += 5
|
|
if((istype(M:wear_mask, /obj/item/clothing/mask) || istype(M:wear_mask, /obj/item/clothing/mask/surgical)) && !M.internal)
|
|
score += 5
|
|
if(M.internal)
|
|
score += 5
|
|
|
|
if(score > 15)
|
|
return
|
|
// else if(score == 20 && prob(95))
|
|
// return
|
|
else if(score == 15 && prob(75))
|
|
return
|
|
else if(score == 10 && prob(55))
|
|
return
|
|
else if(score == 5 && prob(35))
|
|
return
|
|
|
|
M.virus2 = disease.getcopy()
|
|
M.virus2.minormutate()
|
|
|
|
for(var/datum/disease2/resistance/res in M.resistances)
|
|
if(res.resistsdisease(M.virus2))
|
|
M.virus2 = null
|
|
|
|
|
|
|
|
/datum/disease2/resistance
|
|
var/list/datum/disease2/effect/resistances = list()
|
|
|
|
proc/resistsdisease(var/datum/disease2/disease/virus2)
|
|
var/list/res2 = list()
|
|
for(var/datum/disease2/effect/e in resistances)
|
|
res2 += e.type
|
|
for(var/datum/disease2/effectholder/holder in virus2)
|
|
if(!(holder.effect.type in res2))
|
|
return 0
|
|
else
|
|
res2 -= holder.effect.type
|
|
if(res2.len > 0)
|
|
return 0
|
|
else
|
|
return 1
|
|
|
|
New(var/datum/disease2/disease/virus2)
|
|
for(var/datum/disease2/effectholder/h in virus2.effects)
|
|
resistances += h.effect.type
|
|
|
|
|
|
/proc/infect_mob_random(var/mob/living/carbon/M)
|
|
if(!M.virus2)
|
|
M.virus2 = new /datum/disease2/disease
|
|
M.virus2.makerandom()
|
|
|
|
/datum/disease2/disease
|
|
var/infectionchance = 10
|
|
var/spreadtype = "Blood" // Can also be "Airborne"
|
|
var/stage = 1
|
|
var/stageprob = 2
|
|
var/dead = 0
|
|
var/clicks = 0
|
|
|
|
var/uniqueID = 0
|
|
var/list/datum/disease2/effectholder/effects = list()
|
|
proc/makerandom()
|
|
var/datum/disease2/effectholder/holder = new /datum/disease2/effectholder
|
|
holder.stage = 1
|
|
holder.getrandomeffect()
|
|
effects += holder
|
|
holder = new /datum/disease2/effectholder
|
|
holder.stage = 2
|
|
holder.getrandomeffect()
|
|
effects += holder
|
|
holder = new /datum/disease2/effectholder
|
|
holder.stage = 3
|
|
holder.getrandomeffect()
|
|
effects += holder
|
|
holder = new /datum/disease2/effectholder
|
|
holder.stage = 4
|
|
holder.getrandomeffect()
|
|
effects += holder
|
|
uniqueID = rand(0,10000)
|
|
infectionchance = rand(1,10)
|
|
spreadtype = "Airborne"
|
|
proc/minormutate()
|
|
var/datum/disease2/effectholder/holder = pick(effects)
|
|
holder.minormutate()
|
|
infectionchance = min(10,infectionchance + rand(0,1))
|
|
proc/issame(var/datum/disease2/disease/disease)
|
|
var/list/types = list()
|
|
var/list/types2 = list()
|
|
for(var/datum/disease2/effectholder/d in effects)
|
|
types += d.effect.type
|
|
var/equal = 1
|
|
|
|
for(var/datum/disease2/effectholder/d in disease.effects)
|
|
types2 += d.effect.type
|
|
|
|
for(var/type in types)
|
|
if(!(type in types2))
|
|
equal = 0
|
|
return equal
|
|
|
|
proc/activate(var/mob/living/carbon/mob)
|
|
if(dead)
|
|
mob.virus2 = null
|
|
return
|
|
if(mob.stat == 2)
|
|
return
|
|
if(mob.radiation > 50)
|
|
if(prob(1))
|
|
majormutate()
|
|
if(mob.reagents.has_reagent("spaceacillin"))
|
|
return
|
|
if(prob(stageprob) && prob(25 + (clicks/100)) && stage != 4)
|
|
stage++
|
|
clicks = 0
|
|
for(var/datum/disease2/effectholder/e in effects)
|
|
e.runeffect(mob,stage)
|
|
|
|
proc/cure_added(var/datum/disease2/resistance/res)
|
|
if(res.resistsdisease(src))
|
|
dead = 1
|
|
|
|
proc/majormutate()
|
|
var/datum/disease2/effectholder/holder = pick(effects)
|
|
holder.majormutate()
|
|
|
|
|
|
proc/getcopy()
|
|
// world << "getting copy"
|
|
var/datum/disease2/disease/disease = new /datum/disease2/disease
|
|
disease.infectionchance = infectionchance
|
|
disease.spreadtype = spreadtype
|
|
disease.stageprob = stageprob
|
|
for(var/datum/disease2/effectholder/holder in effects)
|
|
// world << "adding effects"
|
|
var/datum/disease2/effectholder/newholder = new /datum/disease2/effectholder
|
|
newholder.effect = new holder.effect.type
|
|
newholder.chance = holder.chance
|
|
newholder.cure = holder.cure
|
|
newholder.multiplier = holder.multiplier
|
|
newholder.happensonce = holder.happensonce
|
|
newholder.stage = holder.stage
|
|
disease.effects += newholder
|
|
// world << "[newholder.effect.name]"
|
|
// world << "[disease]"
|
|
return disease
|
|
|
|
/datum/disease2/effect
|
|
var/name = "Blanking effect"
|
|
var/stage = 4
|
|
var/maxm = 1
|
|
proc/activate(var/mob/living/carbon/mob,var/multiplier)
|
|
|
|
/datum/disease2/effect/gibbingtons
|
|
name = "Gibbingtons Syndrome"
|
|
stage = 4
|
|
activate(var/mob/living/carbon/mob,var/multiplier)
|
|
mob.gib()
|
|
|
|
/datum/disease2/effect/radian
|
|
name = "Radian's syndrome"
|
|
stage = 4
|
|
maxm = 3
|
|
activate(var/mob/living/carbon/mob,var/multiplier)
|
|
mob.radiation += (2*multiplier)
|
|
|
|
/datum/disease2/effect/toxins
|
|
name = "Hyperacid Syndrome"
|
|
stage = 3
|
|
maxm = 3
|
|
activate(var/mob/living/carbon/mob,var/multiplier)
|
|
mob.toxloss += (2*multiplier)
|
|
|
|
/datum/disease2/effect/scream
|
|
name = "Random screaming syndrome"
|
|
stage = 2
|
|
activate(var/mob/living/carbon/mob,var/multiplier)
|
|
mob.say("*scream")
|
|
|
|
/datum/disease2/effect/drowsness
|
|
name = "Automated sleeping syndrome"
|
|
stage = 2
|
|
activate(var/mob/living/carbon/mob,var/multiplier)
|
|
mob.drowsyness += 10
|
|
|
|
/datum/disease2/effect/shakey
|
|
name = "World Shaking syndrome"
|
|
stage = 3
|
|
maxm = 3
|
|
activate(var/mob/living/carbon/mob,var/multiplier)
|
|
shake_camera(mob,5*multiplier)
|
|
|
|
/datum/disease2/effect/deaf
|
|
name = "Hard of hearing syndrome"
|
|
stage = 4
|
|
activate(var/mob/living/carbon/mob,var/multiplier)
|
|
mob.ear_deaf += 20
|
|
|
|
/datum/disease2/effect/invisible
|
|
name = "Waiting Syndrome"
|
|
stage = 1
|
|
activate(var/mob/living/carbon/mob,var/multiplier)
|
|
return
|
|
/*
|
|
/datum/disease2/effect/telepathic
|
|
name = "Telepathy Syndrome"
|
|
stage = 3
|
|
activate(var/mob/living/carbon/mob,var/multiplier)
|
|
mob.mutations |= 512
|
|
*/
|
|
/datum/disease2/effect/noface
|
|
name = "Identity Loss syndrome"
|
|
stage = 4
|
|
activate(var/mob/living/carbon/mob,var/multiplier)
|
|
mob.real_name = "Unknown"
|
|
|
|
/datum/disease2/effect/monkey
|
|
name = "Monkism syndrome"
|
|
stage = 4
|
|
activate(var/mob/living/carbon/mob,var/multiplier)
|
|
if(istype(mob,/mob/living/carbon/human))
|
|
var/mob/living/carbon/human/h = mob
|
|
h.monkeyize()
|
|
|
|
/datum/disease2/effect/sneeze
|
|
name = "Coldingtons Effect"
|
|
stage = 1
|
|
activate(var/mob/living/carbon/mob,var/multiplier)
|
|
mob.say("*sneeze")
|
|
|
|
/datum/disease2/effect/gunck
|
|
name = "Flemmingtons"
|
|
stage = 1
|
|
activate(var/mob/living/carbon/mob,var/multiplier)
|
|
mob << "\red Mucous runs down the back of your throat."
|
|
|
|
/datum/disease2/effect/killertoxins
|
|
name = "Toxification syndrome"
|
|
stage = 4
|
|
activate(var/mob/living/carbon/mob,var/multiplier)
|
|
mob.toxloss += 15
|
|
/*
|
|
/datum/disease2/effect/hallucinations
|
|
name = "Hallucinational Syndrome"
|
|
stage = 3
|
|
activate(var/mob/living/carbon/mob,var/multiplier)
|
|
mob.hallucination += 25
|
|
*/
|
|
/datum/disease2/effect/sleepy
|
|
name = "Resting syndrome"
|
|
stage = 2
|
|
activate(var/mob/living/carbon/mob,var/multiplier)
|
|
mob.say("*collapse")
|
|
|
|
/datum/disease2/effect/mind
|
|
name = "Lazy mind syndrome"
|
|
stage = 3
|
|
activate(var/mob/living/carbon/mob,var/multiplier)
|
|
mob.brainloss = 50
|
|
|
|
/datum/disease2/effect/suicide
|
|
name = "Suicidal syndrome"
|
|
stage = 4
|
|
activate(var/mob/living/carbon/mob,var/multiplier)
|
|
mob.suiciding = 1
|
|
//instead of killing them instantly, just put them at -175 health and let 'em gasp for a while
|
|
viewers(mob) << "\red <b>[mob.name] is holding \his breath. It looks like \he's trying to commit suicide.</b>"
|
|
mob.oxyloss = max(175 - mob.toxloss - mob.fireloss - mob.bruteloss, mob.oxyloss)
|
|
mob.updatehealth()
|
|
spawn(200) //in case they get revived by cryo chamber or something stupid like that, let them suicide again in 20 seconds
|
|
mob.suiciding = 0
|
|
|
|
/datum/disease2/effectholder
|
|
var/name = "Holder"
|
|
var/datum/disease2/effect/effect
|
|
var/chance = 0 //Chance in percentage each tick
|
|
var/cure = "" //Type of cure it requires
|
|
var/happensonce = 0
|
|
var/multiplier = 1 //The chance the effects are WORSE
|
|
var/stage = 0
|
|
|
|
proc/runeffect(var/mob/living/carbon/human/mob,var/stage)
|
|
if(happensonce > -1 && effect.stage <= stage && prob(chance))
|
|
effect.activate(mob)
|
|
if(happensonce == 1)
|
|
happensonce = -1
|
|
|
|
proc/getrandomeffect()
|
|
var/list/datum/disease2/effect/list = list()
|
|
for(var/e in (typesof(/datum/disease2/effect) - /datum/disease2/effect))
|
|
// world << "Making [e]"
|
|
var/datum/disease2/effect/f = new e
|
|
if(f.stage == src.stage)
|
|
list += f
|
|
effect = pick(list)
|
|
chance = rand(1,6)
|
|
|
|
proc/minormutate()
|
|
switch(pick(1,2,3,4,5))
|
|
if(1)
|
|
chance = rand(0,100)
|
|
if(2)
|
|
multiplier = rand(1,effect.maxm)
|
|
proc/majormutate()
|
|
getrandomeffect()
|
|
|
|
/proc/dprob(var/p)
|
|
return(prob(sqrt(p)) && prob(sqrt(p)))
|