diff --git a/code/__DEFINES/job.dm b/code/__DEFINES/job.dm index 0173a55e2d17..5a02340848d7 100644 --- a/code/__DEFINES/job.dm +++ b/code/__DEFINES/job.dm @@ -245,8 +245,14 @@ GLOBAL_LIST_INIT(job_command_roles, JOB_COMMAND_ROLES_LIST) #define JOB_CMB_SYN "CMB Investigative Synthetic" #define JOB_CMB_ICC "Interstellar Commerce Commission Corporate Liaison" #define JOB_CMB_OBS "Interstellar Human Rights Observer" +#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, JOB_CMB_SWAT) //-------- FORECON --------// @@ -402,4 +408,4 @@ GLOBAL_LIST_INIT(job_command_roles, JOB_COMMAND_ROLES_LIST) ///For denying certain traits being applied to people. ie. bad leg ///'Grunt' lists are for people who wouldn't logically get the bad leg trait, ie. UPP marine counterparts. -#define JOB_ERT_GRUNT_LIST list(DUTCH_JOB_LIST, RIOT_JOB_LIST, PROVOST_JOB_LIST, CMB_GRUNT_LIST, CLF_JOB_LIST, UPP_JOB_GRUNT_LIST, UPP_COMMANDO_JOB_LIST, CONTRACTOR_JOB_LIST, ROLES_WY_GOONS, ROLES_WY_PMC_ALL) +#define JOB_ERT_GRUNT_LIST list(DUTCH_JOB_LIST, RIOT_JOB_LIST, PROVOST_JOB_LIST, CMB_GRUNT_LIST, CLF_JOB_LIST, UPP_JOB_GRUNT_LIST, UPP_COMMANDO_JOB_LIST, CONTRACTOR_JOB_LIST, ROLES_WY_GOONS, ROLES_WY_PMC_ALL, CMB_RIOT_LIST) diff --git a/code/__DEFINES/mob_hud.dm b/code/__DEFINES/mob_hud.dm index 97cbe0281924..c57690da91ee 100644 --- a/code/__DEFINES/mob_hud.dm +++ b/code/__DEFINES/mob_hud.dm @@ -44,9 +44,10 @@ #define MOB_HUD_FACTION_TWE 13 #define MOB_HUD_FACTION_CLF 14 #define MOB_HUD_FACTION_PMC 15 -#define MOB_HUD_HUNTER 16 -#define MOB_HUD_HUNTER_CLAN 17 -#define MOB_HUD_EXECUTE 18 +#define MOB_HUD_FACTION_CMB 16 +#define MOB_HUD_HUNTER 17 +#define MOB_HUD_HUNTER_CLAN 18 +#define MOB_HUD_EXECUTE 19 //for SL/FTL/LZ targeting on locator huds #define TRACKER_SL "track_sl" diff --git a/code/__DEFINES/paygrade_defs/cmb.dm b/code/__DEFINES/paygrade_defs/cmb.dm index 8ebd7902dbf8..a9a5f2c20b89 100644 --- a/code/__DEFINES/paygrade_defs/cmb.dm +++ b/code/__DEFINES/paygrade_defs/cmb.dm @@ -16,5 +16,20 @@ /// CMBD, CMB Deputy #define PAY_SHORT_CMBD "CMBD" +/// CMBR, CMB Riot Control Officer +#define PAY_SHORT_CMBR "CMBR" + +/// CMBMT, CMB Medical Technician +#define PAY_SHORT_CMBMT "CMBMT" + +/// 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" + /// CMBS, CMB Synthetic #define PAY_SHORT_CMBS "CMBS" diff --git a/code/datums/ammo/bullet/revolver.dm b/code/datums/ammo/bullet/revolver.dm index f9ab0b12d34e..8e8d5ff9e4e8 100644 --- a/code/datums/ammo/bullet/revolver.dm +++ b/code/datums/ammo/bullet/revolver.dm @@ -117,6 +117,9 @@ penetration = ARMOR_PENETRATION_TIER_3 +/datum/ammo/bullet/revolver/small/cmb + damage = 60 + /datum/ammo/bullet/revolver/small/hollowpoint name = "small hollowpoint revolver bullet" headshot_state = HEADSHOT_OVERLAY_MEDIUM diff --git a/code/datums/ammo/bullet/shotgun.dm b/code/datums/ammo/bullet/shotgun.dm index e71114dc24de..9d19b6f591d2 100644 --- a/code/datums/ammo/bullet/shotgun.dm +++ b/code/datums/ammo/bullet/shotgun.dm @@ -337,6 +337,30 @@ scatter = SCATTER_AMOUNT_TIER_3 damage = 10 +/datum/ammo/bullet/shotgun/light/rubber + name = "rubber buckshot shell" + icon_state = "buckshot" + handful_state = "rubbershot_shell" + multiple_handful_name = TRUE + bonus_projectiles_type = /datum/ammo/bullet/shotgun/light/rubber/spread + sound_override = 'sound/weapons/gun_shotgun_riot.ogg' + headshot_state = HEADSHOT_OVERLAY_LIGHT //It's not meant to kill people... but if you put it in your mouth, it will. + accuracy = HIT_ACCURACY_TIER_3 + shell_speed = AMMO_SPEED_TIER_2 + max_range = 5 + shrapnel_chance = 0 + damage = 0 + stamina_damage = 35 + bonus_projectiles_amount = EXTRA_PROJECTILES_TIER_3 + penetration = ARMOR_PENETRATION_TIER_1 + +/datum/ammo/bullet/shotgun/light/rubber/spread + name = "additional rubber buckshot" + bonus_projectiles_amount = 0 + scatter = SCATTER_AMOUNT_TIER_3 + stamina_damage = 10 + + //Enormous shell for Van Bandolier's superheavy double-barreled hunting gun. /datum/ammo/bullet/shotgun/twobore name = "two bore bullet" diff --git a/code/datums/emergency_calls/cmb.dm b/code/datums/emergency_calls/cmb.dm index bbe2e161842a..407d9de1dca5 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.")) @@ -209,3 +209,94 @@ to_chat(M, SPAN_BOLD("You were activated as a part of a Quick Reaction Force to reinforce Colonial Marshals in distress.")) to_chat(M, SPAN_BOLD("You weren't sure if it was a false alarm or not. Turns out it isn't...")) to_chat(M, SPAN_BOLD("Now it looks like the time to be the cavalry is once more upon you.")) + +/datum/emergency_call/cmb/riot_control + name = "CMB - Colonial Marshals Riot Control Unit (Friendly)" + mob_max = 8 + mob_min = 3 + probability = 20 + home_base = /datum/lazy_template/ert/weyland_station + max_heavies = 1 + max_medics = 2 + max_synths = 1 + max_engineers = 1 + +/datum/emergency_call/cmb/riot_control/New() + ..() + arrival_message = "Incoming Transmission: [MAIN_SHIP_NAME], this is Anchorpoint Station with the Colonial Marshal Bureau. We are receiving your distress signal and are dispatching a nearby riot control team to board with you now. Standby." + +/datum/emergency_call/cmb/riot_control/create_member(datum/mind/M, turf/override_spawn_loc) + var/turf/spawn_loc = override_spawn_loc ? override_spawn_loc : get_spawn_point() + + if(!istype(spawn_loc)) + return //Didn't find a useable spawn point. + + var/mob/living/carbon/human/mob = new(spawn_loc) + M.transfer_to(mob, TRUE) + + if(!leader && HAS_FLAG(mob?.client.prefs.toggles_ert, PLAY_LEADER) && check_timelock(mob.client, JOB_SQUAD_LEADER, time_required_for_job)) + leader = mob + to_chat(mob, SPAN_ROLE_HEADER("You are the Colonial Marshal!")) + arm_equipment(mob, /datum/equipment_preset/cmb/leader/riot, TRUE, TRUE) + else if(medics < max_medics && HAS_FLAG(mob?.client.prefs.toggles_ert, PLAY_MEDIC) && check_timelock(mob.client, JOB_SQUAD_MEDIC, time_required_for_job)) + medics++ + to_chat(mob, SPAN_ROLE_HEADER("You are a CMB Medical Technician!")) + arm_equipment(mob, /datum/equipment_preset/cmb/med, TRUE, TRUE) + else if(engineers < max_engineers && HAS_FLAG(mob?.client.prefs.toggles_ert, PLAY_ENGINEER) && check_timelock(mob.client, JOB_SQUAD_ENGI, time_required_for_job)) + 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!")) + arm_equipment(mob, /datum/equipment_preset/cmb/synth/riot, TRUE, TRUE) + else + to_chat(mob, SPAN_ROLE_HEADER("You are a Riot Control Officer!")) + arm_equipment(mob, /datum/equipment_preset/cmb/riot, TRUE, TRUE) + + print_backstory(mob) + + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), mob, SPAN_BOLD("Objectives: [objectives]")), 1 SECONDS) + +/datum/emergency_call/cmb/riot_control/print_backstory(mob/living/carbon/human/M) + if(M == leader) + to_chat(M, SPAN_BOLD("You are the Colonial Marshal, originally from [pick(70;"The United Americas", 20;"Sol", 10;"a colony on the frontier")].")) + to_chat(M, SPAN_BOLD("You started in the Marshals through [pick(50; "pursuing a career during college", 40;"working for law enforcement", 10;"being recruited for your skills")].")) + to_chat(M, SPAN_BOLD("Rising through positions across the galaxy, you have become renown for your steadfast commitment to justice, fighting against crime and corruption alike.")) + to_chat(M, SPAN_BOLD("Enroute to a [pick(20; "homicide", 20;"corporate corruption investigation", 10; "hostage situation", 10;"terrorist attack", 10;"prisoner transfer", 10;"drug raid", 10;"barricaded fugitive situation", 5;"suspected smuggling incident", 5;"human trafficking situation" )] you were diverted by your command at Anchorpoint Station to the [MAIN_SHIP_NAME] because of a distress beacon.")) + to_chat(M, SPAN_BOLD("The laws of Earth stretch beyond the Sol. Where others are tempted and 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("You've seen a lot during your time in the Neroid Sector, but you're here because you're the best, doing the right thing to make the frontier a better place.")) + 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 the representation of that oath, serve with distinction.")) + else if(issynth(M)) + to_chat(M, SPAN_BOLD("Despite being an older model, you are well regarded among your peers for your keen senses and alertness.")) + to_chat(M, SPAN_BOLD("You do not enforce or comply with Marine Law, however you have an understanding of it.")) + to_chat(M, SPAN_BOLD("After receiving a software and law update in Sol, you were stationed at Anchorpoint Station to assist with CMB units on the frontier.")) + to_chat(M, SPAN_BOLD("While enroute to your mission you were diverted by your command to the [MAIN_SHIP_NAME] because of a distress beacon.")) + 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.")) + else + to_chat(M, SPAN_BOLD("You are a CMB Riot Control Officer, originally from [pick(70;"The United Americas", 20;"Sol", 10;"a colony on the frontier")].")) + to_chat(M, SPAN_BOLD("You joined the Marshals through [pick(50; "pursuing a career during college", 40;"working for law enforcement", 10;"being recruited for your skills")].")) + 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 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.")) + +// A Nearby Colonial Marshal riot control team responding to Marshals in Distress. +/datum/emergency_call/cmb/riot_control/alt + name = "CMB - Riot Control Unit - Marshals in Distress (Friendly)" + mob_max = 5 + mob_min = 1 + max_medics = 1 + probability = 0 + +/datum/emergency_call/cmb/riot_control/New() + ..() + arrival_message = "CMB Team, this is Anchorpoint Station. We have confirmed you are in distress. Routing nearby units to assist!" + objectives = "Patrol Unit 5807, we have nearby Marshals in Distress! Locate and assist them immediately." diff --git a/code/datums/factions/cmb.dm b/code/datums/factions/cmb.dm index 6201d3467e0d..6f6eee638779 100644 --- a/code/datums/factions/cmb.dm +++ b/code/datums/factions/cmb.dm @@ -1,3 +1,35 @@ /datum/faction/cmb name = "Colonial Marshal Bureau" - faction_tag = FACTION_MARINE + faction_tag = FACTION_MARSHAL + +/datum/faction/cmb/modify_hud_holder(image/holder, mob/living/carbon/human/H) + var/hud_icon_state + var/obj/item/card/id/ID = H.get_idcard() + var/_role + if(H.mind) + _role = H.job + else if(ID) + _role = ID.rank + switch(_role) + if(JOB_CMB) + hud_icon_state = "dep" + if(JOB_CMB_ENG) + hud_icon_state = "brch" + if(JOB_CMB_ICC) + hud_icon_state = "icc" + if(JOB_CMB_MED) + hud_icon_state = "medt" + if(JOB_CMB_RSYN) + hud_icon_state = "rsyn" + if(JOB_CMB_OBS) + hud_icon_state = "obs" + if(JOB_CMB_RIOT) + hud_icon_state = "rco" + if(JOB_CMB_SYN) + 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/factions/uscm.dm b/code/datums/factions/uscm.dm index 6a4b61289ea3..0dd23d1b5ddb 100644 --- a/code/datums/factions/uscm.dm +++ b/code/datums/factions/uscm.dm @@ -197,22 +197,6 @@ marine_rk = "wo_ro" if(JOB_WO_PILOT) marine_rk = "wo_mcrew" - // Colonial Marshals - if(JOB_CMB_TL) - marine_rk = "mar" - icon_prefix = "cmb_" - if(JOB_CMB) - marine_rk = "dep" - icon_prefix = "cmb_" - if(JOB_CMB_SYN) - marine_rk = "syn" - icon_prefix = "cmb_" - if(JOB_CMB_ICC) - marine_rk = "icc" - icon_prefix = "cmb_" - if(JOB_CMB_OBS) - marine_rk = "obs" - icon_prefix = "cmb_" // Check squad marines here too, for the unique ones if(JOB_SQUAD_ENGI) marine_rk = "engi" diff --git a/code/datums/mob_hud.dm b/code/datums/mob_hud.dm index 011dc8e25dba..1ee1bcfa27a4 100644 --- a/code/datums/mob_hud.dm +++ b/code/datums/mob_hud.dm @@ -17,6 +17,7 @@ GLOBAL_LIST_INIT_TYPED(huds, /datum/mob_hud, list( MOB_HUD_FACTION_TWE = new /datum/mob_hud/faction/twe(), MOB_HUD_FACTION_CLF = new /datum/mob_hud/faction/clf(), MOB_HUD_FACTION_PMC = new /datum/mob_hud/faction/pmc(), + MOB_HUD_FACTION_CMB = new /datum/mob_hud/faction/cmb(), MOB_HUD_HUNTER = new /datum/mob_hud/hunter_hud(), MOB_HUD_HUNTER_CLAN = new /datum/mob_hud/hunter_clan(), MOB_HUD_EXECUTE = new /datum/mob_hud/execute_hud(), @@ -212,6 +213,9 @@ GLOBAL_LIST_INIT_TYPED(huds, /datum/mob_hud, list( /datum/mob_hud/faction/pmc faction_to_check = FACTION_PMC +/datum/mob_hud/faction/cmb + faction_to_check = FACTION_MARSHAL + /datum/mob_hud/faction/observer hud_icons = list(FACTION_HUD, ORDER_HUD, HUNTER_CLAN, HOLOCARD_HUD) diff --git a/code/datums/paygrades/factions/other/cmb.dm b/code/datums/paygrades/factions/other/cmb.dm index 88af3f9ef78c..e1fd0487d4d9 100644 --- a/code/datums/paygrades/factions/other/cmb.dm +++ b/code/datums/paygrades/factions/other/cmb.dm @@ -16,6 +16,32 @@ /datum/paygrade/cmb/syn paygrade = PAY_SHORT_CMBS name = "CMB Investigative Synthetic" + prefix = "Syn." + +/datum/paygrade/cmb/syn/riot + paygrade = PAY_SHORT_CMBRS + name = "CMB Riot Control Synthetic" + prefix = "Syn." + +/datum/paygrade/cmb/riot + paygrade = PAY_SHORT_CMBR + name = "CMB Riot Control Officer" + prefix = "Off." + +/datum/paygrade/cmb/med + paygrade = PAY_SHORT_CMBMT + name = "CMB Medical Technician" + prefix = "Med." + +/datum/paygrade/cmb/eng + paygrade = PAY_SHORT_CMBBT + name = "CMB Breaching Technician" + prefix = "Brech." + +/datum/paygrade/cmb/spec + paygrade = PAY_SHORT_CMBSWS + name = "CMB SWAT Specialist" + prefix = "Spec." /datum/paygrade/cmb/icc paygrade = PAY_SHORT_ICCA diff --git a/code/datums/skills/cmb.dm b/code/datums/skills/cmb.dm index 8fa7ca4dd892..4c3d751a25bb 100644 --- a/code/datums/skills/cmb.dm +++ b/code/datums/skills/cmb.dm @@ -17,6 +17,50 @@ COLONIAL MARSHALS SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER, ) +/datum/skills/cmb/medic + name = "CMB Medical Technician" + skills = list( + SKILL_POLICE = SKILL_POLICE_SKILLED, + SKILL_CQC = SKILL_CQC_EXPERT, + SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_DEFAULT, + SKILL_FIREARMS = SKILL_FIREARMS_TRAINED, + SKILL_FIREMAN = SKILL_FIREMAN_EXPERT, + SKILL_MEDICAL = SKILL_MEDICAL_DOCTOR, + SKILL_SURGERY = SKILL_SURGERY_TRAINED, + SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED, + SKILL_JTAC = SKILL_JTAC_BEGINNER, + SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER, + ) + +/datum/skills/cmb/engi + name = "CMB Breaching Technician" + skills = list( + SKILL_POLICE = SKILL_POLICE_SKILLED, + SKILL_CQC = SKILL_CQC_EXPERT, + SKILL_FIREARMS = SKILL_FIREARMS_TRAINED, + SKILL_FIREMAN = SKILL_FIREMAN_SKILLED, + SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, + SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED, + SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI, + SKILL_ENGINEER = SKILL_ENGINEER_ENGI, + SKILL_JTAC = SKILL_JTAC_BEGINNER, + 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( @@ -31,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 c6e72b0c417c..9e0b4f69ae8d 100644 --- a/code/game/jobs/job/special/cmb.dm +++ b/code/game/jobs/job/special/cmb.dm @@ -6,10 +6,30 @@ /datum/job/special/cmb/marshal title = JOB_CMB_TL +// CMB Riot Control Officer +/datum/job/special/cmb/riot + title = JOB_CMB_RIOT + +// CMB Medical Technician +/datum/job/special/cmb/medical + title = JOB_CMB_MED + +// CMB Breaching Technician +/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 +// CMB Riot Control Synthetic +/datum/job/special/cmb/synthetic/riot + title = JOB_CMB_RSYN + // Interstellar Commerce Commission Corporate Liaison /datum/job/special/cmb/icc_liaison title = JOB_CMB_ICC diff --git a/code/game/machinery/fax_machine.dm b/code/game/machinery/fax_machine.dm index b15117bb2554..f057f6d3ca73 100644 --- a/code/game/machinery/fax_machine.dm +++ b/code/game/machinery/fax_machine.dm @@ -431,7 +431,7 @@ GLOBAL_LIST_EMPTY(alldepartments) P.stamped = new P.stamped += /obj/item/tool/stamp P.overlays += stampoverlay - P.stamps += "
This paper has been stamped by The Office of Colonial Marshals." + P.stamps += "
This paper has been stamped by The Office of the Colonial Marshals." if("Weyland-Yutani Quantum Relay") var/image/stampoverlay = image('icons/obj/items/paper.dmi') stampoverlay.icon_state = "paper_stamp-weyyu" diff --git a/code/game/machinery/vending/vendor_types/crew/synthetic.dm b/code/game/machinery/vending/vendor_types/crew/synthetic.dm index 240155176efa..8ed405184e38 100644 --- a/code/game/machinery/vending/vendor_types/crew/synthetic.dm +++ b/code/game/machinery/vending/vendor_types/crew/synthetic.dm @@ -5,7 +5,7 @@ desc = "An automated gear rack hooked up to a colossal storage of various medical and engineering supplies. Can be accessed only by synthetic units." icon_state = "gear" req_access = list(ACCESS_MARINE_SYNTH) - vendor_role = list(JOB_SYNTH, JOB_SYNTH_SURVIVOR, JOB_UPP_SUPPORT_SYNTH, JOB_CMB_SYN, JOB_PMC_SYNTH) + vendor_role = list(JOB_SYNTH, JOB_SYNTH_SURVIVOR, JOB_UPP_SUPPORT_SYNTH, JOB_CMB_SYN, JOB_CMB_RSYN, JOB_PMC_SYNTH) listed_products = list( list("ENGINEER SUPPLIES", 0, null, null, null), @@ -179,7 +179,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth, list( name = "\improper ColMarTech Synthetic Equipment Rack" desc = "An automated rack hooked up to a colossal storage of various equipment. Can be accessed only by synthetic units." req_access = list(ACCESS_MARINE_SYNTH) - vendor_role = list(JOB_SYNTH, JOB_SYNTH_SURVIVOR, JOB_UPP_SUPPORT_SYNTH, JOB_CMB_SYN, JOB_PMC_SYNTH) + vendor_role = list(JOB_SYNTH, JOB_SYNTH_SURVIVOR, JOB_UPP_SUPPORT_SYNTH, JOB_CMB_SYN, JOB_CMB_RSYN, JOB_PMC_SYNTH) /obj/structure/machinery/cm_vending/clothing/synth/get_listed_products(mob/user) return GLOB.cm_vending_clothing_synth @@ -369,7 +369,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth_snowflake, list( use_snowflake_points = TRUE vendor_theme = VENDOR_THEME_COMPANY req_access = list(ACCESS_MARINE_SYNTH) - vendor_role = list(JOB_SYNTH, JOB_SYNTH_SURVIVOR, JOB_WORKING_JOE, JOB_UPP_SUPPORT_SYNTH, JOB_CMB_SYN, JOB_PMC_SYNTH) + vendor_role = list(JOB_SYNTH, JOB_SYNTH_SURVIVOR, JOB_WORKING_JOE, JOB_UPP_SUPPORT_SYNTH, JOB_CMB_SYN, JOB_CMB_RSYN, JOB_PMC_SYNTH) vend_delay = 1 SECONDS diff --git a/code/game/objects/effects/landmarks/corpsespawner.dm b/code/game/objects/effects/landmarks/corpsespawner.dm index cbcd8f906ec8..e1df8b5796c3 100644 --- a/code/game/objects/effects/landmarks/corpsespawner.dm +++ b/code/game/objects/effects/landmarks/corpsespawner.dm @@ -50,6 +50,10 @@ name = "Colonial Marshal Deputy" equip_path = /datum/equipment_preset/corpse/security/cmb +/obj/effect/landmark/corpsespawner/security/marshal/riot + name = "CMB Riot Control Officer" + equip_path = /datum/equipment_preset/corpse/security/cmb/riot + /obj/effect/landmark/corpsespawner/security/liaison name = "Corporate Liaison" equip_path = /datum/equipment_preset/corpse/liaison diff --git a/code/game/objects/effects/landmarks/survivor_spawner.dm b/code/game/objects/effects/landmarks/survivor_spawner.dm index 4a6e5272ed05..adb05ee4e849 100644 --- a/code/game/objects/effects/landmarks/survivor_spawner.dm +++ b/code/game/objects/effects/landmarks/survivor_spawner.dm @@ -201,12 +201,12 @@ //CMB Survivors// /obj/effect/landmark/survivor_spawner/fiorina_armory_cmb - equipment = /datum/equipment_preset/survivor/cmb/standard - synth_equipment = /datum/equipment_preset/synth/survivor/cmb/synth - intro_text = list("

