Skip to content

Commit

Permalink
Colonial Marshals in Distress! CMB Handheld Distress Beacon (#4540)
Browse files Browse the repository at this point in the history
# About the pull request

<!-- Remove this text and explain what the purpose of your PR is.

Mention if you have tested your changes. If you changed a map, make sure
you used the mapmerge tool.
If this is an Issue Correction, you can type "Fixes Issue #169420" to
link the PR to the corresponding Issue number #169420.

Remember: something that is self-evident to you might not be to others.
Explain your rationale fully, even if you feel it goes without saying.
-->

Adds CMB Distress Beacon which is given to CMB Marshal. Which represent
a set of HRP roles.
This is pressed and turns on, sending a message to admins.
Admins can reply, deny, or choose to send one or both ERTs available to
them.

First ERT is the standard combat response, Anchorpoint Station Colonial
Marine QRF. 6 Marines ready to rescue CMB.
Second ERT is a very poor combat response. CMB Patrol Team - Marshals in
Distress. Up to 5 CMB people of various types which are not prepared for
combat. This may be better for a smaller scale response.

Denying the Distress Beacon gives a little message which basically says
"NO QRF is available, sorry. I'll relay your request. Good luck."

Replying will give a human voice through the radio headset which PMs the
player but ICly.

Down the line I **MIGHT** add a CMB "SWAT" team as featured which would
still be weak but slightly stronger than the patrol team(ie, they'd have
lights and possibly the integrated armor and 37-12 flamers) but right
now I don't see the need.

Special thanks to Morrow

# Explain why it's good for the game
There is a significant amount of mechanical issue when it comes to fax
interactions an admins especially towards the end of the game. Admins
may not have time to write faxes and the players might not either. In
addition to call things it can be convoluted or uncertain at times.

This clears things up a lot. A player comes to a conclusion that they
may need assistance. An admin can then teleport to the player, and
choose a variety of responses such as a radio reply, denial, or sending
in various types of reinforcements to the CMB team signalling distress.
It is mechanically more fluid and also immersive.

I'm also hoping that this will allow the Anchorpoint Marine QRF to
assist the Marshals as intended in their 2-part ERT.

# Testing Photographs and Procedure
<details>
<summary>Screenshots & Videos</summary>

Put screenshots and videos here with an empty line between the
screenshots and the `<details>` tags.

https://media.discordapp.net/attachments/975247220960014386/1157041837941473442/image.png?ex=65172aae&is=6515d92e&hm=a5fb779e0bd74238d9334b67fd3b6ea1961deef2dd63d025df832a3b3e40e01f&=

https://media.discordapp.net/attachments/975247220960014386/1157045204034015324/image.png?ex=65172dd1&is=6515dc51&hm=754a2e613319534afc82b099b217ae98227deb49f3b9c891adffac3cc810d40e&=

https://cdn.discordapp.com/attachments/987279688282021908/1157041436538196048/image.png?ex=65172a4f&is=6515d8cf&hm=44758548407d0d9394a2437764ad9c65f5d685528e0c292dda8ab9ab3ef52b98&

https://cdn.discordapp.com/attachments/987279688282021908/1157038354488107008/image.png?ex=65172770&is=6515d5f0&hm=7a7195bb3a2d543ffad2db151a175f2d897b9edca35f5fe98a9e19cd0ccba1be&

</details>
slightly outdated screenshots in terms of desc/lore/writing, but
mechanically the same - taken during good tests.

# Changelog
:cl:
add: Adds a handheld distress beacon for the Colonial Marshal. They can
use this to signal distress which in turn allows reinforcements in the
form of Anchorpoint Marine QRF or nearby CMB teams. Admins do the final
check.
add: Adds a CMB Patrol Team which responds to "Marshals in Distress"
call.
admin: headset admin response no longer specifies USCM origin(as this is
used for USCM, WY, and now CMB)
spellcheck: fixes a CMB typo in response message. Also a miniscule
change to HG 37-12 desc.
spellcheck: fixes 2 misc typos in CMB Inspections
/:cl:
  • Loading branch information
QuickLode authored Oct 11, 2023
1 parent 9bf0fa4 commit 74f6444
Show file tree
Hide file tree
Showing 6 changed files with 93 additions and 5 deletions.
13 changes: 13 additions & 0 deletions code/datums/emergency_calls/cmb.dm
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,19 @@
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 patrol team responding to Marshals in Distress.
/datum/emergency_call/cmb/alt
name = "CMB - Patrol Team - Marshals in Distress (Friendly)"
mob_max = 5
mob_min = 1
probability = 0

/datum/emergency_call/cmb/alt/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."

// Anchorpoint Station Colonial Marines, use this primarily for reinforcing or evacuating the CMB, as the CMB themselves are not equipped to handle heavy engagements.
/datum/emergency_call/cmb/anchorpoint
name = "CMB - Anchorpoint Station Colonial Marine QRF (Friendly)"
Expand Down
4 changes: 2 additions & 2 deletions code/datums/emergency_calls/inspection.dm
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@

/datum/emergency_call/inspection_cmb/New()
..()
arrival_message = "[MAIN_SHIP_NAME], This is Anchorpoint Station with the Colonial Marshal Bureau. Be advised, a CMB transport vessel is preparing to board you, submitting Federal docking clearances now. Standby."
arrival_message = "[MAIN_SHIP_NAME], this is Anchorpoint Station with the Colonial Marshal Bureau. Be advised, a CMB transport vessel is preparing to board you, submitting Federal docking clearances now. Standby."
objectives = "Get your instructions from the CMB Office at Anchorpoint Station, and carry out your orders. Ensure that Colonial assets are safe and in your custody. Do not enforce or override Marine Law on a Marine Ship unless requested, as it's outside of your juristiction."

will_spawn_icc_liaison = prob(90)
Expand Down Expand Up @@ -265,7 +265,7 @@
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."))

/datum/emergency_call/inspection_cmb/black_market
name = "Inspection - Colonial Marshal Ledger Investigation Team"
name = "Inspection - Colonial Marshals Ledger Investigation Team"
mob_max = 3 //Marshal, Deputy, ICC CL
mob_min = 2
shuttle_id = "Distress_PMC"
Expand Down
41 changes: 41 additions & 0 deletions code/game/objects/items/handheld_distress_beacon.dm
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,44 @@

active = TRUE
update_icon()

/// CMB distress beacon held by CMB Marshal for signalling distress to Anchorpoint Station
/obj/item/handheld_distress_beacon_CMB
name = "\improper CMB handheld distress beacon"
desc = "An emergency beacon. This one is branded with a Colonial Marshal Bureau star and 'ANCHORPOINT STATION' is etched in stencil on the side. This device is issued to CMB Marshals and features an extended relay antenna."
icon = 'icons/obj/items/handheld_distress_beacon.dmi'
icon_state = "beacon_inactive"
w_class = SIZE_SMALL

/// whether or not the beacon is turned on, when activated sends message to admins requesting Anchorpoint ERT and changes sprite
var/active = FALSE

/obj/item/handheld_distress_beacon_CMB/get_examine_text(mob/user)
. = ..()

if(active)
. += "The beacon has been activated!"

/obj/item/handheld_distress_beacon_CMB/update_icon()
. = ..()

if(active)
icon_state = "beacon_active"
else
icon_state = initial(icon_state)

/obj/item/handheld_distress_beacon_CMB/attack_self(mob/user)
. = ..()

if(active)
to_chat(user, "[src] is already active!")
return

for(var/client/client in GLOB.admins)
if((R_ADMIN|R_MOD) & client.admin_holder.rights)
playsound_client(client,'sound/effects/sos-morse-code.ogg',10)
message_admins("[key_name(user)] has signalled CMB in distress, and requests reinforcements! [CC_MARK(user)] (<A HREF='?_src_=admin_holder;[HrefToken(forceGlobal = TRUE)];distress_cmb=\ref[user]'>SEND MARINE QRF</A>) (<A HREF='?_src_=admin_holder;[HrefToken(forceGlobal = TRUE)];distress_cmb_alt=\ref[user]'>SEND CMB TEAM</A>) (<A HREF='?_src_=admin_holder;[HrefToken(forceGlobal = TRUE)];deny_cmb=\ref[user]'>DENY</A>) [ADMIN_JMP_USER(user)] [CC_REPLY(user)]")
to_chat(user, SPAN_NOTICE("The CMB distress beacon flashes red, indicating that the device has been activated and is transmitting."))

active = TRUE
update_icon()
36 changes: 35 additions & 1 deletion code/modules/admin/topic/topic.dm
Original file line number Diff line number Diff line change
Expand Up @@ -1243,7 +1243,7 @@
for(var/client/X in GLOB.admins)
if((R_ADMIN|R_MOD) & X.admin_holder.rights)
to_chat(X, SPAN_STAFF_IC("<b>ADMINS/MODS: \red [src.owner] replied to [key_name(H)]'s USCM message with: \blue \")[input]\"</b>"))
to_chat(H, SPAN_DANGER("You hear something crackle in your headset before a voice speaks, please stand by for a message from USCM:\" \blue <b>\"[input]\"</b>"))
to_chat(H, SPAN_DANGER("You hear something crackle in your headset before a voice speaks, please stand by for a message:\" \blue <b>\"[input]\"</b>"))

else if(href_list["SyndicateReply"])
var/mob/living/carbon/human/H = locate(href_list["SyndicateReply"])
Expand Down Expand Up @@ -1904,6 +1904,22 @@
addtimer(CALLBACK(src, PROC_REF(accept_ert), usr, locate(href_list["distress"])), 10 SECONDS)
//unanswered_distress -= ref_person

if(href_list["distress_cmb"]) //CMB distress signal, activates Anchorpoint Marine QRF to assist/rescue Colonial Marshals in distress
distress_cancel = FALSE
message_admins("[key_name_admin(usr)] has opted to SEND the Anchorpoint Station Colonial Marine QRF to assist the CMB! Launching in 10 seconds... (<A HREF='?_src_=admin_holder;[HrefToken(forceGlobal = TRUE)];distresscancel=\ref[usr]'>CANCEL</A>)")
addtimer(CALLBACK(src, PROC_REF(accept_cmb_ert), usr, locate(href_list["distress"])), 10 SECONDS)

if(href_list["distress_cmb_alt"]) //CMB distress signal, activates a nearby CMB Patrol Team to assist/rescue Colonial Marshals in distress
distress_cancel = FALSE
message_admins("[key_name_admin(usr)] has opted to SEND a nearby CMB Patrol Team to assist the CMB! Launching in 10 seconds... (<A HREF='?_src_=admin_holder;[HrefToken(forceGlobal = TRUE)];distresscancel=\ref[usr]'>CANCEL</A>)")
addtimer(CALLBACK(src, PROC_REF(accept_cmb_alt_ert), usr, locate(href_list["distress"])), 10 SECONDS)

if(href_list["deny_cmb"]) // Anchorpoint-deny. The distress call is denied, citing unavailable forces
var/mob/ref_person = locate(href_list["deny_cmb"])
to_chat(ref_person, "A voice barely crackles through the static: CMB Team, this is Anchorpoint Station. No can do, QRF currently dispatched elsewhere, relaying distress. Sorry. Good luck, out.")
log_game("[key_name_admin(usr)] has denied a distress beacon, requested by [key_name_admin(ref_person)]")
message_admins("[key_name_admin(usr)] has denied a distress beacon, requested by [key_name_admin(ref_person)]", 1)

if(href_list["distress_pmc"]) //Wey-Yu specific PMC distress signal for chem retrieval ERT
distress_cancel = FALSE
message_admins("[key_name_admin(usr)] has opted to SEND the distress beacon! Launching in 10 seconds... (<A HREF='?_src_=admin_holder;[HrefToken(forceGlobal = TRUE)];distresscancel=\ref[usr]'>CANCEL</A>)")
Expand Down Expand Up @@ -2092,6 +2108,24 @@
log_game("[key_name_admin(approver)] has sent a randomized distress beacon, requested by [key_name_admin(ref_person)]")
message_admins("[key_name_admin(approver)] has sent a randomized distress beacon, requested by [key_name_admin(ref_person)]")

/// tells admins which admin has sent the Anchorpoint ERT in response to CMB distress
/datum/admins/proc/accept_cmb_ert(mob/approver, mob/ref_person)
if(distress_cancel)
return
distress_cancel = TRUE
SSticker.mode.get_specific_call("CMB - Anchorpoint Station Colonial Marine QRF (Friendly)", FALSE, FALSE)
log_game("[key_name_admin(approver)] has sent an Anchorpoint Station Colonial Marine QRF response, requested by [key_name_admin(ref_person)]")
message_admins("[key_name_admin(approver)] has sent an Anchorpoint Station Colonial Marine QRF response, requested by [key_name_admin(ref_person)]")

/// tells admins which admin has sent the CMB ERT in response to CMB distress
/datum/admins/proc/accept_cmb_alt_ert(mob/approver, mob/ref_person)
if(distress_cancel)
return
distress_cancel = TRUE
SSticker.mode.get_specific_call("CMB - Patrol Team - Marshals in Distress (Friendly)", FALSE, FALSE)
log_game("[key_name_admin(approver)] has sent a CMB Patrol Team distress response, requested by [key_name_admin(ref_person)]")
message_admins("[key_name_admin(approver)] has sent a CMB Patrol Team distress response, requested by [key_name_admin(ref_person)]")

/datum/admins/proc/accept_pmc_ert(mob/approver, mob/ref_person)
if(distress_cancel)
return
Expand Down
2 changes: 1 addition & 1 deletion code/modules/gear_presets/cmb.dm
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@
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/weapon/gun/pistol/holdout, 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/ammo_magazine/revolver/cmb, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/handheld_distress_beacon_CMB, 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/flashlight, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/camera, WEAR_IN_BACK)
Expand Down
2 changes: 1 addition & 1 deletion code/modules/projectiles/guns/shotguns.dm
Original file line number Diff line number Diff line change
Expand Up @@ -1278,7 +1278,7 @@ can cause issues with ammo types getting mixed up during the burst.

/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 out on the rim. You can switch the active internal magazine by toggling the shotgun tube."
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."
icon = 'icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi'
icon_state = "m3717"
item_state = "m3717"
Expand Down

0 comments on commit 74f6444

Please sign in to comment.