Antag loadout refactor, also deathsquads I guess (#7308)

all antags that previously had massive equip chains now use the outfit datum system
    commandos + deathsquad (aka Syndicate Commandos and NT Asset Protection) have been moved out of nested alert menu hell to the new ERT system as admin-spawned ERTs, they do not appear normally
    all outfit datums will now take into account backpack preferences
    made the ERT job announcement / details more obvious
This commit is contained in:
JohnWildkins
2019-11-03 12:49:42 -05:00
committed by Erki
parent b15f676ebd
commit aa5482ca8e
22 changed files with 596 additions and 518 deletions

View File

@@ -2,3 +2,7 @@
name = "Nanotrasen ERT"
chance = 20
spawner = /datum/ghostspawner/human/ert/nanotrasen
/datum/responseteam/deathsquad
name = "Nanotrasen Asset Protection"
spawner = /datum/ghostspawner/human/ert/deathsquad

View File

@@ -1,4 +1,8 @@
/datum/responseteam/mercenary
name = "Independent Mercenaries"
chance = 10
spawner = /datum/ghostspawner/human/ert/mercenary
spawner = /datum/ghostspawner/human/ert/mercenary
/datum/responseteam/syndicate
name = "Syndicate Commandos"
spawner = /datum/ghostspawner/human/ert/commando

View File

@@ -154,3 +154,101 @@
/obj/item/weapon/handcuffs/ziptie = 2,
/obj/item/weapon/shield/energy = 1
)
// Deathsquads -- Admin Spawn Only
/datum/outfit/admin/deathsquad
name = "Asset Protection"
uniform = /obj/item/clothing/under/ert
back = null
belt = /obj/item/weapon/storage/belt/security/tactical
shoes = null
gloves = null
mask = /obj/item/clothing/mask/gas/swat
l_ear = /obj/item/device/radio/headset/ert
glasses = /obj/item/clothing/glasses/sunglasses/sechud/tactical
id = /obj/item/weapon/card/id/asset_protection
l_pocket = /obj/item/weapon/plastique
r_pocket = /obj/item/weapon/melee/energy/sword
l_hand = /obj/item/weapon/gun/energy/rifle/pulse
belt_contents = list(
/obj/item/ammo_magazine/a454 = 2,
/obj/item/weapon/melee/baton/loaded = 1,
/obj/item/weapon/shield/energy = 1,
/obj/item/weapon/grenade/flashbang = 2,
/obj/item/weapon/handcuffs = 2,
/obj/item/weapon/grenade/frag = 1
)
var/syndie = FALSE
/datum/outfit/admin/deathsquad/leader
name = "Asset Protection Lead"
l_pocket = /obj/item/weapon/pinpointer
/datum/outfit/admin/deathsquad/syndicate
name = "Syndicate Commando"
uniform = /obj/item/clothing/under/syndicate
belt = /obj/item/weapon/storage/belt/military/syndicate
mask = /obj/item/clothing/mask/gas/syndicate
l_ear = /obj/item/device/radio/headset/syndicate
glasses = /obj/item/clothing/glasses/thermal
id = /obj/item/weapon/card/id/syndicate_ert
l_pocket = /obj/item/ammo_magazine/c45m
l_hand = /obj/item/weapon/gun/projectile/automatic/rifle/sts35
belt_contents = list(
/obj/item/ammo_magazine/c762 = 3,
/obj/item/weapon/pinpointer = 1,
/obj/item/weapon/shield/energy = 1,
/obj/item/weapon/handcuffs = 1,
/obj/item/weapon/grenade/flashbang = 1,
/obj/item/weapon/grenade/frag = 1,
/obj/item/weapon/plastique = 1
)
syndie = TRUE
/datum/outfit/admin/deathsquad/syndicate/leader
name = "Syndicate Commando Lead"
l_pocket = /obj/item/weapon/pinpointer
/datum/outfit/admin/deathsquad/get_id_access()
return get_all_accesses()
/datum/outfit/admin/deathsquad/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
. = ..()
if(visualsOnly)
return
var/obj/item/clothing/accessory/holster/armpit/hold = new(H)
var/obj/item/weapon/gun/projectile/weapon
if(syndie)
weapon = new /obj/item/weapon/gun/projectile/silenced(H)
else
weapon = new /obj/item/weapon/gun/projectile/revolver/mateba(H)
if(weapon)
hold.contents += weapon
hold.holstered = weapon
var/obj/item/clothing/under/U = H.get_equipped_item(slot_w_uniform)
U.attackby(hold, H)
var/obj/item/weapon/rig/mercrig
if(syndie)
mercrig = new /obj/item/weapon/rig/merc(get_turf(H))
else
mercrig = new /obj/item/weapon/rig/ert/assetprotection(get_turf(H))
if(mercrig)
H.put_in_hands(mercrig)
H.equip_to_slot_or_del(mercrig, slot_back)
addtimer(CALLBACK(mercrig, /obj/item/weapon/rig/.proc/toggle_seals, H, TRUE), 2 SECONDS)

