[PTBF] Download Objective (#30705)

* flayer download obj

* tweak download obj

* finish flayer download objective

* fix layer

* lint

* unit test fix

* fix unit tests maybe

* move to correct attack_by

* forgot to add admin tooling

* address some cool epic comments

* linter linter, give me a splinter

* Tweak contrast on download sprite. Add optional transparency for consideration.

* update sprite + transparent fade in when activating

* i am maintaining a positive attitude towards the linter

* aghhhhhhhhhhh

---------

Signed-off-by: Paul <90473506+pwbokie@users.noreply.github.com>
Co-authored-by: Alfalfa Scout <alfalfascout@proton.me>
This commit is contained in:
Paul
2025-10-31 20:02:14 +00:00
committed by GitHub
co-authored by Alfalfa Scout
parent bee5e35c70
commit dd017e20cc
7 changed files with 279 additions and 8 deletions
@@ -409,14 +409,14 @@ GLOBAL_LIST_EMPTY(antagonists)
* Create and assign a full set of randomized, basic human traitor objectives.
* can_hijack - If you want the 5% chance for the antagonist to be able to roll hijack, only true for traitors
*/
/datum/antagonist/proc/forge_basic_objectives(can_hijack = FALSE)
/datum/antagonist/proc/forge_basic_objectives(can_hijack = FALSE, number_of_objectives = GLOB.configuration.gamemode.traitor_objectives_amount)
// Hijack objective.
if(can_hijack && prob(5) && !(locate(/datum/objective/hijack) in owner.get_all_objectives()))
add_antag_objective(/datum/objective/hijack)
return // Hijack should be their only objective (normally), so return.
// Will give normal steal/kill/etc. type objectives.
for(var/i in 1 to GLOB.configuration.gamemode.traitor_objectives_amount)
for(var/i in 1 to number_of_objectives)
forge_single_human_objective()
var/can_succeed_if_dead = TRUE
@@ -447,7 +447,7 @@ GLOBAL_LIST_EMPTY(antagonists)
* After that, add it to the switch list.
* The kill objective pool weight has been done by putting the old code through a million or so runs to figure out averages, to keep it consistant.
*/
/datum/antagonist/proc/forge_single_human_objective()
/datum/antagonist/proc/roll_single_human_objective()
var/datum/objective/objective_to_add
var/list/static/the_objective_list = list(KILL_OBJECTIVE = 47, THEFT_OBJECTIVE = 42, INCRIMINATE_OBJECTIVE = 5, PROTECT_OBJECTIVE = 6)
var/list/the_nonstatic_kill_list = list(DEBRAIN_OBJECTIVE = 50, MAROON_OBJECTIVE = 285, ASS_ONCE_OBJECTIVE = 199, ASS_OBJECTIVE = 466)
@@ -488,7 +488,11 @@ GLOBAL_LIST_EMPTY(antagonists)
if(delayed_objectives)
objective_to_add = new /datum/objective/delayed(objective_to_add)
add_antag_objective(objective_to_add)
return objective_to_add
/datum/antagonist/proc/forge_single_human_objective()
add_antag_objective(roll_single_human_objective())
#undef KILL_OBJECTIVE
#undef THEFT_OBJECTIVE
@@ -59,7 +59,11 @@
/datum/antagonist/mindflayer/give_objectives()
add_antag_objective(/datum/objective/swarms)
forge_basic_objectives()
if(ismachineperson(owner.current) && prob(25)) // 25% chance to have an objective locked behind Download, only for IPCs
add_antag_objective(/datum/objective/download)
forge_basic_objectives(FALSE, GLOB.configuration.gamemode.traitor_objectives_amount - 1)
else
forge_basic_objectives()
/datum/antagonist/mindflayer/exfiltrate(mob/living/carbon/human/extractor, obj/item/radio/radio)
remove_all_abilities()