diff --git a/code/__DEFINES/job.dm b/code/__DEFINES/job.dm index 46caf83eb6a5..6ce815444e7d 100644 --- a/code/__DEFINES/job.dm +++ b/code/__DEFINES/job.dm @@ -244,10 +244,11 @@ GLOBAL_LIST_INIT(job_command_roles, JOB_COMMAND_ROLES_LIST) #define JOB_CMB_RIOT "CMB Riot Control Officer" #define JOB_CMB_MED "CMB Medical Technician" #define JOB_CMB_ENG "CMB Breaching Technician" +#define JOB_CMB_SWAT "CMB SWAT Specialist" #define JOB_CMB_RSYN "CMB Riot Control Synthetic" #define CMB_GRUNT_LIST list(JOB_CMB, JOB_CMB_TL) -#define CMB_RIOT_LIST list(JOB_CMB_TL, JOB_CMB_RIOT, JOB_CMB_MED, JOB_CMB_ENG) +#define CMB_RIOT_LIST list(JOB_CMB_TL, JOB_CMB_RIOT, JOB_CMB_MED, JOB_CMB_ENG, JOB_CMB_SWAT) //-------- FORECON --------// diff --git a/code/__DEFINES/paygrade_defs/cmb.dm b/code/__DEFINES/paygrade_defs/cmb.dm index ee72ab7ecff7..b4d442093bb0 100644 --- a/code/__DEFINES/paygrade_defs/cmb.dm +++ b/code/__DEFINES/paygrade_defs/cmb.dm @@ -25,6 +25,9 @@ /// CMBBT, CMB Breaching Technician #define PAY_SHORT_CMBBT "CMBBT" +/// CMBBT, CMB SWAT Specialist +#define PAY_SHORT_CMBSWS "CMBSWS" + /// CMBRS, CMB Riot Control Synthetic #define PAY_SHORT_CMBRS "CMBRS" diff --git a/code/datums/emergency_calls/cmb.dm b/code/datums/emergency_calls/cmb.dm index 3fd6314fb9d5..362c459aa4f0 100644 --- a/code/datums/emergency_calls/cmb.dm +++ b/code/datums/emergency_calls/cmb.dm @@ -97,7 +97,7 @@ to_chat(M, SPAN_BOLD("Following the lead of your Marshal, you have become renown for your steadfast commitment to justice, fighting against crime and corruption alike.")) to_chat(M, SPAN_BOLD("While enroute to an investigation you were diverted by your command at Anchorpoint Station to the [MAIN_SHIP_NAME] because of a distress beacon.")) to_chat(M, SPAN_BOLD("You have been stationed at Anchorpoint Station for [pick(80;"several months", 10;"only a week", 10;"years")] investigating henious crimes among the frontier.")) - to_chat(M, SPAN_BOLD("The laws of arth stretch beyond the Sol. Where others fall to corruption, you stay steadfast in your morals.")) + to_chat(M, SPAN_BOLD("The laws of Earth stretch beyond the Sol. Where others fall to corruption, you stay steadfast in your morals.")) to_chat(M, SPAN_BOLD("Corporate Officers chase after paychecks and promotions, but you are motivated to do your sworn duty and care for the population, no matter how far or isolated a colony may be.")) to_chat(M, SPAN_BOLD("Despite being stretched thin, the stalwart oath of the Marshals has continued to keep communities safe, with the CMB well respected by many. You are a representation of that oath, serve with distinction.")) @@ -212,11 +212,12 @@ /datum/emergency_call/cmb/riot_control name = "CMB - Colonial Marshals Riot Control Unit (Friendly)" - mob_max = 6 - mob_min = 2 + mob_max = 8 + mob_min = 3 probability = 20 home_base = /datum/lazy_template/ert/weyland_station - max_medics = 1 + max_heavies = 1 + max_medics = 2 max_synths = 1 max_engineers = 1 @@ -245,6 +246,10 @@ engineers++ to_chat(mob, SPAN_ROLE_HEADER("You are a CMB Breaching Technician!")) arm_equipment(mob, /datum/equipment_preset/cmb/eng, TRUE, TRUE) + else if(heavies < max_heavies && HAS_FLAG(mob?.client.prefs.toggles_ert, PLAY_HEAVY) && check_timelock(mob.client, JOB_SQUAD_SPECIALIST, time_required_for_job)) + heavies++ + to_chat(mob, SPAN_ROLE_HEADER("You are a CMB SWAT Specialist!")) + arm_equipment(mob, /datum/equipment_preset/cmb/spec, TRUE, TRUE) else if(synths < max_synths && HAS_FLAG(mob?.client.prefs.toggles_ert, PLAY_SYNTH) && mob.client.check_whitelist_status(WHITELIST_SYNTHETIC)) synths++ to_chat(mob, SPAN_ROLE_HEADER("You are a CMB Riot Control Synthetic!")) @@ -279,6 +284,6 @@ to_chat(M, SPAN_BOLD("Following the lead of your Marshal, you have become renown for your steadfast commitment to justice, fighting against crime and corruption alike.")) to_chat(M, SPAN_BOLD("While enroute to your mission you were diverted by your command at Anchorpoint Station to the [MAIN_SHIP_NAME] because of a distress beacon.")) to_chat(M, SPAN_BOLD("You have been stationed at Anchorpoint Station for [pick(80;"several months", 10;"only a week", 10;"years")] keeping orden on the frontier.")) - to_chat(M, SPAN_BOLD("The laws of arth stretch beyond the Sol. Where others fall to corruption, you stay steadfast in your morals.")) + to_chat(M, SPAN_BOLD("The laws of Earth stretch beyond the Sol. Where others fall to corruption, you stay steadfast in your morals.")) to_chat(M, SPAN_BOLD("Corporate Officers chase after paychecks and promotions, but you are motivated to do your sworn duty and care for the population, no matter how far or isolated a colony may be.")) to_chat(M, SPAN_BOLD("Despite being stretched thin, the stalwart oath of the Marshals has continued to keep communities safe, with the CMB well respected by many. You are a representation of that oath, serve with distinction.")) diff --git a/code/datums/factions/cmb.dm b/code/datums/factions/cmb.dm index 12febb4b9977..6f6eee638779 100644 --- a/code/datums/factions/cmb.dm +++ b/code/datums/factions/cmb.dm @@ -29,5 +29,7 @@ hud_icon_state = "syn" if(JOB_CMB_TL) hud_icon_state = "mar" + if(JOB_CMB_SWAT) + hud_icon_state = "spec" if(hud_icon_state) holder.overlays += image('icons/mob/hud/marine_hud.dmi', H, "cmb_[hud_icon_state]") diff --git a/code/datums/paygrades/factions/other/cmb.dm b/code/datums/paygrades/factions/other/cmb.dm index 5eff032b1559..5ee7132e48ee 100644 --- a/code/datums/paygrades/factions/other/cmb.dm +++ b/code/datums/paygrades/factions/other/cmb.dm @@ -34,6 +34,10 @@ paygrade = PAY_SHORT_CMBBT name = "CMB Breaching Technician" +/datum/paygrade/cmb/spec + paygrade = PAY_SHORT_CMBSWS + name = "CMB SWAT Specialist" + /datum/paygrade/cmb/icc paygrade = PAY_SHORT_ICCA name = "Interstellar Commerce Commission Agent" diff --git a/code/datums/skills/cmb.dm b/code/datums/skills/cmb.dm index 7c2a08e7399c..d1bce90e45a6 100644 --- a/code/datums/skills/cmb.dm +++ b/code/datums/skills/cmb.dm @@ -47,6 +47,20 @@ COLONIAL MARSHALS SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER, ) +/datum/skills/cmb/spec + name = "CMB SWAT Specialist" + skills = list( + SKILL_POLICE = SKILL_POLICE_SKILLED, + SKILL_CQC = SKILL_CQC_MASTER, + SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_DEFAULT, + SKILL_FIREARMS = SKILL_FIREARMS_EXPERT, + SKILL_FIREMAN = SKILL_FIREMAN_EXPERT, + SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, + SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED, + SKILL_JTAC = SKILL_JTAC_BEGINNER, + SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER, + ) + /datum/skills/cmb/leader name = "CMB Marshal" skills = list( @@ -61,7 +75,7 @@ COLONIAL MARSHALS SKILL_FIREARMS = SKILL_FIREARMS_MAX, SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED, SKILL_VEHICLE = SKILL_VEHICLE_SMALL, - SKILL_ENDURANCE = SKILL_ENDURANCE_EXPERT, + SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER, SKILL_JTAC = SKILL_JTAC_EXPERT, ) diff --git a/code/game/jobs/job/special/cmb.dm b/code/game/jobs/job/special/cmb.dm index cfbe191af207..9e0b4f69ae8d 100644 --- a/code/game/jobs/job/special/cmb.dm +++ b/code/game/jobs/job/special/cmb.dm @@ -18,6 +18,10 @@ /datum/job/special/cmb/engi title = JOB_CMB_ENG +// CMB SWAT Specialist +/datum/job/special/cmb/spec + title = JOB_CMB_SWAT + // CMB Investigative Synthetic /datum/job/special/cmb/synthetic title = JOB_CMB_SYN diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 77442158167b..96796db0434c 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -1178,6 +1178,10 @@ new /obj/item/ammo_magazine/pistol/m1911(src) new /obj/item/ammo_magazine/pistol/m1911(src) +/obj/item/storage/belt/gun/m4a3/m1911/socom/black + icon_state = "s_m4a3_holster" + has_gamemode_skin = FALSE + /obj/item/storage/belt/gun/m4a3/heavy/fill_preset_inventory() handle_item_insertion(new /obj/item/weapon/gun/pistol/heavy()) new /obj/item/ammo_magazine/pistol/heavy(src) diff --git a/code/modules/gear_presets/cmb.dm b/code/modules/gear_presets/cmb.dm index 00ef906c6736..b477d6caf1b7 100644 --- a/code/modules/gear_presets/cmb.dm +++ b/code/modules/gear_presets/cmb.dm @@ -242,7 +242,7 @@ new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/stack/medical/advanced/bruise_pack, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/radio, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical, WEAR_IN_BACK) /datum/equipment_preset/cmb/riot @@ -277,7 +277,7 @@ new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot, WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/radio, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/storage/box/flashbangs, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical, WEAR_IN_BACK) switch(choice) if(1 to 4) @@ -285,10 +285,8 @@ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/revolver/cmb, WEAR_IN_ACCESSORY) new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/cmb/normalpoint, WEAR_IN_ACCESSORY) new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/cmb/normalpoint, WEAR_IN_ACCESSORY) - new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/shotgun/pump/dual_tube/cmb, WEAR_J_STORE) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/shotgun/pump/dual_tube/cmb/swat, WEAR_J_STORE) new_human.equip_to_slot_or_del(new /obj/item/restraint/handcuffs/zip, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/attachable/gyro, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/attachable/magnetic_harness, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/storage/box/packet/smoke, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/storage/belt/shotgun/black, WEAR_WAIST) new_human.equip_to_slot_or_del(new /obj/item/weapon/shield/riot/metal, WEAR_R_HAND) @@ -403,7 +401,7 @@ new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/adv, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/restraint/handcuffs/zip, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/restraint/handcuffs/zip, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical, WEAR_IN_BACK) /datum/equipment_preset/cmb/eng name = "CMB - Breaching Technician" @@ -451,11 +449,60 @@ new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/high_explosive/m15/rubber, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/radio, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/weapon/baton, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/adv, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/restraint/handcuffs/zip, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/restraint/handcuffs/zip, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/large_stack, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/stack/sheet/plasteel/large_stack, WEAR_IN_BACK) +//*****************************************************************************************************/ + +/datum/equipment_preset/cmb/spec + name = "CMB - SWAT Specialist" + paygrade = PAY_SHORT_CMBSWS + idtype = /obj/item/card/id/deputy/riot + role_comm_title = "CMB Spec" + flags = EQUIPMENT_PRESET_EXTRA + + assignment = "CMB SWAT Specialist" + rank = JOB_CMB_SWAT + skills = /datum/skills/cmb/spec + +/datum/equipment_preset/cmb/spec/load_gear(mob/living/carbon/human/new_human) + //clothes + new_human.equip_to_slot_or_del(new headset_type, WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/cmb, WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/webbing, WEAR_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m16, WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m16, WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m16, WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/holobadge/cord, WEAR_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/cmb/light, WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/storage/box/MRE, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m16, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m16, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/swat, WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/xm177/tactical, WEAR_J_STORE) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/cmb/engi, WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/prop/helmetgarb/helmet_nvg, WEAR_IN_HELMET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/veteran/pmc/knife, WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud/tactical, WEAR_EYES) + //belt + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/m1911/socom/black, WEAR_WAIST) + //pouches + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/ert, WEAR_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/tools/tactical/sec/full, WEAR_R_STORE) + //backpack + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack, WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/high_explosive/m15/rubber, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/radio, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/binoculars, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector/m717, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge/rubber, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m16, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m16, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m16, WEAR_IN_BACK) + //*****************************************************************************************************/ /datum/equipment_preset/cmb/synth diff --git a/code/modules/gear_presets/corpses.dm b/code/modules/gear_presets/corpses.dm index dc4cb3887fb9..f28848b8e40b 100644 --- a/code/modules/gear_presets/corpses.dm +++ b/code/modules/gear_presets/corpses.dm @@ -253,11 +253,13 @@ new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/CMB/limited(new_human), WEAR_L_EAR) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/cmb(new_human), WEAR_BODY) new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot(new_human), WEAR_BACK) - new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/swat, WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/swat(new_human), WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/security/MP/CMB/full(new_human), WEAR_WAIST) new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/cmb(new_human), WEAR_HEAD) new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/mgoggles/cmb_riot_shield, WEAR_IN_HELMET) new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud/tactical(new_human), WEAR_EYES) new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/cmb(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/shotgun/pump/dual_tube/cmb(new_human), WEAR_J_STORE) new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET) . = ..() diff --git a/code/modules/projectiles/guns/rifles.dm b/code/modules/projectiles/guns/rifles.dm index c2decbb12689..a7575583bd89 100644 --- a/code/modules/projectiles/guns/rifles.dm +++ b/code/modules/projectiles/guns/rifles.dm @@ -1087,6 +1087,16 @@ damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_6 recoil_unwielded = RECOIL_AMOUNT_TIER_2 +/obj/item/weapon/gun/rifle/xm177/tactical + random_spawn_chance = 100 + random_spawn_rail = list( + /obj/item/attachable/reflex, + ) + random_spawn_under = list( + /obj/item/attachable/lasersight, + ) + + //------------------------------------------------------- //AR10 rifle //basically an early M16 diff --git a/code/modules/projectiles/guns/shotguns.dm b/code/modules/projectiles/guns/shotguns.dm index f51fde275466..6f1354272810 100644 --- a/code/modules/projectiles/guns/shotguns.dm +++ b/code/modules/projectiles/guns/shotguns.dm @@ -1276,6 +1276,9 @@ can cause issues with ammo types getting mixed up during the burst. recoil = RECOIL_AMOUNT_TIER_4 recoil_unwielded = RECOIL_AMOUNT_TIER_2 +/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb/swat + starting_attachment_types = list(/obj/item/attachable/stock/hg3712, /obj/item/attachable/magnetic_harness, /obj/item/attachable/gyro) + /obj/item/weapon/gun/shotgun/pump/dual_tube/cmb/m3717 name = "\improper M37-17 pump shotgun" desc = "A military version of the iconic HG 37-12, this design can fit one extra shell in each of its dual-tube internal magazines, and fires shells with increased velocity, resulting in more damage. Issued to select USCM vessels and stations in the outer veil. A button on the side toggles the internal tubes." diff --git a/icons/mob/hud/marine_hud.dmi b/icons/mob/hud/marine_hud.dmi index 053d0ccc9a5c..2f8abea04392 100644 Binary files a/icons/mob/hud/marine_hud.dmi and b/icons/mob/hud/marine_hud.dmi differ diff --git a/icons/mob/hud/sec_hud.dmi b/icons/mob/hud/sec_hud.dmi index 015cb520f4fc..e0eb51bc14e3 100644 Binary files a/icons/mob/hud/sec_hud.dmi and b/icons/mob/hud/sec_hud.dmi differ diff --git a/icons/mob/humans/onmob/suit_slot.dmi b/icons/mob/humans/onmob/suit_slot.dmi index bed300c7e7b8..0a41940b7298 100644 Binary files a/icons/mob/humans/onmob/suit_slot.dmi and b/icons/mob/humans/onmob/suit_slot.dmi differ