Skip to content

Commit

Permalink
Solar Devils ERT [PvE Marines] (#6811)
Browse files Browse the repository at this point in the history
# About the pull request

In marking the merger of the PvP and PvE servers under a single banner,
this PR sets to celebrate that by the addition of the 'Solar Devils'
battalion as a (currently admin only) Emergency Response Team. The Solar
Devils are similarly well equipped and trained as they appear in PvE.

This PR also adds some content from the PvE server to enhance the
appearance of the Solar Devils to better fit their appearance, such as a
battalion patch sprite.

These squads will spawn with, depending on if they are a half or full
squad, 4 Riflemen, 2 Smartgunners, 2 Team Leaders, 1 Platoon Corpsman
and 1 Platoon Leader. The Platoon Leader will only spawn with the 'Full
Squad' ERT.

The squad are all armed with M41A Mk1's.

----

In terms of function. This PR adds two distress calls for admins to use,
a Half-Squad and Full Squad deployment of either 5 or 10, respectively,
Solar Devil Marines. They spawn with some unique equipment, and they all
possess increased skills.

# Explain why it's good for the game

Show of comradeship, and a small easter egg of the PvE server in PvP. 


# Testing Photographs and Procedure
![Screenshot 2024-07-28 21 52
07](https://github.com/user-attachments/assets/a28fca30-a2ca-4b13-9528-42586d4a8caf)



# Changelog
:cl:
add: In observance of the merger of the PvP and PvE servers of CM-SS13.
The 'Solar Devils', the USCM battalion that appear in the PvE server,
have been added as an admin only Emergency Response Team.
add: The Solar Devils are highly trained and well equipped by Marine
standards, they will also spawn as part of their own squad.
imageadd: A 'Solar Devils' uniform patch accessory has been added. 
/:cl:

---------

Co-authored-by: Steelpoint <[email protected]>
Co-authored-by: private-tristan <[email protected]>
  • Loading branch information
3 people committed Aug 23, 2024
1 parent 2ab6abd commit 5947249
Show file tree
Hide file tree
Showing 12 changed files with 510 additions and 0 deletions.
3 changes: 3 additions & 0 deletions code/__DEFINES/job.dm
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#define SQUAD_SOF "SOF"
#define SQUAD_CBRN "CBRN"
#define SQUAD_FORECON "FORECON"
#define SQUAD_SOLAR "Solar Devils"

// Job name defines
#define JOB_SQUAD_MARINE "Rifleman"
Expand Down Expand Up @@ -124,6 +125,8 @@ GLOBAL_LIST_INIT(job_command_roles, JOB_COMMAND_ROLES_LIST)
#define JOB_GENERAL "USCM General"
#define JOB_ACMC "Assistant Commandant of the Marine Corps"
#define JOB_CMC "Commandant of the Marine Corps"
#define JOB_PLT_MED "Platoon Corpsman"
#define JOB_PLT_SL "Platoon Squad Leader"
#define JOB_SQUAD_TECH "Reconnaissance Support Technician"

// Used to add a timelock to a job. Will be passed onto derivatives
Expand Down
1 change: 1 addition & 0 deletions code/controllers/subsystem/communications.dm
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ GLOBAL_LIST_INIT(radiochannels, list(
SQUAD_SOF = SOF_FREQ,
SQUAD_CBRN = CBRN_FREQ,
SQUAD_FORECON = FORECON_FREQ,
SQUAD_SOLAR = SOF_FREQ,

RADIO_CHANNEL_ALAMO = DS1_FREQ,
RADIO_CHANNEL_NORMANDY = DS2_FREQ,
Expand Down
91 changes: 91 additions & 0 deletions code/datums/emergency_calls/solar_devils.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
/datum/emergency_call/solar_devils
name = "USCM Solar Devils (Half Squad)"
arrival_message = "This is the Solar Devils of the USCM 2nd Division, responding to your distress beacon. Don't worry, the grown-ups are here to clean up your mess."
objectives = "Assist local Marine forces in dealing with whatever issue they can't handle. Further orders may be forthcoming."
home_base = /datum/lazy_template/ert/uscm_station
probability = 0
mob_min = 3
mob_max = 5

max_medics = 1
max_smartgunners = 1

/datum/emergency_call/solar_devils/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/tl_pve, TRUE, TRUE)
to_chat(mob, SPAN_ROLE_HEADER("You are the Solar Devils Team 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/medic_pve, TRUE, TRUE)
to_chat(mob, SPAN_ROLE_HEADER("You are the Solar Devils Platoon Corpsman!"))

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 the Solar Devils Smartgunner!"))
arm_equipment(mob, /datum/equipment_preset/uscm/sg_pve, TRUE, TRUE)

else
arm_equipment(mob, /datum/equipment_preset/uscm/rifleman_pve, TRUE, TRUE)
to_chat(mob, SPAN_ROLE_HEADER("You are a Solar Devils Rifleman!"))

to_chat(mob, SPAN_ROLE_BODY("You are a member of the 3rd Battalion 'Solar Devils', part of the USCM's 2nd Division, 1st Regiment. Unlike most of the USS Almayer's troops, you are well-trained and properly-equipped career marines. Semper Fidelis."))
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), mob, SPAN_BOLD("Objectives:</b> [objectives]")), 1 SECONDS)

/datum/emergency_call/solar_devils_full
name = "USCM Solar Devils (Full Squad)"
arrival_message = "This is the Solar Devils of the USCM 2nd Division, responding to your distress beacon. Don't worry, the grown-ups are here to clean up your mess."
objectives = "Assist local Marine forces in dealing with whatever issue they can't handle. Further orders may be forthcoming."
home_base = /datum/lazy_template/ert/uscm_station
probability = 0
mob_min = 3
mob_max = 10

max_engineers = 2
max_medics = 1
max_smartgunners = 2

/datum/emergency_call/solar_devils_full/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/sl_pve, TRUE, TRUE)
to_chat(mob, SPAN_ROLE_HEADER("You are the Solar Devils Platoon Leader!"))

else if(engineers < max_engineers && HAS_FLAG(mob.client.prefs.toggles_ert, PLAY_ENGINEER) && check_timelock(mob.client, JOB_SQUAD_LEADER, time_required_for_job))
engineers++
arm_equipment(mob, /datum/equipment_preset/uscm/tl_pve, TRUE, TRUE)
to_chat(mob, SPAN_ROLE_HEADER("You are a Solar Devils Team 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/medic_pve, TRUE, TRUE)
to_chat(mob, SPAN_ROLE_HEADER("You are the Solar Devils Platoon Corpsman!"))

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 Solar Devils Smartgunner!"))
arm_equipment(mob, /datum/equipment_preset/uscm/sg_pve, TRUE, TRUE)

else
arm_equipment(mob, /datum/equipment_preset/uscm/rifleman_pve, TRUE, TRUE)
to_chat(mob, SPAN_ROLE_HEADER("You are a Solar Devils Rifleman!"))

to_chat(mob, SPAN_ROLE_BODY("You are a member of the 3rd Battalion 'Solar Devils', part of the USCM's 2nd Division, 1st Regiment. Unlike most of the USS Almayer's troops, you are well-trained and properly-equipped career marines. Semper Fidelis."))
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), mob, SPAN_BOLD("Objectives:</b> [objectives]")), 1 SECONDS)
4 changes: 4 additions & 0 deletions code/datums/factions/uscm.dm
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,10 @@
if(JOB_GENERAL, JOB_COLONEL, JOB_ACMC, JOB_CMC)
marine_rk = "general"
border_rk = "command"
if(JOB_PLT_MED)
marine_rk = "med"
if(JOB_PLT_SL)
marine_rk = "leader"
if(JOB_SQUAD_TECH)
marine_rk = "tech"
if(JOB_INTEL)
Expand Down
77 changes: 77 additions & 0 deletions code/datums/skills/uscm.dm
Original file line number Diff line number Diff line change
Expand Up @@ -426,3 +426,80 @@ COMMAND STAFF
SKILL_JTAC = SKILL_JTAC_EXPERT,
SKILL_INTEL = SKILL_INTEL_TRAINED,
)

