From 7cbfcd377c8768cc22232ac5980129ef41091352 Mon Sep 17 00:00:00 2001 From: Steelpoint Date: Mon, 3 Jun 2024 02:27:07 +0800 Subject: [PATCH 1/4] FirstCommit --- code/__DEFINES/job.dm | 1 + code/controllers/subsystem/communications.dm | 3 + code/datums/emergency_calls/forecon.dm | 60 +++++ code/game/jobs/job/marine/squads.dm | 12 + code/game/machinery/telecomms/presets.dm | 2 +- .../objects/items/devices/radio/headset.dm | 8 + .../suits/marine_armor/_marine_armor.dm | 13 + code/modules/gear_presets/uscm_forecon.dm | 255 ++++++++++++++++++ code/modules/projectiles/guns/rifles.dm | 5 + .../projectiles/guns/specialist/scout.dm | 3 + colonialmarines.dme | 2 + 11 files changed, 363 insertions(+), 1 deletion(-) create mode 100644 code/datums/emergency_calls/forecon.dm create mode 100644 code/modules/gear_presets/uscm_forecon.dm diff --git a/code/__DEFINES/job.dm b/code/__DEFINES/job.dm index f869357efd1b..b2ffaf46f498 100644 --- a/code/__DEFINES/job.dm +++ b/code/__DEFINES/job.dm @@ -12,6 +12,7 @@ #define SQUAD_MARINE_INTEL "Intel" #define SQUAD_SOF "SOF" #define SQUAD_CBRN "CBRN" +#define SQUAD_FORECON "FORECON" // Job name defines #define JOB_SQUAD_MARINE "Rifleman" diff --git a/code/controllers/subsystem/communications.dm b/code/controllers/subsystem/communications.dm index c245b1012900..7397d98a0d52 100644 --- a/code/controllers/subsystem/communications.dm +++ b/code/controllers/subsystem/communications.dm @@ -115,6 +115,7 @@ Radiochat range: 1441 to 1489 (most devices refuse to be tune to other frequency #define SOF_FREQ 1472 #define PVST_FREQ 1473 #define CBRN_FREQ 1474 +#define FORECON_FREQ 1475 //Ship department channels #define SENTRY_FREQ 1480 @@ -171,6 +172,7 @@ GLOBAL_LIST_INIT(radiochannels, list( SQUAD_MARINE_CRYO = CRYO_FREQ, SQUAD_SOF = SOF_FREQ, SQUAD_CBRN = CBRN_FREQ, + SQUAD_FORECON = FORECON_FREQ, RADIO_CHANNEL_ALAMO = DS1_FREQ, RADIO_CHANNEL_NORMANDY = DS2_FREQ, @@ -278,6 +280,7 @@ SUBSYSTEM_DEF(radio) "[ECHO_FREQ]" = "echoradio", "[CRYO_FREQ]" = "cryoradio", "[CBRN_FREQ]" = "hcradio", + "[FORECON_FREQ]" = "hcradio", "[SOF_FREQ]" = "hcradio", "[HC_FREQ]" = "hcradio", "[PVST_FREQ]" = "pvstradio", diff --git a/code/datums/emergency_calls/forecon.dm b/code/datums/emergency_calls/forecon.dm new file mode 100644 index 000000000000..d17330207dc0 --- /dev/null +++ b/code/datums/emergency_calls/forecon.dm @@ -0,0 +1,60 @@ +/datum/emergency_call/forecon + name = "FORECON (Squad)" + arrival_message = "A Force Reconnaissance squad has been dispatched to your ship. Stand by." + objectives = "Handle whatever threat is present. Further orders may be provided." + home_base = /datum/lazy_template/ert/weyland_station + probability = 0 + mob_max = 6 + + max_heavies = 1 + max_medics = 1 + max_smartgunners = 1 + +/datum/emergency_call/forecon/create_member(datum/mind/new_mind, 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) + new_mind.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 + arm_equipment(mob, /datum/equipment_preset/uscm/forecon/squad_leader, TRUE, TRUE) + to_chat(mob, SPAN_ROLE_HEADER("You are the FORECON Squad Leader!")) + + 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++ + arm_equipment(mob, /datum/equipment_preset/uscm/forecon/tech, TRUE, TRUE) + to_chat(mob, SPAN_ROLE_HEADER("You are the FORECON Support Technician!")) + + else if(smartgunners < max_smartgunners && HAS_FLAG(mob.client.prefs.toggles_ert, PLAY_SMARTGUNNER) && check_timelock(mob.client, JOB_SQUAD_SMARTGUN)) + smartgunners++ + to_chat(mob, SPAN_ROLE_HEADER("You are a FORECON Smartgunner!")) + arm_equipment(mob, /datum/equipment_preset/uscm/forecon/smartgunner, TRUE, TRUE) + + else if(heavies < max_heavies && HAS_FLAG(mob.client.prefs.toggles_ert, PLAY_HEAVY) && check_timelock(mob.client, JOB_SQUAD_SPECIALIST)) + heavies++ + to_chat(mob, SPAN_ROLE_HEADER("You are a FORECON Designated Marskman!")) + arm_equipment(mob, /datum/equipment_preset/uscm/forecon/marksman, TRUE, TRUE) + + else + arm_equipment(mob, /datum/equipment_preset/uscm/forecon/standard, TRUE, TRUE) + to_chat(mob, SPAN_ROLE_HEADER("You are a FORECON Rifleman!")) + + to_chat(mob, SPAN_ROLE_BODY("You are a member of the USCM's Force Reconnisance. FORECON is a force that specializes in special operations behind enemy lines, or conducting reconnisance in situations regular Marines are not expected to handle.")) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), mob, SPAN_BOLD("Objectives: [objectives]")), 1 SECONDS) + +/datum/emergency_call/forecon/platoon + name = "FORECON (Platoon)" + mob_max = 30 + probability = 0 + max_medics = 6 + max_heavies = 1 + max_smartgunners = 2 + +/datum/emergency_call/forecon/platoon/New() + ..() + arrival_message = "A Force Reconnaissance squad has been dispatched to your ship. Stand by." + objectives = "Handle whatever threat is present. Further orders may be provided." diff --git a/code/game/jobs/job/marine/squads.dm b/code/game/jobs/job/marine/squads.dm index 756369c8eb5b..364f768b3f57 100644 --- a/code/game/jobs/job/marine/squads.dm +++ b/code/game/jobs/job/marine/squads.dm @@ -221,6 +221,18 @@ roundstart = FALSE locked = TRUE +/datum/squad/marine/forecon + name = SQUAD_FORECON + equipment_color = "#32CD32" + chat_color = "#32CD32" + radio_freq = FORECON_FREQ + minimap_color = "#32CD32" + + active = FALSE + roundstart = FALSE + locked = TRUE + + //############################### UPP Squads /datum/squad/upp name = "Root" diff --git a/code/game/machinery/telecomms/presets.dm b/code/game/machinery/telecomms/presets.dm index 3997484f39e7..0c9e875534da 100644 --- a/code/game/machinery/telecomms/presets.dm +++ b/code/game/machinery/telecomms/presets.dm @@ -458,7 +458,7 @@ GLOBAL_LIST_EMPTY(all_static_telecomms_towers) id = "CentComm Receiver" network = "tcommsat" autolinkers = list("receiverCent") - freq_listening = list(WY_WO_FREQ, PMC_FREQ, DUT_FREQ, YAUT_FREQ, HC_FREQ, PVST_FREQ, SOF_FREQ, CBRN_FREQ) + freq_listening = list(WY_WO_FREQ, PMC_FREQ, DUT_FREQ, YAUT_FREQ, HC_FREQ, PVST_FREQ, SOF_FREQ, CBRN_FREQ, FORECON_FREQ) //Buses diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 00f0ad16220c..75187e8aaeb9 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -876,6 +876,14 @@ ignore_z = TRUE has_hud = TRUE +/obj/item/device/radio/headset/distress/forecon + name = "\improper Force Recon headset" + desc = "A headset given to FORECON marines. Channels are as follows: :g - public, :v - marine command, :a - alpha squad, :b - bravo squad, :c - charlie squad, :d - delta squad, :n - engineering, :m - medbay, :u - requisitions, :j - JTAC, :t - intel" + frequency = FORECON_FREQ + initial_keys = list(/obj/item/device/encryptionkey/public, /obj/item/device/encryptionkey/mcom) + ignore_z = TRUE + has_hud = TRUE + /obj/item/device/radio/headset/distress/pmc/hvh desc = "A special headset used by corporate personnel. Channels are as follows: :o - colony." initial_keys = list(/obj/item/device/encryptionkey/colony, /obj/item/device/encryptionkey/WY) diff --git a/code/modules/clothing/suits/marine_armor/_marine_armor.dm b/code/modules/clothing/suits/marine_armor/_marine_armor.dm index 15340bc1aae2..e6cf78611a7f 100644 --- a/code/modules/clothing/suits/marine_armor/_marine_armor.dm +++ b/code/modules/clothing/suits/marine_armor/_marine_armor.dm @@ -521,6 +521,19 @@ icon_state = "c_VL_syn_camo" flags_atom = NO_SNOW_TYPE|NO_NAME_OVERRIDE +/obj/item/clothing/suit/storage/marine/light/recon + name = "M3-R pattern light armor" + desc = "Special issue light armor for forward econnaissance Marines. Offers similar protection as M3 armor but none of the slowdown." + armor_melee = CLOTHING_ARMOR_MEDIUM + armor_bullet = CLOTHING_ARMOR_MEDIUM + armor_laser = CLOTHING_ARMOR_MEDIUMLOW + armor_energy = CLOTHING_ARMOR_NONE + armor_bomb = CLOTHING_ARMOR_MEDIUMLOW + armor_bio = CLOTHING_ARMOR_MEDIUM + armor_rad = CLOTHING_ARMOR_MEDIUMLOW + armor_internaldamage = CLOTHING_ARMOR_MEDIUM + movement_compensation = SLOWDOWN_ARMOR_LIGHT + // M3-EOD pattern heavy armor /obj/item/clothing/suit/storage/marine/heavy name = "\improper M3-EOD pattern heavy armor" diff --git a/code/modules/gear_presets/uscm_forecon.dm b/code/modules/gear_presets/uscm_forecon.dm new file mode 100644 index 000000000000..dfe4e7dd8d5c --- /dev/null +++ b/code/modules/gear_presets/uscm_forecon.dm @@ -0,0 +1,255 @@ +/datum/equipment_preset/uscm/forecon + assignment = JOB_SQUAD_MARINE + rank = JOB_SQUAD_MARINE + paygrade = PAY_SHORT_ME5 + idtype = /obj/item/card/id/dogtag + role_comm_title = "FORECON" + rank = JOB_MARINE + faction_group = list(FACTION_MARINE) + flags = EQUIPMENT_PRESET_START_OF_ROUND + auto_squad_name = SQUAD_FORECON + ert_squad = TRUE + +/datum/equipment_preset/uscm/forecon/New() + . = ..() + access = get_access(ACCESS_LIST_UA) + + dress_shoes = list(/obj/item/clothing/shoes/dress) + dress_gloves = list(/obj/item/clothing/gloves/marine/dress) + dress_under = list(/obj/item/clothing/under/marine/dress/blues/senior) + dress_over = list(/obj/item/clothing/suit/storage/jacket/marine/dress/blues/nco) + dress_hat = list(/obj/item/clothing/head/marine/dress_cover) + +/datum/equipment_preset/uscm/forecon/load_gear(mob/living/carbon/human/new_human) + var/obj/item/clothing/under/marine/reconnaissance/uniform = new() + var/obj/item/clothing/accessory/storage/droppouch/pouch = new() + var/obj/item/clothing/accessory/ranks/marine/e5/pin = new() + var/obj/item/clothing/accessory/patch/patch_uscm = new() + var/obj/item/clothing/accessory/patch/forecon/patch_forecon = new() + uniform.attach_accessory(new_human,pouch) + uniform.attach_accessory(new_human,patch_uscm) + uniform.attach_accessory(new_human,pin) + uniform.attach_accessory(new_human,patch_forecon) + new_human.equip_to_slot_or_del(uniform, WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/light/recon(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/satchel(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full(new_human), WEAR_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full/alternate(new_human), WEAR_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/drinks/flask/marine(new_human), WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/facepaint/sniper(new_human), WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/storage/box/MRE(new_human), WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical(new_human), WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range/designator(new_human), WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/forecon(new_human), WEAR_L_EAR) + GLOB.character_traits[/datum/character_trait/skills/spotter].apply_trait(new_human) + +/datum/equipment_preset/uscm/forecon/proc/add_forecon_weapon(mob/living/carbon/human/new_human) + var/random_gun = rand(1,3) + switch(random_gun) + if(1 , 2) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/m41a/tactical(new_human), WEAR_L_HAND) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/extended(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/extended(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/ap(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/ap(new_human), WEAR_IN_BACK) + if(3) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/m4ra/tactical(new_human), WEAR_L_HAND) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m4ra/ext(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m4ra/ext(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m4ra/ap(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m4ra/ap(new_human), WEAR_IN_BACK) + +/datum/equipment_preset/uscm/forecon/proc/spawn_random_headgear(mob/living/carbon/human/new_human) + var/i = rand(1,10) + switch(i) + if (1 , 2) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/cmcap(new_human), WEAR_HEAD) + if (3 , 4) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beanie(new_human), WEAR_HEAD) + if (5 , 6) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/durag(new_human), WEAR_HEAD) + if (7 , 8) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/cmcap/boonie(new_human), WEAR_HEAD) + if (9) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine(new_human), WEAR_HEAD) + +/datum/equipment_preset/uscm/forecon/proc/add_forecon_weapon_pistol(mob/living/carbon/human/new_human) + var/random_pistol = rand(1,5) + switch(random_pistol) + if(1 , 2) + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3(new_human), WEAR_WAIST) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/m1911(new_human), WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/m1911(new_human), WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/m1911(new_human), WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/m1911(new_human), WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/m1911(new_human), WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/m1911(new_human), WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/m1911(new_human), WEAR_IN_BELT) + if(3 , 4) + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m39, WEAR_WAIST) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smg/m39(new_human), WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/m39/extended(new_human), WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/m39/extended(new_human), WEAR_IN_BELT) + if(5) + new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector(new_human),WEAR_WAIST) + +/datum/equipment_preset/uscm/forecon/load_status(mob/living/carbon/human/new_human) + new_human.nutrition = NUTRITION_NORMAL + +/datum/equipment_preset/uscm/forecon/standard + name = "USCM Reconnaissance Marine" + assignment = JOB_FORECON_RIFLEMAN + rank = JOB_SQUAD_MARINE + role_comm_title = "RFN" + minimap_icon = "" + skills = /datum/skills/military/survivor/forecon_standard + +/datum/equipment_preset/uscm/forecon/standard/load_gear(mob/living/carbon/human/new_human) + ..() + spawn_random_headgear(new_human) + add_forecon_weapon_pistol(new_human) + add_forecon_weapon(new_human) + +/datum/equipment_preset/uscm/forecon/tech + name = "USCM Reconnaissance Support Technician" + assignment = JOB_FORECON_SUPPORT + rank = JOB_SQUAD_MEDIC + role_comm_title = "SuppTech" + minimap_icon = "engi" + skills = /datum/skills/military/survivor/forecon_techician + +/datum/equipment_preset/uscm/forecon/tech/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/satchel/big(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/insulated(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/utility/full(new_human), WEAR_WAIST) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/welding(new_human), WEAR_EYES) + ..() + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/utility/full(new_human), WEAR_WAIST) + new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/adv(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/surgical(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator/compact(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/healthanalyzer(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/tool/surgery/synthgraft, WEAR_IN_BACK) + add_forecon_weapon(new_human) + spawn_random_headgear(new_human) + +/datum/equipment_preset/uscm/forecon/marksman + name = "USCM Reconnaissance Designated Marksman" + assignment = JOB_FORECON_MARKSMAN + rank = JOB_SQUAD_SPECIALIST + role_comm_title = "DMR" + minimap_icon = "spec" + skills = /datum/skills/military/survivor/forecon_marksman + +/datum/equipment_preset/uscm/forecon/marksman/load_gear(mob/living/carbon/human/new_human) + var/obj/item/clothing/under/marine/reconnaissance/uniform = new() + var/obj/item/clothing/accessory/storage/droppouch/pouch = new() + var/obj/item/clothing/accessory/ranks/marine/e5/pin = new() + var/obj/item/clothing/accessory/patch/patch_uscm = new() + var/obj/item/clothing/accessory/patch/forecon/patch_forecon = new() + uniform.attach_accessory(new_human,pouch) + uniform.attach_accessory(new_human,patch_uscm) + uniform.attach_accessory(new_human,pin) + uniform.attach_accessory(new_human,patch_forecon) + new_human.equip_to_slot_or_del(uniform, WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/M3S, WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range/designator(new_human), WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic(new_human), WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic(new_human), WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/satchel/scout_cloak(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full(new_human), WEAR_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full/alternate(new_human), WEAR_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/drinks/flask/marine(new_human), WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/facepaint/sniper(new_human), WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/storage/box/MRE(new_human), WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical(new_human), WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range/designator(new_human), WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/forecon(new_human), WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/m4ra_custom/tactical(new_human), WEAR_L_HAND) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m4ra/custom(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m4ra/custom(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m4ra/custom(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m4ra/custom/impact(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m4ra/custom/incendiary(new_human), WEAR_IN_BACK) + GLOB.character_traits[/datum/character_trait/skills/spotter].apply_trait(new_human) + ..() + add_forecon_weapon_pistol(new_human) + spawn_random_headgear(new_human) + +/datum/equipment_preset/uscm/forecon/smartgunner + name = "USCM Reconnaissance Smartgunner" + assignment = JOB_FORECON_SMARTGUNNER + rank = JOB_SQUAD_SMARTGUN + role_comm_title = "SG" + minimap_icon = "smartgunner" + skills = /datum/skills/military/survivor/forecon_smartgunner + +/datum/equipment_preset/uscm/forecon/smartgunner/load_gear(mob/living/carbon/human/new_human) + var/obj/item/clothing/under/marine/reconnaissance/uniform = new() + var/obj/item/clothing/accessory/storage/droppouch/pouch = new() + var/obj/item/clothing/accessory/ranks/marine/e5/pin = new() + var/obj/item/clothing/accessory/patch/patch_uscm = new() + var/obj/item/clothing/accessory/patch/forecon/patch_forecon = new() + uniform.attach_accessory(new_human,pouch) + uniform.attach_accessory(new_human,patch_uscm) + uniform.attach_accessory(new_human,pin) + uniform.attach_accessory(new_human,patch_forecon) + new_human.equip_to_slot_or_del(uniform, WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/smartgunner(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full(new_human), WEAR_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full/alternate(new_human), WEAR_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/drinks/flask/marine(new_human), WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/facepaint/sniper(new_human), WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/storage/box/MRE(new_human), WEAR_IN_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical(new_human), WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/device/radio(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/forecon(new_human), WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smartgun(new_human), WEAR_J_STORE) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/night/m56_goggles(new_human), WEAR_EYES) + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/smartgunner(new_human), WEAR_WAIST) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/m1911(new_human), WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/m1911(new_human), WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smartgun(new_human), WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smartgun(new_human), WEAR_IN_BELT) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smartgun(new_human), WEAR_IN_BELT) + GLOB.character_traits[/datum/character_trait/skills/spotter].apply_trait(new_human) + spawn_random_headgear(new_human) + +/datum/equipment_preset/uscm/forecon/squad_leader + name = "USCM Reconnaissance Squad Leader" + assignment = JOB_FORECON_SL + rank = JOB_SQUAD_LEADER + role_comm_title = "SL" + skills = /datum/skills/military/survivor/forecon_squad_leader + paygrade = PAY_SHORT_MO1 + + dress_under = list(/obj/item/clothing/under/marine/dress/blues/senior) + dress_over = list(/obj/item/clothing/suit/storage/jacket/marine/dress/blues/officer) + dress_hat = list(/obj/item/clothing/head/marine/dress_cover/officer) + +/datum/equipment_preset/uscm/forecon/squad_leader/load_gear(mob/living/carbon/human/new_human) + var/obj/item/clothing/under/marine/reconnaissance/uniform = new() + var/obj/item/clothing/accessory/storage/droppouch/pouch = new() + var/obj/item/clothing/accessory/ranks/marine/o1/pin = new() + var/obj/item/clothing/accessory/patch/patch_uscm = new() + var/obj/item/clothing/accessory/patch/forecon/patch_forecon = new() + uniform.attach_accessory(new_human,pouch) + uniform.attach_accessory(new_human,patch_uscm) + uniform.attach_accessory(new_human,pin) + uniform.attach_accessory(new_human,patch_forecon) + new_human.equip_to_slot_or_del(uniform, WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/m41aMK1/tactical(new_human), WEAR_R_HAND) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/satchel(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41aMK1(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41aMK1(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41aMK1/ap(new_human), WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41aMK1/ap(new_human), WEAR_IN_BACK) + ..() + add_forecon_weapon_pistol(new_human) + spawn_random_headgear(new_human) diff --git a/code/modules/projectiles/guns/rifles.dm b/code/modules/projectiles/guns/rifles.dm index b631f093bafe..ad85220400fb 100644 --- a/code/modules/projectiles/guns/rifles.dm +++ b/code/modules/projectiles/guns/rifles.dm @@ -1587,6 +1587,11 @@ /obj/item/weapon/gun/rifle/m4ra/training current_mag = /obj/item/ammo_magazine/rifle/m4ra/rubber +/obj/item/weapon/gun/rifle/m4ra/tactical + current_mag = /obj/item/ammo_magazine/rifle/m4ra/ext + starting_attachment_types = list(/obj/item/attachable/magnetic_harness, /obj/item/attachable/suppressor, /obj/item/attachable/angledgrip) + + //------------------------------------------------------- //L42A Battle Rifle diff --git a/code/modules/projectiles/guns/specialist/scout.dm b/code/modules/projectiles/guns/specialist/scout.dm index c2c5abd54add..8443e59580cc 100644 --- a/code/modules/projectiles/guns/specialist/scout.dm +++ b/code/modules/projectiles/guns/specialist/scout.dm @@ -81,3 +81,6 @@ if(!skillcheck(user, SKILL_SPEC_WEAPONS, SKILL_SPEC_ALL) && user.skills.get_skill_level(SKILL_SPEC_WEAPONS) != SKILL_SPEC_SCOUT) to_chat(user, SPAN_WARNING("You don't seem to know how to use \the [src]...")) return FALSE + +/obj/item/weapon/gun/rifle/m4ra_custom/tactical + starting_attachment_types = list(/obj/item/attachable/magnetic_harness, /obj/item/attachable/bayonet, /obj/item/attachable/angledgrip) diff --git a/colonialmarines.dme b/colonialmarines.dme index e7f280cd99df..f8aadbf0fa89 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -506,6 +506,7 @@ #include "code\datums\elements\traitbound\leadership.dm" #include "code\datums\emergency_calls\big_game_hunter.dm" #include "code\datums\emergency_calls\cbrn.dm" +#include "code\datums\emergency_calls\forecon.dm" #include "code\datums\emergency_calls\clf.dm" #include "code\datums\emergency_calls\cmb.dm" #include "code\datums\emergency_calls\colonist.dm" @@ -1782,6 +1783,7 @@ #include "code\modules\gear_presets\uscm_medical.dm" #include "code\modules\gear_presets\uscm_police.dm" #include "code\modules\gear_presets\uscm_ship.dm" +#include "code\modules\gear_presets\uscm_forecon.dm" #include "code\modules\gear_presets\whiteout.dm" #include "code\modules\gear_presets\wo.dm" #include "code\modules\gear_presets\wy.dm" From 2977bdffce84207f4214b2e4314d48eca91ab577 Mon Sep 17 00:00:00 2001 From: Steelpoint Date: Mon, 3 Jun 2024 02:36:02 +0800 Subject: [PATCH 2/4] Fix --- colonialmarines.dme | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/colonialmarines.dme b/colonialmarines.dme index f8aadbf0fa89..ffaac72774e4 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -506,7 +506,6 @@ #include "code\datums\elements\traitbound\leadership.dm" #include "code\datums\emergency_calls\big_game_hunter.dm" #include "code\datums\emergency_calls\cbrn.dm" -#include "code\datums\emergency_calls\forecon.dm" #include "code\datums\emergency_calls\clf.dm" #include "code\datums\emergency_calls\cmb.dm" #include "code\datums\emergency_calls\colonist.dm" @@ -521,6 +520,7 @@ #include "code\datums\emergency_calls\emergency_call.dm" #include "code\datums\emergency_calls\ert_stations.dm" #include "code\datums\emergency_calls\feral_xenos.dm" +#include "code\datums\emergency_calls\forecon.dm" #include "code\datums\emergency_calls\forsaken_xenos.dm" #include "code\datums\emergency_calls\goons.dm" #include "code\datums\emergency_calls\hefa_knight.dm" From db8ed561790b5061c6f6a2cda815e0984348bd00 Mon Sep 17 00:00:00 2001 From: Steelpoint Date: Mon, 3 Jun 2024 02:40:59 +0800 Subject: [PATCH 3/4] MoarFix --- colonialmarines.dme | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/colonialmarines.dme b/colonialmarines.dme index ffaac72774e4..a4a1e259cee3 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -1780,10 +1780,10 @@ #include "code\modules\gear_presets\uscm.dm" #include "code\modules\gear_presets\uscm_dress.dm" #include "code\modules\gear_presets\uscm_event.dm" +#include "code\modules\gear_presets\uscm_forecon.dm" #include "code\modules\gear_presets\uscm_medical.dm" #include "code\modules\gear_presets\uscm_police.dm" #include "code\modules\gear_presets\uscm_ship.dm" -#include "code\modules\gear_presets\uscm_forecon.dm" #include "code\modules\gear_presets\whiteout.dm" #include "code\modules\gear_presets\wo.dm" #include "code\modules\gear_presets\wy.dm" From a097e9f964176968353d50c21a4023e991ecd141 Mon Sep 17 00:00:00 2001 From: Steelpoint Date: Mon, 3 Jun 2024 15:59:58 +0800 Subject: [PATCH 4/4] MinChange --- code/datums/emergency_calls/forecon.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/datums/emergency_calls/forecon.dm b/code/datums/emergency_calls/forecon.dm index d17330207dc0..98e6a1c27ec2 100644 --- a/code/datums/emergency_calls/forecon.dm +++ b/code/datums/emergency_calls/forecon.dm @@ -4,6 +4,7 @@ objectives = "Handle whatever threat is present. Further orders may be provided." home_base = /datum/lazy_template/ert/weyland_station probability = 0 + mob_min = 3 mob_max = 6 max_heavies = 1 @@ -48,6 +49,7 @@ /datum/emergency_call/forecon/platoon name = "FORECON (Platoon)" + mob_min = 6 mob_max = 30 probability = 0 max_medics = 6