-
-
Notifications
You must be signed in to change notification settings - Fork 680
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Traitors 2.0: Priority directives #10745
Traitors 2.0: Priority directives #10745
Conversation
…n/BeeStation-Hornet-Bacons-Fork into priority-directives
The list of things left to do is small, should be testmergable in a few days |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Prioritise merging this please:
MovedRelay component is broken, and this PR is necessary to fix that first.
code/modules/antagonists/traitor/directives/priority_directive.dm
Outdated
Show resolved
Hide resolved
details = "We have identified a deaddrop that has been placed by a rival spy agency and have maintained an accurate track on the box. \ | ||
You have the option to track and secure the valuable items before anyone else gets to them. The items are stored in a trackable \ | ||
box which will automatically unlock after a set period of time." | ||
var/obj/item/storage/deaddrop_box/target |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
hard reference.
// Must be something that we can store in | ||
if (!istype(stash.parent, /obj/item/storage)) | ||
continue | ||
secret_bag = stash.parent |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
missing of break
to_chat(receiver?.current, "<span class='notice bold'>You have a secret stash at [get_area(secret_bag)], more details are stored in your notes. (IC > Notes)</span>") | ||
for (var/datum/mind/receiver in owners) | ||
receiver.store_memory("You have a secret stash of items hidden on the station required for your objectives. It is hidden inside of [atom_text] ([secret_bag.loc]) located at [get_area(secret_bag.loc)] [COORD(secret_bag.loc)], you may have to search around for it. (Use alt click on the object the stash is inside to access it).") | ||
to_chat(receiver?.current, "<span class='notice bold'>You have a secret stash at [get_area(secret_bag)], more details are stored in your notes. (IC > Notes)</span>") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think there should be signalRegister with MobLogin for those who are somehow DC'ed at the moment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe helpful, but I am not sure
data["pos_x"] = uplink_turf?.x | ||
data["pos_y"] = uplink_turf?.y | ||
data["pos_z"] = uplink_turf?.z |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think ?
is redundant. it's typechecked.
if (uplink.owner) | ||
var/list/known_objectives = list() | ||
for (var/datum/antagonist/antagonist_type in uplink.owner.antag_datums) | ||
// The syndicate uplink is only aware of syndicate-given objectives. | ||
if (antagonist_type.faction != FACTION_SYNDICATE) | ||
continue | ||
for (var/datum/objective/objective in antagonist_type.objectives) | ||
var/atom/tracking_target = objective.get_tracking_target(uplink_turf) | ||
var/turf/tracking_turf = tracking_target && get_turf(tracking_target) | ||
known_objectives += list(list( | ||
"name" = objective.name, | ||
"tasks" = list(objective.explanation_text), | ||
"track_x" = tracking_turf?.x, | ||
"track_y" = tracking_turf?.y, | ||
"track_z" = tracking_turf?.z, | ||
)) | ||
// Add the priority directive | ||
if (active_directive) | ||
var/atom/track_atom = active_directive.get_track_atom() | ||
var/turf/track_turf = get_turf(track_atom) | ||
known_objectives += list(list( | ||
"name" = active_directive.name, | ||
"tasks" = list(active_directive.get_explanation(uplink)), | ||
"time" = active_directive.end_at, | ||
"details" = active_directive.get_details(uplink), | ||
"reward" = active_directive.tc_reward, | ||
"track_x" = track_turf?.x, | ||
"track_y" = track_turf?.y, | ||
"track_z" = track_turf?.z, | ||
"action" = active_directive.get_special_action()?.action_name | ||
)) | ||
data["objectives"] = known_objectives | ||
return data |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
z information isn't sufficient. people won't know if 1 is centcom, or 8 is multifloored station or away. try to use compare_z proc since it just tells if compared things are at the same z category.
(altho It looks I need to improve the proc a bit)
/datum/atom_hud/alternate_appearance/basic/some_people | ||
var/list/seers | ||
|
||
/datum/atom_hud/alternate_appearance/basic/some_people/mobShouldSee(mob/M) | ||
if(M in seers) | ||
return TRUE | ||
return FALSE | ||
|
||
/datum/atom_hud/alternate_appearance/basic/some_people/New(key, image/I, list/mobs) | ||
..(key, I, FALSE) | ||
seers = mobs | ||
for (var/mob/seer in mobs) | ||
add_hud_to(seer) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
considering using this:
(Comment continued in stash component)
@@ -1,57 +1,64 @@ | |||
/datum/component/stash | |||
dupe_mode = COMPONENT_DUPE_ALLOWED | |||
var/atom/movable/stash_item | |||
var/datum/mind/stash_owner | |||
var/list/stash_minds |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I made change from your version to mix it with my client image system.
Please check: 493e0db
- my client image system can keep client images to minds instead of mob based. This makes that you don't have to refresh mob based client images every time mind is changed or something. This is why I nuked
transfer_mind()
here.
Even if they aghost or got brain-transfered, they keep this, and you don't have to send a signal here. - This can be easily expanded to allow non-stash owners see this (i.e. Detective)
showing stash image won't be done through this component. You just need to find out which cimg_key is used, and just dovalidate_mob(stash_cimg_key, detective_mob)
and then they'll be able to investigate it. (They won't be able to access. just can see it) add_membership()
andremove_membership()
is likely necessary here because someone can be removed, or someone can be added to the party.
Admin might want to add a new member to a stash when they have to fix or do some admeme.
The proc owner_deleted()
in the original code calls create_owner_icon()
everytime when alternative appearance should be updated, but my client image system can simplify this much.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Original stash code change example if this is too much
Also, please prioritise #10729 I am starting to forget the detail of the issue about why MovedRelay is broken. |
Ready for TM |
This pull request has conflicts, please resolve those before we can evaluate the pull request. |
This pull request has conflicts, please resolve those before we can evaluate the pull request. |
About The Pull Request
Implements priority directives, as defined by the design documents posted in the associated thread in discord.
Priority directives are optional missions given to traitors that can grant the traitor with additional TC if they complete the mission. The only catch is that other traitors may be trying to complete the same objectives, and only 1 person can claim the prize!
Here is a bullet point list of things:
There will be 3 priority directives implemented with this update:
TODO:
Why It's Good For The Game
We currently suffer from a big issue with our antagonists where they are not acting until late in the round, and while I like people having the option to plan and strategically execute their plans, it often leads to rounds that consist primarilly of traitors to be incredibly boring to play with little drama to promote any meaningful gameplay or story.
This gains the following things:
This attempts to avoid the following things:
Testing Photographs and Procedure
The new UI for uplinks. Shows the objectives of the owner, if those objectives are tied to a syndicate based antagonist role.
Non-trackable objectives.
Syndicate uplink base user interface.
Secure deaddrop mission.
Priority directive received
Beacon
Reputation system on the shop
Changelog
🆑
add: Priority directives, drama causing time-limited objectives that encourage you to maintain suspicions over your fellow traitors.
add: Certain traitor objectives are now trackable via the uplink.
tweak: Traitor TC reduced from 20 TC to 15 TC.
add: Traitor reputation system, reputation increases by completing directives and decreases slightly when failed.
balance: The cost and reputation requirements of various syndicate items has been altered.
/:cl: