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>
This commit is contained in:
Zonespace
2022-04-03 22:25:42 -04:00
committed by GitHub
co-authored by GoldenAlpharex
parent fb97697d14
commit b995fbe31b
19 changed files with 311 additions and 33 deletions
+5 -2
View File
@@ -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,
@@ -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)
@@ -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 = {"<p>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.</p>
@@ -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()
Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 7.2 KiB

@@ -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
@@ -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
@@ -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
@@ -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
@@ -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()
@@ -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'
@@ -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)
. += "<br><br>[span_boldnotice("[src] has the following upgrades attached:")]"
for(var/obj/item/baton_upgrade/upgrade in contents)
. += "<br>[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 += "<br><br>[span_boldnotice("[batong] has the following upgrades attached:")]"
desc += "<br>[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
@@ -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
@@ -5,8 +5,8 @@
info = {"<p>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.</p>
<p>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
<p>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.</p>
<p>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 = {"<p>Welcome agent, congratulations on successfully getting in range of the station.</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<h3>Using the tablet</h3>
<ol>
<li>Open the Syndicate Contract Uplink program.</li>
<li>Here, you can accept a contract, and redeem your TC payments from completed contracts.</li>
<li>The payment number shown in brackets is the bonus you'll receive when bringing your target <b>alive</b>. You receive the
other number regardless of if they were alive or dead.</li>
<li>Contracts are completed by bringing the target to designated dropoff, calling for extraction, and putting them
inside the pod.</li>
</ol>
<p>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.</p>
<p>The tablet can also be recharged at any cell charger.</p>
<h3>Extracting</h3>
<ol>
<li>Make sure both yourself and your target are at the dropoff.</li>
<li>Call the extraction, and stand back from the drop point.</li>
<li>If it fails, make sure your target is inside, and there's a free space for the pod to land.</li>
<li>Grab your target, and drag them into the pod.</li>
</ol>
<h3>Ransoms</h3>
<p>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.</p>
<p>Good luck agent. You can burn this document with the supplied lighter.</p>"}
return ..()
@@ -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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 354 B

After

Width:  |  Height:  |  Size: 435 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

+5
View File
@@ -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"
@@ -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;