From 3dd9a6d7443bd438216c1a3cda48001ccdd793f8 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Thu, 21 Apr 2016 06:36:35 -0400 Subject: [PATCH] Updates Revolution --- code/game/gamemodes/game_mode.dm | 43 +-- code/game/gamemodes/revolution/revolution.dm | 306 +++++++++--------- .../gamemodes/revolution/rp_revolution.dm | 257 --------------- code/modules/admin/player_panel.dm | 9 - code/modules/clothing/glasses/glasses.dm | 51 +++ code/modules/clothing/glasses/hud.dm | 8 + icons/mob/eyes.dmi | Bin 11261 -> 11361 bytes icons/obj/clothing/glasses.dmi | Bin 8405 -> 8615 bytes paradise.dme | 1 - 9 files changed, 227 insertions(+), 448 deletions(-) delete mode 100644 code/game/gamemodes/revolution/rp_revolution.dm diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 4001eba338b..3cdb5b412f5 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -297,37 +297,38 @@ //Keeps track of all living heads// /////////////////////////////////// /datum/game_mode/proc/get_living_heads() - var/list/heads = list() + . = list() for(var/mob/living/carbon/human/player in mob_list) - if(player.stat!=2 && player.mind && (player.mind.assigned_role in command_positions)) - heads += player.mind - return heads + if(player.stat != DEAD && player.mind && (player.mind.assigned_role in command_positions)) + . |= player.mind -/datum/game_mode/proc/get_extra_living_heads() - var/list/heads = list() - var/list/alt_positions = list("Warden", "Magistrate", "Blueshield", "Nanotrasen Representative") - for(var/mob/living/carbon/human/player in mob_list) - if(player.stat!=2 && player.mind && (player.mind.assigned_role in alt_positions)) - heads += player.mind - return heads //////////////////////////// //Keeps track of all heads// //////////////////////////// /datum/game_mode/proc/get_all_heads() - var/list/heads = list() + . = list() for(var/mob/player in mob_list) if(player.mind && (player.mind.assigned_role in command_positions)) - heads += player.mind - return heads + . |= player.mind -/datum/game_mode/proc/get_extra_heads() - var/list/heads = list() - var/list/alt_positions = list("Warden", "Magistrate", "Blueshield", "Nanotrasen Representative") - for(var/mob/player in mob_list) - if(player.mind && (player.mind.assigned_role in alt_positions)) - heads += player.mind - return heads +////////////////////////////////////////////// +//Keeps track of all living security members// +////////////////////////////////////////////// +/datum/game_mode/proc/get_living_sec() + . = list() + for(var/mob/living/carbon/human/player in mob_list) + if(player.stat != DEAD && player.mind && (player.mind.assigned_role in security_positions)) + . |= player.mind + +//////////////////////////////////////// +//Keeps track of all security members// +//////////////////////////////////////// +/datum/game_mode/proc/get_all_sec() + . = list() + for(var/mob/living/carbon/human/player in mob_list) + if(player.mind && (player.mind.assigned_role in security_positions)) + . |= player.mind /datum/game_mode/proc/check_antagonists_topic(href, href_list[]) return 0 diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index bbf0e5c9c73..1cb05d4ac0d 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -4,31 +4,27 @@ // Just make sure the converter is a head before you call it! // To remove a rev (from brainwashing or w/e), call ticker.mode:remove_revolutionary(_THE_PLAYERS_MIND_), // this will also check they're not a head, so it can just be called freely -// If the rev icons start going wrong for some reason, ticker.mode:update_all_rev_icons() can be called to correct them. // If the game somtimes isn't registering a win properly, then ticker.mode.check_win() isn't being called somewhere. /datum/game_mode var/list/datum/mind/head_revolutionaries = list() var/list/datum/mind/revolutionaries = list() - var/extra_heads = 0 /datum/game_mode/revolution name = "revolution" config_tag = "revolution" restricted_jobs = list("Security Officer", "Warden", "Detective", "Internal Affairs Agent", "AI", "Cyborg","Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Brig Physician") - protected_jobs = list() - required_players = 4 - required_players_secret = 15 - required_enemies = 3 + required_players = 20 + required_players_secret = 20 + required_enemies = 1 recommended_enemies = 3 - - uplink_welcome = "Revolutionary Uplink Console:" - uplink_uses = 20 - var/finished = 0 - var/checkwin_counter = 0 + var/check_counter = 0 var/max_headrevs = 3 + var/list/datum/mind/heads_to_kill = list() + var/list/possible_revolutionaries = list() + /////////////////////////// //Announces the game type// /////////////////////////// @@ -41,17 +37,17 @@ //Gets the round setup, cancelling if there's not enough players at the start// /////////////////////////////////////////////////////////////////////////////// /datum/game_mode/revolution/pre_setup() + possible_revolutionaries = get_players_for_role(ROLE_REV) if(config.protect_roles_from_antagonist) restricted_jobs += protected_jobs - var/list/datum/mind/possible_headrevs = get_players_for_role(ROLE_REV) for (var/i=1 to max_headrevs) - if(possible_headrevs.len==0) + if(possible_revolutionaries.len==0) break - var/datum/mind/lenin = pick(possible_headrevs) - possible_headrevs -= lenin + var/datum/mind/lenin = pick(possible_revolutionaries) + possible_revolutionaries -= lenin head_revolutionaries += lenin lenin.restricted_roles = restricted_jobs @@ -63,22 +59,24 @@ /datum/game_mode/revolution/post_setup() var/list/heads = get_living_heads() - if(num_players_started() >= 30) - heads += get_extra_living_heads() - extra_heads = 1 + var/list/sec = get_living_sec() + var/weighted_score = min(max(round(heads.len - ((8 - sec.len) / 3)),1),max_headrevs) + + while(weighted_score < head_revolutionaries.len) //das vi danya + var/datum/mind/trotsky = pick(head_revolutionaries) + possible_revolutionaries += trotsky + head_revolutionaries -= trotsky + update_rev_icons_removed(trotsky) for(var/datum/mind/rev_mind in head_revolutionaries) + log_game("[rev_mind.key] (ckey) has been selected as a head rev") for(var/datum/mind/head_mind in heads) - var/datum/objective/mutiny/rev_obj = new - rev_obj.owner = rev_mind - rev_obj.target = head_mind - rev_obj.explanation_text = "Assassinate [head_mind.name], the [head_mind.assigned_role]." - rev_mind.objectives += rev_obj + mark_for_death(rev_mind, head_mind) - // equip_traitor(rev_mind.current, 1) //changing how revs get assigned their uplink so they can get PDA uplinks. --NEO - // Removing revolutionary uplinks. -Pete - equip_revolutionary(rev_mind.current) - update_rev_icons_added(rev_mind) + spawn(rand(10,100)) + // equip_traitor(rev_mind.current, 1) //changing how revs get assigned their uplink so they can get PDA uplinks. --NEO + // Removing revolutionary uplinks. -Pete + equip_revolutionary(rev_mind.current) for(var/datum/mind/rev_mind in head_revolutionaries) greet_revolutionary(rev_mind) @@ -89,71 +87,29 @@ /datum/game_mode/revolution/process() - checkwin_counter++ - if(checkwin_counter >= 5) + check_counter++ + if(check_counter >= 5) if(!finished) + check_heads() ticker.mode.check_win() - checkwin_counter = 0 + check_counter = 0 return 0 -/proc/get_rev_mode() - if(!ticker || !istype(ticker.mode, /datum/game_mode/revolution)) - return null -/** - * LateSpawn hook. - * Called in newplayer.dm when a humanoid character joins the round after it started. - * Parameters: var/mob/living/carbon/human, var/rank - */ -/hook/latespawn/proc/add_latejoiner_heads(var/mob/living/carbon/human/H) - var/datum/game_mode/revolution/mode = get_rev_mode() - if (!mode) return 1 - - var/list/heads = list() - var/list/alt_positions = list("Warden", "Magistrate", "Blueshield", "Nanotrasen Representative") - - if(H.stat!=2 && H.mind && (H.mind.assigned_role in command_positions)) - heads += H - - if(mode.extra_heads) - if(H.stat!=2 && H.mind && (H.mind.assigned_role in alt_positions)) - heads += H - - for(var/datum/mind/rev_mind in mode.head_revolutionaries) - for(var/datum/mind/head_mind in heads) - var/datum/objective/mutiny/rev_obj = new - rev_obj.owner = rev_mind - rev_obj.target = head_mind - rev_obj.explanation_text = "Assassinate [head_mind.name], the [head_mind.assigned_role]." - rev_mind.objectives += rev_obj - to_chat(rev_mind.current, "Additional Objective: Assassinate [head_mind.name], the [head_mind.assigned_role].") - - for(var/datum/mind/rev_mind in mode.revolutionaries) - for(var/datum/mind/head_mind in heads) - var/datum/objective/mutiny/rev_obj = new - rev_obj.owner = rev_mind - rev_obj.target = head_mind - rev_obj.explanation_text = "Assassinate [head_mind.name], the [head_mind.assigned_role]." - rev_mind.objectives += rev_obj - to_chat(rev_mind.current, "Additional Objective: Assassinate [head_mind.name], the [head_mind.assigned_role].") - - -/datum/game_mode/proc/forge_revolutionary_objectives(var/datum/mind/rev_mind) +/datum/game_mode/proc/forge_revolutionary_objectives(datum/mind/rev_mind) var/list/heads = get_living_heads() - if(num_players_started() >= 30) - heads += get_extra_living_heads() - extra_heads = 1 for(var/datum/mind/head_mind in heads) var/datum/objective/mutiny/rev_obj = new rev_obj.owner = rev_mind rev_obj.target = head_mind - rev_obj.explanation_text = "Assassinate [head_mind.name], the [head_mind.assigned_role]." + rev_obj.explanation_text = "Assassinate or exile [head_mind.name], the [head_mind.assigned_role]." rev_mind.objectives += rev_obj -/datum/game_mode/proc/greet_revolutionary(var/datum/mind/rev_mind, var/you_are=1) +/datum/game_mode/proc/greet_revolutionary(datum/mind/rev_mind, you_are=1) var/obj_count = 1 + update_rev_icons_added(rev_mind) if (you_are) - to_chat(rev_mind.current, "\blue You are a member of the revolutionaries' leadership!") + to_chat(rev_mind.current, "You are a member of the revolutionaries' leadership!") for(var/datum/objective/objective in rev_mind.objectives) to_chat(rev_mind.current, "Objective #[obj_count]: [objective.explanation_text]") rev_mind.special_role = "Head Revolutionary" @@ -173,6 +129,8 @@ var/obj/item/device/flash/T = new(mob) + var/obj/item/toy/crayon/spraycan/R = new(mob) + var/obj/item/clothing/glasses/hud/security/chameleon/C = new(mob) var/list/slots = list ( "backpack" = slot_in_backpack, @@ -182,13 +140,67 @@ "right hand" = slot_r_hand, ) var/where = mob.equip_in_one_of_slots(T, slots) + var/where2 = mob.equip_in_one_of_slots(C, slots) + mob.equip_in_one_of_slots(R,slots) + + mob.update_icons() + + if (!where2) + to_chat(mob, "The Syndicate were unfortunately unable to get you a chameleon security HUD.") + else + to_chat(mob, "The chameleon security HUD in your [where2] will help you keep track of who is loyalty-implanted, and unable to be recruited.") + if (!where) to_chat(mob, "The Syndicate were unfortunately unable to get you a flash.") else to_chat(mob, "The flash in your [where] will help you to persuade the crew to join your cause.") - mob.update_icons() return 1 +///////////////////////////////// +//Gives head revs their targets// +///////////////////////////////// +/datum/game_mode/revolution/proc/mark_for_death(datum/mind/rev_mind, datum/mind/head_mind) + var/datum/objective/mutiny/rev_obj = new + rev_obj.owner = rev_mind + rev_obj.target = head_mind + rev_obj.explanation_text = "Assassinate [head_mind.name], the [head_mind.assigned_role]." + rev_mind.objectives += rev_obj + heads_to_kill += head_mind + +//////////////////////////////////////////// +//Checks if new heads have joined midround// +//////////////////////////////////////////// +/datum/game_mode/revolution/proc/check_heads() + var/list/heads = get_all_heads() + var/list/sec = get_all_sec() + if(heads_to_kill.len < heads.len) + var/list/new_heads = heads - heads_to_kill + for(var/datum/mind/head_mind in new_heads) + for(var/datum/mind/rev_mind in head_revolutionaries) + mark_for_death(rev_mind, head_mind) + + if(head_revolutionaries.len < max_headrevs && head_revolutionaries.len < round(heads.len - ((8 - sec.len) / 3))) + latejoin_headrev() + +/////////////////////////////// +//Adds a new headrev midround// +/////////////////////////////// +/datum/game_mode/revolution/proc/latejoin_headrev() + if(revolutionaries) //Head Revs are not in this list + var/list/promotable_revs = list() + for(var/datum/mind/khrushchev in revolutionaries) + if(khrushchev.current && khrushchev.current.client && khrushchev.current.stat != DEAD) + if(ROLE_REV in khrushchev.current.client.prefs.be_special) + promotable_revs += khrushchev + if(promotable_revs.len) + var/datum/mind/stalin = pick(promotable_revs) + revolutionaries -= stalin + head_revolutionaries += stalin + log_game("[stalin.key] (ckey) has been promoted to a head rev") + equip_revolutionary(stalin.current) + forge_revolutionary_objectives(stalin) + greet_revolutionary(stalin) + ////////////////////////////////////// //Checks if the revs have won or not// ////////////////////////////////////// @@ -205,9 +217,16 @@ /datum/game_mode/revolution/check_finished() if(config.continuous_rounds) if(finished != 0) - if(shuttle_master && shuttle_master.emergencyNoEscape) - shuttle_master.emergencyNoEscape = 0 - return finished != 0 + shuttle_master.emergencyNoEscape = 0 + if(shuttle_master.emergency.mode == SHUTTLE_STRANDED) + shuttle_master.emergency.mode = SHUTTLE_DOCKED + shuttle_master.emergency.timer = world.time + command_announcement.Announce("Hostile enviroment resolved. You have 3 minutes to board the Emergency Shuttle.", null, 'sound/AI/shuttledock.ogg') + return ..() + if(finished != 0) + return 1 + else + return ..() /////////////////////////////////////////////////// //Deals with converting players to the revolution// @@ -216,13 +235,18 @@ if(rev_mind.assigned_role in command_positions) return 0 var/mob/living/carbon/human/H = rev_mind.current//Check to see if the potential rev is implanted - for(var/obj/item/weapon/implant/loyalty/L in H)//Checking that there is a loyalty implant in the contents - if(L.imp_in == H)//Checking that it's actually implanted - return 0 + if(isloyal(H)) + return 0 if((rev_mind in revolutionaries) || (rev_mind in head_revolutionaries)) return 0 revolutionaries += rev_mind - to_chat(rev_mind.current, "\red You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!") + if(iscarbon(rev_mind.current)) + var/mob/living/carbon/carbon_mob = rev_mind.current + carbon_mob.silent = max(carbon_mob.silent, 5) + carbon_mob.flash_eyes(1, 1) + rev_mind.current.Stun(5) + to_chat(rev_mind.current, " You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!") + rev_mind.current.attack_log += "\[[time_stamp()]\] Has been converted to the revolution!" rev_mind.special_role = "Revolutionary" update_rev_icons_added(rev_mind) if(jobban_isbanned(rev_mind.current, ROLE_REV)) @@ -232,15 +256,23 @@ //Deals with players being converted from the revolution (Not a rev anymore)// // Modified to handle borged MMIs. Accepts another var if the target is being borged at the time -- Polymorph. ////////////////////////////////////////////////////////////////////////////// /datum/game_mode/proc/remove_revolutionary(datum/mind/rev_mind , beingborged) - if(rev_mind in revolutionaries) + var/remove_head = 0 + if(beingborged && (rev_mind in head_revolutionaries)) + head_revolutionaries -= rev_mind + remove_head = 1 + + if((rev_mind in revolutionaries) || remove_head) revolutionaries -= rev_mind rev_mind.special_role = null + rev_mind.current.attack_log += "\[[time_stamp()]\] Has renounced the revolution!" if(beingborged) - to_chat(rev_mind.current, "\red The frame's firmware detects and deletes your neural reprogramming! You remember nothing from the moment you were flashed until now.") - message_admins("[key_name_admin(rev_mind.current)] has been borged while being a member of the revolution.") + to_chat(rev_mind.current, "The frame's firmware detects and deletes your neural reprogramming! You remember nothing[remove_head ? "." : " but the name of the one who flashed you."]") + message_admins("[key_name_admin(rev_mind.current)] ? (FLW) has been borged while being a [remove_head ? "leader" : " member"] of the revolution.") + else - to_chat(rev_mind.current, "\red You have been brainwashed! You are no longer a revolutionary! Your memory is hazy from the time you were a rebel...the only thing you remember is the name of the one who brainwashed you...") + rev_mind.current.Paralyse(5) + to_chat(rev_mind.current, "You have been brainwashed! You are no longer a revolutionary! Your memory is hazy from the time you were a rebel...the only thing you remember is the name of the one who brainwashed you...") update_rev_icons_removed(rev_mind) for(var/mob/living/M in view(rev_mind.current)) @@ -250,7 +282,6 @@ else to_chat(M, "[rev_mind.current] looks like they just remembered their real allegiance!") - ///////////////////////////////////// //Adds the rev hud to a new convert// ///////////////////////////////////// @@ -266,6 +297,7 @@ var/datum/atom_hud/antag/revhud = huds[ANTAG_HUD_REV] revhud.leave_hud(rev_mind.current) set_antag_hud(rev_mind.current, null) + ////////////////////////// //Checks for rev victory// ////////////////////////// @@ -283,7 +315,7 @@ /datum/game_mode/revolution/proc/check_heads_victory() for(var/datum/mind/rev_mind in head_revolutionaries) var/turf/T = get_turf(rev_mind.current) - if((rev_mind) && (rev_mind.current) && (rev_mind.current.stat != 2) && rev_mind.current.client && T && (T.z in config.station_levels)) + if((rev_mind) && (rev_mind.current) && (rev_mind.current.stat != 2) && rev_mind.current.client && T && (T.z == ZLEVEL_STATION)) if(ishuman(rev_mind.current)) return 0 return 1 @@ -294,96 +326,50 @@ /datum/game_mode/revolution/declare_completion() if(finished == 1) feedback_set_details("round_end_result","win - heads killed") - to_chat(world, "\red The heads of staff were killed or abandoned the station! The revolutionaries win!") + to_chat(world, "The heads of staff were killed or exiled! The revolutionaries win!") else if(finished == 2) feedback_set_details("round_end_result","loss - rev heads killed") - to_chat(world, "\red The heads of staff managed to stop the revolution!") + to_chat(world, "The heads of staff managed to stop the revolution!") ..() return 1 /datum/game_mode/proc/auto_declare_completion_revolution() var/list/targets = list() - if(head_revolutionaries.len || istype(ticker.mode,/datum/game_mode/revolution)) - var/text = "The head revolutionaries were:" - + var/num_revs = 0 + var/num_survivors = 0 + for(var/mob/living/carbon/survivor in living_mob_list) + if(survivor.ckey) + num_survivors++ + if(survivor.mind) + if((survivor.mind in head_revolutionaries) || (survivor.mind in revolutionaries)) + num_revs++ + if(num_survivors) + to_chat(world, "[TAB]Command's Approval Rating: [100 - round((num_revs/num_survivors)*100, 0.1)]%") // % of loyal crew + var/text = "
The head revolutionaries were:" for(var/datum/mind/headrev in head_revolutionaries) - text += "
[headrev.key] was [headrev.name] (" - if(headrev.current) - if(headrev.current.stat == DEAD) - text += "died" - else if(!(headrev.current.z in config.station_levels)) - text += "fled the station" - else - text += "survived the revolution" - if(headrev.current.real_name != headrev.name) - text += " as [headrev.current.real_name]" - else - text += "body destroyed" - text += ")" - - for(var/datum/objective/mutiny/objective in headrev.objectives) - targets |= objective.target - + text += printplayer(headrev, 1) + text += "
" to_chat(world, text) if(revolutionaries.len || istype(ticker.mode,/datum/game_mode/revolution)) - var/text = "The revolutionaries were:" - + var/text = "
The revolutionaries were:" for(var/datum/mind/rev in revolutionaries) - text += "
[rev.key] was [rev.name] (" - if(rev.current) - if(rev.current.stat == DEAD) - text += "died" - else if(!(rev.current.z in config.station_levels)) - text += "fled the station" - else - text += "survived the revolution" - if(rev.current.real_name != rev.name) - text += " as [rev.current.real_name]" - else - text += "body destroyed" - text += ")" - + text += printplayer(rev, 1) + text += "
" to_chat(world, text) - if( head_revolutionaries.len || revolutionaries.len || istype(ticker.mode,/datum/game_mode/revolution) ) - var/text = "The heads of staff were:" - + var/text = "
The heads of staff were:" var/list/heads = get_all_heads() - if(extra_heads) - heads += get_extra_heads() for(var/datum/mind/head in heads) var/target = (head in targets) if(target) - text += "" - text += "
[head.key] was [head.name] (" - if(head.current) - if(head.current.stat == DEAD) - text += "died" - else if(!(head.current.z in config.station_levels)) - text += "fled the station" - else - text += "survived the revolution" - if(head.current.real_name != head.name) - text += " as [head.current.real_name]" - else - text += "body destroyed" - text += ")" - if(target) - text += "
" - + text += "Target" + text += printplayer(head, 1) + text += "
" to_chat(world, text) -/proc/is_convertable_to_rev(datum/mind/mind) - return istype(mind) && \ - istype(mind.current, /mob/living/carbon/human) && \ - !(mind.assigned_role in command_positions) && \ - !(mind.assigned_role in list("Security Officer", "Detective", "Warden", "Nanotrasen Representative")) - - - /datum/game_mode/revolution/set_scoreboard_gvars() var/foecount = 0 for(var/datum/mind/M in ticker.mode.head_revolutionaries) diff --git a/code/game/gamemodes/revolution/rp_revolution.dm b/code/game/gamemodes/revolution/rp_revolution.dm deleted file mode 100644 index 78d210159a8..00000000000 --- a/code/game/gamemodes/revolution/rp_revolution.dm +++ /dev/null @@ -1,257 +0,0 @@ -// BS12's less violent revolution mode -// Isn't this basically mutiny but without any real reason - -/datum/game_mode/revolution/rp_revolution - name = "rp-revolution" - config_tag = "rp-revolution" - required_players = 4 - required_players_secret = 12 - required_enemies = 3 - recommended_enemies = 3 - - uplink_welcome = "Revolutionary Uplink Console:" - uplink_uses = 10 - - newscaster_announcements = /datum/news_announcement/revolution_inciting_event - - var/last_command_report = 0 - var/list/heads = list() - var/tried_to_add_revheads = 0 - -/////////////////////////////////////////////////////////////////////////////// -//Gets the round setup, cancelling if there's not enough players at the start// -/////////////////////////////////////////////////////////////////////////////// -/datum/game_mode/revolution/rp_revolution/pre_setup() - - if(config.protect_roles_from_antagonist) - restricted_jobs += protected_jobs - - var/num_players = num_players() - max_headrevs = max(num_players / 4, 3) - recommended_enemies = max_headrevs - - var/list/datum/mind/possible_headrevs = get_players_for_role(ROLE_REV) - - var/head_check = 0 - for(var/mob/new_player/player in player_list) - if(player.mind.assigned_role in command_positions) - head_check = 1 - break - - for (var/i=1 to max_headrevs) - if (possible_headrevs.len==0) - break - var/datum/mind/lenin = pick(possible_headrevs) - possible_headrevs -= lenin - head_revolutionaries += lenin - lenin.restricted_roles = restricted_jobs - - if((head_revolutionaries.len==0)||(!head_check)) - return 0 - - return 1 - - -/datum/game_mode/revolution/rp_revolution/post_setup() - heads = get_living_heads() - - for(var/datum/mind/rev_mind in head_revolutionaries) - for(var/datum/mind/head_mind in heads) - var/datum/objective/mutiny/rp/rev_obj = new - rev_obj.owner = rev_mind - rev_obj.target = head_mind - rev_obj.explanation_text = "Assassinate, convert or capture [head_mind.name], the [head_mind.assigned_role]." - rev_mind.objectives += rev_obj - - update_rev_icons_added(rev_mind) - - for(var/datum/mind/rev_mind in head_revolutionaries) - greet_revolutionary(rev_mind) - rev_mind.current.verbs += /mob/living/carbon/human/proc/RevConvert - - modePlayer += head_revolutionaries - - -/datum/game_mode/revolution/rp_revolution/greet_revolutionary(var/datum/mind/rev_mind, var/you_are=1) - var/obj_count = 1 - if (you_are) - to_chat(rev_mind.current, "\blue You are a member of the revolutionaries' leadership!") - for(var/datum/objective/objective in rev_mind.objectives) - to_chat(rev_mind.current, "Objective #[obj_count]: [objective.explanation_text]") - rev_mind.special_role = "Head Revolutionary" - obj_count++ - - // Show each head revolutionary up to 3 candidates - var/list/already_considered = list() - for(var/i = 0, i < 2, i++) - var/mob/rev_mob = rev_mind.current - already_considered += rev_mob - // Tell them about people they might want to contact. - var/mob/living/carbon/human/M = get_nt_opposed() - if(M && !(M.mind in head_revolutionaries) && !(M in already_considered)) - to_chat(rev_mob, "We have received credible reports that [M.real_name] might be willing to help our cause. If you need assistance, consider contacting them.") - rev_mob.mind.store_memory("Potential Collaborator: [M.real_name]") - -/////////////////////////////////////////////////// -//Deals with converting players to the revolution// -/////////////////////////////////////////////////// -/datum/game_mode/revolution/rp_revolution/add_revolutionary(datum/mind/rev_mind) - // overwrite this func to make it so even heads can be converted - var/mob/living/carbon/human/H = rev_mind.current//Check to see if the potential rev is implanted - if(!is_convertible(H)) - return 0 - if((rev_mind in revolutionaries) || (rev_mind in head_revolutionaries)) - return 0 - revolutionaries += rev_mind - to_chat(rev_mind.current, "\red You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill, capture or convert the heads to win the revolution!") - rev_mind.special_role = "Revolutionary" - update_rev_icons_added(rev_mind) - return 1 - -///////////////////////////// -//Checks for a head victory// -///////////////////////////// -/datum/game_mode/revolution/rp_revolution/check_heads_victory() - for(var/datum/mind/rev_mind in head_revolutionaries) - var/turf/T = get_turf(rev_mind.current) - if(rev_mind.current.stat != 2) - // TODO: add a similar check that also checks whether they're without ID in the brig.. - // probably wanna export this stuff into a separate function for use by both - // revs and heads - //assume that only carbon mobs can become rev heads for now - if(!rev_mind.current:handcuffed && T && (T.z in config.station_levels)) - return 0 - return 1 - -/////////////////////////// -//Announces the game type// -/////////////////////////// -/datum/game_mode/revolution/rp_revolution/announce() - to_chat(world, "The current game mode is - Revolution!") - to_chat(world, "Some crewmembers are attempting to start a revolution!") - - -////////////////////////////////////////////////////////////////////// -//Announces the end of the game with all relavent information stated// -////////////////////////////////////////////////////////////////////// -/datum/game_mode/revolution/rp_revolution/declare_completion() - if(finished == 1) - feedback_set_details("round_end_result","win - heads overthrown") - to_chat(world, "\red The heads of staff were overthrown! The revolutionaries win!") - else if(finished == 2) - feedback_set_details("round_end_result","loss - revolution stopped") - to_chat(world, "\red The heads of staff managed to stop the revolution!") - ..() - return 1 - -/datum/game_mode/revolution/proc/is_convertible(mob/M) - for(var/obj/item/weapon/implant/loyalty/L in M)//Checking that there is a loyalty implant in the contents - if(L.imp_in == M)//Checking that it's actually implanted - return 0 - - return 1 - -/mob/living/carbon/human/proc/RevConvert() - set name = "Rev-Convert" - set category = "IC" - var/list/Possible = list() - for (var/mob/living/carbon/human/P in oview(src)) - if(!stat && P.client && P.mind && !P.mind.special_role) - Possible += P - if(!Possible.len) - to_chat(src, "\red There doesn't appear to be anyone available for you to convert here.") - return - var/mob/living/carbon/human/M = input("Select a person to convert", "Viva la revolution!", null) as mob in Possible - if(((src.mind in ticker.mode:head_revolutionaries) || (src.mind in ticker.mode:revolutionaries))) - if((M.mind in ticker.mode:head_revolutionaries) || (M.mind in ticker.mode:revolutionaries)) - to_chat(src, "\red [M] is already be a revolutionary!") - else if(!ticker.mode:is_convertible(M)) - to_chat(src, "\red [M] is implanted with a loyalty implant - Remove it first!") - else - if(world.time < M.mind.rev_cooldown) - to_chat(src, "\red Wait five seconds before reconversion attempt.") - return - to_chat(src, "\red Attempting to convert [M]...") - log_admin("[src]([src.ckey]) attempted to convert [M].") - message_admins("\red [src]([src.ckey]) attempted to convert [M].") - var/choice = alert(M,"Asked by [src]: Do you want to join the revolution?","Align Thyself with the Revolution!","No!","Yes!") - if(choice == "Yes!") - ticker.mode:add_revolutionary(M.mind) - to_chat(M, "\blue You join the revolution!") - to_chat(src, "\blue [M] joins the revolution!") - else if(choice == "No!") - to_chat(M, "\red You reject this traitorous cause!") - to_chat(src, "\red [M] does not support the revolution!") - M.mind.rev_cooldown = world.time+50 - -/datum/game_mode/revolution/rp_revolution/process() - // only perform rev checks once in a while - if(tried_to_add_revheads < world.time) - tried_to_add_revheads = world.time+50 - var/active_revs = 0 - for(var/datum/mind/rev_mind in head_revolutionaries) - if(rev_mind.current.client && rev_mind.current.client.inactivity <= 10*60*20) // 20 minutes inactivity are OK - active_revs++ - - if(active_revs == 0) - log_debug("There are zero active heads of revolution, trying to add some..") - var/added_heads = 0 - for(var/mob/living/carbon/human/H in world) if(H.client && H.mind && H.client.inactivity <= 10*60*20 && H.mind in revolutionaries) - head_revolutionaries += H.mind - for(var/datum/mind/head_mind in heads) - var/datum/objective/mutiny/rp/rev_obj = new - rev_obj.owner = H.mind - rev_obj.target = head_mind - rev_obj.explanation_text = "Assassinate or capture [head_mind.name], the [head_mind.assigned_role]." - H.mind.objectives += rev_obj - - update_rev_icons_added(H.mind) - H.verbs += /mob/living/carbon/human/proc/RevConvert - - to_chat(H, "\red Congratulations, yer heads of revolution are all gone now, so yer earned yourself a promotion.") - added_heads = 1 - break - - if(added_heads) - log_admin("Managed to add new heads of revolution.") - message_admins("Managed to add new heads of revolution.") - else - log_admin("Unable to add new heads of revolution.") - message_admins("Unable to add new heads of revolution.") - tried_to_add_revheads = world.time + 6000 // wait 10 minutes - - if(last_command_report == 0 && world.time >= 10 * 60 * 10) - src.command_report("We are regrettably announcing that your performance has been disappointing, and we are thus forced to cut down on financial support to your station. To achieve this, the pay of all personnal, except the Heads of Staff, has been halved.") - last_command_report = 1 - else if(last_command_report == 1 && world.time >= 10 * 60 * 30) - src.command_report("Statistics hint that a high amount of leisure time, and associated activities, are responsible for the poor performance of many of our stations. You are to bolt and close down any leisure facilities, such as the holodeck, the theatre and the bar. Food can be distributed through vendors and the kitchen.") - last_command_report = 2 - else if(last_command_report == 2 && world.time >= 10 * 60 * 60) - src.command_report("It is reported that merely closing down leisure facilities has not been successful. You and your Heads of Staff are to ensure that all crew are working hard, and not wasting time or energy. Any crew caught off duty without leave from their Head of Staff are to be warned, and on repeated offence, to be brigged until the next transfer shuttle arrives, which will take them to facilities where they can be of more use.") - last_command_report = 3 - - return ..() - -/datum/game_mode/revolution/rp_revolution/proc/command_report(message) - for (var/obj/machinery/computer/communications/comm in world) - if (!(comm.stat & (BROKEN | NOPOWER)) && comm.prints_intercept) - var/obj/item/weapon/paper/intercept = new /obj/item/weapon/paper( comm.loc ) - intercept.name = "paper- 'Cent. Com. Announcement'" - intercept.info = message - - comm.messagetitle.Add("Cent. Com. Announcement") - comm.messagetext.Add(message) - to_chat(world, sound('sound/AI/commandreport.ogg')) - -/datum/game_mode/revolution/rp_revolution/latespawn(mob/M) - if(M.mind.assigned_role in command_positions) - log_debug("Adding head kill/capture/convert objective for [M.name]") - heads += M - - for(var/datum/mind/rev_mind in head_revolutionaries) - var/datum/objective/mutiny/rp/rev_obj = new - rev_obj.owner = rev_mind - rev_obj.target = M.mind - rev_obj.explanation_text = "Assassinate, convert or capture [M.real_name], the [M.mind.assigned_role]." - rev_mind.objectives += rev_obj - to_chat(rev_mind.current, "\red A new Head of Staff, [M.real_name], the [M.mind.assigned_role] has appeared. Your objectives have been updated.") diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 2a4a3e9cdeb..766cee622a0 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -466,15 +466,6 @@ dat += "[mob_loc.loc]" else dat += "Head not found!" - if(ticker.mode.num_players_started() >= 30) - for(var/datum/mind/N in ticker.mode.get_extra_living_heads()) - var/mob/M = N.current - if(M) - dat += check_antagonists_line(M) - var/turf/mob_loc = get_turf(M) - dat += "[mob_loc.loc]" - else - dat += "Head not found!" dat += "" if(istype(ticker.mode, /datum/game_mode/blob)) diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 521b934d34a..eaf5df014df 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -439,3 +439,54 @@ icon_state = "cybereye-red" item_state = "eyepatch" flags = NODROP + +/obj/item/clothing/glasses/proc/chameleon(var/mob/user) + var/input_glasses = input(user, "Choose a piece of eyewear to disguise as.", "Choose glasses style.") as null|anything in list("Sunglasses", "Medical HUD", "Mesons", "Science Goggles", "Glasses", "Security Sunglasses","Eyepatch","Welding","Gar") + + if(user && src in user.contents) + switch(input_glasses) + if("Sunglasses") + desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks many flashes." + name = "sunglasses" + icon_state = "sun" + item_state = "sunglasses" + if("Medical HUD") + name = "Health Scanner HUD" + desc = "A heads-up display that scans the humans in view and provides accurate data about their health status." + icon_state = "healthhud" + item_state = "healthhud" + if("Mesons") + name = "Optical Meson Scanner" + desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition." + icon_state = "meson" + item_state = "meson" + if("Science Goggles") + name = "Science Goggles" + desc = "A pair of snazzy goggles used to protect against chemical spills." + icon_state = "purple" + item_state = "glasses" + if("Glasses") + name = "Prescription Glasses" + desc = "Made by Nerd. Co." + icon_state = "glasses" + item_state = "glasses" + if("Security Sunglasses") + name = "HUDSunglasses" + desc = "Sunglasses with a HUD." + icon_state = "sunhud" + item_state = "sunglasses" + if("Eyepatch") + name = "eyepatch" + desc = "Yarr." + icon_state = "eyepatch" + item_state = "eyepatch" + if("Welding") + name = "welding goggles" + desc = "Protects the eyes from welders; approved by the mad scientist association." + icon_state = "welding-g" + item_state = "welding-g" + if("Gar") + desc = "Just who the hell do you think I am?!" + name = "gar glasses" + icon_state = "gar" + item_state = "gar" \ No newline at end of file diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index f0bfc6cef28..a8c4c639491 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -68,6 +68,14 @@ flash_protect = 1 HUDType = DATA_HUD_SECURITY_ADVANCED +/obj/item/clothing/glasses/hud/security/chameleon + name = "Chamleon Security HUD" + desc = "A stolen security HUD integrated with Syndicate chameleon technology. Toggle to disguise the HUD. Provides flash protection." + flash_protect = 1 + +/obj/item/clothing/glasses/hud/security/chameleon/attack_self(mob/user) + chameleon(user) + /obj/item/clothing/glasses/hud/security/jensenshades name = "augmented shades" desc = "Polarized bioneural eyewear, designed to augment your vision." diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi index d7cfb2d18893364800ef56add0f9274a017ae937..28399ab1ce124627312f901ea2a4a709c1fbcb5f 100644 GIT binary patch literal 11361 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 literal 11261 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 NC3!Wu8X1eo{{c8jVe|k1 literal 8405 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 diff --git a/paradise.dme b/paradise.dme index 2b31b12a8c4..9570aee485f 100644 --- a/paradise.dme +++ b/paradise.dme @@ -444,7 +444,6 @@ #include "code\game\gamemodes\nuclear\nuclearbomb.dm" #include "code\game\gamemodes\nuclear\pinpointer.dm" #include "code\game\gamemodes\revolution\revolution.dm" -#include "code\game\gamemodes\revolution\rp_revolution.dm" #include "code\game\gamemodes\shadowling\ascendant_shadowling.dm" #include "code\game\gamemodes\shadowling\shadowling.dm" #include "code\game\gamemodes\shadowling\shadowling_abilities.dm"