From 0f22bb001ea7b4256e0bf38be1cdbc88869c5840 Mon Sep 17 00:00:00 2001 From: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Date: Mon, 5 Jun 2023 14:18:20 -0400 Subject: [PATCH] Mafia update: Return to body when the game ends (#75258) ## About The Pull Request Mafia players are now sent to their last body when the Mafia game ends, and in the meantime they have text saying why they are dead. They can still be revived during this period, and when the game is up they'll be forced back into their body if alive, if they are dead then they'll just be able to re-enter their corpse as normal. Also since I was poking around in Mafia stuff: - I removed mafia observing because it was unused (this previously was used to allow ghosts to see Changeling chat). - I fixed it being a Draw when there was one Town or Changeling left. - I fixed the role list showing some roles multiple times - I fixed the Chaplain not being able to use their night ability (and therefore being completely useless) - I added prevention to prevent Admins from causing runtimes or straight up crashing the server, with a very real chance it can happen purely by accident, through the Admin UI. I'm hoping to change how this actually does the job because I find it to be very bad coding practices, but my problem is that everyone who signs up for Mafia is a ghost, and they are added into the game through their CLIENTS, so we don't have access on the mafia controller or the role, to the player's previous body or mind, without this shit. Also adds a new mafia board icon Made by tatax and I find it fits more the theme of Mafia than the current one. New UI --- code/__DEFINES/traits.dm | 3 + code/datums/components/temporary_body.dm | 55 +++++++++++++++ code/modules/hydroponics/grown/replicapod.dm | 2 +- .../mafia/abilities/investigative/pray.dm | 2 +- code/modules/mafia/controller.dm | 65 +++++++----------- code/modules/mafia/roles/roles.dm | 17 ++++- .../mob/living/carbon/human/human_helpers.dm | 2 +- icons/obj/mafia.dmi | Bin 15828 -> 16103 bytes tgstation.dme | 1 + tgui/packages/tgui/interfaces/MafiaPanel.tsx | 23 ++----- 10 files changed, 107 insertions(+), 63 deletions(-) create mode 100644 code/datums/components/temporary_body.dm diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index b65bae6777e..ba2c6696c77 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -749,6 +749,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// For clarity, this trait should always be associated/tied to a reference to the mob that suicided- not anything else. #define TRAIT_SUICIDED "committed_suicide" +///Trait given to a mob with a ckey currently in a temporary body, allowing people to know someone will re-enter the round later. +#define TRAIT_MIND_TEMPORARILY_GONE "temporarily_gone" + // common trait sources #define TRAIT_GENERIC "generic" #define UNCONSCIOUS_TRAIT "unconscious" diff --git a/code/datums/components/temporary_body.dm b/code/datums/components/temporary_body.dm new file mode 100644 index 00000000000..bdb97dace42 --- /dev/null +++ b/code/datums/components/temporary_body.dm @@ -0,0 +1,55 @@ +/** + * ##temporary_body + * + * Used on living mobs when they are meant to be a 'temporary body' + * Holds a reference to an old mind & body, to put them back in + * once the body this component is attached to, is being deleted. + */ +/datum/component/temporary_body + ///The old mind we will be put back into when parent is being deleted. + var/datum/weakref/old_mind_ref + ///The old body we will be put back into when parent is being deleted. + var/datum/weakref/old_body_ref + +/datum/component/temporary_body/Initialize(datum/mind/old_mind, mob/living/old_body) + if(!isliving(parent) || !isliving(old_body)) + return COMPONENT_INCOMPATIBLE + ADD_TRAIT(old_body, TRAIT_MIND_TEMPORARILY_GONE, REF(src)) + src.old_mind_ref = WEAKREF(old_mind) + src.old_body_ref = WEAKREF(old_body) + +/datum/component/temporary_body/RegisterWithParent() + RegisterSignal(parent, COMSIG_PARENT_QDELETING, PROC_REF(on_parent_destroy)) + +/datum/component/temporary_body/UnregisterFromParent() + UnregisterSignal(parent, COMSIG_PARENT_QDELETING) + +/** + * Sends the mind of the temporary body back into their previous host + * If the previous host is alive, we'll force them into the body. + * Otherwise we'll let them hang out as a ghost still. + */ +/datum/component/temporary_body/proc/on_parent_destroy() + SIGNAL_HANDLER + var/datum/mind/old_mind = old_mind_ref?.resolve() + var/mob/living/old_body = old_body_ref?.resolve() + + if(!old_mind || !old_body) + return + + var/mob/living/living_parent = parent + var/mob/dead/observer/ghost = living_parent.ghostize() + if(!ghost) + ghost = living_parent.get_ghost() + if(!ghost) + CRASH("[src] belonging to [parent] was completely unable to find a ghost to put back into a body!") + ghost.mind = old_mind + if(old_body.stat != DEAD) + old_mind.transfer_to(old_body, force_key_move = TRUE) + else + old_mind.set_current(old_body) + + REMOVE_TRAIT(old_body, TRAIT_MIND_TEMPORARILY_GONE, REF(src)) + + old_mind = null + old_body = null diff --git a/code/modules/hydroponics/grown/replicapod.dm b/code/modules/hydroponics/grown/replicapod.dm index ef7f18c2c89..695420b4f23 100644 --- a/code/modules/hydroponics/grown/replicapod.dm +++ b/code/modules/hydroponics/grown/replicapod.dm @@ -136,7 +136,7 @@ make_podman = TRUE break else - if(M.ckey == ckey && M.stat == DEAD && !HAS_TRAIT(M, TRAIT_SUICIDED)) + if(M.ckey == ckey && M.stat == DEAD && !HAS_TRAIT(M, TRAIT_SUICIDED) && !HAS_TRAIT(M, TRAIT_MIND_TEMPORARILY_GONE)) make_podman = TRUE break else //If the player has ghosted from his corpse before blood was drawn, his ckey is no longer attached to the mob, so we need to match up the cloned player through the mind key diff --git a/code/modules/mafia/abilities/investigative/pray.dm b/code/modules/mafia/abilities/investigative/pray.dm index e72f4d4119a..b5bd6ee7e88 100644 --- a/code/modules/mafia/abilities/investigative/pray.dm +++ b/code/modules/mafia/abilities/investigative/pray.dm @@ -7,7 +7,7 @@ /datum/mafia_ability/seance name = "Seance" ability_action = "commune with the spirit of" - use_flags = CAN_USE_ON_DEAD + use_flags = CAN_USE_ON_OTHERS|CAN_USE_ON_DEAD /datum/mafia_ability/seance/perform_action_target(datum/mafia_controller/game, datum/mafia_role/day_target) . = ..() diff --git a/code/modules/mafia/controller.dm b/code/modules/mafia/controller.dm index 4c85f511239..7ab757ff3f4 100644 --- a/code/modules/mafia/controller.dm +++ b/code/modules/mafia/controller.dm @@ -7,8 +7,6 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) * It is first created when the first ghost signs up to play. */ /datum/mafia_controller - ///list of observers that should get game updates. - var/list/mafia_spectators = list() ///all roles in the game, dead or alive. check their game status if you only want living or dead. var/list/datum/mafia_role/all_roles = list() ///all living roles in the game, removed on death. @@ -107,9 +105,10 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) /datum/mafia_controller/Destroy(force, ...) . = ..() - GLOB.mafia_game = null + if(GLOB.mafia_game == src) + GLOB.mafia_game = null end_game() - qdel(map_deleter) + QDEL_NULL(map_deleter) /** * Triggers at beginning of the game when there is a confirmed list of valid, ready players. @@ -152,7 +151,8 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) var/datum/mafia_role/new_role = new rtype(src) all_roles += new_role living_roles += new_role - current_setup_text += "[new_role.name] x[setup_list[new_role.type]]" + var/datum/mafia_role/role_type = rtype + current_setup_text += "[initial(role_type.name)] x[setup_list[role_type]]" var/list/spawnpoints = landmarks.Copy() for(var/datum/mafia_role/role as anything in all_roles) role.assigned_landmark = pick_n_take(spawnpoints) @@ -212,7 +212,7 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) */ /datum/mafia_controller/proc/start_voting_phase() phase = MAFIA_PHASE_VOTING - next_phase_timer = addtimer(CALLBACK(src, PROC_REF(check_trial), TRUE), (VOTING_PERIOD_LENGTH / time_speedup),TIMER_STOPPABLE) //be verbose! + next_phase_timer = addtimer(CALLBACK(src, PROC_REF(check_trial), TRUE), (VOTING_PERIOD_LENGTH / time_speedup), TIMER_STOPPABLE) //be verbose! send_message("Voting started! Vote for who you want to see on trial today.") /** @@ -276,7 +276,7 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) if(total_guilty_votes > total_innocent_votes) //strictly need majority guilty to lynch send_message(span_red("Guilty wins majority, [on_trial.body.real_name] has been lynched.")) on_trial.kill(src, lynch = TRUE) - addtimer(CALLBACK(src, PROC_REF(send_home), on_trial), (LYNCH_PERIOD_LENGTH / time_speedup)) + next_phase_timer = addtimer(CALLBACK(src, PROC_REF(send_home), on_trial), (LYNCH_PERIOD_LENGTH / time_speedup), TIMER_STOPPABLE) else send_message(span_green("Innocent wins majority, [on_trial.body.real_name] has been spared.")) on_trial.body.forceMove(get_turf(on_trial.assigned_landmark)) @@ -337,7 +337,7 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) var/victory_message - if((living_mafia.len + living_town.len) <= 1) + if(living_mafia.len + living_town.len <= 0) victory_message = "Draw!" //this is in-case no neutrals won, but there's no town/mafia left. for(var/datum/mafia_role/solo as anything in neutral_killers) victory_message = "[uppertext(solo.name)] VICTORY!" @@ -369,7 +369,7 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) * * role: mafia_role datum to reward. */ /datum/mafia_controller/proc/award_role(award, datum/mafia_role/rewarded) - var/client/role_client = GLOB.directory[rewarded.player_key] + var/client/role_client = GLOB.directory[rewarded.body.client] role_client?.give_award(award, rewarded.body) /** @@ -389,28 +389,17 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) roles.mafia_alert.update_text("[message]") roles.reveal_role(src) phase = MAFIA_PHASE_VICTORY_LAP - next_phase_timer = addtimer(CALLBACK(src, PROC_REF(end_game)), VICTORY_LAP_PERIOD_LENGTH) + next_phase_timer = QDEL_IN(src, VICTORY_LAP_PERIOD_LENGTH) /** * Cleans up the game, resetting variables back to the beginning and removing the map with the generator. */ /datum/mafia_controller/proc/end_game() - map_deleter.generate() //remove the map, it will be loaded at the start of the next one QDEL_LIST(all_roles) living_roles.Cut() - current_setup_text = null - custom_setup = list() - turn = 0 - votes = list() - - time_speedup = initial(time_speedup) - - //map gen does not deal with landmarks QDEL_LIST(landmarks) QDEL_NULL(town_center_landmark) - phase = MAFIA_PHASE_SETUP - - early_start = initial(early_start) + map_deleter.generate() //remove the map, it will be loaded at the start of the next onemap_deleter.generate() //remove the map, it will be loaded at the start of the next one /** * After the voting and judgement phases, the game goes to night shutting the windows and beginning night with a proc. @@ -524,11 +513,11 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) * * vote_type: the vote type (getting how many day votes were for the role, or mafia night votes for the role) */ /datum/mafia_controller/proc/get_vote_count(role,vote_type) - . = 0 - for(var/v in votes[vote_type]) - var/datum/mafia_role/votee = v + var/total_votes = 0 + for(var/datum/mafia_role/votee as anything in votes[vote_type]) if(votes[vote_type][votee] == role) - . += votee.vote_power + total_votes += votee.vote_power + return total_votes /** * Returns whichever role got the most votes, in whatever vote (day vote, night kill vote) @@ -600,7 +589,7 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) player_client.prefs.safe_transfer_prefs_to(H, is_antag = TRUE) role.body = H player_role_lookup[H] = role - H.key = role.player_key + role.put_player_in_body(player_client) role.greet() /datum/mafia_controller/ui_static_data(mob/user) @@ -634,9 +623,6 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) var/list/lobby_member = list() lobby_member["name"] = key lobby_member["status"] = (key in GLOB.mafia_bad_signup) ? "Disconnected" : "Ready" - lobby_member["spectating"] = "Ghost" - if(key in mafia_spectators) - lobby_member["spectating"] = "Spectator" data["lobbydata"] += list(lobby_member) return data @@ -677,12 +663,14 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) if(usr.client?.holder) switch(action) if("new_game") - end_game() + if(phase == MAFIA_PHASE_SETUP) + return basic_setup() if("nuke") - end_game() qdel(src) if("next_phase") + if(phase == MAFIA_PHASE_SETUP) + return var/datum/timedevent/timer = SStimer.timer_id_dict[next_phase_timer] if(!timer.spent) var/datum/callback/tc = timer.callBack @@ -709,10 +697,14 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) while(!done) to_chat(usr, "You have a total player count of [assoc_value_sum(debug_setup)] in this setup.") var/chosen_role_name = tgui_input_list(usr, "Select a role!", "Custom Setup Creation", rolelist_dict) + if(!chosen_role_name) + return switch(chosen_role_name) if("CANCEL") + done = TRUE return if("FINISH") + done = TRUE break else var/found_path = rolelist_dict[chosen_role_name] @@ -756,15 +748,6 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) check_signups() try_autostart() return TRUE - if("mf_spectate") - var/client/C = ui.user.client - if(C.ckey in mafia_spectators) - to_chat(usr, span_notice("You will no longer get messages from the game.")) - mafia_spectators -= C.ckey - else - to_chat(usr, span_notice("You will now get messages from the game.")) - mafia_spectators += C.ckey - return TRUE if("vote_to_start") var/client/C = ui.user.client if(phase != MAFIA_PHASE_SETUP) diff --git a/code/modules/mafia/roles/roles.dm b/code/modules/mafia/roles/roles.dm index 9156831a963..e8b5f8a63ab 100644 --- a/code/modules/mafia/roles/roles.dm +++ b/code/modules/mafia/roles/roles.dm @@ -48,9 +48,22 @@ /datum/mafia_role/Destroy(force, ...) QDEL_NULL(mafia_alert) QDEL_NULL(body) - QDEL_NULL(role_unique_actions) + QDEL_LIST(role_unique_actions) return ..() +/** + * Puts the player in their body and keeps track of their previous one to put them back in later. + * Adds the playing_mafia trait so people examining them will know why they're currently lacking a soul. + */ +/datum/mafia_role/proc/put_player_in_body(client/player) + if(player.mob.mind && player.mob.mind.current) + body.AddComponent( \ + /datum/component/temporary_body, \ + old_mind = player.mob.mind, \ + old_body = player.mob.mind.current, \ + ) + body.key = player.key + /** * Tests kill immunities, if nothing prevents the kill, kills this role. * @@ -66,8 +79,6 @@ body.death() if(lynch) reveal_role(game, verbose = TRUE) - if(!(player_key in game.mafia_spectators)) //people who played will want to see the end of the game more often than not - game.mafia_spectators += player_key game.living_roles -= src return TRUE diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index 83d2c8d9d6a..7a0ade3707a 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -234,7 +234,7 @@ var/t_his = p_their() var/t_is = p_are() //This checks to see if the body is revivable - if(key || !get_organ_by_type(/obj/item/organ/internal/brain) || ghost?.can_reenter_corpse) + if(key || !get_organ_by_type(/obj/item/organ/internal/brain) || ghost?.can_reenter_corpse || HAS_TRAIT(src, TRAIT_MIND_TEMPORARILY_GONE)) return span_deadsay("[t_He] [t_is] limp and unresponsive; there are no signs of life...") else return span_deadsay("[t_He] [t_is] limp and unresponsive; there are no signs of life and [t_his] soul has departed...") diff --git a/icons/obj/mafia.dmi b/icons/obj/mafia.dmi index 47d4080cea92b5cf966c625075bdc99e78c21ad3..7c3b525c0055c899f33a0387e28ad70ee94f7fff 100644 GIT binary patch delta 15821 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 delta 15544 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 diff --git a/tgstation.dme b/tgstation.dme index 117525da1d4..9f25567ac5c 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1024,6 +1024,7 @@ #include "code\datums\components\tattoo.dm" #include "code\datums\components\technointrovert.dm" #include "code\datums\components\technoshy.dm" +#include "code\datums\components\temporary_body.dm" #include "code\datums\components\tether.dm" #include "code\datums\components\thermite.dm" #include "code\datums\components\tippable.dm" diff --git a/tgui/packages/tgui/interfaces/MafiaPanel.tsx b/tgui/packages/tgui/interfaces/MafiaPanel.tsx index a905e2fd341..2820822eaf4 100644 --- a/tgui/packages/tgui/interfaces/MafiaPanel.tsx +++ b/tgui/packages/tgui/interfaces/MafiaPanel.tsx @@ -29,7 +29,6 @@ type ActionInfo = { type LobbyData = { name: string; status: string; - spectating: string; }; type MafiaData = { @@ -157,19 +156,6 @@ const MafiaLobby = (props, context) => { content="Sign Up" onClick={() => act('mf_signup')} /> -