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) => {