From b995fbe31b87402d3da2f8e98cec1f5659e52a47 Mon Sep 17 00:00:00 2001 From: Zonespace <41448081+Zonespace27@users.noreply.github.com> Date: Sun, 3 Apr 2022 19:25:42 -0700 Subject: [PATCH] Contractor Expansion 2 (#12311) * weh! * fuck you linter * very important * Update modular_skyrat/modules/contractor/code/datums/midround/event.dm Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com> * Update modular_skyrat/modules/contractor/code/datums/midround/outfit.dm Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com> * requested changes * also this * requested + cleanup Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com> --- code/__DEFINES/role_preferences.dm | 7 +- .../~skyrat_defines/baton_upgrades.dm | 1 + .../game/objects/items/storage/uplink_kits.dm | 8 +-- .../client/preferences/middleware/antags.dm | 1 + .../master_files/icons/obj/card.dmi | Bin 6854 -> 7341 bytes .../code/datums/contractor_items.dm | 16 +++-- .../code/datums/midround/antag_datum.dm | 31 +++++++++ .../contractor/code/datums/midround/event.dm | 38 +++++++++++ .../code/datums/midround/objective.dm | 17 +++++ .../contractor/code/datums/midround/outfit.dm | 40 +++++++++++ .../contractor/code/datums/midround/trim.dm | 5 ++ .../modules/contractor/code/items/baton.dm | 64 +++++++++++++++--- .../modules/contractor/code/items/boxes.dm | 36 +++++++--- .../modules/contractor/code/items/misc.dm | 50 +++++++++++++- .../contractor/code/items/modsuit/modsuit.dm | 4 ++ .../contractor/icons/baton_upgrades.dmi | Bin 354 -> 435 bytes .../modules/contractor/icons/hud_icon.dmi | Bin 0 -> 247 bytes tgstation.dme | 5 ++ .../antagonists/driftingcontractor.ts | 21 ++++++ 19 files changed, 311 insertions(+), 33 deletions(-) create mode 100644 modular_skyrat/modules/contractor/code/datums/midround/antag_datum.dm create mode 100644 modular_skyrat/modules/contractor/code/datums/midround/event.dm create mode 100644 modular_skyrat/modules/contractor/code/datums/midround/objective.dm create mode 100644 modular_skyrat/modules/contractor/code/datums/midround/outfit.dm create mode 100644 modular_skyrat/modules/contractor/code/datums/midround/trim.dm create mode 100644 modular_skyrat/modules/contractor/icons/hud_icon.dmi create mode 100644 tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/driftingcontractor.ts diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm index 739855464ee..af91f62d75b 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -39,8 +39,9 @@ #define ROLE_SPACE_DRAGON "Space Dragon" #define ROLE_SPIDER "Spider" #define ROLE_WIZARD_MIDROUND "Wizard (Midround)" -// SKYRAT EDIT ADDITION +//SKYRAT EDIT START #define ROLE_BORER "Borer" +#define ROLE_DRIFTING_CONTRACTOR "Drifting Contractor" #define ROLE_ASSAULT_OPERATIVE "Assault Operative" // SKYRAT EDIT END @@ -146,8 +147,10 @@ GLOBAL_LIST_INIT(special_roles, list( ROLE_SPACE_DRAGON = 0, ROLE_SPIDER = 0, ROLE_WIZARD_MIDROUND = 14, - //SKYRAT EDIT: Cortical Borers + //SKYRAT EDIT START ROLE_BORER = 0, + ROLE_DRIFTING_CONTRACTOR = 14, + //SKYRAT EDIT END // Latejoin ROLE_HERETIC_SMUGGLER = 0, diff --git a/code/__DEFINES/~skyrat_defines/baton_upgrades.dm b/code/__DEFINES/~skyrat_defines/baton_upgrades.dm index dcfbfbabe45..ed89f1b4a51 100644 --- a/code/__DEFINES/~skyrat_defines/baton_upgrades.dm +++ b/code/__DEFINES/~skyrat_defines/baton_upgrades.dm @@ -1,3 +1,4 @@ #define BATON_ALL_UPGRADE (1<<0) #define BATON_CUFF_UPGRADE (1<<1) #define BATON_MUTE_UPGRADE (1<<2) +#define BATON_FOCUS_UPGRADE (1<<3) diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index 057407d5d45..d21424345d5 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -252,22 +252,22 @@ new /obj/item/implanter/freedom(src) new /obj/item/stack/telecrystal(src) //The failsafe/self destruct isn't an item we can physically include in the kit, but 1 TC is technically enough to buy the equivalent. -/obj/item/storage/box/syndicate/contract_kit +/obj/item/storage/box/syndicate/contract_kit //SKYRAT EDIT - CHANGED IN MODULAR FOLDER name = "Contract Kit" desc = "Supplied to Syndicate contractors." icon_state = "syndiebox" illustration = "writing_syndie" -/obj/item/storage/box/syndicate/contractor_loadout +/obj/item/storage/box/syndicate/contractor_loadout //SKYRAT EDIT - CHANGED IN MODULAR FOLDER name = "Standard Loadout" desc = "Supplied to Syndicate contractors, providing their specialised space suit and chameleon uniform." icon_state = "syndiebox" illustration = "writing_syndie" -/obj/item/paper/contractor_guide +/obj/item/paper/contractor_guide //SKYRAT EDIT - CHANGED IN MODULAR FOLDER name = "Contractor Guide" -/obj/item/paper/contractor_guide/Initialize(mapload) +/obj/item/paper/contractor_guide/Initialize(mapload) //SKYRAT EDIT - CHANGED IN MODULAR FOLDER info = {"

Welcome agent, congratulations on your new position as contractor. On top of your already assigned objectives, this kit will provide you contracts to take on for TC payments.

diff --git a/code/modules/client/preferences/middleware/antags.dm b/code/modules/client/preferences/middleware/antags.dm index b782397fd5b..1014ca64496 100644 --- a/code/modules/client/preferences/middleware/antags.dm +++ b/code/modules/client/preferences/middleware/antags.dm @@ -115,6 +115,7 @@ var/static/list/non_ruleset_antagonists = list( ROLE_FUGITIVE = /datum/antagonist/fugitive, ROLE_LONE_OPERATIVE = /datum/antagonist/nukeop/lone, + ROLE_DRIFTING_CONTRACTOR = /datum/antagonist/contractor, //SKYRAT EDIT ) var/list/antagonists = non_ruleset_antagonists.Copy() diff --git a/modular_skyrat/master_files/icons/obj/card.dmi b/modular_skyrat/master_files/icons/obj/card.dmi index d06ee7d6e0a01c3991f50aa8b3efb2f5a3f80e5c..6c7cc91aa4e8b98abf5098875ec2e96a72d0d6be 100644 GIT binary patch literal 7341 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 literal 6854 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 diff --git a/modular_skyrat/modules/contractor/code/datums/contractor_items.dm b/modular_skyrat/modules/contractor/code/datums/contractor_items.dm index 9ed9228165d..a50a523b5ef 100644 --- a/modular_skyrat/modules/contractor/code/datums/contractor_items.dm +++ b/modular_skyrat/modules/contractor/code/datums/contractor_items.dm @@ -149,7 +149,7 @@ desc = "Request Syndicate Command to distrupt the station's powernet. Disables power across the station for a short duration." item_icon = "bolt" limited = 2 - cost = 3 + cost = 2 /datum/contractor_item/blackout/handle_purchase(datum/contractor_hub/hub) . = ..() @@ -164,7 +164,7 @@ desc = "Request Syndicate Command to disable station Telecommunications. Disables telecommunications across the station for a medium duration." item_icon = "phone-slash" limited = 2 - cost = 3 + cost = 2 /datum/contractor_item/comms_blackout/handle_purchase(datum/contractor_hub/hub) . = ..() @@ -178,7 +178,7 @@ name = "Baton Holster Module" desc = "Never worry about dropping your baton again with this holster module! Simply insert your baton into the module, put it in your MODsuit, and the baton will retract whenever dropped." item = /obj/item/mod/module/baton_holster - item_icon = "arrow-up-from-arc" //I cannot find anything better, replace if you find something more fitting + item_icon = "wrench" //I cannot find anything better, replace if you find something more fitting limited = 1 cost = 1 @@ -186,7 +186,7 @@ name = "Baton Cuff Upgrade" desc = "Using technology reverse-engineered from some alien batons we had lying around, you can now cuff people using your baton with the secondary attack. Due to technical limitations, only cable cuffs and zipties work, and they need to be loaded into the baton manually." item = /obj/item/baton_upgrade/cuff - item_icon = "handcuff" + item_icon = "hands-bound" limited = 1 cost = 1 @@ -197,3 +197,11 @@ item_icon = "comment-slash" limited = 1 cost = 2 + +/datum/contractor_item/baton_upgrade_focus + name = "Baton Focus Upgrade" + desc = "When applied to a baton, it will exhaust the target even more, should they be the target of your current contract." + item = /obj/item/baton_upgrade/focus + item_icon = "eye" + limited = 1 + cost = 2 diff --git a/modular_skyrat/modules/contractor/code/datums/midround/antag_datum.dm b/modular_skyrat/modules/contractor/code/datums/midround/antag_datum.dm new file mode 100644 index 00000000000..852226a83aa --- /dev/null +++ b/modular_skyrat/modules/contractor/code/datums/midround/antag_datum.dm @@ -0,0 +1,31 @@ +// USED FOR THE MIDROUND +/datum/antagonist/contractor + name = "Drifting Contractor" + antagpanel_category = "DriftingContractor" + preview_outfit = /datum/outfit/contractor_preview + job_rank = ROLE_DRIFTING_CONTRACTOR + hud_icon = 'modular_skyrat/modules/contractor/icons/hud_icon.dmi' + antag_hud_name = "contractor" + antag_moodlet = /datum/mood_event/focused + show_to_ghosts = TRUE + suicide_cry = "FOR THE CONTRACTS!!" + /// The outfit the contractor is equipped with + var/contractor_outfit = /datum/outfit/contractor + +/datum/antagonist/contractor/proc/equip_guy() + if(!ishuman(owner.current)) + return + var/mob/living/carbon/human/person = owner.current + person.equipOutfit(contractor_outfit) + return TRUE + +/datum/antagonist/contractor/on_gain() + forge_objectives() + . = ..() + equip_guy() + +/datum/antagonist/contractor/proc/forge_objectives() + objectives += new/datum/objective/contractor_total + +/datum/job/drifting_contractor + title = ROLE_DRIFTING_CONTRACTOR diff --git a/modular_skyrat/modules/contractor/code/datums/midround/event.dm b/modular_skyrat/modules/contractor/code/datums/midround/event.dm new file mode 100644 index 00000000000..74f033d3bdb --- /dev/null +++ b/modular_skyrat/modules/contractor/code/datums/midround/event.dm @@ -0,0 +1,38 @@ +/datum/round_event_control/contractor + name = "Drifting Contractor" + typepath = /datum/round_event/ghost_role/contractor + weight = 8 + max_occurrences = 1 + +/datum/round_event/ghost_role/contractor + minimum_required = 1 + role_name = "Drifting Contractor" + fakeable = FALSE + +/datum/round_event/ghost_role/contractor/spawn_role() + var/list/candidates = get_candidates(ROLE_DRIFTING_CONTRACTOR) + if(!length(candidates)) + return NOT_ENOUGH_PLAYERS + + var/mob/dead/selected = pick_n_take(candidates) + + var/list/spawn_locs = list() + for(var/obj/effect/landmark/carpspawn/carp in GLOB.landmarks_list) + spawn_locs += carp.loc + if(!length(spawn_locs)) + return MAP_ERROR + + var/mob/living/carbon/human/operative = new(pick(spawn_locs)) + operative.randomize_human_appearance(~RANDOMIZE_SPECIES) + operative.dna.update_dna_identity() + var/datum/mind/mind = new /datum/mind(selected.key) + mind.set_assigned_role(SSjob.GetJobType(/datum/job/drifting_contractor)) + mind.special_role = ROLE_DRIFTING_CONTRACTOR + mind.active = TRUE + mind.transfer_to(operative) + mind.add_antag_datum(/datum/antagonist/contractor) + + message_admins("[ADMIN_LOOKUPFLW(operative)] has been made into [src] by an event.") + log_game("[key_name(operative)] was spawned as a [src] by an event.") + spawned_mobs += operative + return SUCCESSFUL_SPAWN diff --git a/modular_skyrat/modules/contractor/code/datums/midround/objective.dm b/modular_skyrat/modules/contractor/code/datums/midround/objective.dm new file mode 100644 index 00000000000..441307abb1a --- /dev/null +++ b/modular_skyrat/modules/contractor/code/datums/midround/objective.dm @@ -0,0 +1,17 @@ +/datum/objective/contractor_total + name = "contractor" + explanation_text = "Complete at least %CONTRACTNUM% contract%S%." + martyr_compatible = TRUE + /// How many contracts are needed, rand(1, 3) + var/contracts_needed + +/datum/objective/contractor_total/New(text) + . = ..() + contracts_needed = rand(1, 3) + explanation_text = replacetext(explanation_text, "%CONTRACTNUM%", contracts_needed) + explanation_text = replacetext(explanation_text, "%S%", (contracts_needed > 1 ? "S" : "")) + +/datum/objective/contractor_total/check_completion() + if(length(owner.opposing_force.contractor_hub.contracts_completed) >= contracts_needed) + return TRUE + return FALSE diff --git a/modular_skyrat/modules/contractor/code/datums/midround/outfit.dm b/modular_skyrat/modules/contractor/code/datums/midround/outfit.dm new file mode 100644 index 00000000000..5d4d732905b --- /dev/null +++ b/modular_skyrat/modules/contractor/code/datums/midround/outfit.dm @@ -0,0 +1,40 @@ +/datum/outfit/contractor + name = "Syndicate Contractor - Full Kit" + + glasses = /obj/item/clothing/glasses/night + mask = /obj/item/clothing/mask/chameleon + back = /obj/item/mod/control/pre_equipped/contractor/upgraded + r_pocket = /obj/item/tank/internals/emergency_oxygen/engi + internals_slot = ITEM_SLOT_RPOCKET + belt = /obj/item/storage/belt/military + + uniform = /obj/item/clothing/under/chameleon + shoes = /obj/item/clothing/shoes/chameleon/noslip + gloves = /obj/item/clothing/gloves/combat + ears = /obj/item/radio/headset/chameleon/advanced + l_pocket = /obj/item/modular_computer/tablet/syndicate_contract_uplink/preset/uplink + id = /obj/item/card/id/advanced/chameleon + backpack_contents = list( + /obj/item/storage/box/survival/syndie, + /obj/item/storage/box/syndicate/contract_kit/midround, + /obj/item/knife/combat/survival, + ) + + implants = list( + /obj/item/implant/uplink/precharged, + /obj/item/implant/explosive, + ) + + id_trim = /datum/id_trim/chameleon/contractor + +/datum/outfit/contractor_preview + name = "Syndicate Contractor (Preview only)" + + back = /obj/item/mod/control/pre_equipped/syndicate_empty/contractor + uniform = /obj/item/clothing/under/syndicate + glasses = /obj/item/clothing/glasses/night + +/datum/outfit/contractor_preview/post_equip(mob/living/carbon/human/guy, visualsOnly) + var/obj/item/mod/module/armor_booster/booster = locate() in guy.back + booster.active = TRUE + guy.update_inv_back() diff --git a/modular_skyrat/modules/contractor/code/datums/midround/trim.dm b/modular_skyrat/modules/contractor/code/datums/midround/trim.dm new file mode 100644 index 00000000000..d03b45b2d8f --- /dev/null +++ b/modular_skyrat/modules/contractor/code/datums/midround/trim.dm @@ -0,0 +1,5 @@ +/// Trim for Chameleon ID cards. Many outfits, nuke ops and some corpses hold Chameleon ID cards. +/datum/id_trim/chameleon/contractor + assignment = "Syndicate Contractor" + trim_state = "trim_contractor" + trim_icon = 'modular_skyrat/master_files/icons/obj/card.dmi' diff --git a/modular_skyrat/modules/contractor/code/items/baton.dm b/modular_skyrat/modules/contractor/code/items/baton.dm index 0cd2e272a11..bbb04386a3e 100644 --- a/modular_skyrat/modules/contractor/code/items/baton.dm +++ b/modular_skyrat/modules/contractor/code/items/baton.dm @@ -1,11 +1,20 @@ #define CUFF_MAXIMUM 3 #define MUTE_CYCLES 5 +#define MUTE_MAX_MOD 2 +#define BONUS_STAMINA_DAM 35 +#define BONUS_STUTTER 10 /obj/item/melee/baton/telescopic/contractor_baton /// Ref to the baton holster, should the baton have one. var/obj/item/mod/module/baton_holster/holster /// Bitflags for what upgrades the baton has var/upgrade_flags + /// If the baton lists its upgrades + var/lists_upgrades = TRUE + +/obj/item/melee/baton/telescopic/contractor_baton/Initialize(mapload) + . = ..() + RegisterSignal(src, COMSIG_STORAGE_ENTERED, .proc/storage_undeploy) /obj/item/melee/baton/telescopic/contractor_baton/dropped(mob/user, silent) . = ..() @@ -13,6 +22,16 @@ return holster.undeploy(user) +/obj/item/melee/baton/telescopic/contractor_baton/proc/storage_undeploy(mob/user) + if(!holster) + return + if(!user) + user = holster?.mod?.wearer + var/obj/item/storage = src.loc + var/datum/component/storage/storagecomp = storage.GetComponent(/datum/component/storage) + storagecomp.remove_from_storage(src, get_turf(src)) + holster.undeploy(user) + /obj/item/melee/baton/telescopic/contractor_baton/attack_secondary(mob/living/victim, mob/living/user, params) if(!(upgrade_flags & BATON_CUFF_UPGRADE) || !active) return @@ -26,7 +45,6 @@ var/obj/item/baton_upgrade/upgrade = attacking_item if(!(upgrade_flags & upgrade.upgrade_flag)) upgrade_flags |= upgrade.upgrade_flag - upgrade.desc_update(src) attacking_item.forceMove(src) balloon_alert(user, "[attacking_item] attached") if(!(upgrade_flags & BATON_CUFF_UPGRADE) && !(upgrade_flags & BATON_ALL_UPGRADE)) @@ -52,25 +70,40 @@ /obj/item/melee/baton/telescopic/contractor_baton/additional_effects_non_cyborg(mob/living/carbon/target, mob/living/user) . = ..() - if(!((upgrade_flags & BATON_MUTE_UPGRADE) && !(upgrade_flags & BATON_ALL_UPGRADE))|| !istype(target)) + if(!istype(target)) return - if(target.silent >= (MUTE_CYCLES * 2)) - return - target.silent += MUTE_CYCLES //10 seconds of mute a hit up to 20 max + if((upgrade_flags & BATON_MUTE_UPGRADE) || (upgrade_flags & BATON_ALL_UPGRADE)) + if(target.silent < (MUTE_CYCLES * MUTE_MAX_MOD)) + target.silent = min((target.silent + MUTE_CYCLES), (MUTE_CYCLES * MUTE_MAX_MOD)) + if((upgrade_flags & BATON_FOCUS_UPGRADE) || (upgrade_flags & BATON_ALL_UPGRADE)) + if(target == user.mind?.opposing_force?.contractor_hub?.current_contract?.contract.target?.current) // Pain + target.apply_damage(BONUS_STAMINA_DAM, STAMINA, BODY_ZONE_CHEST) + target.stuttering += BONUS_STUTTER + +/obj/item/melee/baton/telescopic/contractor_baton/examine(mob/user) + . = ..() + if(upgrade_flags && lists_upgrades) + . += "

[span_boldnotice("[src] has the following upgrades attached:")]" + for(var/obj/item/baton_upgrade/upgrade in contents) + . += "
[span_notice("[upgrade].")]" /obj/item/melee/baton/telescopic/contractor_baton/upgraded - upgrade_flags = BATON_ALL_UPGRADE desc = "A compact, specialised baton assigned to Syndicate contractors. Applies light electrical shocks to targets. This one seems to be fully upgraded with unremovable parts." + lists_upgrades = FALSE + upgrade_flags = BATON_ALL_UPGRADE + +/obj/item/melee/baton/telescopic/contractor_baton/upgraded/Initialize(mapload) + . = ..() + for(var/i in 1 to CUFF_MAXIMUM) + new/obj/item/restraints/handcuffs/cable(src) + +/obj/item/melee/baton/telescopic/contractor_baton/upgraded/wrench_act(mob/living/user, obj/item/tool) + return /obj/item/baton_upgrade icon = 'modular_skyrat/modules/contractor/icons/baton_upgrades.dmi' var/upgrade_flag -/obj/item/baton_upgrade/proc/desc_update(obj/item/melee/baton/telescopic/contractor_baton/batong) - if(!batong.upgrade_flags) - desc += "

[span_boldnotice("[batong] has the following upgrades attached:")]" - desc += "
[span_notice("[src].")]" - /obj/item/baton_upgrade/cuff name = "handcuff baton upgrade" desc = "Allows the user to apply restraints to a target via baton, requires to be loaded with up to three prior." @@ -83,5 +116,14 @@ icon_state = "mute_upgrade" upgrade_flag = BATON_MUTE_UPGRADE +/obj/item/baton_upgrade/focus + name = "focus baton upgrade" + desc = "Use of the baton on a target, should they be the subject of your contract, will be extra exhausted." + icon_state = "focus_upgrade" + upgrade_flag = BATON_FOCUS_UPGRADE + #undef CUFF_MAXIMUM #undef MUTE_CYCLES +#undef MUTE_MAX_MOD +#undef BONUS_STAMINA_DAM +#undef BONUS_STUTTER diff --git a/modular_skyrat/modules/contractor/code/items/boxes.dm b/modular_skyrat/modules/contractor/code/items/boxes.dm index 743445f3085..237843a89d4 100644 --- a/modular_skyrat/modules/contractor/code/items/boxes.dm +++ b/modular_skyrat/modules/contractor/code/items/boxes.dm @@ -6,13 +6,6 @@ special_desc_requirement = EXAMINE_CHECK_CONTRACTOR icon_state = "syndiebox" illustration = "writing_syndie" - -/obj/item/storage/box/syndicate/contract_kit/PopulateContents() - new /obj/item/modular_computer/tablet/syndicate_contract_uplink/preset/uplink(src) - new /obj/item/storage/box/syndicate/contractor_loadout(src) - new /obj/item/melee/baton/telescopic/contractor_baton(src) - - // All about 4 TC or less - some nukeops only items, but fit nicely to the theme. var/list/item_list = list( /obj/item/storage/backpack/duffelbag/syndie/x4, /obj/item/storage/box/syndie_kit/throwing_weapons, @@ -27,8 +20,6 @@ /obj/item/clothing/glasses/thermal/syndi, /obj/item/slimepotion/slime/sentience/nuclear, /obj/item/storage/box/syndie_kit/imp_radio, - /obj/item/storage/box/syndie_kit/imp_uplink, - /obj/item/clothing/gloves/krav_maga/combatglovesplus, /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot, /obj/item/reagent_containers/hypospray/medipen/stimulants, /obj/item/storage/box/syndie_kit/imp_freedom, @@ -40,6 +31,12 @@ /obj/item/healthanalyzer/rad_laser ) +/obj/item/storage/box/syndicate/contract_kit/PopulateContents() + new /obj/item/modular_computer/tablet/syndicate_contract_uplink/preset/uplink(src) + new /obj/item/storage/box/syndicate/contractor_loadout(src) + new /obj/item/melee/baton/telescopic/contractor_baton(src) + + // All about 4 TC or less - some nukeops only items, but fit nicely to the theme. for(var/iteration in 1 to SMALL_ITEM_AMOUNT) var/obj/item/small_item = pick_n_take(item_list) new small_item(src) @@ -50,7 +47,7 @@ /obj/item/storage/box/syndicate/contractor_loadout name = "Standard Loadout" special_desc_requirement = EXAMINE_CHECK_CONTRACTOR - special_desc = "Supplied to Syndicate contractors, providing their specialised space suit and chameleon uniform." + special_desc = "Supplied to Syndicate contractors, providing their specialised MODSuit and chameleon uniform." icon_state = "syndiebox" illustration = "writing_syndie" @@ -73,4 +70,23 @@ new /obj/item/extraction_pack/contractor(src) new /obj/item/fulton_core(src) +/obj/item/storage/box/syndicate/contract_kit/midround + name = "Contract Kit" + special_desc = "Supplied to Syndicate contractors." + special_desc_requirement = EXAMINE_CHECK_CONTRACTOR + icon_state = "syndiebox" + illustration = "writing_syndie" + +/obj/item/storage/box/syndicate/contract_kit/midround/PopulateContents() + // All about 4 TC or less - some nukeops only items, but fit nicely to the theme. + for(var/iteration in 1 to SMALL_ITEM_AMOUNT) + var/obj/item/small_item = pick_n_take(item_list) + new small_item(src) + + // Paper guide + new /obj/item/paper/contractor_guide/midround(src) + new /obj/item/storage/fancy/cigarettes/cigpack_syndicate(src) + new /obj/item/lighter(src) + new /obj/item/jammer(src) + #undef SMALL_ITEM_AMOUNT diff --git a/modular_skyrat/modules/contractor/code/items/misc.dm b/modular_skyrat/modules/contractor/code/items/misc.dm index 3c9c19d664e..146545fe6a6 100644 --- a/modular_skyrat/modules/contractor/code/items/misc.dm +++ b/modular_skyrat/modules/contractor/code/items/misc.dm @@ -5,8 +5,8 @@ info = {"

Welcome agent, congratulations on your new position as contractor. On top of your already assigned objectives, this kit will provide you contracts to take on for TC payments.

-

Provided within, we give your specialist contractor space suit. It's even more compact, being able to fit into a pocket, and faster than the - Syndicate space suit available to you on the uplink. We also provide your chameleon jumpsuit and mask, both of which can be changed +

You likely already have your Contractor MODSuit equipped. It has a built in chameleon module, which only works when the MODSuit is undeployed, + but is highly useful for on-station infiltrations. We also provide your chameleon jumpsuit and mask, both of which can be changed to any form you need for the moment. The cigarettes are a special blend - it'll heal your injuries slowly overtime.

Your standard issue contractor baton hits harder than the ones you might be used to, and likely be your go to weapon for kidnapping your @@ -60,3 +60,49 @@ special_desc_requirement = EXAMINE_CHECK_CONTRACTOR special_desc = "A modified fulton pack that can be used indoors thanks to Bluespace technology. Favored by Syndicate Contractors." + +/obj/item/paper/contractor_guide/midround + name = "Contractor Guide" + +/obj/item/paper/contractor_guide/midround/Initialize(mapload) + info = {"

Welcome agent, congratulations on successfully getting in range of the station.

+ +

You likely already have your Contractor MODSuit equipped. It has a built in chameleon module, which only works when the MODSuit is undeployed, + but is highly useful for on-station infiltrations. We also provide your chameleon jumpsuit and mask, both of which can be changed + to any form you need for the moment. The cigarettes are a special blend - it'll heal your injuries slowly overtime.

+ +

Your standard issue contractor baton can be found in the baton holster MODSuit module, it hits harder than the ones you might be used to, + and will likely be your go to weapon for kidnapping your targets. We took the liberty of fully upgrading it beforehand, so don't worry about that. + The three additional items have been randomly selected from what we had available. We hope they're useful to you for your mission.

+ +

The contractor hub, available at the top right of the uplink, will provide you unique items and abilities. These are bought using Contractor Rep, + with two Rep being provided each time you complete a contract.

+ +

Using the tablet

+
    +
  1. Open the Syndicate Contract Uplink program.
  2. +
  3. Here, you can accept a contract, and redeem your TC payments from completed contracts.
  4. +
  5. The payment number shown in brackets is the bonus you'll receive when bringing your target alive. You receive the + other number regardless of if they were alive or dead.
  6. +
  7. Contracts are completed by bringing the target to designated dropoff, calling for extraction, and putting them + inside the pod.
  8. +
+ +

Be careful when accepting a contract. While you'll be able to see the location of the dropoff point, cancelling will make it + unavailable to take on again.

+

The tablet can also be recharged at any cell charger.

+

Extracting

+
    +
  1. Make sure both yourself and your target are at the dropoff.
  2. +
  3. Call the extraction, and stand back from the drop point.
  4. +
  5. If it fails, make sure your target is inside, and there's a free space for the pod to land.
  6. +
  7. Grab your target, and drag them into the pod.
  8. +
+

Ransoms

+

We need your target for our own reasons, but we ransom them back to your mission area once their use is served. They will return back + from where you sent them off from in several minutes time. Don't worry, we give you a cut of what we get paid. We pay this into whatever + ID card you have equipped, on top of the TC payment we give.

+ +

Good luck agent. You can burn this document with the supplied lighter.

"} + + return ..() diff --git a/modular_skyrat/modules/contractor/code/items/modsuit/modsuit.dm b/modular_skyrat/modules/contractor/code/items/modsuit/modsuit.dm index ab6aeebb98a..85513e6b5d2 100644 --- a/modular_skyrat/modules/contractor/code/items/modsuit/modsuit.dm +++ b/modular_skyrat/modules/contractor/code/items/modsuit/modsuit.dm @@ -89,3 +89,7 @@ /obj/item/clothing/shoes/mod/contractor worn_icon = 'modular_skyrat/modules/contractor/icons/worn_modsuit.dmi' icon = 'modular_skyrat/modules/contractor/icons/modsuit.dmi' + +// For the prefs menu +/obj/item/mod/control/pre_equipped/syndicate_empty/contractor + theme = /datum/mod_theme/contractor diff --git a/modular_skyrat/modules/contractor/icons/baton_upgrades.dmi b/modular_skyrat/modules/contractor/icons/baton_upgrades.dmi index 2cde174cb9ad5f1c54d7bfdbf9b17dd4a5f4e979..2b7a971dd6c9d16d826875b50c839b826386e860 100644 GIT binary patch delta 186 zcmaFFw3&H=IG+OxGXn!dgnQ0gAf-4_RbKkQfdl^;jC=BZvw@7ywDLRKnkxV`v>!;GICEoN_9pkoMBu+`JWF~p;D;^U0yKm#7e&4!Gu zYIL*94%7&|NsAoE`|=d zirqkQ#*!evU)e_1!5cyiE*d|0q;uX!^CUx2Pwx&3;~?Y9#$F0@9!)wjDMTSy)6#zZ5)H$hD*HV; zyNy*huaMBlIB|4l*pwNwxe~Rtcl_GfaF&hX(GwXj+dQUOK%3<~T^vIsrY0vaG+z+l rIJ+ZD)hhXK{2U&hqXornybKH~ZrrO5@J(6{RLbD#>gTe~DWM4fJe^tL literal 0 HcmV?d00001 diff --git a/tgstation.dme b/tgstation.dme index a9bafbc2797..6ec10c45f90 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4804,6 +4804,11 @@ #include "modular_skyrat\modules\contractor\code\datums\contractor_support.dm" #include "modular_skyrat\modules\contractor\code\datums\contractor_tablet.dm" #include "modular_skyrat\modules\contractor\code\datums\mind_datum.dm" +#include "modular_skyrat\modules\contractor\code\datums\midround\antag_datum.dm" +#include "modular_skyrat\modules\contractor\code\datums\midround\event.dm" +#include "modular_skyrat\modules\contractor\code\datums\midround\objective.dm" +#include "modular_skyrat\modules\contractor\code\datums\midround\outfit.dm" +#include "modular_skyrat\modules\contractor\code\datums\midround\trim.dm" #include "modular_skyrat\modules\contractor\code\items\baton.dm" #include "modular_skyrat\modules\contractor\code\items\boxes.dm" #include "modular_skyrat\modules\contractor\code\items\misc.dm" diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/driftingcontractor.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/driftingcontractor.ts new file mode 100644 index 00000000000..a9b952c9a55 --- /dev/null +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/driftingcontractor.ts @@ -0,0 +1,21 @@ +import { multiline } from "common/string"; +import { Antagonist, Category } from "../base"; + +export const CONTRACTOR_MECHANICAL_DESCRIPTION + = multiline` + Float onto the station and complete as many + contracts for your employer as you can! + `; + +const DriftingContractor: Antagonist = { + key: "driftingcontractor", + name: "Drifting Contractor", + description: [ + multiline`A Syndicate agent that can spawn near the station, equipped with + top-of-the-line contractor gear, to complete contracts for the Syndicate.`, + CONTRACTOR_MECHANICAL_DESCRIPTION, + ], + category: Category.Midround, +}; + +export default DriftingContractor;