View File

@@ -6,7 +6,7 @@
//If a list of paths is supplied a random item from that list is selected
var/uniform = null
var/suit = null
var/back = null
var/back = null // Mutually exclusive with and will override backpack choices below. Use for RIGs, tanks, etc.
var/belt = null
var/gloves = null
var/shoes = null
@@ -26,6 +26,14 @@
var/id = null
var/pda = null
// Must be paths, used to allow player-pref backpack choice
var/allow_backbag_choice = FALSE
var/backpack = /obj/item/weapon/storage/backpack
var/satchel = /obj/item/weapon/storage/backpack/satchel_norm
var/satchel_alt = /obj/item/weapon/storage/backpack/satchel
var/dufflebag = /obj/item/weapon/storage/backpack/duffel
var/messengerbag = /obj/item/weapon/storage/backpack/messenger
var/internals_slot = null //ID of slot containing a gas tank
var/list/backpack_contents = list() //In the list(path=count,otherpath=count) format
var/list/accessory_contents = list()
@@ -34,6 +42,23 @@
/datum/outfit/proc/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
//to be overriden for customization depending on client prefs,species etc
if(allow_backbag_choice)
var/use_job_specific = H.backbag_style == 1
switch(H.backbag)
if (1)
back = null
if (2)
back = use_job_specific ? backpack : /obj/item/weapon/storage/backpack
if (3)
back = use_job_specific ? satchel : /obj/item/weapon/storage/backpack/satchel_norm
if (4)
back = use_job_specific ? satchel_alt : /obj/item/weapon/storage/backpack/satchel
if (5)
back = use_job_specific ? dufflebag : /obj/item/weapon/storage/backpack/duffel
if (6)
back = use_job_specific ? messengerbag : /obj/item/weapon/storage/backpack/messenger
else
back = backpack //Department backpack
return
// Used to equip an item to the mob. Mainly to prevent copypasta for collect_not_del.
@@ -43,8 +68,15 @@
if(isnum(path)) //Check if parameter is not numeric. Must be a path, list of paths or name of a gear datum
CRASH("Outfit [name] - Parameter path: [path] is numeric.")
if(islist(path)) //If its a list, select a random item
var/itempath = pick(path)
if(islist(path)) //If its a list, select a random item; if back, try to use preference
var/list/pathlist = path
var/itempath
if(is_type_in_list(/obj/item/weapon/storage/backpack, pathlist) && H.backbag && pathlist.len == 5)
if(H.backbag < 2)
return // They don't want a backpack
itempath = pathlist[H.backbag - 2]
else
itempath = pick(pathlist)
I = new itempath(H)
else if(gear_datums[path]) //If its something else, we´ll check if its a gearpath and try to spawn it
var/datum/gear/G = gear_datums[path]

View File

