Skip to content

Commit

Permalink
FORECON Gear Preset + Admin ERT Addition (#6364)
Browse files Browse the repository at this point in the history
# About the pull request

Adds a set of FORECON gear presets set to simulate the FORECON marines,
but properly equipped. Furthermore adds two admin only ERT's to summon a
squad (6 people) or a platoon (30 people) of FORECON.

- Adds a set of recon light armour for FORECON, has same defence as
medium armour but light armour move speed.
- Tactical attachment variant of the custom M4RA and regular M4RA that
FORECON use
- Adds squad settings for ERT FORECON

No changes to regular FORECON are made. 

# Explain why it's good for the game

The intention behind this is to give staff more tools to make use of
FORECON in regular gameplay, either to spawn in individual FORECON
marines or to send in FORECON ERT's for an event.

The PR does not add FORECON to the regular Distress Beacon pool. 

# Testing Photographs and Procedure
![Screenshot 2024-06-03 02 37
06](https://github.com/cmss13-devs/cmss13/assets/6595389/f0291deb-0646-44c8-865f-9a4c21a8124c)



# Changelog
:cl:
add: Marine force reconnaissance gear presets have been added for admin
use.
add: ERT force reconnaissance have functional squad settings, including
a squad colour (green) and a radio channel. These settings do not apply
for survivor force reconnaissance marines.
add: A marine force reconnaissance distress signal has been added.
Spawning either a 6-man squad, or a 30-man platoon. These are currently
for admin use only.
add: A set of customized M3-R armour has been added for force
reconnaissance marines. It has comparable defensive values to M3 armour
but has the speed slowdown of M3-L armour. Only ERT force reconnaissance
marines will spawn with this.
/:cl:

---------

Co-authored-by: Steelpoint <[email protected]>
  • Loading branch information
Steelpoint and Steelpoint authored Jul 9, 2024
1 parent b72dc18 commit 5b11896
Show file tree
Hide file tree
Showing 11 changed files with 365 additions and 1 deletion.
1 change: 1 addition & 0 deletions code/__DEFINES/job.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
3 changes: 3 additions & 0 deletions code/controllers/subsystem/communications.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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",
Expand Down
62 changes: 62 additions & 0 deletions code/datums/emergency_calls/forecon.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
/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_min = 3
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:</b> [objectives]")), 1 SECONDS)

/datum/emergency_call/forecon/platoon
name = "FORECON (Platoon)"
mob_min = 6
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."
12 changes: 12 additions & 0 deletions code/game/jobs/job/marine/squads.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
2 changes: 1 addition & 1 deletion code/game/machinery/telecomms/presets.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
8 changes: 8 additions & 0 deletions code/game/objects/items/devices/radio/headset.dm
Original file line number Diff line number Diff line change
Expand Up @@ -897,6 +897,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)
Expand Down
13 changes: 13 additions & 0 deletions code/modules/clothing/suits/marine_armor/_marine_armor.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
Loading

0 comments on commit 5b11896

Please sign in to comment.