/*
---------------------
SOLAR DEVILS (PvE Marines)
---------------------
*/

/datum/skills/rifleman_pve
name = "Private"
skills = list(
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREMAN = SKILL_FIREMAN_EXPERT,
SKILL_POWERLOADER = SKILL_POWERLOADER_TRAINED,
SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
SKILL_JTAC = SKILL_JTAC_BEGINNER,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
)

/datum/skills/combat_medic_pve
name = "Combat Medic"
skills = list(
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREMAN = SKILL_FIREMAN_EXPERT,
SKILL_POWERLOADER = SKILL_POWERLOADER_TRAINED,
SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
SKILL_JTAC = SKILL_JTAC_BEGINNER,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_SURGERY = SKILL_SURGERY_NOVICE,
)

/datum/skills/smartgunner_pve
name = "Smartgunner"
skills = list(
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREMAN = SKILL_FIREMAN_EXPERT,
SKILL_POWERLOADER = SKILL_POWERLOADER_TRAINED,
SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
SKILL_JTAC = SKILL_JTAC_BEGINNER,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_SPEC_WEAPONS = SKILL_SPEC_SMARTGUN,
)

/datum/skills/tl_pve
name = "Fireteam Leader"
skills = list(
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREMAN = SKILL_FIREMAN_EXPERT,
SKILL_POWERLOADER = SKILL_POWERLOADER_TRAINED,
SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
SKILL_JTAC = SKILL_JTAC_TRAINED,
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_PILOT = SKILL_PILOT_TRAINED,
)

