mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-28 14:37:04 +01:00
@@ -388,7 +388,7 @@
|
||||
* This will create progress bar that lasts for 5 seconds. If the user doesn't move or otherwise do something that would cause the checks to fail in those 5 seconds, do_stuff() would execute.
|
||||
* The Proc returns TRUE upon success (the progress bar reached the end), or FALSE upon failure (the user moved or some other check failed)
|
||||
*/
|
||||
/proc/do_after(mob/user, delay, needhand = 1, atom/target = null, progress = 1, allow_moving = 0, must_be_held = 0, list/extra_checks = list(), use_default_checks = TRUE)
|
||||
/proc/do_after(mob/user, delay, needhand = 1, atom/target = null, progress = 1, allow_moving = 0, must_be_held = 0, list/extra_checks = list(), use_default_checks = TRUE, allow_moving_target = FALSE)
|
||||
if(!user)
|
||||
return FALSE
|
||||
var/atom/Tloc = null
|
||||
@@ -437,7 +437,7 @@
|
||||
. = FALSE
|
||||
break
|
||||
|
||||
if(Tloc && (!target || Tloc != target.loc))
|
||||
if(!allow_moving_target && Tloc && (!target || Tloc != target.loc))
|
||||
. = FALSE
|
||||
break
|
||||
|
||||
|
||||
@@ -232,7 +232,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
|
||||
#define TRAIT_CLING_BURSTING "cling_bursting" // This changeling is about to burst into a headslug, block cremation / gibber to prevent nullspace issues
|
||||
#define TRAIT_I_WANT_BRAINS "mob_zombie" // A general trait for tracking if the mob is a zombie.
|
||||
#define TRAIT_ABSTRACT_HANDS "abstract_hands" // Mobs with this trait can only pick up abstract items.
|
||||
#define TRAIT_SLOW_GRABBER "slow_grabber" // Adds a 1.5 * CLICK_CD_MELEE delay to upgrading into a aggressive grab.
|
||||
#define TRAIT_LANGUAGE_LOCKED "language_locked" // cant add/remove languages until removed (excludes babel because fuck everything i guess)
|
||||
#define TRAIT_HAS_IV_BAG "iv_bag" // Used to check if there is an active IV bag. Currently blocks another IV bags from being inserted.
|
||||
|
||||
|
||||
@@ -95,7 +95,6 @@ GLOBAL_LIST_INIT(traits_by_type, list(
|
||||
"TRAIT_CLING_BURSTING" = TRAIT_CLING_BURSTING,
|
||||
"TRAIT_I_WANT_BRAINS" = TRAIT_I_WANT_BRAINS,
|
||||
"TRAIT_ABSTRACT_HANDS" = TRAIT_ABSTRACT_HANDS,
|
||||
"TRAIT_SLOW_GRABBER" = TRAIT_SLOW_GRABBER,
|
||||
"TRAIT_LANGUAGE_LOCKED" = TRAIT_LANGUAGE_LOCKED,
|
||||
"TRAIT_HAS_IV_BAG" = TRAIT_HAS_IV_BAG
|
||||
),
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -9,7 +9,7 @@ RESTRICT_TYPE(/datum/antagonist/zombie)
|
||||
clown_removal_text = "You feel funnier again."
|
||||
wiki_page_name = "Zombie"
|
||||
var/list/old_languages = list() // someone make this better to prevent langs changing if species changes while zombie somehow
|
||||
var/static/list/zombie_traits = list(TRAIT_LANGUAGE_LOCKED, TRAIT_GOTTAGOSLOW, TRAIT_ABSTRACT_HANDS, TRAIT_SLOW_GRABBER, TRAIT_NOBREATH)
|
||||
var/static/list/zombie_traits = list(TRAIT_LANGUAGE_LOCKED, TRAIT_GOTTAGOSLOW, TRAIT_ABSTRACT_HANDS, TRAIT_NOBREATH)
|
||||
var/datum/unarmed_attack/claws/claw_attack
|
||||
|
||||
// possibly upgrades for the zombies after eating brains? Better vision (/datum/action/changeling/augmented_eyesight), better weapons (armblade), better infection, more inhereint armor (physiology)
|
||||
|
||||
@@ -62,18 +62,20 @@
|
||||
|
||||
/obj/item/zombie_claw/Initialize(mapload, new_parent_spell)
|
||||
. = ..()
|
||||
parent_spell = new_parent_spell
|
||||
RegisterSignal(parent_spell.action.owner, COMSIG_MOB_WILLINGLY_DROP, PROC_REF(dispel))
|
||||
if(new_parent_spell)
|
||||
parent_spell = new_parent_spell
|
||||
RegisterSignal(parent_spell.action.owner, COMSIG_MOB_WILLINGLY_DROP, PROC_REF(dispel))
|
||||
|
||||
/obj/item/zombie_claw/proc/dispel(mob/user)
|
||||
if(user && user.get_active_hand() == src)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/zombie_claw/Destroy()
|
||||
UnregisterSignal(parent_spell.action.owner, COMSIG_MOB_WILLINGLY_DROP)
|
||||
if(parent_spell)
|
||||
parent_spell.our_claws -= src
|
||||
parent_spell = null
|
||||
UnregisterSignal(parent_spell.action.owner, COMSIG_MOB_WILLINGLY_DROP)
|
||||
if(parent_spell)
|
||||
parent_spell.our_claws -= src
|
||||
parent_spell = null
|
||||
return ..()
|
||||
|
||||
/obj/item/zombie_claw/customised_abstract_text(mob/living/carbon/owner)
|
||||
|
||||
@@ -892,16 +892,18 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven
|
||||
|
||||
/mob/living/carbon/proc/cuff_resist(obj/item/I, breakouttime = 600, cuff_break = 0)
|
||||
breakouttime = I.breakouttime
|
||||
if(HAS_TRAIT(src, TRAIT_I_WANT_BRAINS))
|
||||
breakouttime /= 2
|
||||
|
||||
var/displaytime = breakouttime / 10
|
||||
if(!cuff_break)
|
||||
if(has_status_effect(STATUS_EFFECT_REMOVE_CUFFS))
|
||||
to_chat(src, "<span class='notice'>You are already trying to remove [I].</span>")
|
||||
return
|
||||
apply_status_effect(STATUS_EFFECT_REMOVE_CUFFS)
|
||||
visible_message("<span class='warning'>[src] attempts to remove [I]!</span>")
|
||||
to_chat(src, "<span class='notice'>You attempt to remove [I]... (This will take around [displaytime] seconds and you need to stand still.)</span>")
|
||||
if(do_after(src, breakouttime, 0, target = src))
|
||||
var/is_zombie = HAS_TRAIT(src, TRAIT_I_WANT_BRAINS)
|
||||
to_chat(src, "<span class='notice'>You attempt to remove [I]... (This will take around [breakouttime / 10] seconds[is_zombie ? "" : " and you need to stand still"].)</span>")
|
||||
if(do_after(src, breakouttime, 0, target = src, allow_moving = is_zombie, allow_moving_target = is_zombie))
|
||||
remove_status_effect(STATUS_EFFECT_REMOVE_CUFFS)
|
||||
if(I.loc != src || buckled)
|
||||
return
|
||||
|
||||
@@ -64,9 +64,6 @@
|
||||
clean_grabbed_by(assailant, affecting)
|
||||
adjust_position()
|
||||
|
||||
if(HAS_TRAIT(assailant, TRAIT_SLOW_GRABBER))
|
||||
assailant.changeNext_move(1.5 * CLICK_CD_MELEE)
|
||||
|
||||
/obj/item/grab/Destroy()
|
||||
if(affecting)
|
||||
UnregisterSignal(affecting, COMSIG_MOVABLE_MOVED)
|
||||
|
||||
@@ -918,7 +918,7 @@
|
||||
if(method == REAGENT_INGEST || (method == REAGENT_TOUCH && prob(25)))
|
||||
if(M.stat == DEAD)
|
||||
if(M.getBruteLoss() + M.getFireLoss() + M.getCloneLoss() >= 150)
|
||||
if(IS_CHANGELING(M))
|
||||
if(IS_CHANGELING(M) || HAS_TRAIT(M, TRAIT_I_WANT_BRAINS))
|
||||
return
|
||||
M.delayed_gib(TRUE)
|
||||
return
|
||||
|
||||
@@ -547,10 +547,10 @@
|
||||
id = "zombiecure2"
|
||||
result = "zombiecure2"
|
||||
cure_level = 2
|
||||
amt_req_cures = 2
|
||||
amt_req_cures = 3
|
||||
|
||||
/datum/chemical_reaction/zombie/second/get_possible_cures()
|
||||
return list("vomit", "jenkem", "charcoal", "egg", "salglu_solution", "toxin", "atropine", "lye", "sacid", "facid", "sodawater", "surge", "ultralube", "happiness", "morphine")
|
||||
return list("salglu_solution", "toxin", "atropine", "lye", "sodawater", "happiness", "morphine", "teporone")
|
||||
|
||||
/datum/chemical_reaction/zombie/third
|
||||
name = "Anti-Plague Sequence Gamma"
|
||||
@@ -561,7 +561,7 @@
|
||||
required_symptom = /datum/symptom/flesh_eating
|
||||
|
||||
/datum/chemical_reaction/zombie/third/get_possible_cures()
|
||||
return list("colorful_reagent", "bacchus_blessing", "pen_acid", "teporone", "glyphosate", "lazarus_reagent", "omnizine", "sarin", "mitocholide", "ants", "clf3", "sorium", "????", "aranesp")
|
||||
return list("vomit", "jenkem", "charcoal", "egg", "sacid", "facid", "surge", "ultralube", "mitocholide")
|
||||
|
||||
/datum/chemical_reaction/zombie/four
|
||||
name = "Anti-Plague Sequence Omega"
|
||||
@@ -572,7 +572,9 @@
|
||||
required_symptom = /datum/symptom/heal/metabolism
|
||||
|
||||
/datum/chemical_reaction/zombie/four/get_possible_cures()
|
||||
return list("entpoly", "tinlux", "earthsblood", "bath_salts", "rezadone", "rotatium", "krokodil", "fliptonium")
|
||||
return list("colorful_reagent", "bacchus_blessing", "pen_acid", "glyphosate", "lazarus_reagent", "omnizine", "sarin", "ants", "clf3", "sorium", "????", "aranesp")
|
||||
// Heres some ideas for making this harder if people ever get too good at curing zombies some day
|
||||
// return list("entpoly", "tinlux", "earthsblood", "bath_salts", "rezadone", "rotatium", "krokodil", "fliptonium")
|
||||
|
||||
/datum/chemical_reaction/dupe_zomb_cure
|
||||
name = "Duplicate Zombie Cure"
|
||||
|
||||
Reference in New Issue
Block a user