@@ -127,138 +127,6 @@
/datum/outfit/admin/lance_operative/get_id_access()
return get_syndicate_access(id_access)
/datum/outfit/admin/syndicate
name = "Syndicate Agent"
uniform = /obj/item/clothing/under/syndicate
back = /obj/item/weapon/storage/backpack
belt = /obj/item/weapon/storage/belt/utility/full
gloves = /obj/item/clothing/gloves/combat
shoes = /obj/item/clothing/shoes/combat
l_ear = /obj/item/device/radio/headset/syndicate
id = /obj/item/weapon/card/id/syndicate
r_pocket = /obj/item/device/radio/uplink
backpack_contents = list(
/obj/item/weapon/storage/box/engineer = 1,
/obj/item/device/flashlight = 1,
/obj/item/weapon/card/emag = 1,
/obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket = 1,
/obj/item/device/multitool = 1
)
var/id_access = "Syndicate Operative"
var/uplink_uses = 20
/datum/outfit/admin/syndicate/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
. = ..()
if(visualsOnly)
return
var/obj/item/device/radio/uplink/U = H.r_store
if(istype(U))
U.hidden_uplink.uplink_owner = "[H.key]"
U.hidden_uplink.uses = uplink_uses
/datum/outfit/admin/syndicate/get_id_access()
return get_syndicate_access(id_access)
/datum/outfit/admin/syndicate/operative
name = "Syndicate Operative"
suit = /obj/item/clothing/suit/space/void/merc
belt = /obj/item/weapon/storage/belt/military/syndicate
head = /obj/item/clothing/head/helmet/space/void/merc
mask = /obj/item/clothing/mask/gas/syndicate
l_ear = /obj/item/device/radio/headset/syndicate
glasses = /obj/item/clothing/glasses/night
shoes = /obj/item/clothing/shoes/magboots
l_pocket = /obj/item/weapon/pinpointer/nukeop
l_hand = /obj/item/weapon/tank/jetpack/void
backpack_contents = list(
/obj/item/weapon/storage/box/engineer = 1,
/obj/item/weapon/reagent_containers/pill/cyanide = 1,
/obj/item/weapon/gun/projectile/automatic/x9 = 1,
/obj/item/ammo_magazine/c45x = 1,
/obj/item/weapon/crowbar/red = 1,
/obj/item/weapon/plastique = 1,
/obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket = 1,
/obj/item/device/flashlight = 1,
/obj/item/clothing/shoes/combat = 1
)
/datum/outfit/admin/syndicate/officer
name = "Syndicate Officer"
head = /obj/item/clothing/head/beret
mask = /obj/item/clothing/mask/smokable/cigarette/cigar/havana
belt = /obj/item/weapon/gun/projectile/deagle
l_ear = /obj/item/device/radio/headset/syndicate
l_pocket = /obj/item/weapon/pinpointer/advpinpointer
r_pocket = null // stop them getting a radio uplink, they get an implant instead
backpack_contents = list(
/obj/item/weapon/storage/box/engineer = 1,
/obj/item/device/flashlight = 1,
/obj/item/weapon/reagent_containers/pill/cyanide = 1,
/obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket = 1,
/obj/item/ammo_magazine/a50 = 2,
/obj/item/clothing/shoes/magboots = 1,
/obj/item/weapon/flame/lighter/zippo = 1
)
implants = list(
/obj/item/weapon/implant/explosive
)
id_access = "Syndicate Operative Leader"
/datum/outfit/admin/syndicate/spy
name = "Syndicate Spy"
uniform = /obj/item/clothing/under/suit_jacket/really_black
shoes = /obj/item/clothing/shoes/black/noslip
uplink_uses = 40
id_access = "Syndicate Agent"
implants = list(
/obj/item/weapon/implant/explosive
)
/datum/outfit/admin/syndicate/ninja
name = "Infiltrator"
uniform = /obj/item/clothing/under/syndicate/ninja
back = /obj/item/weapon/rig/light/ninja
belt = /obj/item/weapon/storage/belt/ninja
shoes = /obj/item/clothing/shoes/swat/ert
gloves = /obj/item/clothing/ring/ninja
mask = /obj/item/clothing/mask/balaclava
l_ear = /obj/item/device/radio/headset/ninja
glasses = /obj/item/clothing/glasses/sunglasses/sechud/tactical
id = /obj/item/weapon/card/id/syndicate
l_pocket = null
r_pocket = null
accessory = /obj/item/clothing/accessory/storage/pouches/black
backpack_contents = list()
belt_contents = list(
/obj/item/device/flashlight/maglight = 1,
/obj/item/weapon/crowbar = 1,
/obj/item/weapon/screwdriver = 1,
/obj/item/device/paicard = 1
)
id_access = "Syndicate Agent"
/datum/outfit/admin/syndicate/ninja/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
. = ..()
if(visualsOnly)
return
H.equip_to_slot_or_del(new /obj/item/device/ninja_uplink(H, H.mind), slot_l_store)
/datum/outfit/admin/nt
name = "NanoTrasen Representative"

View File

