Ashwalker Tribe roundend reporting revamp (#75506)

## About The Pull Request

This PR changes how ashwalkers are listed in the roundend report.
Originally, they would be listed as individual "other" antagonists,
which isn't a particularly great way of handling it and leads to
weirdness like this:


![image](https://github.com/tgstation/tgstation/assets/28870487/c00a2cfc-3f08-46f6-a290-ef632cac0371)

_(That's an authentic ninja greentext from a live server, by the by)_

Now, the roundend report gives each ashwalker team their own section
within the report, whether or not they succeeded, and some bonus stats.


![image](https://github.com/tgstation/tgstation/assets/28870487/c2dc3c00-62a7-4784-90be-5a8bb5cc5a50)

This new roundend report handling also supports having multiple
Necropolises (Necropoli?) in the same round. Each tribe has their stats
and success reported individually.

This also slightly modifies the protect_object objective, preventing
hard deletes when linked to objects that don't clear their own
references.

## Why It's Good For The Game

Gives Ashwalkers a much better roundend report, and handles how the
reporting is done in a much more sensible manner.

Reduces how much space that large nests take up with their individual
listings.
## Changelog
🆑 Rhials
qol: Ashwalker roundend reporting has been revamped. Glory to the
Necropolis!
/🆑
This commit is contained in:
Rhials
2023-05-21 21:37:57 -06:00
committed by GitHub
parent 8f38b131f0
commit 05316726ec
4 changed files with 51 additions and 10 deletions
@@ -1,7 +1,3 @@
/datum/team/ashwalkers
name = "Ashwalkers"
show_roundend_report = FALSE
/datum/antagonist/ashwalker
name = "\improper Ash Walker"
job_rank = ROLE_LAVALAND
@@ -13,9 +9,9 @@
count_against_dynamic_roll_chance = FALSE
var/datum/team/ashwalkers/ashie_team
/datum/antagonist/ashwalker/create_team(datum/team/team)
if(team)
ashie_team = team
/datum/antagonist/ashwalker/create_team(datum/team/ashwalkers/ashwalker_team)
if(ashwalker_team)
ashie_team = ashwalker_team
objectives |= ashie_team.objectives
else
ashie_team = new
@@ -42,3 +38,40 @@
if(istype(A, /obj/structure/headpike))
owner.current.add_mood_event("oogabooga", /datum/mood_event/sacrifice_good)
/datum/team/ashwalkers
name = "Ash Walker Tribe"
member_name = "Ash Walker"
///A list of "worthy" (meat-bearing) sacrifices made to the Necropolis
var/sacrifices_made = 0
///A list of how many eggs were created by the Necropolis
var/eggs_created = 0
/datum/team/ashwalkers/roundend_report()
var/list/report = list()
report += span_header("An Ash Walker Tribe inhabited the wastes...</span><br>")
if(length(members)) //The team is generated alongside the tendril, and it's entirely possible that nobody takes the role.
report += "The [member_name]s were:"
report += printplayerlist(members)
var/datum/objective/protect_object/necropolis_objective = locate(/datum/objective/protect_object) in objectives
if(necropolis_objective)
objectives -= necropolis_objective //So we don't count it in the check for other objectives.
report += "<b>The [name] was tasked with defending the Necropolis:</b>"
if(necropolis_objective.check_completion())
report += span_greentext("<span class='header'>The nest stands! Glory to the Necropolis!</span><br>")
else
report += span_redtext("<span class='header'>The Necropolis was destroyed, the tribe has fallen...</span><br>")
if(length(objectives))
report += span_header("The [name]'s other objectives were:")
printobjectives(objectives)
report += "The [name] managed to perform <b>[sacrifices_made]</b> sacrifices to the Necropolis. From this, the Necropolis produced <b>[eggs_created]</b> Ash Walker eggs."
else
report += "<b>But none of its eggs hatched!</b>"
return "<div class='panel redborder'>[report.Join("<br>")]</div>"