mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-23 20:16:55 +01:00
@@ -29,6 +29,7 @@
|
||||
return
|
||||
zombie_rejuv()
|
||||
to_chat(zomboid, "<span class='zombielarge'>We... Awaken...</span>")
|
||||
zomboid.notify_ghost_cloning("Your zombie body has risen again, re-enter your corpse to continue the feast!", source = zomboid)
|
||||
|
||||
// If no client, but they were a player thats not SSD (debrained, revived but hasn't returned to body, etc)
|
||||
if(zomboid.stat != CONSCIOUS || HAS_TRAIT(zomboid, TRAIT_HANDS_BLOCKED))
|
||||
@@ -128,6 +129,8 @@
|
||||
target = pick(targets)
|
||||
|
||||
if(zomboid.Adjacent(target) && safe_active_hand(zomboid))
|
||||
if(!zomboid.get_active_hand())
|
||||
zomboid.put_in_hands(new /obj/item/zombie_claw())
|
||||
zomboid.a_intent = INTENT_HARM
|
||||
zomboid.ClickOn(target)
|
||||
return
|
||||
|
||||
@@ -89,14 +89,17 @@ GLOBAL_LIST_INIT(diseases, subtypesof(/datum/disease))
|
||||
|
||||
stage = min(stage, max_stages)
|
||||
|
||||
if(!cure && prob(stage_prob))
|
||||
handle_stage_advance(cure)
|
||||
|
||||
return handle_cure_testing(cure)
|
||||
|
||||
/datum/disease/proc/handle_stage_advance(has_cure = FALSE)
|
||||
if(!has_cure && prob(stage_prob))
|
||||
stage = min(stage + 1, max_stages)
|
||||
if(!discovered && stage >= CEILING(max_stages * discovery_threshold, 1)) // Once we reach a late enough stage, medical HUDs can pick us up even if we regress
|
||||
discovered = TRUE
|
||||
affected_mob.med_hud_set_status()
|
||||
|
||||
return handle_cure_testing(cure)
|
||||
|
||||
/datum/disease/proc/handle_cure_testing(has_cure = FALSE)
|
||||
if(has_cure && prob(cure_chance))
|
||||
stage = max(stage - 1, 1)
|
||||
|
||||
@@ -13,10 +13,12 @@
|
||||
allow_dead = TRUE
|
||||
disease_flags = CAN_CARRY
|
||||
virus_heal_resistant = TRUE
|
||||
stage_prob = 1
|
||||
stage_prob = 100 // It isn't actually 100%, but is instead based on a timer
|
||||
cure_chance = 80
|
||||
/// How far this particular virus is in being cured (0-4)
|
||||
var/cure_stage = 0
|
||||
/// Cooldown until the virus can advance to the next stage
|
||||
COOLDOWN_DECLARE(stage_timer)
|
||||
|
||||
/datum/disease/zombie/stage_act()
|
||||
if(stage == 8)
|
||||
@@ -34,7 +36,7 @@
|
||||
SSticker.mode.zombie_infected -= affected_mob
|
||||
if(affected_mob.reagents.has_reagent("zombiecure4"))
|
||||
return
|
||||
handle_rot(TRUE)
|
||||
handle_rot()
|
||||
stage = 7
|
||||
return FALSE
|
||||
SSticker.mode.zombie_infected |= affected_mob
|
||||
@@ -79,17 +81,24 @@
|
||||
if(stage == 6 && !affected_mob.reagents.has_reagent("zombiecure3")) // cure 3 can delay it, but not cure it
|
||||
if(prob(10))
|
||||
to_chat(affected_mob, "<span class='danger zombie'>You feel your flesh rotting.</span>")
|
||||
handle_rot()
|
||||
if(prob(10) || affected_mob.stat != DEAD)
|
||||
handle_rot()
|
||||
if(7)
|
||||
if(!handle_rot(TRUE))
|
||||
if(!handle_rot())
|
||||
stage = 6
|
||||
return
|
||||
|
||||
/datum/disease/zombie/handle_stage_advance(has_cure = FALSE)
|
||||
if(!stage_timer)
|
||||
COOLDOWN_START(src, stage_timer, 1 MINUTES) // for the first infection
|
||||
if(affected_mob.stat != DEAD || !prob(30)) // when the body is dead, it always has a 30% chance to advance regardless
|
||||
if(!COOLDOWN_FINISHED(src, stage_timer))
|
||||
return
|
||||
COOLDOWN_START(src, stage_timer, 1 MINUTES)
|
||||
..()
|
||||
|
||||
|
||||
/datum/disease/zombie/proc/handle_rot(forced = FALSE)
|
||||
if(!prob(20) && !forced && affected_mob.stat != DEAD)
|
||||
return FALSE
|
||||
/datum/disease/zombie/proc/handle_rot()
|
||||
var/mob/living/carbon/human/H = affected_mob
|
||||
if(!istype(H))
|
||||
return FALSE
|
||||
|
||||
Reference in New Issue
Block a user