Skip to content

Commit

Permalink
UPP Operations (#108)
Browse files Browse the repository at this point in the history
Co-authored-by: FslashN <[email protected]>
  • Loading branch information
AndroBetel and FslashN committed Mar 4, 2024
1 parent b41ec8d commit bab7c3e
Show file tree
Hide file tree
Showing 84 changed files with 29,556 additions and 75 deletions.
7 changes: 7 additions & 0 deletions code/__DEFINES/access.dm
Original file line number Diff line number Diff line change
Expand Up @@ -108,11 +108,17 @@ most of them are tied into map-placed objects. This should be reworked in the fu
#define ACCESS_UPP_FLIGHT 235
#define ACCESS_UPP_RESEARCH 236

#define ACCESS_UPP_SQUAD_ONE 237
#define ACCESS_UPP_SQUAD_TWO 238

#define ACCESS_UPP_COMMANDO 239
#define ACCESS_UPP_LEADERSHIP 240
///Senior leadership, the highest ranks
#define ACCESS_UPP_SENIOR_LEAD 241

#define ACCESS_UPP_MEDPREP 242
#define ACCESS_UPP_MACHINEGUN 243
#define ACCESS_UPP_TLPREP 244
//=================================================

//Colonial Liberation Front access levels (260-289)
Expand Down Expand Up @@ -196,6 +202,7 @@ most of them are tied into map-placed objects. This should be reworked in the fu

///All access levels associated with UPP
#define ACCESS_LIST_UPP_ALL "UPP (ALL)"
#define ACCESS_LIST_UPP_PLATOON "UPP (Platoon)"

///Generic/basic access to CLF stuff
#define ACCESS_LIST_CLF_BASE "CLF (Basic)"
Expand Down
8 changes: 8 additions & 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_UPP "Red Dawn"

// Job name defines
#define JOB_SQUAD_MARINE "Rifleman"
Expand All @@ -24,6 +25,13 @@
#define JOB_SQUAD_ROLES /datum/timelock/squad
#define JOB_SQUAD_ROLES_LIST list(JOB_SQUAD_MARINE, JOB_SQUAD_LEADER, JOB_SQUAD_ENGI, JOB_SQUAD_MEDIC, JOB_SQUAD_SPECIALIST, JOB_SQUAD_SMARTGUN, JOB_SQUAD_TEAM_LEADER)

#define JOB_SQUAD_MARINE_UPP "UPP Rifleman"
#define JOB_SQUAD_LEADER_UPP "UPP Platoon Sergeant"
#define JOB_SQUAD_MEDIC_UPP "UPP Sanitar"
#define JOB_SQUAD_TEAM_LEADER_UPP "UPP Squad Sergeant"
#define JOB_SQUAD_SMARTGUN_UPP "UPP Machinegunner"
#define JOB_SO_UPP "UPP Platoon Commander"

var/global/list/job_squad_roles = JOB_SQUAD_ROLES_LIST

#define JOB_COLONIST "Colonist"
Expand Down
1 change: 1 addition & 0 deletions code/__DEFINES/minimap.dm
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ GLOBAL_LIST_INIT(all_minimap_flags, bitfield2list(MINIMAP_FLAG_ALL))
#define MINIMAP_SQUAD_FOXTROT "#fe7b2e"
#define MINIMAP_SQUAD_SOF "#400000"
#define MINIMAP_SQUAD_INTEL "#053818"
#define MINIMAP_SQUAD_UPP "#B22222"

#define MINIMAP_ICON_BACKGROUND_CIVILIAN "#7D4820"
#define MINIMAP_ICON_BACKGROUND_CIC "#3f3f3f"
Expand Down
3 changes: 2 additions & 1 deletion code/__DEFINES/mode.dm
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ var/global/list/ROLES_ENGINEERING = list(JOB_CHIEF_ENGINEER, JOB_ORDNANCE_TECH,
var/global/list/ROLES_REQUISITION = list(JOB_CHIEF_REQUISITION, JOB_CARGO_TECH, JOB_WO_CHIEF_REQUISITION, JOB_WO_REQUISITION)
var/global/list/ROLES_MEDICAL = list(JOB_CMO, JOB_RESEARCHER, JOB_DOCTOR, JOB_NURSE, JOB_WO_CMO, JOB_WO_RESEARCHER, JOB_WO_DOCTOR)
var/global/list/ROLES_MARINES = list(JOB_SQUAD_LEADER, JOB_SQUAD_TEAM_LEADER, JOB_SQUAD_SPECIALIST, JOB_SQUAD_SMARTGUN, JOB_SQUAD_MEDIC, JOB_SQUAD_ENGI, JOB_SQUAD_MARINE)
var/global/list/ROLES_SQUAD_ALL = list(SQUAD_MARINE_1, SQUAD_MARINE_2, SQUAD_MARINE_3, SQUAD_MARINE_4, SQUAD_MARINE_5, SQUAD_MARINE_CRYO, SQUAD_MARINE_INTEL)
var/global/list/ROLES_SQUAD_ALL = list(SQUAD_MARINE_1, SQUAD_MARINE_2, SQUAD_MARINE_3, SQUAD_MARINE_4, SQUAD_MARINE_5, SQUAD_MARINE_CRYO, SQUAD_MARINE_INTEL, SQUAD_UPP)

//Groundside roles
var/global/list/ROLES_XENO = list(JOB_XENOMORPH_QUEEN, JOB_XENOMORPH)
Expand All @@ -139,6 +139,7 @@ var/global/list/ROLES_FACTION_CLASH = ROLES_USCM + JOB_PREDATOR

var/global/list/ROLES_UNASSIGNED = list(JOB_SQUAD_MARINE)
var/global/list/ROLES_AI = list(JOB_SO, JOB_SQUAD_LEADER, JOB_SQUAD_MEDIC, JOB_SQUAD_TEAM_LEADER, JOB_SQUAD_SMARTGUN, JOB_SQUAD_MARINE)
var/global/list/ROLES_AI_UPP = list(JOB_SO_UPP, JOB_SQUAD_LEADER_UPP, JOB_SQUAD_MEDIC_UPP, JOB_SQUAD_TEAM_LEADER_UPP, JOB_SQUAD_SMARTGUN_UPP, JOB_SQUAD_MARINE_UPP)
var/global/list/ROLES_WO = list(JOB_WO_CO, JOB_WO_XO, JOB_WO_CORPORATE_LIAISON, JOB_WO_SYNTH, JOB_WO_CHIEF_POLICE, JOB_WO_SO, JOB_WO_CREWMAN, JOB_WO_POLICE, JOB_WO_PILOT, JOB_WO_CHIEF_ENGINEER, JOB_WO_ORDNANCE_TECH, JOB_WO_CHIEF_REQUISITION, JOB_WO_REQUISITION, JOB_WO_CMO, JOB_WO_DOCTOR, JOB_WO_RESEARCHER, JOB_WO_SQUAD_MARINE, JOB_WO_SQUAD_MEDIC, JOB_WO_SQUAD_ENGINEER, JOB_WO_SQUAD_SMARTGUNNER, JOB_WO_SQUAD_SPECIALIST, JOB_WO_SQUAD_LEADER)
//Role lists used for switch() checks in show_blurb_uscm(). Cosmetic, determines ex. "Engineering, USS Almayer", "2nd Bat. 'Falling Falcons'" etc.
#define BLURB_USCM_COMBAT JOB_CO, JOB_XO, JOB_SO, JOB_WO_CO, JOB_WO_XO, JOB_WO_CHIEF_POLICE, JOB_WO_SO, JOB_WO_CREWMAN, JOB_WO_POLICE, JOB_SEA,\
Expand Down
1 change: 1 addition & 0 deletions code/__DEFINES/shuttles.dm
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@
#define DROPSHIP_MIDWAY "dropship_midway"
#define DROPSHIP_ALAMO "dropship_alamo"
#define DROPSHIP_NORMANDY "dropship_normandy"
#define DROPSHIP_UPP "dropship_upp"

#define ALMAYER_DROPSHIP_LZ1 "almayer-hangar-lz1"
#define ALMAYER_DROPSHIP_LZ2 "almayer-hangar-lz2"
Expand Down
9 changes: 9 additions & 0 deletions code/controllers/subsystem/mapping.dm
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@ SUBSYSTEM_DEF(mapping)

/datum/controller/subsystem/mapping/proc/Loadship(list/errorList, name, path, files, list/traits, list/default_traits, silent = FALSE, override_map_path = "maps/")
LoadGroup(errorList, name, path, files, traits, default_traits, silent, override_map_path = override_map_path)
GLOB.gamemode_roles["Distress Signal: Lowpop"] = GLOB.platoon_to_role_list[MAIN_SHIP_PLATOON]

/datum/controller/subsystem/mapping/proc/Loadground(list/errorList, name, path, files, list/traits, list/default_traits, silent = FALSE, override_map_path = "maps/")
LoadGroup(errorList, name, path, files, traits, default_traits, silent, override_map_path = override_map_path)
Expand Down Expand Up @@ -339,3 +340,11 @@ SUBSYSTEM_DEF(mapping)
if(!MC)
return MAIN_SHIP_DEFAULT_NAME
return MC.map_name

/datum/controller/subsystem/mapping/proc/get_main_ship_platoon()
if(!configs)
return MAIN_SHIP_DEFAULT_PLATOON
var/datum/map_config/MC = configs[SHIP_MAP]
if(!MC)
return MAIN_SHIP_DEFAULT_PLATOON
return MC.platoon
30 changes: 15 additions & 15 deletions code/controllers/subsystem/minimap.dm
Original file line number Diff line number Diff line change
Expand Up @@ -381,7 +381,7 @@ SUBSYSTEM_DEF(minimaps)
/proc/get_tacmap_data_png(faction)
var/list/map_list

if(faction == FACTION_MARINE)
if(faction in FACTION_LIST_HUMANOID)
map_list = GLOB.uscm_flat_tacmap_data
else if(faction == XENO_HIVE_NORMAL)
map_list = GLOB.xeno_flat_tacmap_data
Expand All @@ -402,7 +402,7 @@ SUBSYSTEM_DEF(minimaps)
* * faction: FACTION_MARINE or XENO_HIVE_NORMAL
*/
/proc/get_unannounced_tacmap_data_png(faction)
if(faction == FACTION_MARINE)
if(faction in FACTION_LIST_HUMANOID )
return GLOB.uscm_unannounced_map
else if(faction == XENO_HIVE_NORMAL)
return GLOB.xeno_unannounced_map
Expand All @@ -418,7 +418,7 @@ SUBSYSTEM_DEF(minimaps)
/proc/get_tacmap_data_svg(faction)
var/list/map_list

if(faction == FACTION_MARINE)
if(faction in FACTION_LIST_HUMANOID )
map_list = GLOB.uscm_svg_tacmap_data
else if(faction == XENO_HIVE_NORMAL)
map_list = GLOB.xeno_svg_tacmap_data
Expand All @@ -443,9 +443,9 @@ SUBSYSTEM_DEF(minimaps)
return

var/is_observer = user.faction == FACTION_NEUTRAL && isobserver(user)
if(is_observer || user.faction == FACTION_MARINE)
if(is_observer || (user.faction in FACTION_LIST_HUMANOID))
// Send marine maps
var/datum/flattened_tacmap/latest = get_tacmap_data_png(FACTION_MARINE)
var/datum/flattened_tacmap/latest = get_tacmap_data_png(user.faction)
if(latest)
SSassets.transport.send_assets(user.client, latest.asset_key)
var/datum/flattened_tacmap/unannounced = get_unannounced_tacmap_data_png(FACTION_MARINE)
Expand All @@ -471,7 +471,7 @@ SUBSYSTEM_DEF(minimaps)
* * Returns a boolean value, TRUE if the operation was successful, FALSE if it was not (on cooldown generally).
*/
/datum/tacmap/drawing/proc/distribute_current_map_png(faction)
if(faction == FACTION_MARINE)
if(faction in FACTION_LIST_HUMANOID)
if(!COOLDOWN_FINISHED(GLOB, uscm_flatten_map_icon_cooldown))
return FALSE
COOLDOWN_START(GLOB, uscm_flatten_map_icon_cooldown, flatten_map_cooldown_time)
Expand All @@ -493,7 +493,7 @@ SUBSYSTEM_DEF(minimaps)
if(!client || !client.mob)
continue
var/mob/client_mob = client.mob
if(client_mob.faction == faction)
if(client_mob.faction in FACTION_LIST_HUMANOID )
faction_clients += client
else if(client_mob.faction == FACTION_NEUTRAL && isobserver(client_mob))
faction_clients += client
Expand All @@ -510,7 +510,7 @@ SUBSYSTEM_DEF(minimaps)
var/flat_tacmap_png = SSassets.transport.get_asset_url(flat_tacmap_key)
var/datum/flattened_tacmap/new_flat = new(flat_tacmap_png, flat_tacmap_key)

if(faction == FACTION_MARINE)
if(faction in FACTION_LIST_HUMANOID )
GLOB.uscm_unannounced_map = new_flat
else //if(faction == XENO_HIVE_NORMAL)
GLOB.xeno_unannounced_map = new_flat
Expand All @@ -528,7 +528,7 @@ SUBSYSTEM_DEF(minimaps)
/datum/tacmap/drawing/proc/store_current_svg_coords(faction, svg_coords, ckey)
var/datum/svg_overlay/svg_store_overlay = new(svg_coords, ckey)

if(faction == FACTION_MARINE)
if(faction in FACTION_LIST_HUMANOID )
GLOB.uscm_svg_tacmap_data += svg_store_overlay
else if(faction == XENO_HIVE_NORMAL)
GLOB.xeno_svg_tacmap_data += svg_store_overlay
Expand Down Expand Up @@ -729,7 +729,7 @@ SUBSYSTEM_DEF(minimaps)
old_map = get_tacmap_data_png(faction)
current_svg = get_tacmap_data_svg(faction)

var/use_live_map = faction == FACTION_MARINE && skillcheck(user, SKILL_LEADERSHIP, SKILL_LEAD_EXPERT) || is_xeno
var/use_live_map = skillcheck(user, SKILL_LEADERSHIP, SKILL_LEAD_EXPERT) || is_xeno

if(use_live_map && !map_holder)
var/level = SSmapping.levels_by_trait(targeted_ztrait)
Expand Down Expand Up @@ -807,9 +807,9 @@ SUBSYSTEM_DEF(minimaps)

data["isXeno"] = is_xeno
data["canViewTacmap"] = is_xeno
data["canViewCanvas"] = faction == FACTION_MARINE || faction == XENO_HIVE_NORMAL
data["canViewCanvas"] = (faction in FACTION_LIST_HUMANOID) || faction == XENO_HIVE_NORMAL

if(faction == FACTION_MARINE && skillcheck(user, SKILL_LEADERSHIP, SKILL_LEAD_EXPERT) || faction == XENO_HIVE_NORMAL && isqueen(user))
if(skillcheck(user, SKILL_LEADERSHIP, SKILL_LEAD_EXPERT) || faction == XENO_HIVE_NORMAL && isqueen(user))
data["canDraw"] = TRUE
data["canViewTacmap"] = TRUE

Expand Down Expand Up @@ -898,7 +898,7 @@ SUBSYSTEM_DEF(minimaps)
if(!istype(params["image"], /list)) // potentially very serious?
return FALSE

if(faction == FACTION_MARINE)
if(faction in FACTION_LIST_HUMANOID)
GLOB.uscm_flat_tacmap_data += new_current_map
else if(faction == XENO_HIVE_NORMAL)
GLOB.xeno_flat_tacmap_data += new_current_map
Expand All @@ -907,14 +907,14 @@ SUBSYSTEM_DEF(minimaps)
current_svg = get_tacmap_data_svg(faction)
old_map = get_tacmap_data_png(faction)

if(faction == FACTION_MARINE)
if(faction in FACTION_LIST_HUMANOID )
COOLDOWN_START(GLOB, uscm_canvas_cooldown, canvas_cooldown_time)
var/mob/living/carbon/human/human_leader = user
for(var/datum/squad/current_squad in RoleAuthority.squads)
current_squad.send_maptext("Tactical map update in progress...", "Tactical Map:")
human_leader.visible_message(SPAN_BOLDNOTICE("Tactical map update in progress..."))
playsound_client(human_leader.client, "sound/effects/sos-morse-code.ogg")
notify_ghosts(header = "Tactical Map", message = "The USCM tactical map has been updated.", ghost_sound = "sound/effects/sos-morse-code.ogg", notify_volume = 80, action = NOTIFY_USCM_TACMAP, enter_link = "uscm_tacmap=1", enter_text = "View", source = owner)
notify_ghosts(header = "Tactical Map", message = "The [faction] tactical map has been updated.", ghost_sound = "sound/effects/sos-morse-code.ogg", notify_volume = 80, action = NOTIFY_USCM_TACMAP, enter_link = "uscm_tacmap=1", enter_text = "View", source = owner)

else if(faction == XENO_HIVE_NORMAL)
var/mutable_appearance/appearance = mutable_appearance(icon('icons/mob/hud/actions_xeno.dmi'), "toggle_queen_zoom")
Expand Down
17 changes: 17 additions & 0 deletions code/datums/ammo/bullet/shotgun.dm
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,23 @@
scatter = SCATTER_AMOUNT_TIER_1
bonus_projectiles_amount = 0

/datum/ammo/bullet/shotgun/heavy/buckshot/special
bonus_projectiles_type = /datum/ammo/bullet/shotgun/heavy/buckshot/spread/special
bonus_projectiles_amount = EXTRA_PROJECTILES_TIER_8
accurate_range = 8
max_range = 8
damage = 75
penetration = 0
shell_speed = AMMO_SPEED_TIER_2
damage_armor_punch = 0
pen_armor_punch = 0

/datum/ammo/bullet/shotgun/heavy/buckshot/spread/special
name = "additional superheavy buckshot"
accurate_range = 8
max_range = 8
damage = 100

//basically the same
/datum/ammo/bullet/shotgun/heavy/buckshot/dragonsbreath
name = "dragon's breath shell"
Expand Down
5 changes: 5 additions & 0 deletions code/datums/ammo/bullet/sniper.dm
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,11 @@
damage = 80
penetration = ARMOR_PENETRATION_TIER_10

/datum/ammo/bullet/sniper/upp_pve
name = "high-power sniper bullet"
damage = 180
penetration = ARMOR_PENETRATION_TIER_4

/datum/ammo/bullet/sniper/anti_materiel
name = "anti-materiel sniper bullet"

Expand Down
4 changes: 2 additions & 2 deletions code/datums/ammo/bullet/special_ammo.dm
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,6 @@
accuracy_var_low = PROJECTILE_VARIANCE_TIER_8
accuracy_var_high = PROJECTILE_VARIANCE_TIER_6
accurate_range = 14
damage = 35
penetration= ARMOR_PENETRATION_TIER_6
damage = 45
penetration = ARMOR_PENETRATION_TIER_2
shrapnel_chance = SHRAPNEL_CHANCE_TIER_2
4 changes: 0 additions & 4 deletions code/datums/datacore.dm
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,6 @@ GLOBAL_DATUM_INIT(data_core, /datum/datacore, new)
departments += marines_by_squad
var/list/manifest_out = list()
for(var/datum/data/record/t in GLOB.data_core.general)
if(t.fields["mob_faction"] != FACTION_MARINE) //we process only USCM humans
continue
var/name = t.fields["name"]
var/rank = t.fields["rank"]
var/squad = t.fields["squad"]
Expand Down Expand Up @@ -98,8 +96,6 @@ GLOBAL_DATUM_INIT(data_core, /datum/datacore, new)
var/list/squad_sublists = ROLES_SQUAD_ALL.Copy() //Are there any marines in the squad?

for(var/datum/data/record/t in GLOB.data_core.general)
if(t.fields["mob_faction"] != FACTION_MARINE) //we process only USCM humans
continue

var/name = t.fields["name"]
var/rank = t.fields["rank"]
Expand Down
35 changes: 34 additions & 1 deletion code/datums/factions/upp.dm
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
hud_icon_state = "sl"
if(JOB_UPP_POLICE)
hud_icon_state = "mp"
if(JOB_UPP_LT_OFFICER)
if(JOB_UPP_LT_OFFICER, JOB_SO)
hud_icon_state = "lt"
if(JOB_UPP_SRLT_OFFICER)
hud_icon_state = "slt"
Expand Down Expand Up @@ -56,6 +56,39 @@
if(hud_icon_state)
holder.overlays += image('icons/mob/hud/marine_hud.dmi', H, "upp_[hud_icon_state]")

//UPP PVE PLATOON
var/datum/squad/squad = H.assigned_squad
if(istype(squad, /datum/squad/marine/upp))
var/squad_clr = H.assigned_squad.equipment_color
switch(GET_DEFAULT_ROLE(_role))
if(JOB_SQUAD_MEDIC) hud_icon_state = "med"
if(JOB_SQUAD_SMARTGUN) hud_icon_state = "gun"
if(JOB_SQUAD_TEAM_LEADER) hud_icon_state = "tl"
if(JOB_SQUAD_LEADER) hud_icon_state = "leader_a"
if(squad.fireteam_leaders["SQ1"] == H || squad.fireteam_leaders["SQ2"] == H)
H.langchat_styles = "langchat_smaller_bolded"
else
H.langchat_styles = initial(H.langchat_styles)
H.langchat_color = H.assigned_squad.chat_color

if(!hud_icon_state) hud_icon_state = H.rank_fallback
if(hud_icon_state)
var/image/IMG = image('icons/mob/hud/marine_hud.dmi', H, "hudsquad")
if(squad_clr)
IMG.color = squad_clr
else
IMG.color = "#5A934A"
holder.overlays += IMG
holder.overlays += image('icons/mob/hud/marine_hud.dmi', H, "hudsquad_[hud_icon_state]")
if(H.assigned_squad && H.assigned_fireteam)
var/image/IMG2 = image('icons/mob/hud/marine_hud.dmi', H, "hudsquad_[H.assigned_fireteam]")
IMG2.color = squad_clr
holder.overlays += IMG2
if(H.assigned_squad.fireteam_leaders[H.assigned_fireteam] == H)
var/image/IMG3 = image('icons/mob/hud/marine_hud.dmi', H, "hudsquad_ftl")
IMG3.color = squad_clr
holder.overlays += IMG3

/datum/faction/upp/get_antag_guns_snowflake_equipment()
return list(
list("PRIMARY FIREARMS", 0, null, null, null),
Expand Down
4 changes: 4 additions & 0 deletions code/datums/map_config.dm
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@

var/nightmare_path

var/platoon
/// If truthy this is config for a round overriden map: search for override maps in data/, instead of using a path in maps/
var/override_map

Expand Down Expand Up @@ -360,6 +361,9 @@
if(json["nightmare_path"])
nightmare_path = json["nightmare_path"]

if(json["platoon"])
platoon = json["platoon"]

if(islist(json["environment_traits"]))
environment_traits = json["environment_traits"]
else if(!isnull(json["environment_traits"]))
Expand Down
11 changes: 9 additions & 2 deletions code/datums/paygrades/factions/upp/upp.dm
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
paygrade = "UE0"
name = "Conscript"
pay_multiplier = 0.05
prefix = "Cnscr."

/datum/paygrade/upp/ue1
paygrade = "UE1"
Expand All @@ -16,8 +17,8 @@

/datum/paygrade/upp/ue2
paygrade = "UE2"
name = "Private First Class"
prefix = "PFC."
name = "Efreitor"
prefix = "Efr."
pay_multiplier = 0.2

/datum/paygrade/upp/ue3
Expand All @@ -44,6 +45,12 @@
prefix = "MSzh."
pay_multiplier = 0.9

/datum/paygrade/upp/ue7
paygrade = "UE7"
name = "Starshina"
prefix = "Strsh."
pay_multiplier = 1 //here comes the moneyyy

//UPP Commandos
/datum/paygrade/upp/uc1
paygrade = "UC1"
Expand Down
Loading

0 comments on commit bab7c3e

Please sign in to comment.