@@ -0,0 +1,276 @@
// Anything that's coded as an "antagonist" that needs outfits should go here, unless it's an ERT.
/datum/outfit/admin/syndicate
name = "Syndicate Agent"
allow_backbag_choice = TRUE
uniform = /obj/item/clothing/under/syndicate
back = null
backpack = /obj/item/weapon/storage/backpack/syndie
satchel = /obj/item/weapon/storage/backpack/satchel_syndie
satchel_alt = /obj/item/weapon/storage/backpack/satchel
dufflebag = /obj/item/weapon/storage/backpack/duffel/syndie
messengerbag = /obj/item/weapon/storage/backpack/messenger/syndie
belt = /obj/item/weapon/storage/belt/utility/full
gloves = /obj/item/clothing/gloves/combat
shoes = /obj/item/clothing/shoes/combat
l_ear = /obj/item/device/radio/headset/syndicate
id = /obj/item/weapon/card/id/syndicate
r_pocket = /obj/item/device/radio/uplink
backpack_contents = list(
/obj/item/weapon/storage/box/engineer = 1,
/obj/item/device/flashlight = 1,
/obj/item/weapon/card/emag = 1,
/obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket = 1,
/obj/item/device/multitool = 1
)
var/id_access = "Syndicate Operative"
var/uplink_uses = DEFAULT_TELECRYSTAL_AMOUNT
/datum/outfit/admin/syndicate/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
. = ..()
if(visualsOnly)
return
var/obj/item/device/radio/uplink/U = H.r_store
if(istype(U))
U.hidden_uplink.uplink_owner = "[H.key]"
U.hidden_uplink.uses = uplink_uses
/datum/outfit/admin/syndicate/get_id_access()
return get_syndicate_access(id_access)
/datum/outfit/admin/syndicate/operative
name = "Syndicate Operative"
suit = /obj/item/clothing/suit/space/void/merc
belt = /obj/item/weapon/storage/belt/military/syndicate
head = /obj/item/clothing/head/helmet/space/void/merc
mask = /obj/item/clothing/mask/gas/syndicate
l_ear = /obj/item/device/radio/headset/syndicate
glasses = /obj/item/clothing/glasses/night
shoes = /obj/item/clothing/shoes/magboots
l_pocket = /obj/item/weapon/pinpointer/nukeop
l_hand = /obj/item/weapon/tank/jetpack/void
backpack_contents = list(
/obj/item/weapon/storage/box/engineer = 1,
/obj/item/weapon/reagent_containers/pill/cyanide = 1,
/obj/item/weapon/gun/projectile/automatic/x9 = 1,
/obj/item/ammo_magazine/c45x = 1,
/obj/item/weapon/crowbar/red = 1,
/obj/item/weapon/plastique = 1,
/obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket = 1,
/obj/item/device/flashlight = 1,
/obj/item/clothing/shoes/combat = 1
)
/datum/outfit/admin/syndicate/officer
name = "Syndicate Officer"
head = /obj/item/clothing/head/beret
mask = /obj/item/clothing/mask/smokable/cigarette/cigar/havana
belt = /obj/item/weapon/gun/projectile/deagle
l_ear = /obj/item/device/radio/headset/syndicate
l_pocket = /obj/item/weapon/pinpointer/advpinpointer
r_pocket = null // stop them getting a radio uplink, they get an implant instead
backpack_contents = list(
/obj/item/weapon/storage/box/engineer = 1,
/obj/item/device/flashlight = 1,
/obj/item/weapon/reagent_containers/pill/cyanide = 1,
/obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket = 1,
/obj/item/ammo_magazine/a50 = 2,
/obj/item/clothing/shoes/magboots = 1,
/obj/item/weapon/flame/lighter/zippo = 1
)
implants = list(
/obj/item/weapon/implant/explosive
)
id_access = "Syndicate Operative Leader"
/datum/outfit/admin/syndicate/spy
name = "Syndicate Spy"
uniform = /obj/item/clothing/under/suit_jacket/really_black
shoes = /obj/item/clothing/shoes/black/noslip
uplink_uses = 40
id_access = "Syndicate Agent"
implants = list(
/obj/item/weapon/implant/explosive
)
// Syndicate Auxiliary Outfits (ninja, merc, etc.)
/datum/outfit/admin/syndicate/ninja
name = "Infiltrator"
uniform = /obj/item/clothing/under/syndicate/ninja
back = /obj/item/weapon/rig/light/ninja
belt = /obj/item/weapon/storage/belt/ninja
shoes = /obj/item/clothing/shoes/swat/ert
gloves = /obj/item/clothing/ring/ninja
mask = /obj/item/clothing/mask/balaclava
l_ear = /obj/item/device/radio/headset/ninja
glasses = /obj/item/clothing/glasses/sunglasses/sechud/tactical
id = /obj/item/weapon/card/id/syndicate
l_pocket = null
r_pocket = null
accessory = /obj/item/clothing/accessory/storage/pouches/black
backpack_contents = list()
belt_contents = list(
/obj/item/device/flashlight/maglight = 1,
/obj/item/weapon/crowbar = 1,
/obj/item/weapon/screwdriver = 1,
/obj/item/device/paicard = 1
)
id_access = "Syndicate Agent"
/datum/outfit/admin/syndicate/ninja/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
. = ..()
if(visualsOnly)
return
H.equip_to_slot_or_del(new /obj/item/device/ninja_uplink(H, H.mind), slot_l_store)
/datum/outfit/admin/syndicate/mercenary
name = "Mercenary"
uniform = /obj/item/clothing/under/syndicate
belt = /obj/item/weapon/storage/belt/military
gloves = /obj/item/clothing/gloves/swat
shoes = /obj/item/clothing/shoes/jackboots
backpack_contents = list(
/obj/item/weapon/storage/box/engineer = 1,
/obj/item/weapon/reagent_containers/pill/cyanide = 1
)
/datum/outfit/admin/syndicate/mercenary/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
. = ..()
if(visualsOnly)
return
if(!H.shoes)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots/unathi(H), slot_shoes)
/datum/outfit/admin/syndicate/raider
name = "Raider"
uniform = list(
/obj/item/clothing/under/soviet,
/obj/item/clothing/under/pirate,
/obj/item/clothing/under/redcoat,
/obj/item/clothing/under/serviceoveralls,
/obj/item/clothing/under/captain_fly,
/obj/item/clothing/under/det,
/obj/item/clothing/under/brown,
/obj/item/clothing/under/syndicate/tracksuit
)
suit = list(
/obj/item/clothing/suit/pirate,
/obj/item/clothing/suit/hgpirate,
/obj/item/clothing/suit/storage/toggle/bomber,
/obj/item/clothing/suit/storage/toggle/leather_jacket,
/obj/item/clothing/suit/storage/toggle/brown_jacket,
/obj/item/clothing/suit/unathi/mantle,
/obj/item/clothing/accessory/poncho,
/obj/item/clothing/suit/storage/hooded/wintercoat/hoodie/grey
)
shoes = list(
/obj/item/clothing/shoes/jackboots,
/obj/item/clothing/shoes/workboots,
/obj/item/clothing/shoes/brown,
/obj/item/clothing/shoes/laceup
)
glasses = list(
/obj/item/clothing/glasses/thermal,
/obj/item/clothing/glasses/eyepatch/hud/thermal,
/obj/item/clothing/glasses/thermal/plain/monocle,
/obj/item/clothing/glasses/thermal/aviator
)
head = list(
/obj/item/clothing/head/bearpelt,
/obj/item/clothing/head/ushanka,
/obj/item/clothing/head/pirate,
/obj/item/clothing/head/bandana,
/obj/item/clothing/head/hgpiratecap
)
back = null
belt = null
gloves = null
l_ear = /obj/item/device/radio/headset/raider
r_pocket = null
id = /obj/item/weapon/storage/wallet
backpack_contents = list()
/datum/outfit/admin/syndicate/raider/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
. = ..()
if(visualsOnly)
return
if(!H.shoes)
var/fallback_type = pick(/obj/item/clothing/shoes/sandal, /obj/item/clothing/shoes/jackboots/unathi)
H.equip_to_slot_or_del(new fallback_type(H), slot_shoes)
var/obj/item/weapon/storage/wallet/W = H.wear_id
var/obj/item/weapon/card/id/raider/id = new(H)
id.name = "[H.real_name]'s Passport"
if(W)
W.handle_item_insertion(id)
spawn_money(rand(50,150)*10,W)
// Non-syndicate antag outfits
/datum/outfit/admin/highlander
name = "Highlander"
uniform = /obj/item/clothing/under/kilt
head = /obj/item/clothing/head/beret
shoes = /obj/item/clothing/shoes/combat
l_ear = /obj/item/device/radio/headset/heads/captain
l_hand = /obj/item/weapon/material/sword
l_pocket = /obj/item/weapon/pinpointer
id = /obj/item/weapon/card/id/highlander
/datum/outfit/admin/highlander/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
. = ..()
if(visualsOnly)
return
var/obj/item/weapon/card/id/W = H.wear_id
if(W)
W.name = "[H.real_name]'s ID"
W.registered_name = H.real_name
/datum/outfit/admin/wizard
name = "Wizard"
allow_backbag_choice = TRUE
uniform = /obj/item/clothing/under/lightpurple
back = null
backpack = /obj/item/weapon/storage/backpack/wizard
satchel = /obj/item/weapon/storage/backpack/satchel_wizard
satchel_alt = /obj/item/weapon/storage/backpack/satchel
dufflebag = /obj/item/weapon/storage/backpack/duffel/wizard
messengerbag = /obj/item/weapon/storage/backpack/messenger/wizard
suit = /obj/item/clothing/suit/wizrobe
head = /obj/item/clothing/head/wizard
shoes = /obj/item/clothing/shoes/sandal
l_ear = /obj/item/device/radio/headset
r_pocket = /obj/item/weapon/teleportation_scroll
l_hand = /obj/item/weapon/spellbook
backpack_contents = list(
/obj/item/weapon/storage/box = 1
)