You are a CMB Deputy!

",\ + equipment = /datum/equipment_preset/survivor/cmb/riot + synth_equipment = /datum/equipment_preset/synth/survivor/cmb/riotsynth + intro_text = list("

You are a CMB Riot Control Officer!

",\ "You are aware of the 'alien' threat.",\ "Your primary objective is to survive the infestation.") - story_text = "You are a Deputy of the Office of the Colonial Marshals. Your dispatcher received a distress signal from the infamous Fiorina Maximum Penitentiary. You figured it was just another typical case of the prison dealing with a riot their understaffed security force couldn't handle, with more and more of its personnel getting dispatched elsewhere in the galaxy. This wasn't the first time OCM officers were called in to assist, but unfortunately for you, this time it also wasn't the 'minor riot' you expected it to be. Loaded up with only beanbags and finding nobody to greet you on the LZ after being dropped off, you and the rest of your team had gone towards the armory to speak to the Quartermaster, but only found corpses of both prisoners and security littered around on the way. Worried about armed prisoners, your team was in the process of switching to lethals in the armory when some sort of huge alien jumped out from the shadows and snatched Jerry away while he was off praying. The thing dragged him off too fast to catch and his screams faded away down the halls, poor bastard. Now, you'll need to decide whether to look for more clues about what the hell happened here, hunt whatever's out there, or hold a position and hope someone else will respond to the distress signal before it's too late..." + story_text = "You are a part of Riot Control Unit of the Office of the Colonial Marshals. Your dispatcher received a distress signal from the infamous Fiorina Maximum Penitentiary. You figured it was just another typical case of the prison dealing with a riot their understaffed security force couldn't handle, with more and more of its personnel getting dispatched elsewhere in the galaxy. This wasn't the first time OCM officers were called in to assist, but unfortunately for you, this time it also wasn't the 'minor riot' you expected it to be. Loaded up with only beanbags and finding nobody to greet you on the LZ after being dropped off, you and the rest of your team had gone towards the armory to speak to the Quartermaster, but only found corpses of both prisoners and security littered around on the way. Worried about armed prisoners, your team was in the process of switching to lethals in the armory when some sort of huge alien jumped out from the shadows and snatched Jerry away while he was off praying. The thing dragged him off too fast to catch and his screams faded away down the halls, poor bastard. Now, you'll need to decide whether to look for more clues about what the hell happened here, hunt whatever's out there, or hold a position and hope someone else will respond to the distress signal before it's too late..." spawn_priority = SPAWN_PRIORITY_VERY_HIGH @@ -216,7 +216,7 @@ intro_text = list("

You are a United Americas Riot Control Officer!