/datum/skills/sl_pve
name = "Squad Leader"
skills = list(
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREMAN = SKILL_FIREMAN_EXPERT,
SKILL_POWERLOADER = SKILL_POWERLOADER_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
SKILL_CQC = SKILL_CQC_TRAINED,
SKILL_LEADERSHIP = SKILL_LEAD_EXPERT,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_SURGERY = SKILL_SURGERY_NOVICE,
SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
SKILL_JTAC = SKILL_JTAC_TRAINED,
SKILL_INTEL = SKILL_INTEL_TRAINED,
SKILL_PILOT = SKILL_PILOT_EXPERT,
)
11 changes: 11 additions & 0 deletions code/game/jobs/job/marine/squads.dm
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,17 @@
roundstart = FALSE
locked = TRUE

/datum/squad/marine/solardevils
name = SQUAD_SOLAR
equipment_color = "#5a2c2c"
chat_color = "#5a2c2c"
radio_freq = SOF_FREQ
minimap_color = "#5a2c2c"

active = FALSE
roundstart = FALSE
locked = TRUE


//############################### UPP Squads
/datum/squad/upp
Expand Down
10 changes: 10 additions & 0 deletions code/game/objects/items/storage/toolkit.dm
Original file line number Diff line number Diff line change
Expand Up @@ -42,5 +42,15 @@
else
icon_state = icon_full

/obj/item/storage/toolkit/full/fill_preset_inventory()
new /obj/item/stack/cable_coil/random(src)
new /obj/item/circuitboard/apc(src)
new /obj/item/circuitboard/apc(src)
new /obj/item/circuitboard/apc(src)
new /obj/item/cell/high(src)
new /obj/item/cell/high(src)
new /obj/item/clothing/glasses/welding(src)


/obj/item/storage/toolkit/empty/fill_preset_inventory()
return
6 changes: 6 additions & 0 deletions code/modules/clothing/gloves/marine_gloves.dm
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,12 @@
item_state = "insulated"
siemens_coefficient = 0

/obj/item/clothing/gloves/marine/insulated/black
name = "marine insulated black gloves"
desc = "These marine gloves will protect the wearer from electric shocks and shrapnal. Standard issue for properly-equipped Marines."
icon_state = "black"
item_state = "black"

/obj/item/clothing/gloves/marine/black
name = "marine black combat gloves"
adopts_squad_color = FALSE
Expand Down
5 changes: 5 additions & 0 deletions code/modules/clothing/under/ties.dm
Original file line number Diff line number Diff line change
Expand Up @@ -393,6 +393,11 @@
desc = "A fire-resistant shoulder patch, worn by the men and women of the Falling Falcons, the 2nd battalion of the 4th brigade of the USCM."
icon_state = "fallingfalconspatch"

/obj/item/clothing/accessory/patch/devils
name = "USCM Solar Devils patch"
desc = "A fire-resistant shoulder patch, worn by the men and women of the 3rd Battalion 'Solar Devils', part of the USCM 2nd Division, 1st Regiment."
icon_state = "solardevilspatch"

/obj/item/clothing/accessory/patch/forecon
name = "USCM Force Reconnaissance patch"
desc = "A fire-resistant shoulder patch, worn by the men and women of the USS Hanyut, USCM FORECON."
Expand Down
Loading

0 comments on commit 5947249

Please sign in to comment.