diff --git a/_maps/shuttles/infiltrator_cutter.dmm b/_maps/shuttles/infiltrator_cutter.dmm index a37ff62f9cc3..f2a3b0126e7e 100644 --- a/_maps/shuttles/infiltrator_cutter.dmm +++ b/_maps/shuttles/infiltrator_cutter.dmm @@ -7,7 +7,7 @@ dir = 2 }, /obj/machinery/door/airlock/external{ - id_tag = "syndicatecutter_bolt_port" + id_tag = "bolt_port" }, /obj/docking_port/mobile{ callTime = 150; @@ -69,7 +69,7 @@ dir = 1 }, /obj/machinery/door/airlock/external{ - id_tag = "syndicatecutter_bolt_port" + id_tag = "bolt_port" }, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/plating, @@ -204,13 +204,6 @@ /area/shuttle/yogs/stealthcruiser) "aC" = ( /obj/structure/table, -/obj/item/circular_saw, -/obj/item/scalpel{ - pixel_y = 12 - }, -/obj/item/cautery{ - pixel_x = 4 - }, /obj/machinery/light/small{ dir = 8 }, @@ -312,8 +305,7 @@ /area/shuttle/yogs/stealthcruiser) "aN" = ( /obj/structure/table, -/obj/item/retractor, -/obj/item/hemostat, +/obj/item/storage/backpack/duffelbag/med/surgery, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, /area/shuttle/yogs/stealthcruiser) @@ -757,7 +749,7 @@ }, /obj/effect/mapping_helpers/airlock/locked, /obj/machinery/door/airlock/external{ - id_tag = "syndicatecutter_bolt_starboard" + id_tag = "bolt_starboard" }, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/plating, @@ -780,7 +772,7 @@ }, /obj/effect/mapping_helpers/airlock/locked, /obj/machinery/door/airlock/external{ - id_tag = "syndicatecutter_bolt_starboard" + id_tag = "bolt_starboard" }, /obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /turf/open/floor/plating, diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index 3a830612c3ca..324b419f6c09 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -102,15 +102,15 @@ /datum/action/chameleon_outfit/proc/select_outfit(mob/user) if(!user || !IsAvailable(feedback = FALSE)) return FALSE + var/datum/outfit/O var/selected = tgui_input_list(user, "Select outfit to change into", "Chameleon Outfit", outfit_options) if(!IsAvailable(feedback = FALSE) || QDELETED(src) || QDELETED(user)) return FALSE var/outfit_type = outfit_options[selected] if(!outfit_type) return FALSE - var/datum/outfit/O = new outfit_type() + O = new outfit_type() var/list/outfit_types = O.get_chameleon_disguise_info() - for(var/V in user.chameleon_item_actions) var/datum/action/item_action/chameleon/change/A = V var/done = FALSE @@ -143,6 +143,87 @@ return TRUE +/datum/action/cooldown/chameleon_copy + name = "Copy person" + button_icon_state = "default" //Temporary, just to test it works + var/target_range = 3 + var/syndicate = FALSE + var/active = FALSE + var/copying = FALSE + var/in_use = FALSE + +/datum/action/cooldown/chameleon_copy/InterceptClickOn(mob/living/caller, params, atom/target) + click_with_power(target) + +/datum/action/cooldown/chameleon_copy/Grant(mob/M) + if(syndicate) + owner_has_control = is_syndicate(M) + . = ..() + +/datum/action/cooldown/chameleon_copy/proc/toggle_button() + if(active) + active = FALSE + background_icon_state = "bg_default" + build_all_button_icons() + unset_click_ability(owner) + return FALSE + active = TRUE + background_icon_state = "bg_default_on" + build_all_button_icons() + set_click_ability(owner) + +/datum/action/cooldown/chameleon_copy/Trigger(trigger_flags, atom/target) + if(active) + toggle_button() + else + to_chat(owner, span_announce("Whom shall your chameleon kit copy?")) //Bad wording, need to improve it + toggle_button() + + +/datum/action/cooldown/chameleon_copy/proc/CheckValidTarget(atom/target) + if(target == owner) + return FALSE + if(!ishuman(target)) + return FALSE + return TRUE + +/datum/action/cooldown/chameleon_copy/proc/click_with_power(atom/target_atom) + if(in_use || !CheckValidTarget(target_atom)) + return FALSE + in_use = TRUE + FireTargetedPower(target_atom) + in_use = FALSE + return TRUE + +/datum/action/cooldown/chameleon_copy/proc/FireTargetedPower(atom/target_atom) + var/mob/living/carbon/human/T = target_atom + var/datum/outfit/O = new() + to_chat(owner, span_notice("Attempting to copy [T]...")) + if(!do_after(owner, 10 SECONDS, target_atom)) + return + O.uniform = T.w_uniform + O.suit = T.wear_suit + O.head = T.head + O.shoes = T.shoes + O.gloves = T.gloves + O.ears = T.ears + O.glasses = T.glasses + O.mask = T.wear_mask + O.back = T.back + var/list/types = O.get_chameleon_disguise_info() + for(var/Y in types) + for(var/V in owner.chameleon_item_actions) + var/datum/action/item_action/chameleon/change/A = V + if(A.chameleon_blacklist[Y]) + continue + if(istype(Y, A.chameleon_type)) //Need to make sure it's the right type, wouldn't want to wear an armour vest on your head. + A.update_look(owner, Y) + A.copying = TRUE + A.copy_target = T + to_chat(owner, span_notice("Successfully copied [T]!")) + toggle_button() + + /datum/action/item_action/chameleon/change name = "Chameleon Change" var/list/chameleon_blacklist = list() //This is a typecache @@ -152,6 +233,8 @@ var/emp_timer var/current_disguise = null var/syndicate = FALSE + var/copying = FALSE + var/mob/living/copy_target /datum/action/item_action/chameleon/change/Grant(mob/M) if(M && (owner != M)) @@ -160,6 +243,9 @@ var/datum/action/chameleon_outfit/O = new /datum/action/chameleon_outfit() O.syndicate = syndicate O.Grant(M) + var/datum/action/cooldown/chameleon_copy/C = new /datum/action/cooldown/chameleon_copy() + C.syndicate = syndicate + C.Grant(M) else M.chameleon_item_actions |= src if(syndicate) @@ -195,6 +281,7 @@ if(!picked_item) return update_look(user, picked_item) + copying = FALSE /datum/action/item_action/chameleon/change/proc/random_look(mob/user) var/picked_name = pick(chameleon_list) @@ -275,10 +362,16 @@ if(istype(atom_target, /obj/item/clothing/suit/space/hardsuit/infiltration)) //YOGS START var/obj/item/clothing/suit/space/hardsuit/infiltration/I = target var/obj/item/clothing/suit/space/hardsuit/HS = picked_item - var/obj/item/clothing/head/helmet/helmet = initial(HS.helmettype) + var/obj/item/clothing/head/helmet/space/hardsuit/helmet = initial(HS.helmettype) I.head_piece.initial_state = initial(helmet.icon_state) - update_item(helmet, I.head_piece) I.head_piece.update_appearance(UPDATE_ICON) + I.head_piece.current_disguise = picked_item + I.head_piece.new_type = helmet.hardsuit_type + var/datum/action/A + for(var/X in I.actions) + A = X + A.build_all_button_icons() + qdel(helmet) //YOGS END @@ -616,6 +709,8 @@ chameleon_action.emp_randomise(INFINITY) /obj/item/clothing/mask/chameleon/attack_self(mob/user) + if(!is_syndicate(user)) //Wouldn't want someone to randomly find a switch on a mask, would we? + return vchange = !vchange to_chat(user, span_notice("The voice changer is now [vchange ? "on" : "off"]!")) if(vchange) diff --git a/code/modules/modular_computers/computers/item/pda/pda_presets.dm b/code/modules/modular_computers/computers/item/pda/pda_presets.dm index 3e564abba1c1..f35a6db335a2 100644 --- a/code/modules/modular_computers/computers/item/pda/pda_presets.dm +++ b/code/modules/modular_computers/computers/item/pda/pda_presets.dm @@ -233,11 +233,17 @@ ) return ..() -//for inside one of the nukie lockers +//for inside one of the nukie lockers and the ones infiltrators spawn with /obj/item/modular_computer/tablet/pda/preset/syndicate desc = "Based off Nanotrasen's PDAs, this one has been reverse-engineered and loaded with illegal software provided by the Syndicate." greyscale_config = /datum/greyscale_config/tablet/stripe_thick greyscale_colors = "#A80001#5C070F#000000" + starting_components = list( /obj/item/computer_hardware/processor_unit/small, + /obj/item/stock_parts/cell/computer, + /obj/item/computer_hardware/hard_drive/small/syndicate, + /obj/item/computer_hardware/network_card/advanced, + /obj/item/computer_hardware/card_slot, + /obj/item/computer_hardware/printer/mini) /obj/item/modular_computer/tablet/pda/preset/syndicate/Initialize(mapload) obj_flags |= EMAGGED //starts emagged diff --git a/code/modules/modular_computers/computers/item/tablet/tablet_presets.dm b/code/modules/modular_computers/computers/item/tablet/tablet_presets.dm index 49f2ab88c79e..f2b9830bd3f1 100644 --- a/code/modules/modular_computers/computers/item/tablet/tablet_presets.dm +++ b/code/modules/modular_computers/computers/item/tablet/tablet_presets.dm @@ -69,7 +69,7 @@ starting_components = list( /obj/item/computer_hardware/processor_unit/small, /obj/item/stock_parts/cell/computer, /obj/item/computer_hardware/hard_drive/small/nukeops, - /obj/item/computer_hardware/network_card) + /obj/item/computer_hardware/network_card/advanced) starting_files = list(new /datum/computer_file/program/radar/fission360) initial_program = /datum/computer_file/program/radar/fission360 diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/infiltrator.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/infiltrator.ts index fae77d2500d3..ed055c8b2326 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/infiltrator.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/infiltrator.ts @@ -19,7 +19,7 @@ const Infiltrator: Antagonist = { `, INFILTRATOR_MECHANICAL_DESCRIPTION, ], - category: Category.Roundstart, + category: Category.Midround, priority: -1, }; diff --git a/yogstation.dme b/yogstation.dme index 58551705d9d9..3f3def6cdc29 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -4086,7 +4086,6 @@ #include "yogstation\code\game\gamemodes\clean_this_shit_up\blood_cult.dm" #include "yogstation\code\game\gamemodes\clean_this_shit_up\clock_cult.dm" #include "yogstation\code\game\gamemodes\clean_this_shit_up\other.dm" -#include "yogstation\code\game\gamemodes\infiltration\infiltration.dm" #include "yogstation\code\game\machinery\suit_storage_unit.dm" #include "yogstation\code\game\machinery\computer\arcade.dm" #include "yogstation\code\game\machinery\computer\atmos_sim.dm" diff --git a/yogstation/code/game/gamemodes/infiltration/infiltration.dm b/yogstation/code/game/gamemodes/infiltration/infiltration.dm deleted file mode 100644 index 06b940dc295a..000000000000 --- a/yogstation/code/game/gamemodes/infiltration/infiltration.dm +++ /dev/null @@ -1,54 +0,0 @@ -// /datum/game_mode/infiltration -// name = "infiltration" -// config_tag = "infiltration" -// false_report_weight = 10 -// required_players = 25 -// required_enemies = 3 -// recommended_enemies = 5 -// enemy_minimum_age = 21 -// antag_flag = ROLE_INFILTRATOR - -// var/agents_possible = 5 -// var/agents_left = 1 -// var/list/pre_sit = list() - -// var/datum/team/infiltrator/sit_team - -// var/static/list/areas_that_can_finish = typecacheof(list(/area/shuttle/yogs/stealthcruiser, /area/yogs/infiltrator_base)) - -// /datum/game_mode/infiltration/pre_setup() -// var/n_agents = min(max(CEILING(num_players() / 7, 1), 1), antag_candidates.len, agents_possible) -// if(GLOB.Debug2 || n_agents >= required_enemies) -// for(var/i = 0, i < n_agents, ++i) -// var/datum/mind/new_sit = pick_n_take(antag_candidates) -// pre_sit += new_sit -// new_sit.assigned_role = "Syndicate Infiltrator" -// new_sit.special_role = "Syndicate Infiltrator" -// log_game("[key_name(new_sit)] has been selected as a syndicate infiltrator") -// return TRUE -// setup_error = "Not enough infiltrator candidates" -// message_admins("Not enough infiltrator candidates! Was making [n_agents], but we need [required_enemies]!") -// return FALSE - -// /datum/game_mode/infiltration/post_setup() -// sit_team = new /datum/team/infiltrator -// for(var/datum/mind/sit_mind in pre_sit) -// sit_mind.add_antag_datum(ANTAG_DATUM_INFILTRATOR, sit_team) -// sit_team.update_objectives() -// return ..() - -// /datum/game_mode/infiltration/generate_report() //make this less shit -// return "Reports show that the Syndicate is rounding up it's elite agents, possibly for a raid on a Nanotrasen-controlled station. Keep an eye out for unusual people." - -// /datum/game_mode/infiltration/set_round_result() -// ..() -// var/result = sit_team.get_result() -// switch(result) -// if(INFILTRATION_ALLCOMPLETE) -// SSticker.mode_result = "major win - objectives complete" -// if(INFILTRATION_MOSTCOMPLETE) -// SSticker.mode_result = "minor win - most objectives complete" -// if(INFILTRATION_SOMECOMPLETE) -// SSticker.mode_result = "neutral - some objectives complete" -// else -// SSticker.mode_result = "loss - no objectives complete" diff --git a/yogstation/code/game/objects/items/implants/implant_infiltrator.dm b/yogstation/code/game/objects/items/implants/implant_infiltrator.dm index d4738a22850b..7c4507d8f6cc 100644 --- a/yogstation/code/game/objects/items/implants/implant_infiltrator.dm +++ b/yogstation/code/game/objects/items/implants/implant_infiltrator.dm @@ -9,7 +9,7 @@ . = ..() ADD_TRAIT(src, TRAIT_EMPPROOF_SELF, "innate_empproof") ADD_TRAIT(src, TRAIT_EMPPROOF_CONTENTS, "innate_empproof") - var/datum/component/uplink/uplink = AddComponent(/datum/component/uplink, _owner, TRUE, FALSE, null, 20) + var/datum/component/uplink/uplink = AddComponent(/datum/component/uplink, _owner, TRUE, FALSE, null, 10) uplink.set_antagonist(ROLE_INFILTRATOR) alert_radio = new(src) alert_radio.make_syndie() diff --git a/yogstation/code/modules/antagonists/infiltrator/infiltrator.dm b/yogstation/code/modules/antagonists/infiltrator/infiltrator.dm index 6b96bc266696..4862f26bdd0c 100644 --- a/yogstation/code/modules/antagonists/infiltrator/infiltrator.dm +++ b/yogstation/code/modules/antagonists/infiltrator/infiltrator.dm @@ -10,7 +10,7 @@ var/always_new_team = FALSE //If not assigned a team by default ops will try to join existing ones, set this to TRUE to always create new team. var/send_to_spawnpoint = TRUE //Should the user be moved to default spawnpoint. var/dress_up = TRUE - preview_outfit = /datum/outfit/infiltrator + preview_outfit = /datum/outfit/infiltrator_preview /datum/antagonist/infiltrator/apply_innate_effects(mob/living/mob_override) var/mob/living/M = mob_override || owner.current @@ -24,7 +24,6 @@ to_chat(owner, span_notice("You also have an internal radio, for communicating with your team-mates at all times.")) to_chat(owner, span_notice("You have a dusting implant, to ensure that Nanotrasen does not get their hands on Syndicate gear. Only activate it, if you are compromised.")) to_chat(owner, span_boldnotice(span_italics("Do NOT kill or destroy needlessly, as this defeats the purpose of an 'infiltration'!"))) - to_chat(owner, span_boldnotice("Once your objectives are complete, return to base, with all living infiltrators, to end the round.")) owner.announce_objectives() /datum/antagonist/infiltrator/on_gain() diff --git a/yogstation/code/modules/antagonists/infiltrator/items/hardsuit.dm b/yogstation/code/modules/antagonists/infiltrator/items/hardsuit.dm index f54efc3426ab..1525f9fa9d3b 100644 --- a/yogstation/code/modules/antagonists/infiltrator/items/hardsuit.dm +++ b/yogstation/code/modules/antagonists/infiltrator/items/hardsuit.dm @@ -4,6 +4,27 @@ item_state = "eng_helm" armor = list(MELEE = 35, BULLET = 15, LASER = 30,ENERGY = 10, BOMB = 10, BIO = 100, RAD = 50, FIRE = 75, ACID = 75) syndicate = TRUE + var/current_disguise = /obj/item/clothing/suit/space/hardsuit/infiltration + var/new_type = "engineering" + var/list/bad_hardsuits = list( + /obj/item/clothing/suit/space/hardsuit/darktemplar, + /obj/item/clothing/suit/space/hardsuit/darktemplar/chap, + /obj/item/clothing/suit/space/hardsuit/cult, + /obj/item/clothing/suit/space/hardsuit/syndi, + /obj/item/clothing/suit/space/hardsuit/syndi/elite, + /obj/item/clothing/suit/space/hardsuit/syndi/owl, + /obj/item/clothing/suit/space/hardsuit/syndi/debug, + /obj/item/clothing/suit/space/hardsuit/carp, + /obj/item/clothing/suit/space/hardsuit/carp/dragon, + /obj/item/clothing/suit/space/hardsuit/swat, + /obj/item/clothing/suit/space/hardsuit/swat/captain, + /obj/item/clothing/suit/space/hardsuit/ert/paranormal, + /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor, + /obj/item/clothing/suit/space/hardsuit/ert/paranormal/beserker, + /obj/item/clothing/suit/space/hardsuit/shielded/swat, + /obj/item/clothing/suit/space/hardsuit/shielded/swat/honk, + /obj/item/clothing/suit/space/hardsuit/deathsquad + ) /obj/item/clothing/head/helmet/space/hardsuit/infiltration/Initialize(mapload) . = ..() @@ -11,6 +32,20 @@ var/obj/item/clothing/suit/space/hardsuit/infiltration/I = loc I.head_piece = src +/obj/item/clothing/head/helmet/space/hardsuit/infiltration/attack_self(mob/user) + if(bad_hardsuits.Find(current_disguise)) + to_chat(user, span_warning("You can't use the hardsuit's helmet light with this current disguise, change to another one!")) + else //Copied from original hardsuit attack_self and modified slightly + on = !on + icon_state = "[basestate][on]-[new_type]" + user.update_inv_head() //so our mob-overlays update + + set_light_on(on) + + for(var/X in actions) + var/datum/action/A = X + A.build_all_button_icons() + /obj/item/clothing/suit/space/hardsuit/infiltration name = "engineering hardsuit" icon_state = "hardsuit-engineering" diff --git a/yogstation/code/modules/antagonists/infiltrator/objectives.dm b/yogstation/code/modules/antagonists/infiltrator/objectives.dm index d149d7affce5..f5edd488b21d 100644 --- a/yogstation/code/modules/antagonists/infiltrator/objectives.dm +++ b/yogstation/code/modules/antagonists/infiltrator/objectives.dm @@ -113,3 +113,70 @@ GLOBAL_LIST_INIT(infiltrator_kidnap_areas, typecacheof(list(/area/shuttle/yogs/s /datum/objective/infiltrator/kidnap/check_completion() var/target_area = get_area(target.current) return QDELETED(target) || (target.current && (!target.current.ckey || target.current.suiciding)) || (considered_alive(target) && is_type_in_typecache(target_area, GLOB.infiltrator_kidnap_areas)) + +/datum/objective/infiltrator/escape_disguised //Sort of based on the escape with identity objective for changelings, most of the code is from that with modifications + explanation_text = "Have one member of your team disguise as a crewmember using your chameleon kit, and escape on the shuttle while wearing their identification card." + var/target_real_name + var/target_missing_id + +/datum/objective/infiltrator/escape_disguised/proc/potential_targets() + var/list/possible_targets = list() + for(var/datum/mind/M in SSticker.minds) + if(!M || !considered_alive(M) || considered_afk(M) || !M.current || !M.current.client || !ishuman(M.current) || M.quiet_round) + continue + if(M.has_antag_datum(/datum/antagonist/infiltrator) || M.has_antag_datum(/datum/antagonist/traitor) || M.has_antag_datum(/datum/antagonist/nukeop)) + continue + if(M.assigned_role in GLOB.command_positions) + possible_targets[M] = 25 + else //Either command or crew, stealing IDs from security officers and then having to impersonate them on shuttle simply doesn't work well + possible_targets[M] = 5 + return possible_targets + +/datum/objective/infiltrator/escape_disguised/is_possible() + return LAZYLEN(potential_targets()) + +/datum/objective/infiltrator/escape_disguised/find_target(dupe_search_range, blacklist) + target = pickweight(potential_targets()) + update_explanation_text() + return target + +/datum/objective/infiltrator/escape_disguised/update_explanation_text() + if(target && target.current) + target_real_name = target.current.real_name + explanation_text = "Have one member of your team disguise as [target.name], the [target.assigned_role] using your chameleon kit, and escape on the shuttle or an escape pod" + var/mob/living/carbon/human/H + if(ishuman(target.current)) + H = target.current + if(H && H.get_id_name() != target_real_name) + target_missing_id = 1 + else + explanation_text += " while wearing their identification card" + explanation_text += "." + else + explanation_text = "Free Objective" + +/datum/objective/infiltrator/escape_disguised/check_completion() + . = ..() + if(completed) + return TRUE + if(!target || !target_real_name) + return TRUE + var/list/infiltrators = get_antag_minds(/datum/antagonist/infiltrator, TRUE) + for(var/datum/mind/M in infiltrators) + if(!considered_escaped(M)) + continue + var/mob/living/carbon/human/H = M.current + var/clothing = H.chameleon_item_actions.len //8 possible clothes: Head, suit, ears, glasses, uniform, shoes, gloves, backpack + var/copied = TRUE + for(var/datum/action/item_action/chameleon/change/V in H.chameleon_item_actions) + if(!V.copying) + clothing -= 1 + if(V.copy_target != target) + clothing -= 1 + if(clothing<3) //Some leniency if you don't have the required clothes or your target isn't wearing many, but not complete leniency + copied = FALSE + if(!copied) + continue + if(H.get_id_name() == target_real_name || target_missing_id) + return TRUE + return FALSE diff --git a/yogstation/code/modules/antagonists/infiltrator/outfit.dm b/yogstation/code/modules/antagonists/infiltrator/outfit.dm index f3881e535af0..4133f65ed53a 100644 --- a/yogstation/code/modules/antagonists/infiltrator/outfit.dm +++ b/yogstation/code/modules/antagonists/infiltrator/outfit.dm @@ -1,13 +1,16 @@ -/datum/outfit/infiltrator // RIP +/datum/outfit/infiltrator // We're so back name = "Syndicate Infiltrator" uniform = /obj/item/clothing/under/chameleon/syndicate + suit = /obj/item/clothing/suit/chameleon/syndicate + glasses = /obj/item/clothing/glasses/chameleon/syndicate shoes = /obj/item/clothing/shoes/chameleon/noslip/syndicate gloves = /obj/item/clothing/gloves/chameleon/syndicate back = /obj/item/storage/backpack/chameleon/syndicate ears = /obj/item/radio/headset/chameleon/syndicate id = /obj/item/card/id/syndicate mask = /obj/item/clothing/mask/chameleon/syndicate + head = /obj/item/clothing/head/chameleon/syndicate belt = /obj/item/modular_computer/tablet/pda/preset/syndicate box = /obj/item/storage/box/survival/engineer backpack_contents = list(/obj/item/kitchen/knife/combat/survival=1,\ @@ -42,3 +45,15 @@ var/obj/item/modular_computer/worn_computer = H.belt if(istype(worn_computer)) worn_computer.update_label(card) + +/datum/outfit/infiltrator_preview + name = "Syndicate Infiltrator (Preview)" + uniform = /obj/item/clothing/under/chameleon/syndicate + glasses = /obj/item/clothing/glasses/chameleon/syndicate + shoes = /obj/item/clothing/shoes/chameleon/noslip/syndicate + gloves = /obj/item/clothing/gloves/chameleon/syndicate + back = /obj/item/storage/backpack/chameleon/syndicate + ears = /obj/item/radio/headset/chameleon/syndicate + id = /obj/item/card/id/syndicate + mask = /obj/item/clothing/mask/chameleon/syndicate + belt = /obj/item/modular_computer/tablet/pda/preset/syndicate diff --git a/yogstation/code/modules/events/infiltrators.dm b/yogstation/code/modules/events/infiltrators.dm index d6f15582f106..0e6917722649 100644 --- a/yogstation/code/modules/events/infiltrators.dm +++ b/yogstation/code/modules/events/infiltrators.dm @@ -2,9 +2,9 @@ name = "Infiltrators" typepath = /datum/round_event/ghost_role/infiltrators - weight = 0 + weight = 5 max_occurrences = 1 - earliest_start = 30 MINUTES + earliest_start = 50 MINUTES track = EVENT_TRACK_MAJOR tags = list(TAG_COMBAT, TAG_EXTERNAL) description = "Infiltrators will... infiltrate."