diff --git a/code/__DEFINES/configuration.dm b/code/__DEFINES/configuration.dm index d702d4097195..f0d64efb6dd7 100644 --- a/code/__DEFINES/configuration.dm +++ b/code/__DEFINES/configuration.dm @@ -8,3 +8,10 @@ //flags #define CONFIG_ENTRY_LOCKED (1<<0) //can't edit #define CONFIG_ENTRY_HIDDEN (1<<1) //can't see value + +#define ON_CONFIG_LOAD(type) \ +##type/New() { \ + . = ..(); \ + RegisterSignal(SSdcs, COMSIG_GLOB_CONFIG_LOADED, PROC_REF(__on_config_load)); \ +}; \ +##type/proc/__on_config_load() 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/dcs/signals/signals_global.dm b/code/__DEFINES/dcs/signals/signals_global.dm index e33a75aee132..032a1891a808 100644 --- a/code/__DEFINES/dcs/signals/signals_global.dm +++ b/code/__DEFINES/dcs/signals/signals_global.dm @@ -25,6 +25,8 @@ /// called after a successful var edit somewhere in the world: (list/args) #define COMSIG_GLOB_VAR_EDIT "!var_edit" +#define COMSIG_GLOB_CONFIG_LOADED "!config_loaded" + ///from /mob/living/carbon/xenomorph/initialize #define COMSIG_GLOB_XENO_SPAWN "!xeno_spawn" diff --git a/code/__DEFINES/job.dm b/code/__DEFINES/job.dm index d80c3b5bb23b..52263a5e1367 100644 --- a/code/__DEFINES/job.dm +++ b/code/__DEFINES/job.dm @@ -78,6 +78,8 @@ var/global/list/job_command_roles = JOB_COMMAND_ROLES_LIST #define JOB_DROPSHIP_CREW_CHIEF "Dropship Crew Chief" #define JOB_CREWMAN "Vehicle Crewman" #define JOB_INTEL "Intelligence Officer" +#define JOB_DROPSHIP_ROLES /datum/timelock/dropship +#define JOB_DROPSHIP_ROLES_LIST list(JOB_DROPSHIP_CREW_CHIEF, JOB_PILOT) #define JOB_AUXILIARY_ROLES /datum/timelock/auxiliary #define JOB_AUXILIARY_ROLES_LIST list(JOB_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_CREWMAN, JOB_INTEL) @@ -258,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/__DEFINES/mode.dm b/code/__DEFINES/mode.dm index cd32a273c6d8..b73b2a0d89af 100644 --- a/code/__DEFINES/mode.dm +++ b/code/__DEFINES/mode.dm @@ -121,7 +121,7 @@ var/global/list/ROLES_ENGINEERING = list(JOB_CHIEF_ENGINEER, JOB_ORDNANCE_TECH, var/global/list/ROLES_REQUISITION = list(JOB_CHIEF_REQUISITION, JOB_CARGO_TECH, JOB_WO_CHIEF_REQUISITION, JOB_WO_REQUISITION) var/global/list/ROLES_MEDICAL = list(JOB_CMO, JOB_RESEARCHER, JOB_DOCTOR, JOB_NURSE, JOB_WO_CMO, JOB_WO_RESEARCHER, JOB_WO_DOCTOR) var/global/list/ROLES_MARINES = list(JOB_SQUAD_LEADER, JOB_SQUAD_TEAM_LEADER, JOB_SQUAD_SPECIALIST, JOB_SQUAD_SMARTGUN, JOB_SQUAD_MEDIC, JOB_SQUAD_ENGI, JOB_SQUAD_MARINE) -var/global/list/ROLES_SQUAD_ALL = list(SQUAD_MARINE_1, SQUAD_MARINE_2, SQUAD_MARINE_3, SQUAD_MARINE_4, SQUAD_MARINE_5, SQUAD_MARINE_CRYO) +var/global/list/ROLES_SQUAD_ALL = list(SQUAD_MARINE_1, SQUAD_MARINE_2, SQUAD_MARINE_3, SQUAD_MARINE_4, SQUAD_MARINE_5, SQUAD_MARINE_CRYO, SQUAD_MARINE_INTEL) //Groundside roles var/global/list/ROLES_XENO = list(JOB_XENOMORPH_QUEEN, JOB_XENOMORPH) diff --git a/code/__DEFINES/urls.dm b/code/__DEFINES/urls.dm index 4b7be8f8e093..137095327a2c 100644 --- a/code/__DEFINES/urls.dm +++ b/code/__DEFINES/urls.dm @@ -1,62 +1,7 @@ -// ------ CHANGE LOG ------ // -#define URL_CHANGELOG "https://cm-ss13.com/changelog" - -// ------ ISSUE TRACKER ------ // -#define URL_ISSUE_TRACKER "https://github.com/cmss13-devs/cmss13/issues" - // ------ MISC WIKI LINKS ------ // -#define URL_RULES_PAGE "https://cm-ss13.com/rules" -#define URL_RULES_EORG "https://cm-ss13.com/rules#rule-4-no-griefing" -#define URL_WIKI_LANDING "https://cm-ss13.com/wiki/Main_Page" -#define URL_WIKI_COC "https://cm-ss13.com/wiki/Rank" -#define URL_WIKI_LAW "https://cm-ss13.com/wiki/Marine_Law" -#define URL_WIKI_XENO_QUICKSTART "https://cm-ss13.com/wiki/Xeno_Quickstart_Guide" -#define URL_WIKI_MARINE_QUICKSTART "https://cm-ss13.com/wiki/Marine_Quickstart_Guide" -#define URL_WIKI_MACROS "https://cm-ss13.com/wiki/Macros" -#define URL_WIKI_SOP "https://cm-ss13.com/wiki/Standard_Operating_Procedure" -#define URL_WIKI_CO_RULES "https://cm-ss13.com/wiki/CO_Council_Rulings" -#define URL_WIKI_CONSTRUCTION "https://cm-ss13.com/wiki/Guide_to_construction" -#define URL_WIKI_ENGINEERING "https://cm-ss13.com/wiki/Guide_to_Engineering" -#define URL_WIKI_HACKING "https://cm-ss13.com/wiki/Guide_to_Engineering#Hacking" -#define URL_WIKI_SURGERY "https://cm-ss13.com/wiki/Surgery" -#define URL_WIKI_MEDICAL "https://cm-ss13.com/wiki/Guide_to_Medicine" - -// ------ SPAWN GUIDES------ // -#define URL_WIKI_CO_GUIDE "https://cm-ss13.com/wiki/Commanding_Officer" // Command // -#define URL_WIKI_XO_GUIDE "https://cm-ss13.com/wiki/Executive_Officer" -#define URL_WIKI_SO_GUIDE "https://cm-ss13.com/wiki/Staff_Officer" -#define URL_WIKI_SEA_GUIDE "https://cm-ss13.com/wiki/Senior_Enlisted_Advisor" -#define URL_WIKI_SL_GUIDE "https://cm-ss13.com/wiki/Squad_Leader" -#define URL_WIKI_TL_GUIDE "https://cm-ss13.com/wiki/Squad_Radio_Telephone_Operator" // Squad Roles // -#define URL_WIKI_SPEC_GUIDE "https://cm-ss13.com/wiki/Squad_Specialist" -#define URL_WIKI_SG_GUIDE "https://cm-ss13.com/wiki/Squad_Smartgunner" -#define URL_WIKI_MEDIC_GUIDE "https://cm-ss13.com/wiki/Squad_Hospital_Corpsman" -#define URL_WIKI_COMTECH_GUIDE "https://cm-ss13.com/wiki/Squad_Combat_Technician" -#define URL_WIKI_CMP_GUIDE "https://cm-ss13.com/wiki/Chief_MP" // MP Roles // -#define URL_WIKI_MW_GUIDE "https://cm-ss13.com/wiki/Warden" -#define URL_WIKI_MP_GUIDE "https://cm-ss13.com/wiki/Military_Police" -#define URL_WIKI_ASO_GUIDE "https://cm-ss13.com/wiki/Auxiliary_Support_Officer" // Auxiliary Support -#define URL_WIKI_PO_GUIDE "https://cm-ss13.com/wiki/Pilot_Officer" -#define URL_WIKI_DCC_GUIDE "https://cm-ss13.com/wiki/Dropship_Crew_Chief" -#define URL_WIKI_IO_GUIDE "https://cm-ss13.com/wiki/Intelligence_Officer" -#define URL_WIKI_SYN_GUIDE "https://cm-ss13.com/wiki/Synthetic" -#define URL_WIKI_CE_GUIDE "https://cm-ss13.com/wiki/Chief_Engineer" // Engineering -#define URL_WIKI_OT_GUIDE "https://cm-ss13.com/wiki/Ordnance_Technician" -#define URL_WIKI_MT_GUIDE "https://cm-ss13.com/wiki/Maintenance_Technician" -#define URL_WIKI_CMO_GUIDE "https://cm-ss13.com/wiki/Chief_Medical_Officer" // Medical // -#define URL_WIKI_DOC_GUIDE "https://cm-ss13.com/wiki/Doctor" -#define URL_WIKI_NURSE_GUIDE "https://cm-ss13.com/wiki/Nurse" -#define URL_WIKI_RSR_GUIDE "https://cm-ss13.com/wiki/Researcher" -#define URL_WIKI_RO_GUIDE "https://cm-ss13.com/wiki/Requisitions_Officer" // Supply // -#define URL_WIKI_CT_GUIDE "https://cm-ss13.com/wiki/Cargo_Technician" -#define URL_WIKI_MST_GUIDE "https://cm-ss13.com/wiki/Mess_Technician" -#define URL_WIKI_CL_GUIDE "https://cm-ss13.com/wiki/Corporate_Liaison" // Misc // -#define URL_WIKI_SURV_GUIDE "https://cm-ss13.com/wiki/Survivor" -#define URL_WIKI_WJ_GUIDE "https://cm-ss13.com/wiki/Seegson_Working_Joe_Manual" - -// ------ FORUM LINKS ------ // -#define URL_FORUM "https://forum.cm-ss13.com/" -#define URL_FORUM_APPEALS "https://forum.cm-ss13.com/w/in-game-appeal" -#define URL_FORUM_PLAYER_REPORT "https://forum.cm-ss13.com/w/player-report" -#define URL_FORUM_STAFF_REPORT "https://forum.cm-ss13.com/w/staff-report" -#define URL_QUEEN_GUIDE "https://cm-ss13.com/forums/showthread.php?8404-Ultimate-Queen-Guide-Rip-amp-amp-Tear-(Image-Heavy)" +#define URL_WIKI_LAW "Marine_Law" +#define URL_WIKI_XENO_QUICKSTART "Xeno_Quickstart_Guide" +#define URL_WIKI_MARINE_QUICKSTART "Marine_Quickstart_Guide" +#define URL_WIKI_MACROS "Macros" +#define URL_WIKI_SOP "Standard_Operating_Procedure" +#define URL_WIKI_CO_RULES "CO_Council_Rulings" 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/configuration/configuration.dm b/code/controllers/configuration/configuration.dm index 08de7b5c02ff..e8b010669c0e 100644 --- a/code/controllers/configuration/configuration.dm +++ b/code/controllers/configuration/configuration.dm @@ -58,6 +58,8 @@ if(Master) Master.OnConfigLoad() + SEND_GLOBAL_SIGNAL(COMSIG_GLOB_CONFIG_LOADED) + /datum/controller/configuration/proc/loadmaplist(filename, maptype) log_config("Loading config file [filename]...") diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm index 976256cb6c97..54ec1548c108 100644 --- a/code/controllers/configuration/entries/general.dm +++ b/code/controllers/configuration/entries/general.dm @@ -21,8 +21,14 @@ Basics, the most important. /datum/config_entry/string/wikiurl +/datum/config_entry/string/wikiarticleurl + /datum/config_entry/string/forumurl +/datum/config_entry/string/staffreport + +/datum/config_entry/string/playerreport + /datum/config_entry/string/rulesurl /datum/config_entry/string/githuburl @@ -31,6 +37,8 @@ Basics, the most important. /datum/config_entry/string/banappeals +/datum/config_entry/string/endofroundblurb + /datum/config_entry/string/dburl /// Server to notify of game events diff --git a/code/controllers/subsystem/minimap.dm b/code/controllers/subsystem/minimap.dm index 9df9d2c76f83..24cb49c5ded2 100644 --- a/code/controllers/subsystem/minimap.dm +++ b/code/controllers/subsystem/minimap.dm @@ -443,9 +443,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) @@ -468,7 +468,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 /** @@ -477,7 +477,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/entities/player.dm b/code/datums/entities/player.dm index ed97c4eafaae..febeb1fc73a9 100644 --- a/code/datums/entities/player.dm +++ b/code/datums/entities/player.dm @@ -97,7 +97,7 @@ BSQL_PROTECT_DATUM(/datum/entity/player) if(!is_confidential && note_category == NOTE_ADMIN && owning_client) to_chat_immediate(owning_client, SPAN_WARNING(FONT_SIZE_LARGE("You have been noted by [key_name_admin(admin.mob, FALSE)]."))) to_chat_immediate(owning_client, SPAN_WARNING(FONT_SIZE_BIG("The note is : [sanitize(note_text)]"))) - to_chat_immediate(owning_client, SPAN_WARNING(FONT_SIZE_BIG("If you believe this was filed in error or misplaced, make a staff report at The CM Forums"))) + to_chat_immediate(owning_client, SPAN_WARNING(FONT_SIZE_BIG("If you believe this was filed in error or misplaced, make a staff report at The CM Forums"))) to_chat_immediate(owning_client, SPAN_WARNING(FONT_SIZE_BIG("You can also click the name of the staff member noting you to PM them."))) // create new instance of player_note entity var/datum/entity/player_note/note = DB_ENTITY(/datum/entity/player_note) 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/gamemodes/colonialmarines/xenovsxeno.dm b/code/game/gamemodes/colonialmarines/xenovsxeno.dm index c2bb45d97fc0..5623295f1915 100644 --- a/code/game/gamemodes/colonialmarines/xenovsxeno.dm +++ b/code/game/gamemodes/colonialmarines/xenovsxeno.dm @@ -285,7 +285,7 @@ round_statistics.track_round_end() log_game("Round end result: [round_finished]") to_chat_spaced(world, margin_top = 2, type = MESSAGE_TYPE_SYSTEM, html = SPAN_ROUNDHEADER("|Round Complete|")) - to_chat_spaced(world, type = MESSAGE_TYPE_SYSTEM, html = SPAN_ROUNDBODY("Thus ends the story of the battling hives on [SSmapping.configs[GROUND_MAP].map_name]. [round_finished]\nThe game-mode was: [master_mode]!\nEnd of Round Grief (EORG) is an IMMEDIATE 3 hour ban with no warnings, see rule #4 for more details.")) + to_chat_spaced(world, type = MESSAGE_TYPE_SYSTEM, html = SPAN_ROUNDBODY("Thus ends the story of the battling hives on [SSmapping.configs[GROUND_MAP].map_name]. [round_finished]\nThe game-mode was: [master_mode]!\n[CONFIG_GET(string/endofroundblurb)]")) // for the toolbox /datum/game_mode/xenovs/end_round_message() diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 01209f816538..f6f75c6ba4e0 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -129,7 +129,7 @@ var/global/cas_tracking_id_increment = 0 //this var used to assign unique tracki round_statistics.track_round_end() log_game("Round end result: [round_finished]") to_chat_spaced(world, margin_top = 2, type = MESSAGE_TYPE_SYSTEM, html = SPAN_ROUNDHEADER("|Round Complete|")) - to_chat_spaced(world, type = MESSAGE_TYPE_SYSTEM, html = SPAN_ROUNDBODY("Thus ends the story of the brave men and women of the [MAIN_SHIP_NAME] and their struggle on [SSmapping.configs[GROUND_MAP].map_name].\nThe game-mode was: [master_mode]!\nEnd of Round Grief (EORG) is an IMMEDIATE 3 hour ban with no warnings, see rule #4 for more details.")) + to_chat_spaced(world, type = MESSAGE_TYPE_SYSTEM, html = SPAN_ROUNDBODY("Thus ends the story of the brave men and women of the [MAIN_SHIP_NAME] and their struggle on [SSmapping.configs[GROUND_MAP].map_name].\nThe game-mode was: [master_mode]!\n[CONFIG_GET(string/endofroundblurb)]")) /datum/game_mode/proc/declare_completion() if(round_statistics) diff --git a/code/game/jobs/job/civilians/other/liaison.dm b/code/game/jobs/job/civilians/other/liaison.dm index ba65720b8251..7f73376a05dd 100644 --- a/code/game/jobs/job/civilians/other/liaison.dm +++ b/code/game/jobs/job/civilians/other/liaison.dm @@ -6,7 +6,7 @@ selection_class = "job_cl" flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/liaison - entry_message_body = "As a representative of Weyland-Yutani Corporation, your job requires you to stay in character at all times. You are not required to follow military orders; however, you cannot give military orders. Your primary job is to observe and report back your findings to Weyland-Yutani. Follow regular game rules unless told otherwise by your superiors. Use your office fax machine to communicate with corporate headquarters or to acquire new directives. You may not receive anything back, and this is normal." + entry_message_body = "As a representative of Weyland-Yutani Corporation, your job requires you to stay in character at all times. You are not required to follow military orders; however, you cannot give military orders. Your primary job is to observe and report back your findings to Weyland-Yutani. Follow regular game rules unless told otherwise by your superiors. Use your office fax machine to communicate with corporate headquarters or to acquire new directives. You may not receive anything back, and this is normal." var/mob/living/carbon/human/active_liaison /datum/job/civilian/liaison/generate_entry_conditions(mob/living/liaison, whitelist_status) diff --git a/code/game/jobs/job/civilians/other/mess_seargent.dm b/code/game/jobs/job/civilians/other/mess_seargent.dm index 615df24ecb47..4b1975015a95 100644 --- a/code/game/jobs/job/civilians/other/mess_seargent.dm +++ b/code/game/jobs/job/civilians/other/mess_seargent.dm @@ -6,7 +6,7 @@ flags_startup_parameters = ROLE_ADD_TO_DEFAULT supervisors = "the auxiliary support officer" gear_preset = /datum/equipment_preset/uscm_ship/chef - entry_message_body = "Your job is to service the marines with excellent food, drinks and entertaining the shipside crew when needed. You have a lot of freedom and it is up to you, to decide what to do with it. Good luck!" + entry_message_body = "Your job is to service the marines with excellent food, drinks and entertaining the shipside crew when needed. You have a lot of freedom and it is up to you, to decide what to do with it. Good luck!" /obj/effect/landmark/start/chef name = JOB_MESS_SERGEANT diff --git a/code/game/jobs/job/civilians/support/cmo.dm b/code/game/jobs/job/civilians/support/cmo.dm index 9f3ff20cffb3..8c4690ea2057 100644 --- a/code/game/jobs/job/civilians/support/cmo.dm +++ b/code/game/jobs/job/civilians/support/cmo.dm @@ -6,7 +6,7 @@ selection_class = "job_cmo" flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/uscm_medical/cmo - entry_message_body = "You're a commissioned officer of the USCM. You have authority over everything related to Medbay and Research, only able to be overriden by the XO and CO. You are in charge of medical staff, surgery, chemistry, stimulants and keeping the marines healthy overall." + entry_message_body = "You're a commissioned officer of the USCM. You have authority over everything related to Medbay and Research, only able to be overriden by the XO and CO. You are in charge of medical staff, surgery, chemistry, stimulants and keeping the marines healthy overall." AddTimelock(/datum/job/civilian/professor, list( JOB_MEDIC_ROLES = 10 HOURS diff --git a/code/game/jobs/job/civilians/support/doctor.dm b/code/game/jobs/job/civilians/support/doctor.dm index 587c4727690f..9e0853d96e33 100644 --- a/code/game/jobs/job/civilians/support/doctor.dm +++ b/code/game/jobs/job/civilians/support/doctor.dm @@ -32,9 +32,9 @@ //check what job option you took and generate the corresponding the good texte. /datum/job/civilian/doctor/generate_entry_message(mob/living/carbon/human/H) if(doctor) - . = {"You're a commissioned officer of the USCM, though you are not in the ship's chain of command. You are a doctor and tasked with keeping the marines healthy and strong, usually in the form of surgery. You are a jack of all trades in medicine: you can medicate, perform surgery and produce pharmaceuticals. If you do not know what you are doing, mentorhelp so a mentor can assist you."} + . = {"You're a commissioned officer of the USCM, though you are not in the ship's chain of command. You are a doctor and tasked with keeping the marines healthy and strong, usually in the form of surgery. You are a jack of all trades in medicine: you can medicate, perform surgery and produce pharmaceuticals. If you do not know what you are doing, mentorhelp so a mentor can assist you."} else - . = {"You're a commissioned officer of the USCM, though you are not in the ship's chain of command. You are a surgeon and tasked with keeping the marines healthy and strong, usually in the form of surgery. You are a doctor that specializes in surgery, but you are also very capable in pharmacy and triage. If you do not know what you are doing, mentorhelp so a mentor can assist you."} + . = {"You're a commissioned officer of the USCM, though you are not in the ship's chain of command. You are a surgeon and tasked with keeping the marines healthy and strong, usually in the form of surgery. You are a doctor that specializes in surgery, but you are also very capable in pharmacy and triage. If you do not know what you are doing, mentorhelp so a mentor can assist you."} /datum/job/civilian/doctor/set_spawn_positions(count) spawn_positions = doc_slot_formula(count) diff --git a/code/game/jobs/job/civilians/support/nurse.dm b/code/game/jobs/job/civilians/support/nurse.dm index 034421d799aa..7a0cab16f559 100644 --- a/code/game/jobs/job/civilians/support/nurse.dm +++ b/code/game/jobs/job/civilians/support/nurse.dm @@ -6,7 +6,7 @@ selection_class = "job_doctor" flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/uscm_medical/nurse - entry_message_body = "You are tasked with keeping the Marines healthy and strong. You are also an expert when it comes to medication and treatment, and can do minor surgical procedures. Focus on assisting doctors and triaging wounded marines." + entry_message_body = "You are tasked with keeping the Marines healthy and strong. You are also an expert when it comes to medication and treatment, and can do minor surgical procedures. Focus on assisting doctors and triaging wounded marines." /obj/effect/landmark/start/nurse name = JOB_NURSE diff --git a/code/game/jobs/job/civilians/support/researcher.dm b/code/game/jobs/job/civilians/support/researcher.dm index fd33d1f03f0a..61245c8164ab 100644 --- a/code/game/jobs/job/civilians/support/researcher.dm +++ b/code/game/jobs/job/civilians/support/researcher.dm @@ -10,7 +10,7 @@ selection_class = "job_researcher" flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/uscm_medical/researcher - entry_message_body = "You're a commissioned officer of the USCM, though you are not in the ship's chain of command. You are tasked with researching and developing new medical treatments, helping your fellow doctors, and generally learning new things. Your role involves a lot of roleplaying, but you can perform the function of a regular doctor. Do not hand out things to Marines without getting permission from your supervisor." + entry_message_body = "You're a commissioned officer of the USCM, though you are not in the ship's chain of command. You are tasked with researching and developing new medical treatments, helping your fellow doctors, and generally learning new things. Your role involves a lot of roleplaying, but you can perform the function of a regular doctor. Do not hand out things to Marines without getting permission from your supervisor." /datum/job/civilian/researcher/set_spawn_positions(count) spawn_positions = rsc_slot_formula(count) diff --git a/code/game/jobs/job/civilians/support/synthetic.dm b/code/game/jobs/job/civilians/support/synthetic.dm index 10ab895cf276..3e02385bc96c 100644 --- a/code/game/jobs/job/civilians/support/synthetic.dm +++ b/code/game/jobs/job/civilians/support/synthetic.dm @@ -9,7 +9,7 @@ flags_startup_parameters = ROLE_ADD_TO_DEFAULT|ROLE_ADMIN_NOTIFY|ROLE_WHITELISTED|ROLE_CUSTOM_SPAWN flags_whitelist = WHITELIST_SYNTHETIC gear_preset = /datum/equipment_preset/synth/uscm - entry_message_body = "You are a Synthetic! You are held to a higher standard and are required to obey not only the Server Rules but Marine Law and Synthetic Rules. Failure to do so may result in your White-list Removal. Your primary job is to support and assist all USCM Departments and Personnel on-board. In addition, being a Synthetic gives you knowledge in every field and specialization possible on-board the ship. As a Synthetic you answer to the acting commanding officer. Special circumstances may change this!" + entry_message_body = "You are a Synthetic! You are held to a higher standard and are required to obey not only the Server Rules but Marine Law and Synthetic Rules. Failure to do so may result in your White-list Removal. Your primary job is to support and assist all USCM Departments and Personnel on-board. In addition, being a Synthetic gives you knowledge in every field and specialization possible on-board the ship. As a Synthetic you answer to the acting commanding officer. Special circumstances may change this!" /datum/job/civilian/synthetic/New() . = ..() diff --git a/code/game/jobs/job/civilians/support/working_joe.dm b/code/game/jobs/job/civilians/support/working_joe.dm index 00a848cce427..bc8f8c439900 100644 --- a/code/game/jobs/job/civilians/support/working_joe.dm +++ b/code/game/jobs/job/civilians/support/working_joe.dm @@ -42,9 +42,9 @@ /datum/job/civilian/working_joe/generate_entry_message(mob/living/carbon/human/H) if(standard) - . = {"You are a Working Joe. You are held to a higher standard and are required to obey not only the Server Rules but Marine Law, Roleplay Expectations and Synthetic Rules. Your primary task is to maintain the cleanliness of the ship, putting things in their proper place. Alternatively, your primary task may be to assist with manual labor in limited capacity, or clerical duties. Your capacities are limited, but you have all the equipment you need, and the central AI has a plan! Stay in character at all times. Use the APOLLO link to communicate with your uplink!"} + . = {"You are a Working Joe. You are held to a higher standard and are required to obey not only the Server Rules but Marine Law, Roleplay Expectations and Synthetic Rules. Your primary task is to maintain the cleanliness of the ship, putting things in their proper place. Alternatively, your primary task may be to assist with manual labor in limited capacity, or clerical duties. Your capacities are limited, but you have all the equipment you need, and the central AI has a plan! Stay in character at all times. Use the APOLLO link to communicate with your uplink!"} else - . = {"You are a Working Joe for Hazardous Environments! You are held to a higher standard and are required to obey not only the Server Rules but Marine Law, Roleplay Expectations and Synthetic Rules. You are a variant of the Working Joe built for tougher environments and fulfill the specific duty of dangerous repairs or maintenance. Your primary task is to maintain the reactor, SMES and AI Core. Your secondary task is to respond to hazardous environments, such as an atmospheric breach or biohazard spill, and assist with repairs when ordered to by either an AI Mainframe, or a Commisioned Officer. You should not be seen outside of emergencies besides in Engineering and the AI Core! Stay in character at all times. Use the APOLLO link to communicate with your uplink!"} + . = {"You are a Working Joe for Hazardous Environments! You are held to a higher standard and are required to obey not only the Server Rules but Marine Law, Roleplay Expectations and Synthetic Rules. You are a variant of the Working Joe built for tougher environments and fulfill the specific duty of dangerous repairs or maintenance. Your primary task is to maintain the reactor, SMES and AI Core. Your secondary task is to respond to hazardous environments, such as an atmospheric breach or biohazard spill, and assist with repairs when ordered to by either an AI Mainframe, or a Commisioned Officer. You should not be seen outside of emergencies besides in Engineering and the AI Core! Stay in character at all times. Use the APOLLO link to communicate with your uplink!"} /datum/job/civilian/working_joe/announce_entry_message(mob/living/carbon/human/H) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(ares_apollo_talk), "[H.real_name] has been activated."), 1.5 SECONDS) diff --git a/code/game/jobs/job/command/auxiliary/auxiliary_support_officer.dm b/code/game/jobs/job/command/auxiliary/auxiliary_support_officer.dm index 262ba271edbf..e5155c949a32 100644 --- a/code/game/jobs/job/command/auxiliary/auxiliary_support_officer.dm +++ b/code/game/jobs/job/command/auxiliary/auxiliary_support_officer.dm @@ -5,7 +5,7 @@ allow_additional = TRUE flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/auxiliary_officer - entry_message_body = "Your job is to oversee the hangar crew, the intel officers, the engineering department, and requisition department. You have many responsibilities and a few plates to keep spinning but your subordinates are mostly self-reliant. Assist where you can and make sure command personnel are confident the auxiliary departments are operating at peak efficiency." + entry_message_body = "Your job is to oversee the hangar crew, the intel officers, the engineering department, and requisition department. You have many responsibilities and a few plates to keep spinning but your subordinates are mostly self-reliant. Assist where you can and make sure command personnel are confident the auxiliary departments are operating at peak efficiency." AddTimelock(/datum/job/command/auxiliary_officer, list( JOB_SQUAD_ROLES = 5 HOURS, diff --git a/code/game/jobs/job/command/auxiliary/crew_chief.dm b/code/game/jobs/job/command/auxiliary/crew_chief.dm index 5f846bf6581e..c8dfe2a8eb37 100644 --- a/code/game/jobs/job/command/auxiliary/crew_chief.dm +++ b/code/game/jobs/job/command/auxiliary/crew_chief.dm @@ -7,7 +7,7 @@ supervisors = "the pilot officers" flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/dcc - entry_message_body = "Your job is to assist the pilot officer maintain the ship's dropship. You have authority only on the dropship, but you are expected to maintain order, as not to disrupt the pilot." + entry_message_body = "Your job is to assist the pilot officer maintain the ship's dropship. You have authority only on the dropship, but you are expected to maintain order, as not to disrupt the pilot." AddTimelock(/datum/job/command/crew_chief, list( JOB_SQUAD_ROLES = 5 HOURS diff --git a/code/game/jobs/job/command/auxiliary/intel.dm b/code/game/jobs/job/command/auxiliary/intel.dm index 0c6e80069a68..8d83d49ed143 100644 --- a/code/game/jobs/job/command/auxiliary/intel.dm +++ b/code/game/jobs/job/command/auxiliary/intel.dm @@ -8,7 +8,7 @@ supervisors = "the auxiliary support officer" flags_startup_parameters = ROLE_ADD_TO_DEFAULT|ROLE_ADD_TO_SQUAD gear_preset = "USCM Intelligence Officer (IO) (Cryo)" - entry_message_body = "Your job is to assist the marines in collecting intelligence related to the current operation to better inform command of their opposition. You are in charge of gathering any data disks, folders, and notes you may find on the operational grounds and decrypt them to grant the USCM additional resources." + entry_message_body = "Your job is to assist the marines in collecting intelligence related to the current operation to better inform command of their opposition. You are in charge of gathering any data disks, folders, and notes you may find on the operational grounds and decrypt them to grant the USCM additional resources." /datum/job/command/intel/set_spawn_positions(count) spawn_positions = int_slot_formula(count) diff --git a/code/game/jobs/job/command/auxiliary/pilot.dm b/code/game/jobs/job/command/auxiliary/pilot.dm index 57495fe8be28..a75846f92919 100644 --- a/code/game/jobs/job/command/auxiliary/pilot.dm +++ b/code/game/jobs/job/command/auxiliary/pilot.dm @@ -7,10 +7,11 @@ supervisors = "the auxiliary support officer" flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/po - entry_message_body = "Your job is to fly, protect, and maintain the ship's dropship. While you are an officer, your authority is limited to the dropship, where you have authority over the enlisted personnel. If you are not piloting, there is an autopilot fallback for command, but don't leave the dropship without reason." + entry_message_body = "Your job is to fly, protect, and maintain the ship's dropship. While you are an officer, your authority is limited to the dropship, where you have authority over the enlisted personnel. If you are not piloting, there is an autopilot fallback for command, but don't leave the dropship without reason." +// Dropship Roles is both PO and DCC combined to not force people to backtrack AddTimelock(/datum/job/command/pilot, list( - JOB_SQUAD_ROLES = 5 HOURS + JOB_DROPSHIP_ROLES = 2 HOURS )) /obj/effect/landmark/start/pilot diff --git a/code/game/jobs/job/command/auxiliary/senior.dm b/code/game/jobs/job/command/auxiliary/senior.dm index 68b9a99e4c4f..5e9b7caf1f10 100644 --- a/code/game/jobs/job/command/auxiliary/senior.dm +++ b/code/game/jobs/job/command/auxiliary/senior.dm @@ -3,10 +3,13 @@ flags_startup_parameters = ROLE_ADD_TO_DEFAULT|ROLE_ADMIN_NOTIFY|ROLE_WHITELISTED flags_whitelist = WHITELIST_MENTOR gear_preset = /datum/equipment_preset/uscm_ship/sea - entry_message_body = "You are held to a higher standard and are required to obey not only the Server Rules but Marine Law and Standard Operating Procedure. Failure to do so may result in your Mentorship Removal. Your primary job is to teach others the game and its mechanics, and offer advice to all USCM Departments and Personnel on-board." job_options = list("Gunnery Sergeant" = "GySGT", "Master Sergeant" = "MSgt", "First Sergeant" = "1Sgt", "Master Gunnery Sergeant" = "MGySgt", "Sergeant Major" = "SgtMaj") +/datum/job/command/senior/on_config_load() + entry_message_body = "You are held to a higher standard and are required to obey not only the Server Rules but Marine Law and Standard Operating Procedure. Failure to do so may result in your Mentorship Removal. Your primary job is to teach others the game and its mechanics, and offer advice to all USCM Departments and Personnel on-board." + return ..() + /datum/job/command/senior/announce_entry_message(mob/living/carbon/human/H) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(all_hands_on_deck), "Attention all hands, [H.get_paygrade(0)] [H.real_name] on deck!"), 1.5 SECONDS) return ..() diff --git a/code/game/jobs/job/command/cic/captain.dm b/code/game/jobs/job/command/cic/captain.dm index 4049554f7799..98db585e1d07 100644 --- a/code/game/jobs/job/command/cic/captain.dm +++ b/code/game/jobs/job/command/cic/captain.dm @@ -16,7 +16,7 @@ ) /datum/job/command/commander/generate_entry_message() - entry_message_body = "You are the Commanding Officer of the [MAIN_SHIP_NAME] as well as the operation. Your goal is to lead the Marines on their mission as well as protect and command the ship and her crew. Your job involves heavy roleplay and requires you to behave like a high-ranking officer and to stay in character at all times. As the Commanding Officer your only superior is High Command itself. You must abide by the Commanding Officer Code of Conduct. Failure to do so may result in punitive action against you. Godspeed." + entry_message_body = "You are the Commanding Officer of the [MAIN_SHIP_NAME] as well as the operation. Your goal is to lead the Marines on their mission as well as protect and command the ship and her crew. Your job involves heavy roleplay and requires you to behave like a high-ranking officer and to stay in character at all times. As the Commanding Officer your only superior is High Command itself. You must abide by the Commanding Officer Code of Conduct. Failure to do so may result in punitive action against you. Godspeed." return ..() /datum/job/command/commander/get_whitelist_status(list/roles_whitelist, client/player) diff --git a/code/game/jobs/job/command/cic/executive.dm b/code/game/jobs/job/command/cic/executive.dm index cc9b4f65e624..f717a03e1229 100644 --- a/code/game/jobs/job/command/cic/executive.dm +++ b/code/game/jobs/job/command/cic/executive.dm @@ -5,7 +5,7 @@ gear_preset = /datum/equipment_preset/uscm_ship/xo /datum/job/command/executive/generate_entry_message(mob/living/carbon/human/H) - entry_message_body = "You are second in command aboard the [MAIN_SHIP_NAME], and are in next in the chain of command after the Commanding Officer. Where applicable, you must abide by the Commanding Officer Code of Conduct. You may need to fill in for other duties if areas are understaffed, and you are given access to do so. Make the USCM proud!" + entry_message_body = "You are second in command aboard the [MAIN_SHIP_NAME], and are in next in the chain of command after the Commanding Officer. Where applicable, you must abide by the Commanding Officer Code of Conduct. You may need to fill in for other duties if areas are understaffed, and you are given access to do so. Make the USCM proud!" return ..() /datum/job/command/executive/generate_entry_conditions(mob/living/M, whitelist_status) diff --git a/code/game/jobs/job/command/cic/staffofficer.dm b/code/game/jobs/job/command/cic/staffofficer.dm index 82a537dc83f6..fff51624aa4b 100644 --- a/code/game/jobs/job/command/cic/staffofficer.dm +++ b/code/game/jobs/job/command/cic/staffofficer.dm @@ -6,7 +6,7 @@ scaled = FALSE flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/so - entry_message_body = "Your job is to monitor the Marines, man the CIC, and listen to your superior officers. You are in charge of logistics and the overwatch system. You are also in line to take command after other eligible superior commissioned officers." + entry_message_body = "Your job is to monitor the Marines, man the CIC, and listen to your superior officers. You are in charge of logistics and the overwatch system. You are also in line to take command after other eligible superior commissioned officers." /datum/job/command/bridge/set_spawn_positions(count) spawn_positions = so_slot_formula(count) diff --git a/code/game/jobs/job/command/command.dm b/code/game/jobs/job/command/command.dm index b95ddfe9d33c..d430352d6e83 100644 --- a/code/game/jobs/job/command/command.dm +++ b/code/game/jobs/job/command/command.dm @@ -26,4 +26,11 @@ /datum/timelock/human/get_role_requirement(client/C) return time_required - C.get_total_human_playtime() + +/datum/timelock/dropship + name = "Dropship Roles" + +/datum/timelock/dropship/New(name, time_required, list/roles) + . = ..() + src.roles = JOB_DROPSHIP_ROLES_LIST diff --git a/code/game/jobs/job/command/police/chief_police.dm b/code/game/jobs/job/command/police/chief_police.dm index 60bc564af3b1..b76943c4d0ac 100644 --- a/code/game/jobs/job/command/police/chief_police.dm +++ b/code/game/jobs/job/command/police/chief_police.dm @@ -4,7 +4,7 @@ selection_class = "job_cmp" flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/uscm_police/cmp - entry_message_body = "You are held by a higher standard and are required to obey not only the server rules but the Marine Law. Failure to do so may result in a job ban or server ban. You lead the Military Police, ensure your officers maintain peace and stability aboard the ship. Marines can get rowdy after a few weeks of cryosleep! In addition, you are tasked with the security of high-ranking personnel, including the command staff. Keep them safe!" + entry_message_body = "You are held by a higher standard and are required to obey not only the server rules but the Marine Law. Failure to do so may result in a job ban or server ban. You lead the Military Police, ensure your officers maintain peace and stability aboard the ship. Marines can get rowdy after a few weeks of cryosleep! In addition, you are tasked with the security of high-ranking personnel, including the command staff. Keep them safe!" AddTimelock(/datum/job/command/warrant, list( JOB_POLICE_ROLES = 15 HOURS, diff --git a/code/game/jobs/job/command/police/police.dm b/code/game/jobs/job/command/police/police.dm index 48cd9b33e99c..7285c5b278b1 100644 --- a/code/game/jobs/job/command/police/police.dm +++ b/code/game/jobs/job/command/police/police.dm @@ -8,7 +8,7 @@ selection_class = "job_mp" flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/uscm_police/mp - entry_message_body = "You are held by a higher standard and are required to obey not only the server rules but the Marine Law. Failure to do so may result in a job ban or server ban. Your primary job is to maintain peace and stability aboard the ship. Marines can get rowdy after a few weeks of cryosleep! In addition, you are tasked with the security of high-ranking personnel, including the command staff. Keep them safe!" + entry_message_body = "You are held by a higher standard and are required to obey not only the server rules but the Marine Law. Failure to do so may result in a job ban or server ban. Your primary job is to maintain peace and stability aboard the ship. Marines can get rowdy after a few weeks of cryosleep! In addition, you are tasked with the security of high-ranking personnel, including the command staff. Keep them safe!" /datum/job/command/police/set_spawn_positions(count) spawn_positions = mp_slot_formula(count) diff --git a/code/game/jobs/job/command/police/warden.dm b/code/game/jobs/job/command/police/warden.dm index 851b43debd3c..55cbea975401 100644 --- a/code/game/jobs/job/command/police/warden.dm +++ b/code/game/jobs/job/command/police/warden.dm @@ -5,7 +5,7 @@ flags_startup_parameters = ROLE_ADD_TO_DEFAULT supervisors = "the Chief MP" gear_preset = /datum/equipment_preset/uscm_ship/uscm_police/warden - entry_message_body = "You are held by a higher standard and are required to obey not only the server rules but the Marine Law. Failure to do so may result in a job ban or server ban. Your primary job is to maintain peace and stability aboard the ship. Marines can get rowdy after a few weeks of cryosleep! In addition, you are tasked with the mainting security records and overwatching any prisoners in Brig." + entry_message_body = "You are held by a higher standard and are required to obey not only the server rules but the Marine Law. Failure to do so may result in a job ban or server ban. Your primary job is to maintain peace and stability aboard the ship. Marines can get rowdy after a few weeks of cryosleep! In addition, you are tasked with the mainting security records and overwatching any prisoners in Brig." AddTimelock(/datum/job/command/warden, list( JOB_POLICE_ROLES = 10 HOURS diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index 0785fc5c337f..0d68d23e5524 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -43,8 +43,25 @@ /datum/job/New() . = ..() + RegisterSignal(SSdcs, COMSIG_GLOB_CONFIG_LOADED, PROC_REF(on_config_load)) + minimum_playtimes = setup_requirements(list()) - if(!disp_title) disp_title = title + if(!disp_title) + disp_title = title + +/datum/job/proc/on_config_load() + if(entry_message_body) + entry_message_body = replace_placeholders(entry_message_body) + +/datum/job/proc/replace_placeholders(replacement_string) + replacement_string = replacetextEx(replacement_string, "%WIKIURL%", generate_wiki_link()) + replacement_string = replacetextEx(replacement_string, "%LAWURL%", "[CONFIG_GET(string/wikiarticleurl)]/[URL_WIKI_LAW]") + return replacement_string + +/datum/job/proc/generate_wiki_link() + if(!CONFIG_GET(string/wikiarticleurl)) + return "" + return "[CONFIG_GET(string/wikiarticleurl)]/[replacetext(title, " ", "_")]" /datum/job/proc/get_whitelist_status(list/roles_whitelist, client/player) if(!roles_whitelist) diff --git a/code/game/jobs/job/logistics/cargo/cargo_tech.dm b/code/game/jobs/job/logistics/cargo/cargo_tech.dm index 8041e8c82c75..3b588022bd97 100644 --- a/code/game/jobs/job/logistics/cargo/cargo_tech.dm +++ b/code/game/jobs/job/logistics/cargo/cargo_tech.dm @@ -8,7 +8,7 @@ selection_class = "job_ct" flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/cargo - entry_message_body = "Your job is to dispense supplies to the marines, including weapon attachments. Stay in your department when possible to ensure the marines have full access to the supplies they may require. Listen to the radio in case someone requests a supply drop via the overwatch system." + entry_message_body = "Your job is to dispense supplies to the marines, including weapon attachments. Stay in your department when possible to ensure the marines have full access to the supplies they may require. Listen to the radio in case someone requests a supply drop via the overwatch system." /datum/job/logistics/cargo/set_spawn_positions(count) spawn_positions = ct_slot_formula(count) diff --git a/code/game/jobs/job/logistics/cargo/chief_req.dm b/code/game/jobs/job/logistics/cargo/chief_req.dm index 3b6fb7262a80..76b7e98f2db8 100644 --- a/code/game/jobs/job/logistics/cargo/chief_req.dm +++ b/code/game/jobs/job/logistics/cargo/chief_req.dm @@ -3,7 +3,7 @@ selection_class = "job_qm" flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/qm - entry_message_body = "Your job is to dispense supplies to the marines, including weapon attachments. Your cargo techs can help you out, but you have final say in your department. Make sure they're not goofing off. While you may request paperwork for supplies, do not go out of your way to screw with marines, unless you want to get deposed. A happy ship is a well-functioning ship." + entry_message_body = "Your job is to dispense supplies to the marines, including weapon attachments. Your cargo techs can help you out, but you have final say in your department. Make sure they're not goofing off. While you may request paperwork for supplies, do not go out of your way to screw with marines, unless you want to get deposed. A happy ship is a well-functioning ship." AddTimelock(/datum/job/logistics/requisition, list( JOB_REQUISITION_ROLES = 10 HOURS, diff --git a/code/game/jobs/job/logistics/engi/chief_engineer.dm b/code/game/jobs/job/logistics/engi/chief_engineer.dm index 9db14540e74a..3a15c8632953 100644 --- a/code/game/jobs/job/logistics/engi/chief_engineer.dm +++ b/code/game/jobs/job/logistics/engi/chief_engineer.dm @@ -3,7 +3,7 @@ selection_class = "job_ce" flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/chief_engineer - entry_message_body = "Your job is to maintain your department and keep your technicians in check. You are responsible for engineering, power, ordnance, and the orbital cannon. Should the commanding and executive officer be unavailable, you are next in the chain of command." + entry_message_body = "Your job is to maintain your department and keep your technicians in check. You are responsible for engineering, power, ordnance, and the orbital cannon. Should the commanding and executive officer be unavailable, you are next in the chain of command." AddTimelock(/datum/job/logistics/engineering, list( JOB_ENGINEER_ROLES = 10 HOURS, diff --git a/code/game/jobs/job/logistics/engi/maint_tech.dm b/code/game/jobs/job/logistics/engi/maint_tech.dm index 7aa380a0bd79..8562408360d7 100644 --- a/code/game/jobs/job/logistics/engi/maint_tech.dm +++ b/code/game/jobs/job/logistics/engi/maint_tech.dm @@ -6,7 +6,7 @@ selection_class = "job_ot" flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/maint - entry_message_body = "Your job is to maintain the integrity of the ship, including the orbital cannon. You remain one of the more flexible roles on the ship and as such may receive other menial tasks from your superiors." + entry_message_body = "Your job is to maintain the integrity of the ship, including the orbital cannon. You remain one of the more flexible roles on the ship and as such may receive other menial tasks from your superiors." /obj/effect/landmark/start/maint name = JOB_MAINT_TECH diff --git a/code/game/jobs/job/logistics/engi/ordnance_tech.dm b/code/game/jobs/job/logistics/engi/ordnance_tech.dm index e0df5f49a546..bed0acf15887 100644 --- a/code/game/jobs/job/logistics/engi/ordnance_tech.dm +++ b/code/game/jobs/job/logistics/engi/ordnance_tech.dm @@ -9,7 +9,7 @@ selection_class = "job_ot" flags_startup_parameters = ROLE_ADD_TO_DEFAULT gear_preset = /datum/equipment_preset/uscm_ship/ordn - entry_message_body = "Your job is to maintain the integrity of the USCM weapons, munitions and equipment, including the orbital cannon. You can use the workshop in the portside hangar to construct new armaments for the marines. However you remain one of the more flexible roles on the ship and as such may receive other menial tasks from your superiors." + entry_message_body = "Your job is to maintain the integrity of the USCM weapons, munitions and equipment, including the orbital cannon. You can use the workshop in the portside hangar to construct new armaments for the marines. However you remain one of the more flexible roles on the ship and as such may receive other menial tasks from your superiors." /datum/job/logistics/otech/set_spawn_positions(count) spawn_positions = ot_slot_formula(count) diff --git a/code/game/jobs/job/marine/squad/engineer.dm b/code/game/jobs/job/marine/squad/engineer.dm index 7645d95948f3..00a6b91dcffd 100644 --- a/code/game/jobs/job/marine/squad/engineer.dm +++ b/code/game/jobs/job/marine/squad/engineer.dm @@ -5,7 +5,7 @@ allow_additional = 1 flags_startup_parameters = ROLE_ADD_TO_DEFAULT|ROLE_ADD_TO_SQUAD gear_preset = /datum/equipment_preset/uscm/engineer - entry_message_body = "You have the equipment and skill to build fortifications, reroute power lines, and bunker down. Your squaddies will look to you when it comes to construction in the field of battle." + entry_message_body = "You have the equipment and skill to build fortifications, reroute power lines, and bunker down. Your squaddies will look to you when it comes to construction in the field of battle." /datum/job/marine/engineer/set_spawn_positions(count) for(var/datum/squad/sq in RoleAuthority.squads) diff --git a/code/game/jobs/job/marine/squad/leader.dm b/code/game/jobs/job/marine/squad/leader.dm index aa2173d173d0..960a80d5f659 100644 --- a/code/game/jobs/job/marine/squad/leader.dm +++ b/code/game/jobs/job/marine/squad/leader.dm @@ -5,7 +5,7 @@ supervisors = "the acting commanding officer" flags_startup_parameters = ROLE_ADD_TO_DEFAULT|ROLE_ADD_TO_SQUAD gear_preset = /datum/equipment_preset/uscm/leader - entry_message_body = "You are responsible for the men and women of your squad. Make sure they are on task, working together, and communicating. You are also in charge of communicating with command and letting them know about the situation first hand. Keep out of harm's way." + entry_message_body = "You are responsible for the men and women of your squad. Make sure they are on task, working together, and communicating. You are also in charge of communicating with command and letting them know about the situation first hand. Keep out of harm's way." /datum/job/marine/leader/whiskey title = JOB_WO_SQUAD_LEADER diff --git a/code/game/jobs/job/marine/squad/medic.dm b/code/game/jobs/job/marine/squad/medic.dm index 637567d47d4d..cdbd74acefde 100644 --- a/code/game/jobs/job/marine/squad/medic.dm +++ b/code/game/jobs/job/marine/squad/medic.dm @@ -5,7 +5,7 @@ allow_additional = 1 flags_startup_parameters = ROLE_ADD_TO_DEFAULT|ROLE_ADD_TO_SQUAD gear_preset = /datum/equipment_preset/uscm/medic - entry_message_body = "You tend the wounds of your squad mates and make sure they are healthy and active. You may not be a fully-fledged doctor, but you stand between life and death when it matters." + entry_message_body = "You tend the wounds of your squad mates and make sure they are healthy and active. You may not be a fully-fledged doctor, but you stand between life and death when it matters." /datum/job/marine/medic/set_spawn_positions(count) for(var/datum/squad/sq in RoleAuthority.squads) diff --git a/code/game/jobs/job/marine/squad/smartgunner.dm b/code/game/jobs/job/marine/squad/smartgunner.dm index 5753434e62ee..aacc562f921b 100644 --- a/code/game/jobs/job/marine/squad/smartgunner.dm +++ b/code/game/jobs/job/marine/squad/smartgunner.dm @@ -6,7 +6,7 @@ scaled = 1 flags_startup_parameters = ROLE_ADD_TO_DEFAULT|ROLE_ADD_TO_SQUAD gear_preset = /datum/equipment_preset/uscm/sg - entry_message_body = "You are the smartgunner. Your task is to provide heavy weapons support." + entry_message_body = "You are the smartgunner. Your task is to provide heavy weapons support." /datum/job/marine/smartgunner/set_spawn_positions(count) spawn_positions = sg_slot_formula(count) diff --git a/code/game/jobs/job/marine/squad/specialist.dm b/code/game/jobs/job/marine/squad/specialist.dm index 539d3a158690..42ee69ef2d5c 100644 --- a/code/game/jobs/job/marine/squad/specialist.dm +++ b/code/game/jobs/job/marine/squad/specialist.dm @@ -6,7 +6,7 @@ scaled = 1 flags_startup_parameters = ROLE_ADD_TO_DEFAULT|ROLE_ADD_TO_SQUAD gear_preset = /datum/equipment_preset/uscm/spec - entry_message_body = "You are the very rare and valuable weapon expert, trained to use special equipment. You can serve a variety of roles, so choose carefully." + entry_message_body = "You are the very rare and valuable weapon expert, trained to use special equipment. You can serve a variety of roles, so choose carefully." /datum/job/marine/specialist/set_spawn_positions(count) spawn_positions = spec_slot_formula(count) diff --git a/code/game/jobs/job/marine/squad/tl.dm b/code/game/jobs/job/marine/squad/tl.dm index f6c58cce3e0d..ebebf360e830 100644 --- a/code/game/jobs/job/marine/squad/tl.dm +++ b/code/game/jobs/job/marine/squad/tl.dm @@ -5,7 +5,7 @@ allow_additional = 1 flags_startup_parameters = ROLE_ADD_TO_DEFAULT|ROLE_ADD_TO_SQUAD gear_preset = /datum/equipment_preset/uscm/tl - entry_message_body = "You are the Team Leader.Your task is to assist the squad leader in leading the squad as well as utilize ordnance such as orbital bombardments, CAS, and mortar as well as coordinating resupply with Requisitions and CIC. If the squad leader dies, you are expected to lead in their place." + entry_message_body = "You are the Team Leader.Your task is to assist the squad leader in leading the squad as well as utilize ordnance such as orbital bombardments, CAS, and mortar as well as coordinating resupply with Requisitions and CIC. If the squad leader dies, you are expected to lead in their place." /datum/job/marine/tl/generate_entry_conditions(mob/living/carbon/human/spawning_human) . = ..() 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/pouch.dm b/code/game/objects/items/storage/pouch.dm index 01b9506f073b..a443a3b27cd0 100644 --- a/code/game/objects/items/storage/pouch.dm +++ b/code/game/objects/items/storage/pouch.dm @@ -1052,7 +1052,10 @@ to_chat(usr, SPAN_WARNING("There is no container inside this pouch!")) return - usr.put_in_any_hand_if_possible(inner, disable_warning = TRUE) + var/had_empty_hand = usr.put_in_any_hand_if_possible(inner, disable_warning = TRUE) + if(!had_empty_hand) + usr.drop_inv_item_on_ground(inner) + inner = null update_icon() 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/items/tools/flame_tools.dm b/code/game/objects/items/tools/flame_tools.dm index 862906ec1971..130bd567098b 100644 --- a/code/game/objects/items/tools/flame_tools.dm +++ b/code/game/objects/items/tools/flame_tools.dm @@ -366,7 +366,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM if(user == M) user.visible_message(SPAN_NOTICE(type_butt ? "[user] calmly drops and treads on the lit [src], putting it out instantly." : "[user] puts out \the [src].")) else - to_chat(M, SPAN_NOTICE("Your [src] goes out.")) + to_chat(M, SPAN_NOTICE("Your [src.name] goes out.")) STOP_PROCESSING(SSobj, src) if(type_butt) var/turf/T = get_turf(src) 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/autoreply.dm b/code/modules/admin/autoreply.dm index a90e21b7f311..0b1d16c41009 100644 --- a/code/modules/admin/autoreply.dm +++ b/code/modules/admin/autoreply.dm @@ -20,15 +20,21 @@ GLOBAL_REFERENCE_LIST_INDEXED(adminreplies, /datum/autoreply/admin, title) /datum/autoreply/admin/bug title = "Bug Report" - message = "Please report all bugs on our Github. Administrative staff are unable to fix most bugs on a round to round basis and only round critical bugs, or exploits, should be ahelped." + +ON_CONFIG_LOAD(/datum/autoreply/admin/bug) + message = "Please report all bugs on our Github. Administrative staff are unable to fix most bugs on a round to round basis and only round critical bugs, or exploits, should be ahelped." /datum/autoreply/admin/marine title = "Marine Guide" - message = "Your action can be answered by the Marine Quickstart Guide. If anything is unclear or you have another question please make a new mentorhelp or ahelp about it." + +ON_CONFIG_LOAD(/datum/autoreply/admin/marine) + message = "Your action can be answered by the Marine Quickstart Guide. If anything is unclear or you have another question please make a new mentorhelp or ahelp about it." /datum/autoreply/admin/xeno title = "Xeno Guide" - message = "Your action can be answered by the Xeno Quickstart Guide. If anything is unclear or you have another question please make a new mentorhelp or ahelp about it." + +ON_CONFIG_LOAD(/datum/autoreply/admin/xeno) + message = "Your action can be answered by the Xeno Quickstart Guide. If anything is unclear or you have another question please make a new mentorhelp or ahelp about it." /datum/autoreply/admin/changelog title = "Changelog" @@ -44,5 +50,6 @@ GLOBAL_REFERENCE_LIST_INDEXED(adminreplies, /datum/autoreply/admin, title) /datum/autoreply/admin/whitelist title = "Whitelist Issue" - message = "Staff are unable to handle most whitelist rulebreaks in-game, please make a player report on the forums, here." +ON_CONFIG_LOAD(/datum/autoreply/admin/whitelist) + message = "Staff are unable to handle most whitelist rulebreaks in-game, please make a player report on the forums, here." 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 97e751b5c43f..316ffa4e8df5 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -752,7 +752,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]" @@ -782,7 +782,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/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 44fb92959d92..4dcefc21b3b6 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -1324,6 +1324,10 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list( var/active = FALSE var/det_time = 40 +/obj/item/clothing/head/helmet/marine/specialist/hefa/Initialize(mapload, list/new_protection) + . = ..() + pockets.bypass_w_limit = list(/obj/item/explosive/grenade/high_explosive/frag) + /obj/item/clothing/head/helmet/marine/specialist/hefa/proc/apply_explosion_overlay() var/obj/effect/overlay/O = new /obj/effect/overlay(loc) O.name = "grenade" 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 e2a0ce4ccf07..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") @@ -1599,6 +1599,7 @@ specialty = "HEFA Knight" icon_state = "hefadier" flags_atom = NO_NAME_OVERRIDE|NO_SNOW_TYPE + flags_item = NO_CRYO_STORE flags_marine_armor = ARMOR_LAMP_OVERLAY armor_bullet = CLOTHING_ARMOR_VERYHIGH armor_melee = CLOTHING_ARMOR_VERYHIGH 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/cm_marines/smartgun_mount.dm b/code/modules/cm_marines/smartgun_mount.dm index 0066e96bb783..5fa83d1fa06b 100644 --- a/code/modules/cm_marines/smartgun_mount.dm +++ b/code/modules/cm_marines/smartgun_mount.dm @@ -379,9 +379,6 @@ to_chat(user, "You're securing the M56D into place...") var/disassemble_time = 30 - if(skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) - disassemble_time = 5 - if(do_after(user, disassemble_time * user.get_skill_duration_multiplier(SKILL_ENGINEER), INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD)) playsound(src.loc, 'sound/items/Deconstruct.ogg', 25, 1) user.visible_message(SPAN_NOTICE("[user] screws the M56D into the mount."),SPAN_NOTICE("You finalize the M56D heavy machine gun.")) @@ -571,9 +568,6 @@ to_chat(user, "You begin disassembling [src]...") var/disassemble_time = 30 - if(skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) - disassemble_time = 5 - if(do_after(user, disassemble_time * user.get_skill_duration_multiplier(SKILL_ENGINEER), INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD)) user.visible_message(SPAN_NOTICE(" [user] disassembles [src]! "),SPAN_NOTICE(" You disassemble [src]!")) playsound(src.loc, 'sound/items/Screwdriver.ogg', 25, 1) @@ -1032,6 +1026,9 @@ /obj/structure/machinery/m56d_hmg/proc/start_fire(datum/source, atom/object, turf/location, control, params, bypass_checks = FALSE) SIGNAL_HANDLER + if (burst_firing) + return + var/list/modifiers = params2list(params) if(modifiers["shift"] || modifiers["middle"] || modifiers["right"]) return @@ -1060,7 +1057,8 @@ reset_fire() display_ammo() return - SEND_SIGNAL(src, COMSIG_GUN_FIRE) + else if(gun_firemode != GUN_FIREMODE_SEMIAUTO) + SEND_SIGNAL(src, COMSIG_GUN_FIRE) /// setter for fire_delay /obj/structure/machinery/m56d_hmg/proc/set_fire_delay(value) 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/fun.dm b/code/modules/gear_presets/fun.dm index 8eacbb8161d2..e3511722af36 100644 --- a/code/modules/gear_presets/fun.dm +++ b/code/modules/gear_presets/fun.dm @@ -185,7 +185,7 @@ new_human.equip_to_slot_or_del(M, WEAR_BODY) var/shoes_success = 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/combat(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/specialist/hefa(new_human), WEAR_HEAD) + var/helmet_success = new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/specialist/hefa(new_human), WEAR_HEAD) new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/ert(new_human), WEAR_L_STORE) var/jacket_success = new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/M3G/hefa(new_human), WEAR_JACKET) var/satchel_success = new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/satchel(new_human), WEAR_BACK) @@ -232,6 +232,12 @@ for(var/i in 1 to W.hold.storage_slots) new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/high_explosive/frag(new_human.back), WEAR_IN_ACCESSORY) + // Helmet + if(helmet_success) + var/obj/item/clothing/head/helmet/marine/hefa_helmet = new_human.head + for(var/i in 1 to hefa_helmet.pockets.storage_slots) + new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/high_explosive/frag(new_human.head), WEAR_IN_HELMET) + /datum/equipment_preset/fun/santa name = "Fun - Santa" paygrade = "C" 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/survivors.dm b/code/modules/gear_presets/survivors.dm index 919e67e7cbf9..2910f2f7a2b5 100644 --- a/code/modules/gear_presets/survivors.dm +++ b/code/modules/gear_presets/survivors.dm @@ -1589,18 +1589,13 @@ languages = list(LANGUAGE_RUSSIAN, LANGUAGE_GERMAN, LANGUAGE_CHINESE) faction = FACTION_UPP faction_group = list(FACTION_UPP, FACTION_SURVIVOR) - role_comm_title = "UPP 173RD RECON" + role_comm_title = "173/RECON" idtype = /obj/item/card/id/dogtag flags = EQUIPMENT_PRESET_EXTRA - uses_special_name = TRUE access = list( ACCESS_CIVILIAN_PUBLIC, ) -/datum/equipment_preset/survivor/upp/load_name(mob/living/carbon/human/new_human, randomise) - var/random_name = capitalize(pick(new_human.gender == MALE ? first_names_male_upp : first_names_female_upp)) + " " + capitalize(pick(last_names_upp)) - new_human.change_real_name(new_human, random_name) - /datum/equipment_preset/survivor/upp/load_gear(mob/living/carbon/human/new_human) var/obj/item/clothing/under/marine/veteran/UPP/uniform = new() var/random_number = rand(1,2) @@ -1726,7 +1721,7 @@ assignment = JOB_UPP_LEADER rank = JOB_UPP_LEADER languages = list(LANGUAGE_RUSSIAN, LANGUAGE_ENGLISH, LANGUAGE_GERMAN, LANGUAGE_CHINESE) - role_comm_title = "UPP 173Rd RECON SL" + role_comm_title = "173/RECON SL" skills = /datum/skills/military/survivor/upp_sl /datum/equipment_preset/survivor/upp/squad_leader/load_gear(mob/living/carbon/human/new_human) 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/mentor/mentorhelp.dm b/code/modules/mentor/mentorhelp.dm index 9aaf1cae517b..7746e90d960d 100644 --- a/code/modules/mentor/mentorhelp.dm +++ b/code/modules/mentor/mentorhelp.dm @@ -329,11 +329,11 @@ if("L: Discord") msg += "You can join our Discord server by using this link!" if("L: Xeno Quickstart Guide") - msg += "Your answer can be found on the Xeno Quickstart Guide on our wiki. Check it out here." + msg += "Your answer can be found on the Xeno Quickstart Guide on our wiki. Check it out here." if("L: Marine Quickstart Guide") - msg += "Your answer can be found on the Marine Quickstart Guide on our wiki. Check it out here." + msg += "Your answer can be found on the Marine Quickstart Guide on our wiki. Check it out here." if("L: Current Map") - msg += "If you need a map overview of the current round, use Current Map verb in OOC tab to check name of the map. Then open our wiki front page and look for the map overview in the 'Maps' section. If the map is not listed, it's a new or rare map and the overview hasn't been finished yet." + msg += "If you need a map overview of the current round, use Current Map verb in OOC tab to check name of the map. Then open our wiki front page and look for the map overview in the 'Maps' section. If the map is not listed, it's a new or rare map and the overview hasn't been finished yet." if("A: No plasma regen") msg += "If you have low/no plasma regen, it's most likely because you are off weeds or are currently using a passive ability, such as the Runner's 'Hide' or emitting a pheromone." if("A: Devour as Xeno") @@ -351,9 +351,9 @@ if("L: Leaving the server") msg += "If you need to leave the server as a marine, either go to cryo or ask someone to cryo you before leaving. If you are a xenomorph, find a safe place to rest and ghost before leaving, that will instantly unlock your xeno for observers to join." if("M: Macros") - msg += "This guide explains how to set up macros including examples of most common and useful ones." + msg += "This guide explains how to set up macros including examples of most common and useful ones." if("C: Changelog") - msg += "The answer to your question can be found in the changelog. Click the changelog button at the top-right of the screen to view it in-game, or visit changelog page on our wiki instead." + msg += "The answer to your question can be found in the changelog. Click the changelog button at the top-right of the screen to view it in-game." if("H: Clear Cache") msg += "In order to clear cache, you need to click on gear icon located in upper-right corner of your BYOND client and select preferences. Switch to Games tab and click Clear Cache button. In some cases you need to manually delete cache. To do that, select Advanced tab and click Open User Directory and delete \"cache\" folder there." if("O: Combat Click-Drag Override") 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/castes/Facehugger.dm b/code/modules/mob/living/carbon/xenomorph/castes/Facehugger.dm index 4e5cce0c6c30..c9ceaaa85cfb 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Facehugger.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Facehugger.dm @@ -67,9 +67,13 @@ PF.flags_can_pass_all = PASS_ALL^PASS_OVER_THROW_ITEM /mob/living/carbon/xenomorph/facehugger/Life(delta_time) - if(stat != DEAD && !lying && !(mutation_type == FACEHUGGER_WATCHER) && !(locate(/obj/effect/alien/weeds) in get_turf(src))) + if(stat == DEAD) + return ..() + + if(!lying && !(mutation_type == FACEHUGGER_WATCHER) && !(locate(/obj/effect/alien/weeds) in get_turf(src))) adjustBruteLoss(1) return ..() + if(!client && !aghosted && away_timer > XENO_FACEHUGGER_LEAVE_TIMER) // Become a npc once again new /obj/item/clothing/mask/facehugger(loc, hivenumber) 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 efd05f15c269..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 @@ -410,6 +407,10 @@ var/global/list/limb_types_by_name = list( if(SKILL_ENGINEER) if(skillcheck(src, SKILL_ENGINEER, SKILL_ENGINEER_MASTER)) return DURATION_MULTIPLIER_TIER_3 + else if(skillcheck(src, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) + return DURATION_MULTIPLIER_TIER_2 + else if(skillcheck(src, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) + return DURATION_MULTIPLIER_TIER_1 // Construction if(SKILL_CONSTRUCTION) if(skillcheck(src, SKILL_CONSTRUCTION, SKILL_CONSTRUCTION_MASTER)) 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/ammo_datums.dm b/code/modules/projectiles/ammo_datums.dm index 449ce574eb2c..1bb1083a9d4f 100644 --- a/code/modules/projectiles/ammo_datums.dm +++ b/code/modules/projectiles/ammo_datums.dm @@ -2475,7 +2475,13 @@ flags_ammo_behavior = AMMO_IGNORE_RESIST damage = 55 - penetration = 50 + penetration = ARMOR_PENETRATION_TIER_10 + +/datum/ammo/energy/yautja/rifle/bolt/on_hit_mob(mob/hit_mob, obj/projectile/hit_projectile) + if(isxeno(hit_mob)) + var/mob/living/carbon/xenomorph/xeno = hit_mob + xeno.apply_damage(damage * 0.75, BURN) + xeno.interference = 30 /* //====== diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 88250e6a77ea..88f6e3fb2f5d 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -1109,20 +1109,24 @@ and you're good to go. if(PB_burst_bullets_fired) //Has a burst been carried over from a PB? PB_burst_bullets_fired = 0 //Don't need this anymore. The torch is passed. + var/fired_by_akimbo = FALSE + if(dual_wield) + fired_by_akimbo = TRUE + //Dual wielding. Do we have a gun in the other hand and is it the same category? var/obj/item/weapon/gun/akimbo = user.get_inactive_hand() if(!reflex && !dual_wield && user) if(istype(akimbo) && akimbo.gun_category == gun_category && !(akimbo.flags_gun_features & GUN_WIELDED_FIRING_ONLY)) dual_wield = TRUE //increases recoil, increases scatter, and reduces accuracy. - var/fire_return = handle_fire(target, user, params, reflex, dual_wield, check_for_attachment_fire, akimbo) + var/fire_return = handle_fire(target, user, params, reflex, dual_wield, check_for_attachment_fire, akimbo, fired_by_akimbo) if(!fire_return) return fire_return flags_gun_features &= ~GUN_BURST_FIRING // We always want to turn off bursting when we're done, mainly for when we break early mid-burstfire. return AUTOFIRE_CONTINUE -/obj/item/weapon/gun/proc/handle_fire(atom/target, mob/living/user, params, reflex = FALSE, dual_wield, check_for_attachment_fire, akimbo) +/obj/item/weapon/gun/proc/handle_fire(atom/target, mob/living/user, params, reflex = FALSE, dual_wield, check_for_attachment_fire, akimbo, fired_by_akimbo) var/turf/curloc = get_turf(user) //In case the target or we are expired. var/turf/targloc = get_turf(target) @@ -1209,7 +1213,7 @@ and you're good to go. shots_fired++ - if(dual_wield) + if(dual_wield && !fired_by_akimbo) if(user?.client?.prefs?.toggle_prefs & TOGGLE_ALTERNATING_DUAL_WIELD) user.swap_hand() else @@ -1352,6 +1356,10 @@ and you're good to go. else active_attachable.activate_attachment(src, null, TRUE)//No way. + var/fired_by_akimbo = FALSE + if(dual_wield) + fired_by_akimbo = TRUE + //Dual wielding. Do we have a gun in the other hand and is it the same category? var/obj/item/weapon/gun/akimbo = user.get_inactive_hand() if(!dual_wield && user) @@ -1447,7 +1455,7 @@ and you're good to go. SEND_SIGNAL(user, COMSIG_MOB_FIRED_GUN, src) - if(dual_wield) + if(dual_wield && !fired_by_akimbo) if(user?.client?.prefs?.toggle_prefs & TOGGLE_ALTERNATING_DUAL_WIELD) user.swap_hand() else 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 new file mode 100644 index 000000000000..04f165f2bbef --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4222.yml @@ -0,0 +1,4 @@ +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-4320.yml b/html/changelogs/AutoChangeLog-pr-4320.yml new file mode 100644 index 000000000000..dd3a9c86f926 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4320.yml @@ -0,0 +1,11 @@ +author: "CapCamIII, AmoryBlaine" +delete-after: True +changes: + - 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" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4380.yml b/html/changelogs/AutoChangeLog-pr-4380.yml new file mode 100644 index 000000000000..667b19cfac8d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4380.yml @@ -0,0 +1,6 @@ +author: "CapCamIII" +delete-after: True +changes: + - 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" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4410.yml b/html/changelogs/AutoChangeLog-pr-4410.yml deleted file mode 100644 index 917a1aaace36..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4410.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Zonespace27" -delete-after: True -changes: - - balance: "Cloaked mobs no longer give off visible messages" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4411.yml b/html/changelogs/AutoChangeLog-pr-4411.yml new file mode 100644 index 000000000000..91f0f2cac947 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4411.yml @@ -0,0 +1,5 @@ +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 new file mode 100644 index 000000000000..a84fef90dd84 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4418.yml @@ -0,0 +1,5 @@ +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-4456.yml b/html/changelogs/AutoChangeLog-pr-4456.yml new file mode 100644 index 000000000000..fb24f1693efe --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4456.yml @@ -0,0 +1,7 @@ +author: "Zonespace27" +delete-after: True +changes: + - 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" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4458.yml b/html/changelogs/AutoChangeLog-pr-4458.yml new file mode 100644 index 000000000000..3cb5a179bf11 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4458.yml @@ -0,0 +1,4 @@ +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-4461.yml b/html/changelogs/AutoChangeLog-pr-4461.yml new file mode 100644 index 000000000000..494797593857 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4461.yml @@ -0,0 +1,5 @@ +author: "Steelpoint" +delete-after: True +changes: + - 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." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4463.yml b/html/changelogs/AutoChangeLog-pr-4463.yml new file mode 100644 index 000000000000..36380568ebd4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4463.yml @@ -0,0 +1,7 @@ +author: "Morrow" +delete-after: True +changes: + - 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" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4465.yml b/html/changelogs/AutoChangeLog-pr-4465.yml new file mode 100644 index 000000000000..340654480622 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4465.yml @@ -0,0 +1,4 @@ +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-4467.yml b/html/changelogs/AutoChangeLog-pr-4467.yml deleted file mode 100644 index 0b58dc4188e6..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4467.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Steelpoint" -delete-after: True -changes: - - rscadd: "Synthetics may now vend biohazard suits for personal use. Synth compliant." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4469.yml b/html/changelogs/AutoChangeLog-pr-4469.yml deleted file mode 100644 index 50e824d10e9f..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4469.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "c4xmaniac2" -delete-after: True -changes: - - balance: "Comms areas around the east/west rivers expanded for easier sieges and weedable now." - - maptweak: "LV Comms now always spawn in Tcomms and one either on the east or west river" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4487.yml b/html/changelogs/AutoChangeLog-pr-4487.yml new file mode 100644 index 000000000000..15a34fd04de3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4487.yml @@ -0,0 +1,4 @@ +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 new file mode 100644 index 000000000000..c569ff5e6250 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4488.yml @@ -0,0 +1,4 @@ +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 new file mode 100644 index 000000000000..968951eaacfb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4489.yml @@ -0,0 +1,4 @@ +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 new file mode 100644 index 000000000000..9e24becf0ca0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4490.yml @@ -0,0 +1,4 @@ +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 new file mode 100644 index 000000000000..143791dd7db7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4491.yml @@ -0,0 +1,4 @@ +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 new file mode 100644 index 000000000000..d9c902131457 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4503.yml @@ -0,0 +1,4 @@ +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 new file mode 100644 index 000000000000..5efe4580a9f7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4508.yml @@ -0,0 +1,4 @@ +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 new file mode 100644 index 000000000000..6a050918f065 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4509.yml @@ -0,0 +1,4 @@ +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 d49755a6d3a2..ea6f57a4b490 100644 --- a/html/changelogs/archive/2023-09.yml +++ b/html/changelogs/archive/2023-09.yml @@ -323,3 +323,13 @@ - rscadd: Added the ability for the IMP Ammo Rack to hold folding barricades. Zonespace27: - balance: Specialists now have separate pools of points for ammo and utility. +2023-09-25: + Steelpoint: + - rscadd: Synthetics may now vend biohazard suits for personal use. Synth compliant. + Zonespace27: + - balance: Cloaked mobs no longer give off visible messages + c4xmaniac2: + - balance: Comms areas around the east/west rivers expanded for easier sieges and + weedable now. + - maptweak: LV Comms now always spawn in Tcomms and one either on the east or west + river 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/interface/interface.dm b/interface/interface.dm index b309e852b468..a37ab648b7f5 100644 --- a/interface/interface.dm +++ b/interface/interface.dm @@ -69,7 +69,7 @@ if(tgui_alert(src, "This will open the GitHub in your browser. Are you sure?", "Confirm", list("Yes", "No")) != "Yes") return - src << link(URL_ISSUE_TRACKER) + src << link(CONFIG_GET(string/githuburl)) return /client/verb/set_fps() diff --git a/maps/map_files/DesertDam/Desert_Dam.dmm b/maps/map_files/DesertDam/Desert_Dam.dmm index 66e91ebc2505..ed7688070a2f 100644 --- a/maps/map_files/DesertDam/Desert_Dam.dmm +++ b/maps/map_files/DesertDam/Desert_Dam.dmm @@ -712,6 +712,7 @@ /turf/open/desert/dirt, /area/desert_dam/exterior/valley/valley_labs) "acq" = ( +/obj/structure/tunnel, /turf/open/desert/dirt{ icon_state = "rock1" }, @@ -61278,6 +61279,10 @@ icon_state = "cement_sunbleached13" }, /area/desert_dam/exterior/valley/valley_hydro) +"hyH" = ( +/obj/structure/tunnel, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/valley_telecoms) "hzg" = ( /obj/effect/decal/sand_overlay/sand2, /obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall, @@ -61854,6 +61859,12 @@ icon_state = "delivery" }, /area/desert_dam/exterior/telecomm/lz1_south) +"jxN" = ( +/obj/structure/tunnel, +/turf/open/desert/dirt{ + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/exterior/valley/valley_crashsite) "jAr" = ( /obj/structure/closet/crate/hydroponics/prespawned, /obj/effect/landmark/objective_landmark/close, @@ -62155,6 +62166,12 @@ /obj/structure/blocker/forcefield/multitile_vehicles, /turf/open/desert/dirt, /area/desert_dam/interior/caves/central_caves) +"kQd" = ( +/obj/structure/tunnel, +/turf/open/desert/rock/deep{ + icon_state = "rock3" + }, +/area/desert_dam/interior/caves/east_caves) "kRX" = ( /obj/structure/surface/table, /obj/item/storage/fancy/vials/random, @@ -63992,6 +64009,12 @@ icon_state = "cement_sunbleached18" }, /area/desert_dam/exterior/valley/south_valley_dam) +"ruJ" = ( +/obj/structure/tunnel, +/turf/open/desert/dirt{ + icon_state = "rock1" + }, +/area/desert_dam/exterior/valley/valley_medical) "ruS" = ( /turf/open/desert/dirt, /area/desert_dam/exterior/telecomm/lz1_valley) @@ -64092,6 +64115,12 @@ "rHw" = ( /turf/open/floor/plating, /area/desert_dam/exterior/telecomm/lz2_containers) +"rIY" = ( +/obj/structure/tunnel, +/turf/open/desert/dirt{ + icon_state = "rock1" + }, +/area/desert_dam/exterior/valley/valley_hydro) "rJA" = ( /obj/structure/lz_sign/dam_sign, /turf/open/desert/dirt{ @@ -65131,6 +65160,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/asphalt, /area/desert_dam/exterior/valley/valley_hydro) +"vph" = ( +/obj/structure/tunnel, +/turf/open/desert/dirt{ + dir = 4; + icon_state = "desert_transition_edge1" + }, +/area/desert_dam/exterior/valley/south_valley_dam) "vpn" = ( /obj/structure/machinery/landinglight/ds2/delayone{ dir = 8 @@ -65272,6 +65308,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/asphalt, /area/desert_dam/exterior/valley/valley_hydro) +"vHx" = ( +/obj/structure/tunnel, +/turf/open/desert/dirt{ + icon_state = "rock1" + }, +/area/desert_dam/exterior/valley/valley_civilian) "vHQ" = ( /turf/open/gm/empty, /area/shuttle/trijent_shuttle/omega) @@ -65678,6 +65720,11 @@ /obj/structure/flora/grass/desert/lightgrass_5, /turf/open/desert/dirt, /area/desert_dam/exterior/valley/valley_hydro) +"xec" = ( +/obj/structure/flora/grass/desert/lightgrass_1, +/obj/structure/tunnel, +/turf/open/desert/dirt, +/area/desert_dam/exterior/valley/valley_civilian) "xgA" = ( /obj/structure/flora/grass/tallgrass/desert/corner{ dir = 5 @@ -69526,7 +69573,7 @@ ceA aSI chG ceA -ceA +hyH acs aWc aWF @@ -88683,7 +88730,7 @@ bLr dTs dTs nmr -iwh +vph pvs dTs dTs @@ -94137,7 +94184,7 @@ dTs dTs dTs dTs -dNp +rIY cMl dNS dNS @@ -104714,7 +104761,7 @@ dTs dTs dTs dTs -cuw +vHx cwo cux cmH @@ -108079,7 +108126,7 @@ dTs dTs dTs dTs -agD +jxN adA aEZ aFi @@ -110720,7 +110767,7 @@ civ cdA cdw aOG -cgc +ruJ dTs dTs dTs @@ -119446,7 +119493,7 @@ clZ crW cWV xOb -cpa +xec aVd bby bvw @@ -120211,7 +120258,7 @@ dTs dTs dTs acY -acY +kQd dTs dTs dTs diff --git a/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm b/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm index eb65ff56ff4f..120a30286fb6 100644 --- a/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm +++ b/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm @@ -9362,6 +9362,13 @@ icon_state = "bluefull" }, /area/fiorina/station/power_ring) +"fHy" = ( +/obj/structure/tunnel, +/turf/open/organic/grass{ + desc = "It'll get in your shoes no matter what you do."; + name = "astroturf" + }, +/area/fiorina/station/central_ring) "fHB" = ( /obj/structure/monorail{ name = "launch track" @@ -12398,6 +12405,12 @@ icon_state = "darkbrown2" }, /area/fiorina/tumor/aux_engi) +"hwE" = ( +/obj/structure/tunnel/maint_tunnel, +/turf/open/floor/prison{ + icon_state = "darkpurplefull2" + }, +/area/fiorina/tumor/servers) "hxg" = ( /turf/open/floor/prison{ dir = 1; @@ -12759,6 +12772,13 @@ icon_state = "blue" }, /area/fiorina/station/power_ring) +"hIR" = ( +/obj/structure/tunnel, +/turf/open/organic/grass{ + desc = "It'll get in your shoes no matter what you do."; + name = "astroturf" + }, +/area/fiorina/station/civres_blue) "hJc" = ( /obj/structure/machinery/light/double/blue, /turf/open/floor/prison{ @@ -13325,6 +13345,13 @@ "idE" = ( /turf/open/floor/prison, /area/fiorina/station/medbay) +"idO" = ( +/obj/structure/tunnel/maint_tunnel, +/turf/open/floor/prison{ + dir = 10; + icon_state = "greenblue" + }, +/area/fiorina/station/botany) "idT" = ( /obj/structure/barricade/wooden{ dir = 4; @@ -21666,6 +21693,12 @@ icon_state = "sterile_white" }, /area/fiorina/station/medbay) +"mYx" = ( +/obj/structure/tunnel/maint_tunnel, +/turf/open/floor/prison{ + icon_state = "floor_plate" + }, +/area/fiorina/tumor/ice_lab) "mYN" = ( /obj/structure/platform_decoration{ dir = 8 @@ -23647,6 +23680,10 @@ }, /turf/open/floor/plating/prison, /area/fiorina/station/telecomm/lz2_maint) +"olB" = ( +/obj/structure/tunnel/maint_tunnel, +/turf/open/floor/plating/prison, +/area/fiorina/tumor/aux_engi) "olC" = ( /turf/open/floor/prison{ dir = 8; @@ -36900,6 +36937,10 @@ }, /turf/open/floor/prison, /area/fiorina/station/disco) +"wAM" = ( +/obj/structure/tunnel/maint_tunnel, +/turf/open/floor/plating/prison, +/area/fiorina/station/civres_blue) "wAR" = ( /obj/structure/filingcabinet, /obj/structure/filingcabinet{ @@ -37911,6 +37952,13 @@ icon_state = "greenfull" }, /area/fiorina/station/transit_hub) +"xii" = ( +/obj/structure/tunnel, +/turf/open/organic/grass{ + desc = "It'll get in your shoes no matter what you do."; + name = "astroturf" + }, +/area/fiorina/tumor/fiberbush) "xiF" = ( /obj/structure/largecrate/random/case/double, /obj/structure/machinery/light/double/blue{ @@ -45767,7 +45815,7 @@ qPb qPb qPb qPb -qPb +xii kbT qPb qPb @@ -47940,7 +47988,7 @@ knh hjP pWO tuk -rGq +olB jlk baC baC @@ -51415,7 +51463,7 @@ njx njx njx njx -lwK +hwE jXz pPG jXz @@ -59060,7 +59108,7 @@ fGb qdJ apf ybg -kOB +hIR gyB kOB kOB @@ -60787,7 +60835,7 @@ rja apf esS apf -apf +wAM rja obT gma @@ -60857,7 +60905,7 @@ kul kul kul kul -wOR +idO gEx bQM bQM @@ -68574,7 +68622,7 @@ phz phz phz phz -ruy +mYx azZ tOr ezJ @@ -69275,7 +69323,7 @@ fPZ jEC dGw tvI -tvI +fHy tvI tvI tvI @@ -75588,7 +75636,7 @@ lAh lAh lAh lAh -ruy +mYx csp xjK xjK diff --git a/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm b/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm index 8612fbbbd3a9..dac318453cdf 100644 --- a/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm +++ b/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm @@ -40710,7 +40710,6 @@ /area/lv522/indoors/b_block/bridge) "pXH" = ( /obj/effect/alien/weeds/node/alpha, -/obj/effect/alien/egg/alpha, /turf/open/auto_turf/sand_white/layer0, /area/lv522/outdoors/w_rockies) "pYf" = ( 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) => {