mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-24 20:47:10 +01:00
Exfiltration - Early Antag Escape (#29554)
* Ghost bar antag addition * Adds extraction flares and extraction procs * Ghostbarification, antag-specific extractions * Objectives reroll if target extracts * Comment format * Adds blackboxing. Prevents extraction if you're an objective target. * Fixed objective freezing, removes mindslaves on exfiltration * Vampire Portal Sprites * Better sprite for portal * Flayer telepad, assorted visual adjustments * Makes flayer and vampire portals truly one time use. Flayer ability icon * Fixed indents, vampire ability icon * Changeling flare * Removed some debug adjustments * Map fixes * Makes the exfil restriction a var on the datum * More map fixes * Centcomm my beloathed * More map fixes * Checks delay before objectives * Objective freezing list fix * Review fixes * Moves a lot of exfil item granting logic to antag datum. * Changed objective exfil block from var to proc * Centcommmm * Adds true return. Thanks Contra. Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com> Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> * Efficiency Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com> Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> * Moved jaunter subtypes * Forgot to move the admin one * Capitalization Co-authored-by: AmityBlamity <142629851+AmityBlamity@users.noreply.github.com> Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> * Reworked area selection * Black box, admin log, proper clearing of martial arts and bio chips * Exfiltration now properly checks completion of alive and free escape objective * Adds announcement to security comms when exfil item is used * Linters * Map adjustments * Fixes syndiebar library computer access * Merge conflict resolution * Updates action buttons * New Linters * Update centcomm.dmm --------- Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com> Co-authored-by: AmityBlamity <142629851+AmityBlamity@users.noreply.github.com>
This commit is contained in:
co-authored by
Contrabang
AmityBlamity
parent
7a0918b330
commit
fca03efeb0
@@ -72,6 +72,9 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
/datum/objective/proc/found_target()
|
||||
return target
|
||||
|
||||
/datum/objective/proc/is_valid_exfiltration()
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* This is for objectives that need to register signals, so place them in here.
|
||||
*/
|
||||
@@ -215,6 +218,8 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
explanation_text = "Free Objective"
|
||||
|
||||
/datum/objective/assassinate/check_completion()
|
||||
if(..())
|
||||
return TRUE
|
||||
if(target?.current)
|
||||
if(target.current.stat == DEAD)
|
||||
return TRUE
|
||||
@@ -271,6 +276,8 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
return TARGET_INVALID_NOTHEAD
|
||||
|
||||
/datum/objective/mutiny/check_completion()
|
||||
if(..())
|
||||
return TRUE
|
||||
if(target?.current)
|
||||
if(target.current.stat == DEAD || !ishuman(target.current) || !target.current.ckey || !target.current.client)
|
||||
return TRUE
|
||||
@@ -334,6 +341,8 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
/datum/objective/debrain/check_completion()
|
||||
if(!target) // If it's a free objective.
|
||||
return TRUE
|
||||
if(..())
|
||||
return TRUE
|
||||
if(!target.current || !isbrain(target.current))
|
||||
return FALSE
|
||||
for(var/datum/mind/M in get_owners())
|
||||
@@ -358,6 +367,8 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
/datum/objective/protect/check_completion()
|
||||
if(!target) //If it's a free objective.
|
||||
return TRUE
|
||||
if(..())
|
||||
return TRUE
|
||||
if(target.current)
|
||||
if(target.current.stat == DEAD)
|
||||
return FALSE
|
||||
@@ -395,6 +406,9 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
return FALSE
|
||||
return SSshuttle.emergency.is_hijacked()
|
||||
|
||||
/datum/objective/hijack/is_valid_exfiltration()
|
||||
return FALSE
|
||||
|
||||
/datum/objective/hijackclone
|
||||
name = "Hijack (with clones)"
|
||||
explanation_text = "Hijack the shuttle by ensuring only you (or your copies) escape."
|
||||
@@ -453,7 +467,9 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
explanation_text = "Escape on the shuttle or an escape pod alive and free."
|
||||
needs_target = FALSE
|
||||
|
||||
/datum/objective/escape/check_completion()
|
||||
/datum/objective/escape/check_completion(exfilling = FALSE)
|
||||
if(..())
|
||||
return TRUE
|
||||
var/list/owners = get_owners()
|
||||
for(var/datum/mind/M in owners)
|
||||
// These are mandatory conditions, they should come before the freebie conditions below.
|
||||
@@ -464,6 +480,8 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
return TRUE
|
||||
if(SSticker.mode.station_was_nuked) // If they escaped the blast somehow, let them win.
|
||||
return TRUE
|
||||
if(exfilling)
|
||||
return TRUE
|
||||
if(SSshuttle.emergency.mode < SHUTTLE_ENDGAME)
|
||||
return FALSE
|
||||
|
||||
@@ -536,7 +554,9 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
|
||||
// This objective should only be given to a single owner since only 1 person can have the ID card of the target.
|
||||
// We're fine to use `owner` instead of `get_owners()`.
|
||||
/datum/objective/escape/escape_with_identity/check_completion()
|
||||
/datum/objective/escape/escape_with_identity/check_completion(exfilling = FALSE)
|
||||
if(..())
|
||||
return TRUE
|
||||
if(!target_real_name)
|
||||
return TRUE
|
||||
if(!ishuman(owner.current))
|
||||
@@ -554,6 +574,8 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
needs_target = FALSE
|
||||
|
||||
/datum/objective/survive/check_completion()
|
||||
if(..())
|
||||
return TRUE
|
||||
for(var/datum/mind/M in get_owners())
|
||||
if(QDELETED(M.current) || M.current.stat == DEAD || is_special_dead(M.current, check_silicon = FALSE))
|
||||
return FALSE
|
||||
@@ -576,6 +598,11 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
/datum/objective/steal/found_target()
|
||||
return steal_target
|
||||
|
||||
/datum/objective/steal/is_valid_exfiltration()
|
||||
if(istype(steal_target, /datum/theft_objective/nukedisc) || istype(steal_target, /datum/theft_objective/plutonium_core))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/datum/objective/steal/proc/get_location()
|
||||
return steal_target.location_override || "an unknown area"
|
||||
|
||||
@@ -651,6 +678,8 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
/datum/objective/steal/check_completion()
|
||||
if(!steal_target)
|
||||
return TRUE // Free Objective
|
||||
if(..())
|
||||
return TRUE
|
||||
|
||||
for(var/datum/mind/M in get_owners())
|
||||
if(!M.current)
|
||||
@@ -733,6 +762,8 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
explanation_text = "Acquire [target_amount] compatible genomes. The 'Extract DNA Sting' can be used to stealthily get genomes without killing somebody."
|
||||
|
||||
/datum/objective/absorb/check_completion()
|
||||
if(..())
|
||||
return TRUE
|
||||
for(var/datum/mind/M in get_owners())
|
||||
var/datum/antagonist/changeling/cling = M?.has_antag_datum(/datum/antagonist/changeling)
|
||||
if(cling?.absorbed_dna && (cling.absorbed_count >= target_amount))
|
||||
@@ -758,6 +789,8 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
explanation_text = "Free Objective"
|
||||
|
||||
/datum/objective/destroy/check_completion()
|
||||
if(..())
|
||||
return TRUE
|
||||
if(target?.current)
|
||||
if(target.current.stat == DEAD || is_away_level(target.current.z) || !target.current.ckey)
|
||||
return TRUE
|
||||
@@ -778,6 +811,8 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
wanted_items = typecacheof(wanted_items)
|
||||
|
||||
/datum/objective/steal_five_of_type/check_completion()
|
||||
if(..())
|
||||
return TRUE
|
||||
var/stolen_count = 0
|
||||
var/list/owners = get_owners()
|
||||
var/list/all_items = list()
|
||||
@@ -805,6 +840,8 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
..()
|
||||
|
||||
/datum/objective/steal_five_of_type/summon_magic/check_completion()
|
||||
if(..())
|
||||
return TRUE
|
||||
var/stolen_count = 0
|
||||
var/list/owners = get_owners()
|
||||
var/list/all_items = list()
|
||||
@@ -843,6 +880,8 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
explanation_text = "Accumulate at least [target_amount] total units of blood."
|
||||
|
||||
/datum/objective/blood/check_completion()
|
||||
if(..())
|
||||
return TRUE
|
||||
for(var/datum/mind/M in get_owners())
|
||||
var/datum/antagonist/vampire/V = M.has_antag_datum(/datum/antagonist/vampire)
|
||||
if(V.bloodtotal >= target_amount)
|
||||
@@ -870,6 +909,8 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
explanation_text = "Accumulate at least [target_amount] worth of swarms."
|
||||
|
||||
/datum/objective/swarms/check_completion()
|
||||
if(..())
|
||||
return TRUE
|
||||
for(var/datum/mind/M in get_owners())
|
||||
var/datum/antagonist/mindflayer/flayer = M.has_antag_datum(/datum/antagonist/mindflayer)
|
||||
return flayer?.total_swarms_gathered >= target_amount
|
||||
@@ -930,6 +971,8 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
needs_target = FALSE
|
||||
|
||||
/datum/objective/potentially_backstabbed/check_completion()
|
||||
if(..())
|
||||
return TRUE
|
||||
for(var/datum/mind/M in get_owners())
|
||||
var/datum/antagonist/traitor/T = M.has_antag_datum(/datum/antagonist/traitor)
|
||||
for(var/datum/objective/our_objective in T.get_antag_objectives(FALSE))
|
||||
|
||||
@@ -198,6 +198,13 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/newplayer_start) //Without this you sp
|
||||
spawner_list = GLOB.syndieprisonwarp
|
||||
return ..()
|
||||
|
||||
/obj/effect/landmark/spawner/antag_extract_warp
|
||||
name = "antagextractwarp"
|
||||
|
||||
/obj/effect/landmark/spawner/antag_extract_warp/Initialize(mapload)
|
||||
spawner_list = GLOB.antagextractwarp
|
||||
return ..()
|
||||
|
||||
/obj/effect/landmark/spawner/prisonwarp
|
||||
name = "prisonwarp"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user