diff --git a/code/__DEFINES/dcs/signals/atom/mob/signals_mob.dm b/code/__DEFINES/dcs/signals/atom/mob/signals_mob.dm
index 9eff6fa3ddc8..bab6064cfdbf 100644
--- a/code/__DEFINES/dcs/signals/atom/mob/signals_mob.dm
+++ b/code/__DEFINES/dcs/signals/atom/mob/signals_mob.dm
@@ -111,6 +111,12 @@
#define COMSIG_GHOST_MOVED "ghost_moved"
+/// When a mob is turned into a /mob/dead/observer at /mob/proc/ghostize()
+#define COMSIG_MOB_GHOSTIZE "mob_ghostize"
+
+/// When a mob gets a new mind via transfer at /datum/mind/proc/transfer_to()
+#define COMSIG_MOB_NEW_MIND "mob_new_mind"
+
#define COMSIG_MOB_MOUSEDOWN "mob_mousedown" //from /client/MouseDown(): (atom/object, turf/location, control, params)
#define COMSIG_MOB_MOUSEUP "mob_mouseup" //from /client/MouseUp(): (atom/object, turf/location, control, params)
#define COMSIG_MOB_MOUSEDRAG "mob_mousedrag" //from /client/MouseDrag(): (atom/src_object, atom/over_object, turf/src_location, turf/over_location, src_control, over_control, params)
diff --git a/code/__DEFINES/dcs/signals/signals_client.dm b/code/__DEFINES/dcs/signals/signals_client.dm
index 639721fae260..6733e0703514 100644
--- a/code/__DEFINES/dcs/signals/signals_client.dm
+++ b/code/__DEFINES/dcs/signals/signals_client.dm
@@ -21,3 +21,12 @@
/// Called after a client logs into a mob: (mob)
#define COMSIG_CLIENT_MOB_LOGIN "client_mob_changed"
+
+/// Called when something is added to a client's screen : /client/proc/add_to_screen(screen_add)
+#define COMSIG_CLIENT_SCREEN_ADD "client_screen_add"
+
+/// Called when something is removed from a client's screen : /client/proc/remove_from_screen(screen_remove)
+#define COMSIG_CLIENT_SCREEN_REMOVE "client_screen_remove"
+
+/// When a mind is transfered to another mob at /datum/mind/proc/transfer_to()
+#define COMSIG_CLIENT_MIND_TRANSFER "mind_transfer"
diff --git a/code/__DEFINES/job.dm b/code/__DEFINES/job.dm
index 9600adcd96da..52263a5e1367 100644
--- a/code/__DEFINES/job.dm
+++ b/code/__DEFINES/job.dm
@@ -260,7 +260,11 @@ var/global/list/job_command_roles = JOB_COMMAND_ROLES_LIST
#define JOB_UPP_SRLT_OFFICER "UPP Senior Leytenant"
#define JOB_UPP_KPT_OFFICER "UPP Kapitan"
#define JOB_UPP_MAY_OFFICER "UPP Mayjor"
+#define JOB_UPP_LTKOL_OFFICER "UPP Leytenant Kolonel"
#define JOB_UPP_KOL_OFFICER "UPP Kolonel"
+#define JOB_UPP_MAY_GENERAL "UPP Mayjor General"
+#define JOB_UPP_LT_GENERAL "UPP Leytenant General"
+#define JOB_UPP_GENERAL "UPP Army General"
#define JOB_UPP_COMBAT_SYNTH "UPP Combat Synthetic"
diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm
index 86390718b6ca..3b8ba26c07e9 100644
--- a/code/_onclick/click.dm
+++ b/code/_onclick/click.dm
@@ -357,7 +357,7 @@
/client/proc/create_clickcatcher()
if(!void)
void = new()
- screen += void
+ add_to_screen(void)
/client/proc/apply_clickcatcher()
create_clickcatcher()
diff --git a/code/_onclick/hud/alien.dm b/code/_onclick/hud/alien.dm
index a53e82730732..d1421cb7295d 100644
--- a/code/_onclick/hud/alien.dm
+++ b/code/_onclick/hud/alien.dm
@@ -64,10 +64,10 @@
var/mob/living/carbon/xenomorph/H = mymob
if(hud_version != HUD_STYLE_NOHUD)
if(H.r_hand)
- H.client.screen += H.r_hand
+ H.client.add_to_screen(H.r_hand)
H.r_hand.screen_loc = ui_alien_datum.hud_slot_offset(H.r_hand, ui_alien_datum.ui_rhand)
if(H.l_hand)
- H.client.screen += H.l_hand
+ H.client.add_to_screen(H.l_hand)
H.l_hand.screen_loc = ui_alien_datum.hud_slot_offset(H.l_hand, ui_alien_datum.ui_lhand)
else
if(H.r_hand)
diff --git a/code/_onclick/hud/fullscreen.dm b/code/_onclick/hud/fullscreen.dm
index fec62c35317f..0bd2206091ba 100644
--- a/code/_onclick/hud/fullscreen.dm
+++ b/code/_onclick/hud/fullscreen.dm
@@ -17,7 +17,7 @@
screen.severity = severity
if (client && screen.should_show_to(src))
screen.update_for_view(client.view)
- client.screen += screen
+ client.add_to_screen(screen)
return screen
@@ -33,12 +33,12 @@
addtimer(CALLBACK(src, PROC_REF(clear_fullscreen_after_animate), screen), animated, TIMER_CLIENT_TIME)
else
if(client)
- client.screen -= screen
+ client.remove_from_screen(screen)
qdel(screen)
/mob/proc/clear_fullscreen_after_animate(atom/movable/screen/fullscreen/screen)
if(client)
- client.screen -= screen
+ client.remove_from_screen(screen)
qdel(screen)
/mob/proc/clear_fullscreens()
@@ -48,7 +48,7 @@
/mob/proc/hide_fullscreens()
if(client)
for(var/category in fullscreens)
- client.screen -= fullscreens[category]
+ client.remove_from_screen(fullscreens[category])
/mob/proc/reload_fullscreens()
if(client)
@@ -57,9 +57,9 @@
screen = fullscreens[category]
if(screen.should_show_to(src))
screen.update_for_view(client.view)
- client.screen |= screen
+ client.add_to_screen(screen)
else
- client.screen -= screen
+ client.remove_from_screen(screen)
/atom/movable/screen/fullscreen
diff --git a/code/_onclick/hud/ghost.dm b/code/_onclick/hud/ghost.dm
index 8a3f7d9d6a31..a6754747a019 100644
--- a/code/_onclick/hud/ghost.dm
+++ b/code/_onclick/hud/ghost.dm
@@ -72,7 +72,7 @@
/datum/hud/ghost/show_hud(version = 0, mob/viewmob)
// don't show this HUD if observing; show the HUD of the observee
var/mob/dead/observer/O = mymob
- if (istype(O) && O.observetarget)
+ if (istype(O) && O.observe_target_mob)
plane_masters_update()
return FALSE
@@ -82,6 +82,6 @@
var/mob/screenmob = viewmob || mymob
if(!hud_shown)
- screenmob.client.screen -= static_inventory
+ screenmob.client.remove_from_screen(static_inventory)
else
- screenmob.client.screen += static_inventory
+ screenmob.client.add_to_screen(static_inventory)
diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm
index 392f3ae9a060..215e228fdd9d 100644
--- a/code/_onclick/hud/hud.dm
+++ b/code/_onclick/hud/hud.dm
@@ -189,43 +189,43 @@
if(HUD_STYLE_STANDARD) //Default HUD
hud_shown = 1 //Governs behavior of other procs
if(static_inventory.len)
- screenmob.client.screen += static_inventory
+ screenmob.client.add_to_screen(static_inventory)
if(toggleable_inventory.len && inventory_shown)
- screenmob.client.screen += toggleable_inventory
+ screenmob.client.add_to_screen(toggleable_inventory)
if(hotkeybuttons.len && !hotkey_ui_hidden)
- screenmob.client.screen += hotkeybuttons
+ screenmob.client.add_to_screen(hotkeybuttons)
if(infodisplay.len)
- screenmob.client.screen += infodisplay
+ screenmob.client.add_to_screen(infodisplay)
if(HUD_STYLE_REDUCED) //Reduced HUD
hud_shown = 0 //Governs behavior of other procs
if(static_inventory.len)
- screenmob.client.screen -= static_inventory
+ screenmob.client.remove_from_screen(static_inventory)
if(toggleable_inventory.len)
- screenmob.client.screen -= toggleable_inventory
+ screenmob.client.remove_from_screen(toggleable_inventory)
if(hotkeybuttons.len)
- screenmob.client.screen -= hotkeybuttons
+ screenmob.client.remove_from_screen(hotkeybuttons)
if(infodisplay.len)
- screenmob.client.screen += infodisplay
+ screenmob.client.add_to_screen(infodisplay)
//These ones are a part of 'static_inventory', 'toggleable_inventory' or 'hotkeybuttons' but we want them to stay
if(l_hand_hud_object)
- screenmob.client.screen += l_hand_hud_object //we want the hands to be visible
+ screenmob.client.add_to_screen(l_hand_hud_object) //we want the hands to be visible
if(r_hand_hud_object)
- screenmob.client.screen += r_hand_hud_object //we want the hands to be visible
+ screenmob.client.add_to_screen(r_hand_hud_object) //we want the hands to be visible
if(action_intent)
- screenmob.client.screen += action_intent //we want the intent switcher visible
+ screenmob.client.add_to_screen(action_intent) //we want the intent switcher visible
if(HUD_STYLE_NOHUD) //No HUD
hud_shown = 0 //Governs behavior of other procs
if(static_inventory.len)
- screenmob.client.screen -= static_inventory
+ screenmob.client.remove_from_screen(static_inventory)
if(toggleable_inventory.len)
- screenmob.client.screen -= toggleable_inventory
+ screenmob.client.remove_from_screen(toggleable_inventory)
if(hotkeybuttons.len)
- screenmob.client.screen -= hotkeybuttons
+ screenmob.client.remove_from_screen(hotkeybuttons)
if(infodisplay.len)
- screenmob.client.screen -= infodisplay
+ screenmob.client.remove_from_screen(infodisplay)
hud_version = display_hud_version
persistent_inventory_update(screenmob)
@@ -247,7 +247,7 @@
for(var/thing in plane_masters)
var/atom/movable/screen/plane_master/PM = plane_masters[thing]
PM.backdrop(mymob)
- mymob.client.screen += PM
+ mymob.client.add_to_screen(PM)
/datum/hud/human/show_hud(version = 0, mob/viewmob)
. = ..()
@@ -412,7 +412,7 @@
if(!hud_shown)
for(var/category in alerts)
var/atom/movable/screen/alert/alert = alerts[category]
- screenmob.client.screen -= alert
+ screenmob.client.remove_from_screen(alert)
return TRUE
var/c = 0
for(var/category in alerts)
@@ -432,8 +432,18 @@
else
. = ""
alert.screen_loc = .
- screenmob.client.screen |= alert
+ screenmob.client.add_to_screen(alert)
if(!viewmob)
for(var/obs in mymob.observers)
reorganize_alerts(obs)
return TRUE
+
+/// Wrapper for adding anything to a client's screen
+/client/proc/add_to_screen(screen_add)
+ screen += screen_add
+ SEND_SIGNAL(src, COMSIG_CLIENT_SCREEN_ADD, screen_add)
+
+/// Wrapper for removing anything from a client's screen
+/client/proc/remove_from_screen(screen_remove)
+ screen -= screen_remove
+ SEND_SIGNAL(src, COMSIG_CLIENT_SCREEN_REMOVE, screen_remove)
diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm
index 6cf43dc343b7..d514bdedfcdf 100644
--- a/code/_onclick/hud/human.dm
+++ b/code/_onclick/hud/human.dm
@@ -105,10 +105,10 @@
set desc = "This disables or enables the user interface buttons which can be used with hotkeys."
if(hud_used.hotkey_ui_hidden)
- client.screen += hud_used.hotkeybuttons
+ client.add_to_screen(hud_used.hotkeybuttons)
hud_used.hotkey_ui_hidden = 0
else
- client.screen -= hud_used.hotkeybuttons
+ client.remove_from_screen(hud_used.hotkeybuttons)
hud_used.hotkey_ui_hidden = TRUE
/datum/hud/human/hidden_inventory_update(mob/viewer)
@@ -120,53 +120,57 @@
inventory_shown = FALSE
return //species without inv slots don't show items.
- if(screenmob.hud_used.inventory_shown && screenmob.hud_used.hud_shown)
+ if(H.hud_used.inventory_shown && H.hud_used.hud_shown)
if(H.shoes)
H.shoes.screen_loc = ui_datum.ui_shoes
- screenmob.client.screen += H.shoes
+ screenmob.client.add_to_screen(H.shoes)
if(H.gloves)
H.gloves.screen_loc = ui_datum.ui_gloves
- screenmob.client.screen += H.gloves
+ screenmob.client.add_to_screen(H.gloves)
if(H.wear_l_ear)
H.wear_l_ear.screen_loc = ui_datum.ui_wear_l_ear
- screenmob.client.screen += H.wear_l_ear
+ screenmob.client.add_to_screen(H.wear_l_ear)
if(H.wear_r_ear)
H.wear_r_ear.screen_loc = ui_datum.ui_wear_r_ear
- screenmob.client.screen += H.wear_r_ear
+ screenmob.client.add_to_screen(H.wear_r_ear)
if(H.glasses)
H.glasses.screen_loc = ui_datum.ui_glasses
- screenmob.client.screen += H.glasses
+ screenmob.client.add_to_screen(H.glasses)
if(H.w_uniform)
H.w_uniform.screen_loc = ui_datum.ui_iclothing
- screenmob.client.screen += H.w_uniform
+ screenmob.client.add_to_screen(H.w_uniform)
if(H.wear_suit)
H.wear_suit.screen_loc = ui_datum.ui_oclothing
- screenmob.client.screen += H.wear_suit
+ screenmob.client.add_to_screen(H.wear_suit)
if(H.wear_mask)
H.wear_mask.screen_loc = ui_datum.ui_mask
- screenmob.client.screen += H.wear_mask
+ screenmob.client.add_to_screen(H.wear_mask)
if(H.head)
H.head.screen_loc = ui_datum.ui_head
- screenmob.client.screen += H.head
+ screenmob.client.add_to_screen(H.head)
else
if(H.shoes)
- screenmob.client.screen -= H.shoes
+ screenmob.client.remove_from_screen(H.shoes)
if(H.gloves)
- screenmob.client.screen -= H.gloves
+ screenmob.client.remove_from_screen(H.gloves)
if(H.wear_r_ear)
- screenmob.client.screen -= H.wear_r_ear
+ screenmob.client.remove_from_screen(H.wear_r_ear)
if(H.wear_l_ear)
- screenmob.client.screen -= H.wear_l_ear
+ screenmob.client.remove_from_screen(H.wear_l_ear)
if(H.glasses)
- screenmob.client.screen -= H.glasses
+ screenmob.client.remove_from_screen(H.glasses)
if(H.w_uniform)
- screenmob.client.screen -= H.w_uniform
+ screenmob.client.remove_from_screen(H.w_uniform)
if(H.wear_suit)
- screenmob.client.screen -= H.wear_suit
+ screenmob.client.remove_from_screen(H.wear_suit)
if(H.wear_mask)
- screenmob.client.screen -= H.wear_mask
+ screenmob.client.remove_from_screen(H.wear_mask)
if(H.head)
- screenmob.client.screen -= H.head
+ screenmob.client.remove_from_screen(H.head)
+
+ if(screenmob == mymob)
+ for(var/M in mymob.observers)
+ hidden_inventory_update(M)
/datum/hud/human/persistent_inventory_update(mob/viewer)
if(!mymob)
@@ -177,53 +181,57 @@
var/mob/living/carbon/human/H = mymob
var/mob/screenmob = viewer || H
- if(screenmob.hud_used)
- if(screenmob.hud_used.hud_shown)
+ if(H.hud_used)
+ if(H.hud_used.hud_shown)
if(H.s_store)
H.s_store.screen_loc = ui_datum.hud_slot_offset(H.s_store, ui_datum.ui_sstore1)
- screenmob.client.screen += H.s_store
+ screenmob.client.add_to_screen(H.s_store)
if(H.wear_id)
H.wear_id.screen_loc = ui_datum.hud_slot_offset(H.wear_id, ui_datum.ui_id)
- screenmob.client.screen += H.wear_id
+ screenmob.client.add_to_screen(H.wear_id)
if(H.belt)
H.belt.screen_loc = ui_datum.hud_slot_offset(H.belt, ui_datum.ui_belt)
- screenmob.client.screen += H.belt
+ screenmob.client.add_to_screen(H.belt)
if(H.back)
H.back.screen_loc = ui_datum.hud_slot_offset(H.back, ui_datum.ui_back)
- screenmob.client.screen += H.back
+ screenmob.client.add_to_screen(H.back)
if(H.l_store)
H.l_store.screen_loc = ui_datum.hud_slot_offset(H.l_store, ui_datum.ui_storage1)
- screenmob.client.screen += H.l_store
+ screenmob.client.add_to_screen(H.l_store)
if(H.r_store)
H.r_store.screen_loc = ui_datum.hud_slot_offset(H.r_store, ui_datum.ui_storage2)
- screenmob.client.screen += H.r_store
+ screenmob.client.add_to_screen(H.r_store)
else
if(H.s_store)
- screenmob.client.screen -= H.s_store
+ screenmob.client.remove_from_screen(H.s_store)
if(H.wear_id)
- screenmob.client.screen -= H.wear_id
+ screenmob.client.remove_from_screen(H.wear_id)
if(H.belt)
- screenmob.client.screen -= H.belt
+ screenmob.client.remove_from_screen(H.belt)
if(H.back)
- screenmob.client.screen -= H.back
+ screenmob.client.remove_from_screen(H.back)
if(H.l_store)
- screenmob.client.screen -= H.l_store
+ screenmob.client.remove_from_screen(H.l_store)
if(H.r_store)
- screenmob.client.screen -= H.r_store
+ screenmob.client.remove_from_screen(H.r_store)
if(hud_version != HUD_STYLE_NOHUD)
if(H.r_hand)
H.r_hand.screen_loc = ui_datum.hud_slot_offset(H.r_hand, ui_datum.ui_rhand)
- H.client.screen += H.r_hand
+ screenmob.client.add_to_screen(H.r_hand)
if(H.l_hand)
H.l_hand.screen_loc = ui_datum.hud_slot_offset(H.l_hand, ui_datum.ui_lhand)
- H.client.screen += H.l_hand
+ screenmob.client.add_to_screen(H.l_hand)
else
if(H.r_hand)
H.r_hand.screen_loc = null
if(H.l_hand)
H.l_hand.screen_loc = null
+ if(screenmob == mymob)
+ for(var/M in mymob.observers)
+ persistent_inventory_update(M)
+
/datum/hud/human/proc/draw_inventory_slots(gear, datum/custom_hud/ui_datum, ui_alpha, ui_color)
for(var/gear_slot in gear)
var/atom/movable/screen/inventory/inv_box = new /atom/movable/screen/inventory()
diff --git a/code/_onclick/hud/map_popups.dm b/code/_onclick/hud/map_popups.dm
index b5ee41e6d54c..aed6b46a7905 100644
--- a/code/_onclick/hud/map_popups.dm
+++ b/code/_onclick/hud/map_popups.dm
@@ -108,7 +108,7 @@
if(!screen_map.Find(screen_obj))
screen_map += screen_obj
if(!screen.Find(screen_obj))
- screen += screen_obj
+ add_to_screen(screen_obj)
/**
* Clears the map of registered screen objects.
diff --git a/code/_onclick/hud/rendering/render_plate.dm b/code/_onclick/hud/rendering/render_plate.dm
index a64284ca13a9..18236c6ee759 100644
--- a/code/_onclick/hud/rendering/render_plate.dm
+++ b/code/_onclick/hud/rendering/render_plate.dm
@@ -74,6 +74,6 @@
relay.blend_mode = blend_mode
relay.mouse_opacity = mouse_opacity
relay.name = render_target
- mymob.client.screen += relay
+ mymob.client.add_to_screen(relay)
if(blend_mode != BLEND_MULTIPLY)
blend_mode = BLEND_DEFAULT
diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm
index 565a23d1bbeb..af961f82bab2 100644
--- a/code/_onclick/hud/robot.dm
+++ b/code/_onclick/hud/robot.dm
@@ -134,13 +134,13 @@
if(hud_shown)
if(R.module_state_1)
R.module_state_1.screen_loc = ui_robot_datum.ui_inv1
- R.client.screen += R.module_state_1
+ R.client.add_to_screen(R.module_state_1)
if(R.module_state_2)
R.module_state_2.screen_loc = ui_robot_datum.ui_inv2
- R.client.screen += R.module_state_2
+ R.client.add_to_screen(R.module_state_2)
if(R.module_state_3)
R.module_state_3.screen_loc = ui_robot_datum.ui_inv3
- R.client.screen += R.module_state_3
+ R.client.add_to_screen(R.module_state_3)
else
if(R.module_state_1)
R.module_state_1.screen_loc = null
diff --git a/code/_onclick/hud/screen_object_holder.dm b/code/_onclick/hud/screen_object_holder.dm
index ba6a9b961721..91b4e593c7d6 100644
--- a/code/_onclick/hud/screen_object_holder.dm
+++ b/code/_onclick/hud/screen_object_holder.dm
@@ -24,14 +24,14 @@
ASSERT(istype(screen_object))
screen_objects += screen_object
- client?.screen += screen_object
+ client?.add_to_screen(screen_object)
/// Gives the screen object to the client, but does not qdel it when it's cleared
/datum/screen_object_holder/proc/give_protected_screen_object(atom/screen_object)
ASSERT(istype(screen_object))
protected_screen_objects += screen_object
- client?.screen += screen_object
+ client?.add_to_screen(screen_object)
/datum/screen_object_holder/proc/remove_screen_object(atom/screen_object)
ASSERT(istype(screen_object))
@@ -39,11 +39,11 @@
screen_objects -= screen_object
protected_screen_objects -= screen_object
- client?.screen -= screen_object
+ client?.remove_from_screen(screen_object)
/datum/screen_object_holder/proc/clear()
- client?.screen -= screen_objects
- client?.screen -= protected_screen_objects
+ client?.remove_from_screen(screen_objects)
+ client?.remove_from_screen(protected_screen_objects)
QDEL_LIST(screen_objects)
protected_screen_objects.Cut()
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index 685fc3d5498b..35b6073ee41b 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -37,6 +37,8 @@
/atom/movable/screen/close/clicked(mob/user)
+ if(isobserver(user))
+ return TRUE
if(master)
if(isstorage(master))
var/obj/item/storage/master_storage = master
@@ -612,10 +614,10 @@
if(user && user.hud_used)
if(user.hud_used.inventory_shown)
user.hud_used.inventory_shown = 0
- user.client.screen -= user.hud_used.toggleable_inventory
+ user.client.remove_from_screen(user.hud_used.toggleable_inventory)
else
user.hud_used.inventory_shown = 1
- user.client.screen += user.hud_used.toggleable_inventory
+ user.client.add_to_screen(user.hud_used.toggleable_inventory)
user.hud_used.hidden_inventory_update()
return 1
diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm
index b67953b1edbe..f87778355755 100644
--- a/code/_onclick/observer.dm
+++ b/code/_onclick/observer.dm
@@ -31,7 +31,7 @@
var/mob/living/carbon/xenomorph/xeno = target
if(xeno.stat == DEAD || is_admin_level(xeno.z) || xeno.aghosted)
to_chat(src, SPAN_WARNING("You cannot join as [xeno]."))
- ManualFollow(xeno)
+ do_observe(xeno)
return FALSE
if(!SSticker.mode.xeno_bypass_timer)
@@ -41,7 +41,7 @@
to_wait = XENO_LEAVE_TIMER_LARVA - xeno.away_timer
if(to_wait > 60 SECONDS) // don't spam for clearly non-AFK xenos
to_chat(src, SPAN_WARNING("That player hasn't been away long enough. Please wait [to_wait] second\s longer."))
- ManualFollow(target)
+ do_observe(target)
return FALSE
var/deathtime = world.time - timeofdeath
@@ -50,14 +50,14 @@
message = SPAN_WARNING("[message]")
to_chat(src, message)
to_chat(src, SPAN_WARNING("You must wait atleast 2.5 minutes before rejoining the game!"))
- ManualFollow(target)
+ do_observe(target)
return FALSE
if(xeno.hive)
for(var/mob_name in xeno.hive.banished_ckeys)
if(xeno.hive.banished_ckeys[mob_name] == ckey)
to_chat(src, SPAN_WARNING("You are banished from the [xeno.hive], you may not rejoin unless the Queen re-admits you or dies."))
- ManualFollow(target)
+ do_observe(target)
return FALSE
if(alert(src, "Are you sure you want to transfer yourself into [xeno]?", "Confirm Transfer", "Yes", "No") != "Yes")
@@ -67,7 +67,7 @@
return FALSE
SSticker.mode.transfer_xeno(src, xeno)
return TRUE
- ManualFollow(target)
+ do_observe(target)
return TRUE
if(!istype(target, /atom/movable/screen))
diff --git a/code/controllers/subsystem/minimap.dm b/code/controllers/subsystem/minimap.dm
index b154c7673855..6f5b9303a91f 100644
--- a/code/controllers/subsystem/minimap.dm
+++ b/code/controllers/subsystem/minimap.dm
@@ -390,9 +390,9 @@ SUBSYSTEM_DEF(minimaps)
if(!map)
return
if(minimap_displayed)
- owner.client.screen -= map
+ owner.client.remove_from_screen(map)
else
- owner.client.screen += map
+ owner.client.add_to_screen(map)
minimap_displayed = !minimap_displayed
/datum/action/minimap/give_to(mob/target)
@@ -415,7 +415,7 @@ SUBSYSTEM_DEF(minimaps)
/datum/action/minimap/remove_from(mob/target)
. = ..()
if(minimap_displayed)
- owner?.client?.screen -= map
+ owner?.client?.remove_from_screen(map)
minimap_displayed = FALSE
/**
@@ -424,7 +424,7 @@ SUBSYSTEM_DEF(minimaps)
/datum/action/minimap/proc/on_owner_z_change(atom/movable/source, oldz, newz)
SIGNAL_HANDLER
if(minimap_displayed)
- owner.client.screen -= map
+ owner.client.remove_from_screen(map)
minimap_displayed = FALSE
map = null
if(!SSminimaps.minimaps_by_z["[newz]"] || !SSminimaps.minimaps_by_z["[newz]"].hud_image)
diff --git a/code/datums/action.dm b/code/datums/action.dm
index 8dcf2963590d..47b302e09aac 100644
--- a/code/datums/action.dm
+++ b/code/datums/action.dm
@@ -103,7 +103,7 @@
/mob/proc/handle_add_action(datum/action/action)
LAZYADD(actions, action)
if(client)
- client.screen += action.button
+ client.add_to_screen(action.button)
update_action_buttons()
/proc/remove_action(mob/L, action_path)
@@ -122,7 +122,7 @@
/mob/proc/handle_remove_action(datum/action/action)
actions?.Remove(action)
if(client)
- client.screen -= action.button
+ client.remove_from_screen(action.button)
update_action_buttons()
/mob/living/carbon/human/handle_remove_action(datum/action/action)
@@ -219,12 +219,12 @@
for(var/datum/action/A in actions)
A.button.screen_loc = null
if(reload_screen)
- client.screen += A.button
+ client.add_to_screen(A.button)
else
for(var/datum/action/A in actions)
var/atom/movable/screen/action_button/B = A.button
if(reload_screen)
- client.screen += B
+ client.add_to_screen(B)
if(A.hidden)
B.screen_loc = null
continue
@@ -234,11 +234,11 @@
if(!button_number)
hud_used.hide_actions_toggle.screen_loc = null
if(reload_screen)
- client.screen += hud_used.hide_actions_toggle
+ client.add_to_screen(hud_used.hide_actions_toggle)
return
hud_used.hide_actions_toggle.screen_loc = hud_used.hide_actions_toggle.get_button_screen_loc(button_number+1)
if(reload_screen)
- client.screen += hud_used.hide_actions_toggle
+ client.add_to_screen(hud_used.hide_actions_toggle)
diff --git a/code/datums/factions/upp.dm b/code/datums/factions/upp.dm
index 9f28e5967831..5a790c89be67 100644
--- a/code/datums/factions/upp.dm
+++ b/code/datums/factions/upp.dm
@@ -25,10 +25,20 @@
hud_icon_state = "lt"
if(JOB_UPP_SRLT_OFFICER)
hud_icon_state = "slt"
+ if(JOB_UPP_KPT_OFFICER)
+ hud_icon_state = "xo"
if(JOB_UPP_MAY_OFFICER)
- hud_icon_state = "may"
+ hud_icon_state = "co"
+ if(JOB_UPP_LTKOL_OFFICER)
+ hud_icon_state = "co"
if(JOB_UPP_KOL_OFFICER)
- hud_icon_state = "kol"
+ hud_icon_state = "co"
+ if(JOB_UPP_MAY_GENERAL)
+ hud_icon_state = "co"
+ if(JOB_UPP_LT_GENERAL)
+ hud_icon_state = "co"
+ if(JOB_UPP_GENERAL)
+ hud_icon_state = "co"
if(JOB_UPP_COMBAT_SYNTH)
hud_icon_state = "synth"
if(JOB_UPP_COMMANDO)
diff --git a/code/datums/keybinding/mob.dm b/code/datums/keybinding/mob.dm
index ee0ec30dcae7..b7b83249b335 100644
--- a/code/datums/keybinding/mob.dm
+++ b/code/datums/keybinding/mob.dm
@@ -2,6 +2,16 @@
category = CATEGORY_HUMAN
weight = WEIGHT_MOB
+/datum/keybinding/mob/down(client/user)
+ . = ..()
+ if(isobserver(user.mob))
+ return TRUE
+
+/datum/keybinding/mob/up(client/user)
+ . = ..()
+ if(isobserver(user.mob))
+ return TRUE
+
/datum/keybinding/mob/stop_pulling
hotkey_keys = list("H", "Delete")
classic_keys = list("Delete")
@@ -85,7 +95,7 @@
. = ..()
if(.)
return
- user.mob.a_select_zone("head")
+ user.mob.a_select_zone("head", user)
return TRUE
/datum/keybinding/mob/target_r_arm
@@ -100,7 +110,7 @@
. = ..()
if(.)
return
- user.mob.a_select_zone("rarm")
+ user.mob.a_select_zone("rarm", user)
return TRUE
/datum/keybinding/mob/target_body_chest
@@ -115,7 +125,7 @@
. = ..()
if(.)
return
- user.mob.a_select_zone("chest")
+ user.mob.a_select_zone("chest", user)
return TRUE
/datum/keybinding/mob/target_left_arm
@@ -130,7 +140,7 @@
. = ..()
if(.)
return
- user.mob.a_select_zone("larm")
+ user.mob.a_select_zone("larm", user)
return TRUE
/datum/keybinding/mob/target_right_leg
@@ -145,7 +155,7 @@
. = ..()
if(.)
return
- user.mob.a_select_zone("rleg")
+ user.mob.a_select_zone("rleg", user)
return TRUE
/datum/keybinding/mob/target_body_groin
@@ -160,7 +170,7 @@
. = ..()
if(.)
return
- user.mob.a_select_zone("groin")
+ user.mob.a_select_zone("groin", user)
return TRUE
/datum/keybinding/mob/target_left_leg
@@ -175,7 +185,7 @@
. = ..()
if(.)
return
- user.mob.a_select_zone("lleg")
+ user.mob.a_select_zone("lleg", user)
return TRUE
/datum/keybinding/mob/target_next
@@ -190,7 +200,7 @@
. = ..()
if(.)
return
- user.mob.a_select_zone("next")
+ user.mob.a_select_zone("next", user)
return TRUE
/datum/keybinding/mob/target_prev
@@ -205,7 +215,7 @@
. = ..()
if(.)
return
- user.mob.a_select_zone("prev")
+ user.mob.a_select_zone("prev", user)
return TRUE
/datum/keybinding/mob/prevent_movement
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 90df42f7d12a..2e56b963e88f 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -39,6 +39,8 @@
msg_admin_niche("[key]/[ckey] has tried to transfer to deleted [new_character].")
return
+ SEND_SIGNAL(current.client, COMSIG_CLIENT_MIND_TRANSFER, new_character)
+
if(current)
current.mind = null //remove ourself from our old body's mind variable
nanomanager.user_transferred(current, new_character) // transfer active NanoUI instances to new user
@@ -71,6 +73,8 @@
continue
player_entity = setup_player_entity(ckey)
+ SEND_SIGNAL(new_character, COMSIG_MOB_NEW_MIND, current.client)
+
new_character.refresh_huds(current) //inherit the HUDs from the old body
new_character.aghosted = FALSE //reset aghost and away timer
new_character.away_timer = 0
diff --git a/code/datums/paygrades/factions/upp/upp.dm b/code/datums/paygrades/factions/upp/upp.dm
index 7cb0c201aefb..a1363383ad55 100644
--- a/code/datums/paygrades/factions/upp/upp.dm
+++ b/code/datums/paygrades/factions/upp/upp.dm
@@ -18,16 +18,11 @@
paygrade = "UE2"
name = "Private First Class"
prefix = "PFC."
+ pay_multiplier = 0.2
-/datum/paygrade/upp/ue3m
- paygrade = "UE3M"
- name = "Korporal Medic"
- prefix = "Kpl."
- pay_multiplier = 0.3
-
-/datum/paygrade/upp/ue3s
- paygrade = "UE3S"
- name = "Korporal Sapper"
+/datum/paygrade/upp/ue3
+ paygrade = "UE3"
+ name = "Korporal"
prefix = "Kpl."
pay_multiplier = 0.3
@@ -75,56 +70,50 @@
prefix = "Lt."
pay_multiplier = 1.25
-/datum/paygrade/upp/uo1m
- paygrade = "UO1M"
- name = "Leytenant Medic"
- prefix = "Lt. Med."
- pay_multiplier = 1.25
-
-/datum/paygrade/upp/uo1e
- paygrade = "UO1E"
+/datum/paygrade/upp/uo2
+ paygrade = "UO2"
name = "Senior Leytenant"
prefix = "Sr. LT."
pay_multiplier = 1.5
-
-/datum/paygrade/upp/uo2
- paygrade = "UO2"
+/datum/paygrade/upp/uo3
+ paygrade = "UO3"
name = "Kapitan"
prefix = "Kpt."
pay_multiplier = 2
-/datum/paygrade/upp/uo3
- paygrade = "UO3"
+/datum/paygrade/upp/uo4
+ paygrade = "UO4"
name = "Mayjor."
prefix = "May."
pay_multiplier = 2.5
-/datum/paygrade/upp/uo4
- paygrade = "UO4"
+/datum/paygrade/upp/uo5
+ paygrade = "UO5"
name = "Leytenant Kolonel"
+ prefix = "Lt. Kol."
pay_multiplier = 3
-/datum/paygrade/upp/uo5
- paygrade = "UO5"
+/datum/paygrade/upp/uo6
+ paygrade = "UO6"
name = "Kolonel"
prefix = "Kol."
pay_multiplier = 4
-/datum/paygrade/upp/uo6
- paygrade = "UO6"
+/datum/paygrade/upp/uo7
+ paygrade = "UO7"
name = "Mayjor General"
- prefix = "MayGen."
+ prefix = "May. Gen."
pay_multiplier = 5
-/datum/paygrade/upp/uo7
- paygrade = "UO7"
+/datum/paygrade/upp/uo8
+ paygrade = "UO8"
name = "Leytenant General"
- prefix = "LtGen."
+ prefix = "Lt. Gen."
pay_multiplier = 6
-/datum/paygrade/upp/uo8
- paygrade = "UO8"
+/datum/paygrade/upp/uo9
+ paygrade = "UO9"
name = "Army General"
- prefix = "ArmGen."
+ prefix = "Gen."
pay_multiplier = 7
diff --git a/code/datums/skills.dm b/code/datums/skills.dm
index 585fdc699cda..9178e6f7a1b1 100644
--- a/code/datums/skills.dm
+++ b/code/datums/skills.dm
@@ -1314,6 +1314,23 @@ UNITED PROGRESSIVE PEOPLES
SKILL_JTAC = SKILL_JTAC_EXPERT,
)
+/datum/skills/upp/kapitan
+ name = "UPP Kapitan"
+ skills = list(
+ SKILL_CQC = SKILL_CQC_SKILLED,
+ SKILL_POLICE = SKILL_POLICE_SKILLED,
+ SKILL_FIREMAN = SKILL_FIREMAN_EXPERT,
+ SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
+ SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
+ SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
+ SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
+ SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
+ SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
+ SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
+ SKILL_JTAC = SKILL_JTAC_EXPERT,
+ )
+
/datum/skills/upp/commander
name = "UPP Command Officer"
skills = list(
diff --git a/code/datums/supply_packs/clothing.dm b/code/datums/supply_packs/clothing.dm
index 1c7241bb253b..4f0d414a2655 100644
--- a/code/datums/supply_packs/clothing.dm
+++ b/code/datums/supply_packs/clothing.dm
@@ -113,7 +113,7 @@
/obj/item/clothing/under/rank/qm_suit,
/obj/item/clothing/under/marine/officer/bridge,
/obj/item/clothing/under/marine/officer/bridge,
- /obj/item/clothing/under/marine/officer/exec,
+ /obj/item/clothing/under/marine/dress,
/obj/item/clothing/under/marine/officer/ce,
)
name = "officer outfit crate"
diff --git a/code/game/gamemodes/cm_self_destruct.dm b/code/game/gamemodes/cm_self_destruct.dm
index d2f9c4eac784..b86de24eed74 100644
--- a/code/game/gamemodes/cm_self_destruct.dm
+++ b/code/game/gamemodes/cm_self_destruct.dm
@@ -278,7 +278,7 @@ var/global/datum/authority/branch/evacuation/EvacuationAuthority //This is initi
if(play_anim)
for(var/mob/current_mob as anything in alive_mobs + dead_mobs)
if(current_mob && current_mob.loc && current_mob.client)
- current_mob.client.screen |= C //They may have disconnected in the mean time.
+ current_mob.client.add_to_screen(C) //They may have disconnected in the mean time.
sleep(15) //Extra 1.5 seconds to look at the ship.
flick(override ? "intro_override" : "intro_nuke", C)
@@ -292,7 +292,7 @@ var/global/datum/authority/branch/evacuation/EvacuationAuthority //This is initi
current_mob.death(create_cause_data("nuclear explosion"))
else
if(play_anim)
- current_mob.client.screen -= C //those who managed to escape the z level at last second shouldn't have their view obstructed.
+ current_mob.client.remove_from_screen(C) //those who managed to escape the z level at last second shouldn't have their view obstructed.
if(play_anim)
flick(ship_status ? "ship_spared" : "ship_destroyed", C)
C.icon_state = ship_status ? "summary_spared" : "summary_destroyed"
diff --git a/code/game/machinery/vending/vendor_types/crew/senior_officers.dm b/code/game/machinery/vending/vendor_types/crew/senior_officers.dm
index 3220c32cf5bf..88a3647777d4 100644
--- a/code/game/machinery/vending/vendor_types/crew/senior_officers.dm
+++ b/code/game/machinery/vending/vendor_types/crew/senior_officers.dm
@@ -173,9 +173,12 @@ GLOBAL_LIST_INIT(cm_vending_clothing_req_officer, list(
list("Quartermaster Uniform", 0, /obj/item/clothing/under/rank/qm_suit, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
list("Headset", 0, /obj/item/device/radio/headset/almayer/qm, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("Satchel", 0, /obj/item/storage/backpack/marine/satchel/tech, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY),
- list("Req Cap", 0, /obj/item/clothing/head/cmcap/req, MARINE_CAN_BUY_MASK, VENDOR_ITEM_MANDATORY),
list("Quartermaster Jacket", 0, /obj/item/clothing/suit/storage/RO, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
+ list("Headgear (CHOOSE 1)", 0, null, null, null),
+ list("Quartermaster Cap", 0, /obj/item/clothing/head/cmcap/req/ro, MARINE_CAN_BUY_MASK, VENDOR_ITEM_RECOMMENDED),
+ list("Requisitions Cap", 0, /obj/item/clothing/head/cmcap/req, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
+
list("PERSONAL SIDEARM (CHOOSE 1)", 0, null, null, null),
list("M4A3 Service Pistol", 0, /obj/item/storage/belt/gun/m4a3/full, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
list("Mod 88 Pistol", 0, /obj/item/storage/belt/gun/m4a3/mod88, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
@@ -268,10 +271,14 @@ GLOBAL_LIST_INIT(cm_vending_clothing_cmo, list(
GLOBAL_LIST_INIT(cm_vending_clothing_xo, list(
list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
- list("Service Uniform", 0, /obj/item/clothing/under/marine/officer/bridge, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
list("Headset", 0, /obj/item/device/radio/headset/almayer/mcom/cdrcom, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("Satchel", 0, /obj/item/storage/backpack/satchel, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY),
+ list("UNIFORM (CHOOSE ONE)", 0, null, null, null),
+ list("Service Uniform", 0, /obj/item/clothing/under/marine/officer/bridge, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_RECOMMENDED),
+ list("Operations Uniform", 0, /obj/item/clothing/under/marine/officer/boiler, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_RECOMMENDED),
+ list("Formal Uniform", 0, /obj/effect/essentials_set/xoformal, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_RECOMMENDED),
+
list("PERSONAL WEAPON (CHOOSE 1)", 0, null, null, null),
list("VP78 Pistol", 0, /obj/item/storage/belt/gun/m4a3/vp78, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
list("M4A3 Service Pistol", 0, /obj/item/storage/belt/gun/m4a3/commander, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_REGULAR),
@@ -316,9 +323,9 @@ GLOBAL_LIST_INIT(cm_vending_clothing_xo, list(
list("HATS (CHOOSE 1)", 0, null, null, null),
list("Officer Beret", 0, /obj/item/clothing/head/beret/marine/chiefofficer, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
- list("Peaked cap", 0, /obj/item/clothing/head/marine/peaked, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
+ list("Service Peaked Cap", 0, /obj/item/clothing/head/marine/peaked/service, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
list("Patrol Cap", 0, /obj/item/clothing/head/cmcap, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
- list("Officer Cap", 0, /obj/item/clothing/head/cmcap/ro, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
+ list("Officer Cap", 0, /obj/item/clothing/head/cmcap/bridge, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
))
@@ -364,3 +371,10 @@ GLOBAL_LIST_INIT(cm_vending_clothing_auxiliary_officer, list(
/obj/item/storage/belt/security/MP/full,
/obj/item/clothing/head/helmet/marine/MP/WO,
)
+
+/obj/effect/essentials_set/xoformal
+ spawned_gear_list = list(
+ /obj/item/clothing/suit/storage/jacket/marine/dress,
+ /obj/item/clothing/head/marine/peaked,
+ /obj/item/clothing/under/marine/dress,
+ )
diff --git a/code/game/machinery/vending/vendor_types/crew/staff_officer.dm b/code/game/machinery/vending/vendor_types/crew/staff_officer.dm
index 7804cdfcebb4..85a8a58d162e 100644
--- a/code/game/machinery/vending/vendor_types/crew/staff_officer.dm
+++ b/code/game/machinery/vending/vendor_types/crew/staff_officer.dm
@@ -11,12 +11,16 @@
GLOBAL_LIST_INIT(cm_vending_clothing_staff_officer, list(
list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
- list("Uniform", 0, /obj/item/clothing/under/marine/officer/bridge, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
list("Boots", 0, /obj/item/clothing/shoes/marine/knife, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
list("Headset", 0, /obj/item/device/radio/headset/almayer/mcom, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("Helmet", 0, /obj/item/clothing/head/helmet/marine/MP/SO, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_MANDATORY),
list("MRE", 0, /obj/item/storage/box/MRE, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
+
+ list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
+ list("Service Uniform", 0, /obj/item/clothing/under/marine/officer/bridge, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR),
+ list("Operations Uniform", 0, /obj/item/clothing/under/marine/officer/boiler, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_RECOMMENDED),
+
list("JACKET (CHOOSE 1)", 0, null, null, null),
list("Service Jacket", 0, /obj/item/clothing/suit/storage/jacket/marine/service, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_RECOMMENDED),
@@ -24,6 +28,8 @@ GLOBAL_LIST_INIT(cm_vending_clothing_staff_officer, list(
list("Beret, Green", 0, /obj/item/clothing/head/beret/cm, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED),
list("Beret, Tan", 0, /obj/item/clothing/head/beret/cm/tan, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED),
list("Patrol Cap", 0, /obj/item/clothing/head/cmcap, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED),
+ list("Officer Cap", 0, /obj/item/clothing/head/cmcap/bridge, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED),
+ list("Service Peaked Cap", 0, /obj/item/clothing/head/marine/peaked/service, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED),
list("PERSONAL SIDEARM (CHOOSE 1)", 0, null, null, null),
diff --git a/code/game/machinery/vending/vendor_types/crew/synthetic.dm b/code/game/machinery/vending/vendor_types/crew/synthetic.dm
index da52981fe08a..6c32315d427a 100644
--- a/code/game/machinery/vending/vendor_types/crew/synthetic.dm
+++ b/code/game/machinery/vending/vendor_types/crew/synthetic.dm
@@ -228,8 +228,9 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth_snowflake, list(
list("Ushanka", 12, /obj/item/clothing/head/ushanka, null, VENDOR_ITEM_REGULAR),
list("Cap", 12, /obj/item/clothing/head/cmcap, null, VENDOR_ITEM_REGULAR),
list("MP Cap", 12, /obj/item/clothing/head/beret/marine/mp/mpcap, null, VENDOR_ITEM_REGULAR),
- list("RO Cap", 12, /obj/item/clothing/head/cmcap/req, null, VENDOR_ITEM_REGULAR),
- list("Officer Cap", 12, /obj/item/clothing/head/cmcap/ro, null, VENDOR_ITEM_REGULAR),
+ list("QM Cap", 12, /obj/item/clothing/head/cmcap/req/ro, null, VENDOR_ITEM_REGULAR),
+ list("Req Cap", 12, /obj/item/clothing/head/cmcap/req, null, VENDOR_ITEM_REGULAR),
+ list("Officer Cap", 12, /obj/item/clothing/head/cmcap/bridge, null, VENDOR_ITEM_REGULAR),
list("Bio Hood", 12, /obj/item/clothing/head/bio_hood/synth, null, VENDOR_ITEM_REGULAR),
list("Marine Helmet", 12, /obj/item/clothing/head/helmet/marine, null, VENDOR_ITEM_REGULAR),
list("Grey Marine Helmet", 12, /obj/item/clothing/head/helmet/marine/grey, null, VENDOR_ITEM_REGULAR),
diff --git a/code/game/machinery/vending/vendor_types/intelligence_officer.dm b/code/game/machinery/vending/vendor_types/intelligence_officer.dm
index a74c035b2d13..46394bea8c2c 100644
--- a/code/game/machinery/vending/vendor_types/intelligence_officer.dm
+++ b/code/game/machinery/vending/vendor_types/intelligence_officer.dm
@@ -68,7 +68,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_intelligence_officer, list(
list("XM12 Officer Helmet", 0, /obj/item/clothing/head/helmet/marine/rto/intel, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED),
list("Beret, Standard", 0, /obj/item/clothing/head/beret/cm, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
list("Beret, Tan", 0, /obj/item/clothing/head/beret/cm/tan, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
- list("USCM Officer Cap", 0, /obj/item/clothing/head/cmcap/ro, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+ list("USCM Officer Cap", 0, /obj/item/clothing/head/cmcap/bridge, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
list("BELT (CHOOSE 1)", 0, null, null, null),
list("G8-A General Utility Pouch", 0, /obj/item/storage/backpack/general_belt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index e20cb12de44a..077c0a463aaa 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -186,7 +186,7 @@
if(istype(S))
for(var/mob/M in S.can_see_content())
if(M.client)
- M.client.screen -= src
+ M.client.remove_from_screen(src)
if(ismob(loc))
dropped(loc)
diff --git a/code/game/objects/items/devices/motion_detector.dm b/code/game/objects/items/devices/motion_detector.dm
index dd0c5d45eda4..9776eae11c8f 100644
--- a/code/game/objects/items/devices/motion_detector.dm
+++ b/code/game/objects/items/devices/motion_detector.dm
@@ -281,12 +281,12 @@
DB.setDir(initial(DB.dir))
DB.screen_loc = "[Clamp(c_view + 1 - view_x_offset + (target.x - user.x), 1, 2*c_view+1)],[Clamp(c_view + 1 - view_y_offset + (target.y - user.y), 1, 2*c_view+1)]"
- user.client.screen += DB
+ user.client.add_to_screen(DB)
addtimer(CALLBACK(src, PROC_REF(clear_pings), user, DB), 1 SECONDS)
/obj/item/device/motiondetector/proc/clear_pings(mob/user, obj/effect/detector_blip/DB)
if(user.client)
- user.client.screen -= DB
+ user.client.remove_from_screen(DB)
/obj/item/device/motiondetector/m717
name = "M717 pocket motion detector"
diff --git a/code/game/objects/items/devices/vulture_spotter.dm b/code/game/objects/items/devices/vulture_spotter.dm
index b89009efde7e..d138c62c7a35 100644
--- a/code/game/objects/items/devices/vulture_spotter.dm
+++ b/code/game/objects/items/devices/vulture_spotter.dm
@@ -18,6 +18,8 @@
. = ..()
to_chat(user, SPAN_WARNING("[src] needs to be mounted on a tripod to use!"))
+/obj/item/device/vulture_spotter_scope/skillless
+
/obj/item/device/vulture_spotter_tripod
name = "\improper M707 spotter tripod"
desc = "A tripod, meant for stabilizing a spotting scope for the M707 anti-materiel rifle."
diff --git a/code/game/objects/items/misc.dm b/code/game/objects/items/misc.dm
index 5f6ca9a91272..abd8404d6e25 100644
--- a/code/game/objects/items/misc.dm
+++ b/code/game/objects/items/misc.dm
@@ -204,7 +204,7 @@
return //too deeply nested to access or not being carried by the user.
var/obj/item/storage/U = I.loc
- user.client.screen -= I
+ user.client.remove_from_screen(I)
U.contents.Remove(I)
else if(user.l_hand == I) //in a hand
user.drop_l_hand()
diff --git a/code/game/objects/items/storage/storage.dm b/code/game/objects/items/storage/storage.dm
index 4361ffc8e4a9..e3fbe86c0e3b 100644
--- a/code/game/objects/items/storage/storage.dm
+++ b/code/game/objects/items/storage/storage.dm
@@ -104,25 +104,24 @@
return
if(user.s_active)
user.s_active.hide_from(user)
- user.client.screen -= boxes
- user.client.screen -= storage_start
- user.client.screen -= storage_continue
- user.client.screen -= storage_end
- user.client.screen -= closer
- user.client.screen -= contents
- user.client.screen += closer
- user.client.screen += contents
+ user.client.remove_from_screen(boxes)
+ user.client.remove_from_screen(storage_start)
+ user.client.remove_from_screen(storage_continue)
+ user.client.remove_from_screen(storage_end)
+ user.client.remove_from_screen(closer)
+ user.client.remove_from_screen(contents)
+ user.client.add_to_screen(closer)
+ user.client.add_to_screen(contents)
if(storage_slots)
- user.client.screen += boxes
+ user.client.add_to_screen(boxes)
else
- user.client.screen += storage_start
- user.client.screen += storage_continue
- user.client.screen += storage_end
+ user.client.add_to_screen(storage_start)
+ user.client.add_to_screen(storage_continue)
+ user.client.add_to_screen(storage_end)
user.s_active = src
add_to_watchers(user)
- return
/obj/item/storage/proc/add_to_watchers(mob/user)
if(!(user in content_watchers))
@@ -137,12 +136,12 @@
///Used to hide the storage's inventory screen.
/obj/item/storage/proc/hide_from(mob/user as mob)
if(user.client)
- user.client.screen -= src.boxes
- user.client.screen -= storage_start
- user.client.screen -= storage_continue
- user.client.screen -= storage_end
- user.client.screen -= src.closer
- user.client.screen -= src.contents
+ user.client.remove_from_screen(src.boxes)
+ user.client.remove_from_screen(storage_start)
+ user.client.remove_from_screen(storage_continue)
+ user.client.remove_from_screen(storage_end)
+ user.client.remove_from_screen(src.closer)
+ user.client.remove_from_screen(src.contents)
if(user.s_active == src)
user.s_active = null
del_from_watchers(user)
@@ -508,7 +507,7 @@ W is always an item. stop_warning prevents messaging. user may be null.**/
W.on_enter_storage(src)
if(user)
if (user.client && user.s_active != src)
- user.client.screen -= W
+ user.client.remove_from_screen(W)
add_fingerprint(user)
if(!prevent_warning)
var/visidist = W.w_class >= 3 ? 3 : 1
@@ -534,7 +533,7 @@ W is always an item. stop_warning prevents messaging. user may be null.**/
/obj/item/storage/proc/_item_removal(obj/item/W as obj, atom/new_location)
for(var/mob/M in can_see_content())
if(M.client)
- M.client.screen -= W
+ M.client.remove_from_screen(W)
if(new_location)
if(ismob(new_location))
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cm_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/cm_closets.dm
index 5772db33198d..0ff7c4317193 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/cm_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/cm_closets.dm
@@ -52,16 +52,16 @@ GLOBAL_LIST_EMPTY(co_secure_boxes)
. = ..()
new /obj/item/clothing/head/beret/cm(src)
new /obj/item/clothing/head/beret/cm(src)
- new /obj/item/clothing/head/cmcap/ro(src)
- new /obj/item/clothing/head/cmcap/ro(src)
+ new /obj/item/clothing/head/cmcap/bridge(src)
+ new /obj/item/clothing/head/cmcap/bridge(src)
new /obj/item/clothing/under/marine/officer/bridge(src)
new /obj/item/clothing/under/marine/officer/bridge(src)
new /obj/item/clothing/shoes/marine(src)
new /obj/item/clothing/shoes/marine(src)
new /obj/item/storage/belt/marine(src)
new /obj/item/storage/belt/marine(src)
- new /obj/item/clothing/under/marine/officer/command(src)
- new /obj/item/clothing/under/marine/officer/command(src)
+ new /obj/item/clothing/under/marine/officer/boiler(src)
+ new /obj/item/clothing/under/marine/officer/boiler(src)
new /obj/item/clothing/suit/storage/webbing(src)
new /obj/item/clothing/suit/storage/webbing(src)
new /obj/item/clothing/gloves/combat(src)
@@ -100,7 +100,7 @@ GLOBAL_LIST_EMPTY(co_secure_boxes)
. = ..()
new /obj/item/clothing/head/beret/cm(src)
new /obj/item/clothing/head/beret/cm/tan(src)
- new /obj/item/clothing/head/cmcap/ro(src)
+ new /obj/item/clothing/head/cmcap/bridge(src)
new /obj/item/clothing/head/helmet/marine/rto/intel(src)
new /obj/item/clothing/under/marine/officer/intel(src)
new /obj/item/clothing/shoes/marine(src)
diff --git a/code/game/objects/structures/vulture_spotter.dm b/code/game/objects/structures/vulture_spotter.dm
index a668cb562028..50505ab239b8 100644
--- a/code/game/objects/structures/vulture_spotter.dm
+++ b/code/game/objects/structures/vulture_spotter.dm
@@ -21,6 +21,8 @@
var/darkness_view = 12
/// The maximum distance this can be from the sniper scope
var/max_sniper_distance = 7
+ /// If this requires the vulture_user trait to use
+ var/skillless = FALSE
/obj/structure/vulture_spotter_tripod/Initialize(mapload)
. = ..()
@@ -36,7 +38,10 @@
/obj/structure/vulture_spotter_tripod/deconstruct(disassembled)
. = ..()
if(scope_attached && bound_rifle)
- new /obj/item/device/vulture_spotter_scope(get_turf(src), bound_rifle)
+ if(skillless)
+ new /obj/item/device/vulture_spotter_scope/skillless(get_turf(src), bound_rifle)
+ else
+ new /obj/item/device/vulture_spotter_scope(get_turf(src), bound_rifle)
new /obj/item/device/vulture_spotter_tripod(get_turf(src))
/obj/structure/vulture_spotter_tripod/get_examine_text(mob/user)
@@ -63,7 +68,7 @@
return
var/mob/living/carbon/human/user = usr //this is us
- if(!HAS_TRAIT(user, TRAIT_VULTURE_USER))
+ if(!HAS_TRAIT(user, TRAIT_VULTURE_USER) && !skillless)
to_chat(user, SPAN_WARNING("You don't know how to use this!"))
return
@@ -153,10 +158,13 @@
user.pixel_y = 0
/// Handler for when the scope is being attached to the tripod
-/obj/structure/vulture_spotter_tripod/proc/on_scope_attach(mob/user, obj/structure/vulture_spotter_tripod/scope)
+/obj/structure/vulture_spotter_tripod/proc/on_scope_attach(mob/user, obj/item/device/vulture_spotter_scope/scope)
if(scope_attached)
return
+ if(istype(scope, /obj/item/device/vulture_spotter_scope/skillless))
+ skillless = TRUE
+
user.visible_message(SPAN_NOTICE("[user] attaches [scope] to [src]."), SPAN_NOTICE("You attach [scope] to [src]."))
icon_state = "vulture_scope"
setDir(user.dir)
diff --git a/code/modules/admin/player_panel/actions/general.dm b/code/modules/admin/player_panel/actions/general.dm
index 6f8f0733c96e..174dfef55ad8 100644
--- a/code/modules/admin/player_panel/actions/general.dm
+++ b/code/modules/admin/player_panel/actions/general.dm
@@ -187,7 +187,7 @@
/datum/player_action/follow/act(client/user, mob/target, list/params)
if(istype(user.mob, /mob/dead/observer))
var/mob/dead/observer/O = user.mob
- O.ManualFollow(target)
+ O.do_observe(target)
return TRUE
else
to_chat(user, SPAN_WARNING("You must be a ghost to do this."))
diff --git a/code/modules/admin/topic/topic.dm b/code/modules/admin/topic/topic.dm
index dc6e5550503d..bb7755aa41b0 100644
--- a/code/modules/admin/topic/topic.dm
+++ b/code/modules/admin/topic/topic.dm
@@ -1129,7 +1129,7 @@
sleep(2)
if(isobserver(usr))
var/mob/dead/observer/G = usr
- G.ManualFollow(M)
+ G.do_observe(M)
else if(href_list["check_antagonist"])
check_antagonists()
diff --git a/code/modules/admin/view_variables/color_matrix_editor.dm b/code/modules/admin/view_variables/color_matrix_editor.dm
index 73119db62052..078d2fc61221 100644
--- a/code/modules/admin/view_variables/color_matrix_editor.dm
+++ b/code/modules/admin/view_variables/color_matrix_editor.dm
@@ -19,7 +19,7 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen/color_matrix_proxy_view)
/atom/movable/screen/color_matrix_proxy_view/Destroy()
for (var/plane_master in plane_masters)
- client?.screen -= plane_master
+ client?.remove_from_screen(plane_master)
qdel(plane_master)
client?.clear_map(assigned_map)
@@ -40,7 +40,7 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen/color_matrix_proxy_view)
for (var/plane_master_type in subtypesof(/atom/movable/screen/plane_master) - /atom/movable/screen/plane_master/blackness)
var/atom/movable/screen/plane_master/plane_master = new plane_master_type()
plane_master.screen_loc = "[assigned_map]:CENTER"
- client?.screen |= plane_master
+ client?.add_to_screen(plane_master)
plane_masters += plane_master
diff --git a/code/modules/buildmode/buildmode.dm b/code/modules/buildmode/buildmode.dm
index 6e652192b37c..eeab65ec031a 100644
--- a/code/modules/buildmode/buildmode.dm
+++ b/code/modules/buildmode/buildmode.dm
@@ -31,13 +31,13 @@
holder.player_details.post_login_callbacks += li_cb
holder.show_popup_menus = FALSE
create_buttons()
- holder.screen += buttons
+ holder.add_to_screen(buttons)
holder.click_intercept = src
mode.enter_mode(src)
/datum/buildmode/proc/quit()
mode.exit_mode(src)
- holder.screen -= buttons
+ holder.remove_from_screen(buttons)
holder.click_intercept = null
holder.show_popup_menus = TRUE
qdel(src)
@@ -53,7 +53,7 @@
/datum/buildmode/proc/post_login()
// since these will get wiped upon login
- holder?.screen += buttons
+ holder?.add_to_screen(buttons)
// re-open the according switch mode
switch(switch_state)
if(BM_SWITCHSTATE_MODE)
@@ -103,11 +103,11 @@
/datum/buildmode/proc/open_modeswitch()
switch_state = BM_SWITCHSTATE_MODE
- holder.screen += modeswitch_buttons
+ holder.add_to_screen(modeswitch_buttons)
/datum/buildmode/proc/close_modeswitch()
switch_state = BM_SWITCHSTATE_NONE
- holder.screen -= modeswitch_buttons
+ holder.remove_from_screen(modeswitch_buttons)
/datum/buildmode/proc/toggle_dirswitch()
if(switch_state == BM_SWITCHSTATE_DIR)
@@ -118,11 +118,11 @@
/datum/buildmode/proc/open_dirswitch()
switch_state = BM_SWITCHSTATE_DIR
- holder.screen += dirswitch_buttons
+ holder.add_to_screen(dirswitch_buttons)
/datum/buildmode/proc/close_dirswitch()
switch_state = BM_SWITCHSTATE_NONE
- holder.screen -= dirswitch_buttons
+ holder.remove_from_screen(dirswitch_buttons)
/datum/buildmode/proc/change_mode(newmode)
mode.exit_mode(src)
diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm
index a7149c07d3e7..3cfb08b8dac0 100644
--- a/code/modules/client/client_procs.dm
+++ b/code/modules/client/client_procs.dm
@@ -753,7 +753,7 @@ GLOBAL_LIST_INIT(whitelisted_client_procs, list(
return FALSE
var/mob/dead/observer/observer = mob
- observer.ManualFollow(target)
+ observer.do_observe(target)
/client/proc/check_timelock(list/roles, hours)
var/timelock_name = "[islist(roles) ? jointext(roles, "") : roles][hours]"
@@ -783,7 +783,7 @@ GLOBAL_LIST_INIT(whitelisted_client_procs, list(
if (!screen_object.clear_with_screen)
continue
- screen -= object
+ remove_from_screen(object)
///opens the particle editor UI for the in_atom object for this client
/client/proc/open_particle_editor(atom/movable/in_atom)
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index de50af8dd808..012fa191c0c9 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -238,6 +238,9 @@ var/const/MAX_SAVE_SLOTS = 10
/// if this client has tooltips enabled
var/tooltips = TRUE
+ /// If this client has auto observe enabled, used by /datum/orbit_menu
+ var/auto_observe = TRUE
+
/datum/preferences/New(client/C)
key_bindings = deepCopyList(GLOB.hotkey_keybinding_list_by_key) // give them default keybinds and update their movement keys
macros = new(C, src)
diff --git a/code/modules/client/preferences_gear.dm b/code/modules/client/preferences_gear.dm
index 106da02a00b6..68028c300745 100644
--- a/code/modules/client/preferences_gear.dm
+++ b/code/modules/client/preferences_gear.dm
@@ -792,7 +792,17 @@ var/global/list/gear_datums_by_name = list()
/datum/gear/misc/jungle_boots
display_name = "Jungle pattern combat boots"
path = /obj/item/clothing/shoes/marine/jungle
- cost = 3
+ cost = 2
+
+/datum/gear/misc/brown_boots
+ display_name = "brown combat boots"
+ path = /obj/item/clothing/shoes/marine/brown
+ cost = 2
+
+/datum/gear/misc/brown_gloves
+ display_name = "brown combat gloves"
+ path = /obj/item/clothing/gloves/marine/brown
+ cost = 2
/datum/gear/misc/pdt_kit
display_name = "PDT/L kit"
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 89cd10af75b8..77bafd48a1f9 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -139,6 +139,7 @@
S["fps"] >> fps
S["ghost_vision_pref"] >> ghost_vision_pref
S["ghost_orbit"] >> ghost_orbit
+ S["auto_observe"] >> auto_observe
S["human_name_ban"] >> human_name_ban
@@ -219,6 +220,7 @@
window_skin = sanitize_integer(window_skin, 0, SHORT_REAL_LIMIT, initial(window_skin))
ghost_vision_pref = sanitize_inlist(ghost_vision_pref, list(GHOST_VISION_LEVEL_NO_NVG, GHOST_VISION_LEVEL_MID_NVG, GHOST_VISION_LEVEL_FULL_NVG), GHOST_VISION_LEVEL_MID_NVG)
ghost_orbit = sanitize_inlist(ghost_orbit, GLOB.ghost_orbits, initial(ghost_orbit))
+ auto_observe = sanitize_integer(auto_observe, 0, 1, 1)
playtime_perks = sanitize_integer(playtime_perks, 0, 1, 1)
xeno_vision_level_pref = sanitize_inlist(xeno_vision_level_pref, list(XENO_VISION_LEVEL_NO_NVG, XENO_VISION_LEVEL_MID_NVG, XENO_VISION_LEVEL_FULL_NVG), XENO_VISION_LEVEL_MID_NVG)
hear_vox = sanitize_integer(hear_vox, FALSE, TRUE, TRUE)
@@ -322,6 +324,7 @@
S["fps"] << fps
S["ghost_vision_pref"] << ghost_vision_pref
S["ghost_orbit"] << ghost_orbit
+ S["auto_observe"] << auto_observe
S["human_name_ban"] << human_name_ban
diff --git a/code/modules/clothing/gloves/marine_gloves.dm b/code/modules/clothing/gloves/marine_gloves.dm
index 09c84b9b4d40..15c596f9f6e1 100644
--- a/code/modules/clothing/gloves/marine_gloves.dm
+++ b/code/modules/clothing/gloves/marine_gloves.dm
@@ -5,7 +5,7 @@
name = "marine combat gloves"
desc = "Standard issue marine tactical gloves. It reads: 'knit by Marine Widows Association'."
icon_state = "black"
- item_state = "bgloves"
+ item_state = "black"
siemens_coefficient = 0.6
permeability_coefficient = 0.05
flags_cold_protection = BODY_FLAG_HANDS
@@ -46,6 +46,13 @@
name = "marine black combat gloves"
adopts_squad_color = FALSE
+/obj/item/clothing/gloves/marine/brown
+ name = "marine brown combat gloves"
+ desc = "Standard issue marine tactical gloves. It reads: 'knit by Marine Widows Association'. These are brown instead of the classic black."
+ icon_state = "brown"
+ item_state = "brown"
+ adopts_squad_color = FALSE
+
/obj/item/clothing/gloves/marine/officer
name = "officer gloves"
desc = "Shiny and impressive. They look expensive."
@@ -115,6 +122,10 @@
armor_internaldamage = CLOTHING_ARMOR_HIGH
adopts_squad_color = FALSE
+/obj/item/clothing/gloves/marine/veteran/upp
+ icon_state = "brown"
+ item_state = "brown"
+
/obj/item/clothing/gloves/marine/veteran/insulated
name = "insulated armored gloves"
desc = "Non-standard kevlon fiber gloves. These are apparently ESPECIALLY insulated."
@@ -146,7 +157,7 @@
name = "dress gloves"
desc = "A pair of fashionable white gloves, worn by marines in dress."
icon_state = "white"
- item_state = "white"
+ item_state = "marine_white"
adopts_squad_color = FALSE
/obj/item/clothing/gloves/marine/veteran/souto
diff --git a/code/modules/clothing/head/head.dm b/code/modules/clothing/head/head.dm
index 24e1d0231c85..5135dad6b3b9 100644
--- a/code/modules/clothing/head/head.dm
+++ b/code/modules/clothing/head/head.dm
@@ -370,17 +370,23 @@
name = "\improper USCM formal Commanding Officer's black cap"
icon_state = "co_formalhat_black"
-/obj/item/clothing/head/cmcap/ro
- name = "\improper USCM officer cap"
- desc = "A hat usually worn by officers in the USCM. While it provides no protection, some officers wear it in the field to make themselves more recognisable."
+/obj/item/clothing/head/cmcap/req/ro
+ name = "\improper USCM quartermaster cap"
+ desc = "It's a fancy hat for a not-so-fancy military supply clerk."
icon_state = "rocap"
+ flags_atom = NO_SNOW_TYPE
/obj/item/clothing/head/cmcap/req
name = "\improper USCM requisition cap"
- desc = "It's a fancy hat for a not-so-fancy military supply clerk."
+ desc = "It's a not-so-fancy hat for a not-so-fancy military supply clerk."
icon_state = "cargocap"
flags_atom = FPRINT|NO_SNOW_TYPE
+/obj/item/clothing/head/cmcap/bridge
+ name = "\improper USCM officer cap"
+ desc = "A hat usually worn by officers in the USCM. While it provides no protection, some officers wear it in the field to make themselves more recognisable."
+ icon_state = "cap_officer"
+
/obj/item/clothing/head/cmcap/flap
name = "\improper USCM expedition cap"
desc = "It's a cap, with flaps. A patch stitched across the front reads \"USS ALMAYER\"."
@@ -494,10 +500,19 @@
/obj/item/clothing/head/marine/peaked
name = "marine peaked cap"
desc = "A peaked cap. Wearer may suffer the heavy weight of responsibility upon their head and shoulders."
- icon = 'icons/obj/items/clothing/hats.dmi'
- icon_state = "officercap"
+ icon = 'icons/obj/items/clothing/cm_hats.dmi'
+ icon_state = "marine_formal"
item_icons = list(
- WEAR_HEAD = 'icons/mob/humans/onmob/head_0.dmi'
+ WEAR_HEAD = 'icons/mob/humans/onmob/head_1.dmi'
+ )
+
+/obj/item/clothing/head/marine/peaked/service
+ name = "marine service peaked cap"
+ desc = "A peaked cap. Wearer may suffer the heavy weight of responsibility upon their head and shoulders."
+ icon = 'icons/obj/items/clothing/cm_hats.dmi'
+ icon_state = "marine_service"
+ item_icons = list(
+ WEAR_HEAD = 'icons/mob/humans/onmob/head_1.dmi'
)
/obj/item/clothing/head/marine/peaked/captain
@@ -735,9 +750,6 @@
WEAR_HEAD = 'icons/mob/humans/onmob/head_1.dmi'
)
-/obj/item/clothing/head/drillhat/Initialize(mapload, ...)
- . = ..()
- select_gamemode_skin(/obj/item/clothing/head/drillhat)
#undef HAT_GARB_RELAY_ICON_STATE
//==========================//DRESS BLUES\\===============================\\
diff --git a/code/modules/clothing/shoes/marine_shoes.dm b/code/modules/clothing/shoes/marine_shoes.dm
index 40bec976c337..fc11a74a695d 100644
--- a/code/modules/clothing/shoes/marine_shoes.dm
+++ b/code/modules/clothing/shoes/marine_shoes.dm
@@ -45,6 +45,13 @@
/obj/item/clothing/shoes/marine/jungle/knife
knife_type = /obj/item/attachable/bayonet
+/obj/item/clothing/shoes/marine/brown
+ icon_state = "marine_brown"
+ desc = "Standard issue combat boots for combat scenarios or combat situations. All combat, all the time. These are brown."
+
+/obj/item/clothing/shoes/marine/brown/knife
+ knife_type = /obj/item/attachable/bayonet
+
/obj/item/clothing/shoes/marine/monkey
name = "monkey combat boots"
desc = "A sturdy pair of combat boots, the reflection of the polished leather reflects your true self."
@@ -54,6 +61,7 @@
/obj/item/clothing/shoes/marine/upp
name = "military combat boots"
+ icon_state = "marine_brown"
armor_melee = CLOTHING_ARMOR_MEDIUMLOW
armor_bullet = CLOTHING_ARMOR_HIGHPLUS
armor_bomb = CLOTHING_ARMOR_MEDIUM
diff --git a/code/modules/clothing/suits/marine_armor.dm b/code/modules/clothing/suits/marine_armor.dm
index 7ccafcd8b550..5e4ea48a43de 100644
--- a/code/modules/clothing/suits/marine_armor.dm
+++ b/code/modules/clothing/suits/marine_armor.dm
@@ -337,7 +337,7 @@
icon_state = "officer"
storage_slots = 3
flags_atom = null
- uniform_restricted = list(/obj/item/clothing/under/marine/officer, /obj/item/clothing/under/rank/qm_suit, /obj/item/clothing/under/rank/chief_medical_officer)
+ uniform_restricted = list(/obj/item/clothing/under/marine/officer, /obj/item/clothing/under/rank/qm_suit, /obj/item/clothing/under/rank/chief_medical_officer, /obj/item/clothing/under/marine/dress)
specialty = "M2 pattern officer"
item_state_slots = list(WEAR_JACKET = "officer")
diff --git a/code/modules/clothing/suits/marine_coat.dm b/code/modules/clothing/suits/marine_coat.dm
index 4ca2a54af4bf..d6781147a092 100644
--- a/code/modules/clothing/suits/marine_coat.dm
+++ b/code/modules/clothing/suits/marine_coat.dm
@@ -136,9 +136,10 @@
flags_atom = NO_SNOW_TYPE
/obj/item/clothing/suit/storage/jacket/marine/dress
- name = "marine dress jacket"
- desc = "Smells like vanilla. Signifies prestige and power, if a little flashy, but it still gives off that unga vibe."
- icon_state = "marine_formal"
+ name = "marine formal service jacket"
+ desc = "Smells like vanilla. Signifies prestige and power, if a little flashy."
+ icon_state = "coat_formal"
+ initial_icon_state = "coat_formal"
armor_melee = CLOTHING_ARMOR_LOW
armor_bullet = CLOTHING_ARMOR_LOW
armor_laser = CLOTHING_ARMOR_NONE
@@ -148,11 +149,13 @@
armor_rad = CLOTHING_ARMOR_LOW
armor_internaldamage = CLOTHING_ARMOR_LOW
flags_atom = NO_SNOW_TYPE
+ has_buttons = TRUE
/obj/item/clothing/suit/storage/jacket/marine/dress/officer
name = "marine officer dress jacket"
desc = "Dress Jacket worn by Commanding Officers of the USCM."
icon_state = "co_jacket"
+ has_buttons = FALSE
valid_accessory_slots = list(ACCESSORY_SLOT_ARMBAND, ACCESSORY_SLOT_DECOR, ACCESSORY_SLOT_MEDAL)
restricted_accessory_slots = list(ACCESSORY_SLOT_ARMBAND)
@@ -192,6 +195,7 @@
WEAR_JACKET = 'icons/mob/humans/onmob/suit_0.dmi'
)
item_state = "general_jacket"
+ has_buttons = FALSE
storage_slots = 4
armor_melee = CLOTHING_ARMOR_HIGHPLUS
armor_bullet = CLOTHING_ARMOR_HIGHPLUS
@@ -202,10 +206,12 @@
/obj/item/clothing/suit/storage/jacket/marine/dress/general/executive
name = "director's jacket"
desc = "A black trench coat with gold metallic trim. Flashy, highly protective, and over-the-top. Fit for a king - or, in this case, a Director. Has quite a few pockets."
+ has_buttons = FALSE
/obj/item/clothing/suit/storage/jacket/marine/dress/bridge_coat
name = "bridge coat"
desc = "A heavy synthetic woolen coat issued to USCM Officers. Based on a classical design this coat is quite nice on cold nights in the Air conditioned CIC or a miserable cold night on a barren world. This one is a Dressy Blue for a Commanding officer."
+ has_buttons = FALSE
item_state = "bridge_coat"
icon_state = "bridge_coat"
valid_accessory_slots = list(ACCESSORY_SLOT_ARMBAND, ACCESSORY_SLOT_RANK, ACCESSORY_SLOT_MEDAL)
@@ -213,6 +219,7 @@
/obj/item/clothing/suit/storage/jacket/marine/dress/bridge_coat_grey
name = "bridge coat"
desc = "A heavy synthetic woolen coat issued to USCM Officers. Based on a classical design this coat is quite nice on cold nights in the Air conditioned CIC or a miserable cold night on a barren world. This one is Black."
+ has_buttons = FALSE
item_state = "bridge_coat_grey"
icon_state = "bridge_coat_grey"
valid_accessory_slots = list(ACCESSORY_SLOT_ARMBAND, ACCESSORY_SLOT_RANK, ACCESSORY_SLOT_MEDAL)
@@ -263,6 +270,7 @@
icon = 'icons/mob/humans/onmob/contained/marinedressblues.dmi'
icon_state = "e_jacket"
item_state = "e_jacket"
+ has_buttons = FALSE
item_state_slots = null
contained_sprite = TRUE
diff --git a/code/modules/clothing/under/marine_uniform.dm b/code/modules/clothing/under/marine_uniform.dm
index fb9d889b4584..585f415f2b63 100644
--- a/code/modules/clothing/under/marine_uniform.dm
+++ b/code/modules/clothing/under/marine_uniform.dm
@@ -196,17 +196,20 @@
name = "marine service uniform"
desc = "A service uniform worn by members of the USCM. Do the corps proud. It has shards of light Kevlar to help protect against stabbing weapons and bullets."
icon_state = "BO_jumpsuit"
+ item_state = "BO_jumpsuit"
worn_state = "BO_jumpsuit"
specialty = "marine service"
flags_jumpsuit = UNIFORM_SLEEVE_ROLLABLE
+ flags_atom = NO_SNOW_TYPE
-/obj/item/clothing/under/marine/officer/exec
- name = "executive officer uniform"
- desc = "A uniform typically worn by an Executive Officer in the USCM. It has shards of light Kevlar to help protect against stabbing weapons and bullets."
- icon_state = "BO_jumpsuit"
- worn_state = "BO_jumpsuit"
- specialty = "executive officer"
- flags_jumpsuit = UNIFORM_SLEEVE_ROLLABLE
+/obj/item/clothing/under/marine/officer/boiler
+ name = "marine operations uniform"
+ desc = "An operations uniform worn by members of the USCM. Do the corps proud. It has shards of light Kevlar to help protect against stabbing weapons and bullets."
+ icon_state = "uscmboiler"
+ item_state = "uscmboiler"
+ worn_state = "uscmboiler"
+ flags_jumpsuit = UNIFORM_SLEEVE_ROLLABLE|UNIFORM_JACKET_REMOVABLE
+ specialty = "marine operations"
/obj/item/clothing/under/marine/officer/command
name = "\improper USCM officer uniform"
@@ -289,25 +292,21 @@
flags_atom = NO_SNOW_TYPE
/obj/item/clothing/under/marine/dress
- name = "old marine dress uniform"
- desc = "A dress uniform typically worn by marines of the USCM. The Sergeant Major would kill you if you got this dirty."
- suit_restricted = list(/obj/item/clothing/suit/storage/jacket/marine/dress)
- armor_bio = CLOTHING_ARMOR_LOW
- armor_rad = CLOTHING_ARMOR_LOW
- armor_internaldamage = CLOTHING_ARMOR_LOW
- icon_state = "marine_formal"
- worn_state = "marine_formal"
- specialty = "marine dress"
+ name = "marine formal service uniform"
+ desc = "A formal service uniform typically worn by marines of the USCM. Still practicable while still being more formal than the standard service uniform."
+ icon_state = "formal_jumpsuit"
+ worn_state = "formal_jumpsuit"
+ specialty = "marine formal"
flags_atom = NO_SNOW_TYPE
flags_jumpsuit = FALSE
black_market_value = 15
/obj/item/clothing/under/marine/dress/command
- name = "old marine command dress uniform"
- desc = "A dress uniform typically worn by the most battle-hardened marines of the USCM. Shame on you if you get this dirty."
- icon_state = "command_formal"
- worn_state = "command_formal"
- specialty = "command dress"
+ name = "marine officer formal service uniform"
+ desc = "A formal service uniform typically worn by marines of the USCM. Still practicable while still being more formal than the standard service uniform. This one belongs to an officer."
+ icon_state = "formal_jumpsuit"
+ worn_state = "formal_jumpsuit"
+ specialty = "command formal"
black_market_value = 20
//=========================//DRESS BLUES\\================================\\
diff --git a/code/modules/cm_marines/equipment/guncases.dm b/code/modules/cm_marines/equipment/guncases.dm
index 33684aa29d0a..507d6140666d 100644
--- a/code/modules/cm_marines/equipment/guncases.dm
+++ b/code/modules/cm_marines/equipment/guncases.dm
@@ -325,6 +325,16 @@
new /obj/item/pamphlet/trait/vulture(src) //both pamphlets give use of the scope and the rifle
new /obj/item/pamphlet/trait/vulture(src)
+/obj/item/storage/box/guncase/vulture/skillless
+ storage_slots = 5
+
+/obj/item/storage/box/guncase/vulture/skillless/fill_preset_inventory()
+ var/obj/item/weapon/gun/boltaction/vulture/skillless/rifle = new(src)
+ new /obj/item/ammo_magazine/rifle/boltaction/vulture(src)
+ new /obj/item/device/vulture_spotter_tripod(src)
+ new /obj/item/device/vulture_spotter_scope/skillless(src, WEAKREF(rifle))
+ new /obj/item/tool/screwdriver(src) // Spotter scope needs a screwdriver to disassemble
+
//Handgun case for Military police vendor three mag , a railflashligh and the handgun.
//88 Mod 4 Combat Pistol
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index c626f9cd1ee1..c7b1d65c7da2 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -85,10 +85,10 @@ Gunshots/explosions/opening doors/less rare audio (done)
halitem.icon_state = "flashbang1"
halitem.name = "Flashbang"
if(client)
- client.screen += halitem
+ client.add_to_screen(halitem)
spawn(rand(100,250))
if(client)
- client.screen -= halitem
+ client.remove_from_screen(halitem)
halitem = null
if(26 to 40)
//Flashes of danger
diff --git a/code/modules/gear_presets/other.dm b/code/modules/gear_presets/other.dm
index b440fe4533b2..837af5ac6677 100644
--- a/code/modules/gear_presets/other.dm
+++ b/code/modules/gear_presets/other.dm
@@ -216,7 +216,7 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/freelancer, WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/freelancer, WEAR_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/freelancer/beret, WEAR_HEAD)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine, WEAR_FEET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
if(new_human.disabilities & NEARSIGHTED)
new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health/prescription(new_human), WEAR_EYES)
diff --git a/code/modules/gear_presets/synths.dm b/code/modules/gear_presets/synths.dm
index 51b41c1387af..033dacdf894b 100644
--- a/code/modules/gear_presets/synths.dm
+++ b/code/modules/gear_presets/synths.dm
@@ -466,7 +466,7 @@
skills = /datum/skills/colonial_synthetic
paygrade = "SYN"
idtype = /obj/item/card/id/dogtag
- role_comm_title = "UPP 173Rd RECON Syn"
+ role_comm_title = "173/RECON Syn"
/datum/equipment_preset/synth/survivor/upp/load_gear(mob/living/carbon/human/new_human)
var/obj/item/clothing/under/marine/veteran/UPP/medic/uniform = new()
diff --git a/code/modules/gear_presets/upp.dm b/code/modules/gear_presets/upp.dm
index a6aa9448d8e8..1322cd79c4f3 100644
--- a/code/modules/gear_presets/upp.dm
+++ b/code/modules/gear_presets/upp.dm
@@ -64,7 +64,7 @@
assignment = JOB_UPP
rank = JOB_UPP
role_comm_title = "Sol"
- paygrade = "UE1"
+ paygrade = "UE2"
/datum/equipment_preset/upp/soldier/load_gear(mob/living/carbon/human/new_human)
//TODO: add backpacks and satchels
@@ -79,7 +79,7 @@
new_human.equip_to_slot_or_del(new /obj/item/device/binoculars, WEAR_IN_JACKET)
//limbs
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/upp, WEAR_HANDS)
if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD])
new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf/tacticalmask/green, WEAR_FACE)
@@ -148,7 +148,7 @@
list("Boots", 0, /obj/item/clothing/shoes/marine/upp, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
list("Fatigues", 0, /obj/item/clothing/under/marine/veteran/UPP, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
list("UM5 Personal Armor", 0, /obj/item/clothing/suit/storage/marine/faction/UPP, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
- list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
+ list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran/upp, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
list("Headset", 0, /obj/item/device/radio/headset/distress/UPP, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("Ration", 0, /obj/item/reagent_container/food/snacks/upp, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
list("Combat Pack", 0, /obj/item/storage/backpack/lightpack/upp, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY),
@@ -230,7 +230,7 @@
assignment = JOB_UPP_MEDIC
rank = JOB_UPP_MEDIC
role_comm_title = "Med"
- paygrade = "UE3M"
+ paygrade = "UE3"
/datum/equipment_preset/upp/medic/load_gear(mob/living/carbon/human/new_human)
//back
@@ -256,7 +256,7 @@
new_human.equip_to_slot_or_del(new /obj/item/storage/belt/medical/lifesaver/upp/full, WEAR_WAIST)
//limbs
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/upp, WEAR_HANDS)
//póckets
var/obj/item/storage/pouch/magazine/large/ppouch = new()
new_human.equip_to_slot_or_del(ppouch, WEAR_R_STORE)
@@ -277,7 +277,7 @@
list("Boots", 0, /obj/item/clothing/shoes/marine/upp, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
list("Medic Fatigues", 0, /obj/item/clothing/under/marine/veteran/UPP/medic, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
list("UL6 Personal Armor", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/support, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
- list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
+ list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran/upp, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
list("Headset", 0, /obj/item/device/radio/headset/distress/UPP/medic, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("Ration", 0, /obj/item/reagent_container/food/snacks/upp, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
list("Combat Pack", 0, /obj/item/storage/backpack/lightpack, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY),
@@ -399,7 +399,7 @@
assignment = JOB_UPP_ENGI
rank = JOB_UPP_ENGI
role_comm_title = "Sap"
- paygrade = "UE3S"
+ paygrade = "UE3"
/datum/equipment_preset/upp/sapper/load_gear(mob/living/carbon/human/new_human)
//Sappers should have lots of gear and whatnot that helps them attack or siege marines
@@ -440,7 +440,7 @@
list("Boots", 0, /obj/item/clothing/shoes/marine/upp, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
list("Fatigues", 0, /obj/item/clothing/under/marine/veteran/UPP, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
list("UM5 Personal Armor", 0, /obj/item/clothing/suit/storage/marine/faction/UPP, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
- list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
+ list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran/upp, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
list("Headset", 0, /obj/item/device/radio/headset/distress/UPP/cct, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("Welding Goggles", 0, /obj/item/clothing/glasses/welding, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_MANDATORY),
list("Ration", 0, /obj/item/reagent_container/food/snacks/upp, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
@@ -551,7 +551,7 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/heavy, WEAR_JACKET)
//limbs
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/upp, WEAR_HANDS)
//pockets
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/explosive/C4, WEAR_R_STORE)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/ert, WEAR_L_STORE)
@@ -579,7 +579,7 @@
list("Boots", 0, /obj/item/clothing/shoes/marine/upp, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
list("Fatigues", 0, /obj/item/clothing/under/marine/veteran/UPP, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
list("UH7 Heavy Plated Armor", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/heavy, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
- list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran/pmc, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
+ list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran/upp, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
list("Headset", 0, /obj/item/device/radio/headset/distress/UPP, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("Ration", 0, /obj/item/reagent_container/food/snacks/upp, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
list("Combat Pack", 0, /obj/item/storage/backpack/lightpack, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY),
@@ -678,7 +678,7 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/heavy, WEAR_JACKET)
//limbs
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/upp, WEAR_HANDS)
//pockets
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/explosive/C4, WEAR_R_STORE)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/ert, WEAR_L_STORE)
@@ -704,7 +704,7 @@
list("Boots", 0, /obj/item/clothing/shoes/marine/upp, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
list("Fatigues", 0, /obj/item/clothing/under/marine/veteran/UPP, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
list("UH7 Heavy Plated Armor", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/heavy, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
- list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran/pmc, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
+ list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran/upp, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
list("Headset", 0, /obj/item/device/radio/headset/distress/UPP, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("Ration", 0, /obj/item/reagent_container/food/snacks/upp, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
list("Combat Pack", 0, /obj/item/storage/backpack/lightpack, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY),
@@ -742,15 +742,819 @@
list("Heat Absorbent Coif", 0, /obj/item/clothing/mask/rebreather/scarf, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR)
)
-/datum/equipment_preset/upp/machinegunner/get_antag_gear_equipment()
- return list(
- list("HEAVY SET (MANDATORY)", 0, null, null, null),
- list("Essential Heavy Set", 0, /obj/effect/essentials_set/upp_heavy, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
+/datum/equipment_preset/upp/machinegunner/get_antag_gear_equipment()
+ return list(
+ list("HEAVY SET (MANDATORY)", 0, null, null, null),
+ list("Essential Heavy Set", 0, /obj/effect/essentials_set/upp_heavy, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
+
+ list("SPECIAL AMMUNITION", 0, null, null, null),
+ list("QYJ-72 Box Magazine (7.62x54mmR)", 15, /obj/item/ammo_magazine/pkp , null, VENDOR_ITEM_RECOMMENDED),
+
+ list("ATTACHMENTS (NONE FIT QYJ-72)", 0, null, null, null),
+ list("Angled Grip", 10, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR),
+ list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR),
+ list("Laser Sight", 10, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR),
+ list("Red-Dot Sight", 10, /obj/item/attachable/reddot, null, VENDOR_ITEM_REGULAR),
+ list("Reflex Sight", 10, /obj/item/attachable/reflex, null, VENDOR_ITEM_REGULAR),
+ list("Suppressor", 10, /obj/item/attachable/suppressor, null, VENDOR_ITEM_REGULAR),
+ list("Vertical Grip", 10, /obj/item/attachable/verticalgrip, null, VENDOR_ITEM_REGULAR),
+
+ list("EXPLOSIVES", 0, null, null, null),
+ list("Plastic Explosive", 5, /obj/item/explosive/plastic, null, VENDOR_ITEM_REGULAR),
+ list("Smoke Grenade", 5, /obj/item/explosive/grenade/smokebomb, null, VENDOR_ITEM_REGULAR),
+ list("Type 6 Shrapnel Grenade", 15, /obj/item/explosive/grenade/high_explosive/upp, null, VENDOR_ITEM_REGULAR),
+ list("Type 8 WP Grenade", 20, /obj/item/explosive/grenade/phosphorus/upp, null, VENDOR_ITEM_REGULAR),
+
+ list("UTILITIES", 0, null, null, null),
+ list("Brown Webbing Vest", 10, /obj/item/clothing/accessory/storage/black_vest/brown_vest, null, VENDOR_ITEM_RECOMMENDED),
+ list("Black Webbing Vest", 10, /obj/item/clothing/accessory/storage/black_vest, null, VENDOR_ITEM_RECOMMENDED),
+ list("Fire Extinguisher (Portable)", 5, /obj/item/tool/extinguisher/mini, null, VENDOR_ITEM_REGULAR),
+ list("Large General Pouch", 10, /obj/item/storage/pouch/general/large, null, VENDOR_ITEM_REGULAR),
+ list("Shoulder Holster", 10, /obj/item/clothing/accessory/storage/holster, null, VENDOR_ITEM_REGULAR),
+ list("Webbing", 10, /obj/item/clothing/accessory/storage/webbing, null, VENDOR_ITEM_REGULAR),
+ list("Drop Pouch", 10, /obj/item/clothing/accessory/storage/droppouch, null, VENDOR_ITEM_REGULAR),
+ )
+
+//*****************************************************************************************************/
+
+/datum/equipment_preset/upp/leader
+ name = "UPP Squad Leader"
+ flags = EQUIPMENT_PRESET_EXTRA
+
+ skills = /datum/skills/upp/SL
+ assignment = JOB_UPP_LEADER
+ rank = JOB_UPP_LEADER
+ role_comm_title = "SL"
+ paygrade = "UE6"
+
+/datum/equipment_preset/upp/leader/load_gear(mob/living/carbon/human/new_human)
+ var/UPPleadsidearm = rand(1,4)
+ //back
+ new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/upp, WEAR_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, WEAR_IN_BACK) //0.66
+ new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/phosphorus/upp, WEAR_IN_BACK) //1.33
+ new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/phosphorus/upp, WEAR_IN_BACK) //2
+ new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/phosphorus/upp, WEAR_IN_BACK) //2.66
+ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK) //3.33
+ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK) //4
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/ap, WEAR_IN_BACK) //5
+ //face
+ new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/command, WEAR_L_EAR)
+ //head
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/beret, WEAR_HEAD)
+ //body
+ var/obj/item/clothing/under/marine/veteran/UPP/UPP = new()
+ var/obj/item/clothing/accessory/storage/webbing/W = new()
+ UPP.attach_accessory(new_human, W)
+ new_human.equip_to_slot_or_del(UPP, WEAR_BODY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/ap, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/ap, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/heavy, WEAR_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range, WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/type71/flamer, WEAR_J_STORE)
+ //waist
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/t73, WEAR_WAIST)
+ switch(UPPleadsidearm)
+ if(1 to 2) // 50%
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/t73, WEAR_WAIST)
+ if(3) //25%
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/np92, WEAR_WAIST)
+ if(4) //25%
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/revolver, WEAR_WAIST)
+ //limbs
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/upp, WEAR_HANDS)
+ //pockets
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/flamertank, WEAR_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher, WEAR_IN_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher, WEAR_IN_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/ert, WEAR_L_STORE)
+
+ if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD])
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf/tacticalmask/green, WEAR_FACE)
+
+/datum/equipment_preset/upp/leader/get_antag_clothing_equipment()
+ return list(
+ list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
+ list("Boots", 0, /obj/item/clothing/shoes/marine/upp, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
+ list("Fatigues", 0, /obj/item/clothing/under/marine/veteran/UPP, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
+ list("UH7 Heavy Plated Armor", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/heavy, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
+ list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran/upp, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
+ list("Headset", 0, /obj/item/device/radio/headset/distress/UPP/command, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
+ list("Ration", 0, /obj/item/reagent_container/food/snacks/upp, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
+ list("Combat Pack", 0, /obj/item/storage/backpack/lightpack/upp, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY),
+
+ list("HELMET (CHOOSE 1)", 0, null, null, null),
+ list("Armored Beret", 0, /obj/item/clothing/head/uppcap/beret, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+ list("UM4 Helmet", 0, /obj/item/clothing/head/helmet/marine/veteran/UPP, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+
+ list("BELT (CHOOSE 1)", 0, null, null, null),
+ list("Type 41 Ammo Load Rig", 0, /obj/item/storage/belt/marine/upp, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("Type 41 Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+
+ list("POUCHES (CHOOSE 2)", 0, null, null, null),
+ list("Auto-Injector Pouch", 0, /obj/item/storage/pouch/autoinjector, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Bayonet Sheath", 0, /obj/item/storage/pouch/bayonet/upp, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Explosive Pouch", 0, /obj/item/storage/pouch/explosive, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Refillable Injectors)", 0, /obj/item/storage/pouch/firstaid/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Splints, Gauze, Ointment)", 0, /obj/item/storage/pouch/firstaid/full/alternate, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Pill Packets)", 0, /obj/item/storage/pouch/firstaid/full/pills, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Flare Pouch (Full)", 0, /obj/item/storage/pouch/flare/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Large Magazine Pouch", 0, /obj/item/storage/pouch/magazine/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Medium General Pouch", 0, /obj/item/storage/pouch/general/medium, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Pistol Magazine Pouch", 0, /obj/item/storage/pouch/magazine/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+
+ list("ATTACHMENT (CHOOSE 1)", 0, null, null, null),
+ list("Angled Grip", 0, /obj/item/attachable/angledgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Extended Barrel", 0, /obj/item/attachable/extended_barrel, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Laser Sight", 0, /obj/item/attachable/lasersight, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Red-Dot Sight", 0, /obj/item/attachable/reddot, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Reflex Sight", 0, /obj/item/attachable/reflex, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Suppressor", 0, /obj/item/attachable/suppressor, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Vertical Grip", 0, /obj/item/attachable/verticalgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+
+ list("MASK (CHOOSE 1)", 0, null, null, null),
+ list("Gas Mask", 0, /obj/item/clothing/mask/gas, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
+ list("Heat Absorbent Coif", 0, /obj/item/clothing/mask/rebreather/scarf, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR)
+ )
+
+/datum/equipment_preset/upp/leader/get_antag_gear_equipment()
+ return list(
+ list("SQUAD LEADER SET (MANDATORY)", 0, null, null, null),
+ list("Essential SL Set", 0, /obj/effect/essentials_set/leader/upp, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
+
+ list("GENERAL SUPPLIES", 0, null, null, null),
+ list("Whistle", 5, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR),
+
+ list("ENGINEERING SUPPLIES", 0, null, null, null),
+ list("Entrenching Tool", 2, /obj/item/tool/shovel/etool, null, VENDOR_ITEM_REGULAR),
+ list("Insulated Gloves", 3, /obj/item/clothing/gloves/yellow, null, VENDOR_ITEM_REGULAR),
+ list("Metal x10", 5, /obj/item/stack/sheet/metal/small_stack, null, VENDOR_ITEM_RECOMMENDED),
+ list("Plasteel x10", 7, /obj/item/stack/sheet/plasteel/small_stack, null, VENDOR_ITEM_RECOMMENDED),
+ list("Sandbags x25", 10, /obj/item/stack/sandbags_empty/half, null, VENDOR_ITEM_RECOMMENDED),
+ list("Tools Pouch (Full)", 5, /obj/item/storage/pouch/tools/full, null, VENDOR_ITEM_REGULAR),
+ list("Welding Goggles", 5, /obj/item/clothing/glasses/welding, null, VENDOR_ITEM_REGULAR),
+
+ list("MEDICAL SUPPLIES", 0, null, null, null),
+ list("Burn Kit", 2, /obj/item/stack/medical/advanced/ointment, null, VENDOR_ITEM_REGULAR),
+ list("Trauma Kit", 2, /obj/item/stack/medical/advanced/bruise_pack, null, VENDOR_ITEM_REGULAR),
+ list("Advanced Firstaid Kit", 12, /obj/item/storage/firstaid/adv, null, VENDOR_ITEM_REGULAR),
+ list("Medical Splints", 1, /obj/item/stack/medical/splint, null, VENDOR_ITEM_REGULAR),
+
+ list("Injector (Bicaridine)", 1, /obj/item/reagent_container/hypospray/autoinjector/bicaridine, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Dexalin+)", 1, /obj/item/reagent_container/hypospray/autoinjector/dexalinp, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Inaprovaline)", 1, /obj/item/reagent_container/hypospray/autoinjector/inaprovaline, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Kelotane)", 1, /obj/item/reagent_container/hypospray/autoinjector/kelotane, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Oxycodone)", 2, /obj/item/reagent_container/hypospray/autoinjector/oxycodone, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Tramadol)", 1, /obj/item/reagent_container/hypospray/autoinjector/tramadol, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Tricord)", 1, /obj/item/reagent_container/hypospray/autoinjector/tricord, null, VENDOR_ITEM_REGULAR),
+
+ list("Health Analyzer", 4, /obj/item/device/healthanalyzer, null, VENDOR_ITEM_REGULAR),
+ list("Medical HUD Glasses", 4, /obj/item/clothing/glasses/hud/health, null, VENDOR_ITEM_MANDATORY),
+
+ list("SPECIAL AMMUNITION", 0, null, null, null),
+ list("Type 71 AP Magazine (5.45x39mm)", 10, /obj/item/ammo_magazine/rifle/type71/ap , null, VENDOR_ITEM_REGULAR),
+
+ list("ATTACHMENTS", 0, null, null, null),
+ list("Angled Grip", 10, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR),
+ list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR),
+ list("Laser Sight", 10, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR),
+ list("Red-Dot Sight", 10, /obj/item/attachable/reddot, null, VENDOR_ITEM_REGULAR),
+ list("Reflex Sight", 10, /obj/item/attachable/reflex, null, VENDOR_ITEM_REGULAR),
+ list("Suppressor", 10, /obj/item/attachable/suppressor, null, VENDOR_ITEM_REGULAR),
+ list("Vertical Grip", 10, /obj/item/attachable/verticalgrip, null, VENDOR_ITEM_REGULAR),
+
+ list("EXPLOSIVES", 0, null, null, null),
+ list("Plastic Explosive", 5, /obj/item/explosive/plastic, null, VENDOR_ITEM_REGULAR),
+ list("Smoke Grenade", 5, /obj/item/explosive/grenade/smokebomb, null, VENDOR_ITEM_REGULAR),
+ list("Type 6 Shrapnel Grenade", 15, /obj/item/explosive/grenade/high_explosive/upp, null, VENDOR_ITEM_REGULAR),
+ list("Type 8 WP Grenade", 20, /obj/item/explosive/grenade/phosphorus/upp, null, VENDOR_ITEM_REGULAR),
+
+ list("UTILITIES", 0, null, null, null),
+ list("Brown Webbing Vest", 10, /obj/item/clothing/accessory/storage/black_vest/brown_vest, null, VENDOR_ITEM_RECOMMENDED),
+ list("Black Webbing Vest", 10, /obj/item/clothing/accessory/storage/black_vest, null, VENDOR_ITEM_RECOMMENDED),
+ list("Fire Extinguisher (Portable)", 5, /obj/item/tool/extinguisher/mini, null, VENDOR_ITEM_REGULAR),
+ list("Large General Pouch", 10, /obj/item/storage/pouch/general/large, null, VENDOR_ITEM_REGULAR),
+ list("Shoulder Holster", 10, /obj/item/clothing/accessory/storage/holster, null, VENDOR_ITEM_REGULAR),
+ list("Webbing", 10, /obj/item/clothing/accessory/storage/webbing, null, VENDOR_ITEM_REGULAR),
+ list("Drop Pouch", 10, /obj/item/clothing/accessory/storage/droppouch, null, VENDOR_ITEM_REGULAR),
+ )
+
+//*****************************************************************************************************/
+
+/datum/equipment_preset/upp/military_police
+ name = "UPP Military Police"
+ flags = EQUIPMENT_PRESET_EXTRA
+
+ skills = /datum/skills/upp/military_police
+ assignment = JOB_UPP_POLICE
+ rank = JOB_UPP_POLICE
+ role_comm_title = "MP"
+ paygrade = "UE6"
+
+/datum/equipment_preset/upp/military_police/load_gear(mob/living/carbon/human/new_human)
+ //back
+ new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/upp, WEAR_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK)
+ //face
+ new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP, WEAR_L_EAR)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc/upp, WEAR_FACE)
+ //head
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/beret, WEAR_HEAD)
+ //uniform
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP/mp, WEAR_BODY)
+ //jacket
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/mp, WEAR_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/device/binoculars, WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/revolver, WEAR_J_STORE)
+ //waist
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/security/MP/UPP/full, WEAR_WAIST)
+ //limbs
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/upp, WEAR_HANDS)
+ //pockets
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/autoinjector/full, WEAR_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/medium, WEAR_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/device/taperecorder, WEAR_IN_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/stack/medical/bruise_pack, WEAR_IN_R_STORE)
+
+/datum/equipment_preset/upp/military_police/get_antag_clothing_equipment()
+ return list(
+ list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
+ list("Boots", 0, /obj/item/clothing/shoes/marine/upp, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
+ list("Fatigues", 0, /obj/item/clothing/under/marine/veteran/UPP/mp, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
+ list("UL4 camouflaged jacket", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/mp, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
+ list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran/upp, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
+ list("Headset", 0, /obj/item/device/radio/headset/distress/UPP, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
+ list("Ration", 0, /obj/item/reagent_container/food/snacks/upp, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
+ list("Combat Pack", 0, /obj/item/storage/backpack/lightpack/upp, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY),
+
+ list("HELMET (CHOOSE 1)", 0, null, null, null),
+ list("Armored Beret", 0, /obj/item/clothing/head/uppcap/beret, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+ list("UM4 Helmet", 0, /obj/item/clothing/head/helmet/marine/veteran/UPP, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED),
+
+ list("ARMOR (CHOOSE 1)", 0, null, null, null),
+ list("UL4 camouflaged jacket", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/mp, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("UL6 Personal Armor", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/support, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
+
+ list("BELT (CHOOSE 1)", 0, null, null, null),
+ list("Type 41 Ammo Load Rig", 0, /obj/item/storage/belt/marine/upp, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("Type 41 Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("Type 43 Military Police Rig", 0, /obj/item/storage/belt/security/MP/UPP/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+
+ list("POUCHES (CHOOSE 2)", 0, null, null, null),
+ list("Auto-Injector Pouch", 0, /obj/item/storage/pouch/autoinjector, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Bayonet Sheath", 0, /obj/item/storage/pouch/bayonet/upp, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Explosive Pouch", 0, /obj/item/storage/pouch/explosive, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Refillable Injectors)", 0, /obj/item/storage/pouch/firstaid/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Splints, Gauze, Ointment)", 0, /obj/item/storage/pouch/firstaid/full/alternate, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Pill Packets)", 0, /obj/item/storage/pouch/firstaid/full/pills, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Flare Pouch (Full)", 0, /obj/item/storage/pouch/flare/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Large Magazine Pouch", 0, /obj/item/storage/pouch/magazine/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Medium General Pouch", 0, /obj/item/storage/pouch/general/medium, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Pistol Magazine Pouch", 0, /obj/item/storage/pouch/magazine/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+
+ list("ATTACHMENT (CHOOSE 1)", 0, null, null, null),
+ list("Angled Grip", 0, /obj/item/attachable/angledgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Extended Barrel", 0, /obj/item/attachable/extended_barrel, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Laser Sight", 0, /obj/item/attachable/lasersight, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Red-Dot Sight", 0, /obj/item/attachable/reddot, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Reflex Sight", 0, /obj/item/attachable/reflex, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Suppressor", 0, /obj/item/attachable/suppressor, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Vertical Grip", 0, /obj/item/attachable/verticalgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+
+ list("MASK (CHOOSE 1)", 0, null, null, null),
+ list("Gas Mask", 0, /obj/item/clothing/mask/gas/pmc/upp, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
+ list("Heat Absorbent Coif", 0, /obj/item/clothing/mask/rebreather/scarf, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR)
+ )
+
+/datum/equipment_preset/upp/military_police/get_antag_gear_equipment()
+ return list(
+ list("SQUAD LEADER SET (MANDATORY)", 0, null, null, null),
+ list("Essential SL Set", 0, /obj/effect/essentials_set/leader/upp, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
+
+ list("GENERAL SUPPLIES", 0, null, null, null),
+ list("Whistle", 5, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR),
+
+ list("ENGINEERING SUPPLIES", 0, null, null, null),
+ list("Entrenching Tool", 2, /obj/item/tool/shovel/etool, null, VENDOR_ITEM_REGULAR),
+ list("Insulated Gloves", 3, /obj/item/clothing/gloves/yellow, null, VENDOR_ITEM_REGULAR),
+ list("Metal x10", 5, /obj/item/stack/sheet/metal/small_stack, null, VENDOR_ITEM_RECOMMENDED),
+ list("Plasteel x10", 7, /obj/item/stack/sheet/plasteel/small_stack, null, VENDOR_ITEM_RECOMMENDED),
+ list("Sandbags x25", 10, /obj/item/stack/sandbags_empty/half, null, VENDOR_ITEM_RECOMMENDED),
+ list("Tools Pouch (Full)", 5, /obj/item/storage/pouch/tools/full, null, VENDOR_ITEM_REGULAR),
+ list("Welding Goggles", 5, /obj/item/clothing/glasses/welding, null, VENDOR_ITEM_REGULAR),
+
+ list("MEDICAL SUPPLIES", 0, null, null, null),
+ list("Burn Kit", 2, /obj/item/stack/medical/advanced/ointment, null, VENDOR_ITEM_REGULAR),
+ list("Trauma Kit", 2, /obj/item/stack/medical/advanced/bruise_pack, null, VENDOR_ITEM_REGULAR),
+ list("Advanced Firstaid Kit", 12, /obj/item/storage/firstaid/adv, null, VENDOR_ITEM_REGULAR),
+ list("Medical Splints", 1, /obj/item/stack/medical/splint, null, VENDOR_ITEM_REGULAR),
+
+ list("Injector (Bicaridine)", 1, /obj/item/reagent_container/hypospray/autoinjector/bicaridine, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Dexalin+)", 1, /obj/item/reagent_container/hypospray/autoinjector/dexalinp, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Inaprovaline)", 1, /obj/item/reagent_container/hypospray/autoinjector/inaprovaline, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Kelotane)", 1, /obj/item/reagent_container/hypospray/autoinjector/kelotane, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Oxycodone)", 2, /obj/item/reagent_container/hypospray/autoinjector/oxycodone, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Tramadol)", 1, /obj/item/reagent_container/hypospray/autoinjector/tramadol, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Tricord)", 1, /obj/item/reagent_container/hypospray/autoinjector/tricord, null, VENDOR_ITEM_REGULAR),
+
+ list("Health Analyzer", 4, /obj/item/device/healthanalyzer, null, VENDOR_ITEM_REGULAR),
+ list("Medical HUD Glasses", 4, /obj/item/clothing/glasses/hud/health, null, VENDOR_ITEM_MANDATORY),
+
+ list("SPECIAL AMMUNITION", 0, null, null, null),
+ list("Type 71 AP Magazine (5.45x39mm)", 10, /obj/item/ammo_magazine/rifle/type71/ap , null, VENDOR_ITEM_REGULAR),
+
+ list("ATTACHMENTS", 0, null, null, null),
+ list("Angled Grip", 10, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR),
+ list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR),
+ list("Laser Sight", 10, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR),
+ list("Red-Dot Sight", 10, /obj/item/attachable/reddot, null, VENDOR_ITEM_REGULAR),
+ list("Reflex Sight", 10, /obj/item/attachable/reflex, null, VENDOR_ITEM_REGULAR),
+ list("Suppressor", 10, /obj/item/attachable/suppressor, null, VENDOR_ITEM_REGULAR),
+ list("Vertical Grip", 10, /obj/item/attachable/verticalgrip, null, VENDOR_ITEM_REGULAR),
+
+ list("EXPLOSIVES", 0, null, null, null),
+ list("Plastic Explosive", 5, /obj/item/explosive/plastic, null, VENDOR_ITEM_REGULAR),
+ list("Smoke Grenade", 5, /obj/item/explosive/grenade/smokebomb, null, VENDOR_ITEM_REGULAR),
+ list("Type 6 Shrapnel Grenade", 15, /obj/item/explosive/grenade/high_explosive/upp, null, VENDOR_ITEM_REGULAR),
+ list("Type 8 WP Grenade", 20, /obj/item/explosive/grenade/phosphorus/upp, null, VENDOR_ITEM_REGULAR),
+
+ list("UTILITIES", 0, null, null, null),
+ list("Brown Webbing Vest", 10, /obj/item/clothing/accessory/storage/black_vest/brown_vest, null, VENDOR_ITEM_RECOMMENDED),
+ list("Black Webbing Vest", 10, /obj/item/clothing/accessory/storage/black_vest, null, VENDOR_ITEM_RECOMMENDED),
+ list("Fire Extinguisher (Portable)", 5, /obj/item/tool/extinguisher/mini, null, VENDOR_ITEM_REGULAR),
+ list("Large General Pouch", 10, /obj/item/storage/pouch/general/large, null, VENDOR_ITEM_REGULAR),
+ list("Shoulder Holster", 10, /obj/item/clothing/accessory/storage/holster, null, VENDOR_ITEM_REGULAR),
+ list("Webbing", 10, /obj/item/clothing/accessory/storage/webbing, null, VENDOR_ITEM_REGULAR),
+ list("Drop Pouch", 10, /obj/item/clothing/accessory/storage/droppouch, null, VENDOR_ITEM_REGULAR),
+ )
+
+//*****************************************************************************************************/
+
+/datum/equipment_preset/upp/officer
+ name = "UPP Lieutenant"
+ flags = EQUIPMENT_PRESET_EXTRA
+
+ skills = /datum/skills/upp/officer
+ assignment = JOB_UPP_LT_OFFICER
+ rank = JOB_UPP_LT_OFFICER
+ role_comm_title = "Lt."
+ paygrade = "UO1"
+
+/datum/equipment_preset/upp/officer/load_gear(mob/living/carbon/human/new_human)
+ //back
+ new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/upp, WEAR_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector/hacked, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/device/megaphone, WEAR_IN_BACK)
+ //face
+ new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/command, WEAR_L_EAR)
+ //head
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/beret, WEAR_HEAD)
+ //uniform
+ var/obj/item/clothing/under/marine/veteran/UPP/officer/M = new()
+ var/obj/item/clothing/accessory/storage/webbing/W = new()
+ M.attach_accessory(new_human, W)
+ new_human.equip_to_slot_or_del(M, WEAR_BODY)
+ for(var/i in 1 to W.hold.storage_slots)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/ap, WEAR_IN_ACCESSORY)
+
+ //jacket
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/officer, WEAR_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range, WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/stack/medical/bruise_pack, WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/type71/flamer/leader, WEAR_J_STORE)
+ //waist
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/np92, WEAR_WAIST)
+ //limbs
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/upp, WEAR_HANDS)
+ //pockets
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/large, WEAR_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/phosphorus/upp, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/high_explosive/upp, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/high_explosive/upp, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/autoinjector/full, WEAR_R_STORE)
+
+ if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD])
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf/tacticalmask/green, WEAR_FACE)
+
+/datum/equipment_preset/upp/officer/get_antag_clothing_equipment()
+ return list(
+ list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
+ list("Boots", 0, /obj/item/clothing/shoes/marine/upp, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
+ list("Fatigues", 0, /obj/item/clothing/under/marine/veteran/UPP/officer, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
+ list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran/upp, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
+ list("Headset", 0, /obj/item/device/radio/headset/distress/UPP/command, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
+ list("Ration", 0, /obj/item/reagent_container/food/snacks/upp, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
+ list("Combat Pack", 0, /obj/item/storage/backpack/lightpack/upp, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY),
+
+ list("HELMET (CHOOSE 1)", 0, null, null, null),
+ list("Armored Beret", 0, /obj/item/clothing/head/uppcap/beret, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+ list("UM4 Helmet", 0, /obj/item/clothing/head/helmet/marine/veteran/UPP, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED),
+
+ list("ARMOR (CHOOSE 1)", 0, null, null, null),
+ list("UL4 officer jacket", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/officer, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("UL6 Personal Armor", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/support, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
+
+ list("BELT (CHOOSE 1)", 0, null, null, null),
+ list("Type 41 Ammo Load Rig", 0, /obj/item/storage/belt/marine/upp, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("Type 73 Pistol Holster Rig", 0, /obj/item/storage/belt/gun/type47/t73, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+
+ list("POUCHES (CHOOSE 2)", 0, null, null, null),
+ list("Auto-Injector Pouch", 0, /obj/item/storage/pouch/autoinjector, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Bayonet Sheath", 0, /obj/item/storage/pouch/bayonet/upp, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Explosive Pouch", 0, /obj/item/storage/pouch/explosive, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Refillable Injectors)", 0, /obj/item/storage/pouch/firstaid/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Splints, Gauze, Ointment)", 0, /obj/item/storage/pouch/firstaid/full/alternate, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Pill Packets)", 0, /obj/item/storage/pouch/firstaid/full/pills, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Flare Pouch (Full)", 0, /obj/item/storage/pouch/flare/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Large Magazine Pouch", 0, /obj/item/storage/pouch/magazine/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Medium General Pouch", 0, /obj/item/storage/pouch/general/medium, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Pistol Magazine Pouch", 0, /obj/item/storage/pouch/magazine/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+
+ list("ATTACHMENT (CHOOSE 1)", 0, null, null, null),
+ list("Angled Grip", 0, /obj/item/attachable/angledgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Extended Barrel", 0, /obj/item/attachable/extended_barrel, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Laser Sight", 0, /obj/item/attachable/lasersight, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Red-Dot Sight", 0, /obj/item/attachable/reddot, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Reflex Sight", 0, /obj/item/attachable/reflex, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Suppressor", 0, /obj/item/attachable/suppressor, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Vertical Grip", 0, /obj/item/attachable/verticalgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+
+ list("MASK (CHOOSE 1)", 0, null, null, null),
+ list("Gas Mask", 0, /obj/item/clothing/mask/gas/pmc/upp, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
+ list("Heat Absorbent Coif", 0, /obj/item/clothing/mask/rebreather/scarf, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR)
+ )
+
+/datum/equipment_preset/upp/officer/get_antag_gear_equipment()
+ return list(
+ list("SQUAD LEADER SET (MANDATORY)", 0, null, null, null),
+ list("Essential SL Set", 0, /obj/effect/essentials_set/leader/upp, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
+
+ list("GENERAL SUPPLIES", 0, null, null, null),
+ list("Whistle", 5, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR),
+
+ list("ENGINEERING SUPPLIES", 0, null, null, null),
+ list("Entrenching Tool", 2, /obj/item/tool/shovel/etool, null, VENDOR_ITEM_REGULAR),
+ list("Insulated Gloves", 3, /obj/item/clothing/gloves/yellow, null, VENDOR_ITEM_REGULAR),
+ list("Metal x10", 5, /obj/item/stack/sheet/metal/small_stack, null, VENDOR_ITEM_RECOMMENDED),
+ list("Plasteel x10", 7, /obj/item/stack/sheet/plasteel/small_stack, null, VENDOR_ITEM_RECOMMENDED),
+ list("Sandbags x25", 10, /obj/item/stack/sandbags_empty/half, null, VENDOR_ITEM_RECOMMENDED),
+ list("Tools Pouch (Full)", 5, /obj/item/storage/pouch/tools/full, null, VENDOR_ITEM_REGULAR),
+ list("Welding Goggles", 5, /obj/item/clothing/glasses/welding, null, VENDOR_ITEM_REGULAR),
+
+ list("MEDICAL SUPPLIES", 0, null, null, null),
+ list("Burn Kit", 2, /obj/item/stack/medical/advanced/ointment, null, VENDOR_ITEM_REGULAR),
+ list("Trauma Kit", 2, /obj/item/stack/medical/advanced/bruise_pack, null, VENDOR_ITEM_REGULAR),
+ list("Advanced Firstaid Kit", 12, /obj/item/storage/firstaid/adv, null, VENDOR_ITEM_REGULAR),
+ list("Medical Splints", 1, /obj/item/stack/medical/splint, null, VENDOR_ITEM_REGULAR),
+
+ list("Injector (Bicaridine)", 1, /obj/item/reagent_container/hypospray/autoinjector/bicaridine, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Dexalin+)", 1, /obj/item/reagent_container/hypospray/autoinjector/dexalinp, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Inaprovaline)", 1, /obj/item/reagent_container/hypospray/autoinjector/inaprovaline, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Kelotane)", 1, /obj/item/reagent_container/hypospray/autoinjector/kelotane, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Oxycodone)", 2, /obj/item/reagent_container/hypospray/autoinjector/oxycodone, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Tramadol)", 1, /obj/item/reagent_container/hypospray/autoinjector/tramadol, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Tricord)", 1, /obj/item/reagent_container/hypospray/autoinjector/tricord, null, VENDOR_ITEM_REGULAR),
+
+ list("Health Analyzer", 4, /obj/item/device/healthanalyzer, null, VENDOR_ITEM_REGULAR),
+ list("Medical HUD Glasses", 4, /obj/item/clothing/glasses/hud/health, null, VENDOR_ITEM_MANDATORY),
+
+ list("SPECIAL AMMUNITION", 0, null, null, null),
+ list("Type 71 HEAP Magazine (5.45x39mm)", 10, /obj/item/ammo_magazine/rifle/type71/heap , null, VENDOR_ITEM_REGULAR),
+
+ list("ATTACHMENTS", 0, null, null, null),
+ list("Angled Grip", 10, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR),
+ list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR),
+ list("Laser Sight", 10, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR),
+ list("Red-Dot Sight", 10, /obj/item/attachable/reddot, null, VENDOR_ITEM_REGULAR),
+ list("Reflex Sight", 10, /obj/item/attachable/reflex, null, VENDOR_ITEM_REGULAR),
+ list("Suppressor", 10, /obj/item/attachable/suppressor, null, VENDOR_ITEM_REGULAR),
+ list("Vertical Grip", 10, /obj/item/attachable/verticalgrip, null, VENDOR_ITEM_REGULAR),
+
+ list("EXPLOSIVES", 0, null, null, null),
+ list("Plastic Explosive", 5, /obj/item/explosive/plastic, null, VENDOR_ITEM_REGULAR),
+ list("Smoke Grenade", 5, /obj/item/explosive/grenade/smokebomb, null, VENDOR_ITEM_REGULAR),
+ list("Type 6 Shrapnel Grenade", 15, /obj/item/explosive/grenade/high_explosive/upp, null, VENDOR_ITEM_REGULAR),
+ list("Type 8 WP Grenade", 20, /obj/item/explosive/grenade/phosphorus/upp, null, VENDOR_ITEM_REGULAR),
+
+ list("UTILITIES", 0, null, null, null),
+ list("Brown Webbing Vest", 10, /obj/item/clothing/accessory/storage/black_vest/brown_vest, null, VENDOR_ITEM_RECOMMENDED),
+ list("Black Webbing Vest", 10, /obj/item/clothing/accessory/storage/black_vest, null, VENDOR_ITEM_RECOMMENDED),
+ list("Fire Extinguisher (Portable)", 5, /obj/item/tool/extinguisher/mini, null, VENDOR_ITEM_REGULAR),
+ list("Large General Pouch", 10, /obj/item/storage/pouch/general/large, null, VENDOR_ITEM_REGULAR),
+ list("Shoulder Holster", 10, /obj/item/clothing/accessory/storage/holster, null, VENDOR_ITEM_REGULAR),
+ list("Webbing", 10, /obj/item/clothing/accessory/storage/webbing, null, VENDOR_ITEM_REGULAR),
+ list("Drop Pouch", 10, /obj/item/clothing/accessory/storage/droppouch, null, VENDOR_ITEM_REGULAR),
+ )
+
+//*****************************************************************************************************/
+
+/datum/equipment_preset/upp/officer/senior
+ name = "UPP Senior Lieutenant"
+ assignment = JOB_UPP_SRLT_OFFICER
+ rank = JOB_UPP_SRLT_OFFICER
+ role_comm_title = "Sr-Lt."
+ paygrade = "UO2"
+
+/datum/equipment_preset/upp/officer/senior/load_gear(mob/living/carbon/human/new_human)
+ //back
+ new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/upp, WEAR_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector/hacked, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/device/megaphone, WEAR_IN_BACK)
+ //face
+ new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/command, WEAR_L_EAR)
+ //head
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/beret, WEAR_HEAD)
+ //uniform
+ var/obj/item/clothing/under/marine/veteran/UPP/officer/M = new()
+ var/obj/item/clothing/accessory/storage/webbing/W = new()
+ M.attach_accessory(new_human, W)
+ new_human.equip_to_slot_or_del(M, WEAR_BODY)
+ for(var/i in 1 to W.hold.storage_slots)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/ap, WEAR_IN_ACCESSORY)
+
+ //jacket
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/officer, WEAR_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range, WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/stack/medical/bruise_pack, WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/type71/flamer/leader, WEAR_J_STORE)
+ //waist
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/t73, WEAR_WAIST)
+ //limbs
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/upp, WEAR_HANDS)
+ //pockets
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/large, WEAR_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/phosphorus/upp, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/high_explosive/upp, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/high_explosive/upp, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/autoinjector/full, WEAR_R_STORE)
+
+ if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD])
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf/tacticalmask/green, WEAR_FACE)
+
+/datum/equipment_preset/upp/officer/senior/get_antag_clothing_equipment()
+ return list(
+ list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
+ list("Boots", 0, /obj/item/clothing/shoes/marine/upp, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
+ list("Fatigues", 0, /obj/item/clothing/under/marine/veteran/UPP/officer, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
+ list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran/upp, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
+ list("Headset", 0, /obj/item/device/radio/headset/distress/UPP/command, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
+ list("Ration", 0, /obj/item/reagent_container/food/snacks/upp, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
+ list("Combat Pack", 0, /obj/item/storage/backpack/lightpack/upp, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY),
+
+ list("HELMET (CHOOSE 1)", 0, null, null, null),
+ list("Armored Beret", 0, /obj/item/clothing/head/uppcap/beret, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+ list("UM4 Helmet", 0, /obj/item/clothing/head/helmet/marine/veteran/UPP, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED),
+
+ list("ARMOR (CHOOSE 1)", 0, null, null, null),
+ list("UL4 officer jacket", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/officer, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("UL6 Personal Armor", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/support, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
+
+ list("BELT (CHOOSE 1)", 0, null, null, null),
+ list("Type 41 Ammo Load Rig", 0, /obj/item/storage/belt/marine/upp, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("Type 73 Pistol Holster Rig", 0, /obj/item/storage/belt/gun/type47/t73, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+
+ list("POUCHES (CHOOSE 2)", 0, null, null, null),
+ list("Auto-Injector Pouch", 0, /obj/item/storage/pouch/autoinjector, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Bayonet Sheath", 0, /obj/item/storage/pouch/bayonet/upp, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Explosive Pouch", 0, /obj/item/storage/pouch/explosive, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Refillable Injectors)", 0, /obj/item/storage/pouch/firstaid/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Splints, Gauze, Ointment)", 0, /obj/item/storage/pouch/firstaid/full/alternate, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Pill Packets)", 0, /obj/item/storage/pouch/firstaid/full/pills, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Flare Pouch (Full)", 0, /obj/item/storage/pouch/flare/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Large Magazine Pouch", 0, /obj/item/storage/pouch/magazine/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Medium General Pouch", 0, /obj/item/storage/pouch/general/medium, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Pistol Magazine Pouch", 0, /obj/item/storage/pouch/magazine/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+
+ list("ATTACHMENT (CHOOSE 1)", 0, null, null, null),
+ list("Angled Grip", 0, /obj/item/attachable/angledgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Extended Barrel", 0, /obj/item/attachable/extended_barrel, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Laser Sight", 0, /obj/item/attachable/lasersight, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Red-Dot Sight", 0, /obj/item/attachable/reddot, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Reflex Sight", 0, /obj/item/attachable/reflex, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Suppressor", 0, /obj/item/attachable/suppressor, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Vertical Grip", 0, /obj/item/attachable/verticalgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+
+ list("MASK (CHOOSE 1)", 0, null, null, null),
+ list("Gas Mask", 0, /obj/item/clothing/mask/gas/pmc/upp, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
+ list("Heat Absorbent Coif", 0, /obj/item/clothing/mask/rebreather/scarf, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR)
+ )
+
+/datum/equipment_preset/upp/officer/senior/get_antag_gear_equipment()
+ return list(
+ list("SQUAD LEADER SET (MANDATORY)", 0, null, null, null),
+ list("Essential SL Set", 0, /obj/effect/essentials_set/leader/upp, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
+
+ list("GENERAL SUPPLIES", 0, null, null, null),
+ list("Whistle", 5, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR),
+
+ list("ENGINEERING SUPPLIES", 0, null, null, null),
+ list("Entrenching Tool", 2, /obj/item/tool/shovel/etool, null, VENDOR_ITEM_REGULAR),
+ list("Insulated Gloves", 3, /obj/item/clothing/gloves/yellow, null, VENDOR_ITEM_REGULAR),
+ list("Metal x10", 5, /obj/item/stack/sheet/metal/small_stack, null, VENDOR_ITEM_RECOMMENDED),
+ list("Plasteel x10", 7, /obj/item/stack/sheet/plasteel/small_stack, null, VENDOR_ITEM_RECOMMENDED),
+ list("Sandbags x25", 10, /obj/item/stack/sandbags_empty/half, null, VENDOR_ITEM_RECOMMENDED),
+ list("Tools Pouch (Full)", 5, /obj/item/storage/pouch/tools/full, null, VENDOR_ITEM_REGULAR),
+ list("Welding Goggles", 5, /obj/item/clothing/glasses/welding, null, VENDOR_ITEM_REGULAR),
+
+ list("MEDICAL SUPPLIES", 0, null, null, null),
+ list("Burn Kit", 2, /obj/item/stack/medical/advanced/ointment, null, VENDOR_ITEM_REGULAR),
+ list("Trauma Kit", 2, /obj/item/stack/medical/advanced/bruise_pack, null, VENDOR_ITEM_REGULAR),
+ list("Advanced Firstaid Kit", 12, /obj/item/storage/firstaid/adv, null, VENDOR_ITEM_REGULAR),
+ list("Medical Splints", 1, /obj/item/stack/medical/splint, null, VENDOR_ITEM_REGULAR),
+
+ list("Injector (Bicaridine)", 1, /obj/item/reagent_container/hypospray/autoinjector/bicaridine, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Dexalin+)", 1, /obj/item/reagent_container/hypospray/autoinjector/dexalinp, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Inaprovaline)", 1, /obj/item/reagent_container/hypospray/autoinjector/inaprovaline, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Kelotane)", 1, /obj/item/reagent_container/hypospray/autoinjector/kelotane, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Oxycodone)", 2, /obj/item/reagent_container/hypospray/autoinjector/oxycodone, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Tramadol)", 1, /obj/item/reagent_container/hypospray/autoinjector/tramadol, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Tricord)", 1, /obj/item/reagent_container/hypospray/autoinjector/tricord, null, VENDOR_ITEM_REGULAR),
+
+ list("Health Analyzer", 4, /obj/item/device/healthanalyzer, null, VENDOR_ITEM_REGULAR),
+ list("Medical HUD Glasses", 4, /obj/item/clothing/glasses/hud/health, null, VENDOR_ITEM_MANDATORY),
+
+ list("SPECIAL AMMUNITION", 0, null, null, null),
+ list("Type 71 HEAP Magazine (5.45x39mm)", 10, /obj/item/ammo_magazine/rifle/type71/heap , null, VENDOR_ITEM_REGULAR),
+
+ list("ATTACHMENTS", 0, null, null, null),
+ list("Angled Grip", 10, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR),
+ list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR),
+ list("Laser Sight", 10, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR),
+ list("Red-Dot Sight", 10, /obj/item/attachable/reddot, null, VENDOR_ITEM_REGULAR),
+ list("Reflex Sight", 10, /obj/item/attachable/reflex, null, VENDOR_ITEM_REGULAR),
+ list("Suppressor", 10, /obj/item/attachable/suppressor, null, VENDOR_ITEM_REGULAR),
+ list("Vertical Grip", 10, /obj/item/attachable/verticalgrip, null, VENDOR_ITEM_REGULAR),
+
+ list("EXPLOSIVES", 0, null, null, null),
+ list("Plastic Explosive", 5, /obj/item/explosive/plastic, null, VENDOR_ITEM_REGULAR),
+ list("Smoke Grenade", 5, /obj/item/explosive/grenade/smokebomb, null, VENDOR_ITEM_REGULAR),
+ list("Type 6 Shrapnel Grenade", 15, /obj/item/explosive/grenade/high_explosive/upp, null, VENDOR_ITEM_REGULAR),
+ list("Type 8 WP Grenade", 20, /obj/item/explosive/grenade/phosphorus/upp, null, VENDOR_ITEM_REGULAR),
+
+ list("UTILITIES", 0, null, null, null),
+ list("Brown Webbing Vest", 10, /obj/item/clothing/accessory/storage/black_vest/brown_vest, null, VENDOR_ITEM_RECOMMENDED),
+ list("Black Webbing Vest", 10, /obj/item/clothing/accessory/storage/black_vest, null, VENDOR_ITEM_RECOMMENDED),
+ list("Fire Extinguisher (Portable)", 5, /obj/item/tool/extinguisher/mini, null, VENDOR_ITEM_REGULAR),
+ list("Large General Pouch", 10, /obj/item/storage/pouch/general/large, null, VENDOR_ITEM_REGULAR),
+ list("Shoulder Holster", 10, /obj/item/clothing/accessory/storage/holster, null, VENDOR_ITEM_REGULAR),
+ list("Webbing", 10, /obj/item/clothing/accessory/storage/webbing, null, VENDOR_ITEM_REGULAR),
+ list("Drop Pouch", 10, /obj/item/clothing/accessory/storage/droppouch, null, VENDOR_ITEM_REGULAR),
+ )
+
+//*****************************************************************************************************/
+
+/datum/equipment_preset/upp/officer/kapitan
+ name = "UPP Kapitan"
+ assignment = JOB_UPP_KPT_OFFICER
+ rank = JOB_UPP_KPT_OFFICER
+ role_comm_title = "May."
+ paygrade = "UO3"
+ skills = /datum/skills/upp/kapitan
+
+/datum/equipment_preset/upp/officer/kapitan/load_gear(mob/living/carbon/human/new_human)
+ //back
+ new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/upp, WEAR_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector/hacked, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/device/megaphone, WEAR_IN_BACK)
+ //face
+ new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/command, WEAR_L_EAR)
+ //head
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/beret, WEAR_HEAD)
+ //uniform
+ var/obj/item/clothing/under/marine/veteran/UPP/officer/M = new()
+ var/obj/item/clothing/accessory/storage/webbing/W = new()
+ M.attach_accessory(new_human, W)
+ new_human.equip_to_slot_or_del(M, WEAR_BODY)
+ for(var/i in 1 to W.hold.storage_slots)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/ap, WEAR_IN_ACCESSORY)
+
+ //jacket
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/kapitan, WEAR_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range, WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/stack/medical/bruise_pack, WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/type71/flamer/leader, WEAR_J_STORE)
+ //waist
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/t73, WEAR_WAIST)
+ //limbs
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
+ //pockets
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/large, WEAR_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/phosphorus/upp, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/high_explosive/upp, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/high_explosive/upp, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/autoinjector/full, WEAR_R_STORE)
+
+ if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD])
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf/tacticalmask/green, WEAR_FACE)
+
+/datum/equipment_preset/upp/officer/kapitan/get_antag_clothing_equipment()
+ return list(
+ list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
+ list("Boots", 0, /obj/item/clothing/shoes/marine/upp, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
+ list("Fatigues", 0, /obj/item/clothing/under/marine/veteran/UPP/officer, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
+ list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
+ list("Headset", 0, /obj/item/device/radio/headset/distress/UPP/command, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
+ list("Ration", 0, /obj/item/reagent_container/food/snacks/upp, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
+ list("Combat Pack", 0, /obj/item/storage/backpack/lightpack/upp, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY),
+
+ list("HELMET (CHOOSE 1)", 0, null, null, null),
+ list("Beret", 0, /obj/item/clothing/head/uppcap/beret, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+ list("UM4 Helmet", 0, /obj/item/clothing/head/helmet/marine/veteran/UPP, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED),
+
+ list("ARMOR (CHOOSE 1)", 0, null, null, null),
+ list("UL4 senior officer jacket", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/kapitan, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("UL6 Personal Armor", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/support, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
+
+ list("BELT (CHOOSE 1)", 0, null, null, null),
+ list("Type 41 Ammo Load Rig", 0, /obj/item/storage/belt/marine/upp, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("Type 74 Pistol Holster Rig", 0, /obj/item/storage/belt/gun/type47/t73/leader, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+
+ list("POUCHES (CHOOSE 2)", 0, null, null, null),
+ list("Auto-Injector Pouch", 0, /obj/item/storage/pouch/autoinjector, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Bayonet Sheath", 0, /obj/item/storage/pouch/bayonet/upp, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Explosive Pouch", 0, /obj/item/storage/pouch/explosive, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Refillable Injectors)", 0, /obj/item/storage/pouch/firstaid/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Splints, Gauze, Ointment)", 0, /obj/item/storage/pouch/firstaid/full/alternate, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Pill Packets)", 0, /obj/item/storage/pouch/firstaid/full/pills, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Flare Pouch (Full)", 0, /obj/item/storage/pouch/flare/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Large Magazine Pouch", 0, /obj/item/storage/pouch/magazine/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Medium General Pouch", 0, /obj/item/storage/pouch/general/medium, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Medkit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Pistol Magazine Pouch", 0, /obj/item/storage/pouch/magazine/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+
+ list("ATTACHMENT (CHOOSE 1)", 0, null, null, null),
+ list("Angled Grip", 0, /obj/item/attachable/angledgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Extended Barrel", 0, /obj/item/attachable/extended_barrel, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Laser Sight", 0, /obj/item/attachable/lasersight, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Red-Dot Sight", 0, /obj/item/attachable/reddot, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Reflex Sight", 0, /obj/item/attachable/reflex, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Suppressor", 0, /obj/item/attachable/suppressor, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+ list("Vertical Grip", 0, /obj/item/attachable/verticalgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+
+ list("MASK (CHOOSE 1)", 0, null, null, null),
+ list("Gas Mask", 0, /obj/item/clothing/mask/gas/pmc/upp, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
+ list("Heat Absorbent Coif", 0, /obj/item/clothing/mask/rebreather/scarf, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR)
+ )
+
+/datum/equipment_preset/upp/officer/kapitan/get_antag_gear_equipment()
+ return list(
+ list("SQUAD LEADER SET (MANDATORY)", 0, null, null, null),
+ list("Essential SL Set", 0, /obj/effect/essentials_set/leader/upp, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
+
+ list("GENERAL SUPPLIES", 0, null, null, null),
+ list("Whistle", 5, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR),
+
+ list("ENGINEERING SUPPLIES", 0, null, null, null),
+ list("Entrenching Tool", 2, /obj/item/tool/shovel/etool, null, VENDOR_ITEM_REGULAR),
+ list("Insulated Gloves", 3, /obj/item/clothing/gloves/yellow, null, VENDOR_ITEM_REGULAR),
+ list("Metal x10", 5, /obj/item/stack/sheet/metal/small_stack, null, VENDOR_ITEM_RECOMMENDED),
+ list("Plasteel x10", 7, /obj/item/stack/sheet/plasteel/small_stack, null, VENDOR_ITEM_RECOMMENDED),
+ list("Sandbags x25", 10, /obj/item/stack/sandbags_empty/half, null, VENDOR_ITEM_RECOMMENDED),
+ list("Tools Pouch (Full)", 5, /obj/item/storage/pouch/tools/full, null, VENDOR_ITEM_REGULAR),
+ list("Welding Goggles", 5, /obj/item/clothing/glasses/welding, null, VENDOR_ITEM_REGULAR),
+
+ list("MEDICAL SUPPLIES", 0, null, null, null),
+ list("Burn Kit", 2, /obj/item/stack/medical/advanced/ointment, null, VENDOR_ITEM_REGULAR),
+ list("Trauma Kit", 2, /obj/item/stack/medical/advanced/bruise_pack, null, VENDOR_ITEM_REGULAR),
+ list("Advanced Firstaid Kit", 12, /obj/item/storage/firstaid/adv, null, VENDOR_ITEM_REGULAR),
+ list("Medical Splints", 1, /obj/item/stack/medical/splint, null, VENDOR_ITEM_REGULAR),
+
+ list("Injector (Bicaridine)", 1, /obj/item/reagent_container/hypospray/autoinjector/bicaridine, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Dexalin+)", 1, /obj/item/reagent_container/hypospray/autoinjector/dexalinp, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Inaprovaline)", 1, /obj/item/reagent_container/hypospray/autoinjector/inaprovaline, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Kelotane)", 1, /obj/item/reagent_container/hypospray/autoinjector/kelotane, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Oxycodone)", 2, /obj/item/reagent_container/hypospray/autoinjector/oxycodone, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Tramadol)", 1, /obj/item/reagent_container/hypospray/autoinjector/tramadol, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Tricord)", 1, /obj/item/reagent_container/hypospray/autoinjector/tricord, null, VENDOR_ITEM_REGULAR),
+
+ list("Health Analyzer", 4, /obj/item/device/healthanalyzer, null, VENDOR_ITEM_REGULAR),
+ list("Medical HUD Glasses", 4, /obj/item/clothing/glasses/hud/health, null, VENDOR_ITEM_MANDATORY),
list("SPECIAL AMMUNITION", 0, null, null, null),
- list("QYJ-72 Box Magazine (7.62x54mmR)", 15, /obj/item/ammo_magazine/pkp , null, VENDOR_ITEM_RECOMMENDED),
+ list("Type 71 HEAP Magazine (5.45x39mm)", 10, /obj/item/ammo_magazine/rifle/type71/heap , null, VENDOR_ITEM_REGULAR),
- list("ATTACHMENTS (NONE FIT QYJ-72)", 0, null, null, null),
+ list("ATTACHMENTS", 0, null, null, null),
list("Angled Grip", 10, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR),
list("Extended Barrel", 10, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR),
list("Laser Sight", 10, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR),
@@ -777,81 +1581,74 @@
//*****************************************************************************************************/
-/datum/equipment_preset/upp/leader
- name = "UPP Squad Leader"
- flags = EQUIPMENT_PRESET_EXTRA
-
- skills = /datum/skills/upp/SL
- assignment = JOB_UPP_LEADER
- rank = JOB_UPP_LEADER
- role_comm_title = "SL"
- paygrade = "UE6"
+/datum/equipment_preset/upp/officer/major
+ name = "UPP Major"
+ assignment = JOB_UPP_MAY_OFFICER
+ rank = JOB_UPP_MAY_OFFICER
+ role_comm_title = "May."
+ paygrade = "UO4"
+ skills = /datum/skills/upp/commander
-/datum/equipment_preset/upp/leader/load_gear(mob/living/carbon/human/new_human)
- var/UPPleadsidearm = rand(1,4)
+/datum/equipment_preset/upp/officer/major/load_gear(mob/living/carbon/human/new_human)
//back
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/upp, WEAR_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, WEAR_IN_BACK) //0.66
- new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/phosphorus/upp, WEAR_IN_BACK) //1.33
- new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/phosphorus/upp, WEAR_IN_BACK) //2
- new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/phosphorus/upp, WEAR_IN_BACK) //2.66
- new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK) //3.33
- new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK) //4
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/ap, WEAR_IN_BACK) //5
+ new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector/hacked, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/device/megaphone, WEAR_IN_BACK)
//face
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/command, WEAR_L_EAR)
//head
- new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/beret, WEAR_HEAD)
- //body
- var/obj/item/clothing/under/marine/veteran/UPP/UPP = new()
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/peaked, WEAR_HEAD)
+ //uniform
+ var/obj/item/clothing/under/marine/veteran/UPP/officer/M = new()
var/obj/item/clothing/accessory/storage/webbing/W = new()
- UPP.attach_accessory(new_human, W)
- new_human.equip_to_slot_or_del(UPP, WEAR_BODY)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71, WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/ap, WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/ap, WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/heavy, WEAR_JACKET)
+ M.attach_accessory(new_human, W)
+ new_human.equip_to_slot_or_del(M, WEAR_BODY)
+ for(var/i in 1 to W.hold.storage_slots)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/ap, WEAR_IN_ACCESSORY)
+
+ //jacket
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/kapitan, WEAR_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range, WEAR_IN_JACKET)
- new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/type71/flamer, WEAR_J_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/stack/medical/bruise_pack, WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/type71/flamer/leader, WEAR_J_STORE)
//waist
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/t73, WEAR_WAIST)
- switch(UPPleadsidearm)
- if(1 to 2) // 50%
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/t73, WEAR_WAIST)
- if(3) //25%
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/np92, WEAR_WAIST)
- if(4) //25%
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/revolver, WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/t73/leader, WEAR_WAIST)
//limbs
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/upp, WEAR_HANDS)
//pockets
- new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/flamertank, WEAR_R_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher, WEAR_IN_R_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher, WEAR_IN_R_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/ert, WEAR_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/large, WEAR_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/phosphorus/upp, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/high_explosive/upp, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/high_explosive/upp, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/autoinjector/full, WEAR_R_STORE)
if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD])
new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf/tacticalmask/green, WEAR_FACE)
-/datum/equipment_preset/upp/leader/get_antag_clothing_equipment()
+/datum/equipment_preset/upp/officer/major/get_antag_clothing_equipment()
return list(
list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
list("Boots", 0, /obj/item/clothing/shoes/marine/upp, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
- list("Fatigues", 0, /obj/item/clothing/under/marine/veteran/UPP, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
- list("UH7 Heavy Plated Armor", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/heavy, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
- list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
+ list("Fatigues", 0, /obj/item/clothing/under/marine/veteran/UPP/officer, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
+ list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran/upp, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
list("Headset", 0, /obj/item/device/radio/headset/distress/UPP/command, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("Ration", 0, /obj/item/reagent_container/food/snacks/upp, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
list("Combat Pack", 0, /obj/item/storage/backpack/lightpack/upp, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY),
list("HELMET (CHOOSE 1)", 0, null, null, null),
- list("Armored Beret", 0, /obj/item/clothing/head/uppcap/beret, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
- list("UM4 Helmet", 0, /obj/item/clothing/head/helmet/marine/veteran/UPP, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+ list("Peaked Cap", 0, /obj/item/clothing/head/uppcap/peaked, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+ list("UM4 Helmet", 0, /obj/item/clothing/head/helmet/marine/veteran/UPP, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED),
+
+ list("ARMOR (CHOOSE 1)", 0, null, null, null),
+ list("UL4 senior officer jacket", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/kapitan, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("UL6 Personal Armor", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/support, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
list("BELT (CHOOSE 1)", 0, null, null, null),
list("Type 41 Ammo Load Rig", 0, /obj/item/storage/belt/marine/upp, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("Type 41 Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("Type 74 Pistol Holster Rig", 0, /obj/item/storage/belt/gun/type47/t73/leader, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("POUCHES (CHOOSE 2)", 0, null, null, null),
list("Auto-Injector Pouch", 0, /obj/item/storage/pouch/autoinjector, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
@@ -877,11 +1674,11 @@
list("Vertical Grip", 0, /obj/item/attachable/verticalgrip, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
list("MASK (CHOOSE 1)", 0, null, null, null),
- list("Gas Mask", 0, /obj/item/clothing/mask/gas, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
+ list("Gas Mask", 0, /obj/item/clothing/mask/gas/pmc/upp, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
list("Heat Absorbent Coif", 0, /obj/item/clothing/mask/rebreather/scarf, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR)
)
-/datum/equipment_preset/upp/leader/get_antag_gear_equipment()
+/datum/equipment_preset/upp/officer/major/get_antag_gear_equipment()
return list(
list("SQUAD LEADER SET (MANDATORY)", 0, null, null, null),
list("Essential SL Set", 0, /obj/effect/essentials_set/leader/upp, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
@@ -916,7 +1713,7 @@
list("Medical HUD Glasses", 4, /obj/item/clothing/glasses/hud/health, null, VENDOR_ITEM_MANDATORY),
list("SPECIAL AMMUNITION", 0, null, null, null),
- list("Type 71 AP Magazine (5.45x39mm)", 10, /obj/item/ammo_magazine/rifle/type71/ap , null, VENDOR_ITEM_REGULAR),
+ list("Type 71 HEAP Magazine (5.45x39mm)", 10, /obj/item/ammo_magazine/rifle/type71/heap , null, VENDOR_ITEM_REGULAR),
list("ATTACHMENTS", 0, null, null, null),
list("Angled Grip", 10, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR),
@@ -945,65 +1742,74 @@
//*****************************************************************************************************/
-/datum/equipment_preset/upp/military_police
- name = "UPP Military Police"
- flags = EQUIPMENT_PRESET_EXTRA
-
- skills = /datum/skills/upp/military_police
- assignment = JOB_UPP_POLICE
- rank = JOB_UPP_POLICE
- role_comm_title = "MP"
- paygrade = "UE6"
+/datum/equipment_preset/upp/officer/lt_kolonel
+ name = "UPP Leytenant Kolonel"
+ assignment = JOB_UPP_LTKOL_OFFICER
+ rank = JOB_UPP_LTKOL_OFFICER
+ role_comm_title = "Lt. Kol."
+ paygrade = "UO5"
+ skills = /datum/skills/upp/commander
-/datum/equipment_preset/upp/military_police/load_gear(mob/living/carbon/human/new_human)
+/datum/equipment_preset/upp/officer/lt_kolonel/load_gear(mob/living/carbon/human/new_human)
//back
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/upp, WEAR_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector/hacked, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/device/megaphone, WEAR_IN_BACK)
//face
- new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP, WEAR_L_EAR)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc/upp, WEAR_FACE)
+ new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/command, WEAR_L_EAR)
//head
- new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/beret, WEAR_HEAD)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/peaked, WEAR_HEAD)
//uniform
- new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP/mp, WEAR_BODY)
+ var/obj/item/clothing/under/marine/veteran/UPP/officer/M = new()
+ var/obj/item/clothing/accessory/storage/webbing/W = new()
+ M.attach_accessory(new_human, W)
+ new_human.equip_to_slot_or_del(M, WEAR_BODY)
+ for(var/i in 1 to W.hold.storage_slots)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/ap, WEAR_IN_ACCESSORY)
+
//jacket
- new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/mp, WEAR_JACKET)
- new_human.equip_to_slot_or_del(new /obj/item/device/binoculars, WEAR_IN_JACKET)
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/revolver, WEAR_J_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/kapitan, WEAR_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range, WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/stack/medical/bruise_pack, WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/type71/flamer/leader, WEAR_J_STORE)
//waist
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/security/MP/UPP/full, WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/t73/leader, WEAR_WAIST)
//limbs
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
//pockets
- new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/autoinjector/full, WEAR_L_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/medium, WEAR_R_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/device/taperecorder, WEAR_IN_R_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/stack/medical/bruise_pack, WEAR_IN_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/large, WEAR_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/phosphorus/upp, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/high_explosive/upp, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/high_explosive/upp, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/autoinjector/full, WEAR_R_STORE)
-/datum/equipment_preset/upp/military_police/get_antag_clothing_equipment()
+ if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD])
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf/tacticalmask/green, WEAR_FACE)
+
+/datum/equipment_preset/upp/officer/lt_kolonel/get_antag_clothing_equipment()
return list(
list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
list("Boots", 0, /obj/item/clothing/shoes/marine/upp, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
- list("Fatigues", 0, /obj/item/clothing/under/marine/veteran/UPP/mp, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
- list("UL4 camouflaged jacket", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/mp, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
+ list("Fatigues", 0, /obj/item/clothing/under/marine/veteran/UPP/officer, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
- list("Headset", 0, /obj/item/device/radio/headset/distress/UPP, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
+ list("Headset", 0, /obj/item/device/radio/headset/distress/UPP/command, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("Ration", 0, /obj/item/reagent_container/food/snacks/upp, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
list("Combat Pack", 0, /obj/item/storage/backpack/lightpack/upp, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY),
list("HELMET (CHOOSE 1)", 0, null, null, null),
- list("Armored Beret", 0, /obj/item/clothing/head/uppcap/beret, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+ list("Peaked Cap", 0, /obj/item/clothing/head/uppcap/peaked, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
list("UM4 Helmet", 0, /obj/item/clothing/head/helmet/marine/veteran/UPP, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED),
list("ARMOR (CHOOSE 1)", 0, null, null, null),
- list("UL4 camouflaged jacket", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/mp, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("UL4 senior officer jacket", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/kapitan, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
list("UL6 Personal Armor", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/support, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
list("BELT (CHOOSE 1)", 0, null, null, null),
list("Type 41 Ammo Load Rig", 0, /obj/item/storage/belt/marine/upp, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("Type 41 Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("Type 43 Military Police Rig", 0, /obj/item/storage/belt/security/MP/UPP/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("Type 74 Pistol Holster Rig", 0, /obj/item/storage/belt/gun/type47/t73/leader, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("POUCHES (CHOOSE 2)", 0, null, null, null),
list("Auto-Injector Pouch", 0, /obj/item/storage/pouch/autoinjector, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
@@ -1015,7 +1821,7 @@
list("Flare Pouch (Full)", 0, /obj/item/storage/pouch/flare/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("Large Magazine Pouch", 0, /obj/item/storage/pouch/magazine/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Medium General Pouch", 0, /obj/item/storage/pouch/general/medium, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Medkit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("Pistol Magazine Pouch", 0, /obj/item/storage/pouch/magazine/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
@@ -1033,7 +1839,7 @@
list("Heat Absorbent Coif", 0, /obj/item/clothing/mask/rebreather/scarf, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR)
)
-/datum/equipment_preset/upp/military_police/get_antag_gear_equipment()
+/datum/equipment_preset/upp/officer/lt_kolonel/get_antag_gear_equipment()
return list(
list("SQUAD LEADER SET (MANDATORY)", 0, null, null, null),
list("Essential SL Set", 0, /obj/effect/essentials_set/leader/upp, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
@@ -1068,7 +1874,7 @@
list("Medical HUD Glasses", 4, /obj/item/clothing/glasses/hud/health, null, VENDOR_ITEM_MANDATORY),
list("SPECIAL AMMUNITION", 0, null, null, null),
- list("Type 71 AP Magazine (5.45x39mm)", 10, /obj/item/ammo_magazine/rifle/type71/ap , null, VENDOR_ITEM_REGULAR),
+ list("Type 71 HEAP Magazine (5.45x39mm)", 10, /obj/item/ammo_magazine/rifle/type71/heap , null, VENDOR_ITEM_REGULAR),
list("ATTACHMENTS", 0, null, null, null),
list("Angled Grip", 10, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR),
@@ -1097,17 +1903,15 @@
//*****************************************************************************************************/
-/datum/equipment_preset/upp/officer
- name = "UPP Lieutenant"
- flags = EQUIPMENT_PRESET_EXTRA
-
- skills = /datum/skills/upp/officer
- assignment = JOB_UPP_LT_OFFICER
- rank = JOB_UPP_LT_OFFICER
- role_comm_title = "Lt."
- paygrade = "UO1"
+/datum/equipment_preset/upp/officer/kolonel
+ name = "UPP Kolonel"
+ assignment = JOB_UPP_KOL_OFFICER
+ rank = JOB_UPP_KOL_OFFICER
+ role_comm_title = "Kol."
+ paygrade = "UO6"
+ skills = /datum/skills/upp/commander
-/datum/equipment_preset/upp/officer/load_gear(mob/living/carbon/human/new_human)
+/datum/equipment_preset/upp/officer/kolonel/load_gear(mob/living/carbon/human/new_human)
//back
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/upp, WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher, WEAR_IN_BACK)
@@ -1117,7 +1921,7 @@
//face
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/command, WEAR_L_EAR)
//head
- new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/beret, WEAR_HEAD)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/peaked, WEAR_HEAD)
//uniform
var/obj/item/clothing/under/marine/veteran/UPP/officer/M = new()
var/obj/item/clothing/accessory/storage/webbing/W = new()
@@ -1127,15 +1931,15 @@
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/ap, WEAR_IN_ACCESSORY)
//jacket
- new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/officer, WEAR_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/kapitan, WEAR_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range, WEAR_IN_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/stack/medical/bruise_pack, WEAR_IN_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/type71/flamer/leader, WEAR_J_STORE)
//waist
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/np92, WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/t73/leader, WEAR_WAIST)
//limbs
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/upp, WEAR_HANDS)
//pockets
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/large, WEAR_L_STORE)
new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/phosphorus/upp, WEAR_IN_L_STORE)
@@ -1146,27 +1950,27 @@
if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD])
new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf/tacticalmask/green, WEAR_FACE)
-/datum/equipment_preset/upp/officer/get_antag_clothing_equipment()
+/datum/equipment_preset/upp/officer/kolonel/get_antag_clothing_equipment()
return list(
list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
list("Boots", 0, /obj/item/clothing/shoes/marine/upp, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
list("Fatigues", 0, /obj/item/clothing/under/marine/veteran/UPP/officer, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
- list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
+ list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran/upp, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
list("Headset", 0, /obj/item/device/radio/headset/distress/UPP/command, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("Ration", 0, /obj/item/reagent_container/food/snacks/upp, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
list("Combat Pack", 0, /obj/item/storage/backpack/lightpack/upp, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY),
list("HELMET (CHOOSE 1)", 0, null, null, null),
- list("Armored Beret", 0, /obj/item/clothing/head/uppcap/beret, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+ list("Peaked Cap", 0, /obj/item/clothing/head/uppcap/peaked, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
list("UM4 Helmet", 0, /obj/item/clothing/head/helmet/marine/veteran/UPP, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED),
list("ARMOR (CHOOSE 1)", 0, null, null, null),
- list("UL4 officer jacket", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/officer, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("UL4 senior officer jacket", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/kapitan, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
list("UL6 Personal Armor", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/support, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
list("BELT (CHOOSE 1)", 0, null, null, null),
list("Type 41 Ammo Load Rig", 0, /obj/item/storage/belt/marine/upp, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("Type 73 Pistol Holster Rig", 0, /obj/item/storage/belt/gun/type47/t73, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("Type 74 Pistol Holster Rig", 0, /obj/item/storage/belt/gun/type47/t73/leader, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("POUCHES (CHOOSE 2)", 0, null, null, null),
list("Auto-Injector Pouch", 0, /obj/item/storage/pouch/autoinjector, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
@@ -1196,7 +2000,7 @@
list("Heat Absorbent Coif", 0, /obj/item/clothing/mask/rebreather/scarf, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR)
)
-/datum/equipment_preset/upp/officer/get_antag_gear_equipment()
+/datum/equipment_preset/upp/officer/kolonel/get_antag_gear_equipment()
return list(
list("SQUAD LEADER SET (MANDATORY)", 0, null, null, null),
list("Essential SL Set", 0, /obj/effect/essentials_set/leader/upp, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
@@ -1260,14 +2064,15 @@
//*****************************************************************************************************/
-/datum/equipment_preset/upp/officer/senior
- name = "UPP Senior Lieutenant"
- assignment = JOB_UPP_SRLT_OFFICER
- rank = JOB_UPP_SRLT_OFFICER
- role_comm_title = "Sr-Lt."
- paygrade = "UO1E"
+/datum/equipment_preset/upp/officer/may_gen
+ name = "UPP Mayjor General"
+ assignment = JOB_UPP_KOL_OFFICER
+ rank = JOB_UPP_KOL_OFFICER
+ role_comm_title = "May. Gen."
+ paygrade = "UO7"
+ skills = /datum/skills/upp/commander
-/datum/equipment_preset/upp/officer/senior/load_gear(mob/living/carbon/human/new_human)
+/datum/equipment_preset/upp/officer/may_gen/load_gear(mob/living/carbon/human/new_human)
//back
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/upp, WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher, WEAR_IN_BACK)
@@ -1277,7 +2082,7 @@
//face
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/command, WEAR_L_EAR)
//head
- new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/beret, WEAR_HEAD)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/peaked, WEAR_HEAD)
//uniform
var/obj/item/clothing/under/marine/veteran/UPP/officer/M = new()
var/obj/item/clothing/accessory/storage/webbing/W = new()
@@ -1287,12 +2092,12 @@
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71/ap, WEAR_IN_ACCESSORY)
//jacket
- new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/officer, WEAR_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/kapitan, WEAR_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range, WEAR_IN_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/stack/medical/bruise_pack, WEAR_IN_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/type71/flamer/leader, WEAR_J_STORE)
//waist
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/t73, WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/t73/leader, WEAR_WAIST)
//limbs
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
@@ -1306,7 +2111,7 @@
if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD])
new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf/tacticalmask/green, WEAR_FACE)
-/datum/equipment_preset/upp/officer/senior/get_antag_clothing_equipment()
+/datum/equipment_preset/upp/officer/may_gen/get_antag_clothing_equipment()
return list(
list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
list("Boots", 0, /obj/item/clothing/shoes/marine/upp, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
@@ -1317,16 +2122,16 @@
list("Combat Pack", 0, /obj/item/storage/backpack/lightpack/upp, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY),
list("HELMET (CHOOSE 1)", 0, null, null, null),
- list("Armored Beret", 0, /obj/item/clothing/head/uppcap/beret, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+ list("Peaked Cap", 0, /obj/item/clothing/head/uppcap/peaked, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
list("UM4 Helmet", 0, /obj/item/clothing/head/helmet/marine/veteran/UPP, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED),
list("ARMOR (CHOOSE 1)", 0, null, null, null),
- list("UL4 officer jacket", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/officer, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("UL4 senior officer jacket", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/kapitan, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
list("UL6 Personal Armor", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/support, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
list("BELT (CHOOSE 1)", 0, null, null, null),
list("Type 41 Ammo Load Rig", 0, /obj/item/storage/belt/marine/upp, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("Type 73 Pistol Holster Rig", 0, /obj/item/storage/belt/gun/type47/t73, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("Type 74 Pistol Holster Rig", 0, /obj/item/storage/belt/gun/type47/t73/leader, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("POUCHES (CHOOSE 2)", 0, null, null, null),
list("Auto-Injector Pouch", 0, /obj/item/storage/pouch/autoinjector, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
@@ -1338,7 +2143,7 @@
list("Flare Pouch (Full)", 0, /obj/item/storage/pouch/flare/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("Large Magazine Pouch", 0, /obj/item/storage/pouch/magazine/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Medium General Pouch", 0, /obj/item/storage/pouch/general/medium, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Medkit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("Pistol Magazine Pouch", 0, /obj/item/storage/pouch/magazine/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
@@ -1356,7 +2161,7 @@
list("Heat Absorbent Coif", 0, /obj/item/clothing/mask/rebreather/scarf, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR)
)
-/datum/equipment_preset/upp/officer/senior/get_antag_gear_equipment()
+/datum/equipment_preset/upp/officer/may_gen/get_antag_gear_equipment()
return list(
list("SQUAD LEADER SET (MANDATORY)", 0, null, null, null),
list("Essential SL Set", 0, /obj/effect/essentials_set/leader/upp, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
@@ -1420,15 +2225,15 @@
//*****************************************************************************************************/
-/datum/equipment_preset/upp/officer/major
- name = "UPP Major"
- assignment = JOB_UPP_MAY_OFFICER
- rank = JOB_UPP_MAY_OFFICER
- role_comm_title = "May."
- paygrade = "UO3"
+/datum/equipment_preset/upp/officer/ley_gen
+ name = "UPP Leytenant General"
+ assignment = JOB_UPP_KOL_OFFICER
+ rank = JOB_UPP_KOL_OFFICER
+ role_comm_title = "Lt. Gen."
+ paygrade = "UO8"
skills = /datum/skills/upp/commander
-/datum/equipment_preset/upp/officer/major/load_gear(mob/living/carbon/human/new_human)
+/datum/equipment_preset/upp/officer/ley_gen/load_gear(mob/living/carbon/human/new_human)
//back
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/upp, WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher, WEAR_IN_BACK)
@@ -1467,7 +2272,7 @@
if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD])
new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf/tacticalmask/green, WEAR_FACE)
-/datum/equipment_preset/upp/officer/major/get_antag_clothing_equipment()
+/datum/equipment_preset/upp/officer/ley_gen/get_antag_clothing_equipment()
return list(
list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
list("Boots", 0, /obj/item/clothing/shoes/marine/upp, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
@@ -1499,7 +2304,7 @@
list("Flare Pouch (Full)", 0, /obj/item/storage/pouch/flare/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("Large Magazine Pouch", 0, /obj/item/storage/pouch/magazine/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Medium General Pouch", 0, /obj/item/storage/pouch/general/medium, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Medkit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("Pistol Magazine Pouch", 0, /obj/item/storage/pouch/magazine/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
@@ -1517,7 +2322,7 @@
list("Heat Absorbent Coif", 0, /obj/item/clothing/mask/rebreather/scarf, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR)
)
-/datum/equipment_preset/upp/officer/major/get_antag_gear_equipment()
+/datum/equipment_preset/upp/officer/ley_gen/get_antag_gear_equipment()
return list(
list("SQUAD LEADER SET (MANDATORY)", 0, null, null, null),
list("Essential SL Set", 0, /obj/effect/essentials_set/leader/upp, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
@@ -1581,15 +2386,15 @@
//*****************************************************************************************************/
-/datum/equipment_preset/upp/officer/kolonel
- name = "UPP Kolonel"
+/datum/equipment_preset/upp/officer/gen
+ name = "UPP Army General"
assignment = JOB_UPP_KOL_OFFICER
rank = JOB_UPP_KOL_OFFICER
- role_comm_title = "Kol."
- paygrade = "UO5"
+ role_comm_title = "Gen."
+ paygrade = "UO9"
skills = /datum/skills/upp/commander
-/datum/equipment_preset/upp/officer/kolonel/load_gear(mob/living/carbon/human/new_human)
+/datum/equipment_preset/upp/officer/gen/load_gear(mob/living/carbon/human/new_human)
//back
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/upp, WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher, WEAR_IN_BACK)
@@ -1628,7 +2433,7 @@
if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD])
new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf/tacticalmask/green, WEAR_FACE)
-/datum/equipment_preset/upp/officer/kolonel/get_antag_clothing_equipment()
+/datum/equipment_preset/upp/officer/gen/get_antag_clothing_equipment()
return list(
list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
list("Boots", 0, /obj/item/clothing/shoes/marine/upp, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
@@ -1660,7 +2465,7 @@
list("Flare Pouch (Full)", 0, /obj/item/storage/pouch/flare/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("Large Magazine Pouch", 0, /obj/item/storage/pouch/magazine/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Medium General Pouch", 0, /obj/item/storage/pouch/general/medium, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Medkit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("Pistol Magazine Pouch", 0, /obj/item/storage/pouch/magazine/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
@@ -1678,7 +2483,7 @@
list("Heat Absorbent Coif", 0, /obj/item/clothing/mask/rebreather/scarf, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR)
)
-/datum/equipment_preset/upp/officer/kolonel/get_antag_gear_equipment()
+/datum/equipment_preset/upp/officer/gen/get_antag_gear_equipment()
return list(
list("SQUAD LEADER SET (MANDATORY)", 0, null, null, null),
list("Essential SL Set", 0, /obj/effect/essentials_set/leader/upp, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
@@ -1857,7 +2662,7 @@
new_human.equip_to_slot_or_del(new /obj/item/storage/belt/medical/lifesaver/upp/full, WEAR_WAIST)
//limbs
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/upp, WEAR_HANDS)
//póckets
var/obj/item/storage/pouch/magazine/large/ppouch = new()
new_human.equip_to_slot_or_del(ppouch, WEAR_R_STORE)
@@ -1996,7 +2801,7 @@
assignment = JOB_UPP_CONSCRIPT
rank = JOB_UPP_CONSCRIPT
role_comm_title = "Cons"
- paygrade = "UE0"
+ paygrade = "UE1"
/datum/equipment_preset/upp/conscript/load_gear(mob/living/carbon/human/new_human)
//TODO: add backpacks and satchels
@@ -2026,7 +2831,7 @@
//limbs
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
- var/maybegloves = prob(80) ? pick(/obj/item/clothing/gloves/black, /obj/item/clothing/gloves/marine/veteran, /obj/item/clothing/gloves/combat) : null
+ var/maybegloves = prob(80) ? pick(/obj/item/clothing/gloves/black, /obj/item/clothing/gloves/marine/veteran/upp, /obj/item/clothing/gloves/combat) : null
if(maybegloves)
new_human.equip_to_slot_or_del(new maybegloves, WEAR_HANDS)
@@ -2123,7 +2928,7 @@
new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/np92/suppressed, WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/satchel/scout_cloak/upp, WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/upp, WEAR_HANDS)
new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc/upp, WEAR_FACE)
new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/night/m42_night_goggles/upp, WEAR_EYES)
@@ -2145,7 +2950,7 @@
list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
list("Boots", 0, /obj/item/clothing/shoes/marine/upp, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
list("Fatigues", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/commando, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
- list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran/pmc, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
+ list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran/upp, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
list("Headset", 0, /obj/item/device/radio/headset/distress/UPP/kdo, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("Night Vision Goggles", 0, /obj/item/clothing/glasses/night/m42_night_goggles/upp, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_MANDATORY),
list("Ration", 0, /obj/item/reagent_container/food/snacks/upp, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
@@ -2245,7 +3050,7 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap, WEAR_HEAD)
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/satchel/scout_cloak/upp, WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/upp, WEAR_HANDS)
new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc/upp, WEAR_FACE)
new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/night/m42_night_goggles/upp, WEAR_EYES)
@@ -2276,7 +3081,7 @@
list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
list("Boots", 0, /obj/item/clothing/shoes/marine/upp, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
list("Fatigues Medic", 0, /obj/item/clothing/under/marine/veteran/UPP/medic, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
- list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran/pmc, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
+ list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran/upp, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
list("Headset", 0, /obj/item/device/radio/headset/distress/UPP/kdo/medic, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("HealthMate HUD", 0, /obj/item/clothing/glasses/hud/health, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_MANDATORY),
list("Night Vision Goggles", 0, /obj/item/clothing/glasses/night/m42_night_goggles/upp, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_MANDATORY),
@@ -2415,7 +3220,7 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/beret, WEAR_HEAD)
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/satchel/scout_cloak/upp, WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/upp, WEAR_HANDS)
new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc/upp, WEAR_FACE)
new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/night/m42_night_goggles/upp, WEAR_EYES)
@@ -2440,7 +3245,7 @@
list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
list("Boots", 0, /obj/item/clothing/shoes/marine/upp, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
list("Fatigues", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/commando, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
- list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran/pmc, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
+ list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran/upp, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
list("Headset", 0, /obj/item/device/radio/headset/distress/UPP/kdo/command, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("Night Vision Goggles", 0, /obj/item/clothing/glasses/night/m42_night_goggles/upp, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_MANDATORY),
list("Ration", 0, /obj/item/reagent_container/food/snacks/upp, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
@@ -2672,7 +3477,7 @@
assignment = JOB_UPP_LT_DOKTOR
rank = JOB_UPP_LT_DOKTOR
role_comm_title = "Lt. Med."
- paygrade = "UO1M"
+ paygrade = "UO1"
/datum/equipment_preset/upp/doctor/load_gear(mob/living/carbon/human/new_human)
//back
@@ -2701,7 +3506,7 @@
new_human.equip_to_slot_or_del(new /obj/item/reagent_container/hypospray/autoinjector/oxycodone, WEAR_IN_BELT)
//limbs
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/upp, WEAR_HANDS)
//póckets
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/large, WEAR_R_STORE)
new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_R_STORE)
@@ -2722,7 +3527,7 @@
list("Boots", 0, /obj/item/clothing/shoes/marine/upp, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
list("Medic Fatigues", 0, /obj/item/clothing/under/marine/veteran/UPP/medic, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
list("UL6 Personal Armor", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/support, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
- list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
+ list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran/upp, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
list("Headset", 0, /obj/item/device/radio/headset/distress/UPP, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("Ration", 0, /obj/item/reagent_container/food/snacks/upp, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
list("Combat Pack", 0, /obj/item/storage/backpack/lightpack, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY),
diff --git a/code/modules/gear_presets/uscm_ship.dm b/code/modules/gear_presets/uscm_ship.dm
index 7d0a75b7a34a..4c383cfed6d9 100644
--- a/code/modules/gear_presets/uscm_ship.dm
+++ b/code/modules/gear_presets/uscm_ship.dm
@@ -345,7 +345,7 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/qm_suit(new_human), WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine(new_human), WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/yellow(new_human), WEAR_HANDS)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/head/cmcap/req(new_human), WEAR_HEAD)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/head/cmcap/req/ro(new_human), WEAR_HEAD)
new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/flash(new_human), WEAR_L_STORE)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/large(new_human), WEAR_R_STORE)
@@ -377,7 +377,7 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine(new_human), WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/yellow(new_human), WEAR_HANDS)
new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/full(new_human), WEAR_WAIST)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beanie(new_human), WEAR_HEAD)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/head/cmcap/req(new_human), WEAR_HEAD)
new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/medium(new_human), WEAR_R_STORE)
@@ -404,20 +404,20 @@
minimap_icon = list("cic" = MINIMAP_ICON_COLOR_COMMANDER)
minimap_background = MINIMAP_ICON_BACKGROUND_CIC
- utility_under = list(/obj/item/clothing/under/marine,/obj/item/clothing/under/marine/officer/command)
+ utility_under = list(/obj/item/clothing/under/marine, /obj/item/clothing/under/marine/officer/command, /obj/item/clothing/under/marine/officer/boiler)
utility_hat = list(/obj/item/clothing/head/cmcap,/obj/item/clothing/head/beret/cm/tan)
utility_extra = list(/obj/item/clothing/glasses/sunglasses,/obj/item/clothing/glasses/sunglasses/big,/obj/item/clothing/glasses/sunglasses/aviator,/obj/item/clothing/glasses/mbcg)
service_under = list(/obj/item/clothing/under/marine/officer/formal/white, /obj/item/clothing/under/marine/officer/formal/black)
service_shoes = list(/obj/item/clothing/shoes/dress/commander)
service_extra = list(/obj/item/clothing/suit/storage/jacket/marine/dress/officer/bomber)
- service_hat = list(/obj/item/clothing/head/beret/cm, /obj/item/clothing/head/beret/marine/commander/dress, /obj/item/clothing/head/beret/marine/commander/black)
+ service_hat = list(/obj/item/clothing/head/beret/cm, /obj/item/clothing/head/beret/marine/commander/dress, /obj/item/clothing/head/beret/marine/commander/black, /obj/item/clothing/head/marine/peaked/service)
dress_under = list(/obj/item/clothing/under/marine/dress, /obj/item/clothing/under/marine/officer/formal/servicedress)
dress_extra = list(/obj/item/storage/large_holster/ceremonial_sword/full)
- dress_hat = list(/obj/item/clothing/head/marine/peaked/captain/white, /obj/item/clothing/head/marine/peaked/captain/black)
+ dress_hat = list(/obj/item/clothing/head/marine/peaked/captain/white, /obj/item/clothing/head/marine/peaked/captain/black, /obj/item/clothing/head/marine/peaked)
dress_shoes = list(/obj/item/clothing/shoes/dress/commander)
- dress_over = list(/obj/item/clothing/suit/storage/jacket/marine/dress/officer/white, /obj/item/clothing/suit/storage/jacket/marine/dress/officer/black, /obj/item/clothing/suit/storage/jacket/marine/dress/officer/suit)
+ dress_over = list(/obj/item/clothing/suit/storage/jacket/marine/dress/officer/white, /obj/item/clothing/suit/storage/jacket/marine/dress/officer/black, /obj/item/clothing/suit/storage/jacket/marine/dress/officer/suit, /obj/item/clothing/suit/storage/jacket/marine/dress)
/datum/equipment_preset/uscm_ship/commander/New()
. = ..()
@@ -524,10 +524,10 @@
back_item = /obj/item/storage/backpack/marine
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/almayer/mcom/cdrcom(new_human), WEAR_L_EAR)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/exec(new_human), WEAR_BODY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/bridge(new_human), WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/jacket/marine/service(new_human), WEAR_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/dress(new_human), WEAR_FEET)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/head/cmcap(new_human), WEAR_HEAD)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/head/marine/peaked/service(new_human), WEAR_HEAD)
new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/large(new_human), WEAR_L_STORE)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/large(new_human), WEAR_R_STORE)
@@ -560,7 +560,7 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/bridge(new_human), WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/dress(new_human), WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/mod88(new_human), WEAR_WAIST)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/head/cmcap/ro(new_human), WEAR_HEAD)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/head/cmcap/bridge(new_human), WEAR_HEAD)
new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/large(new_human), WEAR_L_STORE)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/large(new_human), WEAR_R_STORE)
diff --git a/code/modules/gear_presets/wo.dm b/code/modules/gear_presets/wo.dm
index aedd035710f3..c330bbc76502 100644
--- a/code/modules/gear_presets/wo.dm
+++ b/code/modules/gear_presets/wo.dm
@@ -120,7 +120,7 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/cmcap(new_human), WEAR_HEAD)
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/almayer/mcom/cdrcom(new_human), WEAR_L_EAR)
//uniform
- new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/exec(new_human), WEAR_BODY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/bridge(new_human), WEAR_BODY)
//jacket
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/MP/SO(new_human), WEAR_JACKET)
//waist
@@ -150,7 +150,7 @@
/datum/equipment_preset/wo/cmp/load_gear(mob/living/carbon/human/new_human)
//uniform
- new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/bridge(new_human), WEAR_BODY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/boiler(new_human), WEAR_BODY)
//jacket
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/weapon/gun/smartgun(new_human), WEAR_J_STORE)
@@ -195,7 +195,7 @@
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/almayer/marine/mp_honor/com(new_human), WEAR_L_EAR)
new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/aviator(new_human), WEAR_EYES)
//uniform
- new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/bridge(new_human), WEAR_BODY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/boiler(new_human), WEAR_BODY)
//jacket
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/leader(new_human), WEAR_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/m41aMK1(new_human), WEAR_J_STORE)
@@ -237,7 +237,7 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/aviator(new_human), WEAR_EYES)
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beret/marine/logisticsofficer(new_human), WEAR_HEAD)
//uniform
- new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/bridge(new_human), WEAR_BODY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/boiler(new_human), WEAR_BODY)
//waist
new_human.equip_to_slot_or_del(new /obj/item/storage/large_holster/m39/full(new_human), WEAR_WAIST)
//limbs
@@ -270,7 +270,7 @@
back_item = /obj/item/storage/backpack/security
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/almayer/marine/mp_honor(new_human), WEAR_L_EAR)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/bridge(new_human), WEAR_BODY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/boiler(new_human), WEAR_BODY)
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/clothing/gloves/marine/officer(new_human), WEAR_HANDS)
new_human.equip_to_slot_or_del(new /obj/item/storage/belt/shotgun/full(new_human), WEAR_WAIST)
diff --git a/code/modules/maptext_alerts/screen_alerts.dm b/code/modules/maptext_alerts/screen_alerts.dm
index 6d251080e87b..820c64301bc2 100644
--- a/code/modules/maptext_alerts/screen_alerts.dm
+++ b/code/modules/maptext_alerts/screen_alerts.dm
@@ -66,7 +66,7 @@
///proc for actually playing this screen_text on a mob.
/atom/movable/screen/text/screen_text/proc/play_to_client()
- player?.screen += src
+ player?.add_to_screen(src)
if(fade_in_time)
animate(src, alpha = 255)
var/list/lines_to_skip = list()
@@ -106,7 +106,7 @@
qdel(src)
return
- player.screen -= src
+ player.remove_from_screen(src)
LAZYREMOVE(player.screen_texts, src)
qdel(src)
@@ -196,7 +196,7 @@
alerts -= category
if(client && hud_used)
hud_used.reorganize_alerts()
- client.screen -= alert
+ client.remove_from_screen(alert)
qdel(alert)
/atom/movable/screen/alert
@@ -243,6 +243,6 @@
if(gotten_turf)
ghost_user.forceMove(gotten_turf)
if(NOTIFY_ORBIT)
- ghost_user.ManualFollow(target)
+ ghost_user.do_observe(target)
if(NOTIFY_JOIN_XENO)
ghost_user.join_as_alien()
diff --git a/code/modules/maptext_alerts/text_blurbs.dm b/code/modules/maptext_alerts/text_blurbs.dm
index 4cc4d1980115..c942543f88df 100644
--- a/code/modules/maptext_alerts/text_blurbs.dm
+++ b/code/modules/maptext_alerts/text_blurbs.dm
@@ -136,7 +136,7 @@ but should see their own spawn message even if the player already dropped as USC
if(!ignore_key && (M.key in GLOB.blurb_witnesses[blurb_key]))
continue
LAZYDISTINCTADD(GLOB.blurb_witnesses[blurb_key], M.key)
- M.client?.screen += T
+ M.client?.add_to_screen(T)
for(var/i in 1 to length(message) + 1)
if(i in linebreaks)
@@ -154,5 +154,5 @@ but should see their own spawn message even if the player already dropped as USC
animate(T, alpha = 0, time = 0.5 SECONDS)
sleep(5)
for(var/mob/M as anything in targets)
- M.client?.screen -= T
+ M.client?.remove_from_screen(T)
qdel(T)
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 21a992693aa8..1202ca10260d 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -49,8 +49,10 @@
var/updatedir = TRUE //Do we have to update our dir as the ghost moves around?
var/atom/movable/following = null
var/datum/orbit_menu/orbit_menu
- /// The target mob that the ghost is observing. Used as a reference in logout()
- var/mob/observetarget = null
+ /// The target mob that the ghost is observing.
+ var/mob/observe_target_mob = null
+ /// The target client that the ghost is observing.
+ var/client/observe_target_client = null
var/datum/health_scan/last_health_display
var/ghost_orbit = GHOST_ORBIT_CIRCLE
var/own_orbit_size = 0
@@ -152,31 +154,108 @@
lighting_alpha = LIGHTING_PLANE_ALPHA_INVISIBLE
update_sight()
-/mob/dead/observer/proc/clean_observetarget()
+/// Removes all signals and data related to the observe target and resets observer's HUD/eye
+/mob/dead/observer/proc/clean_observe_target()
SIGNAL_HANDLER
- UnregisterSignal(observetarget, COMSIG_PARENT_QDELETING)
- if(observetarget?.observers)
- observetarget.observers -= src
- UNSETEMPTY(observetarget.observers)
- observetarget = null
+
+ UnregisterSignal(observe_target_mob, COMSIG_PARENT_QDELETING)
+ UnregisterSignal(observe_target_mob, COMSIG_MOB_GHOSTIZE)
+ UnregisterSignal(observe_target_mob, COMSIG_MOB_NEW_MIND)
+ UnregisterSignal(observe_target_mob, COMSIG_MOB_LOGIN)
+
+ if(observe_target_client)
+ UnregisterSignal(observe_target_client, COMSIG_CLIENT_SCREEN_ADD)
+ UnregisterSignal(observe_target_client, COMSIG_CLIENT_SCREEN_REMOVE)
+
+ if(observe_target_mob?.observers)
+ observe_target_mob.observers -= src
+ UNSETEMPTY(observe_target_mob.observers)
+
+ observe_target_mob = null
+ observe_target_client = null
+
client.eye = src
hud_used.show_hud(hud_used.hud_version, src)
UnregisterSignal(src, COMSIG_MOVABLE_MOVED)
+/// When the observer moves we disconnect from the observe target if we aren't on the same turf
/mob/dead/observer/proc/observer_move_react()
SIGNAL_HANDLER
- if(src.loc == get_turf(observetarget))
+
+ if(loc == get_turf(observe_target_mob))
+ return
+ clean_observe_target()
+
+/// When the observer target gets a screen, our observer gets a screen minus some game screens we don't want the observer to touch
+/mob/dead/observer/proc/observe_target_screen_add(observe_target_mob_client, add_to_screen)
+ SIGNAL_HANDLER
+
+ if(!client)
+ return
+
+ if(istype(add_to_screen, /atom/movable/screen/action_button))
+ return
+
+ if(istype(add_to_screen, /atom/movable/screen/fullscreen))
return
- clean_observetarget()
+
+ if(istype(add_to_screen, /atom/movable/screen/click_catcher))
+ return
+
+ if(istype(add_to_screen, /atom/movable/screen/escape_menu))
+ return
+
+ if(istype(add_to_screen, /obj/effect/detector_blip))
+ return
+
+ client.add_to_screen(add_to_screen)
+
+/// When the observer target loses a screen, our observer loses it as well
+/mob/dead/observer/proc/observe_target_screen_remove(observe_target_mob_client, remove_from_screen)
+ SIGNAL_HANDLER
+
+ if(!client)
+ return
+
+ client.remove_from_screen(remove_from_screen)
+
+/// When the observe target ghosts our observer disconnect from their screen updates
+/mob/dead/observer/proc/observe_target_ghosting(mob/observer_target_mob)
+ SIGNAL_HANDLER
+
+ if(observe_target_client) //Should never not have one if ghostizing but maaaybe?
+ UnregisterSignal(observe_target_client, COMSIG_CLIENT_SCREEN_ADD)
+ UnregisterSignal(observe_target_client, COMSIG_CLIENT_SCREEN_REMOVE)
+
+/// When the observe target gets a new mind our observer connects to the new client's screens
+/mob/dead/observer/proc/observe_target_new_mind(mob/living/new_character, client/new_client)
+ SIGNAL_HANDLER
+
+ if(observe_target_client != new_client)
+ observe_target_client = new_client
+
+ RegisterSignal(observe_target_client, COMSIG_CLIENT_SCREEN_ADD, PROC_REF(observe_target_screen_add))
+ RegisterSignal(observe_target_client, COMSIG_CLIENT_SCREEN_REMOVE, PROC_REF(observe_target_screen_remove))
+
+/// When the observe target logs in our observer connect to the new client
+/mob/dead/observer/proc/observe_target_login(mob/living/new_character)
+ SIGNAL_HANDLER
+
+ if(observe_target_client != new_character.client)
+ observe_target_client = new_character.client
+
+ RegisterSignal(observe_target_client, COMSIG_CLIENT_SCREEN_ADD, PROC_REF(observe_target_screen_add))
+ RegisterSignal(observe_target_client, COMSIG_CLIENT_SCREEN_REMOVE, PROC_REF(observe_target_screen_remove))
///makes the ghost see the target hud and sets the eye at the target.
/mob/dead/observer/proc/do_observe(mob/target)
if(!client || !target || !istype(target))
return
- //I do not give a singular flying fuck about not being able to see xeno huds, literally only human huds are useful to see
- if(!ishuman(target))
- ManualFollow(target)
+ ManualFollow(target)
+ reset_perspective()
+
+ if(!ishuman(target) || !client.prefs?.auto_observe)
return
client.eye = target
@@ -188,13 +267,45 @@
LAZYINITLIST(target.observers)
target.observers |= src
target.hud_used.show_hud(target.hud_used.hud_version, src)
- observetarget = target
- RegisterSignal(observetarget, COMSIG_PARENT_QDELETING, PROC_REF(clean_observetarget))
+
+ var/mob/living/carbon/human/human_target = target
+
+ var/list/target_contents = human_target.get_contents()
+
+ //Handles any currently open storage containers the target is looking in when we observe
+ for(var/obj/item/storage/checked_storage in target_contents)
+ if(!(target in checked_storage.content_watchers))
+ continue
+
+ client.add_to_screen(checked_storage.closer)
+ client.add_to_screen(checked_storage.contents)
+
+ if(checked_storage.storage_slots)
+ client.add_to_screen(checked_storage.boxes)
+ else
+ client.add_to_screen(checked_storage.storage_start)
+ client.add_to_screen(checked_storage.storage_continue)
+ client.add_to_screen(checked_storage.storage_end)
+
+ break
+
+ observe_target_mob = target
+ RegisterSignal(observe_target_mob, COMSIG_PARENT_QDELETING, PROC_REF(clean_observe_target))
+ RegisterSignal(observe_target_mob, COMSIG_MOB_GHOSTIZE, PROC_REF(observe_target_ghosting))
+ RegisterSignal(observe_target_mob, COMSIG_MOB_NEW_MIND, PROC_REF(observe_target_new_mind))
+ RegisterSignal(observe_target_mob, COMSIG_MOB_LOGIN, PROC_REF(observe_target_login))
+
RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(observer_move_react))
+ if(target.client)
+ observe_target_client = target.client
+ RegisterSignal(observe_target_client, COMSIG_CLIENT_SCREEN_ADD, PROC_REF(observe_target_screen_add))
+ RegisterSignal(observe_target_client, COMSIG_CLIENT_SCREEN_REMOVE, PROC_REF(observe_target_screen_remove))
+ return
+
/mob/dead/observer/reset_perspective(atom/A)
- if(observetarget)
- clean_observetarget()
+ if(observe_target_mob)
+ clean_observe_target()
. = ..()
if(!.)
@@ -213,12 +324,16 @@
client.move_delay = MINIMAL_MOVEMENT_INTERVAL
+ if(observe_target_mob)
+ clean_observe_target()
+
/mob/dead/observer/Destroy()
QDEL_NULL(orbit_menu)
QDEL_NULL(last_health_display)
GLOB.observer_list -= src
following = null
- observetarget = null
+ observe_target_mob = null
+ observe_target_client = null
return ..()
/mob/dead/observer/MouseDrop(atom/A)
@@ -240,8 +355,10 @@
A.reenter_corpse()
if(href_list["track"])
var/mob/target = locate(href_list["track"]) in GLOB.mob_list
- if(target)
- ManualFollow(target)
+ if(!target)
+ return
+ do_observe(target)
+
if(href_list[XENO_OVERWATCH_TARGET_HREF])
var/mob/target = locate(href_list[XENO_OVERWATCH_TARGET_HREF]) in GLOB.living_xeno_list
if(target)
@@ -326,6 +443,9 @@ Works together with spawning an observer, noted above.
return
if(aghosted)
src.aghosted = TRUE
+
+ SEND_SIGNAL(src, COMSIG_MOB_GHOSTIZE)
+
var/mob/dead/observer/ghost = new(loc, src) //Transfer safety to observer spawning proc.
ghost.can_reenter_corpse = can_reenter_corpse
ghost.timeofdeath = timeofdeath //BS12 EDIT
@@ -581,8 +701,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
set name = "Follow Local Mob"
set desc = "Follow on-screen mob"
- ManualFollow(target)
- return
+ do_observe(target)
/mob/dead/observer/verb/follow()
set category = "Ghost.Follow"
diff --git a/code/modules/mob/dead/observer/orbit.dm b/code/modules/mob/dead/observer/orbit.dm
index d9d4d4eddad0..06e404a43555 100644
--- a/code/modules/mob/dead/observer/orbit.dm
+++ b/code/modules/mob/dead/observer/orbit.dm
@@ -23,26 +23,26 @@
switch(action)
if("orbit")
var/ref = params["ref"]
- var/auto_observe = params["auto_observe"]
var/atom/movable/poi = locate(ref) in GLOB.mob_list
if (poi == null)
poi = locate(ref) in GLOB.all_multi_vehicles
if (poi == null)
. = TRUE
return
- owner.ManualFollow(poi)
- owner.reset_perspective(null)
- if(auto_observe)
- owner.do_observe(poi)
+ owner.do_observe(poi)
. = TRUE
if("refresh")
update_static_data(owner)
. = TRUE
-
-
+ if("toggle_auto_observe")
+ ui.user.client?.prefs?.auto_observe = !ui.user?.client?.prefs.auto_observe
+ ui.user.client?.prefs?.save_preferences()
+ . = TRUE
/datum/orbit_menu/ui_data(mob/user)
var/list/data = list()
+
+ data["auto_observe"] = user.client?.prefs?.auto_observe
return data
/datum/orbit_menu/ui_static_data(mob/user)
diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm
index 6505354a0b6e..933e9490d39e 100644
--- a/code/modules/mob/inventory.dm
+++ b/code/modules/mob/inventory.dm
@@ -211,7 +211,8 @@
update_inv_l_hand()
if (client)
- client.screen -= I
+ client.remove_from_screen(I)
+
I.layer = initial(I.layer)
I.plane = initial(I.plane)
if(newloc)
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index e7e36242a90a..fd9c786bd147 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -358,7 +358,7 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate,
remove_overlay(UNIFORM_LAYER)
if(w_uniform)
if(client && hud_used && hud_used.hud_shown && hud_used.inventory_shown && hud_used.ui_datum)
- client.screen += w_uniform
+ client.add_to_screen(w_uniform)
w_uniform.screen_loc = hud_used.ui_datum.hud_slot_offset(w_uniform, hud_used.ui_datum.ui_iclothing)
if(!(wear_suit && wear_suit.flags_inv_hide & HIDEJUMPSUIT))
@@ -375,7 +375,7 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate,
if(!wear_id)
return
if(client && hud_used && hud_used.hud_shown && hud_used.ui_datum)
- client.screen += wear_id
+ client.add_to_screen(wear_id)
wear_id.screen_loc = hud_used.ui_datum.hud_slot_offset(wear_id, hud_used.ui_datum.ui_id)
if(!wear_id.pinned_on_uniform || (w_uniform && w_uniform.displays_id && !(w_uniform.flags_jumpsuit & UNIFORM_JACKET_REMOVED)))
@@ -389,7 +389,7 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate,
var/image/I
if(gloves)
if(client && hud_used && hud_used.hud_shown && hud_used.inventory_shown && hud_used.ui_datum)
- client.screen += gloves
+ client.add_to_screen(gloves)
gloves.screen_loc = hud_used.ui_datum.hud_slot_offset(gloves, hud_used.ui_datum.ui_gloves)
if(!(wear_suit && wear_suit.flags_inv_hide & HIDEGLOVES))
@@ -408,7 +408,7 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate,
remove_overlay(GLASSES_LAYER)
if(glasses)
if(client && hud_used && hud_used.hud_shown && hud_used.inventory_shown && hud_used.ui_datum)
- client.screen += glasses
+ client.add_to_screen(glasses)
glasses.screen_loc = hud_used.ui_datum.hud_slot_offset(glasses, hud_used.ui_datum.ui_glasses)
var/image/I = glasses.get_mob_overlay(src, WEAR_EYES)
@@ -423,9 +423,9 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate,
if(wear_l_ear || wear_r_ear)
if(client && hud_used && hud_used.hud_shown && hud_used.inventory_shown && hud_used.ui_datum)
if(wear_l_ear)
- client.screen += wear_l_ear
+ client.add_to_screen(wear_l_ear)
if(wear_r_ear)
- client.screen += wear_r_ear
+ client.add_to_screen(wear_r_ear)
wear_l_ear?.screen_loc = hud_used.ui_datum.hud_slot_offset(wear_l_ear, hud_used.ui_datum.ui_wear_l_ear)
wear_r_ear?.screen_loc = hud_used.ui_datum.hud_slot_offset(wear_r_ear, hud_used.ui_datum.ui_wear_r_ear)
@@ -444,7 +444,7 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate,
var/image/I
if(shoes)
if(client && hud_used && hud_used.hud_shown && hud_used.inventory_shown && hud_used.ui_datum)
- client.screen += shoes
+ client.add_to_screen(shoes)
shoes.screen_loc = hud_used.ui_datum.hud_slot_offset(shoes, hud_used.ui_datum.ui_shoes)
if(!((wear_suit && wear_suit.flags_inv_hide & HIDESHOES) || (w_uniform && w_uniform.flags_inv_hide & HIDESHOES)))
@@ -463,7 +463,7 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate,
remove_overlay(SUIT_STORE_LAYER)
if(s_store)
if(client && hud_used && hud_used.hud_shown && hud_used.ui_datum)
- client.screen += s_store
+ client.add_to_screen(s_store)
s_store.screen_loc = hud_used.ui_datum.hud_slot_offset(s_store, hud_used.ui_datum.ui_sstore1)
var/image/I = s_store.get_mob_overlay(src, WEAR_J_STORE)
@@ -483,7 +483,7 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate,
if(head)
if(client && hud_used && hud_used.hud_shown && hud_used.inventory_shown && hud_used.ui_datum)
- client.screen += head
+ client.add_to_screen(head)
head.screen_loc = hud_used.ui_datum.hud_slot_offset(head, hud_used.ui_datum.ui_head)
var/image/I = head.get_mob_overlay(src, WEAR_HEAD)
@@ -528,7 +528,7 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate,
if(!belt)
return
if(client && hud_used && hud_used.hud_shown && hud_used.ui_datum)
- client.screen += belt
+ client.add_to_screen(belt)
belt.screen_loc = hud_used.ui_datum.hud_slot_offset(belt, hud_used.ui_datum.ui_belt)
var/image/I = belt.get_mob_overlay(src, WEAR_WAIST)
@@ -545,7 +545,7 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate,
if(wear_suit)
if(client && hud_used && hud_used.hud_shown && hud_used.inventory_shown && hud_used.ui_datum)
- client.screen += wear_suit
+ client.add_to_screen(wear_suit)
wear_suit.screen_loc = hud_used.ui_datum.hud_slot_offset(wear_suit, hud_used.ui_datum.ui_oclothing)
var/image/I = wear_suit.get_mob_overlay(src, WEAR_JACKET)
@@ -597,10 +597,10 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate,
return
if(l_store)
- client.screen += l_store
+ client.add_to_screen(l_store)
l_store.screen_loc = hud_used.ui_datum.hud_slot_offset(l_store, hud_used.ui_datum.ui_storage1)
if(r_store)
- client.screen += r_store
+ client.add_to_screen(r_store)
r_store.screen_loc = hud_used.ui_datum.hud_slot_offset(r_store, hud_used.ui_datum.ui_storage2)
@@ -609,7 +609,7 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate,
if(!wear_mask)
return
if(client && hud_used && hud_used.hud_shown && hud_used.inventory_shown && hud_used.ui_datum)
- client.screen += wear_mask
+ client.add_to_screen(wear_mask)
wear_mask.screen_loc = hud_used.ui_datum.hud_slot_offset(wear_mask, hud_used.ui_datum.ui_mask)
if(!(head && head.flags_inv_hide & HIDEMASK))
@@ -623,7 +623,7 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate,
if(!back)
return
if(client && hud_used && hud_used.hud_shown && hud_used.ui_datum)
- client.screen += back
+ client.add_to_screen(back)
back.screen_loc = hud_used.ui_datum.hud_slot_offset(back, hud_used.ui_datum.ui_back)
var/image/I = back.get_mob_overlay(src, WEAR_BACK)
@@ -661,7 +661,7 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate,
if(!r_hand)
return
if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD && hud_used.ui_datum)
- client.screen += r_hand
+ client.add_to_screen(r_hand)
r_hand.screen_loc = hud_used.ui_datum.hud_slot_offset(r_hand, hud_used.ui_datum.ui_rhand)
var/image/I = r_hand.get_mob_overlay(src, WEAR_R_HAND)
@@ -676,7 +676,7 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate,
if(!l_hand)
return
if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD && hud_used.ui_datum)
- client.screen += l_hand
+ client.add_to_screen(l_hand)
l_hand.screen_loc = hud_used.ui_datum.hud_slot_offset(l_hand, hud_used.ui_datum.ui_lhand)
var/image/I = l_hand.get_mob_overlay(src, WEAR_L_HAND)
diff --git a/code/modules/mob/living/carbon/xenomorph/update_icons.dm b/code/modules/mob/living/carbon/xenomorph/update_icons.dm
index 477ead761474..30e78a5fed94 100644
--- a/code/modules/mob/living/carbon/xenomorph/update_icons.dm
+++ b/code/modules/mob/living/carbon/xenomorph/update_icons.dm
@@ -97,11 +97,11 @@
var/datum/custom_hud/alien/ui_datum = GLOB.custom_huds_list[HUD_ALIEN]
if(l_store)
if(client && hud_used && hud_used.hud_shown)
- client.screen += l_store
+ client.add_to_screen(l_store)
l_store.screen_loc = ui_datum.hud_slot_offset(l_store, ui_datum.ui_storage1)
if(r_store)
if(client && hud_used && hud_used.hud_shown)
- client.screen += r_store
+ client.add_to_screen(r_store)
r_store.screen_loc = ui_datum.hud_slot_offset(r_store, ui_datum.ui_storage2)
/mob/living/carbon/xenomorph/update_inv_r_hand()
@@ -109,7 +109,7 @@
if(r_hand)
if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD)
var/datum/custom_hud/alien/ui_datum = GLOB.custom_huds_list[HUD_ALIEN]
- client.screen += r_hand
+ client.add_to_screen(r_hand)
r_hand.screen_loc = ui_datum.hud_slot_offset(r_hand, ui_datum.ui_rhand)
var/t_state = r_hand.item_state
if(!t_state)
@@ -122,7 +122,7 @@
if(l_hand)
if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD)
var/datum/custom_hud/alien/ui_datum = GLOB.custom_huds_list[HUD_ALIEN]
- client.screen += l_hand
+ client.add_to_screen(l_hand)
l_hand.screen_loc = ui_datum.hud_slot_offset(l_hand, ui_datum.ui_lhand)
var/t_state = l_hand.item_state
if(!t_state)
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 059b50e4e9ee..1190e55925a1 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -95,43 +95,26 @@
//Recursive function to find everything a mob is holding.
-/mob/living/get_contents(obj/item/storage/Storage = null)
- var/list/L = list()
+/mob/living/get_contents(obj/passed_object, recursion = 0)
+ var/list/total_contents = list()
- if(Storage) //If it called itself
- L += Storage.return_inv()
+ if(passed_object)
+ if(recursion > 8)
+ debug_log("Recursion went long for get_contents() for [src] ending at the object [passed_object]. Likely object_one is holding object_two which is holding object_one ad naseum.")
+ return total_contents
- //Leave this commented out, it will cause storage items to exponentially add duplicate to the list
- //for(var/obj/item/storage/S in Storage.return_inv()) //Check for storage items
- // L += get_contents(S)
+ total_contents += passed_object.contents
- for(var/obj/item/gift/G in Storage.return_inv()) //Check for gift-wrapped items
- L += G.gift
- if(isstorage(G.gift))
- L += get_contents(G.gift)
+ for(var/obj/checked_object in total_contents)
+ total_contents += get_contents(checked_object, recursion + 1)
- for(var/obj/item/smallDelivery/D in Storage.return_inv()) //Check for package wrapped items
- L += D.wrapped
- if(isstorage(D.wrapped)) //this should never happen
- L += get_contents(D.wrapped)
- return L
+ return total_contents
- else
-
- L += src.contents
- for(var/obj/item/storage/S in src.contents) //Check for storage items
- L += get_contents(S)
-
- for(var/obj/item/gift/G in src.contents) //Check for gift-wrapped items
- L += G.gift
- if(isstorage(G.gift))
- L += get_contents(G.gift)
+ total_contents += contents
+ for(var/obj/checked_object in total_contents)
+ total_contents += get_contents(checked_object, recursion + 1)
- for(var/obj/item/smallDelivery/D in src.contents) //Check for package wrapped items
- L += D.wrapped
- if(isstorage(D.wrapped)) //this should never happen
- L += get_contents(D.wrapped)
- return L
+ return total_contents
/mob/living/proc/check_contents_for(A)
var/list/L = src.get_contents()
diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm
index 840c1da3f60f..51bbfd24ccb0 100644
--- a/code/modules/mob/living/silicon/robot/inventory.dm
+++ b/code/modules/mob/living/silicon/robot/inventory.dm
@@ -13,7 +13,7 @@
if(istype(module_state_1,/obj/item/robot/sight))
sight_mode &= ~module_state_1:sight_mode
if (client)
- client.screen -= module_state_1
+ client.remove_from_screen(module_state_1)
contents -= module_state_1
module_active = null
module_state_1 = null
@@ -22,7 +22,7 @@
if(istype(module_state_2,/obj/item/robot/sight))
sight_mode &= ~module_state_2:sight_mode
if (client)
- client.screen -= module_state_2
+ client.remove_from_screen(module_state_2)
contents -= module_state_2
module_active = null
module_state_2 = null
@@ -31,7 +31,7 @@
if(istype(module_state_3,/obj/item/robot/sight))
sight_mode &= ~module_state_3:sight_mode
if (client)
- client.screen -= module_state_3
+ client.remove_from_screen(module_state_3)
contents -= module_state_3
module_active = null
module_state_3 = null
@@ -45,7 +45,7 @@
if(istype(module_state_1,/obj/item/robot/sight))
sight_mode &= ~module_state_1:sight_mode
if (client)
- client.screen -= module_state_1
+ client.remove_from_screen(module_state_1)
contents -= module_state_1
module_state_1 = null
inv1.icon_state = "inv1"
@@ -53,7 +53,7 @@
if(istype(module_state_2,/obj/item/robot/sight))
sight_mode &= ~module_state_2:sight_mode
if (client)
- client.screen -= module_state_2
+ client.remove_from_screen(module_state_2)
contents -= module_state_2
module_state_2 = null
inv2.icon_state = "inv2"
@@ -61,7 +61,7 @@
if(istype(module_state_3,/obj/item/robot/sight))
sight_mode &= ~module_state_3:sight_mode
if (client)
- client.screen -= module_state_3
+ client.remove_from_screen(module_state_3)
contents -= module_state_3
module_state_3 = null
inv3.icon_state = "inv3"
diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm
index 21ddaf76b33c..b0230bba5dba 100644
--- a/code/modules/mob/living/silicon/robot/life.dm
+++ b/code/modules/mob/living/silicon/robot/life.dm
@@ -239,10 +239,10 @@
/mob/living/silicon/robot/proc/update_items()
if (client)
- client.screen -= contents
+ client.remove_from_screen(contents)
for(var/obj/I in contents)
if(I && !(istype(I,/obj/item/cell) || istype(I,/obj/item/device/radio) || istype(I,/obj/structure/machinery/camera) || istype(I,/obj/item/device/mmi)))
- client.screen += I
+ client.add_to_screen(I)
var/datum/custom_hud/robot/ui_datum = GLOB.custom_huds_list[HUD_ROBOT]
if(module_state_1)
module_state_1.screen_loc = ui_datum.ui_inv1
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index e7e603fd4916..58933b8ca312 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -322,13 +322,10 @@ var/global/list/limb_types_by_name = list(
/mob/proc/get_eye_protection()
return EYE_PROTECTION_NONE
-/mob/verb/a_select_zone(input as text)
- set name = "a-select-zone"
- set hidden = TRUE
-
+/mob/proc/a_select_zone(input, client/user)
var/atom/movable/screen/zone_sel/zone
- for(var/A in usr.client.screen)
+ for(var/A in user.screen)
if(istype(A, /atom/movable/screen/zone_sel))
zone = A
diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm
index 1839fe191627..fb4dbac3c160 100644
--- a/code/modules/mob/new_player/preferences_setup.dm
+++ b/code/modules/mob/new_player/preferences_setup.dm
@@ -200,19 +200,19 @@
if(isnull(preview_front))
preview_front = new()
- owner.screen |= preview_front
+ owner.add_to_screen(preview_front)
preview_front.vis_contents += preview_dummy
preview_front.screen_loc = "preview:0,0"
preview_front.icon_state = bg_state
if(isnull(rotate_left))
rotate_left = new(null, preview_dummy)
- owner.screen |= rotate_left
+ owner.add_to_screen(rotate_left)
rotate_left.screen_loc = "preview:-1:16,0"
if(isnull(rotate_right))
rotate_right = new(null, preview_dummy)
- owner.screen |= rotate_right
+ owner.add_to_screen(rotate_right)
rotate_right.screen_loc = "preview:1:-16,0"
/datum/preferences/proc/job_pref_to_gear_preset()
diff --git a/code/modules/projectiles/gun_attachables.dm b/code/modules/projectiles/gun_attachables.dm
index 698ea8ef5957..2438947ef254 100644
--- a/code/modules/projectiles/gun_attachables.dm
+++ b/code/modules/projectiles/gun_attachables.dm
@@ -1217,9 +1217,9 @@ Defined in conflicts.dm of the #defines folder.
/// If the gun should experience scope drift
var/scope_drift = TRUE
/// % chance for the scope to drift on process with a spotter using their scope
- var/spotted_drift_chance = 33
+ var/spotted_drift_chance = 25
/// % chance for the scope to drift on process without a spotter using their scope
- var/unspotted_drift_chance = 100
+ var/unspotted_drift_chance = 90
/// If the scope should use do_afters for adjusting and moving the sight
var/slow_use = TRUE
/// Cooldown for interacting with the scope's adjustment or position
@@ -1238,6 +1238,8 @@ Defined in conflicts.dm of the #defines folder.
var/darkness_view = 12
/// If there is currently a spotter using the linked spotting scope
var/spotter_spotting = FALSE
+ /// How much time it takes to adjust the position of the scope. Adjusting the offset will take half of this time
+ var/adjust_delay = 1 SECONDS
/obj/item/attachable/vulture_scope/Initialize(mapload, ...)
. = ..()
@@ -1289,8 +1291,8 @@ Defined in conflicts.dm of the #defines folder.
if(!COOLDOWN_FINISHED(src, scope_interact_cd))
return
to_chat(scoper, SPAN_NOTICE("You begin adjusting [src]..."))
- COOLDOWN_START(src, scope_interact_cd, 0.5 SECONDS)
- if(!do_after(scoper, 0.5 SECONDS))
+ COOLDOWN_START(src, scope_interact_cd, adjust_delay / 2)
+ if(!do_after(scoper, 0.4 SECONDS))
return
adjust_offset(direction)
@@ -1307,8 +1309,8 @@ Defined in conflicts.dm of the #defines folder.
return
to_chat(scoper, SPAN_NOTICE("You begin moving [src]..."))
- COOLDOWN_START(src, scope_interact_cd, 1 SECONDS)
- if(!do_after(scoper, 1 SECONDS))
+ COOLDOWN_START(src, scope_interact_cd, adjust_delay)
+ if(!do_after(scoper, 0.8 SECONDS))
return
adjust_position(direction)
@@ -1535,7 +1537,7 @@ Defined in conflicts.dm of the #defines folder.
recalculate_scope_pos()
gun_user.overlay_fullscreen("vulture", /atom/movable/screen/fullscreen/vulture)
scope_element = new(src)
- gun_user.client.screen += scope_element
+ gun_user.client.add_to_screen(scope_element)
gun_user.see_in_dark += darkness_view
gun_user.lighting_alpha = 127
gun_user.sync_lighting_plane_alpha()
@@ -1564,7 +1566,7 @@ Defined in conflicts.dm of the #defines folder.
stop_holding_breath()
scope_user_initial_dir = null
scoper.clear_fullscreen("vulture")
- scoper.client.screen -= scope_element
+ scoper.client.remove_from_screen(scope_element)
scoper.see_in_dark -= darkness_view
scoper.lighting_alpha = 127
scoper.sync_lighting_plane_alpha()
@@ -3244,6 +3246,8 @@ Defined in conflicts.dm of the #defines folder.
attachment_action_type = /datum/action/item_action/toggle
var/initial_mob_dir = NORTH // the dir the mob faces the moment it deploys the bipod
var/bipod_deployed = FALSE
+ /// If this should anchor the user while in use
+ var/heavy_bipod = FALSE
/obj/item/attachable/bipod/New()
..()
@@ -3309,6 +3313,9 @@ Defined in conflicts.dm of the #defines folder.
if(G.flags_gun_features & GUN_SUPPORT_PLATFORM)
G.remove_firemode(GUN_FIREMODE_AUTOMATIC)
+ if(heavy_bipod)
+ user.anchored = FALSE
+
if(!QDELETED(G))
playsound(user,'sound/items/m56dauto_rotate.ogg', 55, 1)
update_icon()
@@ -3348,6 +3355,9 @@ Defined in conflicts.dm of the #defines folder.
if(G.flags_gun_features & GUN_SUPPORT_PLATFORM)
G.add_firemode(GUN_FIREMODE_AUTOMATIC)
+ if(heavy_bipod)
+ user.anchored = TRUE
+
else
to_chat(user, SPAN_NOTICE("You retract [src]."))
undeploy_bipod(G)
@@ -3396,6 +3406,7 @@ Defined in conflicts.dm of the #defines folder.
desc = "A set of rugged telescopic poles to keep a weapon stabilized during firing."
icon_state = "bipod_m60"
attach_icon = "vulture_bipod"
+ heavy_bipod = TRUE
/obj/item/attachable/burstfire_assembly
name = "burst fire assembly"
diff --git a/code/modules/projectiles/guns/boltaction.dm b/code/modules/projectiles/guns/boltaction.dm
index 69ce3a8de53e..c18e45e38d3e 100644
--- a/code/modules/projectiles/guns/boltaction.dm
+++ b/code/modules/projectiles/guns/boltaction.dm
@@ -275,3 +275,7 @@
to_chat(user, SPAN_DANGER("The splint on your [limb.display_name] comes apart under the recoil!"))
user.pain.apply_pain(PAIN_BONE_BREAK_SPLINTED)
user.update_med_icon()
+
+
+/obj/item/weapon/gun/boltaction/vulture/skillless
+ bypass_trait = TRUE
diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm
index c7b3d3e1bae2..e61357188ad6 100644
--- a/code/modules/recycling/sortingmachinery.dm
+++ b/code/modules/recycling/sortingmachinery.dm
@@ -241,7 +241,7 @@
var/obj/item/smallDelivery/P = new /obj/item/smallDelivery(get_turf(O.loc)) //Aaannd wrap it up!
if(!istype(O.loc, /turf))
if(user.client)
- user.client.screen -= O
+ user.client.remove_from_screen(O)
P.wrapped = O
O.forceMove(P)
P.w_class = O.w_class
diff --git a/html/changelogs/AutoChangeLog-pr-4222.yml b/html/changelogs/AutoChangeLog-pr-4222.yml
deleted file mode 100644
index 04f165f2bbef..000000000000
--- a/html/changelogs/AutoChangeLog-pr-4222.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "realforest2001"
-delete-after: True
-changes:
- - balance: "Adds an extra 75% damage and hive interference to plasma rifle vs xenos."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4411.yml b/html/changelogs/AutoChangeLog-pr-4411.yml
deleted file mode 100644
index 91f0f2cac947..000000000000
--- a/html/changelogs/AutoChangeLog-pr-4411.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: "TeDGamer"
-delete-after: True
-changes:
- - balance: "All trained+ engineer skill levels affect duration now."
- - balance: "Removed double skill duration multiplier for m56d's."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4418.yml b/html/changelogs/AutoChangeLog-pr-4418.yml
deleted file mode 100644
index a84fef90dd84..000000000000
--- a/html/changelogs/AutoChangeLog-pr-4418.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: "Zonespace27"
-delete-after: True
-changes:
- - bugfix: "HEFA Knights now spawn with their armor again"
- - balance: "HEFA Knights now spawn with 2 HEFA in their helmets"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4458.yml b/html/changelogs/AutoChangeLog-pr-4458.yml
deleted file mode 100644
index 3cb5a179bf11..000000000000
--- a/html/changelogs/AutoChangeLog-pr-4458.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "HeresKozmos"
-delete-after: True
-changes:
- - mapadd: "added 9 new tunnels to trijent dam"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4465.yml b/html/changelogs/AutoChangeLog-pr-4465.yml
deleted file mode 100644
index 340654480622..000000000000
--- a/html/changelogs/AutoChangeLog-pr-4465.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "HeresKozmos"
-delete-after: True
-changes:
- - mapadd: "added 9 new tunnels to Fiorina SciAnnex"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4487.yml b/html/changelogs/AutoChangeLog-pr-4487.yml
deleted file mode 100644
index 15a34fd04de3..000000000000
--- a/html/changelogs/AutoChangeLog-pr-4487.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Drathek"
-delete-after: True
-changes:
- - bugfix: "Fix dead huggers converting to non-player huggers"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4488.yml b/html/changelogs/AutoChangeLog-pr-4488.yml
deleted file mode 100644
index c569ff5e6250..000000000000
--- a/html/changelogs/AutoChangeLog-pr-4488.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "bostonthebear"
-delete-after: True
-changes:
- - rscadd: "Changes pilot officer timelock from 5 hours as squad marine to 2 hours as DCC"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4489.yml b/html/changelogs/AutoChangeLog-pr-4489.yml
deleted file mode 100644
index 968951eaacfb..000000000000
--- a/html/changelogs/AutoChangeLog-pr-4489.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "TheGamerdk"
-delete-after: True
-changes:
- - bugfix: "Adding marines to intel squad broke the crew manifest"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4490.yml b/html/changelogs/AutoChangeLog-pr-4490.yml
deleted file mode 100644
index 9e24becf0ca0..000000000000
--- a/html/changelogs/AutoChangeLog-pr-4490.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Casper"
-delete-after: True
-changes:
- - bugfix: "fixed cigarette punctuation error"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4491.yml b/html/changelogs/AutoChangeLog-pr-4491.yml
deleted file mode 100644
index 143791dd7db7..000000000000
--- a/html/changelogs/AutoChangeLog-pr-4491.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Casper"
-delete-after: True
-changes:
- - bugfix: "fixed reagent canister being deleted if ejected with your hands full"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4503.yml b/html/changelogs/AutoChangeLog-pr-4503.yml
deleted file mode 100644
index d9c902131457..000000000000
--- a/html/changelogs/AutoChangeLog-pr-4503.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Morrow"
-delete-after: True
-changes:
- - bugfix: "Fixed a bug with akimbo firing"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4508.yml b/html/changelogs/AutoChangeLog-pr-4508.yml
deleted file mode 100644
index 5efe4580a9f7..000000000000
--- a/html/changelogs/AutoChangeLog-pr-4508.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Morrow"
-delete-after: True
-changes:
- - rscdel: "Removed alpha egg on LV522"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-4509.yml b/html/changelogs/AutoChangeLog-pr-4509.yml
deleted file mode 100644
index 6a050918f065..000000000000
--- a/html/changelogs/AutoChangeLog-pr-4509.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Git-Nivrak"
-delete-after: True
-changes:
- - bugfix: "Fixes no fire delay on m56d in semi-auto and burst fire"
\ No newline at end of file
diff --git a/html/changelogs/archive/2023-09.yml b/html/changelogs/archive/2023-09.yml
index ea6f57a4b490..d5fb9bf1a5c8 100644
--- a/html/changelogs/archive/2023-09.yml
+++ b/html/changelogs/archive/2023-09.yml
@@ -333,3 +333,65 @@
weedable now.
- maptweak: LV Comms now always spawn in Tcomms and one either on the east or west
river
+2023-09-27:
+ CapCamIII:
+ - rscadd: Adds upp presets for the unused officer ranks, Kapitan, Lt Kolonel, MajGen,
+ LtGen, Gen, for use in admin events
+ - rscadd: Changes UPP conscript rank from weird conscript only rank to Private,
+ moves UPP soldier to PFC, removing the rank gap between soldier and support
+ - code_imp: Cleans up UPP rank code by deleting redundant ranks
+ CapCamIII, AmoryBlaine:
+ - rscadd: Adds new service uniform sprite that is standard across maps, sprites
+ by AmoryBlaine
+ - rscadd: Resprites old dress uniform, renames it, adds to XO vendor as a uniform
+ choice as it fits there now, sprites by AmoryBlaine
+ - rscadd: Adds new uniform, command boiler suit like gorman wears in the movie,
+ available in SO locker, SO vendor, XO vendor, CO vendor, sprites by AmoryBlaine
+ - rscadd: Adds new brown versions of gloves and boot to custom loadout, also lowers
+ the price of jungle boots to two, sprites by AmoryBlaine
+ - rscadd: Seperates officer cap and RO cap, officers get officer cap, QM gets RO
+ cap, CTs get req cap, sprites once again by AmoryBlaine
+ - rscadd: UPP boots and gloves use the new brown sprite, as it fits their color
+ scheme and looks cool.
+ - bugfix: Freelancer leader now spawns with a knife in their boots
+ - imageadd: Resprites patrol cap, officer cap, SEA cap, standard black boot, standard
+ black glove, and formal gloves, sprites by AmoryBlaine
+ Casper:
+ - bugfix: fixed reagent canister being deleted if ejected with your hands full
+ - bugfix: fixed cigarette punctuation error
+ Drathek:
+ - bugfix: Fix dead huggers converting to non-player huggers
+ Git-Nivrak:
+ - bugfix: Fixes no fire delay on m56d in semi-auto and burst fire
+ HeresKozmos:
+ - mapadd: added 9 new tunnels to trijent dam
+ - mapadd: added 9 new tunnels to Fiorina SciAnnex
+ Morrow:
+ - bugfix: Fixed a bug with akimbo firing
+ - rscdel: Removed alpha egg on LV522
+ - rscadd: Added a save-able preference for auto-observe
+ - bugfix: Fixed numerous problems with HUD observer mode
+ - code_imp: Created a wrapper for client screen changes
+ - code_imp: Made check contents less horrendous
+ Steelpoint:
+ - mapadd: Sensor Towers have been added to all maps.
+ - rscadd: UPP survivor radio role identifiers now have a shorter title.
+ - rscadd: UPP survivors now default to using a players preferred name instead of
+ a random UPP name.
+ TeDGamer:
+ - balance: All trained+ engineer skill levels affect duration now.
+ - balance: Removed double skill duration multiplier for m56d's.
+ TheGamerdk:
+ - bugfix: Adding marines to intel squad broke the crew manifest
+ Zonespace27:
+ - bugfix: HEFA Knights now spawn with their armor again
+ - balance: HEFA Knights now spawn with 2 HEFA in their helmets
+ - admin: Added skillless subtype of the m707
+ - balance: Lowered vulture spotted/unspotted drift from 33/100 to 25/90
+ - balance: Lowered vulture scope adjust/move time from 0.5/1.0s to 0.4/0.8s
+ - balance: Vulture bipod anchors user in place
+ bostonthebear:
+ - rscadd: Changes pilot officer timelock from 5 hours as squad marine to 2 hours
+ as DCC
+ realforest2001:
+ - balance: Adds an extra 75% damage and hive interference to plasma rifle vs xenos.
diff --git a/icons/mob/hud/marine_hud.dmi b/icons/mob/hud/marine_hud.dmi
index ed7c65e323d1..5de7b83a9309 100644
Binary files a/icons/mob/hud/marine_hud.dmi and b/icons/mob/hud/marine_hud.dmi differ
diff --git a/icons/mob/humans/onmob/feet.dmi b/icons/mob/humans/onmob/feet.dmi
index dbbed31b1e19..dd15289c7e4c 100644
Binary files a/icons/mob/humans/onmob/feet.dmi and b/icons/mob/humans/onmob/feet.dmi differ
diff --git a/icons/mob/humans/onmob/hands.dmi b/icons/mob/humans/onmob/hands.dmi
index 76dda2e14bf9..b03d40fdecd2 100644
Binary files a/icons/mob/humans/onmob/hands.dmi and b/icons/mob/humans/onmob/hands.dmi differ
diff --git a/icons/mob/humans/onmob/head_1.dmi b/icons/mob/humans/onmob/head_1.dmi
index 58a93a89da2c..b41eab22a229 100644
Binary files a/icons/mob/humans/onmob/head_1.dmi and b/icons/mob/humans/onmob/head_1.dmi differ
diff --git a/icons/mob/humans/onmob/suit_1.dmi b/icons/mob/humans/onmob/suit_1.dmi
index 8424a9795b91..624d8792cf2d 100644
Binary files a/icons/mob/humans/onmob/suit_1.dmi and b/icons/mob/humans/onmob/suit_1.dmi differ
diff --git a/icons/mob/humans/onmob/uniform_0.dmi b/icons/mob/humans/onmob/uniform_0.dmi
index a3e34fc2e16c..6d944f4fa649 100644
Binary files a/icons/mob/humans/onmob/uniform_0.dmi and b/icons/mob/humans/onmob/uniform_0.dmi differ
diff --git a/icons/obj/items/clothing/cm_hats.dmi b/icons/obj/items/clothing/cm_hats.dmi
index 66a42bf694ba..9c4ed5bf4617 100644
Binary files a/icons/obj/items/clothing/cm_hats.dmi and b/icons/obj/items/clothing/cm_hats.dmi differ
diff --git a/icons/obj/items/clothing/cm_suits.dmi b/icons/obj/items/clothing/cm_suits.dmi
index 74257ed6c8cd..d05d7ffdf77e 100644
Binary files a/icons/obj/items/clothing/cm_suits.dmi and b/icons/obj/items/clothing/cm_suits.dmi differ
diff --git a/icons/obj/items/clothing/gloves.dmi b/icons/obj/items/clothing/gloves.dmi
index b6aa7935f6c9..6e9afdc4eb4a 100644
Binary files a/icons/obj/items/clothing/gloves.dmi and b/icons/obj/items/clothing/gloves.dmi differ
diff --git a/icons/obj/items/clothing/shoes.dmi b/icons/obj/items/clothing/shoes.dmi
index 66fab7cc8843..96780bb174c0 100644
Binary files a/icons/obj/items/clothing/shoes.dmi and b/icons/obj/items/clothing/shoes.dmi differ
diff --git a/icons/obj/items/clothing/uniforms.dmi b/icons/obj/items/clothing/uniforms.dmi
index 4d4d7df3224d..4266db88afe8 100644
Binary files a/icons/obj/items/clothing/uniforms.dmi and b/icons/obj/items/clothing/uniforms.dmi differ
diff --git a/maps/map_files/BigRed/BigRed.dmm b/maps/map_files/BigRed/BigRed.dmm
index 4ec089e10bdd..b22a08e3f62d 100644
--- a/maps/map_files/BigRed/BigRed.dmm
+++ b/maps/map_files/BigRed/BigRed.dmm
@@ -16567,8 +16567,8 @@
dir = 6
},
/turf/open/floor{
- dir = 4;
- icon_state = "asteroidwarning"
+ dir = 1;
+ icon_state = "asteroidfloor"
},
/area/bigredv2/caves_lambda)
"aTB" = (
@@ -16576,8 +16576,8 @@
dir = 8
},
/turf/open/floor{
- dir = 4;
- icon_state = "asteroidwarning"
+ dir = 1;
+ icon_state = "asteroidfloor"
},
/area/bigredv2/caves_lambda)
"aTC" = (
@@ -16945,14 +16945,12 @@
dir = 9
},
/turf/open/floor{
- dir = 6;
icon_state = "asteroidwarning"
},
/area/bigredv2/caves_lambda)
"aUC" = (
/obj/effect/decal/remains/human,
/turf/open/floor{
- dir = 6;
icon_state = "asteroidwarning"
},
/area/bigredv2/caves_lambda)
@@ -29578,6 +29576,13 @@
icon_state = "darkblue2"
},
/area/bigredv2/caves/eta/research)
+"gXh" = (
+/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node,
+/turf/open/floor{
+ dir = 1;
+ icon_state = "asteroidwarning"
+ },
+/area/bigredv2/caves_lambda)
"gXp" = (
/turf/open/mars_cave{
icon_state = "mars_cave_6"
@@ -30885,6 +30890,15 @@
icon_state = "mars_cave_2"
},
/area/bigredv2/caves_sw)
+"jNO" = (
+/obj/structure/machinery/sensortower{
+ pixel_x = -9
+ },
+/turf/open/floor{
+ dir = 1;
+ icon_state = "asteroidfloor"
+ },
+/area/bigredv2/caves_lambda)
"jOc" = (
/obj/structure/machinery/door/poddoor/almayer/closed{
dir = 4;
@@ -77158,7 +77172,7 @@ aOn
aOn
aOn
aOn
-aOn
+aTv
aTA
aUB
wQC
@@ -77375,7 +77389,7 @@ gXp
gXp
gXp
gXp
-aSm
+aTw
aTB
aUC
wQC
@@ -77592,9 +77606,9 @@ tQw
ahw
tQw
tQw
-aSn
-gXp
-gXp
+gXh
+aTv
+aMT
tQw
tQw
pIN
@@ -77809,9 +77823,9 @@ tQw
tQw
xFZ
xFZ
-xFZ
-tQw
-tQw
+aSm
+jNO
+aMT
tQw
xFZ
ahy
@@ -78027,8 +78041,8 @@ eFh
aao
aao
aao
-gmN
-xFZ
+aSm
+aMV
sNQ
aao
aao
diff --git a/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm b/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm
index 120a30286fb6..0327fcdd21bc 100644
--- a/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm
+++ b/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm
@@ -1797,6 +1797,13 @@
icon_state = "sterile_white"
},
/area/fiorina/station/medbay)
+"aUM" = (
+/obj/item/clothing/head/welding,
+/turf/open/floor/prison{
+ dir = 9;
+ icon_state = "greenfull"
+ },
+/area/fiorina/tumor/civres)
"aVd" = (
/obj/effect/landmark/monkey_spawn,
/turf/open/floor/plating/prison,
@@ -6379,6 +6386,12 @@
},
/turf/open/floor/prison,
/area/fiorina/lz/near_lzI)
+"dKN" = (
+/obj/effect/decal/cleanable/blood,
+/turf/open/floor/prison{
+ icon_state = "floor_plate"
+ },
+/area/fiorina/tumor/civres)
"dKX" = (
/obj/effect/landmark/survivor_spawner,
/turf/open/floor/plating/plating_catwalk/prison,
@@ -12625,6 +12638,11 @@
/obj/effect/landmark/wo_supplies/storage/belts/knifebelt,
/turf/open/floor/prison,
/area/fiorina/station/lowsec)
+"hDq" = (
+/obj/effect/landmark/corpsespawner/engineer,
+/obj/effect/decal/cleanable/blood,
+/turf/open/auto_turf/sand/layer1,
+/area/fiorina/tumor/civres)
"hDr" = (
/obj/item/stool,
/turf/open/floor/prison{
@@ -14331,6 +14349,13 @@
icon_state = "darkyellowfull2"
},
/area/fiorina/station/telecomm/lz1_tram)
+"iKf" = (
+/obj/effect/decal/cleanable/blood,
+/turf/open/floor/prison{
+ dir = 8;
+ icon_state = "green"
+ },
+/area/fiorina/tumor/civres)
"iKg" = (
/obj/effect/landmark/structure_spawner/xvx_hive/xeno_core,
/turf/open/floor/plating/prison,
@@ -16405,6 +16430,12 @@
},
/turf/open/floor/prison/chapel_carpet,
/area/fiorina/station/chapel)
+"jUy" = (
+/obj/structure/machinery/sensortower,
+/turf/open/floor/prison{
+ icon_state = "floor_plate"
+ },
+/area/fiorina/tumor/civres)
"jUz" = (
/obj/structure/surface/table/reinforced/prison{
flipped = 1
@@ -28100,6 +28131,10 @@
icon_state = "floor_plate"
},
/area/fiorina/tumor/civres)
+"qWO" = (
+/obj/item/tool/weldingtool,
+/turf/open/auto_turf/sand/layer1,
+/area/fiorina/tumor/civres)
"qXl" = (
/obj/structure/stairs/perspective{
dir = 8;
@@ -50047,7 +50082,7 @@ lhQ
tzj
lvs
lhQ
-qty
+aUM
lsl
xFx
apw
@@ -50258,10 +50293,10 @@ rMg
hDx
lhQ
oVC
+dKN
hDx
-hDx
-hDx
-apw
+jUy
+hDq
apw
apw
amF
@@ -50473,7 +50508,7 @@ qty
hDx
whu
hDx
-apw
+qWO
mZo
apw
amF
@@ -50896,7 +50931,7 @@ qty
muB
nsg
nsg
-nsg
+iKf
apw
hDx
taX
diff --git a/maps/map_files/LV624/LV624.dmm b/maps/map_files/LV624/LV624.dmm
index ae0f259c8b2d..4d94b662c589 100644
--- a/maps/map_files/LV624/LV624.dmm
+++ b/maps/map_files/LV624/LV624.dmm
@@ -13047,6 +13047,10 @@
"cCr" = (
/turf/open/gm/dirtgrassborder/south,
/area/lv624/ground/jungle/east_jungle)
+"cDr" = (
+/obj/structure/girder,
+/turf/open/gm/grass/grass1,
+/area/lv624/ground/caves/north_central_caves)
"cDQ" = (
/obj/item/ammo_magazine/sentry{
current_rounds = 0;
@@ -14942,6 +14946,12 @@
/obj/structure/flora/jungle/vines/heavy,
/turf/open/gm/dirtgrassborder/west,
/area/lv624/ground/jungle/west_central_jungle)
+"hpG" = (
+/turf/open/floor{
+ dir = 1;
+ icon_state = "bot"
+ },
+/area/lv624/ground/caves/north_central_caves)
"hpN" = (
/obj/structure/surface/table,
/obj/effect/landmark/good_item,
@@ -15608,6 +15618,9 @@
/obj/structure/flora/bush/ausbushes/lavendergrass,
/turf/open/gm/grass/grass1,
/area/lv624/ground/jungle/south_west_jungle)
+"jeL" = (
+/turf/closed/wall/r_wall,
+/area/lv624/ground/caves/north_central_caves)
"jga" = (
/turf/open/gm/river,
/area/lv624/ground/jungle/west_jungle)
@@ -15987,6 +16000,13 @@
/obj/effect/landmark/monkey_spawn,
/turf/open/gm/grass/grass1,
/area/lv624/ground/jungle/north_jungle)
+"kbn" = (
+/obj/structure/machinery/sensortower,
+/turf/open/floor{
+ dir = 1;
+ icon_state = "bot"
+ },
+/area/lv624/ground/caves/north_central_caves)
"kbr" = (
/obj/structure/showcase{
desc = "An ancient, dusty tomb with strange alien writing. It's best not to touch it.";
@@ -17988,6 +18008,12 @@
/obj/structure/flora/bush/ausbushes/pointybush,
/turf/open/gm/grass/grass1,
/area/lv624/ground/jungle/east_central_jungle)
+"oHU" = (
+/obj/structure/girder,
+/turf/open/floor{
+ icon_state = "asteroidplating"
+ },
+/area/lv624/ground/caves/north_central_caves)
"oJL" = (
/obj/effect/landmark/crap_item,
/turf/open/gm/grass/grass1,
@@ -21055,6 +21081,9 @@
/obj/structure/flora/jungle/vines/heavy,
/turf/open/gm/grass/grass1,
/area/lv624/ground/jungle/south_central_jungle)
+"wbM" = (
+/turf/open/floor,
+/area/lv624/ground/caves/north_central_caves)
"wbP" = (
/obj/structure/flora/jungle/vines/light_3,
/turf/open/floor/sandstone/runed,
@@ -21257,6 +21286,11 @@
/obj/effect/decal/remains/xeno,
/turf/open/gm/dirt,
/area/lv624/ground/barrens/central_barrens)
+"wwI" = (
+/turf/open/floor{
+ icon_state = "asteroidplating"
+ },
+/area/lv624/ground/caves/north_central_caves)
"wxP" = (
/turf/open/gm/dirtgrassborder/grassdirt_corner/south_west,
/area/lv624/ground/jungle/north_jungle)
@@ -40945,11 +40979,11 @@ aaH
aaw
aaw
aaw
+oHU
aaw
aaw
-aaw
-aaw
-aaw
+cDr
+jeL
aaF
aaF
abm
@@ -41175,9 +41209,9 @@ aaw
aaw
aaw
aaw
-aaw
-aaw
-aaw
+wwI
+wbM
+jeL
aaF
abm
abm
@@ -41402,10 +41436,10 @@ aay
aaw
aaw
aaw
-aaw
-aaw
-aaw
-aaw
+wbM
+kbn
+wbM
+jeL
abm
abm
abm
@@ -41630,10 +41664,10 @@ aaz
aay
aaw
aaw
-aaw
-aaw
-aaw
-aaw
+wwI
+hpG
+wbM
+jeL
abm
abm
abm
@@ -41858,10 +41892,10 @@ aah
aaH
aaw
aaw
-aaw
-aaw
-aaw
-aaw
+wbM
+wbM
+wwI
+jeL
abm
abm
abm
@@ -42087,9 +42121,9 @@ aaH
aaw
aaw
aaw
-aaw
-aaw
-aaw
+cDr
+jeL
+jeL
abm
abm
abm
diff --git a/maps/map_files/New_Varadero/New_Varadero.dmm b/maps/map_files/New_Varadero/New_Varadero.dmm
index 2787ade09f5c..e03bf8cdcbe4 100644
--- a/maps/map_files/New_Varadero/New_Varadero.dmm
+++ b/maps/map_files/New_Varadero/New_Varadero.dmm
@@ -7371,6 +7371,9 @@
/obj/item/circuitboard/airlock,
/turf/open/floor/shiva,
/area/varadero/interior/technical_storage)
+"eOK" = (
+/turf/open/floor/plating,
+/area/varadero/interior_protected/caves/central)
"eOZ" = (
/obj/structure/bed/chair{
dir = 1
@@ -10629,6 +10632,11 @@
icon_state = "asteroidplating"
},
/area/varadero/interior/maintenance)
+"gPE" = (
+/turf/open/floor/shiva{
+ icon_state = "multi_tiles"
+ },
+/area/varadero/interior_protected/caves/central)
"gPG" = (
/turf/open/gm/dirt{
icon_state = "desert2"
@@ -21737,6 +21745,14 @@
icon_state = "asteroidplating"
},
/area/varadero/interior/hall_NW)
+"nYi" = (
+/obj/structure/machinery/sensortower{
+ pixel_x = -9
+ },
+/turf/open/floor/shiva{
+ icon_state = "floor3"
+ },
+/area/varadero/interior_protected/caves/central)
"nYx" = (
/obj/structure/machinery/storm_siren{
dir = 8;
@@ -26663,6 +26679,9 @@
},
/turf/open/gm/dirt,
/area/varadero/exterior/lz2_near)
+"raW" = (
+/turf/closed/wall,
+/area/varadero/interior_protected/caves/central)
"rbd" = (
/obj/item/stack/sheet/wood/small_stack,
/turf/open/floor/plating/icefloor{
@@ -27524,6 +27543,10 @@
icon_state = "asteroidplating"
},
/area/varadero/interior/maintenance/north)
+"rAt" = (
+/obj/structure/window/framed/colony,
+/turf/open/floor/plating,
+/area/varadero/interior_protected/caves/central)
"rAy" = (
/obj/structure/bedsheetbin,
/turf/open/floor/shiva{
@@ -53317,9 +53340,9 @@ etv
xxk
xxk
mCF
-aOg
-mCF
-mCF
+raW
+rAt
+rAt
cty
hoC
mCF
@@ -53499,9 +53522,9 @@ toU
cto
xxk
meS
-aOg
-aOg
-mCF
+eOK
+gPE
+gPE
cty
cty
mCF
@@ -53681,9 +53704,9 @@ etv
xxk
xxk
aOg
-mCF
-mCF
-hoC
+eOK
+gPE
+nYi
cty
aOg
aOg
@@ -53862,9 +53885,9 @@ ixr
toU
xxk
xxk
+eOK
mCF
-mCF
-hoC
+gPE
cty
cty
aOg
@@ -54045,7 +54068,7 @@ mMZ
xxk
xxk
mCF
-mCF
+eOK
cty
cty
cty
diff --git a/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm b/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm
index edbef5a964c5..334c7e71f8b6 100644
--- a/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm
+++ b/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm
@@ -22551,9 +22551,13 @@
/turf/open/auto_turf/snow/brown_base/layer0,
/area/strata/ag/exterior/nearlz2)
"bwy" = (
-/obj/structure/surface/table/reinforced/prison,
-/obj/item/device/radio,
-/turf/open/auto_turf/strata_grass/layer0_mud,
+/obj/structure/machinery/sensortower{
+ pixel_x = -8
+ },
+/turf/open/floor/strata{
+ dir = 4;
+ icon_state = "floor3"
+ },
/area/strata/ug/interior/jungle/platform/east/scrub)
"bwA" = (
/obj/structure/flora/grass/tallgrass/ice/corner{
@@ -32937,6 +32941,11 @@
},
/turf/open/auto_turf/ice/layer1,
/area/strata/ag/exterior/marsh)
+"ioi" = (
+/turf/open/floor/strata{
+ icon_state = "multi_tiles"
+ },
+/area/strata/ug/interior/jungle/platform/east/scrub)
"ioz" = (
/obj/structure/bed/nest,
/obj/effect/decal/cleanable/blood/gibs/core,
@@ -39136,6 +39145,9 @@
icon_state = "floor3"
},
/area/strata/ug/interior/outpost/jung/dorms/sec1)
+"sPF" = (
+/turf/open/floor/strata,
+/area/strata/ug/interior/jungle/platform/east/scrub)
"sQs" = (
/turf/open/asphalt/cement{
icon_state = "cement9"
@@ -75328,9 +75340,9 @@ rpX
tnM
wZZ
bwE
-bqf
-csY
-bqf
+ioi
+sPF
+ioi
btL
btE
wZZ
@@ -75523,9 +75535,9 @@ rpX
tnM
wZZ
wZZ
-btK
+sPF
bwy
-bqf
+sPF
bDB
wZZ
wZZ
@@ -75718,9 +75730,9 @@ rpX
tnM
wZZ
bqf
-csZ
-bwE
-bqf
+ioi
+sPF
+ioi
wZZ
bqf
wZZ
diff --git a/tgui/packages/tgui/interfaces/Orbit/index.tsx b/tgui/packages/tgui/interfaces/Orbit/index.tsx
index e3fbb04d0ea9..e9e345995271 100644
--- a/tgui/packages/tgui/interfaces/Orbit/index.tsx
+++ b/tgui/packages/tgui/interfaces/Orbit/index.tsx
@@ -29,18 +29,14 @@ export const Orbit = (props, context) => {
/** Controls filtering out the list of observables via search */
const ObservableSearch = (props, context) => {
const { act, data } = useBackend(context);
- const {
- auto_observe,
- humans = [],
- marines = [],
- survivors = [],
- xenos = [],
- } = data;
+ const { humans = [], marines = [], survivors = [], xenos = [] } = data;
+
+ let auto_observe = data.auto_observe;
const [autoObserve, setAutoObserve] = useLocalState(
context,
'autoObserve',
- false
+ auto_observe ? true : false
);
const [searchQuery, setSearchQuery] = useLocalState(
context,
@@ -89,7 +85,7 @@ const ObservableSearch = (props, context) => {