",\ "You are aware of the 'alien' threat.",\ "Your primary objective is to survive the infestation.") - story_text = "You are a United Americas Riot Control Officer. Your dispatcher received a request from the local OCM Outpost, requesting some men to intervene assist a Deputy with handling a riot at Fiorina. The prison was an understaffed mess so you weren't too surprised they had sent out a distress signal, calling you in to do their jobs yet again. Unfortunately for you, this time it also wasn't the 'minor riot' you expected it to be. Loaded up with only beanbags and finding nobody to greet you on the LZ after being dropped off, you and the rest of your team had gone towards the armory to speak to the Quartermaster, but only found corpses of both prisoners and security littered around on the way. Worried about armed prisoners, your team was in the process of switching to lethals in the armory when some sort of huge alien jumped out from the shadows and snatched Jerry away while he was off praying. The thing dragged him off too fast to catch and his screams faded away down the halls, poor bastard. Now, you'll need to decide whether to look for more clues about what the hell happened here, hunt whatever's out there, or hold a position and hope someone else will respond to the distress signal before it's too late..." + story_text = "You are a United Americas Riot Control Officer. Your dispatcher received a request from the local OCM Outpost, requesting some men to intervene assist a OCM Officer with handling a riot at Fiorina. The prison was an understaffed mess so you weren't too surprised they had sent out a distress signal, calling you in to do their jobs yet again. Unfortunately for you, this time it also wasn't the 'minor riot' you expected it to be. Loaded up with only beanbags and finding nobody to greet you on the LZ after being dropped off, you and the rest of your team had gone towards the armory to speak to the Quartermaster, but only found corpses of both prisoners and security littered around on the way. Worried about armed prisoners, your team was in the process of switching to lethals in the armory when some sort of huge alien jumped out from the shadows and snatched Jerry away while he was off praying. The thing dragged him off too fast to catch and his screams faded away down the halls, poor bastard. Now, you'll need to decide whether to look for more clues about what the hell happened here, hunt whatever's out there, or hold a position and hope someone else will respond to the distress signal before it's too late..." spawn_priority = SPAWN_PRIORITY_HIGH diff --git a/code/game/objects/effects/temporary_visuals.dm b/code/game/objects/effects/temporary_visuals.dm index d05e7789b1d5..7117f12a932d 100644 --- a/code/game/objects/effects/temporary_visuals.dm +++ b/code/game/objects/effects/temporary_visuals.dm @@ -119,3 +119,17 @@ transform = matrix().Scale(32 / 1024, 32 / 1024) animate(src, time = 0.5 * radius * speed, transform=matrix().Scale((32 / 1024) * radius * 1.5, (32 / 1024) * radius * 1.5), easing = easing_type) +//------------------------------------------ +//Block +//------------------------------------------ + +/obj/effect/temp_visual/block //color is white by default, set to whatever is needed + name = "blocking glow" + icon_state = "block" + color = COLOR_YELLOW + duration = 6.7 + +/obj/effect/temp_visual/block/Initialize(mapload) + . = ..() + pixel_x = rand(-12, 12) + pixel_y = rand(-9, 0) diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index f90e54ef7854..77a3a4c3829a 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -243,14 +243,21 @@ name = "\improper CMB marshal gold badge" desc = "A coveted gold badge signifying that the wearer is one of the few CMB Marshals patroling the outer rim. It is a sign of justice, authority, and protection. Protecting those who can't. This badge represents a commitment to a sworn oath always kept." icon_state = "cmbmar" + item_state = "cmbmar" paygrade = PAY_SHORT_CMBM /obj/item/card/id/deputy name = "\improper CMB deputy silver badge" desc = "The silver badge which represents that the wearer is a CMB Deputy. It is a sign of justice, authority, and protection. Protecting those who can't. This badge represents a commitment to a sworn oath always kept." icon_state = "cmbdep" + item_state = "cmbdep" paygrade = PAY_SHORT_CMBD +/obj/item/card/id/deputy/riot + name = "\improper CMB riot officer silver badge" + desc = "The silver badge which represents that the wearer is a CMB Riot Control Officer. It is a sign of justice, authority, and protection. Protecting those who can't. This badge represents a commitment to a sworn oath always kept." + paygrade = PAY_SHORT_CMBR + /obj/item/card/id/general name = "general officer holo-badge" desc = "Top brass of the top brass. Issued to only the most dedicated." diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index e414ca3dafdd..02a71e194133 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -1042,7 +1042,7 @@ icon_state = "cmb_headset" initial_keys = list(/obj/item/device/encryptionkey/cmb) has_hud = TRUE - hud_type = MOB_HUD_FACTION_MARINE + hud_type = MOB_HUD_FACTION_CMB /obj/item/device/radio/headset/distress/CMB/limited name = "\improper Damaged CMB Earpiece" diff --git a/code/game/objects/items/handheld_distress_beacon.dm b/code/game/objects/items/handheld_distress_beacon.dm index a6152b648c63..7f51415dafdd 100644 --- a/code/game/objects/items/handheld_distress_beacon.dm +++ b/code/game/objects/items/handheld_distress_beacon.dm @@ -55,7 +55,7 @@ for(var/client/admin_client in GLOB.admins) if((R_ADMIN|R_MOD) & admin_client.admin_holder.rights) - playsound_client(admin_client,'sound/effects/sos-morse-code.ogg',10) + playsound_client(admin_client,'sound/effects/sos-morse-code.ogg', 10) message_admins("[key_name(user)] has used a [beacon_type] for the reason '[SPAN_ORANGE(reason)]'! [CC_MARK(user)] [beacon_call_buttons](DENY) [ADMIN_JMP_USER(user)] [CC_REPLY(user)]") to_chat(user, SPAN_NOTICE("A distress beacon request has been sent to [recipient].")) @@ -66,9 +66,9 @@ beacon_type = "CMB beacon" recipient = "Anchorpoint Station" - // "CMB - Patrol Team - Marshals in Distress (Friendly)", "CMB - Anchorpoint Station Colonial Marine QRF (Friendly)" - ert_paths = list(/datum/emergency_call/cmb/alt, /datum/emergency_call/cmb/anchorpoint) - ert_short_names = list("SEND CMB", "SEND QRF") + // "CMB - Patrol Team - Marshals in Distress (Friendly)", "CMB - Anchorpoint Station Colonial Marine QRF (Friendly)", "CMB - Riot Control Unit - Marshals in Distress (Friendly)" + ert_paths = list(/datum/emergency_call/cmb/alt, /datum/emergency_call/cmb/anchorpoint, /datum/emergency_call/cmb/riot_control/alt) + ert_short_names = list("SEND CMB", "SEND QRF", "SEND CMB RIOT") // Corporate Lawyer beacon available for 50 points at the CLs briefcase /obj/item/handheld_distress_beacon/lawyer diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 9ed53236789d..325ae310bc05 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -1071,6 +1071,27 @@ GLOBAL_LIST_EMPTY_TYPED(radio_packs, /obj/item/storage/backpack/marine/satchel/r worn_accessible = TRUE max_fuel = 180 +/obj/item/storage/backpack/molle + name = "\improper T13 MOLLE Satchel" + desc = "Tactical satchel manufactured by one of the Alphatech subsidiaries. Very lightweight beltbag variant that utilizes UA standard MOLLE fastening systems. Can be often found in hands of colonial security and various private military groups." + icon_state = "MOLLEbeltbag" + item_state = "MOLLEbeltbag" + worn_accessible = TRUE + max_storage_space = 15 + +/obj/item/storage/backpack/molle/big + max_storage_space = 21 + +/obj/item/storage/backpack/molle/backpack + name = "\improper T16 MOLLE Backpack" + desc = "Tactical backpack manufactured by one of the Alphatech subsidiaries. Very lightweight backpack that utilizes UA standard MOLLE fastening systems, which allows easy access and optimal weight distribution. Can be often found in hands of colonial security and various private military groups." + icon_state = "MOLLEbackpack" + item_state = "MOLLEbackpack" + max_storage_space = 21 + +/obj/item/storage/backpack/molle/backpack/surv + worn_accessible = FALSE + /obj/item/storage/backpack/commando name = "commando bag" desc = "A heavy-duty bag carried by Weyland-Yutani commandos." diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 139d90ff33ce..b33ec99147d9 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -320,6 +320,11 @@ new /obj/item/storage/pill_bottle/imidazoline(src) new /obj/item/storage/pill_bottle/alkysine(src) +/obj/item/storage/belt/medical/lifesaver/full/dutch/black + icon_state = "s_medicbag" + item_state = "s_medicbag" + has_gamemode_skin = FALSE + /obj/item/storage/belt/medical/lifesaver/full/forecon/fill_preset_inventory() new /obj/item/storage/pill_bottle/bicaridine(src) new /obj/item/storage/pill_bottle/bicaridine(src) @@ -754,6 +759,12 @@ else return ..() +/obj/item/storage/belt/shotgun/black + icon_state = "s_shotgunbelt" + item_state = "s_marinebelt" + has_gamemode_skin = FALSE + + /obj/item/storage/belt/shotgun/upp name = "\improper Type 42 pattern shotgun shell loading rig" desc = "An ammunition belt designed to hold shotgun shells, primarily for the Type 23 shotgun." @@ -1233,6 +1244,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) @@ -1275,6 +1290,10 @@ for(var/i = 1 to storage_slots - 1) new /obj/item/ammo_magazine/pistol/highpower/black(src) +/obj/item/storage/belt/gun/m4a3/black + icon_state = "s_m4a3_holster" + has_gamemode_skin = FALSE + /obj/item/storage/belt/gun/m4a3/nailgun name = "customized nailgun holster" desc = "Combination of a M276 pistol holster and engineering toolbelt that have been cannibalized into a unique belt that can holster a compact nailgun and two spare nailgun magazines." @@ -1359,6 +1378,16 @@ if(istype(item, /obj/item/ammo_magazine/rifle/xm51)) magazines-- +/obj/item/storage/belt/gun/xm51/black + icon_state = "s_xm51_holster" + has_gamemode_skin = FALSE + +/obj/item/storage/belt/gun/xm51/black/cmb + name = "\improper M276 pattern Model 1771 holster rig" + desc = "The M276 is the standard load-bearing equipment of the Office of the Colonial Marshals. It consists of a modular belt with various clips. This version is for the Model 1771 breaching scattergun, allowing easier storage of the weapon. It features pouches for storing two magazines along with extra shells." + gun_has_gamemode_skin = FALSE + + #undef MAXIMUM_MAGAZINE_COUNT /obj/item/storage/belt/gun/m44 diff --git a/code/game/objects/items/storage/pouch.dm b/code/game/objects/items/storage/pouch.dm index 5993aa6b6f67..511b616d176c 100644 --- a/code/game/objects/items/storage/pouch.dm +++ b/code/game/objects/items/storage/pouch.dm @@ -1330,6 +1330,39 @@ new /obj/item/tool/weldingtool(src) new /obj/item/tool/wrench(src) +/obj/item/storage/pouch/tools/tactical/sec + name = "tactical security pouch" + desc = "A custom fit security pouch, capable of fitting a variety of security tools in different compartments." + storage_slots = 5 + can_hold = list( + /obj/item/explosive/grenade/flashbang, + /obj/item/explosive/grenade/custom/teargas, + /obj/item/reagent_container/spray/pepper, + /obj/item/restraint/handcuffs, + /obj/item/device/flash, + /obj/item/clothing/glasses, + /obj/item/reagent_container/food/snacks/donut/normal, + /obj/item/reagent_container/food/snacks/donut/jelly, + /obj/item/weapon/baton, + /obj/item/weapon/gun/energy/taser, + /obj/item/tool/lighter/zippo, + /obj/item/storage/fancy/cigarettes, + /obj/item/clothing/glasses/hud/security, + /obj/item/device/flashlight, + /obj/item/device/radio/headset, + ) + bypass_w_limit = list( + /obj/item/weapon/gun/energy/taser, + /obj/item/weapon/baton, + ) + +/obj/item/storage/pouch/tools/tactical/sec/full/fill_preset_inventory() + new /obj/item/weapon/baton(src) + new /obj/item/weapon/gun/energy/taser(src) + new /obj/item/device/flash(src) + new /obj/item/restraint/handcuffs(src) + new /obj/item/reagent_container/spray/pepper(src) + /obj/item/storage/pouch/sling name = "sling strap" desc = "Keeps a single item attached to a strap." diff --git a/code/game/objects/items/storage/toolkit.dm b/code/game/objects/items/storage/toolkit.dm index d54201f73650..bc1dfd06f4a6 100644 --- a/code/game/objects/items/storage/toolkit.dm +++ b/code/game/objects/items/storage/toolkit.dm @@ -54,3 +54,15 @@ /obj/item/storage/toolkit/empty/fill_preset_inventory() return + +/obj/item/storage/toolkit/tactical + name = "breaching engineer kit" + +/obj/item/storage/toolkit/tactical/fill_preset_inventory() + new /obj/item/explosive/plastic/breaching_charge/rubber(src) + new /obj/item/explosive/plastic/breaching_charge/rubber(src) + new /obj/item/explosive/plastic/breaching_charge/rubber(src) + new /obj/item/explosive/plastic/breaching_charge/rubber(src) + new /obj/item/explosive/plastic(src) + new /obj/item/circuitboard/apc(src) + new /obj/item/cell/high(src) diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm index 232936c263ae..7eb7d0c7fc75 100644 --- a/code/game/objects/items/weapons/shields.dm +++ b/code/game/objects/items/weapons/shields.dm @@ -115,7 +115,7 @@ /obj/item/weapon/shield/riot/metal name = "metal shield" - name = "A metal riot shield effective, but heavy." + desc = "A metal riot shield effective, but heavy." icon_state = "riotmetal" item_state = "riotmetal" base_icon_state = "riotmetal" diff --git a/code/modules/admin/topic/topic.dm b/code/modules/admin/topic/topic.dm index 029eda204f3a..bab3841346df 100644 --- a/code/modules/admin/topic/topic.dm +++ b/code/modules/admin/topic/topic.dm @@ -1839,7 +1839,7 @@ P.stamped = new P.stamped += /obj/item/tool/stamp P.overlays += stampoverlay - P.stamps += "
This paper has been stamped by The Office of Colonial Marshals." + P.stamps += "
This paper has been stamped by The Office of the Colonial Marshals." to_chat(src.owner, "Message reply to transmitted successfully.") message_admins(SPAN_STAFF_IC("[key_name_admin(src.owner)] replied to a fax message from [key_name_admin(H)]"), 1) diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 44d1e0a8bd0b..459261decd5d 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -419,6 +419,8 @@ var/datum/action/item_action/activation var/obj/item/attached_item + var/message_up = "You push the goggles up." + var/message_down = "You pull the goggles down." garbage = FALSE /obj/item/clothing/glasses/mgoggles/prescription @@ -523,18 +525,29 @@ activated = !activated if(activated) - to_chat(user, SPAN_NOTICE("You pull the goggles down.")) + to_chat(user, SPAN_NOTICE(message_down)) icon_state = active_icon_state if(prescription == TRUE && user.head == attached_item) ADD_TRAIT(user, TRAIT_NEARSIGHTED_EQUIPMENT, TRAIT_SOURCE_EQUIPMENT(/obj/item/clothing/glasses/mgoggles/prescription)) else - to_chat(user, SPAN_NOTICE("You push the goggles up.")) + to_chat(user, SPAN_NOTICE(message_up)) icon_state = inactive_icon_state if(prescription == TRUE) REMOVE_TRAIT(user, TRAIT_NEARSIGHTED_EQUIPMENT, TRAIT_SOURCE_EQUIPMENT(/obj/item/clothing/glasses/mgoggles/prescription)) attached_item.update_icon() +/obj/item/clothing/glasses/mgoggles/cmb_riot_shield + name = "\improper TC2 CMB riot shield" + desc = "Yellowish protective glass piece, can be lifted up when needed, makes you see everything in yellow." + icon_state = "swat_shield" + icon = 'icons/obj/items/helmet_garb.dmi' + active_icon_state = "swat_shield_up" + inactive_icon_state = "swat_shield" + message_up = "You lift the visor up." + message_down = "You lower the visor down." + flags_equip_slot = null + //welding goggles /obj/item/clothing/glasses/welding diff --git a/code/modules/clothing/head/head.dm b/code/modules/clothing/head/head.dm index f9c8adbf9a77..1998dad84a33 100644 --- a/code/modules/clothing/head/head.dm +++ b/code/modules/clothing/head/head.dm @@ -687,6 +687,15 @@ flags_inventory = BLOCKSHARPOBJ flags_inv_hide = NO_FLAGS +/obj/item/clothing/head/CMB/beret + name = "\improper CMB Riot Control Unit beret" + desc = "A dark beret with a badge that has a word 'MARSHAL' representing justice, authority, and protection in the outer rim. The laws of the Earth stretch beyond the Sol." + icon_state = "cmb_beret" + +/obj/item/clothing/head/CMB/beret/marshal + name = "\improper CMB Riot Control Unit Marshal beret" + icon_state = "cmb_sheriff_beret" + /obj/item/clothing/head/freelancer name = "\improper armored Freelancer cap" desc = "A sturdy freelancer's cap. More protective than it seems." diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 140d73fd05a0..cecbe2bd02d1 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -342,6 +342,7 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list( /obj/item/clothing/accessory/patch/falcon = "falconspatch", /obj/item/ammo_magazine/handful = "bullet", /obj/item/prop/helmetgarb/riot_shield = "helmet_riot_shield", + /obj/item/clothing/glasses/mgoggles/cmb_riot_shield = HELMET_GARB_RELAY_ICON_STATE, /obj/item/attachable/flashlight = HELMET_GARB_RELAY_ICON_STATE, /obj/item/prop/helmetgarb/chaplain_patch = "chaplain_patch", /obj/item/tool/pen/fountain = "fountainpen", @@ -1103,6 +1104,36 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list( icon_state = "kutjevo_helmet" item_state = "kutjevo_helmet" +//=============================//CMB\\==================================\\ +//=======================================================================\\ + +/obj/item/clothing/head/helmet/marine/veteran/cmb + name = "M11R pattern CMB Riot helmet" + desc = "A CMB variant of the standard M10 pattern. The front plate is reinforced. This one is a lot more tight fitting, also protects from flashbangs." + icon_state = "cmb_helmet" + armor_energy = CLOTHING_ARMOR_MEDIUMLOW + armor_bomb = CLOTHING_ARMOR_MEDIUMHIGH + armor_bullet = CLOTHING_ARMOR_MEDIUMHIGH + armor_bio = CLOTHING_ARMOR_LOW + armor_melee = CLOTHING_ARMOR_MEDIUMHIGH + armor_internaldamage = CLOTHING_ARMOR_MEDIUM + min_cold_protection_temperature = ICE_PLANET_MIN_COLD_PROT + flags_marine_helmet = HELMET_GARB_OVERLAY|HELMET_DAMAGE_OVERLAY + clothing_traits = list(TRAIT_EAR_PROTECTION) + built_in_visors = list(new /obj/item/device/helmet_visor/security) + +/obj/item/clothing/head/helmet/marine/veteran/cmb/engi + built_in_visors = list(new /obj/item/device/helmet_visor/security, new /obj/item/device/helmet_visor/welding_visor) + +/obj/item/clothing/head/helmet/marine/veteran/cmb/spec + name = "M11R-S pattern CMB SWAT helmet" + icon_state = "cmb_elite_helmet" + armor_bullet = CLOTHING_ARMOR_HIGH + armor_bio = CLOTHING_ARMOR_HIGH + armor_internaldamage = CLOTHING_ARMOR_MEDIUMHIGH + built_in_visors = list(new /obj/item/device/helmet_visor/security, new /obj/item/device/helmet_visor/night_vision) + + //==========================//DISTRESS\\=================================\\ //=======================================================================\\ diff --git a/code/modules/clothing/suits/marine_armor/ert.dm b/code/modules/clothing/suits/marine_armor/ert.dm index 90fb962ffa93..1da6c1c357af 100644 --- a/code/modules/clothing/suits/marine_armor/ert.dm +++ b/code/modules/clothing/suits/marine_armor/ert.dm @@ -496,6 +496,9 @@ desc = "The hauberk of a colonist militia member, created from boiled leather and some modern armored plates. While not the most powerful form of armor, and primitive compared to most modern suits of armor, it gives the wearer almost perfect mobility, which suits the needs of the local colonists. It is also quick to don, easy to hide, and cheap to produce in large workshops. This one has straps interweaved with the plates, that allow the user to fire a captured smartgun, if a bit uncomfortably." flags_inventory = BLOCKSHARPOBJ|SMARTGUN_HARNESS +//===========================//CMB\\================================\\ +//=====================================================================\\ + /obj/item/clothing/suit/storage/CMB name = "\improper CMB Deputy jacket" desc = "A thick and stylish black leather jacket with a Marshal's Deputy badge pinned to it. The back is enscribed with the powerful letters of 'DEPUTY' representing justice, authority, and protection in the outer rim. The laws of the Earth stretch beyond the Sol." @@ -553,6 +556,77 @@ icon_state = "CMB_jacket_marshal" item_state = "CMB_jacket_marshal" +/obj/item/clothing/suit/storage/marine/veteran/cmb + name = "\improper M4R pattern CMB armor" + desc = "A dark set of armor, which is a modification of the security variant of Armat Systems M3 armor. Designed for riot control and protest suppression in mind. The side of it has a metallic insignia with 'CMB RIOT CONTROL' on it. The laws of the Earth stretch beyond the Sol." + icon_state = "cmb_heavy_armor" + armor_bullet = CLOTHING_ARMOR_MEDIUMHIGH + armor_energy = CLOTHING_ARMOR_LOW + armor_melee = CLOTHING_ARMOR_MEDIUMHIGH + armor_bio = CLOTHING_ARMOR_MEDIUMLOW + armor_bomb = CLOTHING_ARMOR_MEDIUMHIGH + armor_rad = CLOTHING_ARMOR_LOW + armor_internaldamage = CLOTHING_ARMOR_MEDIUMHIGH + storage_slots = 3 + + + slowdown = SLOWDOWN_ARMOR_MEDIUM + flags_atom = NO_SNOW_TYPE|NO_NAME_OVERRIDE + allowed = list( + /obj/item/weapon/gun, + /obj/item/storage/fancy/cigarettes, + /obj/item/tool/lighter, + /obj/item/weapon/baton, + /obj/item/restraint/handcuffs, + /obj/item/device/binoculars, + /obj/item/attachable/bayonet, + /obj/item/device/flashlight, + /obj/item/device/healthanalyzer, + /obj/item/device/radio, + /obj/item/tank/emergency_oxygen, + /obj/item/tool/crowbar, + /obj/item/tool/crew_monitor, + /obj/item/tool/pen, + /obj/item/storage/belt/gun/m4a3, + /obj/item/storage/belt/gun/m44, + /obj/item/storage/belt/gun/mateba, + /obj/item/storage/belt/gun/smartpistol, + /obj/item/storage/large_holster/machete, + /obj/item/storage/large_holster/katana, + /obj/item/device/motiondetector, + /obj/item/device/walkman, + ) + uniform_restricted = list(/obj/item/clothing/under/marine/veteran/cmb) + item_state_slots = list(WEAR_JACKET = "cmb_heavy_armor") + +/obj/item/clothing/suit/storage/marine/veteran/cmb/light + name = "\improper M4R pattern CMB light armor" + icon_state = "cmb_light_armor" + armor_melee = CLOTHING_ARMOR_MEDIUM + armor_bomb = CLOTHING_ARMOR_MEDIUM + + slowdown = SLOWDOWN_ARMOR_LIGHT + item_state_slots = list(WEAR_JACKET = "cmb_light_armor") + +/obj/item/clothing/suit/storage/marine/veteran/cmb/spec + name = "\improper M4R-S pattern CMB SWAT armor" + icon_state = "cmb_elite_armor" + armor_bullet = CLOTHING_ARMOR_HIGH + armor_bio = CLOTHING_ARMOR_MEDIUM + armor_internaldamage = CLOTHING_ARMOR_HIGH + + slowdown = SLOWDOWN_ARMOR_LIGHT + item_state_slots = list(WEAR_JACKET = "cmb_elite_armor") + +/obj/item/clothing/suit/storage/marine/veteran/cmb/leader + name = "\improper M4R pattern CMB Marshal armor" + icon_state = "cmb_sheriff_armor" + desc = "A custom fit variation of the CMB Riot armor, intended to be worn the Marshals themselves, has a golden lining with rank insignia. Has additional layer of lightweigh protective materials." + armor_bullet = CLOTHING_ARMOR_HIGH + armor_bomb = CLOTHING_ARMOR_HIGH + + item_state_slots = list(WEAR_JACKET = "cmb_sheriff_armor") + //===========================//HELGHAST - MERCENARY\\================================\\ //=====================================================================\\ diff --git a/code/modules/clothing/under/marine_uniform.dm b/code/modules/clothing/under/marine_uniform.dm index a9aec9544641..4fda6006b9d5 100644 --- a/code/modules/clothing/under/marine_uniform.dm +++ b/code/modules/clothing/under/marine_uniform.dm @@ -582,6 +582,33 @@ icon_state = "upp_uniform_civi4" worn_state = "upp_uniform_civi4" +//=========================//CMB\\================================\\ + + +/obj/item/clothing/under/marine/veteran/cmb + name = "\improper CMB Riot Control uniform" + desc = "A dark set of tactical uniform utilized by the Colonial Marshals, designed to be used by units of riot supression on the distant worlds, under colonial jurisdiction." + icon_state = "cmb_swat_uniform" + worn_state = "cmb_swat_uniform" + min_cold_protection_temperature = ICE_PLANET_MIN_COLD_PROT + has_sensor = UNIFORM_HAS_SENSORS + sensor_faction = FACTION_MARSHAL + suit_restricted = list( + /obj/item/clothing/suit/storage/marine/veteran/cmb, + /obj/item/clothing/suit/storage/marine/MP, + /obj/item/clothing/suit/storage/CMB, + /obj/item/clothing/suit/armor/riot/marine, + /obj/item/clothing/suit/armor/vest/security, + /obj/item/clothing/suit/storage/hazardvest, + ) + +/obj/item/clothing/under/marine/veteran/cmb/marshal + name = "\improper CMB Riot Control Marshal uniform" + desc = "A dark set of tactical uniform utilized by the Colonial Marshals, the gold insignia on this one suggests it being used by a commanding personnel during riot control." + icon_state = "cmb_swatleader_uniform" + worn_state = "cmb_swatleader_uniform" + + //=========================//Freelancer\\================================\\ /obj/item/clothing/under/marine/veteran/freelancer diff --git a/code/modules/gear_presets/cmb.dm b/code/modules/gear_presets/cmb.dm index 672afa99873b..209f9d0f4b35 100644 --- a/code/modules/gear_presets/cmb.dm +++ b/code/modules/gear_presets/cmb.dm @@ -127,7 +127,7 @@ 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/smg/mp5, WEAR_J_STORE) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smg/mp5/mp5a5, 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/device/motiondetector, WEAR_L_HAND) new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/magazine/large, WEAR_R_STORE) @@ -157,7 +157,7 @@ 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/CM_uniform, WEAR_BODY) new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/holster, WEAR_ACCESSORY) - 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/weapon/gun/revolver/cmb/custom, 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/clothing/accessory/holobadge/cord, WEAR_ACCESSORY) @@ -192,6 +192,323 @@ new_human.equip_to_slot_or_del(new /obj/item/device/taperecorder, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar, WEAR_IN_BACK) +/datum/equipment_preset/cmb/leader/riot + name = "CMB - The Colonial Marshal Riot Control" + +/datum/equipment_preset/cmb/leader/riot/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/marshal, WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/holster, WEAR_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/revolver/cmb/custom/tactical, 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/clothing/accessory/holobadge/cord, WEAR_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette/cigar/classic, WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/cmb/leader, WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/cmb/normalpoint, WEAR_IN_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/weapon/gun/shotgun/pump/dual_tube/cmb/m3717/harness, WEAR_J_STORE) + 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/head/CMB/beret/marshal, WEAR_HEAD) + 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, WEAR_EYES) + new_human.equip_to_slot_or_del(new /obj/item/tool/lighter/zippo/black, WEAR_L_HAND) + //belt + 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/ammo_magazine/handful/shotgun/buckshot, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/buckshot, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/buckshot, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/buckshot, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/beanbag, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/beanbag, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/beanbag, WEAR_IN_BELT) + //pouches + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/autoinjector/full, 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/molle, 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/stack/medical/splint, 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/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/tactical, WEAR_IN_BACK) + + +/datum/equipment_preset/cmb/riot + name = "CMB - Riot Control Officer" + paygrades = list(PAY_SHORT_CMBR = JOB_PLAYTIME_TIER_0) + idtype = /obj/item/card/id/deputy/riot + role_comm_title = "CMB RCO" + flags = EQUIPMENT_PRESET_EXTRA + + assignment = "CMB Riot Control Officer" + rank = JOB_CMB_RIOT + + skills = /datum/skills/cmb + + +/datum/equipment_preset/cmb/riot/load_gear(mob/living/carbon/human/new_human) + + var/choice = rand(1,10) + 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/holobadge/cord, WEAR_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/cmb, 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/clothing/gloves/marine/veteran, WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud/tactical, WEAR_EYES) + 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/head/helmet/marine/veteran/cmb, 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/shoes/veteran/pmc/knife, WEAR_FEET) + 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) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/molle, 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/tactical, WEAR_IN_BACK) + + switch(choice) + if(1 to 4) + new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/holster, WEAR_ACCESSORY) + 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/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/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) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/buckshot, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/buckshot, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/buckshot, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/buckshot, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/beanbag, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/beanbag, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/beanbag, WEAR_IN_BELT) + if(5 to 7) + new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/holster, WEAR_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/revolver/cmb/tactical, 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/ammo_magazine/revolver/cmb/normalpoint, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/cmb/normalpoint, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/cmb/normalpoint, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/launcher/grenade/m81/riot, 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/explosive/grenade/high_explosive/m15/rubber, 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/grenade/large, WEAR_WAIST) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/slug/baton, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/slug/baton, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/slug/baton, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/slug/baton, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/slug/baton, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/slug/baton, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/slug/baton, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/slug/baton, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/slug/baton, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/sebb, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/sebb, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/sebb, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/sebb, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/sebb, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/smokebomb, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/custom/teargas, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/custom/teargas, WEAR_IN_BELT) + if(8 to 10) + new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/black_vest, WEAR_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp5, WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp5, WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp5, WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp5, WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp5, WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp5, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp5, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp5, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp5, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smg/mp5/mp5a5/tactical, 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/device/motiondetector, WEAR_L_HAND) + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/black, WEAR_WAIST) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/m4a3/custom, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/rubber, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/rubber, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/hp, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/hp, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol, WEAR_IN_BELT) + +/datum/equipment_preset/cmb/med + name = "CMB - Medical Technician" + paygrades = list(PAY_SHORT_CMBMT = JOB_PLAYTIME_TIER_0) + idtype = /obj/item/card/id/deputy/riot + role_comm_title = "CMB MDT" + flags = EQUIPMENT_PRESET_EXTRA + + assignment = "CMB Medical Technician" + rank = JOB_CMB_MED + skills = /datum/skills/cmb/medic + +/datum/equipment_preset/cmb/med/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/surg_vest/equipped, WEAR_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/armband/medgreen, WEAR_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/smg/mp5, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp5, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smg/mp5/mp5a5/tactical, WEAR_J_STORE) + 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/rebreather/scarf, WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/CMB/beret, WEAR_HEAD) + 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/hud/health, WEAR_EYES) + //belt + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/medical/full, WEAR_WAIST) + new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/roller, WEAR_IN_BELT) + //pouches + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/medical/socmed/not_op, WEAR_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/magazine/large, WEAR_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp5, WEAR_IN_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp5, WEAR_IN_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp5, WEAR_IN_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/mp5, WEAR_IN_R_STORE) + //backpack + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/molle, 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/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/tool/crowbar/tactical, WEAR_IN_BACK) + +/datum/equipment_preset/cmb/eng + name = "CMB - Breaching Technician" + paygrades = list(PAY_SHORT_CMBBT = JOB_PLAYTIME_TIER_0) + idtype = /obj/item/card/id/deputy/riot + role_comm_title = "CMB BT" + flags = EQUIPMENT_PRESET_EXTRA + + assignment = "CMB Breaching Technician" + rank = JOB_CMB_ENG + skills = /datum/skills/cmb/engi + +/datum/equipment_preset/cmb/eng/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/tool_webbing/equipped, WEAR_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, 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/ext, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m16/ext, 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/rebreather/scarf, WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/m16/m16a5/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/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/xm51/black/cmb, WEAR_WAIST) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/xm51/cmb, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/xm51/cmb, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/xm51/cmb/rubber, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/light/breaching, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/light/breaching, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/light/breaching, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/light/breaching/rubber, WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/light/breaching/rubber, WEAR_IN_BELT) + //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/magazine/large/m16, WEAR_R_STORE) + //backpack + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/engineerpack/ert, WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/toolkit/tactical, WEAR_IN_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/weapon/baton, 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" + paygrades = list(PAY_SHORT_CMBSWS = JOB_PLAYTIME_TIER_0) + 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/spec, 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/ext, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m16/ext, 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/rebreather/scarf, WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/xm177/car15a3/tactical, WEAR_J_STORE) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/cmb/spec, WEAR_HEAD) + 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/molle/big, 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/storage/box/packet/smoke, WEAR_IN_BACK) + + //*****************************************************************************************************/ /datum/equipment_preset/cmb/synth name = "CMB - Colonial Marshal Investigative Synthetic" @@ -248,7 +565,7 @@ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/cmb/normalpoint, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/cmb, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/autopsy_scanner, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge, 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/device/radio, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/camera, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/taperecorder, WEAR_IN_BACK) @@ -292,6 +609,60 @@ new_human.equip_to_slot_or_del(new /obj/item/tool/weldingtool/hugetank, WEAR_IN_R_STORE) new_human.equip_to_slot_or_del(new /obj/item/tool/weldingtool/hugetank, WEAR_IN_R_STORE) +/datum/equipment_preset/cmb/synth/riot + name = "CMB - Colonial Marshal Riot Control Synthetic" + paygrades = list(PAY_SHORT_CMBRS = JOB_PLAYTIME_TIER_0) + + assignment = "CMB Riot Control Synthetic" + rank = JOB_CMB_RSYN + skills = /datum/skills/synthetic + +/datum/equipment_preset/cmb/synth/riot/load_gear(mob/living/carbon/human/new_human) + //backpack + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/molle/backpack, WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator/upgraded, 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/roller, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/roller/surgical, WEAR_IN_BACK) + 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/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) + //face + new_human.equip_to_slot_or_del(new headset_type, WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/device/flashlight/pen, WEAR_R_EAR) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud, WEAR_EYES) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/CMB/beret, WEAR_HEAD) + //uniform + 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/health/ceramic_plate, WEAR_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/accessory/storage/surg_vest/drop_black/equipped, WEAR_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator/upgraded, WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/device/healthanalyzer, WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/CMB, WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range/designator, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/tool/crew_monitor, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector, WEAR_J_STORE) + //belt + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/medical/lifesaver/full/dutch/black, WEAR_WAIST) + new_human.equip_to_slot_or_del(new /obj/item/device/healthanalyzer, WEAR_IN_BELT) + //holding + 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/gloves/marine/veteran, WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/weapon/twohanded/breacher, WEAR_L_HAND) + //pouches + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/tools/tactical/sec/full, WEAR_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/tools/tactical, WEAR_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/tool/screwdriver/tactical, WEAR_IN_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical, WEAR_IN_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/tool/wirecutters/tactical, WEAR_IN_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/tool/wrench, WEAR_IN_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/device/multitool, WEAR_IN_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/stack/cable_coil, WEAR_IN_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/tool/weldingtool/hugetank, WEAR_IN_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/tool/weldingtool/hugetank, WEAR_IN_R_STORE) //*****************************************************************************************************/ diff --git a/code/modules/gear_presets/corpses.dm b/code/modules/gear_presets/corpses.dm index d84cf766c4fc..371af6553d4f 100644 --- a/code/modules/gear_presets/corpses.dm +++ b/code/modules/gear_presets/corpses.dm @@ -233,6 +233,36 @@ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET) . = ..() +/datum/equipment_preset/corpse/security/cmb/riot + name = "Corpse - CMB Riot Control Officer" + rank = JOB_CMB_RIOT + paygrades = list(PAY_SHORT_CMBR = JOB_PLAYTIME_TIER_0) + idtype = /obj/item/card/id/deputy/riot + xenovictim = FALSE + access = list( + ACCESS_CIVILIAN_PUBLIC, + ACCESS_CIVILIAN_LOGISTICS, + ACCESS_CIVILIAN_ENGINEERING, + ACCESS_CIVILIAN_RESEARCH, + ACCESS_CIVILIAN_BRIG, + ACCESS_CIVILIAN_MEDBAY, + ACCESS_CIVILIAN_COMMAND, + ) + +/datum/equipment_preset/corpse/security/cmb/riot/load_gear(mob/living/carbon/human/new_human) + 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/molle(new_human), WEAR_BACK) + 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) + . = ..() + //*****************************************************************************************************/ /datum/equipment_preset/corpse/liaison diff --git a/code/modules/gear_presets/survivors/fiorina_sciannex/preset_fiorina_sciannex.dm b/code/modules/gear_presets/survivors/fiorina_sciannex/preset_fiorina_sciannex.dm index 873ade0aefc8..cc660b16b4ea 100644 --- a/code/modules/gear_presets/survivors/fiorina_sciannex/preset_fiorina_sciannex.dm +++ b/code/modules/gear_presets/survivors/fiorina_sciannex/preset_fiorina_sciannex.dm @@ -41,6 +41,11 @@ /datum/equipment_preset/survivor/colonial_marshal/fiorina name = "Survivor - United Americas Riot Officer" assignment = "United Americas Riot Officer" + paygrades = list(PAY_SHORT_CPO = JOB_PLAYTIME_TIER_0) + idtype = /obj/item/card/id/silver + rank = JOB_SURVIVOR + role_comm_title = "UA RO" + faction = FACTION_SURVIVOR /datum/equipment_preset/survivor/colonial_marshal/fiorina/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/ua_riot(new_human), WEAR_BODY) diff --git a/code/modules/gear_presets/survivors/fiorina_sciannex/riot_in_progress_insert_fiorina_nightmare.dm b/code/modules/gear_presets/survivors/fiorina_sciannex/riot_in_progress_insert_fiorina_nightmare.dm index 27d39348e7d0..d8631ddbdda1 100644 --- a/code/modules/gear_presets/survivors/fiorina_sciannex/riot_in_progress_insert_fiorina_nightmare.dm +++ b/code/modules/gear_presets/survivors/fiorina_sciannex/riot_in_progress_insert_fiorina_nightmare.dm @@ -12,36 +12,36 @@ //*************************************************CMB****************************************************/ -/datum/equipment_preset/survivor/cmb/standard - name = "Survivor - Colonial Marshal Deputy(Riot Response)" - paygrades = list(PAY_SHORT_CMBD = JOB_PLAYTIME_TIER_0) - role_comm_title = "CMB DEP" +/datum/equipment_preset/survivor/cmb/riot + name = "Survivor - CMB Riot Control Officer" + paygrades = list(PAY_SHORT_CMBR = JOB_PLAYTIME_TIER_0) + role_comm_title = "CMB RCO" flags = EQUIPMENT_PRESET_EXTRA - assignment = "CMB Deputy" - rank = JOB_CMB + faction = FACTION_MARSHAL + faction_group = list(FACTION_MARSHAL, FACTION_MARINE) + assignment = "CMB Riot Control Officer" + idtype = /obj/item/card/id/deputy/riot + rank = JOB_CMB_RIOT skills = /datum/skills/cmb -/datum/equipment_preset/survivor/cmb/standard/load_gear(mob/living/carbon/human/new_human) +/datum/equipment_preset/survivor/cmb/riot/load_gear(mob/living/carbon/human/new_human) var/choice = rand(1,10) new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/CMB/limited, WEAR_L_EAR) - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/CM_uniform, WEAR_BODY) + 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/holobadge/cord, WEAR_ACCESSORY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/cigarette, WEAR_FACE) - new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/CMB, WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/holdout, WEAR_IN_JACKET) + 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/suit/storage/marine/veteran/cmb, WEAR_JACKET) new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/high_explosive/m15/rubber, WEAR_IN_JACKET) new_human.equip_to_slot_or_del(new /obj/item/storage/belt/security/MP/CMB/full, WEAR_WAIST) 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/head/CMB, WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/cmb, 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/shoes/veteran/pmc/knife, WEAR_FEET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud, WEAR_EYES) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud/tactical, WEAR_EYES) new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/survival/full, WEAR_L_STORE) - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec, WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/molle, WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/holdout, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/device/flashlight, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/device/camera, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/device/taperecorder, WEAR_IN_BACK) switch(choice) if(1 to 6) @@ -59,23 +59,21 @@ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/beanbag, WEAR_IN_R_STORE) if(7 to 8) new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/holster, WEAR_ACCESSORY) - new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/highpower, WEAR_IN_ACCESSORY) - new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/highpower, WEAR_IN_ACCESSORY) - new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/highpower, 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/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/rifle/m16/m16a5, WEAR_J_STORE) new_human.equip_to_slot_or_del(new /obj/item/restraint/handcuffs, 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/storage/pouch/shotgun, WEAR_R_STORE) - new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/buckshot, WEAR_IN_R_STORE) - new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun, WEAR_IN_R_STORE) - new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/beanbag, WEAR_IN_R_STORE) - new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/handful/shotgun/beanbag, WEAR_IN_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/magazine, WEAR_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m16, WEAR_IN_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m16, WEAR_IN_R_STORE) if(9 to 10) new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/holster, WEAR_ACCESSORY) 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/smg/mp5, WEAR_J_STORE) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smg/mp5/mp5a5, WEAR_J_STORE) new_human.equip_to_slot_or_del(new /obj/item/restraint/handcuffs, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector, WEAR_L_HAND) new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/magazine, WEAR_R_STORE) @@ -87,42 +85,44 @@ /datum/equipment_preset/synth/survivor/cmb flags = EQUIPMENT_PRESET_STUB -/datum/equipment_preset/synth/survivor/cmb/synth - name = "Survivor - Synthetic - CMB Investigative Synthetic(Riot Response)" - paygrades = list(PAY_SHORT_CMBS = JOB_PLAYTIME_TIER_0) - idtype = /obj/item/card/id/deputy +/datum/equipment_preset/synth/survivor/cmb/riotsynth + name = "Survivor - Synthetic - CMB Riot Control Synthetic" + paygrades = list(PAY_SHORT_CMBRS = JOB_PLAYTIME_TIER_0) role_comm_title = "CMB Syn" + faction = FACTION_MARSHAL + faction_group = list(FACTION_MARSHAL, FACTION_MARINE) flags = EQUIPMENT_PRESET_EXTRA - assignment = "CMB Investigative Synthetic" - rank = JOB_CMB_SYN + assignment = "CMB Riot Control Synthetic" + rank = JOB_CMB_RSYN languages = ALL_SYNTH_LANGUAGES + idtype = /obj/item/card/id/deputy/riot skills = /datum/skills/synthetic/cmb -/datum/equipment_preset/synth/survivor/cmb/synth/load_race(mob/living/carbon/human/new_human) +/datum/equipment_preset/synth/survivor/cmb/riotsynth/load_race(mob/living/carbon/human/new_human) new_human.set_species(SYNTH_COLONY) -/datum/equipment_preset/synth/survivor/cmb/synth/load_gear(mob/living/carbon/human/new_human) +/datum/equipment_preset/synth/survivor/cmb/riotsynth/load_gear(mob/living/carbon/human/new_human) //backpack - new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/security, WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/molle/backpack/surv, WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/cmb/normalpoint, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/cmb/normalpoint, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/revolver/cmb, WEAR_IN_BACK) - new_human.equip_to_slot_or_del(new /obj/item/device/autopsy_scanner, 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/explosive/grenade/custom/teargas, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/custom/teargas, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/camera, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator/upgraded, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/taperecorder, WEAR_IN_BACK) //face new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/CMB/limited, WEAR_L_EAR) new_human.equip_to_slot_or_del(new /obj/item/device/flashlight/pen, WEAR_R_EAR) new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud, WEAR_EYES) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/CMB, WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/CMB/beret, WEAR_HEAD) //uniform - new_human.equip_to_slot_or_del(new /obj/item/clothing/under/CM_uniform, WEAR_BODY) + 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/holobadge/cord, WEAR_ACCESSORY) - new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/droppouch, WEAR_ACCESSORY) - new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator/upgraded, WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/black_vest, WEAR_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/device/autopsy_scanner, WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge/rubber, WEAR_IN_ACCESSORY) new_human.equip_to_slot_or_del(new /obj/item/restraint/handcuffs, WEAR_IN_ACCESSORY) new_human.equip_to_slot_or_del(new /obj/item/restraint/handcuffs, WEAR_IN_ACCESSORY) new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/candy, WEAR_IN_ACCESSORY) diff --git a/code/modules/gear_presets/survivors/survivors.dm b/code/modules/gear_presets/survivors/survivors.dm index 0e28e64e9fc4..4cdd2740acd4 100644 --- a/code/modules/gear_presets/survivors/survivors.dm +++ b/code/modules/gear_presets/survivors/survivors.dm @@ -261,6 +261,9 @@ Standart Survivors : /datum/equipment_preset/survivor/scientist, skills = /datum/skills/civilian/survivor/marshal flags = EQUIPMENT_PRESET_START_OF_ROUND idtype = /obj/item/card/id/deputy + rank = JOB_CMB + faction = FACTION_MARSHAL + faction_group = list(FACTION_MARSHAL, FACTION_MARINE) role_comm_title = "CMB DEP" access = list( ACCESS_CIVILIAN_PUBLIC, diff --git a/code/modules/gear_presets/synths.dm b/code/modules/gear_presets/synths.dm index db82e44ea890..d9e1790860fc 100644 --- a/code/modules/gear_presets/synths.dm +++ b/code/modules/gear_presets/synths.dm @@ -432,9 +432,14 @@ survivor_variant = SECURITY_SURVIVOR /datum/equipment_preset/synth/survivor/cmb_synth - name = "Survivor - Synthetic - CMB Synth" + name = "Survivor - Synthetic - CMB Investigative Synthetic" idtype = /obj/item/card/id/deputy role_comm_title = "CMB Syn" + assignment = JOB_CMB_SYN + rank = JOB_CMB_SYN + paygrades = list(PAY_SHORT_CMBS = JOB_PLAYTIME_TIER_0) + faction = FACTION_MARSHAL + faction_group = list(FACTION_MARSHAL, FACTION_MARINE) equipment_to_spawn = list( WEAR_HEAD = /obj/item/clothing/head/CMB, WEAR_L_EAR = /obj/item/device/radio/headset/distress/CMB/limited, diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 09ce5bb9c149..414238ee9941 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -94,6 +94,8 @@ Contains most of the procs that are called when a mob is attacked by something return FALSE /mob/living/carbon/human/proc/check_shields(damage = 0, attack_text = "the attack", combistick=0) + var/block_effect = /obj/effect/temp_visual/block + var/owner_turf = get_turf(src) if(l_hand && istype(l_hand, /obj/item/weapon))//Current base is the prob(50-d/3) if(combistick && istype(l_hand,/obj/item/weapon/yautja/combistick) && prob(66)) var/obj/item/weapon/yautja/combistick/C = l_hand @@ -110,12 +112,16 @@ Contains most of the procs that are called when a mob is attacked by something shield_blocked_l = TRUE if(shield_blocked_l) + new block_effect(owner_turf) + playsound(src, 'sound/items/block_shield.ogg', 70, vary = TRUE) visible_message(SPAN_DANGER("[src] blocks [attack_text] with the [l_hand.name]!"), null, null, 5) return TRUE // We cannot return FALSE on fail here, because we haven't checked r_hand yet. Dual-wielding shields perhaps! var/obj/item/weapon/I = l_hand if(I.IsShield() && !istype(I, /obj/item/weapon/shield) && (prob(50 - floor(damage / 3)))) // 'other' shields, like predweapons. Make sure that item/weapon/shield does not apply here, no double-rolls. + new block_effect(owner_turf) + playsound(src, 'sound/items/parry.ogg', 70, vary = TRUE) visible_message(SPAN_DANGER("[src] blocks [attack_text] with the [l_hand.name]!"), null, null, 5) return TRUE @@ -135,11 +141,15 @@ Contains most of the procs that are called when a mob is attacked by something shield_blocked_r = TRUE if(shield_blocked_r) + new block_effect(owner_turf) + playsound(src, 'sound/items/block_shield.ogg', 70, vary = TRUE) visible_message(SPAN_DANGER("[src] blocks [attack_text] with the [r_hand.name]!"), null, null, 5) return TRUE var/obj/item/weapon/I = r_hand if(I.IsShield() && !istype(I, /obj/item/weapon/shield) && (prob(50 - floor(damage / 3)))) // other shields. Don't doublecheck activable here. + new block_effect(owner_turf) + playsound(src, 'sound/items/parry.ogg', 70, vary = TRUE) visible_message(SPAN_DANGER("[src] blocks [attack_text] with the [r_hand.name]!"), null, null, 5) return TRUE diff --git a/code/modules/mob/living/carbon/xenomorph/attack_alien.dm b/code/modules/mob/living/carbon/xenomorph/attack_alien.dm index 63ade0cbbe3d..72209805bf57 100644 --- a/code/modules/mob/living/carbon/xenomorph/attack_alien.dm +++ b/code/modules/mob/living/carbon/xenomorph/attack_alien.dm @@ -34,7 +34,6 @@ if(check_shields(0, attacking_xeno.name)) // Blocking check attacking_xeno.visible_message(SPAN_DANGER("[attacking_xeno]'s grab is blocked by [src]'s shield!"), \ SPAN_DANGER("Our grab was blocked by [src]'s shield!"), null, 5, CHAT_TYPE_XENO_COMBAT) - playsound(loc, 'sound/weapons/alien_claw_block.ogg', 25, 1) //Feedback return XENO_ATTACK_ACTION if(Adjacent(attacking_xeno)) //Logic! @@ -64,7 +63,6 @@ if(check_shields(0, attacking_xeno.name)) // Blocking check attacking_xeno.visible_message(SPAN_DANGER("[attacking_xeno]'s slash is blocked by [src]'s shield!"), \ SPAN_DANGER("Our slash is blocked by [src]'s shield!"), null, 5, CHAT_TYPE_XENO_COMBAT) - playsound(loc, 'sound/weapons/alien_claw_block.ogg', 25, 1) //Feedback return XENO_ATTACK_ACTION //From this point, we are certain a full attack will go out. Calculate damage and modifiers @@ -186,7 +184,6 @@ if(check_shields(0, attacking_xeno.name)) // Blocking check attacking_xeno.visible_message(SPAN_DANGER("[attacking_xeno]'s tackle is blocked by [src]'s shield!"), \ SPAN_DANGER("We tackle is blocked by [src]'s shield!"), null, 5, CHAT_TYPE_XENO_COMBAT) - playsound(loc, 'sound/weapons/alien_claw_block.ogg', 25, 1) //Feedback return XENO_ATTACK_ACTION attacking_xeno.flick_attack_overlay(src, "disarm") diff --git a/code/modules/projectiles/gun_attachables.dm b/code/modules/projectiles/gun_attachables.dm index 757ccd10394b..743447d44fc6 100644 --- a/code/modules/projectiles/gun_attachables.dm +++ b/code/modules/projectiles/gun_attachables.dm @@ -2057,12 +2057,16 @@ Defined in conflicts.dm of the #defines folder. /obj/item/attachable/stock/m16/New()//no stats, its cosmetic ..() +/obj/item/attachable/stock/m16/m16a5 + name = "\improper M16A5 bump stock" + icon_state = "m16a5_stock" + attach_icon = "m16a5_stock" + /obj/item/attachable/stock/m16/xm177 name = "\improper collapsible M16 stock" desc = "Very illegal in the state of California." icon_state = "m16_folding" attach_icon = "m16_folding" - flags_attach_features = NO_FLAGS hud_offset_mod = 3 collapsible = TRUE stock_activated = FALSE @@ -2070,6 +2074,7 @@ Defined in conflicts.dm of the #defines folder. collapse_delay = 0.5 SECONDS flags_attach_features = ATTACH_ACTIVATION attachment_action_type = /datum/action/item_action/toggle + var/base_icon = "m16_folding" /obj/item/attachable/stock/m16/xm177/Initialize() .=..() @@ -2090,8 +2095,8 @@ Defined in conflicts.dm of the #defines folder. scatter_mod = -SCATTER_AMOUNT_TIER_9 aim_speed_mod = CONFIG_GET(number/slowdown_med) hud_offset_mod = 5 - icon_state = "m16_folding" - attach_icon = "m16_folding_on" + icon_state = base_icon + attach_icon = "[base_icon]_on" wield_delay_mod = WIELD_DELAY_VERY_FAST else @@ -2104,13 +2109,19 @@ Defined in conflicts.dm of the #defines folder. scatter_unwielded_mod = 0 aim_speed_mod = 0 hud_offset_mod = 3 - icon_state = "m16_folding" - attach_icon = "m16_folding" + icon_state = base_icon + attach_icon = base_icon wield_delay_mod = WIELD_DELAY_NONE //stock is folded so no wield delay gun.recalculate_attachment_bonuses() gun.update_overlays(src, "stock") +/obj/item/attachable/stock/m16/xm177/car15a3 + name = "\improper collapsible CAR-15A3 stock" + icon_state = "car_folding" + attach_icon = "car_folding" + base_icon = "car_folding" + /obj/item/attachable/stock/ar10 name = "\improper AR10 wooden stock" desc = "The spring's in here, don't take it off!" @@ -2450,6 +2461,7 @@ Defined in conflicts.dm of the #defines folder. attachment_action_type = /datum/action/item_action/toggle hud_offset_mod = 5 collapsible = TRUE + var/base_icon = "smgstockc" /obj/item/attachable/stock/smg/collapsible/New() @@ -2482,8 +2494,8 @@ Defined in conflicts.dm of the #defines folder. accuracy_unwielded_mod = -HIT_ACCURACY_MULT_TIER_3 recoil_unwielded_mod = RECOIL_AMOUNT_TIER_4 hud_offset_mod = 5 - icon_state = "smgstockc" - attach_icon = "smgstockc_a" + icon_state = base_icon + attach_icon = "[base_icon]_a" else accuracy_mod = 0 @@ -2497,17 +2509,26 @@ Defined in conflicts.dm of the #defines folder. accuracy_unwielded_mod = 0 recoil_unwielded_mod = 0 hud_offset_mod = 3 - icon_state = "smgstockcc" - attach_icon = "smgstockcc_a" + icon_state = "[base_icon]c" + attach_icon = "[base_icon]c_a" gun.recalculate_attachment_bonuses() gun.update_overlays(src, "stock") +/obj/item/attachable/stock/smg/collapsible/mp5a5 + name = "MP5A5 folding stock" + icon_state = "mp5_stockc" + base_icon = "mp5_stockc" + attach_icon = "mp5_stockc_a" + flags_attach_features = ATTACH_ACTIVATION + stock_activated = FALSE + /obj/item/attachable/stock/smg/collapsible/brace name = "\improper submachinegun arm brace" desc = "A specialized stock for use on an M39 submachine gun. It makes one handing more accurate at the expense of burst amount. Wielding the weapon with this stock attached confers a major inaccuracy and recoil debuff." size_mod = 1 icon_state = "smg_brace" + base_icon = "smg_brace" attach_icon = "smg_brace_a" pixel_shift_x = 43 pixel_shift_y = 11 diff --git a/code/modules/projectiles/guns/revolvers.dm b/code/modules/projectiles/guns/revolvers.dm index 2f762cc7aac8..264f4492f815 100644 --- a/code/modules/projectiles/guns/revolvers.dm +++ b/code/modules/projectiles/guns/revolvers.dm @@ -507,6 +507,10 @@ /obj/item/weapon/gun/revolver/small/set_gun_attachment_offsets() attachable_offset = list("muzzle_x" = 30, "muzzle_y" = 19,"rail_x" = 12, "rail_y" = 21, "under_x" = 20, "under_y" = 15, "stock_x" = 20, "stock_y" = 15) +/obj/item/weapon/gun/revolver/small/get_examine_text(mob/user) + . = ..() + . += SPAN_NOTICE("You feel like tricks with it can be done easily.") + /obj/item/weapon/gun/revolver/small/set_gun_config_values() ..() set_fire_delay(FIRE_DELAY_TIER_6) @@ -731,7 +735,7 @@ return ..() /obj/item/weapon/gun/revolver/cmb/set_gun_attachment_offsets() - attachable_offset = list("muzzle_x" = 29, "muzzle_y" = 22,"rail_x" = 11, "rail_y" = 25, "under_x" = 20, "under_y" = 18, "stock_x" = 20, "stock_y" = 18) + attachable_offset = list("muzzle_x" = 29, "muzzle_y" = 19, "rail_x" = 11, "rail_y" = 23, "under_x" = 22, "under_y" = 16, "stock_x" = 20, "stock_y" = 18) /obj/item/weapon/gun/revolver/cmb/set_gun_config_values() ..() @@ -744,5 +748,31 @@ recoil = RECOIL_AMOUNT_TIER_5 recoil_unwielded = RECOIL_AMOUNT_TIER_3 +/obj/item/weapon/gun/revolver/cmb/tactical + starting_attachment_types = list(/obj/item/attachable/extended_barrel, /obj/item/attachable/lasersight, /obj/item/attachable/reflex) + /obj/item/weapon/gun/revolver/cmb/normalpoint current_mag = /obj/item/ammo_magazine/internal/revolver/cmb + +/obj/item/weapon/gun/revolver/cmb/custom + name = "\improper Spearhead custom autorevolver" + desc = "An automatic revolver chambered in .357, custom made of darker metal and with a wooden handle, clearly made for a person with taste in mind." + icon = 'icons/obj/items/weapons/guns/guns_by_faction/colony.dmi' + icon_state = "black_spearhead" + item_state = "black_spearhead" + current_mag = /obj/item/ammo_magazine/internal/revolver/cmb + +/obj/item/weapon/gun/revolver/cmb/custom/get_examine_text(mob/user) + . = ..() + . += SPAN_NOTICE("You feel like tricks with it can be done easily.") + +/obj/item/weapon/gun/revolver/cmb/custom/unique_action(mob/user) + var/result = revolver_trick(user) + if(result) + to_chat(user, SPAN_NOTICE("Your badass trick inspires you. Your next few shots will be focused!")) + accuracy_mult = BASE_ACCURACY_MULT * 2 + accuracy_mult_unwielded = BASE_ACCURACY_MULT * 2 + addtimer(CALLBACK(src, PROC_REF(recalculate_attachment_bonuses)), 3 SECONDS) + +/obj/item/weapon/gun/revolver/cmb/custom/tactical + starting_attachment_types = list(/obj/item/attachable/extended_barrel, /obj/item/attachable/lasersight, /obj/item/attachable/reflex) diff --git a/code/modules/projectiles/guns/rifles.dm b/code/modules/projectiles/guns/rifles.dm index e514a68879fb..66a91acf75e6 100644 --- a/code/modules/projectiles/guns/rifles.dm +++ b/code/modules/projectiles/guns/rifles.dm @@ -474,7 +474,7 @@ random_spawn_chance = 100 random_spawn_rail = list( /obj/item/attachable/reddot, - /obj/item/attachable/reflex/, + /obj/item/attachable/reflex, /obj/item/attachable/scope/mini, ) random_spawn_under = list( @@ -709,7 +709,7 @@ random_spawn_chance = 38 random_spawn_rail = list( /obj/item/attachable/reddot, - /obj/item/attachable/reflex/, + /obj/item/attachable/reflex, /obj/item/attachable/scope/slavic, /obj/item/attachable/magnetic_harness, ) @@ -792,7 +792,7 @@ random_spawn_chance = 35 random_spawn_rail = list( /obj/item/attachable/reddot, - /obj/item/attachable/reflex/, + /obj/item/attachable/reflex, /obj/item/attachable/scope/mini, /obj/item/attachable/magnetic_harness, ) @@ -888,6 +888,8 @@ reload_sound = 'sound/weapons/handling/gun_m16_reload.ogg' unload_sound = 'sound/weapons/handling/gun_m16_unload.ogg' + starting_attachment_types = list(/obj/item/attachable/stock/m16) + current_mag = /obj/item/ammo_magazine/rifle/m16 attachable_allowed = list( /obj/item/attachable/suppressor, @@ -916,7 +918,7 @@ random_spawn_chance = 42 random_spawn_rail = list( /obj/item/attachable/reddot, - /obj/item/attachable/reflex/, + /obj/item/attachable/reflex, /obj/item/attachable/scope/mini, ) random_spawn_under = list( @@ -938,14 +940,6 @@ flags_gun_features = GUN_CAN_POINTBLANK|GUN_ANTIQUE -/obj/item/weapon/gun/rifle/m16/handle_starting_attachment() - ..() - var/obj/item/attachable/stock/m16/S = new(src) - S.hidden = FALSE - S.flags_attach_features &= ~ATTACH_REMOVABLE - S.Attach(src) - update_attachable(S.slot) - /obj/item/weapon/gun/rifle/m16/set_gun_attachment_offsets() attachable_offset = list("muzzle_x" = 32, "muzzle_y" = 17,"rail_x" = 9, "rail_y" = 20, "under_x" = 22, "under_y" = 14, "stock_x" = 15, "stock_y" = 14) @@ -962,6 +956,30 @@ damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_6 recoil_unwielded = RECOIL_AMOUNT_TIER_2 +/obj/item/weapon/gun/rifle/m16/m16a5 + name = "\improper M16A5 rifle" + desc = "Modernized version of M16 platform rifle, probably originated from bottomless stockpiles of UA, when they switched to a newer designs. It is chambered in 5.56x45mm." + desc_lore = "The M16A5, introduced in 2016 has become something of a timeless classic in UA territory. The design rights for the gun and its many related platforms came into Armat ownership after their acquisition of Colt, and it's remained a surprisingly lucrative patent since then. While dated, the weapon's ease of use and more conventional rounds have made it popular among minimally-trained colonists and isolated units alike, being much easier to self-produce replacement parts and ammunition for than more advanced alternatives like pulse rifles and caseless ammunition. Subsequently, it remains a common sight on many colonies, and even in the reserve armories of some USCMC vessels like the Sulaco, partly from tradition and partly because of the sheer surplus supply of rifles that's lasted nearly two centuries." + icon = 'icons/obj/items/weapons/guns/guns_by_faction/colony.dmi' + icon_state = "m16a5" + item_state = "m16a5" + starting_attachment_types = list(/obj/item/attachable/stock/m16/m16a5) + +/obj/item/weapon/gun/rifle/m16/m16a5/tactical + random_spawn_chance = 100 + random_spawn_rail = list( + /obj/item/attachable/reddot, + /obj/item/attachable/reflex, + ) + random_spawn_under = list( + /obj/item/attachable/angledgrip, + /obj/item/attachable/verticalgrip, + /obj/item/attachable/lasersight, + ) + random_spawn_muzzle = list( + /obj/item/attachable/suppressor, + ) + /obj/item/weapon/gun/rifle/m16/grenadier name = "\improper M16 grenadier rifle" desc = "An old, reliable design first adopted by the U.S. military in the 1960s. Something like this belongs in a museum of war history. It is chambered in 5.56x45mm. This one has an irremovable M203 grenade launcher attached to it, holds one propriatary 40mm shell at a time, it lacks modern IFF systems and will impact the first target it hits; introduce your little friend." @@ -987,7 +1005,7 @@ random_spawn_chance = 42 random_spawn_rail = list( /obj/item/attachable/reddot, - /obj/item/attachable/reflex/, + /obj/item/attachable/reflex, /obj/item/attachable/scope/mini, ) random_spawn_muzzle = list( @@ -1026,6 +1044,7 @@ accepted_ammo = list( /obj/item/ammo_magazine/rifle/m16, /obj/item/ammo_magazine/rifle/m16/ap, + /obj/item/ammo_magazine/rifle/m16/ext, ) attachable_allowed = list( @@ -1041,7 +1060,7 @@ random_spawn_chance = 75 random_spawn_rail = list( /obj/item/attachable/reddot, - /obj/item/attachable/reflex/, + /obj/item/attachable/reflex, /obj/item/attachable/flashlight, ) random_spawn_under = list( @@ -1049,17 +1068,11 @@ /obj/item/attachable/lasersight, ) + starting_attachment_types = list(/obj/item/attachable/stock/m16/xm177) + /obj/item/weapon/gun/rifle/xm177/set_gun_attachment_offsets() attachable_offset = list("muzzle_x" = 30, "muzzle_y" = 18,"rail_x" = 9, "rail_y" = 20, "under_x" = 19, "under_y" = 13, "stock_x" = 15, "stock_y" = 14) -/obj/item/weapon/gun/rifle/xm177/handle_starting_attachment() - ..() - var/obj/item/attachable/stock/m16/xm177/integrated = new(src) - integrated.hidden = FALSE - integrated.flags_attach_features &= ~ATTACH_REMOVABLE - integrated.Attach(src) - update_attachable(integrated.slot) - /obj/item/weapon/gun/rifle/xm177/set_gun_config_values() ..() set_fire_delay(FIRE_DELAY_TIER_SMG) @@ -1073,6 +1086,25 @@ damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_6 recoil_unwielded = RECOIL_AMOUNT_TIER_2 +/obj/item/weapon/gun/rifle/xm177/car15a3 + name = "\improper CAR-15A3 carbine" + desc = "Modernized version of the XM177, developed for limited use by special forces and Office of the Colonial Marshals. The short length inhibits the attachment of most underbarrel attachments, and the barrel moderator prohibits the attachment of all muzzle devices." + desc_lore = null + icon_state = "car15a3" + item_state = "car15a3" + + starting_attachment_types = list(/obj/item/attachable/stock/m16/xm177/car15a3) + +/obj/item/weapon/gun/rifle/xm177/car15a3/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 @@ -1109,7 +1141,7 @@ random_spawn_chance = 10 random_spawn_rail = list( /obj/item/attachable/reddot, - /obj/item/attachable/reflex/, + /obj/item/attachable/reflex, /obj/item/attachable/scope/mini, ) random_spawn_under = list( @@ -1158,11 +1190,11 @@ desc = "A modified M16 employed by Dutch's Dozen mercenaries. It has 'CLOAKER KILLER' printed on a label on the side. Chambered in 5.56x45mm." icon_state = "m16a1" current_mag = /obj/item/ammo_magazine/rifle/m16/ap - starting_attachment_types = list(/obj/item/attachable/bayonet) + starting_attachment_types = list(/obj/item/attachable/stock/m16, /obj/item/attachable/bayonet) random_spawn_rail = list( /obj/item/attachable/reddot, - /obj/item/attachable/reflex/, + /obj/item/attachable/reflex, ) random_spawn_under = list( /obj/item/attachable/angledgrip, @@ -1186,7 +1218,7 @@ name = "\improper Dutch's Grenadier M16A1" desc = "A modified M16 employed by Dutch's Dozen mercenaries. It has 'CLOAKER KILLER' printed on a label on the side. It is chambered in 5.56x45mm. This one has an irremovable M203 grenade launcher attached to it, holds one propriatary 40mm shell at a time, it lacks modern IFF systems and will impact the first target it hits; introduce your little friend." current_mag = /obj/item/ammo_magazine/rifle/m16/ap - starting_attachment_types = list(/obj/item/attachable/scope/mini, /obj/item/attachable/bayonet) + starting_attachment_types = list(/obj/item/attachable/stock/m16, /obj/item/attachable/scope/mini, /obj/item/attachable/bayonet) /obj/item/weapon/gun/rifle/m16/grenadier/dutch/set_gun_config_values() ..() @@ -1994,8 +2026,12 @@ if(reload_sound) playsound(user, reload_sound, 25, 1, 5) -/obj/item/weapon/gun/rifle/xm51/cock_gun(mob/user) - return +/obj/item/weapon/gun/rifle/xm51/cmb + name = "\improper Model 1771 Cobra Max Tactical" + desc = "Designed on the M51 platform by Armat Battlefield Systems for the Office of the Colonial Marshals as a breaching and crowd control weapon, the Model 1771 is a mag-fed, pump-action shotgun. It utilizes special 16-gauge breaching rounds which are effective at breaching walls and doors, additionally designed to shoot rubber buckshot." + icon_state = "m51b" + item_state = "m51b" + current_mag = /obj/item/ammo_magazine/rifle/xm51/cmb + map_specific_decoration = FALSE + starting_attachment_types = list(/obj/item/attachable/flashlight/grip, /obj/item/attachable/reflex) -/obj/item/weapon/gun/rifle/xm51/cock(mob/user) //Stops the "You cock the gun." message where nothing happens. - return diff --git a/code/modules/projectiles/guns/shotguns.dm b/code/modules/projectiles/guns/shotguns.dm index a0bb3f8f852c..1a61f2fa0b3f 100644 --- a/code/modules/projectiles/guns/shotguns.dm +++ b/code/modules/projectiles/guns/shotguns.dm @@ -1277,6 +1277,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." @@ -1290,4 +1293,7 @@ can cause issues with ammo types getting mixed up during the burst. ..() damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_3 +/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb/m3717/harness + starting_attachment_types = list(/obj/item/attachable/stock/hg3712/m3717, /obj/item/attachable/magnetic_harness) + //------------------------------------------------------- diff --git a/code/modules/projectiles/guns/smgs.dm b/code/modules/projectiles/guns/smgs.dm index 6be0f979c7ad..8a36808a9e04 100644 --- a/code/modules/projectiles/guns/smgs.dm +++ b/code/modules/projectiles/guns/smgs.dm @@ -174,6 +174,10 @@ flags_gun_features = GUN_CAN_POINTBLANK|GUN_ANTIQUE + random_spawn_chance = 10 + random_spawn_under = list( + /obj/item/attachable/attached_gun/grenade/m203, + ) /obj/item/weapon/gun/smg/mp5/set_gun_attachment_offsets() @@ -193,12 +197,63 @@ damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_4 recoil_unwielded = RECOIL_AMOUNT_TIER_5 -/obj/item/weapon/gun/smg/mp5/Initialize(mapload, spawn_empty) - . = ..() - if(prob(10)) - var/obj/item/attachable/attached_gun/grenade/m203/UGL = new(src) - UGL.Attach(src) - update_attachable(UGL.slot) +/obj/item/weapon/gun/smg/mp5/mp5a5 + name = "\improper MP5A5 submachinegun" + desc = "A German design, this was one of the most widely used submachine guns in the world. Modernized design for limited use by colonial security and Office of the Colonial Marshals." + icon_state = "mp5_alt" + item_state = "mp5_alt" + attachable_allowed = list( + /obj/item/attachable/suppressor, // Barrel + /obj/item/attachable/bayonet, + /obj/item/attachable/bayonet/upp, + /obj/item/attachable/bayonet/co2, + /obj/item/attachable/extended_barrel, + /obj/item/attachable/heavy_barrel, + /obj/item/attachable/compensator, + /obj/item/attachable/reddot, // Rail + /obj/item/attachable/reflex, + /obj/item/attachable/flashlight, + /obj/item/attachable/magnetic_harness, + /obj/item/attachable/scope/mini, + /obj/item/attachable/lasersight, // Under + /obj/item/attachable/gyro, + /obj/item/attachable/bipod, + /obj/item/attachable/verticalgrip, + /obj/item/attachable/flashlight/grip, + /obj/item/attachable/burstfire_assembly, + /obj/item/attachable/attached_gun/grenade/m203, + /obj/item/attachable/stock/smg/collapsible/mp5a5, + ) + +/obj/item/weapon/gun/smg/mp5/mp5a5/handle_starting_attachment() + ..() + var/obj/item/attachable/stock/smg/collapsible/mp5a5/S = new(src) + S.hidden = FALSE + S.flags_attach_features &= ~ATTACH_REMOVABLE + S.Attach(src) + S.apply_on_weapon(src) + update_attachable(S.slot) + +/obj/item/weapon/gun/smg/mp5/mp5a5/set_gun_attachment_offsets() + attachable_offset = list("muzzle_x" = 26, "muzzle_y" = 17,"rail_x" = 8, "rail_y" = 19, "under_x" = 19, "under_y" = 13, "stock_x" = 39, "stock_y" = 11) + +/obj/item/weapon/gun/smg/mp5/mp5a5/tactical + random_spawn_chance = 100 + random_spawn_rail = list( + /obj/item/attachable/reddot, + /obj/item/attachable/reflex, + ) + + random_spawn_chance = 100 + random_spawn_under = list( + /obj/item/attachable/verticalgrip, + /obj/item/attachable/lasersight, + /obj/item/attachable/flashlight/grip, + /obj/item/attachable/attached_gun/grenade/m203, + ) + random_spawn_muzzle = list( + /obj/item/attachable/suppressor, + ) //------------------------------------------------------- //MP27, based on the MP27, based on the M7. diff --git a/code/modules/projectiles/guns/specialist/launcher/grenade_launcher.dm b/code/modules/projectiles/guns/specialist/launcher/grenade_launcher.dm index 40a145e1f77c..d93c74226fbc 100644 --- a/code/modules/projectiles/guns/specialist/launcher/grenade_launcher.dm +++ b/code/modules/projectiles/guns/specialist/launcher/grenade_launcher.dm @@ -323,9 +323,18 @@ /obj/item/weapon/gun/launcher/grenade/m81/riot name = "\improper M81 riot grenade launcher" - desc = "A lightweight, single-shot low-angle grenade launcher to launch tear gas grenades. Used by the Colonial Marines Military Police during riots." - valid_munitions = list(/obj/item/explosive/grenade/custom/teargas, /obj/item/explosive/grenade/slug/baton) - preload = /obj/item/explosive/grenade/custom/teargas + desc = "A lightweight, single-shot low-angle grenade launcher designed to launch non-lethal or concussive ammunition. Used by the Colonial Marines Military Police during riots." + valid_munitions = list( + /obj/item/explosive/grenade/custom/teargas, + /obj/item/explosive/grenade/slug/baton, + /obj/item/explosive/grenade/smokebomb, + /obj/item/explosive/grenade/sebb, + /obj/item/explosive/grenade/smokebomb/airburst, + /obj/item/explosive/grenade/smokebomb/airburst, + /obj/item/explosive/grenade/flashbang, + ) + preload = /obj/item/explosive/grenade/slug/baton + disallowed_grenade_types = list(/obj/item/explosive/grenade/spawnergrenade, /obj/item/explosive/grenade/alien, /obj/item/explosive/grenade/incendiary/molotov) //------------------------------------------------------- //M79 Grenade Launcher subtype of the M81 diff --git a/code/modules/projectiles/magazines/revolvers.dm b/code/modules/projectiles/magazines/revolvers.dm index f4dfea4e20fb..be01c481e250 100644 --- a/code/modules/projectiles/magazines/revolvers.dm +++ b/code/modules/projectiles/magazines/revolvers.dm @@ -91,7 +91,7 @@ /obj/item/ammo_magazine/revolver/cmb/normalpoint //put these in the marshal ert - ok sure :) name = "\improper Spearhead speed loader (.357)" desc = "This speedloader is fitted with standard .357 revolver bullets. A surprising rarity, as most CMB revolvers are issued to Marshals on colonies with wildlife, or weakly-hulled space stations." - default_ammo = /datum/ammo/bullet/revolver/small + default_ammo = /datum/ammo/bullet/revolver/small/cmb icon_state = "cmb" /** @@ -206,7 +206,7 @@ //MARSHALS REVOLVER //Spearhead exists in Alien cannon. /obj/item/ammo_magazine/internal/revolver/cmb - default_ammo = /datum/ammo/bullet/revolver/small + default_ammo = /datum/ammo/bullet/revolver/small/cmb caliber = ".357" gun_type = /obj/item/weapon/gun/revolver/cmb diff --git a/code/modules/projectiles/magazines/rifles.dm b/code/modules/projectiles/magazines/rifles.dm index 60be8ed6c1ad..de992afa60c6 100644 --- a/code/modules/projectiles/magazines/rifles.dm +++ b/code/modules/projectiles/magazines/rifles.dm @@ -240,6 +240,14 @@ w_class = SIZE_MEDIUM ammo_band_color = AMMO_BAND_COLOR_AP +/obj/item/ammo_magazine/rifle/m16/ext + name = "\improper M16 extended magazine (5.56x45mm)" + desc = "An AP 5.56x45mm magazine for the M16 assault rifle. This one contains 30 bullets." + icon_state = "m16_ext" + item_state = "m16_ext" + bonus_overlay = "m16_ext_overlay" + max_rounds = 30 + //------------------------------------------------------- //AR10 RIFLE @@ -528,3 +536,13 @@ max_rounds = 12 gun_type = /obj/item/weapon/gun/rifle/xm51 transfer_handful_amount = 6 + +/obj/item/ammo_magazine/rifle/xm51/cmb + name = "\improper Model 1771 magazine (16g breaching)" + icon_state = "m51b" + +/obj/item/ammo_magazine/rifle/xm51/cmb/rubber + name = "\improper Model 1771 magazine (16g rubber buckshot)" + desc = "A 16 gauge pump-action rubber shotgun magazine." + icon_state = "m51b_rubber" + default_ammo = /datum/ammo/bullet/shotgun/light/rubber diff --git a/code/modules/projectiles/magazines/shotguns.dm b/code/modules/projectiles/magazines/shotguns.dm index 61070690e9ac..a2a78e522dc5 100644 --- a/code/modules/projectiles/magazines/shotguns.dm +++ b/code/modules/projectiles/magazines/shotguns.dm @@ -299,6 +299,12 @@ GLOBAL_LIST_INIT(shotgun_handfuls_12g, list( caliber = "16g" gun_type = /obj/item/weapon/gun/rifle/xm51 +/obj/item/ammo_magazine/handful/shotgun/light/breaching/rubber + name = "handful of rubber buckshot shells (16g)" + icon_state = "rubbershot_shell_6" + handful_state = "rubbershot_shell" + default_ammo = /datum/ammo/bullet/shotgun/light/rubber + /obj/item/ammo_magazine/handful/shotgun/twobore name = "handful of shotgun slugs (2 bore)" icon_state = "twobore_3" diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index 692fc5e49405..9842357a5c0e 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/lobby/title.dmi b/icons/lobby/title.dmi index 36124c399d8c..f3203853d44c 100644 Binary files a/icons/lobby/title.dmi and b/icons/lobby/title.dmi differ diff --git a/icons/mob/hud/marine_hud.dmi b/icons/mob/hud/marine_hud.dmi index 8be1ae31ba68..3f18c7edf301 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 493727afac1b..6de257ace81f 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/back.dmi b/icons/mob/humans/onmob/back.dmi index f7dffb722a89..e926a53e60b8 100644 Binary files a/icons/mob/humans/onmob/back.dmi and b/icons/mob/humans/onmob/back.dmi differ diff --git a/icons/mob/humans/onmob/eyes.dmi b/icons/mob/humans/onmob/eyes.dmi index c4d743f61e38..4d16f6dfec3a 100644 Binary files a/icons/mob/humans/onmob/eyes.dmi and b/icons/mob/humans/onmob/eyes.dmi differ diff --git a/icons/mob/humans/onmob/head_1.dmi b/icons/mob/humans/onmob/head_1.dmi index 5ee07890f72a..3edf48d5a544 100644 Binary files a/icons/mob/humans/onmob/head_1.dmi and b/icons/mob/humans/onmob/head_1.dmi differ diff --git a/icons/mob/humans/onmob/helmet_garb.dmi b/icons/mob/humans/onmob/helmet_garb.dmi index 5611d28c8480..a2180774ddbb 100644 Binary files a/icons/mob/humans/onmob/helmet_garb.dmi and b/icons/mob/humans/onmob/helmet_garb.dmi differ diff --git a/icons/mob/humans/onmob/items_lefthand_0.dmi b/icons/mob/humans/onmob/items_lefthand_0.dmi index f949062be7b7..74fd906a51ab 100644 Binary files a/icons/mob/humans/onmob/items_lefthand_0.dmi and b/icons/mob/humans/onmob/items_lefthand_0.dmi differ diff --git a/icons/mob/humans/onmob/items_lefthand_1.dmi b/icons/mob/humans/onmob/items_lefthand_1.dmi index bc243d0228c3..705068ca2924 100644 Binary files a/icons/mob/humans/onmob/items_lefthand_1.dmi and b/icons/mob/humans/onmob/items_lefthand_1.dmi differ diff --git a/icons/mob/humans/onmob/items_righthand_0.dmi b/icons/mob/humans/onmob/items_righthand_0.dmi index 1f70077321ee..20c68deedc5f 100644 Binary files a/icons/mob/humans/onmob/items_righthand_0.dmi and b/icons/mob/humans/onmob/items_righthand_0.dmi differ diff --git a/icons/mob/humans/onmob/items_righthand_1.dmi b/icons/mob/humans/onmob/items_righthand_1.dmi index 29f8cd8e1043..fdd51f3c1f7b 100644 Binary files a/icons/mob/humans/onmob/items_righthand_1.dmi and b/icons/mob/humans/onmob/items_righthand_1.dmi differ diff --git a/icons/mob/humans/onmob/suit_1.dmi b/icons/mob/humans/onmob/suit_1.dmi index c028f6eae887..2b116bce6126 100644 Binary files a/icons/mob/humans/onmob/suit_1.dmi and b/icons/mob/humans/onmob/suit_1.dmi differ diff --git a/icons/mob/humans/onmob/suit_slot.dmi b/icons/mob/humans/onmob/suit_slot.dmi index cde35b456048..f754a9b3f416 100644 Binary files a/icons/mob/humans/onmob/suit_slot.dmi and b/icons/mob/humans/onmob/suit_slot.dmi differ diff --git a/icons/mob/humans/onmob/uniform_0.dmi b/icons/mob/humans/onmob/uniform_0.dmi index 36551630209d..ec81df96b676 100644 Binary files a/icons/mob/humans/onmob/uniform_0.dmi and b/icons/mob/humans/onmob/uniform_0.dmi differ diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi index f3485de9aa9a..11db005bbbef 100644 Binary files a/icons/mob/mob.dmi and b/icons/mob/mob.dmi differ diff --git a/icons/obj/items/card.dmi b/icons/obj/items/card.dmi index fa026ac77c15..b59ed5bb97e3 100644 Binary files a/icons/obj/items/card.dmi and b/icons/obj/items/card.dmi differ diff --git a/icons/obj/items/clothing/backpacks.dmi b/icons/obj/items/clothing/backpacks.dmi index f4151b592e76..d2a9b0cce42b 100644 Binary files a/icons/obj/items/clothing/backpacks.dmi and b/icons/obj/items/clothing/backpacks.dmi differ diff --git a/icons/obj/items/clothing/belts.dmi b/icons/obj/items/clothing/belts.dmi index 80070b88b560..1005a49266d8 100644 Binary files a/icons/obj/items/clothing/belts.dmi and b/icons/obj/items/clothing/belts.dmi differ diff --git a/icons/obj/items/clothing/cm_hats.dmi b/icons/obj/items/clothing/cm_hats.dmi index 4710917b0870..e0740e42b2de 100644 Binary files a/icons/obj/items/clothing/cm_hats.dmi and b/icons/obj/items/clothing/cm_hats.dmi differ diff --git a/icons/obj/items/clothing/cm_suits.dmi b/icons/obj/items/clothing/cm_suits.dmi index 67590892bf67..858797abf76a 100644 Binary files a/icons/obj/items/clothing/cm_suits.dmi and b/icons/obj/items/clothing/cm_suits.dmi differ diff --git a/icons/obj/items/clothing/uniforms.dmi b/icons/obj/items/clothing/uniforms.dmi index 19a8671a4faf..26c98b2f8125 100644 Binary files a/icons/obj/items/clothing/uniforms.dmi and b/icons/obj/items/clothing/uniforms.dmi differ diff --git a/icons/obj/items/helmet_garb.dmi b/icons/obj/items/helmet_garb.dmi index bbebf822c9d5..690c7b51c2a9 100644 Binary files a/icons/obj/items/helmet_garb.dmi and b/icons/obj/items/helmet_garb.dmi differ diff --git a/icons/obj/items/weapons/guns/ammo_by_faction/colony.dmi b/icons/obj/items/weapons/guns/ammo_by_faction/colony.dmi index 8d8ef7cb0163..aec3680763b7 100644 Binary files a/icons/obj/items/weapons/guns/ammo_by_faction/colony.dmi and b/icons/obj/items/weapons/guns/ammo_by_faction/colony.dmi differ diff --git a/icons/obj/items/weapons/guns/ammo_by_faction/uscm.dmi b/icons/obj/items/weapons/guns/ammo_by_faction/uscm.dmi index 8b3b5e0f1c80..102c89b241f8 100644 Binary files a/icons/obj/items/weapons/guns/ammo_by_faction/uscm.dmi and b/icons/obj/items/weapons/guns/ammo_by_faction/uscm.dmi differ diff --git a/icons/obj/items/weapons/guns/attachments.dmi b/icons/obj/items/weapons/guns/attachments.dmi index e627f7559a78..34026c057078 100644 Binary files a/icons/obj/items/weapons/guns/attachments.dmi and b/icons/obj/items/weapons/guns/attachments.dmi differ diff --git a/icons/obj/items/weapons/guns/attachments/stock.dmi b/icons/obj/items/weapons/guns/attachments/stock.dmi index 9f28383c0bad..b835d5282c08 100644 Binary files a/icons/obj/items/weapons/guns/attachments/stock.dmi and b/icons/obj/items/weapons/guns/attachments/stock.dmi differ diff --git a/icons/obj/items/weapons/guns/guns_by_faction/colony.dmi b/icons/obj/items/weapons/guns/guns_by_faction/colony.dmi index bfc4587f4104..ae3ac897dcf8 100644 Binary files a/icons/obj/items/weapons/guns/guns_by_faction/colony.dmi and b/icons/obj/items/weapons/guns/guns_by_faction/colony.dmi differ diff --git a/icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi b/icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi index a22810024717..cb37b78af69f 100644 Binary files a/icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi and b/icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi differ diff --git a/icons/obj/items/weapons/guns/handful.dmi b/icons/obj/items/weapons/guns/handful.dmi index e3fe380c9dfe..acbecfa24fb3 100644 Binary files a/icons/obj/items/weapons/guns/handful.dmi and b/icons/obj/items/weapons/guns/handful.dmi differ diff --git a/icons/obj/items/weapons/guns/lineart.dmi b/icons/obj/items/weapons/guns/lineart.dmi index 52ed68016313..c42e24bb9477 100644 Binary files a/icons/obj/items/weapons/guns/lineart.dmi and b/icons/obj/items/weapons/guns/lineart.dmi differ diff --git a/maps/map_files/BigRed/BigRed.dmm b/maps/map_files/BigRed/BigRed.dmm index 5142f571a4a9..0bbff31ee93f 100644 --- a/maps/map_files/BigRed/BigRed.dmm +++ b/maps/map_files/BigRed/BigRed.dmm @@ -2148,6 +2148,9 @@ /area/bigredv2/outside/marshal_office) "aiE" = ( /obj/structure/closet/secure_closet/marshal, +/obj/item/clothing/under/marine/veteran/cmb, +/obj/item/clothing/under/marine/veteran/cmb, +/obj/item/clothing/under/marine/veteran/cmb, /turf/open/floor/dark, /area/bigredv2/outside/marshal_office) "aiF" = ( @@ -2176,7 +2179,7 @@ "aiI" = ( /obj/structure/surface/table, /obj/item/ammo_magazine/shotgun/buckshot, -/obj/item/clothing/head/beret/sec/warden, +/obj/item/clothing/head/CMB/beret, /turf/open/floor/dark, /area/bigredv2/outside/marshal_office) "aiJ" = ( @@ -2605,8 +2608,7 @@ /area/bigredv2/outside/marshal_office) "akk" = ( /obj/structure/surface/rack, -/obj/item/clothing/suit/armor/riot, -/obj/item/clothing/suit/armor/riot, +/obj/item/clothing/suit/storage/marine/veteran/cmb, /turf/open/floor/dark, /area/bigredv2/outside/marshal_office) "akl" = ( @@ -20448,6 +20450,12 @@ /obj/item/weapon/twohanded/folded_metal_chair, /turf/open/floor/plating, /area/bigredv2/caves/mining) +"dCO" = ( +/obj/structure/surface/rack, +/obj/item/clothing/suit/storage/marine/veteran/cmb/light, +/obj/item/clothing/suit/storage/marine/veteran/cmb/light, +/turf/open/floor/dark, +/area/bigredv2/outside/marshal_office) "dCU" = ( /obj/structure/cargo_container/horizontal/blue/middle, /turf/open/mars, @@ -50094,7 +50102,7 @@ acp aiI afT afT -akk +dCO aer agz ajL diff --git a/maps/map_files/DesertDam/Desert_Dam.dmm b/maps/map_files/DesertDam/Desert_Dam.dmm index 7fc58191e032..5d7a12b4adc5 100644 --- a/maps/map_files/DesertDam/Desert_Dam.dmm +++ b/maps/map_files/DesertDam/Desert_Dam.dmm @@ -21781,7 +21781,8 @@ /area/desert_dam/building/security/warden) "bNS" = ( /obj/structure/surface/rack, -/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas/swat, +/obj/item/clothing/mask/gas/swat, /turf/open/floor/prison/darkred2/northwest, /area/desert_dam/building/security/armory) "bNT" = ( @@ -22623,7 +22624,10 @@ /area/desert_dam/building/security/prison) "bRE" = ( /obj/structure/surface/rack, -/obj/item/clothing/mask/gas, +/obj/item/clothing/under/marine/veteran/cmb, +/obj/item/clothing/under/marine/veteran/cmb, +/obj/item/clothing/under/marine/veteran/cmb, +/obj/item/clothing/under/marine/veteran/cmb, /turf/open/floor/prison/darkred2/west, /area/desert_dam/building/security/armory) "bRF" = ( @@ -28603,7 +28607,7 @@ "cqm" = ( /obj/structure/surface/table, /obj/item/ammo_magazine/shotgun/buckshot, -/obj/item/clothing/head/beret/sec/warden, +/obj/item/clothing/head/CMB/beret, /turf/open/floor/prison/darkred2, /area/desert_dam/building/security/warden) "cqn" = ( @@ -33236,8 +33240,12 @@ /area/desert_dam/exterior/telecomm/lz2_containers) "cJr" = ( /obj/structure/surface/rack, -/obj/item/clothing/suit/armor/riot, -/obj/item/clothing/suit/armor/riot, +/obj/item/clothing/head/helmet/marine/veteran/cmb{ + pixel_y = 12; + pixel_x = -6 + }, +/obj/item/clothing/suit/storage/marine/veteran/cmb, +/obj/item/clothing/suit/storage/marine/veteran/cmb, /turf/open/floor/prison/darkredfull2, /area/desert_dam/building/security/armory) "cJs" = ( @@ -49324,6 +49332,12 @@ "sAm" = ( /turf/open/desert/dirt/desert_transition_edge1/north, /area/desert_dam/exterior/landing_pad_two) +"sAA" = ( +/obj/structure/surface/rack, +/obj/item/clothing/suit/storage/marine/veteran/cmb/light, +/obj/item/clothing/suit/storage/marine/veteran/cmb/light, +/turf/open/floor/prison/darkredfull2, +/area/desert_dam/building/security/armory) "sAZ" = ( /obj/structure/desertdam/decals/road_edge{ icon_state = "road_edge_decal7" @@ -63044,7 +63058,7 @@ bRF bRF bRF cyH -cJr +sAA bNw bZL bZJ diff --git a/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm b/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm index 6878a0c1ed20..95da054f002c 100644 --- a/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm +++ b/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm @@ -10319,6 +10319,10 @@ }, /turf/open/floor/plating/prison, /area/fiorina/station/lowsec) +"hQA" = ( +/obj/effect/landmark/corpsespawner/security/marshal/riot, +/turf/open/floor/prison/whitegreen, +/area/fiorina/tumor/ice_lab) "hQM" = ( /obj/structure/bed/chair{ dir = 4 @@ -16047,7 +16051,7 @@ /turf/open/floor/prison/floor_plate, /area/fiorina/station/security) "mlg" = ( -/obj/effect/landmark/corpsespawner/ua_riot/burst, +/obj/effect/landmark/corpsespawner/security/marshal/riot, /turf/open/floor/prison/whitepurple/north, /area/fiorina/station/research_cells) "mlu" = ( @@ -21873,14 +21877,17 @@ /area/fiorina/tumor/fiberbush) "qJv" = ( /obj/structure/closet/secure_closet/guncabinet{ - req_access = null + req_access = null; + name = "CMB riot locker" }, -/obj/item/weapon/gun/smg/mp5, -/obj/item/ammo_magazine/smg/mp5, -/obj/item/ammo_magazine/smg/mp5, -/obj/item/clothing/under/marine/ua_riot, -/obj/item/clothing/suit/storage/marine/veteran/ua_riot, -/obj/item/prop/helmetgarb/riot_shield, +/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb, +/obj/item/ammo_magazine/shotgun/buckshot, +/obj/item/ammo_magazine/shotgun/buckshot, +/obj/item/clothing/mask/gas/swat, +/obj/item/clothing/head/helmet/marine/veteran/cmb, +/obj/item/clothing/glasses/mgoggles/cmb_riot_shield, +/obj/item/clothing/suit/storage/marine/veteran/cmb, +/obj/item/clothing/under/marine/veteran/cmb, /turf/open/floor/prison/redfull, /area/fiorina/station/security) "qJK" = ( @@ -27639,12 +27646,13 @@ /obj/structure/closet/secure_closet/guncabinet{ req_access = null }, -/obj/item/weapon/gun/shotgun/pump/dual_tube/cmb, -/obj/item/ammo_magazine/shotgun/buckshot, -/obj/item/ammo_magazine/shotgun/buckshot, /obj/item/clothing/under/marine/ua_riot, /obj/item/storage/pill_bottle/alkysine, /obj/item/clothing/suit/storage/marine/veteran/ua_riot, +/obj/item/weapon/gun/smg/mp5, +/obj/item/ammo_magazine/smg/mp5, +/obj/item/ammo_magazine/smg/mp5, +/obj/item/ammo_magazine/smg/mp5, /turf/open/floor/prison/redfull, /area/fiorina/station/security) "vhd" = ( @@ -58237,7 +58245,7 @@ sWb mvp mvp cer -kpq +hQA mvp ddL lXO diff --git a/sound/items/block_shield.ogg b/sound/items/block_shield.ogg new file mode 100644 index 000000000000..86b0bda6fd9f Binary files /dev/null and b/sound/items/block_shield.ogg differ diff --git a/sound/items/parry.ogg b/sound/items/parry.ogg new file mode 100644 index 000000000000..f9d5638b85f7 Binary files /dev/null and b/sound/items/parry.ogg differ