From 19bd1e64a6cfbb63caf86ed4f42918f4eef16285 Mon Sep 17 00:00:00 2001 From: tralezab <40974010+tralezab@users.noreply.github.com> Date: Thu, 4 Feb 2021 18:34:50 -0800 Subject: [PATCH] Revives old Mafia PR adding security, a mind bogglingly large amount of refactors, some documentation, and other niceities (#56199) --- code/__DEFINES/achievements.dm | 5 + .../datums/achievements/mafia_achievements.dm | 46 +- code/modules/asset_cache/asset_list_items.dm | 18 +- code/modules/mafia/_defines.dm | 28 +- code/modules/mafia/controller.dm | 120 +++-- code/modules/mafia/outfits.dm | 35 +- code/modules/mafia/roles.dm | 467 +++++++++++++----- .../UI_Icons/Achievements/Mafia/assistant.png | Bin 2374 -> 0 bytes .../Achievements/Mafia/changeling.png | Bin 2363 -> 0 bytes .../UI_Icons/Achievements/Mafia/chaplain.png | Bin 2367 -> 0 bytes icons/UI_Icons/Achievements/Mafia/clown.png | Bin 2363 -> 0 bytes .../UI_Icons/Achievements/Mafia/detective.png | Bin 2357 -> 0 bytes .../UI_Icons/Achievements/Mafia/fugitive.png | Bin 2387 -> 0 bytes icons/UI_Icons/Achievements/Mafia/hated.png | Bin 2467 -> 2486 bytes icons/UI_Icons/Achievements/Mafia/hop.png | Bin 2358 -> 0 bytes icons/UI_Icons/Achievements/Mafia/lawyer.png | Bin 2362 -> 0 bytes icons/UI_Icons/Achievements/Mafia/mafia.png | Bin 0 -> 2345 bytes icons/UI_Icons/Achievements/Mafia/md.png | Bin 2352 -> 0 bytes icons/UI_Icons/Achievements/Mafia/neutral.png | Bin 0 -> 2406 bytes .../UI_Icons/Achievements/Mafia/nightmare.png | Bin 2350 -> 0 bytes .../UI_Icons/Achievements/Mafia/obsessed.png | Bin 2391 -> 0 bytes .../Achievements/Mafia/psychologist.png | Bin 2348 -> 0 bytes .../Achievements/Mafia/thoughtfeeder.png | Bin 2366 -> 0 bytes icons/UI_Icons/Achievements/Mafia/town.png | Bin 0 -> 2388 bytes icons/UI_Icons/Achievements/Mafia/traitor.png | Bin 2330 -> 0 bytes icons/obj/mafia.dmi | Bin 13272 -> 15828 bytes 26 files changed, 519 insertions(+), 200 deletions(-) delete mode 100644 icons/UI_Icons/Achievements/Mafia/assistant.png delete mode 100644 icons/UI_Icons/Achievements/Mafia/changeling.png delete mode 100644 icons/UI_Icons/Achievements/Mafia/chaplain.png delete mode 100644 icons/UI_Icons/Achievements/Mafia/clown.png delete mode 100644 icons/UI_Icons/Achievements/Mafia/detective.png delete mode 100644 icons/UI_Icons/Achievements/Mafia/fugitive.png delete mode 100644 icons/UI_Icons/Achievements/Mafia/hop.png delete mode 100644 icons/UI_Icons/Achievements/Mafia/lawyer.png create mode 100644 icons/UI_Icons/Achievements/Mafia/mafia.png delete mode 100644 icons/UI_Icons/Achievements/Mafia/md.png create mode 100644 icons/UI_Icons/Achievements/Mafia/neutral.png delete mode 100644 icons/UI_Icons/Achievements/Mafia/nightmare.png delete mode 100644 icons/UI_Icons/Achievements/Mafia/obsessed.png delete mode 100644 icons/UI_Icons/Achievements/Mafia/psychologist.png delete mode 100644 icons/UI_Icons/Achievements/Mafia/thoughtfeeder.png create mode 100644 icons/UI_Icons/Achievements/Mafia/town.png delete mode 100644 icons/UI_Icons/Achievements/Mafia/traitor.png diff --git a/code/__DEFINES/achievements.dm b/code/__DEFINES/achievements.dm index 395d131c85a..7a7bf3489e5 100644 --- a/code/__DEFINES/achievements.dm +++ b/code/__DEFINES/achievements.dm @@ -41,8 +41,11 @@ #define MAFIA_MEDAL_PSYCHOLOGIST "Psychologist" #define MAFIA_MEDAL_CHAPLAIN "Chaplain" #define MAFIA_MEDAL_MD "Medical Doctor" +#define MAFIA_MEDAL_OFFICER "Security Officer" #define MAFIA_MEDAL_LAWYER "Lawyer" #define MAFIA_MEDAL_HOP "Head of Personnel" +#define MAFIA_MEDAL_HOS "Head of Security" +#define MAFIA_MEDAL_WARDEN "Warden" #define MAFIA_MEDAL_CHANGELING "CHANGELING" #define MAFIA_MEDAL_THOUGHTFEEDER "Thoughtfeeder" #define MAFIA_MEDAL_TRAITOR "Traitor" @@ -53,6 +56,8 @@ //Mafia medal hub IDs (misc stuff) #define MAFIA_MEDAL_HATED "Universally Hated" +#define MAFIA_MEDAL_CHARISMATIC "Charismatic" +#define MAFIA_MEDAL_VIP "VIP" //Boss medals diff --git a/code/datums/achievements/mafia_achievements.dm b/code/datums/achievements/mafia_achievements.dm index 414917413a9..fbe34863979 100644 --- a/code/datums/achievements/mafia_achievements.dm +++ b/code/datums/achievements/mafia_achievements.dm @@ -8,85 +8,103 @@ name = "Assistant Victory" desc = "If you got killed instead of someone more important, you just flexed the true strength of your \"\"\"\"role\"\"\"\"." database_id = MAFIA_MEDAL_ASSISTANT - icon = "assistant" + icon = "town" /datum/award/achievement/mafia/detective name = "Detective Victory" desc = "If you did this with a Medical Doctor in the game, i'm not really that impressed." database_id = MAFIA_MEDAL_DETECTIVE - icon = "detective" + icon = "town" /datum/award/achievement/mafia/psychologist name = "Psychologist Victory" desc = "You learned how to not reveal someone random night one! Or... maybe you're just a lucky bastard." database_id = MAFIA_MEDAL_PSYCHOLOGIST - icon = "psychologist" + icon = "town" /datum/award/achievement/mafia/chaplain name = "Chaplain Victory" desc = "Useless... until the one night the thoughtfeeder confidently claims themselves as detective. Mafia's true bullshit detector." database_id = MAFIA_MEDAL_CHAPLAIN - icon = "chaplain" + icon = "town" /datum/award/achievement/mafia/md name = "Medical Doctor Victory" desc = "Congratulations on learning how to not talk!" database_id = MAFIA_MEDAL_MD - icon = "md" + icon = "town" + +/datum/award/achievement/mafia/officer + name = "Security Officer Victory" + desc = "Don't worry, you can win this if you're dead! You... did use your ability to become dead, right?" + database_id = MAFIA_MEDAL_OFFICER + icon = "town" /datum/award/achievement/mafia/lawyer name = "Lawyer Victory" desc = "Oh don't mind me, i'm just the worst rol- Oops, I just instantly ended the game." database_id = MAFIA_MEDAL_LAWYER - icon = "lawyer" + icon = "town" /datum/award/achievement/mafia/hop name = "Head of Personnel Victory" desc = "King of Assistants, waster of a single mafia's night, thrower of games." database_id = MAFIA_MEDAL_HOP - icon = "hop" + icon = "town" + +/datum/award/achievement/mafia/warden + name = "Warden Victory" + desc = "Make changelings think you're detective, go on lockdown, actual detective investigates you and dies. Cha cha real smooth!" + database_id = MAFIA_MEDAL_WARDEN + icon = "town" + +/datum/award/achievement/mafia/hos + name = "Head of Security Victory" + desc = "Certified not shitcurity." + database_id = MAFIA_MEDAL_HOS + icon = "town" /datum/award/achievement/mafia/changeling name = "Changeling Victory" desc = "I think the changelings are metacomming." database_id = MAFIA_MEDAL_CHANGELING - icon = "changeling" + icon = "mafia" /datum/award/achievement/mafia/thoughtfeeder name = "Thoughtfeeder Victory" desc = "Clown's best friend. And Obsessed. And fugitive? Whose side are you on?!" database_id = MAFIA_MEDAL_THOUGHTFEEDER - icon = "thoughtfeeder" + icon = "mafia" /datum/award/achievement/mafia/traitor name = "Traitor Victory" desc = "Guys, we still have two more changelings to ki-!! TRAITOR VICTORY !!" database_id = MAFIA_MEDAL_TRAITOR - icon = "traitor" + icon = "neutral" /datum/award/achievement/mafia/nightmare name = "Nightmare Victory" desc = "DID YOUR LIGHT FLICKER?!" database_id = MAFIA_MEDAL_NIGHTMARE - icon = "nightmare" + icon = "neutral" /datum/award/achievement/mafia/fugitive name = "Fugitive Victory" desc = "I'm just the description on an achievement, but if you end up having to choose between town and changelings, go changelings." database_id = MAFIA_MEDAL_FUGITIVE - icon = "fugitive" + icon = "neutral" /datum/award/achievement/mafia/obsessed name = "Obsessed Victory" desc = "You got your target lynched, so instead of being spiteful and annoying, you're just smug and annoying." database_id = MAFIA_MEDAL_OBSESSED - icon = "obsessed" + icon = "neutral" /datum/award/achievement/mafia/clown name = "Clown Victory" desc = "Did you know this works on traitors, despite their immunity? If you hit the jackpot and manage to kill one, they'll salt into the next dimension. Clown tips!" database_id = MAFIA_MEDAL_CLOWN - icon = "clown" + icon = "neutral" ///ALL THE ACHIEVEMENTS FOR MISC MAFIA ODDITIES/// diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index 9c67d148af5..49ed12c0e33 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -251,21 +251,9 @@ "rustascend" = 'icons/UI_Icons/Achievements/Misc/rustascend.png', "voidascend" = 'icons/UI_Icons/Achievements/Misc/voidascend.png', "mining" = 'icons/UI_Icons/Achievements/Skills/mining.png', - "assistant" = 'icons/UI_Icons/Achievements/Mafia/assistant.png', - "changeling" = 'icons/UI_Icons/Achievements/Mafia/changeling.png', - "chaplain" = 'icons/UI_Icons/Achievements/Mafia/chaplain.png', - "clown" = 'icons/UI_Icons/Achievements/Mafia/clown.png', - "detective" = 'icons/UI_Icons/Achievements/Mafia/detective.png', - "fugitive" = 'icons/UI_Icons/Achievements/Mafia/fugitive.png', - "hated" = 'icons/UI_Icons/Achievements/Mafia/hated.png', - "hop" = 'icons/UI_Icons/Achievements/Mafia/hop.png', - "lawyer" = 'icons/UI_Icons/Achievements/Mafia/lawyer.png', - "md" = 'icons/UI_Icons/Achievements/Mafia/md.png', - "nightmare" = 'icons/UI_Icons/Achievements/Mafia/nightmare.png', - "obsessed" = 'icons/UI_Icons/Achievements/Mafia/obsessed.png', - "psychologist" = 'icons/UI_Icons/Achievements/Mafia/psychologist.png', - "thoughtfeeder" = 'icons/UI_Icons/Achievements/Mafia/thoughtfeeder.png', - "traitor" = 'icons/UI_Icons/Achievements/Mafia/traitor.png', + "changeling" = 'icons/UI_Icons/Achievements/Mafia/mafia.png', + "chaplain" = 'icons/UI_Icons/Achievements/Mafia/town.png', + "clown" = 'icons/UI_Icons/Achievements/Mafia/neutral.png', "basemafia" ='icons/UI_Icons/Achievements/basemafia.png', "frenching" = 'icons/UI_Icons/Achievements/Misc/frenchingthebubble.png' ) diff --git a/code/modules/mafia/_defines.dm b/code/modules/mafia/_defines.dm index 194851beedc..e8626997517 100644 --- a/code/modules/mafia/_defines.dm +++ b/code/modules/mafia/_defines.dm @@ -6,14 +6,16 @@ #define MAFIA_TEAM_SOLO "solo" //types of town roles for random setup gen -/// assistants it's just assistants filling up the rest of the roles +/// Add this if you don't want a role to be a choice in the selection #define TOWN_OVERFLOW "overflow" /// roles that learn info about others in the game (chaplain, detective, psych) #define TOWN_INVEST "invest" -/// roles that keep other roles safe (doctor, and weirdly enough lawyer counts) +/// roles that keep other roles safe (doctor, sec officer, and weirdly enough lawyer counts) #define TOWN_PROTECT "protect" +/// roles that are only there to kill bad guys. +#define TOWN_KILLING "killing" /// roles that don't fit into anything else (hop) -#define TOWN_MISC "misc" +#define TOWN_SUPPORT "support" //other types (mafia team, neutrals) /// normal vote kill changelings @@ -25,6 +27,20 @@ /// role that upsets the game aka obsessed, usually worse for town than mafia but they can vote against mafia #define NEUTRAL_DISRUPT "disrupt" +//role flags (special status of roles like detection immune) +///to all forms of detection, shows themselves as an assistant. +#define ROLE_UNDETECTABLE (1<<0) +///has the ability to kill at night and thus, blocks the game from ending with other teams alive. +#define ROLE_CAN_KILL (1<<1) +///can only be one in a randomly generated game +#define ROLE_UNIQUE (1<<2) +///role is public to all other players in the game. +#define ROLE_REVEALED (1<<3) +///can not be defended, protected, or any other form of protection. all kills succeed no matter what. +#define ROLE_VULNERABLE (1<<4) +///cannot perform any actions that night, preselected actions fail +#define ROLE_ROLEBLOCKED (1<<5) + #define MAFIA_PHASE_SETUP 1 #define MAFIA_PHASE_DAY 2 #define MAFIA_PHASE_VOTING 3 @@ -35,12 +51,12 @@ #define MAFIA_ALIVE 1 #define MAFIA_DEAD 2 +#define COMSIG_MAFIA_ON_VISIT "mafia_onvisit" +#define MAFIA_VISIT_INTERRUPTED 1 + #define COMSIG_MAFIA_ON_KILL "mafia_onkill" #define MAFIA_PREVENT_KILL 1 -#define COMSIG_MAFIA_CAN_PERFORM_ACTION "mafia_can_perform_action" -#define MAFIA_PREVENT_ACTION 1 - //in order of events + game end /// when the shutters fall, before the 45 second wait and night event resolution diff --git a/code/modules/mafia/controller.dm b/code/modules/mafia/controller.dm index 4e68e78401f..3be68a89ba0 100644 --- a/code/modules/mafia/controller.dm +++ b/code/modules/mafia/controller.dm @@ -15,6 +15,8 @@ var/phase = MAFIA_PHASE_SETUP ///how long the game has gone on for, changes with every sunrise. day one, night one, day two, etc. var/turn = 0 + ///if enabled, the game has fallen under half pop and is sped up + var/speed_up = FALSE ///for debugging and testing a full game, or adminbuse. If this is not empty, it will use this as a setup. clears when game is over var/list/custom_setup = list() ///first day has no voting, and thus is shorter @@ -158,6 +160,20 @@ turn += 1 phase = MAFIA_PHASE_DAY if(!check_victory()) + if(!speed_up)//lets check if the game should be sped up, if not already. + var/living_players = 0 + for(var/i in all_roles) + var/datum/mafia_role/player = i + if(player.game_status == MAFIA_ALIVE) + living_players += 1 + if(living_players < all_roles.len / 2) + speed_up = TRUE + send_message("With only [living_players] living players left, the game timers have been sped up.") + day_phase_period /= 2 + voting_phase_period /= 2 + judgement_phase_period /= 2 + judgement_lynch_period /= 2 + night_phase_period /= 2 if(turn == 1) send_message("The selected map is [current_map.name]!
[current_map.description]
") send_message("Day [turn] started! There is no voting on the first day. Say hello to everybody!") @@ -237,7 +253,7 @@ send_message("[role.body.real_name] voted guilty.") if(judgement_guilty_votes.len > judgement_innocent_votes.len) //strictly need majority guilty to lynch send_message("Guilty wins majority, [on_trial.body.real_name] has been lynched.") - on_trial.kill(src, lynch = TRUE) + on_trial.kill(src,lynch = TRUE) addtimer(CALLBACK(src, .proc/send_home, on_trial),judgement_lynch_period) else send_message("Innocent wins majority, [on_trial.body.real_name] has been spared.") @@ -271,11 +287,14 @@ var/list/total_town = list() var/list/total_mafia = list() - var/alive_town = 0 + //voting power of town + solos (since they don't want mafia to overpower) + var/anti_mafia_power = 0 + //voting power of mafia (greater than anti mafia power + team end not blocked = mafia victory) var/alive_mafia = 0 var/list/solos_to_ask = list() //need to ask after because first round is counting team sizes var/list/total_victors = list() //if this list gets filled with anyone, they win. list because side antags can with with people var/blocked_victory = FALSE //if a solo antagonist is stopping the town or mafia from finishing the game. + var/town_can_kill = FALSE //Town has a killing role and it cannot allow mafia to win ///PHASE ONE: TALLY UP ALL NUMBERS OF PEOPLE STILL ALIVE @@ -284,23 +303,24 @@ if(MAFIA_TEAM_MAFIA) total_mafia += R if(R.game_status == MAFIA_ALIVE) - alive_mafia += R.vote_power + alive_mafia += R.vote_potential if(MAFIA_TEAM_TOWN) total_town += R if(R.game_status == MAFIA_ALIVE) - alive_town += R.vote_power + anti_mafia_power += R.vote_potential + if(R.role_flags & ROLE_CAN_KILL) //the game cannot autoresolve with killing roles (unless a solo wins anyways, like traitors who are immune) + town_can_kill = TRUE if(MAFIA_TEAM_SOLO) if(R.game_status == MAFIA_ALIVE) - if(R.solo_counts_as_town) - alive_town += R.vote_power + anti_mafia_power += R.vote_potential solos_to_ask += R ///PHASE TWO: SEND STATS TO SOLO ANTAGS, SEE IF THEY WON OR TEAMS CANNOT WIN for(var/datum/mafia_role/solo in solos_to_ask) - if(solo.check_total_victory(alive_town, alive_mafia)) + if(solo.check_total_victory(anti_mafia_power, alive_mafia)) total_victors += solo - if(solo.block_team_victory(alive_town, alive_mafia)) + if(solo.block_team_victory(anti_mafia_power, alive_mafia)) blocked_victory = TRUE //solo victories! @@ -319,7 +339,7 @@ award_role(townie.winner_award, townie) start_the_end("!! TOWN VICTORY !!") return TRUE - else if(alive_mafia >= alive_town) //guess could change if town nightkill is added + else if(alive_mafia >= anti_mafia_power && !town_can_kill) start_the_end("!! MAFIA VICTORY !!") for(var/datum/mafia_role/changeling in total_mafia) award_role(changeling.winner_award, changeling) @@ -367,6 +387,13 @@ custom_setup = list() turn = 0 votes = list() + + day_phase_period = initial(day_phase_period) + voting_phase_period = initial(voting_phase_period) + judgement_phase_period = initial(judgement_phase_period) + judgement_lynch_period = initial(judgement_lynch_period) + night_phase_period = initial(night_phase_period) + //map gen does not deal with landmarks QDEL_LIST(landmarks) QDEL_NULL(town_center_landmark) @@ -422,14 +449,15 @@ SEND_SIGNAL(src,COMSIG_MAFIA_NIGHT_START) SEND_SIGNAL(src,COMSIG_MAFIA_NIGHT_ACTION_PHASE) //resolve mafia kill, todo unsnowflake this - var/datum/mafia_role/R = get_vote_winner("Mafia") - if(R) + var/datum/mafia_role/victim = get_vote_winner("Mafia") + if(victim) var/datum/mafia_role/killer = get_random_voter("Mafia") - if(SEND_SIGNAL(killer,COMSIG_MAFIA_CAN_PERFORM_ACTION,src,"mafia killing",R) & MAFIA_PREVENT_ACTION) - send_message("[killer.body.real_name] was unable to attack [R.body.real_name] tonight!",MAFIA_TEAM_MAFIA) + if(!victim.can_action(src, killer, "changeling murder")) + send_message("[killer.body.real_name] was unable to attack [victim.body.real_name] tonight!",MAFIA_TEAM_MAFIA) else - send_message("[killer.body.real_name] has attacked [R.body.real_name]!",MAFIA_TEAM_MAFIA) - R.kill(src) + send_message("[killer.body.real_name] has attacked [victim.body.real_name]!",MAFIA_TEAM_MAFIA) + if(victim.kill(src,killer,lynch=FALSE)) + to_chat(victim.body, "You have been killed by a Changeling!") reset_votes("Mafia") SEND_SIGNAL(src,COMSIG_MAFIA_NIGHT_KILL_PHASE) SEND_SIGNAL(src,COMSIG_MAFIA_NIGHT_END) @@ -678,6 +706,7 @@ if(role_count > 0) debug_setup[found_path] = role_count custom_setup = debug_setup + try_autostart()//don't worry, this fails if there's a game in progress if("cancel_setup") custom_setup = list() switch(action) //both living and dead @@ -715,7 +744,7 @@ to_chat(usr, "You will now get messages from the game.") spectators += C.ckey return TRUE - if(user_role.game_status == MAFIA_DEAD) + if(user_role && user_role.game_status == MAFIA_DEAD) return //User actions (just living) switch(action) @@ -785,58 +814,59 @@ . += L[key] /** - * Returns a semirandom setup, with... - * Town, Two invest roles, one protect role, sometimes a misc role, and the rest assistants for town. - * Mafia, 2 normal mafia and one special. - * Neutral, two disruption roles, sometimes one is a killing. + * Returns a semirandom setup with 12 roles. balance not guaranteed! * - * See _defines.dm in the mafia folder for a rundown on what these groups of roles include. + * please check the variables at the top of the proc to see how much of each role types it picks */ /datum/mafia_controller/proc/generate_random_setup() var/invests_left = 2 - var/protects_left = 1 - var/miscs_left = prob(35) + var/protects_left = 2 + var/killings_left = 1 + var/supports_left = 2 + var/mafiareg_left = 2 var/mafiaspe_left = 1 - var/killing_role = prob(50) - var/disruptors = killing_role ? 1 : 2 //still required to calculate overflow - var/overflow_left = MAFIA_MAX_PLAYER_COUNT - (invests_left + protects_left + miscs_left + mafiareg_left + mafiaspe_left + killing_role + disruptors) + + // if there is one killing role, there will be less disruptors + var/neutral_killing_role = prob(50) var/list/random_setup = list() + var/list/unique_roles_added = list() for(var/i in 1 to MAFIA_MAX_PLAYER_COUNT) //should match the number of roles to add - if(overflow_left) - add_setup_role(random_setup, TOWN_OVERFLOW) - overflow_left-- - else if(invests_left) - add_setup_role(random_setup, TOWN_INVEST) + if(invests_left) + add_setup_role(random_setup, unique_roles_added, TOWN_INVEST) invests_left-- else if(protects_left) - add_setup_role(random_setup, TOWN_PROTECT) + add_setup_role(random_setup, unique_roles_added, TOWN_PROTECT) protects_left-- - else if(miscs_left) - add_setup_role(random_setup, TOWN_MISC) - miscs_left-- + else if(killings_left) + add_setup_role(random_setup, unique_roles_added, TOWN_KILLING) + killings_left-- + else if(supports_left) + add_setup_role(random_setup, unique_roles_added, TOWN_SUPPORT) + supports_left-- else if(mafiareg_left) - add_setup_role(random_setup, MAFIA_REGULAR) + add_setup_role(random_setup, unique_roles_added, MAFIA_REGULAR) mafiareg_left-- else if(mafiaspe_left) - add_setup_role(random_setup, MAFIA_SPECIAL) + add_setup_role(random_setup, unique_roles_added, MAFIA_SPECIAL) mafiaspe_left-- - else if(killing_role) - add_setup_role(random_setup, NEUTRAL_KILL) - killing_role-- + else if(neutral_killing_role) + add_setup_role(random_setup, unique_roles_added, NEUTRAL_KILL) + neutral_killing_role-- else - add_setup_role(random_setup, NEUTRAL_DISRUPT) + add_setup_role(random_setup, unique_roles_added, NEUTRAL_DISRUPT) + debug = random_setup return random_setup /** - * Helper proc that adds a random role of a type to a setup. if it doesn't exist in the setup, it adds the path to the list and otherwise bumps the path in the list up one + * Helper proc that adds a random role of a type to a setup. if it doesn't exist in the setup, it adds the path to the list and otherwise bumps the path in the list up one. unique roles can only get added once. */ -/datum/mafia_controller/proc/add_setup_role(setup_list, wanted_role_type) +/datum/mafia_controller/proc/add_setup_role(setup_list, banned_roles, wanted_role_type) var/list/role_type_paths = list() for(var/path in typesof(/datum/mafia_role)) var/datum/mafia_role/instance = path - if(initial(instance.role_type) == wanted_role_type) + if(initial(instance.role_type) == wanted_role_type && !(path in banned_roles)) role_type_paths += instance var/mafia_path = pick(role_type_paths) @@ -851,6 +881,8 @@ setup_list[found_role] += 1 return setup_list[mafia_path] = 1 + if(initial(mafia_path_type.role_flags) & ROLE_UNIQUE) //check to see if we should no longer consider this okay to add to the game + banned_roles += mafia_path /** * Called when enough players have signed up to fill a setup. DOESN'T NECESSARILY MEAN THE GAME WILL START. diff --git a/code/modules/mafia/outfits.dm b/code/modules/mafia/outfits.dm index 3a566196460..1c1fbb3cc29 100644 --- a/code/modules/mafia/outfits.dm +++ b/code/modules/mafia/outfits.dm @@ -30,6 +30,11 @@ uniform = /obj/item/clothing/under/suit/black shoes = /obj/item/clothing/shoes/laceup +/datum/outfit/mafia/chaplain + name = "Mafia Chaplain" + + uniform = /obj/item/clothing/under/rank/civilian/chaplain + /datum/outfit/mafia/md name = "Mafia Medical Doctor" @@ -37,10 +42,14 @@ shoes = /obj/item/clothing/shoes/sneakers/white suit = /obj/item/clothing/suit/toggle/labcoat -/datum/outfit/mafia/chaplain - name = "Mafia Chaplain" +/datum/outfit/mafia/security + name = "Mafia Security Officer" - uniform = /obj/item/clothing/under/rank/civilian/chaplain + uniform = /obj/item/clothing/under/rank/security/officer + gloves = /obj/item/clothing/gloves/color/black + head = /obj/item/clothing/head/helmet/sec + suit = /obj/item/clothing/suit/armor/vest/alt + shoes = /obj/item/clothing/shoes/jackboots /datum/outfit/mafia/lawyer name = "Mafia Lawyer" @@ -58,6 +67,26 @@ head = /obj/item/clothing/head/hopcap glasses = /obj/item/clothing/glasses/sunglasses +/datum/outfit/mafia/hos + name = "Mafia Head of Security" + + uniform = /obj/item/clothing/under/rank/security/head_of_security + shoes = /obj/item/clothing/shoes/jackboots + suit = /obj/item/clothing/suit/armor/hos/trenchcoat + gloves = /obj/item/clothing/gloves/color/black + head = /obj/item/clothing/head/hos/beret + glasses = /obj/item/clothing/glasses/hud/security/sunglasses + +/datum/outfit/mafia/warden + name = "Mafia Warden" + + uniform = /obj/item/clothing/under/rank/security/warden + shoes = /obj/item/clothing/shoes/jackboots + suit = /obj/item/clothing/suit/armor/vest/warden/alt + gloves = /obj/item/clothing/gloves/color/black + head = /obj/item/clothing/head/warden + glasses = /obj/item/clothing/glasses/hud/security/sunglasses + //mafia /datum/outfit/mafia/changeling diff --git a/code/modules/mafia/roles.dm b/code/modules/mafia/roles.dm index 34cbd75bfcf..59bd547320e 100644 --- a/code/modules/mafia/roles.dm +++ b/code/modules/mafia/roles.dm @@ -10,19 +10,21 @@ var/mob/living/carbon/human/body var/obj/effect/landmark/mafia/assigned_landmark - ///how many votes submitted when you vote. + ///role flags (special status of roles like detection immune) + var/role_flags = NONE + ///how many votes submitted when you vote. used in voting, but not victory var/vote_power = 1 - var/detect_immune = FALSE - var/revealed = FALSE - var/datum/outfit/revealed_outfit = /datum/outfit/mafia/assistant //the assistants need a special path to call out they were in fact assistant, everything else can just use job equipment - //action = uses + ///how many votes your role COULD count for, now or later. used in checking victory + var/vote_potential = 1 + ///what they get equipped with when they are revealed + var/datum/outfit/revealed_outfit = /datum/outfit/mafia/assistant + ///action = uses var/list/actions = list() var/list/targeted_actions = list() - //what the role gets when it wins a game + ///what the role gets when it wins a game var/winner_award = /datum/award/achievement/mafia/assistant - //so mafia have to also kill them to have a majority - var/solo_counts_as_town = FALSE //(don't set this for town) + ///so mafia have to also kill them to have a majority var/game_status = MAFIA_ALIVE ///icon state in the mafia dmi of the hud of the role, used in the mafia ui @@ -38,8 +40,30 @@ /datum/mafia_role/New(datum/mafia_controller/game) . = ..() -/datum/mafia_role/proc/kill(datum/mafia_controller/game,lynch=FALSE) - if(SEND_SIGNAL(src,COMSIG_MAFIA_ON_KILL,game,lynch) & MAFIA_PREVENT_KILL) +/** + * Tests if a visitor can actually perform an action on this role. Verbose on purpose! + * + * Will return false if: Your visit is roleblocked, they have perished, or your visit was interrupted + */ +/datum/mafia_role/proc/can_action(datum/mafia_controller/game, datum/mafia_role/visitor, action) + if(role_flags & ROLE_ROLEBLOCKED) + to_chat(visitor,"Your [action] was blocked!") + return FALSE + if(game_status != MAFIA_ALIVE) //They're already dead + to_chat(visitor,"[body.real_name] perished before you could visit!") + return FALSE + if(SEND_SIGNAL(src,COMSIG_MAFIA_ON_VISIT,game,visitor) & MAFIA_VISIT_INTERRUPTED) //visited a warden. something that prevents you by visiting that person + to_chat(visitor,"Your [action] was interrupted!") + return FALSE + return TRUE + +/** + * Tests kill immunities, if nothing prevents the kill, kills this role. + * + * Does not count as visiting, see visit proc. + */ +/datum/mafia_role/proc/kill(datum/mafia_controller/game, datum/mafia_role/attacker, lynch=FALSE) + if(SEND_SIGNAL(src,COMSIG_MAFIA_ON_KILL,game,attacker,lynch) & MAFIA_PREVENT_KILL) return FALSE game_status = MAFIA_DEAD body.death() @@ -67,7 +91,7 @@ to_chat(body, "Be sure to read the wiki page to learn more, if you have no idea what's going on.") /datum/mafia_role/proc/reveal_role(datum/mafia_controller/game, verbose = FALSE) - if(revealed) + if((role_flags & ROLE_REVEALED)) return if(verbose) game.send_message("It is revealed that the true role of [body] [game_status == MAFIA_ALIVE ? "is" : "was"] [name]!") @@ -76,7 +100,7 @@ qdel(thing) special_reveal_equip(game) body.equipOutfit(revealed_outfit) - revealed = TRUE + role_flags |= ROLE_REVEALED /datum/mafia_role/proc/special_reveal_equip(datum/mafia_controller/game) return @@ -85,7 +109,7 @@ return /datum/mafia_role/proc/validate_action_target(datum/mafia_controller/game,action,datum/mafia_role/target) - if(SEND_SIGNAL(src,COMSIG_MAFIA_CAN_PERFORM_ACTION,game,action,target) & MAFIA_PREVENT_ACTION) + if((role_flags & ROLE_ROLEBLOCKED)) return FALSE return TRUE @@ -153,27 +177,31 @@ /datum/mafia_role/detective/proc/investigate(datum/mafia_controller/game) SIGNAL_HANDLER + if(!current_investigation) + return + var/datum/mafia_role/target = current_investigation - if(target) - if(target.detect_immune) - to_chat(body,"Your investigations reveal that [target.body.real_name] is a true member of the station.") - add_note("N[game.turn] - [target.body.real_name] - Town") - else - var/team_text - var/fluff - switch(target.team) - if(MAFIA_TEAM_TOWN) - team_text = "Town" - fluff = "a true member of the station." - if(MAFIA_TEAM_MAFIA) - team_text = "Mafia" - fluff = "an unfeeling, hideous changeling!" - if(MAFIA_TEAM_SOLO) - team_text = "Solo" - fluff = "a rogue, with their own objectives..." - to_chat(body,"Your investigations reveal that [target.body.real_name] is [fluff]") - add_note("N[game.turn] - [target.body.real_name] - [team_text]") current_investigation = null + if(!target.can_action(game, src, "investigation")) + return + if((target.role_flags & ROLE_UNDETECTABLE)) + to_chat(body,"Your investigations reveal that [target.body.real_name] is a true member of the station.") + add_note("N[game.turn] - [target.body.real_name] - Town") + else + var/team_text + var/fluff + switch(target.team) + if(MAFIA_TEAM_TOWN) + team_text = "Town" + fluff = "a true member of the station." + if(MAFIA_TEAM_MAFIA) + team_text = "Mafia" + fluff = "an unfeeling, hideous changeling!" + if(MAFIA_TEAM_SOLO) + team_text = "Solo" + fluff = "a rogue, with their own objectives..." + to_chat(body,"Your investigations reveal that [target.body.real_name] is [fluff]") + add_note("N[game.turn] - [target.body.real_name] - [team_text]") /datum/mafia_role/psychologist name = "Psychologist" @@ -195,7 +223,7 @@ /datum/mafia_role/psychologist/validate_action_target(datum/mafia_controller/game, action, datum/mafia_role/target) . = ..() - if(!. || !can_use || game.phase == MAFIA_PHASE_NIGHT || target.game_status != MAFIA_ALIVE || target.revealed || target == src) + if(!. || !can_use || game.phase == MAFIA_PHASE_NIGHT || target.game_status != MAFIA_ALIVE || (target.role_flags & ROLE_REVEALED) || target == src) return FALSE /datum/mafia_role/psychologist/handle_action(datum/mafia_controller/game, action, datum/mafia_role/target) @@ -206,14 +234,16 @@ /datum/mafia_role/psychologist/proc/therapy_reveal(datum/mafia_controller/game) SIGNAL_HANDLER - if(SEND_SIGNAL(src,COMSIG_MAFIA_CAN_PERFORM_ACTION,game,"reveal",current_target) & MAFIA_PREVENT_ACTION || game_status != MAFIA_ALIVE) //Got lynched or roleblocked by a lawyer. - current_target = null - if(current_target) - add_note("N[game.turn] - [current_target.body.real_name] - Revealed true identity") - to_chat(body,"You have revealed the true nature of the [current_target]!") - current_target.reveal_role(game, verbose = TRUE) - current_target = null - can_use = FALSE + if(!current_target) + return + var/datum/mafia_role/target = current_target + current_target = null + if(!target.can_action(game, src, "role reveal")) + return + add_note("N[game.turn] - [current_target.body.real_name] - Revealed true identity") + to_chat(body,"You have revealed the true nature of the [current_target]!") + target.reveal_role(game, verbose = TRUE) + can_use = FALSE /datum/mafia_role/chaplain name = "Chaplain" @@ -225,7 +255,7 @@ winner_award = /datum/award/achievement/mafia/chaplain targeted_actions = list("Pray") - var/current_target + var/datum/mafia_role/current_target /datum/mafia_role/chaplain/New(datum/mafia_controller/game) . = ..() @@ -235,7 +265,7 @@ . = ..() if(!.) return - return game.phase == MAFIA_PHASE_NIGHT && target.game_status == MAFIA_DEAD && target != src && !target.revealed + return game.phase == MAFIA_PHASE_NIGHT && target.game_status == MAFIA_DEAD && target != src && !(target.role_flags & ROLE_REVEALED) /datum/mafia_role/chaplain/handle_action(datum/mafia_controller/game, action, datum/mafia_role/target) to_chat(body,"You will commune with the spirit of [target.body.real_name] tonight.") @@ -244,16 +274,20 @@ /datum/mafia_role/chaplain/proc/commune(datum/mafia_controller/game) SIGNAL_HANDLER + if(!current_target) + return var/datum/mafia_role/target = current_target + current_target = null + if(!target.can_action(game, src, "communion")) + return if(target) to_chat(body,"You invoke spirit of [target.body.real_name] and learn their role was [target.name].") add_note("N[game.turn] - [target.body.real_name] - [target.name]") - current_target = null /datum/mafia_role/md name = "Medical Doctor" desc = "You can protect a single person each night from killing." - revealed_outfit = /datum/outfit/mafia/md // /mafia <- outfit must be readded (just make a new mafia outfits file for all of these) + revealed_outfit = /datum/outfit/mafia/md role_type = TOWN_PROTECT hud_icon = "hudmedicaldoctor" revealed_icon = "medicaldoctor" @@ -271,7 +305,7 @@ . = ..() if(!.) return - if(target.name == "Head of Personnel" && target.revealed) + if((target.role_flags & ROLE_VULNERABLE) && (target.role_flags & ROLE_REVEALED)) //do not give the option to protect roles that your protection will fail on return FALSE return game.phase == MAFIA_PHASE_NIGHT && target.game_status == MAFIA_ALIVE && target != src @@ -285,15 +319,24 @@ /datum/mafia_role/md/proc/protect(datum/mafia_controller/game) SIGNAL_HANDLER - if(current_protected) - RegisterSignal(current_protected,COMSIG_MAFIA_ON_KILL,.proc/prevent_kill) - add_note("N[game.turn] - Protected [current_protected.body.real_name]") + if(!current_protected) + return + var/datum/mafia_role/target = current_protected + //current protected is unset at the end, as this action ends at a different phase + if(!target.can_action(game, src, "medical assistance")) + return -/datum/mafia_role/md/proc/prevent_kill(datum/source) + RegisterSignal(target,COMSIG_MAFIA_ON_KILL,.proc/prevent_kill) + add_note("N[game.turn] - Protected [target.body.real_name]") + +/datum/mafia_role/md/proc/prevent_kill(datum/source,datum/mafia_controller/game,datum/mafia_role/attacker,lynch) SIGNAL_HANDLER + if((current_protected.role_flags & ROLE_VULNERABLE)) + to_chat(body,"The person you protected could not be saved.") + return to_chat(body,"The person you protected tonight was attacked!") - to_chat(current_protected.body,"You were attacked last night, but someone nursed you back to life!") + to_chat(current_protected.body,"You were attacked last night, but someone nursed you back to life!") return MAFIA_PREVENT_KILL /datum/mafia_role/md/proc/end_protection(datum/mafia_controller/game) @@ -303,11 +346,77 @@ UnregisterSignal(current_protected,COMSIG_MAFIA_ON_KILL) current_protected = null +/datum/mafia_role/officer + name = "Security Officer" + desc = "You can protect a single person each night. If they are attacked, you will retaliate, killing yourself and the attacker." + revealed_outfit = /datum/outfit/mafia/security + revealed_icon = "securityofficer" + hud_icon = "hudsecurityofficer" + role_type = TOWN_PROTECT + role_flags = ROLE_CAN_KILL + winner_award = /datum/award/achievement/mafia/officer + + targeted_actions = list("Defend") + var/datum/mafia_role/current_defended + +/datum/mafia_role/officer/New(datum/mafia_controller/game) + . = ..() + RegisterSignal(game,COMSIG_MAFIA_NIGHT_ACTION_PHASE,.proc/defend) + RegisterSignal(game,COMSIG_MAFIA_NIGHT_END,.proc/end_defense) + +/datum/mafia_role/officer/validate_action_target(datum/mafia_controller/game,action,datum/mafia_role/target) + . = ..() + if(!.) + return + if((role_flags & ROLE_VULNERABLE) && (target.role_flags & ROLE_REVEALED)) //do not give the option to protect roles that your protection will fail on + return FALSE + return game.phase == MAFIA_PHASE_NIGHT && target.game_status == MAFIA_ALIVE && target != src + +/datum/mafia_role/officer/handle_action(datum/mafia_controller/game,action,datum/mafia_role/target) + if(!target || target.game_status != MAFIA_ALIVE) + to_chat(body,"You can only defend alive people.") + return + to_chat(body,"You will defend [target.body.real_name] tonight.") + current_defended = target + +/datum/mafia_role/officer/proc/defend(datum/mafia_controller/game) + SIGNAL_HANDLER + + if(!current_defended) + return + var/datum/mafia_role/target = current_defended + //current defended is unset at the end, as this action ends at a different phase + if(!target.can_action(game, src, "security patrol")) + return + if(target) + RegisterSignal(target,COMSIG_MAFIA_ON_KILL,.proc/retaliate) + add_note("N[game.turn] - Defended [target.body.real_name]") + +/datum/mafia_role/officer/proc/retaliate(datum/source,datum/mafia_controller/game,datum/mafia_role/attacker,lynch) + SIGNAL_HANDLER + + if((current_defended.role_flags & ROLE_VULNERABLE)) + to_chat(body,"The person you defended could not be saved. You could not attack the killer.") + return + to_chat(body,"The person you defended tonight was attacked!") + to_chat(current_defended.body,"You were attacked last night, but security fought off the attacker!") + if(attacker.kill(game,src,FALSE)) //you attack the attacker + to_chat(attacker.body, "You have been ambushed by Security!") + kill(game,attacker,FALSE) //the attacker attacks you, they were able to attack the target so they can attack you. + return MAFIA_PREVENT_KILL + +/datum/mafia_role/officer/proc/end_defense(datum/mafia_controller/game) + SIGNAL_HANDLER + + if(current_defended) + UnregisterSignal(current_defended,COMSIG_MAFIA_ON_KILL) + current_defended = null + /datum/mafia_role/lawyer name = "Lawyer" desc = "You can choose a person during the day to provide extensive legal advice to during the night, preventing night actions." revealed_outfit = /datum/outfit/mafia/lawyer - role_type = TOWN_PROTECT + role_type = TOWN_SUPPORT hud_icon = "hudlawyer" revealed_icon = "lawyer" winner_award = /datum/award/achievement/mafia/lawyer @@ -317,23 +426,30 @@ /datum/mafia_role/lawyer/New(datum/mafia_controller/game) . = ..() - RegisterSignal(game,COMSIG_MAFIA_SUNDOWN,.proc/roleblock_text) - RegisterSignal(game,COMSIG_MAFIA_NIGHT_START,.proc/try_to_roleblock) + RegisterSignal(game,COMSIG_MAFIA_SUNDOWN,.proc/roleblock) RegisterSignal(game,COMSIG_MAFIA_NIGHT_END,.proc/release) -/datum/mafia_role/lawyer/proc/roleblock_text(datum/mafia_controller/game) +/datum/mafia_role/lawyer/proc/roleblock(datum/mafia_controller/game) SIGNAL_HANDLER - if(SEND_SIGNAL(src,COMSIG_MAFIA_CAN_PERFORM_ACTION,game,"roleblock",current_target) & MAFIA_PREVENT_ACTION || game_status != MAFIA_ALIVE) //Got lynched or roleblocked by another lawyer. + if(!current_target) + return + + var/datum/mafia_role/target = current_target + if(!target.can_action(game, src, "roleblock")) //roleblocking a warden moment current_target = null - if(current_target) - to_chat(current_target.body,"YOU HAVE BEEN BLOCKED! YOU CANNOT PERFORM ANY ACTIONS TONIGHT.") - add_note("N[game.turn] - [current_target.body.real_name] - Blocked") + return + + to_chat(target.body,"YOU HAVE BEEN BLOCKED! YOU CANNOT PERFORM ANY ACTIONS TONIGHT.") + add_note("N[game.turn] - [target.body.real_name] - Blocked") + target.role_flags |= ROLE_ROLEBLOCKED /datum/mafia_role/lawyer/validate_action_target(datum/mafia_controller/game, action, datum/mafia_role/target) . = ..() if(!.) return FALSE + if(target == src) + return FALSE if(game.phase == MAFIA_PHASE_NIGHT) return FALSE if(target.game_status != MAFIA_ALIVE) @@ -348,48 +464,159 @@ current_target = target to_chat(body,"You will block [target.body.real_name] tonight.") -/datum/mafia_role/lawyer/proc/try_to_roleblock(datum/mafia_controller/game) - SIGNAL_HANDLER - - if(current_target) - RegisterSignal(current_target,COMSIG_MAFIA_CAN_PERFORM_ACTION, .proc/prevent_action) - /datum/mafia_role/lawyer/proc/release(datum/mafia_controller/game) SIGNAL_HANDLER . = ..() if(current_target) - UnregisterSignal(current_target, COMSIG_MAFIA_CAN_PERFORM_ACTION) + current_target.role_flags &= ROLE_ROLEBLOCKED current_target = null -/datum/mafia_role/lawyer/proc/prevent_action(datum/source) - SIGNAL_HANDLER - - if(game_status == MAFIA_ALIVE) //in case we got killed while imprisoning sk - bad luck edge - return MAFIA_PREVENT_ACTION - /datum/mafia_role/hop name = "Head of Personnel" desc = "You can reveal yourself once per game, tripling your vote power but becoming unable to be protected!" - revealed_outfit = /datum/outfit/mafia/hop - role_type = TOWN_MISC + role_type = TOWN_SUPPORT + role_flags = ROLE_UNIQUE hud_icon = "hudheadofpersonnel" revealed_icon = "headofpersonnel" + revealed_outfit = /datum/outfit/mafia/hop winner_award = /datum/award/achievement/mafia/hop targeted_actions = list("Reveal") + vote_potential = 3 /datum/mafia_role/hop/validate_action_target(datum/mafia_controller/game, action, datum/mafia_role/target) . = ..() - if(!. || game.phase == MAFIA_PHASE_NIGHT || game.turn == 1 || target.game_status != MAFIA_ALIVE || target != src || revealed) + if(!. || game.phase == MAFIA_PHASE_NIGHT || game.turn == 1 || target.game_status != MAFIA_ALIVE || target != src || (role_flags & ROLE_REVEALED)) return FALSE /datum/mafia_role/hop/handle_action(datum/mafia_controller/game, action, datum/mafia_role/target) . = ..() reveal_role(game, TRUE) - vote_power = 2 + role_flags |= ROLE_VULNERABLE + vote_power = 3 -///MAFIA ROLES/// only one until i rework this to allow more, they're the "anti-town" working to kill off townies to win +/datum/mafia_role/hos + name = "Head of Security" + desc = "You can decide to execute during the night, visiting someone killing, and revealing them. If they are innocent, you will die at the start of the next night." + role_type = TOWN_KILLING + role_flags = ROLE_CAN_KILL | ROLE_UNIQUE + revealed_outfit = /datum/outfit/mafia/hos + revealed_icon = "headofsecurity" + hud_icon = "hudheadofsecurity" + winner_award = /datum/award/achievement/mafia/hos + + targeted_actions = list("Execute") + var/datum/mafia_role/execute_target + +/datum/mafia_role/hos/New(datum/mafia_controller/game) + . = ..() + RegisterSignal(game,COMSIG_MAFIA_NIGHT_ACTION_PHASE,.proc/execute) + +/datum/mafia_role/hos/validate_action_target(datum/mafia_controller/game,action,datum/mafia_role/target) + . = ..() + if(!.) + return + return game.phase == MAFIA_PHASE_NIGHT && target.game_status == MAFIA_ALIVE && target != src + +/datum/mafia_role/hos/handle_action(datum/mafia_controller/game,action,datum/mafia_role/target) + if(execute_target == target) + to_chat(body,"You have decided against executing tonight.") + to_chat(body,"You have decided to execute [target.body.real_name] tonight.") + execute_target = target + +/datum/mafia_role/hos/proc/execute(datum/mafia_controller/game) + SIGNAL_HANDLER + + if(!execute_target) + return + var/datum/mafia_role/target = execute_target + execute_target = null + if(!target.can_action(game, src, "execution")) //roleblocking a warden moment + return + if(!target.kill(game,src,FALSE))//protection + to_chat(body,"Your attempt at executing [target.body.real_name] was prevented, or [target.body.real_name] is immune!") + else + to_chat(target.body, "You have been executed by the Head of Security!") + target.reveal_role(game, verbose = TRUE) + if(target.team == MAFIA_TEAM_TOWN) + to_chat(body,"You have killed an innocent crewmember. You will die tomorrow night.") + RegisterSignal(game,COMSIG_MAFIA_SUNDOWN,.proc/internal_affairs) + role_flags |= ROLE_VULNERABLE + +/datum/mafia_role/hos/proc/internal_affairs(datum/mafia_controller/game) + to_chat(body,"You have been killed by Nanotrasen Internal Affairs!") + reveal_role(game, verbose = TRUE) + kill(game,src,FALSE) //you technically kill yourself but that shouldn't matter + + +//just helps read better +#define WARDEN_NOT_LOCKDOWN 0//will NOT kill visitors tonight +#define WARDEN_WILL_LOCKDOWN 1 //will kill visitors tonight + +/datum/mafia_role/warden + name = "Warden" + desc = "You can lockdown during the night once, killing any visitors. WARNING: This kills fellow town members, too!" + + role_type = TOWN_KILLING + role_flags = ROLE_CAN_KILL + revealed_outfit = /datum/outfit/mafia/warden + revealed_icon = "warden" + hud_icon = "hudwarden" + winner_award = /datum/award/achievement/mafia/warden + + actions = list("Lockdown") + var/charges = 1 + var/protection_status = WARDEN_NOT_LOCKDOWN + + +/datum/mafia_role/warden/New(datum/mafia_controller/game) + . = ..() + RegisterSignal(game,COMSIG_MAFIA_SUNDOWN,.proc/night_start) + RegisterSignal(game,COMSIG_MAFIA_NIGHT_END,.proc/night_end) + +/datum/mafia_role/warden/handle_action(datum/mafia_controller/game, action, datum/mafia_role/target) + . = ..() + if(!charges) + to_chat(body,"You've already locked down this game!") + return + if(game.phase == MAFIA_PHASE_NIGHT) + to_chat(body,"You don't have time to lockdown, night has already arrived.") + return + if(protection_status == WARDEN_WILL_LOCKDOWN) + to_chat(body,"You decide to not lockdown tonight.") + else + to_chat(body,"You decide to lockdown, killing any visitors.") + protection_status = !protection_status + +/datum/mafia_role/warden/proc/night_start(datum/mafia_controller/game) + SIGNAL_HANDLER + + if(protection_status == WARDEN_WILL_LOCKDOWN) + to_chat(body,"Any and all visitors are going to eat buckshot tonight.") + RegisterSignal(src,COMSIG_MAFIA_ON_VISIT,.proc/self_defense) + +/datum/mafia_role/warden/proc/night_end(datum/mafia_controller/game) + SIGNAL_HANDLER + + if(protection_status == WARDEN_WILL_LOCKDOWN) + charges-- + UnregisterSignal(src,COMSIG_MAFIA_ON_KILL) + to_chat(body,"You are no longer protected. You have used up your power.") + protection_status = WARDEN_NOT_LOCKDOWN + +/datum/mafia_role/warden/proc/self_defense(datum/source,datum/mafia_controller/game,datum/mafia_role/attacker,lynch) + SIGNAL_HANDLER + + to_chat(body,"You have shot a visitor!") + to_chat(attacker,"You have visited the warden!") + attacker.kill(game, src, lynch = FALSE) + return MAFIA_VISIT_INTERRUPTED + +#undef WARDEN_NOT_LOCKDOWN +#undef WARDEN_WILL_LOCKDOWN + +///MAFIA ROLES/// they're the "anti-town" working to kill off townies to win /datum/mafia_role/mafia name = "Changeling" @@ -444,18 +671,15 @@ var/datum/mafia_role/target = current_investigation current_investigation = null - if(SEND_SIGNAL(src,COMSIG_MAFIA_CAN_PERFORM_ACTION,game,"thoughtfeed",target) & MAFIA_PREVENT_ACTION) - to_chat(body,"You were unable to investigate [target.body.real_name].") + if(!target.can_action(game, src, "thought feeding")) add_note("N[game.turn] - [target.body.real_name] - Unable to investigate") return - if(target) - if(target.detect_immune) - to_chat(body,"[target.body.real_name]'s memories reveal that they are the Assistant.") - add_note("N[game.turn] - [target.body.real_name] - Assistant") - else - to_chat(body,"[target.body.real_name]'s memories reveal that they are the [target.name].") - add_note("N[game.turn] - [target.body.real_name] - [target.name]") - + if((target.role_flags & ROLE_UNDETECTABLE)) + to_chat(body,"[target.body.real_name]'s memories reveal that they are the Assistant.") + add_note("N[game.turn] - [target.body.real_name] - Assistant") + else + to_chat(body,"[target.body.real_name]'s memories reveal that they are the [target.name].") + add_note("N[game.turn] - [target.body.real_name] - [target.name]") ///SOLO ROLES/// they range from anomalous factors to deranged killers that try to win alone. @@ -465,15 +689,14 @@ win_condition = "kill everyone." team = MAFIA_TEAM_SOLO role_type = NEUTRAL_KILL + role_flags = ROLE_CAN_KILL winner_award = /datum/award/achievement/mafia/traitor - - targeted_actions = list("Night Kill") revealed_outfit = /datum/outfit/mafia/traitor - - hud_icon = "hudtraitor" revealed_icon = "traitor" + hud_icon = "hudtraitor" special_theme = "neutral" + targeted_actions = list("Night Kill") var/datum/mafia_role/current_victim /datum/mafia_role/traitor/New(datum/mafia_controller/game) @@ -481,13 +704,13 @@ RegisterSignal(src,COMSIG_MAFIA_ON_KILL,.proc/nightkill_immunity) RegisterSignal(game,COMSIG_MAFIA_NIGHT_KILL_PHASE,.proc/try_to_kill) -/datum/mafia_role/traitor/check_total_victory(alive_town, alive_mafia) //serial killers just want teams dead +/datum/mafia_role/traitor/check_total_victory(alive_town, alive_mafia) //serial killers just want teams dead, they cannot be stopped by killing roles anyways return alive_town + alive_mafia <= 1 /datum/mafia_role/traitor/block_team_victory(alive_town, alive_mafia) //no team can win until they're dead return TRUE //while alive, town AND mafia cannot win (though since mafia know who is who it's pretty easy to win from that point) -/datum/mafia_role/traitor/proc/nightkill_immunity(datum/source,datum/mafia_controller/game,lynch) +/datum/mafia_role/traitor/proc/nightkill_immunity(datum/source,datum/mafia_controller/game,datum/mafia_role/attacker,lynch) SIGNAL_HANDLER if(game.phase == MAFIA_PHASE_NIGHT && !lynch) @@ -506,23 +729,27 @@ current_victim = target to_chat(body,"You will attempt to kill [target.body.real_name] tonight.") -/datum/mafia_role/traitor/proc/try_to_kill(datum/mafia_controller/source) +/datum/mafia_role/traitor/proc/try_to_kill(datum/mafia_controller/game) SIGNAL_HANDLER + if(!current_victim) + return var/datum/mafia_role/target = current_victim current_victim = null - if(SEND_SIGNAL(src,COMSIG_MAFIA_CAN_PERFORM_ACTION,source,"traitor kill",target) & MAFIA_PREVENT_ACTION) + if(!target.can_action(game, src, "flickering")) //flickering a warden return - if(game_status == MAFIA_ALIVE && target && target.game_status == MAFIA_ALIVE) - if(!target.kill(source)) - to_chat(body,"Your attempt at killing [target.body] was prevented!") + if(game_status == MAFIA_ALIVE) + if(!target.kill(game,src,FALSE)) + to_chat(body,"Your attempt at killing [target.body.real_name] was prevented!") + else + to_chat(target.body, "You have been killed by a Traitor!") /datum/mafia_role/nightmare name = "Nightmare" - desc = "You're a solo monster that cannot be detected by detective roles. You can flicker lights of another room each night. You can instead decide to hunt, killing everyone in a flickering room. Kill everyone to win." + desc = "You're a solo monster that cannot be detected by detective roles. You can flicker lights of another room each night, becoming immune to attacks from those roles. You can instead decide to hunt, killing everyone in a flickering room. Kill everyone to win." win_condition = "kill everyone." revealed_outfit = /datum/outfit/mafia/nightmare - detect_immune = TRUE + role_flags = ROLE_UNDETECTABLE | ROLE_CAN_KILL team = MAFIA_TEAM_SOLO role_type = NEUTRAL_KILL special_theme = "neutral" @@ -536,6 +763,7 @@ /datum/mafia_role/nightmare/New(datum/mafia_controller/game) . = ..() + RegisterSignal(src,COMSIG_MAFIA_ON_KILL,.proc/flickering_immunity) RegisterSignal(game,COMSIG_MAFIA_NIGHT_KILL_PHASE,.proc/flicker_or_hunt) /datum/mafia_role/nightmare/check_total_victory(alive_town, alive_mafia) //nightmares just want teams dead @@ -570,16 +798,25 @@ else to_chat(body,"You will hunt everyone in a flickering room down tonight.") -/datum/mafia_role/nightmare/proc/flicker_or_hunt(datum/mafia_controller/source) +/datum/mafia_role/nightmare/proc/flickering_immunity(datum/source,datum/mafia_controller/game,datum/mafia_role/attacker,lynch) + SIGNAL_HANDLER + if(!attacker) + return //no chance man, that's a town lynch + + if(attacker in flickering) + to_chat(body,"You were attacked by someone in a flickering room. You have danced in the shadows, evading them.") + return MAFIA_PREVENT_KILL + +/datum/mafia_role/nightmare/proc/flicker_or_hunt(datum/mafia_controller/game) SIGNAL_HANDLER - if(game_status != MAFIA_ALIVE || !flicker_target) - return - if(SEND_SIGNAL(src,COMSIG_MAFIA_CAN_PERFORM_ACTION,source,"nightmare actions",flicker_target) & MAFIA_PREVENT_ACTION) - to_chat(flicker_target.body, "Your actions were prevented!") + if(!flicker_target) return var/datum/mafia_role/target = flicker_target flicker_target = null + if(!target.can_action(game, src, "flickering")) //flickering a warden + return + if(target != src) //flicker instead of hunt to_chat(target.body, "The lights begin to flicker and dim. You're in danger.") flickering += target @@ -587,8 +824,8 @@ for(var/r in flickering) var/datum/mafia_role/role = r if(role && role.game_status == MAFIA_ALIVE) - to_chat(role.body, "A shadowy monster appears out of the darkness!") - role.kill(source) + to_chat(role.body, "A shadowy figure appears out of the darkness!") + role.kill(game,src,FALSE) flickering -= role //just helps read better @@ -599,7 +836,6 @@ name = "Fugitive" desc = "You're on the run. You can become immune to night kills exactly twice, and you win by surviving to the end of the game with anyone." win_condition = "survive to the end of the game, with anyone" - solo_counts_as_town = TRUE //should not count towards mafia victory, they should have the option to work with town revealed_outfit = /datum/outfit/mafia/fugitive team = MAFIA_TEAM_SOLO role_type = NEUTRAL_DISRUPT @@ -649,7 +885,7 @@ to_chat(body,"You are no longer protected. You have [charges] use[charges == 1 ? "" : "s"] left of your power.") protection_status = FUGITIVE_NOT_PRESERVING -/datum/mafia_role/fugitive/proc/prevent_death(datum/mafia_controller/game) +/datum/mafia_role/fugitive/proc/prevent_death(datum/source,datum/mafia_controller/game,datum/mafia_role/attacker,lynch) SIGNAL_HANDLER to_chat(body,"You were attacked! Luckily, you were ready for this!") @@ -669,8 +905,7 @@ name = "Obsessed" desc = "You're completely lost in your own mind. You win by lynching your obsession before you get killed in this mess. Obsession assigned on the first night!" win_condition = "lynch their obsession." - revealed_outfit = /datum/outfit/mafia/obsessed // /mafia <- outfit must be readded (just make a new mafia outfits file for all of these) - solo_counts_as_town = TRUE //after winning or whatever, can side with whoever. they've already done their objective! + revealed_outfit = /datum/outfit/mafia/obsessed team = MAFIA_TEAM_SOLO role_type = NEUTRAL_DISRUPT special_theme = "neutral" @@ -678,9 +913,6 @@ revealed_icon = "obsessed" winner_award = /datum/award/achievement/mafia/obsessed - - revealed_outfit = /datum/outfit/mafia/obsessed // /mafia <- outfit must be readded (just make a new mafia outfits file for all of these) - solo_counts_as_town = TRUE //after winning or whatever, can side with whoever. they've already done their objective! var/datum/mafia_role/obsession var/lynched_target = FALSE @@ -705,7 +937,7 @@ RegisterSignal(obsession,COMSIG_MAFIA_ON_KILL,.proc/check_victory) UnregisterSignal(game,COMSIG_MAFIA_SUNDOWN) -/datum/mafia_role/obsessed/proc/check_victory(datum/source,datum/mafia_controller/game,lynch) +/datum/mafia_role/obsessed/proc/check_victory(datum/source,datum/mafia_controller/game,datum/mafia_role/attacker,lynch) SIGNAL_HANDLER UnregisterSignal(source,COMSIG_MAFIA_ON_KILL) @@ -716,14 +948,13 @@ game.award_role(winner_award, src) reveal_role(game, FALSE) else - to_chat(body, "You have failed your objective to lynch [obsession.body]!") + to_chat(body, "You have failed your objective to lynch [obsession.body.real_name]!") /datum/mafia_role/clown name = "Clown" desc = "If you are lynched you take down one of your voters (guilty or abstain) with you and win. HONK!" win_condition = "get themselves lynched!" revealed_outfit = /datum/outfit/mafia/clown - solo_counts_as_town = TRUE team = MAFIA_TEAM_SOLO role_type = NEUTRAL_DISRUPT special_theme = "neutral" @@ -735,7 +966,7 @@ . = ..() RegisterSignal(src,COMSIG_MAFIA_ON_KILL,.proc/prank) -/datum/mafia_role/clown/proc/prank(datum/source,datum/mafia_controller/game,lynch) +/datum/mafia_role/clown/proc/prank(datum/source,datum/mafia_controller/game,datum/mafia_role/attacker,lynch) SIGNAL_HANDLER if(lynch) diff --git a/icons/UI_Icons/Achievements/Mafia/assistant.png b/icons/UI_Icons/Achievements/Mafia/assistant.png deleted file mode 100644 index 0cfc93b166fbb925f5af4236f8d332914c6c7a8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2374 zcmV-M3Ay%(P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2-`_SK~#8N?VMd~ zR7DiWXJ)tGTS{A?Rj?Kcf)o-Wg!16a3WgVmMPD?*#Aq~{K!O5>2Ms0gA{0vki4O)} zY@#o!YiMao!@O z_OB)#H}i(r`7MXssEes$2JFXE9#_T~tK^!tmA+O|<6U~q3?-#k5_={@ohI0sw?1|E z88uN=RDso3d(u``lzeonscoCaxLa_RVN|iqv>cY5k;}5uvRMXQnRE#*)RpGc9~<|L zF->aBFa2z6e1xuHHu7YM4L|X+(eWYm3?wDmi+7mI;5;Z=5(YPPexXL%}4ME99=!b-9$|z z%Vc9zRU@7Jt4Ma&hycSNKA7YGmQJN8T>e z>iUV`5!awN6^Th=*1&$M_G}YUJ4u6hDZbAmO9Cj2Pje}Zb@zI2Qb##W{0iXUro|%LrJ$Q5zo`80l5uhQ|i<$$`nL%Ke*<7}d|L z83BWfkU64#LsqpD-S35hGFFuLf>9fvdeDED-R)`ByQ!45F0c4-CSCNIfnf%eT>FJ! zZQ$I&$`+NYK|K-FKhnc)KfJ~?nj{F?UtEgqZ+!0VGOEMUGXbkV?%71sPXl$qqI72# zTVAx5Wu@mBwTU5&ZLJTlDxZ$J=mT>6DtGL4HyPE_Dr{g1mXwY32RSbCr7LWJ8UsAWEWmQv@JJg!wnd- z&<&FTmMOFalNQ#p)YaB|UD~%sRY*5M0gp;7HVS+xSzwo(MIbSpvgCn*OpB%bj@l;3Fxt6>TP!DFzmr)FrV+)Z9-}y*APa+o>gTeJbDpvK z`So+YMKf0#9vfuW?_Z+vUyeB>FP-Sn23Z)km9bNb&A(KI1)=R=02buX9yE%T0v1+Z z?a3fyUh*QGYnN2Se5W+t^u#yHu5@06m*FG3D%`QpJ%I9ng{`b8`5G@Qum_*&uplr1 z3os!zpBcsf1H0AKwhW)C;B$p5lLfJdXd#n{$%tdkB)7xA%iB#k8cSWm@3Y z@AUduS{UNdZruA5z*^u|sQ4`eve~khgFB2n<`jr2#a+ArgC$vAb19PzSdkN}2jH4v zlC~zxWCK=l*AFpYaztl5cy%8D_{sPvt_LS8)C)lk2UV%T%0U$6{}FDSSt~BEABkJ&U%I( zkfX2d7D#kLA>PH=vKE#`5Lg9mAg)=mi58k!s?wG&j9*tfn^b6L?jT!ky@F4q(Am;uvLH5-qjy@)w;xAxW-kqL_Cj1=a3l8; zOo&Y&PAmXy`vLboT3psjS~nrzFx90P(E1uoh)tl|1%N?F`$Z-zk~5K$ld3}7!2m44 z#3)t@0%qh$*I=MCUMr=f&~}w3NGzVt8xH~oAxE0X4j_{i0kWwkv>9y&1F$fP1DXU3 z)2HC_Fz!>)%FH%{fmL$-Bw!E{%E=(xk@kyB)>P5MflfWunc5BpMsbiVf$8f@z6%~M z(teRvlI%hoJ07yf>qDGl5`P@STEkZ|F;TfBJ--P+`suUd9 zl1JJvGFg$FnTSF+gk>pM(MXavHSrh*jA_VZ%}TIi7%;%MKDerP!)PAEU`m}ZASBJ8 zY(3I`kq3_C%tR1e2h4_kZCs66=!Q`}=)+VZ9wh^(6n>UkBgXP5nTfIwE1H2+GCh;0 z=!aB9al9UfMRwH=4}MOM!!m_;o5+!tTpSXd%|kbhmjlwtxH+#I+zQTCC3Gn9R3 z!^4+~PKmak<5u>b%707*qoM6N<$f@0umegFUf diff --git a/icons/UI_Icons/Achievements/Mafia/changeling.png b/icons/UI_Icons/Achievements/Mafia/changeling.png deleted file mode 100644 index 9e44c902633876bda1357d73e9b0debd89e2a328..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2363 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 diff --git a/icons/UI_Icons/Achievements/Mafia/clown.png b/icons/UI_Icons/Achievements/Mafia/clown.png deleted file mode 100644 index 4f2d91947159fa5b74fc64b95911ebaba1af6982..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2363 zcmV-B3B>k^P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2+&DHK~#8N?VL|c zR7V`gXJ(iGizujIs}@D8Et;6B#X~P!ZF!k;q^wOqHG_h414{g-wrHaKwlOCF$ z%ApquP3=kSUNoV#Hm3fmRZvv4s0aef0 z^P73|8_rTd%Rx_mUlDsl@W5)$MHQ2BH5IR*%PBd_=Zsh2bCSs}F4-{M`sr$8oVQ77 z{9{PRjgmoje#>Du>XJ&*1pDE%$CWq2YPn&&O>b+d@h-C_Mx^vg(w+&?Xb5&@$EWUR zx+b9{RIsKxPtK~Er61jF?bvEC?iQTo=_;0=Q^X4MidjKUA!4 zPldsaBlPVbQ1^18OwyY<`EyxGVVSxh&`f}U&wSmi&-aw|4?m-CCwn8P8~dpnH#h>~ zOA@YA6~>Xc3f5TfnJWTvFa5{&D{CTanO8X96se$$IUPCrlkp{B_(?nxj;39qhGZyT}I?q-ijZ@^rEAf5~SrUYTe@Z3rbq{)PQF3#9BYxY+&f zKKB{3AU0+sSo867UywB&;+#1O^X8CH%So_#x^{NZKh&#)^NsYIg9DR?YWHtGs;j3> zOoAaq$R9GkA*@`?{*>7vsX3?rcA#?K_y z2F@Lghn=P!GHP_!={4kRZ|i;8JXR=W}dFO`{S!BrlT(UhyuUb?R(v=x_U~Y7EFmHWefd6k&EJ~nWXl%3LVrW(+Vq6xr0m|)TdaHF zp|Ug~`MPMj=aj96gNM(8Sg@>25DTCUOUqWW;(}7TXXS>FXAn>7>WEC)ay=SufX_lV z%mlG4&=w3@n9EXETkmxl-|DJ}Oxk+HS@f+tF&e_br>oDJ42N)%Xlt0DSF}~Nc@iS} zFhuZN%4Yf!$4U|_T|$RgLCA5d>n}LBfaJV3(u^Rig`qEFx`PNFL20Io1xm=5p{;1M zVDe-ne->6SOr+^ID>2=f?Gb!DL0i#gqDpBHh6!B~OEivv?4a9{l@;q|-P|zIVD5RV z>oS&ydZd$Ajb9p?U}0F#qL&h^I%Jzz0BuIw1!twgZ|u>iHw(;CQ%&v6)hA6{Nc2%~0pSvIBK?_?|v-E2`u)rF8wu=Rz0knW7 zq|Il#_ZN07xi6qENa}S?~=#0&fnEuj)1}664-Kt z!fXyyr=l>|+-Rh>XEoRTT2J?T@DR3Q?n|m78CaIJk$x2BUXpQ>HDX-(Mfw5Bw6v~g zch$pS;-sLysVof3v^L=hYC~FKl*GaEHEQPJun8 zxJ$WU@KLznvqCScJcU@=Kr0Gj%?-HLHc6X_SlU1wx z!4`K-n_!$P!LY&1COkoHNGslSyk!^X;#8@tLTzPAHtDchap&=M)-(8sW=6(tfkY=1 z;#r(cc#x_Cpw*ZK#5IdIh0dF72>7q7ovm=AgT(`UzQERNdeeeRq&i%eD|XCfyjTS42Q0knW7x>zwrFr6b^ z4@ajTD`h2UyGj!zEym}Kj}Z(YN1BxFMf!eF@97Nc%-5YbJ5$$=^yW zv=Ju_=;DY>DcF0v++Jbutw{4ljx^GKGexxf)E0ygXdBuX&9MwoKZglTl1JJvGFg$F znU0_v!m^ZDiAa*S2t9@YJ`I_y>2?eQ9DMtut7bP$VyFyX#{2Kk@kx`a3p7@ z0|*^38U~C}<+IQY6ME2xMLHfOgP;^~mYO3b^C+26?8Ay;Kqb>Nd78dR?I@nD$6=9O z-9-eS(&Ml!@N5$~(vpkAg0ng3rnBY1HLN;dB0XykTnoiM(l18rLnC9Psm@cps%B~R z&DM^CG@`yqMZu$05_BwSTl_4CWkTifN7GnSa002ovPDHLkV1n;VYpMVM diff --git a/icons/UI_Icons/Achievements/Mafia/detective.png b/icons/UI_Icons/Achievements/Mafia/detective.png deleted file mode 100644 index edeba8c402d190d174f4eec3f95f9c839cce7721..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2357 zcmV-53Ci|~P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2+B!BK~#8N?VMd~ zR7DiWXJ)tGTlxjGDqx`?Xdxj&EDye{V0?jC^hFa)OpHboNKnA=paB9eLa`)}_+WUF zL|?Eq;uGM$KvIktA`}r?XrYjnmVR!xE#1B2`OlrZcH7-{X}jO|pWN)-ncF4v(ufTJX$xbfWDBb$$YGItWNNN0Q zNXM6FKnGsbGUVZ23OYpL-rvu2i((kqEQ6XL8P*tvH zm@1~g8tOb*t812ha=WQ*tHHQiaF(O1SZ-DU%g-rfd0F`^hpt?@1Q+Vca+;5g`^T6e z4Hl3AHa0#&myeA+9cI3#UN$;Dte%0SWC6~l=cSs;)2)~9|F&(vdq`K!yJ7FM>4;%13VS}Un^y_4ABc(dr0r53~ z>rjRBsCfl;w%$`L0&)-ikMC2~MAlN0ztDt~SH_%qDnh(WE=*AEG?y(+kr)6~m zMDU1fNSvCFNn*~xey;Ou71B6KgLoyrFCa?-D2z{u6vn!TeRrwL_Lv1ywi#UPdS|cu zoLMkC%?ViJv5Q}kH67%fIr4KB5U3RdtVGu)hXzOb6gc15pgB1(d9Zfh<|DfLnKdh5 za1nAxjPJ;*cA)z$Ev;hZMN4&Ua;j_K0ejHfYIaj8&$zteY)*JXUKt0HRJ*2B-DU)_P(5CeRwj#<;mA)EwlEfe&KwyHKyqljY| zJa{f;BmIbD6~Rgs*I~AT%W z-=ayBd}BlG=A)}L{>w3kWoO;7!!?0Ux)co}}OtFrBT-Ge9(TG;BEW#8h31@_=G9To%zU;!q? z<_lf?Kd{?PZ7cAZ2|ib}vRDwC8g)Zbz_7r^dqeD=;_Z$tQ(yrmU;{=dQ^4>>8Uq~O z8^-EYSSkuEzyxf-2xSVGetmCu$1t*(Sd2KA% zj_ORx&o%>%RCrcn-S72uzZ)-MD~exK74eW|S*6wLV~T#P3ALp6ub9vGHmi@gT3Tm+ zyLuT+Iw7cUDhtClt*!71vLRNOB@y|TG=n`X3l}VE;$@X5LOEG^`i`vxFcrUrKsH<9 z<=_r|$D9H&rMRq^3H7je(vMy^ZOSA++yK#faJzL>r zu>mWg^qbYD3hgW$;tK^ruj$JLR3dlBR;YqZq&yE+rl&8&S$rVT z$yTU>Of(|}4Ecu0l0a4%5}jP^e9;}a=#woF+ph|SdKot8`O$B~@bM}wTb5H}ax$h`y;ViSxL3j*7=-~EslmuDoc zn~-mq=~4`6eGMkWCfMzQz#ydkB9j%#naIh>RH5x)02W}Pik<={ljzec$J4P<@vNa_%@O-Nu=h{ b%8dO7G8w0S3A+C)00000NkvXXu0mjf_zGv& diff --git a/icons/UI_Icons/Achievements/Mafia/fugitive.png b/icons/UI_Icons/Achievements/Mafia/fugitive.png deleted file mode 100644 index 86beb21b1bd796e0f720046766da1651ddeca081..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2387 zcmV-Z39R;sP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2+0EqAxyR!iz=|NKnA=prHgF6pD~Q;)5|U zu@An~)`(Al`+}wtF@&21TIdZd1$y1y=Guv(F-*0BV zne%fJ@dA8KGTFf;8>U+yU5$+MMk$S( zhIBM!53mbc4!KbmRiY-?Pp3Vuv=LUp4dZQkTS1L?nKd&+O0OjCnGiLGU}xU@)ZL?N zB1%LBtF7{+l#~~KbgRC3tHHQiaF(X4Sb9np%S>CqGEy>G8eQph2`KkE( zG?-ud*~sV+U4v}s$p9OC;$_351L`wCO6KQWdR{6o`o8Ip*59@raQEw~IVU25{c_Y( zU~uCwefv)8UQU!rdb2P+hh=BxsS5(l1_;hVDDP#3$?d7T+FNswrNb1AmH^SQf2SBJ&41gkyn*+kP%9d*I{RA&ZT zmA{r{q-N>b_yA*DQ|C41(@__FK#pI<_Py?UT|FgX3#P=9@*Mp@mW%wUm1J2dj#OP6 zU-@r zVIqiSfwo}M!djNP+Ip|c_)b@a0cZd% zpb2U7nJ#`R*sc2Jm3U1CpDSD}El8Vkbwen@u)xN1L+qa7>5h#Fw16hi1{$GE35F-q z7~t^SFj9}g;t^;8O`r`lLYWdwKfbrSV-PG&ER8tUOkS7qkd{KOGMXJ{`$Rg?7#C)@+iY2_}sAr2q$g_xbC|kBse=K_BTnxEk5|o~eW=KFZx!!(J#d7!!{+2+< z5ek#pQJsp+R5Q>>g=f`O{eFV(_uwIHLC%Y+A{qoNtF**?)wp&x=sOed59so*#yVI9r}(rd2QAC{}5C9>hjkEk$=&^8pB*)O>Zpn9x#6{nqwG3sIIjAiD11B za$?N@+-QmwZ&=zuE4v>~69F^B4b09aIF>eMmo($xRkZSaV9kmXuZe^zj|P@D&Wq}ZPO`~9(E5Q(8W)qx%Hl!7=J$7yv=i<~N zSAhy;iZ=1ETXDDZ2J0GlKr16-w?Lv33h^w?COAmd0nlpP2I87!o5rr2YzT~B*V^k< zXy<}{zE~jin%PwK4h{Y zKsMPxo6&Y?04;QJfJuU3`V?Fq#(gqcnbl@!5G=WVl3)M{Stk!nxqDZ4?EH_kHrRpqg3{++OSlL{tQQ;Z|D(d0$h@j6_HX_`R|O@c zg;@+|h)<|bU&1ym(teT2nn>Jz_^%QRZNy0fx;P|L3ikdkw^tZ^E7E+CBaO7*L=mlx z+5#5>Z9^NwIhG;p4fU}}@<{tdCM%LN;}LX2Se6ni5=rtFV~=6Ln1)Q&csqsx1ANni zYi2i$VyFyX$EEMk@kx`a3p8O18^NM8~Tk=HD;k3M)aT$i+DUr22LsbEVV|A z=20?Zu@5Vn0VjDxx@6kHaFnYJmqoug76o;Mpc}q$L-J1ZNA;O=IQ2HS9WI zAssUZu8qY$(r<>?hepnj+A7b2lJdf`TlLKcX-0jMiULQgMCe%3#-=}7_mWT%3q^{k zU}J$RVjX-dIp0pdcvc>-^3bI`n@|Veh60mBd>*aL*#GpIs@yb6Iwk-B002ovPDHLk FV1ldEWMlvU diff --git a/icons/UI_Icons/Achievements/Mafia/hated.png b/icons/UI_Icons/Achievements/Mafia/hated.png index 00ea735200c37f768f9b9bd0596ceda843752cdf..560f8798744397f29188b0d20858afd6317561ed 100644 GIT binary patch delta 2438 zcmV;133>LT6SfnONq@os01mKseIFl6@l(0fNis%qrsH4CgylrH3m|4o1poSpUAaPiHw!QUv>MkFUz&)-HPbMyg(J zq)GZPt7tYWE19DX2s9NS;B9{=>+#=Wy+gO@>11yNRe$4As>TOh0r4RTcU2`ih@*lX z+UJ`s0&*+;;@g!qk+qbU+!Yk5cn)*B3iO@M60k-|JQ9wMF8@tZ%_7TW!<4m8y7|XW zR#!&^LnGc-8hD)xv6DWQ!J6iHD%ri|i`WczQShb|fogoM`y%V?Z#P!gLkjNp^oavb zbP`h*?0?$^-#Q_!{nUsr#OGOLNe~L{Q#wIgcdh#ZRoTv9f|P9*7jM3}&3ibQkQh@E ztf{{F1G1)_oHJKR;VcqrF$q?#b2Ee9!EPm-f4Dc;IWW1icKe#$I(yP2Bp6(TqCx93 zvZ@WJe)B7;S!LOLotv55=()nKbhQSnsgwsj{eR-MM5^ed1w#)gx%EAXwVHDmtDd() zHR{wAK_pC+n;l{4JMY)R$AtawJL z&dmT-0WgBFv2d} zJb%Ob$l|Di4p41b8?R__2^Mrj<)5&u^3r*1(cA~=ZwQ^6ozR$+UA}dmb@p9XmL?>B zG@j}iv(#wd(Plv`SXM5G1yF_sbC$B1#T9hTDlH)o!=KdIw!|#C?hRL?%|bQI1+fe$ z3py=~WvQyI>i1Y*>MUC(EIs@zdg=!BhJR?_v$f5d2$yh^Xe*hZGs>#UJOQ?C7(93` zWfMKbwUorl7S|zB;BuUAKZ(XIAUUtK8xcgcFw|uXci_RpDb01UKpC}VC@ab=nEceP zJ&P(B2GaD+g&6K+x(DwhC@acLR4WalFs@2sipCX?ZFE_-wCd5g#)dz3exa{2n}6r; z+N7`S!PxVB`=6K|>XL3=9XT~L&cZOCMW-^%I%L{FIu)SID7)aSLX28(>EsY&EDR26 zfXg<{dErC%tcrVz##q><&70Nvi_bq-=g7~7Sm}{OJ}(lx{K)6WV`0EQ+{eybKSAxk z9Ck^*Fx;UXV_}$9#!M+D|I$65m48l9c4z=C$f4b#lND;d9W*xh3Q4k!m{!IFU^0lb ztjN!H>5?s(f`oSpEw@XMNCHyW|>V`08O)#t>*XhGW4s0%^~h5yK{X zT;|T_-xMTPH4?FkCQo$Cn=xp`o9df?qO0c?&s)jL zOXsSLWaE@YCTcO0rF-BeyU=k8lZ!v2m&D4yeET&4g$2d>iY1`O6y=z7xSPQO(M*KMCi2|0mYgz<(`ARS>FiRK4vW%r=8X;{+D}mS@To2|g%oeO# z1kj2f+T&a667mS9Fn?Cu_qfVPHrY0oJbm>y6{-`k_%i}gVI*BY62j_g9t|{sHdxvT zt<;EG>VlrW5QlI=pi`c)gf!6_ zDZvnLh$sm}g(1+%Y3%$fyL3aWd_%nVO%`YYO`r`lLYfi`OMiM0Z-^)fM1|!E0xh5k zv@y$`f>n}O_QayUa7GB7Q-}Rj25KL_|-ct$1d$faAvo^Qw=t!JJ0~Jm(YZ? z39S1+9+Wh0LcF1qWSeCHr2&nvp$Tads&*m40K$F|$%^1iJ_8^@AU3Y`J?0yTU)(SP_M>^GNtP0Ti9!HM$fsmv4Y zJYZ{KhNk-FugS_bAVhBY-H#=0vyOCu@#5L*f2b)OvaW-*+t<9Jv!Y^aVTPe%@dnlD z6PTt&*e@bkbBT*L|2FeoC$Q6iPPQecU@vd+_6v)zLzpjOq!IR;E23SYvcQEww-cV2!9Y3)L{G8+{nEaVr@(rI&BD(0@x(rE)8o zaPpfKC4d?cFnNF;bU!|4>ULOUSC{C=-ICVruzw6#@Q)a2$;C&4vstL7nX=&;W*sn) z&X^6?!pU#xmmv8~BNL>t!8dbR&4Lx@j<@Zg9`$KT3T>^Dq-{xCT7S8`m4r&#%9^AK z77knyv+=FuypI0xlssPLp-Xurr#8N|1D!;6ZmrDNf4hqgOTkt6IsgCw07*qoM6N<$ Ef~1h4a{vGU delta 2419 zcmV-(35@o(6QdK5Nq@rt01m?e$8V@)000R%Nkl9cp;}=WPw-GSInNIJYq;X_Uvnc+g43Vl~Q00dxJUEHOqHg zXl&VHkO)XYd4EwSpVct9{$SI^ezVi8!Lh38WZ+>kwG(v_lD6GOXGCIW9APwCa zpus!+G(0+>zXK^nVIfrT-kQoUn@?W-ZtGitKC3F}N(r!UJ`650gz+B#`t#hq{3uiW zFhBn;Dk&`27XZyh0C;<_lX?bkQSb0={&luD7I)(icYoutXgmCX3sUc*41owQ>6|U_sbV%(tky#4Gc4&62`X->k%P*RJHH{J*cOH zdWO2_Qv2Uz@Fc;|eiKS=efrHnn^ip}O$%7VzTiflevWb%tjP5j(CUf@sUWw=s!b1J zY-?^mqkTH=qBq&`tF5aKG+Nb@YRbSgETxX~9~2d{KedW2E60~>)uxw1;ZeHOahCen z;(xe<4sdVTJXL5@0%kg*>NG5?v}hr%y!$@>H>6dYp5iqrUA=XYI{R*DOOr~hpGx)=6JXgwTQF&1 zEz4bPLw~XHg;kYM6Sf|H7XRut%!U}?(|>i$nn*tBXK3q4@+aD=+dP31j$!cNg;GcP zM|^7-R=T(jGZkEpi*0{ma0@FTY7?yp;#wH`GL}2=;Ng^JIxMJ!$1=1PZI+}yNi?3t z1%`z*|79hXJ6`wTlPRP`hi> zc4@7dG(D%ruN^ygj`@UQ@9k@%XD1ZJq*kx75k3GFL~6FcZ}&aOG1c8J9qt8 z0BZuU%M7e?-O`OrvcUR^^O_3CRD($*#G;*PZ3M6uiI`FpBJ$5|#p`y_pKi%!16J(B zngO_Wn55gnxa2mVSlMjA%6+qn5n$Paxed>)*)g6ZLc4K;$UQH}i+>hovjHn<#lh=n zWiQBU76sXCzzSUwNduk$22ioEyZ{ej@0LPvD}G?N;>lGD*HLNF-Bx+(l?;E(DL12g zpo1>8pMhKPqhwf3C`5pn8;TyUV#ls{W0@P{TZ9d>lE~e`{g4a5?D5JC2-6Xw79p^b zNOZyj-o?2gufu|{G=GA?N+K(a(e)#D2TK5_HQhno=}7=gzy_h6U?mZH%@4;>iQFBx z1&fQex_Hk{D#ApmpTJ7*={M{PZWBr!nwMWn_by(q>r<_CnI$j$dz$)&yLlZcw%64M z4r^dKsVby8c^2?JwBj)xl{Y6d>FbXxCtzJ+!!H&fl1Hy4aesq+Lu5%HD{M}tzyeIb z#twUmEWWEZuKWw1NTHjPDVqhe86UmVbmGcBBxiQ>Am^2ZxSIk4U_g&muA50YcOFpk!}|O1|jVinXE|8w7uJG6xt33U;!ppvDO%1R*v+3 z40Omb%vPc8I)6=&S;Xdzj{ycDN1Dm@B9j#Xve_oI8Eppxu&|0F8V5}K8bZB?`)sr_ zyUkz_8$k_?0|p_XoDK2{(tZ)Wk}YcQZ8cM!x$R(J6^~I|VCMQ#yo?-ar2QhTB-4d9 zUcJ@CPCbRu_C)E;ae+a|wc&wp4+cM^{bus4IXpT@mw(&OnqED(d7_gC#>DBzlO1e_ z_=2^IAI`W4MXVRk-}v1;n#Ky6v#R1Mp@rERE|4#ApFV|cTBQ9VlQolcx#OI@-*pNn z4OqnqH7T&?UJmq2Lu^5sFLI=j_M0itu5nx7Lg*A`ZsSyrWtg-}+KNt+N7^qkS<`hJ z2;C5trGH_iB1zs>^f3$=(~!xUZpScSfN#Ee#_WcvJchxRK4CyAoPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2+K)CK~#8N?VMd~ zR7DiWXJ)tEZo9Ol1zHtqp&)1>Awnz|m+pyP*x}+*;zJvWTE=wm%K-ecCpC@KAt*fSwc8iJjA_j7NL zu1Tm83aqKom$$sG>XYj&9UBeCy@E5Bu3`mwMXb;@hq?0#nTxIhx&#;M%5$1u8x4#w zLmDh7gKT7Uh^|34^lX3)KJ&BT(E;@xNJ4(Bt3KX-{?2ckc6~^U*$4o81|PHD!6&S5xQBk7?2Sa-I6&R_gd-@v zCUBjqFpi2Vu#<;B!UHjIV-5fZ!20y1EA+5jBG> zlZ{Z-Vd>=G#Iw7`1sDeL{-WTgT!;qxSORM*_f)VK<}POW&I0pGNfNs8y{EU>V}F-r zb-hGzzo%aui^n7}YhXV&`Zfw_9Hl|L8lQ{Fk^lM1pCU<#I$XXp=#JmgO;A+wKIqougW)+5zr{GWO>ZqEs<$5+;i!lq` zFdJZ5LR&CtVJ%BtZH?b!e6OpbYSPxj&!S)5g4qxQe5Q_BlgS~R1Z^b~bVplNnG{mZ7a^ zvtaT_wDBw=Ff63$FRQWKNp}xEoSq}5J3~VB(`WALD@l%CCe&Tr`_5x(ZbsE zM%N{54|Pi?uNl8JG{M5KpGCJ4>^kHcEC_8z+XZK3B4BLS#UX`R7#!3fmmQpQ*DKGj zN%yo}xnr?a)7-p9{FTl$PkX@B;-s$Z_dC0<+*HwLs7Z%uq&vjT37=Q(s z5SuS_@&CZCw{$GQJr{hg>B?e3Z0ghlNddzG8}ALVdy2O^woHKqn1Br!p-ch88)*!1 zcyE}fS7DhbumBUV0V9+tVEXmF-5n#yVq!7kSTp%O#v@t^d1`5Pob4OwY}4@QAZw-B zlBP?)$1mpdlLveo973K(tV8X>*Ywwtr;mD~ZkR;W@lrD+Aen0I{6ocZ1P%VCK*$ja zbJ2xPMr zSq|>dPs}M0Q;H`WSaexzz>1t$GXU2Lle9Ha78|g#&1!}c2<^rLBKK@Xmc<6FgpPw( z(aNb5{H^gm7Zj~LnX=e`6}lvn22u_zorSP>tpI?v;R%b(RLJtPqWN1>)h9y;ao1`S zjB^DH0cN%$E5wFa@uq`kwsJ0xmU${wC{wbP3A+`y9$sbL0}p6rWNZ^ibV4EC#o3B1 zr0PIm6}Ex6a^bqM>n2+yj9*teTU2Q0oPIt}AoQ9(oIxdWcWi|##6-%|U}bvxLY%}6 ziB7h{6=I?pDPYJqM3w}y!jR}>%M@6E3D|%U$`mk!^dR35SrW(!vtMD7(AhF&u^=`Rqj%cQ-9Cim%%?QS*$Z)V!HwKYFd;UfII$40O}oAKXmNQ$ z(z*%xhPf`qfY#SwLTp0aE(8oh+AlI$k(`N~oLm*!4hCQWCc0QD44BT5K8%4*zgEgg zq3tS7kXVe*8xI2pAxE0X_92rM0kXL!v>9y&1F+D=Ax!{==~HmI56`)1WmcQPAX0Mu z1Yi&n%E=&aBkdQNthu6xeVt~iGqoKIba9v>0yEc_d@DR$r2QhTB-@2H-g(ldyn3`f zT6%LtU=VU`Xy9wW;D@x|Y@Ri-+l)Og<<(Q0Cp&py%H6x>gJ*xBwZRs|7p!>h)vSw9 z#Cq}C{l8Q=6PeeE`d#Zk&{Yu?)xsa!5+8gR)ljM>1i%eD|XJ(?%4PjXd zRw9z*EsZ^f0b?36S=||S3^VoS6xN>wwuX zXpE{c3*9iG2Ypz|#G_>3l)}$aYs6$8B{Np`VMQ@WCDSu`jDAQ(6sPNPSY%hX;lZc$ zI4nzew}~8S$;Dp5Suwh4x*WKMT?Z_r)8@dnv9gc!i&6HWkuj>N(Kly#T~+P%mX19% zqrO2!p`%q2bS!CG`}sRN2vovCkrE1Qtl)}R2j5E0H`6~nE00%s=u)1}s)KK%36n%- c9<9vSf5jV|APCWJO8@`>07*qoM6N<$f{p4~^Z)<= diff --git a/icons/UI_Icons/Achievements/Mafia/lawyer.png b/icons/UI_Icons/Achievements/Mafia/lawyer.png deleted file mode 100644 index 1c9bba203647ee9d174d3c16d1a69fb9f1a85bc8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2362 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 diff --git a/icons/UI_Icons/Achievements/Mafia/mafia.png b/icons/UI_Icons/Achievements/Mafia/mafia.png new file mode 100644 index 0000000000000000000000000000000000000000..912afb2d94a29b03c0569f7b4883e9fe961bcd99 GIT binary patch literal 2345 zcmV+^3D)+BP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!T5J#yR_?s7j+BDf(iE1Szm!?g4J@vc#|G$sqqD7%^Z<(Sd#Wkh$cg@^ZP#a zKG8KvC8>fnH~6xuYsx>o)!M$>VB9M>^XMv;la=hyiWBd>Mg~2D@~DdOPJf0rQexY0>%`HN5awdc(jL9 zGpJ{>3933H-TaG04%dVThDm%VKkyM3qMja$(3?sMO4;+p>sYos$9&TQfnofx|1Rqt z?zDQ{04aE?U`U)zgpruHU_Uqbb_;2IOOtp7o|jQif>4;B78A^M5Bu-XknJ@Kq-;01 z`1qZ}-t%U`+?bbO=f1jllzLM==ggJoSw=#wC&7w!?b2XytX~N?Ix%P(2PW%l>vo>f z)p0W?!Qdj~j2YiiuiB5{w`N5pD=k{1YnLWn1NYhe$8F{?m9nv5SbQ*-AsV+}uz->q zzmiznICrti)tl6$o(c?%J!W^h|6v9h2@>ruF2$a=KlgU(>X?X2u;$ag?PPw=(GV=n zcIUDUrJGr9cD}An4KTO0bzfIL9SzYga{Oxd9`d&8>Zrslm=a6M7W#qw0`jNUQ_sqB zW$W71Vk$7n?)2PXL)7DFfR4~;*%hm3F$rcmqVg(wR&oAnwrxDKgi4dVfAgAqep(Pp$=SIxp!FpOm^ zci_RpDNPkWYd#dwT!yxy&4S5q!pf?**|KUsn0&QkZ_6A9XiHWQUf0~=-uhAkSs z>!8+#nTFM7$;B~fp&mk*Wzw1({y0g6N3rWrRrZQ5olQ7v_?CX1$u@F!lF45*mhAXl zzs@9*^}OBrH!a%x$Y{zFd+T}4$@7M+irsB5{$mU>=i@Wq4a|^_j;?5B)JeD@likw(8 z0M`nWbeN5$4YYE)Rh$TfcH;(-dk*$k+CVFzuj!!$mB`(3m`+d=DK9`P z)6*BC2`@-=a+pp~6RnXF4EcsMKL(H$h7d*v6KDZVpba!aS#V48T*Ji+^th{H)k`X_ zAR6f$y<^cg+{M~^ZqS`g~>}=v{--&DYM%7oXO{0Nx}6J)p@Cg;{Vc%%63XfSat~?0 z$YjkFx(6Sasm|1PXrPOyVJn!qzT^kt;Ueu9nXKs!+St+OS6)5Z9xlDvRxp6Ty_D?!bdz)Z?%$5b%#2Y01S2>~dh3 zE|mkL>#c$1dd7=Dxd P00000NkvXXu0mjf^WSGZ literal 0 HcmV?d00001 diff --git a/icons/UI_Icons/Achievements/Mafia/md.png b/icons/UI_Icons/Achievements/Mafia/md.png deleted file mode 100644 index 32bc972a4aec4ab56ae0b9d88ac70600b8a82fd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2352 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 Y0izU|!rT0~Hvj+t07*qoM6N<$f(xa1?f?J) literal 0 HcmV?d00001 diff --git a/icons/UI_Icons/Achievements/Mafia/nightmare.png b/icons/UI_Icons/Achievements/Mafia/nightmare.png deleted file mode 100644 index 14c50b403a266f55b16677b37241198575356db3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2350 zcmV+}3DNe6P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2*XK4K~#8N?VMX| zR7DuaXJ)teExiG)3bjzM)j~pqP#%0)!T18P=!*}S@S@QK5)?2zXefafp;!_~d@v>^ z_Q99h8u5wZzCcom7$O%7v{0asmO`)F8{IwQ_n$LoZRu{iwB7spCntM$=5)#Y_-5vt zIo~&&#Xv2GJ(+_!>@C6lm7I%mCS@fRuc6B+Im_gXm*6?cWH*;=oNj$|wKLA!r8I6D z($SVT!Y*t(;znIm6*XW#pYgadCRhzOjCbj44K?0n*345KRB%=I2~`UaKzqq2uEH-*+5x59_K$S44pQdfZcD zaN{Wb`flo8PLxUdvLrK~jwyUwlpA zx>VsJYEgkT)_d}WU+$;>@q@~m$XW`rmzt2WikQ=prk`9~`3)bzBXD%}jrI~XgDjIx zP*uHj@^2QiyDkba4C2E%{!h6Owe&R))>PywX0H^iV(HFI^PwmS-S}buUG~J=ZCTwQ z5j^G^7H1Y?l2|aXU+O&Dg)~mnAYO*=OURM{3gc5Og|Y5o{~hYGPs{=-I}I-OzJI`d z)-0Hx76h#M#QCqtnrb;`j_iyj1Zp(_E6}y^p`o#U1#Wa=$ebLQtgSh?^_Z@HVa*E| zT!hRq<2$mdUFd!*3(Hw?-b!5?pXwQWz#jBEp&KRx zEK6t$CM~RGsjF@Dx{U92RY=X+diYuNtGh58Vt`N7F>5wCgp;7HV}d@>R@LTN6mkrM z2hXK!rXO*vC0L2#I?PvaIc|6VgTc)&Ij;$|A_!_>=*w8{z=MZVn(VNkJQ~Z;RQSnkBT2fvs?ThV4xxndARGrA+Vghz z6>JanNhdFVersrkg<(I7KJu{ZkZQ0Xv>9y|oD~Y6u}>EVG|j@`p!&J&ur6O2{Q z%u8N`bN!0ysPB}>8Uq~O z8%F9?SRx86zyxf-2xSVGetmCu#~`wpSd2KC)@+iex}5&5(d->U!5D70cl__&Wk2M<`5X zM|Cb`r<;LBDm<&X?vHx9--nm5CHb$aifAZcS(O#$XSiy+sXn4uOb@ow>t&sX*v8eQ7}@a(8S^SAdC>=fKMJ^o3}|2NIoZO;>=4 zW~6{2-w;_6$O=QElPyzV0VZGrMkrIj5YmHuLu5%HE6kQDumBUVvBI9rE=j7`vg#^6 zkwRz7l*NMB%#7Y?zi{s)k~8~hkh2%!=7Jl!mtaC{0&!viU^@=EAJXEoLDISj`G%=3 z#emk=U_xvH-7WwOLfS7fS&^KHoSak@+71R_0VcXwX&Nw{BVCVyPQO-4Nulj3O^{eT zpEo`Y7=#>YB0GdkRs_hVn$Tvn9Sp!i7Y8&07^Y9b>D6Riz)A-25cY=p)FgSN{UVbU$(e~LbVFE{f)$A*c}r7| zVZfM%Ox8p@h5-Y7N6$608%FXN221LM0U>DyWgC(9i#%{7XC{K+I$$>R80nYzew)yd1cOT?Z_r56I!|szb!pYD*3QE;qrOc=fumI- zbS!Cm$Hn{m2~@;Fks=Cgs^E%P2j5E0chWz+Adgph=u)0bs)KJs36n%(9<9vSe;zKD UIGL*9Gynhq07*qoM6N<$f^2VJ1^@s6 diff --git a/icons/UI_Icons/Achievements/Mafia/obsessed.png b/icons/UI_Icons/Achievements/Mafia/obsessed.png deleted file mode 100644 index b92ba5b582ff709e3890282bca7e28989e380356..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2391 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�O(y zVjp~|tr4Fn?h7QQZ*=#J-+#`WwWYglX}kCHPfqsi%;}Q(@y*OP zbG~mli-H=Dd(sE9*xQ2pH*hXWnUou-cpY6%$yqvQya>-pCOf%g<8cMs^A zuqv#;>Z?5|WfjGr+-qvxX)x{*!G*d~oaSSbz6oYX zgZZVOO-zo_HOj`Gjj+*YUN$~CqMm`IWPZ-2=e3HG?^~|6|F-L>dstU3xxxbMm(!ji zgBvI5*Y{EPa-vMqmz?xvEH|@2T>!Kg0pP%BFB=?v%7(@V=-0{KNYsse)QxK$e(@E7 z>rjPDs3iqfSL0bG{PGa}j~`LiMAnj*x!i=5QNWyz6#eAV%5V4x9)Y8)Z?uP~8DyDk zf~snylYhOG-E~QTVGtkA@_)*OsG_gAu%-f6A$uin4NG;Vn-4`u=*ExxAF^I=r)716 zMDUbrSX@|&Nn+8!ey;ZH6w)|PgLnzP=a3}<6vn4$3S-^l{s+`$d(8qVTMaG_d~n!( z(JWY)76q)~%;jTbO;wyTM`l_Mfm%zz@^o!%XlSfofg7C|GA9Qnt16FdKc%Z*SPKFM z7a@Jj_?E0{FS_6A{8Cn!yIR-Arn&|nu}6I^W;d0x*5wr+FQkjUFfh!3k{iDgtgW0o zSn0}gHK@mf2FLo?gYMhRph<$DUE@;hdjCszr>>rtUI>>GH3oQ$S%3x0N(5LC+E84uo@Hm`(>*IRguDoUQdfu6oGsV0;Z}@U=!S^^ z%M#jxNegRP>S|lOF5^306;iXd9)1@6>R!x-7~tb|%$iLO;Us7qnV?U!Rke8*g&f1+ z!E-4a=tmsu30Azg4ht1rj{BW|V{r3J&MQN$2!dJ|`ZAU~@ZjN;CORxAm&P)*6>Szw zo(nae1qFtMH2q}>mOHWT!7ruIR(j4p{S8i!xD(rxbgqRlb4HVn70_PpPD z1KUG=(#cDo-x``>Vc5^2k6i3JBpWOUZARM#XZgZs9Mr`DO|vjKsD3V6Ip=9_yu2mq zTQt$q=)^F)^W-{>|8l}1dC63VcAAA@TNyj0*!)XYSPsov!gU>ZzSuBW6g}NarU|3+|y&-l_@pi|SDX;(&umK~KDPVXbjR6kt z4a4;+EFJ|GU;;K^gfaz8zrMG-V-Q(PEJhq_Ca=rrp{0DJHm$AT3a}wom?aVU7q!72mW2xzG}~o87Y(JQWavA#4!~6W76RF91($<6 z^c`~w#FXMLTEOPAAgkPZE*i4ffE78hW&o}gCTVM?EH+>jGyO1>1x3@cf=M8>8#jpD zvlUzx8?X{O4qinoM?=;aWnG~(SA95Tu>mV|NhA$K4Olz~VeeW#0Bgn_7MZc2sn!-P zi+WxNao1`VjB^DH0cN&>E5L?W@%l53`#Bfq^Ib(Mlqu4Rhuw;Y-FH~uNEfY)i~|CR zPAJ5?I9tJmR2>Mcrfnc@T(xcLy2%y^<}_p5g?mvLYvWcFaQf(9MBA4m_7xUCvl&Q zR%W#s41y)s&j1D?p_~k|4Qao~WK9-z4|SNS&eV1=(8bdf6qvcbD$ugFY<9<54njO5tazHDV->l9?*|u%ZP>CDSu`fqqCu6vygu zSY%gi@Zh6*9F`@#+eD7E~PBRM|)REl~EMkqcCPwI{o* zqPYBCQ|ob>QQx7Wz|ksUI+nD#fqZ@!Xy!&M=LY-A95SB)F)Jbt^fc407*qoM6N<$f`bfCTL1t6 diff --git a/icons/UI_Icons/Achievements/Mafia/town.png b/icons/UI_Icons/Achievements/Mafia/town.png new file mode 100644 index 0000000000000000000000000000000000000000..91ef49f4c8b88089465f44ab35919a1189e5dd9a GIT binary patch literal 2388 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 A*Z=?k diff --git a/icons/obj/mafia.dmi b/icons/obj/mafia.dmi index c44b80aba1118215bbb382cf89e3963ac5de5dfd..47d4080cea92b5cf966c625075bdc99e78c21ad3 100644 GIT binary patch literal 15828 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 IHVpcI0Q|q8w*UYD literal 13272 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

gh`%?3aKT~J5cq^avQ{IA~nNq}WI$s(d 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 LRFbF^`{MsU$GWQs