mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-22 19:47:22 +01:00
@@ -0,0 +1,78 @@
|
||||
/obj/machinery/disease2/diseaseanalyser
|
||||
name = "Disease Analyser"
|
||||
icon = 'virology.dmi'
|
||||
icon_state = "analyser"
|
||||
anchored = 1
|
||||
density = 1
|
||||
|
||||
var/scanning = 0
|
||||
var/pause = 0
|
||||
|
||||
var/obj/item/weapon/virusdish/dish = null
|
||||
|
||||
/obj/machinery/disease2/diseaseanalyser/attackby(var/obj/I as obj, var/mob/user as mob)
|
||||
if(istype(I,/obj/item/weapon/virusdish))
|
||||
var/mob/living/carbon/c = user
|
||||
if(!dish)
|
||||
|
||||
dish = I
|
||||
c.drop_item()
|
||||
I.loc = src
|
||||
for(var/mob/M in viewers(src))
|
||||
if(M == user) continue
|
||||
M.show_message("\blue [user.name] inserts the [dish.name] in the [src.name]", 3)
|
||||
|
||||
|
||||
else
|
||||
user << "There is already a dish inserted"
|
||||
|
||||
//else
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/disease2/diseaseanalyser/process()
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
use_power(500)
|
||||
//src.updateDialog()
|
||||
|
||||
|
||||
if(scanning)
|
||||
scanning -= 1
|
||||
if(scanning == 0)
|
||||
var/r = "GNAv2 based virus lifeform"
|
||||
r += "<BR>Infection rate : [dish.virus2.infectionchance * 10]"
|
||||
r += "<BR>Spread form : [dish.virus2.spreadtype]"
|
||||
r += "<BR>Progress Speed : [dish.virus2.stageprob * 10]"
|
||||
for(var/datum/disease2/effectholder/E in dish.virus2.effects)
|
||||
r += "<BR>Effect:[E.effect.name]. Strength : [E.multiplier * 8]. Verosity : [E.chance * 15]. Type : [5-E.stage]."
|
||||
// display the antigens
|
||||
var/code = ""
|
||||
for(var/V in ANTIGENS) if(text2num(V) & dish.virus2.antigen) code += ANTIGENS[V]
|
||||
r += "<BR>Antigen pattern: [code]"
|
||||
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src.loc)
|
||||
P.info = r
|
||||
dish.info = r
|
||||
dish.analysed = 1
|
||||
dish.loc = src.loc
|
||||
dish = null
|
||||
icon_state = "analyser"
|
||||
|
||||
for(var/mob/O in hearers(src, null))
|
||||
O.show_message("\icon[src] \blue The [src.name] prints a sheet of paper", 3)
|
||||
else if(dish && !scanning && !pause)
|
||||
if(dish.virus2 && dish.growth > 50)
|
||||
dish.growth -= 10
|
||||
scanning = 5
|
||||
icon_state = "analyser_processing"
|
||||
else
|
||||
pause = 1
|
||||
spawn(25)
|
||||
dish.loc = src.loc
|
||||
dish = null
|
||||
for(var/mob/M in viewers(src))
|
||||
M.show_message("\icon[src] \blue The [src.name] buzzes", 2)
|
||||
pause = 0
|
||||
|
||||
return
|
||||
@@ -0,0 +1,54 @@
|
||||
// pure concentrated antibodies
|
||||
datum/reagent/antibodies
|
||||
data = new/list("antibodies"=0)
|
||||
name = "Antibodies"
|
||||
id = "antibodies"
|
||||
reagent_state = LIQUID
|
||||
color = "#0050F0"
|
||||
|
||||
reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
|
||||
if(istype(M,/mob/living/carbon/human))
|
||||
if(src.data && method == INGEST)
|
||||
if(src.data["antibodies"] & M:virus2.antigen)
|
||||
M:virus2.dead = 1
|
||||
return
|
||||
|
||||
// reserving some numbers for later special antigens
|
||||
var/global/const
|
||||
ANTIGEN_A = 1
|
||||
ANTIGEN_B = 2
|
||||
ANTIGEN_RH = 4
|
||||
ANTIGEN_Q = 8
|
||||
ANTIGEN_U = 16
|
||||
ANTIGEN_V = 32
|
||||
ANTIGEN_X = 64
|
||||
ANTIGEN_Y = 128
|
||||
ANTIGEN_Z = 256
|
||||
ANTIGEN_M = 512
|
||||
ANTIGEN_N = 1024
|
||||
ANTIGEN_P = 2048
|
||||
ANTIGEN_O = 4096
|
||||
|
||||
var/global/list/ANTIGENS = list("[ANTIGEN_A]" = "A", "[ANTIGEN_B]" = "B", "[ANTIGEN_RH]" = "RH", "[ANTIGEN_Q]" = "Q",
|
||||
"[ANTIGEN_U]" = "U", "[ANTIGEN_V]" = "V", "[ANTIGEN_Z]" = "Z", "[ANTIGEN_M]" = "M",
|
||||
"[ANTIGEN_N]" = "N", "[ANTIGEN_P]" = "P", "[ANTIGEN_O]" = "O")
|
||||
|
||||
|
||||
|
||||
/obj/item/device/antibody_scanner
|
||||
name = "Antibody Scanner"
|
||||
desc = "Used to scan living beings for antibodies in their blood."
|
||||
icon_state = "health"
|
||||
w_class = 2.0
|
||||
item_state = "electronic"
|
||||
flags = FPRINT | TABLEPASS | ONBELT | CONDUCT | USEDELAY
|
||||
|
||||
|
||||
/obj/item/device/antibody_scanner/attack(mob/living/carbon/human/M as mob, mob/user as mob)
|
||||
if(! istype(M, /mob/living/carbon) || !M:antibodies)
|
||||
user << "Unable to detect antibodies.."
|
||||
else
|
||||
// iterate over the list of antigens and see what matches
|
||||
var/code = ""
|
||||
for(var/V in ANTIGENS) if(text2num(V) & M.antibodies) code += ANTIGENS[V]
|
||||
user << text("\blue [src] The antibody scanner displays a cryptic set of data: [code]")
|
||||
@@ -0,0 +1,591 @@
|
||||
/obj/virus
|
||||
// a virus instance that is placed on the map, moves, and infects
|
||||
invisibility = 100
|
||||
|
||||
var/datum/disease2/disease
|
||||
|
||||
New()
|
||||
..()
|
||||
step_rand(src)
|
||||
step_rand(src)
|
||||
anchored = 1
|
||||
spawn(300) del(src)
|
||||
|
||||
/mob/living/carbon/proc/get_infection_chance()
|
||||
var/score = 0
|
||||
var/mob/living/carbon/M = src
|
||||
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/surgical) && !M.internal)
|
||||
score += 10
|
||||
if(M.internal)
|
||||
score += 10
|
||||
|
||||
if(score >= 30)
|
||||
return 0
|
||||
else if(score == 25 && prob(99))
|
||||
return 0
|
||||
else if(score == 20 && prob(95))
|
||||
return 0
|
||||
else if(score == 15 && prob(75))
|
||||
return 0
|
||||
else if(score == 10 && prob(55))
|
||||
return 0
|
||||
else if(score == 5 && prob(35))
|
||||
return 0
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
/proc/infect_virus2(var/mob/living/carbon/M,var/datum/disease2/disease/disease,var/forced = 0)
|
||||
if(M.virus2)
|
||||
return
|
||||
if(!disease)
|
||||
return
|
||||
//immunity
|
||||
/*for(var/iii = 1, iii <= M.immunevirus2.len, iii++)
|
||||
if(disease.issame(M.immunevirus2[iii]))
|
||||
return*/
|
||||
|
||||
// if one of the antibodies in the mob's body matches one of the disease's antigens, don't infect
|
||||
if(M.antibodies & disease.antigen != 0) return
|
||||
|
||||
for(var/datum/disease2/resistance/res in M.resistances)
|
||||
if(res.resistsdisease(disease))
|
||||
return
|
||||
if(prob(disease.infectionchance) || forced)
|
||||
if(M.virus2)
|
||||
return
|
||||
else
|
||||
// certain clothes can prevent an infection
|
||||
if(!forced && !M.get_infection_chance())
|
||||
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_lesser(var/mob/living/carbon/M)
|
||||
if(!M.virus2)
|
||||
M.virus2 = new /datum/disease2/disease
|
||||
M.virus2.makerandom()
|
||||
M.virus2.infectionchance = 1
|
||||
|
||||
/proc/infect_mob_random_greater(var/mob/living/carbon/M)
|
||||
if(!M.virus2)
|
||||
M.virus2 = new /datum/disease2/disease
|
||||
M.virus2.makerandom(1)
|
||||
|
||||
/datum/disease2/var/antigen = 0 // 16 bits describing the antigens, when one bit is set, a cure with that bit can dock here
|
||||
|
||||
/datum/disease2/disease
|
||||
var/infectionchance = 10
|
||||
var/speed = 1
|
||||
var/spreadtype = "Blood" // Can also be "Airborne"
|
||||
var/stage = 1
|
||||
var/stageprob = 10
|
||||
var/dead = 0
|
||||
var/clicks = 0
|
||||
|
||||
var/uniqueID = 0
|
||||
var/list/datum/disease2/effectholder/effects = list()
|
||||
proc/makerandom(var/greater=0)
|
||||
var/datum/disease2/effectholder/holder = new /datum/disease2/effectholder
|
||||
holder.stage = 1
|
||||
if(greater)
|
||||
holder.getrandomeffect_greater()
|
||||
else
|
||||
holder.getrandomeffect_lesser()
|
||||
effects += holder
|
||||
holder = new /datum/disease2/effectholder
|
||||
holder.stage = 2
|
||||
if(greater)
|
||||
holder.getrandomeffect_greater()
|
||||
else
|
||||
holder.getrandomeffect_lesser()
|
||||
effects += holder
|
||||
holder = new /datum/disease2/effectholder
|
||||
holder.stage = 3
|
||||
if(greater)
|
||||
holder.getrandomeffect_greater()
|
||||
else
|
||||
holder.getrandomeffect_lesser()
|
||||
effects += holder
|
||||
holder = new /datum/disease2/effectholder
|
||||
holder.stage = 4
|
||||
if(greater)
|
||||
holder.getrandomeffect_greater()
|
||||
else
|
||||
holder.getrandomeffect_lesser()
|
||||
effects += holder
|
||||
uniqueID = rand(0,10000)
|
||||
infectionchance = rand(1,10)
|
||||
// pick 2 antigens
|
||||
antigen |= text2num(pick(ANTIGENS))
|
||||
antigen |= text2num(pick(ANTIGENS))
|
||||
spreadtype = "Airborne"
|
||||
|
||||
proc/makealien()
|
||||
var/datum/disease2/effectholder/holder = new /datum/disease2/effectholder
|
||||
holder.stage = 1
|
||||
holder.chance = 10
|
||||
holder.effect = new/datum/disease2/effect/lesser/gunck()
|
||||
effects += holder
|
||||
|
||||
holder = new /datum/disease2/effectholder
|
||||
holder.stage = 2
|
||||
holder.chance = 10
|
||||
holder.effect = new/datum/disease2/effect/lesser/cough()
|
||||
effects += holder
|
||||
|
||||
holder = new /datum/disease2/effectholder
|
||||
holder.stage = 3
|
||||
holder.chance = 10
|
||||
holder.effect = new/datum/disease2/effect/greater/toxins()
|
||||
effects += holder
|
||||
|
||||
holder = new /datum/disease2/effectholder
|
||||
holder.stage = 4
|
||||
holder.chance = 10
|
||||
holder.effect = new/datum/disease2/effect/alien()
|
||||
effects += holder
|
||||
|
||||
uniqueID = 896 // all alien diseases have the same ID
|
||||
infectionchance = 0
|
||||
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)
|
||||
cure(mob)
|
||||
mob.virus2 = null
|
||||
return
|
||||
if(mob.stat == 2)
|
||||
return
|
||||
// with a certain chance, the mob may become immune to the disease before it starts properly
|
||||
if(stage <= 1 && clicks == 0)
|
||||
if(prob(20))
|
||||
mob.antibodies |= antigen // 20% immunity is a good chance IMO, because it allows finding an immune person easily
|
||||
else
|
||||
if(mob.radiation > 50)
|
||||
if(prob(1))
|
||||
majormutate()
|
||||
if(mob.reagents.has_reagent("spaceacillin"))
|
||||
mob.reagents.remove_reagent("spaceacillin",0.3)
|
||||
return
|
||||
if(mob.reagents.has_reagent("virusfood"))
|
||||
mob.reagents.remove_reagent("virusfood",0.1)
|
||||
clicks += 10
|
||||
if(clicks > stage*100 && prob(10))
|
||||
if(stage == 4)
|
||||
var/datum/disease2/resistance/res = new /datum/disease2/resistance(src)
|
||||
src.cure(mob)
|
||||
mob.resistances2 += res
|
||||
mob.antibodies |= src.antigen
|
||||
mob.virus2 = null
|
||||
del src
|
||||
stage++
|
||||
clicks = 0
|
||||
for(var/datum/disease2/effectholder/e in effects)
|
||||
e.runeffect(mob,stage)
|
||||
clicks+=speed
|
||||
|
||||
proc/cure(var/mob/living/carbon/mob)
|
||||
var/datum/disease2/effectholder/E
|
||||
if(stage>1)
|
||||
E = effects[1]
|
||||
E.effect.deactivate(mob)
|
||||
if(stage>2)
|
||||
E = effects[2]
|
||||
E.effect.deactivate(mob)
|
||||
if(stage>3)
|
||||
E = effects[3]
|
||||
E.effect.deactivate(mob)
|
||||
if(stage>4)
|
||||
E = effects[4]
|
||||
E.effect.deactivate(mob)
|
||||
|
||||
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
|
||||
disease.antigen = antigen
|
||||
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/chance_maxm = 100
|
||||
var/name = "Blanking effect"
|
||||
var/stage = 4
|
||||
var/maxm = 1
|
||||
proc/activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
proc/deactivate(var/mob/living/carbon/mob)
|
||||
|
||||
/datum/disease2/effect/alien
|
||||
name = "Unidentified Foreign Body"
|
||||
stage = 4
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob << "\red You feel something tearing its way out of your stomach..."
|
||||
mob.toxloss += 10
|
||||
mob.updatehealth()
|
||||
if(prob(40))
|
||||
if(mob.client)
|
||||
mob.client.mob = new/mob/living/carbon/alien/larva(mob.loc)
|
||||
else
|
||||
new/mob/living/carbon/alien/larva(mob.loc)
|
||||
var/datum/disease2/disease/D = mob:virus2
|
||||
mob:gib()
|
||||
del D
|
||||
|
||||
/datum/disease2/effect/greater/gibbingtons
|
||||
name = "Gibbingtons Syndrome"
|
||||
stage = 4
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.gib()
|
||||
|
||||
/datum/disease2/effect/greater/radian
|
||||
name = "Radian's syndrome"
|
||||
stage = 4
|
||||
maxm = 3
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.radiation += (2*multiplier)
|
||||
|
||||
/datum/disease2/effect/greater/toxins
|
||||
name = "Hyperacid Syndrome"
|
||||
stage = 3
|
||||
maxm = 3
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.toxloss += (2*multiplier)
|
||||
|
||||
/datum/disease2/effect/greater/scream
|
||||
name = "Random screaming syndrome"
|
||||
stage = 2
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.say("*scream")
|
||||
|
||||
/datum/disease2/effect/greater/drowsness
|
||||
name = "Automated sleeping syndrome"
|
||||
stage = 2
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.drowsyness += 10
|
||||
|
||||
/datum/disease2/effect/greater/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/greater/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/greater/telepathic
|
||||
name = "Telepathy Syndrome"
|
||||
stage = 3
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.mutations |= 512
|
||||
|
||||
/*/datum/disease2/effect/greater/noface
|
||||
name = "Identity Loss syndrome"
|
||||
stage = 4
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.face_dmg++
|
||||
deactivate(var/mob/living/carbon/mob)
|
||||
mob.face_dmg--*/
|
||||
|
||||
/datum/disease2/effect/greater/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/greater/sneeze
|
||||
name = "Coldingtons Effect"
|
||||
stage = 1
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.say("*sneeze")
|
||||
|
||||
/datum/disease2/effect/greater/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/greater/killertoxins
|
||||
name = "Toxification syndrome"
|
||||
stage = 4
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.toxloss += 15
|
||||
|
||||
/*/datum/disease2/effect/greater/hallucinations
|
||||
name = "Hallucinational Syndrome"
|
||||
stage = 3
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.hallucination += 25*/
|
||||
|
||||
/datum/disease2/effect/greater/sleepy
|
||||
name = "Resting syndrome"
|
||||
stage = 2
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.say("*collapse")
|
||||
|
||||
/datum/disease2/effect/greater/mind
|
||||
name = "Lazy mind syndrome"
|
||||
stage = 3
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.brainloss = 50
|
||||
|
||||
/datum/disease2/effect/greater/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
|
||||
|
||||
// lesser syndromes, partly just copypastes
|
||||
/datum/disease2/effect/lesser/mind
|
||||
name = "Lazy mind syndrome"
|
||||
stage = 3
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.brainloss = 20
|
||||
|
||||
/datum/disease2/effect/lesser/drowsy
|
||||
name = "Bedroom Syndrome"
|
||||
stage = 2
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.drowsyness = 5
|
||||
|
||||
/datum/disease2/effect/lesser/deaf
|
||||
name = "Hard of hearing syndrome"
|
||||
stage = 3
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.ear_deaf = 5
|
||||
|
||||
/datum/disease2/effect/lesser/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/lesser/radian
|
||||
name = "Radian's syndrome"
|
||||
stage = 4
|
||||
maxm = 3
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.radiation += 1
|
||||
|
||||
/datum/disease2/effect/lesser/sneeze
|
||||
name = "Coldingtons Effect"
|
||||
stage = 1
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.say("*sneeze")
|
||||
|
||||
/datum/disease2/effect/lesser/cough
|
||||
name = "Anima Syndrome"
|
||||
stage = 2
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.say("*cough")
|
||||
|
||||
/*/datum/disease2/effect/lesser/hallucinations
|
||||
name = "Hallucinational Syndrome"
|
||||
stage = 3
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.hallucination += 5*/
|
||||
|
||||
/*/datum/disease2/effect/lesser/arm
|
||||
name = "Disarming Syndrome"
|
||||
stage = 4
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
var/datum/organ/external/org = mob.organs["r_arm"]
|
||||
org.take_damage(3,0,0,0)
|
||||
mob << "\red You feel a sting in your right arm."*/
|
||||
|
||||
/datum/disease2/effect/lesser/hungry
|
||||
name = "Appetiser Effect"
|
||||
stage = 2
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.nutrition = max(0, mob.nutrition - 200)
|
||||
|
||||
/datum/disease2/effect/lesser/groan
|
||||
name = "Groaning Syndrome"
|
||||
stage = 3
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.say("*groan")
|
||||
|
||||
/datum/disease2/effect/lesser/scream
|
||||
name = "Loudness Syndrome"
|
||||
stage = 4
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.say("*scream")
|
||||
|
||||
/datum/disease2/effect/lesser/drool
|
||||
name = "Saliva Effect"
|
||||
stage = 1
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.say("*drool")
|
||||
|
||||
/datum/disease2/effect/lesser/fridge
|
||||
name = "Refridgerator Syndrome"
|
||||
stage = 2
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.say("*shiver")
|
||||
|
||||
/datum/disease2/effect/lesser/twitch
|
||||
name = "Twitcher"
|
||||
stage = 1
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.say("*twitch")
|
||||
|
||||
/*Removed on request by Spaceman, due to it being detrimental to RP. -CN
|
||||
/datum/disease2/effect/lesser/deathgasp
|
||||
name = "Zombie Syndrome"
|
||||
stage = 4
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.say("*deathgasp")*/
|
||||
|
||||
/datum/disease2/effect/lesser/giggle
|
||||
name = "Uncontrolled Laughter Effect"
|
||||
stage = 3
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.say("*giggle")
|
||||
|
||||
|
||||
/datum/disease2/effect/lesser
|
||||
chance_maxm = 10
|
||||
|
||||
/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_greater()
|
||||
var/list/datum/disease2/effect/list = list()
|
||||
for(var/e in (typesof(/datum/disease2/effect/greater) - /datum/disease2/effect/greater))
|
||||
// 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/getrandomeffect_lesser()
|
||||
var/list/datum/disease2/effect/list = list()
|
||||
for(var/e in (typesof(/datum/disease2/effect/lesser) - /datum/disease2/effect/lesser))
|
||||
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,effect.chance_maxm)
|
||||
if(2)
|
||||
multiplier = rand(1,effect.maxm)
|
||||
proc/majormutate()
|
||||
getrandomeffect_greater()
|
||||
|
||||
/proc/dprob(var/p)
|
||||
return(prob(sqrt(p)) && prob(sqrt(p)))
|
||||
@@ -0,0 +1,20 @@
|
||||
/obj/machinery/disease2/biodestroyer
|
||||
name = "Biohazard destroyer"
|
||||
icon = 'disposal.dmi'
|
||||
icon_state = "disposalbio"
|
||||
var/list/accepts = list(/obj/item/clothing,/obj/item/weapon/virusdish/,/obj/item/weapon/cureimplanter,/obj/item/weapon/diseasedisk,/obj/item/weapon/reagent_containers)
|
||||
density = 1
|
||||
anchored = 1
|
||||
|
||||
/obj/machinery/disease2/biodestroyer/attackby(var/obj/I as obj, var/mob/user as mob)
|
||||
for(var/path in accepts)
|
||||
if(I.type in typesof(path))
|
||||
user.drop_item()
|
||||
del(I)
|
||||
overlays += image('disposal.dmi', "dispover-handle")
|
||||
return
|
||||
user.drop_item()
|
||||
I.loc = src.loc
|
||||
|
||||
for(var/mob/O in hearers(src, null))
|
||||
O.show_message("\icon[src] \blue The [src.name] beeps", 2)
|
||||
@@ -0,0 +1,43 @@
|
||||
/obj/item/weapon/cureimplanter
|
||||
name = "Hypospray injector"
|
||||
icon = 'items.dmi'
|
||||
icon_state = "implanter1"
|
||||
var/datum/disease2/resistance/resistance = null
|
||||
var/works = 0
|
||||
var/datum/disease2/disease/virus2 = null
|
||||
item_state = "syringe_0"
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = 2.0
|
||||
|
||||
|
||||
/obj/item/weapon/cureimplanter/attack(mob/target as mob, mob/user as mob)
|
||||
if(ismob(target))
|
||||
for(var/mob/O in viewers(world.view, user))
|
||||
if (target != user)
|
||||
O.show_message(text("\red <B>[] is trying to inject [] with [src.name]!</B>", user, target), 1)
|
||||
else
|
||||
O.show_message("\red <B>[user] is trying to inject themselves with [src.name]!</B>", 1)
|
||||
if(!do_mob(user, target,60)) return
|
||||
|
||||
|
||||
for(var/mob/O in viewers(world.view, user))
|
||||
if (target != user)
|
||||
O.show_message(text("\red [] injects [] with [src.name]!", user, target), 1)
|
||||
else
|
||||
O.show_message("\red [user] injects themself with [src.name]!", 1)
|
||||
|
||||
|
||||
var/mob/living/carbon/M = target
|
||||
|
||||
if(works == 0)
|
||||
M.resistances2 += resistance
|
||||
//M.immunevirus2 += M.virus2.getcopy()
|
||||
if(M.virus2)
|
||||
M.virus2.cure_added(resistance)
|
||||
else if(works == 1)
|
||||
M.toxloss += 60
|
||||
else if(works == 2)
|
||||
M.gib()
|
||||
else if(works == 3)
|
||||
infect_virus2(M,virus2,1)
|
||||
@@ -0,0 +1,129 @@
|
||||
/obj/machinery/computer/curer
|
||||
name = "Cure Research Machine"
|
||||
icon = 'computer.dmi'
|
||||
icon_state = "dna"
|
||||
var/curing
|
||||
var/virusing
|
||||
|
||||
var/obj/item/weapon/reagent_containers/container = null
|
||||
|
||||
/obj/machinery/computer/curer/attackby(var/obj/I as obj, var/mob/user as mob)
|
||||
if(istype(I, /obj/item/weapon/screwdriver))
|
||||
playsound(src.loc, 'Screwdriver.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
if (src.stat & BROKEN)
|
||||
user << "\blue The broken glass falls out."
|
||||
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
|
||||
new /obj/item/weapon/shard( src.loc )
|
||||
//var/obj/item/weapon/circuitboard/curer/M = new /obj/item/weapon/circuitboard/curer( A )
|
||||
for (var/obj/C in src)
|
||||
C.loc = src.loc
|
||||
//A.circuit = M
|
||||
A.state = 3
|
||||
A.icon_state = "3"
|
||||
A.anchored = 1
|
||||
del(src)
|
||||
else
|
||||
user << "\blue You disconnect the monitor."
|
||||
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
|
||||
//var/obj/item/weapon/circuitboard/curer/M = new /obj/item/weapon/circuitboard/curer( A )
|
||||
for (var/obj/C in src)
|
||||
C.loc = src.loc
|
||||
//A.circuit = M
|
||||
A.state = 4
|
||||
A.icon_state = "4"
|
||||
A.anchored = 1
|
||||
del(src)
|
||||
if(istype(I,/obj/item/weapon/reagent_containers))
|
||||
var/mob/living/carbon/C = user
|
||||
if(!container)
|
||||
container = I
|
||||
C.drop_item()
|
||||
I.loc = src
|
||||
|
||||
//else
|
||||
src.attack_hand(user)
|
||||
return
|
||||
|
||||
/obj/machinery/computer/curer/attack_ai(var/mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/machinery/computer/curer/attack_paw(var/mob/user as mob)
|
||||
|
||||
return src.attack_hand(user)
|
||||
return
|
||||
|
||||
/obj/machinery/computer/curer/attack_hand(var/mob/user as mob)
|
||||
if(..())
|
||||
return
|
||||
user.machine = src
|
||||
var/dat
|
||||
if(curing)
|
||||
dat = "Antibody production in progress"
|
||||
else if(virusing)
|
||||
dat = "Virus production in progress"
|
||||
else if(container)
|
||||
// see if there's any blood in the container
|
||||
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in container.reagents.reagent_list
|
||||
|
||||
if(B)
|
||||
dat = "Blood sample inserted."
|
||||
dat += "<BR><A href='?src=\ref[src];antibody=1'>Begin antibody production</a>"
|
||||
else
|
||||
dat += "<BR>Please check container contents."
|
||||
dat += "<BR><A href='?src=\ref[src];eject=1'>Eject container</a>"
|
||||
else
|
||||
dat = "Please insert a container."
|
||||
|
||||
user << browse(dat, "window=computer;size=400x500")
|
||||
onclose(user, "computer")
|
||||
return
|
||||
|
||||
/obj/machinery/computer/curer/process()
|
||||
..()
|
||||
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
use_power(500)
|
||||
//src.updateDialog()
|
||||
|
||||
if(curing)
|
||||
curing -= 1
|
||||
if(curing == 0)
|
||||
if(container)
|
||||
createcure(container)
|
||||
return
|
||||
|
||||
/obj/machinery/computer/curer/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
|
||||
usr.machine = src
|
||||
|
||||
if (href_list["antibody"])
|
||||
curing = 10
|
||||
else if(href_list["eject"])
|
||||
container.loc = src.loc
|
||||
container = null
|
||||
|
||||
src.add_fingerprint(usr)
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/computer/curer/proc/createcure(var/obj/item/weapon/reagent_containers/container)
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/product = new(src.loc)
|
||||
|
||||
var/datum/reagent/blood/B = locate() in container.reagents.reagent_list
|
||||
|
||||
var/list/data = list()
|
||||
data["antibodies"] = B.data["antibodies"]
|
||||
product.reagents.add_reagent("antibodies",30,data)
|
||||
|
||||
state("The [src.name] Buzzes", "blue")
|
||||
|
||||
/obj/machinery/computer/curer/proc/createvirus(var/datum/disease2/disease/virus2)
|
||||
var/obj/item/weapon/cureimplanter/implanter = new /obj/item/weapon/cureimplanter(src.loc)
|
||||
implanter.name = "Viral implanter (MAJOR BIOHAZARD)"
|
||||
implanter.works = 3
|
||||
state("The [src.name] Buzzes", "blue")
|
||||
@@ -0,0 +1,185 @@
|
||||
/obj/machinery/computer/diseasesplicer
|
||||
name = "Disease Splicer"
|
||||
icon = 'computer.dmi'
|
||||
icon_state = "crew"
|
||||
|
||||
var/datum/disease2/effectholder/memorybank = null
|
||||
var/analysed = 0
|
||||
var/obj/item/weapon/virusdish/dish = null
|
||||
var/burning = 0
|
||||
|
||||
var/splicing = 0
|
||||
var/scanning = 0
|
||||
|
||||
/obj/machinery/computer/diseasesplicer/attackby(var/obj/I as obj, var/mob/user as mob)
|
||||
if(istype(I, /obj/item/weapon/screwdriver))
|
||||
playsound(src.loc, 'Screwdriver.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
if (src.stat & BROKEN)
|
||||
user << "\blue The broken glass falls out."
|
||||
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
|
||||
new /obj/item/weapon/shard( src.loc )
|
||||
//var/obj/item/weapon/circuitboard/diseasesplicer/M = new /obj/item/weapon/circuitboard/diseasesplicer( A )
|
||||
for (var/obj/C in src)
|
||||
C.loc = src.loc
|
||||
//A.circuit = M
|
||||
A.state = 3
|
||||
A.icon_state = "3"
|
||||
A.anchored = 1
|
||||
del(src)
|
||||
else
|
||||
user << "\blue You disconnect the monitor."
|
||||
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
|
||||
//var/obj/item/weapon/circuitboard/diseasesplicer/M = new /obj/item/weapon/circuitboard/diseasesplicer( A )
|
||||
for (var/obj/C in src)
|
||||
C.loc = src.loc
|
||||
//A.circuit = M
|
||||
A.state = 4
|
||||
A.icon_state = "4"
|
||||
A.anchored = 1
|
||||
del(src)
|
||||
if(istype(I,/obj/item/weapon/virusdish))
|
||||
var/mob/living/carbon/c = user
|
||||
if(!dish)
|
||||
|
||||
dish = I
|
||||
c.drop_item()
|
||||
I.loc = src
|
||||
if(istype(I,/obj/item/weapon/diseasedisk))
|
||||
user << "You upload the contents of the disk into the buffer"
|
||||
memorybank = I:effect
|
||||
|
||||
|
||||
//else
|
||||
src.attack_hand(user)
|
||||
return
|
||||
|
||||
/obj/machinery/computer/diseasesplicer/attack_ai(var/mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/machinery/computer/diseasesplicer/attack_paw(var/mob/user as mob)
|
||||
|
||||
return src.attack_hand(user)
|
||||
return
|
||||
|
||||
/obj/machinery/computer/diseasesplicer/attack_hand(var/mob/user as mob)
|
||||
if(..())
|
||||
return
|
||||
user.machine = src
|
||||
var/dat
|
||||
if(splicing)
|
||||
dat = "Splicing in progress"
|
||||
else if(scanning)
|
||||
dat = "Splicing in progress"
|
||||
else if(burning)
|
||||
dat = "Data disk burning in progress"
|
||||
else
|
||||
if(dish)
|
||||
dat = "Virus dish inserted"
|
||||
|
||||
dat += "<BR>Current DNA strand : "
|
||||
if(memorybank)
|
||||
dat += "<A href='?src=\ref[src];splice=1'>"
|
||||
if(analysed)
|
||||
dat += "[memorybank.effect.name] ([5-memorybank.effect.stage])"
|
||||
else
|
||||
dat += "Unknown DNA strand ([5-memorybank.effect.stage])"
|
||||
dat += "</a>"
|
||||
|
||||
dat += "<BR><A href='?src=\ref[src];disk=1'>Burn DNA Sequence to data storage disk</a>"
|
||||
else
|
||||
dat += "Empty"
|
||||
|
||||
dat += "<BR><BR>"
|
||||
|
||||
if(dish)
|
||||
if(dish.virus2)
|
||||
if(dish.growth >= 50)
|
||||
for(var/datum/disease2/effectholder/e in dish.virus2.effects)
|
||||
dat += "<BR><A href='?src=\ref[src];grab=\ref[e]'> DNA strand"
|
||||
if(dish.analysed)
|
||||
dat += ": [e.effect.name]"
|
||||
dat += " (5-[e.effect.stage])</a>"
|
||||
else
|
||||
dat += "<BR>Insufficent cells to attempt gene splicing"
|
||||
else
|
||||
dat += "<BR>No virus found in dish"
|
||||
|
||||
dat += "<BR><BR><A href='?src=\ref[src];eject=1'>Eject disk</a>"
|
||||
else
|
||||
dat += "<BR>Please insert dish"
|
||||
|
||||
user << browse(dat, "window=computer;size=400x500")
|
||||
onclose(user, "computer")
|
||||
return
|
||||
|
||||
/obj/machinery/computer/diseasesplicer/process()
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
use_power(500)
|
||||
//src.updateDialog()
|
||||
|
||||
if(scanning)
|
||||
scanning -= 1
|
||||
if(!scanning)
|
||||
state("The [src.name] beeps", "blue")
|
||||
if(splicing)
|
||||
splicing -= 1
|
||||
if(!splicing)
|
||||
state("The [src.name] pings", "blue")
|
||||
if(burning)
|
||||
burning -= 1
|
||||
if(!burning)
|
||||
var/obj/item/weapon/diseasedisk/d = new /obj/item/weapon/diseasedisk(src.loc)
|
||||
if(analysed)
|
||||
d.name = "[memorybank.effect.name] GNA disk (Stage: [5-memorybank.effect.stage])"
|
||||
else
|
||||
d.name = "Unknown GNA disk (Stage: [5-memorybank.effect.stage])"
|
||||
d.effect = memorybank
|
||||
state("The [src.name] zings", "blue")
|
||||
|
||||
return
|
||||
|
||||
/obj/machinery/computer/diseasesplicer/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
|
||||
usr.machine = src
|
||||
|
||||
if (href_list["grab"])
|
||||
memorybank = locate(href_list["grab"])
|
||||
analysed = dish.analysed
|
||||
del(dish)
|
||||
dish = null
|
||||
scanning = 10
|
||||
|
||||
else if(href_list["eject"])
|
||||
dish.loc = src.loc
|
||||
dish = null
|
||||
|
||||
else if(href_list["splice"])
|
||||
for(var/datum/disease2/effectholder/e in dish.virus2.effects)
|
||||
if(e.stage == memorybank.stage)
|
||||
e.effect = memorybank.effect
|
||||
splicing = 10
|
||||
dish.virus2.spreadtype = "Blood"
|
||||
|
||||
else if(href_list["disk"])
|
||||
burning = 10
|
||||
|
||||
src.add_fingerprint(usr)
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
/obj/item/weapon/diseasedisk
|
||||
name = "Blank GNA disk"
|
||||
icon = 'items.dmi'
|
||||
icon_state = "datadisk0"
|
||||
var/datum/disease2/effectholder/effect = null
|
||||
var/stage = 1
|
||||
|
||||
/obj/item/weapon/diseasedisk/premade/New()
|
||||
name = "Blank GNA disk (stage: [5-stage])"
|
||||
effect = new /datum/disease2/effectholder
|
||||
effect.effect = new /datum/disease2/effect/invisible
|
||||
effect.stage = stage
|
||||
@@ -0,0 +1,169 @@
|
||||
/obj/machinery/disease2/incubator/
|
||||
name = "Pathogenic incubator"
|
||||
density = 1
|
||||
anchored = 1
|
||||
icon = 'virology.dmi'
|
||||
icon_state = "incubator"
|
||||
var/obj/item/weapon/virusdish/dish
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker = null
|
||||
var/radiation = 0
|
||||
|
||||
var/on = 0
|
||||
var/power = 0
|
||||
|
||||
var/foodsupply = 0
|
||||
var/toxins = 0
|
||||
|
||||
ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
del(src)
|
||||
return
|
||||
if(2.0)
|
||||
if (prob(50))
|
||||
del(src)
|
||||
return
|
||||
|
||||
blob_act()
|
||||
if (prob(25))
|
||||
del(src)
|
||||
|
||||
meteorhit()
|
||||
del(src)
|
||||
return
|
||||
|
||||
attackby(var/obj/B as obj, var/mob/user as mob)
|
||||
if(istype(B, /obj/item/weapon/reagent_containers/glass) || istype(B,/obj/item/weapon/reagent_containers/syringe))
|
||||
|
||||
if(src.beaker)
|
||||
if(istype(beaker,/obj/item/weapon/reagent_containers/syringe))
|
||||
user << "A syringe is already loaded into the machine."
|
||||
else
|
||||
user << "A beaker is already loaded into the machine."
|
||||
return
|
||||
|
||||
src.beaker = B
|
||||
user.drop_item()
|
||||
B.loc = src
|
||||
if(istype(B,/obj/item/weapon/reagent_containers/syringe))
|
||||
user << "You add the syringe to the machine!"
|
||||
src.updateUsrDialog()
|
||||
else
|
||||
user << "You add the beaker to the machine!"
|
||||
src.updateUsrDialog()
|
||||
else
|
||||
if(istype(B,/obj/item/weapon/virusdish))
|
||||
if(src.dish)
|
||||
user << "A dish is already loaded into the machine."
|
||||
return
|
||||
|
||||
src.dish = B
|
||||
user.drop_item()
|
||||
B.loc = src
|
||||
if(istype(B,/obj/item/weapon/virusdish))
|
||||
user << "You add the dish to the machine!"
|
||||
src.updateUsrDialog()
|
||||
|
||||
Topic(href, href_list)
|
||||
if(stat & BROKEN) return
|
||||
if(usr.stat || usr.restrained()) return
|
||||
if(!in_range(src, usr)) return
|
||||
if (href_list["ejectchem"])
|
||||
if(beaker)
|
||||
beaker.loc = src.loc
|
||||
beaker = null
|
||||
if(!dish)
|
||||
return
|
||||
usr.machine = src
|
||||
if (href_list["power"])
|
||||
on = !on
|
||||
if(on)
|
||||
icon_state = "incubator_on"
|
||||
else
|
||||
icon_state = "incubator"
|
||||
if (href_list["ejectdish"])
|
||||
if(dish)
|
||||
dish.loc = src.loc
|
||||
dish = null
|
||||
if (href_list["rad"])
|
||||
radiation += 10
|
||||
if (href_list["flush"])
|
||||
radiation = 0
|
||||
toxins = 0
|
||||
foodsupply = 0
|
||||
|
||||
|
||||
src.add_fingerprint(usr)
|
||||
src.updateUsrDialog()
|
||||
|
||||
attack_hand(mob/user as mob)
|
||||
if(stat & BROKEN)
|
||||
return
|
||||
user.machine = src
|
||||
var/dat = ""
|
||||
if(!dish)
|
||||
dat = "Please insert dish into the incubator.<BR>"
|
||||
var/string = "Off"
|
||||
if(on)
|
||||
string = "On"
|
||||
dat += "Power status : <A href='?src=\ref[src];power=1'>[string]</a>"
|
||||
dat += "<BR>"
|
||||
dat += "Food supply : [foodsupply]"
|
||||
dat += "<BR>"
|
||||
dat += "Radiation Levels : [radiation] RADS : <A href='?src=\ref[src];rad=1'>Radiate</a>"
|
||||
dat += "<BR>"
|
||||
dat += "Toxins : [toxins]"
|
||||
dat += "<BR><BR>"
|
||||
if(beaker)
|
||||
dat += "Eject chemicals : <A href='?src=\ref[src];ejectchem=1'> Eject</a>"
|
||||
dat += "<BR>"
|
||||
if(dish)
|
||||
dat += "Eject Virus dish : <A href='?src=\ref[src];ejectdish=1'> Eject</a>"
|
||||
dat += "<BR>"
|
||||
dat += "<BR><BR>"
|
||||
dat += "<A href='?src=\ref[src];flush=1'>Flush system</a><BR>"
|
||||
dat += "<A href='?src=\ref[src];close=1'>Close</A><BR>"
|
||||
user << browse("<TITLE>Pathogenic incubator</TITLE>incubator menu:<BR><BR>[dat]", "window=incubator;size=575x400")
|
||||
onclose(user, "incubator")
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
process()
|
||||
|
||||
if(dish && on && dish.virus2)
|
||||
use_power(50,EQUIP)
|
||||
if(!powered(EQUIP))
|
||||
on = 0
|
||||
icon_state = "incubator"
|
||||
if(foodsupply)
|
||||
foodsupply -= 1
|
||||
dish.growth += 3
|
||||
if(dish.growth >= 100)
|
||||
state("The [src.name] pings", "blue")
|
||||
if(radiation)
|
||||
if(radiation > 50 & prob(5))
|
||||
dish.virus2.majormutate()
|
||||
if(dish.info)
|
||||
dish.info = "OUTDATED : [dish.info]"
|
||||
dish.analysed = 0
|
||||
state("The [src.name] beeps", "blue")
|
||||
|
||||
else if(prob(5))
|
||||
dish.virus2.minormutate()
|
||||
radiation -= 1
|
||||
if(toxins && prob(5))
|
||||
dish.virus2.infectionchance -= 1
|
||||
if(toxins > 50)
|
||||
dish.virus2 = null
|
||||
else if(!dish)
|
||||
on = 0
|
||||
icon_state = "incubator"
|
||||
|
||||
|
||||
if(beaker)
|
||||
if(!beaker.reagents.remove_reagent("virusfood",5))
|
||||
foodsupply += 10
|
||||
if(!beaker.reagents.remove_reagent("toxins",1))
|
||||
toxins += 1
|
||||
@@ -0,0 +1,158 @@
|
||||
/obj/machinery/disease2/isolator/
|
||||
name = "Pathogenic Isolator"
|
||||
density = 1
|
||||
anchored = 1
|
||||
icon = 'virology.dmi'
|
||||
icon_state = "isolator"
|
||||
var/datum/disease2/disease/virus2 = null
|
||||
var/isolating = 0
|
||||
var/beaker = null
|
||||
|
||||
ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
del(src)
|
||||
return
|
||||
if(2.0)
|
||||
if (prob(50))
|
||||
del(src)
|
||||
return
|
||||
|
||||
blob_act()
|
||||
if (prob(25))
|
||||
del(src)
|
||||
|
||||
meteorhit()
|
||||
del(src)
|
||||
return
|
||||
|
||||
attackby(var/obj/item/weapon/reagent_containers/glass/B as obj, var/mob/user as mob)
|
||||
if(!istype(B,/obj/item/weapon/reagent_containers/syringe))
|
||||
return
|
||||
|
||||
if(src.beaker)
|
||||
user << "A syringe is already loaded into the machine."
|
||||
return
|
||||
|
||||
src.beaker = B
|
||||
user.drop_item()
|
||||
B.loc = src
|
||||
if(istype(B,/obj/item/weapon/reagent_containers/syringe))
|
||||
user << "You add the syringe to the machine!"
|
||||
src.updateUsrDialog()
|
||||
icon_state = "isolator_in"
|
||||
|
||||
Topic(href, href_list)
|
||||
if(stat & BROKEN) return
|
||||
if(usr.stat || usr.restrained()) return
|
||||
if(!in_range(src, usr)) return
|
||||
|
||||
usr.machine = src
|
||||
if(!beaker) return
|
||||
var/datum/reagents/R = beaker:reagents
|
||||
|
||||
if (href_list["isolate"])
|
||||
var/datum/reagent/blood/Blood
|
||||
for(var/datum/reagent/blood/B in R.reagent_list)
|
||||
if(B)
|
||||
Blood = B
|
||||
break
|
||||
|
||||
if(Blood.data["virus2"])
|
||||
virus2 = Blood.data["virus2"]
|
||||
isolating = 40
|
||||
icon_state = "isolator_processing"
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
else if (href_list["main"])
|
||||
attack_hand(usr)
|
||||
return
|
||||
else if (href_list["eject"])
|
||||
beaker:loc = src.loc
|
||||
beaker = null
|
||||
icon_state = "isolator"
|
||||
src.updateUsrDialog()
|
||||
return
|
||||
|
||||
attack_hand(mob/user as mob)
|
||||
if(stat & BROKEN)
|
||||
return
|
||||
user.machine = src
|
||||
var/dat = ""
|
||||
if(!beaker)
|
||||
dat = "Please insert sample into the isolator.<BR>"
|
||||
dat += "<A href='?src=\ref[src];close=1'>Close</A>"
|
||||
else if(isolating)
|
||||
dat = "Isolating"
|
||||
else
|
||||
var/datum/reagents/R = beaker:reagents
|
||||
dat += "<A href='?src=\ref[src];eject=1'>Eject</A><BR><BR>"
|
||||
if(!R.total_volume)
|
||||
dat += "[beaker] is empty."
|
||||
else
|
||||
dat += "Contained reagents:<BR>"
|
||||
for(var/datum/reagent/blood/G in R.reagent_list)
|
||||
dat += " [G.name]: <A href='?src=\ref[src];isolate=[G.id]'>Isolate</a>"
|
||||
user << browse("<TITLE>Pathogenic Isolator</TITLE>Isolator menu:<BR><BR>[dat]", "window=isolator;size=575x400")
|
||||
onclose(user, "isolator")
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
process()
|
||||
if(isolating > 0)
|
||||
isolating -= 1
|
||||
if(isolating == 0)
|
||||
var/obj/item/weapon/virusdish/d = new /obj/item/weapon/virusdish(src.loc)
|
||||
d.virus2 = virus2.getcopy()
|
||||
virus2 = null
|
||||
icon_state = "isolator_in"
|
||||
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/virusdish
|
||||
name = "Virus containment/growth dish"
|
||||
icon = 'items.dmi'
|
||||
icon_state = "implantcase-b"
|
||||
var/datum/disease2/disease/virus2 = null
|
||||
var/growth = 0
|
||||
var/info = 0
|
||||
var/analysed = 0
|
||||
|
||||
reagents = list()
|
||||
|
||||
/obj/item/weapon/virusdish/random
|
||||
name = "Virus Sample"
|
||||
|
||||
/obj/item/weapon/virusdish/random/New()
|
||||
..()
|
||||
// add a random virus to this dish
|
||||
src.virus2 = new /datum/disease2/disease
|
||||
src.virus2.makerandom()
|
||||
growth = rand(5, 50)
|
||||
|
||||
/obj/item/weapon/virusdish/attackby(var/obj/item/weapon/W as obj,var/mob/living/carbon/user as mob)
|
||||
if(istype(W,/obj/item/weapon/hand_labeler) || istype(W,/obj/item/weapon/reagent_containers/syringe))
|
||||
return
|
||||
..()
|
||||
if(prob(50))
|
||||
user << "The dish shatters"
|
||||
if(virus2.infectionchance > 0)
|
||||
// spread around some pathogens
|
||||
for(var/i = 0, i<= (growth / 3), i++)
|
||||
var/obj/virus/V = new(src.loc)
|
||||
V.disease = virus2.getcopy()
|
||||
del src
|
||||
|
||||
/obj/item/weapon/virusdish/examine()
|
||||
usr << "This is a virus containment dish"
|
||||
if(src.info)
|
||||
usr << "It has the following information about its contents"
|
||||
usr << src.info
|
||||
|
||||
/obj/machinery/proc/state(var/msg)
|
||||
for(var/mob/O in hearers(src, null))
|
||||
O.show_message("\icon[src] \blue [msg]", 2)
|
||||
@@ -0,0 +1,30 @@
|
||||
/obj/machinery/disease2/monkeycloner
|
||||
name = "Monkey dispensor"
|
||||
icon = 'cloning.dmi'
|
||||
icon_state = "pod_0"
|
||||
density = 1
|
||||
anchored = 1
|
||||
|
||||
var/cloning = 0
|
||||
|
||||
/obj/machinery/disease2/monkeycloner/attack_hand()
|
||||
if(!cloning)
|
||||
cloning = 150
|
||||
|
||||
icon_state = "pod_g"
|
||||
|
||||
/obj/machinery/disease2/monkeycloner/process()
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
use_power(500)
|
||||
//src.updateDialog()
|
||||
|
||||
if(cloning)
|
||||
cloning -= 1
|
||||
if(!cloning)
|
||||
new /mob/living/carbon/monkey(src.loc)
|
||||
icon_state = "pod_0"
|
||||
|
||||
|
||||
|
||||
return
|
||||
@@ -21,19 +21,19 @@
|
||||
if(2)
|
||||
if(prob(3))
|
||||
affected_mob << "\red You feel a stabbing pain in your abdomen!"
|
||||
affected_mob.stunned = rand(2,3)
|
||||
affected_mob.Stun(rand(2,3))
|
||||
affected_mob.adjustToxLoss(1)
|
||||
if(3)
|
||||
if(prob(1))
|
||||
if (affected_mob.nutrition > 100)
|
||||
affected_mob.stunned = rand(4,6)
|
||||
affected_mob.Stun(rand(4,6))
|
||||
affected_mob << "\red You throw up!"
|
||||
var/turf/location = affected_mob.loc
|
||||
if (istype(location, /turf/simulated))
|
||||
location.add_vomit_floor(affected_mob)
|
||||
affected_mob.nutrition -= 95
|
||||
affected_mob:adjustToxLoss(-1)
|
||||
affected_mob.adjustToxLoss(-1)
|
||||
else
|
||||
affected_mob << "\red You gag as you want to throw up, but there's nothing in your stomach!"
|
||||
affected_mob.weakened += 10
|
||||
affected_mob.Weaken(10)
|
||||
affected_mob.adjustToxLoss(3)
|
||||
@@ -59,7 +59,7 @@
|
||||
affected_mob << "\red You lose consciousness..."
|
||||
for(var/mob/O in viewers(affected_mob, null))
|
||||
O.show_message("[affected_mob] suddenly collapses", 1)
|
||||
affected_mob.paralysis = rand(5,10)
|
||||
affected_mob.Paralyse(rand(5,10))
|
||||
if(prob(1))
|
||||
affected_mob.emote("snore")
|
||||
if(prob(15))
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
affected_mob << "You feel very strange."
|
||||
if (prob(4))
|
||||
affected_mob << "\red You feel a stabbing pain in your head!"
|
||||
affected_mob.paralysis += 2
|
||||
affected_mob.Paralyse(2)
|
||||
if (prob(4))
|
||||
affected_mob << "\red Your stomach churns."
|
||||
if(3)
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
affected_mob.take_organ_damage(5)
|
||||
if (prob(4))
|
||||
affected_mob << "\red You feel a stabbing pain in your head."
|
||||
affected_mob.paralysis += 2
|
||||
affected_mob.Paralyse(2)
|
||||
if (prob(4))
|
||||
affected_mob << "\red You can feel something move...inside."
|
||||
if(4)
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
affected_mob.take_organ_damage(5)
|
||||
if (prob(4))
|
||||
affected_mob << "\red You feel a stabbing pain in your head."
|
||||
affected_mob.paralysis += 2
|
||||
affected_mob.Paralyse(2)
|
||||
if (prob(4))
|
||||
affected_mob << "\red You can feel something move...inside."
|
||||
if(4)
|
||||
|
||||
@@ -2,8 +2,9 @@
|
||||
name = "Inflict Handler"
|
||||
desc = "This spell blinds and/or destroys/damages/heals and/or weakens/stuns the target."
|
||||
|
||||
var/amt_weaken = 0
|
||||
var/amt_paralysis = 0 //stun
|
||||
var/amt_weakened = 0
|
||||
var/amt_paralysis = 0
|
||||
var/amt_stunned = 0
|
||||
|
||||
//set to negatives for healing
|
||||
var/amt_dam_fire = 0
|
||||
@@ -43,8 +44,9 @@
|
||||
target.adjustToxLoss(amt_dam_tox)
|
||||
target.oxyloss += amt_dam_oxy
|
||||
//disabling
|
||||
target.weakened += amt_weaken
|
||||
target.paralysis += amt_paralysis
|
||||
target.Weaken(amt_weakened)
|
||||
target.Paralyse(amt_paralysis)
|
||||
target.Stun(amt_stunned)
|
||||
|
||||
target.eye_blind += amt_eye_blind
|
||||
target.eye_blurry += amt_eye_blurry
|
||||
@@ -115,8 +115,8 @@ Also, you never added distance checking after target is selected. I've went ahea
|
||||
victim.mind.current = victim
|
||||
|
||||
//Here we paralyze both mobs and knock them out for a time.
|
||||
caster.paralysis += paralysis_amount_caster
|
||||
victim.paralysis += paralysis_amount_victim
|
||||
caster.Paralyse(paralysis_amount_caster)
|
||||
victim.Paralyse(paralysis_amount_victim)
|
||||
|
||||
//After a certain amount of time the victim gets a message about being in a different body.
|
||||
spawn(msg_wait)
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
proj_trail_icon_state = "magicmd"
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/inflict_handler/magic_missile
|
||||
amt_weaken = 5
|
||||
amt_weakened = 5
|
||||
amt_dam_fire = 10
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/genetic/mutate
|
||||
|
||||
@@ -7,4 +7,5 @@
|
||||
var/appendix_op_stage = 0.0
|
||||
|
||||
var/datum/disease2/disease/virus2 = null
|
||||
var/list/datum/disease2/disease/resistances2 = list()
|
||||
var/list/datum/disease2/disease/resistances2 = list()
|
||||
var/antibodies = 0
|
||||
@@ -446,9 +446,6 @@ the mob is also allowed to move without any sort of restriction. For instance, i
|
||||
/mob/proc/adjustBruteLoss(var/amount)
|
||||
bruteloss = max(bruteloss + amount, 0)
|
||||
|
||||
/mob/proc/setBruteLoss(var/amount)
|
||||
bruteloss = amount
|
||||
|
||||
/mob/proc/getOxyLoss()
|
||||
return oxyloss
|
||||
|
||||
@@ -473,10 +470,6 @@ the mob is also allowed to move without any sort of restriction. For instance, i
|
||||
/mob/proc/adjustFireLoss(var/amount)
|
||||
fireloss = max(fireloss + amount, 0)
|
||||
|
||||
/mob/proc/setFireLoss(var/amount)
|
||||
fireloss = amount
|
||||
|
||||
|
||||
/mob/proc/getCloneLoss()
|
||||
return cloneloss
|
||||
|
||||
|
||||
@@ -192,7 +192,7 @@
|
||||
..()
|
||||
|
||||
//Feeding, chasing food, FOOOOODDDD
|
||||
if(alive && !resting && !buckled)
|
||||
if(alive && !restrained() )
|
||||
turns_since_scan++
|
||||
if(turns_since_scan > 5)
|
||||
turns_since_scan = 0
|
||||
@@ -239,6 +239,78 @@
|
||||
dir = i
|
||||
sleep(1)
|
||||
|
||||
/mob/living/simple_animal/corgi/Ian/restrained()
|
||||
if(resting || buckled)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/mob/living/simple_animal/corgi/Ian/verb/stoppull()
|
||||
set name = "Stop pulling"
|
||||
set category = "IC"
|
||||
|
||||
pulling = null
|
||||
|
||||
/mob/living/simple_animal/corgi/Ian/Move()
|
||||
if(restrained())
|
||||
pulling = null
|
||||
return
|
||||
|
||||
var/turf/old_loc
|
||||
var/turf/new_loc
|
||||
|
||||
if(isturf(loc))
|
||||
old_loc = src.loc
|
||||
else
|
||||
return //in a container, cannot move
|
||||
|
||||
..()
|
||||
|
||||
if(isturf(loc))
|
||||
new_loc = src.loc
|
||||
else
|
||||
return //in a container, cannot move
|
||||
|
||||
if(old_loc == new_loc)
|
||||
return //has not moved
|
||||
|
||||
if(pulling)
|
||||
|
||||
if(isturf(old_loc) && isturf(pulling.loc))
|
||||
if(get_dist(src.loc,old_loc) > 1)
|
||||
world << "get_dist(src.loc,pulling.loc)"
|
||||
pulling = null
|
||||
return
|
||||
else
|
||||
pulling = null
|
||||
return
|
||||
|
||||
if(istype(pulling,/obj/item))
|
||||
var/obj/item/I = pulling
|
||||
if(I.w_class > 4)
|
||||
pulling = null
|
||||
return
|
||||
if(I.anchored)
|
||||
pulling = null
|
||||
return
|
||||
|
||||
I.loc = old_loc
|
||||
return
|
||||
|
||||
if(ismob(pulling))
|
||||
var/mob/M = pulling
|
||||
if(!M.stat)
|
||||
pulling = null
|
||||
return //cannot drag live people
|
||||
if(M.anchored)
|
||||
pulling = null
|
||||
return
|
||||
if(M.restrained())
|
||||
pulling = null
|
||||
return
|
||||
|
||||
M.loc = old_loc
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/corgi
|
||||
name = "Corgi meat"
|
||||
desc = "Tastes like... well you know..."
|
||||
+9
-2
@@ -168,8 +168,15 @@
|
||||
anchored = 1.0
|
||||
opacity = 0
|
||||
density = 0
|
||||
pixel_x = -1
|
||||
pixel_y = -1
|
||||
|
||||
/obj/effect/sign/pods
|
||||
desc = "A warning sign which reads 'ESCAPE PODS'"
|
||||
name = "ESCAPE PODS"
|
||||
icon = 'decals.dmi'
|
||||
icon_state = "pods"
|
||||
anchored = 1.0
|
||||
opacity = 0
|
||||
density = 0
|
||||
|
||||
/obj/effect/sign/fire
|
||||
desc = "A warning sign which reads 'EXTREME TEMPERATURES'"
|
||||
|
||||
@@ -53,13 +53,13 @@
|
||||
/obj/item/clothing/head/redcoat
|
||||
name = "Redcoat hat"
|
||||
icon_state = "redcoat"
|
||||
desc = "I guess it's a redhad."
|
||||
desc = "I guess it's a redhead."
|
||||
flags = FPRINT | TABLEPASS
|
||||
|
||||
/obj/item/clothing/head/mailman
|
||||
name = "Mailman Hat"
|
||||
icon_state = "mailman"
|
||||
desc = "Right-on-time mail ervice head wear."
|
||||
desc = "Right-on-time mail service head wear."
|
||||
flags = FPRINT | TABLEPASS
|
||||
|
||||
/obj/item/clothing/head/plaguedoctorhat
|
||||
|
||||
@@ -213,7 +213,7 @@
|
||||
|
||||
return
|
||||
else if (bullets == 0)
|
||||
user.weakened += 5
|
||||
user.Weaken(5)
|
||||
for(var/mob/O in viewers(world.view, user))
|
||||
O.show_message(text("\red [] realized they were out of ammo and starting scrounging for some!", user), 1)
|
||||
|
||||
@@ -236,7 +236,7 @@
|
||||
else if (M.lying && src.bullets == 0)
|
||||
for(var/mob/O in viewers(M, null))
|
||||
if (O.client) O.show_message(text("\red <B>[] casually lines up a shot with []'s head, pulls the trigger, then realizes they are out of ammo and drops to the floor in search of some!</B>", user, M), 1, "\red You hear someone fall", 2)
|
||||
user.weakened += 5
|
||||
user.Weaken(5)
|
||||
return
|
||||
|
||||
/obj/item/toy/crayonbox
|
||||
|
||||
@@ -97,6 +97,8 @@
|
||||
|
||||
vote = new /datum/vote()
|
||||
|
||||
// coffinhandler = new /datum/coffinhandler()
|
||||
|
||||
radio_controller = new /datum/controller/radio()
|
||||
//main_hud1 = new /obj/hud()
|
||||
data_core = new /obj/datacore()
|
||||
|
||||
+1
-1
@@ -279,7 +279,7 @@
|
||||
M.disabilities |= 1
|
||||
M << "\red Your eyes feel strange."
|
||||
if (isblockon(getblock(M.dna.struc_enzymes, HULKBLOCK,3),2))
|
||||
if(inj || prob(15))
|
||||
if(inj || prob(5))
|
||||
M << "\blue Your muscles hurt."
|
||||
M.mutations |= HULK
|
||||
if (isblockon(getblock(M.dna.struc_enzymes, 3,3),3))
|
||||
|
||||
@@ -241,9 +241,9 @@
|
||||
|
||||
O.name = text("monkey ([])",copytext(md5(usr.real_name), 2, 6))
|
||||
O.setToxLoss(usr.getToxLoss())
|
||||
O.setBruteLoss(usr.getBruteLoss())
|
||||
O.adjustBruteLoss(usr.getBruteLoss())
|
||||
O.setOxyLoss(usr.getOxyLoss())
|
||||
O.setFireLoss(usr.getFireLoss())
|
||||
O.adjustFireLoss(usr.getFireLoss())
|
||||
O.stat = usr.stat
|
||||
O.a_intent = "hurt"
|
||||
for (var/obj/item/weapon/implant/I in implants)
|
||||
@@ -336,9 +336,9 @@
|
||||
updateappearance(O,O.dna.uni_identity)
|
||||
domutcheck(O, null)
|
||||
O.setToxLoss(usr.getToxLoss())
|
||||
O.setBruteLoss(usr.getBruteLoss())
|
||||
O.adjustBruteLoss(usr.getBruteLoss())
|
||||
O.setOxyLoss(usr.getOxyLoss())
|
||||
O.setFireLoss(usr.getFireLoss())
|
||||
O.adjustFireLoss(usr.getFireLoss())
|
||||
O.stat = usr.stat
|
||||
for (var/obj/item/weapon/implant/I in implants)
|
||||
I.loc = O
|
||||
@@ -383,9 +383,9 @@
|
||||
//usr.bruteloss = 0
|
||||
usr.setOxyLoss(0)
|
||||
usr.setCloneLoss(0)
|
||||
usr.paralysis = 0
|
||||
usr.stunned = 0
|
||||
usr.weakened = 0
|
||||
usr.SetParalysis(0)
|
||||
usr.SetStunned(0)
|
||||
usr.SetWeakened(0)
|
||||
usr.radiation = 0
|
||||
//usr.health = 100
|
||||
//usr.updatehealth()
|
||||
|
||||
@@ -269,9 +269,9 @@ Movement impairing would indicate drugs and the like.*/
|
||||
var/mob/living/carbon/human/U = affecting
|
||||
//Wouldn't need to track adrenaline boosters if there was a miracle injection to get rid of paralysis and the like instantly.
|
||||
//For now, adrenaline boosters ARE the miracle injection. Well, radium, really.
|
||||
U.paralysis = 0
|
||||
U.stunned = 0
|
||||
U.weakened = 0
|
||||
U.SetParalysis(0)
|
||||
U.SetStunned(0)
|
||||
U.SetWeakened(0)
|
||||
/*
|
||||
Due to lag, it was possible to adrenaline boost but remain helpless while life.dm resets player stat.
|
||||
This lead to me and others spamming adrenaline boosters because they failed to kick in on time.
|
||||
|
||||
@@ -24,14 +24,13 @@
|
||||
|
||||
/datum/game_mode/meteor/process()
|
||||
if(nometeors) return
|
||||
if(prob(80))
|
||||
/*if(prob(80))
|
||||
spawn()
|
||||
dust_swarm("norm")
|
||||
else
|
||||
spawn()
|
||||
dust_swarm("strong")
|
||||
if(prob(10)) meteor_wave()
|
||||
else spawn_meteors()
|
||||
dust_swarm("strong")*/
|
||||
spawn() spawn_meteors(6)
|
||||
|
||||
|
||||
/datum/game_mode/meteor/declare_completion()
|
||||
|
||||
@@ -6,19 +6,19 @@
|
||||
/var/const/meteors_in_wave = 50
|
||||
/var/const/meteors_in_small_wave = 10
|
||||
|
||||
/proc/meteor_wave()
|
||||
/proc/meteor_wave(var/number = meteors_in_wave)
|
||||
if(!ticker || wavesecret)
|
||||
return
|
||||
|
||||
wavesecret = 1
|
||||
for(var/i = 0 to meteors_in_wave)
|
||||
for(var/i = 0 to number)
|
||||
spawn(rand(10,100))
|
||||
spawn_meteor()
|
||||
spawn(meteor_wave_delay)
|
||||
wavesecret = 0
|
||||
|
||||
/proc/spawn_meteors()
|
||||
for(var/i = 0; i < meteors_in_small_wave; i++)
|
||||
/proc/spawn_meteors(var/number = meteors_in_small_wave)
|
||||
for(var/i = 0; i < number; i++)
|
||||
spawn(0)
|
||||
spawn_meteor()
|
||||
|
||||
@@ -36,23 +36,23 @@
|
||||
do
|
||||
switch(pick(1,2,3,4))
|
||||
if(1) //NORTH
|
||||
starty = world.maxy-1
|
||||
starty = world.maxy-3
|
||||
startx = rand(1, world.maxx-1)
|
||||
endy = 1
|
||||
endx = rand(1, world.maxx-1)
|
||||
if(2) //EAST
|
||||
starty = rand(1,world.maxy-1)
|
||||
startx = world.maxx-1
|
||||
startx = world.maxx-3
|
||||
endy = rand(1, world.maxy-1)
|
||||
endx = 1
|
||||
if(3) //SOUTH
|
||||
starty = 1
|
||||
starty = 3
|
||||
startx = rand(1, world.maxx-1)
|
||||
endy = world.maxy-1
|
||||
endx = rand(1, world.maxx-1)
|
||||
if(4) //WEST
|
||||
starty = rand(1, world.maxy-1)
|
||||
startx = 1
|
||||
startx = 3
|
||||
endy = rand(1,world.maxy-1)
|
||||
endx = world.maxx-1
|
||||
|
||||
@@ -67,9 +67,9 @@
|
||||
var/obj/effect/meteor/M
|
||||
switch(rand(1, 100))
|
||||
|
||||
if(1 to 10)
|
||||
if(1 to 20)
|
||||
M = new /obj/effect/meteor/big( pickedstart )
|
||||
if(11 to 75)
|
||||
if(21 to 75)
|
||||
M = new /obj/effect/meteor( pickedstart )
|
||||
if(76 to 100)
|
||||
M = new /obj/effect/meteor/small( pickedstart )
|
||||
@@ -137,7 +137,12 @@
|
||||
if(!M.stat && !istype(M, /mob/living/silicon/ai)) //bad idea to shake an ai's view
|
||||
shake_camera(M, 3, 1)
|
||||
if (A)
|
||||
explosion(src.loc, 0, 1, 2, 3, 0)
|
||||
if(isobj(A))
|
||||
del(A)
|
||||
else
|
||||
A.meteorhit(src)
|
||||
src.hits--
|
||||
return
|
||||
playsound(src.loc, 'meteorimpact.ogg', 40, 1)
|
||||
if (--src.hits <= 0)
|
||||
if(prob(15) && !istype(A, /obj/structure/grille))
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
del(B)
|
||||
step_to(A,M,0)
|
||||
if (get_dist(A,M) == 0)
|
||||
M.weakened += 5
|
||||
M.Weaken(5)
|
||||
M.take_overall_damage(0,10)
|
||||
del(A)
|
||||
return
|
||||
@@ -560,8 +560,8 @@
|
||||
spawn(500)
|
||||
U << "Something about your body doesn't seem quite right..."
|
||||
|
||||
U.paralysis += 20
|
||||
H.paralysis += 20
|
||||
U.Paralyse(20)
|
||||
H.Paralyse(20)
|
||||
|
||||
spawn(600)
|
||||
H.verbs += /mob/proc/swap
|
||||
|
||||
@@ -238,15 +238,12 @@
|
||||
else
|
||||
M.oxyloss = 0
|
||||
M.updatehealth()
|
||||
M.paralysis -= 4
|
||||
M.weakened -= 4
|
||||
M.stunned -= 4
|
||||
if (M.paralysis < 1)
|
||||
M.paralysis = 1
|
||||
if (M.weakened < 1)
|
||||
M.weakened = 1
|
||||
if (M.stunned < 1)
|
||||
M.stunned = 1
|
||||
M.AdjustParalysis(-4)
|
||||
M.AdjustWeakened(-4)
|
||||
M.AdjustStunned(-4)
|
||||
M.Paralyse(1)
|
||||
M.Weaken(1)
|
||||
M.Stun(1)
|
||||
if (M:reagents.get_reagent_amount("inaprovaline") < 5)
|
||||
M:reagents.add_reagent("inaprovaline", 5)
|
||||
return
|
||||
|
||||
@@ -242,16 +242,14 @@ Auto Patrol: []"},
|
||||
var/mob/living/carbon/M = src.target
|
||||
var/maxstuns = 4
|
||||
if (istype(M, /mob/living/carbon/human))
|
||||
if (M.weakened < 10 && (!(M.mutations & HULK)) /*&& (!istype(M:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
|
||||
M.weakened = 10
|
||||
if (M.stuttering < 10 && (!(M.mutations & HULK)) /*&& (!istype(M:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
|
||||
M.stuttering = 10
|
||||
if (M.stunned < 10 && (!(M.mutations & HULK)) /*&& (!istype(M:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
|
||||
M.stunned = 10
|
||||
M.Stun(10)
|
||||
M.Weaken(10)
|
||||
else
|
||||
M.weakened = 10
|
||||
M.Weaken(10)
|
||||
M.stuttering = 10
|
||||
M.stunned = 10
|
||||
M.Stun(10)
|
||||
maxstuns--
|
||||
if (maxstuns <= 0)
|
||||
target = null
|
||||
|
||||
@@ -768,8 +768,8 @@
|
||||
else
|
||||
src.visible_message("\red [src] knocks over [M]!")
|
||||
M.pulling = null
|
||||
M.stunned = 8
|
||||
M.weakened = 5
|
||||
M.Stun(8)
|
||||
M.Weaken(5)
|
||||
M.lying = 1
|
||||
..()
|
||||
|
||||
|
||||
@@ -223,16 +223,14 @@ Auto Patrol: []"},
|
||||
var/mob/living/carbon/M = src.target
|
||||
var/maxstuns = 4
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
if(M.weakened < 10 && (!(M.mutations & HULK)) /*&& (!istype(M:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
|
||||
M.weakened = 10
|
||||
if(M.stuttering < 10 && (!(M.mutations & HULK)) /*&& (!istype(M:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
|
||||
if(M.stuttering < 10 && (!(M.mutations & HULK)))
|
||||
M.stuttering = 10
|
||||
if(M.stunned < 10 && (!(M.mutations & HULK)) /*&& (!istype(M:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
|
||||
M.stunned = 10
|
||||
M.Stun(10)
|
||||
M.Weaken(10)
|
||||
else
|
||||
M.weakened = 10
|
||||
M.Weaken(10)
|
||||
M.stuttering = 10
|
||||
M.stunned = 10
|
||||
M.Stun(10)
|
||||
maxstuns--
|
||||
if(maxstuns <= 0)
|
||||
target = null
|
||||
|
||||
@@ -461,7 +461,7 @@
|
||||
src.occupant.rejuv = 10
|
||||
src.occupant.adjustCloneLoss(190) //new damage var so you can't eject a clone early then stab them to abuse the current damage system --NeoFite
|
||||
src.occupant.adjustBrainLoss(90)
|
||||
src.occupant.paralysis += 4
|
||||
src.occupant.Paralyse(4)
|
||||
|
||||
//Here let's calculate their health so the pod doesn't immediately eject them!!!
|
||||
src.occupant.health = (src.occupant.getBruteLoss() + src.occupant.getToxLoss() + src.occupant.getOxyLoss() + src.occupant.getCloneLoss())
|
||||
@@ -545,7 +545,7 @@
|
||||
return
|
||||
|
||||
else if(src.occupant.health < src.heal_level)
|
||||
src.occupant.paralysis = 4
|
||||
src.occupant.Paralyse(4)
|
||||
|
||||
//Slowly get that clone healed and finished.
|
||||
src.occupant.adjustCloneLoss(-2)
|
||||
|
||||
@@ -166,7 +166,7 @@
|
||||
occupant.stat = 1
|
||||
if(occupant.bodytemperature < T0C)
|
||||
occupant.sleeping = max(5, (1/occupant.bodytemperature)*2000)
|
||||
occupant.paralysis = max(5, (1/occupant.bodytemperature)*3000)
|
||||
occupant.Paralyse(max(5, (1/occupant.bodytemperature)*3000))
|
||||
if(air_contents.oxygen > 2)
|
||||
if(occupant.getOxyLoss()) occupant.adjustOxyLoss(-1)
|
||||
else
|
||||
|
||||
@@ -607,9 +607,8 @@ About the new airlock wires panel:
|
||||
M << "\red [user] headbutts the airlock."
|
||||
var/datum/organ/external/affecting = H.get_organ("head")
|
||||
affecting.take_damage(10, 0)
|
||||
H.stunned = 8
|
||||
H.weakened = 5
|
||||
H.UpdateDamage()
|
||||
H.Stun(8)
|
||||
H.Weaken(5)
|
||||
H.UpdateDamageIcon()
|
||||
else
|
||||
for(var/mob/M in viewers(src, null))
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
if (istype(O, /mob/living/carbon/alien))//So aliens don't get flashed (they have no external eyes)/N
|
||||
continue
|
||||
|
||||
O.weakened = src.strength
|
||||
O.Weaken(strength)
|
||||
if ((O.eye_stat > 15 && prob(O.eye_stat + 50)))
|
||||
flick("e_flash", O:flash)
|
||||
O.eye_stat += rand(1, 2)
|
||||
|
||||
@@ -258,7 +258,7 @@
|
||||
cremating = 1
|
||||
locked = 1
|
||||
for (var/mob/living/M in contents)
|
||||
M:stunned = 100 //You really dont want to place this inside the loop.
|
||||
M.Stun(100) //You really dont want to place this inside the loop.
|
||||
spawn(1)
|
||||
for(var/i=1 to 10)
|
||||
sleep(10)
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
density = 1
|
||||
anchored = 1
|
||||
var/unwrenched = 0
|
||||
var/wait = 0
|
||||
|
||||
/obj/machinery/pipedispenser/attack_paw(user as mob)
|
||||
return src.attack_hand(user)
|
||||
@@ -49,16 +50,20 @@
|
||||
usr.machine = src
|
||||
src.add_fingerprint(usr)
|
||||
if(href_list["make"])
|
||||
var/p_type = text2num(href_list["make"])
|
||||
var/p_dir = text2num(href_list["dir"])
|
||||
var/obj/item/pipe/P = new (/*usr.loc*/ src.loc, pipe_type=p_type, dir=p_dir)
|
||||
P.update()
|
||||
if(!wait)
|
||||
var/p_type = text2num(href_list["make"])
|
||||
var/p_dir = text2num(href_list["dir"])
|
||||
var/obj/item/pipe/P = new (/*usr.loc*/ src.loc, pipe_type=p_type, dir=p_dir)
|
||||
P.update()
|
||||
wait = 1
|
||||
spawn(10)
|
||||
wait = 0
|
||||
if(href_list["makemeter"])
|
||||
new /obj/item/pipe_meter(/*usr.loc*/ src.loc)
|
||||
|
||||
/* for(var/mob/M in viewers(1, src))
|
||||
if ((M.client && M.machine == src))
|
||||
src.attack_hand(M)*/
|
||||
if(!wait)
|
||||
new /obj/item/pipe_meter(/*usr.loc*/ src.loc)
|
||||
wait = 1
|
||||
spawn(15)
|
||||
wait = 0
|
||||
return
|
||||
|
||||
/obj/machinery/pipedispenser/attackby(var/obj/item/W as obj, var/mob/user as mob)
|
||||
@@ -128,23 +133,24 @@
|
||||
usr.machine = src
|
||||
src.add_fingerprint(usr)
|
||||
if(href_list["dmake"])
|
||||
var/p_type = text2num(href_list["dmake"])
|
||||
var/obj/structure/disposalconstruct/C = new (src.loc)
|
||||
switch(p_type)
|
||||
if(0)
|
||||
C.ptype = 0
|
||||
if(1)
|
||||
C.ptype = 1
|
||||
if(2)
|
||||
C.ptype = 2
|
||||
if(3)
|
||||
C.ptype = 4
|
||||
if(4)
|
||||
C.ptype = 5
|
||||
if(!wait)
|
||||
var/p_type = text2num(href_list["dmake"])
|
||||
var/obj/structure/disposalconstruct/C = new (src.loc)
|
||||
switch(p_type)
|
||||
if(0)
|
||||
C.ptype = 0
|
||||
if(1)
|
||||
C.ptype = 1
|
||||
if(2)
|
||||
C.ptype = 2
|
||||
if(3)
|
||||
C.ptype = 4
|
||||
if(4)
|
||||
C.ptype = 5
|
||||
|
||||
C.update()
|
||||
|
||||
usr << browse(null, "window=pipedispenser")
|
||||
usr.machine = null
|
||||
C.update()
|
||||
wait = 1
|
||||
spawn(15)
|
||||
wait = 0
|
||||
return
|
||||
|
||||
|
||||
@@ -70,9 +70,9 @@
|
||||
var/obj/item/weapon/melee/baton/B = O
|
||||
if (B.charges > 0 && B.status == 1)
|
||||
flick("baton_active", src)
|
||||
user.stunned = 10
|
||||
user.Stun(10)
|
||||
user.stuttering = 10
|
||||
user.weakened = 10
|
||||
user.Weaken(10)
|
||||
if(isrobot(user))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
R.cell.charge -= 20
|
||||
|
||||
@@ -275,9 +275,9 @@ var/list/sacrificed = list()
|
||||
affecting.heal_damage(1000, 1000)
|
||||
corpse_to_raise.setToxLoss(0)
|
||||
corpse_to_raise.setOxyLoss(0)
|
||||
corpse_to_raise.paralysis = 0
|
||||
corpse_to_raise.stunned = 0
|
||||
corpse_to_raise.weakened = 0
|
||||
corpse_to_raise.SetParalysis(0)
|
||||
corpse_to_raise.SetStunned(0)
|
||||
corpse_to_raise.SetWeakened(0)
|
||||
corpse_to_raise.radiation = 0
|
||||
corpse_to_raise.buckled = null
|
||||
if (corpse_to_raise.handcuffed)
|
||||
@@ -914,12 +914,10 @@ var/list/sacrificed = list()
|
||||
usr.say("Fuu ma'jin!")
|
||||
for(var/mob/living/carbon/C in viewers(src))
|
||||
flick("e_flash", C.flash)
|
||||
if (C.weakened < 1 && (!(C.mutations & HULK))) //Copied this off baton code
|
||||
C.weakened = 1
|
||||
if (C.stuttering < 1 && (!(C.mutations & HULK)))
|
||||
C.stuttering = 1
|
||||
if (C.stunned < 1 && (!(C.mutations & HULK)))
|
||||
C.stunned = 1
|
||||
C.Weaken(1)
|
||||
C.Stun(1)
|
||||
C.show_message("\red The rune explodes in a bright flash.", 3)
|
||||
del(src)
|
||||
else ///When invoked as talisman, stun and mute the target mob.
|
||||
@@ -929,10 +927,8 @@ var/list/sacrificed = list()
|
||||
flick("e_flash", T.flash)
|
||||
if (!(T.mutations & HULK))
|
||||
T.silent += 15
|
||||
if (!(T.mutations & HULK))
|
||||
T.weakened += 25
|
||||
if (!(T.mutations & HULK))
|
||||
T.stunned += 25
|
||||
T.Weaken(25)
|
||||
T.Stun(25)
|
||||
return
|
||||
|
||||
/////////////////////////////////////////TWENTY-FIFTH RUNE
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
if(temp)
|
||||
switch(damtype)
|
||||
if("brute")
|
||||
H.paralysis += 1
|
||||
H.Paralyse(1)
|
||||
temp.take_damage(rand(force/2, force), 0)
|
||||
if("fire")
|
||||
temp.take_damage(0, rand(force/2, force))
|
||||
@@ -79,7 +79,7 @@
|
||||
else
|
||||
switch(damtype)
|
||||
if("brute")
|
||||
M.paralysis += 1
|
||||
M.Paralyse(1)
|
||||
M.take_overall_damage(rand(force/2, force))
|
||||
if("fire")
|
||||
M.take_overall_damage(0, rand(force/2, force))
|
||||
|
||||
@@ -129,10 +129,10 @@
|
||||
M.sleeping = 0
|
||||
M.stuttering += 20
|
||||
M.ear_deaf += 30
|
||||
M.weakened = 3
|
||||
M.Weaken(3)
|
||||
if(prob(30))
|
||||
M.stunned = 10
|
||||
M.paralysis += 4
|
||||
M.Stun(10)
|
||||
M.Paralyse(4)
|
||||
else
|
||||
M.make_jittery(500)
|
||||
/* //else the mousetraps are useless
|
||||
|
||||
@@ -145,7 +145,7 @@ var/const
|
||||
|
||||
GoIdle() //so it doesn't jump the people that tear it off
|
||||
|
||||
if(!sterile) target.paralysis = max(target.paralysis,MAX_IMPREGNATION_TIME/6) //something like 25 ticks = 20 seconds with the default settings
|
||||
if(!sterile) target.Paralyse(MAX_IMPREGNATION_TIME/6) //something like 25 ticks = 20 seconds with the default settings
|
||||
|
||||
spawn(rand(MIN_IMPREGNATION_TIME,MAX_IMPREGNATION_TIME))
|
||||
Impregnate(target)
|
||||
|
||||
@@ -818,8 +818,8 @@
|
||||
M.pulling = null
|
||||
M << "\blue You slipped on the PDA!"
|
||||
playsound(src.loc, 'slip.ogg', 50, 1, -3)
|
||||
M.stunned = 8
|
||||
M.weakened = 5
|
||||
M.Stun(8)
|
||||
M.Weaken(5)
|
||||
|
||||
|
||||
//AI verb and proc for sending PDA messages.
|
||||
|
||||
@@ -41,9 +41,8 @@
|
||||
if(iscarbon(M))
|
||||
var/safety = M:eyecheck()
|
||||
if(safety <= 0)
|
||||
if(M.weakened <= 10)
|
||||
M.weakened = 10
|
||||
flick("e_flash", M.flash)
|
||||
M.Weaken(10)
|
||||
flick("e_flash", M.flash)
|
||||
|
||||
if(ishuman(M) && ishuman(user))
|
||||
if(user.mind in ticker.mode.head_revolutionaries)
|
||||
@@ -65,7 +64,7 @@
|
||||
flashfail = 1
|
||||
|
||||
else if(issilicon(M))
|
||||
M.weakened = max(user.weakened, rand(5,10))
|
||||
M.Weaken(rand(5,10))
|
||||
|
||||
if(isrobot(user))
|
||||
spawn(0)
|
||||
|
||||
@@ -884,8 +884,8 @@ steam.start() -- spawns the effect
|
||||
M.pulling = null
|
||||
M << "\blue You slipped on the foam!"
|
||||
playsound(src.loc, 'slip.ogg', 50, 1, -3)
|
||||
M.stunned = 5
|
||||
M.weakened = 2
|
||||
M.Stun(5)
|
||||
M.Weaken(2)
|
||||
|
||||
|
||||
/datum/effect/effect/system/foam_spread
|
||||
@@ -1094,7 +1094,7 @@ steam.start() -- spawns the effect
|
||||
for(var/mob/M in viewers(1, location))
|
||||
if (prob (50 * amount))
|
||||
M << "\red The explosion knocks you down."
|
||||
M.weakened += rand (1, 5)
|
||||
M.Weaken(rand(1,5))
|
||||
return
|
||||
else
|
||||
var/devastation = -1
|
||||
|
||||
@@ -340,8 +340,6 @@ mob/proc/flash_weak_pain()
|
||||
/obj/item/proc/IsShield()
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
/obj/item/proc/eyestab(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
||||
|
||||
var/mob/living/carbon/human/H = M
|
||||
@@ -405,8 +403,8 @@ mob/proc/flash_weak_pain()
|
||||
M << "\red You drop what you're holding and clutch at your eyes!"
|
||||
M.drop_item()
|
||||
M.eye_blurry += 10
|
||||
M.paralysis += 1
|
||||
M.weakened += 4
|
||||
M.Paralyse(1)
|
||||
M.Weaken(4)
|
||||
if (prob(M.eye_stat - 10 + 1))
|
||||
if(M.stat != 2)
|
||||
M << "\red You go blind!"
|
||||
|
||||
@@ -11,12 +11,12 @@
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey])</font>")
|
||||
user.cell.charge -= 30
|
||||
if (M.weakened < 5)
|
||||
M.weakened = 5
|
||||
|
||||
M.Weaken(5)
|
||||
if (M.stuttering < 5)
|
||||
M.stuttering = 5
|
||||
if (M.stunned < 5)
|
||||
M.stunned = 5
|
||||
M.Stun(5)
|
||||
|
||||
for(var/mob/O in viewers(M, null))
|
||||
if (O.client)
|
||||
O.show_message("\red <B>[user] has prodded [M] with an electrically-charged arm!</B>", 1, "\red You hear someone fall", 2)
|
||||
|
||||
@@ -16,8 +16,8 @@ BIKE HORN
|
||||
M.pulling = null
|
||||
M << "\blue You slipped on the [name]!"
|
||||
playsound(src.loc, 'slip.ogg', 50, 1, -3)
|
||||
M.stunned = 4
|
||||
M.weakened = 2
|
||||
M.Stun(4)
|
||||
M.Weaken(2)
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/bluetomato/HasEntered(AM as mob|obj)
|
||||
if (istype(AM, /mob/living/carbon))
|
||||
@@ -28,8 +28,8 @@ BIKE HORN
|
||||
M.pulling = null
|
||||
M << "\blue You slipped on the [name]!"
|
||||
playsound(src.loc, 'slip.ogg', 50, 1, -3)
|
||||
M.stunned = 8
|
||||
M.weakened = 5
|
||||
M.Stun(8)
|
||||
M.Weaken(5)
|
||||
|
||||
/obj/item/weapon/soap/HasEntered(AM as mob|obj) //EXACTLY the same as bananapeel for now, so it makes sense to put it in the same dm -- Urist
|
||||
if (istype(AM, /mob/living/carbon))
|
||||
@@ -40,8 +40,8 @@ BIKE HORN
|
||||
M.pulling = null
|
||||
M << "\blue You slipped on the [name]!"
|
||||
playsound(src.loc, 'slip.ogg', 50, 1, -3)
|
||||
M.stunned = 3
|
||||
M.weakened = 2
|
||||
M.Stun(3)
|
||||
M.Weaken(2)
|
||||
|
||||
/obj/item/weapon/soap/afterattack(atom/target, mob/user as mob)
|
||||
if(istype(target,/obj/effect/decal/cleanable))
|
||||
|
||||
@@ -172,19 +172,19 @@ FLASHBANG
|
||||
if(eye_safety < 1)
|
||||
flick("e_flash", M.flash)
|
||||
M.eye_stat += rand(1, 3)
|
||||
M.stunned = max(M.stunned,2)
|
||||
M.weakened = max(M.weakened,10)
|
||||
M.Stun(2)
|
||||
M.Weaken(10)
|
||||
|
||||
|
||||
|
||||
//Now applying sound
|
||||
if((get_dist(M, T) <= 2 || src.loc == M.loc || src.loc == M))
|
||||
if(ear_safety > 0)
|
||||
M.stunned = max(M.stunned,2)
|
||||
M.weakened = max(M.weakened,1)
|
||||
M.Stun(2)
|
||||
M.Weaken(1)
|
||||
else
|
||||
M.stunned = max(M.stunned,10)
|
||||
M.weakened = max(M.weakened,3)
|
||||
M.Stun(10)
|
||||
M.Weaken(3)
|
||||
if ((prob(14) || (M == src.loc && prob(70))))
|
||||
M.ear_damage += rand(1, 10)
|
||||
else
|
||||
@@ -193,12 +193,12 @@ FLASHBANG
|
||||
|
||||
else if(get_dist(M, T) <= 5)
|
||||
if(!ear_safety)
|
||||
M.stunned = max(M.stunned,8)
|
||||
M.Stun(8)
|
||||
M.ear_damage += rand(0, 3)
|
||||
M.ear_deaf = max(M.ear_deaf,10)
|
||||
|
||||
else if(!ear_safety)
|
||||
M.stunned = max(M.stunned,4)
|
||||
M.Stun(4)
|
||||
M.ear_damage += rand(0, 1)
|
||||
M.ear_deaf = max(M.ear_deaf,5)
|
||||
|
||||
|
||||
@@ -108,7 +108,7 @@ Deathnettle
|
||||
else
|
||||
user.take_organ_damage(0,force)
|
||||
if(prob(50))
|
||||
user.paralysis += 5
|
||||
user.Paralyse(5)
|
||||
user << "\red You are stunned by the Deathnettle when you try picking it up!"
|
||||
|
||||
/obj/item/weapon/grown/deathnettle/attack(mob/living/carbon/M as mob, mob/user as mob)
|
||||
@@ -120,8 +120,8 @@ Deathnettle
|
||||
|
||||
M.eye_blurry += force/7
|
||||
if(prob(20))
|
||||
M.paralysis += force/6
|
||||
M.weakened += force/15
|
||||
M.Paralyse(force/6)
|
||||
M.Weaken(force/15)
|
||||
M.drop_item()
|
||||
|
||||
/obj/item/weapon/grown/deathnettle/afterattack(atom/A as mob|obj, mob/user as mob)
|
||||
|
||||
@@ -50,7 +50,7 @@ KNIFE
|
||||
if ((user.mutations & CLUMSY) && prob(50))
|
||||
user << "\red The [src] slips out of your hand and hits your head."
|
||||
user.take_organ_damage(10)
|
||||
user.paralysis += 2
|
||||
user.Paralyse(2)
|
||||
return
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been attacked with [src.name] by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey])</font>")
|
||||
@@ -63,11 +63,9 @@ KNIFE
|
||||
return
|
||||
var/time = rand(2, 6)
|
||||
if (prob(75))
|
||||
if (M.paralysis < time && (!(M.mutations & HULK)) )
|
||||
M.paralysis = time
|
||||
M.Paralyse(time)
|
||||
else
|
||||
if (M.stunned < time && (!(M.mutations & HULK)) )
|
||||
M.stunned = time
|
||||
M.Stun(time)
|
||||
if(M.stat != 2) M.stat = 1
|
||||
for(var/mob/O in viewers(M, null))
|
||||
O.show_message(text("\red <B>[] has been knocked unconscious!</B>", M), 1, "\red You hear someone fall.", 2)
|
||||
@@ -109,7 +107,7 @@ KNIFE
|
||||
|
||||
if((user.mutations & CLUMSY) && prob(50)) //What if he's a clown?
|
||||
M << "\red You accidentally slam yourself with the [src]!"
|
||||
M.weakened += 1
|
||||
M.Weaken(1)
|
||||
user.take_organ_damage(2)
|
||||
if(prob(50))
|
||||
playsound(M, 'trayhit1.ogg', 50, 1)
|
||||
@@ -132,7 +130,7 @@ KNIFE
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to attack [M.name] ([M.ckey])</font>")
|
||||
|
||||
if(prob(15))
|
||||
M.weakened += 3
|
||||
M.Weaken(3)
|
||||
M.take_organ_damage(3)
|
||||
else
|
||||
M.take_organ_damage(5)
|
||||
@@ -173,7 +171,7 @@ KNIFE
|
||||
for(var/mob/O in viewers(M, null))
|
||||
O.show_message(text("\red <B>[] slams [] with the tray!</B>", user, M), 1)
|
||||
if(prob(10))
|
||||
M.stunned = rand(1,3)
|
||||
M.Stun(rand(1,3))
|
||||
M.take_organ_damage(3)
|
||||
return
|
||||
else
|
||||
@@ -197,13 +195,13 @@ KNIFE
|
||||
for(var/mob/O in viewers(M, null))
|
||||
O.show_message(text("\red <B>[] slams [] in the face with the tray!</B>", user, M), 1)
|
||||
if(prob(30))
|
||||
M.stunned = rand(2,4)
|
||||
M.Stun(rand(2,4))
|
||||
M.take_organ_damage(4)
|
||||
return
|
||||
else
|
||||
M.take_organ_damage(8)
|
||||
if(prob(30))
|
||||
M.weakened+=2
|
||||
M.Weaken(2)
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
@@ -57,8 +57,6 @@ MEDICAL
|
||||
|
||||
if (affecting.heal_damage(src.heal_brute, src.heal_burn))
|
||||
H.UpdateDamageIcon()
|
||||
else
|
||||
H.UpdateDamage()
|
||||
M.updatehealth()
|
||||
else
|
||||
M.heal_organ_damage((src.heal_brute/2), (src.heal_burn/2))
|
||||
|
||||
@@ -105,7 +105,7 @@ STUN BATON
|
||||
src.status = !( src.status )
|
||||
if ((usr.mutations & CLUMSY) && prob(50))
|
||||
usr << "\red You grab the stunbaton on the wrong side."
|
||||
usr.paralysis += 60
|
||||
usr.Paralyse(60)
|
||||
return
|
||||
if (src.status)
|
||||
user << "\blue The baton is now on."
|
||||
@@ -121,7 +121,7 @@ STUN BATON
|
||||
/obj/item/weapon/melee/baton/attack(mob/M as mob, mob/user as mob)
|
||||
if ((usr.mutations & CLUMSY) && prob(50))
|
||||
usr << "\red You grab the stunbaton on the wrong side."
|
||||
usr.weakened += 30
|
||||
usr.Weaken(30)
|
||||
return
|
||||
src.add_fingerprint(user)
|
||||
var/mob/living/carbon/human/H = M
|
||||
@@ -136,8 +136,7 @@ STUN BATON
|
||||
if (status == 0 || (status == 1 && charges ==0))
|
||||
if(user.a_intent == "hurt")
|
||||
if(!..()) return
|
||||
if (M.weakened < 5 && (!(M.mutations & HULK)) /*&& (!istype(H:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
|
||||
M.weakened = 5
|
||||
M.Weaken(5)
|
||||
for(var/mob/O in viewers(M))
|
||||
if (O.client) O.show_message("\red <B>[M] has been beaten with the stun baton by [user]!</B>", 1)
|
||||
if(status == 1 && charges == 0)
|
||||
@@ -159,12 +158,10 @@ STUN BATON
|
||||
R.cell.charge -= 20
|
||||
else
|
||||
charges--
|
||||
if (M.weakened < 1 && (!(M.mutations & HULK)) /*&& (!istype(H:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
|
||||
M.weakened = 1
|
||||
if (M.stuttering < 1 && (!(M.mutations & HULK)) /*&& (!istype(H:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
|
||||
M.stuttering = 1
|
||||
if (M.stunned < 1 && (!(M.mutations & HULK)) /*&& (!istype(H:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
|
||||
M.stunned = 1
|
||||
M.Stun(1)
|
||||
M.Weaken(1)
|
||||
else
|
||||
playsound(src.loc, 'Egloves.ogg', 50, 1, -1)
|
||||
if(isrobot(user))
|
||||
@@ -172,12 +169,10 @@ STUN BATON
|
||||
R.cell.charge -= 20
|
||||
else
|
||||
charges--
|
||||
if (M.weakened < 10 && (!(M.mutations & HULK)) /*&& (!istype(H:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
|
||||
M.weakened = 10
|
||||
if (M.stuttering < 10 && (!(M.mutations & HULK)) /*&& (!istype(H:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
|
||||
M.stuttering = 10
|
||||
if (M.stunned < 10 && (!(M.mutations & HULK)) /*&& (!istype(H:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
|
||||
M.stunned = 10
|
||||
M.Stun(10)
|
||||
M.Weaken(10)
|
||||
user.lastattacked = M
|
||||
M.lastattacker = user
|
||||
for(var/mob/O in viewers(M))
|
||||
@@ -193,7 +188,7 @@ STUN BATON
|
||||
/obj/item/weapon/melee/classic_baton/attack(mob/M as mob, mob/living/user as mob)
|
||||
if ((user.mutations & CLUMSY) && prob(50))
|
||||
user << "\red You club yourself over the head."
|
||||
user.weakened = max(3 * force, user.weakened)
|
||||
user.Weaken(3 * force)
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.apply_damage(2*force, BRUTE, "head")
|
||||
@@ -208,19 +203,15 @@ STUN BATON
|
||||
if (user.a_intent == "hurt")
|
||||
if(!..()) return
|
||||
playsound(src.loc, "swing_hit", 50, 1, -1)
|
||||
if (M.weakened < 8 && (!(M.mutations & HULK)) /*&& (!istype(H:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
|
||||
M.weakened = 8
|
||||
if (M.stuttering < 8 && (!(M.mutations & HULK)) /*&& (!istype(H:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
|
||||
M.stuttering = 8
|
||||
if (M.stunned < 8 && (!(M.mutations & HULK)) /*&& (!istype(H:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
|
||||
M.stunned = 8
|
||||
M.Stun(8)
|
||||
M.Weaken(8)
|
||||
for(var/mob/O in viewers(M))
|
||||
if (O.client) O.show_message("\red <B>[M] has been beaten with the police baton by [user]!</B>", 1, "\red You hear someone fall", 2)
|
||||
else
|
||||
playsound(src.loc, 'Genhit.ogg', 50, 1, -1)
|
||||
if (M.weakened < 5 && (!(M.mutations & HULK)) /*&& (!istype(H:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
|
||||
M.weakened = 5
|
||||
if (M.stunned < 5 && (!(M.mutations & HULK)) /*&& (!istype(H:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
|
||||
M.stunned = 5
|
||||
M.Stun(5)
|
||||
M.Weaken(5)
|
||||
for(var/mob/O in viewers(M))
|
||||
if (O.client) O.show_message("\red <B>[M] has been stunned with the police baton by [user]!</B>", 1, "\red You hear someone fall", 2)
|
||||
|
||||
@@ -138,8 +138,7 @@
|
||||
s.set_up(3, 1, M)
|
||||
s.start()
|
||||
|
||||
if (M.weakened < 10)
|
||||
M.weakened = 10
|
||||
M.Weaken(10)
|
||||
|
||||
if ((src.master && src.wires & 1))
|
||||
src.master.receive_signal()
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
if ((user.mutations & CLUMSY) && prob(50))
|
||||
user << "\red The [src] slips out of your hand and hits your head."
|
||||
user.take_organ_damage(10)
|
||||
user.paralysis += 2
|
||||
user.Paralyse(2)
|
||||
return
|
||||
|
||||
|
||||
@@ -36,11 +36,9 @@
|
||||
return
|
||||
var/time = rand(2, 6)
|
||||
if (prob(75))
|
||||
if (M.paralysis < time)// && (!M.ishulk))
|
||||
M.paralysis = time
|
||||
M.Paralyse(time)
|
||||
else
|
||||
if (M.stunned < time)// && (!M.ishulk))
|
||||
M.stunned = time
|
||||
M.Stun(time)
|
||||
if(M.stat != 2) M.stat = 1
|
||||
for(var/mob/O in viewers(M, null))
|
||||
O.show_message(text("\red <B>[] has been knocked unconscious!</B>", M), 1, "\red You hear someone fall.", 2)
|
||||
|
||||
@@ -169,7 +169,7 @@ SHARDS
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!H.shoes)
|
||||
var/datum/organ/external/affecting = H.get_organ(pick("l_leg", "r_leg"))
|
||||
H.weakened = max(3, H.weakened)
|
||||
H.Weaken(3)
|
||||
affecting.take_damage(5, 0)
|
||||
H.UpdateDamageIcon()
|
||||
H.updatehealth()
|
||||
|
||||
@@ -197,8 +197,7 @@
|
||||
M << "\red <B>You feel a deep shock course through your body!</B>"
|
||||
sleep(1)
|
||||
M.burn_skin(85)
|
||||
if(M.stunned < 600)
|
||||
M.stunned = 600
|
||||
M.Stun(600)
|
||||
for(var/mob/M in hearers(src, null))
|
||||
M.show_message("\red The electric chair went off!.", 3, "\red You hear a deep sharp shock.", 2)
|
||||
|
||||
|
||||
@@ -13,8 +13,6 @@
|
||||
for(var/datum/organ/external/affecting in H.organs)
|
||||
if(affecting.heal_damage(heal_amt, heal_amt))
|
||||
H.UpdateDamageIcon()
|
||||
else
|
||||
H.UpdateDamage()
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/bible/attack(mob/M as mob, mob/living/user as mob)
|
||||
@@ -38,7 +36,7 @@
|
||||
if ((user.mutations & CLUMSY) && prob(50))
|
||||
user << "\red The [src] slips out of your hand and hits your head."
|
||||
user.take_organ_damage(10)
|
||||
user.paralysis += 20
|
||||
user.Paralyse(20)
|
||||
return
|
||||
|
||||
// if(..() == BLOCKED)
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
if ((user.mutations & CLUMSY) && prob(50))
|
||||
user << "\red The [src] slips out of your hand and hits your head."
|
||||
user.take_organ_damage(10)
|
||||
user.paralysis += 2
|
||||
user.Paralyse(2)
|
||||
return
|
||||
|
||||
|
||||
@@ -29,11 +29,9 @@
|
||||
return
|
||||
var/time = rand(2, 6)
|
||||
if (prob(75))
|
||||
if (M.paralysis < time && (!(M.mutations & HULK)) )
|
||||
M.paralysis = time
|
||||
M.Paralyse(time)
|
||||
else
|
||||
if (M.stunned < time && (!(M.mutations & HULK)) )
|
||||
M.stunned = time
|
||||
M.Stun(time)
|
||||
if(M.stat != 2) M.stat = 1
|
||||
for(var/mob/O in viewers(M, null))
|
||||
O.show_message(text("\red <B>[] has been knocked unconscious!</B>", M), 1, "\red You hear someone fall.", 2)
|
||||
|
||||
@@ -123,7 +123,7 @@ TABLE AND RACK OBJECT INTERATIONS
|
||||
user << "\red You need a better grip to do that!"
|
||||
return
|
||||
G.affecting.loc = src.loc
|
||||
G.affecting.weakened = 5
|
||||
G.affecting.Weaken(5)
|
||||
for(var/mob/O in viewers(world.view, src))
|
||||
if (O.client)
|
||||
O << text("\red [] puts [] on the table.", G.assailant, G.affecting)
|
||||
@@ -133,11 +133,11 @@ TABLE AND RACK OBJECT INTERATIONS
|
||||
if (istype(W, /obj/item/weapon/wrench))
|
||||
user << "\blue Now disassembling table"
|
||||
playsound(src.loc, 'Ratchet.ogg', 50, 1)
|
||||
sleep(50)
|
||||
new /obj/item/weapon/table_parts( src.loc )
|
||||
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
|
||||
//SN src = null
|
||||
del(src)
|
||||
if(do_after(user,50))
|
||||
new /obj/item/weapon/table_parts( src.loc )
|
||||
playsound(src.loc, 'Deconstruct.ogg', 50, 1)
|
||||
//SN src = null
|
||||
del(src)
|
||||
return
|
||||
|
||||
if(isrobot(user))
|
||||
@@ -169,7 +169,7 @@ TABLE AND RACK OBJECT INTERATIONS
|
||||
user << "\red You need a better grip to do that!"
|
||||
return
|
||||
G.affecting.loc = src.loc
|
||||
G.affecting.weakened = 5
|
||||
G.affecting.Weaken(5)
|
||||
for(var/mob/O in viewers(world.view, src))
|
||||
if (O.client)
|
||||
O << text("\red [] puts [] on the wooden table.", G.assailant, G.affecting)
|
||||
@@ -211,7 +211,7 @@ TABLE AND RACK OBJECT INTERATIONS
|
||||
user << "\red You need a better grip to do that!"
|
||||
return
|
||||
G.affecting.loc = src.loc
|
||||
G.affecting.weakened = 5
|
||||
G.affecting.Weaken(5)
|
||||
for(var/mob/O in viewers(world.view, src))
|
||||
if (O.client)
|
||||
O << text("\red [] puts [] on the reinforced table.", G.assailant, G.affecting)
|
||||
|
||||
@@ -15,7 +15,9 @@
|
||||
del(src)
|
||||
|
||||
/obj/effect/mine/proc/triggerstun(obj)
|
||||
obj:stunned += 30
|
||||
if(ismob(obj))
|
||||
var/mob/M = obj
|
||||
M.Stun(30)
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(3, 1, src)
|
||||
s.start()
|
||||
@@ -130,11 +132,11 @@
|
||||
if("feet")
|
||||
if(!H.shoes)
|
||||
affecting = H.get_organ(pick("l_leg", "r_leg"))
|
||||
H.weakened = max(3, H.weakened)
|
||||
H.Weaken(3)
|
||||
if("l_hand", "r_hand")
|
||||
if(!H.gloves)
|
||||
affecting = H.get_organ(type)
|
||||
H.stunned = max(3, H.stunned)
|
||||
H.Stun(3)
|
||||
if(affecting)
|
||||
affecting.take_damage(1, 0)
|
||||
H.UpdateDamageIcon()
|
||||
|
||||
+1
-1
@@ -94,7 +94,7 @@ client/verb/Toggle_Soundscape()
|
||||
if ("AI Sat Ext") sound = pick('ambiruntime.ogg','ambimalf.ogg')
|
||||
if ("AI Satellite") sound = pick('ambimalf.ogg')
|
||||
if ("AI Satellite Teleporter Room") sound = pick('ambiruntime.ogg','ambimalf.ogg')
|
||||
if ("Bar") sound = pick('title1.ogg')
|
||||
if ("Bar") sound = pick('null.ogg')
|
||||
if ("AI Upload Foyer") sound = pick('ambimalf.ogg', 'null.ogg')
|
||||
if ("AI Upload Chamber") sound = pick('ambimalf.ogg','null.ogg')
|
||||
if ("Mine")
|
||||
|
||||
+21
-55
@@ -187,8 +187,8 @@
|
||||
step(M, M.dir)
|
||||
M << "\blue You slipped on the wet floor!"
|
||||
playsound(src.loc, 'slip.ogg', 50, 1, -3)
|
||||
M.stunned = 8
|
||||
M.weakened = 5
|
||||
M.Stun(8)
|
||||
M.Weaken(5)
|
||||
else
|
||||
M.inertia_dir = 0
|
||||
return
|
||||
@@ -198,8 +198,8 @@
|
||||
step(M, M.dir)
|
||||
M << "\blue You slipped on the wet floor!"
|
||||
playsound(src.loc, 'slip.ogg', 50, 1, -3)
|
||||
M.stunned = 8
|
||||
M.weakened = 5
|
||||
M.Stun(8)
|
||||
M.Weaken(5)
|
||||
else
|
||||
M.inertia_dir = 0
|
||||
return
|
||||
@@ -215,7 +215,7 @@
|
||||
M.take_organ_damage(2) // Was 5 -- TLE
|
||||
M << "\blue You slipped on the floor!"
|
||||
playsound(src.loc, 'slip.ogg', 50, 1, -3)
|
||||
M.weakened = 10
|
||||
M.Weaken(10)
|
||||
|
||||
..()
|
||||
|
||||
@@ -618,8 +618,12 @@
|
||||
return
|
||||
|
||||
/turf/simulated/wall/meteorhit(obj/M as obj)
|
||||
if (M.icon_state == "flaming")
|
||||
if (prob(15))
|
||||
dismantle_wall()
|
||||
else if(prob(70))
|
||||
ReplaceWithPlating()
|
||||
else
|
||||
ReplaceWithLattice()
|
||||
return 0
|
||||
|
||||
|
||||
@@ -1193,7 +1197,7 @@ turf/simulated/floor/return_siding_icon_state()
|
||||
else if(ticker.mode.name == "extended"||ticker.mode.name == "sandbox") Sandbox_Spacemove(A)
|
||||
|
||||
else
|
||||
if (src.x <= 2)
|
||||
if (src.x <= 2 || A.x >= (world.maxx - 1) || src.y <= 2 || A.y >= (world.maxy - 1))
|
||||
if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust))
|
||||
del(A)
|
||||
return
|
||||
@@ -1206,63 +1210,25 @@ turf/simulated/floor/return_siding_icon_state()
|
||||
return
|
||||
|
||||
A.z = move_to_z
|
||||
A.x = world.maxx - 2
|
||||
spawn (0)
|
||||
if ((A && A.loc))
|
||||
A.loc.Entered(A)
|
||||
else if (A.x >= (world.maxx - 1))
|
||||
if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust))
|
||||
del(A)
|
||||
return
|
||||
|
||||
var/move_to_z_str = pickweight(accessable_z_levels)
|
||||
if(src.x <= 2)
|
||||
A.x = world.maxx - 2
|
||||
|
||||
var/move_to_z = text2num(move_to_z_str)
|
||||
else if (A.x >= (world.maxx - 1))
|
||||
A.x = 3
|
||||
|
||||
if(!move_to_z)
|
||||
return
|
||||
else if (src.y <= 2)
|
||||
A.y = world.maxy - 2
|
||||
|
||||
A.z = move_to_z
|
||||
A.x = 3
|
||||
spawn (0)
|
||||
if ((A && A.loc))
|
||||
A.loc.Entered(A)
|
||||
else if (src.y <= 2)
|
||||
if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust))
|
||||
del(A)
|
||||
return
|
||||
else if (A.y >= (world.maxy - 1))
|
||||
A.y = 3
|
||||
|
||||
var/move_to_z_str = pickweight(accessable_z_levels)
|
||||
|
||||
var/move_to_z = text2num(move_to_z_str)
|
||||
|
||||
if(!move_to_z)
|
||||
return
|
||||
|
||||
A.z = move_to_z
|
||||
A.y = world.maxy - 2
|
||||
spawn (0)
|
||||
if ((A && A.loc))
|
||||
A.loc.Entered(A)
|
||||
|
||||
else if (A.y >= (world.maxy - 1))
|
||||
if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust))
|
||||
del(A)
|
||||
return
|
||||
|
||||
var/move_to_z_str = pickweight(accessable_z_levels)
|
||||
|
||||
var/move_to_z = text2num(move_to_z_str)
|
||||
|
||||
if(!move_to_z)
|
||||
return
|
||||
|
||||
A.z = move_to_z
|
||||
A.y = 3
|
||||
spawn (0)
|
||||
if ((A && A.loc))
|
||||
A.loc.Entered(A)
|
||||
|
||||
// if(istype(A, /obj/structure/closet/coffin))
|
||||
// coffinhandler.Add(A)
|
||||
|
||||
/turf/space/proc/Sandbox_Spacemove(atom/movable/A as mob|obj)
|
||||
var/cur_x
|
||||
|
||||
@@ -168,7 +168,7 @@
|
||||
if(confirm == "Yes")
|
||||
suiciding = 1
|
||||
setOxyLoss(100)
|
||||
setBruteLoss(100)
|
||||
adjustBruteLoss(100 - getBruteLoss())
|
||||
setToxLoss(100)
|
||||
setCloneLoss(100)
|
||||
|
||||
|
||||
+6
-5
@@ -58,20 +58,21 @@
|
||||
///////////////////////////////////////////////////////***
|
||||
|
||||
/////////////////////////////////////////////////////green
|
||||
/obj/item/weapon/vial/green/drink(user)
|
||||
/obj/item/weapon/vial/green/drink(mob/living/user as mob)
|
||||
var/A = src
|
||||
src = null
|
||||
del(A)
|
||||
switch(pick(1,2,3))
|
||||
if(1)
|
||||
spawn(300)
|
||||
user:gib()
|
||||
user.gib()
|
||||
if(2)
|
||||
user:weakened += 5
|
||||
user:contract_disease(new /datum/disease/gbs,1)
|
||||
user.Weaken(5)
|
||||
user.contract_disease(new /datum/disease/gbs,1)
|
||||
if(3)
|
||||
spawn(200)
|
||||
user:contract_disease(new /datum/disease/gbs,1)
|
||||
user.contract_disease(new /datum/disease/gbs,1)
|
||||
|
||||
/obj/item/weapon/vial/green/shatter()
|
||||
var/A = src
|
||||
var/atom/sourceloc = get_turf(src.loc)
|
||||
|
||||
@@ -556,7 +556,7 @@
|
||||
W.dropped(M)
|
||||
W.layer = initial(W.layer)
|
||||
//teleport person to cell
|
||||
M.paralysis += 5
|
||||
M.Paralyse(5)
|
||||
sleep(5) //so they black out before warping
|
||||
M.loc = pick(prisonwarp)
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
@@ -623,7 +623,7 @@
|
||||
W.loc = M.loc
|
||||
W.dropped(M)
|
||||
W.layer = initial(W.layer)
|
||||
M.paralysis += 5
|
||||
M.Paralyse(5)
|
||||
sleep(5)
|
||||
M.loc = pick(tdome1)
|
||||
spawn(50)
|
||||
@@ -649,7 +649,7 @@
|
||||
W.loc = M.loc
|
||||
W.dropped(M)
|
||||
W.layer = initial(W.layer)
|
||||
M.paralysis += 5
|
||||
M.Paralyse(5)
|
||||
sleep(5)
|
||||
M.loc = pick(tdome2)
|
||||
spawn(50)
|
||||
@@ -664,7 +664,7 @@
|
||||
if(istype(M, /mob/living/silicon/ai))
|
||||
alert("The AI can't be sent to the thunderdome you jerk!", null, null, null, null, null)
|
||||
return
|
||||
M.paralysis += 5
|
||||
M.Paralyse(5)
|
||||
sleep(5)
|
||||
M.loc = pick(tdomeadmin)
|
||||
spawn(50)
|
||||
@@ -694,7 +694,7 @@
|
||||
var/mob/living/carbon/human/observer = M
|
||||
observer.equip_if_possible(new /obj/item/clothing/under/suit_jacket(observer), observer.slot_w_uniform)
|
||||
observer.equip_if_possible(new /obj/item/clothing/shoes/black(observer), observer.slot_shoes)
|
||||
M.paralysis += 5
|
||||
M.Paralyse(5)
|
||||
sleep(5)
|
||||
M.loc = pick(tdomeobserve)
|
||||
spawn(50)
|
||||
@@ -1209,7 +1209,7 @@
|
||||
if(loc.z > 1 || prisonwarped.Find(H))
|
||||
//don't warp them if they aren't ready or are already there
|
||||
continue
|
||||
H.paralysis += 5
|
||||
H.Paralyse(5)
|
||||
if(H.wear_id)
|
||||
var/obj/item/weapon/card/id/id = H.get_idcard()
|
||||
for(var/A in id.access)
|
||||
@@ -1441,14 +1441,24 @@
|
||||
message_admins("[key_name_admin(usr)] broke all lights", 1)
|
||||
lightsout(0,0)
|
||||
if("virus")
|
||||
if(alert("Do you want this to be a random disease or do you have something in mind?",,"Random","Choose")=="Random")
|
||||
var/answer = alert("Do you want this to be a random disease or do you have something in mind?",,"Virus2","Random","Choose")
|
||||
if(answer=="Random")
|
||||
viral_outbreak()
|
||||
message_admins("[key_name_admin(usr)] has triggered a virus outbreak", 1)
|
||||
else
|
||||
else if(answer == "Choose")
|
||||
var/list/viruses = list("fake gbs","gbs","magnitis","wizarditis",/*"beesease",*/"brain rot","cold","retrovirus","flu","pierrot's throat","rhumba beat")
|
||||
var/V = input("Choose the virus to spread", "BIOHAZARD") in viruses
|
||||
viral_outbreak(V)
|
||||
message_admins("[key_name_admin(usr)] has triggered a virus outbreak of [V]", 1)
|
||||
else
|
||||
var/lesser = (alert("Do you want to infect the mob with a major or minor disease?",,"Major","Minor") == "Minor")
|
||||
var/mob/living/carbon/victim = input("Select a mob to infect", "Virus2") as null|mob in world
|
||||
if(!istype(victim)) return
|
||||
if(lesser)
|
||||
infect_mob_random_lesser(victim)
|
||||
else
|
||||
infect_mob_random_greater(victim)
|
||||
message_admins("[key_name_admin(usr)] has infected [victim] with a [lesser ? "minor" : "major"] virus2.", 1)
|
||||
if("retardify")
|
||||
if (src.rank in list("Badmin", "Game Admin", "Game Master"))
|
||||
for(var/mob/living/carbon/human/H in world)
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
for(var/obj/item/W in M)
|
||||
M.drop_from_slot(W)
|
||||
//teleport person to cell
|
||||
M.paralysis += 5
|
||||
M.Paralyse(5)
|
||||
sleep(5) //so they black out before warping
|
||||
M.loc = pick(prisonwarp)
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
@@ -484,9 +484,9 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
M.setToxLoss(0)
|
||||
//M.bruteloss = 0
|
||||
M.setOxyLoss(0)
|
||||
M.paralysis = 0
|
||||
M.stunned = 0
|
||||
M.weakened = 0
|
||||
M.SetParalysis(0)
|
||||
M.SetStunned(0)
|
||||
M.SetWeakened(0)
|
||||
M.radiation = 0
|
||||
//M.health = 100
|
||||
M.nutrition = 400
|
||||
|
||||
@@ -96,7 +96,7 @@ datum
|
||||
|
||||
|
||||
blood
|
||||
data = new/list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"virus2"=null)
|
||||
data = new/list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"virus2"=null,"antibodies"=0)
|
||||
name = "Blood"
|
||||
id = "blood"
|
||||
reagent_state = LIQUID
|
||||
@@ -119,6 +119,15 @@ datum
|
||||
else
|
||||
infect_virus2(M,self.data["virus2"],1)
|
||||
|
||||
if(istype(M,/mob/living/carbon))
|
||||
// add the host's antibodies to their blood
|
||||
self.data["antibodies"] |= M:antibodies
|
||||
|
||||
// check if the blood has antibodies that cure our disease
|
||||
if(self.data["antibodies"] & M:virus2.antigen) if(prob(10))
|
||||
M:virus2.dead = 1
|
||||
|
||||
|
||||
/*
|
||||
if(self.data["virus"])
|
||||
var/datum/disease/V = self.data["virus"]
|
||||
@@ -372,8 +381,8 @@ datum
|
||||
if(15 to 25)
|
||||
M:drowsyness = max(M:drowsyness, 20)
|
||||
if(25 to INFINITY)
|
||||
M:paralysis = max(M:paralysis, 20)
|
||||
M:drowsyness = max(M:drowsyness, 30)
|
||||
M.Paralyse(20)
|
||||
M.drowsyness = max(M:drowsyness, 30)
|
||||
data++
|
||||
..()
|
||||
return
|
||||
@@ -398,17 +407,17 @@ datum
|
||||
if(15 to 25)
|
||||
M:drowsyness = max(M:drowsyness, 20)
|
||||
if(25 to INFINITY)
|
||||
M:sleeping = 1
|
||||
M:oxyloss = 0
|
||||
M:weakened = 0
|
||||
M:stunned = 0
|
||||
M:paralysis = 0
|
||||
M.sleeping = 1
|
||||
M.oxyloss = 0
|
||||
M.SetWeakened(0)
|
||||
M.SetStunned(0)
|
||||
M.SetParalysis(0)
|
||||
M.dizziness = 0
|
||||
M:drowsyness = 0
|
||||
M:stuttering = 0
|
||||
M:slurring = 0
|
||||
M:confused = 0
|
||||
M:jitteriness = 0
|
||||
M.drowsyness = 0
|
||||
M.stuttering = 0
|
||||
M.slurring = 0
|
||||
M.confused = 0
|
||||
M.jitteriness = 0
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -661,7 +670,6 @@ datum
|
||||
var/datum/organ/external/affecting = M:get_organ("head")
|
||||
if(affecting)
|
||||
affecting.take_damage(25, 0)
|
||||
M:UpdateDamage()
|
||||
M:UpdateDamageIcon()
|
||||
M:emote("scream")
|
||||
M << "\red Your face has become disfigured!"
|
||||
@@ -708,7 +716,6 @@ datum
|
||||
return
|
||||
var/datum/organ/external/affecting = M:get_organ("head")
|
||||
affecting.take_damage(35, 0)
|
||||
M:UpdateDamage()
|
||||
M:UpdateDamageIcon()
|
||||
M:emote("scream")
|
||||
M << "\red Your face has become disfigured!"
|
||||
@@ -724,7 +731,6 @@ datum
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/datum/organ/external/affecting = M:get_organ("head")
|
||||
affecting.take_damage(30, 0)
|
||||
M:UpdateDamage()
|
||||
M:UpdateDamageIcon()
|
||||
M:emote("scream")
|
||||
M << "\red Your face has become disfigured!"
|
||||
@@ -1221,11 +1227,11 @@ datum
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
if(!M) M = holder.my_atom ///This can even heal dead people.
|
||||
M:cloneloss = 0
|
||||
M:oxyloss = 0
|
||||
M:radiation = 0
|
||||
M:heal_organ_damage(5,5)
|
||||
M:adjustToxLoss(-5)
|
||||
M.cloneloss = 0
|
||||
M.setOxyLoss(0)
|
||||
M.radiation = 0
|
||||
M.heal_organ_damage(5,5)
|
||||
M.adjustToxLoss(-5)
|
||||
if(holder.has_reagent("toxin"))
|
||||
holder.remove_reagent("toxin", 5)
|
||||
if(holder.has_reagent("stoxin"))
|
||||
@@ -1248,25 +1254,25 @@ datum
|
||||
holder.remove_reagent("carpotoxin", 5)
|
||||
if(holder.has_reagent("zombiepowder"))
|
||||
holder.remove_reagent("zombiepowder", 5)
|
||||
M:brainloss = 0
|
||||
M.brainloss = 0
|
||||
M.disabilities = 0
|
||||
M.sdisabilities = 0
|
||||
M:eye_blurry = 0
|
||||
M:eye_blind = 0
|
||||
M:disabilities &= ~1
|
||||
M:sdisabilities &= ~1
|
||||
M:weakened = 0
|
||||
M:stunned = 0
|
||||
M:paralysis = 0
|
||||
M:silent = 0
|
||||
M.eye_blurry = 0
|
||||
M.eye_blind = 0
|
||||
M.disabilities &= ~1
|
||||
M.sdisabilities &= ~1
|
||||
M.SetWeakened(0)
|
||||
M.SetStunned(0)
|
||||
M.SetParalysis(0)
|
||||
M.silent = 0
|
||||
M.dizziness = 0
|
||||
M:drowsyness = 0
|
||||
M:stuttering = 0
|
||||
M:slurring = 0
|
||||
M:confused = 0
|
||||
if(!M:sleeping_willingly)
|
||||
M:sleeping = 0
|
||||
M:jitteriness = 0
|
||||
M.drowsyness = 0
|
||||
M.stuttering = 0
|
||||
M.slurring = 0
|
||||
M.confused = 0
|
||||
if(!M.sleeping_willingly)
|
||||
M.sleeping = 0
|
||||
M.jitteriness = 0
|
||||
for(var/datum/disease/D in M.viruses)
|
||||
D.spread = "Remissive"
|
||||
D.stage--
|
||||
@@ -1285,10 +1291,10 @@ datum
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
if(!M) M = holder.my_atom
|
||||
M:drowsyness = max(M:drowsyness-5, 0)
|
||||
if(M:paralysis) M:paralysis--
|
||||
if(M:stunned) M:stunned--
|
||||
if(M:weakened) M:weakened--
|
||||
if(prob(60)) M:adjustToxLoss(1)
|
||||
M.AdjustParalysis(-1)
|
||||
M.AdjustStunned(-1)
|
||||
M.AdjustWeakened(-1)
|
||||
if(prob(60)) M.adjustToxLoss(1)
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -1465,10 +1471,10 @@ datum
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
if(!M) M = holder.my_atom
|
||||
M:adjustOxyLoss(0.5)
|
||||
M:adjustToxLoss(0.5)
|
||||
M:weakened = max(M:weakened, 10)
|
||||
M:silent = max(M:silent, 10)
|
||||
M.adjustOxyLoss(0.5)
|
||||
M.adjustToxLoss(0.5)
|
||||
M.Weaken(10)
|
||||
M.silent = max(M:silent, 10)
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -1713,9 +1719,9 @@ datum
|
||||
return
|
||||
M:emote("scream")
|
||||
M << "\red You're sprayed directly in the eyes with pepperspray!"
|
||||
M.eye_blurry = max(M.eye_blurry, 60)
|
||||
M.eye_blind = max(M.eye_blind, 12)
|
||||
M:weakened = max(M:weakened, 20)
|
||||
M.eye_blurry = max(M.eye_blurry, 5)
|
||||
M.eye_blind = max(M.eye_blind, 2)
|
||||
M.Paralyse(1)
|
||||
M.drop_item()
|
||||
|
||||
frostoil
|
||||
@@ -3059,7 +3065,7 @@ datum
|
||||
color = "#664300" // rgb: 102, 67, 0
|
||||
|
||||
on_mob_life(var/mob/living/M as mob)
|
||||
M.stunned = 2
|
||||
M.Stun(2)
|
||||
if(!data) data = 1
|
||||
data++
|
||||
M.dizziness +=3
|
||||
|
||||
@@ -310,7 +310,7 @@ datum
|
||||
continue
|
||||
|
||||
flick("e_flash", M.flash)
|
||||
M.weakened = 15
|
||||
M.Weaken(15)
|
||||
|
||||
if(4 to 5)
|
||||
if(hasvar(M, "glasses"))
|
||||
@@ -318,7 +318,7 @@ datum
|
||||
continue
|
||||
|
||||
flick("e_flash", M.flash)
|
||||
M.stunned = 5
|
||||
M.Stun(5)
|
||||
|
||||
napalm
|
||||
name = "Napalm"
|
||||
|
||||
@@ -935,9 +935,9 @@
|
||||
|
||||
B.data["viruses"] += new D.type
|
||||
|
||||
if(B.data["virus2"])
|
||||
if(T.virus2)
|
||||
B.data["virus2"] = T.virus2.getcopy()
|
||||
// not sure why it was checking if(B.data["virus2"]), but it seemed wrong
|
||||
if(T.virus2)
|
||||
B.data["virus2"] = T.virus2.getcopy()
|
||||
|
||||
B.data["blood_DNA"] = copytext(T.dna.unique_enzymes,1,0)
|
||||
if(T.resistances&&T.resistances.len)
|
||||
@@ -950,6 +950,7 @@
|
||||
temp_chem += R.name
|
||||
temp_chem[R.name] = R.volume
|
||||
B.data["trace_chem"] = list2params(temp_chem)
|
||||
B.data["antibodies"] = T.antibodies
|
||||
//debug
|
||||
//for(var/D in B.data)
|
||||
// world << "Data [D] = [B.data[D]]"
|
||||
|
||||
@@ -64,6 +64,15 @@
|
||||
flags = FPRINT | TABLEPASS | ONESIZEFITSALL
|
||||
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/pepperspray,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
|
||||
|
||||
/obj/item/clothing/suit/armor/reactive
|
||||
name = "Reactive Teleport Armor"
|
||||
desc = "Someone seperated our Research Director from his own head!"
|
||||
var/active = 0.0
|
||||
icon_state = "reactiveoff"
|
||||
item_state = "reactiveoff"
|
||||
slowdown = 1
|
||||
flags = FPRINT | TABLEPASS | ONESIZEFITSALL
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/storage/armourrigvest
|
||||
name = "armour rig vest"
|
||||
@@ -75,9 +84,30 @@
|
||||
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/pepperspray,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
|
||||
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
|
||||
|
||||
|
||||
|
||||
|
||||
ng/suit/armor/reactive/IsShield()
|
||||
if(active)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
/obj/item/clothing/suit/armor/reactive/attack_self(mob/user as mob)
|
||||
src.active = !( src.active )
|
||||
if (src.active)
|
||||
user << "\blue The reactive armor is now active."
|
||||
src.icon_state = "reactive"
|
||||
src.item_state = "reactive"
|
||||
else
|
||||
user << "\blue The reactive armor is now inactive."
|
||||
src.icon_state = "reactiveoff"
|
||||
src.item_state = "reactiveoff"
|
||||
src.add_fingerprint(user)
|
||||
return
|
||||
|
||||
/obj/item/clothing/suit/armor/reactive/emp_act(severity)
|
||||
active = 0
|
||||
src.icon_state = "reactiveoff"
|
||||
src.item_state = "reactiveoff"
|
||||
..()
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -176,7 +176,7 @@
|
||||
AfterAttack(var/mob/living/target)
|
||||
if(prob(stunchance))
|
||||
if(target.weakened <= 0)
|
||||
target.weakened += rand(10, 15)
|
||||
target.Weaken(rand(10, 15))
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message("\red <B>[src]</B> knocks down [target]!", 1)
|
||||
playsound(loc, 'pierce.ogg', 25, 1, -1)
|
||||
|
||||
@@ -36,16 +36,12 @@
|
||||
|
||||
|
||||
proc/clamp_values()
|
||||
stunned = 0
|
||||
paralysis = 0
|
||||
weakened = 0
|
||||
AdjustStunned(0)
|
||||
AdjustParalysis(0)
|
||||
AdjustWeakened(0)
|
||||
sleeping = 0
|
||||
setBruteLoss(max(getBruteLoss(), 0))
|
||||
setToxLoss(max(getToxLoss(), 0))
|
||||
setOxyLoss(max(getOxyLoss(), 0))
|
||||
setFireLoss(max(getFireLoss(), 0))
|
||||
if(stat)
|
||||
stat = 0
|
||||
stat = CONSCIOUS
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -15,4 +15,7 @@
|
||||
if(facehugger.stat == CONSCIOUS)
|
||||
var/image/activeIndicator = image('alien.dmi', loc = facehugger, icon_state = "facehugger_active")
|
||||
activeIndicator.override = 1
|
||||
client.images += activeIndicator
|
||||
client.images += activeIndicator
|
||||
|
||||
/mob/living/carbon/alien/IsAdvancedToolUser()
|
||||
return has_fine_manipulation
|
||||
@@ -80,16 +80,16 @@
|
||||
|
||||
health = 150 - (getOxyLoss() + getFireLoss() + getBruteLoss() + getCloneLoss())
|
||||
|
||||
if(getOxyLoss() > 50) paralysis = max(paralysis, 3)
|
||||
if(getOxyLoss() > 50) Paralyse(3)
|
||||
|
||||
if(src.sleeping)
|
||||
src.paralysis = max(src.paralysis, 3)
|
||||
Paralyse(3)
|
||||
if (prob(10) && health) spawn(0) emote("snore")
|
||||
if(!src.sleeping_willingly)
|
||||
src.sleeping--
|
||||
|
||||
if(src.resting)
|
||||
src.weakened = max(src.weakened, 5)
|
||||
Weaken(5)
|
||||
|
||||
if(health < config.health_threshold_dead || src.brain_op_stage == 4.0)
|
||||
death()
|
||||
@@ -100,20 +100,20 @@
|
||||
if(!src.reagents.has_reagent("inaprovaline")) src.oxyloss++
|
||||
|
||||
if(src.stat != 2) src.stat = 1
|
||||
src.paralysis = max(src.paralysis, 5)
|
||||
Paralyse(5)
|
||||
|
||||
if (src.stat != 2) //Alive.
|
||||
|
||||
if (src.paralysis || src.stunned || src.weakened) //Stunned etc.
|
||||
if (src.stunned > 0)
|
||||
src.stunned--
|
||||
AdjustStunned(-1)
|
||||
src.stat = 0
|
||||
if (src.weakened > 0)
|
||||
src.weakened--
|
||||
AdjustWeakened(-1)
|
||||
src.lying = 1
|
||||
src.stat = 0
|
||||
if (src.paralysis > 0)
|
||||
src.paralysis--
|
||||
AdjustParalysis(-1)
|
||||
src.blinded = 1
|
||||
src.lying = 1
|
||||
src.stat = 1
|
||||
@@ -192,7 +192,7 @@
|
||||
if(M in stomach_contents)
|
||||
stomach_contents.Remove(M)
|
||||
M.loc = loc
|
||||
M.paralysis += 10
|
||||
Paralyse(10)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\green <B>[src] hurls out the contents of their stomach!</B>"), 1)
|
||||
return
|
||||
@@ -81,16 +81,16 @@
|
||||
|
||||
health = 150 - (getOxyLoss() + getFireLoss() + getBruteLoss() + getCloneLoss())
|
||||
|
||||
if(getOxyLoss() > 50) paralysis = max(paralysis, 3)
|
||||
if(getOxyLoss() > 50) Paralyse(3)
|
||||
|
||||
if(src.sleeping)
|
||||
src.paralysis = max(src.paralysis, 3)
|
||||
Paralyse(3)
|
||||
if (prob(10) && health) spawn(0) emote("snore")
|
||||
if(!src.sleeping_willingly)
|
||||
src.sleeping--
|
||||
|
||||
if(src.resting)
|
||||
src.weakened = max(src.weakened, 5)
|
||||
Weaken(5)
|
||||
|
||||
if(health < config.health_threshold_dead || src.brain_op_stage == 4.0)
|
||||
death()
|
||||
@@ -101,20 +101,20 @@
|
||||
if(!src.reagents.has_reagent("inaprovaline")) src.oxyloss++
|
||||
|
||||
if(src.stat != 2) src.stat = 1
|
||||
src.paralysis = max(src.paralysis, 5)
|
||||
Paralyse(5)
|
||||
|
||||
if (src.stat != 2) //Alive.
|
||||
|
||||
if (src.paralysis || src.stunned || src.weakened) //Stunned etc.
|
||||
if (src.stunned > 0)
|
||||
src.stunned--
|
||||
AdjustStunned(-1)
|
||||
src.stat = 0
|
||||
if (src.weakened > 0)
|
||||
src.weakened--
|
||||
AdjustWeakened(-1)
|
||||
src.lying = 1
|
||||
src.stat = 0
|
||||
if (src.paralysis > 0)
|
||||
src.paralysis--
|
||||
AdjustParalysis(-1)
|
||||
src.blinded = 1
|
||||
src.lying = 1
|
||||
src.stat = 1
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
message = "<B>The [src.name]</B> jumps!"
|
||||
m_type = 1
|
||||
if("collapse")
|
||||
if (!src.paralysis) src.paralysis += 2
|
||||
Paralyse(2)
|
||||
message = text("<B>[]</B> collapses!", src)
|
||||
m_type = 2
|
||||
if ("me")
|
||||
|
||||
@@ -117,7 +117,7 @@
|
||||
if(3.0)
|
||||
b_loss += 30
|
||||
if (prob(50) && !shielded)
|
||||
paralysis += 1
|
||||
Paralyse(1)
|
||||
ear_damage += 15
|
||||
ear_deaf += 60
|
||||
|
||||
@@ -542,12 +542,10 @@
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red <B>The [M.name] has shocked []!</B>", src), 1)
|
||||
|
||||
if (weakened < power)
|
||||
weakened = power
|
||||
Weaken(power)
|
||||
if (stuttering < power)
|
||||
stuttering = power
|
||||
if (stunned < power)
|
||||
stunned = power
|
||||
Stun(power)
|
||||
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(5, 1, src)
|
||||
@@ -577,12 +575,12 @@
|
||||
if(M.a_intent == "hurt")//Stungloves. Any contact will stun the alien.
|
||||
if(M.gloves.cell.charge >= 2500)
|
||||
M.gloves.cell.charge -= 2500
|
||||
if (weakened < 5)
|
||||
weakened = 5
|
||||
|
||||
Weaken(5)
|
||||
if (stuttering < 5)
|
||||
stuttering = 5
|
||||
if (stunned < 5)
|
||||
stunned = 5
|
||||
Stun(5)
|
||||
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message("\red <B>[src] has been touched with the stun gloves by [M]!</B>", 1, "\red You hear someone fall.", 2)
|
||||
@@ -649,7 +647,7 @@
|
||||
if (M.mutations & HULK)//HULK SMASH
|
||||
damage += 14
|
||||
spawn(0)
|
||||
paralysis += 5
|
||||
Paralyse(5)
|
||||
step_away(src,M,15)
|
||||
sleep(3)
|
||||
step_away(src,M,15)
|
||||
@@ -657,8 +655,7 @@
|
||||
playsound(loc, "punch", 25, 1, -1)
|
||||
visible_message("\red <B>[M] has [attack_verb]ed [src]!</B>")
|
||||
if (damage > 9||prob(5))//Regular humans have a very small chance of weakening an alien.
|
||||
if (weakened < 10)
|
||||
weakened = rand(1,5)
|
||||
Weaken(1,5)
|
||||
for(var/mob/O in viewers(M, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red <B>[] has weakened []!</B>", M, src), 1, "\red You hear someone fall.", 2)
|
||||
@@ -672,15 +669,14 @@
|
||||
|
||||
if ("disarm")
|
||||
if (!lying)
|
||||
var/randn = rand(1, 100)
|
||||
if (randn <= 5)//Very small chance to push an alien down.
|
||||
weakened = 2
|
||||
if (prob(5))//Very small chance to push an alien down.
|
||||
Weaken(2)
|
||||
playsound(loc, 'thudswoosh.ogg', 50, 1, -1)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red <B>[] has pushed down []!</B>", M, src), 1)
|
||||
else
|
||||
if (randn <= 50)
|
||||
if (prob(50))
|
||||
drop_item()
|
||||
playsound(loc, 'thudswoosh.ogg', 50, 1, -1)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
@@ -715,9 +711,9 @@ In all, this is a lot like the monkey code. /N
|
||||
if(!sleeping_willingly)
|
||||
sleeping = 0
|
||||
resting = 0
|
||||
if (paralysis >= 3) paralysis -= 3
|
||||
if (stunned >= 3) stunned -= 3
|
||||
if (weakened >= 3) weakened -= 3
|
||||
AdjustParalysis(-3)
|
||||
AdjustStunned(-3)
|
||||
AdjustWeakened(-3)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\blue [M.name] nuzzles [] trying to wake it up!", src), 1)
|
||||
|
||||
@@ -80,9 +80,9 @@
|
||||
proc
|
||||
clamp_values()
|
||||
|
||||
stunned = max(min(stunned, 20),0)
|
||||
paralysis = max(min(paralysis, 20), 0)
|
||||
weakened = max(min(weakened, 20), 0)
|
||||
SetStunned(min(stunned, 20))
|
||||
SetParalysis(min(paralysis, 20))
|
||||
SetWeakened(min(weakened, 20))
|
||||
sleeping = max(min(sleeping, 20), 0)
|
||||
adjustBruteLoss(0)
|
||||
adjustToxLoss(0)
|
||||
@@ -95,7 +95,7 @@
|
||||
if (src.disabilities & 2)
|
||||
if ((prob(1) && src.paralysis < 10 && src.r_epil < 1))
|
||||
src << "\red You have a seizure!"
|
||||
src.paralysis = max(10, src.paralysis)
|
||||
Paralyse(10)
|
||||
if (src.disabilities & 4)
|
||||
if ((prob(5) && src.paralysis <= 1 && src.r_ch_cou < 1))
|
||||
src.drop_item()
|
||||
@@ -104,7 +104,7 @@
|
||||
return
|
||||
if (src.disabilities & 8)
|
||||
if ((prob(10) && src.paralysis <= 1 && src.r_Tourette < 1))
|
||||
src.stunned = max(10, src.stunned)
|
||||
Stun(10)
|
||||
spawn( 0 )
|
||||
emote("twitch")
|
||||
return
|
||||
@@ -132,13 +132,13 @@
|
||||
if (src.mutations & HULK && src.health <= 25)
|
||||
src.mutations &= ~HULK
|
||||
src << "\red You suddenly feel very weak."
|
||||
src.weakened = 3
|
||||
Weaken(3)
|
||||
emote("collapse")
|
||||
|
||||
if (src.radiation)
|
||||
if (src.radiation > 100)
|
||||
src.radiation = 100
|
||||
src.weakened = 10
|
||||
Weaken(10)
|
||||
src << "\red You feel weak."
|
||||
emote("collapse")
|
||||
|
||||
@@ -157,7 +157,7 @@
|
||||
src.adjustToxLoss(1)
|
||||
if(prob(5))
|
||||
src.radiation -= 5
|
||||
src.weakened = 3
|
||||
Weaken(3)
|
||||
src << "\red You feel weak."
|
||||
emote("collapse")
|
||||
src.updatehealth()
|
||||
@@ -377,7 +377,7 @@
|
||||
src.eye_blurry = max(2, src.eye_blurry)
|
||||
if (prob(5))
|
||||
src.sleeping = 1
|
||||
src.paralysis = 5
|
||||
src.Paralyse(5)
|
||||
|
||||
confused = max(0, confused - 1)
|
||||
// decrement dizziness counter, clamped to 0
|
||||
@@ -396,16 +396,16 @@
|
||||
|
||||
health = 100 - (getOxyLoss() + getFireLoss() + getBruteLoss() + getCloneLoss())
|
||||
|
||||
if(getOxyLoss() > 50) paralysis = max(paralysis, 3)
|
||||
if(getOxyLoss() > 50) Paralyse(3)
|
||||
|
||||
if(src.sleeping)
|
||||
src.paralysis = max(src.paralysis, 3)
|
||||
Paralyse(3)
|
||||
if (prob(10) && health) spawn(0) emote("snore")
|
||||
if(!src.sleeping_willingly)
|
||||
src.sleeping--
|
||||
|
||||
if(src.resting)
|
||||
src.weakened = max(src.weakened, 5)
|
||||
Weaken(5)
|
||||
|
||||
if(health < config.health_threshold_dead || src.brain_op_stage == 4.0)
|
||||
death()
|
||||
@@ -416,20 +416,20 @@
|
||||
if(!src.reagents.has_reagent("inaprovaline")) src.oxyloss++
|
||||
|
||||
if(src.stat != 2) src.stat = 1
|
||||
src.paralysis = max(src.paralysis, 5)
|
||||
Paralyse(5)
|
||||
|
||||
if (src.stat != 2) //Alive.
|
||||
|
||||
if (src.paralysis || src.stunned || src.weakened) //Stunned etc.
|
||||
if (src.stunned > 0)
|
||||
src.stunned--
|
||||
AdjustStunned(-1)
|
||||
src.stat = 0
|
||||
if (src.weakened > 0)
|
||||
src.weakened--
|
||||
AdjustWeakened(-1)
|
||||
src.lying = 1
|
||||
src.stat = 0
|
||||
if (src.paralysis > 0)
|
||||
src.paralysis--
|
||||
AdjustParalysis(-1)
|
||||
src.blinded = 1
|
||||
src.lying = 1
|
||||
src.stat = 1
|
||||
|
||||
@@ -82,16 +82,16 @@
|
||||
|
||||
health = 250 - (getOxyLoss() + getFireLoss() + getBruteLoss() + getCloneLoss())
|
||||
|
||||
if(getOxyLoss() > 50) paralysis = max(paralysis, 3)
|
||||
if(getOxyLoss() > 50) Paralyse(3)
|
||||
|
||||
if(src.sleeping)
|
||||
src.paralysis = max(src.paralysis, 3)
|
||||
Paralyse(3)
|
||||
if (prob(10) && health) spawn(0) emote("snore")
|
||||
if(!src.sleeping_willingly)
|
||||
src.sleeping--
|
||||
|
||||
if(src.resting)
|
||||
src.weakened = max(src.weakened, 5)
|
||||
Weaken(5)
|
||||
|
||||
if(health < config.health_threshold_dead || src.brain_op_stage == 4.0)
|
||||
death()
|
||||
@@ -102,20 +102,20 @@
|
||||
if(!src.reagents.has_reagent("inaprovaline")) src.oxyloss++
|
||||
|
||||
if(src.stat != 2) src.stat = 1
|
||||
src.paralysis = max(src.paralysis, 5)
|
||||
Paralyse(5)
|
||||
|
||||
if (src.stat != 2) //Alive.
|
||||
|
||||
if (src.paralysis || src.stunned || src.weakened) //Stunned etc.
|
||||
if (src.stunned > 0)
|
||||
src.stunned--
|
||||
AdjustStunned(-1)
|
||||
src.stat = 0
|
||||
if (src.weakened > 0)
|
||||
src.weakened--
|
||||
AdjustWeakened(-1)
|
||||
src.lying = 1
|
||||
src.stat = 0
|
||||
if (src.paralysis > 0)
|
||||
src.paralysis--
|
||||
AdjustParalysis(-1)
|
||||
src.blinded = 1
|
||||
src.lying = 1
|
||||
src.stat = 1
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
message = "<B>The [src.name]</B> jumps!"
|
||||
m_type = 1
|
||||
if("collapse")
|
||||
if (!src.paralysis) src.paralysis += 2
|
||||
Paralyse(2)
|
||||
message = text("<B>[]</B> collapses!", src)
|
||||
m_type = 2
|
||||
if ("me")
|
||||
|
||||
@@ -105,7 +105,7 @@
|
||||
if(3.0)
|
||||
b_loss += 30
|
||||
if (prob(50))
|
||||
paralysis += 1
|
||||
Paralyse(1)
|
||||
ear_damage += 15
|
||||
ear_deaf += 60
|
||||
|
||||
@@ -358,12 +358,12 @@
|
||||
if(M.a_intent == "hurt")//Stungloves. Any contact will stun the alien.
|
||||
if(M.gloves.cell.charge >= 2500)
|
||||
M.gloves.cell.charge -= 2500
|
||||
if (weakened < 5)
|
||||
weakened = 5
|
||||
|
||||
Weaken(5)
|
||||
if (stuttering < 5)
|
||||
stuttering = 5
|
||||
if (stunned < 5)
|
||||
stunned = 5
|
||||
Stun(5)
|
||||
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message("\red <B>[src] has been touched with the stun gloves by [M]!</B>", 1, "\red You hear someone fall.", 2)
|
||||
@@ -428,7 +428,7 @@
|
||||
if (M.mutations & HULK)
|
||||
damage += 5
|
||||
spawn(0)
|
||||
paralysis += 1
|
||||
Paralyse(1)
|
||||
step_away(src,M,15)
|
||||
sleep(3)
|
||||
step_away(src,M,15)
|
||||
@@ -437,8 +437,7 @@
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red <B>[] has [attack_verb]ed []!</B>", M, src), 1)
|
||||
if (damage > 4.9)
|
||||
if (weakened < 10)
|
||||
weakened = rand(10, 15)
|
||||
Weaken(rand(10,15))
|
||||
for(var/mob/O in viewers(M, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red <B>[] has weakened []!</B>", M, src), 1, "\red You hear someone fall.", 2)
|
||||
@@ -468,9 +467,9 @@
|
||||
if(!sleeping_willingly)
|
||||
sleeping = 0
|
||||
resting = 0
|
||||
if (paralysis >= 3) paralysis -= 3
|
||||
if (stunned >= 3) stunned -= 3
|
||||
if (weakened >= 3) weakened -= 3
|
||||
AdjustParalysis(-3)
|
||||
AdjustStunned(-3)
|
||||
AdjustWeakened(-3)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\blue [M.name] nuzzles [] trying to wake it up!", src), 1)
|
||||
|
||||
@@ -78,14 +78,10 @@
|
||||
proc
|
||||
clamp_values()
|
||||
|
||||
stunned = max(min(stunned, 20),0)
|
||||
paralysis = max(min(paralysis, 20), 0)
|
||||
weakened = max(min(weakened, 20), 0)
|
||||
SetStunned(min(stunned, 20))
|
||||
SetParalysis(min(paralysis, 20))
|
||||
SetWeakened(min(weakened, 20))
|
||||
sleeping = max(min(sleeping, 20), 0)
|
||||
setBruteLoss(max(getBruteLoss(), 0))
|
||||
setToxLoss(max(getToxLoss(), 0))
|
||||
setOxyLoss(max(getOxyLoss(), 0))
|
||||
adjustFireLoss(0)
|
||||
|
||||
handle_mutations_and_radiation()
|
||||
|
||||
@@ -118,7 +114,7 @@
|
||||
if (radiation)
|
||||
if (radiation > 100)
|
||||
radiation = 100
|
||||
weakened = 10
|
||||
Weaken(10)
|
||||
src << "\red You feel weak."
|
||||
emote("collapse")
|
||||
|
||||
@@ -137,7 +133,7 @@
|
||||
adjustToxLoss(1)
|
||||
if(prob(5))
|
||||
radiation -= 5
|
||||
weakened = 3
|
||||
Weaken(3)
|
||||
src << "\red You feel weak."
|
||||
emote("collapse")
|
||||
updatehealth()
|
||||
@@ -306,7 +302,7 @@
|
||||
eye_blurry = max(2, eye_blurry)
|
||||
if (prob(5))
|
||||
sleeping = 1
|
||||
paralysis = 5
|
||||
Paralyse(5)
|
||||
|
||||
confused = max(0, confused - 1)
|
||||
// decrement dizziness counter, clamped to 0
|
||||
@@ -325,16 +321,16 @@
|
||||
|
||||
health = 25 - (getOxyLoss() + getFireLoss() + getBruteLoss() + getCloneLoss())
|
||||
|
||||
if(getOxyLoss() > 50) paralysis = max(paralysis, 3)
|
||||
if(getOxyLoss() > 50) Paralyse(3)
|
||||
|
||||
if(sleeping)
|
||||
paralysis = max(paralysis, 3)
|
||||
Paralyse(3)
|
||||
if (prob(10) && health) spawn(0) emote("snore")
|
||||
if(!src.sleeping_willingly)
|
||||
src.sleeping--
|
||||
|
||||
if(resting)
|
||||
weakened = max(weakened, 5)
|
||||
Weaken(5)
|
||||
|
||||
if(health < config.health_threshold_dead || brain_op_stage == 4.0)
|
||||
death()
|
||||
@@ -345,20 +341,20 @@
|
||||
if(!reagents.has_reagent("inaprovaline")) oxyloss++
|
||||
|
||||
if(stat != 2) stat = 1
|
||||
paralysis = max(paralysis, 5)
|
||||
Paralyse(5)
|
||||
|
||||
if (stat != 2) //Alive.
|
||||
|
||||
if (paralysis || stunned || weakened) //Stunned etc.
|
||||
if (stunned > 0)
|
||||
stunned--
|
||||
AdjustStunned(-1)
|
||||
stat = 0
|
||||
if (weakened > 0)
|
||||
weakened--
|
||||
AdjustWeakened(-1)
|
||||
lying = 1
|
||||
stat = 0
|
||||
if (paralysis > 0)
|
||||
paralysis--
|
||||
AdjustParalysis(-1)
|
||||
blinded = 1
|
||||
lying = 1
|
||||
stat = 1
|
||||
|
||||
@@ -42,9 +42,9 @@
|
||||
|
||||
clamp_values()
|
||||
|
||||
stunned = max(stunned,0)
|
||||
paralysis = max(paralysis, 0)
|
||||
weakened = max(weakened, 0)
|
||||
AdjustParalysis(0)
|
||||
AdjustStunned(0)
|
||||
AdjustWeakened(0)
|
||||
adjustBruteLoss(0)
|
||||
adjustFireLoss(0)
|
||||
adjustOxyLoss(0)
|
||||
@@ -55,7 +55,7 @@
|
||||
if (radiation)
|
||||
if (radiation > 100)
|
||||
radiation = 100
|
||||
weakened = 10
|
||||
Weaken(10)
|
||||
src << "\red You feel weak."
|
||||
|
||||
switch(radiation)
|
||||
@@ -70,7 +70,7 @@
|
||||
adjustToxLoss(1)
|
||||
if(prob(5))
|
||||
radiation -= 5
|
||||
weakened = 3
|
||||
Weaken(3)
|
||||
src << "\red You feel weak."
|
||||
// emote("collapse")
|
||||
updatehealth()
|
||||
@@ -139,7 +139,7 @@
|
||||
eye_blurry = max(2, eye_blurry)
|
||||
if (prob(5))
|
||||
sleeping = 1
|
||||
paralysis = 5
|
||||
Paralyse(5)
|
||||
|
||||
confused = max(0, confused - 1)
|
||||
// decrement dizziness counter, clamped to 0
|
||||
@@ -156,14 +156,14 @@
|
||||
|
||||
health = 100 - (getOxyLoss() + getToxLoss() + getFireLoss() + getBruteLoss() + getCloneLoss())
|
||||
|
||||
if(getOxyLoss() > 25) paralysis = max(paralysis, 3)
|
||||
if(getOxyLoss() > 25) Paralyse(3)
|
||||
|
||||
if(sleeping)
|
||||
paralysis = max(paralysis, 5)
|
||||
Paralyse(5)
|
||||
if (prob(1) && health) spawn(0) emote("snore")
|
||||
|
||||
if(resting)
|
||||
weakened = max(weakened, 5)
|
||||
Weaken(5)
|
||||
|
||||
if(stat != 2 && (!container && (health < config.health_threshold_dead || (config.revival_brain_life >= 0 && ((world.time - timeofhostdeath) > config.revival_brain_life )))))
|
||||
death()
|
||||
@@ -174,20 +174,20 @@
|
||||
if(!reagents.has_reagent("inaprovaline")) oxyloss++
|
||||
|
||||
if(stat != 2) stat = 1
|
||||
paralysis = max(paralysis, 5)
|
||||
Paralyse(5)
|
||||
|
||||
if (stat != 2) //Alive.
|
||||
|
||||
if (paralysis || stunned || weakened) //Stunned etc.
|
||||
if (stunned > 0)
|
||||
stunned--
|
||||
AdjustStunned(-1)
|
||||
stat = 0
|
||||
if (weakened > 0)
|
||||
weakened--
|
||||
AdjustWeakened(-1)
|
||||
lying = 1
|
||||
stat = 0
|
||||
if (paralysis > 0)
|
||||
paralysis--
|
||||
AdjustParalysis(-1)
|
||||
blinded = 1
|
||||
lying = 1
|
||||
stat = 1
|
||||
|
||||
@@ -134,9 +134,9 @@
|
||||
"\red You hear a heavy electrical crack." \
|
||||
)
|
||||
// if(src.stunned < shock_damage) src.stunned = shock_damage
|
||||
src.stunned = max(src.stunned,10)//This should work for now, more is really silly and makes you lay there forever
|
||||
Stun(10)//This should work for now, more is really silly and makes you lay there forever
|
||||
// if(src.weakened < 20*siemens_coeff) src.weakened = 20*siemens_coeff
|
||||
src.weakened = max(src.weakened,10)
|
||||
Weaken(10)
|
||||
return shock_damage
|
||||
|
||||
|
||||
@@ -167,9 +167,9 @@
|
||||
if(!src.sleeping_willingly)
|
||||
src.sleeping = 0
|
||||
src.resting = 0
|
||||
if (src.paralysis >= 3) src.paralysis -= 3
|
||||
if (src.stunned >= 3) src.stunned -= 3
|
||||
if (src.weakened >= 3) src.weakened -= 3
|
||||
AdjustParalysis(-3)
|
||||
AdjustStunned(-3)
|
||||
AdjustWeakened(-3)
|
||||
playsound(src.loc, 'thudswoosh.ogg', 50, 1, -1)
|
||||
M.visible_message( \
|
||||
"\blue [M] shakes [src] trying to wake [t_him] up!", \
|
||||
|
||||
@@ -400,8 +400,7 @@
|
||||
m_type = 2
|
||||
|
||||
if ("collapse")
|
||||
if (!src.paralysis)
|
||||
src.paralysis += 2
|
||||
Paralyse(2)
|
||||
message = "<B>[src]</B> collapses!"
|
||||
m_type = 2
|
||||
|
||||
|
||||
@@ -266,7 +266,7 @@
|
||||
ear_damage += 15
|
||||
ear_deaf += 60
|
||||
if (prob(50) && !shielded)
|
||||
paralysis += 10
|
||||
Paralyse(10)
|
||||
|
||||
for(var/datum/organ/external/temp in organs)
|
||||
switch(temp.name)
|
||||
@@ -1196,12 +1196,10 @@
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red <B>The [M.name] has shocked []!</B>", src), 1)
|
||||
|
||||
if (weakened < power)
|
||||
weakened = power
|
||||
Weaken(power)
|
||||
if (stuttering < power)
|
||||
stuttering = power
|
||||
if (stunned < power)
|
||||
stunned = power
|
||||
Stun(power)
|
||||
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(5, 1, src)
|
||||
@@ -2281,11 +2279,6 @@ It can still be worn/put on as normal.
|
||||
src.health = 100
|
||||
src.stat = 0
|
||||
return
|
||||
adjustBruteLoss(-getBruteLoss())
|
||||
adjustFireLoss(-getFireLoss())
|
||||
for(var/datum/organ/external/O in organs)
|
||||
src.adjustBruteLoss(O.brute_dam)
|
||||
src.adjustFireLoss(O.burn_dam)
|
||||
src.health = 100 - src.getOxyLoss() - src.getToxLoss() - src.getFireLoss() - src.getBruteLoss() - src.getCloneLoss()
|
||||
|
||||
|
||||
@@ -2296,4 +2289,43 @@ It can still be worn/put on as normal.
|
||||
if((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )))
|
||||
return 1
|
||||
|
||||
return 0
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/human/getBruteLoss()
|
||||
var/amount = 0.0
|
||||
for(var/datum/organ/external/O in organs)
|
||||
amount+= O.brute_dam
|
||||
return amount
|
||||
|
||||
/mob/living/carbon/human/adjustBruteLoss(var/amount)
|
||||
if(amount > 0)
|
||||
take_overall_damage(amount, 0)
|
||||
else
|
||||
heal_overall_damage(-amount, 0)
|
||||
|
||||
/mob/living/carbon/human/getFireLoss()
|
||||
var/amount = 0.0
|
||||
for(var/datum/organ/external/O in organs)
|
||||
amount+= O.burn_dam
|
||||
return amount
|
||||
|
||||
/mob/living/carbon/human/adjustFireLoss(var/amount)
|
||||
if(amount > 0)
|
||||
take_overall_damage(0, amount)
|
||||
else
|
||||
heal_overall_damage(0, -amount)
|
||||
|
||||
/mob/living/carbon/human/Stun(amount)
|
||||
if(mutations & HULK)
|
||||
return
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/Weaken(amount)
|
||||
if(mutations & HULK)
|
||||
return
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/Paralyse(amount)
|
||||
if(mutations & HULK)
|
||||
return
|
||||
..()
|
||||
|
||||
@@ -54,8 +54,7 @@
|
||||
var/randn = rand(1, 100)
|
||||
if (randn <= 90)
|
||||
playsound(loc, 'pierce.ogg', 25, 1, -1)
|
||||
if (weakened < 15)
|
||||
weakened = rand(10, 15)
|
||||
Weaken(rand(15,20))
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red <B>[] has tackled down []!</B>", M, src), 1)
|
||||
|
||||
@@ -3,22 +3,10 @@
|
||||
if(istype(E, /datum/organ/external))
|
||||
if (E.heal_damage(brute, burn))
|
||||
UpdateDamageIcon()
|
||||
else
|
||||
UpdateDamage()
|
||||
else
|
||||
return 0
|
||||
return
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/UpdateDamage()
|
||||
adjustBruteLoss(-getBruteLoss())
|
||||
adjustFireLoss(-getFireLoss())
|
||||
for(var/datum/organ/external/O in organs)
|
||||
if(istype(O, /datum/organ/external))
|
||||
adjustBruteLoss(O.brute_dam)
|
||||
adjustFireLoss(O.burn_dam)
|
||||
return
|
||||
|
||||
// new damage icon system
|
||||
// now constructs damage icon for each organ from mask * damage field
|
||||
|
||||
@@ -27,7 +15,6 @@
|
||||
body_standing = list()
|
||||
del(body_lying)
|
||||
body_lying = list()
|
||||
UpdateDamage()
|
||||
for(var/datum/organ/external/O in organs)
|
||||
var/icon/DI = new /icon('dam_human.dmi', O.damage_state) // the damage icon for whole human
|
||||
DI.Blend(new /icon('dam_mask.dmi', O.icon_name), ICON_MULTIPLY) // mask with this organ's pixels
|
||||
|
||||
@@ -47,19 +47,34 @@ emp_act
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/check_shields(var/damage = 0, var/attack_text = "the attack")
|
||||
if(l_hand && istype(l_hand, /obj/item))//Current base is the prob(50-d/3)
|
||||
var/obj/item/I = l_hand
|
||||
if(l_hand && istype(l_hand, /obj/item/weapon))//Current base is the prob(50-d/3)
|
||||
var/obj/item/weapon/I = l_hand
|
||||
if(I.IsShield() && (prob(50 - round(damage / 3))))
|
||||
visible_message("\red <B>[src] blocks [attack_text] with the [l_hand.name]!</B>")
|
||||
return 1
|
||||
if(r_hand && istype(r_hand, /obj/item))
|
||||
var/obj/item/I = r_hand
|
||||
if(r_hand && istype(r_hand, /obj/item/weapon))
|
||||
var/obj/item/weapon/I = r_hand
|
||||
if(I.IsShield() && (prob(50 - round(damage / 3))))
|
||||
visible_message("\red <B>[src] blocks [attack_text] with the [r_hand.name]!</B>")
|
||||
return 1
|
||||
if(wear_suit && istype(wear_suit, /obj/item/))
|
||||
var/obj/item/I = wear_suit
|
||||
if(I.IsShield() && (prob(35)))
|
||||
visible_message("\red <B>The reactive teleport system flings [src] clear of [attack_text]!</B>")
|
||||
var/list/turfs = new/list()
|
||||
for(var/turf/T in orange(6))
|
||||
if(istype(T,/turf/space)) continue
|
||||
if(T.density) continue
|
||||
if(T.x>world.maxx-6 || T.x<6) continue
|
||||
if(T.y>world.maxy-6 || T.y<6) continue
|
||||
turfs += T
|
||||
if(!turfs.len) turfs += pick(/turf in orange(6))
|
||||
var/turf/picked = pick(turfs)
|
||||
if(!isturf(picked)) return
|
||||
src.loc = picked
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
/mob/living/carbon/human/emp_act(severity)
|
||||
for(var/obj/O in src)
|
||||
if(!O) continue
|
||||
|
||||
@@ -98,9 +98,9 @@
|
||||
proc
|
||||
clamp_values()
|
||||
|
||||
stunned = max(min(stunned, 20),0)
|
||||
paralysis = max(min(paralysis, 20), 0)
|
||||
weakened = max(min(weakened, 20), 0)
|
||||
SetStunned(min(stunned, 20))
|
||||
SetParalysis(min(paralysis, 20))
|
||||
SetWeakened(min(weakened, 20))
|
||||
sleeping = max(min(sleeping, 20), 0)
|
||||
adjustBruteLoss(0)
|
||||
adjustToxLoss(0)
|
||||
@@ -126,7 +126,7 @@
|
||||
if(O == src)
|
||||
continue
|
||||
O.show_message(text("\red <B>[src] starts having a seizure!"), 1)
|
||||
paralysis = max(10, paralysis)
|
||||
Paralyse(10)
|
||||
make_jittery(1000)
|
||||
if (disabilities & 4)
|
||||
if ((prob(5) && paralysis <= 1 && r_ch_cou < 1))
|
||||
@@ -136,7 +136,7 @@
|
||||
return
|
||||
if (disabilities & 8)
|
||||
if ((prob(10) && paralysis <= 1 && r_Tourette < 1))
|
||||
stunned = max(10, stunned)
|
||||
Stun(10)
|
||||
spawn( 0 )
|
||||
switch(rand(1, 3))
|
||||
if(1)
|
||||
@@ -160,7 +160,7 @@
|
||||
if(1)
|
||||
say(pick("IM A PONY NEEEEEEIIIIIIIIIGH", "without oxigen blob don't evoluate?", "CAPTAINS A COMDOM", "[pick("", "that faggot traitor")] [pick("joerge", "george", "gorge", "gdoruge")] [pick("mellens", "melons", "mwrlins")] is grifing me HAL;P!!!", "can u give me [pick("telikesis","halk","eppilapse")]?", "THe saiyans screwed", "Bi is THE BEST OF BOTH WORLDS>", "I WANNA PET TEH monkeyS", "stop grifing me!!!!", "SOTP IT#"))
|
||||
if(2)
|
||||
say(pick("fucking 4rries!", "stat me", ">my face", "roll it easy!", "waaaaaagh!!!", "red wonz go fasta", "FOR TEH EMPRAH", "lol2cat", "dem dwarfs man, dem dwarfs", "SPESS MAHREENS", "hwee did eet fhor khayosss", "lifelike texture ;_;", "luv can bloooom"))
|
||||
say(pick("FUS RO DAH","fucking 4rries!", "stat me", ">my face", "roll it easy!", "waaaaaagh!!!", "red wonz go fasta", "FOR TEH EMPRAH", "lol2cat", "dem dwarfs man, dem dwarfs", "SPESS MAHREENS", "hwee did eet fhor khayosss", "lifelike texture ;_;", "luv can bloooom"))
|
||||
if(3)
|
||||
emote("drool")
|
||||
|
||||
@@ -173,13 +173,13 @@
|
||||
if (mutations & HULK && health <= 25)
|
||||
mutations &= ~HULK
|
||||
src << "\red You suddenly feel very weak."
|
||||
weakened = 3
|
||||
Weaken(3)
|
||||
emote("collapse")
|
||||
|
||||
if (radiation)
|
||||
if (radiation > 100)
|
||||
radiation = 100
|
||||
weakened = 10
|
||||
Weaken(10)
|
||||
src << "\red You feel weak."
|
||||
emote("collapse")
|
||||
|
||||
@@ -198,7 +198,7 @@
|
||||
adjustToxLoss(1)
|
||||
if(prob(5))
|
||||
radiation -= 5
|
||||
weakened = 3
|
||||
Weaken(3)
|
||||
src << "\red You feel weak."
|
||||
emote("collapse")
|
||||
updatehealth()
|
||||
@@ -357,7 +357,7 @@
|
||||
if(!co2overloadtime) // If it's the first breath with too much CO2 in it, lets start a counter, then have them pass out after 12s or so.
|
||||
co2overloadtime = world.time
|
||||
else if(world.time - co2overloadtime > 120)
|
||||
paralysis = max(paralysis, 3)
|
||||
Paralyse(3)
|
||||
oxyloss += 3 // Lets hurt em a little, let them know we mean business
|
||||
if(world.time - co2overloadtime > 300) // They've been in here 30s now, lets start to kill them for their own good!
|
||||
oxyloss += 8
|
||||
@@ -378,7 +378,7 @@
|
||||
for(var/datum/gas/sleeping_agent/SA in breath.trace_gases)
|
||||
var/SA_pp = (SA.moles/breath.total_moles())*breath_pressure
|
||||
if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit
|
||||
paralysis = max(paralysis, 3) // 3 gives them one second to wake up and run away a bit!
|
||||
Paralyse(3) // 3 gives them one second to wake up and run away a bit!
|
||||
if(SA_pp > SA_sleep_min) // Enough to make us sleep as well
|
||||
sleeping = max(sleeping, 2)
|
||||
else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning
|
||||
@@ -646,7 +646,7 @@
|
||||
eye_blurry = max(2, eye_blurry)
|
||||
if (prob(5))
|
||||
sleeping = 1
|
||||
paralysis = 5
|
||||
Paralyse(5)
|
||||
|
||||
confused = max(0, confused - 1)
|
||||
// decrement dizziness counter, clamped to 0
|
||||
@@ -665,16 +665,16 @@
|
||||
|
||||
// health = 100 - (getOxyLoss() + getToxLoss() + getFireLoss() + getBruteLoss() + getCloneLoss())
|
||||
|
||||
if(getOxyLoss() > 50) paralysis = max(paralysis, 3)
|
||||
if(getOxyLoss() > 50) Paralyse(3)
|
||||
|
||||
if(sleeping)
|
||||
paralysis = max(paralysis, 3)
|
||||
Paralyse(3)
|
||||
if (prob(10) && health) spawn(0) emote("snore")
|
||||
if(!src.sleeping_willingly)
|
||||
src.sleeping--
|
||||
|
||||
if(resting)
|
||||
weakened = max(weakened, 3)
|
||||
Weaken(3)
|
||||
|
||||
if(health < config.health_threshold_dead || brain_op_stage == 4.0)
|
||||
death()
|
||||
@@ -685,7 +685,7 @@
|
||||
if(!reagents.has_reagent("inaprovaline")) oxyloss++
|
||||
|
||||
if(stat != 2) stat = 1
|
||||
paralysis = max(paralysis, 5)
|
||||
Paralyse(5)
|
||||
|
||||
if (stat != 2) //Alive.
|
||||
if (silent)
|
||||
@@ -693,14 +693,14 @@
|
||||
|
||||
if (paralysis || stunned || weakened || (changeling && changeling.changeling_fakedeath)) //Stunned etc.
|
||||
if (stunned > 0)
|
||||
stunned--
|
||||
AdjustStunned(-1)
|
||||
stat = 0
|
||||
if (weakened > 0)
|
||||
weakened--
|
||||
AdjustWeakened(-1)
|
||||
lying = 1
|
||||
stat = 0
|
||||
if (paralysis > 0)
|
||||
paralysis--
|
||||
AdjustParalysis(-1)
|
||||
blinded = 1
|
||||
lying = 1
|
||||
stat = 1
|
||||
@@ -994,15 +994,28 @@
|
||||
|
||||
|
||||
if(!virus2)
|
||||
for(var/mob/living/carbon/M in oviewers(4,src))
|
||||
// the following is silly since it lets you infect people through glass
|
||||
/*for(var/mob/living/carbon/M in oviewers(4,src))
|
||||
if(M.virus2)
|
||||
infect_virus2(src,M.virus2)
|
||||
infect_virus2(src,M.virus2)*/
|
||||
// instead we're going to use little floating disease objects
|
||||
for(var/obj/virus/V in src.loc) if(src.get_infection_chance())
|
||||
infect_virus2(src,V.disease)
|
||||
for(var/obj/effect/decal/cleanable/blood/B in view(4, src))
|
||||
if(B.virus2)
|
||||
infect_virus2(src,B.virus2)
|
||||
else
|
||||
virus2.activate(src)
|
||||
|
||||
// activate may have deleted the virus
|
||||
if(!virus2) return
|
||||
|
||||
// check if we're immune
|
||||
if(virus2.antigen & src.antibodies) virus2.dead = 1
|
||||
if(src.get_infection_chance())
|
||||
var/obj/virus/V = new(src.loc)
|
||||
V.disease = src.virus2
|
||||
|
||||
|
||||
|
||||
return
|
||||
|
||||
@@ -413,7 +413,7 @@
|
||||
//if(!src.rejuv) src.oxyloss++
|
||||
if(!src.reagents.has_reagent("inaprovaline")) src.oxyloss+=10
|
||||
|
||||
if(src.stat != 2) src.stat = 1
|
||||
if(src.stat != DEAD) src.stat = UNCONSCIOUS
|
||||
|
||||
if(prob(30))
|
||||
if(getOxyLoss()>0) oxyloss = max(getOxyLoss()-1, 0)
|
||||
@@ -423,23 +423,22 @@
|
||||
if(getBruteLoss()>0) bruteloss = max(getBruteLoss()-1,0)
|
||||
|
||||
|
||||
if (src.stat == 2)
|
||||
if (src.stat == DEAD)
|
||||
|
||||
src.lying = 1
|
||||
src.blinded = 1
|
||||
src.stat = 2
|
||||
|
||||
else
|
||||
if (src.paralysis || src.stunned || src.weakened || (changeling && changeling.changeling_fakedeath)) //Stunned etc.
|
||||
if (src.stunned > 0)
|
||||
src.stunned = 0
|
||||
AdjustStunned(-1)
|
||||
src.stat = 0
|
||||
if (src.weakened > 0)
|
||||
src.weakened = 0
|
||||
AdjustWeakened(-1)
|
||||
src.lying = 0
|
||||
src.stat = 0
|
||||
if (src.paralysis > 0)
|
||||
src.paralysis = 0
|
||||
AdjustParalysis(-1)
|
||||
src.blinded = 0
|
||||
src.lying = 0
|
||||
src.stat = 0
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
message = "<B>The [src.name]</B> jumps!"
|
||||
m_type = 1
|
||||
if("collapse")
|
||||
if (!src.paralysis) src.paralysis += 2
|
||||
Paralyse(2)
|
||||
message = text("<B>[]</B> collapses!", src)
|
||||
m_type = 2
|
||||
if("deathgasp")
|
||||
|
||||
@@ -90,16 +90,16 @@
|
||||
|
||||
clamp_values()
|
||||
|
||||
stunned = max(stunned,0)
|
||||
paralysis = max(paralysis, 0)
|
||||
weakened = max(weakened, 0)
|
||||
AdjustStunned(0)
|
||||
AdjustParalysis(0)
|
||||
AdjustWeakened(0)
|
||||
|
||||
handle_disabilities()
|
||||
|
||||
if (src.disabilities & 2)
|
||||
if ((prob(1) && src.paralysis < 10 && src.r_epil < 1))
|
||||
src << "\red You have a seizure!"
|
||||
src.paralysis = max(10, src.paralysis)
|
||||
Paralyse(10)
|
||||
if (src.disabilities & 4)
|
||||
if ((prob(5) && src.paralysis <= 1 && src.r_ch_cou < 1))
|
||||
src.drop_item()
|
||||
@@ -108,7 +108,7 @@
|
||||
return
|
||||
if (src.disabilities & 8)
|
||||
if ((prob(10) && src.paralysis <= 1 && src.r_Tourette < 1))
|
||||
src.stunned = max(10, src.stunned)
|
||||
Stun(10)
|
||||
spawn( 0 )
|
||||
emote("twitch")
|
||||
return
|
||||
@@ -135,13 +135,13 @@
|
||||
if (src.mutations & HULK && src.health <= 25)
|
||||
src.mutations &= ~HULK
|
||||
src << "\red You suddenly feel very weak."
|
||||
src.weakened = 3
|
||||
Weaken(3)
|
||||
emote("collapse")
|
||||
|
||||
if (src.radiation)
|
||||
if (src.radiation > 100)
|
||||
src.radiation = 100
|
||||
src.weakened = 10
|
||||
Weaken(10)
|
||||
src << "\red You feel weak."
|
||||
emote("collapse")
|
||||
|
||||
@@ -157,7 +157,7 @@
|
||||
src.adjustToxLoss(1)
|
||||
if(prob(5))
|
||||
src.radiation -= 5
|
||||
src.weakened = 3
|
||||
Weaken(3)
|
||||
src << "\red You feel weak."
|
||||
emote("collapse")
|
||||
src.updatehealth()
|
||||
@@ -304,7 +304,7 @@
|
||||
if(!co2overloadtime) // If it's the first breath with too much CO2 in it, lets start a counter, then have them pass out after 12s or so.
|
||||
co2overloadtime = world.time
|
||||
else if(world.time - co2overloadtime > 120)
|
||||
src.paralysis = max(src.paralysis, 3)
|
||||
Paralyse(3)
|
||||
oxyloss += 3 // Lets hurt em a little, let them know we mean business
|
||||
if(world.time - co2overloadtime > 300) // They've been in here 30s now, lets start to kill them for their own good!
|
||||
oxyloss += 8
|
||||
@@ -325,7 +325,7 @@
|
||||
for(var/datum/gas/sleeping_agent/SA in breath.trace_gases)
|
||||
var/SA_pp = (SA.moles/breath.total_moles())*breath_pressure
|
||||
if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit
|
||||
src.paralysis = max(src.paralysis, 3) // 3 gives them one second to wake up and run away a bit!
|
||||
Paralyse(3) // 3 gives them one second to wake up and run away a bit!
|
||||
if(SA_pp > SA_sleep_min) // Enough to make us sleep as well
|
||||
src.sleeping = max(src.sleeping, 2)
|
||||
else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning
|
||||
@@ -387,7 +387,7 @@
|
||||
src.eye_blurry = max(2, src.eye_blurry)
|
||||
if (prob(5))
|
||||
src.sleeping = 1
|
||||
src.paralysis = 5
|
||||
Paralyse(5)
|
||||
|
||||
confused = max(0, confused - 1)
|
||||
// decrement dizziness counter, clamped to 0
|
||||
@@ -404,14 +404,14 @@
|
||||
|
||||
health = 100 - (getOxyLoss() + getToxLoss() + getFireLoss() + getBruteLoss() + getCloneLoss())
|
||||
|
||||
if(getOxyLoss() > 25) paralysis = max(paralysis, 3)
|
||||
if(getOxyLoss() > 25) Paralyse(3)
|
||||
|
||||
if(src.sleeping)
|
||||
src.paralysis = max(src.paralysis, 5)
|
||||
Paralyse(5)
|
||||
if (prob(1) && health) spawn(0) emote("snore")
|
||||
|
||||
if(src.resting)
|
||||
src.weakened = max(src.weakened, 5)
|
||||
Weaken(5)
|
||||
|
||||
if(health < config.health_threshold_dead && stat != 2)
|
||||
death()
|
||||
@@ -422,20 +422,20 @@
|
||||
if(!src.reagents.has_reagent("inaprovaline")) src.oxyloss++
|
||||
|
||||
if(src.stat != 2) src.stat = 1
|
||||
src.paralysis = max(src.paralysis, 5)
|
||||
Paralyse(5)
|
||||
|
||||
if (src.stat != 2) //Alive.
|
||||
|
||||
if (src.paralysis || src.stunned || src.weakened || (changeling && changeling.changeling_fakedeath)) //Stunned etc.
|
||||
if (src.stunned > 0)
|
||||
src.stunned--
|
||||
AdjustStunned(-1)
|
||||
src.stat = 0
|
||||
if (src.weakened > 0)
|
||||
src.weakened--
|
||||
AdjustWeakened(-1)
|
||||
src.lying = 1
|
||||
src.stat = 0
|
||||
if (src.paralysis > 0)
|
||||
src.paralysis--
|
||||
AdjustParalysis(-1)
|
||||
src.blinded = 1
|
||||
src.lying = 1
|
||||
src.stat = 1
|
||||
|
||||
@@ -161,12 +161,11 @@
|
||||
if(M.a_intent == "hurt")
|
||||
if(M.gloves.cell.charge >= 2500)
|
||||
M.gloves.cell.charge -= 2500
|
||||
if (weakened < 5)
|
||||
weakened = 5
|
||||
Weaken(5)
|
||||
if (stuttering < 5)
|
||||
stuttering = 5
|
||||
if (stunned < 5)
|
||||
stunned = 5
|
||||
Stun(5)
|
||||
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if (O.client)
|
||||
O.show_message("\red <B>[src] has been touched with the stun gloves by [M]!</B>", 1, "\red You hear someone fall", 2)
|
||||
@@ -198,7 +197,7 @@
|
||||
if (prob(40))
|
||||
damage = rand(10, 15)
|
||||
if (paralysis < 5)
|
||||
paralysis = rand(10, 15)
|
||||
Paralyse(rand(10, 15))
|
||||
spawn( 0 )
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
@@ -235,7 +234,7 @@
|
||||
else
|
||||
if (!( paralysis ))
|
||||
if (prob(25))
|
||||
paralysis = 2
|
||||
Paralyse(2)
|
||||
playsound(loc, 'thudswoosh.ogg', 50, 1, -1)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
@@ -270,7 +269,7 @@
|
||||
if (damage >= 25)
|
||||
damage = rand(20, 40)
|
||||
if (paralysis < 15)
|
||||
paralysis = rand(10, 15)
|
||||
Paralyse(rand(10, 15))
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red <B>[] has wounded [name]!</B>", M), 1)
|
||||
@@ -310,7 +309,7 @@
|
||||
playsound(loc, 'pierce.ogg', 25, 1, -1)
|
||||
var/damage = 5
|
||||
if(prob(95))
|
||||
weakened = rand(10, 15)
|
||||
Weaken(rand(10,15))
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red <B>[] has tackled down [name]!</B>", M), 1)
|
||||
@@ -368,12 +367,10 @@
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\red <B>The [M.name] has shocked []!</B>", src), 1)
|
||||
|
||||
if (weakened < power)
|
||||
weakened = power
|
||||
Weaken(power)
|
||||
if (stuttering < power)
|
||||
stuttering = power
|
||||
if (stunned < power)
|
||||
stunned = power
|
||||
Stun(power)
|
||||
|
||||
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
|
||||
s.set_up(5, 1, src)
|
||||
@@ -562,7 +559,7 @@
|
||||
adjustBruteLoss(30)
|
||||
health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss()
|
||||
if (prob(50))
|
||||
paralysis += 10
|
||||
Paralyse(10)
|
||||
else
|
||||
return
|
||||
|
||||
@@ -571,7 +568,7 @@
|
||||
adjustFireLoss(60)
|
||||
health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss()
|
||||
if (prob(50))
|
||||
paralysis += 10
|
||||
Paralyse(10)
|
||||
|
||||
/obj/effect/equip_e/monkey/process()
|
||||
if (item)
|
||||
|
||||
@@ -42,11 +42,11 @@
|
||||
if(!effect || (blocked >= 2)) return 0
|
||||
switch(effecttype)
|
||||
if(STUN)
|
||||
stunned = max(stunned,(effect/(blocked+1)))
|
||||
Stun(effect/(blocked+1))
|
||||
if(WEAKEN)
|
||||
weakened = max(weakened,(effect/(blocked+1)))
|
||||
Weaken(effect/(blocked+1))
|
||||
if(PARALYZE)
|
||||
paralysis = max(paralysis,(effect/(blocked+1)))
|
||||
Paralyse(effect/(blocked+1))
|
||||
if(IRRADIATE)
|
||||
radiation += min((effect - (effect*getarmor(null, "rad"))), 0)//Rads auto check armor
|
||||
if(STUTTER)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user